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.

75 lines
1.9KB

  1. devfs = {}
  2. devfs.files = {}
  3. devfs.fds = {}
  4. devfs.nextfd = 0
  5. devfs.component = {}
  6. local function rfalse()
  7. return false
  8. end
  9. local function rzero()
  10. return 0
  11. end
  12. function devfs.component.getLabel()
  13. return "devfs"
  14. end
  15. devfs.component.spaceUsed, devfs.component.spaceTotal, devfs.component.isReadOnly, devfs.component.isDirectory,devfs.component.size, devfs.component.setLabel = rzero, rzero, rfalse, rfalse, rzero, rfalse
  16. function devfs.component.exists(fname)
  17. return devfs.files[fname] ~= nil
  18. end
  19. function devfs.component.list()
  20. local t = {}
  21. for k,v in pairs(devfs.files) do
  22. t[#t+1] = k
  23. end
  24. return t
  25. end
  26. function devfs.component.open(fname, mode)
  27. fname=fname:gsub("/","")
  28. if devfs.files[fname] then
  29. local r,w,c,s = devfs.files[fname](mode)
  30. devfs.fds[devfs.nextfd] = {["read"]=r or rfalse,["write"]=w or rfalse,["seek"]=s or rfalse,["close"]=c or rfalse}
  31. devfs.nextfd = devfs.nextfd + 1
  32. return devfs.nextfd - 1
  33. end
  34. return false
  35. end
  36. function devfs.component.read(fd,count)
  37. if devfs.fds[fd] then
  38. return devfs.fds[fd].read(count)
  39. end
  40. end
  41. function devfs.component.write(fd,data)
  42. if devfs.fds[fd] then
  43. return devfs.fds[fd].write(data)
  44. end
  45. end
  46. function devfs.component.close(fd)
  47. if devfs.fds[fd] then
  48. devfs.fds[fd].close()
  49. end
  50. devfs.fds[fd] = nil
  51. end
  52. function devfs.component.seek(fd,...)
  53. if devfs.fds[fd] then
  54. return devfs.fds[fd].seek(...)
  55. end
  56. end
  57. function devfs.component.remove(fname)
  58. end
  59. devfs.component.address = "devfs"
  60. devfs.component.type = "devfs"
  61. function devfs.register(fname,fopen) -- string function -- -- Register a new devfs node with the name *fname* that will run the function *fopen* when opened. This function should return a function for read, a function for write, function for close, and optionally, a function for seek, in that order.
  62. devfs.files[fname] = fopen
  63. end
  64. fs.makeDirectory("/dev")
  65. fs.mount("/dev",devfs.component)
  66. --#include "module/devfs/null.lua"