using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Media;
using System.IO;
using System.Threading;
using System.Reflection;
using System.Linq.Expressions;
using System.Diagnostics;
namespace TimeHACK.OS.Win95.Win95Apps
{
public partial class WinClassicTerminal : UserControl
{
public Engine.WindowManager wm = new Engine.WindowManager();
public static int currentLine = 0;
public static string prefix = @"C:\>";
public static string startupDir = $"{Engine.SaveSystem.ProfileMyComputerDirectory}";
public WinClassicTerminal()
{
InitializeComponent();
// Paint the classic borders
btnCopy.Paint += (sender, args) => Engine.Paintbrush.PaintClassicBorders(sender, args, 2);
btnFont.Paint += (sender, args) => Engine.Paintbrush.PaintClassicBorders(sender, args, 2);
btnMark.Paint += (sender, args) => Engine.Paintbrush.PaintClassicBorders(sender, args, 2);
btnNothing.Paint += (sender, args) => Engine.Paintbrush.PaintClassicBorders(sender, args, 2);
btnPaste.Paint += (sender, args) => Engine.Paintbrush.PaintClassicBorders(sender, args, 2);
btnSettings.Paint += (sender, args) => Engine.Paintbrush.PaintClassicBorders(sender, args, 2);
sizeSel.Paint += (sender, args) => Engine.Paintbrush.PaintClassicBorders(sender, args, 2);
// Set the default index to "Auto"
sizeSel.SelectedIndex = 0;
// Set the font and append the prefix text
cmdPrompt.Font = new System.Drawing.Font(TitleScreen.pfc.Families[1], 10F, System.Drawing.FontStyle.Regular);
cmdPrompt.AppendText(prefix);
cmdPrompt.BringToFront();
}
///
/// Write text to the Terminal and create a new line. Very similar to the Win32 Console.WriteLine Function.
///
///
public void WriteLine(string Text)
{
cmdPrompt.AppendText(Text + "\n");
this.Update();
}
///
/// Write text to the Terminal. Very similar to the Win32 Console.Write Function.
///
///
public void Write(String Text)
{
cmdPrompt.AppendText(Text);
cmdPrompt.Update();
}
private void btnCopy_Click(object sender, EventArgs e)
{
if (cmdPrompt.SelectedText.Length > 0)
Clipboard.SetText(cmdPrompt.SelectedText); // Set the clipboard text to the selection of the RichTextBox
else
wm.StartInfobox95("ERROR", "You need to select something to copy.", Properties.Resources.Win95Error); // Display an error message if the length is 0
}
private void btnPaste_Click(object sender, EventArgs e)
{
if (Clipboard.GetText() != "")
Write(Clipboard.GetText()); // Write the contents of the Clipboard text in the RichTextBox
else
wm.StartInfobox95("ERROR", "You need to have something in your clipboard to paste.", Properties.Resources.Win95Error); // Display an error message if the clipboard is null/empty
}
private void termMax_Click(object sender, EventArgs e)
{
var windowState = ((Engine.Template.WinClassic)this.TopLevelControl).WindowState;
if (windowState == FormWindowState.Normal)
windowState = FormWindowState.Maximized;
else if (windowState == FormWindowState.Maximized)
windowState = FormWindowState.Normal;
}
private void btnSettings_Click(object sender, EventArgs e)
{
wm.StartInfobox95("INFO", "This feature has not been implemented yet. Stay tuned! -Jason", Properties.Resources.Win95Info);
//TODO: Well, add the settings...
}
private void btnFont_Click(object sender, EventArgs e)
{
//TODO: Add font UC(?)
}
private void richTextBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Return)
{
/// Temporary CMD redirect
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WorkingDirectory = startupDir;
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = $"/C {cmdPrompt.Lines[cmdPrompt.GetLineFromCharIndex(currentLine)].Substring(prefix.Length)}";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
cmdPrompt.Focus();
cmdPrompt.AppendText($"\n{output}");
currentLine++;
cmdPrompt.AppendText($"\n{prefix}");
}
}
}
}