'===========================================================================
' Subject: TINY LIMITED INPUT                 Date: 10/15/92 (00:00)       
'  Author: Walton Dell                        Code: QB, QBasic, PDS        
'  Origin: TINY,LIMITED,INPUT               Packet: TEXT.ABC
'===========================================================================
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'Based on TINYINPU.BAS by Walton Dell - 10/15/92
'A small input routine that allows limited length input.
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

DEFINT A-Z
DECLARE FUNCTION TinyInput$ (Original$, Length, AutoCap, Allowed$)

CLS
COLOR , 1
What$ = TinyInput$("Hello", 12, 0, "")
PRINT What$

FUNCTION TinyInput$ (Original$, Length, AutoCap, Allowed$)

Row = POS(0): CursorPos = CSRLIN

LOCATE Row, CursorPos, 1

PRINT Original$ + SPACE$(Length - LEN(Original$));
LOCATE , CursorPos + LEN(Original$): Total$ = Original$

DO
DO

  Ky$ = INKEY$
LOOP UNTIL Ky$ <> ""
  IF AutoCap THEN Ky$ = UCASE$(Ky$)

  SELECT CASE ASC(Ky$)             'integer compares are faster than
                                   'string compares
     CASE 13                       '<Enter> time to go

       TinyInput$ = Total$         'Function returns our string
       LOCATE , , 0: EXIT DO       'off cursor; exit loop to exit function

     CASE 8                        'Backspace
       IF LEN(Total$) THEN Total$ = LEFT$(Total$, LEN(Total$) - 1)
       LOCATE , CursorPos: PRINT Total$ + " ";
       LOCATE , POS(0) - 1

     CASE 27                       'Escape (doesn't exit??)
        Total$ = "":
        LOCATE , CursorPos
        PRINT SPACE$(Length); : LOCATE , CursorPos

     CASE 1 TO 8, 11 TO 255       'all other keys (exc. tab & lf)
        IF AutoCap THEN Ky$ = UCASE$(Ky$)
        IF LEN(Allowed$) THEN
           IF INSTR(Allowed$, Ky$) = 0 THEN Ky$ = ""
        END IF
        IF LEN(Ky$) AND LEN(Total$) < Length THEN
            Total$ = Total$ + Ky$
            PRINT Ky$;
        END IF
    END SELECT
LOOP

END FUNCTION

