/[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.11 by joko, Fri Jun 16 00:31:50 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, "Interactive mode not implemented yet.\n");
15        //printf("No arguments given.");
16      exit(EXIT_FAILURE);      exit(EXIT_FAILURE);
17    }    }
18      
19      // scripting mode
20      if (argc == 2) {
21        FILE * script = fopen(argv[1], "r");
22        run_commands(script);
23        fclose(script);
24      }
25    }
26    
27    void run_commands(FILE * fp) {
28      
29      char command[MAX_COMMAND_LENGTH];
30      
31      while (fgets(command, MAX_COMMAND_LENGTH, fp)) {
32        int command_length;
33        
34        // strip newlines
35        chomp(command);
36        
37        // ... and action
38        dispatch_command(command);
39      }
40      
41    }
42    
43    
44    void dispatch_command(char * command) {
45    
46      BOOL background = FALSE;
47      int command_length;
48      char first_char;
49      char * shell_command;
50    
51      // is it a shell command?
52      first_char = command[0];
53      if (strcmp(&first_char, ":") == 0) {
54        
55        // "calculate" shell command ...
56        shell_command = command + 1;
57        //printf("shell command: %s\n", shell_command);
58        
59        // ... and dispatch it
60        
61        // wait
62        if (strcmp(shell_command, "wait") == 0) {
63          // TODO
64          os_wait_for_processes();
65        
66        // exit
67        } else if (strcmp(shell_command, "exit") == 0) {
68          exit(EXIT_SUCCESS);
69        
70        // unknown command
71        } else {
72          fprintf(stderr, "ERROR: Unknown shell command '%s'\n", shell_command);
73        }
74      
75      // run program: background or foreground?
76      } else {
77        //printf("running: %s\n", command);
78        command_length = strlen(command);
79        if (command[command_length-1] == '&') {
80          command[command_length-1] = '\0';
81          background = TRUE;
82        }
83        
84        os_start_process(command, background);
85      }
86  }  }
87    

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

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