ps 267 sh.c gettoken(char **ps, char *es, char **q, char **eq)
ps 272 sh.c s = *ps;
ps 307 sh.c *ps = s;
ps 312 sh.c peek(char **ps, char *es, char *toks)
ps 316 sh.c s = *ps;
ps 319 sh.c *ps = s;
ps 346 sh.c parseline(char **ps, char *es)
ps 350 sh.c cmd = parsepipe(ps, es);
ps 351 sh.c while(peek(ps, es, "&")){
ps 352 sh.c gettoken(ps, es, 0, 0);
ps 355 sh.c if(peek(ps, es, ";")){
ps 356 sh.c gettoken(ps, es, 0, 0);
ps 357 sh.c cmd = listcmd(cmd, parseline(ps, es));
ps 363 sh.c parsepipe(char **ps, char *es)
ps 367 sh.c cmd = parseexec(ps, es);
ps 368 sh.c if(peek(ps, es, "|")){
ps 369 sh.c gettoken(ps, es, 0, 0);
ps 370 sh.c cmd = pipecmd(cmd, parsepipe(ps, es));
ps 376 sh.c parseredirs(struct cmd *cmd, char **ps, char *es)
ps 381 sh.c while(peek(ps, es, "<>")){
ps 382 sh.c tok = gettoken(ps, es, 0, 0);
ps 383 sh.c if(gettoken(ps, es, &q, &eq) != 'a')
ps 401 sh.c parseblock(char **ps, char *es)
ps 405 sh.c if(!peek(ps, es, "("))
ps 407 sh.c gettoken(ps, es, 0, 0);
ps 408 sh.c cmd = parseline(ps, es);
ps 409 sh.c if(!peek(ps, es, ")"))
ps 411 sh.c gettoken(ps, es, 0, 0);
ps 412 sh.c cmd = parseredirs(cmd, ps, es);
ps 417 sh.c parseexec(char **ps, char *es)
ps 424 sh.c if(peek(ps, es, "("))
ps 425 sh.c return parseblock(ps, es);
ps 431 sh.c ret = parseredirs(ret, ps, es);
ps 432 sh.c while(!peek(ps, es, "|)&;")){
ps 433 sh.c if((tok=gettoken(ps, es, &q, &eq)) == 0)
ps 442 sh.c ret = parseredirs(ret, ps, es);