From 6979b3d99ee49d31828f21f5613c4b95bfc96a2a Mon Sep 17 00:00:00 2001 From: That_One_Nerd Date: Thu, 16 Mar 2023 07:24:39 -0400 Subject: [PATCH] initial commit of project --- .gitignore | 8 + README.md | 17 +- SrcMod/Assets/Logo 128p.png | Bin 0 -> 8905 bytes SrcMod/Assets/Logo 16p.png | Bin 0 -> 700 bytes SrcMod/Assets/Logo 256p.png | Bin 0 -> 23050 bytes SrcMod/Assets/Logo 32p.png | Bin 0 -> 1668 bytes SrcMod/Assets/Logo 64p.png | Bin 0 -> 3721 bytes SrcMod/Assets/Logo 8p.png | Bin 0 -> 341 bytes SrcMod/Assets/Logo Max.png | Bin 0 -> 31140 bytes SrcMod/Assets/Logo.ico | Bin 0 -> 360758 bytes SrcMod/Shell/Game.cs | 19 ++ SrcMod/Shell/GlobalUsings.cs | 10 + SrcMod/Shell/HistoryItem.cs | 17 ++ SrcMod/Shell/Logo.ico | Bin 0 -> 360758 bytes SrcMod/Shell/Mod.cs | 25 ++ SrcMod/Shell/Modules/BaseModule.cs | 258 ++++++++++++++++++ .../Modules/ObjectModels/CommandAttribute.cs | 12 + .../Shell/Modules/ObjectModels/CommandInfo.cs | 69 +++++ .../Modules/ObjectModels/ModuleAttribute.cs | 14 + .../Shell/Modules/ObjectModels/ModuleInfo.cs | 49 ++++ .../Shell/Modules/ObjectModels/TypeParsers.cs | 36 +++ SrcMod/Shell/Program.cs | 25 ++ SrcMod/Shell/Shell.cs | 190 +++++++++++++ SrcMod/Shell/Shell.csproj | 35 +++ SrcMod/Shell/Tools.cs | 129 +++++++++ 25 files changed, 912 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 SrcMod/Assets/Logo 128p.png create mode 100644 SrcMod/Assets/Logo 16p.png create mode 100644 SrcMod/Assets/Logo 256p.png create mode 100644 SrcMod/Assets/Logo 32p.png create mode 100644 SrcMod/Assets/Logo 64p.png create mode 100644 SrcMod/Assets/Logo 8p.png create mode 100644 SrcMod/Assets/Logo Max.png create mode 100644 SrcMod/Assets/Logo.ico create mode 100644 SrcMod/Shell/Game.cs create mode 100644 SrcMod/Shell/GlobalUsings.cs create mode 100644 SrcMod/Shell/HistoryItem.cs create mode 100644 SrcMod/Shell/Logo.ico create mode 100644 SrcMod/Shell/Mod.cs create mode 100644 SrcMod/Shell/Modules/BaseModule.cs create mode 100644 SrcMod/Shell/Modules/ObjectModels/CommandAttribute.cs create mode 100644 SrcMod/Shell/Modules/ObjectModels/CommandInfo.cs create mode 100644 SrcMod/Shell/Modules/ObjectModels/ModuleAttribute.cs create mode 100644 SrcMod/Shell/Modules/ObjectModels/ModuleInfo.cs create mode 100644 SrcMod/Shell/Modules/ObjectModels/TypeParsers.cs create mode 100644 SrcMod/Shell/Program.cs create mode 100644 SrcMod/Shell/Shell.cs create mode 100644 SrcMod/Shell/Shell.csproj create mode 100644 SrcMod/Shell/Tools.cs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4dc7a3b --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +# Visual Studio stuff +.vs/ +SrcMod/.vs/ +*.sln + +# Compiled Files +SrcMod/Compiled +SrcMod/Shell/obj/ diff --git a/README.md b/README.md index a7264ad..90fe2b2 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,17 @@ # SrcMod - SrcMod *will be* a command-line Source Engine modding tool. + +## About +SrcMod is a command-line [Source Engine](https://developer.valvesoftware.com/wiki/Source) modding tool. It's currently in alpha development and will be developed further in the future. + +--- + +SrcMod is a tool I originally decided to make so I wouldn't have to do all of the setup and finicky stuff required to develop a Source Engine mod. It runs its own shell and has a set of commands that can be entered. This tool is expected to near a working product by the beginning of summer. No promises though. + +## Roadmap +I don't have any specific deadlines for anything but the first official release, which will *hopefully* be around the beginning of summer. However, currently the shell is in a state where no actual modding functionality is implemented and it's just a super simple shell. During the alpha releases, it will remain that way. When modding functionality is finally added, the development will shift into beta development. + +In the official releases, an installer will accompany the shell, but in the alpha and beta releases the shell will have to be installed manually. The exact directory of the shell doesn't particularly matter. + +--- + +More to come! diff --git a/SrcMod/Assets/Logo 128p.png b/SrcMod/Assets/Logo 128p.png new file mode 100644 index 0000000000000000000000000000000000000000..27f023e7adb59c459b65c49c5ac46b22b6464e51 GIT binary patch literal 8905 zcmV;)A~xNLP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>DB3?;EK~#8N?VSmn zTve6E>sEC--5sDi8wd(2jN-n4>!`RgDlVgp+u)1=H677$bYRp`kR%}L&jFX2QAx)I z+!z^gLlG1eaRUwDf(i^M2or&jq&uB-^;&nn|9$UNzpk#Xezm2mLw(8V_uj4d?sCq# z=bpQ~`!a3Zx8dUBf+IiB7v;rrIWCv|5|$K8)ZIT=cj-#g zYYK|OoldWquFp8{vfg*UvHrr`*C4)Tb%2+JT9u(G3XmV@RlK1thWM4aDUS1D^izG# zXQdGZJvgaHa~a>gcIT{u?U6z)iwm6J+~UB+caiRYEe1oU+AI;7g^~BJs0(-OgE=kf8Qg2@cZf14Q>1aehD1Dp8+ksi;eo zWWa<7xdvXw;P+&{8*z=0EsYLQ@^`!DcaEjcm%BfS(&v-EC*v!P->!k3Q;~*6_lo`^ z`n~9C(a$9KJ9Sj$=#>sSmsSxhfvS-ddT9-p1=vr)N9go1qQ{9IAv#=ih^R*d!`o;a z?h$=g^jXQ`2LwnyDAK%5L)8jk?M_nYqn}(Z!{?7wN>9_}Geu7jJy=AoE(bDIs-ZP2 zV+(?^Bx`V^VM66NqlpqORp?pW>jtq5L0*-tL8=TUYJ0Jb+4Y&e?2^gMV|Dr>(ep)| z?=MP%dy|YPJ+{#pScRh21H7Pf)Do

