shiftos-next/shiftos_next/Other/Terminal.vb
TheUltimateHacker 424931951b Shiftorium - Draggable Windows upgrade + Bugfixes
Alright, I've added the Draggable Windows upgrade to the Shiftorium, as
well as fixed a quick bug causing "No Items Available" to display when
there were items clearly available.

I've also fixed a positioning bug with BWM windows causing them to start
in the center of the screen, relative to the titlebar, rather than the
form.

I've also re-arranged the code a bit, organizing files in folders. APIs
are in the APIs folder, Desktop Environments are in the Desktop
Environments folder, etc.

The shiftorium still doesn't have draggable window functionality yet...
2015-05-28 21:42:26 -04:00

302 lines
No EOL
12 KiB
VB.net

Public Class Terminal
Public currentdir As String = root
Public prompttoupdatesave As Boolean = False
Dim trackpos As Integer = 0
Private Sub Terminal_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
If BasicWM.Desktop.openterminals > 0 Then BasicWM.Desktop.openterminals -= 1
End Sub
Private Sub Terminal_GotFocus(sender As Object, e As EventArgs) Handles terminaltext.GotFocus
API.txtterm = Me.terminaltext
End Sub
Public Sub terminal_Innitiate(sender As Object, e As EventArgs) Handles MyBase.Load
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
API.txtterm = Me.terminaltext
pnltop.DetermineMyVisibility()
AddLine(username + "@" + osname + " " & currentdir.ToLower.Replace("c:\shiftos", "~") & "$> ")
SelectBottom()
If prompttoupdatesave = True Then
AddLine("ShiftOS has encountered an error loading configuration files. Press any key to reset damaged files.")
End If
End Sub
Public Sub Interpret(command As String)
command = command.ToLower
If command Like "help" Then
ShowHelp()
ElseIf command Like "cd *" Then
If boughtdirectorysurfing = True Then
Dim folder As String = command.Replace("cd ", "")
If folder = ".." Then
If currentdir.ToLower = "c:\shiftos" Then
AddLine("cd: Error! You are at the root of your drive.")
Else
currentdir = IO.Directory.GetParent(currentdir).ToString
End If
Else
If IO.Directory.Exists(currentdir + "\" + folder) Then
currentdir = currentdir & "\" & folder
ElseIf IO.Directory.Exists(folder) Then
currentdir = folder
Else
AddLine("cd: Directory """ & folder & """ doesn't exist.")
End If
End If
Else
wrongcommand()
End If
ElseIf command = "dir" Or command = "ls" Then
If boughtdirectorysurfing Then
AddLine("Type | Name ")
AddLine("-------+-------------------------------------------")
For Each Dir As String In IO.Directory.GetDirectories(currentdir)
Dim dirinf As New IO.DirectoryInfo(Dir)
AddLine("[DIR] | " & dirinf.Name)
Next
For Each file As String In IO.Directory.GetFiles(currentdir)
Dim filinf As New IO.FileInfo(file)
AddLine(filinf.Extension & " | " & filinf.Name)
Next
Else
wrongcommand()
End If
ElseIf command Like "mkdir *" Then
If boughtdirectorysurfing = True Then
Dim foldertomake As String = command.Replace("mkdir ", "")
If IO.Directory.Exists(currentdir + "\" + foldertomake) Then
AddLine("Directory already exists!")
Else
IO.Directory.CreateDirectory(currentdir + "\" + foldertomake)
AddLine("mkdir: Directory created successfully.")
End If
Else
wrongcommand()
End If
ElseIf command Like "give me * codepoints" Then
Dim args() As String = command.Split(" ")
Dim cp As String = args(2)
AddCP(cp)
AddLine("Added " & cp & " to your existing ammount of Codepoints.")
ElseIf command Like "set * *" Then
Dim args() As String = command.Split(" ")
Select Case args(1)
Case "username"
If boughtcustomusername Then
username = args(2)
Else
wrongcommand()
End If
Case "textcolor"
If boughtterminalsettextcolor Then
terminaltext.ForeColor = SetColorbasic(args(2))
End If
Case Else
AddLine("set: No valid setting node in configuration file for """ & args(1) & """.")
End Select
ElseIf command = "05tray" Then
AddLine("500 Codepoints have been added.")
AddCP(500)
ElseIf command Like "open *" Then
Dim progtoopen As String = command.Replace("open ", "")
OpenProgram(progtoopen)
ElseIf command Like "close *" Then
Dim progtoclose As String = command.Replace("close ", "")
If progtoclose = "terminal" Then
If boughtbasicwm = True Then
Me.Close()
Else
AddLine("close: Cannot close the Terminal!")
End If
Else
closeprogram(progtoclose)
End If
ElseIf command Like "shutdown" Then
savegame()
Application.Exit()
ElseIf command Like "math*" Then
mathquiz = True
changeinterpreter()
ElseIf command Like "guess the number" Or command Like "guess" Then
guessthenumber = True
changeinterpreter()
ElseIf command Like "code*" Or command = "code points" Then
AddLine("You have " & codepoints & " Codepoints.")
ElseIf command Like "bwm" Then
If boughtbasicwm = True Then
BasicWM.Desktop.Show()
Else
wrongcommand()
End If
ElseIf command = "colors" Then
showterminalcolors()
ElseIf command Like "" Then
'This is here to make it so that the Terminal doesn't say "Wrong Command" if the user doesn't input anything.
Else
If IO.File.Exists(currentdir + "\" + command) Then
openfile(currentdir + "\" + command)
ElseIf IO.File.Exists(command) Then
openfile(command)
Else
wrongcommand()
End If
End If
End Sub
Dim firstuseconversation As Integer = 0
Private Sub tmrfirstuse_Tick(sender As Object, e As EventArgs) Handles tmrfirstuse.Tick
Select Case firstuseconversation
Case 0
terminaltext.ReadOnly = True
AddLine("IP Address 170.245.12.80 is connecting as ""DevX"".")
Case 1
AddLine("DevX: It seems my updates have completly installed.")
Case 2
AddLine("DevX: Unfortunately, due to your hard drive being formatted, you have lost all your data.")
Case 3
AddLine("DevX: However, Don't worry! I've added some pretty cool features to the Terminal to make up for this.")
Case 4
AddLine("DevX: I can't tell you much, except for ""Type Help for a list of commands"".")
Case 5
AddLine("DevX: I've got to go, but I'll contact you as I develop more updates; and you test the OS.")
Case 6
AddLine("User ""DevX"" has disconnected.")
Case 7
terminaltext.ResetText()
AddLine("user@shiftos ~$> ")
terminaltext.ReadOnly = False
tmrfirstuse.Stop()
End Select
firstuseconversation += 1
End Sub
Private Sub txtterm_KeyDown(sender As Object, e As KeyEventArgs) Handles terminaltext.KeyDown
If prompttoupdatesave = False Then
Select Case e.KeyCode
Case Keys.ShiftKey
trackpos = trackpos - 1
Case Keys.Alt
trackpos = trackpos - 1
Case Keys.CapsLock
trackpos = trackpos - 1
Case Keys.ControlKey
trackpos = trackpos - 1
Case Keys.LWin
trackpos = trackpos - 1
Case Keys.RWin
trackpos = trackpos - 1
Case Keys.Right
If terminaltext.SelectionStart = terminaltext.TextLength Then
trackpos = trackpos - 1
End If
Case Keys.Left
If trackpos < 1 Then
e.SuppressKeyPress = True
trackpos = trackpos - 1
Else
trackpos = trackpos - 2
End If
Case Keys.Up
e.SuppressKeyPress = True
trackpos = trackpos - 1
Case Keys.Down
e.SuppressKeyPress = True
trackpos = trackpos - 1
End Select
If e.KeyCode = Keys.Enter Then
e.SuppressKeyPress = True
If mathquiz = True Then
Dim question As String = terminaltext.Lines(terminaltext.Lines.Length - 2)
Dim answer As String = terminaltext.Lines(terminaltext.Lines.Length - 1).Replace("> ", "")
If answer = "exit" Then
mathquiz = False
AddLine(username + "@" + osname + " " & currentdir.ToLower.Replace("c:\shiftos", "~") & "$> ")
Else
Try
MQInterpret(question, answer)
Catch ex As Exception
AddLine("The answer provided isn't a proper number!")
End Try
AddLine("> ")
End If
ElseIf guessthenumber = True Then
Dim answer As String = terminaltext.Lines(terminaltext.Lines.Length - 1).Replace("> ", "")
If answer = "exit" Then
guessthenumber = False
AddLine(username + "@" + osname + " " & currentdir.ToLower.Replace("c:\shiftos", "~") & "$> ")
Else
Try
GTNInterpret(answer)
Catch ex As Exception
AddLine("The answer provided isn't a proper number.")
End Try
AddLine("> ")
End If
Else
Dim command As String = terminaltext.Lines(terminaltext.Lines.Length - 1).Replace(username + "@" + osname + " " & currentdir.ToLower.Replace("c:\shiftos", "~") & "$> ", "").ToLower
Interpret(command)
If mathquiz Or guessthenumber Then
AddLine("> ")
Else
If command = "clear" Then
terminaltext.Text = username + "@" + osname + " " & currentdir.ToLower.Replace("c:\shiftos", "~") & "$> "
terminaltext.Select(terminaltext.Text.Length, 0)
Else
AddLine(username + "@" + osname + " " & currentdir.ToLower.Replace("c:\shiftos", "~") & "$> ")
terminaltext.Select(terminaltext.Text.Length, 0)
End If
End If
End If
trackpos = 0
Else
If e.KeyCode = Keys.Back Then
Else
trackpos = trackpos + 1
End If
End If
If e.KeyCode = Keys.Back Then
If trackpos < 1 Then
e.SuppressKeyPress = True
Else
If terminaltext.SelectedText.Length < 1 Then
trackpos = trackpos - 1
Else
e.SuppressKeyPress = True
End If
End If
End If
SelectBottom()
Else
e.SuppressKeyPress = True
savegame()
loadgame()
AddLine("Self-repair complete with no errors.")
prompttoupdatesave = False
AddLine(username + "@" + osname + " " & currentdir.ToLower.Replace("c:\shiftos", "~") & "$> ")
End If
End Sub
End Class