Annotation of researchv10no/cmd/mk/src/shprint.c, revision 1.1.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.