/[cvs]/joko/Uni/BSArch/03/win32/min_shell.c
ViewVC logotype

Annotation of /joko/Uni/BSArch/03/win32/min_shell.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (hide annotations)
Thu Jun 15 22:15:10 2006 UTC (18 years, 3 months ago) by joko
Branch: MAIN
Changes since 1.4: +2 -5 lines
File MIME type: text/plain
cleanup

1 joko 1.5 /* $Id: min_shell.c,v 1.4 2006/06/15 14:21:16 joko Exp $ */
2 joko 1.1
3     #include <stdlib.h>
4 joko 1.3 #include <stdio.h>
5 joko 1.1 #include <errno.h>
6 joko 1.2 #include <windows.h>
7    
8 joko 1.4 #include "min_shell.h"
9    
10 joko 1.2 #define BOOL int
11     #define TRUE 1
12     #define FALSE 0
13 joko 1.1
14 joko 1.4
15     #define MAX_COMMAND_LENGTH 1024
16    
17 joko 1.1 int main(int argc, char * argv[]) {
18     if (argc == 1) {
19 joko 1.2 //printf("No arguments given.");
20     //exit(EXIT_FAILURE);
21     char filename[255] = "abc\0";
22     BOOL background = 0;
23     start_process(filename, background);
24 joko 1.1 }
25 joko 1.4
26     if (argc == 2) {
27     FILE * script = fopen(argv[1], "r");
28     read_commands(script);
29     fclose(script);
30     }
31 joko 1.1 }
32 joko 1.2
33 joko 1.4 void read_commands(FILE * fp) {
34    
35     char command[MAX_COMMAND_LENGTH];
36     int command_length;
37    
38     fgets(command, MAX_COMMAND_LENGTH, fp);
39     command_length = strlen(command);
40    
41     /* if last char is newline, strip it */
42     if (command[command_length-1] == '\n') {
43     command[command_length-1] = '\0';
44     }
45 joko 1.2
46 joko 1.4 process_command(command);
47     }
48    
49     void process_command(char * command) {
50     printf("process_command: %s\n", command);
51     start_process(command, 0);
52     }
53    
54     BOOL start_process(char * filename, BOOL background) {
55    
56 joko 1.2 STARTUPINFO si;
57     PROCESS_INFORMATION pi;
58 joko 1.4
59 joko 1.5 //printf("start_process: '%s'\n", filename);
60 joko 1.2
61     ZeroMemory(&si,sizeof(si));
62 joko 1.4 si.cb = sizeof(STARTUPINFO);
63 joko 1.2
64     ZeroMemory(&pi,sizeof(pi));
65    
66     CreateProcess(
67 joko 1.4 NULL, filename,
68 joko 1.2 NULL, NULL, FALSE, 0,
69     NULL, NULL,
70     &si,
71     &pi
72     );
73 joko 1.4 check_alert_error("CreateProcess");
74 joko 1.3
75     if (!background) {
76     long status;
77     status = WaitForSingleObject(pi.hProcess, INFINITE);
78     if (status == WAIT_FAILED) {
79     check_alert_error("WaitForSingleObject");
80 joko 1.4 return FALSE;
81 joko 1.3 }
82     }
83 joko 1.4
84     return TRUE;
85 joko 1.3
86     }
87    
88 joko 1.4 void check_alert_error(const char * error_source) {
89 joko 1.3 DWORD dwError = GetLastError();
90 joko 1.2
91 joko 1.4 HLOCAL message = NULL;
92     BOOL fOk;
93    
94     if (dwError == 0)
95     return;
96 joko 1.3
97 joko 1.4 fOk = FormatMessage(
98 joko 1.3 FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
99     NULL,
100     dwError,
101     MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),
102 joko 1.4 (PTSTR)&message,
103 joko 1.3 0,
104     NULL
105     );
106    
107 joko 1.4 if (message != NULL) {
108     fprintf(stderr, "Error with '%s': %s (Code %i)\n", error_source, message, dwError);
109     LocalFree(message);
110 joko 1.3 }
111    
112 joko 1.2 }

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