Operating system for OpenComputers
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

69 satır
1.8KB

  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. function devfs.component.getLabel()
  10. return "devfs"
  11. end
  12. devfs.component.spaceUsed, devfs.component.spaceTotal, devfs.component.isReadOnly, devfs.component.isDirectory,devfs.component.size, devfs.component.setLabel = function() return computer.totalMemory()-computer.freeMemory() end, computer.totalMemory, rfalse, rfalse, rfalse, rfalse
  13. function devfs.component.exists(fname)
  14. return devfs.files[fname] ~= nil
  15. end
  16. function devfs.component.list()
  17. local t = {}
  18. for k,v in pairs(devfs.files) do
  19. t[#t+1] = k
  20. end
  21. return t
  22. end
  23. function devfs.component.open(fname, mode)
  24. fname=fname:gsub("/","")
  25. if devfs.files[fname] then
  26. local r,w,c,s = devfs.files[fname](mode)
  27. devfs.fds[devfs.nextfd] = {["read"]=r or rfalse,["write"]=w or rfalse,["seek"]=s or rfalse,["close"]=c or rfalse}
  28. devfs.nextfd = devfs.nextfd + 1
  29. return devfs.nextfd - 1
  30. end
  31. return false
  32. end
  33. function devfs.component.read(fd,count)
  34. if devfs.fds[fd] then
  35. return devfs.fds[fd].read(count)
  36. end
  37. end
  38. function devfs.component.write(fd,data)
  39. if devfs.fds[fd] then
  40. return devfs.fds[fd].write(data)
  41. end
  42. end
  43. function devfs.component.close(fd)
  44. if devfs.fds[fd] then
  45. devfs.fds[fd].close()
  46. end
  47. devfs.fds[fd] = nil
  48. end
  49. function devfs.component.seek(fd,...)
  50. if devfs.fds[fd] then
  51. return devfs.fds[fd].seek(...)
  52. end
  53. end
  54. function devfs.component.remove(fname)
  55. end
  56. function devfs.register(fname,fopen) -- 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.
  57. devfs.files[fname] = fopen
  58. end
  59. fs.mounts.dev = devfs.component
  60. --#include "module/devfs/null.lua"