|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.