1*48116Sbostic /*- 2*48116Sbostic * Copyright (c) 1980 The Regents of the University of California. 3*48116Sbostic * All rights reserved. 4*48116Sbostic * 5*48116Sbostic * %sccs.include.redist.c% 622196Sdist */ 7777Speter 814744Sthien #ifndef lint 9*48116Sbostic static char sccsid[] = "@(#)subr.c 5.3 (Berkeley) 04/16/91"; 10*48116Sbostic #endif /* not lint */ 11777Speter 12777Speter #include "whoami.h" 13777Speter #include "0.h" 14777Speter 15777Speter #ifndef PI1 16777Speter /* 17777Speter * Does the string fp end in '.' and the character c ? 18777Speter */ 19777Speter dotted(fp, c) 20777Speter register char *fp; 21777Speter char c; 22777Speter { 23777Speter register int i; 24777Speter 25777Speter i = strlen(fp); 26777Speter return (i > 1 && fp[i - 2] == '.' && fp[i - 1] == c); 27777Speter } 28777Speter 29777Speter /* 30777Speter * Toggle the option c. 31777Speter */ 32777Speter togopt(c) 33777Speter char c; 34777Speter { 35777Speter register char *tp; 36777Speter 37777Speter tp = &opt( c ); 38777Speter *tp = 1 - *tp; 39777Speter } 40777Speter 41777Speter /* 42777Speter * Set the time vector "tvec" to the 43777Speter * modification time stamp of a file. 44777Speter */ 45777Speter gettime( filename ) 46777Speter char *filename; 47777Speter { 486555Speter #include <sys/stat.h> 49777Speter struct stat stb; 50777Speter 51777Speter stat(filename, &stb); 52777Speter tvec = stb.st_mtime; 53777Speter } 54777Speter 55777Speter /* 56777Speter * Convert a "ctime" into a Pascal styple time line 57777Speter */ 58777Speter char * 59777Speter myctime(tv) 60777Speter int *tv; 61777Speter { 62777Speter register char *cp, *dp; 6314744Sthien extern char *ctime(); 64777Speter char *cpp; 65777Speter static char mycbuf[26]; 66777Speter 67777Speter cpp = ctime(tv); 68777Speter dp = mycbuf; 69777Speter cp = cpp; 70777Speter cpp[16] = 0; 71777Speter while (*dp++ = *cp++); 72777Speter dp--; 73777Speter cp = cpp+19; 74777Speter cpp[24] = 0; 75777Speter while (*dp++ = *cp++); 76777Speter return (mycbuf); 77777Speter } 78777Speter 79777Speter /* 80777Speter * Is "fp" in the command line list of names ? 81777Speter */ 82777Speter inpflist(fp) 83777Speter char *fp; 84777Speter { 8514744Sthien register i; 8614744Sthien register char **pfp; 87777Speter 88777Speter pfp = pflist; 89777Speter for (i = pflstc; i > 0; i--) 9014744Sthien if (pstrcmp(fp, *pfp++) == 0) 91777Speter return (1); 92777Speter return (0); 93777Speter } 94777Speter #endif 95777Speter 96777Speter /* 97777Speter * Boom! 98777Speter */ 99777Speter Perror(file, error) 100777Speter char *file, *error; 101777Speter { 102777Speter 1031838Speter fprintf( stderr , "%s: %s\n" , file , error ); 104777Speter } 105777Speter 106777Speter int * 10714744Sthien pcalloc(num, size) 108777Speter int num, size; 109777Speter { 11014744Sthien register int *p1, *p2, nbyte; 111777Speter 112777Speter nbyte = (num*size+( ( sizeof ( int ) ) - 1 ) ) & ~( ( sizeof ( int ) ) - 1 ); 11314744Sthien if ((p1 = (int *) malloc((unsigned) nbyte)) == 0) 1141836Speter return (0); 11514744Sthien p2 = p1; 116777Speter nbyte /= sizeof ( int ); 117777Speter do { 118777Speter *p2++ = 0; 119777Speter } while (--nbyte); 120777Speter return (p1); 121777Speter } 122777Speter 123777Speter /* 124777Speter * Compare strings: s1>s2: >0 s1==s2: 0 s1<s2: <0 125777Speter */ 12614744Sthien pstrcmp(s1, s2) 127777Speter register char *s1, *s2; 128777Speter { 129777Speter 130777Speter while (*s1 == *s2++) 131777Speter if (*s1++=='\0') 132777Speter return (0); 133777Speter return (*s1 - *--s2); 134777Speter } 135777Speter 136777Speter /* 137777Speter * Copy string s2 to s1. 138777Speter * S1 must be large enough. 139777Speter * Return s1. 140777Speter */ 14114744Sthien char * 14214744Sthien pstrcpy(s1, s2) 143777Speter register char *s1, *s2; 144777Speter { 14514744Sthien register char *os1; 146777Speter 147777Speter os1 = s1; 148777Speter while (*s1++ = *s2++) 149777Speter continue; 150777Speter return (os1); 151777Speter } 152777Speter 153777Speter /* 154777Speter * Strlen is currently a freebie of perror 155777Speter * Take the length of a string. 156777Speter * Note that this does not include the trailing null! 157777Speter strlen(cp) 158777Speter register char *cp; 159777Speter { 160777Speter register int i; 161777Speter 162777Speter for (i = 0; *cp != 0; cp++) 163777Speter i++; 164777Speter return (i); 165777Speter } 166777Speter */ 167777Speter copy(to, from, bytes) 168777Speter register char *to, *from; 169777Speter register int bytes; 170777Speter { 171777Speter 172777Speter if (bytes != 0) 173777Speter do 174777Speter *to++ = *from++; 175777Speter while (--bytes); 176777Speter } 177777Speter 178777Speter /* 179777Speter * Is ch one of the characters in the string cp ? 180777Speter */ 181777Speter any(cp, ch) 182777Speter register char *cp; 183777Speter char ch; 184777Speter { 185777Speter 186777Speter while (*cp) 187777Speter if (*cp++ == ch) 188777Speter return (1); 189777Speter return (0); 190777Speter } 191777Speter 192777Speter opush(c) 193777Speter register CHAR c; 194777Speter { 195777Speter 196777Speter c -= 'A'; 197777Speter optstk[c] <<= 1; 198777Speter optstk[c] |= opts[c]; 199777Speter opts[c] = 1; 200777Speter #ifdef PI0 201777Speter send(ROPUSH, c); 202777Speter #endif 203777Speter } 204777Speter 205777Speter opop(c) 206777Speter register CHAR c; 207777Speter { 208777Speter 209777Speter c -= 'A'; 210777Speter opts[c] = optstk[c] & 1; 211777Speter optstk[c] >>= 1; 212777Speter #ifdef PI0 213777Speter send(ROPOP, c); 214777Speter #endif 215777Speter } 216