Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- Author: NDFJay
- Title: CCatch
- Type: API
- Version: 1.0
- Created: 15/02/2013
- Last Update: 15/02/2013
- API inspired by "TheOriginalBIT" through his crash handling tutorial as shown below.
- http://www.computercraft.info/forums2/index.php?/topic/10450-handling-errors-creating-controlled-errors-creating-a-blue-screen-of-death-bsod/
- License:
- COPYRIGHT NOTICE
- Copyright © 2013 JayJay Swarts known online as NDFJay
- NDFJay, herein refered to as "The author" allows you to copy,
- distribute and adapt the work under the following conditions:
- Attribution — This license MUST be present at the top of the file.
- You must attribute the work in the manner specified by the author
- (but not in any way that suggests that they endorse you or your use of the work).
- If using parts of this code you must attribute the author above code snippet
- Creative Commons — You may use this work for commercial and non-commercial purposes alike.
- Share Alike — If you alter, transform, or build upon this work, you may distribute the resulting work
- only under the same or similar license to this one.
- Any of the above conditions can be waived if you get permission from the copyright holder.
- This software is provided by the author "AS IS". As such the author does not take any responsibility for
- any damage caused to your systems, physical or virtual, especially from misuse or modification of code.
- ]]--
- function cwrite(path, text)
- local file = assert(io.open(path, "w"))
- file:write(text)
- file:close()
- end
- function cgetText(path)
- if fs.exists(path) then
- local file = assert(io.open(path, "r"))
- return file:read("*a")
- end
- return ""
- end
- function append(path, text)
- local _text = cgetText(path)
- cwrite(path, text.."\n".._text)
- end
- A_crash = function(func,align,bcol,tcol)
- local w,h = term.getSize()
- local ok, err = pcall(func)
- term.setBackgroundColor(bcol)
- term.setTextColor(tcol)
- term.clear()
- local tmpErr = {
- "Oh No! We've Crashed!";
- " ";
- "Error Code:";
- err;
- " ";
- " ";
- "Please report this code to the dev if this is";
- "no fault of your own";
- " ";
- " ";
- "Please do refrain from modifying the base code!"
- }
- if not ok then
- if align == "left" then
- for i,v in pairs(tmpErr) do
- term.setCursorPos(1,i+1)
- print(v)
- end
- elseif align == "center" then
- for i,v in pairs(tmpErr) do
- term.setCursorPos(math.floor(w-string.len(v))/2, i+1)
- print(v)
- end
- term.setBackgroundColor(colors.black)
- term.setCursorPos(1,math.floor(h))
- term.clearLine()
- end
- term.setBackgroundColor(colors.black)
- term.setCursorPos(1,math.floor(h))
- term.clearLine()
- end
- end
- A_custCrash = function(func,align,bcol,tcol,t)
- local w,h = term.getSize()
- local ok, err = pcall(func)
- term.setBackgroundColor(bcol)
- term.setTextColor(tcol)
- term.clear()
- if not ok then
- if align == "left" then
- for i,v in pairs(t) do
- term.setCursorPos(1,i+1)
- print(v)
- if string.find(t[i],":error:") then
- term.setCursorPos(1, i+1)
- print(v)
- term.setCursorPos(string.find(t[i],":error:")-1, i+1)
- write(err)
- end
- end
- write(err)
- elseif align == "center" then
- for i,v in pairs(t) do
- term.setCursorPos(math.floor(w-#v)/2, i+1)
- print(v)
- if string.find(t[i],":error:") then
- term.setCursorPos(math.floor(w-string.find(t[i],":error:")-#err+1)/2, i+1)
- print(v)
- term.setCursorPos(math.floor(w+string.find(t[i],":error:")-#err-2)/2, i+1)
- write(err)
- end
- end
- end
- end
- term.setBackgroundColor(colors.black)
- term.setCursorPos(1,math.floor(h))
- term.clearLine()
- end
- A_resolveCrash = function(func,resolvefunc)
- local ok, err = pcall(func)
- if not ok then
- resolvefunc()
- end
- end
- A_saveCrash = function(func,align,bcol,tcol,t,x,y,sDir,sPath)
- local w,h = term.getSize()
- local drop = 1
- local ok, err = pcall(func)
- local success = {
- 'Error Log Saved to (/'..sDir.."/"..sPath..')';
- "Please show the log to the Dev"
- }
- term.setBackgroundColor(bcol)
- term.setTextColor(tcol)
- term.clear()
- if not ok then
- if align == "left" then
- for i,v in pairs(t) do
- term.setCursorPos(1,i+drop)
- print(v)
- if string.find(t[i],":error:") then
- term.setCursorPos(1, i+1)
- print(v)
- term.setCursorPos(string.find(t[i],":error:")-1, i+1)
- write(err)
- end
- end
- elseif align == "center" then
- for i,v in pairs(t) do
- term.setCursorPos(math.floor(w-#v)/2, i+drop)
- print(v)
- if string.find(t[i],":error:") then
- term.setCursorPos(math.floor(w-string.find(t[i],":error:")-#err+1)/2, i+1)
- print(v)
- term.setCursorPos(math.floor(w+string.find(t[i],":error:")-#err-2)/2, i+1)
- write(err)
- end
- end
- end
- if not fs.exists(sDir) then
- fs.makeDir(sDir)
- end
- if not fs.exists(sDir.."/"..sPath) then
- fwrite(sDir.."/"..sPath," ")
- end
- append(sDir.."/"..sPath, string.rep("=",40))
- append(sDir.."/"..sPath, " ")
- append(sDir.."/"..sPath, tostring(err))
- append(sDir.."/"..sPath, " ")
- append(sDir.."/"..sPath, string.rep("=",40))
- if align == "left" then
- term.setCursorPos(x,y)
- print(success[1])
- term.setCursorPos(x,y+2)
- print(success[2])
- elseif align == "center" then
- term.setCursorPos(math.floor(w-#success[1])/2,y)
- print(success[1])
- term.setCursorPos(math.floor(w-#success[2])/2,y+2)
- print(success[2])
- end
- term.setBackgroundColour(colors.black)
- term.setTextColor(1)
- term.setCursorPos(1,math.floor(h))
- term.clearLine()
- return true
- end
- end
- A_c_Crash = function(func,argc,argv,align,bcol,tcol,t)
- local ok, err = pcall(func, argc, argv)
- local w,h = term.getSize()
- term.setBackgroundColor(bcol)
- term.setTextColor(tcol)
- term.clear()
- if not ok then
- if align == "left" then
- for i,v in pairs(t) do
- term.setCursorPos(1,i+1)
- print(v)
- if string.find(t[i],":error:") then
- term.setCursorPos(1, i+1)
- print(v)
- term.setCursorPos(string.find(t[i],":error:")-1, i+1)
- write(err)
- end
- end
- write(err)
- elseif align == "center" then
- for i,v in pairs(t) do
- term.setCursorPos(math.floor(w-#v)/2, i+1)
- print(v)
- if string.find(t[i],":error:") then
- term.setCursorPos(math.floor(w-string.find(t[i],":error:")-#err+1)/2, i+1)
- print(v)
- term.setCursorPos(math.floor(w+string.find(t[i],":error:")-#err-2)/2, i+1)
- write(err)
- end
- end
- end
- end
- term.setBackgroundColor(colors.black)
- term.setCursorPos(1,math.floor(h))
- term.clearLine()
- end
- A_save_c_Crash = function(func,align,bcol,tcol,t,x,y,sDir,sPath,argc,argv)
- local w,h = term.getSize()
- local drop = 1
- local ok, err = pcall(func, argc, argv)
- local success = {
- 'Error Log Saved to (/'..sDir.."/"..sPath..')';
- "Please show the log to the Dev"
- }
- term.setBackgroundColor(bcol)
- term.setTextColor(tcol)
- term.clear()
- if not ok then
- if align == "left" then
- for i,v in pairs(t) do
- term.setCursorPos(1,i+drop)
- print(v)
- if string.find(t[i],":error:") then
- term.setCursorPos(1, i+1)
- print(v)
- term.setCursorPos(string.find(t[i],":error:")-1, i+1)
- write(err)
- end
- end
- elseif align == "center" then
- for i,v in pairs(t) do
- term.setCursorPos(math.floor(w-#v)/2, i+drop)
- print(v)
- if string.find(t[i],":error:") then
- term.setCursorPos(math.floor(w-string.find(t[i],":error:")-#err+1)/2, i+1)
- print(v)
- term.setCursorPos(math.floor(w+string.find(t[i],":error:")-#err-2)/2, i+1)
- write(err)
- end
- end
- end
- if not fs.exists(sDir) then
- fs.makeDir(sDir)
- end
- if not fs.exists(sDir.."/"..sPath) then
- fwrite(sDir.."/"..sPath," ")
- end
- append(sDir.."/"..sPath, string.rep("=",40))
- append(sDir.."/"..sPath, " ")
- append(sDir.."/"..sPath, tostring(err))
- append(sDir.."/"..sPath, " ")
- append(sDir.."/"..sPath, string.rep("=",40))
- if align == "left" then
- term.setCursorPos(x,y)
- print(success[1])
- term.setCursorPos(x,y+2)
- print(success[2])
- elseif align == "center" then
- term.setCursorPos(math.floor(w-#success[1])/2,y)
- print(success[1])
- term.setCursorPos(math.floor(w-#success[2])/2,y+2)
- print(success[2])
- end
- term.setBackgroundColour(colors.black)
- term.setTextColor(1)
- term.setCursorPos(1,math.floor(h))
- term.clearLine()
- return true
- end
- end
- B_crash = function(func,align)
- local w,h = term.getSize()
- local ok, err = pcall(func)
- term.clear()
- local tmpErr = {
- "Oh No! We've Crashed!";
- " ";
- "Error Code:";
- err;
- " ";
- " ";
- "Please report this code to the dev if this is";
- "no fault of your own";
- " ";
- " ";
- "Please do refrain from modifying the base code!"
- }
- if not ok then
- if align == "left" then
- for i,v in pairs(tmpErr) do
- term.setCursorPos(1,i+1)
- print(v)
- end
- elseif align == "center" then
- for i,v in pairs(tmpErr) do
- term.setCursorPos(math.floor(w-string.len(v))/2, i+1)
- print(v)
- end
- term.setCursorPos(1,math.floor(h))
- term.clearLine()
- end
- term.setCursorPos(1,math.floor(h))
- term.clearLine()
- end
- end
- B_custCrash = function(func,align,t)
- local w,h = term.getSize()
- local ok, err = pcall(func)
- term.clear()
- if not ok then
- if align == "left" then
- for i,v in pairs(t) do
- term.setCursorPos(1,i+1)
- print(v)
- if string.find(t[i],":error:") then
- term.setCursorPos(1, i+1)
- print(v)
- term.setCursorPos(string.find(t[i],":error:")-1, i+1)
- write(err)
- end
- end
- write(err)
- elseif align == "center" then
- for i,v in pairs(t) do
- term.setCursorPos(math.floor(w-#v)/2, i+1)
- print(v)
- if string.find(t[i],":error:") then
- term.setCursorPos(math.floor(w-string.find(t[i],":error:")-#err+1)/2, i+1)
- print(v)
- term.setCursorPos(math.floor(w+string.find(t[i],":error:")-#err-2)/2, i+1)
- write(err)
- end
- end
- end
- end
- term.setCursorPos(1,math.floor(h))
- term.clearLine()
- end
- B_resolveCrash = function(func,resolvefunc)
- local ok, err = pcall(func)
- if not ok then
- resolvefunc()
- end
- end
- B_saveCrash = function(func,align,t,x,y,sDir,sPath)
- local w,h = term.getSize()
- local drop = 1
- local ok, err = pcall(func)
- local success = {
- 'Error Log Saved to (/'..sDir.."/"..sPath..')';
- "Please show the log to the Dev"
- }
- term.clear()
- if not ok then
- if align == "left" then
- for i,v in pairs(t) do
- term.setCursorPos(1,i+drop)
- print(v)
- if string.find(t[i],":error:") then
- term.setCursorPos(1, i+1)
- print(v)
- term.setCursorPos(string.find(t[i],":error:")-1, i+1)
- write(err)
- end
- end
- elseif align == "center" then
- for i,v in pairs(t) do
- term.setCursorPos(math.floor(w-#v)/2, i+drop)
- print(v)
- if string.find(t[i],":error:") then
- term.setCursorPos(math.floor(w-string.find(t[i],":error:")-#err+1)/2, i+1)
- print(v)
- term.setCursorPos(math.floor(w+string.find(t[i],":error:")-#err-2)/2, i+1)
- write(err)
- end
- end
- end
- if not fs.exists(sDir) then
- fs.makeDir(sDir)
- end
- if not fs.exists(sDir.."/"..sPath) then
- fwrite(sDir.."/"..sPath," ")
- end
- append(sDir.."/"..sPath, string.rep("=",40))
- append(sDir.."/"..sPath, " ")
- append(sDir.."/"..sPath, tostring(err))
- append(sDir.."/"..sPath, " ")
- append(sDir.."/"..sPath, string.rep("=",40))
- if align == "left" then
- term.setCursorPos(x,y)
- print(success[1])
- term.setCursorPos(x,y+2)
- print(success[2])
- elseif align == "center" then
- term.setCursorPos(math.floor(w-#success[1])/2,y)
- print(success[1])
- term.setCursorPos(math.floor(w-#success[2])/2,y+2)
- print(success[2])
- end
- term.setCursorPos(1,math.floor(h))
- term.clearLine()
- return true
- end
- end
- B_c_Crash = function(func,argc,argv,align,t)
- local ok, err = pcall(func, argc, argv)
- local w,h = term.getSize()
- term.setBackgroundColor(bcol)
- term.setTextColor(tcol)
- term.clear()
- if not ok then
- if align == "left" then
- for i,v in pairs(t) do
- term.setCursorPos(1,i+1)
- print(v)
- if string.find(t[i],":error:") then
- term.setCursorPos(1, i+1)
- print(v)
- term.setCursorPos(string.find(t[i],":error:")-1, i+1)
- write(err)
- end
- end
- write(err)
- elseif align == "center" then
- for i,v in pairs(t) do
- term.setCursorPos(math.floor(w-#v)/2, i+1)
- print(v)
- if string.find(t[i],":error:") then
- term.setCursorPos(math.floor(w-string.find(t[i],":error:")-#err+1)/2, i+1)
- print(v)
- term.setCursorPos(math.floor(w+string.find(t[i],":error:")-#err-2)/2, i+1)
- write(err)
- end
- end
- end
- end
- term.setBackgroundColor(colors.black)
- term.setCursorPos(1,math.floor(h))
- term.clearLine()
- end
- B_save_c_Crash = function(func,align,t,x,y,sDir,sPath,argc,argv)
- local w,h = term.getSize()
- local drop = 1
- local ok, err = pcall(func, argc, argv)
- local success = {
- 'Error Log Saved to (/'..sDir.."/"..sPath..')';
- "Please show the log to the Dev"
- }
- term.clear()
- if not ok then
- if align == "left" then
- for i,v in pairs(t) do
- term.setCursorPos(1,i+drop)
- print(v)
- if string.find(t[i],":error:") then
- term.setCursorPos(1, i+1)
- print(v)
- term.setCursorPos(string.find(t[i],":error:")-1, i+1)
- write(err)
- end
- end
- elseif align == "center" then
- for i,v in pairs(t) do
- term.setCursorPos(math.floor(w-#v)/2, i+drop)
- print(v)
- if string.find(t[i],":error:") then
- term.setCursorPos(math.floor(w-string.find(t[i],":error:")-#err+1)/2, i+1)
- print(v)
- term.setCursorPos(math.floor(w+string.find(t[i],":error:")-#err-2)/2, i+1)
- write(err)
- end
- end
- end
- if not fs.exists(sDir) then
- fs.makeDir(sDir)
- end
- if not fs.exists(sDir.."/"..sPath) then
- fwrite(sDir.."/"..sPath," ")
- end
- append(sDir.."/"..sPath, string.rep("=",40))
- append(sDir.."/"..sPath, " ")
- append(sDir.."/"..sPath, tostring(err))
- append(sDir.."/"..sPath, " ")
- append(sDir.."/"..sPath, string.rep("=",40))
- if align == "left" then
- term.setCursorPos(x,y)
- print(success[1])
- term.setCursorPos(x,y+2)
- print(success[2])
- elseif align == "center" then
- term.setCursorPos(math.floor(w-#success[1])/2,y)
- print(success[1])
- term.setCursorPos(math.floor(w-#success[2])/2,y+2)
- print(success[2])
- end
- term.setCursorPos(1,math.floor(h))
- term.clearLine()
- return true
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement