/[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.11 - (hide annotations)
Fri Jun 16 00:31:50 2006 UTC (18 years, 3 months ago) by joko
Branch: MAIN
Changes since 1.10: +5 -9 lines
File MIME type: text/plain
+ WaitForMultipleObjects

1 joko 1.10 /* $Id: min_shell.c,v 1.9 2006/06/15 23:16:01 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.10 #include <string.h>
7 joko 1.2
8 joko 1.4 #include "min_shell.h"
9    
10 joko 1.1 int main(int argc, char * argv[]) {
11 joko 1.8
12     // interactive mode with prompt
13 joko 1.1 if (argc == 1) {
14 joko 1.11 fprintf(stderr, "Interactive mode not implemented yet.\n");
15 joko 1.2 //printf("No arguments given.");
16 joko 1.11 exit(EXIT_FAILURE);
17 joko 1.1 }
18 joko 1.4
19 joko 1.8 // scripting mode
20 joko 1.4 if (argc == 2) {
21     FILE * script = fopen(argv[1], "r");
22 joko 1.7 run_commands(script);
23 joko 1.4 fclose(script);
24     }
25 joko 1.1 }
26 joko 1.2
27 joko 1.7 void run_commands(FILE * fp) {
28 joko 1.4
29     char command[MAX_COMMAND_LENGTH];
30    
31 joko 1.8 while (fgets(command, MAX_COMMAND_LENGTH, fp)) {
32 joko 1.9 int command_length;
33    
34     // strip newlines
35 joko 1.8 chomp(command);
36 joko 1.9
37     // ... and action
38 joko 1.10 dispatch_command(command);
39 joko 1.8 }
40 joko 1.4
41 joko 1.6 }
42    
43 joko 1.4
44 joko 1.10 void dispatch_command(char * command) {
45 joko 1.9
46     BOOL background = FALSE;
47     int command_length;
48 joko 1.10 char first_char;
49     char * shell_command;
50 joko 1.9
51 joko 1.10 // is it a shell command?
52     first_char = command[0];
53     if (strcmp(&first_char, ":") == 0) {
54    
55     // "calculate" shell command ...
56     shell_command = command + 1;
57 joko 1.11 //printf("shell command: %s\n", shell_command);
58 joko 1.10
59     // ... and dispatch it
60    
61     // wait
62     if (strcmp(shell_command, "wait") == 0) {
63     // TODO
64 joko 1.11 os_wait_for_processes();
65 joko 1.10
66     // exit
67     } else if (strcmp(shell_command, "exit") == 0) {
68     exit(EXIT_SUCCESS);
69    
70     // unknown command
71     } else {
72     fprintf(stderr, "ERROR: Unknown shell command '%s'\n", shell_command);
73     }
74    
75     // run program: background or foreground?
76     } else {
77 joko 1.11 //printf("running: %s\n", command);
78 joko 1.10 command_length = strlen(command);
79     if (command[command_length-1] == '&') {
80     command[command_length-1] = '\0';
81     background = TRUE;
82     }
83    
84     os_start_process(command, background);
85 joko 1.9 }
86 joko 1.3 }
87    

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