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]
10 c8f53842 2007-03-26 devnull pdeglob(io *f, char *s)
12 f08fdedc 2003-11-23 devnull while(*s){
13 c8f53842 2007-03-26 devnull if(*s==GLOB)
15 f08fdedc 2003-11-23 devnull pchr(f, *s++);
20 c8f53842 2007-03-26 devnull pcmd(io *f, tree *t)
24 f08fdedc 2003-11-23 devnull switch(t->type){
25 c8f53842 2007-03-26 devnull default: pfmt(f, "bad %d %p %p %p", t->type, c0, c1, c2);
27 c8f53842 2007-03-26 devnull case '$': pfmt(f, "$%t", c0);
29 c8f53842 2007-03-26 devnull case '"': pfmt(f, "$\"%t", c0);
31 c8f53842 2007-03-26 devnull case '&': pfmt(f, "%t&", c0);
33 c8f53842 2007-03-26 devnull case '^': pfmt(f, "%t^%t", c0, c1);
35 c8f53842 2007-03-26 devnull case '`': pfmt(f, "`%t", c0);
37 c8f53842 2007-03-26 devnull case ANDAND: pfmt(f, "%t && %t", c0, c1);
39 c8f53842 2007-03-26 devnull case BANG: pfmt(f, "! %t", c0);
41 c8f53842 2007-03-26 devnull case BRACE: pfmt(f, "{%t}", c0);
43 c8f53842 2007-03-26 devnull case COUNT: pfmt(f, "$#%t", c0);
45 c8f53842 2007-03-26 devnull case FN: pfmt(f, "fn %t %t", c0, c1);
47 c8f53842 2007-03-26 devnull case IF: pfmt(f, "if%t%t", c0, c1);
49 c8f53842 2007-03-26 devnull case NOT: pfmt(f, "if not %t", c0);
51 c8f53842 2007-03-26 devnull case OROR: pfmt(f, "%t || %t", c0, c1);
53 f08fdedc 2003-11-23 devnull case PCMD:
54 c8f53842 2007-03-26 devnull case PAREN: pfmt(f, "(%t)", c0);
56 c8f53842 2007-03-26 devnull case SUB: pfmt(f, "$%t(%t)", c0, c1);
58 c8f53842 2007-03-26 devnull case SIMPLE: pfmt(f, "%t", c0);
60 c8f53842 2007-03-26 devnull case SUBSHELL: pfmt(f, "@ %t", c0);
62 c8f53842 2007-03-26 devnull case SWITCH: pfmt(f, "switch %t %t", c0, c1);
64 c8f53842 2007-03-26 devnull case TWIDDLE: pfmt(f, "~ %t %t", c0, c1);
66 c8f53842 2007-03-26 devnull case WHILE: pfmt(f, "while %t%t", c0, c1);
68 f08fdedc 2003-11-23 devnull case ARGLIST:
69 f08fdedc 2003-11-23 devnull if(c0==0)
70 f08fdedc 2003-11-23 devnull pfmt(f, "%t", c1);
71 f08fdedc 2003-11-23 devnull else if(c1==0)
72 f08fdedc 2003-11-23 devnull pfmt(f, "%t", c0);
74 f08fdedc 2003-11-23 devnull pfmt(f, "%t %t", c0, c1);
76 f08fdedc 2003-11-23 devnull case ';':
79 c8f53842 2007-03-26 devnull pfmt(f, "%t%c%t", c0, nl, c1);
80 f08fdedc 2003-11-23 devnull else pfmt(f, "%t", c0);
82 f08fdedc 2003-11-23 devnull else pfmt(f, "%t", c1);
84 f08fdedc 2003-11-23 devnull case WORDS:
86 c8f53842 2007-03-26 devnull pfmt(f, "%t ", c0);
87 f08fdedc 2003-11-23 devnull pfmt(f, "%t", c1);
89 f08fdedc 2003-11-23 devnull case FOR:
90 f08fdedc 2003-11-23 devnull pfmt(f, "for(%t", c0);
92 c8f53842 2007-03-26 devnull pfmt(f, " in %t", c1);
93 f08fdedc 2003-11-23 devnull pfmt(f, ")%t", c2);
95 f08fdedc 2003-11-23 devnull case WORD:
96 c8f53842 2007-03-26 devnull if(t->quoted)
97 c8f53842 2007-03-26 devnull pfmt(f, "%Q", t->str);
98 f08fdedc 2003-11-23 devnull else pdeglob(f, t->str);
100 f08fdedc 2003-11-23 devnull case DUP:
101 f08fdedc 2003-11-23 devnull if(t->rtype==DUPFD)
102 f08fdedc 2003-11-23 devnull pfmt(f, ">[%d=%d]", t->fd1, t->fd0); /* yes, fd1, then fd0; read lex.c */
104 f08fdedc 2003-11-23 devnull pfmt(f, ">[%d=]", t->fd0);
105 f08fdedc 2003-11-23 devnull pfmt(f, "%t", c1);
107 f08fdedc 2003-11-23 devnull case PIPEFD:
108 f08fdedc 2003-11-23 devnull case REDIR:
109 f08fdedc 2003-11-23 devnull switch(t->rtype){
110 f08fdedc 2003-11-23 devnull case HERE:
111 f08fdedc 2003-11-23 devnull pchr(f, '<');
112 f08fdedc 2003-11-23 devnull case READ:
113 c8f53842 2007-03-26 devnull case RDWR:
114 f08fdedc 2003-11-23 devnull pchr(f, '<');
115 c8f53842 2007-03-26 devnull if(t->rtype==RDWR)
116 c8f53842 2007-03-26 devnull pchr(f, '>');
117 c8f53842 2007-03-26 devnull if(t->fd0!=0)
118 c8f53842 2007-03-26 devnull pfmt(f, "[%d]", t->fd0);
120 f08fdedc 2003-11-23 devnull case APPEND:
121 f08fdedc 2003-11-23 devnull pchr(f, '>');
122 f08fdedc 2003-11-23 devnull case WRITE:
123 f08fdedc 2003-11-23 devnull pchr(f, '>');
124 c8f53842 2007-03-26 devnull if(t->fd0!=1)
125 c8f53842 2007-03-26 devnull pfmt(f, "[%d]", t->fd0);
128 f08fdedc 2003-11-23 devnull pfmt(f, "%t", c0);
130 c8f53842 2007-03-26 devnull pfmt(f, " %t", c1);
132 f08fdedc 2003-11-23 devnull case '=':
133 f08fdedc 2003-11-23 devnull pfmt(f, "%t=%t", c0, c1);
135 c8f53842 2007-03-26 devnull pfmt(f, " %t", c2);
137 f08fdedc 2003-11-23 devnull case PIPE:
138 f08fdedc 2003-11-23 devnull pfmt(f, "%t|", c0);
139 f08fdedc 2003-11-23 devnull if(t->fd1==0){
140 c8f53842 2007-03-26 devnull if(t->fd0!=1)
141 c8f53842 2007-03-26 devnull pfmt(f, "[%d]", t->fd0);
143 f08fdedc 2003-11-23 devnull else pfmt(f, "[%d=%d]", t->fd0, t->fd1);
144 f08fdedc 2003-11-23 devnull pfmt(f, "%t", c1);