/[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.15 - (show annotations)
Fri Jun 16 19:48:14 2006 UTC (18 years, 3 months ago) by joko
Branch: MAIN
Changes since 1.14: +4 -2 lines
File MIME type: text/plain
just execute commands if they're not empty

1 /* $Id: min_shell.c,v 1.12 2006/06/16 00:37:22 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, "Welcome to mini shell. Have fun!\n");
15 run_commands(stdin, "> ");
16 }
17
18 // scripting mode
19 if (argc == 2) {
20 FILE * script = fopen(argv[1], "r");
21 run_commands(script, "");
22 fclose(script);
23 }
24 }
25
26 void run_commands(FILE * fp, char * prompt) {
27
28 char command[MAX_COMMAND_LENGTH];
29
30 // echo first prompt
31 fprintf(stdout, "%s", prompt);
32 while (fgets(command, MAX_COMMAND_LENGTH, fp)) {
33 char *command_ptr = command;
34
35 // strip newlines
36 chomp(command_ptr);
37
38 // trim whitespace
39 trim(&command_ptr);
40
41 // ... and action
42 if (strlen(command_ptr))
43 dispatch_command(command_ptr);
44
45 // echo prompt after executing shell command
46 fprintf(stdout, "%s", prompt);
47 }
48
49 }
50
51
52 void dispatch_command(char * command) {
53
54 BOOL background = FALSE;
55 int command_length;
56 char first_char;
57 char * shell_command;
58
59 // is it a shell command?
60 first_char = command[0];
61 if (strcmp(&first_char, ":") == 0) {
62
63 // "calculate" shell command ...
64 shell_command = command + 1;
65 //printf("shell command: %s\n", shell_command);
66
67 // ... and dispatch it
68
69 // wait
70 if (strcmp(shell_command, "wait") == 0) {
71 // TODO
72 os_wait_for_processes();
73
74 // exit
75 } else if (strcmp(shell_command, "exit") == 0) {
76 exit(EXIT_SUCCESS);
77
78 // unknown command
79 } else {
80 fprintf(stderr, "ERROR: Unknown shell command '%s'\n", shell_command);
81 }
82
83 // run program: background or foreground?
84 } else {
85 //printf("running: %s\n", command);
86 command_length = strlen(command);
87 if (command[command_length-1] == '&' && command[command_length-2] == ' ') {
88 command[command_length-1] = '\0';
89 command[command_length-2] = '\0';
90 background = TRUE;
91 }
92
93 os_start_process(command, background);
94 }
95 }
96

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