home *** CD-ROM | disk | FTP | other *** search
- '* ---------- Anfang READSTR.BAS ------------------------- *
- DECLARE FUNCTION ReadStr$ (ES$, EL%, UpL%, L$, i%, S%, Lin%)
- '* ------------------------------------------------------- *
- '* READSTR.BAS *
- '* Komfortable Inputeingabe für Quickbasic *
- '* (c) 1990 Kay Glahn & TOOLBOX *
- '* ------------------------------------------------------- *
- FUNCTION ReadStr$ (ES$, EL%, UpL%, L$, i%, S%, Lin%)
- '* ES$ = Vorgabestring
- '* EL% = maximale Länge des Strings
- '* UpL% = -1 => alles in Kleinbuchstaben
- '* = 0 => Schreibweise belassen
- '* = 1 => alles in Großbuchstaben
- '* L$ = String mit abzulehnenden Zeichen oder
- '* mit Zeichen die angenommen werden
- '* i% = 0 => Zeichen in L$ werden abgelehnt
- '* 1 => Zeichen in L$ werden angenommen
- '* S% = 0 => Sound aus
- '* 1 => Sound ein
- '* Lin% = liefert den Wert 27 für <ESC> als letzte Taste
- '* oder 13 für <RET> zurück
- y% = CSRLIN: x% = POS(0)
- Entr$ = LEFT$(ES$, EL%): EL% = EL% - 1
- LOCATE y%, x%, 0: PRINT SPACE$(EL% + 1);
- LOCATE y%, x%, 1, 6, 7: PRINT Entr$;
- Curp% = LEN(Entr$): Insmode% = 1: Ready% = 0
- DO
- DO
- Ch$ = INKEY$
- LOOP UNTIL Ch$ <> ""
- SELECT CASE UpL%
- CASE IS = -1
- Ch$ = LCASE$(Ch$)
- CASE IS = 1
- Ch$ = UCASE$(Ch$)
- END SELECT
- IF LEN(Ch$) = 2 THEN
- Chh$ = RIGHT$(Ch$, 1): Ch$ = CHR$(0)
- Chh$ = UCASE$(Chh$)
- END IF
- SELECT CASE Ch$
- CASE IS = CHR$(13)
- Lin% = 13: Ready% = 1
- CASE IS = CHR$(27)
- Lin% = 27: Ready% = 1
- CASE IS = CHR$(8)
- IF Curp% > 0 THEN
- Inter$ = Entr$
- FOR C% = Curp% TO LEN(Entr$) - 1
- MID$(Inter$, C%, 1) = MID$(Entr$, C% + 1, 1)
- NEXT C%
- Entr$ = LEFT$(Inter$, LEN(Inter$) - 1)
- Curp% = Curp% - 1
- LOCATE y%, x%, 0: PRINT Entr$; " ";
- LOCATE y%, x% + Curp%, 1
- END IF
- CASE IS = CHR$(127)
- Curp% = 0: Entr$ = "": LOCATE y%, x%
- PRINT SPACE$(EL% + 1); : LOCATE y%, x%
- CASE IS = CHR$(0)
- SELECT CASE Chh$
- CASE IS = "R"
- IF Insmode% THEN
- Insmode% = 0: LOCATE , , 1, 0, 17
- ELSE
- Insmode% = 1: LOCATE , , 1, 6, 7
- END IF
- CASE IS = "G"
- Curp% = 0: LOCATE y%, x%, 1
- PRINT Entr$; " "; : LOCATE y%, x%, 1
- CASE IS = "O"
- Curp% = LEN(Entr$): LOCATE y%, x%, 1
- PRINT Entr$; : LOCATE y%, x% + Curp%, 1
- CASE IS = "S"
- IF Curp% >= 0 AND Curp% <> LEN(Entr$) THEN
- FOR C% = Curp% + 1 TO LEN(Entr$) - 1
- MID$(Entr$, C%, 1) = MID$(Entr$, C% + 1, 1)
- NEXT C%
- Entr$ = LEFT$(Entr$, LEN(Entr$) - 1)
- LOCATE y%, x%, 1: PRINT Entr$; " ";
- LOCATE y%, x% + Curp%
- END IF
- CASE IS = "K"
- IF Curp% <> 0 THEN
- Curp% = Curp% - 1
- LOCATE y%, x% + Curp%
- END IF
- CASE IS = "M"
- IF Curp% <> LEN(Entr$) THEN
- Curp% = Curp% + 1
- LOCATE y%, x% + Curp%
- END IF
- CASE ELSE
- IF S% = 1 THEN SOUND 600, .5
- END SELECT
- CASE ELSE
- IF INSTR(1, L$, Ch$) = 0 THEN
- IF i% = 0 THEN
- Show% = 1
- ELSE
- Show% = 0
- END IF
- ELSE
- IF i% = 0 THEN
- Show% = 0
- ELSE
- Show% = 1
- END IF
- END IF
- IF Show% = 1 THEN
- IF LEN(Entr$) <= EL% THEN
- IF Curp% >= LEN(Entr$) THEN
- Entr$ = Entr$ + Ch$
- Curp% = Curp% + 1: PRINT Ch$;
- ELSE
- IF Insmode% THEN
- S1$ = LEFT$(Entr$, Curp%)
- S2$ = RIGHT$(Entr$, LEN(Entr$) - Curp%)
- Entr$ = S1$ + Ch$ + S2$
- LOCATE y%, x%, 1, 6, 7: PRINT Entr$; " ";
- Curp% = Curp% + 1
- LOCATE y%, Curp% + x%, 1
- ELSE
- PRINT Ch$;
- Curp% = Curp% + 1
- MID$(Entr$, Curp%, 1) = Ch$
- END IF
- END IF
- ELSE
- IF Curp% <= EL% THEN
- IF Insmode% THEN
- S1$ = LEFT$(Entr$, Curp%)
- S2$ = RIGHT$(Entr$, LEN(Entr$) - LEN(S1$))
- Entr$ = S1$ + Ch$ + S2$
- Entr$ = LEFT$(Entr$, LEN(Entr$) - 1)
- Curp% = Curp% + 1
- LOCATE y%, x%, 1, 6, 7
- PRINT Entr$; " ";
- LOCATE y%, Curp% + x%, 1
- ELSE
- PRINT Ch$;
- Curp% = Curp% + 1
- MID$(Entr$, Curp%, 1) = Ch$
- END IF
- END IF
- END IF
- ELSE
- IF S% = 1 THEN SOUND 600, .5
- END IF
- END SELECT
- LOOP UNTIL Ready%
- ReadStr$ = Entr$: LOCATE , , 0
- END FUNCTION
- '* ------------------------------------------------------- *
- '* Ende von READSTR.BAS *