/[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.14 - (hide annotations)
Fri Jun 16 19:39:07 2006 UTC (18 years, 3 months ago) by joko
Branch: MAIN
Changes since 1.13: +6 -3 lines
File MIME type: text/plain
finally got "trim" working

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

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