ps 266 sh.c gettoken(char **ps, char *es, char **q, char **eq) ps 271 sh.c s = *ps; ps 306 sh.c *ps = s; ps 311 sh.c peek(char **ps, char *es, char *toks) ps 315 sh.c s = *ps; ps 318 sh.c *ps = s; ps 345 sh.c parseline(char **ps, char *es) ps 349 sh.c cmd = parsepipe(ps, es); ps 350 sh.c while(peek(ps, es, "&")){ ps 351 sh.c gettoken(ps, es, 0, 0); ps 354 sh.c if(peek(ps, es, ";")){ ps 355 sh.c gettoken(ps, es, 0, 0); ps 356 sh.c cmd = listcmd(cmd, parseline(ps, es)); ps 362 sh.c parsepipe(char **ps, char *es) ps 366 sh.c cmd = parseexec(ps, es); ps 367 sh.c if(peek(ps, es, "|")){ ps 368 sh.c gettoken(ps, es, 0, 0); ps 369 sh.c cmd = pipecmd(cmd, parsepipe(ps, es)); ps 375 sh.c parseredirs(struct cmd *cmd, char **ps, char *es) ps 380 sh.c while(peek(ps, es, "<>")){ ps 381 sh.c tok = gettoken(ps, es, 0, 0); ps 382 sh.c if(gettoken(ps, es, &q, &eq) != 'a') ps 400 sh.c parseblock(char **ps, char *es) ps 404 sh.c if(!peek(ps, es, "(")) ps 406 sh.c gettoken(ps, es, 0, 0); ps 407 sh.c cmd = parseline(ps, es); ps 408 sh.c if(!peek(ps, es, ")")) ps 410 sh.c gettoken(ps, es, 0, 0); ps 411 sh.c cmd = parseredirs(cmd, ps, es); ps 416 sh.c parseexec(char **ps, char *es) ps 423 sh.c if(peek(ps, es, "(")) ps 424 sh.c return parseblock(ps, es); ps 430 sh.c ret = parseredirs(ret, ps, es); ps 431 sh.c while(!peek(ps, es, "|)&;")){ ps 432 sh.c if((tok=gettoken(ps, es, &q, &eq)) == 0) ps 441 sh.c ret = parseredirs(ret, ps, es);