|
|
1.1 ! root 1: /* Copyright (c) 1979 Regents of the University of California */ ! 2: ! 3: static char sccsid[] = "@(#)subr.c 1.2 11/13/80"; ! 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 <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: write(2, file, strlen(file)); ! 99: write(2, ": ", 2); ! 100: write(2, error, strlen(error)); ! 101: write(2, "\n", 1); ! 102: /* ! 103: errno = 0; ! 104: sys_errlist[0] = error; ! 105: perror(file); ! 106: */ ! 107: } ! 108: ! 109: int * ! 110: calloc(num, size) ! 111: int num, size; ! 112: { ! 113: register int p1, *p2, nbyte; ! 114: ! 115: nbyte = (num*size+( ( sizeof ( int ) ) - 1 ) ) & ~( ( sizeof ( int ) ) - 1 ); ! 116: if ((p1 = malloc(nbyte)) == -1 || p1==0) ! 117: return (-1); ! 118: p2 = p1; ! 119: nbyte /= sizeof ( int ); ! 120: do { ! 121: *p2++ = 0; ! 122: } while (--nbyte); ! 123: return (p1); ! 124: } ! 125: ! 126: /* ! 127: * Compare strings: s1>s2: >0 s1==s2: 0 s1<s2: <0 ! 128: */ ! 129: strcmp(s1, s2) ! 130: register char *s1, *s2; ! 131: { ! 132: ! 133: while (*s1 == *s2++) ! 134: if (*s1++=='\0') ! 135: return (0); ! 136: return (*s1 - *--s2); ! 137: } ! 138: ! 139: /* ! 140: * Copy string s2 to s1. ! 141: * S1 must be large enough. ! 142: * Return s1. ! 143: */ ! 144: strcpy(s1, s2) ! 145: register char *s1, *s2; ! 146: { ! 147: register os1; ! 148: ! 149: os1 = s1; ! 150: while (*s1++ = *s2++) ! 151: continue; ! 152: return (os1); ! 153: } ! 154: ! 155: /* ! 156: * Strlen is currently a freebie of perror ! 157: * Take the length of a string. ! 158: * Note that this does not include the trailing null! ! 159: strlen(cp) ! 160: register char *cp; ! 161: { ! 162: register int i; ! 163: ! 164: for (i = 0; *cp != 0; cp++) ! 165: i++; ! 166: return (i); ! 167: } ! 168: */ ! 169: copy(to, from, bytes) ! 170: register char *to, *from; ! 171: register int bytes; ! 172: { ! 173: ! 174: if (bytes != 0) ! 175: do ! 176: *to++ = *from++; ! 177: while (--bytes); ! 178: } ! 179: ! 180: /* ! 181: * Is ch one of the characters in the string cp ? ! 182: */ ! 183: any(cp, ch) ! 184: register char *cp; ! 185: char ch; ! 186: { ! 187: ! 188: while (*cp) ! 189: if (*cp++ == ch) ! 190: return (1); ! 191: return (0); ! 192: } ! 193: ! 194: opush(c) ! 195: register CHAR c; ! 196: { ! 197: ! 198: c -= 'A'; ! 199: optstk[c] <<= 1; ! 200: optstk[c] |= opts[c]; ! 201: opts[c] = 1; ! 202: #ifdef PI0 ! 203: send(ROPUSH, c); ! 204: #endif ! 205: } ! 206: ! 207: opop(c) ! 208: register CHAR c; ! 209: { ! 210: ! 211: c -= 'A'; ! 212: opts[c] = optstk[c] & 1; ! 213: optstk[c] >>= 1; ! 214: #ifdef PI0 ! 215: send(ROPOP, c); ! 216: #endif ! 217: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.