|
|
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "fun.h"
-
-
- void eval(char *cmdline)
- {
- char *argv[MAXLINE];
- char buf[MAXLINE];
- int isBg;
- int pid;
-
- strcpy(buf,cmdline);
- isBg = parseline(cmdline,argv);
-
- if(argv[0] == NULL)
- {
- return;
- }
-
- if(!builtin_cmd(argv))
- {
- /*
- if((pid=fork())==0)
- {
- setpgid(0,0);
- if(execvp(argv[0],argv)<0)
- {
- printf("%s:Command not found.\n",argv[0]);
- exit(0);
- }
- }
-
- if(!isBg)
- {
- waitfg(pid);
- }
- else
- {
- printf("[%d] (%d) %s",pid2jid(pid),pid,cmdline);
- }
- */
- }
- return;
- }
-
- int parseline(const char *cmdline, char **argv)
- {
- static char array[MAXLINE];
- char *buf = array;
- char *delim;
- int argc;
- int bg;
-
- strcpy(buf, cmdline);
- buf[strlen(buf)-1] = ' ';
- while (*buf && (*buf == ' '))
- buf++;
-
- argc = 0;
- if (*buf == '\'')
- {
- buf++;
- delim = strchr(buf, '\'');
- }
- else
- {
- delim = strchr(buf, ' ');
- }
-
- while (delim)
- {
- argv[argc++] = buf;
- *delim = '\0';
- buf = delim + 1;
- while (*buf && (*buf == ' '))
- {
- buf++;
- }
-
- if (*buf == '\'')
- {
- buf++;
- delim = strchr(buf, '\'');
- }
- else
- {
- delim = strchr(buf, ' ');
- }
- }
- argv[argc] = NULL;
-
- if (argc == 0)
- return 1;
-
- if ((bg = (*argv[argc-1] == '&')) != 0)
- {
- argv[--argc] = NULL;
- }
- return bg;
- }
-
- int builtin_cmd(char **argv)
- {
- if(!strcmp(argv[0],"quit")||!strcmp(argv[0],"exit"))
- {
- exit(0);
- }
- if(!strcmp(argv[0],"history"))
- {
- print_his(argv[1]);
- return 1;
- }
- if(!strcmp(argv[0],"jobs"))
- {
- return 1;
- }
- if(!strcmp(argv[0],"bg")||!strcmp(argv[0],"fg"))
- {
- return 1;
- }
- if(!strcmp(argv[0], "&"))
- {
- return 1;
- }
-
- return 0;
- }
|