/************************************************************************************** $Id: tempshell.c,v 1.9 2002/04/29 23:50:43 nez Exp $ **************************************************************************************/ #include <ubixos/video.h> #include <ubixos/string.h> #include <ubixos/schedule.h> #include <ubixos/exec.h> #include <ubixos/8259.h> #include <ubixos/keyboard.h> #include <ubixfs/ubixfs.h> #include <ubixfs/file.h> #include <version.h> #include <ubixos/io.h> extern int errno; void shell() { unsigned int i=1,fd=-1; int e_start=0,e_offset=0; unsigned char tempstring[255]; unsigned long loop=0,catcount=0,result=0; unsigned char buf[12288]; unsigned char *BINARY_SPACE = (char *)0x78001000; while (i) { kprint("Ubix^3 # "); gets(tempstring); kprint("\nYou Typed: ["); kprint(tempstring); kprint("]\n"); if (!kstrcmp(tempstring, "credits")) { printColor = 0x09; kprint("\n\n"); kprint("(C) 2002 The UbixOS Project\n\n"); printColor = 0x0F; kprint("Developers:\n"); printColor = 0x07; kprint(" Christopher Olsen (Ubu)\n"); kprint(" Johnny Zackrisson (Hypno)\n"); kprint(" James Johnson (jimj)\n"); kprint(" Mark Iuzzolino (TCA)\n"); kprint(" Jeff Leveille (grayspace)\n"); kprint(" Mike Dimond (xum)\n"); kprint(" Clive Crous (Entro-P)\n"); kprint(" Larry Sica (lomion)\n"); kprint(" Frank Laszlo (nez)\n\n"); printColor = 0x0F; kprint("For help or support with UbixOS please visit\n"); kprint("#ubixos on your favorite Undernet IRC Server\n\n"); } if (!kstrcmp(tempstring, "reboot")) { i=0; } if (!kstrcmp(tempstring, "ls")) { displayrootdir(); } if (!kstrcmp(tempstring, "schedule")) { schedule(); } if (!kstrcmp(tempstring, "bah")) { execFile("realm.bin"); } if (!kstrcmp(tempstring, "irqoff")) { kprint("IRQ 0 Off\n"); disable_irq(0); } if (!kstrcmp(tempstring, "irqon")) { kprint("IRQ 0 On\n"); enable_irq(0); } if (!kstrcmp(tempstring, "ftest")) { if (fd == -1) fd = fopen("readme.txt",0,0); for (i=0;i<15;i++) { kprintf("%c",fgetc(fd)); } } if (tempstring[0] == 'e' && tempstring[1] == 'x' && tempstring[2] == 'e' && tempstring[3] == 'c') { result = getdata(tempstring+5,0,(unsigned long)(-1),buf); if (result > 0) { catcount = 0; for (loop=0;loop<result;loop++) { BINARY_SPACE[loop] = 0x0; } /* Load Binary Into Memory */ if (buf[1] == 'E' && buf[2] == 'L' && buf[3] == 'F') { /* ELF Binary Loading */ kprint("Loading ELF Binary ["); if (buf[4] == 257) { kprint("Staticly Linked\n"); } else { kprint("Error Not Staticly Linked\n"); printColor = 0x02; for (loop=0;loop<result;loop++) { if ((loop % (result/25)) == 0) { kprint("."); } BINARY_SPACE[loop] = buf[loop]; } printColor = 0x07; kprint("] "); printColor = 0x0F; kprint(" LOADED!\n"); printColor = 0x07; e_start = 0; e_offset = 0; e_start += buf[27]* 256 * 256 * 256; e_start += buf[26] * 256 * 256; e_start += buf[25]* 256; e_start += buf[24]; e_offset += buf[63] * 256 * 256 * 256; e_offset += buf[62] * 256 * 256; e_offset += buf[61] * 256; e_offset += buf[60]; e_start += 0x78001000; e_start -= e_offset; asm("call *%0": : "g"(e_start)); } } else { /* a.out Binary Loading */ kprint("Loading a.out Binary ["); printColor = 0x02; for (loop=0;loop<result;loop++) { if ((loop % (result/25)) == 0) { kprint("."); } BINARY_SPACE[loop] = buf[loop]; } printColor = 0x07; kprint("] "); printColor = 0x0F; kprint(" LOADED!\n"); printColor = 0x07; disable_irq(0); // asm( // "pusha\n" // "movl %0,%%esp\n" // "pushfl\n" // "push $0x100000\n" // "pushl $0x78001004\n" // "movl $0xFFFF,%%esp\n" // "pusha\n" // "popa\n" // : : "d" (task_list[1].stack) // ); // enable_irq(0); } } else { printlong(errno); } } if (tempstring[0] == 'c' && tempstring[1] == 'a' && tempstring[2] == 't') { result = getdata(tempstring+4, 0, (unsigned long)(-1), buf); if (result > 0) { catcount = 0; for (loop=0; loop<result; loop++) { tempstring[0] = buf[loop]; tempstring[1] = 0; kprint(tempstring); if (tempstring[0] == 10) { catcount++; } if (catcount >= 23) { kprint("Press any key..."); getch(); kprint("\n"); catcount = 0; } } } else { kprint("File not found or error\n"); } } } kprint("Thank you for using UbixOS\n\n"); kprint("Unloading Modules...\n"); kprint("Press any key to reboot...\n\n"); while(inportb(0x64) & 0x02); outportb(0x64, 0xfe); asm("cli;hlt"); while(1); }