2 do_grep(arg,TARG,gimme,arglast)
8 STR **st = stack->ary_array;
9 register int dst = arglast[1];
10 register int src = dst + 1;
11 register int sp = arglast[2];
12 register int i = sp - arglast[1];
13 int oldsave = savestack->ary_fill;
14 SPAT *oldspat = curspat;
15 int oldtmps_base = tmps_base;
17 savesptr(&stab_val(defstab));
19 if ((arg[1].arg_type & A_MASK) != A_EXPR) {
20 arg[1].arg_type &= A_MASK;
22 arg[1].arg_type |= A_DONT;
24 arg = arg[1].arg_ptr.arg_arg;
27 st[src]->str_pok &= ~SP_TEMP;
28 stab_val(defstab) = st[src];
31 stab_val(defstab) = str_mortal(&str_undef);
32 (void)eval(arg,G_SCALAR,sp);
33 st = stack->ary_array;
34 if (str_true(st[sp+1]))
40 tmps_base = oldtmps_base;
41 if (gimme != G_ARRAY) {
42 str_numset(TARG,(double)(dst - arglast[1]));
44 st[arglast[0]+1] = TARG;
47 return arglast[0] + (dst - arglast[1]);