diff options
author | rsc <rsc> | 2007-08-10 17:00:00 +0000 |
---|---|---|
committer | rsc <rsc> | 2007-08-10 17:00:00 +0000 |
commit | 9736728d23af42f740fcb217f418e3e8bdd9984d (patch) | |
tree | d7899b67930b32a9a204ee070c4c84b9d5ff6e92 /sh.c | |
parent | 7d4aef6cfd36c19583fafb7ae49a69c6ce47b680 (diff) | |
download | xv6-labs-9736728d23af42f740fcb217f418e3e8bdd9984d.tar.gz xv6-labs-9736728d23af42f740fcb217f418e3e8bdd9984d.tar.bz2 xv6-labs-9736728d23af42f740fcb217f418e3e8bdd9984d.zip |
cleanup main
Diffstat (limited to 'sh.c')
-rw-r--r-- | sh.c | 30 |
1 files changed, 18 insertions, 12 deletions
@@ -29,10 +29,11 @@ struct cmd cmdlist[MAXCMD]; struct cmd *cmd; char buf[BUFSIZ]; -int debug = 0; +int debug; int parse(char *s); void runcmd(void); +int getcmd(char *buf, int nbuf); int ioredirection(struct ionode *iolist, int nio); int gettoken(char *s, char **token); int _gettoken(char *s, char **p1, char **p2); @@ -40,20 +41,25 @@ int _gettoken(char *s, char **p1, char **p2); int main(void) { - while(1){ - puts("$ "); - memset(buf, 0, sizeof buf); - gets(buf, sizeof buf); - if(buf[0] == 0) // EOF - break; - if(parse(buf) < 0) - continue; - runcmd(); + while(getcmd(buf, sizeof buf) >= 0) { + if(parse(buf) >= 0) + runcmd(); } exit(); } int +getcmd(char *buf, int nbuf) +{ + puts("$ "); + memset(buf, 0, nbuf); + gets(buf, nbuf); + if(buf[0] == 0) // EOF + return -1; + return 0; +} + +int parse(char *s) { char *t; @@ -61,13 +67,13 @@ parse(char *s) gettoken(s, 0); - cmd = &cmdlist[0];; + cmd = &cmdlist[0]; for(i = 0; i < MAXCMD; i++) { cmdlist[i].argc = 0; cmdlist[i].token = 0; cmdlist[i].io = cmdlist[i].iolist; } - while(1) { + for(;;){ switch((c = gettoken(0, &t))) { case 'w': // Add an argument |