Blame


1 f08fdedc 2003-11-23 devnull #include "rc.h"
2 f08fdedc 2003-11-23 devnull #include "io.h"
3 f08fdedc 2003-11-23 devnull #include "fns.h"
4 f08fdedc 2003-11-23 devnull char nl='\n'; /* change to semicolon for bourne-proofing */
5 f08fdedc 2003-11-23 devnull #define c0 t->child[0]
6 f08fdedc 2003-11-23 devnull #define c1 t->child[1]
7 f08fdedc 2003-11-23 devnull #define c2 t->child[2]
8 f08fdedc 2003-11-23 devnull void pdeglob(io *f, char *s)
9 f08fdedc 2003-11-23 devnull {
10 f08fdedc 2003-11-23 devnull while(*s){
11 f08fdedc 2003-11-23 devnull if(*s==GLOB) s++;
12 f08fdedc 2003-11-23 devnull pchr(f, *s++);
13 f08fdedc 2003-11-23 devnull }
14 f08fdedc 2003-11-23 devnull }
15 f08fdedc 2003-11-23 devnull void pcmd(io *f, tree *t)
16 f08fdedc 2003-11-23 devnull {
17 f08fdedc 2003-11-23 devnull if(t==0) return;
18 f08fdedc 2003-11-23 devnull switch(t->type){
19 f08fdedc 2003-11-23 devnull default: pfmt(f, "bad %d %p %p %p", t->type, c0, c1, c2); break;
20 f08fdedc 2003-11-23 devnull case '$': pfmt(f, "$%t", c0); break;
21 f08fdedc 2003-11-23 devnull case '"': pfmt(f, "$\"%t", c0); break;
22 f08fdedc 2003-11-23 devnull case '&': pfmt(f, "%t&", c0); break;
23 f08fdedc 2003-11-23 devnull case '^': pfmt(f, "%t^%t", c0, c1); break;
24 f08fdedc 2003-11-23 devnull case '`': pfmt(f, "`%t", c0); break;
25 f08fdedc 2003-11-23 devnull case ANDAND: pfmt(f, "%t && %t", c0, c1); break;
26 f08fdedc 2003-11-23 devnull case BANG: pfmt(f, "! %t", c0); break;
27 f08fdedc 2003-11-23 devnull case BRACE: pfmt(f, "{%t}", c0); break;
28 f08fdedc 2003-11-23 devnull case COUNT: pfmt(f, "$#%t", c0); break;
29 f08fdedc 2003-11-23 devnull case FN: pfmt(f, "fn %t %t", c0, c1); break;
30 f08fdedc 2003-11-23 devnull case IF: pfmt(f, "if%t%t", c0, c1); break;
31 f08fdedc 2003-11-23 devnull case NOT: pfmt(f, "if not %t", c0); break;
32 f08fdedc 2003-11-23 devnull case OROR: pfmt(f, "%t || %t", c0, c1); break;
33 f08fdedc 2003-11-23 devnull case PCMD:
34 f08fdedc 2003-11-23 devnull case PAREN: pfmt(f, "(%t)", c0); break;
35 f08fdedc 2003-11-23 devnull case SUB: pfmt(f, "$%t(%t)", c0, c1); break;
36 f08fdedc 2003-11-23 devnull case SIMPLE: pfmt(f, "%t", c0); break;
37 f08fdedc 2003-11-23 devnull case SUBSHELL: pfmt(f, "@ %t", c0); break;
38 f08fdedc 2003-11-23 devnull case SWITCH: pfmt(f, "switch %t %t", c0, c1); break;
39 f08fdedc 2003-11-23 devnull case TWIDDLE: pfmt(f, "~ %t %t", c0, c1); break;
40 f08fdedc 2003-11-23 devnull case WHILE: pfmt(f, "while %t%t", c0, c1); break;
41 f08fdedc 2003-11-23 devnull case ARGLIST:
42 f08fdedc 2003-11-23 devnull if(c0==0)
43 f08fdedc 2003-11-23 devnull pfmt(f, "%t", c1);
44 f08fdedc 2003-11-23 devnull else if(c1==0)
45 f08fdedc 2003-11-23 devnull pfmt(f, "%t", c0);
46 f08fdedc 2003-11-23 devnull else
47 f08fdedc 2003-11-23 devnull pfmt(f, "%t %t", c0, c1);
48 f08fdedc 2003-11-23 devnull break;
49 f08fdedc 2003-11-23 devnull case ';':
50 f08fdedc 2003-11-23 devnull if(c0){
51 f08fdedc 2003-11-23 devnull if(c1) pfmt(f, "%t%c%t", c0, nl, c1);
52 f08fdedc 2003-11-23 devnull else pfmt(f, "%t", c0);
53 f08fdedc 2003-11-23 devnull }
54 f08fdedc 2003-11-23 devnull else pfmt(f, "%t", c1);
55 f08fdedc 2003-11-23 devnull break;
56 f08fdedc 2003-11-23 devnull case WORDS:
57 f08fdedc 2003-11-23 devnull if(c0) pfmt(f, "%t ", c0);
58 f08fdedc 2003-11-23 devnull pfmt(f, "%t", c1);
59 f08fdedc 2003-11-23 devnull break;
60 f08fdedc 2003-11-23 devnull case FOR:
61 f08fdedc 2003-11-23 devnull pfmt(f, "for(%t", c0);
62 f08fdedc 2003-11-23 devnull if(c1) pfmt(f, " in %t", c1);
63 f08fdedc 2003-11-23 devnull pfmt(f, ")%t", c2);
64 f08fdedc 2003-11-23 devnull break;
65 f08fdedc 2003-11-23 devnull case WORD:
66 f08fdedc 2003-11-23 devnull if(t->quoted) pfmt(f, "%Q", t->str);
67 f08fdedc 2003-11-23 devnull else pdeglob(f, t->str);
68 f08fdedc 2003-11-23 devnull break;
69 f08fdedc 2003-11-23 devnull case DUP:
70 f08fdedc 2003-11-23 devnull if(t->rtype==DUPFD)
71 f08fdedc 2003-11-23 devnull pfmt(f, ">[%d=%d]", t->fd1, t->fd0); /* yes, fd1, then fd0; read lex.c */
72 f08fdedc 2003-11-23 devnull else
73 f08fdedc 2003-11-23 devnull pfmt(f, ">[%d=]", t->fd0);
74 f08fdedc 2003-11-23 devnull pfmt(f, "%t", c1);
75 f08fdedc 2003-11-23 devnull break;
76 f08fdedc 2003-11-23 devnull case PIPEFD:
77 f08fdedc 2003-11-23 devnull case REDIR:
78 f08fdedc 2003-11-23 devnull switch(t->rtype){
79 f08fdedc 2003-11-23 devnull case HERE:
80 f08fdedc 2003-11-23 devnull pchr(f, '<');
81 f08fdedc 2003-11-23 devnull case READ:
82 f08fdedc 2003-11-23 devnull pchr(f, '<');
83 f08fdedc 2003-11-23 devnull if(t->fd0!=0) pfmt(f, "[%d]", t->fd0);
84 f08fdedc 2003-11-23 devnull break;
85 f08fdedc 2003-11-23 devnull case APPEND:
86 f08fdedc 2003-11-23 devnull pchr(f, '>');
87 f08fdedc 2003-11-23 devnull case WRITE:
88 f08fdedc 2003-11-23 devnull pchr(f, '>');
89 f08fdedc 2003-11-23 devnull if(t->fd0!=1) pfmt(f, "[%d]", t->fd0);
90 f08fdedc 2003-11-23 devnull break;
91 f08fdedc 2003-11-23 devnull }
92 f08fdedc 2003-11-23 devnull pfmt(f, "%t", c0);
93 f08fdedc 2003-11-23 devnull if(c1) pfmt(f, " %t", c1);
94 f08fdedc 2003-11-23 devnull break;
95 f08fdedc 2003-11-23 devnull case '=':
96 f08fdedc 2003-11-23 devnull pfmt(f, "%t=%t", c0, c1);
97 f08fdedc 2003-11-23 devnull if(c2) pfmt(f, " %t", c2);
98 f08fdedc 2003-11-23 devnull break;
99 f08fdedc 2003-11-23 devnull case PIPE:
100 f08fdedc 2003-11-23 devnull pfmt(f, "%t|", c0);
101 f08fdedc 2003-11-23 devnull if(t->fd1==0){
102 f08fdedc 2003-11-23 devnull if(t->fd0!=1) pfmt(f, "[%d]", t->fd0);
103 f08fdedc 2003-11-23 devnull }
104 f08fdedc 2003-11-23 devnull else pfmt(f, "[%d=%d]", t->fd0, t->fd1);
105 f08fdedc 2003-11-23 devnull pfmt(f, "%t", c1);
106 f08fdedc 2003-11-23 devnull break;
107 f08fdedc 2003-11-23 devnull }
108 f08fdedc 2003-11-23 devnull }