'=========================================================================== ' Subject: SUPER LIMITED INPUT Date: 05-11-97 (16:39) ' Author: Richard Peacock Code: QB, QBasic, PDS ' Origin: rjp1@bayou.com Packet: TEXT.ABC '=========================================================================== DECLARE FUNCTION InputLine$ (text$, ViewWidth%, keycode%) DECLARE FUNCTION Lesser% (Var1%, Var2%) ' Super Limited Input!! ' Hello all! ' This is a cool little thing to let you have an input line, that can scroll ' back anf forth with the left & right keys! You also type. (Just run it) ' Do with this what you will, just give me small credit. ' I am Richard Peacock, Of Peacock Programming. My page is at: ' www.bayou.com/~rjp1/ Go there and follow the link to my ' game page. Thanx all....and bye! ' ./ ' /| ' / \ 'These are the ascii codes of the keys. CONST false = 0, true = NOT false CONST ESC = 27, ENTER = 13, BkSpc = 8, TabKey = 9 CONST InsertKey = -82, DeleteKey = -83 CONST HomeKey = -71, CtrlHome = -119 CONST EndKey = -79, CtrlEnd = -117 CONST PgUpKey = -73, PgDnKey = -81 CONST UpArrow = -72, DnArrow = -80, LArrow = -75, RArrow = -77 DIM SHARED CursSize% CursSize% = 7 CLS ' Ok, All I'm really doing here is making a pretty little dialog box. ' (The one you see when you run the program). LOCATE 4, 1 PRINT "Features: You can scroll left and right. Press INSERT to use INS and OVS mode." PRINT "You can use HOME and END. You can use Ascii symbols." LOCATE 10, 23 COLOR 0, 7: PRINT "File Name:" COLOR 15, 2 LOCATE 10, 32 ' I will explain this next line: ' The first thing in quotes is the starting line. It can be blank. ' The second is how many spaces across to allow. ' The last statement is the letter you type. a$ = InputLine$("It can scroll when you type!", 29, keycode%) LOCATE 1, 1: COLOR 7, 0 IF keycode% = ESC THEN LOCATE 1, 1: PRINT "You hit ESC" IF keycode% = ENTER THEN LOCATE 1, 1: PRINT "You hit ENTER" PRINT a$ FUNCTION InputLine$ (text$, ViewWidth%, keycode%) MaxLnLen% = 128 LCol% = POS(0): RCol% = LCol% + ViewWidth% - 1 View$ = SPACE$(ViewWidth%) Work$ = LEFT$(text$, MaxLnLen%) LnLen% = LEN(Work$) CCol% = Lesser(LCol% + LnLen%, RCol%) AChar% = LnLen% + 1 'LOCATE , , 0, CursSize% - 1, CursSize% Insert% = true DO LOCATE , LCol% LSET View$ = MID$(Work$, AChar% - (CCol% - LCol%), ViewWidth%) PRINT View$; LOCATE , CCol%, 1 LnLen% = LEN(Work$) DO DO: Ky$ = INKEY$: LOOP UNTIL LEN(Ky$) keycode% = ASC(Ky$): IF keycode% = 0 THEN keycode% = -ASC(MID$(Ky$, 2)) LOOP UNTIL keycode% <> BadKey%: BadKey% = 0 LOCATE , , 0 SELECT CASE keycode% CASE BkSpc IF AChar% = 1 THEN BEEP: BadKey% = keycode% ELSE IF AChar% <= LnLen% + 1 THEN Work$ = LEFT$(Work$, AChar% - 2) + MID$(Work$, AChar%) END IF AChar% = AChar% - 1 IF CCol% <> LCol% THEN CCol% = CCol% - 1 END IF CASE ENTER text$ = Work$ EXIT DO CASE ESC EXIT DO CASE 32 TO 255 ' letter keys IF AChar% > MaxLnLen% THEN BEEP: BadKey% = keycode% ELSE IF AChar% <= LnLen% THEN IF Insert% THEN IF LnLen% = MaxLnLen% THEN BEEP: BadKey% = keycode% ELSE Work$ = LEFT$(Work$, AChar% - 1) + Ky$ + MID$(Work$, AChar%) AChar% = AChar% + 1 IF CCol% <> RCol% THEN CCol% = CCol% + 1 END IF ELSE 'IF NOT Insert% THEN (in overstrike mode) MID$(Work$, AChar%, 1) = Ky$ AChar% = AChar% + 1 IF CCol% <> RCol% THEN CCol% = CCol% + 1 END IF ELSE 'IF AChar% > LnLen% THEN Work$ = Work$ + SPACE$(AChar% - LnLen% - 1) + Ky$ AChar% = AChar% + 1 IF CCol% <> RCol% THEN CCol% = CCol% + 1 END IF END IF CASE LArrow IF AChar% = 1 THEN BEEP: BadKey% = keycode% ELSE 'IF AChar% > 1 THEN AChar% = AChar% - 1 IF CCol% <> LCol% THEN CCol% = CCol% - 1 END IF CASE RArrow IF AChar% > MaxLnLen% THEN BEEP: BadKey% = keycode% ELSE AChar% = AChar% + 1 IF CCol% <> RCol% THEN CCol% = CCol% + 1 END IF CASE HomeKey AChar% = 1 CCol% = LCol% CASE EndKey AChar% = LnLen% + 1 CCol% = Lesser(LCol% + LnLen%, RCol%) CASE InsertKey Insert% = NOT Insert% IF Insert% THEN LOCATE , , , CursSize% - 1, CursSize% ELSE LOCATE , , , CursSize% / 2, CursSize% END IF CASE DeleteKey IF AChar% <= LnLen% THEN Work$ = LEFT$(Work$, AChar% - 1) + MID$(Work$, AChar% + 1) END IF CASE ELSE BEEP: BadKey% = keycode% END SELECT LOOP LOCATE , , , CursSize% - 1, CursSize% InputLine$ = text$ END FUNCTION FUNCTION Lesser% (Var1%, Var2%) STATIC Lesser% = Var1%: IF Var2% < Var1% THEN Lesser% = Var2% END FUNCTION