Advertisement
Guest User

Sacrificable

a guest
Mar 26th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.85 KB | None | 0 0
  1. local rawsetCursorPos = term.setCursorPos;
  2. local rawTermWrite = term.write;
  3. local rawPrint = print;
  4. local rawsetTextColor = term.setTextColor;
  5. local rawsetBackgroundColor = term.setBackgroundColor;
  6. local rawSleep = sleep;
  7. local rawWrite = write;
  8. local ioWrite = io.write;
  9. local rawTermClear = term.clear;
  10. local t = 1;
  11. local memory = {};
  12.  
  13. term.setCursorPos = function(...)
  14.     memory[t] = {rawsetCursorPos, ...}
  15.     t = t + 1;
  16.     return rawsetCursorPos(...);
  17. end;
  18.  
  19. term.setTextColor = function(...)
  20.     memory[t] = {rawsetTextColor, ...};
  21.     t = t + 1;
  22.     return  rawsetTextColor(...);
  23. end;
  24.  
  25. if not rawyield then
  26.     rawyield = coroutine.yield;
  27. end;
  28.  
  29. local clock = os.clock;
  30. local ndt = clock();
  31. coroutine.yield = function(...)
  32.     local dt = clock();
  33.     local ret = {rawyield(...)};
  34.     dt = clock()-dt;
  35.     f dt-ndt > .01 and dt > .04 then
  36.     memory[t] = {rawSleep, dt};
  37.     t = t + 1;
  38.     end; ndt = dt;
  39.     return unpack(ret);
  40. end;
  41.  
  42. if not rawpullEvent then
  43.     rawpullEvent = os.pullEvent;
  44. end;
  45.  
  46. os.pullEvent = function(...)
  47.     local dt = clock();
  48.     local ret = {rawpullEvent(...)};
  49.     dt = clock()-dt;
  50.     if ndt-dt > .01 and dt > .04 then
  51.     memory[t] = {rawSleep, dt};
  52.     t = t + 1;
  53.     end; ndt = dt;
  54.     return unpack(ret);
  55. end;
  56.  
  57. term.clear = function()
  58.     memory[t] = {rawTermClear};
  59.     t = t + 1;
  60.     rawTermClear();
  61. end;
  62.  
  63. term.setBackgroundColor = function(...)
  64.     memory[t] = {rawsetBackgroundColor, ...}
  65.     t = t + 1;
  66.     return  rawsetBackgroundColor(...);
  67. end;
  68.  
  69. term.write = function(...)
  70.     memory[t] = {rawTermWrite, ...};
  71.     t = t + 1;
  72.     return  rawTermWrite(...);
  73. end;
  74.  
  75. write = function(...)
  76.     memory[t] = {rawWrite, ...};
  77.     t = t + 1;
  78.     return rawWrite(...);
  79. end;
  80.  
  81. print = function(...)
  82.     memory[t] = {rawPrint, ...};
  83.     t = t + 1;
  84.     return  rawPrint(...);
  85. end;
  86.  
  87. io.write = function(...)
  88.     memory[t] = {ioWrite, ...};
  89.     t = t + 1;
  90.     return ioWrite(...);
  91. end;
  92.  
  93. sleep = function(x)
  94.     if clock()-ndt > .04 then
  95.     memory[t] = {rawSleep, x};
  96.     t = t + 1;
  97.  end;
  98.     return rawSleep(x);
  99. end;
  100.  
  101. local opcode = {
  102.     [rawPrint] = 'print(';
  103.     [rawsetCursorPos] = 'term.setCursorPos(';
  104.     [rawsetTextColor] = 'term.setTextColor(';
  105.     [rawsetBackgroundColor] = 'q(';
  106.     [rawSleep] = 'sleep(';
  107.     [rawWrite] = 'write(';
  108.     [rawTermWrite] = 'term.write(';
  109.     [ioWrite] = 'io.write(';
  110.     [rawyield] = 'sleep(';
  111.     [rawTermClear] = 'term.clear(';
  112.     [rawpullEvent] = 'sleep(';
  113. };
  114.  
  115. term.setBackgroundColour = term.setBackgroundColor;
  116. term.setTextColour = term.setTextColor;
  117.  
  118. local opcode2 = {
  119.  [rawPrint] = true;
  120.  [rawWrite] = true;
  121.  [rawTermWrite] = true;
  122.  [ioWrite] = true;
  123. };
  124.  
  125. local declarations = "q=term.setBackgroundColor; w=term.setTextColor; e=term.setCursorPos; r=term.write; t=write; y=io.write; u=print; i=sleep; o=coroutine.yield; p=term.clear; a=os.pullEvent; "
  126.  
  127. local encode = function(recorded, file)
  128.     local file = fs.open(file, 'w');
  129.     file.write(declarations);
  130.     for i = 1,#recorded do
  131.         local piece = recorded[i];
  132.         local cmd = piece[1];
  133.         local line = opcode[cmd];
  134.         local op = (opcode2[cmd] and '[=[') or '';
  135.         local op2 = (opcode2[cmd] and ']=]') or '';
  136.         for i = 2,#piece-1 do
  137.             line = line..op..tostring(piece[i])..op2..', ';
  138.         end;
  139.         if #piece > 1 then
  140.             line = line..op..tostring(piece[#piece])..op2..');\n';
  141.         else
  142.             line = line..'); ';
  143.         end;
  144.         file.write(line);
  145.     end;
  146.     file.close();
  147. end;
  148.  
  149. local args = { ... };
  150. if #args < 2 then
  151.     print("usage : record -program -output");
  152.     error();
  153. end;
  154.  
  155. shell.run(args[1]);
  156.  
  157. encode(memory, args[2]);
  158. term.setBackgroundColor = rawsetBackgroundColor;
  159. term.setTextColor = rawsetTextColor;
  160. term.write = rawTermWrite;
  161. write = rawWrite;
  162. io.write = ioWrite;
  163. print = rawPrint;
  164. term.setCursorPos = rawsetCursorPos;
  165. sleep = rawsleep;
  166. coroutine.yield = rawyield;
  167. os.pullEvent = rawpullEvent;
  168. paintutils.drawBox = rawDrawBox;
  169. paintutils.drawPixel = rawDrawPixel;
  170. paintutils.drawLine = rawDrawLine;
  171. paintutils.drawFilledBox = rawDrawFilledBox;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement