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