/[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.10 - (show annotations)
Fri Jun 16 00:06:11 2006 UTC (18 years, 3 months ago) by joko
Branch: MAIN
Changes since 1.9: +39 -12 lines
File MIME type: text/plain
shell command dispatching

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

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