Start development on BSD 2
[unix-history] / .ref-BSD-1 / pxp / subr.c
CommitLineData
08f3139b
CH
1#include "whoami"
2/*
3 * pi - Pascal interpreter code translator
4 *
5 * Charles Haley, Bill Joy UCB
6 * Version 1.0 August 1977
7 *
8 *
9 * pxp - Pascal execution profiler
10 *
11 * Bill Joy UCB
12 * Version 1.0 August 1977
13 */
14
15#include "0.h"
16
17/*
18 * Does the string fp end in '.' and the character c ?
19 */
20dotted(fp, c)
21 register char *fp;
22 char c;
23{
24 register int i;
25
26 i = strlen(fp);
27 return (i > 1 && fp[i - 2] == '.' && fp[i - 1] == c);
28}
29
30/*
31 * Toggle the option c.
32 */
33togopt(c)
34 char c;
35{
36 register char *tp;
37
38 tp = &opts[c-'a'];
39 *tp = 1 - *tp;
40}
41
42/*
43 * Set the time vector "tvec" to the
44 * modification time stamp of the current file.
45 */
46gettime()
47{
48 int stbuf[18];
49
50 stat(filename, stbuf);
51 tvec[0] = stbuf[16];
52 tvec[1] = stbuf[17];
53}
54
55/*
56 * Convert a "ctime" into a Pascal styple time line
57 */
58myctime(tv)
59 int *tv;
60{
61 register char *cp, *dp;
62 char *cpp;
63 register i;
64 static char mycbuf[26];
65
66 cpp = ctime(tv);
67 dp = mycbuf;
68 cp = cpp;
69 cpp[16] = 0;
70 while (*dp++ = *cp++);
71 dp--;
72 cp = cpp+19;
73 cpp[24] = 0;
74 while (*dp++ = *cp++);
75 return (mycbuf);
76}
77
78/*
79 * Is "fp" in the command line list of names ?
80 */
81inpflist(fp)
82 char *fp;
83{
84 register i, *pfp;
85
86 pfp = pflist;
87 for (i = pflstc; i > 0; i--)
88 if (strcmp(fp, *pfp++) == 0)
89 return (1);
90 return (0);
91}
92
93extern int errno;
94extern char *sys_errlist[];
95
96/*
97 * Boom!
98 */
99Perror(file, error)
100 char *file, *error;
101{
102
103 errno = 0;
104 sys_errlist[0] = error;
105 perror(file);
106}
107
108calloc(num, size)
109 int num, size;
110{
111 register int p1, *p2, nbyte;
112
113 nbyte = (num*size+1) & ~01;
114 if ((p1 = alloc(nbyte)) == -1 || p1==0)
115 return (-1);
116 p2 = p1;
117 nbyte =>> 1; /* 2 bytes/word */
118 do {
119 *p2++ = 0;
120 } while (--nbyte);
121 return (p1);
122}
123
124/*
125 * Compare strings: s1>s2: >0 s1==s2: 0 s1<s2: <0
126 */
127strcmp(s1, s2)
128 register char *s1, *s2;
129{
130
131 while (*s1 == *s2++)
132 if (*s1++=='\0')
133 return (0);
134 return (*s1 - *--s2);
135}
136
137/*
138 * Copy string s2 to s1.
139 * S1 must be large enough.
140 * Return s1.
141 */
142strcpy(s1, s2)
143 register char *s1, *s2;
144{
145 register os1;
146
147 os1 = s1;
148 while (*s1++ = *s2++)
149 continue;
150 return (os1);
151}
152
153/*
154 * Strlen is currently a freebie of perror
155 * Take the length of a string.
156 * Note that this does not include the trailing null!
157strlen(cp)
158 register char *cp;
159{
160 register int i;
161
162 for (i = 0; *cp != 0; cp++)
163 i++;
164 return (i);
165}
166 */
167copy(to, from, bytes)
168 register char *to, *from;
169 register int bytes;
170{
171
172 if (bytes != 0)
173 do
174 *to++ = *from++;
175 while (--bytes);
176}
177
178/*
179 * Is ch one of the characters in the string cp ?
180 */
181any(cp, ch)
182 register char *cp;
183 char ch;
184{
185
186 while (*cp)
187 if (*cp++ == ch)
188 return (1);
189 return (0);
190}
191
192opush(c)
193 register CHAR c;
194{
195
196 c =- 'a';
197 optstk[c] =<< 1;
198 optstk[c] =| opts[c];
199 opts[c] = 1;
200}
201
202opop(c)
203 register CHAR c;
204{
205
206 c =- 'a';
207 opts[c] = optstk[c] & 1;
208 optstk[c] =>> 1;
209}