Files
shexy.src
// command: shexy (shellexec) v0.4.0
- // command: shexy (shellexec) v0.4.1
- // Changelog
// * Added Help Text
// * Added build - compiles source just in place
// * Preparation for make function
// * Preparation for watch function
- // * Minorfixes
- DebugOn = 0
- BinaryOn = 0
- filepath = ""
- 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") )
- end if
- 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"))
- helptext.push(sl.join(char(9)))
- sl = []
- sl.push(convert("Debug:"+char(9)*2).tocolor("#5E6EBBFF"))
- sl.push(convert(launch_path.split("/")[-1]).tocolor("#6FAD69FF"))
- sl.push(convert("-d [ source [args] | build | line ]").tocolor("#B1B629FF"))
- helptext.push(sl.join(char(9)))
-
- for line in helptext
- print(line)
- end for
- 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)
-
- clear_screen
- print(convert("~ Shexy - Command Line ~").tocolor("#5E6EBBFF"))
- print(convert("(Here you can run GreyHackCode instantly.)").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"))
- 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.")
- end function
- 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()
- 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)
- continue
- else if Type == "file" and Type != "null" then
- debug(NewPath+" is "+Type)
- 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"+"/"+"shex"
- cache_path = home_dir+"/"+"Cache"+"/"+"shexy"
- 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].")
- exit
- end if
- if filepath.indexOf(".src") 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","shex")
- get_shell.host_computer.create_folder(home_dir+"/"+"Cache","shexy")
- end if
-
- 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
- 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
- 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)
- if BinPath != null then
- get_shell.host_computer.File(cache_path+"/"+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)
- RunTime = time
- RunTime = round(RunTime - BuildTime,2)
- debug("Run Time => "+str(RunTime)+" sec")
- exit
end if
- end if
- end if