148116Sbostic /*-
2*62219Sbostic * Copyright (c) 1980, 1993
3*62219Sbostic * The Regents of the University of California. All rights reserved.
448116Sbostic *
548116Sbostic * %sccs.include.redist.c%
622196Sdist */
7777Speter
814744Sthien #ifndef lint
9*62219Sbostic static char sccsid[] = "@(#)subr.c 8.1 (Berkeley) 06/06/93";
1048116Sbostic #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 */
dotted(fp,c)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 */
togopt(c)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 */
gettime(filename)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 *
myctime(tv)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 */
inpflist(fp)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 */
Perror(file,error)99777Speter Perror(file, error)
100777Speter char *file, *error;
101777Speter {
102777Speter
1031838Speter fprintf( stderr , "%s: %s\n" , file , error );
104777Speter }
105777Speter
106777Speter int *
pcalloc(num,size)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 */
pstrcmp(s1,s2)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 *
pstrcpy(s1,s2)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 */
copy(to,from,bytes)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 */
any(cp,ch)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
opush(c)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
opop(c)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