00001
00002 #include "stdarg.h"
00003 #include <sys/types.h>
00004 #include <lib/routix.h>
00005 #include <routix.h>
00006 #include <string.h>
00007
00008 char msg[50];
00009
00010 char msg1[50];
00011 char msg2[50];
00012
00013 char str[]="Shell v 0.0.0.2";
00014
00015 int j, k;
00016 int pid;
00017 int ntasks = 0;
00018 int aux;
00019
00020 void main(void)
00021 {
00022 puts(str);
00023
00024 putchar('\n');
00025
00026 while(1) {
00027
00028 printf("kernel# ");
00029 gets(msg);
00030
00031 if ( ! strcmp(msg, "clear") ) {
00032 clrscr();
00033 }
00034 else if ( ! strcmp(msg, "exec") ) {
00035 printf("Ingrese nombre de tarea:");
00036 gets(msg1);
00037 pid = fork();
00038 if (pid==-1)
00039 perror("fork");
00040 else if (pid==0) {
00041 if (exec(msg1)==-1)
00042 perror("No pudo ejecutarse");
00043 exit(-1);
00044 }
00045 ntasks++;
00046 }
00047 else if ( ! strcmp(msg, "echo") ) {
00048 printf("Ingrese texto:");
00049 gets(msg1);
00050 printf("%s\n", msg1);
00051 }
00052 else if ( ! strcmp(msg, "\n") ) {
00053 }
00054 else if ( ! strcmp(msg, "ps") ) { proc_dump(); }
00055
00056 else if ( ! strcmp(msg, "ps count") ) { proc_dump(); }
00057
00058 else if ( ! strcmp(msg, "timers") ) { timer_dump(); }
00059
00060 else if ( ! strcmp(msg, "read") ) {
00061
00062 puts("Sector: ");
00063 gets(msg1);
00064
00065 read_debug(atoi(msg1));
00066
00067 }
00068
00069 else if ( ! strcmp(msg, "kill") ) {
00070
00071 puts("Pid: ");
00072 gets(msg1);
00073 puts("Senal: ");
00074 gets(msg2);
00075 if (kill(atoi(msg1), atoi(msg2))==-1)
00076 perror("kill");
00077
00078 }
00079
00080 else if ( ! strcmp(msg, "info") ) {
00081 printf("Ingrese el PID: ");
00082 gets(msg2);
00083 if (proc_dump_v(atoi(msg2))==-1)
00084 perror("proc dump verbose");
00085 }
00086
00087 else if ( ! strcmp(msg, "renice") ) {
00088 printf("Ingrese el PID: ");
00089 gets(msg1);
00090 printf("Ingrese la nueva prioridad: ");
00091 gets(msg2);
00092 if (renice( atoi(msg1), atoi(msg2)) == -1)
00093 perror("renice");
00094
00095 proc_dump();
00096 }
00097
00098 else if ( ! strcmp(msg, "free mem") ) { printf("Paginas disponibles: %d\n",free_mem() ) ; }
00099
00100 else if (! strcmp(msg, "show morecores")) {
00101 show(1);
00102 }
00103
00104 else if (! strcmp(msg, "show cache")) {
00105 show(2);
00106 }
00107
00108 else if (! strcmp(msg, "show zombies")) {
00109 show(3);
00110 }
00111
00112 else if (! strcmp(msg, "test malloc")) {
00113 show(4);
00114 }
00115
00116
00117 else if (! strcmp(msg, "show ntasks")) {
00118 printf("Cantidad de hijos del shell: %d\n", ntasks);
00119 }
00120
00121 else if (! strcmp(msg, "clear alloc")) {
00122 show(5);
00123 }
00124
00125 else if (! strcmp(msg, "show alloc")) {
00126 show(6);
00127 }
00128
00129
00130 else if (! strcmp(msg, "setvar")) {
00131 printf("Ingrese el nombre: ");
00132 gets(msg1);
00133 printf("Ingrese el valor: ");
00134 gets(msg2);
00135 if (setvar(msg1, atoi(msg2))==-1)
00136 printf("No pueden definirse más variables\n");
00137 }
00138
00139 else if (! strcmp(msg, "getvar")) {
00140 printf("Ingrese el nombre: ");
00141 gets(msg1);
00142 j = getvar(msg1);
00143 if (j==-1)
00144 printf("%s no definida\n", msg1);
00145 else printf ("Valor de %s: %d\n", msg1, j);
00146 }
00147
00148 else printf("comando o nombre de archivo erroneo\n");
00149
00150 if (ntasks>0) {
00151 pid = waitpid (0, &aux, WNOHANG);
00152 if (pid>0) {
00153 printf("SHELL 2 - Proceso: %d termino con: %d\n", pid, aux );
00154 ntasks--;
00155 }
00156
00157 }
00158
00159 }
00160
00161 }