Annotation of researchv10dc/cmd/mk/src/shprint.c, revision 1.1

1.1     ! root        1: #include       "mk.h"
        !             2: 
        !             3: shprint(s, env, dest)
        !             4:        char *s, **env, *dest;
        !             5: {
        !             6:        register char *q = dest;
        !             7: 
        !             8:        while(*s)
        !             9:                switch(*s)
        !            10:                {
        !            11:                case '\\':
        !            12:                        *q++ = *s++;
        !            13:                        *q++ = *s++;
        !            14:                        break;
        !            15:                case '$':
        !            16:                        q = vexpand(&s, q, env);
        !            17:                        break;
        !            18:                default:
        !            19:                        *q++ = *s++;
        !            20:                        break;
        !            21:                }
        !            22:        *q = 0;
        !            23: }
        !            24: 
        !            25: char *
        !            26: mygetenv(name, env)
        !            27:        char *name, **env;
        !            28: {
        !            29:        register char *p, *q;
        !            30: 
        !            31:        for(; *env; env++){
        !            32:                for(p = name, q = *env; *p == *q; p++, q++)
        !            33:                        if(*p == 0) break;
        !            34:                if((*p == 0) && (*q == '='))
        !            35:                        return(q+1);
        !            36:        }
        !            37:        return((char *)0);
        !            38: }
        !            39: 
        !            40: char *
        !            41: vexpand(ww, dest, env)
        !            42:        char **ww, *dest, **env;
        !            43: {
        !            44:        register char *s, *w = *ww;
        !            45:        char carry, *q;
        !            46: 
        !            47:        assert("vexpand no $", *w == '$');
        !            48:        if(*++w == '{'){
        !            49:                for(s = ++w; *s != '}'; s++)
        !            50:                        if(*s == 0) break;
        !            51:        } else
        !            52:                s = shname(w);
        !            53:        carry = *s;
        !            54:        *s = 0;
        !            55:        if(q = mygetenv(w, env)){
        !            56:                while(*q)
        !            57:                        *dest++ = *q++;
        !            58:        } else {        /* copy name */
        !            59:                for(q = *ww; q != s;)
        !            60:                        *dest++ = *q++;
        !            61:                if(carry == '}')
        !            62:                        *dest++ = carry;
        !            63:        }
        !            64:        *s = carry;
        !            65:        if(carry == '}')
        !            66:                s++;
        !            67:        *ww = s;
        !            68:        return(dest);
        !            69: }
        !            70: 
        !            71: front(s)
        !            72:        char *s;
        !            73: {
        !            74:        register char *t;
        !            75:        register i, j;
        !            76:        char *flds[512];
        !            77:        char buf[BIGBLOCK];
        !            78: 
        !            79:        setfields(" \t\n");
        !            80:        strcpy(buf, s);
        !            81:        i = getfields(buf, flds, 512);
        !            82:        if(i > 5){
        !            83:                flds[4] = flds[i-1];
        !            84:                flds[3] = "...";
        !            85:                i = 5;
        !            86:        }
        !            87:        t = s;
        !            88:        for(j = 0; j < i; j++){
        !            89:                for(s = flds[j]; *s; *t++ = *s++);
        !            90:                *t++ = ' ';
        !            91:        }
        !            92:        *t = 0;
        !            93: }

unix.superglobalmegacorp.com

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