xXm0dzXx

Untitled

Apr 22nd, 2012
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local frame = 1;
  2.  
  3. local tArgs = { ... }
  4. if #tArgs == 0 then
  5. print( "Usage: powerpoint <folder path>" )
  6. return
  7. end
  8.  
  9. local sPath = shell.resolve( tArgs[1] )
  10. local bReadOnly = fs.isReadOnly( sPath )
  11. if fs.exists( sPath ) and fs.isDir( sPath ) == false then
  12. print( "Cannot edit a frame" )
  13. return
  14. elseif fs.exists( sPath ) == false then
  15. fs.makeDir( sPath )
  16. end
  17.  
  18. local w,h = term.getSize()
  19. local x,y = 1,1
  20. local scrollX, scrollY = 0,0
  21.  
  22. local bMenu = false
  23. local nMenuItem = 1
  24.  
  25. local sStatus = ""
  26. local tLines = {}
  27.  
  28. local function load()
  29. tLines = {}
  30. if fs.exists( sPath.. "/Frame" ..frame ) then
  31. local file = io.open( sPath.. "/Frame" ..frame, "r" )
  32. local sLine = file:read()
  33. while sLine do
  34. table.insert( tLines, sLine )
  35. sLine = file:read()
  36. end
  37. file:close()
  38. else
  39. table.insert( tLines, "" )
  40. end
  41. end
  42.  
  43. local function save()
  44. local file = io.open( sPath.. "/Frame" ..frame, "w" )
  45. if file then
  46. for n, sLine in ipairs( tLines ) do
  47. file:write( sLine .. "\n" )
  48. end
  49. file:close()
  50. return true
  51. end
  52. return false
  53. end
  54.  
  55. local function redrawText()
  56. for y=1,h-1 do
  57. term.setCursorPos( 1 - scrollX, y )
  58. term.clearLine()
  59.  
  60. local sLine = tLines[ y + scrollY ]
  61. if sLine ~= nil then
  62. term.write( sLine )
  63. end
  64. end
  65. term.setCursorPos( x - scrollX, y - scrollY )
  66. end
  67.  
  68. local function redrawLine()
  69. local sLine = tLines[y]
  70. term.setCursorPos( 1 - scrollX, y - scrollY )
  71. term.clearLine()
  72. term.write( sLine )
  73. term.setCursorPos( x - scrollX, y - scrollY )
  74. if frame == 6 then
  75. error("Please purchase for more details and remove this frame limit!")
  76. end
  77.  
  78. local tMenuItems = { "Save", "Exit", "Next", "Back" }
  79.  
  80. local function redrawMenu()
  81. term.setCursorPos( 1, h )
  82. term.clearLine()
  83.  
  84. if not bMenu then
  85. term.write( sStatus )
  86. elseif frame == 6 then
  87. error("Please purchase for more details and remove this frame limit!")
  88. else
  89. for n,sItem in ipairs( tMenuItems ) do
  90. if n == nMenuItem then
  91. term.write( "["..sItem.."]" )
  92. else
  93. term.write( " "..sItem.." " )
  94. end
  95. end
  96. end
  97.  
  98. term.setCursorPos( x - scrollX, y - scrollY )
  99. end
  100.  
  101. local function setStatus( _sText )
  102. sStatus = _sText
  103. redrawMenu()
  104. if frame == 6 then
  105. error("Please purchase for more details and remove this frame limit!")
  106. end
  107. end
  108.  
  109. local function setCursor( x, y )
  110. local screenX = x - scrollX
  111. local screenY = y - scrollY
  112.  
  113. local bRedraw = false
  114. if screenX < 1 then
  115. scrollX = x - 1
  116. screenX = 1
  117. bRedraw = true
  118. elseif screenX > w then
  119. scrollX = x - w
  120. screenX = w
  121. bRedraw = true
  122. elseif frame == 6 then
  123. error("Please purchase for more details and remove this frame limit!")
  124. end
  125.  
  126. if screenY < 1 then
  127. scrollY = y - 1
  128. screenY = 1
  129. bRedraw = true
  130. elseif screenY > h-1 then
  131. scrollY = y - (h-1)
  132. screenY = h-1
  133. bRedraw = true
  134. end
  135.  
  136. if bRedraw then
  137. redrawText()
  138. end
  139. term.setCursorPos( screenX, screenY )
  140. end
  141.  
  142. load()
  143.  
  144. term.clear()
  145. term.setCursorPos(x,y)
  146. term.setCursorBlink( true )
  147.  
  148. redrawText()
  149. setStatus( "Press Ctrl to access menu (Frame " ..frame.. ")" )
  150.  
  151. local bRunning = true
  152. local tMenuFunctions = {
  153. ["Exit"] = function()
  154. bRunning = false
  155. end,
  156. ["Save"] = function()
  157. if save() then
  158. setStatus( "Saved to "..sPath.." (Frame " ..frame..")" )
  159. else
  160. setStatus( "Access denied" )
  161. end
  162. end,
  163. ["Next"] = function()
  164. if frame+1 == 6 then
  165. error("Please purchase for more details and remove this frame limit!")
  166. else
  167. frame = frame +1
  168. load()
  169. redrawText()
  170. setStatus( "Press Ctrl to access menu (Frame " ..frame.. ")" )
  171. x = 1
  172. y = 1
  173. end
  174. end,
  175. ["Back"] = function()
  176. if frame-1 == 0 then
  177. else
  178. frame = frame-1
  179. load()
  180. redrawText()
  181. setStatus( "Press Ctrl to access menu (Frame " ..frame.. ")" )
  182. x = 1
  183. y = 1
  184. end
  185. end,
  186. }
  187.  
  188. local function doMenuItem( _n )
  189. local fnMenu = tMenuFunctions[ tMenuItems[_n] ]
  190. if fnMenu then
  191. fnMenu()
  192. end
  193.  
  194. bMenu = false
  195. term.setCursorBlink( true )
  196. redrawMenu()
  197. end
  198.  
  199. while bRunning do
  200. local sEvent, param = os.pullEvent()
  201. if sEvent == "key" then
  202. if param == 200 then
  203. -- Up
  204. if not bMenu then
  205. -- Move cursor up
  206. if y > 1 then
  207. y = y - 1
  208. x = math.min( x, string.len( tLines[y] ) + 1 )
  209. setCursor( x, y )
  210. end
  211. end
  212.  
  213. elseif param == 208 then
  214. -- Down
  215. if not bMenu then
  216. -- Move cursor down
  217. if y < #tLines then
  218. y = y + 1
  219. x = math.min( x, string.len( tLines[y] ) + 1 )
  220. setCursor( x, y )
  221. end
  222. end
  223.  
  224. elseif param == 203 then
  225. -- Left
  226. if not bMenu then
  227. -- Move cursor left
  228. if x > 1 then
  229. x = x - 1
  230. setCursor( x, y )
  231. end
  232. else
  233. -- Move menu left
  234. nMenuItem = nMenuItem - 1
  235. if nMenuItem < 1 then
  236. nMenuItem = #tMenuItems
  237. end
  238. redrawMenu()
  239. end
  240.  
  241.  
  242. elseif param == 205 then
  243. -- Right
  244. if not bMenu then
  245. -- Move cursor right
  246. if x < string.len( tLines[y] ) + 1 then
  247. x = x + 1
  248. setCursor( x, y )
  249. end
  250. else
  251. -- Move menu right
  252. nMenuItem = nMenuItem + 1
  253. if nMenuItem > #tMenuItems then
  254. nMenuItem = 1
  255. end
  256. redrawMenu()
  257. end
  258.  
  259. elseif param == 14 then
  260. -- Backspace
  261. if not bMenu then
  262. if x > 1 then
  263. -- Remove character
  264. local sLine = tLines[y]
  265. tLines[y] = string.sub(sLine,1,x-2) .. string.sub(sLine,x)
  266. redrawLine()
  267.  
  268. x = x - 1
  269. setCursor( x, y )
  270.  
  271. elseif y > 1 then
  272. -- Remove newline
  273. local sPrevLen = string.len( tLines[y-1] )
  274. tLines[y-1] = tLines[y-1] .. tLines[y]
  275. table.remove( tLines, y )
  276. redrawText()
  277.  
  278. x = sPrevLen + 1
  279. y = y - 1
  280. setCursor( x, y )
  281. end
  282. end
  283.  
  284. elseif param == 28 then
  285. -- Enter
  286. if not bMenu then
  287. -- Newline
  288. local sLine = tLines[y]
  289. tLines[y] = string.sub(sLine,1,x-1)
  290. table.insert( tLines, y+1, string.sub(sLine,x) )
  291. redrawText()
  292.  
  293. x = 1
  294. y = y + 1
  295. setCursor( x, y )
  296.  
  297. else
  298. -- Menu selection
  299. doMenuItem( nMenuItem )
  300. end
  301.  
  302. elseif param == 29 then
  303. -- Menu toggle
  304. bMenu = not bMenu
  305. if bMenu then
  306. term.setCursorBlink( false )
  307. nMenuItem = 1
  308. else
  309. term.setCursorBlink( true )
  310. end
  311. redrawMenu()
  312.  
  313. end
  314.  
  315. elseif sEvent == "redstone" then
  316. frame = frame +1
  317. load()
  318. redrawText()
  319. setStatus( "Press Ctrl to access menu (Frame " ..frame.. ")" )
  320. x = 1
  321. y = 1
  322. sleep(1.2)
  323. elseif sEvent == "char" then
  324. if not bMenu then
  325. -- Input text
  326. local sLine = tLines[y]
  327. tLines[y] = string.sub(sLine,1,x-1) .. param .. string.sub(sLine,x)
  328. redrawLine()
  329.  
  330. x = x + string.len( param )
  331. setCursor( x, y )
  332.  
  333. else
  334. -- Select menu items
  335. for n,sMenuItem in ipairs( tMenuItems ) do
  336. if string.lower(string.sub(sMenuItem,1,1)) == string.lower(param) then
  337. doMenuItem( n )
  338. break
  339. end
  340. end
  341. end
  342. end
  343. end
  344.  
  345. term.clear()
  346. term.setCursorBlink( false )
  347. term.setCursorPos( 1, 1 )
Advertisement
Add Comment
Please, Sign In to add comment