DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ T r

⟦a8f91f9cb⟧ TextFile

    Length: 1621 (0x655)
    Types: TextFile
    Names: »reverse.c«

Derivation

└─⟦87ddcff64⟧ Bits:30001253 CPHDIST85 Tape, 1985 Autumn Conference Copenhagen
    └─ ⟦this⟧ »cph85dist/stat/src/reverse.c« 

TextFile

#include "unixstat.h"
PGM(reverse,Reverse Lines/Fields/Characters,5.0,1985)
/* Copyright (c) 1982 Gary Perlman (see Copyright file) */

#define MAXLINES  1000
#define	MAXFIELDS  100
#define	MAXLEN     100
char	*lptr[MAXLINES];
int	Rlines, Rchars, Rfields;

char *
revchar (s)
char	*s;
	{
	char	buf[BUFSIZ];
	char	*ptr = buf;
	char	*sptr = s;
	while (*sptr) sptr++;
	while (sptr >= s)
		*ptr++ = *--sptr;
	*ptr = NULL;
	return (strcpy (s, buf));
	}

char *
revfield (line)
char	*line;
	{
	char	array[MAXFIELDS][MAXLEN];
	int	ncols, ii;
	char	*ptr = line;
	if ((ncols = sstrings (line, array, MAXFIELDS, MAXLEN)) > MAXFIELDS)
		ERRMANY (fields, MAXFIELDS)
	for (ii = ncols-1; ii >= 0; ii--)
		{
		strcpy (ptr, array[ii]);
		while (*ptr) ptr++;
		if (ii != 0) *ptr++ = '\t';
		}
	*ptr = NULL;
	return (line);
	}

initial (argc, argv)
char	**argv;
	{
	int 	errflg = 0;
	extern	int optind;
	int 	C;
	while ((C = getopt (argc, argv, "cfl")) != EOF)
		switch (C)
			{
			case 'f': Rfields = 1; break;
			case 'l': Rlines = 1; break;
			case 'c': Rchars = 1; break;
			default:
				errflg++;
			}
	if (errflg) USAGE ([-cfl])
	ERROPT (optind)
	checkstdin (Argv0);
	}

main (argc, argv) char **argv;
	{
	char	line[BUFSIZ];
	int	nlines = 0;
	char	*ptr;
	ARGV0;
	if (argc == 1) Rlines = 1;
	initial (argc, argv);
	while (gets (line))
		{
		ptr = line;
		if (Rchars) ptr = revchar (ptr);
		if (Rfields) ptr = revfield (ptr);
		if (Rlines)
			if (++nlines == MAXLINES)
				ERRMANY (lines, MAXLINES)
			else lptr[nlines-1] = strdup (ptr);
		else puts (ptr);
		}
	if (Rlines)
		while (nlines > 0)
			puts (lptr[--nlines]);
	exit (0);
	}