From 38a236305143e5c4f0bbd85146cef202665baaab Mon Sep 17 00:00:00 2001 From: kieron Date: Thu, 26 Oct 2017 03:42:34 +0000 Subject: [PATCH] Stuff git-svn-id: https://spexeah.com:8443/svn/Asuro@259 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c --- Asuro.iso | Bin 5099520 -> 5099520 bytes iso/boot/asuro.bin | Bin 45284 -> 45284 bytes lib/libpconsole.a | Bin 81668 -> 81668 bytes lib/libpmultiboot.a | Bin 29040 -> 29040 bytes lib/libpsystem.a | Bin 147760 -> 147760 bytes src/strings.pas | 28 ++++++++++ src/terminal.pas | 131 ++++++++++++++++++++++++++++---------------- 7 files changed, 111 insertions(+), 48 deletions(-) diff --git a/Asuro.iso b/Asuro.iso index 5afe4496a546c8af286ba1fd7eabe26c2e13b865..49533de2c99e6a5072249a2d89da33deae3b9b0c 100644 GIT binary patch delta 16713 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 B>+b*n diff --git a/iso/boot/asuro.bin b/iso/boot/asuro.bin index fb8c698bf66a904111a6ce4e57a34ff63aa9ca65..ad5bbfd1df962d34faedd2f7b12752651eab1b8a 100755 GIT binary patch delta 6295 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 VK4m`Pn$fCM=YOWoYC$qD`~wp%Mb7{L delta 1065 zcmZuwUr1A76z98LOQ+P;#_n~ZZPJL=u$!4W7&MZQT*z$-!3c>9d)R{rMIeE-V30%) z!Uv5I(lCe+YIYWT7*qzb2PYB4f}|BbXe7}Hji8XeZ}*j@npx?ahJ<=;*{F!FXu3&3_ql=s8nML zY}toID^aHYxez>UzJ&^&5Na)%5Q6S{Qw*AC-i$s!ieHfO0cL6*1>$NFValh&jjjs_ zx$kDrBZORh`LvDDVx)oIaoB0m*_I3lq!#`L`USH+LsaFcfW2>~Vxfbx{~SVI;O0OY zp%hj?8_b#zr10C_jE%tFiwjuEP_tMuf-%sd?Sx*RXrSY1I}}FlTiUozNBUmFJ^h6l zV$xMCq{hZ@yJ}2^?5McUoW`i(B=GCnL-b1d6iAQbNNk&zNb(6G2WU%&7rsxlVF4-r z0o!N4kb2h!U@)+3Pxg^yI6lSBXJjS9%O=Z#W&aTyg}x+^8Y|^ z#WpYC+|D%FUz7_;L#gN=bQSy-dinYahNcD%mlxRl*6ISXlWyAlLikX8^Lu*^WJ83U7b3Xgo6o!bLsop= z4QM9FNq3m|HY<1^M>dz)mj|I!Y_nFtNn|cx$Uv^-C)^D2%?tC+GXVgl^_Kqt delta 539 zcmezHi1EWC#tE{lM&=e~MjMrUSs|>+3Pxg^yI6lSBXJjS9%O=Z#W&aTyg}x+^8Y|^ z#WpYC+|D%FUz7_;L#gN=bQSy-dinYahNcD%mlxRl*6ISXlWyAlLikX8^Lu*^WJ83U7b3Xgo6o!bLsop= z4QM9FNq3m|HY<1^M>dz)mj|I!Y_nFtNn|cx$Uv^-C)^D2%?tC+GXVhRz?VG$ diff --git a/lib/libpsystem.a b/lib/libpsystem.a index 0860571d37af8b4e7a1b34c9cb99c05d1671b4ea..de826d0d30611dd39e2f673d2b6d9a298913bee9 100644 GIT binary patch delta 3337 zcmZu!eN2^A7~gY)fqHL(+P#`1Zf?y*371p?6J!)QK16c4D92E|OjrT857TKb{8*{0 zV4c?KgM=(*E=%OhPK5?e#a%$5nW%_)XRb&S+0;x^={e_p&--!d{&k+;dCu=V=Q+RU zIqz-WFs6CKn7X*gw8zqXGxto()l)l6H-R;=zFv|bl1ShWHQv3z-IY^;m}hv6+|<) zz;d=S!CDCp~#xtS;xI#Y@1fCvUsy>1X`~do3pEFX$(}K^Hr>=vdf7 z5?|ECLW@W7#TVK55|-Hb5|(IuNhOMpdHor{GE2|s{Af=xZ#0Y5tT<@~ltpS*+!kqL zo68RZsi<^n7eSlPKo*Hv8dzT1-F7 zCF+>Ck)PxeOe1h>* zAn7#=*xe>e3N+|}oi?aCJCDuX^@YjlL3QPkxx2ba%`F#;Z|>9sL(WoG*kV~+N(x)F z3rc0U`;_n1?y?qI^;&3O7)ka|ieiBu?Df!kUG1qAV=im{X=gapeqa>TduS9CIx-3x z?hJ=oj#&}be_V@?4gP#WolwNxfBc3e2sYGr)oR{7ZJ45oInS1vI&rgiLdq1aqLdX~ zXwnx;n-pE>X1+l~x6&tY(e4wt*iF6j!NqbewL@&0*2ygL42<~M)?u}Vph>n4cS;RZ zT~i`LSnF?_{tjBgmo4vun+jrqkwjp1cMPcoM#kvJp`llyjQ{2UqxT7bA`qnQ_28n# zB~ZvhPe%Z)ejO_5=4en|7`Nt!#({qOm&Us2loLn&{35O%106aYn_Te_~E1_y!WOt&6NZo6-~xvdJXJHfQyXP0uK;5*`1HU%c#Kg%l;g9f$OgLvr z2ge*KGTOYt^8Rw?e7LNN1@%u0o`VH^Sq@B6SAig}%ZIoK<4N`iIuG#BGhlgg+#Hvt z0{yidoaB;oEcY&kiDnFPdYMV;;ax94v}wEfP%*4GZ9hM?46KcnqTSDX%Rp(H<3XbI z1!9~CQpfzpi_oo~NYrQAQ%JqO!$jN%6hW{JnQU^7an@Gk{OJ33fFd9>5X*NEXoDE-&9sMH#{c{%Y#9PU zj?Kcjg2rt|U>wIPXMb!r(yB!i*A&KtfPMv6n?%mEu4o1zo;!-wv4E$34WFAb(m;x! zY><5NZlkh4r|_b7#@lR@j_w|#I?h0bc1%ymMu-VJ54-gxf&(*l9{OZP7XEIya{OjDY6Hi3 z&!KeeSrvbowSlmoHx7Y%$HaHOpCZsHYlHN}MDsVVK{6SZI0)CM#FOR3CWJjW^Zxx`)51WS!^c%t0bo+hgGhi Sl5;d8!=b;1yfDKNa{LDdZEUpw delta 3337 zcmZu!eN2^A7~gY)fqHL(+P#`1Zf?y*2^T*QO^{LK_z=nEq8vl%@MEQ} zf^}M_4-&GNxh#=0I~5u@6?XxJW}+hIow*`SWK%OurRSXYJ@3b*``3AX=Q+Rgoag+W z=e)ORQmOdh0zng80yK$d3ATh#{!RBg|J2B@dQ^GG%jTXkG@B%Lw5}fPb7oA32de>7!Ex(LqRlS zE39CvQoht(q)k?(bQ0f8C#j5#V#RaYRXoVZo}KRo;!Spvk0YHdkapBQcSG&u^?O)V zmPfj>El+kTHw_=OxRI)?Jkp)p$!fDtS-b?yx^s7!o_^Mszt3WlzWhGo8*s7ni;ssb zB=LovEVN_8vtv2((J2vxNjm7k{ z9HNei8~I5N!L(vl@@cn9V@4gOb=fCIS~Kb_X)R;z^?S`jm67)PUP7_@)j$Fyt&@1j?p`#<9 zp^k8<`M4EfeJ8Z|*uc*x)d@x1eJ5^Of?$Ka*R1BfGlnUenDbnzsS`JQC!|c#DoR-4 z#YTOxv`OK`F6J9BbSr%Vm+U@)OI_5v09-8lavQ|X(K?w$o`GRM+cu=u5H!iQp$@5m z%Iiu*2y6Xq^WQ;B__F1Fa7#ffFq{ai_O2nd!0;&jI5hMsl=9ykVDvr#Py~XstqxqY zs2B=Z=;;WcRj)$@-4YF|3**-O@EFi<|MF-TofHG#@CFySfPOj#EFuwph6+%!{NGrZ zs&&w~F|mC9c=!=weIrt!dyZDA*Y(3+dH}3fjHk`vZ%i~XTt|m9A)nVwh6a@u1yTfq zB8|K<9#l&fX(-_h55rD%j{=|wbV=7WQ{WKL?5Wm6$!+&fHMdpabtRY>?kdWR_fLcH z(xZsU+T*RsU@1Ni-;)9!pgnWJ#e*|POd0Qne)s(198fo{^uVvrGcj>;O!#9wA_LA_ z(!nuDii|d`w7kFExd5)HVnO}W{O4dHU!DyU)KwtJYx5v3LTm4$4+%OC@X#}0d2-ww zm!<;!wG5o(vU4=|E`jl8403w8N$TO9FF>?uyZK-dY%py?h zsaR4OI|;NxjP_>QLoVfieiXJ0 zfgs0bVO&AOb|Wy3W0kW%b{J{ZB8qDaV?sc`f@_T;XIfV@0}wK!SRD&_>eukODI*P} z2+9V@C+;yS`$G<8ykIZX>)yhqXt$H0UtBzCpAph`+z1+nm~Jt@pv9P%MAZlEL}+V7 z#Rm;X?mJ{KiLp+#`l#U{shWazDzr7Knq!6|U)F6>;aI2IdBX4z-$~{4?rAtFFFr0N ziU)f^eXPn^j29<);XA zXxr5PV@49VZRQEbN^$(2;eyg}@7wNp-e)u{Hy@YmxMKDeH-B)JW4*;@^1n)QN^)4` T3Mx5A)6*ULYsd@I9U;emVrXsq diff --git a/src/strings.pas b/src/strings.pas index 7f1be8ff..f7da64ec 100644 --- a/src/strings.pas +++ b/src/strings.pas @@ -23,6 +23,8 @@ function stringNew(size : uint32) : pchar; function stringSize(str : pchar) : uint32; function stringConcat(str1, str2 : pchar) : pchar; function stringContains(str : pchar; sub : pchar) : boolean; +function stringToInt(str : pchar) : uint32; +function intToString(i : uint32) : pchar; implementation @@ -122,4 +124,30 @@ begin stringContains:= false; end; +function stringToInt(str : pchar) : uint32; +var + i : uint32; + x : uint32; + v : uint32; + r : uint32; + +begin + stringToInt:= 0; + x:= 1; + r:= 0; + for i:=stringSize(str)-1 downto 0 do begin + v:= byte(str[i]) - 48; + if (v >= 0) and (v <= 9) then begin + r:= r + (v * x); + end; + x:= x * 10; + end; + stringToInt:= r; +end; + +function intToString(i : uint32) : pchar; +begin + intToString:= ' '; +end; + end. \ No newline at end of file diff --git a/src/terminal.pas b/src/terminal.pas index 0de1edc3..336615ae 100644 --- a/src/terminal.pas +++ b/src/terminal.pas @@ -15,7 +15,8 @@ uses console, keyboard, util, - lmemorymanager; + lmemorymanager, + strings; type PParamList = ^TParamList; @@ -50,6 +51,21 @@ function getParams(buf : TCommandBuffer) : PParamList; implementation +function paramCount(params : PParamList) : uint32; +var + current : PParamList; + i : uint32; + +begin + current:= params; + i:= 0; + while current^.param <> nil do begin + inc(i); + current:= current^.next; + end; + paramCount:= i-1; +end; + function getParams(buf : TCommandBuffer) : PParamList; var start, finish : uint32; @@ -86,6 +102,36 @@ begin getParams:= root; end; +function getParam(index : uint32; params : PParamList) : pchar; +var + result : pchar; + search : PParamList; + +begin + result:= nil; + search:= params; + for i:=0 to index do begin + search:= search^.next; + end; + result:= search^.param; +end; + +procedure freeParams(params : PParamList); +var + p : PParamList; + next : PParamList; + +begin + p:= params; + next:= p^.next; + while p^.next <> nil do begin + if p^.param <> nil then kfree(void(p^.param)); + kfree(void(p)); + p:= next; + next:= p^.next; + end; +end; + procedure testParams(params : PParamList); begin while params^.Param <> nil do begin @@ -133,6 +179,15 @@ begin end; end; +procedure test(params : PParamList); +begin + if paramCount(params) > 0 then begin + console.writeintln(stringToInt(params^.next^.param)); + end else begin + console.writestringln('Invalid number of params'); + end; +end; + procedure registerCommand(command : pchar; method : TCommandMethod; description : pchar); var index : uint32; @@ -146,68 +201,47 @@ begin Commands[index].description:= description; end; -procedure upper; -var - i : uint32; - -begin - for i:=0 to bIndex do begin - if char(buffer[i]) = ' ' then exit; - if (buffer[i] >= 97) and (buffer[i] <= 122) then begin - buffer[i]:= buffer[i] - 32; - end; - end; -end; - -function isCommand(command : pchar) : boolean; -var - i : uint32; - -begin - isCommand:= true; - for i:=0 to bIndex do begin - if char(buffer[i]) = ' ' then begin - if i = 0 then isCommand:= false; - exit; - end; - if char(buffer[i]) <> char(command[i]) then begin - isCommand:= false; - exit; - end; - end; -end; - procedure process_command; var fallthrough : boolean; params : PParamList; i : uint32; next : PParamList; + uppera, upperb : pchar; begin + { Start a new line. } console.writecharln(' '); + + { Enable fallthrough/Unrecognized command } fallthrough:= true; - upper; - for i:=0 to 65534 do begin - if Commands[i].registered then begin - if isCommand(Commands[i].command) then begin - params:= getParams(buffer); - Commands[i].method(params); - params:= params; - next:= params^.next; - while params^.next <> nil do begin - if params^.param <> nil then kfree(void(params^.param)); - kfree(void(params)); - params:= next; - next:= params^.next; + + { Get all params and check params[0] (the command) to see if it's registered } + params:= getParams(buffer); + if params^.param <> nil then begin + uppera:= stringToUpper(params^.param); + for i:=0 to 65534 do begin + if Commands[i].registered then begin + upperb:= stringToUpper(Commands[i].command); + if stringEquals(uppera, upperb) then begin + Commands[i].method(params); + fallthrough:= false; end; - fallthrough:= false; - end; - end; + kfree(void(upperb)); + end; + end; + kfree(void(uppera)); end; + + { Free the params } + freeParams(params); + + { Display message if command is unknown AKA fallthrough is active } if fallthrough then begin console.writestringln('Unknown Command.'); end; + + { Reset the terminal ready for the next command } console.writestring('Asuro#> '); bIndex:= 0; memset(uint32(@buffer[0]), 0, 1024); @@ -243,6 +277,7 @@ begin 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.') end; procedure run;