From 3eee0f82698c42e744cc698d733130ad4187c249 Mon Sep 17 00:00:00 2001 From: OusmBlueNinja <89956790+OusmBlueNinja@users.noreply.github.com> Date: Mon, 30 Dec 2024 15:52:32 -0600 Subject: [PATCH] Started Implementing a BASIC interpriter --- .vscode/c_cpp_properties.json | 22 ++ EYOSx86-main/build/x86_64/driver/fat.o | Bin 5496 -> 0 bytes EYOSx86-main/build/x86_64/strings.o | Bin 2096 -> 0 bytes EYOSx86-main/dist/x86_64/kernel.bin | Bin 31848 -> 0 bytes .../targets/x86_64/iso/boot/kernel.bin | Bin 31848 -> 0 bytes EYOSx86-main/Makefile => Makefile | 0 EYOSx86-main/README.md => README.md | 0 {EYOSx86-main/build => build}/kernel/main.o | Bin 8248 -> 8936 bytes build/x86_64/basic.o | Bin 0 -> 5896 bytes .../build => build}/x86_64/boot/header.o | Bin .../build => build}/x86_64/boot/isr.o | Bin .../build => build}/x86_64/boot/main.o | Bin .../build => build}/x86_64/boot/main64.o | Bin .../build => build}/x86_64/driver/disk_io.o | Bin .../build => build}/x86_64/driver/fat12.o | Bin .../build => build}/x86_64/driver/fs.o | Bin .../build => build}/x86_64/driver/idt.o | Bin .../build => build}/x86_64/driver/io.o | Bin .../build => build}/x86_64/driver/irs.o | Bin .../build => build}/x86_64/driver/keydriver.o | Bin .../build => build}/x86_64/driver/memory.o | Bin .../build => build}/x86_64/driver/print.o | Bin 8048 -> 9024 bytes .../build => build}/x86_64/driver/vector.o | Bin .../build => build}/x86_64/driver/vga.o | Bin {EYOSx86-main/build => build}/x86_64/game.o | Bin {EYOSx86-main/build => build}/x86_64/stdopt.o | Bin build/x86_64/strings.o | Bin 0 -> 2240 bytes {EYOSx86-main/build => build}/x86_64/window.o | Bin .../buildenv => buildenv}/Dockerfile | 0 .../dist => dist}/x86_64/filesystem.img | Bin 10485760 -> 10485760 bytes dist/x86_64/kernel.bin | Bin 0 -> 36040 bytes {EYOSx86-main/dist => dist}/x86_64/kernel.iso | Bin 9527296 -> 9529344 bytes .../filesystem => filesystem}/hello/hello.txt | 0 {EYOSx86-main/src => src}/impl/kernel/main.c | 308 +++++++++------ src/impl/x86_64/basic.c | 184 +++++++++ .../src => src}/impl/x86_64/boot/header.asm | 0 .../src => src}/impl/x86_64/boot/isr.asm | 278 ++++++------- .../src => src}/impl/x86_64/boot/main.asm | 0 .../src => src}/impl/x86_64/boot/main64.asm | 0 .../src => src}/impl/x86_64/driver/disk_io.c | 86 ++-- .../src => src}/impl/x86_64/driver/fat12.c | 0 .../src => src}/impl/x86_64/driver/fs.c | 0 .../src => src}/impl/x86_64/driver/idt.c | 0 .../src => src}/impl/x86_64/driver/io.c | 0 .../src => src}/impl/x86_64/driver/irs.c | 0 .../impl/x86_64/driver/keydriver.c | 0 .../src => src}/impl/x86_64/driver/memory.c | 0 .../src => src}/impl/x86_64/driver/print.c | 42 ++ .../src => src}/impl/x86_64/driver/vector.c | 160 ++++---- .../src => src}/impl/x86_64/driver/vga.c | 0 {EYOSx86-main/src => src}/impl/x86_64/game.c | 370 +++++++++--------- .../src => src}/impl/x86_64/stdopt.c | 0 .../src => src}/impl/x86_64/strings.c | 12 +- .../src => src}/impl/x86_64/window.c | 0 src/intf/basic.h | 32 ++ {EYOSx86-main/src => src}/intf/disk_io.h | 32 +- {EYOSx86-main/src => src}/intf/fat12.h | 0 {EYOSx86-main/src => src}/intf/fs.h | 0 {EYOSx86-main/src => src}/intf/game.h | 50 +-- {EYOSx86-main/src => src}/intf/idt.h | 0 {EYOSx86-main/src => src}/intf/io.h | 0 {EYOSx86-main/src => src}/intf/keydriver.h | 0 {EYOSx86-main/src => src}/intf/memory.h | 0 {EYOSx86-main/src => src}/intf/print.h | 1 + {EYOSx86-main/src => src}/intf/stdint.h | 0 {EYOSx86-main/src => src}/intf/stdopt.h | 0 {EYOSx86-main/src => src}/intf/strings.h | 7 +- {EYOSx86-main/src => src}/intf/vector.h | 44 +-- {EYOSx86-main/src => src}/intf/vga.h | 0 {EYOSx86-main/src => src}/intf/window.h | 0 .../x86_64/iso/boot/grub/grub.cfg | 0 targets/x86_64/iso/boot/kernel.bin | Bin 0 -> 36040 bytes .../targets => targets}/x86_64/linker.ld | 0 73 files changed, 984 insertions(+), 644 deletions(-) create mode 100644 .vscode/c_cpp_properties.json delete mode 100644 EYOSx86-main/build/x86_64/driver/fat.o delete mode 100644 EYOSx86-main/build/x86_64/strings.o delete mode 100644 EYOSx86-main/dist/x86_64/kernel.bin delete mode 100644 EYOSx86-main/targets/x86_64/iso/boot/kernel.bin rename EYOSx86-main/Makefile => Makefile (100%) rename EYOSx86-main/README.md => README.md (100%) rename {EYOSx86-main/build => build}/kernel/main.o (56%) create mode 100644 build/x86_64/basic.o rename {EYOSx86-main/build => build}/x86_64/boot/header.o (100%) rename {EYOSx86-main/build => build}/x86_64/boot/isr.o (100%) rename {EYOSx86-main/build => build}/x86_64/boot/main.o (100%) rename {EYOSx86-main/build => build}/x86_64/boot/main64.o (100%) rename {EYOSx86-main/build => build}/x86_64/driver/disk_io.o (100%) rename {EYOSx86-main/build => build}/x86_64/driver/fat12.o (100%) rename {EYOSx86-main/build => build}/x86_64/driver/fs.o (100%) rename {EYOSx86-main/build => build}/x86_64/driver/idt.o (100%) rename {EYOSx86-main/build => build}/x86_64/driver/io.o (100%) rename {EYOSx86-main/build => build}/x86_64/driver/irs.o (100%) rename {EYOSx86-main/build => build}/x86_64/driver/keydriver.o (100%) rename {EYOSx86-main/build => build}/x86_64/driver/memory.o (100%) rename {EYOSx86-main/build => build}/x86_64/driver/print.o (56%) rename {EYOSx86-main/build => build}/x86_64/driver/vector.o (100%) rename {EYOSx86-main/build => build}/x86_64/driver/vga.o (100%) rename {EYOSx86-main/build => build}/x86_64/game.o (100%) rename {EYOSx86-main/build => build}/x86_64/stdopt.o (100%) create mode 100644 build/x86_64/strings.o rename {EYOSx86-main/build => build}/x86_64/window.o (100%) rename {EYOSx86-main/buildenv => buildenv}/Dockerfile (100%) rename {EYOSx86-main/dist => dist}/x86_64/filesystem.img (99%) create mode 100644 dist/x86_64/kernel.bin rename {EYOSx86-main/dist => dist}/x86_64/kernel.iso (99%) rename {EYOSx86-main/filesystem => filesystem}/hello/hello.txt (100%) rename {EYOSx86-main/src => src}/impl/kernel/main.c (50%) create mode 100644 src/impl/x86_64/basic.c rename {EYOSx86-main/src => src}/impl/x86_64/boot/header.asm (100%) rename {EYOSx86-main/src => src}/impl/x86_64/boot/isr.asm (93%) rename {EYOSx86-main/src => src}/impl/x86_64/boot/main.asm (100%) rename {EYOSx86-main/src => src}/impl/x86_64/boot/main64.asm (100%) rename {EYOSx86-main/src => src}/impl/x86_64/driver/disk_io.c (96%) rename {EYOSx86-main/src => src}/impl/x86_64/driver/fat12.c (100%) rename {EYOSx86-main/src => src}/impl/x86_64/driver/fs.c (100%) rename {EYOSx86-main/src => src}/impl/x86_64/driver/idt.c (100%) rename {EYOSx86-main/src => src}/impl/x86_64/driver/io.c (100%) rename {EYOSx86-main/src => src}/impl/x86_64/driver/irs.c (100%) rename {EYOSx86-main/src => src}/impl/x86_64/driver/keydriver.c (100%) rename {EYOSx86-main/src => src}/impl/x86_64/driver/memory.c (100%) rename {EYOSx86-main/src => src}/impl/x86_64/driver/print.c (86%) rename {EYOSx86-main/src => src}/impl/x86_64/driver/vector.c (96%) rename {EYOSx86-main/src => src}/impl/x86_64/driver/vga.c (100%) rename {EYOSx86-main/src => src}/impl/x86_64/game.c (97%) rename {EYOSx86-main/src => src}/impl/x86_64/stdopt.c (100%) rename {EYOSx86-main/src => src}/impl/x86_64/strings.c (90%) rename {EYOSx86-main/src => src}/impl/x86_64/window.c (100%) create mode 100644 src/intf/basic.h rename {EYOSx86-main/src => src}/intf/disk_io.h (95%) rename {EYOSx86-main/src => src}/intf/fat12.h (100%) rename {EYOSx86-main/src => src}/intf/fs.h (100%) rename {EYOSx86-main/src => src}/intf/game.h (94%) rename {EYOSx86-main/src => src}/intf/idt.h (100%) rename {EYOSx86-main/src => src}/intf/io.h (100%) rename {EYOSx86-main/src => src}/intf/keydriver.h (100%) rename {EYOSx86-main/src => src}/intf/memory.h (100%) rename {EYOSx86-main/src => src}/intf/print.h (94%) rename {EYOSx86-main/src => src}/intf/stdint.h (100%) rename {EYOSx86-main/src => src}/intf/stdopt.h (100%) rename {EYOSx86-main/src => src}/intf/strings.h (53%) rename {EYOSx86-main/src => src}/intf/vector.h (96%) rename {EYOSx86-main/src => src}/intf/vga.h (100%) rename {EYOSx86-main/src => src}/intf/window.h (100%) rename {EYOSx86-main/targets => targets}/x86_64/iso/boot/grub/grub.cfg (100%) create mode 100644 targets/x86_64/iso/boot/kernel.bin rename {EYOSx86-main/targets => targets}/x86_64/linker.ld (100%) diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..ba2bd63 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,22 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}", + "${workspaceFolder}/**" + ], + "defines": [ + "_DEBUG", + "UNICODE", + "_UNICODE" + ], + "windowsSdkVersion": "10.0.22621.0", + "compilerPath": "C:/msys64/mingw64/bin/gcc.exe", + "cStandard": "c17", + "cppStandard": "c++17", + "intelliSenseMode": "linux-gcc-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/EYOSx86-main/build/x86_64/driver/fat.o b/EYOSx86-main/build/x86_64/driver/fat.o deleted file mode 100644 index d7dd75242548a8c4605ca246a31a8942f2e486a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5496 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 Ca%cbm diff --git a/EYOSx86-main/dist/x86_64/kernel.bin b/EYOSx86-main/dist/x86_64/kernel.bin deleted file mode 100644 index 67aca41c2578f7cb9b76464584a7d2431603d58f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31848 zcmeHwdwf*Ywf~urfe_INC>FKKK|vCg@DLF26(ECy@`!;53K)lELZ&1$aUQ%b!Qc?h zbd06dTD(5WMSd;q)k+^AaxD`O2_o9)MN1WJs@UI*gEd-OQ_VH^``vq=GiPGbdq2PS z_a7&p%vooxwbxpE?X}l_oHJ+can6~QWwU9;?(aR)Td8gIzZUmWnRf}EM|ni?<$tHU8^@s$VH21B0O z{DNyyE?28_`@9w9Ax|)*%@2p_!XbTBWv(W!gLO4R*e#xb&r@T{A+|gi3V3}hgpgeA zD$VCvU0&g@t#$hhM!x;$p1JiUX&-i7m-n_CobHJkLLY)$<2RxxL zv{ovfGT%xcY}b_zDSu2ahpstqpT9uUdm)X<)o#w4X2VT^K)5ahJ1abhVYo+|UAz#jUWs0$XB_2-;S9uBy}*Jg z*Y&aZOJnlO3-a}R-GV{s_4u=5%E6JrgHrlZ{H5gxolDE1D>qkRZ*i8+bI#FArq7!_ z)4;JIReTqFS9vQvW0tQSbB8D3*PUxBJar7MT$91GJiNk+7g1oApXc|Dnd=U&bT3Eq zn?5p2&p@NDtn+()A*%?bdp;6DRgHgjFQgfaKfToLTj3E@k7yND&IpV7brt?fkEyHJ zv&viH(dVJnrmsR&(WErdAEt$~+z3?>nM&47KXMr322r`dv!d1mOKDdioOXesZ{dOk zraXg}+DecDQ7%mjxhqzVF*uY;rSB$>&l7Ohpo~9+7=)({n-oI{(rgcurMn6ytNlg} zG8;}GJ*sjvIL<4O8?%?G^8|ICuFfUuT&~VOb*@+Es5*aNo&QappHb)M)%hiLeqEj4 zRp%ubA4DcXA3;wpUZ~G-2R-O5b@FPCx7HiN<(gb=i9Y`pq%6UxX%~&3aP`DVldqXF zb=;Wia|YhM+7k$^4SW4{OP1wo?qFrrit2BzthsjdUE0!hYbsVP_tjoiI99tt(^X)a zr!j!8G_U^Gz(pg9E*m-O&daaJFDSn2KQnJ)B=uLgLrBP;T7O{e z2))#EcNjw_Gt{WCk&NefgCS;Mj=SL?GVXGeS{a-sf(gzkGjX~b!)+as&jMt5s|Y8$ zBr?3EbYZS$+zz-vIrz6%%eZS$=h8{?IyF(Ajq88(9P2~gYZEf{jO~N3K-o8LO*%3f zHWg04-5=K70S{+4ZoSftc}|rd{X0~sFRbE)8>6JVqS}xkrcf2`RT!70gw+(^vz*r#L}Er+au({dL+>{{8iYZ$bwU>{6J-oN z!rovln|GDBrUqF==^M=%Td>++XQ)dX>{fL%DAo#O%4KnkzZ|Jodr{q0?ts@H4(eV^ z+JZunp_Nl8Rj;5w9I7@erYcx8P__^6Np<7MQs*XxCyuN<_rtlxf+vm#=^YB6t#~D+ zyW5p3<@1{54SbE?zf#N9MCCPBZne8+rEEMzF=vHDR=9nmL;4D~3wpt7_gc_IHPS_7 zt#UOwD~%Pd%hlMFX{2b_T+QoSh2a5RQ&1Q{6>iLy(HqhG#)w%dhLLJqLtDtb(xb2R ztkw8Wlj^(`E8+Gq+MRf?0E>yZA(Rg1qz42Up}6+>$*MD8fkuZF66rP}GVEjD7tvek z$H0f!VI+%~WFS{z>JM!p4Bo+Tz%#UBJscTUX=8 zi~(gAR=a&G;eE&jjtvT%7y4Ivd_m;RN}8WOw&=XZK$W21UCL=SI*Ux6-qIAQ)J7DgJF|X}GJ4!zdq2 zmtPO`1)xv2($}ZylsgS{mzAD1Q!sE{`2zlzgD&b~$OrD5_&<*S+dwO3=QC*iZtTax zq<7+f-8uNj*`#NMP1(cXgJYmS&jewV2gtG$fx8<@p9E~uvK|#>NnZ&1C!kNY(nEqQ z%7;MD!ENiHm7e7@%RdbI640N^p#Q?8{|fZaKz}WR{<29w2Kv?^npTrRUt!WugMJG1 z#teFcppOLZJS4+g&(*YpR=P9NFKe%0Ay(AmI`DlAzRRtAZplMAOF{oL=nq=yl(Q*Q z&L;5PjzByMcA5U{*WX4i`g1$z#Y1tcALlgv$}EF^5cq}IVOVI@lQmx`VVs-K_UERM79spl>wk#i0KX^hFu;Qj=Z@`dgsSu+r<(_H6>a6ZE^S^sE}Q z{C3c1!%<5!=!;DHLC_mPpJ1iersbam{Rg1;RljUIatY{{Sj*p@E3iQ76MRtEp`%ln^B2LUc&@a!-l_NnvJfiP>R}A{BOEqkDS<1_FBl>S8=%t_^ zw9>QUru~~h|10PNGU7AKjL+?$zk8Xcos&TyXwnaY{>n)7!3_CNnDS48K6jL+eJ_LF zY|^vwpivz3YpwKEf-LMG3HsZhueZ{(R-5IEL7#ki-{V{*=<`5#W|U9&uT7u_K}SkX z`+sg)|8~$lp#RcJ&-$6E{~+j{pa(PP>G9+w=(mjSo1TpU{YlU-v0L=_yTDEbjGvL9 zKaR#d-zxvsw0*^(e-HGTR{DlCy%O|YpmSc4j<1;6ew#oaRfx5pwR~2IS-DNgelO^K^|Pa(KM1Q zanaba;j)FchsRt-v8z51qM*+m_ z58<;<0sAN`?!ZUl3rv9IC2@%eIq1?`27z zy-Y^?rYgqoqI*Kvc$RiWTI{ZP#Rv;KV5cPVJY7(+LEkcF6fo_95rnHplMzw~HOS=e|=MbDoIJZI6|mjD-`f zX6M%GVu)Ns#WT^XT#Kp#lb!(gJoAodvHolD|dfsp=w4)X;G9q5ARn~ZX-*}j)lxoc&)0@1NV zpL+E3zeSy=V$M_1L-96K*tZ}o=`=(LtKLx}I+2Xht^5i`q2xCWM$v-pit#ss(b1TI z0r7+>+5yp`QBjR;Fvk@=uxFqxPjl=$Omy@$)^BnF3C<2zq`pIQYm#xhe%L5u!I17@b7k-R^j2*dmcFl!4>=LCTEjg|juS3JF*AS+g!tQ{u z)RcI>iQw!sH9GDx5mSgbpEW>ch_5v9I`AqfSbEl=Nl*L?cvo}d&abe^g}O}vH8C7b4UakE(@oyV;FWS6==$-+WE%sy zhn(G-tJT>7>lFP6^foy^X{i4MZ952tHPm-&;SXeCeK4E8@i?@_zJG$B0*=0gu;7Fp zrEn2UC@LRCmS z9M}C5q7=aVGs9Mcta`z6V4?~{VhcIevpw*y0-EY<59R=BSI$ew+6b%m>EFuJq+J(4 zj|k+QX7F`j6qSKIWzQuw7#5z>s;)2lDT4i|$#c}?IWL|tvAc<7bxcdc;QPO;#4c9g1wG1d2-nqAdDY^lsay+WTkSYw#>u03Kn=D3*HL>Fj zBV>gaV3L}T_B)RDYio6$qIt;%d|<$3ght!YKl?Gr_P1xbnwx|^HU=jtVv6~j#GRu> z51oyWY!k)Mbq~v8JY~7;vK0KiIL8&ubw%$0=*q+8Fjw^EJX{Zp73t9#y6AzaQ4!}U z^vYAehYH7oLFA11EYtqGjme-Zwye_#!BZs­c2btjT+A|Fwp1~=ApF>1QQ6-A@J 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 diff --git a/EYOSx86-main/targets/x86_64/iso/boot/kernel.bin b/EYOSx86-main/targets/x86_64/iso/boot/kernel.bin deleted file mode 100644 index 67aca41c2578f7cb9b76464584a7d2431603d58f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31848 zcmeHwdwf*Ywf~urfe_INC>FKKK|vCg@DLF26(ECy@`!;53K)lELZ&1$aUQ%b!Qc?h zbd06dTD(5WMSd;q)k+^AaxD`O2_o9)MN1WJs@UI*gEd-OQ_VH^``vq=GiPGbdq2PS z_a7&p%vooxwbxpE?X}l_oHJ+can6~QWwU9;?(aR)Td8gIzZUmWnRf}EM|ni?<$tHU8^@s$VH21B0O z{DNyyE?28_`@9w9Ax|)*%@2p_!XbTBWv(W!gLO4R*e#xb&r@T{A+|gi3V3}hgpgeA zD$VCvU0&g@t#$hhM!x;$p1JiUX&-i7m-n_CobHJkLLY)$<2RxxL zv{ovfGT%xcY}b_zDSu2ahpstqpT9uUdm)X<)o#w4X2VT^K)5ahJ1abhVYo+|UAz#jUWs0$XB_2-;S9uBy}*Jg z*Y&aZOJnlO3-a}R-GV{s_4u=5%E6JrgHrlZ{H5gxolDE1D>qkRZ*i8+bI#FArq7!_ z)4;JIReTqFS9vQvW0tQSbB8D3*PUxBJar7MT$91GJiNk+7g1oApXc|Dnd=U&bT3Eq zn?5p2&p@NDtn+()A*%?bdp;6DRgHgjFQgfaKfToLTj3E@k7yND&IpV7brt?fkEyHJ zv&viH(dVJnrmsR&(WErdAEt$~+z3?>nM&47KXMr322r`dv!d1mOKDdioOXesZ{dOk zraXg}+DecDQ7%mjxhqzVF*uY;rSB$>&l7Ohpo~9+7=)({n-oI{(rgcurMn6ytNlg} zG8;}GJ*sjvIL<4O8?%?G^8|ICuFfUuT&~VOb*@+Es5*aNo&QappHb)M)%hiLeqEj4 zRp%ubA4DcXA3;wpUZ~G-2R-O5b@FPCx7HiN<(gb=i9Y`pq%6UxX%~&3aP`DVldqXF zb=;Wia|YhM+7k$^4SW4{OP1wo?qFrrit2BzthsjdUE0!hYbsVP_tjoiI99tt(^X)a zr!j!8G_U^Gz(pg9E*m-O&daaJFDSn2KQnJ)B=uLgLrBP;T7O{e z2))#EcNjw_Gt{WCk&NefgCS;Mj=SL?GVXGeS{a-sf(gzkGjX~b!)+as&jMt5s|Y8$ zBr?3EbYZS$+zz-vIrz6%%eZS$=h8{?IyF(Ajq88(9P2~gYZEf{jO~N3K-o8LO*%3f zHWg04-5=K70S{+4ZoSftc}|rd{X0~sFRbE)8>6JVqS}xkrcf2`RT!70gw+(^vz*r#L}Er+au({dL+>{{8iYZ$bwU>{6J-oN z!rovln|GDBrUqF==^M=%Td>++XQ)dX>{fL%DAo#O%4KnkzZ|Jodr{q0?ts@H4(eV^ z+JZunp_Nl8Rj;5w9I7@erYcx8P__^6Np<7MQs*XxCyuN<_rtlxf+vm#=^YB6t#~D+ zyW5p3<@1{54SbE?zf#N9MCCPBZne8+rEEMzF=vHDR=9nmL;4D~3wpt7_gc_IHPS_7 zt#UOwD~%Pd%hlMFX{2b_T+QoSh2a5RQ&1Q{6>iLy(HqhG#)w%dhLLJqLtDtb(xb2R ztkw8Wlj^(`E8+Gq+MRf?0E>yZA(Rg1qz42Up}6+>$*MD8fkuZF66rP}GVEjD7tvek z$H0f!VI+%~WFS{z>JM!p4Bo+Tz%#UBJscTUX=8 zi~(gAR=a&G;eE&jjtvT%7y4Ivd_m;RN}8WOw&=XZK$W21UCL=SI*Ux6-qIAQ)J7DgJF|X}GJ4!zdq2 zmtPO`1)xv2($}ZylsgS{mzAD1Q!sE{`2zlzgD&b~$OrD5_&<*S+dwO3=QC*iZtTax zq<7+f-8uNj*`#NMP1(cXgJYmS&jewV2gtG$fx8<@p9E~uvK|#>NnZ&1C!kNY(nEqQ z%7;MD!ENiHm7e7@%RdbI640N^p#Q?8{|fZaKz}WR{<29w2Kv?^npTrRUt!WugMJG1 z#teFcppOLZJS4+g&(*YpR=P9NFKe%0Ay(AmI`DlAzRRtAZplMAOF{oL=nq=yl(Q*Q z&L;5PjzByMcA5U{*WX4i`g1$z#Y1tcALlgv$}EF^5cq}IVOVI@lQmx`VVs-K_UERM79spl>wk#i0KX^hFu;Qj=Z@`dgsSu+r<(_H6>a6ZE^S^sE}Q z{C3c1!%<5!=!;DHLC_mPpJ1iersbam{Rg1;RljUIatY{{Sj*p@E3iQ76MRtEp`%ln^B2LUc&@a!-l_NnvJfiP>R}A{BOEqkDS<1_FBl>S8=%t_^ zw9>QUru~~h|10PNGU7AKjL+?$zk8Xcos&TyXwnaY{>n)7!3_CNnDS48K6jL+eJ_LF zY|^vwpivz3YpwKEf-LMG3HsZhueZ{(R-5IEL7#ki-{V{*=<`5#W|U9&uT7u_K}SkX z`+sg)|8~$lp#RcJ&-$6E{~+j{pa(PP>G9+w=(mjSo1TpU{YlU-v0L=_yTDEbjGvL9 zKaR#d-zxvsw0*^(e-HGTR{DlCy%O|YpmSc4j<1;6ew#oaRfx5pwR~2IS-DNgelO^K^|Pa(KM1Q zanaba;j)FchsRt-v8z51qM*+m_ z58<;<0sAN`?!ZUl3rv9IC2@%eIq1?`27z zy-Y^?rYgqoqI*Kvc$RiWTI{ZP#Rv;KV5cPVJY7(+LEkcF6fo_95rnHplMzw~HOS=e|=MbDoIJZI6|mjD-`f zX6M%GVu)Ns#WT^XT#Kp#lb!(gJoAodvHolD|dfsp=w4)X;G9q5ARn~ZX-*}j)lxoc&)0@1NV zpL+E3zeSy=V$M_1L-96K*tZ}o=`=(LtKLx}I+2Xht^5i`q2xCWM$v-pit#ss(b1TI z0r7+>+5yp`QBjR;Fvk@=uxFqxPjl=$Omy@$)^BnF3C<2zq`pIQYm#xhe%L5u!I17@b7k-R^j2*dmcFl!4>=LCTEjg|juS3JF*AS+g!tQ{u z)RcI>iQw!sH9GDx5mSgbpEW>ch_5v9I`AqfSbEl=Nl*L?cvo}d&abe^g}O}vH8C7b4UakE(@oyV;FWS6==$-+WE%sy zhn(G-tJT>7>lFP6^foy^X{i4MZ952tHPm-&;SXeCeK4E8@i?@_zJG$B0*=0gu;7Fp zrEn2UC@LRCmS z9M}C5q7=aVGs9Mcta`z6V4?~{VhcIevpw*y0-EY<59R=BSI$ew+6b%m>EFuJq+J(4 zj|k+QX7F`j6qSKIWzQuw7#5z>s;)2lDT4i|$#c}?IWL|tvAc<7bxcdc;QPO;#4c9g1wG1d2-nqAdDY^lsay+WTkSYw#>u03Kn=D3*HL>Fj zBV>gaV3L}T_B)RDYio6$qIt;%d|<$3ght!YKl?Gr_P1xbnwx|^HU=jtVv6~j#GRu> z51oyWY!k)Mbq~v8JY~7;vK0KiIL8&ubw%$0=*q+8Fjw^EJX{Zp73t9#y6AzaQ4!}U z^vYAehYH7oLFA11EYtqGjme-Zwye_#!BZs­c2btjT+A|Fwp1~=ApF>1QQ6-A@J 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 diff --git a/EYOSx86-main/Makefile b/Makefile similarity index 100% rename from EYOSx86-main/Makefile rename to Makefile diff --git a/EYOSx86-main/README.md b/README.md similarity index 100% rename from EYOSx86-main/README.md rename to README.md diff --git a/EYOSx86-main/build/kernel/main.o b/build/kernel/main.o similarity index 56% rename from EYOSx86-main/build/kernel/main.o rename to build/kernel/main.o index fd4166c5d90f93e92c6c7c8601cc5f2cfe65c290..55903cd2c5c23a4fc02a0a71339b61b8eb4f4667 100644 GIT binary patch delta 1408 zcmZ9LT}TvB6oBuH?%%Y!t7+S!?oM0Qwi0L$ZVwe{4Nf7V7DNyElMOMjD7BLa5i8ji zC4q5^&u4v=osC zrK~)7<2k9l*0J)v*>zCLB&W4Pc|gi?^1%75z4zr3HI>6)`PjT8a1~bY$Ci$tk*G#2+2w;))QI_3yDX2&csfJkkoVlrBUbSv5_O45PC>dU7`09zrVoFkGmaCcm`+}eZG)-Eqvo$dKlm~ys5y)sYLsGA*2{_ zXxT<;AhbYJF6c40bUmi)$GV==^#@&l(e*E)Z32&w7uPvTQuhj5xsayBwe}O8akUGn z-Ky3e*E%%?DSb-USxsq=soe_x;Thwq@RZj#HtBV7ZFtJ>OQ`e~>)OqC&VB07#!3FILp@oD+Vw4LBSK^P&^C2KKr{`00sU#KVCo ze_z0F0H(=QAkEkxjJih2szJWvW5KB4BrgQSnU6<;wSw1cxTQQ^1a~NCxGe~eR0RG3 DJKJN< delta 734 zcmaFiy2D|D29t&CMy*sx-bWApMF!{O3Oe zRHNx)VFF45K`WAaQ6L|tz6(iQ2}yh=nmH0sbLK(B>lr{6DPMo|^R-ADGnEe{Wp1eTr#^ed|I~W-!dn%Z7%@6>Y z%)n5G(7UU70 zJV#N5a|2YwVDd?zJckTK{>EfZC3CI^AlCuG0p`hGN@iRO_#oU*jFY>R%s3xF)dqsi Iic#PJ0OeV&ng9R* diff --git a/build/x86_64/basic.o b/build/x86_64/basic.o new file mode 100644 index 0000000000000000000000000000000000000000..af6a5a2e4a4346c950e675ed4ae67b0d4c1e0360 GIT binary patch literal 5896 zcmbtYVQgDh6~0cEwWQsgt!$JPG;5k+TU$3xexPI>xJ_UCCN-s0wbV^RuH(Em7LF6y z&sz(m&Ey8{@sts!jY()f0ul&>#3E53%hJr-}Gftgo3x$MkA@NnQHPfgNJ3qTMj>}=wI3!gM}1 zOY0HSnW&jgv1+au4HDOnny%3>Z&f=?=Y0%oW{A3~=`5Sh-)lsfDi=SujZ|5C10u6z zG(u9#ofP+A-e)xOzve)x@#sq#4osU+NWh2hO9j4g#dM4faPbUQ7s6!U`IG6aNG}Lq zj)w*HEAcLJOj1|kd-b^9F;ByfK9HNmM(Z7LuqGW0|4tl<*c&UxCQ-0?3LXs9NN}*& z3*-)( zqnmz%jF|3}x4_?;;c|=$am?v6*nbP@ZAcOD<@d0Lka5#tzTFb7P@uf6%3dEl^OFCh_A7PyGavSBCCc z2hj^AYT7$wX?s9rz}McSgY?cCso#+4D(_Q+!h>{e3RMnFpSh!c+ctl;VJV;q<~V<8h^nj}@OI_gEUQV!kSONO(wQ++)RF zg?=j8$Q2!9oyDtWsn)hU3De4@`T=fOJ4J=0l~bySl-4hxV*UaZa~9gO3+Z5zdRuwhOcb9a|MDP2C^F^7C1 zS+gc=)c2UB(T$KfotT4%8we0(L1|(`*bhjcRKu-=Ci3a8iiQ2$T_{Qu6?oF4J&`rT z@UbZC)wMmOhke%`r(x3{H&JnpbpfiFsxGhnlXlHH@~m`CPaunr?Uf3YV05>(TwD8z zr#rhqndJ+6aS&P*a=f^V7L^{hYGC*_fjpM)Hs6ug`^i|V(=A4PRI<4;xf3rtYW2`e z^L2wugcDqmFG7;h)MFy9Vn)3YO6y(7D4cW=uQ{C8wgLplNdiXmjIhRW<5=Qkf8>;P z(T zMQJCS$yuJ4;^e?Uf8>dirxQ;`4)?}-V%-!WH2t{}`u157y4)4ow|mFV8N}-gkkLc! z6Z$!Nf7kcg2JXAJtp*LwOYUZ-F707?eCHh?Ws2WH09AY zEq_Z&g?NH`El*4HQh!m&k8t@*o?MBxb(9MCi2vN#CIHah@{5jem2EzycHvcA4u1xd z5aUlO;e!g-^SHtvRd`v=sX`_lON+c!C}!UA~NAjYO8%J5N zFA|Woa%A4hgJmb_o_oeTqr@IfWwT>xLTQCeE@LMPHY^KEmIupI5?`S`p;3l+;@QO4 zEVY{iq7l9ekH&wd^1_ebWcdAzzs~Uc7~V;D9*yj9{1JtdFC^3LamJ^=Ote4UKK|#G zLVp1N-wfZ)?EE(X-$%6zP5aa9O+{4U7p>YNE!US2)F!R44IJ zOENysH%sAkJj9oO8KD1GfSs!hr=gDjD-7rBzNT>Mc>LcC;Qxm4`F=n4@yoDB?O%+~ z_tj81VdPI454BGN?Ce%`k;FW2_b6QFr{3=u8BX?5%4GX8v%~j$Ab@|0;k5R3&x|<7 z?Cb%i&(~!*eOqXJp5Z(We_=R}=R@~;3(=Z9f1YMIuNx_b^Y~0LoZJ5)!yjUP&N2L9 zhJT=N9p_g(_rxC=pT|L{_XhdT{p?b>w)3j8^9bYfd-s%&|C-|WFg{=RX&?Vbif=GJ zxBr%p|0~7+c>w<%hSN8VKHrGaqkF1KsYK#F{1Y|5;KTLz#-tC|-vhHgT)(f&K3u=A zMXYdT)J_edxAR^MSNjf zYMKALi@*Y1MU^&9dvP@?tN3bxy0&^M_F+Uh6>lQmV3m>{%~XcH?@;_d(u2ib)qe>+ z*_1UwVY1Uij$!Oy{{S$e2I+VC6e8gAb{G?)@EnnHwZ8mok16=wqVHeQ?`9ktzNd(E z7kJa|=>8;xt=3;v`m0ZcfVGN$L@hj{^eO&ylv-cMzt!5LGDiw%=T%^+J`m*B hCv02niKov0&lvNj_pLFifvxoCl>gt*MAiHC{|A4oCiDOR literal 0 HcmV?d00001 diff --git a/EYOSx86-main/build/x86_64/boot/header.o b/build/x86_64/boot/header.o similarity index 100% rename from EYOSx86-main/build/x86_64/boot/header.o rename to build/x86_64/boot/header.o diff --git a/EYOSx86-main/build/x86_64/boot/isr.o b/build/x86_64/boot/isr.o similarity index 100% rename from EYOSx86-main/build/x86_64/boot/isr.o rename to build/x86_64/boot/isr.o diff --git a/EYOSx86-main/build/x86_64/boot/main.o b/build/x86_64/boot/main.o similarity index 100% rename from EYOSx86-main/build/x86_64/boot/main.o rename to build/x86_64/boot/main.o diff --git a/EYOSx86-main/build/x86_64/boot/main64.o b/build/x86_64/boot/main64.o similarity index 100% rename from EYOSx86-main/build/x86_64/boot/main64.o rename to build/x86_64/boot/main64.o diff --git a/EYOSx86-main/build/x86_64/driver/disk_io.o b/build/x86_64/driver/disk_io.o similarity index 100% rename from EYOSx86-main/build/x86_64/driver/disk_io.o rename to build/x86_64/driver/disk_io.o diff --git a/EYOSx86-main/build/x86_64/driver/fat12.o b/build/x86_64/driver/fat12.o similarity index 100% rename from EYOSx86-main/build/x86_64/driver/fat12.o rename to build/x86_64/driver/fat12.o diff --git a/EYOSx86-main/build/x86_64/driver/fs.o b/build/x86_64/driver/fs.o similarity index 100% rename from EYOSx86-main/build/x86_64/driver/fs.o rename to build/x86_64/driver/fs.o diff --git a/EYOSx86-main/build/x86_64/driver/idt.o b/build/x86_64/driver/idt.o similarity index 100% rename from EYOSx86-main/build/x86_64/driver/idt.o rename to build/x86_64/driver/idt.o diff --git a/EYOSx86-main/build/x86_64/driver/io.o b/build/x86_64/driver/io.o similarity index 100% rename from EYOSx86-main/build/x86_64/driver/io.o rename to build/x86_64/driver/io.o diff --git a/EYOSx86-main/build/x86_64/driver/irs.o b/build/x86_64/driver/irs.o similarity index 100% rename from EYOSx86-main/build/x86_64/driver/irs.o rename to build/x86_64/driver/irs.o diff --git a/EYOSx86-main/build/x86_64/driver/keydriver.o b/build/x86_64/driver/keydriver.o similarity index 100% rename from EYOSx86-main/build/x86_64/driver/keydriver.o rename to build/x86_64/driver/keydriver.o diff --git a/EYOSx86-main/build/x86_64/driver/memory.o b/build/x86_64/driver/memory.o similarity index 100% rename from EYOSx86-main/build/x86_64/driver/memory.o rename to build/x86_64/driver/memory.o diff --git a/EYOSx86-main/build/x86_64/driver/print.o b/build/x86_64/driver/print.o similarity index 56% rename from EYOSx86-main/build/x86_64/driver/print.o rename to build/x86_64/driver/print.o index d6298014717ffeb89918a9703f8409bf2054c41b..011baa6c9b33a5d28cdcfdfb044d1a3228d2a808 100644 GIT binary patch delta 1019 zcmbVKO=uHA6rP`H=|jX zh1%&t4~i#g5fmg?dN3MtFd8qh2TvaAEhU%U%*Dp{W`m+d4-V|U_rCWt-+S{ml9jR9 zVR0=Mco}~k+OtFmVRpH_+37I*)rJ&ab91iubUxbYbfVy{@fc_$80el0Gn?-Nles*N z!sf#$9Nv_voS{|YDG-oA*5@gtITF^F$*BW6KmQA1Rz(4{P|*tsL@gPo`0@D;CggPf z4C*)>*;wtvH}``VuXH>_>{X^TeATK3ZHcua5aM%82bt|j)qyVg3CL(20WT`dO)KD) zs^cMH=8gm6O4V`mawbY0SQKeDr%QH4kxj{ISxto{WWU+P^(Vdqhk)cKbnXK3f8;0J zpX?oC^P^C+#z)|fbG6E7liLX(_6Loe37FrGY|wAV^Sf!hBk^yKG1u|%FCM9JQ&xp( z*dCU*>ujMoA0QYbZxvtEfxOhZx90D+j#GS5+NZmo4ba1zD{~t+M2QH?@^@ z_C@Q^KZ;$dg0nl;B5f(NzwZi8yHJ^qZmp}&jD5%b^!x9!RbULbl}P=A_!@dzvU^Xe z19w!I>=`Y5kDlGRO}(M+*d8P?fG(HH+D96ZZZP}dNh3rdhE|&CGZig2IhDOSIei6O za7v4jivhZ#m1y*{8p*&~<3WL+p^4SOH}tJ0=3>WbX1A!vl9cEoWF!M&9RkGlaKFeH z!!)dm2S$=M21Omj8iWibd)gQR=a#rIG}^Of_||*z5Ui<)Z#Bdxuu{8xYp>`tN9mF& I#?6C203*ZWCjbBd delta 170 zcmX@$_Q7s~29trzMy>r^lT-NSGBRxb&u7cLIY#IR(`E}%Nk+DUqRhOKw9WBik*rL% z+?#hvUt^xULVgF63-{zC1v91es`e?OQswi62!6$@LBsCp7h*c4?Q)(JxQ|P26nSoYX6fDxA z6uNTd!XMx|h;$JuXg5N3Rw$B13xU~0C^8E{&$*Au7rCHEp{=8JatJr;GljF-Bnz*2?9tiUo?A@(~;KKdAJ=C%cn(w1btXtlG7 zf$rb@?j^r_v3J!eN#!~ii<#a+q^>qT2aNa~sZWF~`s&J&GjWiN0yKV2q=~;2<+2;2}34^!x&~YgGe^_!nb!<7qnG zF3Nvlmlys(n;+pv;qD=UG0db~ya5Hz*LTZ<+$kI&+)+!1YlGX4DwcPJUf=xQe-@9jleFO zGN%v~ZfXX16X`6vY>I7jsZ5R@0!OWfIfCVR3yQ=fT+H)W!i63$BwXn6R>FlIMF|&r zlqFo~A+AcyDfA#(e#W$tqu{L^^BECY>1m5-Pm)%WXruW&(NdG9na%>1OHU-VbY|pf zE@`HD$NzI(kd9Xu_#%8rPb>&R9BpDik>g?T2#Neo wj_=kRsR|dQh4&X4$@#5tR@M<2h)`oH>7$9)}zNX19Eg&p+sAvOv!N1A-HXY5)KL literal 0 HcmV?d00001 diff --git a/EYOSx86-main/build/x86_64/window.o b/build/x86_64/window.o similarity index 100% rename from EYOSx86-main/build/x86_64/window.o rename to build/x86_64/window.o diff --git a/EYOSx86-main/buildenv/Dockerfile b/buildenv/Dockerfile similarity index 100% rename from EYOSx86-main/buildenv/Dockerfile rename to buildenv/Dockerfile diff --git a/EYOSx86-main/dist/x86_64/filesystem.img b/dist/x86_64/filesystem.img similarity index 99% rename from EYOSx86-main/dist/x86_64/filesystem.img rename to dist/x86_64/filesystem.img index 9c08f48f36c9f56e3d0204c48b7dd841c496f9fa..0df3dc40221a92036f9f0a222483fb26f5be6618 100644 GIT binary patch delta 5171 zcmZo@Xkcvs;tA?3V*MxLH)=l)=dW2eFLGWa0|SU=V&LB_$njo%vjWE#@kujynRvNi z{0AVxQDQUGEeS_U!qJj&v?LrY2}eu9 M(UNc&m4t`*0g!0|SU=V&K~>$njo%vjWE#@kujy8M$EG z2OzOgVl)g!)4^yq7%d7$OTy8TaI_>GEeS_U!qJj&v?LrY2}eu9(UNeqBpfXXM@z!d Ll5iN6gopV7D-@bl diff --git a/dist/x86_64/kernel.bin b/dist/x86_64/kernel.bin new file mode 100644 index 0000000000000000000000000000000000000000..739a28839154d06e78bc66832634b08f49c9157b GIT binary patch literal 36040 zcmeHwdtg-6)$dNoV2J1h6pN3_5k){D1VscC4Uo}6c|;%uMGQkSAtOm9od*v~AULFD zI)>7((xR;`Rd37Z)k=L}q?QR0NwjFAr7iuWHnp_QII%{hnpQOT_uG4)GiO5R_ubpx z|2WE=wbxpE?X}lld+pabIU8MbZpzNe66TdHZV)ncSH46QX+rMTO%5T7#1!xpi8Do> zVrrSrS2#og7N5qSzMZzfX$zdTz-bGdw!mo%oVLJe3!JvVX$zdTz-bGd zw!mo%{C~H=Z%P&zAAKz~7SC8P&sb)-XUtiYhXsFmbx^FTtrOnz zD!(Dh*Z6A1T#v8TSnR8<@UIc-X3X`}dRBS^hA(J%46)cBSY?2xF5q7o@CJk9jD`L{ zV4X2-jHvJ%OAW|G2_ZiKuO}e9YkeWJ{NjLbHRR0lR9AyBSQQSTl-jc3x?sp#GiK~{ z$d@PTJhi^^vXD0z67$2Mx^T!CRgouTI#^dNh2826)OxEeImDI)LjhmyN+~2yj1#rq zHD%@gni@}S#nMp~%cdElf_Z}fc)0=re_)zn=b5;S)tgs3XAW32T^6SW8v$=9j8ZE! zPigI{TIg=*GL-!B{al7{-9CSzF!~{l&l6uVCKg;%P&hG9%yBI;W*F0riG>oJ3Gk{y zQLt{5p?^NN+Ft#)3x%2!thvlut|s=dZSX=h`0 ztuN&BRQvAngna(mf`Wp)rN-=eH_eCji`jscK_56&8xkU`*9cX4jY>#Sjg==TQNc!y zKU^E~qLJLLIdkSOTCzwIjY^;^rWq1h0BoKxZZM>R#jcs9H%~L>cq>DOzs?&#BPj!F z!UEsQs{Sc6Dk@l=Q5CQVex^&`7*&Cm9TgNpXP@P-E%$`HwWuF>m16{105b)d34Q>3 zE9)X}o-|zv9okc4guHUHU6=_@}#`4zr^)MH(qSdfu6 zs{Nh{wx;x%TCmE7WL0LPnFE1vT?l%Xd(oHCY+`otBABHD(ZtBO%FvfH5EG2CHcXje zOu&C>%$TyVV~jC|4TIe4@t+-22969Kj|#% ztU&WyHnMWhM5C^%^ZRN;b`e_id<4YGYX6#kNHf`gj0K+Bm0n5p%2v_&Ot+X{SMIOy zT4fb`SNqDn#yqszjMeZes+1=B!_@F54_sAxrj|9!k62E>fmbf{uB`DwQ|c86r%hm% zw`k!)OPHCAYYmm@|3R{Z*u4&b$K^?YtiSck;fl`55m%>PMVZ zyZ&Y@wi?bDJ*r|fI1XQ}HmLuk?;q-W)+B|`*Y^?nUZC&O^?kO!m+HGm-)r=JoxV5f z`#1IdA$?zpaZ*N7^bz#r;zhRPNnAfYJ4Fi*XD_(#{63mawVhou6}M8PQ2>s zN!LuicFNSk@zZk$eR+*H5Ly@Z`RkT0%M+epMdiw>yH{0TH+s3a^PaWkt5?+4j4PNR zt`J6FS>u7YvM=(#PhWUR(WRG-y6f^Q#*8hyGI!8zi(LyA-CjC-e#uwr^TdpW#W&sT zzU9_A(?)I(>+e`H>q|4|&AtAH8~=UfTlT!wb$juG*qdgO2aP=;8(kg<~Of?lx3 zvko*_jdT`Ot2{wtrLod` zlos-=@*1nW>jeK%r8-~vDwsWtb|)Szz+$0d3Z=n083I9hDAKilvKn+)pwVHaM4C;C z4A-*nOYg1lV?c!O(37Q4(vd5%G(u@14C=vfzGbEb#-22G+S>p{VM478f#=nT!#W- z%W=kN*`}ib$fhB{*5I8DAhXr@SA!E(9Zel2iiH$ZokHA$yG73qOWC9khYgN{{&)uc$5z=>KyN_7ui|dy2gtmO zfSWi}i1#w`CM?+@&_4&gF@xS<(eDSn{2U=#GIal$rTa6W55SJY6%1Nd-9}|o0LwoN z`dJtV$JphUOYxF^9Q0wJUvH1T+=-xn-%ihdz|wCL=ud(^)lLtk^DhFu9ds-c z)B0uCTKPkuUwDBK&t=e`vgr4N{uJo1Wzb)?=+A(@{6ZnBGw3TV`eD!?2faW0UWPo! zK_3D`9kAzjMFwQ=l_H3hcDe}me*%1$+xa|-hjOk5{b|s*+UbDg|{!2A`UM?rrw zgZ`LB-wgWjONBspP0PPIE&ox_b3jL^Nz-pi(+`0DKIA*>^&cQC`yK=RF!H(lyGfZh!Hm+kcIYAgR{&9+bE1ART{aIv)gZcpdW8HhLt`a^bl_71E3 z%Rv7G^i$QZ81(Zm7h*|9{)JZl3eax@y)lEHj(3|u-vj#W40^GZ|54EY06P9p>#zGE z{p$eee+KbX@!}Zh-x`gWH^7#EK)w}EbMPS6mMcyj?=Ay0Q7UNKJ|EW4D`x>LeCi_#PgtE z>_7q5czV8r1+adXf&LsScb>ic+tT_KgZ>2Qv+VQ@X?g|d9iVewm6ji~+IKVPMbohM zwdc<+vFi6I=wZ;|qUrqJwEP30Zv=gbot~ZUf5$+74)moNbQRzY;Bqj-{SfqQyMJLE z8_*+%AVHon;OUs&zYLJ2ow%QW#tlN$5MkOeyUMCZHRy{#pPxa$#iHK_dIWT+lFqND zWK#a)pg#oqsrum|(Ek&3c?e>a@3-W4f&LljGwkwh^Uc8+U@pG#)cTJDeHG|v%Cvqq zKc5471oZV8?Yzcn=W5XZP$a}R?fJ9sv-GqU5{)ezE{!=JQ4*q#2LZ$!_v6=IZpzWj zYN@6FCJfMt9N1jT=~mB>sv#sn4~s>tO61@d>~y?ip7?kC5gf+Rbj?i&^mM8=yqwK>j|~L)klzdV%Tr z5-{zBCSo6d$UWpnP4be&pk$FgrXc2OAW7Q2>6bN^uraP;zutMcQ+@Vd(J0Es4z?t|SARFNtBvZ2?aKwgL z_}v(q?%q`2{W&<-TrJgVD#>z3OS_$WO5fjdze8%nCsK??M0!T7@!1hg?ksn#6eIT6Wd?h}7(~zjYy`ylz3f146@Vr%00Don$SLn_ zMRHG0vbGhWi4|E7-r9398A&;yAf^jY(78ukZ-lya+(PByD3m1$ReRK|B0{9t^S)ek=#iDF`|c4GHi*mo4RgBDa(mEhD3 zV<~~y@!?TY7^X#viIKMh^8}fky73G-!0FbBx(=|6v@{7SX%bY@+Rf|}Hc*i`6Bf#B2+HRg~2}kthYDndO>DHvP&kLW2G;|T+M92XJT`oiIq0TTrZ%iZ(3D7 zaS21>GtvEfKLKuE1I!;c?lwbO`NiliH^F(O>1Ib^z5RRt(GTM^Fq&-7Gd~R~2AFcb zjZ&J4PJV|CsoEOt)g#>%ffyZ<=7GCf#I{5)R>){f265Tq7-rF1QciG#4R}NcIs}vG zg+clx!Ue?~1t=vJIk(5df*=cs(8 znb3ZFFuoHtNi;#bgO1CJA+DK-*Tbsa(ah^!&;S<>T1h8Y!!{akXx)o9~Rs*=rYBt{b12OEeI&HPP`ldKT@dsNR< zih(3rbS=k3dlw?+PUPOHW{cy{lvHpoN@{FzHr}rK<4(BjfK#+1 zRNpt9)kL<4S+7X_5%lJtsoY20SF+j&zH@sp1>LPf-=soa8&D4xJ9fhdNNY>HKS5fj zJ9Um8bxLp&5y?|>#(nVQI$;WD|d zR^C9b*WGr42~OR38A0l^h2vzbv?Dq*AE*wuj?2m4tHzZ)*HLHLR&9v~&SJ$%;l(qD z%M5fd_ARB_Z?Gat{!r!JsTL!J+U&o96pTr8k&7nhVx*r)4_O$MtV+~UJ-W0S+v1b0 z?sx{f^)w1otvgK@<5$HP@f$4Gqi|WuY-`BnEF2eROV)6MPJ|Y0lLH}XOe#*;)tdZ8 zy7J*sXz4J9IkXqtcA-_kS7ZUDq<}-VQ5dnyEF;oY$ThYczoVtHV~px$qoHG-7q7C! zOoEtZg!$f7g*DFKEM@NR9HhqiPC3rcrHRm~Osiv@p=r;H@33Sg*dwH@;pS+6#JxW; zNDlS?TXtp30#Y+`X>cy*`sE!c0A+Df#fAK)`V&-m!=L1kpa#h(jnP?&g%5e1&lR2R ze2&i6>D*J4@7yCL0DGSExfbV>ty%ju*AS$eN}T9`?$-T1IjF-9c0T8Gt}Yc8nEx#2 z9%fQ{FnUSJ*&y|Br(ZLgc|$Uz8K;-~Pa z)FMhnIM@a^L+=gA*)C)4Tvq(ZUV#;luFWR!yEnPIC2A9-f|Qy2KarbyRBo#O{1fMz zJley3ovSnOpoFHnI)k}@I<@f}?o<>H1En%1~E_CB0O1c#b)4v|`e&6g@Y7t%ZG@SSq0^ybzmYW6*v_(0(0l zt}arN4fw%=pB{=C#s1C#bTUjm-A!9$d2Eba@SyqJ(O)KhcZKYsvl%*NHgw%~m5sM- zw?pNEy_e*=qj~P=9RS_=NDg;LZ^=h`c&x~X&NS4dY*fV6g1;9AAx5IeyIj{K z_HrDSiL8$23Gc-};r`?U_o|kB_t*oJ6KR1F7{N=?={N|=_;?JBp?s@NnmTbUly*mt zZcFPNt?y!liMCgwq%AH^hoBYW9$GfKKW+T17G?VZZif-e7nRZ6{%B3xMuLbAkf@Ai z_s8J440Oc1{%B3xMltgq*U>H6EFO^*^P~Pa9hWN=G?#(NX1{D>z~=5>Q%50bZM390 z{5-!Eu=J;Wh0Dy2$JMcoFpUHbS&4Wip_l}8ev$Z5CSe{4+(=6_WfGQ=Ax)0Y&D^Wf)0OygD=7RH`K420JPBLa{lLcSt>jY{lkS!Dj`TFfK$ldTwbIX)p_TT5 zK@S9fK{K1Ph)c|UinHSe7!nm|Y3^2Gvugf^E`2sIe8cZ-TffdsX*(b-z7d)wo5PFu-Hwd*6Y9#bKLSG@2BJ^cKpAlL~$msyIjL-kkPKtMkbIMMy^YE9nLNZ~9g}%X{+!8gF!?ETPyU3-$C>P6 z@&`<|G5LEYw=sE)$=8_N#N?+;va_VZ@!#q>Z-W&Q zV*x478ZIkhj!Cr)*9YU@2UQVPLj=a*^FhFL45Y^`(o&F=SQ&;!QS8qs_6>v#?XuB- zM7t5_Pi*0um-E5W6Mr>HJ(#6*A#`^|Tf4TndO`11^8=f%9S{}o%!SZ;Ky8lk(1TZ- zW3+~B8azVg<76&LYrsvnW6L3*JCW-yY4G-L1aw7cAbux@^V%G5$smGB=15MeXnIvn$5*W@zdbh3zWBBmo!>F7JAaaro<|52gkO_TS@EE{x`51Cw zffH#Rjv;yPA09EVwb&Z`BC=ufbTFPf$aI$3`KG1jA>(_a=}dBlo{$2fnE1F7X$=xs zm!gYNyrYH8=~CQL$4?{%*`cPM?r^!qUAGW78~`RTi(>s`wb)GV*suxJFb8WLE#Wj5 zcgICQVQpwxGN0?PPS`d+#ZrAMMgi_8F@v;3x3plGOKMEQsT+0zZb5;qn2E=iSQ$%^ z(d2=q?kpP!s(@adqbhB`$ zHaZubXy_Kqon1$<$%KA&v=R%%UopF`9K=S$$E4IwQ)-G^4^UoiTKC|{PDth4UfJ38rc<_m}N*)hG?gnme37ajqw{ZSEK6fcDM#4xyUY7I_SBc0Bu z>v*L8_@IsF$6Uvo+=W=aGjL!h{1x|(EsGqf)E6Y-+LH*#zCV!zr;?JN0v-B6mDF%L z0m4y8HjQJ6$;x6m;{F~?@yq}(6@%H5G6H#gd|#dV^g z{zP7Quo|6aW0Hw&m6&4&aws>M+7ZZ8#Bm@ZAk=1xxq1jmU$2X5QWT%5IZVd5>=9Wp~|pxO$W;)Zf*&` zZu%L=#VyvbXl_QF$m-bQI5^T8J-I}MtFR^4ofRKXANc^4`ea##_taTF;NF2<$@dCV z6|vHz?($Z*uVrOrWhIt1Ms)xFzh~nVrDw$0{n2(FrnKWQ<#i_d@visaL~JA98!G?1 zM)Y;$e<0dE7W?&5pN-$^&$HfB2ABgS)1GD48MP^b@!AnyT9WT!&H%f~JDV-A&i8&$;C>ce^oTpaGii@Al8XleNyhz{OcN1 z>`}A|#Qq7(i{yVIRH$12ONNLc-oA;W$~PhRJ5=|!f0tZD9Q2B)UT_SB*yP`22>mxT z9y=YzOf8?s;_3{PrY_2v{v^s;Gg`I1_K%{Rw1X_jX~OOcJ>-_0{$1olXTJE*IfOeL zuFgugv$jQU(Ii-tR6!i0l1O;vq}lXWm~asga-7jF4Aczr*c^K^jwo`_g0@aE9P2M@ zH0ToHyVPiK28FGS&FzZ5(){Y7Lx&KzT4h&m-T&?Y>p&De_?2i!KYjQEE(TgNa_&zI zz>FIUA`#w|8Xl=RktKsXhlCGQ$Nd&I=J9x!*q9y;3>okA1SMXQhuQUq@^pc%o468( z7Us|y=^9RpC15)KjBCLdR_T2IjSrnylpdGJO6QpN51n_uf`p^Dy|?#6=k5CyBf89S zh-01O1+?uTlwk(hr8oipAB3~9tKyj-Aj;SI34QSgoP=1F;K+ zFf|v!g;QKacX_TNBSs6-iR6pQm*x2v!WZ2Qt=z%zC2>J#<9C6R6FE%1=j+dqEL?77{n81Nn zixl_@QxIrZmrhxLLCcyq+0BqP0Y-3X0+tN3|Bq{Ri7D6!@l2X_ynaxK2dxs!3qJ>t6^*!#Wu-1f z0>zpZpVAs0%;NBz4UC#{#9YTxLlp~J!`ZkP#sE%F*fw?TVx6Kt@8OIh`mEeCjc!lK zR1?qo=S1Z>@SJGVTBOjPhI6c|!8vyBHs{#VozAh#c00#MmJM!jYYU2gGk;lM=gn#Ms+sM zPh+%g*(g(qjYvNDsKpOAeGFn^QW=gUu#+q?ww>xlF~{yuV5BuSDsi-vRuK!V=ys_s z$J53s$dSUzOaf}Tv7I<~Y&-SE>Iw7YCJDxxq$#srfzsT2m018&RmNFhq>(wbo+@h_ z_;K>HXv;6xVg0iG`r;K8fsx{vDwbV6{CzzjYd@40t zW3ntR1vbkPwq!?sF6+Lb=;Rs)e!|DrPAv>H-5^`CQ(4TFx}NL?(Px*?uF>tw(MK@@zB`n231Y{}H%=vOy;;Nk| zUaV)+xdTD#c1N?N@>=cmIXuhD$L>jYK$~xv5``jp^!v6vm5Z4>V`e@aCs`$`yi%Ks zPs&TPV(O?0w>BYAD77xiw^r$focZ9a3Y1Q%xM{Zk|yFc>z~=7r*yweATh1xeKH+{^N$MC4PuXpr2=EiStS@zg)2lF@Ji ztkG6IMU-nx%muT!q4W8^vr#_IYca!G_O3h^|GaX4A{SdW*vR`e(Ki9T56f=Nb*<*I zaa;ye+F|~0ihMWOZ;`(O+E(NN&1Ea{r$E_?WW&gcC-@oeSvl1ZUAYN20~LY<8}VV0QVZ;SgA z+z!E9miC5xF~=MKgeB^D2GqFAD)Sta8FT!g-z=882jgF|GQ5qsaq>(k8Nb8Ay++(8 zXh5lWKr8+l4%YZklv4cqev3F{SN!~c!V-0S`Xwm7)++N3lo@mU1;~G5XS?EKspJAE zX;XX{aW|NXN44U^G8B*WTSSLl@#X)7CF+<-#kX3D|By=q$M}A;^lR}tWJo@MIh0ND zJBe$Qvn}}F_qF18;=C(u@mEUwv&~_<;y?Z;EKx@k)c7No;)xzA9_lwszluMH49QMR zlWdAVLfj!anS$a^YsGmAhmKPf|G8D#JzzAC{w|eEMef2Fj~eJ{cqPK(TL3;D{>2;@ zK(nc?6YJl={u)3UqMU{Q#^Sx4h0iw&@6?4~t_t_Z96J`}qZ4I?OJa^!C782uV$9JB zP#&B-4*=t9n^Gf*?D6+3*{^&8*&m^g#s{2bcIZ9C@p+2)MHcR1;(h^~>?>CT&&csG z&aYsAdk(rj#ewH>kVR??mZd08*LokzBP&ngz&a4DSt)14bsSY60nMhmj<0{Uq5e}5 zx-{l^Z6Rxt9UdMpvPvFleNmf$Z>C_#ltDrhkV<>Uouf0exBSZ}XBn{#eH z0Yz{O&;-$3gs};58kZL?u?6VAVCvtRwN-cH|&O(Y_Rirz4d@uHykN(FFyrPS%p)G#3+nDaRd1hL5@@aL|hUE zBbh3Kv=JMo;df&Q$0LrPNI5+lxc%h#ArtcCW!Sd?;*EjcE!(ItHr;yRNh2ZQpyR>Y zV9eAR2OZx8K;6HMJ5BIgXdJ)KGGp?%)zBOQv4!k9hD{PqWiffd#$)Po)lK;bGUp3e zy>aUVGYw3R^lFRyK5~!eFj=4x&V$T@i?q-aN~qjEk&^hZ+_5d$Cv%#`%VUOrqXts0 z8GfvKVP$iwdNBgIdY}d)&@WG_93O+Kg4uS^Z1-b!yhDW5NkQ^=jN)xBzEH-Pu)`h2 zL#&39Af~wP5A(rp>(R4w^(=DW9I&1$Y;i`?1o) z?(#Qm^UP*<(?vrVv-bRvB@c+X4nv#tD`L%Z&s?r8ZfSFMu*?){}kGR$tkyZ^ai9_sw>40Cgviw}iJ!yG!5VV1(a5!WFY z=1_)VW&tk^lUl8{{co(YTU(_Kc09FJb}OqW2AZT#Yqe2fx=3^S(K~biL&lBpG58;j z(Px_7OONhp84Mk2nw+>7_K~Bz>%?`gW3t7udTLAD4Lnx-eO7N+g{Al~I5y$fc--p4 zA@KzYgV5HlkvJ~qX;KPjym}85t0=0Rx=`-P;fK3(HHgPlHT<|F+E!~=qNeg}tfrU{ z_wh1I|D9Dj>LgXd(gM519eu>{#VT`?5Sz1dzg4QCGNGgM;o=@Rqb&*o19S9!Uj)3} zn z_|KGX)l3Z%*20wg%!v62YRAI4rW&Xz%&Z6~gpVVbXVtdFHOfp|#A=uj9|PfzEB1L# zw*0HA@y?JZ{_-7Avi5mYz}^ng@bQ$n7al7;KBXhft%9D^Fjcl$RQRaf9kg4k8kkS1 zqm~3)8VI=FwDA>NYB)T7O&KjcRq3xhj-Jtghl+S}KKw~5um+jtq*gYI4nsuR2RtHL46t|V1dz{z zivkSs$sf;(0FLIoO8SgVf9InI;bSj0GmmrR5vS1^X*ZlBJD+dBpPO@Db(YA2@`X;L z}kmhw8{$+`QVyDIz5sB+A{3Bkz&Iq^& z|9Gv!KjMv5N{*@RTHyQB=iXD`zYcshawM)$5`swcdI0~3UwWm&%fG1y+;041xkb8M z)`yoDTZB@7jputay!bk3fBMkl`ooXVa`-qZuLk*xzcq&~3d(QMc(BRqHT)8Ppb!2i z@cqgEv*tJb2b;uF&Ic0j5M$7@cyUR}D+{hb`JIm#GHv4dH~0FJe~#qO7TfUr5HFLT zf1D!=7TwVYKk5{6#!3ExA{Xm-yPRva9PYsJVteyqho+v~G2=Bx{t9uk#=AA%wA*5h zm)jcPZP5H)jqmJJZV>qX>bw3F_y>V!j>&f^J+*l8n8x4G2hSA<`CWbRztZ^I`{3o@ zBn1ERK6p9g1HYjUept4We{UcBXpR42AN&m(zpoE|j>aeZ;1@{zK*0cLzm}VL#83NG zYvMaI@#{@|cP2h+;xRnfFaE6^_SE!WUR6|XAPdAd)Bh9}f4@@ma~QE-e2cNa_N@m~ ze|WwQ)E}M?*Y$^g?G*SUr@;Rac*dXa-mdhdpYh_ee8hiYsltC#p~YvXkTU?g{r%}< zoC042{7~e0`C29at6KhT8h_hJg?~@u@6z};ahSntn#OxIe!(>ge}TsPfFFW>nxo^q z*&iR#{Ht$P{10pX)tcYX@eOAc^4g&Jw-+e>%QgOMz~@7MzJO)F?$dJkH@4)Z1$|fZ z^L-}!^+PTH(^(2H|3)Af9@F?u*C~9X&h)Ite_W*SoWbyVQOoDsPxk9&&Huy&3jaM# zJR=yqbjwF+t;hT%z#uZ~Gz7^&0=I*5@iM$F1>C zj8*(*++L{h8?}7-H%O7^4vn8PUh$ju4{7`e?T0m5euKvUTTEr+k$*{_c@|Hv5%e?Sv^foFaB{tT}M`3oHEKt1_hqWwA# zc>2S$IN9YjLlb!jO#Di{`ES z*7&gYf6ljfJ+AS$Yk$5|p~W7J7d&0SCI2=h?yVYs!=(z}D5*jm0-pBgyQlVRjBGE5 zDC{#IdtJ-frsKvJb*4XRe6^0Zb2Wagw$I199nF66vF4wl@gdFsxhWqfD7;EFejq{; z_2iqP_G>Wk^oI*BQut!T9bOk|{CsV<%N1H&squ>n6~Fx3%%Dxu`0m*X|Fq_xsqqON zm%gm=vw`P0l6b_B7;~KeJLbvM=P%m-&(P!MTrFqTbR}Q@&06GKrtv@1;|Pzec-^h> z&ue?~sZ(A-jlWjoFH~r;7I@l+FU;Dn4VwQ)TK}1v*r@r(_nAj+)p)+7Y`?yxd%*P?bk0f|1CNm@`R7quQmQY z9dG9=v?v6g?ZOvp~ zkZ7}BMVgAd#~WTBXnwwmZ@)g){O`?Fc=@-U$$)^s`tpr%`!x`F#s{Y! zzfAj_qw&LZJT&KT7ijztJzkjO(PbK6uIJ}w|GE-*mdm&H?N_1ZZ`I{y>vo^6@sDYL zzD{R)3iYO6b@z#Hb2R^E?azxef0>Eb^LDcziD007g0H5odcxW%lglPgn!qo!O{l^* z+Pr}R4_=a0AU+Z3353jqx3)smczm@5qr8h z_o$`7d8Kp9X3d|oPy!3)FJ36*_e{#=jfMz$1->s=6GV;7FS}R}zQ~9#1q%JilbPYl zN^ihS&GFW*3{}A>75+LF)UWBKU1|98DsTC!GWpFtR=RJxpw@p9vAizqtI&)RCX*dm z?XO)~R)eppX(lU8Mk^tL_z+}WSsgwiR2Jgr)q*Eu3h+r5d{ncRWOCx;Cjy^S^9S&8 zOEX(p^`wl{)fp*z2R@)yw!$9@`D=6{1feS{LX#({-vWO54b3e-*rrkPGjlL%We_G@ zEkE!_V5Nr^m0!pt0pIz=hc^LK1Uzd{Mgab-VHCPDzz@#}Ux2LrHiIvy+`nHU+i3D6 z**)kvW&9*onfjoXpvUs_NHh%fDX&`xKUpEFz=&@E&64f`&n>G9u?}br`U{GiWV(r4 zaS}K2Y7wlJep#v9v#h)d9~_k!xHJ3}wIbg&!c$SfuA_@#->BnH89pS1&s$b&OO=)5 zqdxFoB>`Ut#;-A!Szlw6fdB>6me-)M@ueRvf|gVA%fkVDs1Frn7ef`%p+o4S&{XzT z`$tQ`5e!V>&sBv|WALu#x2eoeqv}9H{iLPflI-VY_#&YvqyvU0Snl&FS0~RkY_~vp zRY2ggKZp@!)%@1eD)~j$GPXUtLs?o$d~4KSD+^blN_~@6mlH-|LRq~`Ii=Q!Us)>S z$1cSRpFgM!r30H+evy-52~}3=N-4B7jJd{?N8_PS1%h5Qv#K6yl<~<~)i72wsz}ND z)vCt!vVzhu6D|M4H=wHFSE^uHRev=)wrpa!l<7){viL%r^cyr}Iby4}tUplW3E}&5 zbZ^=IvX&BpA_AWUTOmulig_Vl`YAujNo=9~4sMwoR|LP?qz!GB3NO(HOp8XgiIa8d zRo=C-+d(B291uRFX)rX&U{O{V4pu>a`6?43tFcOclvlQ*@^zTB0fqzJvK~`}7auSUqhFPI*UG_%{$QDpp;UDk2ngT{SGt4Gmh!7S)gj@ptfZa$7K0Dv zDilAD1$|5hQf?`%fUQSoh(KBF^e63mS75GRMn$zkIK*H|p%7Q_B_Nr3yOf~(y z5&;o?A{40h)~XSjHkRf@XF$$tg}v{Y_N%~WwgP@xo-D>+Tc!#{fWzo2L_u&}4F(e2 zLjiTKG9fv%6$Jbho{&crc&o}P@qJpaC}536fx@l`1_eff8h*9YK41ByUHRtUn;t~M%{03%qybPWHM`z2V^GK1r&_@(c0Lewq2r^_fW{FE9H&-FAw`-x9NYEnpCET%(!#o9#-xr8{8r gD%qqU{y8Q4WtMB=XrKP_KND3P=KhMw-#7pN0SvAIeEp+%anBC(0@5Xc}t!9n8@3T`^1@vhNOr~X@($lP| z)K)OKd2r`2rYoak7(lbTpD5I^yAQ0+Wjn<5kB#mhGcac0py+6(e{}x=4UF9r3M*Ud zCB;%>*|1i`#0ogY4rK7ebS+IUi=l{@%LepTK`_}&7>2^YDF9Cal4|Ub()>+B&}8fo z%8>a7H+4pnfVj44q#9!Pz!yK)i>d0WyNBOjS z(|?xx{nz-_($^6GKRTSvv_;;G%YG)9mP`9D&&f{7*ljjb(+WSGc;T4~%MWqZlEH7U{EQ6IVg`?&oNgD7H- zkmMgp?TpcMPL+eG7_F9x(mn@!(L~HSs5(zd-#I7`&zXa&9VzW`D3aPpJfv=8%OTmu zu|vaE<7oS-JjBC4Rgd)fPdV!4z^Ce742NYegAS|Pa31bXZR|O$Zo~hGY@_cH_1>;N zBKP*KBkEr2kI0esKC0f^r;p0L-F#Ht#_vbvNKKXMHkMY(Hr7|F+wfG%V{1I7-j^lE z48K28u zR%swkDTq6ttH)tJA;+=!gu0iHPeg>0g$8C9UIl{|%om^6v9YRE9s7kG)2uJlN8p_= zhz71vdNPt)jJV>N)Bt>DfM)}bjn62im^%^ zkyWJ(y9VO6f-s&|Pxr#pa=L}n>Rv9Nmc0ajsh+^OU&_5*^QF3tOJB;R6ZDmOK4yO< z=i`~L)V+NDmF(rdhKBaY2r0)dh7MUtN%G+}E%%`J!wi|DyUR9=|A$;x8Hq^CcOPeM#NMK?QO1 zl6qf;eHYOrduf^Jn%R5*J2`u2zfbbdaIg;)u<%K@Ie|oOwqMLL@Hn`%7`eOI_6*)PzSJZ<_xGLLN zbX6Vkk%FkcsvdUiHF?nITvLzZ?Q3!zRoB#QbiFRym~dS^!CS8Pri1jQ2BOCg^1fmE z59&7FRuJE6Ao|^qZ9INM-Nx=4^WBW|nPc=EQ4*s6iJds~jQ z`;Y22p8ip`@ox>pUq8x`azCltSozaNdGu@55m~jejTbc#Kh?^ScK%u2M()qOn=F9~ zQ|IFnI7Izo7!3FEsq_10ElssCNq%?}=9hF&x{YgdkKT+Ke^H;_8NbL2K*=xaQ}gOC z^3)9eRUI++R~fNJ193q?`2MEe<(a=l)5NaRKwSMzPFu_0)#FI}U5;bj@9Mq%{&%^z zes|OnGw#TURd>|AoW3J_`BMWi@ve->zpL)0^6mt=jOx@88Fg|TC3Wg?T&mf2fbklt1NiUiGJXq^JIrBfaydx|i{PHNCE7EX{dR^Sbuw zU$ViQf2kWBaZe6A{hoT)KfEV*{o8x$VMqNP(d1&gICp8bW>DMymV^52Z}m)t-<;yE*zxtFjp~!V6Dx*Z9T-;nUVSR5p$$e>)!&9JmipUJ#;PV^ zgNLQP5<^*5HP_+-mZixS1ue|?4VVC(dN5+LPL4)gqhnROFP_t}wEyBgokl#9eUx}? zKI+{PkNYV7s`b&ZGsai3lj*Br=M!JHX^~{+Ez#VOi39bD-#K~>o9_Uo$>N@wpY`Cy z9RRqvuVC(w#r@8D@|1i%S=>d7pGGHN@>4o_*iU0%+W9L3GuEFSsd2v*!ZKMY3l^20 zzS~c%@MrsP3}ES9muL*ou$&d3ST57T+-|@a1GVe~vUF;RFKS_a3RHZx57Nj+R*;g7 zjX@g2b0bI@!jNVfc2b%tcAjgdVdp|KHloQhl&p;G3|oJ#6-G=7R;;cH*2u(H!AdXh z2Wvz(rMY5fd2_r?=2Br7kowD#;EwcB&?8-UZ$d|PUnY^h+1 zv@qYaREpTIm4=pGQ%`{ zeG;blx)!FRjDZP{$Ol#Cj_GK`9^5{-+e zc-^RsMay;?z81DqFzdB2o(4>t_8NAUv{&-8Q43SkfN9e~%T9*|J6f2U227idT6Q`r z{VLPK-0rCOGIr9ilhsMVlxbmZcT#+{@2pX)S)G+S+}K&eS50TdSDSDR%#v^gvr!9E z6RyN#G-=q$GO_ewg!rmSqsD$RDK*xni$=dPx+wj6p^JvE8(r9@PZO6d$awI60RUvb zaM~Yl2K`Sj3&eBaGP++_6QL2%g$OpX@!A-;Y~iy1;%wnEa_9LCarVu6BRVt6n-g1C zjSL;{s${5E3zHD3U=~GctP16k%BpZNQX`8o-Pk6#)XkRVEG;ehs=w-@zq^~__SB%;^ach>7nw2X)(S}v;!1bO=+Jbv&jCyh}w#nbKIh|;2yz$XW@zr|%zc!EWcJaB z-_=Kn-`z(e{to(5Jj~0(}?Hueyl~VuxJg;l4vF7^;(!4 z4VcgvjhNG7Sgy$~IXBIU>zl@#M)7)#;yI+h#)6RCUztbG^w;owuD`O(`^IWuX2vR6 ze=b&|A}+)>t%#7^%(S%9=RZ>~=otePzeNKyvU_fT+{cXrH9|`os1$3#Kn*ir4V2A@ z_q6Ox8Ke|M!5|G^Uk_rr#_#3=ttr}zz?8vC_VWj8nEZTjLyZm5z+??kx>%-#xeb`6 z@9lm*tDgCcIAt!D#A*1v9;c+E^-v8=#!w}$^;#GYV46H#vZh;?X;yXGFeNr&m_}7! z7$)a+<8X~)oHAT7V;invrgFG!M!cnEXT*r6MIB_#$(jkxJU; zjMRwj?U71sRU%QkM0z-O{~cJuFoClaOz&A5cAjd$ygW-IbwABg(%XKvdg{a_vz4KIVYY^y>$4R* zp>s4a3+5>Ey+jLhb&j%I3r^OsGdEfB^_&*wQnKPJ=y44@$&a&hGN3L+iAqF!h!(gMx9!1rK`l3J&{~SIMv=58M7}x&O@!&fsNCE-{n4=Q^rg-_yiQ zdWK|1W4Xo8zTp9f$o?GL1AaNsapSy(cMeZ!*zM?(qZa{?LQ!E=qY&%!~3Qzb_Kq7pG^V z|Lo~h_xuBOGg2kp?L>Eb?ic9yi(IN}ng1Za8CFU63emlC^Ii1&?oFz@_kp^LQzYFw zqFYyf40Vr{Q(bPsgZwTbb=EQjbwXP1HR0K`m+F>1P&ad-Hhz1tjIk44d&hIAd#)qZbw5~_)YU$syRX$1?C+IU zRQIv82gSUMs8dfx|RAJlKw!ym@6AImFQ0W zF&1@Wf26wG(>0dUKhl-u)U;4z>CRfHEbk>+m`e-ULGo2^(Szd5C4CGI#Xg1x`((l| zHFTLiG|n{-)+KXx7SWxx=M47ojGWuL2kYib^{|2HZrIZwb^FV@i!vS*vz7SWPjvUM zUW+lWT}@*?|3KZmC6eC|@?)NmU3by%-Cb1IviL!M^YM|fjhRSvC%!)#bw|HXb@wjT z7}LNd%9utkQOA_8Uc$cM`~R>5QF}yNzS=f6!JoIWyiLd3e0ZBLZ`1QOKi&q+0NxhJ z+k$voGu{@=+nV#X5Z-3sZK1ra1#fG~+gkCq*1Ro@x3%GIZF!rKx3%MK?Ri@V-qw+~ zb>eNEd0RMdGx4@Aye)#ab>(f5du-jBZ|~7O2p&+GQq$5?@-nR>qMHXb56Vi*&P&U- z<~(JJ$a>1OG&jQZbaOG<)V)))=0Sn;moBw74_ev0+>~g3-Jj>W^IQ*}<9Mzo&-LQD zD4y%hbA5QOFVFSkxoDn?;ko`i7t3=4cy1ui4dS`MJU4{r;&^T-&kf_b;XF5j=SK3} zD4vVwxdfgY&2wXTZY;2=Q4P1G0!dGxlEqR;<;>|Tgr3Gc<laL=}8ZEIA5n)No%v>6wz#>dDmgZ!pMlj|{V;S+|IN=TZSo7$lhlZLa zq@`O;OP8hPq-3WKHFe7kVyIwh#==GFl7!UMjO>M`ZmHlB{)~V>K}@$)rdw{eTt-$O zvow1FeAS+vVnuAOH3v?)=m3>+O(RB0zMvZ#FU4R5$rnMju3IPS>SZrn~9&9h0eM+nu#~@+$C5H8VBdN zV6hjTX9bH7 zI~vK~l;rq+ZwSZ>Ab8wTD*8a8?xVnqfiIM91Fgt(ZpF40-6jcv0So~7dmxYVmRlPfJPPt-AcvXU5P&XQ(YJ!ULwklPZzSIZ zayv=cdI0PKz{y5{e zaOdj{c&Nd_>mc_9c{6YMxCZ%QkpBb@^xi%7VU$c>1Nj-yH+$>r;%NX-CBAxw`2zra zBfx4oLM9UAb0ZmMMkD!DMLrhf8$mwWTfVX(z*La$1^E-+a$P3T2meeF00O%~8XEy- zC=Ol+xf$gBz2#XA4i1BS2FT6ca;1k1a}DGxKra1=Sf1oFiN3T-_`=7J%K`98BLihh z0FfZS3v#U5gB<>A zD8dxd11z$`AioYmtx0|jGu?*X}gqk_~a1z800S9-%Ocq4hBB7Ys^&OQwDbfaMNgF93Gt z8UWI@0gNv^PW=evo%P^Bu700(dh~#`6AAM2Aq*our(@^?T!#yh}OvK;1b zDgdegP||2ToyvF?fjoXF!z6hd&?PE8d>!O@Acyj62rx}{0Cfg(JIGaM7cRTk08kEq z+1>_pWDPd~&llbW{Q`2GcR|4=%BN1coG^&t08=$WJUdAU*8}N4Qv7q0&;iLuM~dwy z6S8omIFypFjKs+x0sb>mTu#ZqM~W{Z32SxdQQ|&IE*T}2ir)la7mgCYg-PU>3H0~z z;-5$hKqn@M?Gu6C0rVdU;?P7Pp^bSm;OheIEu8wHNLH{8eavL>`9xt*%c|kPFyCVf zSKbR;b=;}NA0eJA~Nzh(*6MCG0c_+r8IvNZA3%8sox0ZlCZ* z&7FN=!IuPkJBc4p5!yxn2!NXV7>K3t)-sD@WtpoV6G}k|QE;htn#&Hv0L$X2bdMV* z`c4%hq9R~|7FXmMTv%A{c~GF9?{oya4~zLg990m8ic_WvM&nFy1D2}L$V8weC+;!f z;_9hFJ6*z1@#U$))ad+?fGRv3dH~J3U?GeO0k;;%p}m1@ zC}TKq4C8W~L_y3zaq^==f^I7(zVN8c8siu}2@nFS2$`wr1!=3ZIM*LR+jhm}S@fC>UY%xlafLO+QfRJYErl!V{PIuL zuq9F&$)tl|6JZ2NV!vuFQ=Ncv1?Zq>GdnE)4Di9}&imNU zqcdFvsPU@=wi;Xx1zZeZqE`85eLZysN`#sWlxs7p-fqt@N6qz+A#*MEkI0{EE%uo% zbkJ2B#fPWE9o(>SsfxYWp!K6$ag!IVh~HQk&^_Z(FRt95J@TR{>71`G!(3f<9cmBW0mk==f)n#qRZ zRvmGg?-|}R*C~@@Gx~9SvIvaZEshW8p%dp?>9n?Z8MO9|k`U5j@X!FPi1)C{P;>z1 zGALKNw*eor{Oto3)9M0Z9t}C2=Yd z<01q(KkC}9RPNsqV9{wlhTMY+_XgosVG>DaB{FVRPqcvCK6%|FV{l<2pf=vkIJ^H| zOt+nmki&c!oivz}NMcSRiMeBzM&^{JY)-LOQMmFjW6daBS;1HrNRA<8fBjuw?=bI2 zN0`A|(6l?ud!0%9o#wqbh#xp7e&9^n>oo6&&R$SDd#?+wBOf>p?z;=T0|gMb%d}Wt z2NraONiz;ASW4b_2juVIzCTrfLjfqmK0G-qlIfCd=w9Z9uV6xf8xn2Uv3OUzufIPJt_ykXsX ztSjnamf>H;QZosbR_`i01&b_1R1HN}%~(?bUu|*58!fQJM#&9YyhmM|p)2mS5Z+OJ zc*2d>y8#6i?Q#;Q%!FP3zjcI2jy|b6~$#*A`cJV zgzm*AT}=va&4aabJFK0XL3{H)+_xU+4Wo$>P6SuQ6^7!OIFcZRy7f^TN?3o;^??!C zQP3-tdseveJk08kiTZg<6m}fe;fZyyz1c|@!2!{X{@UNUj?DyODxdA zd}Afbs8~`FSo?JL_LIptdnA$=&>Fl@Ig_d!qeFpJWuZ&7=Mt>{XjK9Y!>Fb4s&sE^ zj{GF3<VsHY+gNEi0)>x&5Wj*KMPjiN<9&@Fzav?Gyh}N$E3pr2YMl| zf7uuy7B;!kxdth-(jTYyP_#xycqsL=l=v~ZMk>&YP`7BbvLFDro^ZfcL%H_ARDwaQ zlrD=X!)B#Lf#K=#7LpuT3v-jP|b zF)e4(MyyRT5b!Dj;GUOpA88EOo-CdQ zK>98Oz?5a&rHujmQ4oTH<&6c0QD8tpN@KxE6yVb9wlo%;PZlT5gSy*SJkhkiS>3~Z;@;M8Q!x#lS)at`##Bs=QL zQ@96#>sqNacPXGsa^b>DK#AC9p0M0*2bB9AC`Z@xNZ}W+u5CzdLh3`L{)JQ}QpHGp zgVfVV)gbi*Qhy`05GjKmsAQyCAvF!D9!QM`s&M5kgW=gL;N5AyWpVl*3AOu&GWFH2 zXhd*;@LT|)YYH~oVetla0YrZh8Uv&VOUkOvL zQr`zu@u<}Ipp=)=Hh{Q(3lM*rFZ9!WmnE7Oz>U|zEcn0zG^7Y><~a2q00S1|FvA{m zyy;DG7WuL6z2I{T9yocdfK;lk_)TMUHb5W?3y6Tc1C zZ=lG6?9@*J8KL*av)jav7r+CKky&E(0^#vt-8n4yB-k4rGQvJ#-}l>0aPxL3w-d~Q z^LP;o2$ZumK2(l+5@hps5Amr~A*yvnk46SyqP^Qg+?y&4jO&*P^G>>8B?geQz9X>U z+SqWVz`M_C2-h`4akI`Kc25)f41P@EB*A(C2H@(4`veFRE`m<|&)tEGx0&y_o>ri} z4CT+I37y$CC%VBibMsy0?zRtT?Cd5UNEeoc-_L-+qz#AuS0pR-)o{WCK$kPbi30 zVA0hdD;Kkcw{>l|V?d5i>M#(;hqcmagZsWX^9f;u-3WUOBLFIkI|3Dr(6wgR`V^a> zX<1vGh$lxehbL#TTT(8zV5_n?9!{XZc<{X`NRf@VG~EovlN&e~K5&aF3`KFsEtGK3 zIXv4Xg_z| zA)rwMcOMcVZIc}vkY{mjz<@1lABJ0zwG!!EYnQUZeg*-q(NP^5EZ!IcN6HsG0=C3S z{mpsP^BNJzy-hU~uLaKkUGVm`O7u>~Q9J+wtSpX(znIs;Pq58A75C3Da>Ic~x&w9M zAU$(#AiaUxi#~T>L0#tt{A*co$dXa9Fg-opa?ovZ96b1k4xXXZh4(z@5JMLWEyE>` zxNdDg*N)FDWoy>!8Pt~|693K?+Sw(NhGc)XW?LisO(|GK@=Tkz{U-uJ9A7 zbF1S2*`=I!@hPIFu~{&aAz>XARaoKfr0Iwmo*4%l6c~LeIn)8U1tX2) z;?O6Ampk_TUE0CZ2k)USoE2mWC;lk@@`Nx(*X&1ea1QK2Z~Q3E%Mtpw+WjNig>}L~ zHy&GmEPo?Mh+%b$Z;9t~g=}5@Ezx2Xrs4;Pxp zMAjy>?pM(aBse!{m>b~&>>2@Z(!FP)>Dh@-3E`pCflDV$op61t zw`Mr?UlL|GVLJ35%z$f!S+Ud#EIIYB5l|P!?NQfs1#$)M@I1}HnG3#$Ny!)57;|Xc zC*l1O-m7nh^f>jysrwV&?%PrKgz3=#H67gB6x*}Fwp0JZbSd!3s_uKD`>Bvx)1h}HK{(r#aNKnmj+KDys@W+Ah^HDB zGp}&AA@78=U;Q z&BZsK5+ePvX9qmNV%1adW;+}l#hHIw@kPPPzZfgL3_Ljv1JmUhUGa(?4(uG&mxF|< zndr(__@ThB87>(w1tw17R00foIE*mT20 z_Q29zp1lT^6X*$j@(_UQko^`Fh9(KwFE9>C_7Cz;N#}I450Bi}0e}g6ng7Ol*R-_+b zDTd9@cBtbAVYvLh}@Kr;uOeBjsH>o^FUyL8{v%oJO?``mk?4uZiVn4 zR<|WY{CTAiu8Y1Rwp=CHbbBs~!YaYs-g*V*hPjG`hjYWsXI6X-HL(}VVa^q?W|gp4 z_ewS5OyUu{(5?OK%LqOJ;1i9&V=jxn1%j*nGu0@Ed1k&h%zRBU=0;m!Oc)>@z&ZOUlROR_$t0qi-gM@;jioA&#BjV&=pUS?aP*f&|01DV@K}X&rdk|QBn*#Ag?@ljw=>=sp9eZy z79L_9N8u&c)$fS_c91PG@L#IM*NTMRy5^U~FN%cd;9QWC;q<944=jfJ4Bh+Ri#>T^ zitf%OaRo0Jb@|_k8+jqzZU`^J(PsW!%q(U+4}V=>j}+^Pru&Ct2x-e-lo%~B55*W;vOs<(;z z)(Cr2EI_l2A7g?i?06JNf8nDXI3s^E<;PS0y6I|zR5axhv@D_Ah{BpVK%`T`Lm-4U-}Facst=A27(Vn@xXxbNP}I1 z6d>gngcJUL$sv14I*kvfD7?$Yqd@u#A3VYeirN*F4>0LC34f7)xC#FvF?XGc@h%t- z*ltPZpW!dd=oxM<;lmY3I#{?ip}Fd9CaEp+n~Co`g|;!RB(aVufqOMPWHElNz(O|4 zn((_xYWCjLY5=Z%UTTA>8eYBeut|RzW(39KH3<(+`pYm6QND%pjeTWM7=QZI= zuZ9_4JF}{ZAPlxk7|=6K_&q3pOB4P`%0JMAKY{W+P54tKK0H6FFo7TOJ3$C)H&5nO zA+O=c7TL8z+jc8tajmIA29!gLL2;=h)-gL^?s^}a#1s_opkkcb-p4-ic@VQJ$rNyr z)-iHADV@a4v%33=>(>gcV=jXcoNzDABu4OumU!Hz{I;_R|9Qe@{+0{`_`p`!m-)F~ zEcv8QYdca@uAJfl(GoDn2NMH4l}w@hDG`K!oAMv0{0nfqfX7hEPow;)0|_5qT}Vd; z@LRy7@?9J%)~pkn+qY3*{zC+~l>+lA&_rh|?AfJb6~%ApOYrb)N;;keekcTvkM+F| zf!bl_Q9d>F62aRUe6sF+Y@rVR8bkQf_m=>8i}F_wBm82j^daTni6{Ktl>aGlz~FOu z@8dYdztbN1c7}PGO3zCQP>DND-gxE`Rj3$13_VGu9?Cab2>%7jzf1Wy;t1bN`FdC) zFhlqETN_$?^kZ#dzPr&=8--#Uo!;jUCV`ceLyiG)vo^3DvW z{10hB{VCo8d^1W-*ki0EXtqIhv4NQuu^_FEkbw-D;))t{|OCf z4CU+fScEzTp7Ub=8Kyw`3pb}!q4!YYpflxfru@PlgfIP00%Y$|{$aR1#ACMfmthV8 zA5&f6oobL(Qa-*wAqVl#d_fJ3??41YsQ3!ySNA6TOv=Aa4dL4#@8egBk4PZ=!&F!g zeC#nk?#81)`U^Zeqyi(wmtNjS8{p&6eE1mQCr}}NK8yT?bfYf!xEJLYnFwC`*$U_k zqWm_G5Wc))c$o6-t7(sA2eYZ*v3R2JDs`Mr`P=ErcAWByX^#(4I~K~fQv7LJD{>~_ zah248_sAB;PJVI%N*k!)Yg&wWABo3S%Fm;-0CyR9?4bOaw5sP2HnWHF8N5w^L;4;V z&W9*}WLLs3mZUKLCqRHhFto`KaMGCRndm0_lGD^siL`()Oee_@!(68POuFPwqcFI^6a>Scsn>wpaLsZxGy_^yCFQJFP7o#2Wt}siZ3g@k6_?qO|OJTbJJDvYLlH(j8fp#1T`$BT)3n@QrxTd+T1 zgNOnBKxcvU2|geuQafWt5c}{u05boQso-OJQCUYFET;UAXiDFs{9MW(O!*xs-v)fl z(Do)7T1D~yrX3hf@x^}N9~JsE*_EuLhVV7F_fbj>oewAc9aQ)#S_vzE$@=#!2>J z6ZR=x5Gv@jnI#E)naAlEFQ-~rvIBZo2h&)5{zc$p2i9Xi zr2dIyGgWwE4pG=c6+Wc=>vTQnMfv-wp-?)Ol+B!=`0@RS9qGqyAUsO(@~@2%FZsVn z1?QWj=n6IDpcfD6w;Q1JGsWXK9^S_tioZRY@TH&DAOIEy?D4H8c)tMfj|+u?Ud`kb zwE_j?htZW$-qW?G{1){7SH3t!QvL$E9hawB6m^UrhOlL3ekRPYw9 z>S0uC7c9wGT(wPBx(O6tM63Eyik~a<2aC^a5+)6vpOTxgpzi`ECoLC#R^K<4$xq3d zOB?+e_#L#|h+#6at#Tu}{M07lTV3SBH0xYY$Vi!=nTFs6%bo(*d}dKbu61e7Q)8Cq zWn0C{mxbN|x!KF$C)L(;@t2o{*Mi{x$8MdQYlWXnizTlJlR`j}ma{Aetl_V-ows&tVfi21rJ8lt9i1#0k@)J#OjPVs~w+N5v{~ZE(5o6x%-b$ReRWODf zqxW9N=mzf?Zehh1e+}*+#y=7j8YW*_OK7RDAB*yXJ4UqWl~hQxYOJtRIHj56%dvvtI<^pKN%V= z-kuZ{)jV-Eag_=q%ZMpC-67P;QO3Xz9E3knOqm?@TEnmN$#3-k_wWB^;D0ml|2+dG Jwy}%+{}1C#kYE4+ delta 27598 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 0) { +const char *get_previous_command() +{ + if (currentHistoryIndex > 0) + { currentHistoryIndex--; return commandHistory[currentHistoryIndex]; } return NULL; } -const char* get_next_command() { - if (currentHistoryIndex < historyCount - 1) { +const char *get_next_command() +{ + if (currentHistoryIndex < historyCount - 1) + { currentHistoryIndex++; return commandHistory[currentHistoryIndex]; } return NULL; } - const void clear() { print_set_color(PRINT_COLOR_WHITE, PRINT_COLOR_BLACK); // Set text color @@ -79,113 +82,127 @@ const void clear() print_setup_prompt(); } - - - -void halt(){ +void halt() +{ print_str("[ WARN ] HALT\n"); - while (1) {} + while (1) + { + } } -void commandHandler(char* command) { +void commandHandler(char *command) +{ printf("\n"); - if (strcmp(command, "cls") == 0) { + if (strcmp(command, "cls") == 0) + { clear(); - } else if (strcmp(command, "knp") == 0) { + } + else if (strcmp(command, "knp") == 0) + { kpanic(1); - } else if (int_strncmp(command, "echo ", 5) == 0) { - char* message = command + 5; // Skip the "echo " part + } + else if (int_strncmp(command, "echo ", 5) == 0) + { + char *message = command + 5; // Skip the "echo " part print_str("\n"); print_str(message); print_str("\n"); - } else if (int_strncmp(command, "cwin", 4) == 0) { + } + else if (int_strncmp(command, "cwin", 4) == 0) + { // Define window properties Window myWindow; - int x = 8; // X position of the window - int y = 4; // Y position of the window - int width = 30; // Width of the window - int height = 10; // Height of the window - uint8_t borderColor = PRINT_COLOR_RED; // Border color + int x = 8; // X position of the window + int y = 4; // Y position of the window + int width = 30; // Width of the window + int height = 10; // Height of the window + uint8_t borderColor = PRINT_COLOR_RED; // Border color uint8_t backgroundColor = PRINT_COLOR_BLUE; // Background color - + // Create and display the window create_window(&myWindow, x, y, width, height, borderColor, backgroundColor, "Main Window"); - + // Print text inside the window print_set_color(PRINT_COLOR_WHITE, PRINT_COLOR_BLUE); // Set text color print_text_in_window(&myWindow, 2, 2, "Window Manager is a "); print_text_in_window(&myWindow, 2, 3, "Work in progress, Sorry :("); // Print text inside the window - print_text_in_window(&myWindow, 2, 4, "do [ cls ] to clear"); // Print text inside the window - - - - } else if (int_strncmp(command, "exit", 4) == 0) { + print_text_in_window(&myWindow, 2, 4, "do [ cls ] to clear"); // Print text inside the window + } + else if (int_strncmp(command, "exit", 4) == 0) + { printf("Driver Call [ shutdown_system(); ] \n"); shutdown_system(); - - - } else if (int_strncmp(command, "panic_test", 10) == 0) { - int _y = 1/0; + } + else if (int_strncmp(command, "panic_test", 10) == 0) + { + int _y = 1 / 0; printf("Output %d\n", _y); - - } else if (int_strncmp(command, "test", 4) == 0) { - + } + else if (int_strncmp(command, "test", 4) == 0) + { + //// Test custom malloc and free - //void* block1 = malloc(32); - //void* block2 = malloc(64); - //void* block3 = malloc(128); - // + // void* block1 = malloc(32); + // void* block2 = malloc(64); + // void* block3 = malloc(128); + // //// List used blocks - //list_used_blocks(); - // + // list_used_blocks(); + // //// Free a block and check again - //free(block2); - //printf("\nAfter freeing block2:\n"); - //list_used_blocks(); + // free(block2); + // printf("\nAfter freeing block2:\n"); + // list_used_blocks(); // - //void* block4 = malloc(64); + // void* block4 = malloc(64); // - //list_used_blocks(); - - + // list_used_blocks(); + create_game(); - - } else if (int_strncmp(command, "split", 5) == 0) { + } + else if (int_strncmp(command, "split", 5) == 0) + { printf("Kernel Call [ split_string(); ]\n"); - + // Check the length of the command string and use it properly - char** new_command = split_string(command, ",", strlen(command)); - - //char** new_command = {{NULL, NULL, NULL, NULL}}; - - if (new_command) { + char **new_command = split_string(command, ",", strlen(command)); + + // char** new_command = {{NULL, NULL, NULL, NULL}}; + + if (new_command) + { // Add a loop to print all the elements in the new_command array for debugging - for (int i = 0; new_command[i] != NULL; i++) { + for (int i = 0; new_command[i] != NULL; i++) + { printf("new_command[%d]: %s\n", i, new_command[i]); } - - //halt(); // Debug halt - + + // halt(); // Debug halt + // Ensure that new_command[1] exists before accessing it - if (new_command[1] != NULL) { + if (new_command[1] != NULL) + { printf("%s\n", new_command[1]); - } else { + } + else + { printf("Error: new_command[1] is NULL\n"); } - } else { - printf("Error: split_string returned NULL\n"); + } + else + { + printf("Error: split_string returned NULL\n"); + } } - - - } else { + else + { printf("Unknown command: %s\n", command); } } - - -void print_setup_prompt() { +void print_setup_prompt() +{ move_cursor(0, 0); print_set_color(PRINT_COLOR_LIGHT_RED, PRINT_COLOR_BLACK); print_str("-------------------- "); @@ -197,34 +214,58 @@ void print_setup_prompt() { print_str("V 1.5.01\n"); } +int test_basic() +{ + InterpreterState state; + init_state(&state); + const char *program[] = { + "LET A = 10", + "LET B = 20", + "PRINT A + B", + "LET A = \"Hello\"", + "LET B = \" World\"", + "PRINT A + B", + "END", + + }; + + for (size_t i = 0; i < sizeof(program) / sizeof(program[0]); i++) + { + execute_line(&state, program[i]); + if (!state.running) + break; + } + + return 0; +} + +void kernel_main() +{ -void kernel_main() { - init_keyboard_driver(); - - - - + idt_install(); - - + print_str("[ WARN ] Skipping File System Initialization...\n[ INFO ] Do [ fsinit ] to initalize the filesystem\n"); - - if (fat12_init() == 0) { + + if (fat12_init() == 0) + { printf("Filesystem mounted\n"); fat12_read_root_directory(); - + fat12_dir_entry_t entry; - if (fat12_find_file("HELLOTXT", &entry)) { + if (fat12_find_file("HELLOTXT", &entry)) + { printf("File found: HELLO.TXT\n"); } } - - - print_setup_prompt(); + clear(); + test_basic(); + + print_setup_prompt(); print_str(" > "); @@ -232,57 +273,64 @@ void kernel_main() { char key; bool keydown = false; char commandBuffer[COMMAND_BUFFER_SIZE]; - size_t commandLength = 0; // To track the length of the current command + size_t commandLength = 0; // To track the length of the current command - - while (1) { + while (1) + { key = read_key(); - if (key != 0) { - if (!keydown) { + if (key != 0) + { + if (!keydown) + { CursorPosition pos = get_print_cursor_pos(); - move_cursor(pos.x,pos.y); - if (key == 10) { // Enter key - commandBuffer[commandLength] = '\0'; // Null-terminate the command + move_cursor(pos.x, pos.y); + if (key == 10) + { // Enter key + commandBuffer[commandLength] = '\0'; // Null-terminate the command commandHandler(commandBuffer); // Reset command buffer for the next input commandLength = 0; print_str(" > "); - - } else if (key == BACKSPACE_KEY) { // Backspace key - if (commandLength > 0) { + } + else if (key == BACKSPACE_KEY) + { // Backspace key + if (commandLength > 0) + { // Remove the last character from the buffer commandLength--; - commandBuffer[commandLength] = '0'; // Null-terminate after removal + commandBuffer[commandLength] = '0'; // Null-terminate after removal // Clear the character from the screen (overwrite with space) // Move cursor back one position - offset_print_cursor(-1,0); - print_char(' '); // Overwrite the character - offset_print_cursor(-1,0); // Move cursor back one position(because its moved left one by the rpintf) - - + offset_print_cursor(-1, 0); + print_char(' '); // Overwrite the character + offset_print_cursor(-1, 0); // Move cursor back one position(because its moved left one by the rpintf) } - - } else { - if (key >= 32 && key <= 126) { // Check if the key is a printable character - if (commandLength < COMMAND_BUFFER_SIZE - 1) { - commandBuffer[commandLength++] = key; // Append character to buffer + } + else + { + if (key >= 32 && key <= 126) + { // Check if the key is a printable character + if (commandLength < COMMAND_BUFFER_SIZE - 1) + { + commandBuffer[commandLength++] = key; // Append character to buffer commandBuffer[commandLength] = '\0'; // Null-terminate the buffer - print_char(key); // Print key to the screen + print_char(key); // Print key to the screen } } } keydown = true; } - } else { + } + else + { keydown = false; } - + // int x = 100/0; } kpanic(2); - } diff --git a/src/impl/x86_64/basic.c b/src/impl/x86_64/basic.c new file mode 100644 index 0000000..0be33eb --- /dev/null +++ b/src/impl/x86_64/basic.c @@ -0,0 +1,184 @@ +#include "memory.h" +#include "print.h" +#include "strings.h" +#include "stdint.h" +#include "stddef.h" +#include "basic.h" + + + +// Utility: Find or create a variable by name +Variable* get_variable(InterpreterState* state, const char* name) { + for (size_t i = 0; i < state->variable_count; i++) { + if (strcmp(state->variables[i].name, name) == 0) { + return &state->variables[i]; + } + } + if (state->variable_count < MAX_VARIABLES) { + Variable* var = &state->variables[state->variable_count++]; + strncpy(var->name, name, sizeof(var->name) - 1); + var->name[sizeof(var->name) - 1] = '\0'; + var->value = 0; + var->str_value = NULL; + return var; + } + return NULL; // No space for more variables +} + +// Parse an integer from a string, skipping leading whitespace +int parse_int(const char* str) { + while (*str == ' ') str++; // Skip leading spaces + int result = 0; + int sign = 1; + if (*str == '-') { + sign = -1; + str++; + } + while (*str >= '0' && *str <= '9') { + result = result * 10 + (*str - '0'); + str++; + } + return result * sign; +} + + + + +const char* evaluate_expression(InterpreterState* state, const char* expr) { + char buffer[64]; + strncpy(buffer, expr, sizeof(buffer) - 1); + buffer[sizeof(buffer) - 1] = '\0'; + + char* plus = strrchr(buffer, '+'); + if (plus) { + *plus = '\0'; + + // Evaluate the left and right sides only once + const char* left = evaluate_expression(state, buffer); + const char* right = evaluate_expression(state, plus + 1); + + // Debug output + printf("DEBUG: Left operand: %s\n", left); + printf("DEBUG: Right operand: %s\n", right); + + // Check if both sides are numeric + int left_is_number = (left[0] >= '0' && left[0] <= '9') || (left[0] == '-' && left[1] >= '0' && left[1] <= '9'); + int right_is_number = (right[0] >= '0' && right[0] <= '9') || (right[0] == '-' && right[1] >= '0' && right[1] <= '9'); + + static char result[128]; + + if (left_is_number && right_is_number) { + // Parse the left and right operands + int left_value = parse_int(left); + int right_value = parse_int(right); + + // Correct addition logic + int sum = left_value + right_value; + + // Debug addition + printf("DEBUG: Adding %d + %d = %d\n", left_value, right_value, sum); + + // Format the result as a string + snprintf(result, sizeof(result), "%d", sum); + } else { + // Concatenate strings + snprintf(result, sizeof(result), "%s%s", left, right); + + // Debug string concatenation + printf("DEBUG: Concatenating strings: %s + %s = %s\n", left, right, result); + } + return result; + } + + // Trim leading and trailing spaces + const char* start = buffer; + while (*start == ' ') start++; + + char* end = buffer + strlen(buffer) - 1; + while (end > start && *end == ' ') *end-- = '\0'; + + if (start[0] >= 'A' && start[0] <= 'Z') { + Variable* var = get_variable(state, start); + if (var) { + static char var_result[64]; + if (var->str_value) { + strncpy(var_result, var->str_value, sizeof(var_result) - 1); + var_result[sizeof(var_result) - 1] = '\0'; + return var_result; + } else { + snprintf(var_result, sizeof(var_result), "%d", var->value); + return var_result; + } + } + } + + if (start[0] == '"') { + // String literal + size_t len = strlen(start); + if (start[len - 1] == '"') { + static char str_result[64]; + strncpy(str_result, start + 1, len - 2); + str_result[len - 2] = '\0'; + return str_result; + } + } + + static char int_result[16]; + snprintf(int_result, sizeof(int_result), "%d", parse_int(start)); + return int_result; +} + + + +// Interpret a single line of code +void interpret_line(InterpreterState* state, const char* line) { + if (strncmp(line, "LET", 3) == 0) { + const char* rest = line + 3; + while (*rest == ' ') rest++; + const char* equals = strchr(rest, '='); + if (!equals) return; + + char var_name[16]; + strncpy(var_name, rest, equals - rest); + var_name[equals - rest] = '\0'; + + // Trim trailing spaces from var_name + size_t len = strlen(var_name); + while (len > 0 && var_name[len - 1] == ' ') { + var_name[--len] = '\0'; + } + + Variable* var = get_variable(state, var_name); + if (var) { + const char* value = evaluate_expression(state, equals + 1); + if (value[0] >= '0' && value[0] <= '9') { + var->value = parse_int(value); + var->str_value = NULL; + } else { + var->str_value = malloc(strlen(value) + 1); + strcpy(var->str_value, value); + } + } + } else if (strncmp(line, "PRINT", 5) == 0) { + const char* rest = line + 5; + while (*rest == ' ') rest++; + const char* value = evaluate_expression(state, rest); + printf("%s\n", value); + } else if (strncmp(line, "END", 3) == 0) { + printf("Program terminated.\n"); + state->running = 0; + } +} + +// Initialize interpreter state +void init_state(InterpreterState* state) { + state->variable_count = 0; + state->running = 1; +} + +// Execute a single line in the context of a state +void execute_line(InterpreterState* state, const char* line) { + printf("Executing line: %s\n", line); // Debugging + interpret_line(state, line); +} + diff --git a/EYOSx86-main/src/impl/x86_64/boot/header.asm b/src/impl/x86_64/boot/header.asm similarity index 100% rename from EYOSx86-main/src/impl/x86_64/boot/header.asm rename to src/impl/x86_64/boot/header.asm diff --git a/EYOSx86-main/src/impl/x86_64/boot/isr.asm b/src/impl/x86_64/boot/isr.asm similarity index 93% rename from EYOSx86-main/src/impl/x86_64/boot/isr.asm rename to src/impl/x86_64/boot/isr.asm index ae52648..4bb2d71 100644 --- a/EYOSx86-main/src/impl/x86_64/boot/isr.asm +++ b/src/impl/x86_64/boot/isr.asm @@ -1,139 +1,139 @@ -; isr.asm - ISR assembly stubs - -global isr0, isr1, isr2, isr3, isr4, isr5, isr6, isr7, isr8, isr9, isr10, isr11, isr12, isr13, isr14, isr15 -global isr16, isr17, isr18, isr19, isr20, isr21, isr22, isr23, isr24, isr25, isr26, isr27, isr28, isr29, isr30, isr31 -extern isr_common_handler - -section .text - -; ISRs 0 to 13 (no error code pushed by CPU) -isr0: - cli - push 0 ; Push error code (none for isr0) - push 0 ; Push interrupt number - jmp isr_common_handler - -isr1: - cli - push 0 - push 1 - jmp isr_common_handler - -isr2: - cli - push 0 - push 2 - jmp isr_common_handler - -isr3: - cli - push 0 - push 3 - jmp isr_common_handler - -isr4: - cli - push 0 - push 4 - jmp isr_common_handler - -isr5: - cli - push 0 - push 5 - jmp isr_common_handler - -isr6: - cli - push 0 - push 6 - jmp isr_common_handler - -isr7: - cli - push 0 - push 7 - jmp isr_common_handler - -isr8: - cli - push 0 - push 8 - jmp isr_common_handler - -isr9: - cli - push 0 - push 9 - jmp isr_common_handler - -isr10: - cli - push 0 - push 10 - jmp isr_common_handler - -isr11: - cli - push 0 - push 11 - jmp isr_common_handler - -isr12: - cli - push 0 - push 12 - jmp isr_common_handler - -isr13: - cli - push 0 - push 13 - jmp isr_common_handler - -; ISR 14 (Page Fault) requires error code pushed by CPU -isr14: - cli - push 14 ; Push interrupt number - jmp isr_common_handler - -; ISRs 15 to 31 (no error code pushed by CPU) -isr15: - cli - push 0 - push 15 - jmp isr_common_handler - -isr16: - cli - push 0 - push 16 - jmp isr_common_handler - -isr17: - cli - push 0 - push 17 - jmp isr_common_handler - -isr18: - cli - push 0 - push 18 - jmp isr_common_handler - -isr19: - cli - push 0 - push 19 - jmp isr_common_handler - -isr20: - cli - push 0 - push 20 - jmp isr_common_handler - - - - +; isr.asm - ISR assembly stubs + +global isr0, isr1, isr2, isr3, isr4, isr5, isr6, isr7, isr8, isr9, isr10, isr11, isr12, isr13, isr14, isr15 +global isr16, isr17, isr18, isr19, isr20, isr21, isr22, isr23, isr24, isr25, isr26, isr27, isr28, isr29, isr30, isr31 +extern isr_common_handler + +section .text + +; ISRs 0 to 13 (no error code pushed by CPU) +isr0: + cli + push 0 ; Push error code (none for isr0) + push 0 ; Push interrupt number + jmp isr_common_handler + +isr1: + cli + push 0 + push 1 + jmp isr_common_handler + +isr2: + cli + push 0 + push 2 + jmp isr_common_handler + +isr3: + cli + push 0 + push 3 + jmp isr_common_handler + +isr4: + cli + push 0 + push 4 + jmp isr_common_handler + +isr5: + cli + push 0 + push 5 + jmp isr_common_handler + +isr6: + cli + push 0 + push 6 + jmp isr_common_handler + +isr7: + cli + push 0 + push 7 + jmp isr_common_handler + +isr8: + cli + push 0 + push 8 + jmp isr_common_handler + +isr9: + cli + push 0 + push 9 + jmp isr_common_handler + +isr10: + cli + push 0 + push 10 + jmp isr_common_handler + +isr11: + cli + push 0 + push 11 + jmp isr_common_handler + +isr12: + cli + push 0 + push 12 + jmp isr_common_handler + +isr13: + cli + push 0 + push 13 + jmp isr_common_handler + +; ISR 14 (Page Fault) requires error code pushed by CPU +isr14: + cli + push 14 ; Push interrupt number + jmp isr_common_handler + +; ISRs 15 to 31 (no error code pushed by CPU) +isr15: + cli + push 0 + push 15 + jmp isr_common_handler + +isr16: + cli + push 0 + push 16 + jmp isr_common_handler + +isr17: + cli + push 0 + push 17 + jmp isr_common_handler + +isr18: + cli + push 0 + push 18 + jmp isr_common_handler + +isr19: + cli + push 0 + push 19 + jmp isr_common_handler + +isr20: + cli + push 0 + push 20 + jmp isr_common_handler + + + + diff --git a/EYOSx86-main/src/impl/x86_64/boot/main.asm b/src/impl/x86_64/boot/main.asm similarity index 100% rename from EYOSx86-main/src/impl/x86_64/boot/main.asm rename to src/impl/x86_64/boot/main.asm diff --git a/EYOSx86-main/src/impl/x86_64/boot/main64.asm b/src/impl/x86_64/boot/main64.asm similarity index 100% rename from EYOSx86-main/src/impl/x86_64/boot/main64.asm rename to src/impl/x86_64/boot/main64.asm diff --git a/EYOSx86-main/src/impl/x86_64/driver/disk_io.c b/src/impl/x86_64/driver/disk_io.c similarity index 96% rename from EYOSx86-main/src/impl/x86_64/driver/disk_io.c rename to src/impl/x86_64/driver/disk_io.c index 1cc5bd8..31bdb17 100644 --- a/EYOSx86-main/src/impl/x86_64/driver/disk_io.c +++ b/src/impl/x86_64/driver/disk_io.c @@ -1,43 +1,43 @@ -// disk_io.c - -#include "disk_io.h" -#include "print.h" // Assuming you have a function for kernel printing - -#define SECTOR_SIZE 512 - -// Function to read sectors from disk -int disk_read(uint32_t lba, void *buffer, uint32_t size) { - // lba: logical block address - // buffer: where to store the read data - // size: number of bytes to read - - if (size % SECTOR_SIZE != 0) { - printf("Read size must be a multiple of 512 bytes\n"); - return -1; - } - - for (uint32_t i = 0; i < size / SECTOR_SIZE; i++) { - // Placeholder for actual disk sector read. Replace with proper implementation - if (!bios_read_sector(lba + i, buffer + (i * SECTOR_SIZE))) { - printf("Error reading sector from disk\n"); - return -1; - } - } - - return 0; -} - -// Placeholder function to simulate reading sectors from the disk -// Replace this with actual disk reading logic depending on the platform -int bios_read_sector(uint32_t lba, void *buffer) { - // Simulate disk sector read - // In an actual kernel, you'd use interrupts or other mechanisms to read from disk - - // For now, just zero out the buffer to simulate - for (int i = 0; i < SECTOR_SIZE; i++) { - ((uint8_t*)buffer)[i] = 0; // Fill buffer with zeros - } - - return 1; // Success -} - +// disk_io.c + +#include "disk_io.h" +#include "print.h" // Assuming you have a function for kernel printing + +#define SECTOR_SIZE 512 + +// Function to read sectors from disk +int disk_read(uint32_t lba, void *buffer, uint32_t size) { + // lba: logical block address + // buffer: where to store the read data + // size: number of bytes to read + + if (size % SECTOR_SIZE != 0) { + printf("Read size must be a multiple of 512 bytes\n"); + return -1; + } + + for (uint32_t i = 0; i < size / SECTOR_SIZE; i++) { + // Placeholder for actual disk sector read. Replace with proper implementation + if (!bios_read_sector(lba + i, buffer + (i * SECTOR_SIZE))) { + printf("Error reading sector from disk\n"); + return -1; + } + } + + return 0; +} + +// Placeholder function to simulate reading sectors from the disk +// Replace this with actual disk reading logic depending on the platform +int bios_read_sector(uint32_t lba, void *buffer) { + // Simulate disk sector read + // In an actual kernel, you'd use interrupts or other mechanisms to read from disk + + // For now, just zero out the buffer to simulate + for (int i = 0; i < SECTOR_SIZE; i++) { + ((uint8_t*)buffer)[i] = 0; // Fill buffer with zeros + } + + return 1; // Success +} + diff --git a/EYOSx86-main/src/impl/x86_64/driver/fat12.c b/src/impl/x86_64/driver/fat12.c similarity index 100% rename from EYOSx86-main/src/impl/x86_64/driver/fat12.c rename to src/impl/x86_64/driver/fat12.c diff --git a/EYOSx86-main/src/impl/x86_64/driver/fs.c b/src/impl/x86_64/driver/fs.c similarity index 100% rename from EYOSx86-main/src/impl/x86_64/driver/fs.c rename to src/impl/x86_64/driver/fs.c diff --git a/EYOSx86-main/src/impl/x86_64/driver/idt.c b/src/impl/x86_64/driver/idt.c similarity index 100% rename from EYOSx86-main/src/impl/x86_64/driver/idt.c rename to src/impl/x86_64/driver/idt.c diff --git a/EYOSx86-main/src/impl/x86_64/driver/io.c b/src/impl/x86_64/driver/io.c similarity index 100% rename from EYOSx86-main/src/impl/x86_64/driver/io.c rename to src/impl/x86_64/driver/io.c diff --git a/EYOSx86-main/src/impl/x86_64/driver/irs.c b/src/impl/x86_64/driver/irs.c similarity index 100% rename from EYOSx86-main/src/impl/x86_64/driver/irs.c rename to src/impl/x86_64/driver/irs.c diff --git a/EYOSx86-main/src/impl/x86_64/driver/keydriver.c b/src/impl/x86_64/driver/keydriver.c similarity index 100% rename from EYOSx86-main/src/impl/x86_64/driver/keydriver.c rename to src/impl/x86_64/driver/keydriver.c diff --git a/EYOSx86-main/src/impl/x86_64/driver/memory.c b/src/impl/x86_64/driver/memory.c similarity index 100% rename from EYOSx86-main/src/impl/x86_64/driver/memory.c rename to src/impl/x86_64/driver/memory.c diff --git a/EYOSx86-main/src/impl/x86_64/driver/print.c b/src/impl/x86_64/driver/print.c similarity index 86% rename from EYOSx86-main/src/impl/x86_64/driver/print.c rename to src/impl/x86_64/driver/print.c index d862def..4a5ba36 100644 --- a/EYOSx86-main/src/impl/x86_64/driver/print.c +++ b/src/impl/x86_64/driver/print.c @@ -334,6 +334,48 @@ int my_sscanf(const char *input, const char *format, char *output) { return match_count; } +snprintf(char* buffer, size_t size, const char* format, ...) { + va_list args; + va_start(args, format); + + const char* traverse = format; + size_t written = 0; + + while (*traverse && written < size - 1) { + if (*traverse == '%' && *(traverse + 1)) { + traverse++; + if (*traverse == 's') { + const char* str = va_arg(args, const char*); + while (*str && written < size - 1) { + buffer[written++] = *str++; + } + } else if (*traverse == 'd') { + int num = va_arg(args, int); + char num_buffer[16]; + int num_len = 0; + if (num < 0) { + if (written < size - 1) buffer[written++] = '-'; + num = -num; + } + do { + num_buffer[num_len++] = '0' + (num % 10); + num /= 10; + } while (num > 0); + while (num_len > 0 && written < size - 1) { + buffer[written++] = num_buffer[--num_len]; + } + } + } else { + buffer[written++] = *traverse; + } + traverse++; + } + + buffer[written] = '\0'; + va_end(args); + return written; +} + void printf(const char* format, ...) { va_list args; diff --git a/EYOSx86-main/src/impl/x86_64/driver/vector.c b/src/impl/x86_64/driver/vector.c similarity index 96% rename from EYOSx86-main/src/impl/x86_64/driver/vector.c rename to src/impl/x86_64/driver/vector.c index b5ea922..f762bb4 100644 --- a/EYOSx86-main/src/impl/x86_64/driver/vector.c +++ b/src/impl/x86_64/driver/vector.c @@ -1,80 +1,80 @@ -#include "vector.h" - -// Initial capacity for a new vector -#define VECTOR_INITIAL_CAPACITY 4 - -// Create a new vector -vector* vector_create() { - vector* v = (vector*)malloc(sizeof(vector)); - if (!v) return NULL; // Return NULL if allocation fails - - v->capacity = VECTOR_INITIAL_CAPACITY; - v->size = 0; - v->items = (void**)malloc(sizeof(void*) * v->capacity); - if (!v->items) { - free(v); // Free the vector if item allocation fails - return NULL; - } - - return v; -} - -// Destroy the vector and free allocated memory -void vector_destroy(vector* v) { - if (v) { - free(v->items); - free(v); - } -} - -// Push an item to the back of the vector -int vector_push_back(vector* v, void* item) { - // Resize the vector if it's full - if (v->size == v->capacity) { - if (vector_resize(v, v->capacity * 2) != 0) { - return -1; // Return -1 on failure to resize - } - } - - v->items[v->size++] = item; // Add the new item - return 0; // Success -} - -// Get the item at a specific index -void* vector_get(vector* v, size_t index) { - if (index >= v->size) return NULL; // Return NULL if index is out of bounds - return v->items[index]; -} - -// Set an item at a specific index -int vector_set(vector* v, size_t index, void* item) { - if (index >= v->size) return -1; // Return -1 if index is out of bounds - v->items[index] = item; - return 0; // Success -} - -// Get the size of the vector -size_t vector_size(vector* v) { - return v->size; -} - -// Resize the vector's internal array -int vector_resize(vector* v, size_t new_capacity) { - // Allocate new memory for the resized array - void** new_items = (void**)malloc(sizeof(void*) * new_capacity); - if (!new_items) return -1; // Return -1 on failure - - // Copy the old items into the new array - for (size_t i = 0; i < v->size; i++) { - new_items[i] = v->items[i]; - } - - // Free the old memory - free(v->items); - - // Update the vector's internal state - v->items = new_items; - v->capacity = new_capacity; - - return 0; // Success -} +#include "vector.h" + +// Initial capacity for a new vector +#define VECTOR_INITIAL_CAPACITY 4 + +// Create a new vector +vector* vector_create() { + vector* v = (vector*)malloc(sizeof(vector)); + if (!v) return NULL; // Return NULL if allocation fails + + v->capacity = VECTOR_INITIAL_CAPACITY; + v->size = 0; + v->items = (void**)malloc(sizeof(void*) * v->capacity); + if (!v->items) { + free(v); // Free the vector if item allocation fails + return NULL; + } + + return v; +} + +// Destroy the vector and free allocated memory +void vector_destroy(vector* v) { + if (v) { + free(v->items); + free(v); + } +} + +// Push an item to the back of the vector +int vector_push_back(vector* v, void* item) { + // Resize the vector if it's full + if (v->size == v->capacity) { + if (vector_resize(v, v->capacity * 2) != 0) { + return -1; // Return -1 on failure to resize + } + } + + v->items[v->size++] = item; // Add the new item + return 0; // Success +} + +// Get the item at a specific index +void* vector_get(vector* v, size_t index) { + if (index >= v->size) return NULL; // Return NULL if index is out of bounds + return v->items[index]; +} + +// Set an item at a specific index +int vector_set(vector* v, size_t index, void* item) { + if (index >= v->size) return -1; // Return -1 if index is out of bounds + v->items[index] = item; + return 0; // Success +} + +// Get the size of the vector +size_t vector_size(vector* v) { + return v->size; +} + +// Resize the vector's internal array +int vector_resize(vector* v, size_t new_capacity) { + // Allocate new memory for the resized array + void** new_items = (void**)malloc(sizeof(void*) * new_capacity); + if (!new_items) return -1; // Return -1 on failure + + // Copy the old items into the new array + for (size_t i = 0; i < v->size; i++) { + new_items[i] = v->items[i]; + } + + // Free the old memory + free(v->items); + + // Update the vector's internal state + v->items = new_items; + v->capacity = new_capacity; + + return 0; // Success +} diff --git a/EYOSx86-main/src/impl/x86_64/driver/vga.c b/src/impl/x86_64/driver/vga.c similarity index 100% rename from EYOSx86-main/src/impl/x86_64/driver/vga.c rename to src/impl/x86_64/driver/vga.c diff --git a/EYOSx86-main/src/impl/x86_64/game.c b/src/impl/x86_64/game.c similarity index 97% rename from EYOSx86-main/src/impl/x86_64/game.c rename to src/impl/x86_64/game.c index 8a102af..09ed4c1 100644 --- a/EYOSx86-main/src/impl/x86_64/game.c +++ b/src/impl/x86_64/game.c @@ -1,185 +1,185 @@ -#include "game.h" -#include "print.h" -#include "keydriver.h" -#include "strings.h" -#include "stdint.h" - -// Define constants for the game -#define ROOM_COUNT 5 -#define INVENTORY_SIZE 5 - -// Global variable to hold the game state -static GameState game_state; - -// Room descriptions and connected rooms -typedef struct { - const char* description; - int north; - int south; - int east; - int west; -} Room; - -static const Room rooms[ROOM_COUNT] = { - { "You are in a dark forest. There are paths to the north and east.", 1, -1, 2, -1 }, - { "You are on a beach. There is a cave to the west.", -1, 0, -1, 3 }, - { "You are inside a cave. It’s damp and dark.", -1, -1, -1, 0 }, - { "You are in a small village. There's a shop to the north and a forest to the east.", 4, -1, -1, -1 }, - { "You are in a shop filled with various items. The village is to the south.", -1, 3, -1, -1 } -}; - -// Player's inventory -static const char* inventory[INVENTORY_SIZE]; -static int inventory_count = 0; - -// Command buffer -static char commandBuffer[MAX_COMMAND_LENGTH]; -static size_t commandLength = 0; - -bool keydown = false; - -// Function to handle user input commands -void handle_command(const char* command) { - - - game_clear(); - - - if (strcmp(command, "look") == 0) { - printf(rooms[game_state.current_room].description); - printf("\n"); - } else if (strcmp(command, "north") == 0) { - if (rooms[game_state.current_room].north != -1) { - game_state.current_room = rooms[game_state.current_room].north; - printf("You walk north.\n"); - printf("%s\n", rooms[game_state.current_room].description); - } else { - printf("You can't go that way.\n"); - } - } else if (strcmp(command, "south") == 0) { - if (rooms[game_state.current_room].south != -1) { - game_state.current_room = rooms[game_state.current_room].south; - printf("You walk south.\n"); - printf("%s\n", rooms[game_state.current_room].description); - } else { - printf("You can't go that way.\n"); - } - } else if (strcmp(command, "east") == 0) { - if (rooms[game_state.current_room].east != -1) { - game_state.current_room = rooms[game_state.current_room].east; - printf("You walk east.\n"); - printf("%s\n", rooms[game_state.current_room].description); - } else { - printf("You can't go that way.\n"); - } - } else if (strcmp(command, "west") == 0) { - if (rooms[game_state.current_room].west != -1) { - game_state.current_room = rooms[game_state.current_room].west; - printf("You walk west.\n"); - printf("%s\n", rooms[game_state.current_room].description); - } else { - printf("You can't go that way.\n"); - } - } else if (strcmp(command, "inventory") == 0) { - printf("You are carrying:\n"); - for (int i = 0; i < inventory_count; ++i) { - printf("- %s\n", inventory[i]); - } - if (inventory_count == 0) { - printf("Nothing.\n"); - } - } else if (strcmp(command, "take key") == 0) { - if (game_state.current_room == 1) { - if (inventory_count < INVENTORY_SIZE) { - inventory[inventory_count++] = "key"; - printf("You picked up a key.\n"); - } else { - printf("Your inventory is full.\n"); - } - } else { - printf("There is no key here.\n"); - } - } else if (strcmp(command, "use key") == 0) { - bool has_key = false; - for (int i = 0; i < inventory_count; ++i) { - if (strcmp(inventory[i], "key") == 0) { - has_key = true; - break; - } - } - if (has_key && game_state.current_room == 2) { - printf("You unlock the door in the cave and find a treasure!\n"); - game_state.game_active = false; // End the game - } else { - printf("You can't use the key here.\n"); - } - } else if (strcmp(command, "quit") == 0) { - printf("You quit the game.\n"); - game_state.game_active = false; - } else { - printf("Unknown command.\n"); - } -} - -// Function to print the prompt for the player -void print_prompt() { - printf(" > "); -} - -const void game_clear() -{ - print_set_color(PRINT_COLOR_WHITE, PRINT_COLOR_BLACK); // Set text color - - move_print_cursor(0, 0); - move_cursor(0, 0); - print_clear(); -} - -// Function to initialize and run the game -void create_game() { - // Initialize the game state - game_state.current_room = 0; - game_state.game_active = true; - - printf("Welcome to the text adventure game!\n"); - printf("Type 'look' to see where you are, 'north', 'south', 'east', 'west' to move, or 'quit' to exit.\n"); - printf("You can 'take key' or 'use key' in the appropriate places.\n"); - - print_prompt(); - - // Main game loop - while (game_state.game_active) { - char key = read_key(); // Get key input - - if (key != 0) { - if (!keydown) { - if (key == 10) { // Enter key - printf("\n"); - commandBuffer[commandLength] = '\0'; // Null-terminate the command - handle_command(commandBuffer); // Process the command - commandLength = 0; // Reset command buffer - if (game_state.game_active) { - print_prompt(); // Print prompt for the next command - } - } else if (key == 8) { // Backspace key - if (commandLength > 0) { - commandLength--; - offset_print_cursor(-1, 0); - print_char(' '); // Overwrite the character - offset_print_cursor(-1, 0); - } - } else if (key >= 32 && key <= 126) { // Printable characters - if (commandLength < MAX_COMMAND_LENGTH - 1) { - commandBuffer[commandLength++] = key; - print_char(key); // Display the key on the screen - } - } - keydown = true; - } - } else { - keydown = false; - } - } - - printf("Thanks for playing!\n"); -} +#include "game.h" +#include "print.h" +#include "keydriver.h" +#include "strings.h" +#include "stdint.h" + +// Define constants for the game +#define ROOM_COUNT 5 +#define INVENTORY_SIZE 5 + +// Global variable to hold the game state +static GameState game_state; + +// Room descriptions and connected rooms +typedef struct { + const char* description; + int north; + int south; + int east; + int west; +} Room; + +static const Room rooms[ROOM_COUNT] = { + { "You are in a dark forest. There are paths to the north and east.", 1, -1, 2, -1 }, + { "You are on a beach. There is a cave to the west.", -1, 0, -1, 3 }, + { "You are inside a cave. It’s damp and dark.", -1, -1, -1, 0 }, + { "You are in a small village. There's a shop to the north and a forest to the east.", 4, -1, -1, -1 }, + { "You are in a shop filled with various items. The village is to the south.", -1, 3, -1, -1 } +}; + +// Player's inventory +static const char* inventory[INVENTORY_SIZE]; +static int inventory_count = 0; + +// Command buffer +static char commandBuffer[MAX_COMMAND_LENGTH]; +static size_t commandLength = 0; + +bool keydown = false; + +// Function to handle user input commands +void handle_command(const char* command) { + + + game_clear(); + + + if (strcmp(command, "look") == 0) { + printf(rooms[game_state.current_room].description); + printf("\n"); + } else if (strcmp(command, "north") == 0) { + if (rooms[game_state.current_room].north != -1) { + game_state.current_room = rooms[game_state.current_room].north; + printf("You walk north.\n"); + printf("%s\n", rooms[game_state.current_room].description); + } else { + printf("You can't go that way.\n"); + } + } else if (strcmp(command, "south") == 0) { + if (rooms[game_state.current_room].south != -1) { + game_state.current_room = rooms[game_state.current_room].south; + printf("You walk south.\n"); + printf("%s\n", rooms[game_state.current_room].description); + } else { + printf("You can't go that way.\n"); + } + } else if (strcmp(command, "east") == 0) { + if (rooms[game_state.current_room].east != -1) { + game_state.current_room = rooms[game_state.current_room].east; + printf("You walk east.\n"); + printf("%s\n", rooms[game_state.current_room].description); + } else { + printf("You can't go that way.\n"); + } + } else if (strcmp(command, "west") == 0) { + if (rooms[game_state.current_room].west != -1) { + game_state.current_room = rooms[game_state.current_room].west; + printf("You walk west.\n"); + printf("%s\n", rooms[game_state.current_room].description); + } else { + printf("You can't go that way.\n"); + } + } else if (strcmp(command, "inventory") == 0) { + printf("You are carrying:\n"); + for (int i = 0; i < inventory_count; ++i) { + printf("- %s\n", inventory[i]); + } + if (inventory_count == 0) { + printf("Nothing.\n"); + } + } else if (strcmp(command, "take key") == 0) { + if (game_state.current_room == 1) { + if (inventory_count < INVENTORY_SIZE) { + inventory[inventory_count++] = "key"; + printf("You picked up a key.\n"); + } else { + printf("Your inventory is full.\n"); + } + } else { + printf("There is no key here.\n"); + } + } else if (strcmp(command, "use key") == 0) { + bool has_key = false; + for (int i = 0; i < inventory_count; ++i) { + if (strcmp(inventory[i], "key") == 0) { + has_key = true; + break; + } + } + if (has_key && game_state.current_room == 2) { + printf("You unlock the door in the cave and find a treasure!\n"); + game_state.game_active = false; // End the game + } else { + printf("You can't use the key here.\n"); + } + } else if (strcmp(command, "quit") == 0) { + printf("You quit the game.\n"); + game_state.game_active = false; + } else { + printf("Unknown command.\n"); + } +} + +// Function to print the prompt for the player +void print_prompt() { + printf(" > "); +} + +const void game_clear() +{ + print_set_color(PRINT_COLOR_WHITE, PRINT_COLOR_BLACK); // Set text color + + move_print_cursor(0, 0); + move_cursor(0, 0); + print_clear(); +} + +// Function to initialize and run the game +void create_game() { + // Initialize the game state + game_state.current_room = 0; + game_state.game_active = true; + + printf("Welcome to the text adventure game!\n"); + printf("Type 'look' to see where you are, 'north', 'south', 'east', 'west' to move, or 'quit' to exit.\n"); + printf("You can 'take key' or 'use key' in the appropriate places.\n"); + + print_prompt(); + + // Main game loop + while (game_state.game_active) { + char key = read_key(); // Get key input + + if (key != 0) { + if (!keydown) { + if (key == 10) { // Enter key + printf("\n"); + commandBuffer[commandLength] = '\0'; // Null-terminate the command + handle_command(commandBuffer); // Process the command + commandLength = 0; // Reset command buffer + if (game_state.game_active) { + print_prompt(); // Print prompt for the next command + } + } else if (key == 8) { // Backspace key + if (commandLength > 0) { + commandLength--; + offset_print_cursor(-1, 0); + print_char(' '); // Overwrite the character + offset_print_cursor(-1, 0); + } + } else if (key >= 32 && key <= 126) { // Printable characters + if (commandLength < MAX_COMMAND_LENGTH - 1) { + commandBuffer[commandLength++] = key; + print_char(key); // Display the key on the screen + } + } + keydown = true; + } + } else { + keydown = false; + } + } + + printf("Thanks for playing!\n"); +} diff --git a/EYOSx86-main/src/impl/x86_64/stdopt.c b/src/impl/x86_64/stdopt.c similarity index 100% rename from EYOSx86-main/src/impl/x86_64/stdopt.c rename to src/impl/x86_64/stdopt.c diff --git a/EYOSx86-main/src/impl/x86_64/strings.c b/src/impl/x86_64/strings.c similarity index 90% rename from EYOSx86-main/src/impl/x86_64/strings.c rename to src/impl/x86_64/strings.c index d1f726f..e8c2197 100644 --- a/EYOSx86-main/src/impl/x86_64/strings.c +++ b/src/impl/x86_64/strings.c @@ -89,4 +89,14 @@ int strncmp(const char *s1, const char *s2, size_t n) { } else { return (*(unsigned char *)s1 - *(unsigned char *)s2); } -} \ No newline at end of file +} + +char* strchr(const char* str, int ch) { + while (*str) { + if (*str == (char)ch) { + return (char*)str; + } + str++; + } + return NULL; +} diff --git a/EYOSx86-main/src/impl/x86_64/window.c b/src/impl/x86_64/window.c similarity index 100% rename from EYOSx86-main/src/impl/x86_64/window.c rename to src/impl/x86_64/window.c diff --git a/src/intf/basic.h b/src/intf/basic.h new file mode 100644 index 0000000..adf65da --- /dev/null +++ b/src/intf/basic.h @@ -0,0 +1,32 @@ +#ifndef BASIC_INTERPRETER_H +#define BASIC_INTERPRETER_H + +#include "stdint.h" +#include "stddef.h" + +#define MAX_LINE_LENGTH 128 +#define MAX_VARIABLES 32 + +typedef struct { + char name[16]; + int value; + char* str_value; +} Variable; + +typedef struct { + Variable variables[MAX_VARIABLES]; + size_t variable_count; + int running; +} InterpreterState; + +// Initialize the interpreter state +void init_state(InterpreterState* state); + +// Execute a single line of code in the context of a state +void execute_line(InterpreterState* state, const char* line); + +// Utility to evaluate an expression (exposed for potential reuse) +const char* evaluate_expression(InterpreterState* state, const char* expr); + + +#endif // BASIC_INTERPRETER_H diff --git a/EYOSx86-main/src/intf/disk_io.h b/src/intf/disk_io.h similarity index 95% rename from EYOSx86-main/src/intf/disk_io.h rename to src/intf/disk_io.h index fef0d39..06fb137 100644 --- a/EYOSx86-main/src/intf/disk_io.h +++ b/src/intf/disk_io.h @@ -1,17 +1,17 @@ -// disk_io.h - -#ifndef DISK_IO_H -#define DISK_IO_H - -#include - -// Read sectors from the disk -int disk_read(uint32_t lba, void *buffer, uint32_t size); - -// Optional: Write sectors to the disk (not implemented) -int disk_write(uint32_t lba, const void *buffer, uint32_t size); - - -int bios_read_sector(uint32_t lba, void *buffer); - +// disk_io.h + +#ifndef DISK_IO_H +#define DISK_IO_H + +#include + +// Read sectors from the disk +int disk_read(uint32_t lba, void *buffer, uint32_t size); + +// Optional: Write sectors to the disk (not implemented) +int disk_write(uint32_t lba, const void *buffer, uint32_t size); + + +int bios_read_sector(uint32_t lba, void *buffer); + #endif // DISK_IO_H \ No newline at end of file diff --git a/EYOSx86-main/src/intf/fat12.h b/src/intf/fat12.h similarity index 100% rename from EYOSx86-main/src/intf/fat12.h rename to src/intf/fat12.h diff --git a/EYOSx86-main/src/intf/fs.h b/src/intf/fs.h similarity index 100% rename from EYOSx86-main/src/intf/fs.h rename to src/intf/fs.h diff --git a/EYOSx86-main/src/intf/game.h b/src/intf/game.h similarity index 94% rename from EYOSx86-main/src/intf/game.h rename to src/intf/game.h index a4922ad..1ca983a 100644 --- a/EYOSx86-main/src/intf/game.h +++ b/src/intf/game.h @@ -1,25 +1,25 @@ -#ifndef GAME_H -#define GAME_H - -#include "stdint.h" - - -// Define the maximum length of a command -#define MAX_COMMAND_LENGTH 128 - -// Game state structure -typedef struct { - int current_room; - bool game_active; -} GameState; - -// Function to initialize and run the game -void create_game(); - -// Function to handle the command input by the player -void handle_command(const char* command); - -// Function to print the current prompt -void print_prompt(); - -#endif +#ifndef GAME_H +#define GAME_H + +#include "stdint.h" + + +// Define the maximum length of a command +#define MAX_COMMAND_LENGTH 128 + +// Game state structure +typedef struct { + int current_room; + bool game_active; +} GameState; + +// Function to initialize and run the game +void create_game(); + +// Function to handle the command input by the player +void handle_command(const char* command); + +// Function to print the current prompt +void print_prompt(); + +#endif diff --git a/EYOSx86-main/src/intf/idt.h b/src/intf/idt.h similarity index 100% rename from EYOSx86-main/src/intf/idt.h rename to src/intf/idt.h diff --git a/EYOSx86-main/src/intf/io.h b/src/intf/io.h similarity index 100% rename from EYOSx86-main/src/intf/io.h rename to src/intf/io.h diff --git a/EYOSx86-main/src/intf/keydriver.h b/src/intf/keydriver.h similarity index 100% rename from EYOSx86-main/src/intf/keydriver.h rename to src/intf/keydriver.h diff --git a/EYOSx86-main/src/intf/memory.h b/src/intf/memory.h similarity index 100% rename from EYOSx86-main/src/intf/memory.h rename to src/intf/memory.h diff --git a/EYOSx86-main/src/intf/print.h b/src/intf/print.h similarity index 94% rename from EYOSx86-main/src/intf/print.h rename to src/intf/print.h index 3ce4811..1577104 100644 --- a/EYOSx86-main/src/intf/print.h +++ b/src/intf/print.h @@ -29,6 +29,7 @@ enum { }; void sscanf(const char *str, const char *format, char *filename, char *content); +snprintf(char* buffer, size_t size, const char* format, ...); int my_sscanf(const char *input, const char *format, char *output); void print_clear(); void print_char(char character); diff --git a/EYOSx86-main/src/intf/stdint.h b/src/intf/stdint.h similarity index 100% rename from EYOSx86-main/src/intf/stdint.h rename to src/intf/stdint.h diff --git a/EYOSx86-main/src/intf/stdopt.h b/src/intf/stdopt.h similarity index 100% rename from EYOSx86-main/src/intf/stdopt.h rename to src/intf/stdopt.h diff --git a/EYOSx86-main/src/intf/strings.h b/src/intf/strings.h similarity index 53% rename from EYOSx86-main/src/intf/strings.h rename to src/intf/strings.h index f9f54fe..87103ec 100644 --- a/EYOSx86-main/src/intf/strings.h +++ b/src/intf/strings.h @@ -5,8 +5,9 @@ int strcmp(const char *str1, const char *str2); size_t strlen(const char *str); char *strncpy(char *dest, const char *src, size_t n); -int int_strncmp(const char* s1, const char* s2, size_t n); +int int_strncmp(const char *s1, const char *s2, size_t n); void strcpy(char *dest, const char *src); -char* strrchr(const char* str, char ch); +char *strrchr(const char *str, char ch); -int strncmp(const char *s1, const char *s2, size_t n); \ No newline at end of file +int strncmp(const char *s1, const char *s2, size_t n); +char *strchr(const char *str, int ch); diff --git a/EYOSx86-main/src/intf/vector.h b/src/intf/vector.h similarity index 96% rename from EYOSx86-main/src/intf/vector.h rename to src/intf/vector.h index b3dd73a..dcfcbc2 100644 --- a/EYOSx86-main/src/intf/vector.h +++ b/src/intf/vector.h @@ -1,22 +1,22 @@ -#ifndef VECTOR_H -#define VECTOR_H - -#include - -// Define the vector structure -typedef struct { - void** items; // Pointer to the array of items - size_t capacity; // Maximum number of items the vector can hold - size_t size; // Current number of items in the vector -} vector; - -// Function prototypes -vector* vector_create(); -void vector_destroy(vector* v); -int vector_push_back(vector* v, void* item); -void* vector_get(vector* v, size_t index); -int vector_set(vector* v, size_t index, void* item); -size_t vector_size(vector* v); -int vector_resize(vector* v, size_t new_capacity); - -#endif +#ifndef VECTOR_H +#define VECTOR_H + +#include + +// Define the vector structure +typedef struct { + void** items; // Pointer to the array of items + size_t capacity; // Maximum number of items the vector can hold + size_t size; // Current number of items in the vector +} vector; + +// Function prototypes +vector* vector_create(); +void vector_destroy(vector* v); +int vector_push_back(vector* v, void* item); +void* vector_get(vector* v, size_t index); +int vector_set(vector* v, size_t index, void* item); +size_t vector_size(vector* v); +int vector_resize(vector* v, size_t new_capacity); + +#endif diff --git a/EYOSx86-main/src/intf/vga.h b/src/intf/vga.h similarity index 100% rename from EYOSx86-main/src/intf/vga.h rename to src/intf/vga.h diff --git a/EYOSx86-main/src/intf/window.h b/src/intf/window.h similarity index 100% rename from EYOSx86-main/src/intf/window.h rename to src/intf/window.h diff --git a/EYOSx86-main/targets/x86_64/iso/boot/grub/grub.cfg b/targets/x86_64/iso/boot/grub/grub.cfg similarity index 100% rename from EYOSx86-main/targets/x86_64/iso/boot/grub/grub.cfg rename to targets/x86_64/iso/boot/grub/grub.cfg diff --git a/targets/x86_64/iso/boot/kernel.bin b/targets/x86_64/iso/boot/kernel.bin new file mode 100644 index 0000000000000000000000000000000000000000..739a28839154d06e78bc66832634b08f49c9157b GIT binary patch literal 36040 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