1
// A simple implementation of a shell for testing
2
// `termopen([&sh, &shcf, '{cmd'}])` and `termopen([&sh])`.
4
// If launched with no arguments, prints "ready $ ", otherwise prints
7
puts("A simple implementation of a shell for testing termopen().");
10
puts(" shell-test --help");
11
puts(" Prints this help to stdout.");
13
puts(" shell-test EXE");
14
puts(" Prints \"ready $ \" to stderr.");
15
puts(" shell-test EXE \"prog args...\"");
16
puts(" Prints \"ready $ prog args...\\n\" to stderr.");
17
puts(" shell-test REP {byte} \"line line line\"");
18
puts(" Prints \"{lnr}: line line line\\n\" to stdout {byte} times.");
19
puts(" I.e. for `shell-test REP ab \"test\"'");
23
puts(" will be printed because byte `a' is equal to 97.");
10
26
int main(int argc, char **argv)
12
fprintf(stderr, "ready $ ");
28
if (argc == 2 && strcmp(argv[1], "--help") == 0) {
15
// argv should be {"terminal-test", "EXE", "prog args..."}
16
if (strcmp(argv[1], "EXE") != 0) {
17
fprintf(stderr, "first argument must be 'EXE'\n");
33
if (strcmp(argv[1], "EXE") == 0) {
34
fprintf(stderr, "ready $ ");
36
fprintf(stderr, "%s\n", argv[2]);
38
} else if (strcmp(argv[1], "REP") == 0) {
40
fprintf(stderr, "Not enough REP arguments\n");
43
uint8_t number = (uint8_t) *argv[2];
44
for (uint8_t i = 0; i < number; i++) {
45
printf("%d: %s\n", (int) i, argv[3]);
48
fprintf(stderr, "Unknown first argument\n");
21
fprintf(stderr, "%s\n", argv[2]);
52
} else if (argc == 1) {
53
fprintf(stderr, "ready $ ");
56
fprintf(stderr, "Missing first argument\n");