/[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.11 by joko, Fri Jun 16 00:31:50 2006 UTC revision 1.15 by joko, Fri Jun 16 19:48:14 2006 UTC
# Line 11  int main(int argc, char * argv[]) { Line 11  int main(int argc, char * argv[]) {
11        
12    // interactive mode with prompt    // interactive mode with prompt
13    if (argc == 1) {    if (argc == 1) {
14      fprintf(stderr, "Interactive mode not implemented yet.\n");      fprintf(stderr, "Welcome to mini shell. Have fun!\n");
15      //printf("No arguments given.");      run_commands(stdin, "> ");
     exit(EXIT_FAILURE);  
16    }    }
17        
18    // scripting mode    // scripting mode
19    if (argc == 2) {    if (argc == 2) {
20      FILE * script = fopen(argv[1], "r");      FILE * script = fopen(argv[1], "r");
21      run_commands(script);      run_commands(script, "");
22      fclose(script);      fclose(script);
23    }    }
24  }  }
25    
26  void run_commands(FILE * fp) {  void run_commands(FILE * fp, char * prompt) {
27        
28    char command[MAX_COMMAND_LENGTH];    char command[MAX_COMMAND_LENGTH];
29        
30      // echo first prompt
31      fprintf(stdout, "%s", prompt);
32    while (fgets(command, MAX_COMMAND_LENGTH, fp)) {    while (fgets(command, MAX_COMMAND_LENGTH, fp)) {
33      int command_length;      char *command_ptr = command;
34            
35      // strip newlines      // strip newlines
36      chomp(command);      chomp(command_ptr);
37        
38        // trim whitespace
39        trim(&command_ptr);
40            
41      // ... and action      // ... and action
42      dispatch_command(command);      if (strlen(command_ptr))
43          dispatch_command(command_ptr);
44        
45        // echo prompt after executing shell command
46        fprintf(stdout, "%s", prompt);
47    }    }
48        
49  }  }
# Line 76  void dispatch_command(char * command) { Line 84  void dispatch_command(char * command) {
84    } else {    } else {
85      //printf("running: %s\n", command);      //printf("running: %s\n", command);
86      command_length = strlen(command);      command_length = strlen(command);
87      if (command[command_length-1] == '&') {      if (command[command_length-1] == '&' && command[command_length-2] == ' ') {
88        command[command_length-1] = '\0';        command[command_length-1] = '\0';
89          command[command_length-2] = '\0';
90        background = TRUE;        background = TRUE;
91      }      }
92            

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

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