1777Speter /* Copyright (c) 1979 Regents of the University of California */ 2777Speter 3*1807Speter static char sccsid[] = "@(#)subr.c 1.2 11/13/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*1807Speter write(2, file, strlen(file)); 99*1807Speter write(2, ": ", 2); 100*1807Speter write(2, error, strlen(error)); 101*1807Speter write(2, "\n", 1); 102*1807Speter /* 103777Speter errno = 0; 104777Speter sys_errlist[0] = error; 105777Speter perror(file); 106*1807Speter */ 107777Speter } 108777Speter 109777Speter int * 110777Speter calloc(num, size) 111777Speter int num, size; 112777Speter { 113777Speter register int p1, *p2, nbyte; 114777Speter 115777Speter nbyte = (num*size+( ( sizeof ( int ) ) - 1 ) ) & ~( ( sizeof ( int ) ) - 1 ); 116777Speter if ((p1 = malloc(nbyte)) == -1 || p1==0) 117777Speter return (-1); 118777Speter p2 = p1; 119777Speter nbyte /= sizeof ( int ); 120777Speter do { 121777Speter *p2++ = 0; 122777Speter } while (--nbyte); 123777Speter return (p1); 124777Speter } 125777Speter 126777Speter /* 127777Speter * Compare strings: s1>s2: >0 s1==s2: 0 s1<s2: <0 128777Speter */ 129777Speter strcmp(s1, s2) 130777Speter register char *s1, *s2; 131777Speter { 132777Speter 133777Speter while (*s1 == *s2++) 134777Speter if (*s1++=='\0') 135777Speter return (0); 136777Speter return (*s1 - *--s2); 137777Speter } 138777Speter 139777Speter /* 140777Speter * Copy string s2 to s1. 141777Speter * S1 must be large enough. 142777Speter * Return s1. 143777Speter */ 144777Speter strcpy(s1, s2) 145777Speter register char *s1, *s2; 146777Speter { 147777Speter register os1; 148777Speter 149777Speter os1 = s1; 150777Speter while (*s1++ = *s2++) 151777Speter continue; 152777Speter return (os1); 153777Speter } 154777Speter 155777Speter /* 156777Speter * Strlen is currently a freebie of perror 157777Speter * Take the length of a string. 158777Speter * Note that this does not include the trailing null! 159777Speter strlen(cp) 160777Speter register char *cp; 161777Speter { 162777Speter register int i; 163777Speter 164777Speter for (i = 0; *cp != 0; cp++) 165777Speter i++; 166777Speter return (i); 167777Speter } 168777Speter */ 169777Speter copy(to, from, bytes) 170777Speter register char *to, *from; 171777Speter register int bytes; 172777Speter { 173777Speter 174777Speter if (bytes != 0) 175777Speter do 176777Speter *to++ = *from++; 177777Speter while (--bytes); 178777Speter } 179777Speter 180777Speter /* 181777Speter * Is ch one of the characters in the string cp ? 182777Speter */ 183777Speter any(cp, ch) 184777Speter register char *cp; 185777Speter char ch; 186777Speter { 187777Speter 188777Speter while (*cp) 189777Speter if (*cp++ == ch) 190777Speter return (1); 191777Speter return (0); 192777Speter } 193777Speter 194777Speter opush(c) 195777Speter register CHAR c; 196777Speter { 197777Speter 198777Speter c -= 'A'; 199777Speter optstk[c] <<= 1; 200777Speter optstk[c] |= opts[c]; 201777Speter opts[c] = 1; 202777Speter #ifdef PI0 203777Speter send(ROPUSH, c); 204777Speter #endif 205777Speter } 206777Speter 207777Speter opop(c) 208777Speter register CHAR c; 209777Speter { 210777Speter 211777Speter c -= 'A'; 212777Speter opts[c] = optstk[c] & 1; 213777Speter optstk[c] >>= 1; 214777Speter #ifdef PI0 215777Speter send(ROPOP, c); 216777Speter #endif 217777Speter } 218