Operating system for OpenComputers
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
942B

  1. local tArgs = {...}
  2. local function toint(s)
  3. s=s or ""
  4. local n = 0
  5. local i = 1
  6. while true do
  7. local p = s:sub(i,i)
  8. if p == "" then break end
  9. local b = string.byte(p)
  10. n = n << 8
  11. n = n | b
  12. i=i+1
  13. end
  14. return n
  15. end
  16. local fi = io.open(tArgs[1])
  17. while true do
  18. local nlen = toint(fi:read(2))
  19. if nlen == 0 then
  20. break
  21. end
  22. local name = fi:read(nlen)
  23. local fsize = toint(fi:read(2))
  24. io.write(string.format("%s: %d... ",name,fsize))
  25. if not tArgs[2] then
  26. local dir = name:match("(.+)/.*%.?.+")
  27. if (dir) then
  28. fs.makeDirectory(dir)
  29. end
  30. local f = io.open(name,"wb")
  31. local rsize,buf = fsize, ""
  32. if f then
  33. repeat
  34. buf = fi:read(math.min(rsize,1024))
  35. f:write(buf)
  36. rsize = rsize - buf:len()
  37. until rsize <= 1
  38. f:close()
  39. end
  40. else
  41. local rsize = fsize
  42. repeat
  43. buf = fi:read(math.min(rsize,1024))
  44. rsize = rsize - buf:len()
  45. until rsize <= 1
  46. end
  47. print(fsize)
  48. coroutine.yield()
  49. end
  50. fi:close()