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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.11 - (show 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 /* $Id: min_shell.c,v 1.9 2006/06/15 23:16:01 joko Exp $ */
2
3 #include <stdlib.h>
4 #include <stdio.h>
5 #include <errno.h>
6 #include <string.h>
7
8 #include "min_shell.h"
9
10 int main(int argc, char * argv[]) {
11
12 // interactive mode with prompt
13 if (argc == 1) {
14 fprintf(stderr, "Interactive mode not implemented yet.\n");
15 //printf("No arguments given.");
16 exit(EXIT_FAILURE);
17 }
18
19 // scripting mode
20 if (argc == 2) {
21 FILE * script = fopen(argv[1], "r");
22 run_commands(script);
23 fclose(script);
24 }
25 }
26
27 void run_commands(FILE * fp) {
28
29 char command[MAX_COMMAND_LENGTH];
30
31 while (fgets(command, MAX_COMMAND_LENGTH, fp)) {
32 int command_length;
33
34 // strip newlines
35 chomp(command);
36
37 // ... and action
38 dispatch_command(command);
39 }
40
41 }
42
43
44 void dispatch_command(char * command) {
45
46 BOOL background = FALSE;
47 int command_length;
48 char first_char;
49 char * shell_command;
50
51 // 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 //printf("shell command: %s\n", shell_command);
58
59 // ... and dispatch it
60
61 // wait
62 if (strcmp(shell_command, "wait") == 0) {
63 // TODO
64 os_wait_for_processes();
65
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 //printf("running: %s\n", command);
78 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 }
86 }
87

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