local args = { ... } local function n_to_kib(value) return string.format("%6.1f kiB", value / 1024) end local function textProgress(p, c1, c2, fmt, ...) p = math.min(p, 1) local tw = term.getSize() local str = string.format(fmt, ...) local w1 = math.ceil(p * tw) local w2 = tw - w1 local bg = term.getBackgroundColor() term.setBackgroundColor(c1) term.write(str:sub(1, w1)) local rem = w1 - #str if rem > 0 then term.write(string.rep(" ", rem)) end term.setBackgroundColor(c2) term.write(str:sub(w1 + 1, w1 + w2)) rem = math.min(tw - #str, w2) if rem > 0 then term.write(string.rep(" ", rem)) end term.setBackgroundColor(bg) end local tape = peripheral.find("tape_drive") if not tape then print("tape where") return end if not http then print("no http, check config") return end tape.stop() tape.seek(-tape.getSize()) tape.stop() local req, err = http.get(args[1], {}, true) if not req then print("oopsie: "..err) return end local headers = req.getResponseHeaders() local length = headers["content-length"] or 1 local _, y = term.getCursorPos() while true do local chunk = req.read(256) if not chunk then break end tape.write(chunk) term.setCursorPos(1, y) term.clearLine() textProcess(written / length, colors.green, colors.gray, "%8d / %8d", n_to_kib(written), n_to_kib(length)) os.sleep(0.01) end tape.stop() tape.seek(-tape.getSize()) tape.stop()