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 p

⟦b6ec2d5ad⟧ TextFile

    Length: 3638 (0xe36)
    Types: TextFile
    Names: »process.c«

Derivation

└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
    └─ ⟦this⟧ »EUUGD11/euug-87hel/sec1/news/src/process.c« 

TextFile

/*
 * This software is Copyright (c) 1986 by Rick Adams.
 *
 * Permission is hereby granted to copy, reproduce, redistribute or
 * otherwise use this software as long as: there is no monetary
 * profit gained specifically from the use or reproduction or this
 * software, it is not sold, rented, traded or otherwise marketed, and
 * this copyright notice is included prominently in any copy
 * made.
 *
 * The author make no claims as to the fitness or correctness of
 * this software for any use whatsoever, and it is provided as is. 
 * Any use of this software is at the user's own risk.
 *
 * process - process options for readnews/vnews
 */

#ifdef SCCSID
static char	*SccsId = "@(#)process.c	2.17	12/16/86";
#endif /* SCCSID */

#include "rparams.h"

char	coptbuf[LBUFLEN], datebuf[LBUFLEN];

#define OPTION	0	/* pick up an option string */
#define STRING	1	/* pick up a string of arguments */

struct optable *optpt, options[] = { /*
optlet	filchar	flag	newstate oldmode	newmode	buf	*/
'p',	'\0',	FALSE,	OPTION,	UNKNOWN,	UNKNOWN,(char *)NULL,	
't',	'\0',	FALSE,	STRING,	ANY,		UNKNOWN,header.title,	
'a',	' ',	FALSE,	STRING,	ANY,		UNKNOWN,datebuf,
'n',   NGDELIM,	FALSE,	STRING,	ANY,		UNKNOWN,header.nbuf,
'c',	' ',	FALSE,	STRING,	UNKNOWN,	UNKNOWN,coptbuf,	
'l',	' ',	FALSE,	OPTION,	UNKNOWN,	UNKNOWN,(char *)NULL,
'r',	'\0',	FALSE,	OPTION,	ANY,		UNKNOWN,(char *)NULL,
's',   NGDELIM,	FALSE,	STRING,	ANY,		UNKNOWN,header.nbuf,
'x',	'\0',	FALSE,	OPTION,	ANY,		UNKNOWN,(char *)NULL,
'h',	'\0',	FALSE,	OPTION,	ANY,		UNKNOWN,(char *)NULL,
#ifdef TMAIL
'M',	'\0',	FALSE,	OPTION,	UNKNOWN,	MAIL,	(char *)NULL,
#else /* !TMAIL */
'\377',	'\0',	FALSE,	OPTION,	UNKNOWN,	UNKNOWN,(char *)NULL,
#endif /* !TMAIL */
'f',	'\0',	FALSE,	OPTION,	ANY,		UNKNOWN,(char *)NULL,
'u',	'\0',	FALSE,	OPTION,	ANY,		UNKNOWN,(char *)NULL,
'e',	'\0',	FALSE,	OPTION,	ANY,		UNKNOWN,(char *)NULL,
'K',	'\0',	FALSE,	OPTION,	ANY,		UNKNOWN,(char *)NULL,
'\0',	'\0',	0,	0,	0,		0,	(char *)NULL
};

process(argc,argv)
register int argc;
register char **argv;
{
	register int state = STRING;
	register char *ptr = header.nbuf;
	char filchar = NGDELIM;
	int len = LBUFLEN, tlen;

	/* loop once per arg. */

	if (argc > 1 && **argv != '-')
		nflag = TRUE;

	while (--argc) {
	    if (state == OPTION) {
		if (**argv != '-') {
			xerror("Bad option string \"%s\"", *argv);
		}
		while (*++*argv != '\0') {
			for (optpt = options; optpt->optlet != '\0'; ++optpt) {
				if (optpt->optlet == **argv)
					goto found;
			}
			/* unknown option letter */
#ifdef TMAIL
			fprintf(stderr, "Usage: %s [ -a [ date ]] [ -n newsgroups ] [ -t titles ] [ -lprxhfuMK ]\n", Progname);
#else /* !TMAIL */
			fprintf(stderr, "Usage: %s [ -a [ date ]] [ -n newsgroups ] [ -t titles ] [ -lprxhfuK ]\n", Progname);
#endif /* !TMAIL */
			fprintf(stderr, "\t[ -c [ ``mailer'' ]]\n\n");
			fprintf(stderr, "       %s -s\n", Progname);
			exit(1);

		    found:;
			if (mode != UNKNOWN && (mode&optpt->oldmode) == 0) {
				xerror("Bad %c option", **argv);
			}
			if (mode == UNKNOWN)
				mode = optpt->newmode;
			filchar = optpt->filchar;
			optpt->flag = TRUE;
			state = optpt->newstate;
			ptr = optpt->buf;
			len = LBUFLEN;
		}

		argv++;		/* done with this option arg. */

	    } else {

		/*
		 * Pick up a piece of a string and put it into
		 * the appropriate buffer.
		 */
		if (**argv == '-') {
			state = OPTION;
			argc++;	/* uncount this arg. */
			continue;
		}

		if ((tlen = strlen(*argv)) >= len)
			xerror("Argument string too long");
		strcpy(ptr, *argv++);
		ptr += tlen;
		if (*(ptr-1) != filchar)
			*ptr++ = filchar;
		len -= tlen + 1;
		*ptr = '\0';
	    }
	}
	return;
}