home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
minnie.tuhs.org
/
unixen.tar
/
unixen
/
PDP-11
/
Distributions
/
ucb
/
spencer_2bsd.tar.gz
/
2bsd.tar
/
src
/
pi1
/
subr.c
< prev
next >
Wrap
C/C++ Source or Header
|
1980-02-17
|
3KB
|
218 lines
/* Copyright (c) 1979 Regents of the University of California */
/*
* pi - Pascal interpreter code translator
*
* Charles Haley, Bill Joy UCB
* Version 1.2 January 1979
*
*
* pxp - Pascal execution profiler
*
* Bill Joy UCB
* Version 1.2 January 1979
*/
#include "0.h"
#ifndef PI1
/*
* Does the string fp end in '.' and the character c ?
*/
dotted(fp, c)
register char *fp;
char c;
{
register int i;
i = strlen(fp);
return (i > 1 && fp[i - 2] == '.' && fp[i - 1] == c);
}
/*
* Toggle the option c.
*/
togopt(c)
char c;
{
register char *tp;
tp = &opts[c-'a'];
*tp = 1 - *tp;
}
/*
* Set the time vector "tvec" to the
* modification time stamp of the current file.
*/
gettime()
{
int stbuf[18];
stat(filename, stbuf);
tvec[0] = stbuf[16];
tvec[1] = stbuf[17];
}
/*
* Convert a "ctime" into a Pascal styple time line
*/
myctime(tv)
int *tv;
{
register char *cp, *dp;
char *cpp;
register i;
static char mycbuf[26];
cpp = ctime(tv);
dp = mycbuf;
cp = cpp;
cpp[16] = 0;
while (*dp++ = *cp++);
dp--;
cp = cpp+19;
cpp[24] = 0;
while (*dp++ = *cp++);
return (mycbuf);
}
/*
* Is "fp" in the command line list of names ?
*/
inpflist(fp)
char *fp;
{
register i, *pfp;
pfp = pflist;
for (i = pflstc; i > 0; i--)
if (strcmp(fp, *pfp++) == 0)
return (1);
return (0);
}
#endif
extern int errno;
extern char *sys_errlist[];
/*
* Boom!
*/
Perror(file, error)
char *file, *error;
{
errno = 0;
sys_errlist[0] = error;
perror(file);
}
calloc(num, size)
int num, size;
{
register int p1, *p2, nbyte;
nbyte = (num*size+1) & ~01;
if ((p1 = alloc(nbyte)) == -1 || p1==0)
return (-1);
p2 = p1;
nbyte =>> 1; /* 2 bytes/word */
do {
*p2++ = 0;
} while (--nbyte);
return (p1);
}
/*
* Compare strings: s1>s2: >0 s1==s2: 0 s1<s2: <0
*/
strcmp(s1, s2)
register char *s1, *s2;
{
while (*s1 == *s2++)
if (*s1++=='\0')
return (0);
return (*s1 - *--s2);
}
/*
* Copy string s2 to s1.
* S1 must be large enough.
* Return s1.
*/
strcpy(s1, s2)
register char *s1, *s2;
{
register os1;
os1 = s1;
while (*s1++ = *s2++)
continue;
return (os1);
}
/*
* Strlen is currently a freebie of perror
* Take the length of a string.
* Note that this does not include the trailing null!
strlen(cp)
register char *cp;
{
register int i;
for (i = 0; *cp != 0; cp++)
i++;
return (i);
}
*/
copy(to, from, bytes)
register char *to, *from;
register int bytes;
{
if (bytes != 0)
do
*to++ = *from++;
while (--bytes);
}
/*
* Is ch one of the characters in the string cp ?
*/
any(cp, ch)
register char *cp;
char ch;
{
while (*cp)
if (*cp++ == ch)
return (1);
return (0);
}
opush(c)
register CHAR c;
{
c =- 'a';
optstk[c] =<< 1;
optstk[c] =| opts[c];
opts[c] = 1;
#ifdef PI0
send(ROPUSH, c);
#endif
}
opop(c)
register CHAR c;
{
c =- 'a';
opts[c] = optstk[c] & 1;
optstk[c] =>> 1;
#ifdef PI0
send(ROPOP, c);
#endif
}