From 8927637048dfc39b5f598920c558b23e781a016c Mon Sep 17 00:00:00 2001 From: KevinKor01 Date: Wed, 9 Jul 2025 00:22:59 +0300 Subject: [PATCH] New Commands & piped interpreter! --- TermEngine/CommandInterpreter.cs | 54 ----------- TermEngine/Commands/AddCommand.cs | 46 +++++++++ TermEngine/Commands/ClearCommand.cs | 26 +++++ TermEngine/Commands/EchoCommand.cs | 31 ++++++ TermEngine/{ => Commands}/GreetCommand.cs | 13 ++- TermEngine/{ => Commands}/HelpCommand.cs | 14 ++- TermEngine/Core/CommandInterpreter.cs | 91 ++++++++++++++++++ TermEngine/Core/ICOmmand.cs | 14 +++ TermEngine/ICOmmand.cs | 8 -- TermEngine/Program.cs | 12 ++- TermEngine/bin/Debug/net8.0/TermEngine.dll | Bin 7168 -> 8704 bytes TermEngine/bin/Debug/net8.0/TermEngine.pdb | Bin 11768 -> 12884 bytes .../Debug/net8.0/TermEngine.AssemblyInfo.cs | 2 +- .../TermEngine.AssemblyInfoInputs.cache | 2 +- .../TermEngine.csproj.CoreCompileInputs.cache | 2 +- TermEngine/obj/Debug/net8.0/TermEngine.dll | Bin 7168 -> 8704 bytes TermEngine/obj/Debug/net8.0/TermEngine.pdb | Bin 11768 -> 12884 bytes .../obj/Debug/net8.0/ref/TermEngine.dll | Bin 6144 -> 6656 bytes .../obj/Debug/net8.0/refint/TermEngine.dll | Bin 6144 -> 6656 bytes 19 files changed, 239 insertions(+), 76 deletions(-) delete mode 100644 TermEngine/CommandInterpreter.cs create mode 100644 TermEngine/Commands/AddCommand.cs create mode 100644 TermEngine/Commands/ClearCommand.cs create mode 100644 TermEngine/Commands/EchoCommand.cs rename TermEngine/{ => Commands}/GreetCommand.cs (65%) rename TermEngine/{ => Commands}/HelpCommand.cs (72%) create mode 100644 TermEngine/Core/CommandInterpreter.cs create mode 100644 TermEngine/Core/ICOmmand.cs delete mode 100644 TermEngine/ICOmmand.cs diff --git a/TermEngine/CommandInterpreter.cs b/TermEngine/CommandInterpreter.cs deleted file mode 100644 index 1bba8b8..0000000 --- a/TermEngine/CommandInterpreter.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - - -public class CommandInterpreter -{ - public readonly Dictionary _commands = new(); - - public CommandInterpreter() - { - - RegisterCommand(new GreetCommand()); - RegisterCommand(new HelpCommand(this)); - - } - public void RegisterCommand(ICommand command) - { - - _commands[command.Name.ToLower()] = command; - - } - - public void Execute(string input) - { - string[] parts = input.Split(" ", StringSplitOptions.RemoveEmptyEntries); - if (parts.Length == 0) return; - - string commandName = parts[0].ToLower(); - string[] args = parts.Length > 1 ? parts[1..] : new string[0]; - - if (_commands.TryGetValue(commandName, out var command)) - { - - command.Execute(args); - - } - else - { - Console.WriteLine("Err - uknown Command : '{commandName}'. Type help For a list of commands"); - } - - - } - - public IEnumerable GetAllCommands() - { - - return _commands.Values; - - } - - -} \ No newline at end of file diff --git a/TermEngine/Commands/AddCommand.cs b/TermEngine/Commands/AddCommand.cs new file mode 100644 index 0000000..566e140 --- /dev/null +++ b/TermEngine/Commands/AddCommand.cs @@ -0,0 +1,46 @@ +using System; +using System.ComponentModel; +using TermApp.Core; + + +namespace TermApp.Commands +{ + + +public class AddCommand : ICommand +{ + public string Name => "add"; + public string Description => "Adds two integers together args : a + b"; + + public void Execute(string[] args, string input = null) + { + + if (args.Length < 1) + { + + Console.WriteLine(Description); + return; + + } + + if (int.TryParse(args[0], out int a) && int.TryParse(args[1], out int b)) + { + + int result = a + b; + Console.WriteLine(result); + return; + + } + else + { + + Console.WriteLine("Make sure Both Args are integers!"); + + } + + + + } + +} +} diff --git a/TermEngine/Commands/ClearCommand.cs b/TermEngine/Commands/ClearCommand.cs new file mode 100644 index 0000000..d924109 --- /dev/null +++ b/TermEngine/Commands/ClearCommand.cs @@ -0,0 +1,26 @@ +using TermApp.Core; + +namespace TermApp.Commands +{ + + public class ClearCommand : ICommand + { + + public string Name => "clear"; + public string Description => "Clears the Terminal"; + + public void Execute(string[] args, string input = null) + { + + Console.Clear(); + if (args.Length != 0) + { + if (args[0] == "log") Console.WriteLine("Cleared :)"); + + } + + } + + } + +} \ No newline at end of file diff --git a/TermEngine/Commands/EchoCommand.cs b/TermEngine/Commands/EchoCommand.cs new file mode 100644 index 0000000..cd6a882 --- /dev/null +++ b/TermEngine/Commands/EchoCommand.cs @@ -0,0 +1,31 @@ +using TermApp.Core; +using System; +using System.ComponentModel; + + +namespace TermApp.Commands +{ + + public class EchoCommand : ICommand + { + + public string Name => "echo"; + public string Description => "Prints Input"; + + + public void Execute(string[] args, string input = null) + { + + if (args.Length > 0) + Console.WriteLine(String.Join(" ", args)); + else if (input != null) + Console.WriteLine(input); + else + Console.WriteLine(); + + } + + } + + +} \ No newline at end of file diff --git a/TermEngine/GreetCommand.cs b/TermEngine/Commands/GreetCommand.cs similarity index 65% rename from TermEngine/GreetCommand.cs rename to TermEngine/Commands/GreetCommand.cs index 32a35bf..1c5ac93 100644 --- a/TermEngine/GreetCommand.cs +++ b/TermEngine/Commands/GreetCommand.cs @@ -1,11 +1,15 @@ using System; +using TermApp.Core; -public class GreetCommand : ICommand +namespace TermApp.Commands +{ + + public class GreetCommand : ICommand { public string Name => "greet"; public string Description => "greets someone.. args [name]"; - public void Execute(string[] args) + public void Execute(string[] args, string input = null) { if (args.Length == 0) @@ -19,4 +23,7 @@ public class GreetCommand : ICommand Console.WriteLine("Greetings , " + args[0]); } -} \ No newline at end of file +} + +} + diff --git a/TermEngine/HelpCommand.cs b/TermEngine/Commands/HelpCommand.cs similarity index 72% rename from TermEngine/HelpCommand.cs rename to TermEngine/Commands/HelpCommand.cs index 071e2c2..a8e06d6 100644 --- a/TermEngine/HelpCommand.cs +++ b/TermEngine/Commands/HelpCommand.cs @@ -1,4 +1,10 @@ using System; +using TermApp.Core; + +namespace TermApp.Commands +{ + + public class HelpCommand : ICommand { @@ -13,10 +19,10 @@ public class HelpCommand : ICommand public string Name => "help"; public String Description => "Shows the Help pop Up"; - public void Execute(string[] args) + public void Execute(string[] args, string input = null) { Console.WriteLine("Avaliable Commands:"); - foreach (var cmd in _interpreter.GetAllCommands()) + foreach (var cmd in _interpreter.GetAllCommands()) { Console.WriteLine($"Command : {cmd.Name} | {cmd.Description}"); @@ -24,4 +30,6 @@ public class HelpCommand : ICommand } -} \ No newline at end of file +} +} + diff --git a/TermEngine/Core/CommandInterpreter.cs b/TermEngine/Core/CommandInterpreter.cs new file mode 100644 index 0000000..ba9710f --- /dev/null +++ b/TermEngine/Core/CommandInterpreter.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using TermApp.Commands; + + + +namespace TermApp.Core +{ + + public class CommandInterpreter + { + public readonly Dictionary _commands = new(); + + public CommandInterpreter() + { + + RegisterCommand(new GreetCommand()); + RegisterCommand(new HelpCommand(this)); + RegisterCommand(new AddCommand()); + RegisterCommand(new EchoCommand()); + RegisterCommand(new ClearCommand()); + + } + public void RegisterCommand(ICommand command) + { + + _commands[command.Name.ToLower()] = command; + + } + + public void Execute(string input) + { + + string[] pipedCommands = input.Split("|", StringSplitOptions.RemoveEmptyEntries); + string pipedOutput = null; + + foreach (var cmdInput in pipedCommands) + { + + string trimmed = cmdInput.Trim(); + + string[] parts = input.Split(" ", StringSplitOptions.RemoveEmptyEntries); + if (parts.Length == 0) continue; + string commandName = parts[0].ToLower(); + string[] args = parts.Length > 1 ? parts[1..] : new string[0]; + + + + if (_commands.TryGetValue(commandName, out var command)) + { + + command.Execute(args); + + } + else + { + Console.WriteLine($"Err - uknown Command : '{commandName}'. Type help For a list of commands"); + return; + } + + + } + + + if (!string.IsNullOrWhiteSpace(pipedOutput)) + { + + Console.WriteLine(pipedOutput); + + } + + } + + + + + + + + public IEnumerable GetAllCommands() + { + + return _commands.Values; + + } + + + } +} + diff --git a/TermEngine/Core/ICOmmand.cs b/TermEngine/Core/ICOmmand.cs new file mode 100644 index 0000000..35d72c8 --- /dev/null +++ b/TermEngine/Core/ICOmmand.cs @@ -0,0 +1,14 @@ +namespace TermApp.Core +{ + + public interface ICommand + { + + string Name { get; } + string Description { get; } + void Execute(string[] args, string input = null); + + } + +} + diff --git a/TermEngine/ICOmmand.cs b/TermEngine/ICOmmand.cs deleted file mode 100644 index a7756e6..0000000 --- a/TermEngine/ICOmmand.cs +++ /dev/null @@ -1,8 +0,0 @@ -public interface ICommand -{ - - string Name { get; } - string Description { get; } - void Execute(string[] args); - -} \ No newline at end of file diff --git a/TermEngine/Program.cs b/TermEngine/Program.cs index 443edbe..6ab08ab 100644 --- a/TermEngine/Program.cs +++ b/TermEngine/Program.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using TermApp.Core; namespace TermApp { @@ -8,20 +9,21 @@ namespace TermApp static void Main(string[] args) { - + Console.WriteLine("Hello, Works!"); CommandInterpreter interpreter = new CommandInterpreter(); Console.WriteLine("Type help to see avaliable Commands :.) or type exit to quit"); - + string lastCommand = "Command Cache :)"; while (true) { - Console.Write("Input >"); - string input = Console.ReadLine(); + Console.Write($"[{lastCommand}] - Input >"); + string input = Console.ReadLine() ?? throw new ArgumentException(); + lastCommand = input; if (string.IsNullOrWhiteSpace(input)) continue; - if (input.ToLower() == "exit") break; + if (input.ToLower() == "exit" || input.ToLower() == "e") break; interpreter.Execute(input); diff --git a/TermEngine/bin/Debug/net8.0/TermEngine.dll b/TermEngine/bin/Debug/net8.0/TermEngine.dll index de21ca4b1566af860265b416f85ea9ad159797d9..9277044ca4befaa4636d7e17154eba33024084f3 100644 GIT binary patch delta 4162 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 delta 2700 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 diff --git a/TermEngine/obj/Debug/net8.0/TermEngine.AssemblyInfo.cs b/TermEngine/obj/Debug/net8.0/TermEngine.AssemblyInfo.cs index c812d7e..bb13ff9 100644 --- a/TermEngine/obj/Debug/net8.0/TermEngine.AssemblyInfo.cs +++ b/TermEngine/obj/Debug/net8.0/TermEngine.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("TermEngine")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+fd78d9283e191920ee4f6e700fc03391a8880f43")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e3dc8d9d420fc51fad3a8526f470c6c1f428a000")] [assembly: System.Reflection.AssemblyProductAttribute("TermEngine")] [assembly: System.Reflection.AssemblyTitleAttribute("TermEngine")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/TermEngine/obj/Debug/net8.0/TermEngine.AssemblyInfoInputs.cache b/TermEngine/obj/Debug/net8.0/TermEngine.AssemblyInfoInputs.cache index 1725603..9eb64df 100644 --- a/TermEngine/obj/Debug/net8.0/TermEngine.AssemblyInfoInputs.cache +++ b/TermEngine/obj/Debug/net8.0/TermEngine.AssemblyInfoInputs.cache @@ -1 +1 @@ -432712ba9dc98f037959cf0668caa1627ade9f0aa69473645068c6ea52208868 +3d48c29292f9b3da258d45e3bdc45d2e18ec03103ca4e7baa8461e515fbe4981 diff --git a/TermEngine/obj/Debug/net8.0/TermEngine.csproj.CoreCompileInputs.cache b/TermEngine/obj/Debug/net8.0/TermEngine.csproj.CoreCompileInputs.cache index 3b2553a..4c73c71 100644 --- a/TermEngine/obj/Debug/net8.0/TermEngine.csproj.CoreCompileInputs.cache +++ b/TermEngine/obj/Debug/net8.0/TermEngine.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -4fba7de9be587e6bc37da5c47243a26c97f753def2985a170b262675dd805d5f +a2dd4e9d73438a6245251deea74b31585bcc1a2fd3c9c3f80d70811058104251 diff --git a/TermEngine/obj/Debug/net8.0/TermEngine.dll b/TermEngine/obj/Debug/net8.0/TermEngine.dll index de21ca4b1566af860265b416f85ea9ad159797d9..9277044ca4befaa4636d7e17154eba33024084f3 100644 GIT binary patch delta 4162 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 delta 2700 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 diff --git a/TermEngine/obj/Debug/net8.0/ref/TermEngine.dll b/TermEngine/obj/Debug/net8.0/ref/TermEngine.dll index 35785ae432735bcd11ea2961fd3c185fa2880551..7035747a7616ce537fc3fa05225e7519930a299d 100644 GIT binary patch delta 1923 zcmbVNT})g>6#ix|`@=4KS(a=CN-K0*yOoA4%L0pqWC5`S5}^UCO-<~&KeZ_o0zRls zT(q%ilNu$rF+MfcYSikJB#l3b+R*d`qw&f3qQ)9EzSIYeN#ldxoc#kIJ2&T>?>jT+ z%-nP5-n$Z8NxXJ`*Q?h*c@L%b6L!I`Vn7`ozM}J?iPdY5*}snilg4oz_}I1D-dML% zob?q4TAg;i-#Mx#eJMYuq-b@{N2)`GoFCL))wJf;cU3U?*{5?~u3wmZ|H(ZUZ~k^F zxzg&syZu&n%rhePY=}MQec? z_L13X>?aQzesFf|VfF*m1B!ZhZs93v(=-zwx&KYYA>gj+#x^=gLp0+vyp>i@<8rWp z0^B4!X{I-oF=i$*8CzBxZbmOF+j3*KHuyEZ)%ED)cHQ_>{C+jA-SF#|h$oc6-GW1c zp9}s4<3A_!XRR~j-zl$2_cLtEdEV1fFt@m@-`4%yfw_YCP~U)28ds=NxWT<>u4=}{ z@C#>Z-kMQ!B^3}gQ&J70E|gSQ)bWyP#sjFaqL@mVJ3QC4QQ($TRc=;z4t>=z4C^2l zE(PLmJqXr9+O5E4JhDk$(wmfPSdVk8824+fndz#iOS-U0Dl@e_$h~nhp2}1cSXE|; zijugpD#q1riK{9TS5YReP?5zz|CYe2GJzE(3zk(eE>May>M+Wxc)xZfr^!-LlBK`{ z$s)fl_yjAeFlYsX8u!M(Fz-VpgNtXxP4m#av|6zZp6>>j>NbPV--mr7x`;s@JcC1m zV}geTj|!#*PZAYR$A%8$MZpjgM)=M(3$_dH6YLTkB<{g7y08}+bg53(@)$bNh(ea# zcAO@^N*wDHRHO+YkoE&HXn1P1eVcBbaCH5@Yj$v_HJRhd%JK*%iT$($;)o$nPY)k_9%=fziAm}>dg)2< fBN*d&uQ|A);~Y)X$7}6O<11PZ9FSk%YRvN=I$I^V delta 1413 zcmZvcUuauZ9LK-sB)M(V+w|tPsV;7kF3wF`%1slS1RqRSi_0c-rK>Uov8Kr!{@v<> zuGkccMUctj^=TkX1RwSyniqvJL17^H?%ad;Alt(RDtnRD2fx2x+E~$ZIiK_W{?56- zbM84gSud;y7v9_7{4xGHw#zTrkA4#XaR#KaJX&pCekO7K2rwu11>mb#Yjnt62VD9q z?ARNQ+VSwDnTrQ~3{_a;;g@F2c;V0Hpc!d9_MY+HxV^g9ZvOf7)vH_A-hJ%%Y&#kK z&7|R0Ih=)gU=hQK3h+`dV3@QR9(N8kKZ*d^HFigVjOc|o&z^qm)CwcW^k^8_#RWV> z?J<^pYO(qx+X8*T&>w!~^%rF@i)G?x@4IAVow#T67-4|YXLVRbOAgT-iv-X_ih}cM zaA%No0(mPhNYAV02kYRj@?%`GgSf*X4!+UI4eVj>4Kq(pDepqGr~16|JB=*r_|KGI zKypThB1dhw){|};E^U=rr@2gdJk&Y&v~HU?*-3GI_=K)PCm%6DdN^!Xtn_(!7~k3~ zj#s32^ZtvR!R$CJVse*DT90pRk3_p^OWcNzz1eq;Q~l#=Ox|@SX=l5xGevYK4JSOt zgWR1Z)^(Dl>oiMDR>^X0;2fIMdIB9QL**>g#biQf*AxzT_WY8w$}|tpV2e9v@PV?U zw`>H%T+A?c?4mVDk`DHeaXg|rM|vnLr<>YTmGjDz$|dD#(%=l4!rRINSiv|BqJ}Xu zfqri81cvZD`2gM_v)ClZ@IINx_vGXFiJZZ&(u6OPTvuu|S z+48z}OBx%h{~cpyguXi$zU8`M%RSP*>5kZNVDQX;{uaUugV~8*C*{xDgg+e9`xVO= z;}7>{kn*b(kqigvHrRDNuDPPZ(bLGjPUN1DJ>ct>v)Pj7zoLefD zN6#ix|`@=4KS(a=CN-K0*yOoA4%L0pqWC5`S5}^UCO-<~&KeZ_o0zRls zT(q%ilNu$rF+MfcYSikJB#l3b+R*d`qw&f3qQ)9EzSIYeN#ldxoc#kIJ2&T>?>jT+ z%-nP5-n$Z8NxXJ`*Q?h*c@L%b6L!I`Vn7`ozM}J?iPdY5*}snilg4oz_}I1D-dML% zob?q4TAg;i-#Mx#eJMYuq-b@{N2)`GoFCL))wJf;cU3U?*{5?~u3wmZ|H(ZUZ~k^F zxzg&syZu&n%rhePY=}MQec? z_L13X>?aQzesFf|VfF*m1B!ZhZs93v(=-zwx&KYYA>gj+#x^=gLp0+vyp>i@<8rWp z0^B4!X{I-oF=i$*8CzBxZbmOF+j3*KHuyEZ)%ED)cHQ_>{C+jA-SF#|h$oc6-GW1c zp9}s4<3A_!XRR~j-zl$2_cLtEdEV1fFt@m@-`4%yfw_YCP~U)28ds=NxWT<>u4=}{ z@C#>Z-kMQ!B^3}gQ&J70E|gSQ)bWyP#sjFaqL@mVJ3QC4QQ($TRc=;z4t>=z4C^2l zE(PLmJqXr9+O5E4JhDk$(wmfPSdVk8824+fndz#iOS-U0Dl@e_$h~nhp2}1cSXE|; zijugpD#q1riK{9TS5YReP?5zz|CYe2GJzE(3zk(eE>May>M+Wxc)xZfr^!-LlBK`{ z$s)fl_yjAeFlYsX8u!M(Fz-VpgNtXxP4m#av|6zZp6>>j>NbPV--mr7x`;s@JcC1m zV}geTj|!#*PZAYR$A%8$MZpjgM)=M(3$_dH6YLTkB<{g7y08}+bg53(@)$bNh(ea# zcAO@^N*wDHRHO+YkoE&HXn1P1eVcBbaCH5@Yj$v_HJRhd%JK*%iT$($;)o$nPY)k_9%=fziAm}>dg)2< fBN*d&uQ|A);~Y)X$7}6O<11PZ9FSk%YRvN=I$I^V delta 1413 zcmZvcUuauZ9LK-sB)M(V+w|tPsV;7kF3wF`%1slS1RqRSi_0c-rK>Uov8Kr!{@v<> zuGkccMUctj^=TkX1RwSyniqvJL17^H?%ad;Alt(RDtnRD2fx2x+E~$ZIiK_W{?56- zbM84gSud;y7v9_7{4xGHw#zTrkA4#XaR#KaJX&pCekO7K2rwu11>mb#Yjnt62VD9q z?ARNQ+VSwDnTrQ~3{_a;;g@F2c;V0Hpc!d9_MY+HxV^g9ZvOf7)vH_A-hJ%%Y&#kK z&7|R0Ih=)gU=hQK3h+`dV3@QR9(N8kKZ*d^HFigVjOc|o&z^qm)CwcW^k^8_#RWV> z?J<^pYO(qx+X8*T&>w!~^%rF@i)G?x@4IAVow#T67-4|YXLVRbOAgT-iv-X_ih}cM zaA%No0(mPhNYAV02kYRj@?%`GgSf*X4!+UI4eVj>4Kq(pDepqGr~16|JB=*r_|KGI zKypThB1dhw){|};E^U=rr@2gdJk&Y&v~HU?*-3GI_=K)PCm%6DdN^!Xtn_(!7~k3~ zj#s32^ZtvR!R$CJVse*DT90pRk3_p^OWcNzz1eq;Q~l#=Ox|@SX=l5xGevYK4JSOt zgWR1Z)^(Dl>oiMDR>^X0;2fIMdIB9QL**>g#biQf*AxzT_WY8w$}|tpV2e9v@PV?U zw`>H%T+A?c?4mVDk`DHeaXg|rM|vnLr<>YTmGjDz$|dD#(%=l4!rRINSiv|BqJ}Xu zfqri81cvZD`2gM_v)ClZ@IINx_vGXFiJZZ&(u6OPTvuu|S z+48z}OBx%h{~cpyguXi$zU8`M%RSP*>5kZNVDQX;{uaUugV~8*C*{xDgg+e9`xVO= z;}7>{kn*b(kqigvHrRDNuDPPZ(bLGjPUN1DJ>ct>v)Pj7zoLefD zN