Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- oldpullEvent = os.pullEvent
- os.pullEvent = os.pullEventRaw
- -- Cannon OS by PaymentOption --
- VERSION = 1.85
- --------------------------------
- rednet.open("top")
- rednet.open("bottom")
- rednet.open("back")
- rednet.open("front")
- rednet.open("right")
- rednet.open("left")
- --[[ Notes:
- User information like passwords are located in the User/<computerID>/.info.
- E-Mails are stored in the /Mail Directory.
- E-Mail preferences are stored in /Mail/.prefs.
- All printing functions like PrintMenu and PrintMainScreen do not clear the screen first; you must clear it before using them.
- --]]
- -- VARIABLES --
- -- Update and Service Variables --
- nServerID = 12 -- Update and key check server ID
- ----------------------------------
- -- Screen Variables --
- screenWidth, screenHeight = term.getSize()
- selection = 1
- sMenuState = "main"
- ----------------------
- -- Account Variables --
- sUserName = ""
- sPassword = ""
- bNewUser = true
- bLogin = true
- bAdmin = true -- Switch to false to disable the following features: CraftOS, Computer, Email, Account Manipulation
- -----------------------
- -- Authenticity Variables --
- sLocalKey = ""
- bIsAuthentic = true -- If the key entered by the user upon installation is correct, then this should be true
- ----------------------------
- -- Mail --
- if(fs.isDir("Mail")) then nMail = #(fs.list("Mail"))-1
- else nMailCount = 0 end
- ----------
- ---------------
- -- Software Validation --
- function checkKey(sKey)
- rednet.send(nServerID, "CHECKMYKEY")
- rednet.send(nServerID, tostring(sKey))
- sender, message = rednet.receive(1)
- if sender == nServerID then
- if message ~= "authentic" then bAuthentic = false; return false
- else bAuthentic = true; return true end
- end
- end
- function getKey()
- if fs.exists(".key") then return end
- if bIsAuthentic == true then return end -- To avoid embarassing double authentication!
- clear()
- printMainScreen()
- sleep(2)
- clear()
- printBorder()
- cPrint(3, "Welcome!")
- cPrint(5, "You're about to install:")
- cPrint(6, "Cannon OS V:"..VERSION.."!")
- cPrint(7, " The installation wizard will walk you")
- cPrint(8, " through product validation to installation.")
- cPrint(10, "Before you continue, make sure that you have")
- cPrint(11, " the product key given by your distributor.")
- cPrint(15, "[ Continue ]")
- while true do
- event, key = os.pullEvent("key")
- if key == 28 then break end
- end
- clear()
- printBorder()
- rPrint(17, "Cannon OS Version: "..VERSION.."*")
- rPrint(16, "Software: LOCKED*")
- cPrint(8, "Please enter your product key here:")
- term.setCursorPos(15, 9); write("Key: ")
- local sProductKey = newRead()
- if checkKey(sProductKey) then
- clear()
- printBorder()
- cPrint(9, "Congradulations,")
- cPrint(10, "Your software has successfully been")
- cPrint(11, "VALIDATED!")
- sleep(3)
- local file = fs.open(".key", "w")
- file.writeLine(sProductKey)
- file.close()
- bIsAuthentic = true
- else
- clear()
- printBorder()
- cPrint(8, "I'm sorry, but the key")
- cPrint(9, "entered doesn't seem to be valid.")
- sleep(3)
- os.shutdown()
- end
- end
- -------------------------
- -- Helper Functions --
- function cPrint(height, string)
- local xPos = screenWidth/2 - string.len(string)/2
- term.setCursorPos(xPos, height); term.write(string)
- end
- function rPrint(height, string)
- local xPos = screenWidth - string.len(string)
- term.setCursorPos(xPos, height); term.write(string)
- end
- function clear() term.clear(); term.setCursorPos(1,1) end
- function printBorder()
- write(" "..string.rep("*", screenWidth-2).."n")
- for i=1, screenHeight-2 do
- write(" *"..string.rep(" ", screenWidth-4).."*n")
- end
- write(" "..string.rep("*", screenWidth-2))
- end
- function customWrite(height, string)
- term.setCursorPos(3, height)
- term.write(string)
- end
- function clearCenter()
- cPrint(2, "* "..sUserName.." *")
- cPrint(3, "*"..string.rep("*", string.len(sUserName)+2).."*")
- rPrint(17, "Cannon OS Version: "..VERSION.. "*")
- local line = 4
- term.setCursorPos(34, 3); term.write(" ") -- Remove the very top part of the cannon logo
- repeat
- term.setCursorPos(1, line); term.clearLine()
- line = line+1
- until line == 12
- line = 4
- term.setCursorPos(1, 4)
- repeat
- write(" *"..string.rep(" ", screenWidth-4).."*n")
- line = line+1
- until line == 12
- end
- function printContainer()
- term.setCursorPos(4, 5); term.write(string.rep("*", screenWidth-6))
- local y = 6
- for i=1, screenHeight - 13 do
- term.setCursorPos(4, y); term.write("*"..string.rep(" ", screenWidth-8).."*")
- y = y+1
- end
- term.setCursorPos(4, 11); term.write(string.rep("*", screenWidth-6))
- end
- -- Perfecting the pullEvent backspace attempt 1! --
- function newRead( _charLimit, _ReplaceChar) -- The filter can either be a 1, 0, or nil. 1 is Numbers only, 0 is letters only, and nil is both
- local sMessage = ""
- term.setCursorBlink(true)
- local originalCursorX, originalCursorY = term.getCursorPos()
- while true do
- local cursorX, cursorY = term.getCursorPos()
- local event, p1 = os.pullEvent()
- if _charLimit ~= nil then
- if string.len(sMessage) == _charLimit then term.setCursorBlink(false); return sMessage end
- end
- if event == "char" then sMessage = sMessage..p1
- --[[elseif event == "key" then -- The escape key has keyID 1 so: 0 = keyID: 11, 1 = keyID: 2, 2 = keyID : 3 etc etc....
- if p1 == 11 or p1 == 2 or p1 == 3 or p1 == 4 or p1 == 5 or p1 == 6 or p1 == 7 or p1 == 8 or p1 == 9 or p1 == 10 then
- -- 0 1 2 3 4 5 6 7 8 9
- sMessage = sMessage..(p1-1)
- end--]]
- end
- if event == "key" and p1 == 28 then term.setCursorBlink(false); return sMessage end-- Enter key; end the loop and let's see the string
- if event == "key" and p1 == 14 then -- Backspace...
- sMessage = string.sub(sMessage, 1, string.len(sMessage)-1)
- -- Set our message to the substring of the first charcter
- -- To the length of the message minus 1 to achieve one less letter.
- term.setCursorPos(originalCursorX, cursorY)
- term.write(sMessage.." ") -- Adding this empty space clears the removed character from the line, but may pose future issues
- end
- term.setCursorPos(originalCursorX, cursorY); term.write(string.rep(" ", string.len(sMessage)))
- -- Clear the previous line just in case we get a new line
- -- Now write the message on the new line
- if _ReplaceChar ~= nil then
- term.setCursorPos(originalCursorX, cursorY)
- term.write(string.rep( _ReplaceChar, string.len(sMessage) ))
- else
- term.setCursorPos(originalCursorX, cursorY)
- term.write(sMessage)
- end
- end
- end
- ----------------------
- -- System Functions --
- function checkInstalltion()
- if fs.exists("SYSTEM/.installed") then return true
- else return false end
- end
- function runShell() shell.run("/rom/programs/shell") end
- function getVersion() return VERSION end
- function checkVersion()
- local sCommand = "get"
- if sCommand == "get" then
- local sCode = "c17Hgq1A"
- local sPath = ".tempVersion"
- while true do
- local response = http.get(
- "http://pastebin.com/raw.php?i="..textutils.urlEncode( sCode )
- )
- if response then
- local sResponse = response.readAll()
- response.close()
- if tonumber(sResponse) > VERSION then return true
- else return false end
- break
- else return false end
- end
- end
- end
- function updateSelf()
- local sCommand = "get"
- if sCommand == "get" then
- local sCode = "6a92bGGZ"
- local sFile = "startup"
- local sPath = shell.resolve( sFile )
- while true do
- local response = http.get(
- "http://pastebin.com/raw.php?i="..textutils.urlEncode( sCode )
- )
- if response then
- local sResponse = response.readAll()
- response.close()
- local file = fs.open( sPath, "w" )
- file.write( sResponse )
- file.close()
- break
- else return false end
- end
- end
- end
- function checkDirs()
- if not fs.isDir("Mail") then shell.run("rom/programs/mkdir", "Mail"); nMailCount = (#(fs.list("/Mail"))) end
- if not fs.isDir("User") then shell.run("rom/programs/mkdir", "User"); shell.run("rom/programs/mkdir", "User/"..tostring(os.getComputerID())) end
- if not fs.isDir("User/"..tostring(os.getComputerID()).."/Projects") then shell.run("rom/programs/mkdir", "User/"..tostring(os.getComputerID()).."/Projects") end
- if not fs.isDir("User/"..tostring(os.getComputerID()).."/Desktop") then shell.run("rom/programs/mkdir", "User/"..tostring(os.getComputerID()).."/Desktop") end
- if not fs.isDir("User/"..tostring(os.getComputerID()).."/Desktop/Shortcuts") then shell.run("rom/programs/mkdir", "User/"..tostring(os.getComputerID()).."/Desktop/Shortcuts") end
- if not fs.isDir("User/"..tostring(os.getComputerID()).."/Files") then shell.run("rom/programs/mkdir", "User/"..tostring(os.getComputerID()).."/Files") end
- if not fs.isDir("Mail/Contacts") then shell.run("rom/programs/mkdir", "Mail/Contacts") end
- if not fs.isDir("SYSTEM") then shell.run("rom/programs/mkdir", "SYSTEM") end
- if not fs.exists("SYSTEM/Version") then
- local file = fs.open("SYSTEM/Version", "w"); file.writeLine(tostring(VERSION))
- file.close()
- end
- file = fs.open("SYSTEM/.installed", "w")
- file.writeLine("TRUE")
- file.close()
- end
- function checkUserInformation()
- if fs.exists("User/"..os.getComputerID().."/.info") then
- local file = fs.open("User/"..os.getComputerID().."/.info", "r")
- sUserName = file.readLine()
- sPassword = file.readLine()
- file.close()
- bNewUser = false
- else
- bNewUser = true
- end
- end
- function getUserInformation()
- if bNewUser == false then return nil -- This is to prevent accidental account resets
- else
- printNewUserScreen()
- end
- end
- function handleLogin()
- if fs.exists(".login") then
- file = fs.open(".login", "r")
- fileContents = file.readAll()
- file.close()
- fs.delete(".login")
- bLogin = false
- if fileContents == "false" then return end
- end
- if bNewUser == false then
- printMainScreen(); sleep(2)
- clear()
- printBorder()
- cPrint(4, "***************************")
- cPrint(5, "* Identification required *")
- cPrint(6, "***************************")
- cPrint(8, "Username: ")
- cPrint(9, "Password: ")
- rPrint(17, "Cannon OS Version: "..VERSION.."*")
- rPrint(16, "LOCKED*")
- term.setCursorPos(screenWidth/2 - string.len("Username: ")/2 + string.len("Username: "), 8)
- local tempUserName = newRead(14, nil)
- term.setCursorPos(screenWidth/2 - string.len("Password: ")/2 + string.len("Password: "), 9)
- local tempPassword = newRead(14, "*")
- if tempUserName == sUserName and tempPassword == sPassword then
- rPrint(16, "UNLOCKED*")
- cPrint(11, "**********************")
- cPrint(12, "* Successfull login! *")
- cPrint(13, "**********************")
- sleep(2)
- return
- else
- cPrint(11, "************************")
- cPrint(12, "* Unsuccessfull login! *")
- cPrint(13, "************************")
- sleep(2)
- os.shutdown()
- end
- end
- end
- function printInstallation()
- if checkInstalltion() then return end
- printBorder()
- cPrint(4, "*************************")
- cPrint(5, "* Installation Progress *")
- cPrint(6, "*************************")
- local progressPosition = 6; -- X position to represent where the progress bars will be drawn
- local nProgressPercent = 0;
- cPrint(8, " * "..string.rep("*", screenWidth - 6))
- cPrint(9, " * *"..string.rep(" ", screenWidth - 8).."*")
- cPrint(10, " * "..string.rep("*", screenWidth - 6))
- cPrint(12, "********")
- cPrint(13, "* "..string.rep(" ", string.len("100%")).." *")
- cPrint(14, "********")
- for i=1, 80 do
- if i%2 == 0 then
- term.setCursorPos(progressPosition, 9); term.write("|")
- progressPosition = progressPosition+1
- sleep(0.2)
- end
- nProgressPercent = nProgressPercent+1
- if nProgressPercent == 75 then nProgressPercent = 95 end
- if nProgressPercent == 95 then sleep(1.1) end
- term.setCursorPos(24, 13); term.write(nProgressPercent)
- end
- checkDirs()
- end
- -- Background Processes --
- function checkMail(sender, message)
- if string.find(message, "CANNONMAILMESSAGE") then
- local file = fs.open("Mail/Unread"..nMailCount, "w")
- message = string.gsub(message, "CANNONMAILMESSAGE", "")
- file.write(tostring(sender).."n"..tostring(message))
- file.close()
- nMailCount = nMailCount+1
- end
- end
- --------------------------
- ----------------------
- -- Menues and other screens --
- function printNewUserScreen()
- if bNewUser == false then return end
- local bPasswordsMatch = false
- printBorder()
- printWelcome()
- sleep(3)
- clear()
- printBorder()
- cPrint(2, "* New User *")
- cPrint(3, "************")
- rPrint(17, "Cannon OS Version: "..VERSION.."*")
- cPrint(6, "Username: ")
- cPrint(7, "Password: ")
- cPrint(8, " Confirm: ")
- cPrint(12, "************************")
- cPrint(13, "*Password not optional!*")
- cPrint(14, "************************")
- term.setCursorPos(screenWidth/2-string.len("Username: ")/2+string.len("Username: "), 6)
- sUserName = newRead(14, nil)
- if string.len(sUserName) > 14 then
- cPrint(10, "Username is too long!"); sleep(1.3)
- term.setCursorPos(1, 10); term.clearLine() -- Clear the line 10
- term.write(" *"..string.rep(" ", screenWidth-4).."*")
- term.setCursorPos(1, 6); term.clearLine() -- Clear the line
- term.write(" *"..string.rep(" ", screenWidth-4).."*")
- cPrint(6, "Username: ")
- term.setCursorPos(screenWidth/2-string.len("Username: ")/2+string.len("Username: "), 6)
- sUserName = newRead(14, nil)
- end
- while bPasswordsMatch == false do
- term.setCursorPos(screenWidth/2-string.len("Password: ")/2+string.len("Password: "), 7)
- sPassword = newRead(14, "*")
- if sPassword ~= nil and sPassword ~= "" then
- term.setCursorPos(screenWidth/2-string.len(" Confirm: ")/2+string.len(" Confirm: "), 8)
- local sConfirm = newRead(14, "*")
- if sConfirm ~= sPassword then
- cPrint(10, "Passwords do not match!"); sleep(1.3)
- term.setCursorPos(1, 10); term.clearLine() -- Clear the line 10
- term.write(" *"..string.rep(" ", screenWidth-4).."*")
- term.setCursorPos(1, 7); term.clearLine() -- Clear the line 7
- term.write(" *"..string.rep(" ", screenWidth-4).."*")
- cPrint(7, "Password: ")
- term.setCursorPos(1, 8); term.clearLine() -- Clear the line 8
- term.write(" *"..string.rep(" ", screenWidth-4).."*")
- cPrint(8, " Confirm: ")
- else sPassword = sConfirm; bPasswordsMatch = true end
- else sPassword = ""
- end
- end
- local file = fs.open("User/"..os.getComputerID().."/.info", "w")
- file.writeLine(tostring(sUserName))
- if sPassword == "" then file.writeLine("N/A")
- else file.writeLine(tostring(sPassword))
- end
- file.close()
- cPrint(10, "Account '"..sUserName.. "' succesfully created!"); sleep(1.3)
- end
- function printWelcome()
- customWrite(3, "__ __ _ ")
- customWrite(4, " / / | | ")
- customWrite(5, " / / /___| | ___ ___ _ __ ___ ___ ")
- customWrite(6, " / / // _ |/ __|/ _ | '_ ' _ / _ ")
- customWrite(7, " / /| __/ | (__| (_) | | | | | | __/")
- customWrite(8, " / / ___|_|___|___/|_| |_| |_|___|")
- customWrite(9, " _ _ ")
- customWrite(10, " | | | | ")
- customWrite(11, " | | | |___ ___ _ __ ")
- customWrite(12, " | | | / __|/ _ '__|")
- customWrite(13, " | |__| __ __/ | ")
- customWrite(14, " ____/|___/___|_| ")
- rPrint(17, "Cannon OS Version: "..VERSION.."*")
- end
- function printMainScreen()
- printBorder()
- customWrite(2, " ________")
- customWrite(3, " | ______o|")
- customWrite(4, " _______________ ||__---_||")
- customWrite(5, " | ___________ || ______ |")
- customWrite(6, " | | | |||______||")
- customWrite(7, " | | Cannon OS | ||--------|")
- customWrite(8, " | | By | || O |")
- customWrite(9, " | | Payment | || | |")
- customWrite(10, " | '-----------' || | |")
- customWrite(11, " |_____________-_|| | |")
- customWrite(12, " __/_________ |::::::::|")
- customWrite(13, " ________________'-.__")
- customWrite(14, " /:::::::::':::':: .---.")
- customWrite(15, " /::======::: .:.::: _) ")
- customWrite(16, ' """""""""""""""""""" -----')
- term.setCursorPos(3, 17); term.write("By PaymentOption")
- rPrint(17, "Version: "..VERSION.. "*")
- end
- function printLogo()
- term.setCursorPos(34, 3); term.write("__")
- customWrite(4, " / ")
- customWrite(5, " .-. | |")
- customWrite(6, " * _.-' __/")
- customWrite(7, " .-' ")
- customWrite(8, " / _/")
- customWrite(9, " | _ /")
- customWrite(10, " | /_'")
- customWrite(11, " _____/")
- end
- function printLogout()
- term.setCursorPos(34, 3); term.write(" ")
- clearCenter()
- cPrint(5, "********")
- cPrint(6, "*Logout*")
- cPrint(7, "********")
- cPrint(8, "/ ")
- cPrint(9, "***************")
- cPrint(10, "*[ Yes ] No *")
- cPrint(11, "***************")
- while true do
- event, key = os.pullEvent("key")
- if key == 205 and selection < 2 then selection = 2
- elseif key == 203 and selection > 1 then selection = 1
- elseif key == 28 and selection == 1 then os.reboot()
- elseif key == 28 and selection == 2 then sMenuState = "main"; selection = 6; break
- end
- if selection == 1 then cPrint(10, "*[ Yes ] No *")
- else cPrint(10, "* Yes [ No ]*") end
- end
- end
- function printMainMenu()
- printBorder()
- cPrint(2, "* "..sUserName.." *")
- cPrint(3, "*"..string.rep("*", string.len(sUserName)+2).."*")
- rPrint(17, "Cannon OS Version: "..VERSION.. "*")
- if sMenuState == "main" then printLogo(); rPrint(2, "Mail: "..nMailCount.."*") end
- if selection == 1 then cPrint(13, "[ Computer ] Craft OS IRC ")
- cPrint(15, " E-Mail Account Update ")
- end
- if selection == 2 then cPrint(13, " Computer [ Craft OS ] IRC ")
- cPrint(15, " E-Mail Account Update ")
- end
- if selection == 3 then cPrint(13, " Computer Craft OS [ IRC ] ")
- cPrint(15, " E-Mail Account Update ")
- end
- if selection == 4 then cPrint(13, " Computer Craft OS IRC ")
- cPrint(15, "[ E-Mail ] Account Update ")
- end
- if selection == 5 then cPrint(13, " Computer Craft OS IRC ")
- cPrint(15, " E-Mail [ Account ] Update ")
- end
- if selection == 6 then cPrint(13, " Computer Craft OS IRC ")
- cPrint(15, " E-Mail Account [ Update ] ")
- end
- end
- ------------------------------
- -- Mail related things --
- function loadContacts()
- local tContacts = fs.list("Mail/Contacts")
- for i=1, #tContacts do -- Set the correct computer adress found
- local file = fs.open("Mail/Contacts/"..tContacts[i], "r")
- local fileContents = file.readAll()
- file.close()
- tContacts[i] = { name = tContacts[i], id = fileContents }
- end
- return tContacts
- end
- function mailMenu()
- recipientID = 0
- sLine1 = "" -- The message will be split into two lines due to lack of multiline functionality of newread()
- sLine2 = ""
- sMessage = "" -- The two lines will be combined into the whole message in this variable
- selection = 1
- nMailCount = 0
- screenWidth, screenHeight = term.getSize()
- function cPrint(height, string)
- local xPos = screenWidth/2 - string.len(string)/2
- term.setCursorPos(xPos, height)
- term.write(string)
- end
- function rPrint(height, string)
- local xPos = screenWidth - string.len(string)
- term.setCursorPos(xPos, height)
- term.write(string)
- end
- clearCenter() -- Remove the cannon logo
- local function sendMessage()
- sMessage = ";alkdjien".."n"..sMessage
- rednet.send(tonumber(recipientID), sMessage)
- end
- local function printMailMenu()
- rPrint(2, "Mail: "..tostring((#(fs.list("Mail"))-1).."*"))
- cPrint(5, "***********")
- if selection == 1 then cPrint(6, "*[ Write ]*")
- else cPrint(6, "* Write *") end
- if selection == 2 then cPrint(7, "*[ eMail ]*")
- else cPrint(7, "* eMail *") end
- if selection == 3 then cPrint(8, "*[ Cont. ]*")
- else cPrint(8, "* Cont. *") end
- if selection == 4 then cPrint(9, "*[ Leave ]*")
- else cPrint(9, "* Leave *") end
- cPrint(10, "***********")
- -- End these damn lines ^^
- end
- local function printRevise()
- local nSelect = 1 -- Too much sharing of the 'select' variable
- local function cDraw(width, height, string)
- term.setCursorPos(width, height)
- term.write(string)
- end
- local function printRevMenu()
- cDraw(29, 5, "*****************")
- if nSelect == 1 then cDraw(29, 6, "*[ Send ] Exit *")
- else cDraw(29, 6, "* Send [ Exit ]*") end
- cDraw(29, 7, "*****************")
- end
- while true do
- printRevMenu()
- event, key = os.pullEvent("key")
- -- Freakin' lines man ^^
- if key == 205 and nSelect == 1 then nSelect = nSelect+1
- elseif key == 203 and nSelect == 2 then nSelect = nSelect-1
- elseif key == 28 and nSelect == 1 then sendMessage(); clearCenter(); term.setCursorPos(4, 12); term.write(string.rep(" ", 42)); break
- elseif key == 28 and nSelect == 2 then clearCenter(); break
- end
- end
- end
- local function composeMail()
- clearCenter()
- term.setCursorPos(4, 5); term.write("****************************")
- term.setCursorPos(4, 6); term.write("*Recipient: *") -- 15 is the x position for the retrieving of 'recipietID'
- term.setCursorPos(4, 7); term.write("****************************")
- term.setCursorPos(4, 9); term.write(string.rep("*", 42))
- term.setCursorPos(4, 10); term.write("*"..string.rep(" ", 40).."*") -- 2 lines to write the body of the message; 38 spaces per line
- term.setCursorPos(4, 11); term.write("*"..string.rep(" ", 40).."*")
- term.setCursorPos(4, 12); term.write(string.rep("*", 42))
- term.setCursorPos(15, 6) -- Get the recipient ID
- recipientID = newRead(14) -- If they entered a contact name then find the id
- local tContacts = loadContacts()
- for i=1, #tContacts do
- if tostring(recipientID) == tContacts[i].name then recipientID = tContacts[i].id end
- end
- term.setCursorPos(6, 10); sLine1 = newRead(38) -- Character only filter
- term.setCursorPos(6, 11); sLine2 = newRead(38)
- sMessage = sLine1.." "..sLine2
- printRevise()
- end
- local function contacts()
- local nSelect = 1
- local scroll = 0;
- local tContacts = fs.list("Mail/Contacts")
- local function printContacts()
- local y = 6
- local tContacts = loadContacts()
- for i = 1+scroll, #tContacts do
- term.setCursorPos(5, y)
- if nSelect == i then term.write("[ "..tContacts[i].name.." ]")
- else term.write(" "..tContacts[i].name.." ") end
- term.setCursorPos(43, y); term.write(tContacts[i].id)
- y = y+1
- if y == 11 then break end
- end
- term.setCursorPos(4, 3); term.write("********************")
- term.setCursorPos(4, 4); term.write("* Ctrl:New Contact *")
- end
- while true do
- clearCenter()
- printContainer()
- printContacts()
- local event, key = os.pullEvent("key")
- if key == 208 and nSelect < #(fs.list("Mail/Contacts")) then
- if nSelect >= 4 and scroll < #tContacts then scroll = scroll+1; nSelect = nSelect+1
- else nSelect = nSelect+1 end
- elseif key == 200 and nSelect > 1 then
- if nSelect >= 4 and scroll > 0 then scroll = scroll-1; nSelect = nSelect-1
- else nSelect = nSelect-1 end
- elseif key == 29 or key == 157 then
- term.setCursorPos(5, 6); term.write(string.rep(" ", screenWidth-8))
- term.setCursorPos(5, 6); term.write("Contact Name: ")
- local sContact = newRead(14)
- term.setCursorPos(5, 6); term.write(string.rep(" ", screenWidth-8))
- term.setCursorPos(5, 6); term.write("Contact ID: ")
- local nContactID = newRead(14)
- local file = fs.open("Mail/Contacts/"..sContact, "w")
- file.write(tostring(nContactID))
- file.close()
- elseif key == 14 then break
- elseif key == 28 then
- nSelected = 1
- while true do
- if nSelected == 1 then
- term.setCursorPos(5, 6)
- term.write("Delete? [ Yes ] No ")
- else
- term.setCursorPos(5, 6)
- term.write("Delete? Yes [ No ]")
- end
- local event, key = os.pullEvent("key")
- if key == 205 and nSelected == 1 then nSelected = nSelected+1
- elseif key == 203 and nSelected == 2 then nSelected = nSelected-1
- elseif key == 28 and nSelected == 1 then
- local tContacts = loadContacts()
- for i=1, #tContacts do
- if nSelected == i then fs.delete("Mail/Contacts/"..tContacts[i].name) end
- end
- break
- elseif key == 28 and nSelected == 2 then break
- end
- end
- end
- end
- end
- while true do
- printMailMenu()
- event, key = os.pullEvent("key")
- if key == 200 and selection > 1 then selection = selection-1
- elseif key == 208 and selection < 4 then selection = selection+1
- elseif key == 28 and selection == 1 then composeMail(); sMenuState = "main"; break
- elseif key == 28 and selection == 2 then readMail(); sMenuState = "main"; break
- elseif key == 28 and selection == 3 then contacts(); selection = 1; term.setCursorPos(4, 3); term.write(string.rep(" ", 17)); clearCenter();
- elseif key == 28 and selection == 4 then selection = 4; sMenuState = "main"; break
- end
- end
- end
- function newMessage(nSender, sContents)
- rPrint(2, "Mail: "..nMailCount.."*")
- sMenuState = "newMessage"
- local nSelect = 1
- local bReading = false -- This is to handle whether or not we should print the reception menu
- clearCenter()
- local function printMessageMenu()
- cPrint(5, "*****************")
- cPrint(6, "* New Message *")
- cPrint(7, "*****************")
- if nSelect == 1 then cPrint(8, "*[ Read ] Exit *")
- else cPrint(8, "* Read [ Exit ]*") end
- cPrint(9, "*****************")
- end
- while true do
- if not bReading then printMessageMenu() end
- local event, key = os.pullEvent("key")
- if key == 205 then nSelect = nSelect+1
- elseif key == 203 then nSelect = nSelect-1
- elseif key == 28 and nSelect == 1 then
- nMailCount = nMailCount-1
- bReading = true
- clearCenter()
- term.setCursorPos(4, 5); term.write("From: "..nSender)
- term.setCursorPos(4, 6); term.write("******"..string.rep("*", string.len(nSender)))
- term.setCursorPos(4, 7)
- if string.len(sContents) > 42 then
- local sContentsLine1 = string.sub(sContents, 1, 42) -- Split the message into two lines if it is greater than 38
- local sContentsLine2 = string.sub(sContents, 43, string.len(sContents))
- term.write(sContentsLine1)
- term.setCursorPos(4, 9)
- term.write(sContentsLine2)
- else
- term.write(sContents)
- end
- break -- Print the message then end
- elseif key == 28 and nSelect == 2 then
- clearCenter()
- sMenuState = "main"
- return
- end
- end
- while true do
- cPrint(9, "**********")
- cPrint(10, "*[ Exit ]*")
- cPrint(11, "**********")
- local event, key = os.pullEvent("key")
- if key == 28 then sMenuState = "main"; break end
- end
- end
- function readMail()
- local sFileOpen = ""
- sMenuState = "archive"
- clearCenter()
- if #(fs.list("Mail"))-1 == 0 then
- cPrint(6, "***************")
- cPrint(7, "* No messages *")
- cPrint(8, "***************")
- sleep(1.3)
- clearCenter()
- cPrint(12, " ") -- Clear line 12
- return
- end
- term.setCursorPos(4, 5); term.write(string.rep("*", screenWidth-6))
- local y = 6
- for i=1, screenHeight - 13 do
- term.setCursorPos(4, y); term.write("*"..string.rep(" ", screenWidth-8).."*")
- y = y+1
- end
- term.setCursorPos(4, 11); term.write(string.rep("*", screenWidth-6))
- local tMessages = fs.list("Mail")
- local nSelections = #tMessages -- How many selections for mail we have
- local nSelected = 1
- local function clearMessageRectangle()
- local y = 6
- for i=1, 5 do
- term.setCursorPos(5, y); term.write(string.rep(" ", screenWidth - 8))
- y = y+1
- end
- end
- local function printMessages()
- term.setCursorPos(5, 13); term.write(string.rep(" ", screenWidth - (string.len("*********************")+2)))
- term.setCursorPos(screenWidth - (string.len("*********************")+2), 13)
- term.write("*********************")
- term.setCursorPos(screenWidth - (string.len("* Backspace to exit *")+2), 12)
- term.write("* Backspace to exit *")
- tMessages = fs.list("Mail")
- for i=1, #tMessages do
- if tMessages[i] == "Contacts" then table.remove(tMessages, i) end
- end -- Remove the 'Contacts' directory from the list
- term.setCursorPos(4, 5); term.write(string.rep("*", screenWidth-6))
- local y = 6
- for i=1, screenHeight - 13 do
- term.setCursorPos(4, y); term.write("*"..string.rep(" ", screenWidth-8).."*")
- y = y+1
- end
- term.setCursorPos(4, 11); term.write(string.rep("*", screenWidth-6))
- local recX = 6
- local recY = 6 -- Positions to hold the x and y coords of where we'll draw the mail
- for i=1, #tMessages do
- if recX > 41 or recX+string.len(tMessages[i]) > 41 then
- recY = recY+2
- recX = 6
- end
- if recY >= 10 then break end
- if nSelected == i then recX = recX-1 end
- term.setCursorPos(recX, recY)
- if nSelected == i then term.write("["..tMessages[i].."]"); recX = recX+1 end
- if nSelected ~= i then term.write(tMessages[i]) end
- if nSelected == i then
- recX = recX + string.len(tMessages[i]) + 2 -- The 2 is for the spaces between the options
- else recX = recX + string.len(tMessages[i]) + 2 end
- end
- end
- while true do
- cPrint(12, " ") -- Clear the last line from the 'return' or 'delete' menu from reading a message
- printMessages()
- local event, key = os.pullEvent("key")
- if key == 205 and nSelected < #tMessages then nSelected = nSelected+1
- elseif key == 203 and nSelected > 1 then nSelected = nSelected-1
- elseif key == 14 then clearCenter(); term.setCursorPos(5, 12); term.write(string.rep(" ", screenWidth - 7)); term.setCursorPos(5, 13); term.write(string.rep(" ", screenWidth - 7)); cPrint(13, " Computer Craft OS File Browser "); return
- elseif key == 28 then
- clearCenter()
- local sFileOpen = "Mail/"..tMessages[nSelected]
- local file = fs.open("Mail/"..tMessages[nSelected], "r")
- local nSender = file.readLine()
- local sMessage = file.readAll(); -- We'll be using the File Contents as the message to read
- file.close()
- sMessage = string.gsub(sMessage, tostring(nSender), "") -- Get the message string without the sender
- if string.len(sMessage) > 38 then
- local sMessageLine1 = string.sub(sMessage, 1, 19)
- local sMessageLine2 = string.sub(sMessage, 20, 38)
- end
- term.setCursorPos(4, 3); term.write("From: "..nSender)
- term.setCursorPos(4, 4); term.write("******"..string.rep("*", string.len(tostring(nSender))))
- term.setCursorPos(4, 5)
- if sMessageLine1 ~= nil then
- term.write(sMessageLine1)
- term.setCursorPos(4, 6)
- term.write(sMessageLine2)
- else
- term.write(sMessage)
- end
- nSelected = 1 -- Reset the selection for the 'back' or 'delete' option
- term.setCursorPos(5, 12); term.write(string.rep(" ", screenWidth - 7)); term.setCursorPos(5, 13); term.write(string.rep(" ", screenWidth - 7))
- while true do
- cPrint(10, "*********************")
- if nSelected == 1 then cPrint(11, "*[ Return ] Delete *")
- else cPrint(11, "* Return [ Delete ]*") end
- cPrint(12, "*********************")
- --
- local event, key = os.pullEvent("key")
- if key == 205 and nSelected == 1 then nSelected = 2
- elseif key == 203 and nSelected == 2 then nSelected = 1
- elseif key == 28 and nSelected == 1 then term.setCursorPos(4, 3); term.write(string.rep(" ", string.len("From: "..nSender))); term.setCursorPos(4, 4); term.write(string.rep(" ", string.len("From: "..nSender))) break
- elseif key == 28 and nSelected == 2 then
- fs.delete(sFileOpen)
- sFileOpened = ""
- nSelected = 1
- term.setCursorPos(4, 3); term.write(string.rep(" ", string.len("From: "..nSender)))
- term.setCursorPos(4, 4); term.write(string.rep(" ", string.len("From: "..nSender)))
- break
- end
- end
- end
- end
- end
- -------------------------
- -- Filbrowser --
- function fileBrowser()
- sMenuState = "browseing"
- clearCenter()
- local scroll = 0
- local y = 0
- local sObjectName = ""
- local sObjectType = ""
- local nObjectHeight = 0
- local nSelect = 1
- local tFiles = {}
- local function printOptionMenu()
- local previousSelection = nSelect
- nSelect = 1
- while true do
- term.setCursorPos(6, 8); term.write(string.rep(" ", 40))
- if nSelect == 1 and sObjectType == "File" then cPrint(8, "[Run] Edit Delete Exit ")
- elseif nSelect == 2 and sObjectType == "File" then cPrint(8, " Run [Edit] Delete Exit ")
- elseif nSelect == 3 and sObjectType == "File" then cPrint(8, " Run Edit [Delete] Exit ")
- elseif nSelect == 4 and sObjectType == "File" then cPrint(8, " Run Edit Delete [Exit]")
- end
- local event, key = os.pullEvent("key")
- if key == 205 and nSelect < 4 then nSelect = nSelect+1
- elseif key == 203 and nSelect > 1 then nSelect = nSelect-1
- elseif key == 14 or key == 28 and nSelect == 4 then nSelect = previousSelection; return false
- elseif nSelect == 1 and key == 28 then clear(); shell.run(sObjectName); sMenuState = "main"; return true
- elseif nSelect == 2 and key == 28 then clear(); shell.run("edit", sObjectName); sMenuState = "main"; return true
- elseif nSelect == 3 and key == 28 then fs.delete(shell.dir().."/"..sObjectName); sMenuState = "main"; return true
- end
- end
- end
- local function printFileContainer()
- term.setCursorPos(4, 5); term.write(string.rep("*", screenWidth-6))
- local y = 6
- for i=1, screenHeight - 13 do
- term.setCursorPos(4, y); term.write("*"..string.rep(" ", screenWidth-8).."*")
- y = y+1
- end
- term.setCursorPos(4, 11); term.write(string.rep("*", screenWidth-6))
- end
- local function printFiles()
- local sDir = shell.dir()
- clearCenter()
- printFileContainer() -- This is the rectangle we'll be displaying the options in
- y = 6
- tFiles = fs.list( sDir )
- for i=1+scroll, #tFiles do
- if i == nSelect then nObjectHeight = y end
- sObjectName = tostring(shell.dir()).."/"..tFiles[nSelect]
- if fs.isDir(tostring(shell.dir()).."/"..tFiles[nSelect]) then sObjectType = "Dir"
- else sObjectType = "File"
- end
- term.setCursorPos(6, y)
- if nSelect == i then term.write("["..tFiles[i].."]")
- else term.write(" "..tFiles[i].." ") end
- if fs.isDir(tostring(shell.dir()).."/"..tFiles[i]) then term.setCursorPos(42, y); term.write("D ")
- else term.setCursorPos(42, y); term.write("F ") end
- y = y+1
- if y == 11 then break end
- end
- end
- while true do
- printFiles()
- local event, key = os.pullEvent("key")
- if key == 200 and nSelect == 1 then nSelect = 1
- elseif key == 208 and nSelect == #tFiles then nSelect = #tFiles
- elseif key == 208 and nSelect < #tFiles then
- if nSelect >= 5 and scroll < #tFiles then scroll = scroll+1; nSelect = nSelect+1
- else nSelect = nSelect+1 end
- elseif key == 200 and nSelect > 1 then
- if nSelect >= 5 and scroll > 0 then scroll = scroll-1; nSelect = nSelect-1
- else nSelect = nSelect-1 end
- elseif key == 28 and sObjectType == "File" then
- if printOptionMenu() then return end
- elseif key == 28 and sObjectType == "Dir" then shell.setDir(sObjectName); scroll = 0; nSelect = 1
- elseif key == 14 and shell.dir() ~= "" then shell.run("cd", ".."); scroll = 0; nSelect = 1
- elseif key == 14 and shell.dir() == "/" or shell.dir() == "" then sMenuState = "main"; break
- end
- end
- end
- ----------------
- -- IRC Client --
- function IRC_Client()
- sMenuState = "irc"
- -- VARS --
- local sServerName = ""
- local nServerID = 0
- local bConnected = false
- local sUserName = ""
- local sText = ""
- nConversationY = 3
- ----------
- -- Helper local functions --
- local function newReadIRC( _charLimit, _ReplaceChar) -- The filter can either be a 1, 0, or nil. 1 is Numbers only, 0 is letters only, and nil is both
- local sMessage = ""
- term.setCursorBlink(true)
- local originalCursorX, originalCursorY = term.getCursorPos()
- while true do
- local cursorX, cursorY = term.getCursorPos()
- local event, p1, p2 = os.pullEvent()
- if _charLimit ~= nil then
- if string.len(sMessage) == _charLimit then term.setCursorBlink(false); return sMessage end
- end
- if event == "char" then sMessage = sMessage..p1
- --[[elseif event == "key" then -- The escape key has keyID 1 so: 0 = keyID: 11, 1 = keyID: 2, 2 = keyID : 3 etc etc....
- if p1 == 11 or p1 == 2 or p1 == 3 or p1 == 4 or p1 == 5 or p1 == 6 or p1 == 7 or p1 == 8 or p1 == 9 or p1 == 10 then
- -- 0 1 2 3 4 5 6 7 8 9
- sMessage = sMessage..(p1-1)
- end--]]
- end
- if event == "key" and p1 == 28 then
- term.setCursorBlink(false)
- term.setCursorPos(1, screenHeight)
- term.write(string.rep(" ", screenWidth))
- return sMessage
- end-- Enter key; end the loop and let's see the string
- if event == "key" and p1 == 14 then -- Backspace...
- sMessage = string.sub(sMessage, 1, string.len(sMessage)-1)
- -- Set our message to the substring of the first charcter
- -- To the length of the message minus 1 to achieve one less letter.
- term.setCursorPos(originalCursorX, cursorY)
- term.write(sMessage.." ") -- Adding this empty space clears the removed character from the line, but may pose future issues
- end
- if event == "rednet_message" and p1 == nServerID then
- if nConversationY == 10 then
- for i=3, 14 do
- term.setCursorPos(3, i); term.write(string.rep(" ", screenWidth-4))
- end
- term.setCursorPos(3, 2); term.write(sServerName..":")
- term.setCursorPos(5, screenHeight-1)
- nConversationY = 3
- end
- if p1 == nServerID and p2 == "dlskjfiejdlijfklsdj" then bConnected = false; return nil end
- term.setCursorPos(3, nConversationY); term.write(p2)
- nConversationY = nConversationY+1
- term.setCursorPos(string.len(sMessage)+6, screenHeight)
- end
- term.setCursorPos(originalCursorX, cursorY); term.write(string.rep(" ", string.len(sMessage)))
- -- Clear the previous line just in case we get a new line
- -- Now write the message on the new line
- if _ReplaceChar ~= nil then
- term.setCursorPos(originalCursorX, cursorY)
- term.write(string.rep( _ReplaceChar, string.len(sMessage) ))
- else
- term.setCursorPos(originalCursorX, cursorY)
- term.write(sMessage)
- end
- end
- end
- ----------------------
- -- Input related local functions --
- local function getInput()
- cPrint(4, "IRC Version: Beta 1.0")
- cPrint(5, "Server ID: ")
- cPrint(6, " Username: ")
- rPrint(17, "Common channels: 146, 174, 175, 176, 177*")
- term.setCursorPos(screenWidth/2 - string.len("Server ID: ")/2 + string.len("Server ID: "), 5)
- nServerID = tonumber(newRead(5))
- term.setCursorPos(screenWidth/2 - string.len(" Username: ")/2 + string.len(" Username: "), 6)
- sUserName = newRead(14)
- end
- -----------------------------
- -- Networking related local functions --
- local function connectToServer()
- if bConnected == true then return nil end
- if nServerID ~= nil then
- rednet.send(tonumber(nServerID), "dlsk;fje3ijoidsjfl")
- sender, message = rednet.receive(0.2)
- if sender == nServerID and message == "a;sodifu39798d0f3" then
- rednet.send(tonumber(nServerID), tostring(sUserName))
- sender, message = rednet.receive(0.1)
- if sender == nServerID and message == "ifjdslfije" then
- bConnected = true
- sender, message = rednet.receive(0.2)
- if sender == nServerID then sServerName = message end
- end
- end
- else os.shutdown() end
- end
- local function sendMessage( _sMessage )
- rednet.send( tonumber(nServerID), _sMessage )
- end
- ----------------------------------
- printBorder()
- getInput()
- connectToServer()
- clear()
- printBorder()
- term.setCursorPos(3, 2); term.write(sServerName..":")
- term.setCursorPos(3, screenHeight-1); term.write("> ")
- while bConnected do
- if nConversationY == 10 then
- for i=3, 14 do
- term.setCursorPos(3, i); term.write(string.rep(" ", screenWidth-4))
- end
- term.setCursorPos(3, 2); term.write(sServerName..":")
- term.setCursorPos(5, screenHeight-1)
- nConversationY = 3
- end
- sText = newReadIRC(screenWidth-7) -- This will be our disconnection message: dslifj
- if sText == "!exit" then clear(); sMenuState = "main"; break end
- if sText == nil then term.setCursorBlink(false); sMenuState = "main"; break end
- if sText ~= sUserName then sendMessage(sText)
- else nConversationY = nConversationY-1 end
- sText = ""
- term.setCursorPos(3, screenHeight-1); term.write(string.rep(" ", screenWidth-4))
- term.setCursorPos(3, screenHeight-1); term.write("> ")
- term.setCursorPos(2, screenHeight); term.write(string.rep("*", screenWidth-2))
- term.setCursorPos(5, screenHeight-1)
- end
- clear()
- sMenuState = "main"
- end
- ---------------------
- -- Account --
- function editAccount()
- sMenuState = "account"
- local nSelect = 1
- clearCenter()
- local function printInfoContainer()
- term.setCursorPos(4, 5); term.write(string.rep("*", screenWidth-6))
- local y = 6
- for i=1, screenHeight - 13 do
- term.setCursorPos(4, y); term.write("*"..string.rep(" ", screenWidth-8).."*")
- y = y+1
- end
- term.setCursorPos(4, 11); term.write(string.rep("*", screenWidth-6))
- end
- printInfoContainer()
- while true do
- if nSelect == 3 then sMenuState = "main"; break end
- term.setCursorPos(5, 7); term.write("Username: "..sUserName)
- term.setCursorPos(5, 8); term.write("Password: "..string.rep("*", string.len(sPassword)))
- if nSelect == 1 then term.setCursorPos((screenWidth-6)-(string.len("[ Change ]*")-4), 7); term.write("[ Change ]*")
- else term.setCursorPos((screenWidth-6)-(string.len("[ Change ]*")-4), 7); term.write(" Change *") end
- if nSelect == 2 then term.setCursorPos((screenWidth-6)-(string.len("[ Change ]*")-4), 8); term.write("[ Change ]*")
- else term.setCursorPos((screenWidth-6)-(string.len("[ Change ]*")-4), 8); term.write(" Change *") end
- local event, key = os.pullEvent("key")
- if key == 208 and nSelect == 1 then nSelect = nSelect+1
- elseif key == 200 and nSelect == 2 then nSelect = nSelect-1
- elseif key == 28 and nSelect == 1 then
- term.setCursorPos(5, 7); term.write(string.rep(" ", screenWidth-8))
- term.setCursorPos(5, 7); term.write("New Username: ")
- sUserName = newRead(14)
- term.setCursorPos(5, 7); term.write(string.rep(" ", screenWidth-8))
- local file = fs.open("User/"..os.getComputerID().."/.info", "w")
- file.write(sUserName.."n"..sPassword)
- file.close()
- elseif key == 28 and nSelect == 2 then
- term.setCursorPos(5, 8); term.write(string.rep(" ", screenWidth-8))
- term.setCursorPos(5, 8); term.write("Old Password: ")
- local sCheckPassword = newRead(14, "*")
- if sCheckPassword == sPassword then
- term.setCursorPos(5, 8); term.write(string.rep(" ", screenWidth-8))
- term.setCursorPos(5, 8); term.write("New Password: ")
- sPassword = newRead(14, "*")
- local file = fs.open("User/"..os.getComputerID().."/.info", "w")
- file.write(sUserName.."n"..sPassword)
- file.close()
- end
- term.setCursorPos(5, 8); term.write(string.rep(" ", screenWidth-8))
- elseif key == 14 then nSelect = 3
- end
- end
- end
- -------------
- function printError()
- sMenuState = "perms"; clearCenter()
- cPrint(6, "*********************")
- cPrint(7, "* Restricted Access *")
- cPrint(8, "*********************")
- sleep(2)
- sMenuState = "main"
- end
- clear()
- getKey() -- b8v2a6b8i1e2j8g91
- clear()
- printInstallation()
- clear()
- checkUserInformation()
- getUserInformation()
- handleLogin()
- if bLogin then
- if checkVersion() then
- sMenuState = "updateScreen"
- clear()
- printBorder()
- rPrint(17, "Cannon OS Version: "..VERSION.."*")
- cPrint(6, "********************")
- cPrint(7, "* Update Available *")
- cPrint(8, "********************")
- local select = 1
- while true do
- if select == 1 then cPrint(9, "* [ Yes ] No *")
- else cPrint(9, "* Yes [ No ] *")
- end
- cPrint(10, "********************")
- local event, key = os.pullEvent("key")
- if key == 205 and select == 1 then select = 2
- elseif key == 203 and select == 2 then select = 1
- elseif key == 28 and select == 1 then clear(); printBorder(); rPrint(17, "Cannon OS Version: "..VERSION.."*"); fs.delete("SYSTEM"); fs.delete("User"); term.setCursorPos(screenWidth/2-string.len("Updating...")/2, 9); textutils.slowPrint("Updating..."); updateSelf(); shell.run("startup")
- elseif key == 28 and select == 2 then sMenuState = "main"; clearCenter(); break
- end
- end
- end
- end
- -- Main OS Loop --
- while true do
- clear()
- nMailCount = #(fs.list("Mail"))-1 -- -1 To eliminate the 'Contacts' directory from the list
- printMainMenu()
- event, key, p2 = os.pullEvent() -- Key will be p1, laziness has struck again
- if event == "key" and key == 205 and selection < 6 and selection ~= 3 then selection = selection+1
- elseif event == "key" and key == 203 and selection > 1 and selection ~= 4 then selection = selection-1
- elseif event == "key" and key == 208 and selection < 6 and selection+3 <= 6 then selection = selection+3
- elseif event == "key" and key == 200 and selection > 1 and selection-3 >= 1 then selection = selection-3
- elseif event == "key" and key == 28 and selection == 6 then
- clear(); printBorder(); rPrint(17, "Cannon OS Version: "..VERSION.."*"); term.setCursorPos(screenWidth/2-string.len("Updating...")/2, 9); textutils.slowPrint("Updating...")
- if not updateSelf() then cPrint(9, "Update Failed"); sleep(1.3); shell.run("startup")
- else fs.delete("SYSTEM"); fs.delete("User"); cPrint(9, "Update Successfull"); sleep(1.3); shell.run("startup")
- end
- elseif event == "key" and key == 28 and selection == 2 and bAdmin then clear(); shell.run("shell")-- If exit to Craft OS
- elseif event == "key" and key == 28 and selection == 2 and not bAdmin then printError()
- elseif event == "key" and key == 28 and selection == 4 and bAdmin then mailMenu()
- elseif event == "key" and key == 28 and selection == 4 and not bAdmin then printError()
- elseif event == "key" and key == 28 and selection == 1 and bAdmin then fileBrowser()
- elseif event == "key" and key == 28 and selection == 1 and not bAdmin then printError()
- elseif event == "key" and key == 28 and selection == 3 then clear(); IRC_Client()
- elseif event == "key" and key == 28 and selection == 5 and bAdmin then editAccount()
- elseif event == "key" and key == 28 and selection == 5 and not bAdmin then printError()
- elseif event == "rednet_message" then
- if string.find( p2, ";alkdjien") then
- p2 = string.sub( p2, string.len(";alkdjien"), string.len( p2 ))
- p2 = string.sub( p2, 3, string.len( p2 )) -- 3 to remove the n from the message
- local file = fs.open("Mail/message"..#(fs.list("Mail"))+1, "w")
- file.writeLine(key)
- file.writeLine(p2)
- file.close()
- nMailCount = nMailCount+1
- newMessage(key, p2) -- Key being the senderID and p2 being the message received
- end
- elseif event == "reboot" then selection = 1; sMenuState = "logout"; printLogout()
- end
- end
- ------------------
- os.pullEvent = oldpullEvent
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement