00001 00007 #include "routix/system.h" 00008 #include "routix/paging.h" 00009 #include "routix/segm.h" 00010 #include "routix/debug.h" 00011 #include "sys/syscalls.h" 00012 #include "routix/syscalls.h" 00013 #include "error.h" 00014 #include <routix/kstdio.h> 00015 #include "string.h" 00016 #include "routix/atomic.h" 00017 #ifndef __TASK 00018 #include "routix/task.h" 00019 #endif 00020 00021 00022 //Nuevas 00023 extern int sys_process (void); 00024 extern int sys_console (void); 00025 extern int sys_timer (void); 00026 extern int sys_mem (void); 00027 00028 extern task_struct_t *actual; 00029 00030 00031 00032 00033 // Vector de funciones de llamadas al sistema (grupo Console) 00034 int (*syscall_console[MAX_SYSCALLS]) (void) = { 00035 (int (*) (void)) sys_print, 00036 (int (*) (void)) sys_gets, 00037 (int (*) (void)) sys_clrscr 00038 }; 00039 00040 00041 00042 // Similar a llamada nix Write pero escribiendo siempre hacia stdout 00043 int sys_print (void *buff, size_t largo) 00044 { 00045 buff = convertir_direccion (buff , actual->cr3_backup); 00046 00047 size_t aux; 00048 00049 static spinlock_t candado = 1; 00050 00051 // spin_lock(&candado); 00052 00053 for (aux=0 ; aux<largo; aux++) { 00054 //Demora utilizada para verificar el funcionamiento de spinlocks 00055 // for(i=0 ; i<0x4fff ; i++); 00056 putchar(*((char *)buff+aux)); 00057 } 00058 // spin_unlock(&candado); 00059 00060 return largo; 00061 } 00062 00063 00064 int sys_gets (char *str) 00065 { 00066 str = convertir_direccion (str , actual->cr3_backup); 00067 00068 gets (str); 00069 return (strlen(str)); 00070 } 00071 00072 int sys_clrscr (void) 00073 { 00074 clrscr(); 00075 return OK; 00076 } 00077 00078