1*22196Sdist /* 2*22196Sdist * Copyright (c) 1980 Regents of the University of California. 3*22196Sdist * All rights reserved. The Berkeley software License Agreement 4*22196Sdist * specifies the terms and conditions for redistribution. 5*22196Sdist */ 6777Speter 714744Sthien #ifndef lint 8*22196Sdist static char sccsid[] = "@(#)subr.c 5.1 (Berkeley) 06/05/85"; 9*22196Sdist #endif not lint 10777Speter 11777Speter #include "whoami.h" 12777Speter #include "0.h" 13777Speter 14777Speter #ifndef PI1 15777Speter /* 16777Speter * Does the string fp end in '.' and the character c ? 17777Speter */ 18777Speter dotted(fp, c) 19777Speter register char *fp; 20777Speter char c; 21777Speter { 22777Speter register int i; 23777Speter 24777Speter i = strlen(fp); 25777Speter return (i > 1 && fp[i - 2] == '.' && fp[i - 1] == c); 26777Speter } 27777Speter 28777Speter /* 29777Speter * Toggle the option c. 30777Speter */ 31777Speter togopt(c) 32777Speter char c; 33777Speter { 34777Speter register char *tp; 35777Speter 36777Speter tp = &opt( c ); 37777Speter *tp = 1 - *tp; 38777Speter } 39777Speter 40777Speter /* 41777Speter * Set the time vector "tvec" to the 42777Speter * modification time stamp of a file. 43777Speter */ 44777Speter gettime( filename ) 45777Speter char *filename; 46777Speter { 476555Speter #include <sys/stat.h> 48777Speter struct stat stb; 49777Speter 50777Speter stat(filename, &stb); 51777Speter tvec = stb.st_mtime; 52777Speter } 53777Speter 54777Speter /* 55777Speter * Convert a "ctime" into a Pascal styple time line 56777Speter */ 57777Speter char * 58777Speter myctime(tv) 59777Speter int *tv; 60777Speter { 61777Speter register char *cp, *dp; 6214744Sthien extern char *ctime(); 63777Speter char *cpp; 64777Speter static char mycbuf[26]; 65777Speter 66777Speter cpp = ctime(tv); 67777Speter dp = mycbuf; 68777Speter cp = cpp; 69777Speter cpp[16] = 0; 70777Speter while (*dp++ = *cp++); 71777Speter dp--; 72777Speter cp = cpp+19; 73777Speter cpp[24] = 0; 74777Speter while (*dp++ = *cp++); 75777Speter return (mycbuf); 76777Speter } 77777Speter 78777Speter /* 79777Speter * Is "fp" in the command line list of names ? 80777Speter */ 81777Speter inpflist(fp) 82777Speter char *fp; 83777Speter { 8414744Sthien register i; 8514744Sthien register char **pfp; 86777Speter 87777Speter pfp = pflist; 88777Speter for (i = pflstc; i > 0; i--) 8914744Sthien if (pstrcmp(fp, *pfp++) == 0) 90777Speter return (1); 91777Speter return (0); 92777Speter } 93777Speter #endif 94777Speter 95777Speter extern int errno; 96777Speter extern char *sys_errlist[]; 97777Speter 98777Speter /* 99777Speter * Boom! 100777Speter */ 101777Speter Perror(file, error) 102777Speter char *file, *error; 103777Speter { 104777Speter 1051838Speter fprintf( stderr , "%s: %s\n" , file , error ); 106777Speter } 107777Speter 108777Speter int * 10914744Sthien pcalloc(num, size) 110777Speter int num, size; 111777Speter { 11214744Sthien register int *p1, *p2, nbyte; 113777Speter 114777Speter nbyte = (num*size+( ( sizeof ( int ) ) - 1 ) ) & ~( ( sizeof ( int ) ) - 1 ); 11514744Sthien if ((p1 = (int *) malloc((unsigned) nbyte)) == 0) 1161836Speter return (0); 11714744Sthien p2 = p1; 118777Speter nbyte /= sizeof ( int ); 119777Speter do { 120777Speter *p2++ = 0; 121777Speter } while (--nbyte); 122777Speter return (p1); 123777Speter } 124777Speter 125777Speter /* 126777Speter * Compare strings: s1>s2: >0 s1==s2: 0 s1<s2: <0 127777Speter */ 12814744Sthien pstrcmp(s1, s2) 129777Speter register char *s1, *s2; 130777Speter { 131777Speter 132777Speter while (*s1 == *s2++) 133777Speter if (*s1++=='\0') 134777Speter return (0); 135777Speter return (*s1 - *--s2); 136777Speter } 137777Speter 138777Speter /* 139777Speter * Copy string s2 to s1. 140777Speter * S1 must be large enough. 141777Speter * Return s1. 142777Speter */ 14314744Sthien char * 14414744Sthien pstrcpy(s1, s2) 145777Speter register char *s1, *s2; 146777Speter { 14714744Sthien register char *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