/[cvs]/joko/Uni/BSArch/03/win32/min_shell.c
ViewVC logotype

Diff of /joko/Uni/BSArch/03/win32/min_shell.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by joko, Thu Jun 15 12:22:56 2006 UTC revision 1.14 by joko, Fri Jun 16 19:39:07 2006 UTC
# Line 1  Line 1 
1  /* $Id$ */  /* $Id$ */
2    
3  #include <stdlib.h>  #include <stdlib.h>
4    #include <stdio.h>
5  #include <errno.h>  #include <errno.h>
6    #include <string.h>
7    
8    #include "min_shell.h"
9    
10  int main(int argc, char * argv[]) {  int main(int argc, char * argv[]) {
11      
12      // interactive mode with prompt
13    if (argc == 1) {    if (argc == 1) {
14      printf("No arguments given.");      fprintf(stderr, "Welcome to mini shell. Have fun!\n");
15      exit(EXIT_FAILURE);      run_commands(stdin, "> ");
16      }
17      
18      // scripting mode
19      if (argc == 2) {
20        FILE * script = fopen(argv[1], "r");
21        run_commands(script, "");
22        fclose(script);
23      }
24    }
25    
26    void run_commands(FILE * fp, char * prompt) {
27      
28      char command[MAX_COMMAND_LENGTH];
29      
30      // echo first prompt
31      fprintf(stdout, "%s", prompt);
32      while (fgets(command, MAX_COMMAND_LENGTH, fp)) {
33        char *command_ptr = command;
34        
35        // strip newlines
36        chomp(command_ptr);
37        
38        // trim whitespace
39        trim(&command_ptr);
40        
41        // ... and action
42        dispatch_command(command_ptr);
43        
44        // echo prompt after executing shell command
45        fprintf(stdout, "%s", prompt);
46      }
47      
48    }
49    
50    
51    void dispatch_command(char * command) {
52    
53      BOOL background = FALSE;
54      int command_length;
55      char first_char;
56      char * shell_command;
57    
58      // is it a shell command?
59      first_char = command[0];
60      if (strcmp(&first_char, ":") == 0) {
61        
62        // "calculate" shell command ...
63        shell_command = command + 1;
64        //printf("shell command: %s\n", shell_command);
65        
66        // ... and dispatch it
67        
68        // wait
69        if (strcmp(shell_command, "wait") == 0) {
70          // TODO
71          os_wait_for_processes();
72        
73        // exit
74        } else if (strcmp(shell_command, "exit") == 0) {
75          exit(EXIT_SUCCESS);
76        
77        // unknown command
78        } else {
79          fprintf(stderr, "ERROR: Unknown shell command '%s'\n", shell_command);
80        }
81      
82      // run program: background or foreground?
83      } else {
84        //printf("running: %s\n", command);
85        command_length = strlen(command);
86        if (command[command_length-1] == '&') {
87          command[command_length-1] = '\0';
88          background = TRUE;
89        }
90        
91        os_start_process(command, background);
92    }    }
93  }  }
94    

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.14

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed