Files
shexy.src
// command: shexy (shellexec) v0.4.1
- // command: shexy (shellexec) v0.4.2
- // Changelog
// * Minorfixes
- // * Minor changes
- // * Concentrate on commandline, build and instant exec of src
- // * Added more DEBUG msg
- // * Introduced error msg
- // * Added clean function for cache
DebugOn = 0
BinaryOn = 0
- DebugOn = false
- BinaryOn = true
- filepath = ""
- allowimport = true
- cachepath = home_dir+"/"+"Cache"+"/"+"shexy"
- tocolor = function(color)
- return "<color="+color+">"+self.str+"</color>"
- end function
- convert = function(text)
- obj = {}
- obj.str = str(text)
- obj.tocolor = @tocolor
- return obj
- end function
- debug = function(msg)
if DebugOn == 1 then
print( convert("[DEBUG] "+msg).tocolor("purple") )
- if DebugOn then
- current = current_date
- date = current.split(" - ")[0].split("/")
- time = current.split(" - ")[1].split(":")
- stamp = "("+date[1]+" "+date[0]+" "+time[0]+":"+time[1]+")"
- print( convert(stamp+" [DEBUG] "+msg).tocolor("purple") )
- end if
- end function
- error = function(msg)
- current = current_date
- date = current.split(" - ")[0].split("/")
- time = current.split(" - ")[1].split(":")
- stamp = "("+date[1]+" "+date[0]+" "+time[0]+":"+time[1]+")"
- exit( convert(stamp+" [ERROR] "+msg).tocolor("red") )
- end function
- help = function()
-
- helptext = []
-
- sl = []
- sl.push(convert("Help Text:"+char(9)).tocolor("#5E6EBBFF"))
- sl.push(convert(launch_path.split("/")[-1]).tocolor("#6FAD69FF"))
- sl.push(convert("help").tocolor("#B1B629FF"))
- helptext.push(sl.join(char(9)))
-
- sl = []
- sl.push(convert("Run Source:"+char(9)).tocolor("#5E6EBBFF"))
- sl.push(convert(launch_path.split("/")[-1]).tocolor("#6FAD69FF"))
- sl.push(convert("[source] [args]").tocolor("#B1B629FF"))
- helptext.push(sl.join(char(9)))
- sl = []
- sl.push(convert("Build Source:").tocolor("#5E6EBBFF"))
- sl.push(convert(launch_path.split("/")[-1]).tocolor("#6FAD69FF"))
sl.push(convert("build [source] [|allowimport]").tocolor("#B1B629FF"))
sl.push(convert("(only pwd)").tocolor("#96528CFF"))
helptext.push(sl.join(char(9)))
sl = []
sl.push(convert("Command Line:").tocolor("#5E6EBBFF"))
sl.push(convert(launch_path.split("/")[-1]).tocolor("#6FAD69FF"))
sl.push(convert("line").tocolor("#B1B629FF"))
helptext.push(sl.join(char(9)))
sl = []
sl.push(convert("Make Binary:").tocolor("#5E6EBBFF"))
sl.push(convert(launch_path.split("/")[-1]).tocolor("#6FAD69FF"))
sl.push(convert("make").tocolor("#B1B629FF"))
helptext.push(sl.join(char(9)))
sl = []
sl.push(convert("Run on change:").tocolor("#5E6EBBFF"))
sl.push(convert(launch_path.split("/")[-1]).tocolor("#6FAD69FF"))
sl.push(convert("watch").tocolor("#B1B629FF"))
- sl.push(convert("build [source]").tocolor("#B1B629FF"))
- helptext.push(sl.join(char(9)))
- sl = []
sl.push(convert("Debug:"+char(9)*2).tocolor("#5E6EBBFF"))
- sl.push(convert("Clean Cache:").tocolor("#5E6EBBFF"))
- sl.push(convert(launch_path.split("/")[-1]).tocolor("#6FAD69FF"))
sl.push(convert("-d [ source [args] | build | line ]").tocolor("#B1B629FF"))
- sl.push(convert("clean").tocolor("#B1B629FF"))
- helptext.push(sl.join(char(9)))
-
- for line in helptext
- print(line)
- end for
- end function
- mkdirparent = function(dirpath)
- if typeof(get_shell.host_computer.File(dirpath)) != "file" then
- debug(dirpath+" doesn't exist. Creating.")
- pth = []
- for index in dirpath.split("/")
- if index == "" then continue
- pth.push(index)
- debug("Check: "+"/"+pth.join("/"))
- if typeof(get_shell.host_computer.File("/"+pth.join("/"))) != "file" then
- debug("/"+pth.join("/")+" doesn't exist.")
- if get_shell.host_computer.File(parent_path("/"+pth.join("/"))).has_permission("w") then
- debug("Create folder: "+"/"+pth.join("/"))
- get_shell.host_computer.create_folder(parent_path("/"+pth.join("/")),pth[-1])
- else if not get_shell.host_computer.File(parent_path("/"+pth.join("/"))).has_permission("w") then
- error("Cannot create folder "+"/"+pth.join("/"))
- end if
- else if typeof(get_shell.host_computer.File("/"+pth.join("/"))) == "file" then
- debug("/"+pth.join("/")+" exists.")
- end if
- end for
- end if
- end function
- commandline = function()
- filename = "tmp.src"
tmp_path = home_dir+"/"+"Cache"
ful_path = tmp_path+"/"+filename
if typeof(get_shell.host_computer.File(ful_path)) != "file" then
get_shell.host_computer.create_folder(home_dir,"Cache")
end if
get_shell.host_computer.touch(tmp_path,filename)
- fullpath = cachepath+"/"+filename
-
- mkdirparent(cachepath)
- get_shell.host_computer.touch(cachepath,filename)
- clear_screen
- print(convert("~ Shexy - Command Line ~").tocolor("#5E6EBBFF"))
print(convert("(Here you can run GreyHackCode instantly.)").tocolor("#96528CFF"))
- print(convert("Here you can run GreyHackCode instantly. Exit with [q|quit].").tocolor("#96528CFF"))
- while true
- input = user_input("> ",false,false)
get_shell.host_computer.File(ful_path).set_content(input)
get_shell.build(ful_path,tmp_path,false)
get_shell.launch(tmp_path+"/"+filename.remove(".src"))
- if input == "quit" or "q" then exit
- get_shell.host_computer.File(fullpath).set_content(input)
- get_shell.build(fullpath,cachepath,false)
- get_shell.launch(cachepath+"/"+filename.remove(".src"))
- end while
- end function
- compile = function()
-
allowimport = false
if params[1] == "allowimport" then allowimport = true
- Path = current_path
- Filename = params[1]
- Source = Path+"/"+Filename
- Target = Path
- get_shell.build(Source,Target,allowimport)
- end function
make = function()
print(" ")
print("This will be a function, that will read a MakeFile.")
print(" ")
print("Possible Features:")
print("* Create a Template of a MakeFile.")
print("* Build binaries by reading rules of a MakeFile")
print("* Include dependencies automatically/dynamically and don't mess with import_code alone.")
print("* Install and Uninstall binaries and purge remaining data.")
print("* Include Patches.")
print("That are just ideas. I will see if it possible.")
end function
watch = function()
print(" ")
print("This function will watch a source file.")
print("* It will read the file and generate a md5sum.")
print("* If the md5sum has been changed (so you saved the source), it will build and run it automatically.")
print("* After running it will wait again.")
- cleanup = function()
- for file in get_shell.host_computer.File(cachepath).get_files
- if file.has_permission("w") then
- file.delete
- end if
- end for
- end function
- if params.len == 0 then commandline
- for parm in params
- if parm == "help" then
- help()
- exit
- end if
if parm == "-d" then
DebugOn = 1
continue
end if
if parm == "line" then
commandline()
exit
end if
- if parm == "build" then
- compile()
- exit
- end if
if parm == "make" then
make()
exit
end if
if parm == "watch" then
watch()
-
- if parm == "clean" then
- cleanup()
- exit
- end if
- check_path = function(input)
-
- for x in input
- NewPath = x
- Object = get_shell.host_computer.File(NewPath)
- Type = typeof(Object)
- if Type != "file" and Type == "null" then
debug(NewPath+" is "+Type)
- debug(NewPath+" is a "+Type+" object")
- continue
- else if Type == "file" and Type != "null" then
debug(NewPath+" is "+Type)
- debug(NewPath+" is a "+Type+" object")
- output = NewPath
- return output
- break
- end if
- end for
-
- end function
-
- Paths = []
- Paths.push(parent_path(launch_path)+"/"+parm)
- Paths.push(parent_path(program_path)+"/"+parm)
- Paths.push(current_path+"/"+parm)
- Paths.push(parm)
-
- filepath = check_path(Paths)
- args = params[1:].join(" ")
- debug("Arguments: "+args)
- end for
- debug("Path: "+filepath)
if filepath == "" then
debug("No valid path")
exit()
end if
cache_path = home_dir+"/"+"Cache"+"/"+"shexy"
- if filepath == "" then error("No valid path")
- source = get_shell.host_computer.File(filepath)
if source.is_binary then
debug("Target is not a Source File.")
exit
else if not source.has_permission("r") then
debug("Target has no read permissions.")
exit
else if not filepath.indexOf(".src") then
debug("Target must have the suffix [*.src].")
- if not source.has_permission("r") then
- debug(source.path+" has no read permissions.")
- exit
- end if
if filepath.indexOf(".src") then
- if filepath.indexOf(".src") and not get_shell.host_computer.File(filepath).is_binary then
-
- if source != null then
-
if typeof(get_shell.host_computer.File(cache_path)) != "file" then
get_shell.host_computer.create_folder(home_dir,"Cache")
get_shell.host_computer.create_folder(home_dir+"/"+"Cache","shexy")
end if
- mkdirparent(cachepath)
-
- src = get_shell.host_computer.File(current_path+"/"+params[0])
- md5sum = md5(get_shell.host_computer.File(filepath).get_content)
- BinName = filepath.split("/")[-1].remove(".src")
program = cache_path+"/"+BinName+"-"+md5sum
for file in get_shell.host_computer.File(cache_path).get_files
- program = cachepath+"/"+BinName+"-"+md5sum
- for file in get_shell.host_computer.File(cachepath).get_files
- if file.name == "tmp" or "tmp.src" then continue
- FileName = file.name.split("-")[0]
- FileSum = file.name.split("-")[1]
- debug(FileName+"-"+FileSum)
- if FileSum != md5sum and FileName == BinName then
- file.delete
- continue
- end if
- if FileSum == md5sum and FileName == BinName then
- debug("Run: "+cachepath+"/"+FileName+"-"+FileSum)
- get_shell.launch(file.path, args)
- OnlyRuntime = round(time,2)
- debug("Run Time => "+str(OnlyRuntime)+" sec")
- exit
- end if
- end for
-
- debug("Source file: "+filepath)
debug("Target Path: "+cache_path)
print( get_shell.build(filepath,cache_path,false) )
BinPath = get_shell.host_computer.File(cache_path+"/"+BinName)
- debug("Target Path: "+cachepath)
- get_shell.build(filepath,cachepath,false)
- BinPath = get_shell.host_computer.File(cachepath+"/"+BinName)
- if BinPath != null then
get_shell.host_computer.File(cache_path+"/"+BinName).rename(BinName+"-"+md5sum)
- get_shell.host_computer.File(cachepath+"/"+BinName).rename(BinName+"-"+md5sum)
- BuildTime = round(time,2)
- debug("Build Time => "+str(BuildTime)+" sec")
- else
- exit("File not compiled")
- end if
-
get_shell.launch(cache_path+"/"+BinName+"-"+md5sum, args)
- get_shell.launch(cachepath+"/"+BinName+"-"+md5sum, args)
- RunTime = time
- RunTime = round(RunTime - BuildTime,2)
- debug("Run Time => "+str(RunTime)+" sec")
- exit
-
- end if
- else if get_shell.host_computer.File(filepath).is_binary and BinaryOn then
-
- get_shell.launch(filepath)
- end if