diff --git a/Asuro.iso b/Asuro.iso index 92defe25..54cb2584 100644 Binary files a/Asuro.iso and b/Asuro.iso differ diff --git a/bin/kernel.bin b/bin/kernel.bin index b0715ad4..0c4001af 100755 Binary files a/bin/kernel.bin and b/bin/kernel.bin differ diff --git a/iso/boot/asuro.bin b/iso/boot/asuro.bin index b0715ad4..0c4001af 100755 Binary files a/iso/boot/asuro.bin and b/iso/boot/asuro.bin differ diff --git a/lib/E1000.ppu b/lib/E1000.ppu index 680da572..5e5d3813 100644 Binary files a/lib/E1000.ppu and b/lib/E1000.ppu differ diff --git a/lib/IDE.ppu b/lib/IDE.ppu index 570d3341..00f3a229 100644 Binary files a/lib/IDE.ppu and b/lib/IDE.ppu differ diff --git a/lib/arp.ppu b/lib/arp.ppu index ce880aec..5ef009cb 100644 Binary files a/lib/arp.ppu and b/lib/arp.ppu differ diff --git a/lib/asuro.ppu b/lib/asuro.ppu index 773319f0..67886ee4 100644 Binary files a/lib/asuro.ppu and b/lib/asuro.ppu differ diff --git a/lib/console.ppu b/lib/console.ppu index dce98f72..847bea8e 100644 Binary files a/lib/console.ppu and b/lib/console.ppu differ diff --git a/lib/drivermanagement.ppu b/lib/drivermanagement.ppu index a53e4e1f..cf3fc079 100644 Binary files a/lib/drivermanagement.ppu and b/lib/drivermanagement.ppu differ diff --git a/lib/eth2.ppu b/lib/eth2.ppu index df7db343..14846340 100644 Binary files a/lib/eth2.ppu and b/lib/eth2.ppu differ diff --git a/lib/fat32.ppu b/lib/fat32.ppu index 612ca43a..a8277ecd 100644 Binary files a/lib/fat32.ppu and b/lib/fat32.ppu differ diff --git a/lib/ipv4.ppu b/lib/ipv4.ppu index 6e94af3d..6925500f 100644 Binary files a/lib/ipv4.ppu and b/lib/ipv4.ppu differ diff --git a/lib/kernel.ppu b/lib/kernel.ppu index 1b160be9..ed3d897f 100644 Binary files a/lib/kernel.ppu and b/lib/kernel.ppu differ diff --git a/lib/libpconsole.a b/lib/libpconsole.a index cb94c33f..de2c1f0e 100644 Binary files a/lib/libpconsole.a and b/lib/libpconsole.a differ diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index 9d631134..8f229af9 100644 Binary files a/lib/libpmultiboot.a and b/lib/libpmultiboot.a differ diff --git a/lib/libpsystem.a b/lib/libpsystem.a index c31488e7..64edbb38 100644 Binary files a/lib/libpsystem.a and b/lib/libpsystem.a differ diff --git a/lib/memview.ppu b/lib/memview.ppu index 59058978..ac371d96 100644 Binary files a/lib/memview.ppu and b/lib/memview.ppu differ diff --git a/lib/net.ppu b/lib/net.ppu index 6b3a8a29..acbf5714 100644 Binary files a/lib/net.ppu and b/lib/net.ppu differ diff --git a/lib/netutils.ppu b/lib/netutils.ppu index 8897b74b..9d005457 100644 Binary files a/lib/netutils.ppu and b/lib/netutils.ppu differ diff --git a/lib/scheduler.ppu b/lib/scheduler.ppu index bdf989c0..0c67574d 100644 Binary files a/lib/scheduler.ppu and b/lib/scheduler.ppu differ diff --git a/lib/shell.ppu b/lib/shell.ppu index 12ed8fba..c6635c99 100644 Binary files a/lib/shell.ppu and b/lib/shell.ppu differ diff --git a/lib/storagemanagement.ppu b/lib/storagemanagement.ppu index 53e35d2b..82a6b3d1 100644 Binary files a/lib/storagemanagement.ppu and b/lib/storagemanagement.ppu differ diff --git a/lib/terminal.ppu b/lib/terminal.ppu index 51235a65..10ee6608 100644 Binary files a/lib/terminal.ppu and b/lib/terminal.ppu differ diff --git a/lib/tracer.ppu b/lib/tracer.ppu index e7ce3b20..c77ab976 100644 Binary files a/lib/tracer.ppu and b/lib/tracer.ppu differ diff --git a/src/driver/net/include/netutils.pas b/src/driver/net/include/netutils.pas index 658b662b..77aded95 100644 --- a/src/driver/net/include/netutils.pas +++ b/src/driver/net/include/netutils.pas @@ -7,8 +7,8 @@ uses procedure copyMAC(src : puint8; dst : puint8); procedure copyIPv4(src : puint8; dst : puint8); -procedure writeMACAddress(mac : puint8); -procedure writeIPv4Address(ip : puint8); +procedure writeMACAddress(mac : puint8; WND : HWND); +procedure writeIPv4Address(ip : puint8; WND : HWND); function MACEqual(mac1 : puint8; mac2 : puint8) : boolean; function IPEqual(ip1 : puint8; ip2 : puint8) : boolean; function newPacketContext : PPacketContext; @@ -48,33 +48,33 @@ begin pop_trace; end; -procedure writeIPv4Address(ip : puint8); +procedure writeIPv4Address(ip : puint8; WND : HWND); var i : integer; begin push_trace('netutils.writeIPv4Address'); - console.writeint(ip[0]); + console.writeintWND(ip[0], WND); for i:=1 to 3 do begin - console.writestring('.'); - console.writeint(ip[i]); + console.writestringWND('.', WND); + console.writeintWND(ip[i], WND); end; - console.writestringln(' '); + console.writestringlnWND(' ', WND); pop_trace; end; -procedure writeMACAddress(mac : puint8); +procedure writeMACAddress(mac : puint8; WND : HWND); var i : integer; begin push_trace('netutils.writeMACAddress'); - console.writehexpair(mac[0]); + console.writehexpairWND(mac[0], WND); for i:=1 to 5 do begin - console.writestring(':'); - console.writehexpair(mac[i]); + console.writestringWND(':', WND); + console.writehexpairWND(mac[i], WND); end; - console.writestringln(' '); + console.writestringlnWND(' ', WND); pop_trace; end; diff --git a/src/driver/net/l3/ipv4.pas b/src/driver/net/l3/ipv4.pas index bab52fe0..05241dbf 100644 --- a/src/driver/net/l3/ipv4.pas +++ b/src/driver/net/l3/ipv4.pas @@ -71,18 +71,18 @@ begin push_trace('ipv4.terminal_command_ifconfig'); if paramCount(params) > 2 then begin end else begin - writestring(' MAC: '); - writeMACAddress(net.GetMAC); - writestring(' IPv4: '); - writeIPv4Address(@Config.Address[0]); - writestring(' Gateway: '); - writeIPv4Address(@Config.Gateway[0]); - writestring(' Netmask: '); - writeIPv4Address(@Config.Netmask[0]); + writestringWND(' MAC: ', getTerminalHWND); + writeMACAddress(net.GetMAC, getTerminalHWND); + writestringWND(' IPv4: ', getTerminalHWND); + writeIPv4Address(@Config.Address[0], getTerminalHWND); + writestringWND(' Gateway: ', getTerminalHWND); + writeIPv4Address(@Config.Gateway[0], getTerminalHWND); + writestringWND(' Netmask: ', getTerminalHWND); + writeIPv4Address(@Config.Netmask[0], getTerminalHWND); if Config.UP then - writestringln(' NetUP: true') + writestringlnWND(' NetUP: true', getTerminalHWND) else - writestringln(' NetUP: false'); + writestringlnWND(' NetUP: false', getTerminalHWND); end; pop_trace; end; diff --git a/src/driver/netdev/E1000.pas b/src/driver/netdev/E1000.pas index 73948dcb..56e7891c 100644 --- a/src/driver/netdev/E1000.pas +++ b/src/driver/netdev/E1000.pas @@ -438,7 +438,7 @@ end; procedure console_command_mac(params : PParamList); begin push_trace('E1000.console_command_mac'); - writeMACAddress(@mac[0]); + writeMACAddress(@mac[0], getTerminalHWND); pop_trace; end; @@ -474,6 +474,7 @@ begin TestPacket[26]:= mac[4]; TestPacket[27]:= mac[5]; sendPacket(void(@TestPacket[0]), 42); + writeStringlnWND('E1000 ARP Testpacket Sent.', getTerminalHWND); pop_trace; end; @@ -513,7 +514,7 @@ begin load:= false; end else begin console.output('E1000 Driver', 'MAC Address: '); - writeMACAddress(@mac[0]); + writeMACAddress(@mac[0], 0); startLink(); diff --git a/src/driver/storage/storagemanagement.pas b/src/driver/storage/storagemanagement.pas index a75e731a..6281541d 100644 --- a/src/driver/storage/storagemanagement.pas +++ b/src/driver/storage/storagemanagement.pas @@ -255,8 +255,8 @@ begin fileSystems:= ll_New(sizeof(TFilesystem)); terminal.registerCommand('DISK', @disk_command, 'Disk utility'); terminal.registerCommand('VOLUME', @volume_command, 'Volume utility'); - terminal.registerCommand('mkdir', @mkdir_command, 'Volume utility'); - terminal.registerCommand('ls', @ls_command, 'Volume utility'); + terminal.registerCommandEx('mkdir', @mkdir_command, 'Volume utility', true); + terminal.registerCommandEx('ls', @ls_command, 'Volume utility', true); pop_trace(); end; diff --git a/src/drivermanagement.pas b/src/drivermanagement.pas index cca66a82..3f718daf 100644 --- a/src/drivermanagement.pas +++ b/src/drivermanagement.pas @@ -67,15 +67,15 @@ var implementation -procedure writeBusType(Bus : TBusIdentifier); +procedure writeBusType(Bus : TBusIdentifier; WND : HWND); begin case Bus of - biUnknown : console.writestring('Unknown'); - biANY : console.writestring('ANY'); - bii2c : console.writestring('i2c'); - biPCI : console.writestring('PCI'); - biPCIe : console.writestring('PCIe'); - biUSB : console.writestring('USB'); + biUnknown : console.writestringWND('Unknown', WND); + biANY : console.writestringWND('ANY', WND); + bii2c : console.writestringWND('i2c', WND); + biPCI : console.writestringWND('PCI', WND); + biPCIe : console.writestringWND('PCIe', WND); + biUSB : console.writestringWND('USB', WND); end; end; @@ -93,29 +93,29 @@ begin i:= 1; while Drv <> nil do begin if Drv^.Loaded then begin - console.writeint(i); - console.writestring(') '); - console.writestring(Drv^.Driver_Name); - console.writestring(' - Bus: '); - writeBusType(Drv^.Identifier^.Bus); - console.writestringln(' '); - console.writestring(' ['); - console.writeHex(Drv^.Identifier^.id0); - console.writestring('-'); - console.writeHex(Drv^.Identifier^.id1); - console.writestring('-'); - console.writeHex(Drv^.Identifier^.id2); - console.writestring('-'); - console.writeHex(Drv^.Identifier^.id3); - console.writestring('-'); - console.writeHex(Drv^.Identifier^.id4); + console.writeintWND(i, getTerminalHWND); + console.writestringWND(') ', getTerminalHWND); + console.writestringWND(Drv^.Driver_Name, getTerminalHWND); + console.writestringWND(' - Bus: ', getTerminalHWND); + writeBusType(Drv^.Identifier^.Bus, getTerminalHWND); + console.writestringlnWND(' ', getTerminalHWND); + console.writestringWND(' [', getTerminalHWND); + console.writeHexWND(Drv^.Identifier^.id0, getTerminalHWND); + console.writestringWND('-', getTerminalHWND); + console.writeHexWND(Drv^.Identifier^.id1, getTerminalHWND); + console.writestringWND('-', getTerminalHWND); + console.writeHexWND(Drv^.Identifier^.id2, getTerminalHWND); + console.writestringWND('-', getTerminalHWND); + console.writeHexWND(Drv^.Identifier^.id3, getTerminalHWND); + console.writestringWND('-', getTerminalHWND); + console.writeHexWND(Drv^.Identifier^.id4, getTerminalHWND); ex:= Drv^.Identifier^.ex; while ex <> nil do begin - console.writestring('-'); - console.writeHex(ex^.idN); + console.writestringWND('-', getTerminalHWND); + console.writeHexWND(ex^.idN, getTerminalHWND); ex:= ex^.ex; end; - console.writestringln(']'); + console.writestringlnWND(']', getTerminalHWND); i:= i + 1; end; Drv:= Drv^.Next; @@ -134,30 +134,30 @@ begin Drv:= Root; i:= 1; while Drv <> nil do begin - console.writeint(i); - console.writestring(') '); - console.writestring(Drv^.Driver_Name); - console.writestring(' - Bus: '); - writeBusType(Drv^.Identifier^.Bus); - console.writestring(' - Loaded: '); - if Drv^.Loaded then console.writestringln('true') else console.writestringln('false'); - console.writestring(' ['); - console.writeHex(Drv^.Identifier^.id0); - console.writestring('-'); - console.writeHex(Drv^.Identifier^.id1); - console.writestring('-'); - console.writeHex(Drv^.Identifier^.id2); - console.writestring('-'); - console.writeHex(Drv^.Identifier^.id3); - console.writestring('-'); - console.writeHex(Drv^.Identifier^.id4); + console.writeintWND(i, getTerminalHWND); + console.writestringWND(') ', getTerminalHWND); + console.writestringWND(Drv^.Driver_Name, getTerminalHWND); + console.writestringWND(' - Bus: ', getTerminalHWND); + writeBusType(Drv^.Identifier^.Bus, getTerminalHWND); + console.writestringWND(' - Loaded: ', getTerminalHWND); + if Drv^.Loaded then console.writestringlnWND('true', getTerminalHWND) else console.writestringlnWND('false', getTerminalHWND); + console.writestringWND(' [', getTerminalHWND); + console.writeHexWND(Drv^.Identifier^.id0, getTerminalHWND); + console.writestringWND('-', getTerminalHWND); + console.writeHexWND(Drv^.Identifier^.id1, getTerminalHWND); + console.writestringWND('-', getTerminalHWND); + console.writeHexWND(Drv^.Identifier^.id2, getTerminalHWND); + console.writestringWND('-', getTerminalHWND); + console.writeHexWND(Drv^.Identifier^.id3, getTerminalHWND); + console.writestringWND('-', getTerminalHWND); + console.writeHexWND(Drv^.Identifier^.id4, getTerminalHWND); ex:= Drv^.Identifier^.ex; while ex <> nil do begin - console.writestring('-'); - console.writeHex(ex^.idN); + console.writestringWND('-', getTerminalHWND); + console.writeHexWND(ex^.idN, getTerminalHWND); ex:= ex^.ex; end; - console.writestringln(']'); + console.writestringlnWND(']', getTerminalHWND); i:= i + 1; Drv:= Drv^.Next; end; @@ -175,35 +175,35 @@ begin Dv:= Dev; i:= 1; while Dv <> nil do begin - console.writeint(i); - console.writestring(') '); - console.writestring(Dv^.Device_Name); - console.writestring(' - Bus: '); - writeBusType(Dv^.Identifier^.Bus); - console.writestringln(' '); - console.writestring(' ['); - console.writeHex(Dv^.Identifier^.id0); - console.writestring('-'); - console.writeHex(Dv^.Identifier^.id1); - console.writestring('-'); - console.writeHex(Dv^.Identifier^.id2); - console.writestring('-'); - console.writeHex(Dv^.Identifier^.id3); - console.writestring('-'); - console.writeHex(Dv^.Identifier^.id4); + console.writeintWND(i, getTerminalHWND); + console.writestringWND(') ', getTerminalHWND); + console.writestringWND(Dv^.Device_Name, getTerminalHWND); + console.writestringWND(' - Bus: ', getTerminalHWND); + writeBusType(Dv^.Identifier^.Bus, getTerminalHWND); + console.writestringlnWND(' ', getTerminalHWND); + console.writestringWND(' [', getTerminalHWND); + console.writeHexWND(Dv^.Identifier^.id0, getTerminalHWND); + console.writestringWND('-', getTerminalHWND); + console.writeHexWND(Dv^.Identifier^.id1, getTerminalHWND); + console.writestringWND('-', getTerminalHWND); + console.writeHexWND(Dv^.Identifier^.id2, getTerminalHWND); + console.writestringWND('-', getTerminalHWND); + console.writeHexWND(Dv^.Identifier^.id3, getTerminalHWND); + console.writestringWND('-', getTerminalHWND); + console.writeHexWND(Dv^.Identifier^.id4, getTerminalHWND); ex:= Dv^.Identifier^.ex; while ex <> nil do begin - console.writestring('-'); - console.writeHex(ex^.idN); + console.writestringWND('-', getTerminalHWND); + console.writeHexWND(ex^.idN, getTerminalHWND); ex:= ex^.ex; end; - console.writestringln(']'); + console.writestringlnWND(']', getTerminalHWND); if Dv^.Driver_Loaded then begin - console.writestring(' Driver Loaded: '); + console.writestringWND(' Driver Loaded: ', getTerminalHWND); if Dv^.Driver <> nil then begin - console.writestringln(Dv^.Driver^.Driver_Name); + console.writestringlnWND(Dv^.Driver^.Driver_Name, getTerminalHWND); end else begin - console.writestringln('Unknown') + console.writestringlnWND('Unknown', getTerminalHWND) end; end; i:= i + 1; @@ -212,6 +212,35 @@ begin pop_trace; end; +procedure terminal_command_dev(Params : PParamList); +var + p1 : pchar; + +begin + if paramCount(Params) > 0 then begin + p1:= getParam(0, Params); + if StringEquals(p1, 'drivers') then begin + terminal_command_drivers(Params); + end; + if StringEquals(p1, 'devices') then begin + terminal_command_devices(Params); + end; + if StringEquals(p1, 'driverex') then begin + terminal_command_driversex(Params); + end; + end else begin + writeStringlnWND('Driver Management Interface', getTerminalHWND); + writeStringlnWND(' ', getTerminalHWND); + writeStringlnWND('An interface to the drivermanagement portion of the kernel.', getTerminalHWND); + writeStringlnWND(' ', getTerminalHWND); + writeStringlnWND('Usage: ', getTerminalHWND); + writeStringlnWND(' dev drivers - Print a list of loaded drivers.', getTerminalHWND); + writeStringlnWND(' dev devices - Print a list of registered devices.', getTerminalHWND); + writeStringlnWND(' dev driverex - Print a list of all available drivers.', getTerminalHWND); + writeStringlnWND(' ', getTerminalHWND) + end; +end; + { Main Functions } function copy_identifier(DeviceID : PDeviceIdentifier) : PDeviceIdentifier; @@ -288,9 +317,10 @@ end; procedure init; begin push_trace('driver_management.init'); - terminal.registerCommand('DRIVERSEX', @terminal_command_driversex, 'List all available drivers.'); - terminal.registerCommand('DRIVERS', @terminal_command_drivers, 'List loaded drivers.'); - terminal.registerCommand('DEVICES', @terminal_command_devices, 'List devices.'); + terminal.registerCommand('DEV', @terminal_command_dev, 'Driver Management Interface.'); + //terminal.registerCommand('DRIVERSEX', @terminal_command_driversex, 'List all available drivers.'); + //terminal.registerCommand('DRIVERS', @terminal_command_drivers, 'List loaded drivers.'); + //terminal.registerCommand('DEVICES', @terminal_command_devices, 'List devices.'); pop_trace; end; diff --git a/src/include/asuro.pas b/src/include/asuro.pas index 124e6fac..64d053f9 100644 --- a/src/include/asuro.pas +++ b/src/include/asuro.pas @@ -3,11 +3,11 @@ unit asuro; interface const - VERSION = '1.0.0-645a'; + VERSION = '1.0.0-649a'; VERSION_MAJOR = '1'; VERSION_MINOR = '0'; VERSION_SUB = '0'; - REVISION = '645'; + REVISION = '649'; RELEASE = 'a'; implementation diff --git a/src/kernel.pas b/src/kernel.pas index 53f11f84..0b01fcef 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -12,23 +12,15 @@ unit kernel; interface uses - multiboot, + multiboot, bios_data_area, util, - gdt, - idt, - isr, - irq, + gdt, idt, isr, irq, tss, TMR_0_ISR, console, - bios_data_area, - keyboard, - mouse, - vmemorymanager, - pmemorymanager, - lmemorymanager, + keyboard, mouse, + vmemorymanager, pmemorymanager, lmemorymanager, tracer, drivermanagement, - tss, scheduler, PCI, Terminal, @@ -54,24 +46,19 @@ procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; implementation -procedure temphook(ignored : TKeyInfo); -begin - Terminal.run; -end; - procedure terminal_command_meminfo(params : PParamList); begin push_trace('kernel.terminal_command_meminfo'); - console.writestring('Lower Memory = '); - console.writeint(multibootinfo^.mem_lower); - console.writestringln('KB'); - console.writestring('Higher Memory = '); - console.writeint(multibootinfo^.mem_upper); - console.writestringln('KB'); - console.writestring('Total Memory = '); - console.writeint(((multibootinfo^.mem_upper + 1000) div 1024) + 1); - console.writestringln('MB'); + console.writestringWND('Lower Memory = ', getTerminalHWND); + console.writeintWND(multibootinfo^.mem_lower, getTerminalHWND); + console.writestringlnWND('KB', getTerminalHWND); + console.writestringWND('Higher Memory = ', getTerminalHWND); + console.writeintWND(multibootinfo^.mem_upper, getTerminalHWND); + console.writestringlnWND('KB', getTerminalHWND); + console.writestringWND('Total Memory = ', getTerminalHWND); + console.writeintWND(((multibootinfo^.mem_upper + 1000) div 1024) + 1, getTerminalHWND); + console.writestringlnWND('MB', getTerminalHWND); pop_trace; end; @@ -83,8 +70,8 @@ begin if ParamCount(params) > 1 then begin bsod(getparam(0, params), getparam(1, params)); end else begin - console.writestringln('Invalid number of params.'); - console.writestringln('Usage: bsod '); + console.writestringlnWND('Invalid number of params.', getTerminalHWND); + console.writestringlnWND('Usage: bsod ', getTerminalHWND); end; pop_trace; @@ -157,7 +144,8 @@ begin { Console Init } console.init(); - //serial.init(); + { Serial Init } + serial.init(); { Call Tracer } tracer.init(); @@ -209,9 +197,6 @@ begin console.setdefaultattribute(console.combinecolors($17E0, $0000)); console.writestringln('Asuro Booted Correctly!'); console.setdefaultattribute(console.combinecolors($FFFF, $0000)); - //console.writestringln(''); - //console.writestringln('Press any key to boot in to Asuro Terminal...'); - //tracer.pop_trace; { Init Progs } shell.init(); @@ -220,11 +205,6 @@ begin { Init Splash } splash.init(); - //console.writehexln(uint32(multibootinfo^.framebuffer_addr)); - //tracer.push_trace('kmain.KEYHOOK'); - //keyboard.hook(@temphook); - //tracer.pop_trace; - tracer.push_trace('kmain.END'); while true do begin diff --git a/src/prog/memview.pas b/src/prog/memview.pas index e18c7662..db9f144a 100644 --- a/src/prog/memview.pas +++ b/src/prog/memview.pas @@ -80,7 +80,14 @@ var begin tracer.push_trace('memview.run'); if ParamCount(Params) < 1 then begin - writestringlnWND('No memory location specified!', getTerminalHWND); + writestringlnWND('Memview Utility', getTerminalHWND); + writestringlnWND(' ', getTerminalHWND); + writestringlnWND('A tool to display the bytes stored at a memory location for debugging.', getTerminalHWND); + writestringlnWND('UP/DOWN on the keyboard can be used to decrement/increment the view location by 16-bytes.', getTerminalHWND); + writestringlnWND(' ', getTerminalHWND); + writestringlnWND('Usage: ', getTerminalHWND); + writestringlnWND(' memview - Display 176 bytes @ ', getTerminalHWND); + writestringlnWND(' ', getTerminalHWND); end else begin loc:= GetParam(0, Params); if StringEquals(loc, 'close') then begin diff --git a/src/prog/terminal.pas b/src/prog/terminal.pas index e64ed064..aea666b4 100644 --- a/src/prog/terminal.pas +++ b/src/prog/terminal.pas @@ -37,6 +37,7 @@ type TCommandMethod = procedure(params : PParamList); TCommand = record registered : boolean; + hidden : boolean; command : pchar; method : TCommandMethod; description : pchar; @@ -52,6 +53,7 @@ var procedure run; procedure init; procedure registerCommand(command : pchar; method : TCommandMethod; description : pchar); +procedure registerCommandEx(command : pchar; method : TCommandMethod; description : pchar; hide : boolean); function getParams(buf : TCommandBuffer) : PParamList; function paramCount(params : PParamList) : uint32; function getParam(index : uint32; params : PParamList) : pchar; @@ -209,15 +211,27 @@ end; procedure help(params : PParamList); var + i, j : uint32; + longestCommand : uint32; + len : uint32; - i : uint32; begin + longestCommand:= 0; + for i:=0 to 65534 do begin + if (Commands[i].Registered) and not(Commands[i].hidden) then begin + if stringSize(Commands[i].command) > longestCommand then longestCommand:= stringSize(Commands[i].command); + end; + end; console.writestringlnWND('Registered Commands: ', TERMINAL_HWND); for i:=0 to 65534 do begin - if Commands[i].Registered then begin + if (Commands[i].Registered) and not(Commands[i].hidden) then begin console.writestringWND(' ', TERMINAL_HWND); console.writestringWND(Commands[i].command, TERMINAL_HWND); - console.writestringWND(' - ', TERMINAL_HWND); + len:= longestCommand - StringSize(Commands[i].command); + for j:=0 to len do begin + writeStringWND(' ', TERMINAL_HWND); + end; + console.writestringWND('- ', TERMINAL_HWND); console.writestringlnWND(Commands[i].description, TERMINAL_HWND); end; end; @@ -282,6 +296,21 @@ begin while Commands[index].registered = true do inc(index); Commands[index].registered:= true; Commands[index].Command:= command; + Commands[index].hidden:= false; + Commands[index].method:= method; + Commands[index].description:= description; +end; + +procedure registerCommandEx(command : pchar; method : TCommandMethod; description : pchar; hide : boolean); +var + index : uint32; + +begin + index:= 0; + while Commands[index].registered = true do inc(index); + Commands[index].registered:= true; + Commands[index].Command:= command; + Commands[index].hidden:= hide; Commands[index].method:= method; Commands[index].description:= description; end; @@ -408,12 +437,8 @@ begin registerCommand('CLEAR', @clear, 'Clear the Screen.'); registerCommand('HELP', @help, 'Lists all registered commands and their description.'); registerCommand('ECHO', @echo, 'Echo''s text to the terminal.'); - registerCommand('TESTPARAMS', @testParams, 'Tests param parsing.'); - registerCommand('TEST', @test, 'Command for testing.'); - registerCommand('CD', @change_dir, 'Change Directory test.'); - registerCommand('PATTERN', @cockwomble, 'Print an animated pattern to the screen.'); registerCommand('TIME', @printTime, 'Print the current time.'); - registerCommand('SERIAL', @SendSerial, 'Send ''helloworld'' through COM1.'); + registerCommandEx('SERIAL', @SendSerial, 'Send ''helloworld'' through COM1.', true); registerCommand('REBOOT', @Reboot, 'Reboot the system.'); console.writestringln('TERMINAL: INIT END.'); end; @@ -426,7 +451,7 @@ end; procedure run; begin if TERMINAL_HWND = 0 then begin - TERMINAL_HWND:= newWindow(20, 10, 90, 20, 'ASURO TERMINAL'); + TERMINAL_HWND:= newWindow(20, 10, 90, 30, 'ASURO TERMINAL'); console.registerEventHandler(TERMINAL_HWND, EVENT_KEY_PRESSED, void(@key_event)); console.registerEventHandler(TERMINAL_HWND, EVENT_CLOSE, void(@OnClose)); console.clearWND(TERMINAL_HWND); diff --git a/src/scheduler.pas b/src/scheduler.pas index 3dbb6f01..6e23d049 100644 --- a/src/scheduler.pas +++ b/src/scheduler.pas @@ -85,20 +85,20 @@ var list : PScheduler_Entry; begin - console.writestringln('ThreadID - Priority - Delta'); + console.writestringlnWND('ThreadID - Priority - Delta', getTerminalHWND); list:= Root_Task; - console.writeint(list^.ThreadID); - console.writestring(' - '); - console.writeint(list^.Priority); - console.writestring(' - '); - console.writeintln(list^.Delta); + console.writeintWND(list^.ThreadID, getTerminalHWND); + console.writestringWND(' - ', getTerminalHWND); + console.writeintWND(list^.Priority, getTerminalHWND); + console.writestringWND(' - ', getTerminalHWND); + console.writeintlnWND(list^.Delta, getTerminalHWND); list:= PScheduler_Entry(list^.Next); while list <> Root_Task do begin - console.writeint(list^.ThreadID); - console.writestring(' - '); - console.writeint(list^.Priority); - console.writestring(' - '); - console.writeintln(list^.Delta); + console.writeintWND(list^.ThreadID, getTerminalHWND); + console.writestringWND(' - ', getTerminalHWND); + console.writeintWND(list^.Priority, getTerminalHWND); + console.writestringWND(' - ', getTerminalHWND); + console.writeintlnWND(list^.Delta, getTerminalHWND); list:= PScheduler_Entry(list^.Next); end; end; @@ -115,7 +115,7 @@ begin Tick:= 0; Active:= False; TMR_0_ISR.hook(uint32(@delta)); - terminal.registerCommand('TASKS', @terminal_command_tasks, 'List Active Processes.'); + //terminal.registerCommand('TASKS', @terminal_command_tasks, 'List Active Processes.'); console.outputln('SCHEDULER','INIT END.'); end; diff --git a/src/tracer.pas b/src/tracer.pas index 39a38fe8..34359a26 100644 --- a/src/tracer.pas +++ b/src/tracer.pas @@ -13,7 +13,7 @@ function get_trace_N(idx : uint32) : pchar; implementation uses - console, lmemorymanager, util, strings, serial; + console, lmemorymanager, util, strings, serial, terminal; const MAX_TRACE = 40; @@ -22,6 +22,60 @@ var t_ready : Boolean; Locked : Boolean; Traces : Array[0..MAX_TRACE-1] of PChar; + c_lock : Boolean = false; + + +procedure terminal_command_tracer(Params : PParamList); +var + p1, p2 : PChar; + count : uint32; + i : uint32; + t : PChar; + +begin + if ParamCount(Params) > 0 then begin + p1:= getParam(0, Params); + if StringEquals(p1, 'list') then begin + count:= 5; + if ParamCount(Params) > 1 then begin + count:= stringToInt(getParam(1, Params)); + if count > MAX_TRACE-1 then count:= MAX_TRACE-1; + end; + for i:=0 to count do begin + writeStringWND('[-', getTerminalHWND); + writeintWND(i, getTerminalHWND); + writeStringWND('] ', getTerminalHWND); + t:= get_trace_N(i); + if t <> nil then writeStringWND(t, getTerminalHWND); + writeStringLnWND(' ', getTerminalHWND); + end; + end; + if StringEquals(p1, 'disable') then begin + if TRACER_ENABLE then begin + t_ready:= false; + writeStringLnWND('Tracer disabled.', getTerminalHWND); + end else begin + writeStringLnWND('Tracer is disabled by the system and it''s status cannot be changed.', getTerminalHWND); + end; + end; + if StringEquals(p1, 'enable') then begin + if TRACER_ENABLE then begin + t_ready:= true; + writeStringLnWND('Tracer enabled.', getTerminalHWND); + end else begin + writeStringLnWND('Tracer is disabled by the system and it''s status cannot be changed.', getTerminalHWND); + end; + end; + end else begin + writeStringLnWND('System Trace Utility', getTerminalHWND); + writeStringLnWND(' ', getTerminalHWND); + writeStringLnWND('Usage: ', getTerminalHWND); + writeStringLnWND(' tracer list - Print the last traces.', getTerminalHWND); + writeStringLnWND(' tracer disable - Disable Tracer.', getTerminalHWND); + writeStringLnWND(' tracer enable - Enable Tracer.', getTerminalHWND); + writeStringLnWND(' ', getTerminalHWND); + end; +end; procedure freeze; begin @@ -36,13 +90,15 @@ begin if TRACER_ENABLE then begin if t_ready then begin if not Locked then begin - Locked:= true; - if Traces[MAX_TRACE-1] <> nil then kfree(void(Traces[MAX_TRACE-1])); - for i:=MAX_TRACE-1 downto 1 do begin - Traces[i]:= Traces[i-1]; + if not c_lock then begin + Locked:= true; + if Traces[MAX_TRACE-1] <> nil then kfree(void(Traces[MAX_TRACE-1])); + for i:=MAX_TRACE-1 downto 1 do begin + Traces[i]:= Traces[i-1]; + end; + Traces[0]:= StringCopy(t_name); + Locked:= false; end; - Traces[0]:= StringCopy(t_name); - Locked:= false; end; end; end; @@ -70,6 +126,7 @@ begin t_ready:= true; push_trace('kmain'); end; + terminal.registerCommand('TRACER', @terminal_command_tracer, 'System.Tracer Interface.'); end; function get_trace_count : uint32;