1 /* $Header: walk.c,v 2.0 88/06/05 00:16:12 root Exp $
4 * Revision 2.0 88/06/05 00:16:12 root
5 * Baseline version 2.0.
15 bool realexit = FALSE;
16 bool saw_getline = FALSE;
22 walk(useval,level,node,numericptr)
45 type = ops[node].ival;
50 str = walk(0,level,ops[node+1].ival,&numarg);
52 if (do_split && need_entire && !absmaxfld)
53 split_to_array = TRUE;
54 if (do_split && split_to_array)
55 set_array_base = TRUE;
57 str_cat(str,"$[ = 1;\t\t\t# set array base to 1\n");
59 if (fswitch && !const_FS)
61 if (saw_FS > 1 || saw_RS)
63 if (saw_ORS && need_entire)
66 str_cat(str,"$FS = '");
67 if (index("*+?.[]()|^$\\",fswitch))
69 sprintf(tokenbuf,"%c",fswitch);
70 str_cat(str,tokenbuf);
71 str_cat(str,"';\t\t# field separator from -F switch\n");
73 else if (saw_FS && !const_FS) {
74 str_cat(str,"$FS = ' ';\t\t# set field separator\n");
77 str_cat(str,"$, = ' ';\t\t# set output field separator\n");
80 str_cat(str,"$\\ = \"\\n\";\t\t# set output record separator\n");
82 if (str->str_cur > 20)
84 if (ops[node+2].ival) {
85 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
90 str_cat(str,"line: ");
91 str_cat(str,"while (<>) {\n");
93 if (saw_FS && !const_FS)
96 str_cat(str,"chop;\t# strip record separator\n");
101 while (isalpha(*namelist)) {
102 for (d = tokenbuf,s=namelist;
103 isalpha(*s) || isdigit(*s) || *s == '_';
106 while (*s && !isalpha(*s)) s++;
108 nameary[++arymax] = savestr(tokenbuf);
114 emit_split(str,level);
115 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
119 if (ops[node+4].ival) {
123 str_scat(str,fstr=walk(0,level,ops[node+4].ival,&numarg));
128 str_cat(str,"exit ExitValue;\n");
130 str_cat(str,"\nsub Getline {\n $_ = <>;\n");
133 str_cat(str,"chop;\t# strip record separator\n");
137 emit_split(str,level);
141 if (do_fancy_opens) {
145 $fh = $opened{$name};\n\
147 $nextfh == 0 && open(fh_0,$name);\n\
148 $nextfh == 1 && open(fh_1,$name);\n\
149 $nextfh == 2 && open(fh_2,$name);\n\
150 $nextfh == 3 && open(fh_3,$name);\n\
151 $nextfh == 4 && open(fh_4,$name);\n\
152 $nextfh == 5 && open(fh_5,$name);\n\
153 $nextfh == 6 && open(fh_6,$name);\n\
154 $nextfh == 7 && open(fh_7,$name);\n\
155 $nextfh == 8 && open(fh_8,$name);\n\
156 $nextfh == 9 && open(fh_9,$name);\n\
157 $fh = $opened{$name} = 'fh_' . $nextfh++;\n\
165 str = walk(0,level,ops[node+1].ival,&numarg);
166 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
169 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
176 str = walk(1,level,ops[node+1].ival,&numarg);
178 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
186 tmpstr=walk(0,level,ops[node+1].ival,&numarg);
187 /* translate \nnn to [\nnn] */
188 for (s = tmpstr->str_ptr, d = tokenbuf; *s; s++, d++) {
189 if (*s == '\\' && isdigit(s[1]) && isdigit(s[2]) && isdigit(s[3])) {
201 for (d=tokenbuf; *d; d++)
203 str_cat(str,tokenbuf);
210 str = walk(0,level,oper1(OPRINT,0),&numarg);
212 str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg));
217 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
218 if (*tmpstr->str_ptr) {
221 str_scat(str,tmpstr);
222 str_cat(str,") {\n");
224 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
231 str = walk(0,level,ops[node+2].ival,&numarg);
238 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
243 str = walk(1,level,ops[node+1].ival,&numarg);
245 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
249 str = walk(1,level,ops[node+1].ival,&numarg);
251 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
257 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
263 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
269 str = walk(1,level,ops[node+1].ival,&numarg);
272 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
276 str = walk(1,level,ops[node+1].ival,&numarg);
279 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
285 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
290 str = walk(1,level,ops[node+2].ival,&numarg);
292 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
293 tmp2str = walk(1,level,ops[node+3].ival,&numarg);
298 str_set(tmpstr,"eq");
299 else if (strEQ(t,"!="))
300 str_set(tmpstr,"ne");
301 else if (strEQ(t,"<"))
302 str_set(tmpstr,"lt");
303 else if (strEQ(t,"<="))
304 str_set(tmpstr,"le");
305 else if (strEQ(t,">"))
306 str_set(tmpstr,"gt");
307 else if (strEQ(t,">="))
308 str_set(tmpstr,"ge");
309 if (!index(tmpstr->str_ptr,'\'') && !index(tmpstr->str_ptr,'"') &&
310 !index(tmp2str->str_ptr,'\'') && !index(tmp2str->str_ptr,'"') )
314 if (numeric & 1) /* numeric is very good guess */
322 str_scat(str,tmpstr);
325 str_scat(str,tmp2str);
332 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
338 str = walk(1,level,ops[node+2].ival,&numarg);
340 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
341 if (strEQ(tmpstr->str_ptr,"~"))
344 str_scat(str,tmpstr);
348 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg));
355 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
361 str = walk(1,level,ops[node+1].ival,&numarg);
363 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
367 str = walk(0,level,ops[node+2].ival,&numarg);
369 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
370 str_scat(str,tmpstr);
371 if (str_len(tmpstr) > 1)
375 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg));
380 str = walk(1,level,ops[node+1].ival,&numarg);
382 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
387 str = walk(1,level,ops[node+1].ival,&numarg);
389 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
394 str = walk(1,level,ops[node+1].ival,&numarg);
396 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
401 str = walk(1,level,ops[node+1].ival,&numarg);
403 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
408 str = walk(1,level,ops[node+1].ival,&numarg);
410 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
415 str = walk(1,level,ops[node+1].ival,&numarg);
420 str = walk(1,level,ops[node+1].ival,&numarg);
427 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
434 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
441 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
451 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
458 str_set(str,"do Getline()");
463 str_set(str,"sprintf(");
464 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
470 str_set(str,"substr(");
471 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
474 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
478 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg));
482 str_cat(str,"999999");
487 str_set(str,ops[node+1].cval);
492 tmpstr = walk(1,level,ops[node+2].ival,&numarg);
497 str_scat(str,tmpstr);
498 str_cat(str," = split(");
500 fstr = walk(1,level,ops[node+3].ival,&numarg);
501 if (str_len(fstr) == 3 && *fstr->str_ptr == '\'') {
502 i = fstr->str_ptr[1] & 127;
503 if (index("*+?.[]()|^$\\",i))
504 sprintf(tokenbuf,"/\\%c/",i);
506 sprintf(tokenbuf,"/%c/",i);
507 str_cat(str,tokenbuf);
514 sprintf(tokenbuf,"/[%c\\n]/",const_FS);
515 str_cat(str,tokenbuf);
522 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
532 str_set(str,"index(");
533 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
536 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
542 str = walk(1,level,ops[node+1].ival,&numarg);
546 tmpstr = walk(1,level,ops[node+1].ival,&numarg);
548 for (t = tmpstr->str_ptr, d=tokenbuf; *t; d++,t++) {
551 else if (*t == '\\') {
555 case '\\': case '"': case 'n': case 't':
557 default: /* hide this from perl */
566 str_cat(str,tokenbuf);
573 str_scat(str,tmpstr=walk(1,level,ops[node+1].ival,&numarg));
575 tmp2str = hfetch(symtab,tmpstr->str_ptr);
576 if (tmp2str && atoi(tmp2str->str_ptr))
578 if (strEQ(str->str_ptr,"$NR")) {
582 else if (strEQ(str->str_ptr,"$NF")) {
584 str_set(str,"$#Fld");
586 else if (strEQ(str->str_ptr,"$0"))
590 str_cat(tmpstr,"[]");
591 tmp2str = hfetch(symtab,tmpstr->str_ptr);
592 if (tmp2str && atoi(tmp2str->str_ptr))
596 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
598 if (tmp2str && atoi(tmp2str->str_ptr))
599 strcpy(tokenbuf,"]");
601 strcpy(tokenbuf,"}");
603 str_cat(str,tokenbuf);
609 if (split_to_array) {
612 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
617 i = atoi(walk(1,level,ops[node+1].ival,&numarg)->str_ptr);
619 sprintf(tokenbuf,"$%s",nameary[i]);
621 sprintf(tokenbuf,"$Fld%d",i);
622 str_set(str,tokenbuf);
627 str_set(str,"$Fld[");
628 i = ops[node+1].ival;
629 if ((ops[i].ival & 255) == OPAREN)
631 tmpstr=walk(1,level,i,&numarg);
632 str_scat(str,tmpstr);
651 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
652 for (s = tmpstr->str_ptr; *s && *s != '\n'; s++)
654 str_scat(str,tmpstr);
660 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
661 for (s = tmpstr->str_ptr; *s && *s != '\n'; s++)
663 str_scat(str,tmpstr);
668 str = walk(1,level,ops[node+1].ival,&numarg);
670 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
678 str = walk(0,level,ops[node+1].ival,&numarg);
679 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
685 str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg));
688 tmpstr = walk(0,level,ops[node+2].ival,&numarg);
689 if (*tmpstr->str_ptr == ';') {
691 str_cat(str,tmpstr->str_ptr+1);
699 lparen = ""; /* set to parens if necessary */
702 if (len == 3) { /* output redirection */
703 tmpstr = walk(1,level,ops[node+3].ival,&numarg);
704 tmp2str = walk(1,level,ops[node+2].ival,&numarg);
705 if (!do_fancy_opens) {
707 if (*t == '"' || *t == '\'')
708 t = cpytill(tokenbuf,t+1,*t);
710 fatal("Internal error: OPRINT");
712 s = savestr(tokenbuf);
713 for (t = tokenbuf; *t; t++) {
715 if (!isalpha(*t) && !isdigit(*t))
718 if (!index(tokenbuf,'_'))
720 str_cat(opens,"open(");
721 str_cat(opens,tokenbuf);
725 str_scat(opens,tmp2str);
726 str_cat(opens,tmpstr->str_ptr+1);
727 if (*tmp2str->str_ptr == '|')
728 str_cat(opens,") || die 'Cannot pipe to \"");
730 str_cat(opens,") || die 'Cannot create file \"");
732 str_cat(opens,"'.\"");
735 str_cat(opens,"\".'");
736 str_cat(opens,"\".';\n");
743 sprintf(tokenbuf,"do Pick('%s' . (%s)) &&\n",
744 tmp2str->str_ptr, tmpstr->str_ptr);
745 str_cat(str,tokenbuf);
755 strcpy(tokenbuf,"stdout");
756 str_cat(str,lparen); /* may be null */
758 str_cat(str,"printf");
760 str_cat(str,"print");
761 if (len == 3 || do_fancy_opens) {
764 str_cat(str,tokenbuf);
766 tmpstr = walk(1+(type==OPRINT),level,ops[node+1].ival,&numarg);
767 if (!*tmpstr->str_ptr && lval_field) {
768 t = saw_OFS ? "$," : "' '";
769 if (split_to_array) {
770 sprintf(tokenbuf,"join(%s,@Fld)",t);
771 str_cat(tmpstr,tokenbuf);
774 for (i = 1; i < maxfld; i++) {
776 sprintf(tokenbuf,"$%s, ",nameary[i]);
778 sprintf(tokenbuf,"$Fld%d, ",i);
779 str_cat(tmpstr,tokenbuf);
781 if (maxfld <= arymax)
782 sprintf(tokenbuf,"$%s",nameary[maxfld]);
784 sprintf(tokenbuf,"$Fld%d",maxfld);
785 str_cat(tmpstr,tokenbuf);
788 if (*tmpstr->str_ptr) {
790 str_scat(str,tmpstr);
795 str_cat(str,rparen); /* may be null */
799 str = str_make("length(");
802 str = str_make("log(");
805 str = str_make("exp(");
808 str = str_make("sqrt(");
811 str = str_make("int(");
815 tmpstr = walk(1,level,ops[node+1].ival,&numarg);
817 tmpstr = str_new(0);;
818 if (!*tmpstr->str_ptr) {
820 t = saw_OFS ? "$," : "' '";
821 if (split_to_array) {
822 sprintf(tokenbuf,"join(%s,@Fld)",t);
823 str_cat(tmpstr,tokenbuf);
826 sprintf(tokenbuf,"join(%s, ",t);
827 str_cat(tmpstr,tokenbuf);
828 for (i = 1; i < maxfld; i++) {
830 sprintf(tokenbuf,"$%s,",nameary[i]);
832 sprintf(tokenbuf,"$Fld%d,",i);
833 str_cat(tmpstr,tokenbuf);
835 if (maxfld <= arymax)
836 sprintf(tokenbuf,"$%s)",nameary[maxfld]);
838 sprintf(tokenbuf,"$Fld%d)",maxfld);
839 str_cat(tmpstr,tokenbuf);
843 str_cat(tmpstr,"$_");
845 if (strEQ(tmpstr->str_ptr,"$_")) {
846 if (type == OLENGTH && !do_chop) {
847 str = str_make("(length(");
848 str_cat(tmpstr,") - 1");
851 str_scat(str,tmpstr);
861 str_set(str,"next line");
870 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
876 str_set(str,"ExitValue = ");
878 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
882 str_cat(str,"last line");
894 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
897 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
900 i = ops[node+3].ival;
902 if ((ops[i].ival & 255) == OBLOCK) {
905 if ((ops[i].ival & 255) != OIF)
914 str_scat(str,fstr=walk(0,level,i,&numarg));
918 str_cat(str,"else ");
919 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
926 str_set(str,"while (");
927 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
930 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
935 str_set(str,"for (");
936 str_scat(str,tmpstr=walk(1,level,ops[node+1].ival,&numarg));
939 t = s = tmpstr->str_ptr;
940 while (isalpha(*t) || isdigit(*t) || *t == '$' || *t == '_')
947 fstr=walk(1,level,ops[node+2].ival,&numarg);
948 if (i && (t = index(fstr->str_ptr,0377))) {
949 if (strnEQ(fstr->str_ptr,s,i))
956 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg));
959 str_scat(str,fstr=walk(0,level,ops[node+4].ival,&numarg));
963 tmpstr=walk(0,level,ops[node+2].ival,&numarg);
965 str_sset(str,tmpstr);
967 tmp2str = hfetch(symtab,str->str_ptr);
968 if (tmp2str && atoi(tmp2str->str_ptr)) {
969 fstr=walk(1,level,ops[node+1].ival,&numarg);
971 "foreach $%s (@%s) ",
974 str_set(str,tokenbuf);
976 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
980 str_set(str,"while (($");
981 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
983 str_cat(str,",$junkval) = each(");
984 str_scat(str,tmpstr);
986 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
994 if (len >= 2 && ops[node+2].ival) {
995 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
999 str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg));
1002 fixtab(str,--level);
1006 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
1014 fatal("Garbage length in walk");
1015 str = walk(0,level,ops[node+1].ival,&numarg);
1016 for (i = 2; i<= len; i++) {
1017 str_scat(str,fstr=walk(0,level,ops[node+i].ival,&numarg));
1028 *numericptr = numeric;
1031 printf("%3d %5d %15s %d %4d ",level,node,opname[type],len,str->str_cur);
1032 for (t = str->str_ptr; *t && t - str->str_ptr < 40; t++)
1035 else if (*t == '\t')
1063 /* strip trailing white space */
1065 s = str->str_ptr+str->str_cur - 1;
1066 while (s >= str->str_ptr && (*s == ' ' || *s == '\t'))
1069 str->str_cur = s + 1 - str->str_ptr;
1070 if (s >= str->str_ptr && *s != '\n')
1081 s = str->str_ptr+str->str_cur - 1;
1082 while (s >= str->str_ptr && (*s == ' ' || *s == '\t' || *s == '\n'))
1084 if (s >= str->str_ptr && *s != ';' && *s != '}')
1088 emit_split(str,level)
1095 str_cat(str,"@Fld");
1098 for (i = 1; i < maxfld; i++) {
1100 sprintf(tokenbuf,"$%s,",nameary[i]);
1102 sprintf(tokenbuf,"$Fld%d,",i);
1103 str_cat(str,tokenbuf);
1105 if (maxfld <= arymax)
1106 sprintf(tokenbuf,"$%s)",nameary[maxfld]);
1108 sprintf(tokenbuf,"$Fld%d)",maxfld);
1109 str_cat(str,tokenbuf);
1112 sprintf(tokenbuf," = split(/[%c\\n]/);\n",const_FS);
1113 str_cat(str,tokenbuf);
1116 str_cat(str," = split($FS);\n");
1118 str_cat(str," = split(' ');\n");
1122 prewalk(numit,level,node,numericptr)
1134 int numeric = FALSE;
1140 type = ops[node].ival;
1145 prewalk(0,level,ops[node+1].ival,&numarg);
1146 if (ops[node+2].ival) {
1147 prewalk(0,level,ops[node+2].ival,&numarg);
1150 prewalk(0,level,ops[node+3].ival,&numarg);
1152 if (ops[node+3].ival) {
1153 prewalk(0,level,ops[node+4].ival,&numarg);
1157 prewalk(0,level,ops[node+1].ival,&numarg);
1158 prewalk(0,level,ops[node+2].ival,&numarg);
1160 prewalk(0,level,ops[node+3].ival,&numarg);
1164 prewalk(1,level,ops[node+1].ival,&numarg);
1165 prewalk(1,level,ops[node+2].ival,&numarg);
1170 prewalk(0,level,ops[node+1].ival,&numarg);
1174 prewalk(0,level,ops[node+1].ival,&numarg);
1177 i = prewalk(0,level,ops[node+1].ival,&numarg);
1180 prewalk(0,level,ops[node+2].ival,&numarg);
1184 prewalk(0,level,ops[node+2].ival,&numarg);
1189 prewalk(0,level,ops[node+1].ival,&numarg);
1192 prewalk(0,level,ops[node+1].ival,&numarg);
1193 prewalk(0,level,ops[node+2].ival,&numarg);
1196 prewalk(0,level,ops[node+1].ival,&numarg);
1197 prewalk(0,level,ops[node+2].ival,&numarg);
1200 prewalk(0,level,ops[node+1].ival,&numarg);
1203 prewalk(0,level,ops[node+1].ival,&numarg);
1207 prewalk(0,level,ops[node+1].ival,&numarg);
1209 prewalk(0,level,ops[node+2].ival,&numarg);
1212 prewalk(0,level,ops[node+1].ival,&numarg);
1214 prewalk(0,level,ops[node+2].ival,&numarg);
1217 prewalk(0,level,ops[node+1].ival,&numarg);
1221 prewalk(0,level,ops[node+2].ival,&numarg);
1223 prewalk(0,level,ops[node+1].ival,&numarg);
1224 prewalk(0,level,ops[node+3].ival,&numarg);
1229 prewalk(0,level,ops[node+1].ival,&numarg);
1233 prewalk(0,level,ops[node+2].ival,&numarg);
1234 prewalk(0,level,ops[node+1].ival,&numarg);
1235 prewalk(0,level,ops[node+3].ival,&numarg);
1239 prewalk(0,level,ops[node+1].ival,&numarg);
1243 prewalk(0,level,ops[node+1].ival,&numarg);
1244 prewalk(0,level,ops[node+2].ival,&numarg);
1247 prewalk(0,level,ops[node+2].ival,&numarg);
1248 prewalk(0,level,ops[node+1].ival,&numarg);
1249 prewalk(0,level,ops[node+3].ival,&numarg);
1250 if (numarg || strlen(ops[ops[node+1].ival+1].cval) > 1) {
1251 numericize(ops[node+2].ival);
1253 numericize(ops[node+3].ival);
1258 prewalk(1,level,ops[node+1].ival,&numarg);
1259 prewalk(1,level,ops[node+2].ival,&numarg);
1263 prewalk(1,level,ops[node+1].ival,&numarg);
1264 prewalk(1,level,ops[node+2].ival,&numarg);
1268 prewalk(1,level,ops[node+1].ival,&numarg);
1269 prewalk(1,level,ops[node+2].ival,&numarg);
1273 prewalk(1,level,ops[node+1].ival,&numarg);
1274 prewalk(1,level,ops[node+2].ival,&numarg);
1278 prewalk(1,level,ops[node+1].ival,&numarg);
1279 prewalk(1,level,ops[node+2].ival,&numarg);
1283 prewalk(1,level,ops[node+1].ival,&numarg);
1287 prewalk(1,level,ops[node+1].ival,&numarg);
1291 prewalk(1,level,ops[node+1].ival,&numarg);
1295 prewalk(1,level,ops[node+1].ival,&numarg);
1299 prewalk(1,level,ops[node+1].ival,&numarg);
1303 prewalk(1,level,ops[node+1].ival,&numarg);
1307 prewalk(0,level,ops[node+1].ival,&numarg);
1313 prewalk(0,level,ops[node+1].ival,&numarg);
1316 prewalk(0,level,ops[node+1].ival,&numarg);
1317 prewalk(1,level,ops[node+2].ival,&numarg);
1319 prewalk(1,level,ops[node+3].ival,&numarg);
1326 prewalk(0,level,ops[node+2].ival,&numarg);
1328 prewalk(0,level,ops[node+3].ival,&numarg);
1329 prewalk(0,level,ops[node+1].ival,&numarg);
1332 prewalk(0,level,ops[node+1].ival,&numarg);
1333 prewalk(0,level,ops[node+2].ival,&numarg);
1337 prewalk(0,level,ops[node+1].ival,&numarg);
1341 prewalk(0,level,ops[node+1].ival,&numarg);
1344 prewalk(0,level,ops[node+1].ival,&numarg);
1350 prewalk(0,level,ops[node+2].ival,&numarg);
1354 prewalk(0,level,ops[node+1].ival,&numarg);
1357 i = ops[node+1].ival;
1358 prewalk(0,level,i,&numarg);
1371 prewalk(0,level,ops[node+1].ival,&numarg);
1372 prewalk(0,level,ops[node+2].ival,&numarg);
1377 prewalk(0,level,ops[node+1].ival,&numarg);
1378 prewalk(0,level,ops[node+2].ival,&numarg);
1382 prewalk(0,level,ops[node+1].ival,&numarg);
1384 prewalk(0,level,ops[node+2].ival,&numarg);
1390 if (len == 3) { /* output redirection */
1391 prewalk(0,level,ops[node+3].ival,&numarg);
1392 prewalk(0,level,ops[node+2].ival,&numarg);
1394 prewalk(0+(type==OPRINT),level,ops[node+1].ival,&numarg);
1408 prewalk(type != OLENGTH,level,ops[node+1].ival,&numarg);
1416 prewalk(1,level,ops[node+1].ival,&numarg);
1424 prewalk(0,level,ops[node+1].ival,&numarg);
1425 prewalk(0,level,ops[node+2].ival,&numarg);
1427 prewalk(0,level,ops[node+3].ival,&numarg);
1431 prewalk(0,level,ops[node+1].ival,&numarg);
1432 prewalk(0,level,ops[node+2].ival,&numarg);
1435 prewalk(0,level,ops[node+1].ival,&numarg);
1436 prewalk(0,level,ops[node+2].ival,&numarg);
1437 prewalk(0,level,ops[node+3].ival,&numarg);
1438 prewalk(0,level,ops[node+4].ival,&numarg);
1441 prewalk(0,level,ops[node+2].ival,&numarg);
1442 prewalk(0,level,ops[node+1].ival,&numarg);
1443 prewalk(0,level,ops[node+3].ival,&numarg);
1447 prewalk(0,level,ops[node+2].ival,&numarg);
1450 prewalk(0,level,ops[node+1].ival,&numarg);
1457 fatal("Garbage length in prewalk");
1458 prewalk(0,level,ops[node+1].ival,&numarg);
1459 for (i = 2; i<= len; i++) {
1460 prewalk(0,level,ops[node+i].ival,&numarg);
1465 *numericptr = numeric;
1479 type = ops[node].ival;
1482 if (type == OVAR && len == 1) {
1483 tmpstr=walk(0,0,ops[node+1].ival,&numarg);
1484 tmp2str = str_make("1");
1485 hstore(symtab,tmpstr->str_ptr,tmp2str);