BSD 4_3_Net_2 release
[unix-history] / usr / src / usr.bin / pascal / src / subr.c
/*-
* Copyright (c) 1980 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef lint
static char sccsid[] = "@(#)subr.c 5.3 (Berkeley) 4/16/91";
#endif /* not lint */
#include "whoami.h"
#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 = &opt( c );
*tp = 1 - *tp;
}
/*
* Set the time vector "tvec" to the
* modification time stamp of a file.
*/
gettime( filename )
char *filename;
{
#include <sys/stat.h>
struct stat stb;
stat(filename, &stb);
tvec = stb.st_mtime;
}
/*
* Convert a "ctime" into a Pascal styple time line
*/
char *
myctime(tv)
int *tv;
{
register char *cp, *dp;
extern char *ctime();
char *cpp;
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;
register char **pfp;
pfp = pflist;
for (i = pflstc; i > 0; i--)
if (pstrcmp(fp, *pfp++) == 0)
return (1);
return (0);
}
#endif
/*
* Boom!
*/
Perror(file, error)
char *file, *error;
{
fprintf( stderr , "%s: %s\n" , file , error );
}
int *
pcalloc(num, size)
int num, size;
{
register int *p1, *p2, nbyte;
nbyte = (num*size+( ( sizeof ( int ) ) - 1 ) ) & ~( ( sizeof ( int ) ) - 1 );
if ((p1 = (int *) malloc((unsigned) nbyte)) == 0)
return (0);
p2 = p1;
nbyte /= sizeof ( int );
do {
*p2++ = 0;
} while (--nbyte);
return (p1);
}
/*
* Compare strings: s1>s2: >0 s1==s2: 0 s1<s2: <0
*/
pstrcmp(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.
*/
char *
pstrcpy(s1, s2)
register char *s1, *s2;
{
register char *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
}