/[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.3 by joko, Thu Jun 15 13:21:05 2006 UTC revision 1.8 by joko, Thu Jun 15 23:09:44 2006 UTC
# Line 3  Line 3 
3  #include <stdlib.h>  #include <stdlib.h>
4  #include <stdio.h>  #include <stdio.h>
5  #include <errno.h>  #include <errno.h>
 #include <windows.h>  
6    
7  #define BOOL int  #include "min_shell.h"
8  #define TRUE 1  
9  #define FALSE 0  
10    #define MAX_COMMAND_LENGTH 1024
11    
12  int main(int argc, char * argv[]) {  int main(int argc, char * argv[]) {
13      
14      // interactive mode with prompt
15    if (argc == 1) {    if (argc == 1) {
16      //printf("No arguments given.");      //printf("No arguments given.");
17      //exit(EXIT_FAILURE);      //exit(EXIT_FAILURE);
18      char filename[255] = "abc\0";      char filename[255] = "abc\0";
19      BOOL background = 0;      BOOL background = 0;
20      start_process(filename, background);      os_start_process(filename, background);
21      }
22      
23      // scripting mode
24      if (argc == 2) {
25        FILE * script = fopen(argv[1], "r");
26        run_commands(script);
27        fclose(script);
28    }    }
29  }  }
30    
31  BOOL start_process(char *filename[], BOOL background) {  void run_commands(FILE * fp) {
     
   STARTUPINFO si;  
   PROCESS_INFORMATION pi;  
     
   ZeroMemory(&si,sizeof(si));  
   si.cb=sizeof(STARTUPINFO);  
32        
33    ZeroMemory(&pi,sizeof(pi));    char command[MAX_COMMAND_LENGTH];
   //pi.cb=sizeof(PROCESS_INFORMATION);  
34        
35    CreateProcess(    while (fgets(command, MAX_COMMAND_LENGTH, fp)) {
36      NULL, "notepad.exe",      chomp(command);
37      NULL, NULL, FALSE, 0,      execute_command(command);
     NULL, NULL,  
     &si,  
     &pi  
   );  
     
   if (!background) {  
     long status;  
     status = WaitForSingleObject(pi.hProcess, INFINITE);  
     if (status == WAIT_FAILED) {  
       check_alert_error("WaitForSingleObject");  
     }  
38    }    }
39      
40  }  }
41    
 check_alert_error(char *error_source[]) {  
   DWORD dwError = GetLastError();  
   
   HLOCAL hlocal = NULL;  
42    
43    BOOL fOk = FormatMessage(  void execute_command(char * command) {
44      FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,    printf("process_command: %s\n", command);
45      NULL,    os_start_process(command, 0);
     dwError,  
     MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),  
     (PTSTR)&hlocal,  
     0,  
     NULL  
   );  
   
   if (hlocal != NULL) {  
     fprintf(stderr, "Error with '%s': %s", error_source, hlocal);  
     LocalFree(hlocal);  
   }  
     
46  }  }
47    

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.8

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