/[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.10 by joko, Fri Jun 16 00:06:11 2006 UTC revision 1.13 by joko, Fri Jun 16 00:47:07 2006 UTC
# Line 7  Line 7 
7    
8  #include "min_shell.h"  #include "min_shell.h"
9    
   
 #define MAX_COMMAND_LENGTH 1024  
   
10  int main(int argc, char * argv[]) {  int main(int argc, char * argv[]) {
11        
12    // interactive mode with prompt    // 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, "> ");
     char filename[255] = "abc\0";  
     BOOL background = 0;  
     os_start_process(filename, background);  
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;      int command_length;
34            
# Line 41  void run_commands(FILE * fp) { Line 37  void run_commands(FILE * fp) {
37            
38      // ... and action      // ... and action
39      dispatch_command(command);      dispatch_command(command);
40        
41        // echo prompt after executing shell command
42        fprintf(stdout, "%s", prompt);
43    }    }
44        
45  }  }
# Line 59  void dispatch_command(char * command) { Line 58  void dispatch_command(char * command) {
58            
59      // "calculate" shell command ...      // "calculate" shell command ...
60      shell_command = command + 1;      shell_command = command + 1;
61      printf("shell command: %s\n", shell_command);      //printf("shell command: %s\n", shell_command);
62            
63      // ... and dispatch it      // ... and dispatch it
64            
65      // wait      // wait
66      if (strcmp(shell_command, "wait") == 0) {      if (strcmp(shell_command, "wait") == 0) {
67        // TODO        // TODO
68          os_wait_for_processes();
69            
70      // exit      // exit
71      } else if (strcmp(shell_command, "exit") == 0) {      } else if (strcmp(shell_command, "exit") == 0) {
# Line 78  void dispatch_command(char * command) { Line 78  void dispatch_command(char * command) {
78        
79    // run program: background or foreground?    // run program: background or foreground?
80    } else {    } else {
81      printf("running: %s\n", command);      //printf("running: %s\n", command);
82      command_length = strlen(command);      command_length = strlen(command);
83      if (command[command_length-1] == '&') {      if (command[command_length-1] == '&') {
84        command[command_length-1] = '\0';        command[command_length-1] = '\0';

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.13

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