|
|
1.1 ! root 1: /* ! 2: * This software is Copyright (c) 1986 by Rick Adams. ! 3: * ! 4: * Permission is hereby granted to copy, reproduce, redistribute or ! 5: * otherwise use this software as long as: there is no monetary ! 6: * profit gained specifically from the use or reproduction or this ! 7: * software, it is not sold, rented, traded or otherwise marketed, and ! 8: * this copyright notice is included prominently in any copy ! 9: * made. ! 10: * ! 11: * The author make no claims as to the fitness or correctness of ! 12: * this software for any use whatsoever, and it is provided as is. ! 13: * Any use of this software is at the user's own risk. ! 14: * ! 15: * process - process options for readnews/vnews ! 16: */ ! 17: ! 18: #ifdef SCCSID ! 19: static char *SccsId = "@(#)process.c 2.14 1/17/86"; ! 20: #endif /* SCCSID */ ! 21: ! 22: #include "rparams.h" ! 23: ! 24: #define OPTION 0 /* pick up an option string */ ! 25: #define STRING 1 /* pick up a string of arguments */ ! 26: ! 27: struct optable *optpt, options[] = { /* ! 28: optlet filchar flag newstate oldmode newmode buf */ ! 29: 'p', '\0', FALSE, OPTION, UNKNOWN, UNKNOWN,(char *)NULL, ! 30: 't', '\0', FALSE, STRING, ANY, UNKNOWN,header.title, ! 31: 'a', ' ', FALSE, STRING, ANY, UNKNOWN,datebuf, ! 32: 'n', NGDELIM, FALSE, STRING, ANY, UNKNOWN,header.nbuf, ! 33: 'c', ' ', FALSE, STRING, UNKNOWN, UNKNOWN,coptbuf, ! 34: 'l', ' ', FALSE, OPTION, UNKNOWN, UNKNOWN,(char *)NULL, ! 35: 'r', '\0', FALSE, OPTION, ANY, UNKNOWN,(char *)NULL, ! 36: 's', NGDELIM, FALSE, STRING, ANY, UNKNOWN,header.nbuf, ! 37: 'x', '\0', FALSE, OPTION, ANY, UNKNOWN,(char *)NULL, ! 38: 'h', '\0', FALSE, OPTION, ANY, UNKNOWN,(char *)NULL, ! 39: #ifdef TMAIL ! 40: 'M', '\0', FALSE, OPTION, UNKNOWN, MAIL, (char *)NULL, ! 41: #else /* !TMAIL */ ! 42: '\377', '\0', FALSE, OPTION, UNKNOWN, UNKNOWN,(char *)NULL, ! 43: #endif /* !TMAIL */ ! 44: 'f', '\0', FALSE, OPTION, ANY, UNKNOWN,(char *)NULL, ! 45: 'u', '\0', FALSE, OPTION, ANY, UNKNOWN,(char *)NULL, ! 46: 'e', '\0', FALSE, OPTION, ANY, UNKNOWN,(char *)NULL, ! 47: '\0', '\0', 0, 0, 0, 0, (char *)NULL ! 48: }; ! 49: ! 50: process(argc,argv) ! 51: register int argc; ! 52: register char **argv; ! 53: { ! 54: register int state = STRING; ! 55: register char *ptr = header.nbuf; ! 56: char filchar = NGDELIM; ! 57: int len = BUFLEN, tlen; ! 58: ! 59: /* loop once per arg. */ ! 60: ! 61: if (argc > 1 && **argv != '-') ! 62: nflag = TRUE; ! 63: ! 64: while (--argc) { ! 65: if (state == OPTION) { ! 66: if (**argv != '-') { ! 67: xerror("Bad option string \"%s\"", *argv); ! 68: } ! 69: while (*++*argv != '\0') { ! 70: for (optpt = options; optpt->optlet != '\0'; ++optpt) { ! 71: if (optpt->optlet == **argv) ! 72: goto found; ! 73: } ! 74: /* unknown option letter */ ! 75: #ifdef TMAIL ! 76: fprintf(stderr, "Usage: %s [ -a [ date ]] [ -n newsgroups ] [ -t titles ] [ -lprxhfuM ]\n", Progname); ! 77: #else /* !TMAIL */ ! 78: fprintf(stderr, "Usage: %s [ -a [ date ]] [ -n newsgroups ] [ -t titles ] [ -lprxhfu ]\n", Progname); ! 79: #endif /* !TMAIL */ ! 80: fprintf(stderr, "\t[ -c [ ``mailer'' ]]\n\n"); ! 81: fprintf(stderr, " %s -s\n", Progname); ! 82: exit(1); ! 83: ! 84: found:; ! 85: if (mode != UNKNOWN && (mode&optpt->oldmode) == 0) { ! 86: xerror("Bad %c option", **argv); ! 87: } ! 88: if (mode == UNKNOWN) ! 89: mode = optpt->newmode; ! 90: filchar = optpt->filchar; ! 91: optpt->flag = TRUE; ! 92: state = optpt->newstate; ! 93: ptr = optpt->buf; ! 94: len = BUFLEN; ! 95: } ! 96: ! 97: argv++; /* done with this option arg. */ ! 98: ! 99: } else { ! 100: ! 101: /* ! 102: * Pick up a piece of a string and put it into ! 103: * the appropriate buffer. ! 104: */ ! 105: if (**argv == '-') { ! 106: state = OPTION; ! 107: argc++; /* uncount this arg. */ ! 108: continue; ! 109: } ! 110: ! 111: if ((tlen = strlen(*argv)) >= len) ! 112: xerror("Argument string too long"); ! 113: strcpy(ptr, *argv++); ! 114: ptr += tlen; ! 115: if (*(ptr-1) != filchar) ! 116: *ptr++ = filchar; ! 117: len -= tlen + 1; ! 118: *ptr = '\0'; ! 119: } ! 120: } ! 121: return; ! 122: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.