Lines Matching refs:shp

68 	Shell_t		*shp;		/* pointer to shell interpreter */
124 void *sh_macopen(Shell_t *shp)
128 mp->shp = shp;
135 char *sh_mactry(Shell_t *shp,register char *string)
140 int savexit = shp->savexit;
142 sh_pushcontext(shp,&buff,SH_JMPSUB);
145 string = sh_mactrim(shp,string,0);
146 sh_popcontext(shp,&buff);
147 shp->savexit = savexit;
160 char *sh_mactrim(Shell_t *shp, char *str, register int mode)
162 register Mac_t *mp = (Mac_t*)shp->mac_context;
163 Stk_t *stkp = shp->stk;
169 shp->argaddr = 0;
177 if(mp->ifsp=nv_getval(sh_scoped(shp,IFSNOD)))
189 if((mode=path_expand(shp,str,&arglist))==1)
202 int sh_macexpand(Shell_t* shp, register struct argnod *argp, struct argnod **arghead,int flag)
206 register Mac_t *mp = (Mac_t*)shp->mac_context;
207 char **saveargaddr = shp->argaddr;
209 Stk_t *stkp = shp->stk;
212 if(mp->ifsp=nv_getval(sh_scoped(shp,IFSNOD)))
216 if((flag&ARG_OPTIMIZE) && !shp->indebug && !(flags&ARG_MESSAGE))
217 shp->argaddr = (char**)&argp->argchn.ap;
219 shp->argaddr = 0;
250 if(shp->argaddr)
257 if(flags==1 && shp->argaddr)
260 shp->argaddr = saveargaddr;
269 void sh_machere(Shell_t *shp,Sfio_t *infile, Sfio_t *outfile, char *string)
274 register Mac_t *mp = (Mac_t*)shp->mac_context;
275 Lex_t *lp = (Lex_t*)mp->shp->lex_context;
278 Stk_t *stkp = shp->stk;
281 shp->argaddr = 0;
285 mp->ifsp = nv_getval(sh_scoped(shp,IFSNOD));
414 char *sh_macpat(Shell_t *shp,register struct argnod *arg, int flags)
424 sh_macexpand(shp,arg,NIL(struct argnod**),flags|ARG_ARRAYOK);
443 Lex_t *lp = (Lex_t*)mp->shp->lex_context;
451 Stk_t *stkp = mp->shp->stk;
673 tilde_expand2(mp->shp,tilde);
812 tilde_expand2(mp->shp,tilde);
896 #define MAX_OFFSETS (sizeof(shp->offsets)/sizeof(shp->offsets[0]))
903 static char *getdolarg(Shell_t *shp, int n, int *size)
905 register int c=S_DELIM, d=shp->ifstable['\\'];
906 register unsigned char *first,*last,*cp = (unsigned char*)shp->cur_line;
907 register int m=shp->offsets[0],delim=0;
918 cp += shp->offsets[m+1];
920 shp->ifstable['\\'] = 0;
921 shp->ifstable[0] = S_EOF;
925 while(shp->ifstable[*cp++]==S_SPACE);
928 shp->offsets[m] = (first-(unsigned char*)shp->cur_line);
929 while((c=shp->ifstable[*cp++])==0);
932 while((c=shp->ifstable[*cp++])==S_SPACE);
944 shp->ifstable['\\'] = d;
945 if(m > shp->offsets[0])
946 shp->offsets[0] = m;
958 static char *prefix(Shell_t *shp, char *id)
965 np = nv_search(id, shp->var_tree,0);
973 shp->argaddr = 0;
1004 int loc = stktell(mp->shp->stk);
1026 int sh_macfun(Shell_t *shp, const char *name, int offset)
1029 np = nv_bfsearch(name,shp->fun_tree,&nq,(char**)0);
1047 t.node.com.comline = shp->inlineno;
1050 stkseek(shp->stk,offset);
1051 comsubst((Mac_t*)shp->mac_context,&t.node,2);
1092 Lex_t *lp = (Lex_t*)mp->shp->lex_context;
1098 Stk_t *stkp = mp->shp->stk;
1143 v = special(mp->shp,c);
1148 if(mp->shp->cur_line)
1150 v = getdolarg(mp->shp,1,(int*)0);
1155 dolmax = mp->shp->st.dolc+1;
1173 mp->shp->argaddr = 0;
1183 v = special(mp->shp,c);
1185 else if(mp->shp->cur_line)
1187 mp->shp->used_pos = 1;
1188 v = getdolarg(mp->shp,c,&vsize);
1191 else if(c <= mp->shp->st.dolc)
1193 mp->shp->used_pos = 1;
1194 v = mp->shp->st.dolv[c];
1217 mp->shp->argaddr=0;
1299 if(mp->shp->cur_line && *id=='R' && strcmp(id,"REPLY")==0)
1301 mp->shp->argaddr=0;
1307 if(mp->shp->argaddr)
1309 np = nv_open(id,mp->shp->var_tree,flag|NV_NOFAIL);
1312 sfprintf(mp->shp->strbuf,"%s%c",id,0);
1313 id = sfstruse(mp->shp->strbuf);
1320 if(sh_macfun(mp->shp,id,offset))
1331 else if(np!=REPLYNOD || !mp->shp->cur_line)
1356 else if((dolmax = (int)sh_arith(mp->shp,v))<0)
1363 if((int)sh_arith(mp->shp,v))
1393 if((type==M_VNAME||type==M_SUBNAME) && mp->shp->argaddr && strcmp(nv_name(np),id))
1394 mp->shp->argaddr = 0;
1414 nv_typename(nq,mp->shp->strbuf);
1416 nv_attribute(np,mp->shp->strbuf,"typeset",1);
1417 v = sfstruse(mp->shp->strbuf);
1421 else if(mp->shp->cur_line && np==REPLYNOD)
1422 v = mp->shp->cur_line;
1464 if(mp->shp->argaddr)
1489 mp->shp->last_root = mp->shp->var_tree;
1490 id = idx = prefix(mp->shp,id);
1527 if(mp->shp->cur_line)
1529 getdolarg(mp->shp,MAX_ARGN,(int*)0);
1530 c = mp->shp->offsets[0];
1534 c = mp->shp->st.dolc;
1638 v = special(mp->shp,dolg=0);
1640 else if(mp->shp->cur_line)
1642 v = getdolarg(mp->shp,dolg=type,&vsize);
1648 v = mp->shp->st.dolv[dolg=type];
1815 sh_setmatch(mp->shp,v,vsize,nmatch,match,index++);
1847 sh_setmatch(mp->shp,vlast,vsize_last,nmatch,match,index++);
1853 mp->shp->instance++;
1854 sfprintf(mp->shp->strbuf,"[%s]",nv_getsub(np));
1855 mp->shp->instance--;
1856 v = sfstruse(mp->shp->strbuf);
1885 if(mp->shp->cur_line)
1889 if(!(v=getdolarg(mp->shp,dolg,&vsize)))
1897 v = mp->shp->st.dolv[dolg];
1963 if(mp->shp->subshell)
1981 sfprintf(mp->shp->strbuf,"%s[%s]\0",nv_name(np),nv_getsub(np));
1982 id = sfstruse(mp->shp->strbuf);
2023 Stk_t *stkp = mp->shp->stk;
2025 struct slnod *saveslp = mp->shp->st.staklist;
2035 mp->shp->argaddr = 0;
2037 mp->shp->st.staklist=0;
2039 if(mp->shp->inpool)
2047 t = sh_dolparen((Lex_t*)mp->shp->lex_context);
2050 mp->shp->inarith = 1;
2055 num = sh_arith(mp->shp,t->ar.arexpr->argval);
2057 num = sh_arith(mp->shp,sh_mactrim(mp->shp,t->ar.arexpr->argval,3));
2058 mp->shp->inarith = 0;
2063 sfprintf(mp->shp->strbuf,"%.*Lg",LDBL_DIG,num);
2065 sfprintf(mp->shp->strbuf,"%lld",(Sflong_t)num);
2067 sfprintf(mp->shp->strbuf,"%Lg",num);
2068 str = sfstruse(mp->shp->strbuf);
2070 mp->shp->st.staklist = saveslp;
2096 c = mp->shp->inlineno;
2097 mp->shp->inlineno = error_info.line+mp->shp->st.firstline;
2098 t = (Shnode_t*)sh_parse(mp->shp, sp,SH_EOF|SH_NL);
2099 mp->shp->inlineno = c;
2114 sh_pushcontext(mp->shp,&buff,SH_JMPIO);
2118 fd = sh_redirect(mp->shp,ip,3);
2121 sh_popcontext(mp->shp,&buff);
2124 if(sp=mp->shp->sftable[fd])
2130 if(!(sp=mp->shp->sftable[fd]))
2135 sp = sh_subshell(mp->shp,t,sh_isstate(SH_ERREXIT),type);
2140 sh_freeup(mp->shp);
2141 mp->shp->st.staklist = saveslp;
2150 np = sh_scoped(mp->shp,IFSNOD);
2205 else if(!mp->quote && mp->split && mp->shp->ifstable['\n'])
2231 if(--newlines>0 && mp->shp->ifstable['\n']==S_DELIM)
2258 Stk_t *stkp=mp->shp->stk;
2339 state = mp->shp->ifstable;
2438 if(mp->shp->ifstable[ESCAPE]==S_ESC)
2439 mp->shp->ifstable[ESCAPE] = 0;
2455 Stk_t *stkp = mp->shp->stk;
2464 mp->shp->argaddr = 0;
2466 count = path_generate(mp->shp,argp,mp->arghead);
2468 count = path_expand(mp->shp,argp->argval,mp->arghead);
2590 Shell_t *shp = context->shp;
2591 char *cp = sh_tilde(shp,argv[1]);
2602 static void tilde_expand2(Shell_t *shp, register int offset)
2604 char shtilde[10], *av[3], *ptr=stkfreeze(shp->stk,1);
2609 np = nv_open(shtilde,shp->fun_tree, NV_VARNAME|NV_NOARRAY|NV_NOASSIGN|NV_NOFAIL);
2625 sh_btilde(2, av, &shp->bltindata);
2627 stkset(shp->stk,ptr, offset);
2638 sfwrite(shp->stk,ptr,n);
2641 sfputr(shp->stk,av[1],0);
2654 static char *sh_tilde(Shell_t *shp,register const char *string)
2665 if(!(cp=nv_getval(sh_scoped(shp,HOME))))
2672 cp = nv_getval(sh_scoped(shp,PWDNOD));
2674 cp = nv_getval(sh_scoped(shp,OLDPWDNOD));
2715 c = shp->subshell;
2716 shp->subshell = 0;
2718 shp->subshell = c;
2726 static char *special(Shell_t *shp,register int c)
2729 shp->argaddr = 0;
2734 return(shp->st.dolc>0?shp->st.dolv[1]:NIL(char*));
2737 if(shp->cur_line)
2739 getdolarg(shp,MAX_ARGN,(int*)0);
2740 return(ltos(shp->offsets[0]));
2743 return(ltos(shp->st.dolc));
2745 if(shp->bckpid)
2747 return(sh_pid2str(shp,shp->bckpid));
2749 return(ltos(shp->bckpid));
2754 return(ltos(shp->gd->pid));
2757 return(sh_argdolminus(shp->arg_context));
2759 return(ltos(shp->savexit));
2761 if(sh_isstate(SH_PROFILE) || shp->fn_depth==0 || !shp->st.cmdname)
2762 return(shp->shname);
2764 return(shp->st.cmdname);