Quipex

Disk/mem/redworks/programs/RedWord

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