Annotation of 42BSD/bin/csh/sh.misc.c, revision 1.1

1.1     ! root        1: static char *sccsid = "@(#)sh.misc.c 4.1 10/9/80";
        !             2: 
        !             3: #include "sh.h"
        !             4: 
        !             5: /*
        !             6:  * C Shell
        !             7:  */
        !             8: 
        !             9: letter(c)
        !            10:        register char c;
        !            11: {
        !            12: 
        !            13:        return (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c == '_');
        !            14: }
        !            15: 
        !            16: digit(c)
        !            17:        register char c;
        !            18: {
        !            19: 
        !            20:        return (c >= '0' && c <= '9');
        !            21: }
        !            22: 
        !            23: alnum(c)
        !            24:        register char c;
        !            25: {
        !            26:        return (letter(c) || digit(c));
        !            27: }
        !            28: 
        !            29: any(c, s)
        !            30:        register int c;
        !            31:        register char *s;
        !            32: {
        !            33: 
        !            34:        while (*s)
        !            35:                if (*s++ == c)
        !            36:                        return(1);
        !            37:        return(0);
        !            38: }
        !            39: 
        !            40: char *
        !            41: calloc(i, j)
        !            42:        register unsigned i;
        !            43:        unsigned j;
        !            44: {
        !            45:        register char *cp, *dp;
        !            46: #ifdef debug
        !            47:        static char *av[2] = {0, 0};
        !            48: #endif
        !            49: 
        !            50:        i *= j;
        !            51:        cp = (char *) malloc(i);
        !            52:        if (cp == 0) {
        !            53:                child++;
        !            54: #ifndef debug
        !            55:                error("Out of memory");
        !            56: #else
        !            57:                showall(av);
        !            58:                printf("i=%d, j=%d: ", i/j, j);
        !            59:                printf("Out of memory\n");
        !            60:                chdir("/usr/bill/cshcore");
        !            61:                abort();
        !            62: #endif
        !            63:        }
        !            64:        dp = cp;
        !            65:        if (i != 0)
        !            66:                do
        !            67:                        *dp++ = 0;
        !            68:                while (--i);
        !            69:        return (cp);
        !            70: }
        !            71: 
        !            72: cfree(p)
        !            73:        char *p;
        !            74: {
        !            75: 
        !            76:        free(p);
        !            77: }
        !            78: 
        !            79: char **
        !            80: blkend(up)
        !            81:        register char **up;
        !            82: {
        !            83: 
        !            84:        while (*up)
        !            85:                up++;
        !            86:        return (up);
        !            87: }
        !            88:  
        !            89: blkpr(av)
        !            90:        register char **av;
        !            91: {
        !            92: 
        !            93:        for (; *av; av++) {
        !            94:                printf("%s", *av);
        !            95:                if (av[1])
        !            96:                        printf(" ");
        !            97:        }
        !            98: }
        !            99: 
        !           100: blklen(av)
        !           101:        register char **av;
        !           102: {
        !           103:        register int i = 0;
        !           104: 
        !           105:        while (*av++)
        !           106:                i++;
        !           107:        return (i);
        !           108: }
        !           109: 
        !           110: char **
        !           111: blkcpy(oav, bv)
        !           112:        char **oav;
        !           113:        register char **bv;
        !           114: {
        !           115:        register char **av = oav;
        !           116: 
        !           117:        while (*av++ = *bv++)
        !           118:                continue;
        !           119:        return (oav);
        !           120: }
        !           121: 
        !           122: char **
        !           123: blkcat(up, vp)
        !           124:        char **up, **vp;
        !           125: {
        !           126: 
        !           127:        blkcpy(blkend(up), vp);
        !           128:        return (up);
        !           129: }
        !           130: 
        !           131: blkfree(av0)
        !           132:        char **av0;
        !           133: {
        !           134:        register char **av = av0;
        !           135: 
        !           136:        while (*av)
        !           137:                xfree(*av++);
        !           138:        xfree((char *)av0);
        !           139: }
        !           140: 
        !           141: char **
        !           142: saveblk(v)
        !           143:        register char **v;
        !           144: {
        !           145:        register int len = blklen(v) + 1;
        !           146:        register char **newv = (char **) calloc(len, sizeof (char **));
        !           147:        char **onewv = newv;
        !           148: 
        !           149:        while (*v)
        !           150:                *newv++ = savestr(*v++);
        !           151:        return (onewv);
        !           152: }
        !           153: 
        !           154: char *
        !           155: strspl(cp, dp)
        !           156:        register char *cp, *dp;
        !           157: {
        !           158:        register char *ep = calloc(1, strlen(cp) + strlen(dp) + 1);
        !           159: 
        !           160:        strcpy(ep, cp);
        !           161:        strcat(ep, dp);
        !           162:        return (ep);
        !           163: }
        !           164: 
        !           165: char **
        !           166: blkspl(up, vp)
        !           167:        register char **up, **vp;
        !           168: {
        !           169:        register char **wp = (char **) calloc(blklen(up) + blklen(vp) + 1, sizeof (char **));
        !           170: 
        !           171:        blkcpy(wp, up);
        !           172:        return (blkcat(wp, vp));
        !           173: }
        !           174: 
        !           175: lastchr(cp)
        !           176:        register char *cp;
        !           177: {
        !           178: 
        !           179:        if (!*cp)
        !           180:                return (0);
        !           181:        while (cp[1])
        !           182:                cp++;
        !           183:        return (*cp);
        !           184: }
        !           185: 
        !           186: /*
        !           187:  * This routine is called after an error to close up
        !           188:  * any units which may have been left open accidentally.
        !           189:  */
        !           190: closem()
        !           191: {
        !           192:        register int f;
        !           193: 
        !           194:        for (f = 0; f < NOFILE; f++)
        !           195:                if (f != SHIN && f != SHOUT && f != SHDIAG && f != OLDSTD &&
        !           196:                    f != FSHTTY)
        !           197:                        close(f);
        !           198: }
        !           199: 
        !           200: /*
        !           201:  * Close files before executing a file.
        !           202:  * We could be MUCH more intelligent, since (on a version 7 system)
        !           203:  * we need only close files here during a source, the other
        !           204:  * shell fd's being in units 16-19 which are closed automatically!
        !           205:  */
        !           206: closech()
        !           207: {
        !           208:        register int f;
        !           209: 
        !           210:        if (didcch)
        !           211:                return;
        !           212:        didcch = 1;
        !           213:        SHIN = 0; SHOUT = 1; SHDIAG = 2; OLDSTD = 0;
        !           214:        for (f = 3; f < NOFILE; f++)
        !           215:                close(f);
        !           216: }
        !           217: 
        !           218: donefds()
        !           219: {
        !           220: 
        !           221:        close(0), close(1), close(2);
        !           222:        didfds = 0;
        !           223: }
        !           224: 
        !           225: /*
        !           226:  * Move descriptor i to j.
        !           227:  * If j is -1 then we just want to get i to a safe place,
        !           228:  * i.e. to a unit > 2.  This also happens in dcopy.
        !           229:  */
        !           230: dmove(i, j)
        !           231:        register int i, j;
        !           232: {
        !           233: 
        !           234:        if (i == j || i < 0)
        !           235:                return (i);
        !           236: #ifdef V7
        !           237:        if (j >= 0) {
        !           238:                dup2(i, j);
        !           239:                return (j);
        !           240:        } else
        !           241: #endif
        !           242:                j = dcopy(i, j);
        !           243:        if (j != i)
        !           244:                close(i);
        !           245:        return (j);
        !           246: }
        !           247: 
        !           248: dcopy(i, j)
        !           249:        register int i, j;
        !           250: {
        !           251: 
        !           252:        if (i == j || i < 0 || j < 0 && i > 2)
        !           253:                return (i);
        !           254: #ifdef V7
        !           255:        if (j >= 0) {
        !           256:                dup2(i, j);
        !           257:                return (j);
        !           258:        }
        !           259: #endif
        !           260:        close(j);
        !           261:        return (renum(i, j));
        !           262: }
        !           263: 
        !           264: renum(i, j)
        !           265:        register int i, j;
        !           266: {
        !           267:        register int k = dup(i);
        !           268: 
        !           269:        if (k < 0)
        !           270:                return (-1);
        !           271:        if (j == -1 && k > 2)
        !           272:                return (k);
        !           273:        if (k != j) {
        !           274:                j = renum(k, j);
        !           275:                close(k);
        !           276:                return (j);
        !           277:        }
        !           278:        return (k);
        !           279: }
        !           280: 
        !           281: copy(to, from, size)
        !           282:        register char *to, *from;
        !           283:        register int size;
        !           284: {
        !           285: 
        !           286:        if (size)
        !           287:                do
        !           288:                        *to++ = *from++;
        !           289:                while (--size != 0);
        !           290: }
        !           291: 
        !           292: /*
        !           293:  * Left shift a command argument list, discarding
        !           294:  * the first c arguments.  Used in "shift" commands
        !           295:  * as well as by commands like "repeat".
        !           296:  */
        !           297: lshift(v, c)
        !           298:        register char **v;
        !           299:        register int c;
        !           300: {
        !           301:        register char **u = v;
        !           302: 
        !           303:        while (*u && --c >= 0)
        !           304:                xfree(*u++);
        !           305:        blkcpy(v, u);
        !           306: }
        !           307: 
        !           308: number(cp)
        !           309:        char *cp;
        !           310: {
        !           311: 
        !           312:        if (*cp == '-') {
        !           313:                cp++;
        !           314:                if (!digit(*cp++))
        !           315:                        return (0);
        !           316:        }
        !           317:        while (*cp && digit(*cp))
        !           318:                cp++;
        !           319:        return (*cp == 0);
        !           320: }
        !           321: 
        !           322: char **
        !           323: copyblk(v)
        !           324:        register char **v;
        !           325: {
        !           326:        register char **nv = (char **) calloc(blklen(v) + 1, sizeof (char **));
        !           327: 
        !           328:        return (blkcpy(nv, v));
        !           329: }
        !           330: 
        !           331: char *
        !           332: strend(cp)
        !           333:        register char *cp;
        !           334: {
        !           335: 
        !           336:        while (*cp)
        !           337:                cp++;
        !           338:        return (cp);
        !           339: }
        !           340: 
        !           341: char *
        !           342: strip(cp)
        !           343:        char *cp;
        !           344: {
        !           345:        register char *dp = cp;
        !           346: 
        !           347:        while (*dp++ &= TRIM)
        !           348:                continue;
        !           349:        return (cp);
        !           350: }
        !           351: 
        !           352: udvar(name)
        !           353:        char *name;
        !           354: {
        !           355: 
        !           356:        setname(name);
        !           357:        bferr("Undefined variable");
        !           358: }
        !           359: 
        !           360: prefix(sub, str)
        !           361:        register char *sub, *str;
        !           362: {
        !           363: 
        !           364:        for (;;) {
        !           365:                if (*sub == 0)
        !           366:                        return (1);
        !           367:                if (*str == 0)
        !           368:                        return (0);
        !           369:                if (*sub++ != *str++)
        !           370:                        return (0);
        !           371:        }
        !           372: }

unix.superglobalmegacorp.com

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