jerimo

Do - V0.2

Mar 10th, 2015
446
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.92 KB | None | 0 0
  1. args = {...}
  2.  
  3. function loadAPIs(APIListToLoad)
  4.     APIList = {
  5.         ["PATH"] = APIListToLoad or "rom/apis/turtle/turtle",
  6.         ["NAME"] =  nil,
  7.         ["API"] = nil
  8.     }
  9.     APIList["NAME"] = fs.getName(APIList["PATH"])
  10.     os.loadAPI(APIList["PATH"])
  11.     APIList["API"] = _G[APIList["NAME"]]
  12. end
  13.  
  14. function runProgram(program, loops)
  15.     if program[1] == "set" then
  16.         table.remove(program, 1)
  17.         program["NAME"] = program[1]
  18.         table.remove(program, 1)
  19.  
  20.     elseif program["NAME"] then
  21.  
  22.     else
  23.         program["NAME"] = "MAIN"
  24.     end
  25.  
  26. print("\nExecuting: ", program["NAME"], " of length ", #program, ", ", loops, " times")
  27.     while loops > 0 do
  28.         loops = loops - 1
  29.  
  30.         program["COUNT"] = 0
  31.         depth = 0
  32.         while program["COUNT"] < #program do
  33.             program["COUNT"] = program["COUNT"] + 1
  34. print(" ", program["NAME"], " >[count] ", program["COUNT"], " ( ", program[program["COUNT"]], " )")
  35.             if type(program[program["COUNT"]]) == "table" then
  36.                 if tonumber(program[program["COUNT"] + 1]) then
  37.                     runProgram(program[program["COUNT"]], tonumber(program[program["COUNT"] + 1]))
  38.                     program["COUNT"] = program["COUNT"] + 1
  39.                 else
  40.                     runProgram(program[program["COUNT"]], 1)
  41.                 end
  42.  
  43.             elseif program[program["COUNT"]] == "(" then
  44.                 depth = depth + 1
  45.                 program[program["COUNT"]] = {}
  46.  
  47.                 if program[program["COUNT"] + 1] == "set" then
  48.                     table.insert(program[program["COUNT"]], table.remove(program, program["COUNT"]+1))
  49.                     program[program["COUNT"]]["NAME"] = program[program["COUNT"] + 1] .. program["NAME"]
  50.                     table.insert(program[program["COUNT"]], table.remove(program, program["COUNT"] + 1))
  51.  
  52.                 else
  53.                     table.insert(program[program["COUNT"]], "set")
  54.                     table.insert(program[program["COUNT"]], program["NAME"] .. " >] " .. tostring(program["COUNT"]))
  55.                 end
  56.  
  57. --print("\nNew SubProgram: ", program[program["COUNT"]]["NAME"])
  58. --print("DEPTH: ", depth)
  59.  
  60.                 while depth ~= 0 and program["COUNT"] < #program do
  61.                     if program[program["COUNT"] + 1] == "(" then
  62.                         depth = depth + 1
  63.                         table.insert(program[program["COUNT"]], table.remove(program, program["COUNT"] + 1))
  64. --print("DEPTH: ", depth)
  65.  
  66.                     elseif program[program["COUNT"] + 1] == ")" then
  67.                         depth = depth - 1
  68. --print("DEPTH: ", depth)
  69.                         if depth == 0 then
  70.                             table.remove(program, program["COUNT"] + 1)
  71.  
  72.                         else
  73.                             table.insert(program[program["COUNT"]], table.remove(program, program["COUNT"] + 1))
  74.                         end
  75.                            
  76.                     else
  77.                         table.insert(program[program["COUNT"]], table.remove(program, program["COUNT"] + 1))
  78.                     end
  79.                 end
  80.  
  81.                 if tonumber(program[program["COUNT"] + 1]) then
  82.                     program[program["COUNT"]] = runProgram(program[program["COUNT"]], tonumber(program[program["COUNT"] + 1]))
  83.                     program["COUNT"] = program["COUNT"] + 1
  84.                 else
  85.                     program[program["COUNT"]] = runProgram(program[program["COUNT"]], 1)
  86.                 end
  87.  
  88.             elseif program[program["COUNT"]] == ")" then
  89.                 print("\n\nFound \")\" when not in a sub-program, maybe missing a space at \"(\"?")
  90.                 break
  91.  
  92.             elseif APIList["API"][program[program["COUNT"]]] then
  93.                 if tonumber(program[program["COUNT"] + 1]) then
  94.                     program["COUNT"] = program["COUNT"] + 1
  95. print("    ", program["NAME"], " [-", program[program["COUNT"]], "-> ", APIList["NAME"], ".", program[program["COUNT"]-1], "()")
  96.                     for i=1,tonumber(program[program["COUNT"]]) do
  97.                         APIList["API"][program[program["COUNT"]-1]]()
  98.                     end
  99.  
  100.                 else
  101. print(program["NAME"], " [-> ", APIList["NAME"], ".", program[program["COUNT"]], "()")
  102.                     APIList["API"][program[program["COUNT"]]]()
  103.                 end
  104.  
  105.             elseif tonumber(program[program["COUNT"]]) then
  106. print("\tNumber: ", program[program["COUNT"]])
  107.  
  108.             else
  109.                 os.run( {}, tostring(program[program["COUNT"]]))
  110.             end
  111. --os.pullEvent( "key" )
  112.         end
  113.     end
  114.  
  115.     program["COUNT"] = nil
  116.     return program
  117.  
  118. end
  119.  
  120. loadAPIs()
  121.  
  122. print( "API(", APIList["API"], ");")
  123. print("\tName: ", APIList["NAME"])
  124. print( "\tPath: ", APIList["PATH"])
  125.  
  126. runProgram(args, 1)
Advertisement
Add Comment
Please, Sign In to add comment