1 /* $Header: walk.c,v 1.0.1.2 88/02/01 17:34:05 root Exp $
4 * Revision 1.0.1.2 88/02/01 17:34:05 root
5 * patch12: made a2p take advantage of new awk-compatible split in perl.
7 * Revision 1.0.1.1 88/01/28 11:07:56 root
8 * patch8: changed some misleading comments.
10 * Revision 1.0 87/12/18 13:07:40 root
21 bool realexit = FALSE;
25 walk(useval,level,node,numericptr)
48 type = ops[node].ival;
53 str = walk(0,level,ops[node+1].ival,&numarg);
55 if (do_split && need_entire && !absmaxfld)
56 split_to_array = TRUE;
57 if (do_split && split_to_array)
58 set_array_base = TRUE;
60 str_cat(str,"$[ = 1;\t\t\t# set array base to 1\n");
62 if (fswitch && !const_FS)
64 if (saw_FS > 1 || saw_RS)
66 if (saw_ORS && need_entire)
69 str_cat(str,"$FS = '");
70 if (index("*+?.[]()|^$\\",fswitch))
72 sprintf(tokenbuf,"%c",fswitch);
73 str_cat(str,tokenbuf);
74 str_cat(str,"';\t\t# field separator from -F switch\n");
76 else if (saw_FS && !const_FS) {
77 str_cat(str,"$FS = ' ';\t\t# set field separator\n");
80 str_cat(str,"$, = ' ';\t\t# set output field separator\n");
83 str_cat(str,"$\\ = \"\\n\";\t\t# set output record separator\n");
85 if (str->str_cur > 20)
87 if (ops[node+2].ival) {
88 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
93 str_cat(str,"line: ");
94 str_cat(str,"while (<>) {\n");
96 if (saw_FS && !const_FS)
99 str_cat(str,"chop;\t# strip record separator\n");
104 while (isalpha(*namelist)) {
105 for (d = tokenbuf,s=namelist;
106 isalpha(*s) || isdigit(*s) || *s == '_';
109 while (*s && !isalpha(*s)) s++;
111 nameary[++arymax] = savestr(tokenbuf);
117 emit_split(str,level);
118 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
122 if (ops[node+4].ival) {
126 str_scat(str,fstr=walk(0,level,ops[node+4].ival,&numarg));
131 str_cat(str,"exit ExitValue;\n");
132 if (do_fancy_opens) {
136 $fh = $opened{$name};\n\
138 $nextfh == 0 && open(fh_0,$name);\n\
139 $nextfh == 1 && open(fh_1,$name);\n\
140 $nextfh == 2 && open(fh_2,$name);\n\
141 $nextfh == 3 && open(fh_3,$name);\n\
142 $nextfh == 4 && open(fh_4,$name);\n\
143 $nextfh == 5 && open(fh_5,$name);\n\
144 $nextfh == 6 && open(fh_6,$name);\n\
145 $nextfh == 7 && open(fh_7,$name);\n\
146 $nextfh == 8 && open(fh_8,$name);\n\
147 $nextfh == 9 && open(fh_9,$name);\n\
148 $fh = $opened{$name} = 'fh_' . $nextfh++;\n\
156 str = walk(0,level,ops[node+1].ival,&numarg);
157 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
160 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
167 str = walk(1,level,ops[node+1].ival,&numarg);
169 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
177 tmpstr=walk(0,level,ops[node+1].ival,&numarg);
178 /* translate \nnn to [\nnn] */
179 for (s = tmpstr->str_ptr, d = tokenbuf; *s; s++, d++) {
180 if (*s == '\\' && isdigit(s[1]) && isdigit(s[2]) && isdigit(s[3])) {
192 str_cat(str,tokenbuf);
199 str = walk(0,level,oper1(OPRINT,0),&numarg);
201 str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg));
206 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
207 if (*tmpstr->str_ptr) {
210 str_scat(str,tmpstr);
211 str_cat(str,") {\n");
213 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
220 str = walk(0,level,ops[node+2].ival,&numarg);
227 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].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));
238 str = walk(1,level,ops[node+1].ival,&numarg);
240 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
246 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
252 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
258 str = walk(1,level,ops[node+1].ival,&numarg);
261 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
265 str = walk(1,level,ops[node+1].ival,&numarg);
268 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
274 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
279 str = walk(1,level,ops[node+2].ival,&numarg);
281 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
282 tmp2str = walk(1,level,ops[node+3].ival,&numarg);
287 str_set(tmpstr,"eq");
288 else if (strEQ(t,"!="))
289 str_set(tmpstr,"ne");
290 else if (strEQ(t,"<"))
291 str_set(tmpstr,"lt");
292 else if (strEQ(t,"<="))
293 str_set(tmpstr,"le");
294 else if (strEQ(t,">"))
295 str_set(tmpstr,"gt");
296 else if (strEQ(t,">="))
297 str_set(tmpstr,"ge");
298 if (!index(tmpstr->str_ptr,'\'') && !index(tmpstr->str_ptr,'"') &&
299 !index(tmp2str->str_ptr,'\'') && !index(tmp2str->str_ptr,'"') )
303 if (numeric & 1) /* numeric is very good guess */
311 str_scat(str,tmpstr);
314 str_scat(str,tmp2str);
321 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
327 str = walk(1,level,ops[node+2].ival,&numarg);
329 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
330 if (strEQ(tmpstr->str_ptr,"~"))
333 str_scat(str,tmpstr);
337 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg));
344 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
350 str = walk(1,level,ops[node+1].ival,&numarg);
352 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
356 str = walk(0,level,ops[node+2].ival,&numarg);
358 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
359 str_scat(str,tmpstr);
360 if (str_len(tmpstr) > 1)
364 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg));
369 str = walk(1,level,ops[node+1].ival,&numarg);
371 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
376 str = walk(1,level,ops[node+1].ival,&numarg);
378 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
383 str = walk(1,level,ops[node+1].ival,&numarg);
385 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
390 str = walk(1,level,ops[node+1].ival,&numarg);
392 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
397 str = walk(1,level,ops[node+1].ival,&numarg);
399 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
404 str = walk(1,level,ops[node+1].ival,&numarg);
409 str = walk(1,level,ops[node+1].ival,&numarg);
416 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
423 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
430 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
440 str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg));
447 str_set(str,"$_ = <>;\n");
450 str_cat(str,"chop;\t# strip record separator\n");
454 emit_split(str,level);
458 str_set(str,"sprintf(");
459 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
465 str_set(str,"substr(");
466 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
469 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
473 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg));
477 str_cat(str,"999999");
482 str_set(str,ops[node+1].cval);
487 tmpstr = walk(1,level,ops[node+2].ival,&numarg);
492 str_scat(str,tmpstr);
493 str_cat(str," = split(");
495 fstr = walk(1,level,ops[node+3].ival,&numarg);
496 if (str_len(fstr) == 3 && *fstr->str_ptr == '\'') {
497 i = fstr->str_ptr[1] & 127;
498 if (index("*+?.[]()|^$\\",i))
499 sprintf(tokenbuf,"/\\%c/",i);
501 sprintf(tokenbuf,"/%c/",i);
502 str_cat(str,tokenbuf);
509 sprintf(tokenbuf,"/[%c\\n]/",const_FS);
510 str_cat(str,tokenbuf);
517 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
527 str_set(str,"index(");
528 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
531 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
537 str = walk(1,level,ops[node+1].ival,&numarg);
541 tmpstr = walk(1,level,ops[node+1].ival,&numarg);
543 for (t = tmpstr->str_ptr; *t; t++) {
544 if (*t == '\\' || *t == '\'')
550 str_scat(str,tmpstr);
557 str_scat(str,tmpstr=walk(1,level,ops[node+1].ival,&numarg));
559 tmp2str = hfetch(symtab,tmpstr->str_ptr);
560 if (tmp2str && atoi(tmp2str->str_ptr))
562 if (strEQ(str->str_ptr,"$NR")) {
566 else if (strEQ(str->str_ptr,"$NF")) {
568 str_set(str,"$#Fld");
570 else if (strEQ(str->str_ptr,"$0"))
574 str_cat(tmpstr,"[]");
575 tmp2str = hfetch(symtab,tmpstr->str_ptr);
576 if (tmp2str && atoi(tmp2str->str_ptr))
580 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
582 if (tmp2str && atoi(tmp2str->str_ptr))
583 strcpy(tokenbuf,"]");
585 strcpy(tokenbuf,"}");
587 str_cat(str,tokenbuf);
593 if (split_to_array) {
596 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
601 i = atoi(walk(1,level,ops[node+1].ival,&numarg)->str_ptr);
603 sprintf(tokenbuf,"$%s",nameary[i]);
605 sprintf(tokenbuf,"$Fld%d",i);
606 str_set(str,tokenbuf);
611 str_set(str,"$Fld[");
612 i = ops[node+1].ival;
613 if ((ops[i].ival & 255) == OPAREN)
615 tmpstr=walk(1,level,i,&numarg);
616 str_scat(str,tmpstr);
635 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
636 for (s = tmpstr->str_ptr; *s && *s != '\n'; s++)
638 str_scat(str,tmpstr);
644 tmpstr = walk(0,level,ops[node+1].ival,&numarg);
645 for (s = tmpstr->str_ptr; *s && *s != '\n'; s++)
647 str_scat(str,tmpstr);
652 str = walk(1,level,ops[node+1].ival,&numarg);
654 str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg));
662 str = walk(0,level,ops[node+1].ival,&numarg);
663 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
669 str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg));
672 tmpstr = walk(0,level,ops[node+2].ival,&numarg);
673 if (*tmpstr->str_ptr == ';') {
675 str_cat(str,tmpstr->str_ptr+1);
684 if (len == 3) { /* output redirection */
685 tmpstr = walk(1,level,ops[node+3].ival,&numarg);
686 tmp2str = walk(1,level,ops[node+2].ival,&numarg);
687 if (!do_fancy_opens) {
689 if (*t == '"' || *t == '\'')
690 t = cpytill(tokenbuf,t+1,*t);
692 fatal("Internal error: OPRINT");
694 s = savestr(tokenbuf);
695 for (t = tokenbuf; *t; t++) {
697 if (!isalpha(*t) && !isdigit(*t))
700 if (!index(tokenbuf,'_'))
702 str_cat(opens,"open(");
703 str_cat(opens,tokenbuf);
707 str_scat(opens,tmp2str);
708 str_cat(opens,tmpstr->str_ptr+1);
709 if (*tmp2str->str_ptr == '|')
710 str_cat(opens,") || die 'Cannot pipe to \"");
712 str_cat(opens,") || die 'Cannot create file \"");
714 str_cat(opens,"'.\"");
717 str_cat(opens,"\".'");
718 str_cat(opens,"\".';\n");
725 sprintf(tokenbuf,"do Pick('%s' . (%s)) &&\n",
726 tmp2str->str_ptr, tmpstr->str_ptr);
727 str_cat(str,tokenbuf);
735 strcpy(tokenbuf,"stdout");
737 str_cat(str,"printf");
739 str_cat(str,"print");
740 if (len == 3 || do_fancy_opens) {
743 str_cat(str,tokenbuf);
745 tmpstr = walk(1+(type==OPRINT),level,ops[node+1].ival,&numarg);
746 if (!*tmpstr->str_ptr && lval_field) {
747 t = saw_OFS ? "$," : "' '";
748 if (split_to_array) {
749 sprintf(tokenbuf,"join(%s,@Fld)",t);
750 str_cat(tmpstr,tokenbuf);
753 for (i = 1; i < maxfld; i++) {
755 sprintf(tokenbuf,"$%s, ",nameary[i]);
757 sprintf(tokenbuf,"$Fld%d, ",i);
758 str_cat(tmpstr,tokenbuf);
760 if (maxfld <= arymax)
761 sprintf(tokenbuf,"$%s",nameary[maxfld]);
763 sprintf(tokenbuf,"$Fld%d",maxfld);
764 str_cat(tmpstr,tokenbuf);
767 if (*tmpstr->str_ptr) {
769 str_scat(str,tmpstr);
777 str = str_make("length(");
780 str = str_make("log(");
783 str = str_make("exp(");
786 str = str_make("sqrt(");
789 str = str_make("int(");
793 tmpstr = walk(1,level,ops[node+1].ival,&numarg);
795 tmpstr = str_new(0);;
796 if (!*tmpstr->str_ptr) {
798 t = saw_OFS ? "$," : "' '";
799 if (split_to_array) {
800 sprintf(tokenbuf,"join(%s,@Fld)",t);
801 str_cat(tmpstr,tokenbuf);
804 sprintf(tokenbuf,"join(%s, ",t);
805 str_cat(tmpstr,tokenbuf);
806 for (i = 1; i < maxfld; i++) {
808 sprintf(tokenbuf,"$%s,",nameary[i]);
810 sprintf(tokenbuf,"$Fld%d,",i);
811 str_cat(tmpstr,tokenbuf);
813 if (maxfld <= arymax)
814 sprintf(tokenbuf,"$%s)",nameary[maxfld]);
816 sprintf(tokenbuf,"$Fld%d)",maxfld);
817 str_cat(tmpstr,tokenbuf);
821 str_cat(tmpstr,"$_");
823 if (strEQ(tmpstr->str_ptr,"$_")) {
824 if (type == OLENGTH && !do_chop) {
825 str = str_make("(length(");
826 str_cat(tmpstr,") - 1");
829 str_scat(str,tmpstr);
839 str_set(str,"next line");
848 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
854 str_set(str,"ExitValue = ");
856 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
860 str_cat(str,"last line");
872 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
875 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
878 i = ops[node+3].ival;
880 if ((ops[i].ival & 255) == OBLOCK) {
883 if ((ops[i].ival & 255) != OIF)
892 str_scat(str,fstr=walk(0,level,i,&numarg));
896 str_cat(str,"else ");
897 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
904 str_set(str,"while (");
905 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
908 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
913 str_set(str,"for (");
914 str_scat(str,tmpstr=walk(1,level,ops[node+1].ival,&numarg));
917 t = s = tmpstr->str_ptr;
918 while (isalpha(*t) || isdigit(*t) || *t == '$' || *t == '_')
925 fstr=walk(1,level,ops[node+2].ival,&numarg);
926 if (i && (t = index(fstr->str_ptr,0377))) {
927 if (strnEQ(fstr->str_ptr,s,i))
934 str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg));
937 str_scat(str,fstr=walk(0,level,ops[node+4].ival,&numarg));
941 tmpstr=walk(0,level,ops[node+2].ival,&numarg);
943 str_sset(str,tmpstr);
945 tmp2str = hfetch(symtab,str->str_ptr);
946 if (tmp2str && atoi(tmp2str->str_ptr)) {
948 fstr=walk(1,level,ops[node+1].ival,&numarg);
950 "for ($T_%d = 1; ($%s = $%s[$T_%d]) || $T_%d <= $#%s; $T_%d++)%c",
959 str_set(str,tokenbuf);
961 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
965 str_set(str,"while (($junkkey,$");
966 str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg));
968 str_cat(str,") = each(");
969 str_scat(str,tmpstr);
971 str_scat(str,fstr=walk(0,level,ops[node+3].ival,&numarg));
980 str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg));
984 str_scat(str,fstr=walk(0,level,ops[node+1].ival,&numarg));
995 fatal("Garbage length in walk");
996 str = walk(0,level,ops[node+1].ival,&numarg);
997 for (i = 2; i<= len; i++) {
998 str_scat(str,fstr=walk(0,level,ops[node+i].ival,&numarg));
1009 *numericptr = numeric;
1012 printf("%3d %5d %15s %d %4d ",level,node,opname[type],len,str->str_cur);
1013 for (t = str->str_ptr; *t && t - str->str_ptr < 40; t++)
1016 else if (*t == '\t')
1044 /* strip trailing white space */
1046 s = str->str_ptr+str->str_cur - 1;
1047 while (s >= str->str_ptr && (*s == ' ' || *s == '\t'))
1050 str->str_cur = s + 1 - str->str_ptr;
1051 if (s >= str->str_ptr && *s != '\n')
1062 s = str->str_ptr+str->str_cur - 1;
1063 while (s >= str->str_ptr && (*s == ' ' || *s == '\t' || *s == '\n'))
1065 if (s >= str->str_ptr && *s != ';' && *s != '}')
1069 emit_split(str,level)
1076 str_cat(str,"@Fld");
1079 for (i = 1; i < maxfld; i++) {
1081 sprintf(tokenbuf,"$%s,",nameary[i]);
1083 sprintf(tokenbuf,"$Fld%d,",i);
1084 str_cat(str,tokenbuf);
1086 if (maxfld <= arymax)
1087 sprintf(tokenbuf,"$%s)",nameary[maxfld]);
1089 sprintf(tokenbuf,"$Fld%d)",maxfld);
1090 str_cat(str,tokenbuf);
1093 sprintf(tokenbuf," = split(/[%c\\n]/);\n",const_FS);
1094 str_cat(str,tokenbuf);
1097 str_cat(str," = split($FS);\n");
1099 str_cat(str," = split(' ');\n");
1103 prewalk(numit,level,node,numericptr)
1115 int numeric = FALSE;
1121 type = ops[node].ival;
1126 prewalk(0,level,ops[node+1].ival,&numarg);
1127 if (ops[node+2].ival) {
1128 prewalk(0,level,ops[node+2].ival,&numarg);
1131 prewalk(0,level,ops[node+3].ival,&numarg);
1133 if (ops[node+3].ival) {
1134 prewalk(0,level,ops[node+4].ival,&numarg);
1138 prewalk(0,level,ops[node+1].ival,&numarg);
1139 prewalk(0,level,ops[node+2].ival,&numarg);
1141 prewalk(0,level,ops[node+3].ival,&numarg);
1145 prewalk(1,level,ops[node+1].ival,&numarg);
1146 prewalk(1,level,ops[node+2].ival,&numarg);
1151 prewalk(0,level,ops[node+1].ival,&numarg);
1155 prewalk(0,level,ops[node+1].ival,&numarg);
1158 i = prewalk(0,level,ops[node+1].ival,&numarg);
1161 prewalk(0,level,ops[node+2].ival,&numarg);
1165 prewalk(0,level,ops[node+2].ival,&numarg);
1170 prewalk(0,level,ops[node+1].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);
1178 prewalk(0,level,ops[node+2].ival,&numarg);
1181 prewalk(0,level,ops[node+1].ival,&numarg);
1184 prewalk(0,level,ops[node+1].ival,&numarg);
1188 prewalk(0,level,ops[node+1].ival,&numarg);
1190 prewalk(0,level,ops[node+2].ival,&numarg);
1193 prewalk(0,level,ops[node+1].ival,&numarg);
1195 prewalk(0,level,ops[node+2].ival,&numarg);
1198 prewalk(0,level,ops[node+1].ival,&numarg);
1202 prewalk(0,level,ops[node+2].ival,&numarg);
1204 prewalk(0,level,ops[node+1].ival,&numarg);
1205 prewalk(0,level,ops[node+3].ival,&numarg);
1210 prewalk(0,level,ops[node+1].ival,&numarg);
1214 prewalk(0,level,ops[node+2].ival,&numarg);
1215 prewalk(0,level,ops[node+1].ival,&numarg);
1216 prewalk(0,level,ops[node+3].ival,&numarg);
1220 prewalk(0,level,ops[node+1].ival,&numarg);
1224 prewalk(0,level,ops[node+1].ival,&numarg);
1225 prewalk(0,level,ops[node+2].ival,&numarg);
1228 prewalk(0,level,ops[node+2].ival,&numarg);
1229 prewalk(0,level,ops[node+1].ival,&numarg);
1230 prewalk(0,level,ops[node+3].ival,&numarg);
1231 if (numarg || strlen(ops[ops[node+1].ival+1].cval) > 1) {
1232 numericize(ops[node+2].ival);
1234 numericize(ops[node+3].ival);
1239 prewalk(1,level,ops[node+1].ival,&numarg);
1240 prewalk(1,level,ops[node+2].ival,&numarg);
1244 prewalk(1,level,ops[node+1].ival,&numarg);
1245 prewalk(1,level,ops[node+2].ival,&numarg);
1249 prewalk(1,level,ops[node+1].ival,&numarg);
1250 prewalk(1,level,ops[node+2].ival,&numarg);
1254 prewalk(1,level,ops[node+1].ival,&numarg);
1255 prewalk(1,level,ops[node+2].ival,&numarg);
1259 prewalk(1,level,ops[node+1].ival,&numarg);
1260 prewalk(1,level,ops[node+2].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(1,level,ops[node+1].ival,&numarg);
1288 prewalk(0,level,ops[node+1].ival,&numarg);
1294 prewalk(0,level,ops[node+1].ival,&numarg);
1297 prewalk(0,level,ops[node+1].ival,&numarg);
1298 prewalk(1,level,ops[node+2].ival,&numarg);
1300 prewalk(1,level,ops[node+3].ival,&numarg);
1307 prewalk(0,level,ops[node+2].ival,&numarg);
1309 prewalk(0,level,ops[node+3].ival,&numarg);
1310 prewalk(0,level,ops[node+1].ival,&numarg);
1313 prewalk(0,level,ops[node+1].ival,&numarg);
1314 prewalk(0,level,ops[node+2].ival,&numarg);
1318 prewalk(0,level,ops[node+1].ival,&numarg);
1322 prewalk(0,level,ops[node+1].ival,&numarg);
1325 prewalk(0,level,ops[node+1].ival,&numarg);
1331 prewalk(0,level,ops[node+2].ival,&numarg);
1335 prewalk(0,level,ops[node+1].ival,&numarg);
1338 i = ops[node+1].ival;
1339 prewalk(0,level,i,&numarg);
1352 prewalk(0,level,ops[node+1].ival,&numarg);
1353 prewalk(0,level,ops[node+2].ival,&numarg);
1358 prewalk(0,level,ops[node+1].ival,&numarg);
1359 prewalk(0,level,ops[node+2].ival,&numarg);
1363 prewalk(0,level,ops[node+1].ival,&numarg);
1365 prewalk(0,level,ops[node+2].ival,&numarg);
1371 if (len == 3) { /* output redirection */
1372 prewalk(0,level,ops[node+3].ival,&numarg);
1373 prewalk(0,level,ops[node+2].ival,&numarg);
1375 prewalk(0+(type==OPRINT),level,ops[node+1].ival,&numarg);
1389 prewalk(type != OLENGTH,level,ops[node+1].ival,&numarg);
1397 prewalk(1,level,ops[node+1].ival,&numarg);
1405 prewalk(0,level,ops[node+1].ival,&numarg);
1406 prewalk(0,level,ops[node+2].ival,&numarg);
1408 prewalk(0,level,ops[node+3].ival,&numarg);
1412 prewalk(0,level,ops[node+1].ival,&numarg);
1413 prewalk(0,level,ops[node+2].ival,&numarg);
1416 prewalk(0,level,ops[node+1].ival,&numarg);
1417 prewalk(0,level,ops[node+2].ival,&numarg);
1418 prewalk(0,level,ops[node+3].ival,&numarg);
1419 prewalk(0,level,ops[node+4].ival,&numarg);
1422 prewalk(0,level,ops[node+2].ival,&numarg);
1423 prewalk(0,level,ops[node+1].ival,&numarg);
1424 prewalk(0,level,ops[node+3].ival,&numarg);
1428 prewalk(0,level,ops[node+2].ival,&numarg);
1431 prewalk(0,level,ops[node+1].ival,&numarg);
1438 fatal("Garbage length in prewalk");
1439 prewalk(0,level,ops[node+1].ival,&numarg);
1440 for (i = 2; i<= len; i++) {
1441 prewalk(0,level,ops[node+i].ival,&numarg);
1446 *numericptr = numeric;
1460 type = ops[node].ival;
1463 if (type == OVAR && len == 1) {
1464 tmpstr=walk(0,0,ops[node+1].ival,&numarg);
1465 tmp2str = str_make("1");
1466 hstore(symtab,tmpstr->str_ptr,tmp2str);