Annotation of 3BSD/cmd/csh/sh.misc.c, revision 1.1

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

unix.superglobalmegacorp.com

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