diff --git a/Asuro.iso b/Asuro.iso index 05548f2b..bcee89bd 100644 Binary files a/Asuro.iso and b/Asuro.iso differ diff --git a/bin/kernel.bin b/bin/kernel.bin index fabe44bf..196b8a04 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 fabe44bf..196b8a04 100755 Binary files a/iso/boot/asuro.bin and b/iso/boot/asuro.bin differ diff --git a/lib/PCI.ppu b/lib/PCI.ppu index 88fe6ba4..a81ed3b3 100644 Binary files a/lib/PCI.ppu and b/lib/PCI.ppu differ diff --git a/lib/console.ppu b/lib/console.ppu index d7c7cbb8..794e474f 100644 Binary files a/lib/console.ppu and b/lib/console.ppu differ diff --git a/lib/idt.ppu b/lib/idt.ppu index 64662555..5f7a15e4 100644 Binary files a/lib/idt.ppu and b/lib/idt.ppu differ diff --git a/lib/irq.ppu b/lib/irq.ppu index 73994ff5..1b3f02c1 100644 Binary files a/lib/irq.ppu and b/lib/irq.ppu differ diff --git a/lib/isr0.ppu b/lib/isr0.ppu index 2e42f2e3..5f758c18 100644 Binary files a/lib/isr0.ppu and b/lib/isr0.ppu differ diff --git a/lib/isr1.ppu b/lib/isr1.ppu index 8a1c698a..616fe89e 100644 Binary files a/lib/isr1.ppu and b/lib/isr1.ppu differ diff --git a/lib/isr10.ppu b/lib/isr10.ppu index feec528c..d1d7eba3 100644 Binary files a/lib/isr10.ppu and b/lib/isr10.ppu differ diff --git a/lib/isr11.ppu b/lib/isr11.ppu index 61e70ab8..4740ef31 100644 Binary files a/lib/isr11.ppu and b/lib/isr11.ppu differ diff --git a/lib/isr12.ppu b/lib/isr12.ppu index 6069a03a..68187739 100644 Binary files a/lib/isr12.ppu and b/lib/isr12.ppu differ diff --git a/lib/isr13.ppu b/lib/isr13.ppu index 5504373a..bf28ce92 100644 Binary files a/lib/isr13.ppu and b/lib/isr13.ppu differ diff --git a/lib/isr14.ppu b/lib/isr14.ppu index 7a200138..923cd258 100644 Binary files a/lib/isr14.ppu and b/lib/isr14.ppu differ diff --git a/lib/isr15.ppu b/lib/isr15.ppu index 397fe8b3..80751d43 100644 Binary files a/lib/isr15.ppu and b/lib/isr15.ppu differ diff --git a/lib/isr16.ppu b/lib/isr16.ppu index 5be6088f..e328e95f 100644 Binary files a/lib/isr16.ppu and b/lib/isr16.ppu differ diff --git a/lib/isr17.ppu b/lib/isr17.ppu index 42e1396d..f6068802 100644 Binary files a/lib/isr17.ppu and b/lib/isr17.ppu differ diff --git a/lib/isr18.ppu b/lib/isr18.ppu index 8771d06c..a961a149 100644 Binary files a/lib/isr18.ppu and b/lib/isr18.ppu differ diff --git a/lib/isr2.ppu b/lib/isr2.ppu index de57e011..791cdf79 100644 Binary files a/lib/isr2.ppu and b/lib/isr2.ppu differ diff --git a/lib/isr3.ppu b/lib/isr3.ppu index 581acd46..12d2f7e7 100644 Binary files a/lib/isr3.ppu and b/lib/isr3.ppu differ diff --git a/lib/isr32.ppu b/lib/isr32.ppu index efb97d27..ed8146d3 100644 Binary files a/lib/isr32.ppu and b/lib/isr32.ppu differ diff --git a/lib/isr33.ppu b/lib/isr33.ppu index 7a9b7e47..cc7d9695 100644 Binary files a/lib/isr33.ppu and b/lib/isr33.ppu differ diff --git a/lib/isr4.ppu b/lib/isr4.ppu index d3f279f1..9fe47138 100644 Binary files a/lib/isr4.ppu and b/lib/isr4.ppu differ diff --git a/lib/isr40.ppu b/lib/isr40.ppu index 344f6fc6..66b82e4e 100644 Binary files a/lib/isr40.ppu and b/lib/isr40.ppu differ diff --git a/lib/isr5.ppu b/lib/isr5.ppu index bee81613..bcd0190b 100644 Binary files a/lib/isr5.ppu and b/lib/isr5.ppu differ diff --git a/lib/isr6.ppu b/lib/isr6.ppu index 14e3150a..b5e0290e 100644 Binary files a/lib/isr6.ppu and b/lib/isr6.ppu differ diff --git a/lib/isr7.ppu b/lib/isr7.ppu index 3a86bcb8..346a2023 100644 Binary files a/lib/isr7.ppu and b/lib/isr7.ppu differ diff --git a/lib/isr8.ppu b/lib/isr8.ppu index 17045606..64a4fab8 100644 Binary files a/lib/isr8.ppu and b/lib/isr8.ppu differ diff --git a/lib/isr9.ppu b/lib/isr9.ppu index 8e2b1c47..6b533b59 100644 Binary files a/lib/isr9.ppu and b/lib/isr9.ppu differ diff --git a/lib/kernel.ppu b/lib/kernel.ppu index 4419a11f..1a260355 100644 Binary files a/lib/kernel.ppu and b/lib/kernel.ppu differ diff --git a/lib/keyboard.ppu b/lib/keyboard.ppu index 8378cb0d..340fee53 100644 Binary files a/lib/keyboard.ppu and b/lib/keyboard.ppu differ diff --git a/lib/libpconsole.a b/lib/libpconsole.a index 1128a6b4..d35881f2 100644 Binary files a/lib/libpconsole.a and b/lib/libpconsole.a differ diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index 95709fca..77a953c2 100644 Binary files a/lib/libpmultiboot.a and b/lib/libpmultiboot.a differ diff --git a/lib/libpsystem.a b/lib/libpsystem.a index f36f6b9d..029a72af 100644 Binary files a/lib/libpsystem.a and b/lib/libpsystem.a differ diff --git a/lib/lmemorymanager.ppu b/lib/lmemorymanager.ppu index dae11634..91b1c7bd 100644 Binary files a/lib/lmemorymanager.ppu and b/lib/lmemorymanager.ppu differ diff --git a/lib/mouse.ppu b/lib/mouse.ppu index 7b1ab0fe..0135a859 100644 Binary files a/lib/mouse.ppu and b/lib/mouse.ppu differ diff --git a/lib/pmemorymanager.ppu b/lib/pmemorymanager.ppu index 25c724dc..301518ad 100644 Binary files a/lib/pmemorymanager.ppu and b/lib/pmemorymanager.ppu differ diff --git a/lib/scheduler.ppu b/lib/scheduler.ppu index 3a29c463..3d7efd72 100644 Binary files a/lib/scheduler.ppu and b/lib/scheduler.ppu differ diff --git a/lib/util.ppu b/lib/util.ppu index 15c6e084..6a5bc704 100644 Binary files a/lib/util.ppu and b/lib/util.ppu differ diff --git a/lib/vmemorymanager.ppu b/lib/vmemorymanager.ppu index d8495500..e86570f7 100644 Binary files a/lib/vmemorymanager.ppu and b/lib/vmemorymanager.ppu differ diff --git a/src/terminal.pas b/src/terminal.pas index c5fe210a..9aba1d2d 100644 --- a/src/terminal.pas +++ b/src/terminal.pas @@ -14,9 +14,15 @@ interface uses console, keyboard, - util; + util, + lmemorymanager; type + PParamList = ^TParamList; + TParamList = record + Param : pchar; + Next : PParamList; + end; TCommandBuffer = array[0..1023] of byte; TCommandMethod = procedure(buf : TCommandBuffer); TCommand = record @@ -34,9 +40,74 @@ var procedure run; procedure init; procedure registerCommand(command : pchar; method : TCommandMethod; description : pchar); +function getParams(buf : TCommandBuffer) : PParamList; implementation +function getParams(buf : TCommandBuffer) : PParamList; +var + start, finish : uint32; + size : uint32; + ptr : uint32; + root : PParamList; + current : PParamList; + +begin + root:= PParamList(kalloc(sizeof(TParamList))); + current:= root; + current^.next:= nil; + current^.Param:= nil; + start:= 0; + finish:= 0; + while (char(buf[finish]) <> ' ') and (buf[finish] <> 0) do begin + inc(finish); + end; + while buf[start] <> 0 do begin + start:=finish+1; + inc(finish); + while (char(buf[finish]) <> ' ') and (buf[finish] <> 0) do begin + inc(finish); + end; + size:= finish - start; + if size > 0 then begin + ptr:= uint32(@buf[start]); + current^.Param:= pchar(kalloc(size+2)); + memset(uint32(current^.Param), 0, size+2); + memcpy(uint32(ptr), uint32(current^.Param), size); + current^.next:= PParamList(kalloc(sizeof(TParamList))); + current:= current^.next; + current^.next:= nil; + current^.Param:= nil; + end; + end; + getParams:= root; +end; + +procedure testParams(buffer : TCommandBuffer); +var + params : PParamList; + +begin + params:= getParams(buffer); + while params^.Param <> nil do begin + writestringln(params^.Param); + params:= params^.next; + end; +end; + +procedure echo(buffer : TCommandBuffer); +var + idx : uint32; + +begin + idx:= 5; + while buffer[idx] <> 0 do begin + console.writechar(char(buffer[idx])); + inc(idx); + end; + console.writestringln(''); +end; + procedure clear(buffer : TCommandBuffer); begin console.clear(); @@ -158,7 +229,9 @@ begin memset(uint32(@buffer[0]), 0, 1024); registerCommand('VERSION', @version, 'Display the running version of Asuro.'); registerCommand('CLEAR', @clear, 'Clear the Screen.'); - registerCommand('HELP', @help, 'Lists all registered commands and their description.') + 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.'); end; procedure run; diff --git a/src/util.pas b/src/util.pas index 2b3df0cb..dff19e6c 100644 --- a/src/util.pas +++ b/src/util.pas @@ -31,6 +31,7 @@ function inb(port : uint16) : uint8; function inw(port : uint16) : uint16; function inl(port : uint16) : uint32; procedure memset(location : uint32; value : uint8; size : uint32); +procedure memcpy(source : uint32; dest : uint32; size : uint32); procedure psleep(t : uint16); var @@ -189,4 +190,17 @@ begin end; end; +procedure memcpy(source : uint32; dest : uint32; size : uint32); +var + src, dst : puint8; + i : uint32; + +begin + for i:=0 to size-1 do begin + src:= puint8(source + i); + dst:= puint8(dest + i); + dst^:= src^; + end; +end; + end.