#include #include #include #include #include "menu.h" #define FONTSIZE 10 int PrintMenuOS() { int i, j; char data_M[FONTSIZE][FONTSIZE] = { " ", " * * ", " *** *** ", " * * * * ", " * * * * ", " * ** * ", " * * ", " * * ", " * * ", " " }; char data_e[FONTSIZE][FONTSIZE] = { " ", " ", " ** ", " * * ", " * * ", " ****** ", " * ", " * ", " *** ", " " }; char data_n[FONTSIZE][FONTSIZE] = { " ", " ", " ** ", " * * ", " * * ", " * * ", " * * ", " * * ", " * * ", " " }; char data_u[FONTSIZE][FONTSIZE] = { " ", " ", " * * ", " * * ", " * * ", " * * ", " * * ", " * ** ", " ** * ", " " }; char data_O[FONTSIZE][FONTSIZE] = { " ", " **** ", " * * ", " * * ", " * * ", " * * ", " * * ", " * * ", " **** ", " " }; char data_S[FONTSIZE][FONTSIZE] = { " ", " **** ", " ** ", " ** ", " *** ", " ** ", " ** ", " ** ", " **** ", " " }; for(i=0; itm_year+1900, t->tm_mon, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); return 0; } int TimeAsm(int argc, char *argv[]) { time_t tt; struct tm *t; asm volatile( "mov $0,%%ebx\n\t" "mov $0xd,%%eax\n\t" "int $0x80\n\t" "mov %%eax,%0\n\t" : "=m" (tt) ); t = localtime(&tt); printf("time:%d:%d:%d:%d:%d:%d\n",t->tm_year+1900, t->tm_mon, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); return 0; } int Fork(int argc, char *argv[]) { int pid; /* fork another process */ pid = fork(); if (pid<0) { /* error occurred */ fprintf(stderr,"Fork Failed!"); exit(-1); } else if (pid==0) { /* child process */ printf("This is Child Process!\n"); } else { /* parent process */ printf("This is Parent Process!\n"); /* parent will wait for the child to complete*/ wait(NULL); printf("Child Complete!\n"); } } int main() { PrintMenuOS(); SetPrompt("MenuOS>>"); MenuConfig("version","MenuOS V1.0(Based on Linux 3.18.6)",NULL); MenuConfig("quit","Quit from MenuOS",Quit); MenuConfig("time","Show System Time",Time); MenuConfig("time-asm","Show System Time(asm)",TimeAsm); MenuConfig("fork","Fork a new process",Fork); ExecuteMenu(); }