Guest User

Untitled

a guest
May 21st, 2018
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 11.55 KB | None | 0 0
  1. term.setCursorBlink(true)
  2. local sNew = "|   [Make new file]    Open existing file   |"
  3. local sOpen = "|    Make new file    [Open existing file]  |"
  4. local sYes = "|               [Yes]    No                 |"
  5. local sNo = "|                Yes    [No]                |"
  6. local sSave = "|      [Save]    Quit     Save & Quit       |"
  7. local sQuit = "|       Save    [Quit]    Save & Quit       |"
  8. local sSaveAndQuit = "|       Save     Quit    [Save & Quit]      |"
  9. local iMenuXCor = 0
  10. local sFile = ""
  11. local sLine = ""
  12. local tLines = {}
  13. local iScrollX, iScrollY = 0,0
  14. local x, y = 1,1
  15. local w, h = term.getSize()
  16.  
  17. local function fMenuXCor()
  18.     iMenuXCor = (w/2)-21
  19. end
  20.  
  21. local function fCheckDir()
  22.     if not fs.isDir("/files") then
  23.         fs.makeDir("/files")
  24.     end
  25.     if shell.dir() ~=  "/files" then
  26.         shell.setDir("/files")
  27.     end
  28. end
  29.  
  30. local function fExitDir()
  31.     term.clear()
  32.     shell.setDir("")
  33. end
  34.  
  35. local function fOpenNew()
  36.     tLines = {}
  37.     table.insert(tLines, "")
  38. end
  39.  
  40. local function fLoad()
  41.     sPath = shell.resolve(sFile)
  42.     if fs.exists( sPath ) then
  43.         local file = io.open( sPath , "r")
  44.         local sLine = file:read()
  45.         while sLine do
  46.             table.insert(tLines, sLine)
  47.             sLine = file:read()
  48.         end
  49.         file:close()
  50.     else
  51.         term.clear()
  52.         term.setCursorBlink(false)
  53.         local sYesOrNo = sYes
  54.         term.setCursorPos(iMenuXCor,6)
  55.         write(" ___________________________________________")
  56.         term.setCursorPos(iMenuXCor,7)
  57.         write("|                                           |")
  58.         term.setCursorPos(iMenuXCor,8)
  59.         write("|         Error: File doesn't exist.        |")
  60.         term.setCursorPos(iMenuXCor,9)
  61.         write("|          Do you want to make it?          |")
  62.         term.setCursorPos(iMenuXCor,10)
  63.         write("|                                           |")
  64.         term.setCursorPos(iMenuXCor,11)
  65.         write(sYesOrNo)
  66.         term.setCursorPos(iMenuXCor,12)
  67.         write("|___________________________________________|")
  68.         repeat
  69.             local sEvent, param = os.pullEvent()
  70.             if sEvent == "key" then
  71.                 param = tostring(param)
  72.                 if param == "203" or param == "205" then
  73.                     if sYesOrNo == sYes then
  74.                         sYesOrNo = sNo
  75.                         term.setCursorPos(iMenuXCor,11)
  76.                         write(sYesOrNo)
  77.                     elseif sYesOrNo == sNo then
  78.                         sYesOrNo = sYes
  79.                         term.setCursorPos(iMenuXCor,11)
  80.                         write(sYesOrNo)
  81.                     end
  82.                 end
  83.             end
  84.         until param == "28"
  85.         if sYesOrNo == sYes then
  86.             fOpenNew()
  87.         elseif sYesOrNo == sNo then
  88.             term.clear()
  89.             term.setCursorPos(1,1)
  90.             print("Quitting")
  91.             sleep(1)
  92.             fExitDir()
  93.             shell.exit()
  94.         end
  95.     end
  96. end
  97.  
  98. local function fMenuNew()
  99.     term.clear()
  100.     term.setCursorBlink(false)
  101.     term.setCursorPos(iMenuXCor,1)
  102.     write(" ___________________________________________")
  103.     term.setCursorPos(iMenuXCor,2)
  104.     write("|                                           |")
  105.     term.setCursorPos(iMenuXCor,3)
  106.     write("|     How do you want to call the file?     |")
  107.     term.setCursorPos(iMenuXCor,4)
  108.     write("|                                           |")
  109.     term.setCursorPos(iMenuXCor,5)
  110.     write("|                                           |")
  111.     term.setCursorPos(iMenuXCor,6)
  112.     write("|___________________________________________|")
  113.     term.setCursorPos(iMenuXCor+6,5)
  114.     sFile = io.read()
  115.     sFileExt = string.sub(sFile, -3)
  116.     if sFileExt ~= ".txt" then
  117.         sFile = sFile..".txt"
  118.     end
  119.     sPath = shell.resolve(sFile)
  120.     if fs.exists(sPath) then
  121.         term.clear()
  122.         local sYesOrNo = sYes
  123.         term.setCursorPos(iMenuXCor,6)
  124.         write(" ___________________________________________")
  125.         term.setCursorPos(iMenuXCor,7)
  126.         write("|                                           |")
  127.         term.setCursorPos(iMenuXCor,8)
  128.         write("|         Error: File already exist.        |")
  129.         term.setCursorPos(iMenuXCor,9)
  130.         write("|          Do you want to edit it?          |")
  131.         term.setCursorPos(iMenuXCor,10)
  132.         write("|                                           |")
  133.         term.setCursorPos(iMenuXCor,11)
  134.         write(sYesOrNo)
  135.         term.setCursorPos(iMenuXCor,12)
  136.         write("|___________________________________________|")
  137.         repeat
  138.             local sEvent, param = os.pullEvent()
  139.             if sEvent == "key" then
  140.                 param = tostring(param)
  141.                 if param == "203" or param == "205" then
  142.                     if sYesOrNo == sYes then
  143.                         sYesOrNo = sNo
  144.                         term.setCursorPos(iMenuXCor,11)
  145.                         write(sYesOrNo)
  146.                     elseif sYesOrNo == sNo then
  147.                         sYesOrNo = sYes
  148.                         term.setCursorPos(iMenuXCor,11)
  149.                         write(sYesOrNo)
  150.                     end
  151.                 end
  152.             end
  153.         until param == "28"
  154.         if sYesOrNo == sYes then
  155.             fLoad()
  156.         elseif sYesOrNo == sNo then
  157.             term.clear()
  158.             term.setCursorPos(1,1)
  159.             print("Quitting")
  160.             sleep(1)
  161.             fExitDir()
  162.             shell.exit()
  163.         end
  164.     else
  165.         fOpenNew()
  166.     end
  167.     term.setCursorBlink(true)
  168. end
  169.  
  170. local function fMenuOpen()
  171.     term.clear()
  172.     term.setCursorBlink(false)
  173.     term.setCursorPos(1,8)
  174.     write("Files:")
  175.     term.setCursorPos(iMenuXCor,10)
  176.     shell.run("ls")
  177.     term.setCursorPos(iMenuXCor,1)
  178.     write(" ___________________________________________")
  179.     term.setCursorPos(iMenuXCor,2)
  180.     write("|                                           |")
  181.     term.setCursorPos(iMenuXCor,3)
  182.     write("|      Which file do you want to open?      |")
  183.     term.setCursorPos(iMenuXCor,4)
  184.     write("|                                           |")
  185.     term.setCursorPos(iMenuXCor,5)
  186.     write("|                                           |")
  187.     term.setCursorPos(iMenuXCor,6)
  188.     write("|___________________________________________|")
  189.     term.setCursorPos(iMenuXCor+7,5)
  190.     term.setCursorBlink(true)
  191.     sFile = read()
  192.     sFileExt = string.sub(sFile, -3)
  193.     if sFileExt ~= ".txt" then
  194.         sFile = sFile..".txt"
  195.     end
  196.    
  197.     term.setCursorBlink(true)
  198.     fLoad()
  199. end
  200.  
  201. local function fMenuStart()
  202.     local sChoose = sNew
  203.     fMenuXCor()
  204.     term.clear()
  205.     term.setCursorBlink(false)
  206.     term.setCursorPos(iMenuXCor,6)
  207.     write(" ___________________________________________")
  208.     term.setCursorPos(iMenuXCor,7)
  209.     write("|                                           |")
  210.     term.setCursorPos(iMenuXCor,8)
  211.     write("| Welcome to the RedworksOS Word Processor, |")
  212.     term.setCursorPos(iMenuXCor,9)
  213.     write("|          what do you want to do?          |")
  214.     term.setCursorPos(iMenuXCor,10)
  215.     write("|                                           |")
  216.     term.setCursorPos(iMenuXCor,11)
  217.     write(sChoose)
  218.     term.setCursorPos(iMenuXCor,12)
  219.     write("|                                           |")
  220.     term.setCursorPos(iMenuXCor,13)
  221.     write("|         To access menu press Ctrl.        |")
  222.     term.setCursorPos(iMenuXCor,14)
  223.     write("|___________________________________________|\n")
  224.     repeat
  225.     local sEvent, param = os.pullEvent()
  226.     if sEvent == "key" then
  227.         param = tostring(param)
  228.         if param == "203" or param == "205" then
  229.             if sChoose == sNew then
  230.                 sChoose = sOpen
  231.                 term.setCursorPos(iMenuXCor,11)
  232.                 write(sChoose)
  233.             elseif sChoose == sOpen then
  234.                 sChoose = sNew
  235.                 term.setCursorPos(iMenuXCor,11)
  236.                 write(sChoose)
  237.             end
  238.         end
  239.     end
  240.     until param == "28"
  241.     if sChoose == sOpen then
  242.         term.clear()
  243.         fMenuOpen()
  244.     elseif sChoose == sNew then
  245.         term.clear()
  246.         fMenuNew()
  247.     end
  248.     term.setCursorBlink(true)
  249. end
  250.  
  251. local function fMenuExit()
  252.     term.clear()
  253.     term.setCursorBlink(false)
  254.     local sSaveOrQuit = sSave
  255.     term.setCursorPos(iMenuXCor,6)
  256.     write(" ___________________________________________")
  257.     term.setCursorPos(iMenuXCor,7)
  258.     write("|                                           |")
  259.     term.setCursorPos(iMenuXCor,8)
  260.     write("|          What do you want to do?          |")
  261.     term.setCursorPos(iMenuXCor,9)
  262.     write("|                                           |")
  263.     term.setCursorPos(iMenuXCor,10)
  264.     write(sSaveOrQuit)
  265.     term.setCursorPos(iMenuXCor,11)
  266.     write("|___________________________________________|")
  267.     repeat
  268.         local sEvent, param = os.pullEvent()
  269.         if sEvent == "key" then
  270.             if param == 203 then
  271.                 if sSaveOrQuit == sSave then
  272.                     sSaveOrQuit = sSaveAndQuit
  273.                     term.setCursorPos(iMenuXCor,10)
  274.                     write(sSaveOrQuit)
  275.                 elseif sSaveOrQuit == sQuit then
  276.                     sSaveOrQuit = sSave
  277.                     term.setCursorPos(iMenuXCor,10)
  278.                     write(sSaveOrQuit)
  279.                 elseif sSaveOrQuit == sSaveAndQuit then
  280.                     sSaveOrQuit = sQuit
  281.                     term.setCursorPos(iMenuXCor,10)
  282.                     write(sSaveOrQuit)
  283.                 end
  284.             elseif param == 205 then
  285.                 if sSaveOrQuit == sSave then
  286.                     sSaveOrQuit = sQuit
  287.                     term.setCursorPos(iMenuXCor,10)
  288.                     write(sSaveOrQuit)
  289.                 elseif sSaveOrQuit == sQuit then
  290.                     sSaveOrQuit = sSaveAndQuit
  291.                     term.setCursorPos(iMenuXCor,10)
  292.                     write(sSaveOrQuit)
  293.                 elseif sSaveOrQuit == sSaveAndQuit then
  294.                     sSaveOrQuit = sSave
  295.                     term.setCursorPos(iMenuXCor,10)
  296.                     write(sSaveOrQuit)
  297.                 end
  298.             end
  299.         end
  300.     until param == 28
  301.     if sSaveOrQuit == sSave then
  302.         fSave()
  303.         term.setCursorBlink(true)
  304.         bExit = false
  305.     elseif sSaveOrQuit == sQuit then
  306.         bExit = true
  307.     elseif sSaveOrQuit == sSaveAndQuit then
  308.         bExit = true
  309.         fSave()
  310.     end
  311. end
  312.  
  313. function fSave()
  314.     local file = io.open( sPath, "w" )
  315.     if file then
  316.         for n, sLine in ipairs( tLines ) do
  317.             file:write( sLine .. "\n" )
  318.         end
  319.         file:close()
  320.         bSave = true
  321.     else
  322.         bSave = false
  323.     end
  324. end
  325.  
  326. local function fPrintText()
  327.     for y=1,h do
  328.         term.setCursorPos( 1 - iScrollX, y )
  329.         term.clearLine()
  330.  
  331.         local sLine = tLines[ y + iScrollY ]
  332.         if sLine ~= nil then
  333.             write( sLine )
  334.         end
  335.     end
  336.     term.setCursorPos( x - iScrollX, y - iScrollY )
  337. end
  338.  
  339. local function fPrintLine()
  340.     local sLine = tLines[y]
  341.     term.setCursorPos( 1 - iScrollX, y - iScrollY )
  342.     term.clearLine()
  343.     term.write( sLine )
  344.     term.setCursorPos( x - iScrollX, y - iScrollY )
  345. end
  346.  
  347. local function fSetCursor(x, y)
  348.     local screenX = x - iScrollX
  349.     local screenY = y - iScrollY
  350.    
  351.     if screenX < 1 then
  352.         iScrollX = x - 1
  353.         screenX = 1
  354.         fPrintText()
  355.     elseif screenX > w then
  356.         iScrollX = x - w
  357.         screenX = w
  358.         fPrintText()
  359.     end
  360.    
  361.     if screenY < 1 then
  362.         iScrollY = y - 1
  363.         screenY = 1
  364.         fPrintText()
  365.     elseif screenY > h then
  366.         iScrollY = y - (h)
  367.         screenY = h
  368.         fPrintText()
  369.     end
  370.    
  371.     term.setCursorPos( screenX, screenY )
  372. end
  373.  
  374. fCheckDir()
  375. fMenuStart()
  376. term.clear()
  377. term.setCursorPos(x,y)
  378. term.setCursorBlink(true)
  379. fPrintText()
  380. while true do
  381.     local sEvent, param = os.pullEvent()
  382.     if sEvent == "key" then
  383.         if param == 200 then
  384.             if y > 1 then
  385.                 y = y - 1
  386.                 x = math.min( x, string.len( tLines[y] ) + 1 )
  387.                 fSetCursor( x, y )
  388.             end
  389.        
  390.         elseif param == 208 then
  391.             if y < #tLines then
  392.                     y = y + 1
  393.                     x = math.min( x, string.len( tLines[y] ) + 1 )
  394.                     fSetCursor( x, y )
  395.             end
  396.        
  397.         elseif param == 203 then
  398.             if x > 1 then
  399.                 x = x - 1
  400.                 fSetCursor( x, y )
  401.             end
  402.        
  403.         elseif param == 205 then
  404.             if x < string.len( tLines[y] ) + 1 then
  405.                 x = x + 1
  406.                 fSetCursor( x, y )
  407.             end
  408.            
  409.         elseif param == 14 then
  410.              if x > 1 then
  411.                 local sLine = tLines[y]
  412.                 tLines[y] = string.sub(sLine,1,x-2) .. string.sub(sLine,x)
  413.                 fPrintLine()
  414.            
  415.                 x = x - 1
  416.                 fSetCursor( x, y )
  417.                
  418.             elseif y > 1 then
  419.                 local sPrevLen = string.len( tLines[y-1] )
  420.                 tLines[y-1] = tLines[y-1] .. tLines[y]
  421.                 table.remove( tLines, y )
  422.                 fPrintText()
  423.                
  424.                 x = sPrevLen + 1
  425.                 y = y - 1
  426.                 fSetCursor( x, y )
  427.             end
  428.            
  429.         elseif param == 28 then
  430.             local sLine = tLines[y]
  431.             tLines[y] = string.sub(sLine,1,x-1)
  432.             table.insert( tLines, y+1, string.sub(sLine,x) )
  433.             fPrintText()
  434.            
  435.             x = 1
  436.             y = y + 1
  437.             fSetCursor( x, y )     
  438.            
  439.            
  440.         elseif param == 29 then
  441.             fMenuExit()
  442.             if bExit then
  443.                 break
  444.             else
  445.                 fPrintText()
  446.             end
  447.         end
  448.  
  449.     elseif sEvent == "char" then
  450.         local sLine = tLines[y]
  451.         tLines[y] = string.sub(sLine,1,x-1) .. param .. string.sub(sLine,x)
  452.         fPrintLine()
  453.    
  454.         x = x + string.len( param )
  455.         fSetCursor(x, y)
  456.     end
  457. end
  458.  
  459. fExitDir()
  460. term.clear()
  461. term.setCursorBlink(false)
  462. term.setCursorPos(1,1)
Add Comment
Please, Sign In to add comment