ps 272 user/sh.c gettoken(char **ps, char *es, char **q, char **eq) ps 277 user/sh.c s = *ps; ps 312 user/sh.c *ps = s; ps 317 user/sh.c peek(char **ps, char *es, char *toks) ps 321 user/sh.c s = *ps; ps 324 user/sh.c *ps = s; ps 351 user/sh.c parseline(char **ps, char *es) ps 355 user/sh.c cmd = parsepipe(ps, es); ps 356 user/sh.c while(peek(ps, es, "&")){ ps 357 user/sh.c gettoken(ps, es, 0, 0); ps 360 user/sh.c if(peek(ps, es, ";")){ ps 361 user/sh.c gettoken(ps, es, 0, 0); ps 362 user/sh.c cmd = listcmd(cmd, parseline(ps, es)); ps 368 user/sh.c parsepipe(char **ps, char *es) ps 372 user/sh.c cmd = parseexec(ps, es); ps 373 user/sh.c if(peek(ps, es, "|")){ ps 374 user/sh.c gettoken(ps, es, 0, 0); ps 375 user/sh.c cmd = pipecmd(cmd, parsepipe(ps, es)); ps 381 user/sh.c parseredirs(struct cmd *cmd, char **ps, char *es) ps 386 user/sh.c while(peek(ps, es, "<>")){ ps 387 user/sh.c tok = gettoken(ps, es, 0, 0); ps 388 user/sh.c if(gettoken(ps, es, &q, &eq) != 'a') ps 406 user/sh.c parseblock(char **ps, char *es) ps 410 user/sh.c if(!peek(ps, es, "(")) ps 412 user/sh.c gettoken(ps, es, 0, 0); ps 413 user/sh.c cmd = parseline(ps, es); ps 414 user/sh.c if(!peek(ps, es, ")")) ps 416 user/sh.c gettoken(ps, es, 0, 0); ps 417 user/sh.c cmd = parseredirs(cmd, ps, es); ps 422 user/sh.c parseexec(char **ps, char *es) ps 429 user/sh.c if(peek(ps, es, "(")) ps 430 user/sh.c return parseblock(ps, es); ps 436 user/sh.c ret = parseredirs(ret, ps, es); ps 437 user/sh.c while(!peek(ps, es, "|)&;")){ ps 438 user/sh.c if((tok=gettoken(ps, es, &q, &eq)) == 0) ps 447 user/sh.c ret = parseredirs(ret, ps, es);