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 - metrics - download
Index: T f

⟦f65a9d266⟧ TextFile

    Length: 2545 (0x9f1)
    Types: TextFile
    Names: »filter.c«

Derivation

└─⟦db229ac7e⟧ Bits:30007240 EUUGD20: SSBA 1.2 / AFW Benchmarks
    └─⟦this⟧ »EUUGD20/AFUU-ssba1.21/ssba1.21E/musbus/filter.c« 
    └─⟦this⟧ »EUUGD20/AFUU-ssba1.21/ssba1.21F/musbus/filter.c« 

TextFile

/*
	Function:    filter "Filter Command Line Files In Classic UNIX Style"
	Created:     Sat Aug 10 21:57:12 EDT 1985
	By:          Gary Perlman (Wang Institute, Tyngsboro, MA 01879 USA)
*/

#include <stdio.h>

/* LINTLIBRARY */
static
void
errmsg (pgm, file, errorno, dflt)
char	*pgm;       /* name of the program running */
char	*file;      /* file operand to be mentioned (if any) */
int 	errorno;    /* system errno or some bad value */
char	*dflt;      /* default message for bad error numbers */
	{
	extern	char *sys_errlist[];  /* list of error messages */
	extern	int sys_nerr;         /* number of error messages */

	fputs (pgm, stderr);
	putc (':', stderr);
	putc (' ', stderr);
	if (errorno > 0 && errorno < sys_nerr)
		fputs (sys_errlist[errorno], stderr);
	else
		fputs (dflt, stderr);
	if (file)
		{
		putc (' ', stderr);
		putc ('\'', stderr);
		fputs (file, stderr);
		putc ('\'', stderr);
		}
	putc ('\n', stderr);
	}

#define	isstdin(file) (file[0] == '-' && file[1] == '\0')

int
filter (argc, argv, curarg, process)
int 	argc;          /* real number of command line args */
char	**argv;        /* command line argument pointer */
int 	curarg;        /* first argv to filter */
int 	(*process) (); /* status process (char *name, FILE *ioptr) */
	{
	int 	status = 0;         /* return status of this function */
	int 	arg;                /* loop index variable */
	char	*file;              /* name of the current file */
	char	*pgm = argv[0];     /* name of the program */
	FILE	*ioptr;             /* file pointer for opening */
	int 	countstdin = 0;     /* number of times stdin is processed */
	extern	int errno;          /* system error number */

	if (curarg == argc)
		status += ((*process) ("-", stdin));
	else
		{
		/* first check to make sure all files can be opened to read */
		for (arg = curarg; arg < argc; arg++)
			{
			file = argv[arg];
			if (isstdin (file))
				countstdin++;
			else if (access (file, 4))
				{
				errmsg (pgm, file, errno, "Can't access file");
				status++;
				}
			}
		if (countstdin > 1)
			{
			errmsg (pgm, NULL, -1, "Can only read standard input once");
			status++;
			}
		if (status == 0)
			for (arg = curarg; arg < argc; arg++)
				{
				file = argv[arg];
				if (isstdin (file))
					status += ((*process) (file, stdin) != 0);
				else if (ioptr = fopen (file, "r"))
					{
					status += ((*process) (file, ioptr) != 0);
					(void) fclose (ioptr);
					}
				else
					{
					errmsg (pgm, file, errno, "Can't open file");
					status++;
					}
				}
		}
	return (status);
	}