Annotation of 43BSDTahoe/new/news/src/process.c, revision 1.1.1.1

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.17    12/16/86";
                     20: #endif /* SCCSID */
                     21: 
                     22: #include "rparams.h"
                     23: 
                     24: char   coptbuf[LBUFLEN], datebuf[LBUFLEN];
                     25: 
                     26: #define OPTION 0       /* pick up an option string */
                     27: #define STRING 1       /* pick up a string of arguments */
                     28: 
                     29: struct optable *optpt, options[] = { /*
                     30: optlet filchar flag    newstate oldmode        newmode buf     */
                     31: 'p',   '\0',   FALSE,  OPTION, UNKNOWN,        UNKNOWN,(char *)NULL,   
                     32: 't',   '\0',   FALSE,  STRING, ANY,            UNKNOWN,header.title,   
                     33: 'a',   ' ',    FALSE,  STRING, ANY,            UNKNOWN,datebuf,
                     34: 'n',   NGDELIM,        FALSE,  STRING, ANY,            UNKNOWN,header.nbuf,
                     35: 'c',   ' ',    FALSE,  STRING, UNKNOWN,        UNKNOWN,coptbuf,        
                     36: 'l',   ' ',    FALSE,  OPTION, UNKNOWN,        UNKNOWN,(char *)NULL,
                     37: 'r',   '\0',   FALSE,  OPTION, ANY,            UNKNOWN,(char *)NULL,
                     38: 's',   NGDELIM,        FALSE,  STRING, ANY,            UNKNOWN,header.nbuf,
                     39: 'x',   '\0',   FALSE,  OPTION, ANY,            UNKNOWN,(char *)NULL,
                     40: 'h',   '\0',   FALSE,  OPTION, ANY,            UNKNOWN,(char *)NULL,
                     41: #ifdef TMAIL
                     42: 'M',   '\0',   FALSE,  OPTION, UNKNOWN,        MAIL,   (char *)NULL,
                     43: #else /* !TMAIL */
                     44: '\377',        '\0',   FALSE,  OPTION, UNKNOWN,        UNKNOWN,(char *)NULL,
                     45: #endif /* !TMAIL */
                     46: 'f',   '\0',   FALSE,  OPTION, ANY,            UNKNOWN,(char *)NULL,
                     47: 'u',   '\0',   FALSE,  OPTION, ANY,            UNKNOWN,(char *)NULL,
                     48: 'e',   '\0',   FALSE,  OPTION, ANY,            UNKNOWN,(char *)NULL,
                     49: 'K',   '\0',   FALSE,  OPTION, ANY,            UNKNOWN,(char *)NULL,
                     50: '\0',  '\0',   0,      0,      0,              0,      (char *)NULL
                     51: };
                     52: 
                     53: process(argc,argv)
                     54: register int argc;
                     55: register char **argv;
                     56: {
                     57:        register int state = STRING;
                     58:        register char *ptr = header.nbuf;
                     59:        char filchar = NGDELIM;
                     60:        int len = LBUFLEN, tlen;
                     61: 
                     62:        /* loop once per arg. */
                     63: 
                     64:        if (argc > 1 && **argv != '-')
                     65:                nflag = TRUE;
                     66: 
                     67:        while (--argc) {
                     68:            if (state == OPTION) {
                     69:                if (**argv != '-') {
                     70:                        xerror("Bad option string \"%s\"", *argv);
                     71:                }
                     72:                while (*++*argv != '\0') {
                     73:                        for (optpt = options; optpt->optlet != '\0'; ++optpt) {
                     74:                                if (optpt->optlet == **argv)
                     75:                                        goto found;
                     76:                        }
                     77:                        /* unknown option letter */
                     78: #ifdef TMAIL
                     79:                        fprintf(stderr, "Usage: %s [ -a [ date ]] [ -n newsgroups ] [ -t titles ] [ -lprxhfuMK ]\n", Progname);
                     80: #else /* !TMAIL */
                     81:                        fprintf(stderr, "Usage: %s [ -a [ date ]] [ -n newsgroups ] [ -t titles ] [ -lprxhfuK ]\n", Progname);
                     82: #endif /* !TMAIL */
                     83:                        fprintf(stderr, "\t[ -c [ ``mailer'' ]]\n\n");
                     84:                        fprintf(stderr, "       %s -s\n", Progname);
                     85:                        exit(1);
                     86: 
                     87:                    found:;
                     88:                        if (mode != UNKNOWN && (mode&optpt->oldmode) == 0) {
                     89:                                xerror("Bad %c option", **argv);
                     90:                        }
                     91:                        if (mode == UNKNOWN)
                     92:                                mode = optpt->newmode;
                     93:                        filchar = optpt->filchar;
                     94:                        optpt->flag = TRUE;
                     95:                        state = optpt->newstate;
                     96:                        ptr = optpt->buf;
                     97:                        len = LBUFLEN;
                     98:                }
                     99: 
                    100:                argv++;         /* done with this option arg. */
                    101: 
                    102:            } else {
                    103: 
                    104:                /*
                    105:                 * Pick up a piece of a string and put it into
                    106:                 * the appropriate buffer.
                    107:                 */
                    108:                if (**argv == '-') {
                    109:                        state = OPTION;
                    110:                        argc++; /* uncount this arg. */
                    111:                        continue;
                    112:                }
                    113: 
                    114:                if ((tlen = strlen(*argv)) >= len)
                    115:                        xerror("Argument string too long");
                    116:                strcpy(ptr, *argv++);
                    117:                ptr += tlen;
                    118:                if (*(ptr-1) != filchar)
                    119:                        *ptr++ = filchar;
                    120:                len -= tlen + 1;
                    121:                *ptr = '\0';
                    122:            }
                    123:        }
                    124:        return;
                    125: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.