1 /* $Header: walk.c,v 1.0.1.1 88/01/28 11:07:56 root Exp $
4 * Revision 1.0.1.1 88/01/28 11:07:56 root
5 * patch8: changed some misleading comments.
7 * Revision 1.0 87/12/18 13:07:40 root
18 bool realexit = 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\\n]+';\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");
129 if (do_fancy_opens) {
133 $fh = $opened{$name};\n\
135 $nextfh == 0 && open(fh_0,$name);\n\
136 $nextfh == 1 && open(fh_1,$name);\n\
137 $nextfh == 2 && open(fh_2,$name);\n\
138 $nextfh == 3 && open(fh_3,$name);\n\
139 $nextfh == 4 && open(fh_4,$name);\n\
140 $nextfh == 5 && open(fh_5,$name);\n\
141 $nextfh == 6 && open(fh_6,$name);\n\
142 $nextfh == 7 && open(fh_7,$name);\n\
143 $nextfh == 8 && open(fh_8,$name);\n\
144 $nextfh == 9 && open(fh_9,$name);\n\
145 $fh = $opened{$name} = 'fh_' . $nextfh++;\n\
153 str = walk(0,level,ops[node+1].ival,&numarg);
154 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
157 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
164 str = walk(1,level,ops[node+1].ival,&numarg);
166 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
174 tmpstr=walk(0,level,ops[node+1].ival,&numarg);
175 /* translate \nnn to [\nnn] */
176 for (s = tmpstr->str_ptr, d = tokenbuf; *s; s++, d++) {
177 if (*s == '\\' && isdigit(s[1]) && isdigit(s[2]) && isdigit(s[3])) {
189 str_cat(str,tokenbuf);
196 str = walk(0,level,oper1(OPRINT,0),&numarg);
198 str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg));
203 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
204 if (*tmpstr->str_ptr) {
207 str_scat(str,tmpstr);
208 str_cat(str,") {\n");
210 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
217 str = walk(0,level,ops[node+2].ival,&numarg);
224 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
229 str = walk(1,level,ops[node+1].ival,&numarg);
231 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
235 str = walk(1,level,ops[node+1].ival,&numarg);
237 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
243 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
249 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
255 str = walk(1,level,ops[node+1].ival,&numarg);
258 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
262 str = walk(1,level,ops[node+1].ival,&numarg);
265 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
271 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
276 str = walk(1,level,ops[node+2].ival,&numarg);
278 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
279 tmp2str = walk(1,level,ops[node+3].ival,&numarg);
284 str_set(tmpstr,"eq");
285 else if (strEQ(t,"!="))
286 str_set(tmpstr,"ne");
287 else if (strEQ(t,"<"))
288 str_set(tmpstr,"lt");
289 else if (strEQ(t,"<="))
290 str_set(tmpstr,"le");
291 else if (strEQ(t,">"))
292 str_set(tmpstr,"gt");
293 else if (strEQ(t,">="))
294 str_set(tmpstr,"ge");
295 if (!index(tmpstr->str_ptr,'\'') && !index(tmpstr->str_ptr,'"') &&
296 !index(tmp2str->str_ptr,'\'') && !index(tmp2str->str_ptr,'"') )
300 if (numeric & 1) /* numeric is very good guess */
308 str_scat(str,tmpstr);
311 str_scat(str,tmp2str);
318 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
324 str = walk(1,level,ops[node+2].ival,&numarg);
326 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
327 if (strEQ(tmpstr->str_ptr,"~"))
330 str_scat(str,tmpstr);
334 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg));
341 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
347 str = walk(1,level,ops[node+1].ival,&numarg);
349 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
353 str = walk(0,level,ops[node+2].ival,&numarg);
355 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
356 str_scat(str,tmpstr);
357 if (str_len(tmpstr) > 1)
361 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg));
364 if (strEQ(str->str_ptr,"$FS = '\240'"))
365 str_set(str,"$FS = '[\240\\n\\t]+'");
368 str = walk(1,level,ops[node+1].ival,&numarg);
370 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
375 str = walk(1,level,ops[node+1].ival,&numarg);
377 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
382 str = walk(1,level,ops[node+1].ival,&numarg);
384 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
389 str = walk(1,level,ops[node+1].ival,&numarg);
391 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
396 str = walk(1,level,ops[node+1].ival,&numarg);
398 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
403 str = walk(1,level,ops[node+1].ival,&numarg);
408 str = walk(1,level,ops[node+1].ival,&numarg);
415 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
422 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
429 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
439 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
446 str_set(str,"$_ = <>;\n");
449 str_cat(str,"chop;\t# strip record separator\n");
453 emit_split(str,level);
457 str_set(str,"sprintf(");
458 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
464 str_set(str,"substr(");
465 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
468 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
472 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg));
476 str_cat(str,"999999");
481 str_set(str,ops[node+1].cval);
486 tmpstr = walk(1,level,ops[node+2].ival,&numarg);
491 str_scat(str,tmpstr);
492 str_cat(str," = split(");
494 fstr = walk(1,level,ops[node+3].ival,&numarg);
495 if (str_len(fstr) == 3 && *fstr->str_ptr == '\'') {
496 i = fstr->str_ptr[1] & 127;
497 if (index("*+?.[]()|^$\\",i))
498 sprintf(tokenbuf,"/\\%c/",i);
500 sprintf(tokenbuf,"/%c/",i);
501 str_cat(str,tokenbuf);
508 sprintf(tokenbuf,"/[%c\\n]/",const_FS);
509 str_cat(str,tokenbuf);
514 str_cat(str,"/[ \\t\\n]+/");
516 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
526 str_set(str,"index(");
527 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
530 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
536 str = walk(1,level,ops[node+1].ival,&numarg);
540 tmpstr = walk(1,level,ops[node+1].ival,&numarg);
542 for (t = tmpstr->str_ptr; *t; t++) {
543 if (*t == '\\' || *t == '\'')
549 str_scat(str,tmpstr);
556 str_scat(str,tmpstr=walk(1,level,ops[node+1].ival,&numarg));
558 tmp2str = hfetch(symtab,tmpstr->str_ptr);
559 if (tmp2str && atoi(tmp2str->str_ptr))
561 if (strEQ(str->str_ptr,"$NR")) {
565 else if (strEQ(str->str_ptr,"$NF")) {
567 str_set(str,"$#Fld");
569 else if (strEQ(str->str_ptr,"$0"))
573 str_cat(tmpstr,"[]");
574 tmp2str = hfetch(symtab,tmpstr->str_ptr);
575 if (tmp2str && atoi(tmp2str->str_ptr))
579 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
581 if (tmp2str && atoi(tmp2str->str_ptr))
582 strcpy(tokenbuf,"]");
584 strcpy(tokenbuf,"}");
586 str_cat(str,tokenbuf);
592 if (split_to_array) {
595 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
600 i = atoi(walk(1,level,ops[node+1].ival,&numarg)->str_ptr);
602 sprintf(tokenbuf,"$%s",nameary[i]);
604 sprintf(tokenbuf,"$Fld%d",i);
605 str_set(str,tokenbuf);
610 str_set(str,"$Fld[");
611 i = ops[node+1].ival;
612 if ((ops[i].ival & 255) == OPAREN)
614 tmpstr=walk(1,level,i,&numarg);
615 str_scat(str,tmpstr);
634 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
635 for (s = tmpstr->str_ptr; *s && *s != '\n'; s++)
637 str_scat(str,tmpstr);
643 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
644 for (s = tmpstr->str_ptr; *s && *s != '\n'; s++)
646 str_scat(str,tmpstr);
651 str = walk(1,level,ops[node+1].ival,&numarg);
653 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
661 str = walk(0,level,ops[node+1].ival,&numarg);
662 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
668 str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg));
671 tmpstr = walk(0,level,ops[node+2].ival,&numarg);
672 if (*tmpstr->str_ptr == ';') {
674 str_cat(str,tmpstr->str_ptr+1);
683 if (len == 3) { /* output redirection */
684 tmpstr = walk(1,level,ops[node+3].ival,&numarg);
685 tmp2str = walk(1,level,ops[node+2].ival,&numarg);
686 if (!do_fancy_opens) {
688 if (*t == '"' || *t == '\'')
689 t = cpytill(tokenbuf,t+1,*t);
691 fatal("Internal error: OPRINT");
693 s = savestr(tokenbuf);
694 for (t = tokenbuf; *t; t++) {
696 if (!isalpha(*t) && !isdigit(*t))
699 if (!index(tokenbuf,'_'))
701 str_cat(opens,"open(");
702 str_cat(opens,tokenbuf);
706 str_scat(opens,tmp2str);
707 str_cat(opens,tmpstr->str_ptr+1);
708 if (*tmp2str->str_ptr == '|')
709 str_cat(opens,") || die 'Cannot pipe to \"");
711 str_cat(opens,") || die 'Cannot create file \"");
713 str_cat(opens,"'.\"");
716 str_cat(opens,"\".'");
717 str_cat(opens,"\".';\n");
724 sprintf(tokenbuf,"do Pick('%s' . (%s)) &&\n",
725 tmp2str->str_ptr, tmpstr->str_ptr);
726 str_cat(str,tokenbuf);
734 strcpy(tokenbuf,"stdout");
736 str_cat(str,"printf");
738 str_cat(str,"print");
739 if (len == 3 || do_fancy_opens) {
742 str_cat(str,tokenbuf);
744 tmpstr = walk(1+(type==OPRINT),level,ops[node+1].ival,&numarg);
745 if (!*tmpstr->str_ptr && lval_field) {
746 t = saw_OFS ? "$," : "' '";
747 if (split_to_array) {
748 sprintf(tokenbuf,"join(%s,@Fld)",t);
749 str_cat(tmpstr,tokenbuf);
752 for (i = 1; i < maxfld; i++) {
754 sprintf(tokenbuf,"$%s, ",nameary[i]);
756 sprintf(tokenbuf,"$Fld%d, ",i);
757 str_cat(tmpstr,tokenbuf);
759 if (maxfld <= arymax)
760 sprintf(tokenbuf,"$%s",nameary[maxfld]);
762 sprintf(tokenbuf,"$Fld%d",maxfld);
763 str_cat(tmpstr,tokenbuf);
766 if (*tmpstr->str_ptr) {
768 str_scat(str,tmpstr);
776 str = str_make("length(");
779 str = str_make("log(");
782 str = str_make("exp(");
785 str = str_make("sqrt(");
788 str = str_make("int(");
792 tmpstr = walk(1,level,ops[node+1].ival,&numarg);
794 tmpstr = str_new(0);;
795 if (!*tmpstr->str_ptr) {
797 t = saw_OFS ? "$," : "' '";
798 if (split_to_array) {
799 sprintf(tokenbuf,"join(%s,@Fld)",t);
800 str_cat(tmpstr,tokenbuf);
803 sprintf(tokenbuf,"join(%s, ",t);
804 str_cat(tmpstr,tokenbuf);
805 for (i = 1; i < maxfld; i++) {
807 sprintf(tokenbuf,"$%s,",nameary[i]);
809 sprintf(tokenbuf,"$Fld%d,",i);
810 str_cat(tmpstr,tokenbuf);
812 if (maxfld <= arymax)
813 sprintf(tokenbuf,"$%s)",nameary[maxfld]);
815 sprintf(tokenbuf,"$Fld%d)",maxfld);
816 str_cat(tmpstr,tokenbuf);
820 str_cat(tmpstr,"$_");
822 if (strEQ(tmpstr->str_ptr,"$_")) {
823 if (type == OLENGTH && !do_chop) {
824 str = str_make("(length(");
825 str_cat(tmpstr,") - 1");
828 str_scat(str,tmpstr);
838 str_set(str,"next line");
847 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
853 str_set(str,"ExitValue = ");
855 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
859 str_cat(str,"last line");
871 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
874 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
877 i = ops[node+3].ival;
879 if ((ops[i].ival & 255) == OBLOCK) {
882 if ((ops[i].ival & 255) != OIF)
891 str_scat(str,fstr=walk(0,level,i,&numarg));
895 str_cat(str,"else ");
896 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
903 str_set(str,"while (");
904 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
907 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
912 str_set(str,"for (");
913 str_scat(str,tmpstr=walk(1,level,ops[node+1].ival,&numarg));
916 t = s = tmpstr->str_ptr;
917 while (isalpha(*t) || isdigit(*t) || *t == '$' || *t == '_')
924 fstr=walk(1,level,ops[node+2].ival,&numarg);
925 if (i && (t = index(fstr->str_ptr,0377))) {
926 if (strnEQ(fstr->str_ptr,s,i))
933 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg));
936 str_scat(str,fstr=walk(0,level,ops[node+4].ival,&numarg));
940 tmpstr=walk(0,level,ops[node+2].ival,&numarg);
942 str_sset(str,tmpstr);
944 tmp2str = hfetch(symtab,str->str_ptr);
945 if (tmp2str && atoi(tmp2str->str_ptr)) {
947 fstr=walk(1,level,ops[node+1].ival,&numarg);
949 "for ($T_%d = 1; ($%s = $%s[$T_%d]) || $T_%d <= $#%s; $T_%d++)%c",
958 str_set(str,tokenbuf);
960 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
964 str_set(str,"while (($junkkey,$");
965 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
967 str_cat(str,") = each(");
968 str_scat(str,tmpstr);
970 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
979 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
983 str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg));
994 fatal("Garbage length in walk");
995 str = walk(0,level,ops[node+1].ival,&numarg);
996 for (i = 2; i<= len; i++) {
997 str_scat(str,fstr=walk(0,level,ops[node+i].ival,&numarg));
1008 *numericptr = numeric;
1011 printf("%3d %5d %15s %d %4d ",level,node,opname[type],len,str->str_cur);
1012 for (t = str->str_ptr; *t && t - str->str_ptr < 40; t++)
1015 else if (*t == '\t')
1043 /* strip trailing white space */
1045 s = str->str_ptr+str->str_cur - 1;
1046 while (s >= str->str_ptr && (*s == ' ' || *s == '\t'))
1049 str->str_cur = s + 1 - str->str_ptr;
1050 if (s >= str->str_ptr && *s != '\n')
1061 s = str->str_ptr+str->str_cur - 1;
1062 while (s >= str->str_ptr && (*s == ' ' || *s == '\t' || *s == '\n'))
1064 if (s >= str->str_ptr && *s != ';' && *s != '}')
1068 emit_split(str,level)
1075 str_cat(str,"@Fld");
1078 for (i = 1; i < maxfld; i++) {
1080 sprintf(tokenbuf,"$%s,",nameary[i]);
1082 sprintf(tokenbuf,"$Fld%d,",i);
1083 str_cat(str,tokenbuf);
1085 if (maxfld <= arymax)
1086 sprintf(tokenbuf,"$%s)",nameary[maxfld]);
1088 sprintf(tokenbuf,"$Fld%d)",maxfld);
1089 str_cat(str,tokenbuf);
1092 sprintf(tokenbuf," = split(/[%c\\n]/);\n",const_FS);
1093 str_cat(str,tokenbuf);
1096 str_cat(str," = split($FS);\n");
1098 str_cat(str," = split;\n");
1102 prewalk(numit,level,node,numericptr)
1114 int numeric = FALSE;
1120 type = ops[node].ival;
1125 prewalk(0,level,ops[node+1].ival,&numarg);
1126 if (ops[node+2].ival) {
1127 prewalk(0,level,ops[node+2].ival,&numarg);
1130 prewalk(0,level,ops[node+3].ival,&numarg);
1132 if (ops[node+3].ival) {
1133 prewalk(0,level,ops[node+4].ival,&numarg);
1137 prewalk(0,level,ops[node+1].ival,&numarg);
1138 prewalk(0,level,ops[node+2].ival,&numarg);
1140 prewalk(0,level,ops[node+3].ival,&numarg);
1144 prewalk(1,level,ops[node+1].ival,&numarg);
1145 prewalk(1,level,ops[node+2].ival,&numarg);
1150 prewalk(0,level,ops[node+1].ival,&numarg);
1154 prewalk(0,level,ops[node+1].ival,&numarg);
1157 i = prewalk(0,level,ops[node+1].ival,&numarg);
1160 prewalk(0,level,ops[node+2].ival,&numarg);
1164 prewalk(0,level,ops[node+2].ival,&numarg);
1169 prewalk(0,level,ops[node+1].ival,&numarg);
1172 prewalk(0,level,ops[node+1].ival,&numarg);
1173 prewalk(0,level,ops[node+2].ival,&numarg);
1176 prewalk(0,level,ops[node+1].ival,&numarg);
1177 prewalk(0,level,ops[node+2].ival,&numarg);
1180 prewalk(0,level,ops[node+1].ival,&numarg);
1183 prewalk(0,level,ops[node+1].ival,&numarg);
1187 prewalk(0,level,ops[node+1].ival,&numarg);
1189 prewalk(0,level,ops[node+2].ival,&numarg);
1192 prewalk(0,level,ops[node+1].ival,&numarg);
1194 prewalk(0,level,ops[node+2].ival,&numarg);
1197 prewalk(0,level,ops[node+1].ival,&numarg);
1201 prewalk(0,level,ops[node+2].ival,&numarg);
1203 prewalk(0,level,ops[node+1].ival,&numarg);
1204 prewalk(0,level,ops[node+3].ival,&numarg);
1209 prewalk(0,level,ops[node+1].ival,&numarg);
1213 prewalk(0,level,ops[node+2].ival,&numarg);
1214 prewalk(0,level,ops[node+1].ival,&numarg);
1215 prewalk(0,level,ops[node+3].ival,&numarg);
1219 prewalk(0,level,ops[node+1].ival,&numarg);
1223 prewalk(0,level,ops[node+1].ival,&numarg);
1224 prewalk(0,level,ops[node+2].ival,&numarg);
1227 prewalk(0,level,ops[node+2].ival,&numarg);
1228 prewalk(0,level,ops[node+1].ival,&numarg);
1229 prewalk(0,level,ops[node+3].ival,&numarg);
1230 if (numarg || strlen(ops[ops[node+1].ival+1].cval) > 1) {
1231 numericize(ops[node+2].ival);
1233 numericize(ops[node+3].ival);
1238 prewalk(1,level,ops[node+1].ival,&numarg);
1239 prewalk(1,level,ops[node+2].ival,&numarg);
1243 prewalk(1,level,ops[node+1].ival,&numarg);
1244 prewalk(1,level,ops[node+2].ival,&numarg);
1248 prewalk(1,level,ops[node+1].ival,&numarg);
1249 prewalk(1,level,ops[node+2].ival,&numarg);
1253 prewalk(1,level,ops[node+1].ival,&numarg);
1254 prewalk(1,level,ops[node+2].ival,&numarg);
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);
1267 prewalk(1,level,ops[node+1].ival,&numarg);
1271 prewalk(1,level,ops[node+1].ival,&numarg);
1275 prewalk(1,level,ops[node+1].ival,&numarg);
1279 prewalk(1,level,ops[node+1].ival,&numarg);
1283 prewalk(1,level,ops[node+1].ival,&numarg);
1287 prewalk(0,level,ops[node+1].ival,&numarg);
1293 prewalk(0,level,ops[node+1].ival,&numarg);
1296 prewalk(0,level,ops[node+1].ival,&numarg);
1297 prewalk(1,level,ops[node+2].ival,&numarg);
1299 prewalk(1,level,ops[node+3].ival,&numarg);
1306 prewalk(0,level,ops[node+2].ival,&numarg);
1308 prewalk(0,level,ops[node+3].ival,&numarg);
1309 prewalk(0,level,ops[node+1].ival,&numarg);
1312 prewalk(0,level,ops[node+1].ival,&numarg);
1313 prewalk(0,level,ops[node+2].ival,&numarg);
1317 prewalk(0,level,ops[node+1].ival,&numarg);
1321 prewalk(0,level,ops[node+1].ival,&numarg);
1324 prewalk(0,level,ops[node+1].ival,&numarg);
1330 prewalk(0,level,ops[node+2].ival,&numarg);
1334 prewalk(0,level,ops[node+1].ival,&numarg);
1337 i = ops[node+1].ival;
1338 prewalk(0,level,i,&numarg);
1351 prewalk(0,level,ops[node+1].ival,&numarg);
1352 prewalk(0,level,ops[node+2].ival,&numarg);
1357 prewalk(0,level,ops[node+1].ival,&numarg);
1358 prewalk(0,level,ops[node+2].ival,&numarg);
1362 prewalk(0,level,ops[node+1].ival,&numarg);
1364 prewalk(0,level,ops[node+2].ival,&numarg);
1370 if (len == 3) { /* output redirection */
1371 prewalk(0,level,ops[node+3].ival,&numarg);
1372 prewalk(0,level,ops[node+2].ival,&numarg);
1374 prewalk(0+(type==OPRINT),level,ops[node+1].ival,&numarg);
1388 prewalk(type != OLENGTH,level,ops[node+1].ival,&numarg);
1396 prewalk(1,level,ops[node+1].ival,&numarg);
1404 prewalk(0,level,ops[node+1].ival,&numarg);
1405 prewalk(0,level,ops[node+2].ival,&numarg);
1407 prewalk(0,level,ops[node+3].ival,&numarg);
1411 prewalk(0,level,ops[node+1].ival,&numarg);
1412 prewalk(0,level,ops[node+2].ival,&numarg);
1415 prewalk(0,level,ops[node+1].ival,&numarg);
1416 prewalk(0,level,ops[node+2].ival,&numarg);
1417 prewalk(0,level,ops[node+3].ival,&numarg);
1418 prewalk(0,level,ops[node+4].ival,&numarg);
1421 prewalk(0,level,ops[node+2].ival,&numarg);
1422 prewalk(0,level,ops[node+1].ival,&numarg);
1423 prewalk(0,level,ops[node+3].ival,&numarg);
1427 prewalk(0,level,ops[node+2].ival,&numarg);
1430 prewalk(0,level,ops[node+1].ival,&numarg);
1437 fatal("Garbage length in prewalk");
1438 prewalk(0,level,ops[node+1].ival,&numarg);
1439 for (i = 2; i<= len; i++) {
1440 prewalk(0,level,ops[node+i].ival,&numarg);
1445 *numericptr = numeric;
1459 type = ops[node].ival;
1462 if (type == OVAR && len == 1) {
1463 tmpstr=walk(0,0,ops[node+1].ival,&numarg);
1464 tmp2str = str_make("1");
1465 hstore(symtab,tmpstr->str_ptr,tmp2str);