1777Speter /* Copyright (c) 1979 Regents of the University of California */ 2777Speter 3*1838Speter static char sccsid[] = "@(#)subr.c 1.4 11/24/80"; 4777Speter 5777Speter #include "whoami.h" 6777Speter #include "0.h" 7777Speter 8777Speter #ifndef PI1 9777Speter /* 10777Speter * Does the string fp end in '.' and the character c ? 11777Speter */ 12777Speter dotted(fp, c) 13777Speter register char *fp; 14777Speter char c; 15777Speter { 16777Speter register int i; 17777Speter 18777Speter i = strlen(fp); 19777Speter return (i > 1 && fp[i - 2] == '.' && fp[i - 1] == c); 20777Speter } 21777Speter 22777Speter /* 23777Speter * Toggle the option c. 24777Speter */ 25777Speter togopt(c) 26777Speter char c; 27777Speter { 28777Speter register char *tp; 29777Speter 30777Speter tp = &opt( c ); 31777Speter *tp = 1 - *tp; 32777Speter } 33777Speter 34777Speter /* 35777Speter * Set the time vector "tvec" to the 36777Speter * modification time stamp of a file. 37777Speter */ 38777Speter gettime( filename ) 39777Speter char *filename; 40777Speter { 41777Speter #include <stat.h> 42777Speter struct stat stb; 43777Speter 44777Speter stat(filename, &stb); 45777Speter tvec = stb.st_mtime; 46777Speter } 47777Speter 48777Speter /* 49777Speter * Convert a "ctime" into a Pascal styple time line 50777Speter */ 51777Speter char * 52777Speter myctime(tv) 53777Speter int *tv; 54777Speter { 55777Speter register char *cp, *dp; 56777Speter char *cpp; 57777Speter register i; 58777Speter static char mycbuf[26]; 59777Speter 60777Speter cpp = ctime(tv); 61777Speter dp = mycbuf; 62777Speter cp = cpp; 63777Speter cpp[16] = 0; 64777Speter while (*dp++ = *cp++); 65777Speter dp--; 66777Speter cp = cpp+19; 67777Speter cpp[24] = 0; 68777Speter while (*dp++ = *cp++); 69777Speter return (mycbuf); 70777Speter } 71777Speter 72777Speter /* 73777Speter * Is "fp" in the command line list of names ? 74777Speter */ 75777Speter inpflist(fp) 76777Speter char *fp; 77777Speter { 78777Speter register i, *pfp; 79777Speter 80777Speter pfp = pflist; 81777Speter for (i = pflstc; i > 0; i--) 82777Speter if (strcmp(fp, *pfp++) == 0) 83777Speter return (1); 84777Speter return (0); 85777Speter } 86777Speter #endif 87777Speter 88777Speter extern int errno; 89777Speter extern char *sys_errlist[]; 90777Speter 91777Speter /* 92777Speter * Boom! 93777Speter */ 94777Speter Perror(file, error) 95777Speter char *file, *error; 96777Speter { 97777Speter 98*1838Speter fprintf( stderr , "%s: %s\n" , file , error ); 99777Speter } 100777Speter 101777Speter int * 102777Speter calloc(num, size) 103777Speter int num, size; 104777Speter { 105777Speter register int p1, *p2, nbyte; 106777Speter 107777Speter nbyte = (num*size+( ( sizeof ( int ) ) - 1 ) ) & ~( ( sizeof ( int ) ) - 1 ); 1081836Speter if ((p1 = malloc(nbyte)) == 0) 1091836Speter return (0); 110777Speter p2 = p1; 111777Speter nbyte /= sizeof ( int ); 112777Speter do { 113777Speter *p2++ = 0; 114777Speter } while (--nbyte); 115777Speter return (p1); 116777Speter } 117777Speter 118777Speter /* 119777Speter * Compare strings: s1>s2: >0 s1==s2: 0 s1<s2: <0 120777Speter */ 121777Speter strcmp(s1, s2) 122777Speter register char *s1, *s2; 123777Speter { 124777Speter 125777Speter while (*s1 == *s2++) 126777Speter if (*s1++=='\0') 127777Speter return (0); 128777Speter return (*s1 - *--s2); 129777Speter } 130777Speter 131777Speter /* 132777Speter * Copy string s2 to s1. 133777Speter * S1 must be large enough. 134777Speter * Return s1. 135777Speter */ 136777Speter strcpy(s1, s2) 137777Speter register char *s1, *s2; 138777Speter { 139777Speter register os1; 140777Speter 141777Speter os1 = s1; 142777Speter while (*s1++ = *s2++) 143777Speter continue; 144777Speter return (os1); 145777Speter } 146777Speter 147777Speter /* 148777Speter * Strlen is currently a freebie of perror 149777Speter * Take the length of a string. 150777Speter * Note that this does not include the trailing null! 151777Speter strlen(cp) 152777Speter register char *cp; 153777Speter { 154777Speter register int i; 155777Speter 156777Speter for (i = 0; *cp != 0; cp++) 157777Speter i++; 158777Speter return (i); 159777Speter } 160777Speter */ 161777Speter copy(to, from, bytes) 162777Speter register char *to, *from; 163777Speter register int bytes; 164777Speter { 165777Speter 166777Speter if (bytes != 0) 167777Speter do 168777Speter *to++ = *from++; 169777Speter while (--bytes); 170777Speter } 171777Speter 172777Speter /* 173777Speter * Is ch one of the characters in the string cp ? 174777Speter */ 175777Speter any(cp, ch) 176777Speter register char *cp; 177777Speter char ch; 178777Speter { 179777Speter 180777Speter while (*cp) 181777Speter if (*cp++ == ch) 182777Speter return (1); 183777Speter return (0); 184777Speter } 185777Speter 186777Speter opush(c) 187777Speter register CHAR c; 188777Speter { 189777Speter 190777Speter c -= 'A'; 191777Speter optstk[c] <<= 1; 192777Speter optstk[c] |= opts[c]; 193777Speter opts[c] = 1; 194777Speter #ifdef PI0 195777Speter send(ROPUSH, c); 196777Speter #endif 197777Speter } 198777Speter 199777Speter opop(c) 200777Speter register CHAR c; 201777Speter { 202777Speter 203777Speter c -= 'A'; 204777Speter opts[c] = optstk[c] & 1; 205777Speter optstk[c] >>= 1; 206777Speter #ifdef PI0 207777Speter send(ROPOP, c); 208777Speter #endif 209777Speter } 210