home *** CD-ROM | disk | FTP | other *** search
-
- ' FldEdit()
- ' Field Editor for taking keyboard input from a specific
- ' screen location of maximum length. Returns one string (FTemp$)
- ' and one integer value (FRKey%).
- ' Display this code with a TAB stop of 3 spaces for best result.
-
- SUB FldEdit(FRow%, FCol%, FLength%, FFore%, FBack%, FRKey%, FTemp$) STATIC
-
- ' Set boolean values
- CONST True = -1
- CONST False = 0
-
- ' Set color, ephasize field, insert string, and set cursor
- FSet% = FCol% - 1
- COLOR FFore%, FBack%
- LOCATE FRow%, FCol%, 0
- PRINT FTemp$; SPACE$(FLength% - LEN(FTemp$));
- LOCATE FRow%, FCol%, 1
-
- ' Initialize return key code, stop
- FRKey% = 0
- FStop% = False
-
- ' Set Editor Output string to new Input string
- FOut$ = FTemp$
-
- ' Start Parsing
- DO UNTIL FStop%
-
- ' Sound alarm if called for
- IF Alarm% THEN
- SOUND 1000, 1
- SOUND 1500, 2
- SOUND 500, 1
- Alarm% = False
- END IF
-
- ' Get a key to parse
- FIn$ = ""
- DO
- FIn$ = INKEY$
- LOOP WHILE FIn$ = ""
-
- ' Start by parsing length of key string
- SELECT CASE LEN(FIn$)
-
- ' Check for extended key, strip leading zero
- CASE 2
- FIn$ = RIGHT$(FIn$, 1)
-
- ' Use ASCII value to select
- SELECT CASE ASC(FIn$)
-
- ' Cursor Right
- CASE 77
- IF POS(0) < FSet% + (LEN(FOut$) + 1) THEN
- LOCATE , POS(0) + 1
- ELSE
- Alarm% = True
- END IF
-
- ' Cursor Left
- CASE 75
- IF POS(0) > FSet% + 1 THEN
- LOCATE , POS(0) - 1
- ELSE
- Alarm% = True
- END IF
-
- ' Delete
- CASE 83
- IF POS(0) - FSet% <= LEN(FOut$) THEN
- Shift$ = MID$(FOut$, (POS(0) - FSet%) + 1)
- FOut$ = LEFT$(FOut$, ((POS(0) - FSet%) - 1))_
- + Shift$
- FTempPos% = POS(0)
- LOCATE , , 0
- PRINT MID$(FOut$, POS(0) - FSet%); CHR$(32);
- LOCATE , FTempPos%, 1
- ELSE
- Alarm% = True
- END IF
-
- ' Insert
- CASE 82
- IF FInsert% = False THEN
- FInsert% = True
- LOCATE , , , 0, 7
- ELSEIF FInsert% = True THEN
- FInsert% = False
- LOCATE , , , 7, 7
- END IF
-
- ' Up, Down, PgUp, PgDn, Home, End
- CASE 71, 72, 73, 79, 80, 81
- FRKey% = ASC(FIn$)
- FStop% = True
-
- ' Any other key is illegal so set alarm and loop
- CASE ELSE
- Alarm% = True
-
- END SELECT
-
- ' Check for non-extended keys
- CASE 1
-
- ' Use ASCII value to select
- SELECT CASE ASC(FIn$)
-
- ' Backspace
- CASE 8
- IF POS(0) - FSet% > 1 THEN
- IF POS(0) - FSet% > LEN(FOut$) THEN
- FOut$ = LEFT$(FOut$, LEN(FOut$) - 1)
- FTempPos% = POS(0)
- LOCATE , POS(0) - 1, 0
- PRINT CHR$(32);
- LOCATE , FTempPos% - 1, 1
- ELSEIF POS(0) - FSet% <= LEN(FOut$) THEN
- Shift$ = MID$(FOut$, POS(0) - FSet%)
- FOut$ = LEFT$(FOut$, ((POS(0) - FSet%) - 2))_
- + Shift$
- FTempPos% = POS(0)
- LOCATE , POS(0) - 1, 0
- PRINT MID$(FOut$, POS(0) - FSet%); CHR$(32);
- LOCATE , FTempPos% - 1, 1
- END IF
- ELSE
- Alarm% = True
- END IF
-
- ' Carriage Return
- CASE 13
- FStop% = True
-
- ' Tab, Escape
- CASE 9, 27
- FRKey% = ASC(FIn$)
- FStop% = True
-
- ' Check for additional uprintable input
- CASE IS < 32, IS > 125
- Alarm% = True
-
- ' Found printable key
- CASE 32 TO 125
-
- ' If not past end of maximum length take input.
- IF POS(0) <= FSet% + FLength% THEN
-
- ' If position is less than current string length then check for insert
- ' mode on and overwrite character if insert off or insert character if on.
- IF POS(0) - FSet% <= LEN(FOut$) THEN
-
- ' Insert mode off?
- IF FInsert% = False THEN
- MID$(FOut$, POS(0) - FSet%, 1) = FIn$
- PRINT FIn$;
-
- ' Insert mode on?
- ELSEIF FInsert% = True THEN
-
- ' Check length of string plus input and take input if less than max lenth.
- IF LEN(FOut$) < FLength% THEN
- Shift$ = MID$(FOut$, POS(0) - FSet%)
- FOut$ = LEFT$(FOut$, (POS(0) - FSet%) - 1)_
- + FIn$ + Shift$
- FTempPos% = POS(0)
- LOCATE , , 0
- PRINT MID$(FOut$, POS(0) - FSet%);
- LOCATE , FTempPos% + 1, 1
-
- ' If string plus input too long sound alarm and return.
- ELSE
- Alarm% = True
- END IF
- END IF
-
- ' If string position greater than current string length then add character.
- ELSEIF POS(0) - FSet% > LEN(FOut$) THEN
- FOut$ = FOut$ + FIn$
- PRINT FIn$;
- END IF
-
- ' Cursor past end of field so input is illegal
- ELSE
- Alarm% = True
- END IF
-
- ' Any other key is illegal so set alarm and loop
- CASE ELSE
- Alarm% = True
-
- END SELECT
-
- END SELECT
-
- LOOP
-
- ' Exit, reset cursor, reset insert mode, assign passed variable
- LOCATE , , 0, 7, 7
- FInsert% = False
- FTemp$ = FOut$
-
- END SUB
-
-