xref: /xv6-public/sh.c (revision d7b3b802)
117a85657Srtm #include "types.h"
2*d7b3b802Skaashoek #include "stat.h"
3*d7b3b802Skaashoek #include "user.h"
417a85657Srtm #include "fs.h"
517a85657Srtm #include "fcntl.h"
617a85657Srtm 
717a85657Srtm char *args[100];
8*d7b3b802Skaashoek void parse(char buf[]);
917a85657Srtm 
1017a85657Srtm int
1117a85657Srtm main(void)
1217a85657Srtm {
1317a85657Srtm   char buf[128];
1417a85657Srtm   int pid;
1517a85657Srtm 
1617a85657Srtm   while(1){
1743572072Srtm     puts("$ ");
1817a85657Srtm     gets(buf, sizeof(buf));
1917a85657Srtm     if(buf[0] == '\0')
2017a85657Srtm       continue;
2117a85657Srtm     pid = fork();
2217a85657Srtm     if(pid == 0){
23*d7b3b802Skaashoek       parse(buf);
2417a85657Srtm       exec(buf, args);
2543572072Srtm       printf(1, "%s: not found\n", buf);
2617a85657Srtm       exit();
2717a85657Srtm     }
2817a85657Srtm     if(pid > 0)
2917a85657Srtm       wait();
3017a85657Srtm   }
3117a85657Srtm }
32*d7b3b802Skaashoek 
33*d7b3b802Skaashoek void
34*d7b3b802Skaashoek parse(char buf[])
35*d7b3b802Skaashoek {
36*d7b3b802Skaashoek   int j = 1;
37*d7b3b802Skaashoek   int i;
38*d7b3b802Skaashoek   args[0] = buf;
39*d7b3b802Skaashoek   for (i = 0; buf[i] != '\0'; i++) {
40*d7b3b802Skaashoek     if (buf[i] == ' ') {
41*d7b3b802Skaashoek       buf[i] = '\0';
42*d7b3b802Skaashoek       args[j++] = buf + i+1;
43*d7b3b802Skaashoek       if (j >= 100) {
44*d7b3b802Skaashoek 	printf(2, "too many args\n");
45*d7b3b802Skaashoek 	exit();
46*d7b3b802Skaashoek       }
47*d7b3b802Skaashoek     }
48*d7b3b802Skaashoek   }
49*d7b3b802Skaashoek }
50