Posted 22 November 2013 - 02:55 AM
[indent=1]Today I bring you PassLockBasic, it's a program I had made originally for myself. Then it grew into a full blown project. I made this program at first due to me not being able to find a 'nice simple user friendly locking program'. I had made it so I could lock a door, and my computer with the same program. It is fully configurable, and I've tried to make it as user friendly as possible. I'll have a video showcasing it below, and the code/pastebin link.[/indent]
[indent=1]Install: "pastebin get umqCpkmH install"[/indent]
[indent=1]Install: "pastebin get umqCpkmH install"[/indent]
Video:
[media]http://www.youtube.com/watch?v=qvcCBQY8UGE[/media]
Code:
Spoiler
os.pullEvent = os.pullEventRaw
--[[Variables]]--
local w,h = term.getSize()
local x = 0
local y = 0
local z = 0
local f2 = 0
local f = 0
local g = 0
local pa = 0
--[[Functions]]--
function clear()
term.clear()
end
function write(str,x2,y2)
term.setCursorPos(x2,y2)
term.write(str)
end
function cwrite(str,y2)
term.setCursorPos(w/2 - #str/2,y2)
term.write(str)
end
function title(str)
cwrite(string.rep("-",w),1)
cwrite(str,2)
cwrite(string.rep("-",w),3)
end
function firstBootTitle()
cwrite(string.rep("-",w),1)
cwrite("<Installer Setup>",2)
cwrite(string.rep("-",w),3)
end
function optionsTitle()
cwrite(string.rep("-",w),1)
cwrite("<Options>",2)
cwrite(string.rep("-",w),3)
end
function DoTOptions()
cwrite("What will you be locking today?",5)
cwrite("Press 'A' for 'Computer'.",7)
cwrite("Press 'B' for 'Door'.",8)
while x == 0 do
eva,p1a = os.pullEvent("char")
if p1a == "a" then
hel = fs.open("PassLockFiles/DoT","w")
hel.write("term")
hel.close()
x = x + 1
elseif p1a == "b" then
hel = fs.open("PassLockFiles/DoT","w")
hel.write("door")
hel.close()
x = x + 1
end
end
end
function doorSideOption()
cwrite("What side is your door on?",5)
cwrite("Press 'A' for 'Left'.",7)
cwrite("Press 'B' for 'Right'.",8)
cwrite("Press 'C' for 'Top'.",9)
cwrite("Press 'D' for 'Bottom'.",10)
hbl = fs.open("PassLockFiles/doorSide","w")
while y == 0 do
ev,p1 = os.pullEvent("char")
if p1 == "a" then
hbl.write("left")
y = y + 1
elseif p1 == "b" then
hbl.write("right")
y = y + 1
elseif p1 == "c" then
hbl.write("top")
y = y + 1
elseif p1 == "d" then
hbl.write("bottom")
y = y + 1
end
end
hbl.close()
end
function passwordOption()
while z == 0 do
clear()
title("<PASSWORD CENTER>")
term.setCursorPos(3,7)
term.write("NEW PASSWORD: ")
chpass = read("*")
term.setCursorPos(3,9)
term.write("RETYPE PASSWORD: ")
ch2pass = read("*")
if chpass == ch2pass then
clear()
title("<PASSWORD SET!>")
hb = fs.open("PassLockFiles/PWFile","w")
hb.write(ch2pass)
hb.close()
sleep(2)
clear()
z = z + 1
else
clear()
title("<PASSWORDS DON'T MATCH. TRY AGAIN.>")
sleep(2)
clear()
end
end
z = z - 1
end
function optionMenu()
while f2 == 0 do
clear()
title("<OPTIONS>")
cwrite("Press 'A' to change password.",7)
cwrite("Press 'U' to uninstall PassLockBasic.",9)
cwrite("Press 'E' to exit.",11)
ev,p1 = os.pullEvent("char")
if p1 == "a" then
passwordOption()
clear()
elseif p1 == "u" then
clear()
logo(8)
cwrite("Uninstalling...",4)
fs.delete("PassLockFiles")
fs.delete("startup")
if fs.exists("logoff") then
fs.delete("logoff")
end
sleep(2)
clear()
cwrite("Uninstalled.",4)
logo(8)
sleep(1)
cwrite("Rebooting system to finalize uninstall...",4)
logo(8)
sleep(2)
clear()
os.reboot()
elseif p1 == "e" then
f2 = f2 + 1
clear()
end
end
f2 = f2 - 1
end
function openDoor(side)
rs.setOutput(side,true)
sleep(2)
rs.setOutput(side,false)
end
function logo(ht)
write("____________________________________________",4,ht)
write(" ________________________________________ ",4,ht + 1)
write("|| _______ ___ ___ ||",4,ht + 2)
write("|| / o / / / / o \\ ||",4,ht + 3)
write("|| / /---/ / / / __/ ||",4,ht + 4)
write("|| / / / /___ / o \\ ||",4,ht + 5)
write("|| /__/ /______/ /______/ ||",4,ht + 6)
write("||________________________________________||",4,ht + 7)
write("____________________________________________",4,ht + 8)
end
--[[Startup Checks]]--
clear()
logo(5)
sleep(3)
if fs.exists("PassLockFiles") == false then
fs.makeDir("PassLockFiles")
end
if fs.exists("PassLockFiles/PassLockBasic") == false then
fs.copy(shell.getRunningProgram(),"PassLockFiles/PassLockBasic")
su = fs.open("startup","w")
su.write("shell.run(\"PassLockFiles/PassLockBasic\")")
su.close()
end
if fs.exists("PassLockFiles/DoT") == false then
h15 = fs.open("PassLockFiles/DoT","w")
h15.close()
end
if fs.exists("PassLockFiles/firstBoot") == false then
h = fs.open("PassLockFiles/firstBoot","w")
h.write("1")
h.close()
end
if fs.exists("PassLockFiles/doorSide") == false then
h13 = fs.open("PassLockFiles/doorSide","w")
h13.close()
end
if fs.exists("PassLockFiles/PWFile") == false then
h14 = fs.open("PassLockFiles/PWFile","w")
h14.close()
end
ha = fs.open("PassLockFiles/firstBoot","r")
ha32 = ha.readAll()
ha.close()
if ha32 == "1" then
clear()
firstBootTitle()
DoTOptions()
clear()
ha3 = fs.open("PassLockFiles/DoT","r")
ha3a = ha3.readAll()
ha3.close()
if ha3a == "door" then
firstBootTitle()
doorSideOption()
end
passwordOption()
ha2 = fs.open("PassLockFiles/firstBoot","w")
ha2.write("0")
ha2.close()
end
sos = fs.open("PassLockFiles/DoT","r")
sosr = sos.readAll()
sos.close()
if sosr == "term" then
sos3 = fs.open("logoff","w")
sos3.writeLine("shell.run(\"PassLockFiles/PassLockBasic\")")
sos3.close()
end
clear()
term.setCursorPos(1,1)
--[[Locking Code]]--
while f == 0 do
d3 = fs.open("PassLockFiles/DoT","r")
d3a = d3.readAll()
d3.close()
clear()
if d3a == "term" then
title("<LOCKED TERMINAL>")
elseif d3a == "door" then
title("<LOCKED DOOR>")
else
title("<DEBUG MENU>")
end
write(string.rep("-",w),1,7)
logo(9)
term.setCursorPos(3,5)
term.write("PASSWORD: ")
pass = read("*")
h3 = fs.open("PassLockFiles/PWFile","r")
h3a = h3.readAll()
if pass == h3a then
pa = 0
while g == 0 do
clear()
title("<PASS LOCK MENU>")
cwrite("Press 'U' to unlock.",5)
cwrite("Press 'O' to goto options.",6)
cwrite("Press 'E' to exit.",7)
logo(9)
ev,p1 = os.pullEvent("char")
if p1 == "u" then
g = g + 1
k2 = fs.open("PassLockFiles/DoT","r")
k2a = k2.readAll()
k2.close()
ds2 = fs.open("PassLockFiles/doorSide","r")
ds2a = ds2.readAll()
ds2.close()
if k2a == "term" then
f = f + 1
clear()
title("<TERMINAL UNLOCKED>")
cwrite("Type 'logoff' when you are done to",5)
cwrite("lock your computer.",6)
logo(9)
sleep(4)
clear()
term.setCursorPos(1,1)
elseif k2a == "door" then
clear()
title("<DOOR UNLOCKED>")
logo(9)
if ds2a == "left" then
rs.setOutput("left",true)
sleep(2)
rs.setOutput("left",false)
elseif ds2a == "right" then
rs.setOutput("right",true)
sleep(2)
rs.setOutput("right",false)
elseif ds2a == "top" then
rs.setOutput("top",true)
sleep(2)
rs.setOutput("top",false)
elseif ds2a == "bottom" then
rs.setOutput("bottom",true)
sleep(2)
rs.setOutput("bottom",false)
else
cwrite("DOORSIDE ERROR.",7)
end
clear()
end
clear()
elseif p1 == "o" then
optionMenu()
elseif p1 == "e" then
clear()
g = g + 1
end
end
g = 0
else
clear()
pa = pa + 1
if pa > 2 then
title("TOO MANY WRONG ATTEMPTS, SHUTTING DOWN...")
logo(9)
sleep(2)
os.shutdown()
else
title("WRONG PASSWORD. TRY AGAIN.")
logo(9)
sleep(2)
end
end
end
clear()
title("<Booting Up CraftOS...>")
sleep(1.5)
cwrite("Welcome, User!",8)
sleep(1)
clear()
term.setCursorPos(1,1)
Pastebin:
Note: Variables are now localized.
Edited on 21 January 2014 - 10:12 PM