'=========================================================================== ' Subject: MULTI-LINE EDIT Date: 01-01-97 (22:23) ' Author: Brian Bacon Code: QB, QBasic, PDS ' Origin: FidoNet QUIK_BAS Echo Packet: TEXT.ABC '=========================================================================== 'Multi-line edit DECLARE SUB MLedit (Text$(), Row, Col, Ln, Hg, Fg, Bg, KeyCode) ' Row, Col - Row/Col of upper left corner ' Ln - Max length of each line ' Hg - Total number of lines to edit ' Fg, Bg - foreground/background color of edit box ' KeyCode - Key used to exit (27=esc, 13=ctrl-enter or max lines ' reached) ' ' This routine exits if you hit ENTER on the last edit-able line DIM SHARED TypeOver TypeOver = 1 ' On TypeOver = -2 ' Off CLS DIM T$(20) T$(1) = "Press ESC to abort" T$(2) = "Press CTRL-ENTER to end editing" T$(3) = "Press HOME or END to go to the Beginning/End of the line" T$(4) = "Press CTRL-HOMEor CTRL-END to go to the Beginning/End of " T$(4) = T$(4) + "the input" T$(5) = "Use the cursor keys to move around." T$(6) = "Unfortunatly MLedit doesnt support word wrapping." T$(7) = "You can use INS and DEL though.. and BACKSPACE will work" T$(7) = T$(7) + " ANYWHERE" MLedit T$(), 1, 1, 80, 20, 15, 1, KC 'Multi-Line Edit by Brian Bacon SUB MLedit (Text$(), Row, Col, Ln, Hg, Fg, Bg, KeyCode) COLOR Fg, Bg FOR I = 0 TO Hg - 1 LOCATE Row + I, Col PRINT SPACE$(Ln) NEXT I LOCATE Row, Col FOR I = 1 TO UBOUND(Text$) PRINT Text$(I) NEXT I FOR I = 1 TO UBOUND(Text$) IF Text$(I) <> "" THEN f = I NEXT I c = Col + LEN(Text$(f)) r = Row + f - 1 EdN = f DIM EdText$(UBOUND(Text$)) FOR I = 1 TO UBOUND(Text$) EdText$(I) = Text$(I) NEXT I DEF SEG = 0 IF PEEK(&H463) = &HB4 THEN CsrSize = 12 ELSE CsrSize = 7 END IF DEF SEG DO IF TypeOver = 1 THEN TopLine = CsrSize \ 2 ELSE TopLine = CsrSize - 1 END IF LOCATE r, c, 1, TopLine, CsrSize DO A$ = INKEY$ LOOP UNTIL LEN(A$) SELECT CASE A$ CASE CHR$(27): KeyCode = 27: EXIT SUB CASE CHR$(10) 'Ctrl-Enter KeyCode = 13 FOR I = 1 TO UBOUND(Text$) EdText$(I) = Text$(I) NEXT I EXIT SUB CASE CHR$(13) IF EdN = UBOUND(Text$) THEN KeyCode = 13 FOR I = 1 TO UBOUND(Text$) EdText$(I) = Text$(I) NEXT I EXIT SUB ELSE EdN = EdN + 1 r = r + 1 c = Col END IF CASE CHR$(0) + CHR$(&H4D) 'right IF c = Col + Ln - 1 AND r = Row + Hg - 1 THEN BEEP ELSEIF c = Col + Ln - 1 AND r < Row + Hg - 1 THEN r = r + 1 c = Col EdN = EdN + 1 ELSE c = c + 1 END IF CASE CHR$(0) + CHR$(&H4B) 'left IF c = Col AND r = Row THEN BEEP ELSEIF c = Col AND r > Row THEN r = r - 1 c = Col + Ln - 1 EdN = EdN - 1 ELSE c = c - 1 END IF CASE CHR$(0) + CHR$(&H48) 'up IF r = Row THEN BEEP ELSE r = r - 1: EdN = EdN - 1 CASE CHR$(0) + CHR$(&H50) 'down IF r = Row + Hg - 1 THEN BEEP ELSE r = r + 1 EdN = EdN + 1 END IF CASE CHR$(0) + CHR$(&H4F) 'end c = Col + Ln - 1 CASE CHR$(0) + CHR$(&H47) 'home c = Col CASE CHR$(0) + CHR$(&H53) 'del IF LEN(EdText$(EdN)) > 0 THEN EdText$(EdN) = LEFT$(EdText$(EdN), c - Col) + MID$(EdText$(EdN), c - Col + 2) LOCATE Row + EdN - 1, Col PRINT SPACE$(Ln) LOCATE Row + EdN - 1, Col PRINT EdText$(EdN) END IF CASE CHR$(0) + CHR$(&H52) 'ins TypeOver = NOT TypeOver CASE CHR$(0) + CHR$(119) 'ctrl-home r = Row: c = Col: EdN = 1 CASE CHR$(0) + CHR$(117) 'ctrl-end r = Row + Hg - 1: c = Col + Ln - 1 EdN = UBOUND(Text$) CASE CHR$(8) IF LEN(EdText$(EdN)) > 0 AND c > 1 THEN EdText$(EdN) = LEFT$(EdText$(EdN), c - 1 - Col) + MID$(EdText$(EdN), c - Col + 1) LOCATE Row + EdN - 1, Col PRINT SPACE$(Ln) LOCATE Row + EdN - 1, Col PRINT EdText$(EdN) c = c - 1 ELSEIF EdN > 1 THEN EdN = EdN - 1 c = LEN(EdText$(EdN)) + Col IF c = 81 THEN c = 80 r = r - 1 END IF CASE CHR$(32) TO CHR$(254) IF TypeOver = 1 THEN IF c - Col + 1 > LEN(EdText$(EdN)) THEN EdText$(EdN) = EdText$(EdN) END IF MID$(EdText$(EdN), c - Col + 1) = A$ ELSE EdText$(EdN) = EdText$(EdN) + SPACE$(Ln - LEN(EdText$(EdN))) EdText$(EdN) = LEFT$(EdText$(EdN), c - Col) + A$ + MID$(EdText$(EdN), c - Col + 1) EdText$(EdN) = RTRIM$(EdText$(EdN)) IF LEN(EdText$(EdN)) > Ln THEN EdText$(EdN) = LEFT$(EdText$(EdN), Ln) END IF LOCATE r, Col PRINT SPACE$(Ln) LOCATE r, Col PRINT EdText$(EdN) c = c + 1 IF c - Col + 1 > Ln THEN r = r + 1 c = Col IF r - Row + 1 > Hg THEN r = r - 1 c = Col + Ln - 1 END IF EdN = r - Row + 1 END IF END SELECT LOOP END SUB