Advertisement
PaymentOption

testPredict

Sep 29th, 2012
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.41 KB | None | 0 0
  1. local nScreenWidth, nScreenHeight = term.getSize()
  2.  
  3. function limitRead( nLength, cReplaceChar )
  4.     term.setCursorBlink( true )
  5.    
  6.     nLength = nLength or -1 -- -1 is unlimited
  7.     sReturnString = ""
  8.    
  9.     xPos, yPos = term.getCursorPos()
  10.  
  11.     while true do
  12.         predictText(sReturnString)
  13.         term.setCursorPos( xPos, yPos )
  14.         if not cReplaceChar then term.write( sReturnString )
  15.         else term.write( string.rep( cReplaceChar, string.len( sReturnString ) ) ) end
  16.  
  17.         event, char = os.pullEvent()
  18.        
  19.         if nLength ~= -1 and string.len( sReturnString ) >= nLength then term.setCursorBlink( false ); return sReturnString end -- Length check
  20.  
  21.         if event == "char" then sReturnString = sReturnString .. char
  22.         elseif event == "key" and char == 28 then term.setCursorBlink( false ); return sReturnString -- Enter
  23.         elseif event == "key" and char == 14 then -- Backspace
  24.             term.setCursorPos( xPos, yPos )
  25.             term.write( string.rep( " ", string.len( sReturnString ) ) )
  26.             sReturnString = string.sub( sReturnString, 1, string.len( sReturnString )-1 )
  27.             term.setCursorPos( xPos, yPos )
  28.            
  29.             if not cReplaceChar then term.write( sReturnString )
  30.             else term.write( string.rep( cReplaceChar, string.len( sReturnString ) ) ) end
  31.         end
  32.        
  33.         term.setCursorPos( xPos, yPos )
  34.         term.write( string.rep( " ", string.len( sReturnString ) ) )
  35.         term.setCursorPos( xPos, yPos )
  36.         if not cReplaceChar then term.write( sReturnString )
  37.         else term.write( string.rep( cReplaceChar, string.len( sReturnString ) ) ) end
  38.     end
  39. end
  40.  
  41. function predictText(sString)
  42.     local tFiles = fs.list("/")
  43.  
  44.     if sString:len() > 0 then
  45.         local tOptions = {}
  46.         -- Determine the options predicted.
  47.         for index, fileName in ipairs(tFiles) do
  48.             if fileName:sub(1, sString:len()) == sString then
  49.                 table.insert(tOptions, fileName)
  50.             end
  51.         end
  52.  
  53.         -- Clear the space.
  54.         for line = 4, nScreenHeight - 4 do
  55.             term.setCursorPos(1, line)
  56.             term.write(string.rep(" ", nScreenWidth))
  57.         end
  58.  
  59.         if #tOptions > 0 then
  60.             -- Print the options.
  61.             for line, fileName in ipairs(tOptions) do
  62.                 term.setCursorPos(3, line + 3)
  63.                 term.write(fileName)
  64.             end
  65.         else
  66.             term.setCursorPos(3, 4)
  67.             term.write("No results found.")
  68.         end
  69.     else
  70.         for line, fileName in ipairs(tFiles) do
  71.             term.setCursorPos(3, line + 3)
  72.             term.write(fileName)
  73.         end
  74.     end
  75. end
  76.  
  77. function clearScreen()
  78.     term.clear()
  79.     term.setCursorPos(1, 1)
  80. end
  81.  
  82. clearScreen()
  83. write("> ")
  84. s = limitRead()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement