Annotation of 3BSD/cmd/pi/subr.c, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.