Annotation of researchv10no/cmd/uucp/getprm.c, revision 1.1

1.1     ! root        1: /*     /sccs/src/cmd/uucp/s.getprm.c
        !             2:        getprm.c        1.4     8/30/84 17:37:22
        !             3: */
        !             4: #include "uucp.h"
        !             5: VERSION(@(#)getprm.c   1.4)
        !             6: 
        !             7: #define LQUOTE '('
        !             8: #define RQUOTE ')'
        !             9: 
        !            10: #define ZERO   0
        !            11: #define WHITE  1
        !            12: #define DELIMIT        2
        !            13: #define QUOTE  3
        !            14: #define OTHER  9
        !            15: 
        !            16: 
        !            17: extern char *bal();
        !            18: 
        !            19: /*
        !            20:  * get next parameter from s
        !            21:  *     s       -> string to scan
        !            22:  *     prm     -> pointer to use to return token
        !            23:  * return:
        !            24:  *      s      -> pointer to next character 
        !            25:  *             NULL at end
        !            26:  */
        !            27: char *
        !            28: getprm(s, prm)
        !            29: register char *s, *prm;
        !            30: {
        !            31:        register char *c;
        !            32:        char rightq;            /* the right quote character */
        !            33: 
        !            34:        /* skip white space */
        !            35:        while (charType(*s) == WHITE)
        !            36:                s++;
        !            37: 
        !            38:        *prm = '\0';
        !            39:        if (*s == '\0')
        !            40:                return(NULL);
        !            41: 
        !            42:        if (charType(*s) == DELIMIT) {
        !            43:                *prm++ = *s++;
        !            44:                *prm = '\0';
        !            45:                return(s);
        !            46:        }
        !            47: 
        !            48:        /* look for quoted argument */
        !            49:        if (charType(*s) == QUOTE) {
        !            50:            /* setup the right quote character */
        !            51:            if (*s == LQUOTE)
        !            52:                rightq = RQUOTE;
        !            53:            else
        !            54:                rightq = *s;
        !            55: 
        !            56:            c = bal(s, rightq);
        !            57:            (void) strcpy(prm, s, c-s+1);
        !            58:            prm[c-s+1] = '\0';
        !            59:            if ( *(s=c) == rightq) /* if end of string don't increment */
        !            60:                s++;
        !            61:            return(s);
        !            62:        }
        !            63: 
        !            64:        while (charType(*s) == OTHER)
        !            65:                *prm++ = *s++;
        !            66:        *prm = '\0';
        !            67: 
        !            68:        return(s);
        !            69: }
        !            70: 
        !            71: /*
        !            72:  * split name into system and file part
        !            73:  *     name    -> string to scan
        !            74:  *     sys     -> return area for system name
        !            75:  *     rest    -> return area for remainder
        !            76:  * return:
        !            77:  *     0       -> no system prefix
        !            78:  *     TRUE    -> system prefix return in sys
        !            79:  */
        !            80: 
        !            81: split(name, sys, rest)
        !            82: register char *name;
        !            83: char *sys, *rest;
        !            84: {
        !            85:        register char *c, *n;
        !            86: 
        !            87:        *sys = '\0';
        !            88:        if (*name == LQUOTE) {
        !            89:                c = bal(name, RQUOTE);
        !            90:                name++;
        !            91:                (void) strncpy(rest, name, c-name);
        !            92:                rest[c-name] = '\0';
        !            93:                return(0);
        !            94:        }
        !            95: 
        !            96:        for (n = name ;; n = c+1) { /* loop to get rid if initial Mynames */
        !            97:            if ((c = strchr(n, '!')) == NULL) {
        !            98:                (void) strcpy(rest, n);
        !            99:                return(0);
        !           100:            }
        !           101: 
        !           102:            /*  ignore escaped '!' */
        !           103:            if ((c != n) && (*(c-1) == '\\')) {
        !           104:                *(c-1) = '\0';
        !           105:                (void) strcpy(rest, n);
        !           106:                (void) strcat(rest, c);
        !           107:                return(0);
        !           108:            }
        !           109: 
        !           110:            *c = '\0';
        !           111:            if (EQUALS(n, Myname)) /* initial system is Myname */
        !           112:                continue;
        !           113: 
        !           114:            (void) strcpy(sys, n);
        !           115:            (void) strcpy(rest, ++c);
        !           116:            return(TRUE);
        !           117:        }
        !           118:        /*NOTREACHED*/
        !           119: }
        !           120: 
        !           121: 
        !           122: /*
        !           123:  * bal - get balanced quoted string
        !           124:  *
        !           125:  * s - input string
        !           126:  * r - right quote
        !           127:  * Note: *s is the left quote
        !           128:  * return:
        !           129:  *  pointer to the end of the quoted string
        !           130:  * Note:
        !           131:  *     If the string is not balanced, it returns a pointer to the
        !           132:  *     end of the string.
        !           133:  */
        !           134: 
        !           135: char *
        !           136: bal(s, r)
        !           137: register char *s;
        !           138: char r;
        !           139: {
        !           140:        short count = 1;
        !           141:        char l;         /* left quote character */
        !           142: 
        !           143:        for (l = *s++; *s; s++) {
        !           144:            if (*s == r) {
        !           145:                if (--count == 0)
        !           146:                    break;      /* this is the balanced end */
        !           147:            }
        !           148:            else if (*s == l)
        !           149:                count++;
        !           150:        }
        !           151:        return(s);
        !           152: }
        !           153: 
        !           154: 
        !           155: /*
        !           156:  * charType - classify type of character , white space, delimiter, other
        !           157:  *
        !           158:  * s - character
        !           159:  * return:
        !           160:  *     WHITE - whitespace
        !           161:  *     DELIMIT - delimiter
        !           162:  *     QUOTE - some type of quote "'(`
        !           163:  *     OTHER - other
        !           164:  */
        !           165: 
        !           166: charType(s)
        !           167: char s;
        !           168: {
        !           169:        switch(s) {
        !           170:        case '>':
        !           171:        case '<':
        !           172:        case '|':
        !           173:        case ';':
        !           174:        case '&':
        !           175:        case '^':
        !           176:        case '\\':
        !           177:                return(DELIMIT);
        !           178: 
        !           179:        case ' ':
        !           180:        case '\t':
        !           181:        case '\n':
        !           182:                return(WHITE);
        !           183: 
        !           184:        case '\0':
        !           185:                return(ZERO);
        !           186: 
        !           187: 
        !           188:        case '"':
        !           189:        case '\'':
        !           190:        case '`':
        !           191:        case LQUOTE:
        !           192:                return(QUOTE);
        !           193: 
        !           194:        default:
        !           195:                return(OTHER);
        !           196:        }
        !           197: }

unix.superglobalmegacorp.com

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