|
|
1.1 ! root 1: /* Copyright (c) 1979 Regents of the University of California */ ! 2: ! 3: static char sccsid[] = "@(#)subr.c 1.5 4/16/82"; ! 4: ! 5: #include "whoami.h" ! 6: #include "0.h" ! 7: ! 8: #ifndef PI1 ! 9: /* ! 10: * Does the string fp end in '.' and the character c ? ! 11: */ ! 12: dotted(fp, c) ! 13: register char *fp; ! 14: char c; ! 15: { ! 16: register int i; ! 17: ! 18: i = strlen(fp); ! 19: return (i > 1 && fp[i - 2] == '.' && fp[i - 1] == c); ! 20: } ! 21: ! 22: /* ! 23: * Toggle the option c. ! 24: */ ! 25: togopt(c) ! 26: char c; ! 27: { ! 28: register char *tp; ! 29: ! 30: tp = &opt( c ); ! 31: *tp = 1 - *tp; ! 32: } ! 33: ! 34: /* ! 35: * Set the time vector "tvec" to the ! 36: * modification time stamp of a file. ! 37: */ ! 38: gettime( filename ) ! 39: char *filename; ! 40: { ! 41: #include <sys/stat.h> ! 42: struct stat stb; ! 43: ! 44: stat(filename, &stb); ! 45: tvec = stb.st_mtime; ! 46: } ! 47: ! 48: /* ! 49: * Convert a "ctime" into a Pascal styple time line ! 50: */ ! 51: char * ! 52: myctime(tv) ! 53: int *tv; ! 54: { ! 55: register char *cp, *dp; ! 56: char *cpp; ! 57: register i; ! 58: static char mycbuf[26]; ! 59: ! 60: cpp = ctime(tv); ! 61: dp = mycbuf; ! 62: cp = cpp; ! 63: cpp[16] = 0; ! 64: while (*dp++ = *cp++); ! 65: dp--; ! 66: cp = cpp+19; ! 67: cpp[24] = 0; ! 68: while (*dp++ = *cp++); ! 69: return (mycbuf); ! 70: } ! 71: ! 72: /* ! 73: * Is "fp" in the command line list of names ? ! 74: */ ! 75: inpflist(fp) ! 76: char *fp; ! 77: { ! 78: register i, *pfp; ! 79: ! 80: pfp = pflist; ! 81: for (i = pflstc; i > 0; i--) ! 82: if (strcmp(fp, *pfp++) == 0) ! 83: return (1); ! 84: return (0); ! 85: } ! 86: #endif ! 87: ! 88: extern int errno; ! 89: extern char *sys_errlist[]; ! 90: ! 91: /* ! 92: * Boom! ! 93: */ ! 94: Perror(file, error) ! 95: char *file, *error; ! 96: { ! 97: ! 98: fprintf( stderr , "%s: %s\n" , file , error ); ! 99: } ! 100: ! 101: int * ! 102: calloc(num, size) ! 103: int num, size; ! 104: { ! 105: register int p1, *p2, nbyte; ! 106: ! 107: nbyte = (num*size+( ( sizeof ( int ) ) - 1 ) ) & ~( ( sizeof ( int ) ) - 1 ); ! 108: if ((p1 = malloc(nbyte)) == 0) ! 109: return (0); ! 110: p2 = p1; ! 111: nbyte /= sizeof ( int ); ! 112: do { ! 113: *p2++ = 0; ! 114: } while (--nbyte); ! 115: return (p1); ! 116: } ! 117: ! 118: /* ! 119: * Compare strings: s1>s2: >0 s1==s2: 0 s1<s2: <0 ! 120: */ ! 121: strcmp(s1, s2) ! 122: register char *s1, *s2; ! 123: { ! 124: ! 125: while (*s1 == *s2++) ! 126: if (*s1++=='\0') ! 127: return (0); ! 128: return (*s1 - *--s2); ! 129: } ! 130: ! 131: /* ! 132: * Copy string s2 to s1. ! 133: * S1 must be large enough. ! 134: * Return s1. ! 135: */ ! 136: strcpy(s1, s2) ! 137: register char *s1, *s2; ! 138: { ! 139: register os1; ! 140: ! 141: os1 = s1; ! 142: while (*s1++ = *s2++) ! 143: continue; ! 144: return (os1); ! 145: } ! 146: ! 147: /* ! 148: * Strlen is currently a freebie of perror ! 149: * Take the length of a string. ! 150: * Note that this does not include the trailing null! ! 151: strlen(cp) ! 152: register char *cp; ! 153: { ! 154: register int i; ! 155: ! 156: for (i = 0; *cp != 0; cp++) ! 157: i++; ! 158: return (i); ! 159: } ! 160: */ ! 161: copy(to, from, bytes) ! 162: register char *to, *from; ! 163: register int bytes; ! 164: { ! 165: ! 166: if (bytes != 0) ! 167: do ! 168: *to++ = *from++; ! 169: while (--bytes); ! 170: } ! 171: ! 172: /* ! 173: * Is ch one of the characters in the string cp ? ! 174: */ ! 175: any(cp, ch) ! 176: register char *cp; ! 177: char ch; ! 178: { ! 179: ! 180: while (*cp) ! 181: if (*cp++ == ch) ! 182: return (1); ! 183: return (0); ! 184: } ! 185: ! 186: opush(c) ! 187: register CHAR c; ! 188: { ! 189: ! 190: c -= 'A'; ! 191: optstk[c] <<= 1; ! 192: optstk[c] |= opts[c]; ! 193: opts[c] = 1; ! 194: #ifdef PI0 ! 195: send(ROPUSH, c); ! 196: #endif ! 197: } ! 198: ! 199: opop(c) ! 200: register CHAR c; ! 201: { ! 202: ! 203: c -= 'A'; ! 204: opts[c] = optstk[c] & 1; ! 205: optstk[c] >>= 1; ! 206: #ifdef PI0 ! 207: send(ROPOP, c); ! 208: #endif ! 209: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.