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