home *** CD-ROM | disk | FTP | other *** search
- /*-
- * 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
- }
-