|
|
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.