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