From f847236b78d00b9e3c528938fe1331f6817d3dde Mon Sep 17 00:00:00 2001 From: AShifter Date: Sun, 10 Dec 2017 16:34:14 -0700 Subject: [PATCH] things are working again yoy --- ShiftOS.Main/ShiftOS.Main.csproj | 3 + ShiftOS.Main/ShiftOS/Apps/Terminal.cs | 172 ++++++++++++++++++++++++ ShiftOS.Main/Terminal/Commands/tcpip.cs | 4 +- ShiftOS.Main/packages.config | 1 + 4 files changed, 178 insertions(+), 2 deletions(-) create mode 100644 ShiftOS.Main/ShiftOS/Apps/Terminal.cs diff --git a/ShiftOS.Main/ShiftOS.Main.csproj b/ShiftOS.Main/ShiftOS.Main.csproj index ad01ba0..9a5484c 100644 --- a/ShiftOS.Main/ShiftOS.Main.csproj +++ b/ShiftOS.Main/ShiftOS.Main.csproj @@ -33,6 +33,9 @@ latest + + ..\packages\DotNetZip.1.10.1\lib\net20\DotNetZip.dll + diff --git a/ShiftOS.Main/ShiftOS/Apps/Terminal.cs b/ShiftOS.Main/ShiftOS/Apps/Terminal.cs new file mode 100644 index 0000000..f0efec0 --- /dev/null +++ b/ShiftOS.Main/ShiftOS/Apps/Terminal.cs @@ -0,0 +1,172 @@ +using System; +using System.Windows.Forms; +using ShiftOS.Engine; +using ShiftOS.Main.Terminal; +using System.Linq; +using System.Collections.Generic; +using System.Drawing.Text; +using System.IO; +using ShiftOS.Main.Properties; +using Whoa; + +namespace ShiftOS.Main.ShiftOS.Apps +{ + public partial class Terminal : UserControl + { + public int TerminalID = TerminalBackend.trmTopID++; // Used so that we can have multiple instances of the terminal whilst the command begin run knowing what terminal to send the text to - very complicated ;) + public string defaulttextBefore = "user> "; + public string defaulttextResult = "[user@shiftos ~]$ "; // NOT YET IMPLEMENTED!!! + public bool DoClear = false; + public bool RunningCommand = false; + public bool WaitingResponse = false; + public string InputReturnText = ""; + public Stack c = TerminalBackend.commandBuffer; + private PrivateFontCollection fontCollection = new PrivateFontCollection(); + + + // The below variables makes the terminal... a terminal! + string OldText = ""; + + int TrackingPosition; + + public Terminal() + { + InitializeComponent(); + + termmain.ContextMenuStrip = new ContextMenuStrip(); // Disables the right click of a richtextbox! + + TerminalBackend.trm.Add(this); + + + Setup(); + } + + void Print() + { + termmain.AppendText($"\n {defaulttextResult}"); + TrackingPosition = termmain.Text.Length; + } + + void Print(string text) + { + termmain.AppendText($"\n {text} \n {defaulttextResult}"); + TrackingPosition = termmain.Text.Length; + } + + //if (e.Control && e.KeyCode == Keys.V) + // { + // //if (Clipboard.ContainsText()) + // // termmain.Paste(DataFormats.GetFormat(DataFormats.Text)); + // e.Handled = true; + // } else if (e.KeyCode == Keys.Enter) { + // RunningCommand = true; + // TerminalBackend.RunCommand(termmain.Text.Substring(TrackingPosition, termmain.Text.Length - TrackingPosition), TerminalID); // The most horrific line in the entire application! + // RunningCommand = false; + // termmain.AppendText($"\n {defaulttextResult}"); + // TrackingPosition = termmain.Text.Length; + // e.Handled = true; + // } + //} + + private void termmain_TextChanged(object sender, EventArgs e) + { + if (!RunningCommand) + { + if (termmain.SelectionStart < TrackingPosition) + { + if (!DoClear) // If it's not clearing the terminal + { + termmain.Text = OldText; + termmain.Select(termmain.Text.Length, 0); + } + } + else + { + OldText = termmain.Text; + } + } + } + + private void termmain_SelectionChanged(object sender, EventArgs e) + { + if (!RunningCommand) + { + if (termmain.SelectionStart < TrackingPosition) + { + termmain.Text = OldText; + termmain.Select(termmain.Text.Length, 0); + } + } + } + + private void Terminal_Load(object sender, EventArgs e) + { + termmain.Text = $"\n {defaulttextResult}"; + TrackingPosition = termmain.Text.Length; + termmain.Select(termmain.TextLength, 1); + } + + public void Input(string request) + { + InputReturnText = ""; + RunningCommand = false; + + termmain.AppendText($"\n {request} "); + TrackingPosition = termmain.Text.Length; + } + + public void Clear() + { + DoClear = true; + OldText = ""; + termmain.Text = ""; + TrackingPosition = termmain.Text.Length; + DoClear = false; + } + + void termmain_KeyDown(object sender, KeyEventArgs e) + { + // The below code disables the ability to paste anything other then text... + + if (e.Control && e.KeyCode == Keys.V) + { + //if (Clipboard.ContainsText()) + // termmain.Paste(DataFormats.GetFormat(DataFormats.Text)); + e.Handled = true; + } + else if (e.KeyCode == Keys.Enter) + { + TerminalBackend.RunCommand(termmain.Text.Substring(TrackingPosition, termmain.Text.Length - TrackingPosition), TerminalID); // The most horrific line in the entire application! + Print(); + e.Handled = true; + } + else if (e.KeyCode == Keys.Up) + { + if (c.Count == 0) return; + termmain.AppendText(c.Pop()); + } + } + public void Setup() + { + if (!Directory.Exists(SaveSystem.gameDir)) Directory.CreateDirectory(SaveSystem.gameDir); + if (!Directory.Exists(SaveSystem.fontDir)) Directory.CreateDirectory(SaveSystem.fontDir); + if (!Directory.Exists(SaveSystem.dataDir)) Directory.CreateDirectory(SaveSystem.dataDir); + if (!File.Exists(SaveSystem.fontDir + "\\termFont.ttf")) File.WriteAllBytes(SaveSystem.fontDir + "\\termFont.ttf", Resources.UbuntuMono_R); + if (!File.Exists(SaveSystem.dataDir + "\\userCodePoints.whoa")) + { + using (var fobj = File.OpenWrite(SaveSystem.dataDir + "\\userCodePoints.whoa")) + { + Whoa.Whoa.SerialiseObject(fobj, SaveSystem.User.codePoints); + } + } + if (!Directory.Exists(SaveSystem.baseGameDir)) Directory.CreateDirectory(SaveSystem.baseGameDir); + if (!Directory.Exists(SaveSystem.desktopDir)) Directory.CreateDirectory(SaveSystem.desktopDir); + if (!Directory.Exists(SaveSystem.docDir)) Directory.CreateDirectory(SaveSystem.docDir); + if (!Directory.Exists(SaveSystem.downloadsDir)) Directory.CreateDirectory(SaveSystem.downloadsDir); + if (!Directory.Exists(SaveSystem.musicDir)) Directory.CreateDirectory(SaveSystem.musicDir); + if (!Directory.Exists(SaveSystem.picDir)) Directory.CreateDirectory(SaveSystem.picDir); + fontCollection.AddFontFile(SaveSystem.fontDir + "\\termFont.ttf"); + termmain.Font = new System.Drawing.Font(fontCollection.Families[0], 12F, System.Drawing.FontStyle.Regular); + } + } +} \ No newline at end of file diff --git a/ShiftOS.Main/Terminal/Commands/tcpip.cs b/ShiftOS.Main/Terminal/Commands/tcpip.cs index 815c010..f6e8c49 100644 --- a/ShiftOS.Main/Terminal/Commands/tcpip.cs +++ b/ShiftOS.Main/Terminal/Commands/tcpip.cs @@ -30,12 +30,12 @@ namespace ShiftOS.Main.Terminal.Commands break; case "incoming": WriteLine("Incoming connections from localhost:"); - WriteLine($"IP ADDRESS v4 COMPUTER NAME"); + WriteLine($"IP ADDRESS IPv4 COMPUTER NAME"); WriteLine($"{r.Next(0, 255)}.{r.Next(0, 255)}.{r.Next(0, 255)}.{r.Next(255)} {gen}"); break; case "outgoing": WriteLine("Outgoing connections from localhost:"); - WriteLine($"IP ADDRESS v4 COMPUTER NAME"); + WriteLine($"IP ADDRESS IPv4 COMPUTER NAME"); WriteLine($"{r.Next(0, 255)}.{r.Next(0, 255)}.{r.Next(0, 255)}.{r.Next(255)} {gen}"); WriteLine($"[1] outgoing connection(s) is using {r.Next(0, 16)} MiBs of bandwith."); break; diff --git a/ShiftOS.Main/packages.config b/ShiftOS.Main/packages.config index a7de16a..8db3a71 100644 --- a/ShiftOS.Main/packages.config +++ b/ShiftOS.Main/packages.config @@ -1,5 +1,6 @@  + \ No newline at end of file