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 | |
| parent | 7d4aef6cfd36c19583fafb7ae49a69c6ce47b680 (diff) | |
| download | xv6-labs-9736728d23af42f740fcb217f418e3e8bdd9984d.tar.gz xv6-labs-9736728d23af42f740fcb217f418e3e8bdd9984d.tar.bz2 xv6-labs-9736728d23af42f740fcb217f418e3e8bdd9984d.zip | |
cleanup main
| -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 | 
