/[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.2 by joko, Thu Jun 15 12:41:05 2006 UTC revision 1.10 by joko, Fri Jun 16 00:06:11 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 <windows.h>  #include <string.h>
7    
8  #define BOOL int  #include "min_shell.h"
9  #define TRUE 1  
10  #define FALSE 0  
11    #define MAX_COMMAND_LENGTH 1024
12    
13  int main(int argc, char * argv[]) {  int main(int argc, char * argv[]) {
14      
15      // interactive mode with prompt
16    if (argc == 1) {    if (argc == 1) {
17      //printf("No arguments given.");      //printf("No arguments given.");
18      //exit(EXIT_FAILURE);      //exit(EXIT_FAILURE);
19      char filename[255] = "abc\0";      char filename[255] = "abc\0";
20      BOOL background = 0;      BOOL background = 0;
21      start_process(filename, background);      os_start_process(filename, background);
22      }
23      
24      // scripting mode
25      if (argc == 2) {
26        FILE * script = fopen(argv[1], "r");
27        run_commands(script);
28        fclose(script);
29    }    }
30  }  }
31    
32  BOOL start_process(char *filename[], BOOL background) {  void run_commands(FILE * fp) {
33        
34    STARTUPINFO si;    char command[MAX_COMMAND_LENGTH];
   PROCESS_INFORMATION pi;  
35        
36    ZeroMemory(&si,sizeof(si));    while (fgets(command, MAX_COMMAND_LENGTH, fp)) {
37    si.cb=sizeof(STARTUPINFO);      int command_length;
38        
39        // strip newlines
40        chomp(command);
41        
42        // ... and action
43        dispatch_command(command);
44      }
45        
46    ZeroMemory(&pi,sizeof(pi));  }
   //pi.cb=sizeof(PROCESS_INFORMATION);  
     
   CreateProcess(  
     NULL, "notepad.exe",  
     NULL, NULL, FALSE, 0,  
     NULL, NULL,  
     &si,  
     &pi  
   );  
47    
48    
49    void dispatch_command(char * command) {
50    
51      BOOL background = FALSE;
52      int command_length;
53      char first_char;
54      char * shell_command;
55    
56      // is it a shell command?
57      first_char = command[0];
58      if (strcmp(&first_char, ":") == 0) {
59        
60        // "calculate" shell command ...
61        shell_command = command + 1;
62        printf("shell command: %s\n", shell_command);
63        
64        // ... and dispatch it
65        
66        // wait
67        if (strcmp(shell_command, "wait") == 0) {
68          // TODO
69        
70        // exit
71        } else if (strcmp(shell_command, "exit") == 0) {
72          exit(EXIT_SUCCESS);
73        
74        // unknown command
75        } else {
76          fprintf(stderr, "ERROR: Unknown shell command '%s'\n", shell_command);
77        }
78      
79      // run program: background or foreground?
80      } else {
81        printf("running: %s\n", command);
82        command_length = strlen(command);
83        if (command[command_length-1] == '&') {
84          command[command_length-1] = '\0';
85          background = TRUE;
86        }
87        
88        os_start_process(command, background);
89      }
90  }  }
91    

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

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