es 267 user/sh.c gettoken(char **ps, char *es, char **q, char **eq) es 273 user/sh.c while(s < es && strchr(whitespace, *s)) es 298 user/sh.c while(s < es && !strchr(whitespace, *s) && !strchr(symbols, *s)) es 305 user/sh.c while(s < es && strchr(whitespace, *s)) es 312 user/sh.c peek(char **ps, char *es, char *toks) es 317 user/sh.c while(s < es && strchr(whitespace, *s)) es 331 user/sh.c char *es; es 334 user/sh.c es = s + strlen(s); es 335 user/sh.c cmd = parseline(&s, es); es 336 user/sh.c peek(&s, es, ""); es 337 user/sh.c if(s != es){ es 346 user/sh.c parseline(char **ps, char *es) es 350 user/sh.c cmd = parsepipe(ps, es); es 351 user/sh.c while(peek(ps, es, "&")){ es 352 user/sh.c gettoken(ps, es, 0, 0); es 355 user/sh.c if(peek(ps, es, ";")){ es 356 user/sh.c gettoken(ps, es, 0, 0); es 357 user/sh.c cmd = listcmd(cmd, parseline(ps, es)); es 363 user/sh.c parsepipe(char **ps, char *es) es 367 user/sh.c cmd = parseexec(ps, es); es 368 user/sh.c if(peek(ps, es, "|")){ es 369 user/sh.c gettoken(ps, es, 0, 0); es 370 user/sh.c cmd = pipecmd(cmd, parsepipe(ps, es)); es 376 user/sh.c parseredirs(struct cmd *cmd, char **ps, char *es) es 381 user/sh.c while(peek(ps, es, "<>")){ es 382 user/sh.c tok = gettoken(ps, es, 0, 0); es 383 user/sh.c if(gettoken(ps, es, &q, &eq) != 'a') es 401 user/sh.c parseblock(char **ps, char *es) es 405 user/sh.c if(!peek(ps, es, "(")) es 407 user/sh.c gettoken(ps, es, 0, 0); es 408 user/sh.c cmd = parseline(ps, es); es 409 user/sh.c if(!peek(ps, es, ")")) es 411 user/sh.c gettoken(ps, es, 0, 0); es 412 user/sh.c cmd = parseredirs(cmd, ps, es); es 417 user/sh.c parseexec(char **ps, char *es) es 424 user/sh.c if(peek(ps, es, "(")) es 425 user/sh.c return parseblock(ps, es); es 431 user/sh.c ret = parseredirs(ret, ps, es); es 432 user/sh.c while(!peek(ps, es, "|)&;")){ es 433 user/sh.c if((tok=gettoken(ps, es, &q, &eq)) == 0) es 442 user/sh.c ret = parseredirs(ret, ps, es);