View difference between Paste ID: p8qNsAN0 and RXEL1hMJ
SHOW: | | - or go back to the newest paste.
1-
local target = ...
1+
--[[ this is an edit of something that WAS NOT MY IDEA. it's awesome though :) ]]
2-
if not target then
2+
3-
  print("Usage: "..fs.getName(shell.getRunningProgram()).." [target]")
3+
local level,maxlevel=1,0
4-
  return
4+
local resume,pR=coroutine.resume,os.pullEventRaw
5
6
getUp=function()
7-
local lastDumped = nil
7+
	local at,lastFunc,fileName=1
8-
getfenv(parallel.waitForAny).os = setmetatable({pullEventRaw = function(...)
8+
	while true do
9-
  local i = 2
9+
		local ok,func=pcall(function() return setfenv(at,getfenv(at)) end)
10-
  while true do
10+
		local _,err=pcall(error,"err",at)
11-
    local success, result = pcall(function()
11+
		if ok then
12-
      local fn = setfenv(i, getfenv(i))
12+
			lastFunc=func
13-
      return string.dump(fn)
13+
			fileName=err:match("(.-):")
14-
    end)
14+
		else
15-
    i = i + 1
15+
			return lastFunc,fileName
16-
    if success then
16+
		end
17-
      lastDumped = result
17+
		at=at+1
18-
    else
18+
	end
19-
      if result:find("invalid level") then
19+
20-
        break
20+
21-
      end
21+
os.pullEventRaw=function(...)
22-
    end
22+
	if level>=maxlevel then
23-
  end
23+
		maxlevel=level
24-
  getfenv(parallel.waitForAny).os = nil
24+
		os.originator={getUp()}
25-
  return coroutine.yield(...)
25+
	end
26-
end}, {__index = os})
26+
	level=level+1
27
	return coroutine.yield(...)
28-
os.queueEvent("fake-event")
28+
29-
os.pullEvent("fake-event")
29+
coroutine.resume=function(...)
30
	level=level-1
31-
getfenv(parallel.waitForAny).os = nil
31+
	return resume(...)
32
end
33-
if lastDumped then
33+
34-
  print("Writing bios file...")
34+
os.queueEvent("ohi")
35
os.pullEventRaw()
36-
  local handle = fs.open(target, "wb")
36+
37-
  for i=1,lastDumped:len() do
37+
coroutine.resume=resume
38-
    handle.write(lastDumped:byte(i))
38+
os.pullEventRaw=pR