* cormen book
[mascara-docs.git] / i86 / mtx-16-bit / mtx / samples / SERIAL / USER / ucode.c
blobad5fe660ad43f4f632e88d1b8b56cd34fd3f39a3
1 // ucode.c file
3 char *cmd[]={"getpid", "ps", "chname", "kmode", "switch", "wait", "die",
4 "fork", "exec", "color", 0};
6 int show_menu()
8 printf("************************* Menu *****************************\n");
9 printf("* ps chname kmode switch wait die fork exec color sin sout *\n");
10 /* 1 2 3 4 5 6 7 8 9 10 11 */
11 printf("************************************************************\n");
14 int find_cmd(name) char *name;
16 int i; char *p;
17 i = 0; p = cmd[0];
18 while (p){
19 if (strcmp(p, name)==0)
20 return i;
21 i++; p = cmd[i];
23 return(-1);
27 int getpid()
29 return syscall(0,0,0);
32 int ps()
34 syscall(1, 0, 0);
37 int chname()
39 char s[64];
40 printf("\ninput new name : ");
41 gets(s);
42 syscall(2, s, 0);
45 int kmode()
47 printf("kmode : enter Kmode via INT 80\n");
48 printf("proc %d going K mode ....\n", getpid());
49 syscall(3, 0, 0);
50 printf("proc %d back from Kernel\n", getpid());
53 int kswitch()
55 printf("proc %d enter Kernel to switch proc\n", getpid());
56 syscall(4,0,0);
57 printf("proc %d back from Kernel\n", getpid());
60 int wait()
62 int child, exitValue;
63 printf("proc %d enter Kernel to wait for a child to die\n", getpid());
64 child = syscall(5, &exitValue, 0);
65 printf("proc %d back from wait, dead child=%d", getpid(), child);
66 if (child>=0)
67 printf("exitValue=%d", exitValue);
68 printf("\n");
71 int die()
73 char exitValue;
74 printf("\nenter an exitValue (0-9) : ");
75 exitValue=getc() - '0';
76 printf("enter kernel to die with exitValue=%d\n");
77 syscall(6,exitValue,0);
80 int fork()
82 int child;
83 child = syscall(7,0,0,0);
84 if (child)
85 printf("parent % return form fork, child=%d\n", getpid(), child);
86 else
87 printf("child %d return from fork, child=%d\n", getpid(), child);
90 int exec()
92 int r;
93 char filename[32];
94 printf("\nenter exec filename : ");
95 gets(filename);
96 r = syscall(8,filename,0,0);
97 printf("exec failed\n");
100 int chcolor()
102 int y;
103 printf("\ninput color [r|g|c|y] ; ");
104 y = getc();
105 syscall(9,y,0);
108 int putc(c) char c;
110 return syscall(10, c, 0, 0);
113 int getc()
115 return syscall(11,0,0,0)&0x7F;
118 char sline[128];
120 int sin()
122 syscall(12, sline, 0,0);
123 printf("sline=%s\n", sline);
126 int sout()
128 syscall(13, sline, 0,0);
132 int invalid(name) char *name;
134 printf("Invalid command : %s\n", name);