/[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.4 - (hide annotations)
Thu Jun 15 14:21:16 2006 UTC (18 years, 3 months ago) by joko
Branch: MAIN
Changes since 1.3: +55 -11 lines
File MIME type: text/plain
+ now reads commands (by now filenames) from file and executes them
+ some other updates and fixes

1 joko 1.4 /* $Id: min_shell.c,v 1.3 2006/06/15 13:21:05 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     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     //pi.cb=sizeof(PROCESS_INFORMATION);
66    
67     CreateProcess(
68 joko 1.4 //"C:\windows\system32\notepad.exe", NULL,
69     //"C:\\windows\\system32\\notepad.exe", NULL,
70     NULL, filename,
71 joko 1.2 NULL, NULL, FALSE, 0,
72     NULL, NULL,
73     &si,
74     &pi
75     );
76 joko 1.4 check_alert_error("CreateProcess");
77 joko 1.3
78     if (!background) {
79     long status;
80     status = WaitForSingleObject(pi.hProcess, INFINITE);
81     if (status == WAIT_FAILED) {
82     check_alert_error("WaitForSingleObject");
83 joko 1.4 return FALSE;
84 joko 1.3 }
85     }
86 joko 1.4
87     return TRUE;
88 joko 1.3
89     }
90    
91 joko 1.4 void check_alert_error(const char * error_source) {
92 joko 1.3 DWORD dwError = GetLastError();
93 joko 1.2
94 joko 1.4 HLOCAL message = NULL;
95     BOOL fOk;
96    
97     if (dwError == 0)
98     return;
99 joko 1.3
100 joko 1.4 fOk = FormatMessage(
101 joko 1.3 FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
102     NULL,
103     dwError,
104     MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),
105 joko 1.4 (PTSTR)&message,
106 joko 1.3 0,
107     NULL
108     );
109    
110 joko 1.4 if (message != NULL) {
111     fprintf(stderr, "Error with '%s': %s (Code %i)\n", error_source, message, dwError);
112     LocalFree(message);
113 joko 1.3 }
114    
115 joko 1.2 }

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