Annotation of researchv10no/cmd/uucp/getargs.c, revision 1.1.1.1

1.1       root        1: /*     /sccs/src/cmd/uucp/s.getargs.c
                      2:        getargs.c       1.1     8/30/84 17:37:20
                      3: */
                      4: #include "uucp.h"
                      5: VERSION(@(#)getargs.c  1.1);
                      6: 
                      7: /*
                      8:  * generate a vector of pointers (arps) to the
                      9:  * substrings in string "s".
                     10:  * Each substring is separated by blanks and/or tabs.
                     11:  *     s       -> string to analyze -- s GETS MODIFIED
                     12:  *     arps    -> array of pointers -- count + 1 pointers
                     13:  *     count   -> max number of fields
                     14:  * returns:
                     15:  *     i       -> # of subfields
                     16:  *     arps[i] = NULL
                     17:  */
                     18: 
                     19: getargs(s, arps, count)
                     20: register char *s, *arps[];
                     21: {
                     22:        register int i;
                     23: 
                     24:        for (i = 0; i < count; i++) {
                     25:                while (*s == ' ' || *s == '\t')
                     26:                        *s++ = '\0';
                     27:                if (*s == '\n')
                     28:                        *s = '\0';
                     29:                if (*s == '\0')
                     30:                        break;
                     31:                arps[i] = s++;
                     32:                while (*s != '\0' && *s != ' '
                     33:                        && *s != '\t' && *s != '\n')
                     34:                                s++;
                     35:        }
                     36:        arps[i] = NULL;
                     37:        return(i);
                     38: }
                     39: 
                     40: /***
                     41:  *      bsfix(args) - remove backslashes from args
                     42:  *
                     43:  *      \123 style strings are collapsed into a single character
                     44:  *     \000 gets mapped into \N for further processing downline.
                     45:  *      \ at end of string is removed
                     46:  *     \t gets replaced by a tab
                     47:  *     \n gets replaced by a newline
                     48:  *     \r gets replaced by a carriage return
                     49:  *     \b gets replaced by a backspace
                     50:  *     \s gets replaced by a blank 
                     51:  *     any other unknown \ sequence is left intact for further processing
                     52:  *     downline.
                     53:  */
                     54: 
                     55: void
                     56: bsfix (args)
                     57: char **args;
                     58: {
                     59:        register char *str, *to, *cp;
                     60:        register int num;
                     61: 
                     62:        for (; *args; args++) {
                     63:                str = *args;
                     64:                for (to = str; *str; str++) {
                     65:                        if (*str == '\\') {
                     66:                                if (str[1] == '\0')
                     67:                                        break;
                     68:                                switch (*++str) {
                     69:                                case '0':
                     70:                                case '1':
                     71:                                case '2':
                     72:                                case '3':
                     73:                                case '4':
                     74:                                case '5':
                     75:                                case '6':
                     76:                                case '7':
                     77:                                        for ( num = 0, cp = str
                     78:                                            ; cp - str < 3
                     79:                                            ; cp++
                     80:                                            ) {
                     81:                                                if ('0' <= *cp && *cp <= '7') {
                     82:                                                        num <<= 3;
                     83:                                                        num += *cp - '0';
                     84:                                                }
                     85:                                                else
                     86:                                                    break;
                     87:                                        }
                     88:                                        if (num == 0) {
                     89:                                                *to++ = '\\';
                     90:                                                *to++ = 'N';
                     91:                                        } else
                     92:                                                *to++ = num;
                     93:                                        str = cp-1;
                     94:                                        break;
                     95: 
                     96:                                case 't':
                     97:                                        *to++ = '\t';
                     98:                                        break;
                     99: 
                    100:                                case 's':       
                    101:                                        *to++ = ' ';
                    102:                                        break;
                    103: 
                    104:                                case 'n':
                    105:                                        *to++ = '\n';
                    106:                                        break;
                    107: 
                    108:                                case 'r':
                    109:                                        *to++ = '\r';
                    110:                                        break;
                    111: 
                    112:                                case 'b':
                    113:                                        *to++ = '\b';
                    114:                                        break;
                    115: 
                    116:                                default:
                    117:                                        *to++ = '\\';
                    118:                                        *to++ = *str;
                    119:                                        break;
                    120:                                }
                    121:                        }
                    122:                        else
                    123:                                *to++ = *str;
                    124:                }
                    125:                *to = '\0';
                    126:        }
                    127: }

unix.superglobalmegacorp.com

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