1 /* $Header: walk.c,v 1.0 87/12/18 13:07:40 root Exp $
4 * Revision 1.0 87/12/18 13:07:40 root
15 bool realexit = FALSE;
19 walk(useval,level,node,numericptr)
42 type = ops[node].ival;
47 str = walk(0,level,ops[node+1].ival,&numarg);
49 if (do_split && need_entire && !absmaxfld)
50 split_to_array = TRUE;
51 if (do_split && split_to_array)
52 set_array_base = TRUE;
54 str_cat(str,"$[ = 1;\t\t\t# set array base to 1\n");
56 if (fswitch && !const_FS)
58 if (saw_FS > 1 || saw_RS)
60 if (saw_ORS && need_entire)
63 str_cat(str,"$FS = '");
64 if (index("*+?.[]()|^$\\",fswitch))
66 sprintf(tokenbuf,"%c",fswitch);
67 str_cat(str,tokenbuf);
68 str_cat(str,"';\t\t# field separator from -F switch\n");
70 else if (saw_FS && !const_FS) {
71 str_cat(str,"$FS = '[ \\t\\n]+';\t\t# default field separator\n");
74 str_cat(str,"$, = ' ';\t\t# default output field separator\n");
77 str_cat(str,"$\\ = \"\\n\";\t\t# default output record separator\n");
79 if (str->str_cur > 20)
81 if (ops[node+2].ival) {
82 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
87 str_cat(str,"line: ");
88 str_cat(str,"while (<>) {\n");
90 if (saw_FS && !const_FS)
93 str_cat(str,"chop;\t# strip record separator\n");
98 while (isalpha(*namelist)) {
99 for (d = tokenbuf,s=namelist;
100 isalpha(*s) || isdigit(*s) || *s == '_';
103 while (*s && !isalpha(*s)) s++;
105 nameary[++arymax] = savestr(tokenbuf);
111 emit_split(str,level);
112 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
116 if (ops[node+4].ival) {
120 str_scat(str,fstr=walk(0,level,ops[node+4].ival,&numarg));
125 str_cat(str,"exit ExitValue;\n");
126 if (do_fancy_opens) {
130 $fh = $opened{$name};\n\
132 $nextfh == 0 && open(fh_0,$name);\n\
133 $nextfh == 1 && open(fh_1,$name);\n\
134 $nextfh == 2 && open(fh_2,$name);\n\
135 $nextfh == 3 && open(fh_3,$name);\n\
136 $nextfh == 4 && open(fh_4,$name);\n\
137 $nextfh == 5 && open(fh_5,$name);\n\
138 $nextfh == 6 && open(fh_6,$name);\n\
139 $nextfh == 7 && open(fh_7,$name);\n\
140 $nextfh == 8 && open(fh_8,$name);\n\
141 $nextfh == 9 && open(fh_9,$name);\n\
142 $fh = $opened{$name} = 'fh_' . $nextfh++;\n\
150 str = walk(0,level,ops[node+1].ival,&numarg);
151 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
154 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
161 str = walk(1,level,ops[node+1].ival,&numarg);
163 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
171 tmpstr=walk(0,level,ops[node+1].ival,&numarg);
172 /* translate \nnn to [\nnn] */
173 for (s = tmpstr->str_ptr, d = tokenbuf; *s; s++, d++) {
174 if (*s == '\\' && isdigit(s[1]) && isdigit(s[2]) && isdigit(s[3])) {
186 str_cat(str,tokenbuf);
193 str = walk(0,level,oper1(OPRINT,0),&numarg);
195 str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg));
200 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
201 if (*tmpstr->str_ptr) {
204 str_scat(str,tmpstr);
205 str_cat(str,") {\n");
207 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
214 str = walk(0,level,ops[node+2].ival,&numarg);
221 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
226 str = walk(1,level,ops[node+1].ival,&numarg);
228 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
232 str = walk(1,level,ops[node+1].ival,&numarg);
234 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
240 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
246 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
252 str = walk(1,level,ops[node+1].ival,&numarg);
255 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
259 str = walk(1,level,ops[node+1].ival,&numarg);
262 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
268 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
273 str = walk(1,level,ops[node+2].ival,&numarg);
275 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
276 tmp2str = walk(1,level,ops[node+3].ival,&numarg);
281 str_set(tmpstr,"eq");
282 else if (strEQ(t,"!="))
283 str_set(tmpstr,"ne");
284 else if (strEQ(t,"<"))
285 str_set(tmpstr,"lt");
286 else if (strEQ(t,"<="))
287 str_set(tmpstr,"le");
288 else if (strEQ(t,">"))
289 str_set(tmpstr,"gt");
290 else if (strEQ(t,">="))
291 str_set(tmpstr,"ge");
292 if (!index(tmpstr->str_ptr,'\'') && !index(tmpstr->str_ptr,'"') &&
293 !index(tmp2str->str_ptr,'\'') && !index(tmp2str->str_ptr,'"') )
297 if (numeric & 1) /* numeric is very good guess */
305 str_scat(str,tmpstr);
308 str_scat(str,tmp2str);
315 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
321 str = walk(1,level,ops[node+2].ival,&numarg);
323 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
324 if (strEQ(tmpstr->str_ptr,"~"))
327 str_scat(str,tmpstr);
331 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg));
338 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
344 str = walk(1,level,ops[node+1].ival,&numarg);
346 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
350 str = walk(0,level,ops[node+2].ival,&numarg);
352 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
353 str_scat(str,tmpstr);
354 if (str_len(tmpstr) > 1)
358 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg));
361 if (strEQ(str->str_ptr,"$FS = '\240'"))
362 str_set(str,"$FS = '[\240\\n\\t]+'");
365 str = walk(1,level,ops[node+1].ival,&numarg);
367 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
372 str = walk(1,level,ops[node+1].ival,&numarg);
374 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
379 str = walk(1,level,ops[node+1].ival,&numarg);
381 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
386 str = walk(1,level,ops[node+1].ival,&numarg);
388 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
393 str = walk(1,level,ops[node+1].ival,&numarg);
395 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
400 str = walk(1,level,ops[node+1].ival,&numarg);
405 str = walk(1,level,ops[node+1].ival,&numarg);
412 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
419 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
426 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
436 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
443 str_set(str,"$_ = <>;\n");
446 str_cat(str,"chop;\t# strip record separator\n");
450 emit_split(str,level);
454 str_set(str,"sprintf(");
455 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
461 str_set(str,"substr(");
462 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
465 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
469 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg));
473 str_cat(str,"999999");
478 str_set(str,ops[node+1].cval);
483 tmpstr = walk(1,level,ops[node+2].ival,&numarg);
488 str_scat(str,tmpstr);
489 str_cat(str," = split(");
491 fstr = walk(1,level,ops[node+3].ival,&numarg);
492 if (str_len(fstr) == 3 && *fstr->str_ptr == '\'') {
493 i = fstr->str_ptr[1] & 127;
494 if (index("*+?.[]()|^$\\",i))
495 sprintf(tokenbuf,"/\\%c/",i);
497 sprintf(tokenbuf,"/%c/",i);
498 str_cat(str,tokenbuf);
505 sprintf(tokenbuf,"/[%c\\n]/",const_FS);
506 str_cat(str,tokenbuf);
511 str_cat(str,"/[ \\t\\n]+/");
513 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
523 str_set(str,"index(");
524 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
527 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
533 str = walk(1,level,ops[node+1].ival,&numarg);
537 tmpstr = walk(1,level,ops[node+1].ival,&numarg);
539 for (t = tmpstr->str_ptr; *t; t++) {
540 if (*t == '\\' || *t == '\'')
546 str_scat(str,tmpstr);
553 str_scat(str,tmpstr=walk(1,level,ops[node+1].ival,&numarg));
555 tmp2str = hfetch(symtab,tmpstr->str_ptr);
556 if (tmp2str && atoi(tmp2str->str_ptr))
558 if (strEQ(str->str_ptr,"$NR")) {
562 else if (strEQ(str->str_ptr,"$NF")) {
564 str_set(str,"$#Fld");
566 else if (strEQ(str->str_ptr,"$0"))
570 str_cat(tmpstr,"[]");
571 tmp2str = hfetch(symtab,tmpstr->str_ptr);
572 if (tmp2str && atoi(tmp2str->str_ptr))
576 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
578 if (tmp2str && atoi(tmp2str->str_ptr))
579 strcpy(tokenbuf,"]");
581 strcpy(tokenbuf,"}");
583 str_cat(str,tokenbuf);
589 if (split_to_array) {
592 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
597 i = atoi(walk(1,level,ops[node+1].ival,&numarg)->str_ptr);
599 sprintf(tokenbuf,"$%s",nameary[i]);
601 sprintf(tokenbuf,"$Fld%d",i);
602 str_set(str,tokenbuf);
607 str_set(str,"$Fld[");
608 i = ops[node+1].ival;
609 if ((ops[i].ival & 255) == OPAREN)
611 tmpstr=walk(1,level,i,&numarg);
612 str_scat(str,tmpstr);
631 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
632 for (s = tmpstr->str_ptr; *s && *s != '\n'; s++)
634 str_scat(str,tmpstr);
640 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
641 for (s = tmpstr->str_ptr; *s && *s != '\n'; s++)
643 str_scat(str,tmpstr);
648 str = walk(1,level,ops[node+1].ival,&numarg);
650 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
658 str = walk(0,level,ops[node+1].ival,&numarg);
659 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
665 str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg));
668 tmpstr = walk(0,level,ops[node+2].ival,&numarg);
669 if (*tmpstr->str_ptr == ';') {
671 str_cat(str,tmpstr->str_ptr+1);
680 if (len == 3) { /* output redirection */
681 tmpstr = walk(1,level,ops[node+3].ival,&numarg);
682 tmp2str = walk(1,level,ops[node+2].ival,&numarg);
683 if (!do_fancy_opens) {
685 if (*t == '"' || *t == '\'')
686 t = cpytill(tokenbuf,t+1,*t);
688 fatal("Internal error: OPRINT");
690 s = savestr(tokenbuf);
691 for (t = tokenbuf; *t; t++) {
693 if (!isalpha(*t) && !isdigit(*t))
696 if (!index(tokenbuf,'_'))
698 str_cat(opens,"open(");
699 str_cat(opens,tokenbuf);
703 str_scat(opens,tmp2str);
704 str_cat(opens,tmpstr->str_ptr+1);
705 if (*tmp2str->str_ptr == '|')
706 str_cat(opens,") || die 'Cannot pipe to \"");
708 str_cat(opens,") || die 'Cannot create file \"");
710 str_cat(opens,"'.\"");
713 str_cat(opens,"\".'");
714 str_cat(opens,"\".';\n");
721 sprintf(tokenbuf,"do Pick('%s' . (%s)) &&\n",
722 tmp2str->str_ptr, tmpstr->str_ptr);
723 str_cat(str,tokenbuf);
731 strcpy(tokenbuf,"stdout");
733 str_cat(str,"printf");
735 str_cat(str,"print");
736 if (len == 3 || do_fancy_opens) {
739 str_cat(str,tokenbuf);
741 tmpstr = walk(1+(type==OPRINT),level,ops[node+1].ival,&numarg);
742 if (!*tmpstr->str_ptr && lval_field) {
743 t = saw_OFS ? "$," : "' '";
744 if (split_to_array) {
745 sprintf(tokenbuf,"join(%s,@Fld)",t);
746 str_cat(tmpstr,tokenbuf);
749 for (i = 1; i < maxfld; i++) {
751 sprintf(tokenbuf,"$%s, ",nameary[i]);
753 sprintf(tokenbuf,"$Fld%d, ",i);
754 str_cat(tmpstr,tokenbuf);
756 if (maxfld <= arymax)
757 sprintf(tokenbuf,"$%s",nameary[maxfld]);
759 sprintf(tokenbuf,"$Fld%d",maxfld);
760 str_cat(tmpstr,tokenbuf);
763 if (*tmpstr->str_ptr) {
765 str_scat(str,tmpstr);
773 str = str_make("length(");
776 str = str_make("log(");
779 str = str_make("exp(");
782 str = str_make("sqrt(");
785 str = str_make("int(");
789 tmpstr = walk(1,level,ops[node+1].ival,&numarg);
791 tmpstr = str_new(0);;
792 if (!*tmpstr->str_ptr) {
794 t = saw_OFS ? "$," : "' '";
795 if (split_to_array) {
796 sprintf(tokenbuf,"join(%s,@Fld)",t);
797 str_cat(tmpstr,tokenbuf);
800 sprintf(tokenbuf,"join(%s, ",t);
801 str_cat(tmpstr,tokenbuf);
802 for (i = 1; i < maxfld; i++) {
804 sprintf(tokenbuf,"$%s,",nameary[i]);
806 sprintf(tokenbuf,"$Fld%d,",i);
807 str_cat(tmpstr,tokenbuf);
809 if (maxfld <= arymax)
810 sprintf(tokenbuf,"$%s)",nameary[maxfld]);
812 sprintf(tokenbuf,"$Fld%d)",maxfld);
813 str_cat(tmpstr,tokenbuf);
817 str_cat(tmpstr,"$_");
819 if (strEQ(tmpstr->str_ptr,"$_")) {
820 if (type == OLENGTH && !do_chop) {
821 str = str_make("(length(");
822 str_cat(tmpstr,") - 1");
825 str_scat(str,tmpstr);
835 str_set(str,"next line");
844 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
850 str_set(str,"ExitValue = ");
852 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
856 str_cat(str,"last line");
868 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
871 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
874 i = ops[node+3].ival;
876 if ((ops[i].ival & 255) == OBLOCK) {
879 if ((ops[i].ival & 255) != OIF)
888 str_scat(str,fstr=walk(0,level,i,&numarg));
892 str_cat(str,"else ");
893 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
900 str_set(str,"while (");
901 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
904 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
909 str_set(str,"for (");
910 str_scat(str,tmpstr=walk(1,level,ops[node+1].ival,&numarg));
913 t = s = tmpstr->str_ptr;
914 while (isalpha(*t) || isdigit(*t) || *t == '$' || *t == '_')
921 fstr=walk(1,level,ops[node+2].ival,&numarg);
922 if (i && (t = index(fstr->str_ptr,0377))) {
923 if (strnEQ(fstr->str_ptr,s,i))
930 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg));
933 str_scat(str,fstr=walk(0,level,ops[node+4].ival,&numarg));
937 tmpstr=walk(0,level,ops[node+2].ival,&numarg);
939 str_sset(str,tmpstr);
941 tmp2str = hfetch(symtab,str->str_ptr);
942 if (tmp2str && atoi(tmp2str->str_ptr)) {
944 fstr=walk(1,level,ops[node+1].ival,&numarg);
946 "for ($T_%d = 1; ($%s = $%s[$T_%d]) || $T_%d <= $#%s; $T_%d++)%c",
955 str_set(str,tokenbuf);
957 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
961 str_set(str,"while (($junkkey,$");
962 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
964 str_cat(str,") = each(");
965 str_scat(str,tmpstr);
967 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
976 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
980 str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg));
991 fatal("Garbage length in walk");
992 str = walk(0,level,ops[node+1].ival,&numarg);
993 for (i = 2; i<= len; i++) {
994 str_scat(str,fstr=walk(0,level,ops[node+i].ival,&numarg));
1005 *numericptr = numeric;
1008 printf("%3d %5d %15s %d %4d ",level,node,opname[type],len,str->str_cur);
1009 for (t = str->str_ptr; *t && t - str->str_ptr < 40; t++)
1012 else if (*t == '\t')
1040 /* strip trailing white space */
1042 s = str->str_ptr+str->str_cur - 1;
1043 while (s >= str->str_ptr && (*s == ' ' || *s == '\t'))
1046 str->str_cur = s + 1 - str->str_ptr;
1047 if (s >= str->str_ptr && *s != '\n')
1058 s = str->str_ptr+str->str_cur - 1;
1059 while (s >= str->str_ptr && (*s == ' ' || *s == '\t' || *s == '\n'))
1061 if (s >= str->str_ptr && *s != ';' && *s != '}')
1065 emit_split(str,level)
1072 str_cat(str,"@Fld");
1075 for (i = 1; i < maxfld; i++) {
1077 sprintf(tokenbuf,"$%s,",nameary[i]);
1079 sprintf(tokenbuf,"$Fld%d,",i);
1080 str_cat(str,tokenbuf);
1082 if (maxfld <= arymax)
1083 sprintf(tokenbuf,"$%s)",nameary[maxfld]);
1085 sprintf(tokenbuf,"$Fld%d)",maxfld);
1086 str_cat(str,tokenbuf);
1089 sprintf(tokenbuf," = split(/[%c\\n]/);\n",const_FS);
1090 str_cat(str,tokenbuf);
1093 str_cat(str," = split($FS);\n");
1095 str_cat(str," = split;\n");
1099 prewalk(numit,level,node,numericptr)
1111 int numeric = FALSE;
1117 type = ops[node].ival;
1122 prewalk(0,level,ops[node+1].ival,&numarg);
1123 if (ops[node+2].ival) {
1124 prewalk(0,level,ops[node+2].ival,&numarg);
1127 prewalk(0,level,ops[node+3].ival,&numarg);
1129 if (ops[node+3].ival) {
1130 prewalk(0,level,ops[node+4].ival,&numarg);
1134 prewalk(0,level,ops[node+1].ival,&numarg);
1135 prewalk(0,level,ops[node+2].ival,&numarg);
1137 prewalk(0,level,ops[node+3].ival,&numarg);
1141 prewalk(1,level,ops[node+1].ival,&numarg);
1142 prewalk(1,level,ops[node+2].ival,&numarg);
1147 prewalk(0,level,ops[node+1].ival,&numarg);
1151 prewalk(0,level,ops[node+1].ival,&numarg);
1154 i = prewalk(0,level,ops[node+1].ival,&numarg);
1157 prewalk(0,level,ops[node+2].ival,&numarg);
1161 prewalk(0,level,ops[node+2].ival,&numarg);
1166 prewalk(0,level,ops[node+1].ival,&numarg);
1169 prewalk(0,level,ops[node+1].ival,&numarg);
1170 prewalk(0,level,ops[node+2].ival,&numarg);
1173 prewalk(0,level,ops[node+1].ival,&numarg);
1174 prewalk(0,level,ops[node+2].ival,&numarg);
1177 prewalk(0,level,ops[node+1].ival,&numarg);
1180 prewalk(0,level,ops[node+1].ival,&numarg);
1184 prewalk(0,level,ops[node+1].ival,&numarg);
1186 prewalk(0,level,ops[node+2].ival,&numarg);
1189 prewalk(0,level,ops[node+1].ival,&numarg);
1191 prewalk(0,level,ops[node+2].ival,&numarg);
1194 prewalk(0,level,ops[node+1].ival,&numarg);
1198 prewalk(0,level,ops[node+2].ival,&numarg);
1200 prewalk(0,level,ops[node+1].ival,&numarg);
1201 prewalk(0,level,ops[node+3].ival,&numarg);
1206 prewalk(0,level,ops[node+1].ival,&numarg);
1210 prewalk(0,level,ops[node+2].ival,&numarg);
1211 prewalk(0,level,ops[node+1].ival,&numarg);
1212 prewalk(0,level,ops[node+3].ival,&numarg);
1216 prewalk(0,level,ops[node+1].ival,&numarg);
1220 prewalk(0,level,ops[node+1].ival,&numarg);
1221 prewalk(0,level,ops[node+2].ival,&numarg);
1224 prewalk(0,level,ops[node+2].ival,&numarg);
1225 prewalk(0,level,ops[node+1].ival,&numarg);
1226 prewalk(0,level,ops[node+3].ival,&numarg);
1227 if (numarg || strlen(ops[ops[node+1].ival+1].cval) > 1) {
1228 numericize(ops[node+2].ival);
1230 numericize(ops[node+3].ival);
1235 prewalk(1,level,ops[node+1].ival,&numarg);
1236 prewalk(1,level,ops[node+2].ival,&numarg);
1240 prewalk(1,level,ops[node+1].ival,&numarg);
1241 prewalk(1,level,ops[node+2].ival,&numarg);
1245 prewalk(1,level,ops[node+1].ival,&numarg);
1246 prewalk(1,level,ops[node+2].ival,&numarg);
1250 prewalk(1,level,ops[node+1].ival,&numarg);
1251 prewalk(1,level,ops[node+2].ival,&numarg);
1255 prewalk(1,level,ops[node+1].ival,&numarg);
1256 prewalk(1,level,ops[node+2].ival,&numarg);
1260 prewalk(1,level,ops[node+1].ival,&numarg);
1264 prewalk(1,level,ops[node+1].ival,&numarg);
1268 prewalk(1,level,ops[node+1].ival,&numarg);
1272 prewalk(1,level,ops[node+1].ival,&numarg);
1276 prewalk(1,level,ops[node+1].ival,&numarg);
1280 prewalk(1,level,ops[node+1].ival,&numarg);
1284 prewalk(0,level,ops[node+1].ival,&numarg);
1290 prewalk(0,level,ops[node+1].ival,&numarg);
1293 prewalk(0,level,ops[node+1].ival,&numarg);
1294 prewalk(1,level,ops[node+2].ival,&numarg);
1296 prewalk(1,level,ops[node+3].ival,&numarg);
1303 prewalk(0,level,ops[node+2].ival,&numarg);
1305 prewalk(0,level,ops[node+3].ival,&numarg);
1306 prewalk(0,level,ops[node+1].ival,&numarg);
1309 prewalk(0,level,ops[node+1].ival,&numarg);
1310 prewalk(0,level,ops[node+2].ival,&numarg);
1314 prewalk(0,level,ops[node+1].ival,&numarg);
1318 prewalk(0,level,ops[node+1].ival,&numarg);
1321 prewalk(0,level,ops[node+1].ival,&numarg);
1327 prewalk(0,level,ops[node+2].ival,&numarg);
1331 prewalk(0,level,ops[node+1].ival,&numarg);
1334 i = ops[node+1].ival;
1335 prewalk(0,level,i,&numarg);
1348 prewalk(0,level,ops[node+1].ival,&numarg);
1349 prewalk(0,level,ops[node+2].ival,&numarg);
1354 prewalk(0,level,ops[node+1].ival,&numarg);
1355 prewalk(0,level,ops[node+2].ival,&numarg);
1359 prewalk(0,level,ops[node+1].ival,&numarg);
1361 prewalk(0,level,ops[node+2].ival,&numarg);
1367 if (len == 3) { /* output redirection */
1368 prewalk(0,level,ops[node+3].ival,&numarg);
1369 prewalk(0,level,ops[node+2].ival,&numarg);
1371 prewalk(0+(type==OPRINT),level,ops[node+1].ival,&numarg);
1385 prewalk(type != OLENGTH,level,ops[node+1].ival,&numarg);
1393 prewalk(1,level,ops[node+1].ival,&numarg);
1401 prewalk(0,level,ops[node+1].ival,&numarg);
1402 prewalk(0,level,ops[node+2].ival,&numarg);
1404 prewalk(0,level,ops[node+3].ival,&numarg);
1408 prewalk(0,level,ops[node+1].ival,&numarg);
1409 prewalk(0,level,ops[node+2].ival,&numarg);
1412 prewalk(0,level,ops[node+1].ival,&numarg);
1413 prewalk(0,level,ops[node+2].ival,&numarg);
1414 prewalk(0,level,ops[node+3].ival,&numarg);
1415 prewalk(0,level,ops[node+4].ival,&numarg);
1418 prewalk(0,level,ops[node+2].ival,&numarg);
1419 prewalk(0,level,ops[node+1].ival,&numarg);
1420 prewalk(0,level,ops[node+3].ival,&numarg);
1424 prewalk(0,level,ops[node+2].ival,&numarg);
1427 prewalk(0,level,ops[node+1].ival,&numarg);
1434 fatal("Garbage length in prewalk");
1435 prewalk(0,level,ops[node+1].ival,&numarg);
1436 for (i = 2; i<= len; i++) {
1437 prewalk(0,level,ops[node+i].ival,&numarg);
1442 *numericptr = numeric;
1456 type = ops[node].ival;
1459 if (type == OVAR && len == 1) {
1460 tmpstr=walk(0,0,ops[node+1].ival,&numarg);
1461 tmp2str = str_make("1");
1462 hstore(symtab,tmpstr->str_ptr,tmp2str);