Annotation of 43BSDTahoe/usr.bin/uucp/getargs.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)getargs.c  5.3 (Berkeley) 6/19/85";
                      3: #endif
                      4: 
                      5: #include "uucp.h"
                      6: 
                      7: /*LINTLIBRARY*/
                      8: 
                      9: /*
                     10:  *     getargs  -  this routine will generate a vector of
                     11:  *     pointers (arps) to the substrings in string "s".
                     12:  *     Each substring is separated by blanks and/or tabs.
                     13:  *
                     14:  *     If FANCYARGS is defined, you get the following:
                     15:  *     Strings containing blanks may be specified by quoting,
                     16:  *     in a manner similar to using the shell.
                     17:  *     Control characters are entered by ^X where X is any
                     18:  *     character; ^? gets you a rubout and ^^ is a real ^.
                     19:  *     Warning (rti!trt): I doubt FANCYARGS is wise, since getargs
                     20:  *     is used all over the place.  Its features may be useful
                     21:  *     but a separate fancy_getargs() should be called instead.
                     22:  *
                     23:  *     return - the number of subfields, or -1 if >= maxargs.
                     24:  */
                     25: 
                     26: getargs(s, arps, maxargs)
                     27: register char *s;
                     28: char *arps[];
                     29: int maxargs;
                     30: {
                     31:        register int i;
                     32: #ifdef FANCYARGS
                     33:        register char *sp;
                     34:        register char qchar;
                     35: #endif
                     36: 
                     37:        i = 0;
                     38: #ifndef        FANCYARGS
                     39:        while (i < maxargs) {
                     40:                while (*s == ' ' || *s == '\t')
                     41:                        *s++ = '\0';
                     42:                if (*s == '\n')
                     43:                        *s = '\0';
                     44:                if (*s == '\0')
                     45:                        break;
                     46:                arps[i++] = s++;
                     47:                while (*s != '\0' && *s != ' '
                     48:                        && *s != '\t' && *s != '\n')
                     49:                                s++;
                     50:        }
                     51: #else
                     52:        while (i < maxargs) {
                     53:                while (*s == ' ' || *s == '\t')
                     54:                        ++s;
                     55:                if (*s == '\n' || *s == '\0')
                     56:                        break;
                     57:                arps[i++] = sp = s;
                     58:                qchar = 0;
                     59:                while(*s != '\0'  &&  *s != '\n') {
                     60:                        if (qchar == 0 && (*s == ' ' || *s == '\t')) {
                     61:                                ++s;
                     62:                                break;
                     63:                        }
                     64:                        switch(*s) {
                     65:                        default:
                     66:                                *sp++ = *s++;
                     67:                                break;
                     68:                        case '^':
                     69:                                if(*++s == '^')
                     70:                                        *sp++ = '^';
                     71:                                else if(*s == '?')
                     72:                                        *sp++ = 0177;
                     73:                                else
                     74:                                        *sp++ = *s & 037;
                     75:                                s++;
                     76:                                break;
                     77:                        case '"':
                     78:                        case '\'':
                     79:                                if(qchar == *s) {
                     80:                                        qchar = 0;
                     81:                                        ++s;
                     82:                                        break;
                     83:                                }
                     84:                                if(qchar)
                     85:                                        *sp++ = *s++;
                     86:                                else
                     87:                                        qchar = *s++;
                     88:                                break;
                     89:                        }
                     90:                }
                     91:                *sp++ = 0;
                     92:        }
                     93: #endif
                     94:        if (i >= maxargs)
                     95:                return FAIL;
                     96:        arps[i] = NULL;
                     97:        return i;
                     98: }

unix.superglobalmegacorp.com

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