|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.