gW8NLJV+DheVNJQ`GdSYZ#+;crE+5>eCT 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 XjFC>Eu5#i~00000NkvXXu0mjfzZEkx literal 0 HcmV?d00001 diff --git a/SrcMod/Assets/Logo 16p.png b/SrcMod/Assets/Logo 16p.png new file mode 100644 index 0000000000000000000000000000000000000000..ec11779059f7a9652bbaece9da24f27fa5b6d767 GIT binary patch literal 700 zcmV;t0z>_YP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0#QjsK~y+Tm6K0M zR8bVh&%N)>jAG6k$FV;s7|kXlgg{zFi&hbgNI|=?Fo?oUi)dj4#<&SwXkm&qK_D%H zBq&-%#K0sdt%?@bCP)&;aR$?QZ=5&p_MJEH8tAGIew=&Xx%WHgop~b&vS(u^LLcY_ zaiD+)IL|o)$N*k*?ql=y@&|#-SFyPRdcgnc1{)Ny*ai>50!kMvRcbLL^@I$%EG4D< zHi>G0J795#+}Ro%9K)i7c1oPtt6DbJ@7C!FmInd1u1#25fjQCFOw2rauk7;rP#_?fF9fwB&D9w;dLiu@OTM`s7koK;skJ%Lkw~vqgjKAlf+s?v zyZh*vxLEpvR~o?u7GKtdpUTLpty1F~N@c?17m_=7*9*p`m$5tQkGA6jebJ?^xaj1Q zPE9;V_yM>w8!UjF@1#bw%mD5s<{iK?z$h*KVm(rc_)>YdMH3V4fG+;3ud94|g5RdQl|g3b}L^zrbt%L__@k ztXHVMijMFrH#7kB*Y=V^Vj7qGv3p=R^nHEeh#s2$*ye(`+rcw11Gd0>SY07UEsC@~ zsj7k!w|*;BJAmAIkVo|;M3#~mpb(=wpTSKucmgk!{O6_yZ8k3GyPispW0t%o6lEJfm#rDaWwzPo+ i!+`(pyysyDBKixBN8mtKEN)Ez0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>DS)WNnK~#8N?R^Pg zWJR6#tJgWYGfdK%VL(?r&_!K$Ro44J5f4xl7iB%Z{q~c?NdmIotLus~GaT;fdh5z0 z83c6I^>zUfkz4T=#Z~YE50Gn)bY>>$&e5;F->;7D*RS8}?j+rv?o9oX>N;P&y8i$A zSG_ts2L}fS2L}fS2L}fS2L}fS2M33>4PkVLHHz7ZVc~m$u~kE&2}mi8tr~c^W+UOF z$xq{1cnU_6fB+GQT5s^BNb*-#J3)B`UBUpe#xRmILr~FiapXBT;J!Xg7_|+JZXMW zqykyRze-32e#*zcu~wlN$P_9pp&g@0VW6*s8&V z3H^LDb8w^V;Y0Cx5_8eGsl=iM2IxW--~lD);FeDhPS1!}RYo;4KJ5Dx6$oS}GuB>) zz_fNX@{=HV5;}M)%Fi1ZnJyZyMC_dyTHojSn@~epJe-9DFpP>C#^VP;??<5wAXpkI zgP2pS7*$fbYE1ol1*m!Ia9D(%1U3@J6|GnsBO6e^F^9os!G^`|y|?7crwEm2{7U$H zUY~M_M?L>uqmumjEaO{i-6G;n zZN{i+sGU&vLEVXPzXzxIH8{mjApy{>gu=vd3QUcRAbH%@MA$TU1@hxricX5dlH%u3 zibD~OIWuu+k1q90Go#ZjkqA1j;0qI3pNtRX1Tm;`#xy@Z zbcpoDVUUgg8rEk(Jq3!rIte`k6$J~;#u1m-uv^EKg~OT#+of%r)Wb}HLx!t_5T8ho zOkGchnaLraW65SSf>m$yh4EpI-kA>3FM0xhq}^~Bzd^Y&OQxW7baHfg_ zpJU=M_Q%J;^kP_#f_ehfq4WzO+`Gq(og5t2Do88* z3PS9H+6Kb^I4u}1ryv>B{pwW5=ash5tBK(=j>_Z^; zzXI+rh4o2L{N8R66?+^U94cW&e$vR@=vl|oqf?jf|M&)x>I=N(%nLM~&_MVpe{ms5 zzivh)W`1ILuqfp*c+=m*O2X$icndNIrok!)2Z#C~-PpxZ{|v(aARU)8FVGaCqnMAB z_#)^F(x>0A2!Ccg`*4T=C&T!1sK23`0sUQ1@8Ga9SQ;WevTHE+<_EvplljRZKQq$! zr@|ExAV1*+zVtB`DT(>uLeGcB-u~54Lv#Zi(K|RaAEYZP($z)i{ZFG~VPeQnH@IG4 zS;Pn;=kh$fL=*nP_I3S>e(&)xz8>mmD9f2_BCOrP!J)YbGlBmSV&T;E$joA4a!{m4 z_R_s3mc#&N#s@{p>k;X(J&Ldk+c&KD{NUAi3pvlz=w?91;Cg!phxUMkPMYK*p$jr2 zx!2JV!vRt6{DFoDG(X8ra~>xcRF9vZ9L##sr-=UssK25cV0(MU=?LG!p}ioXQ?cXS z3R>MZw`17v-#k@wC{UMBA?~Lv;qUvzV1G}K&xyS^K}8AQiTMr=s|zv!OVh6g-F`ky zzi~)p0Q{uDqny$sdxE(OH}(d_B76L|K|NLlD1X9pgzw~h`0c=q{Hc<+LdlY2y1)NpWc=sb{ixlZ7ReZj)fsncf)g^3}N z9<81as37851S(8y5G4NmsJT;b z-Pp8L#6O-r4^9_Ck@(3)oVf4c(0w5Bb10DUq<=0QNc;tU(F;KlwlBDEM@{^ljmOTS z86c{{tPQKEb&JjQO)%(HB5J0bTv2#@&hh4i0MrmX?3E zxLA1V`qvfaXC?;4x>3DKP!a#!_=X|aK0pV6V#8V|er7(ZSWr>LvPe>K;i;nWIykH* zNXu-8NA~ojUqy#hXhKjK0uhWsJAy_id-}*)0W)uj(-JO+HBrT~h$@yvl8OsY6^)ng z4>JwN6dc+O+vd)gzwnU0^jNN_?$ZE7eqyK}+IL~*QCw`GY{cCNo5`q7VvPd{av`L6 z9y>2-$UzlYG$^5h^dv6;p}B|%dtmPup6G$hnll#(Zo+S^^asSz^0RwWVo zEY#gl_ZamjWbqC>aVN|>!R~hZMgM*f_UwYcSX^($MoY!)-;{$!v<-_#pvgDgJMVVvm?a zM4bXl>;(02dTD1b&Vv(w2@<*)E;mE}0~p+H40HAzG_sGq`I0cVJu8YRHW~Py@Qdiy zdmt{%djq5UY&sgo-1g!1MIko|;XME}emJCuCm?;4ydDjeg^D{O%}EFj&46V9_d|L; zDm^;&+rq@KPX@r_gx(C*$qc}X%h6tu1pO0`#Sew_z6V0TrB?>O>p6X&4PSx%UVIw0s3{IyWa$X_s4Z-kFWG15$X{z`EiyjK?YmhkCFyezl*MFYJHg zv>F0j0*BXxJXaI8VTXyH6LdF0T@3=d3Pk)P1=cs2!sC;0rbPDfo$pbj91@L!4| z7}i0N%TngHZ`>I8MKXeCLp=w|ZpF56l7T}bu$@L8wDeb?r9YAZ{0AKV8EUnL0O7`N z8PGncA3}Wrsl5?t{sYD=YW%+c!h=OmaZwBG_~HLRo9|R_HOwKahL|xF32o(^napm4 z=i}h{GFXp;dZhBuu;KWudEUVx4&oHFt4jpNu&1G^aP5D)832iv4L1DFThMC12L00X zXzph1q)`|jLN6~M#<%C*^iD!yd;?^Iz!ybdrq9sFu@UD|-&cZ+mOo+waCJzm5_6r+rWSpnqhF zy}vg7-#fw-h;WG@)tz_^HoewJk+zH9?Xw?|dtBk@h9`bA!Y>&_P z*oJqLl->?sNQn8=R%h zBjDvM;jK;wu(4lw#c#v-WT<9I0a0dh1K$1q%;@yx#_r8--{^}} z;AKW?pIqv&G|Ymb4vdwhg4xNThY2Y*!^lNn2P;P>5gf>{H2z9q4-Cvt4m}fn@O5zH z8upb+0%0b?`GpU73-Zd$nbV7VFMg2dou6UcLAQOb>n0TRb?g)i1UG*uw~670qQK7t zBR&;Y#|REwSo-{DEdgvFP7RzsRm9kly~HHlfG`m^3KBG#2cP>9n$)?Ok=$kUAP~RW zfMBc+Z32&i;v%Gh(Y>nd=O%^^4?KA~jJ!bNAi4p|sc(nwgstljl(>HWf?<(4L!Adm zG4T^ns+Xo8P)`~N6F%_`&zJu%vw3=Ve)|UD`GM>4I{;+Bs40=L62bWJW2KPqgpo(S z6RaPqdiCwl-5{;9jxVVY`(}5n7XzF3$--pz`BHixg;V(Q4>pXbm}m*w68=2Y`@LSd zC3EWZVtzc^gT}_m28Rv;>emmX4~ampDacP|k3&uJ^w^_l2go4UK-{okZNf5uuT)j= z%=WCm?(|$RyM4o;@B@q&y?=yyjPgtd_t0PIN%5h~*c4arac18K@v8>r(3#-;Ptlk1 zpv^fcKa%kanZ8lb{8o5z+cIGrio@E1t=B7JIs7b$cfb&DesW`0$l_Db)jtD`gN)#T z==j;=Pea{-vE>hhCx4h3-TNzspWQL!i$F*x?spF$5v0=Qiuakx>_dF%@nq=#M?2u8 zfwc$A0KSn}sk0Nq+(^esJJm4iVeds*zjr}x#BsfT7b34VBuPI#Hm&MAzkT@cJYT*K zM!VO*Nds#Kwk|KN%he$!a@i>ZbCFI3ap!kz5F$W#j{#)#!U2cw1cwDu1m3{NbWoTW zK3Gb54*LExj5p_Vcyg3Ocf&9M`Pn6lb($eSy2pQdjqSp7C}Vaan;J0EUw$%s66%{@ zh7N(Ub?$})-3u!Le8N?tLn3%&)M9GUJLt9hxKQk&oaBWww;>a@5jk`p$k;iL_io1k z9O_~Q(!e?+4a`mqy-j%H-(X||vJJ_hyI_ZMr#J@S&=9zYsDDmK|MgRHc0Bt6j03r1 zlqVjO2~ZMnZK->}VI1m99_vInhlaqfJB3W(6()zd(db*Al+S`Q_l{Tzz|9AB2MqCh zyYO?5Iq~d{fqoJ6y&q2hq+jz_$R*z&1_R*r(=$+Za?qhOp=n;o zACxT)4$DAhBp39gQZm0|$cOoJU;;d)nAfm5CeWF%7@Yn82+d`{%*wf1$_(+;;HJfn@-f zV%Rprvm_k@aA+C~6X?mDk-JL@@5OMs1&Rw!oFuUNAn}tSQ~wqnd?9?t034bMFoDGa z4<#MR-6?(fd^mj<%1HvN58M0S9HcWmrxP4NAJygH&{Xgc(gHUVZJypGr1y7l;w?{3 z66gd7`IU9Axo1%g*Ea8wjsZBd1iY+79W*kQ+Z6->hXX%@a+1L6fW1FyeXj_-&nXup z5jY0m&@%9pAu@q=r|-QN&5gSV?|^cWK>MKpQ5kJR6 zGP{byGkcv}Vk>Z1eT0eGpsKz|$Plrq#*Tt(6qX5K?D=$9uYuxa zv~KS}>tW0IN14&wQ)WMTuoyUPSE-#i2G9bmU%wu7sf*V1wiV?}E8Q)kc3|1Puwfd# zh_erIQrzx`S_jn!#Y;faP+6!UV;_XtVC?Imcp~s5-v33$)l6w1kKsTD!-D+e(5pQu zJ_9E_e~*LeYwiF52IJad z^I@6mP8g0H7|q>{a<90Z%N2Ty04acXEcSo^)4uPM@JPH?ttVlEKuMgo_oX7?vUjFi zKm8Go;n`DD4-+xtuc$wStu?j}gAKzHo&_5PB?f-CKOTfX-E0Yfn4QRqK8!|t^et2$ zhZFCfaPtAJfi2gMf#~0`u;XCSySXg>6OI8i2^9PH?b|0oG_L|7z6yj$LS>I^MQfU^ zC{91W5rS@o4$vEq9{^zUdz?{C4Ahj}5beD6d2!tmZJ;KWTtjtMju zY!9s9IaKrW(j&Q>3h4dQkz@O7wk(InV2K|(dv#85JyrYE1S?1pEeVkX870aXB8{uB zhU+jKpEVoZHWqH@eF+Hv`c^Uk!k#Bk*q(i;^t~J5#4iJu2|27Bwk&Tz@Bf^c3x@o4 zXH*~E?+UvK00Akgf=0rBJk201_Gm0{DogB2k>~(E!}6yjpp>;+h4`Xwd?u4YH1V1un>(&zJ^8|)d>CY2Cza{N{4m~)ZtKy`ax96p9q^R z;@rZh=ie-t^wM}U-pTd)iYZWU2Qp(*lAi`?#!KGCzyQnf<=VAc)G`ECfjGB%Sk5!`fH-ZWHy|%LGx^sx20)l~0lbRr zPV`!DG|nv3wx(l^K$n^HuFs52|1`gY-~E&C?Q{%aWl+SEN~L&h`ZH(-8luwW5OWJU zW_I>WNFM3o=eSh^MAYI8KM#&fe+AYHw5yW>mI2*Jg!f6M*C|2A09FQ7*dQK$$KC|R z;;u{CB;;lj^HLd#dB07>t*~>?KGEESEde~Mnm}I8g7!=0b>7nxp#dx8L4WhA}%nlo}YDE*8dzk4M}6x^d<^TwARV)BfZ+5c{|A7N_*c zRLu!hSEvctbjYTPi9FlrEfyCSQ@N?!BF4EU zm&m$tky*_{y$}rGx@+3W!%|EWqyRDxf<#9q zL3iQ%z5ruM!JTQRKM8ZX*;0UAvRarNe6W;07bbCsVnfo^0SwC|zX+m#RilOAg zd~zcb8x-@;?Zt{Y(1SX_{S9BeNm4i>w1?vl_Sg@XK$^yCoN=b@B($qWn;kVwb`xI^!2bA`G0 zKqp;TLL?z59atp27`ydTcK8LURLWazksHLzm14ZiqXI~u(vg0pTSVO74#NMBhd=z` zJ{Un$^D#FuEc!>M)XUJAxj^Z;P-I|kC{PWSJ=^4ugGF)ly4Ow3=EsKx*H|du8gL9C zgiV_^rFQPzSp)-kJE;D>EFIh66Yxqfj4vAVvcaXdd=GkL4}yjzuF@O?bxVlW9CnMM zmLHMHWc>T?yKfPM`$U8zaSh=a5*Mt=aT|ANk`mAq^rJxdw}OfIU<6HPWLz7-&x5lQ z*=Hj)`Y3DHX5+wyf^w1X$c#?EH+4Qi5gJLfuqE4{E~20 ztBIdjfK00l!uxmp?uKF=tZEr{7?k9NLi#F+fB*PU!^BTG1^}3`zZGFmg5u#Fw3n#? z070-|S!Vm7E~6Vz5vJ3DEZFpN_2N?u;VZW&@yFP0{&TRa+hs%XwFCoPCOkgOvjlme zB~K6{8WL|05GWd!p8PcRl<=2SAC3V4wxMGfa2T}b8@v7q5dmO1>&Je10`BZXFLJt_RRLv|(Ne zCH_-I@>*f18OoN)wRhZcN1n6)trY()21arL?;Bh0Km55Cqwbl3Ic7r zs&Q+o@Vx8L`~R8-5QcT@3WW0XT$mp~LpYyN!jC{n3cxK0$1fm6+wz|t$;sJ?tlvK} zbw5(^pT@bX%D>65#QxdL*q&W8ll<=A_~f5OM>7DqwNFHq@oE}Usgx}=9_Pgqd|9yQ z2I*7+ZK|w51l+F5`GT$z{~@j`@gF)@_#I1PM_zPZ`2*snit;oQu4D$ThWNktk&k?2 zOK1P%5SnfH6x4xya0p9+d0#;7sdXrRu)N9GrV~`FA-91E=w=&Edt5%^8mAOn=S%KJ z{O8I)UZ%l?CXa(+>`}(ZrL%PV6^P&%JaeyoR(p3oFz#22b)Y{MR*LYOkQe>&-ylrv z5ipVon@cGpXZkCHpn>P77ckT>8%qM`Kd`)671p-iXVS*^YO*JyO ze*#2*CVPJj17aJ$mQqMXNT$+C$t|awCi@125nJY(mZv0y7{Kdc{U}sJgkzY34a+0L zo`ZO%5l`DC0D{ASfzez5{ZS~wAH#`Dvcn~MAi(DLHDCarwpXqxpCzIr3ynm?o*FtA zf1C)#1t4sM1!SFK4|}3HW1oYa8*%71YjoPJqMHt@;t{_PTjz>r9yKJs@asMg41f{< z&rW+4l5`iYO5 zp#r3HTUojZ!xAgRe=gzW`h^!kDWWz6p4j_G7{G@S&zo1P_qW)0VOFevZH}u0?M_VF zBOVA~9kZhD2xRbtbz^&{XD5clQfL1ys%w0e5h8wG6!C4ezK0lMr~zi9W*A#&7a;D} z(c#1+v;Nn9mSgY#C|IvYBYyxwp|$I8;vr(-#vSgm`cdEoFW9|vw_5!d75^>qBi%>h zReu4O8AOst+PTY)%%`kNNHjt%GhXmgsRi-w{Ia-rqX_l>k3(LrM&5XOkt!3L*GQhj zuw_Srr}%&6YBPZRc-GJGQjv+_XQ9e&fRk+iu^Cunu*~jU^!{hhqAUhb7RqNC=(qxt z=YWvT1|e`YLR6-ejWwPz#N~-@B)}8F0Is<6t!e+6pF2qY>F!+;;{2P@ z_&*3g)%%kWBCrkXZ6NyhZ``<1?B2b*B2b8FQ5?Mz>X}fKJV4~!Gmqhm-d6wypzL<* zF7+^Tu#$?^wNyh!Lc5gItzsChlbJ~GE~Mf2uva0(0Nx7g`?V{JubSw?ZpLi$&o3X( zMm+Z;o>dY5EehkqB5iiMK?>lWgy%t7!dT0&b+H%f*O*%?s4=aWbE7MTLPhk8uO_$%%>yh{mec+)C&rLss3Tqob zdVFfOz;{Ba3l@YQ+f7QmItzI{4~m4#&tE(x=W|f}8u1ONtB}eYq5c78JxLmZAyyK9KM49* zx(X$z-0V0zPc~i1Tp@;d+uZ5orOmKW$1hlMPe;+z{b&l zGJD>4(fj{=;~^Wvdj`rd6atXIc=;#epc|C(qvCTbRB9}420Sqz}u7+(RUuGoTFNiJ0bhT`U(ies;LVhm4le&_u=Z|fKRuY}W?X!Pvq z)oDKpikj5x)y5xQp+P+iCADl@fcW3f9{%sNYgiId&rs2=L1m>H>R|~-Nj)|`sz682 z*?GwsaUzxokS9tRrF9M}cjfXfnJsUi&T>!|&$|QaCT;8tBFl_S%YBoBBC~lfr4lOz zXr{0>VQJx3UoL!0xr7L2xnP6p2pB>Npg$B=yH4FeH_AjL7lZY=3hYvCUO}rah2~hE zp91f?@2&tnJCF8y0UG@`Kn&0nC9r({gx9MhmbFtAjH7%Gekk4(p@8AU)yYT6pU==t zJ^XwXI259OEu@8ce4&akP(0haEa>)AcnW$>0R_kKY7`%`**PiByq$g#JauI=%yDc6IvN@ zj~gfgH2z_87?n=6F(4-!V=wifxK7>o{U<;>l4d|9%o05HIN~>EB`E+Zex8X)y;Fdc zsj}Yf?ccLQ!XqJJP$13tqbI7iY>gRH?ZGOLEqLGC_Hb2m> zfa3AmoHjziN@bwVS1=a+D*ZUZmMzHt#-V;*Gwo%1OKu&5fSCX=XyeVoG_y^2Tsl_> zRUxPto`=A?YFhp}g8`JgBliCGum^TUbOWOKjmdwcM?)#uhH$B}Hvl9<6*PML!(rx7 zEYyay&N|x;n z3xVg)E(%$IG(QJ5kCF2NV&ej9?kCaFs~4gCq}P-3Zv4?tZwvnGpAPQ%&YSKN^5TpS zRrRh_gi129LP?KIjxgC+6VSBac|Y)qzLv!5T=%sUtU3eGJr`%u)#M+EE&}Ggf%aC> zTcXf3@vy*Z&W=Z5BjJoW7xnxPEv83|!a6=0il^%k$q7|)guRo4#=@pvKc;QMyBR+< z^9SM&9(}|k{NLYk$DeM`rA~V6hT`SNJ$O+(byG2T>~P>ccp&gL^h$4iN_adZFvaE; z2w5!p-u#09$KU*Ro%#auk00N)IDE!TAWq3sHBy#s!N6!v&P)#Z>o?~LC<0Cf5*?Gi z=0ScYbNcRlp5lK4$9*@7CAPxm!-(db{XY#>UI4+&Aze(`vh!);@ZOBLKWyKjd>X)} zLpFUI5&)UwbJ6qjJdiVnM&~=}nbSYS66|#0F3f_FdbM zhOLd{@9i&rQ0je`{<$bG9{50U-hWH5=mkMh_{DkQEkeyL`d+ReyuEY2w|`#9oiizs z?v=lO$&>c|hwPDi@G^c%<%HvYs2mc1w>V{vb0n*dytxDe#Bmf#g`ddy3E7rWH-mM` zc6blk(Ni*G({~|{%i8y!gjJOQ&~UXFy{#_;E5F4PCUeWlBkQ{~d36sIm*p-A8xP*d z{qnzo@e3sWxPAW+`*pg{?&0k?C+OZiCc!1*hksOxpdX#|U_2g`Z#7E&@Cg#*<#ecr z;zb!j;-8rq*o4QAO{I%o??FYce`vuQIAp;aeDIvN>F~UF#A9Z?Cq7}ncl6WtiNAkd z&U?vG(~t6cmoN&GzTznR2O zto9H|8j?aKzKDhfK3sO~xt>96G0UX@4ol5$(WFSkTgMDH&bgcm>(2E`kxv+;V2dm;cr)f-U`}H<5WDjW$s) zhKfBxTp`NK6!<9Jjh~H5S>wVd;xgo8mg!-Bj9WZ>U;7L1h4>}sBk3zPrq&uFO*B&& zi7NFJSpXBR^Ftz2b0ZxFTL#=8LFm+XFKnB-CKaeJI7IDwUItdJkZi++&LyaJ5 z#9+rf3DE5@7Hpj5UY5J-Ag(G=o(p>JQ@Rkl@%V0(?QRtBUUAL>chfZtxh;*Z5?$xk z`648UgOMDbtdn$#(DG4{mkQ94g)ogU$AY2#kPM8BP5H)vB076%=-iO>Ej-OlNMN)L zrnj6Hn@1iB@;t=3$Hq<1)kc0|*w2hk1%>eqhe;7oGUD*emRC2zrhPOsnwy-R7~+Y) zdY?)Yv1)~58!q$_G_VOI1sRU^{!Ir7em~yDJJhG}-hF7`_d(}o5~_RP2VIg`OvAp< z3xZiM=$jMg&QuT?7#DZ$QOdB(Pa8-(f-qDSaob0u?m%VCmI$vxx{ep;EEelY07gs? zptJY?I^xoVpZG)~xbFbZ$`6T?^KUV39fR44tl$@ceLIHwdIG^uzg$kx+~knxA6fa*-zXYrw9QAU_dl;MHl-74LOo7>Fq{@kjf#GetxPDDvFnZ+m+zyI5JEFX>M*}m&6l;3+$jwwnb$|nKxqO>ng zEsz1&GxW@wc~f=`y|(mT&icO`4COM*Sm@a)$WLbd%t$WCPh|O3hF@pw{(x?SP4@@U z`@fa*8_=8H`xC3h9W}u$s>#2~Z|JdvpuMVL-Jw@M#=Nl*sWTu$SjC1Lr)(_ipg1&n zG>C*N6S+I_P4MROU``H_X`KK?BqgqK*gV^}$Ai9n*B&VKZ62uk1c+1^;^(;p&)2Rd zy`^muHBio(eGjka`hhmqN$qMt&s8wp9HtOfI_owt-JG8NFKumI9#)G1*bMRTi}F~_ z_U0rA6~eYaSd?G6MJiZpm6vr$bY#Bclzo72*GkVzM45z*r@5#dqbd=ASCVmVgRpK% zurWRfiVKzq?N%z|7}%$({lAZ1|9&u(j+p(ghB+fZs;kQ=sSzER&YG}2{gs)~>7N>N z%kscR-&W|e^Emm}{~%b8H(4{kCZ8mB)d)lRR(>J7f@!Jtxe{#HsC&a;#8$;I2|FXc zJVc)@F+Qy&KnD`yQk37EJO`qEjj_K1r}{KF{;ymdQ#1Khp4LI#2-Kzf zriQ{-qKaVwj7P;48y_E_2M;V!C-cO{5dwN?Ax_Inc}XSo|<<%eoLUKzK2_n(nI zy)kMzd2SOHdwtuM>@c94U<>{?{=%Z(_PdPhzLtWvG5|CA7sz*~deMj={;P(BOxJ3S zO+X!Dsc6uNVH;`mOCXGjcT%YzqYTPnw4)F|5L@PcDbE`awLbkB=!d1pvjF~9#bv($ z5cJh<1|@?=*=iGXqnDrM&Af0~+6}aAhD}=+GXVM7zBBh1xWqX<*8G|OFxo8v=w_8l zJrxc9xhB7nmKTNb4iiiTYCLYAiG4Qg7AfNjs|}Y>5A~Q!7>RkP6}NguKPV-a*(OAc;+Gxot7@Tr`S0DN072v{+`L2rnjVEQ4S`<-r9_ z_Rx!(FH+(^zx`h_z*UN507U&<*$~y~;J%8^o&Ar2klvr5alZuHcsHckN_3YEj7;A) zcS%ObCT{ypLfaUC+@>zh2;{c(p|Fwx5DjLqkzg_HJC4XI5P2q^0F53&VsBm#c&_SM z+M!f>tKu~Y5a08P3%}FmIt5bRPr=Wuy!eEuint0k))LPtx%> zbSbCs%g>fXho@PkPfh*-pXE<5*Y6KBaocYa+9v_n+e>A@@6o)Vl9^k=`|Fhj{ljg% zetWNqvo6C3p+@fqn}Gx8#aCan=Yi(UIt&5B!ZTrZ45wcGyB!0_iCjtsZttk zcQ#6fkBdGU&kEZ!3B?jnl#mi%74@)yd$pI%1Xmu~lYeT$i2q#s&m+Lgv;U0SDvRj* ztX&g7f7m{_B2vFQ8omR;Pl5Y)4B1allTTNUwVG2^uY|IwawF(w+$;Q($}Z~8c#W|xVgiy-Y)@I)V`?a;=yRcP_0wz} zzmHy@TbtEa6yufz9jWjhgZRsrt1u?3lJZ=c1Z(4sO1dYF96H*mNCi5BNbH}LAvwpL z0G25k)-F$~i(8?!ubA5<0oWXIl_R(g_d#y#$tM!?5nnM)KZpf)xN z6+E0S`@GTXr&$xOIhhzOqkaO)L3m#tZz&?fsC>@8mO9fAj+SOx%^3o~)#8-GjFl{m zTW3R0#L2V#RM&&2Uzo^XqS1uI z(X4uUyiAC_2y5P5^;GAgw5e230^kv5oeCB_dw-_*({u0q(Tj$xv=9Ngt4$KjR^9@Opf8F-fh!1PI@jD`)>%)>D>v!oz&y*4=*0BfG<{zb_o>^bJas;E`_OU*5E`?p+iQXN z3@(LGV`E?hHj-#$#$KxjE%_ysf9cU0aVXUDZwO3;sT*;XcvqhL{_D^FmvJi~7$f2E6M( zGrG5}<=j#Rz(YTb{v>2mU-+T&yFygNU@a^+TXvx`3^(vvotW~g;a@^DOf)+U#8Hb8 zY1l|Oi>*cQIuXl@(t7dFC;Peh2jahSiuwJp5v0D?^NKfH2wLn3o$!6O1tFNUwy^`zy2%tn0M1DE>=bU z_!r_k;x&0iJmTaonf;GPCo%w*Cuwg16{PO^mwuaP{|s6u0odiJLL3A2IAmFmM=KDv zT60{hjKY*v1+g2mYVeUb=+8<#$CZ*&h1Fe-3TMr)T)@iUMe?xjS$K%}r%fZ`=)>UqKHN%POH?|Rn^K8ux zmV+YdxaWzOI2s@#g{3eHg{1_JNrcJ+-AnOU!?!&ztuEz+f6bSah_rwD@gRIIvu3=F z=C}+i{0r~*cwRG~Zkqj%h2WlmPK7$}zo5=CZ0)w+B(#J9s1tv;%}MAyg4!-et)6z@jY{dIx`#oZ)DK)Kw(bphk%`zkSEq3pZz+$4;(7}T z|J7gatCC;kpdr2QK%%%?UeZO2e-Z$pW=TiCw*i!dNq4^uq*Oz^pnP&u+tC^cpgj4< z>%Mp%J?)jPtr>(GhlV<=TJMhfnfPKm)CTg9l$>~XxY9%Z9zT!(h}s#FT%mWeI`+FC zRvv{-=x3r&hV82SLk_w=EYr}Z4z;Y3+6UyYBR>N|rn_|A*z_JA`8Cj{b^mc_Is*u; z{3GGpm4D=VI+M0dm9lK?4GdWo7|b@y#77vwc*eHjTJM5i;xp0bV&aKD8W)vCGJV~I zGWFjlpY zTOk41W=7GULjZ!`JL!&5rafiXwysL8E_5t)zyKy0%W1^wkqT;Q9F4rLl=Z5>_NC@h z(}rgMbr`+%mpcGi#_`YD*U`5+oz~_1@TUYqREO$56pY>pVB06I$c#)ibgyHp(Fz8j zGbAOyA^$6SBi_=&1udLeX4B(4sp6Yq6v@40nOw?-9wU`%herAw>~!cj(dIO9L`sC4f%Ii!Eby z-v2Dc{}!J3+X!reng%2O3$bnCR+#_YlRnn~a0@Vp1H7??tDfwU&9z#oZp2AFctrzW zK^Zb06&2%%i!&T|*q>%T8+NludWMMFOYgA;ivK*$iU>y(2OXIde}msAnc&7P=283V zsGqe8b(VfZ%%^*>jISZB0egR@vdVM9DLSOa9*$kjKdW^9%AmkU;ow0v5 zKQWxjwD`o|M$i%lKtKYJP`vz8P$FQ1R*m{>byfH6Q2Yc^d3#Gzaa6g79ad0=vBVp7 zOQ5HUV97MsAZ%O@v zs3KYfD@}blGn%_y8yo%X)mpTl)0f0f!6Cq3Km}-Ua9lzCBo<{{oP1TtozGSc1%Sll zBzge!i~5HXm-wu%2O-Stf6bRvLP`#&c+#@U37r%gCt|z)k9Q8o6?>|2d@qe`SC;m2qwlV>wZ`Bi|Y)(~v`Y=FjU z5Z5a&8R2#ebECbY3KtFA;IkzxF}##FiLG;gmgl6&Bx^sc&-nGcd5>FvpQ6mxjlZR$ zs}YUzvY#Gh0q@s){~MPax&_>Z-U;~3A@A51@UDMj?+CP)0hD{Te}ILYS@(WybkT-K zdmC)GwiKQKrV8 z?jA_BIBK=PvSj`4MtSSYK0B;@+r|Jm`Ny6O`a@xTK||$`*c-*TSA|_B@rH?>QN}U> z5|1%9jM((pSpEoqd+vYDnAPn6sSy8n^fJQo?0*Td@2Q3@FRfhzn zb1V~r+ftLO!iOKKh~S$L|L^A~(}rjNdwc#8zcF_#)O)-H^#11PFQNDTH+1kw*Fmn9 z1i*@*xId5T`ENS(1&V2R6xzZ7%9DRRJs>FF4WOKjZV+v_ODL;ENnyEY^ z%=!Z(Qyta&6YY`!OcP9Tw_4>l>nKV@vz)fbXQR;c}a$||Fy4J3%k->8H&9>>z=ya`@ftMggO+n6C1?9 z=u|K>aWKzD9MrCD1?!RG|6M3#wX_>ewszgF5?amxl=zQ^4gD}!kJn|B1o~P3q;P1b z)+@2euB0vF*^1seF)k83Z=T_9GnOM214Ail4>N^I=&vCRKaZf?E!iMUTBO?d&+=qE z@d>PWE0bi5VF>R}Q1;xxxDZ_m7CRsp*!!=>IslUZ?~DB-)A!9xZt&A1oi+Jq(Q*a= z*arGsC@x!NLBurL_;y?ghG9F6Y4;UG8{?0Wt1wabgm#fE1=t8~5ZmT|i2Qw9Y?*&AI`fm@#-8~l2yq_ttDx+* zXEq4U4D<;;mXNQ2bTlQm^fWU2uK-5yFlf)zHWi;S89f{eouWyne>sdk`S;@Vnp*vb zqENZUPnZF;3$`4;i($x*^OGC>42C1dt>e&A2EcKxGKk`l_&r*gBTcdlTW$&7aaa*& z#k1;F3Gc0lyJV)pmYKS-7kTVahoElt?6&7`fHAxq(Q&T>^GwF@At-+5pEB{<4JvB) zohQtt9<^b^aPiNBwGpuCjFtsM(}}9Y%#=yMvf`0Y7T5z%^yG-QQ@x(he#s>c$Z38Uhfxc35;$+dxa zU%ov!qiFUwl(#)^;i9McBACG)P+x(13*vb`h?Ek-sZg95{tT49cr)?k8cO`Pv;U%W z@MoaPlF5r^m9bITv{y0*Z4u&TZ$SP^n`^(n+kg?4E-UFhTaB6b!UoI6sv0cJ;nXQV8bS}+@Uh^-Nq)Gy>jXocBW*pThh7RoOi7)T_3qLyEy zs7M4OWcnANzC?#wAoEkqp;sv4m*@BY1=QQ+d3`UYS)4sLFWxy9hOF((0-%ns-K8R&R z)VY8xrCXF#-~S&$GtiC(X3O!L>qc|86}Aui17n@}=`W0yFaRa~Z(E@F|7ciaCjU@Y zx|)=&EQ!*U_`@QF&}+=DxfG(%zAPF`{J8^b)A|A?w#5%#9%S3!z>M z^?3Q7bRQ&xqGAUB0`-PMATJr<;VHT-qi+o*KNd=&Qp$$>7R3L&{G^&&sGo-}g3Sy> zBoaR-TiZ;8dgY(=yQ5fJC;=$2_eaB3L{QmGRrw?pQcR0wTz5R%-}jCkmD+n#O6@&L z8=F$AwO4|gReP^U?M+*1&yUq2TCGiNS`;m{30kA}4kG!+@8941@AJB^bMHOxbI*P5 zd7k>M+&&#&vR&!KaaN7QuHFwtvB_47L)OlxshzTrS^@{gwL%hpY~NtC62ZGzyDq(f zCzFr2lsWfgsyU2i!c@J9_@XY<3xVXS7YYQaq4Y8t_u(QQ zh!EZCl&zbzv#Ts)fLTyw=de((>RwY&!gm@wZI4IR{$MCpuSJxP@3g?^lg#xtO91?( zISLw=mxAgOVK|q+1G!UHbhu4{IO6n$JA-7>4aXn81V%Xx`>sU4F&D6Fv=o z+ap(dct>XHnAu~XP``6?8xkrH9X;>-bdcUMP?eb`Qgt(&M1yne(=1_9Rf*ZGy*YX6 zd&m}=eeltMOWikLV#SRE!Q?Vt^F+zV9Xqr3XHFa*yaL>5EaA2dcH#cRKLJaWD%J)C zo9&%dIfS!|WgHz+keUn9md4cH<$n9&-DX6wx==kKpZ~XJ%IsP3v6Mg946gB{Q5_d{ z^c-+jC681T`%zO;xwiK-H1pWYa`Nzz+;M|qimSD2^{d&0NI>3NfD0ZaeW#Y-(u?8V z^6#OzG&r#f#6F=-YTCK_gx|3eaBR`SW>4W%5AjB+XWTqxz@69Z(MIE%Xjt5(RJBs6 z4u)M!qIU&f3?eg?{W(sPbY+yJ0FD$mFryQ0m7bI#ElF!!t3vu+&6KYCyf5&T zyZT9O9{1@lt8XLrjJ%CDTqL_yP!LjmZ7;KPKJBGHeA3Og9Q#=TS*%_B$Woh#uXE_3 zG?k2XTxo!uNQAZ5=zknQOGzRLg3>AeBp#z@sQn(L)u31fr*n_~K?IO%!m#d^bcx@XzxE@{h+-==H=_F1 zKL=n94QcVp*=?##|aV zMpYlPqRbPYhxy9J$>UrcELb~cwl-l2$_&76hN=~LPjH=Pb;lF?k&eIpuIsq)P?;bY z{4LD(7@vbHB>*RT#cyF$ue0*S9iR(#Eh%anZ{(N$y>l#UPUV~bQ689_(e9wka8L>V z+elF~Blx~QSgqmX-c=aaT?!K7u+)S=NLKJqcMX$Hz-MoeLSm?lV6 z^UbJiRS3#ae}tLhm}g$G9a7ite${(VkV5Y$CXtt&;ZpsZT_#t+2EZuOF<$r2P<(&) zMvX&c_#w4L9ePD~_B`U=Am&P=O3c<|nx3?Kd4;*gFFW_>*`$Ff(%a;cpCtJUPU4Yf zam`^e@1Lra#3QL^)^fOeKZ-=v+G=1BWZc~osd8=TGL3;i>h!@fg|;6wUR@vUK1P%@ zve^dQZv@UjgrVzZ?bze>xwMuYn4+r{&$pl|1rX|iAZEXl;UOa50rNN^zph>GUiFif z%pv+l9UvDI)shK)X>eI!*=T7f6q`0{GV4NAxUv#aZ!((RBcVfo zos~o0)#4<4NEq-4m=PJyM3I)|#Oj}8QKz`es5zWIc*jA0Lt#UuIpI045X-Ra@VM>W z3v3`poVa<9^MhTj!5-YtsROWQ7F#m-=KIY>;_E(>$MDr|Mo&N!=w+7E zaJq)=q~!hF_do`O5R;a}5Gufa23vlydF&!KPBLnSO7ds5XhWQq$36~2MScxT44dU4 zHhuH+y|M`Z>9?=^P}_!^GLB?%;rL_5oqCO5EP#Z^QN+;k;gbQylN0ZD_J7lde+5{@ zv{v0(MHKX0p~P_(y%q+O^&O9QEwzxR;Ses2@$xSS#nl6z7SOcEO@(!D`F9quP-lh2 z@5ARQFLCC%ZS4_XIpJbKK!bBsu30j!KOlFqCg0_;;_T!t^pKsX%N-oRm+eG6|7u^r zd;Q_rX35|(DU+P98TUB(e?NLpOs8{vvP)S3yYAM>O?^L z9s}=>S|2`R zSG}|S$B3=^fwg=AW?i+$L%PoWS9a;j{YP#=CWFnBVrn1ne7vK~{8ouXPuo>kOG2LH z%rarVKmawlimClf_MJ0O)r8SE!C7e3c-F4Dtg4QJ!{Ylw#{C=edYU7!#B*cm9>>f| zf!vr_XWT0_wDgY0GK|ILgHnoR@pi68*USLQJD8 z8xc_b2}u&o=}Rr|K=^xi8;Y~^!wu!0>ynlL2BVc=%ZV4n_Wf^X!9*i8$HPTu*!6>zRqPQkDcp zk4AhER`rFf5+N9G)>$)V!9WUyFGC~=^F~gHPmobpOsC!2a3eb^uAex}BxpG{S{z-CPbM*vY%yz+TZ28IloC?ZAX*$Q z5i;hDTsJ=2f0kEI?;<*?n&-U+6WtQm5_!@@UUW0m8fEs?N!W7H29#tQvZXERPfrAl z?k9T?RYhT46Q!4mq&RyReDapcob7Y-i@y?FQ*_L#iQQ2N&GmZN3|B>h8qGt}e-@%Q z5lnpV{jRT$(4T%=(uAS2Qo86Nv1BF6IaquTn9lYGZc2U?3}eSjSY$W{lTE7oOw+qr zm*0h5;s^m;o8JdwDt!qVSbRMf8v<%Dbl^+n6*LfPIFbI<2a%NB#;)bF$IR5d1~U zV$O(k$iGy3;t!u?c>LzgXgCUb1F8#j{o4LbK}KBvl__f<+Gyw|KL+87N0HW8>DHqE6tOGq!6+Fwi>c^rm1zn$Ee3pwLb)84w2dNl(CZT*A zrMECf+aW-&(P-2)Ws|EGbg^X-JtlFilGd!|qgBlC1om%NwU@zdOukfpqZ6k=#PCW` z7RZ?l2_v|(I9k3tt5>K*!^F?}&Nmx8B(di5y{0sXD+fq8W^C+Q3yFO1<#aF}*xTYI z@?A4BiPS+c)V%y7OB6{?lrwQ)a5sX?dh;OWin}A7falm+Qs834s3M!D;i%!wD;Ap` zS@Q6rlz|rhzVj(HeeB)dZWokJ(7HLiIzPhh#)f}cQC@ibxn2?nQG%+y@(zM6KO29) zH^h96ulw@(X8z9gZW|uN8Vg)aM5aRZB>)t(VkXqsP{1`kFyCCx2Z27?dfbwEuWd1> zFLvk4r%0+=7hI3XkG)bfj&P4PqCQf_C>(sDvK5p+ZcUk$^LG^4>dqE>e%}>CIFYuD zGsu~0fTmVOq`LENAb5dFOgwu~er8&40?Y>xuKvNf)7$ zr+Ia+;TKZm{H6R^x&QJsf{`mrJlOCXJFxnP(x37o%uYpV2!n$scuM z0@lsNTZ%s@6fhF!vJ^vrY@m`cSp@4pJv$gqc;YRXOAJTuWX7dMB`LXQCNJKO-egqB z9{?L*(j6o#X4KKWn;djx>Yqfc=j>R(p_Nov!F#QJ{;9ib*!I2!HZJu|lP_kZrTQzZhkrW@{+b%Bd z?8MX5R`($YwJAze-b(dXfK>8)rM+?h*82o7LY!ds2CaJfS{m)lh@&#%QhOf3nSjBS z>6Z%7{OvQi{HkKeE2gsj6_-Y0&W&`;iI1Q^QHuNAfXxq-{rr4Kg>*Epg+n$#lH)%e z4(g|Kcz!b>F@hOxPYNY=gLL?bkzKn;YM>|w9BKZQPaMF1rl=Gc-`&a z23Md$!Zh*3t%aJp=yWQNANqd<;%?xXUzJX{;&xzG09}%aaB&@ywWY=nJUx3r5P^YO zVsVlKj+MC|Ik8jdqS38OC(jJWQ}&k=d4Ltvc*O)WN?j5g zMZx7xD6=Zp_@{Ljr0o|a*HHt?M0lo~Wezj@yP}70ZoEq7r>`A@@2|XL$;Il}hYMzL z=G&b(!YJg4T_vXu0sV-0vWN%NSWjA{GIB-|LL`RX&b&%yODJX<%s^Y;j1@OH;uc<) znS^19IzOC5!C%I_BF%{s@@qb<0!c&_jkt2Uj+ttXXi`=~-7tL;F3=BS6!uDb|w@~>++LU-IEULj> zB^_aQJqBqIyX#&YLwA7oir+F+lRp6dVDKui<-XTDyCMl7iw^`43p|4tF^g7)&Yhe9 zJ92Htr#{0y+)s11SBkWeBP5a%I01mQEEja@KQL%8-tDY7xK4OPJ$^^Nt!+xa)!?kRrzr|n;=m}1J@jwzj$NJb_Z~%ZKjX$e;==}&NKm8tpC^@&Ul%&#~>v z#n{HTeKqjR2N#oI0#6{Sfwy{@p}!ajMRQZ*%vUwm1bXU7k4`#0elcaDFZLAPy+Q6= zzU;o0WGQb@w_UCw7vT>nAw%dvVjSAtx5lhfecN3-0Zk*Y>?w3E)P2yA+7WLI}I%2OM4mnZ(wklp);QVg%YX!_imhI zL9l2ZE9@6Cwc%hidLE*T7u+<6IA-%($7-SY0P%lS|1}YYQ4`fgcsTj7u8b*jAcK!41Rx-g*h+qp|O&Jz|2+w@R*BQ=yI> zX1%tu{>0~*GvCE?vD0rU968OGGI+5M1rZjttEAb8Z5-!(u`8+706@22T-nFL+2fy5 z9Q8H`w)JyqyrE zhEX0lx^^;uDO=%FRpQEt!PE4;R=4xso}vKH(G`>1%q0>fI6WFRu686m5&2)CN%|5< z!n0}YI+m#buU8x45-63=8oXz>kM?u@zcpf1c_#%fItv?Ll&AW>`N^7{uwlq3{ zquGBA`&k}_lvnyx>Vg7vcC}C6F3#L=%HP+mNA}AXL3eAFFN#a}8Wu0{9w(@D-956i zhK_^VhR!gew>eK(4YlL-8ZRHyI`NoTlN1_Hlqy9S=NP=eiI<}-#7tj4f(p6C2(?WX$jlRxnDZ$!OUg_XdH<&PeAG|YC&>UqG$Y>?L@k19>~I7RbbQ=a@axGy?t>yaTGV&& z5u^UAXDP(D-jK2b8!1Zjl+u&_=L*0POusa{&%Hlli|+w{kkc7KryeO@z@w?K7UXR~ zfeO8u+l!V}%I*DAGVH|_=x6-#Ht~F6zf9!$B26>%`^6x~+A8Y*e-lE%%Q!N+D0^Y^ UqN*^wely^Srh!Ji8ua!506-X)`Tzg` literal 0 HcmV?d00001 diff --git a/SrcMod/Assets/Logo 32p.png b/SrcMod/Assets/Logo 32p.png new file mode 100644 index 0000000000000000000000000000000000000000..3ef1c5a78c5eeb6173a061c3c77abae109f841cc GIT binary patch literal 1668 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 literal 0 HcmV?d00001 diff --git a/SrcMod/Assets/Logo 8p.png b/SrcMod/Assets/Logo 8p.png new file mode 100644 index 0000000000000000000000000000000000000000..e318f364b0b4589af6f55a6d6920593e02ac72f3 GIT binary patch literal 341 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 literal 0 HcmV?d00001 diff --git a/SrcMod/Shell/Game.cs b/SrcMod/Shell/Game.cs new file mode 100644 index 0000000..1a21734 --- /dev/null +++ b/SrcMod/Shell/Game.cs @@ -0,0 +1,19 @@ +namespace SrcMod.Shell; + +public class Game +{ + public static readonly Game Portal2 = new() + { + Name = "Portal 2", + NameId = "portal2", + SteamId = 620 + }; + + public required string Name { get; init; } + public required string NameId { get; init; } + public required int SteamId { get; init; } + + private Game() { } + + public override string ToString() => Name; +} diff --git a/SrcMod/Shell/GlobalUsings.cs b/SrcMod/Shell/GlobalUsings.cs new file mode 100644 index 0000000..a019627 --- /dev/null +++ b/SrcMod/Shell/GlobalUsings.cs @@ -0,0 +1,10 @@ +global using Nerd_STF.Mathematics; +global using SrcMod.Shell; +global using SrcMod.Shell.Modules.ObjectModels; +global using System; +global using System.Collections.Generic; +global using System.Diagnostics; +global using System.IO; +global using System.Linq; +global using System.Reflection; +global using static SrcMod.Shell.Tools; diff --git a/SrcMod/Shell/HistoryItem.cs b/SrcMod/Shell/HistoryItem.cs new file mode 100644 index 0000000..7f9ce1b --- /dev/null +++ b/SrcMod/Shell/HistoryItem.cs @@ -0,0 +1,17 @@ +namespace SrcMod.Shell; + +public struct HistoryItem +{ + public required Action action; + public required string name; + public DateTime timestamp; + + public HistoryItem() + { + timestamp = DateTime.Now; + } + + public void Invoke() => action.Invoke(); + + public override string ToString() => $"{timestamp:MM/dd/yyyy HH:mm:ss} | {name}"; +} diff --git a/SrcMod/Shell/Logo.ico b/SrcMod/Shell/Logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..5d7b9748100ff82ad8e36336e5acf1c9dc4499f3 GIT binary patch literal 360758 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 literal 0 HcmV?d00001 diff --git a/SrcMod/Shell/Mod.cs b/SrcMod/Shell/Mod.cs new file mode 100644 index 0000000..b4472d5 --- /dev/null +++ b/SrcMod/Shell/Mod.cs @@ -0,0 +1,25 @@ +namespace SrcMod.Shell; + +public class Mod +{ + public string Name { get; set; } + + private Mod() + { + Name = string.Empty; + } + + public static Mod? ReadDirectory(string dir) + { + if (!File.Exists(dir + "\\GameInfo.txt")) return null; + + Mod mod = new() + { + Name = dir.Split("\\").Last() + }; + + return mod; + } + + public override string ToString() => Name; +} diff --git a/SrcMod/Shell/Modules/BaseModule.cs b/SrcMod/Shell/Modules/BaseModule.cs new file mode 100644 index 0000000..5b830ce --- /dev/null +++ b/SrcMod/Shell/Modules/BaseModule.cs @@ -0,0 +1,258 @@ +using System.IO; +using System.IO.Compression; + +namespace SrcMod.Shell.Modules; + +[Module("base", false)] +public static class BaseModule +{ + [Command("cd")] + public static void ChangeDirectory(string newLocalPath) + { + string curDir = Program.Shell!.WorkingDirectory, + newDir = Path.GetFullPath(Path.Combine(curDir, newLocalPath)); + Program.Shell!.UpdateWorkingDirectory(newDir); + Environment.CurrentDirectory = newDir; + } + + [Command("clear")] + public static void ClearConsole() + { + Console.Clear(); + Console.Write("\x1b[3J"); + } + + [Command("compress")] + public static void CompressFile(CompressedFileType type, string source, string? destination = null, + CompressionLevel level = CompressionLevel.Optimal) + { + destination ??= Path.Combine(Path.GetDirectoryName(source)!, + $"{Path.GetFileNameWithoutExtension(source)}.{type.ToString().ToLower()}"); + + string absSource = Path.GetFullPath(source), + absDest = Path.GetFullPath(destination); + + switch (type) + { + case CompressedFileType.Zip: + if (File.Exists(source)) + { + if (File.Exists(destination)) throw new($"File already exists at \"{destination}\""); + string message = $"Compressing file at \"{source}\" into \"{destination}\"..."; + Write(message); + + Stream writer = new FileStream(absDest, FileMode.CreateNew); + ZipArchive archive = new(writer, ZipArchiveMode.Create); + + archive.CreateEntryFromFile(absSource, Path.GetFileName(absSource)); + + archive.Dispose(); + writer.Dispose(); + + Console.CursorLeft = 0; + Console.CursorTop -= (message.Length / Console.BufferWidth) + 1; + Write(new string(' ', message.Length), newLine: false); + } + else if (Directory.Exists(source)) + { + if (File.Exists(destination)) throw new($"File already exists at \"{destination}\""); + + int consolePos = Console.CursorTop; + Write($"Compressing folder at \"{source}\" into \"{destination}\"..."); + + Stream writer = new FileStream(absDest, FileMode.CreateNew); + ZipArchive archive = new(writer, ZipArchiveMode.Create); + + List files = new(GetAllFiles(absSource)), + relative = new(); + foreach (string f in files) relative.Add(Path.GetRelativePath(absSource, f)); + + LoadingBarStart(); + for (int i = 0; i < files.Count; i++) + { + archive.CreateEntryFromFile(files[i], relative[i], level); + LoadingBarSet((i + 1) / (float)files.Count, ConsoleColor.DarkMagenta); + Console.CursorLeft = 0; + string message = $"{relative[i]}"; + int remainder = Console.BufferWidth - message.Length; + if (remainder >= 0) message += new string(' ', remainder); + else message = $"...{message[(3 - remainder)..]}"; + + Write(message, newLine: false); + } + + archive.Dispose(); + writer.Dispose(); + + LoadingBarEnd(); + + Console.CursorLeft = 0; + Write(new string(' ', Console.BufferWidth), newLine: false); + Console.SetCursorPosition(0, Console.CursorTop - 2); + Write(new string(' ', Console.BufferWidth), newLine: false); + } + else throw new("No file or directory located at \"source\""); + break; + + default: throw new($"Unknown type: \"{type}\""); + } + + DateTime stamp = DateTime.Now; + + Program.Shell!.AddHistory(new() + { + action = delegate + { + if (!File.Exists(absDest)) + { + Write("Looks like the job is already completed Boss.", ConsoleColor.DarkYellow); + return; + } + + FileInfo info = new(absDest); + if ((info.LastWriteTime - stamp).TotalMilliseconds >= 10) + throw new("The archive has been modified and probably shouldn't be undone."); + + File.Delete(absDest); + }, + name = $"Compressed a file or folder into a {type} archive located at \"{destination}\"" + }); + } + + [Command("del")] + public static void Delete(string path) + { + if (File.Exists(path)) + { + string tempFile = Path.GetTempFileName(); + File.Delete(tempFile); + File.Copy(path, tempFile); + File.Delete(path); + + Program.Shell!.AddHistory(new() + { + action = delegate + { + if (File.Exists(path)) throw new("Can't overwrite already existing file."); + File.Copy(tempFile, path); + File.Delete(tempFile); + }, + name = $"Deleted file \"{Path.GetFileName(path)}\"" + }); + } + else if (Directory.Exists(path)) + { + string[] parts = path.Replace("/", "\\").Split('\\', + StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); + + DirectoryInfo tempDir = Directory.CreateTempSubdirectory(); + Directory.Delete(tempDir.FullName); + Directory.Move(path, tempDir.FullName); + + Program.Shell!.AddHistory(new() + { + action = delegate + { + if (Directory.Exists(path)) throw new("Can't overwrite already existing file."); + Directory.Move(tempDir.FullName, path); + }, + name = $"Deleted directory \"{parts.Last()}\"" + }); + } + else throw new($"No file or directory exists at \"{path}\""); + } + + [Command("dir")] + public static void ListFilesAndDirs(string path = ".") + { + string[] dirs = Directory.GetDirectories(path), + files = Directory.GetFiles(path); + + List lines = new(); + + int longestName = 0, + longestSize = 0; + foreach (string d in dirs) if (d.Length > longestName) longestName = d.Length; + foreach (string f in files) + { + FileInfo info = new(f); + if (f.Length > longestName) longestName = f.Trim().Length; + + int size = Mathf.Ceiling(MathF.Log10(info.Length)); + if (longestSize > size) longestSize = size; + } + + string header = $" Type Name{new string(' ', longestName - 4)}Date Modified File Size" + + $"{new string(' ', Mathf.Max(0, longestSize - 10) + 1)}"; + lines.Add($"{header}\n{new string('-', header.Length)}"); + + foreach (string d in dirs) + { + DirectoryInfo info = new(d); + lines.Add($" Directory {info.Name.Trim()}{new string(' ', longestName - info.Name.Trim().Length)}" + + $"{info.LastWriteTime:MM/dd/yyyy HH:mm:ss}"); + } + foreach (string f in files) + { + FileInfo info = new(f); + lines.Add($" File {info.Name.Trim()}{new string(' ', longestName - info.Name.Trim().Length)}" + + $"{info.LastWriteTime:MM/dd/yyyy HH:mm:ss} {info.Length}"); + } + + DisplayWithPages(lines); + } + + [Command("echo")] + public static void Echo(string msg) => Write(msg); + + [Command("exit")] + public static void ExitShell(int code = 0) => QuitShell(code); + + [Command("explorer")] + public static void OpenExplorer(string path = ".") => Process.Start("explorer.exe", Path.GetFullPath(path)); + + [Command("history")] + public static void ShowHistory() + { + List lines = new(); + for (int i = lines.Count - 1; i >= 0; i--) lines.Add(Program.Shell!.History[i].ToString()); + DisplayWithPages(lines); + } + + [Command("permdel")] + public static void ReallyDelete(string path) + { + if (File.Exists(path)) File.Delete(path); + else if (Directory.Exists(path)) Directory.Delete(path); + else throw new($"No file or directory exists at \"{path}\""); + } + + [Command("quit")] + public static void QuitShell(int code = 0) + { + Environment.Exit(code); + } + + [Command("undo")] + public static void UndoCommand(int amount = 1) + { + for (int i = 0; i < amount; i++) + { + if (Program.Shell!.History.Count < 1) + { + if (i == 0) throw new("No operations to undo."); + else + { + Write("No more operations to undo.", ConsoleColor.DarkYellow); + break; + } + } + Program.Shell!.UndoItem(); + } + } + + public enum CompressedFileType + { + Zip + } +} diff --git a/SrcMod/Shell/Modules/ObjectModels/CommandAttribute.cs b/SrcMod/Shell/Modules/ObjectModels/CommandAttribute.cs new file mode 100644 index 0000000..9d39d52 --- /dev/null +++ b/SrcMod/Shell/Modules/ObjectModels/CommandAttribute.cs @@ -0,0 +1,12 @@ +namespace SrcMod.Shell.Modules.ObjectModels; + +[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] +public class CommandAttribute : Attribute +{ + public readonly string NameId; + + public CommandAttribute(string nameId) + { + NameId = nameId; + } +} diff --git a/SrcMod/Shell/Modules/ObjectModels/CommandInfo.cs b/SrcMod/Shell/Modules/ObjectModels/CommandInfo.cs new file mode 100644 index 0000000..7dee2d0 --- /dev/null +++ b/SrcMod/Shell/Modules/ObjectModels/CommandInfo.cs @@ -0,0 +1,69 @@ +namespace SrcMod.Shell.Modules.ObjectModels; + +public class CommandInfo +{ + public required ModuleInfo Module { get; init; } + public required MethodInfo Method { get; init; } + public string Name { get; private set; } + public string NameId { get; private set; } + public ParameterInfo[] Parameters { get; private set; } + public int RequiredParameters { get; private set; } + + private CommandInfo() + { + Name = string.Empty; + NameId = string.Empty; + Parameters = Array.Empty(); + RequiredParameters = 0; + } + + public static CommandInfo? FromMethod(ModuleInfo parentModule, MethodInfo info) + { + CommandAttribute? attribute = info.GetCustomAttribute(); + if (attribute is null) return null; + + if (info.ReturnType != typeof(void)) return null; + ParameterInfo[] param = info.GetParameters(); + + int required = 0; + while (required < param.Length && !param[required].IsOptional) required++; + + return new() + { + Method = info, + Module = parentModule, + Name = info.Name, + NameId = attribute.NameId, + Parameters = param, + RequiredParameters = required + }; + } + + public void Invoke(params string[] args) + { + if (args.Length < RequiredParameters) throw new("Too few arguments. You must supply at least " + + $"{RequiredParameters}."); + if (args.Length > Parameters.Length) throw new("Too many parameters. You must supply no more than " + + $"{Parameters.Length}."); + + object?[] invokes = new object?[Parameters.Length]; + for (int i = 0; i < invokes.Length; i++) + { + if (i < args.Length) + { + string msg = args[i]; + Type paramType = Parameters[i].ParameterType; + object? val = TypeParsers.ParseAll(msg); + if (val is string && paramType.IsEnum) + { + if (Enum.TryParse(paramType, msg, true, out object? possible)) val = possible; + } + val = Convert.ChangeType(val, paramType); + invokes[i] = val; + } + else invokes[i] = Parameters[i].DefaultValue; + } + + Method.Invoke(Module.Instance, invokes); + } +} diff --git a/SrcMod/Shell/Modules/ObjectModels/ModuleAttribute.cs b/SrcMod/Shell/Modules/ObjectModels/ModuleAttribute.cs new file mode 100644 index 0000000..fae68b3 --- /dev/null +++ b/SrcMod/Shell/Modules/ObjectModels/ModuleAttribute.cs @@ -0,0 +1,14 @@ +namespace SrcMod.Shell.Modules.ObjectModels; + +[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)] +public class ModuleAttribute : Attribute +{ + public readonly bool NameIsPrefix; + public readonly string NameId; + + public ModuleAttribute(string nameId, bool nameIsPrefix = true) + { + NameId = nameId; + NameIsPrefix = nameIsPrefix; + } +} diff --git a/SrcMod/Shell/Modules/ObjectModels/ModuleInfo.cs b/SrcMod/Shell/Modules/ObjectModels/ModuleInfo.cs new file mode 100644 index 0000000..1200c83 --- /dev/null +++ b/SrcMod/Shell/Modules/ObjectModels/ModuleInfo.cs @@ -0,0 +1,49 @@ +namespace SrcMod.Shell.Modules.ObjectModels; + +public class ModuleInfo +{ + public List Commands { get; init; } + public object? Instance { get; init; } + public string Name { get; init; } + public string NameId { get; init; } + public bool NameIsPrefix { get; init; } + public required Type Type { get; init; } + + private ModuleInfo() + { + Commands = new(); + Instance = null; + Name = string.Empty; + NameId = string.Empty; + NameIsPrefix = true; + } + + public static ModuleInfo? FromModule(Type info) + { + ModuleAttribute? attribute = info.GetCustomAttribute(); + if (attribute is null) return null; + + object? instance = info.IsAbstract ? null : Activator.CreateInstance(info); + + ModuleInfo module = new() + { + Instance = instance, + Name = info.Name, + NameId = attribute.NameId, + NameIsPrefix = attribute.NameIsPrefix, + Type = info + }; + + List commands = new(); + foreach (MethodInfo method in info.GetMethods()) + { + CommandInfo? cmd = CommandInfo.FromMethod(module, method); + if (cmd is null) continue; + commands.Add(cmd); + } + + module.Commands.AddRange(commands); + + return module; + } +} diff --git a/SrcMod/Shell/Modules/ObjectModels/TypeParsers.cs b/SrcMod/Shell/Modules/ObjectModels/TypeParsers.cs new file mode 100644 index 0000000..cce44b9 --- /dev/null +++ b/SrcMod/Shell/Modules/ObjectModels/TypeParsers.cs @@ -0,0 +1,36 @@ +namespace SrcMod.Shell.Modules.ObjectModels; + +public static class TypeParsers +{ + public static object ParseAll(string msg) + { + if (TryParse(msg, out sbyte int8)) return int8; + if (TryParse(msg, out byte uInt8)) return uInt8; + if (TryParse(msg, out short int16)) return int16; + if (TryParse(msg, out ushort uInt16)) return uInt16; + if (TryParse(msg, out int int32)) return int32; + if (TryParse(msg, out uint uInt32)) return uInt32; + if (TryParse(msg, out long int64)) return int64; + if (TryParse(msg, out ulong uInt64)) return uInt64; + if (TryParse(msg, out Int128 int128)) return int128; + if (TryParse(msg, out UInt128 uInt128)) return uInt128; + if (TryParse(msg, out nint intPtr)) return intPtr; + if (TryParse(msg, out nuint uIntPtr)) return uIntPtr; + if (TryParse(msg, out Half float16)) return float16; + if (TryParse(msg, out float float32)) return float32; + if (TryParse(msg, out double float64)) return float64; + if (TryParse(msg, out decimal float128)) return float128; + if (TryParse(msg, out char resChar)) return resChar; + if (TryParse(msg, out DateOnly dateOnly)) return dateOnly; + if (TryParse(msg, out DateTime dateTime)) return dateTime; + if (TryParse(msg, out DateTime dateTimeOffset)) return dateTimeOffset; + if (TryParse(msg, out Guid guid)) return guid; + if (TryParse(msg, out TimeOnly timeOnly)) return timeOnly; + if (TryParse(msg, out TimeOnly timeSpan)) return timeSpan; + + return msg; + } + + public static bool TryParse(string msg, out T? result) where T : IParsable + => T.TryParse(msg, null, out result); +} diff --git a/SrcMod/Shell/Program.cs b/SrcMod/Shell/Program.cs new file mode 100644 index 0000000..7aa8f7d --- /dev/null +++ b/SrcMod/Shell/Program.cs @@ -0,0 +1,25 @@ +namespace SrcMod.Shell; + +public static class Program +{ + public static Shell? Shell { get; private set; } + + public static void Main(string[] args) + { + Console.Clear(); + + // Check for arguments and send a warning if they are found. + // In the future, I may use these arguments. + if (args.Length != 0) Write("[WARNING] You have supplied this shell " + + "with arguments. They will be ignored.", ConsoleColor.DarkYellow); + + Shell = new(); + + while (true) + { + string cmd = Shell.ReadLine(); + Shell.InvokeCommand(cmd); + Shell.ReloadDirectoryInfo(); + } + } +} diff --git a/SrcMod/Shell/Shell.cs b/SrcMod/Shell/Shell.cs new file mode 100644 index 0000000..661f7c7 --- /dev/null +++ b/SrcMod/Shell/Shell.cs @@ -0,0 +1,190 @@ +namespace SrcMod.Shell; + +public class Shell +{ + public const string Author = "That_One_Nerd"; + public const string Name = "SrcMod"; + public const string Version = "Alpha 0.1.0"; + + public readonly string? ShellDirectory; + + public List LoadedCommands; + public List LoadedModules; + + public Game? ActiveGame; + public Mod? ActiveMod; + public List History; + public string WorkingDirectory; + + public Shell() + { + Console.CursorVisible = false; + + // Get shell directory and compare it to the path variable. + Assembly assembly = Assembly.GetExecutingAssembly(); + string assemblyPath = assembly.Location; + + if (string.IsNullOrWhiteSpace(assemblyPath) || !File.Exists(assemblyPath)) ShellDirectory = null; + + ShellDirectory = Path.GetDirectoryName(assemblyPath)!.Replace("/", "\\"); + if (ShellDirectory is null) Write("[ERROR] There was a problem detecting the shell's location. " + + "Many featues will be disabled.", ConsoleColor.Red); + + // Check if the path in the PATH variable is correct. + string envVal = Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.User)!; + string[] pathParts = envVal.Split(";"); + if (ShellDirectory is not null && !pathParts.Contains(ShellDirectory)) + { + envVal += $"{ShellDirectory};"; + Environment.SetEnvironmentVariable("PATH", envVal, EnvironmentVariableTarget.User); + Write($"[WARNING] The environment PATH does not contain the {Name} directory. It has now been added " + + "automatically. Is this your first time running the shell?", ConsoleColor.DarkYellow); + } + + WorkingDirectory = Directory.GetCurrentDirectory(); + + // Load modules and commands. + LoadedModules = new(); + LoadedCommands = new(); + + Type[] possibleModules = assembly.GetTypes(); + foreach (Type t in possibleModules) + { + ModuleInfo? module = ModuleInfo.FromModule(t); + if (module is not null) + { + LoadedModules.Add(module); + LoadedCommands.AddRange(module.Commands); + } + } + + // Other stuff + History = new(); + + // Send welcome message. + Write("\nWelcome to ", ConsoleColor.White, false); + Write($"{Name} {Version}", ConsoleColor.DarkCyan, false); + Write(" by ", ConsoleColor.White, false); + Write($"{Author}", ConsoleColor.DarkYellow); + + ActiveGame = null; + + ReloadDirectoryInfo(); + } + + public void AddHistory(HistoryItem item) => History.Add(item); + public void UndoItem() + { + HistoryItem item = History.Last(); + item.Invoke(); + History.RemoveAt(History.Count - 1); + Write($"Undid \"", newLine: false); + Write(item.name, ConsoleColor.White, false); + Write("\""); + } + + public void UpdateWorkingDirectory(string dir) + { + string global = Path.GetFullPath(dir.Replace("/", "\\"), WorkingDirectory); + + Directory.SetCurrentDirectory(global); + WorkingDirectory = global; + ReloadDirectoryInfo(); + } + + public string ReadLine() + { + Console.CursorVisible = true; + + Write($"\n{WorkingDirectory}", ConsoleColor.DarkGreen, false); + if (ActiveGame is not null) Write($" {ActiveGame}", ConsoleColor.DarkYellow, false); + if (ActiveMod is not null) Write($" {ActiveMod}", ConsoleColor.Magenta, false); + Write(null); + + Write($" {Name}", ConsoleColor.DarkCyan, false); + Write(" > ", ConsoleColor.White, false); + + Console.ForegroundColor = ConsoleColor.White; + string message = Console.ReadLine()!; + Console.ResetColor(); + + Console.CursorVisible = false; + + return message; + } + + public void InvokeCommand(string cmd) + { + List parts = new(); + string active = string.Empty; + + bool inQuotes = false; + for (int i = 0; i < cmd.Length; i++) + { + char c = cmd[i]; + + if (c == '\"' && i > 0 && cmd[i - 1] != '\\') inQuotes = !inQuotes; + else if (c == ' ' && !inQuotes) + { + if (string.IsNullOrWhiteSpace(active)) continue; + if (active.StartsWith('\"') && active.EndsWith('\"')) active = active[1..^1]; + parts.Add(active); + active = string.Empty; + } + else active += c; + } + if (!string.IsNullOrWhiteSpace(active)) + { + if (active.StartsWith('\"') && active.EndsWith('\"')) active = active[1..^1]; + parts.Add(active); + } + + if (parts.Count < 1) return; + + string moduleName = parts[0].Trim().ToLower(); + foreach (ModuleInfo module in LoadedModules) + { + if (module.NameIsPrefix && module.NameId.Trim().ToLower() != moduleName) continue; + string commandName; + if (module.NameIsPrefix) + { + if (parts.Count < 2) continue; + commandName = parts[1].Trim().ToLower(); + } + else commandName = moduleName; + + foreach (CommandInfo command in module.Commands) + { + if (command.NameId.Trim().ToLower() != commandName) continue; + int start = module.NameIsPrefix ? 2 : 1; + string[] args = parts.GetRange(start, parts.Count - start).ToArray(); + + try + { + command.Invoke(args); + } + catch (TargetInvocationException ex) + { + Write($"[ERROR] {ex.InnerException!.Message}", ConsoleColor.Red); + } + catch (Exception ex) + { + Write($"[ERROR] {ex.Message}", ConsoleColor.Red); + } + return; + } + } + + Write($"[ERROR] Could not find command \"{cmd}\".", ConsoleColor.Red); + } + + public void ReloadDirectoryInfo() + { + ActiveMod = Mod.ReadDirectory(WorkingDirectory); + + // Update title. + string title = "SrcMod"; + if (ActiveMod is not null) title += $" - {ActiveMod.Name}"; + Console.Title = title; + } +} diff --git a/SrcMod/Shell/Shell.csproj b/SrcMod/Shell/Shell.csproj new file mode 100644 index 0000000..0fdb552 --- /dev/null +++ b/SrcMod/Shell/Shell.csproj @@ -0,0 +1,35 @@ + + + + Exe + net7.0 + disable + enable + srcmod + SrcMod.Shell + ../Compiled/Shell + SrcMod Shell + That_One_Nerd + false + Logo.ico + + + + embedded + 9999 + + + + embedded + 9999 + + + + + + + + + + + diff --git a/SrcMod/Shell/Tools.cs b/SrcMod/Shell/Tools.cs new file mode 100644 index 0000000..efdd61d --- /dev/null +++ b/SrcMod/Shell/Tools.cs @@ -0,0 +1,129 @@ +using System.Net.Http.Headers; + +namespace SrcMod.Shell; + +public static class Tools +{ + private static int loadingPosition = -1; + private static int lastBufferSize = 0; + private static int lastValue = -1; + + public static void DisplayWithPages(IEnumerable lines, ConsoleColor? color = null) + { + int written = 0; + bool multiPage = false, hasQuit = false; + foreach (string line in lines) + { + if (written == Console.BufferHeight - 2) + { + multiPage = true; + Console.BackgroundColor = ConsoleColor.Gray; + Console.ForegroundColor = ConsoleColor.Black; + + Console.Write(" -- More -- "); + ConsoleKey key = Console.ReadKey(true).Key; + Console.ResetColor(); + + Console.CursorLeft = 0; + + if (key == ConsoleKey.Q) + { + hasQuit = true; + break; + } + if (key == ConsoleKey.Spacebar) written = 0; + else written--; + } + Write(line, color); + written++; + } + + if (multiPage) + { + Console.BackgroundColor = ConsoleColor.Gray; + Console.ForegroundColor = ConsoleColor.DarkGreen; + + Console.Write(" -- End -- "); + while (!hasQuit && Console.ReadKey(true).Key != ConsoleKey.Q) ; + + Console.ResetColor(); + + Console.CursorLeft = 0; + Console.Write(" "); + } + } + + public static IEnumerable GetAllFiles(string directory) + { + List allFiles = new(); + foreach (string f in Directory.GetFiles(directory)) allFiles.Add(Path.GetFullPath(f)); + foreach (string dir in Directory.GetDirectories(directory)) allFiles.AddRange(GetAllFiles(dir)); + return allFiles; + } + + public static void LoadingBarEnd(bool clear = true) + { + if (loadingPosition == -1) throw new("No loading bar is active."); + + if (clear) + { + Int2 oldPos = (Console.CursorLeft, Console.CursorTop); + + Console.CursorLeft = 0; + Console.CursorTop = loadingPosition; + Console.Write(new string(' ', Console.BufferWidth)); + Console.CursorLeft = 0; + + Console.SetCursorPosition(oldPos.x, oldPos.y); + } + loadingPosition = -1; + } + public static void LoadingBarSet(float value, ConsoleColor? color = null) + { + const string left = " --- [", + right = "] --- "; + int barSize = Console.BufferWidth - left.Length - right.Length, + filled = (int)(barSize * value); + + if (filled == lastValue) return; + + Int2 oldPos = (Console.CursorLeft, Console.CursorTop); + + // Erase last bar. + Console.SetCursorPosition(0, loadingPosition); + Console.Write(new string(' ', lastBufferSize)); + Console.CursorLeft = 0; + + // Add new bar. + lastBufferSize = Console.BufferWidth; + + Write(left, newLine: false); + ConsoleColor oldFore = Console.ForegroundColor; + + if (color is not null) Console.ForegroundColor = color.Value; + Write(new string('=', filled), newLine: false); + if (color is not null) Console.ForegroundColor = oldFore; + Write(new string(' ', barSize - filled), newLine: false); + Write(right, newLine: false); + + if (oldPos.y == Console.CursorTop) oldPos.y++; + Console.SetCursorPosition(oldPos.x, oldPos.y); + } + public static void LoadingBarStart(float value = 0, int? position = null, ConsoleColor? color = null) + { + if (loadingPosition != -1) throw new("The loading bar has already been enabled."); + loadingPosition = position ?? Console.CursorTop; + LoadingBarSet(value, color); + } + + public static void Write(object? message, ConsoleColor? col = null, bool newLine = true) + { + ConsoleColor prevCol = Console.ForegroundColor; + if (col is not null) Console.ForegroundColor = col.Value; + + if (newLine) Console.WriteLine(message); + else Console.Write(message); + + Console.ForegroundColor = prevCol; + } +}