'=========================================================================== ' Subject: K.I.S.S. EDITOR Date: 12-02-95 (00:00) ' Author: Kurt Kuzba Code: QB, QBasic, PDS ' Origin: FidoNet QUIK_BAS Echo Packet: TEXT.ABC '=========================================================================== '_|_|_| KISSED.BAS '_|_|_| Keep It Simple, Stupid EDitor [ Qbasic / QuickBasic ] '_|_|_| Released to the PUBLIC DOMAIN by Kurt Kuzba (12/02/95) CLEAR ' $DYNAMIC TYPE TXT L AS STRING * 80 END TYPE TYPE PARMS INS AS INTEGER TOP AS INTEGER LIN AS INTEGER CRS AS INTEGER TOT AS INTEGER MLA AS INTEGER MCA AS INTEGER MLZ AS INTEGER MCZ AS INTEGER WID AS INTEGER END TYPE DIM SHARED D0(800) AS TXT DIM SHARED D1(800) AS TXT DIM SHARED D2(800) AS TXT DIM SHARED CFG(3) AS PARMS DIM SHARED DOC$(6) DOC$(1) = COMMAND$ DOC$(2) = "" DOCINIT 0 DOCINIT 1 DOCINIT 2 DOC$(4) = "" DOC$(5) = "INS" IF DOC$(1) <> "" THEN DOCOPN DOC$(1), 1 ELSE DOC$(1) = "text1.txt" END IF ED% = 1 WHILE ED% <> 0 ED% = EDDOC%(ED%) WEND COLOR 2, 0 CLS SYSTEM WHATTHE: DOC$(3) = STR$(ERR) RESUME NEXT REM $STATIC ' SUB ALARM FOR T% = 0 TO 25 SOUND 2200 + 2 * T%, .1 SOUND 2225 + T%, .05 NEXT END SUB SUB CHECKMARK (D%, SH%) IF SH% THEN IF CFG(D%).MCA = 0 THEN CFG(D%).MLA = CFG(D%).LIN CFG(D%).MLZ = CFG(D%).LIN CFG(D%).MCA = CFG(D%).CRS CFG(D%).MCZ = CFG(D%).CRS END IF ELSE CFG(D%).MCA = 0 END IF END SUB SUB CLIPBOARD CFG(0).LIN = 0 CFG(0).CRS = 1 K% = 0 DOC$(0) = "CLIPBOARD [ESC] TO EXIT" WHILE K% <> 27 L% = CFG(0).LIN CFG(0).MCA = 1 CFG(0).MCZ = 80 CFG(0).MLA = L% CFG(0).MLZ = L% SHOWDOC 0 INFOBAR 0 K% = GETKEY% SELECT CASE K% CASE -71 '__HOME* CFG(0).LIN = 0 CFG(0).TOP = 0 CASE -79 '__END* L% = CFG(0).TOT - 23 IF L% < 0 THEN L% = 0 CFG(0).TOP = L% CFG(0).LIN = CFG(0).TOT - 1 CASE -73: IF L% <> 0 THEN C% = L% - 24 CFG(0).LIN = -C% * (C% >= 0) C% = CFG(0).TOP - 24 CFG(0).TOP = -C% * (C% >= 0) END IF CASE -81 '__PAGE DOWN* T% = CFG(D%).TOT - 1 P% = T% - 23 L% = L% + 24 IF L% <= (T% + 23) THEN IF L% > T% THEN L% = T% CFG(0).LIN = L% L% = CFG(0).TOP + 24 IF L% > P% THEN L% = P% CFG(0).TOP = -L% * (L% >= 0) END IF CASE -72 '__CRSR UP* L% = L% - 1 IF L% >= 0 THEN CFG(0).LIN = L% IF CFG(0).TOP > L% THEN CFG(0).TOP = L% END IF CASE -80 '__CURSOR DOWN* L% = L% + 1 IF L% < CFG(0).TOT THEN CFG(0).LIN = L% T% = CFG(0).TOP IF L% > (T% + 23) THEN CFG(0).TOP = T% + 1 END IF END SELECT WEND END SUB SUB CUTTEXT (D%) IF CFG(D%).MCA = 0 THEN T% = MSG%("No Text Marked", "") EXIT SUB END IF ORDERMARK D%, LA%, LZ%, CA%, CZ% DOCINIT 0 R% = CFG(D%).LIN I% = LZ% - LA% CFG(0).TOT = I% + 1 FOR L% = 0 TO I% CFG(0).LIN = L% CFG(D%).LIN = LA% + L% T$ = GETLINE$(D%) IF L% = I% THEN T$ = LEFT$(T$, CZ%) IF L% = 0 THEN T$ = MID$(T$, CA%) D0(L%).L = T$ NEXT CFG(D%).LIN = R% NOISE END SUB SUB DELETETEXT (D%) IF CFG(D%).MCA = 0 THEN T% = MSG%("No Text Marked", "") EXIT SUB END IF ORDERMARK D%, LA%, LZ%, CA%, CZ% L% = LZ% - LA% R% = LA% CFG(D%).CRS = CA% CFG(D%).MCA = 0 CFG(D%).LIN = LA% T$ = MID$(LEFT$(" " + GETLINE$(D%), CA%), 2) CFG(D%).LIN = LZ% P$ = RTRIM$(MID$(GETLINE$(D%), CZ% + 1)) B$ = T$ + P$ IF LA% = LZ% THEN IF B$ = "" THEN B$ = DELLINE$(D%) ELSE PUTLINE D%, B$ END IF END IF IF LZ% > LA% THEN IF P$ = "" THEN LZ% = LZ% + 1 ELSE PUTLINE D%, P$ END IF IF T$ <> "" THEN CFG(D%).LIN = LA% LA% = LA% + 1 PUTLINE D%, T$ END IF END IF IF LA% < LZ% THEN L% = LZ% - LA% Z% = CFG(D%).TOT - L% CFG(D%).TOT = Z% FOR T% = LA% TO Z% IF D% = 1 THEN D1(T%).L = D1(T% + L%).L IF D% = 2 THEN D2(T%).L = D2(T% + L%).L NEXT FOR T% = Z% TO 799 IF D% = 1 THEN D1(T%).L = "" IF D% = 2 THEN D2(T%).L = "" NEXT END IF CFG(D%).LIN = R% R% = R% - 1 IF CFG(D%).TOT < 0 THEN CFG(D%).TOT = 1 IF R% + 25 > CFG(D%).TOT THEN R% = CFG(D%).TOT - 24 CFG(D%).TOP = R% * -(R% >= 0) NOISE END SUB FUNCTION DELLINE$ (D%) L% = CFG(D%).LIN E% = CFG(D%).TOT - 1 IF D% = 1 THEN DELLINE$ = RTRIM$(D1(CFG(1).LIN).L) FOR T% = L% TO E% - 1 D1(T%).L = D1(T% + 1).L NEXT D1(E%).L = SPACE$(80) END IF IF D% = 2 THEN DELLINE$ = RTRIM$(D2(CFG(2).LIN).L) FOR T% = L% TO E% - 1 D2(T%).L = D2(T% + 1).L NEXT D2(E%).L = SPACE$(80) END IF CFG(D%).TOT = E% - (E% = L%) SHOWDOC D% END FUNCTION SUB DOCINIT (D%) FOR T% = 0 TO 799 IF D% = 0 THEN D0(T%).L = "" IF D% = 1 THEN D1(T%).L = "" IF D% = 2 THEN D2(T%).L = "" NEXT PARMSINIT D% END SUB SUB DOCOPN (F$, D%) ON ERROR GOTO WHATTHE T% = 1 DOC$(3) = "ok" IF F$ <> "" THEN OPEN F$ FOR INPUT AS #1 T$ = "File Error :: " + F$ + " :: Hit a Key" IF DOC$(3) <> "ok" THEN T% = MSG%(T$, "") EXIT SUB END IF WHILE T% = 1 L% = 0 DOCINIT D% WHILE ((L% < 800) AND (NOT EOF(1))) LINE INPUT #1, P$ P$ = RTRIM$(P$) CFG(D%).LIN = L% WHILE INSTR(P$, CHR$(9)) <> 0 P% = INSTR(P$, CHR$(9)) T$ = MID$(P$, P% + 1) T$ = " " + T$ IF P% > 1 THEN T$ = LEFT$(P$, P% - 1) + T$ P$ = T$ WEND IF LEN(P$) > 79 THEN IF L% < 799 THEN PUTLINE D%, LEFT$(P$, 79) P$ = MID$(P$, 80) L% = L% + 1 CFG(D%).LIN = L% END IF P$ = LEFT$(P$, 79) END IF PUTLINE D%, P$ L% = L% + 1 WEND T$ = "File too large. Load next section (Y/N)?" IF (NOT EOF(1)) THEN T% = MSG%(T$, "yn") ELSE T% = 0 END IF WEND CLOSE 1 CFG(D%).TOT = L% CFG(D%).LIN = 0 ALARM DOC$(D%) = UCASE$(F$) END SUB FUNCTION EDDOC% (D%) DEF SEG = 0 EDDOC% = D% IF D% = 0 THEN GOTO CYCLE SHOWDOC D% EDIT$ = "YES" S$ = SPACE$(80) WHILE EDIT$ = "YES" T$ = GETLINE$(D%) + S$ L% = CFG(D%).LIN C% = CFG(D%).CRS SHOWDOC D% INFOBAR D% LOCATE L% - CFG(D%).TOP + 2, C%, 1, 13 * CFG(D%).INS, 13 K% = GETKEY% SH% = ((PEEK(&H417) AND 3) <> 0) W% = CFG(D%).WID IF K% = 9 THEN T$ = LEFT$(T$, C% - 1) + SPACE$(9) + MID$(T$, C%) K% = 32 C% = C% + 9 END IF SELECT CASE K% CASE 32 TO 254 '__TEXT* IF CFG(D%).INS <> 0 THEN MID$(T$, C% + 1) = MID$(T$, C%) MID$(T$, C%) = CHR$(K%) T$ = RTRIM$(T$) IF (LEN(T$) > W%) THEN P$ = MID$(T$, W% + 1) T$ = LEFT$(T$, W%) T% = 0 WHILE T% = 0 R$ = RIGHT$(T$, 1) L% = LEN(T$) T% = INSTR("*+\]}:)/- ", R$) - (L% < (W% * .75)) IF T% = 0 THEN P$ = R$ + P$ T$ = LEFT$(T$, L% - 1) END IF WEND PUTLINE D%, T$ L% = CFG(D%).LIN T% = LEN(T$) IF L% < 799 THEN CFG(D%).LIN = L% + 1 INSLINE D%, P$ END IF IF C% > W% AND L% < 799 THEN C% = C% - T% L% = L% + 1 END IF CFG(D%).LIN = L% IF C% > W% AND L% > 788 THEN C% = T% ELSE PUTLINE D%, T$ END IF CFG(D%).CRS = C% + 1 CASE 8 '__BACKSPACE* L% = CFG(D%).LIN T% = LEN(RTRIM$(T$)) IF (C% = 1) AND (L% = 0) THEN GOTO CYCLE IF C% > 1 THEN IF T% <> 0 THEN MID$(T$, C% - 1) = MID$(T$, C%) + " " CFG(D%).CRS = C% - 1 PUTLINE D%, T$ ELSE LINECAT D%, L% - 1 END IF CASE -83 '__DELETE* T% = LEN(RTRIM$(T$)) IF C% <= T% THEN MID$(T$, C%) = MID$(T$, C% + 1) + " " PUTLINE D%, T$ ELSE LINECAT D%, CFG(D%).LIN END IF CASE -82 '__INSERT* T$ = DOC$(6) IF SH% THEN IF T$ <> "" THEN INSLINE D%, T$ CFG(D%).CRS = 1 END IF ELSE CFG(D%).INS = ABS(CFG(D%).INS - 1) NOISE END IF CASE 13 '__ENTER* L% = CFG(D%).LIN IF L% >= 799 THEN GOTO CYCLE IF C% = 1 THEN P$ = "" ELSE P$ = LEFT$(T$, C% - 1) END IF PUTLINE D%, P$ CFG(D%).LIN = L% + 1 INSLINE D%, MID$(T$, C%) CFG(D%).CRS = 1 CASE -61, -38 '__ALT/L or F3* SAVEQRY D% LOADDOC D% GOTO CYCLE CASE -60, -31 '__ALT/S or F2* SAVEDOC D% CASE 27, -45 '__ESCAPE or CTRL/X : exit editor* EDIT$ = "NO" CASE -94 '__CTRL/F1 : switch to Document 1* IF DOC$(1) = "" THEN DOC$(1) = "text1.txt" EDDOC% = 1 GOTO CYCLE CASE -95 '__CTRL/F2 : switch to Document 2* IF DOC$(2) = "" THEN DOC$(2) = "text2.txt" EDDOC% = 2 GOTO CYCLE CASE -96 '__CTRL/F3* CLIPBOARD CASE 25 '__CTRL/Y* DOC$(6) = DELLINE$(D%) CFG(D%).CRS = 1 CASE -71 '__HOME* CHECKMARK D%, SH% CFG(D%).CRS = 1 SETMARK D%, SH% CASE -79 '__END* CHECKMARK D%, SH% C% = LEN(RTRIM$(T$)) + 1 CFG(D%).CRS = -C% * (C% < 81) - 80 * (C% > 80) SETMARK D%, SH% CASE -119 '__CTRL/HOME* CHECKMARK D%, SH% CFG(D%).CRS = 1 CFG(D%).LIN = CFG(D%).TOP SETMARK D%, SH% CASE -117 '__CTRL/END* CHECKMARK D%, SH% C% = CFG(D%).TOP + 23 T% = CFG(D%).TOT - 1 IF C% >= T% THEN C% = T% CFG(D%).LIN = C% T$ = RTRIM$(GETLINE$(D%)) T% = LEN(T$) CFG(D%).CRS = T% - (T% < 80) SETMARK D%, SH% CASE -132 '__CTRL/PAGE UP* CHECKMARK D%, SH% CFG(D%).TOP = 0 CFG(D%).LIN = 0 CFG(D%).CRS = 1 SETMARK D%, SH% CASE -118 '__CTRL/PAGE DOWN* CHECKMARK D%, SH% C% = CFG(D%).TOT CFG(D%).TOP = -(C% - 24) * (C% > 23) CFG(D%).LIN = C% - 1 CFG(D%).CRS = 1 SETMARK D%, SH% CASE -73 '__PAGE UP* CHECKMARK D%, SH% IF L% = 0 THEN GOTO CYCLE C% = L% - 24 CFG(D%).LIN = -C% * (C% >= 0) C% = CFG(D%).TOP - 24 CFG(D%).TOP = -C% * (C% >= 0) SETMARK D%, SH% CASE -81 '__PAGE DOWN* CHECKMARK D%, SH% T% = CFG(D%).TOT - 1 P% = T% - 23 L% = CFG(D%).LIN + 24 IF L% > (T% + 23) THEN GOTO CYCLE IF L% > T% THEN L% = T% CFG(D%).LIN = L% L% = CFG(D%).TOP + 24 IF L% > P% THEN L% = P% CFG(D%).TOP = -L% * (L% >= 0) SETMARK D%, SH% CASE -72 '__CRSR UP* CHECKMARK D%, SH% L% = L% - 1 IF L% < 0 THEN GOTO CYCLE CFG(D%).LIN = L% IF CFG(D%).TOP > L% THEN CFG(D%).TOP = L% SETMARK D%, SH% CASE -80 '__CURSOR DOWN* CHECKMARK D%, SH% L% = L% + 1 IF L% >= CFG(D%).TOT THEN GOTO CYCLE CFG(D%).LIN = L% T% = CFG(D%).TOP IF L% > (T% + 23) THEN CFG(D%).TOP = T% + 1 SETMARK D%, SH% CASE -75 '__CURSOR LEFT* CHECKMARK D%, SH% IF C% = 1 THEN GOTO CYCLE CFG(D%).CRS = C% - 1 SETMARK D%, SH% CASE -77 '__CURSOR RIGHT* CHECKMARK D%, SH% IF C% > 79 THEN GOTO CYCLE CFG(D%).CRS = C% + 1 SETMARK D%, SH% CASE -46 '__ALT/C :: CUT TEXT* CUTTEXT D% CASE -32 '__ALT/D :: DELETE TEXT* DELETETEXT D% CASE -25 '__ALT/P :: PASTE TEXT* PASTETEXT D% CASE -59, -35 '__ALT/H OR F1 :: HELP* HELP CASE -115 '__CTRL/LEFT* CFG(D%).WID = W% + (W% > 10) CASE -116 '__CTRL/RIGHT* CFG(D%).WID = W% - (W% < 79) END SELECT WEND T$ = CHR$(13) + "yn " + CHR$(27) SAVEQRY D% EDDOC% = -D% * (MSG("Exit KISSED (Y/N)?", T$) > 2) CYCLE: NOISE DEF SEG END FUNCTION FUNCTION GETKEY% T$ = "" WHILE T$ = "" T$ = INKEY$ WEND GETKEY% = ASC(T$) IF ASC(T$) = 0 THEN GETKEY% = -ASC(MID$(T$, 2)) END FUNCTION FUNCTION GETLINE$ (D%) GETLINE$ = "" IF D% = 1 THEN GETLINE$ = D1(CFG(1).LIN).L IF D% = 2 THEN GETLINE$ = D2(CFG(2).LIN).L END FUNCTION FUNCTION GETSTR$ (P$, D$, M%) PCOPY 0, 1 SCREEN , , 1, 1 L% = 7 + LEN(P$) + M% INS% = 1 Y% = 40 - L% \ 2 X% = 11 COLOR 9, 1 LOCATE X%, Y% FOR T% = 1 TO 3 LOCATE , Y% PRINT STRING$(L%, CHR$(176)) NEXT LOCATE X% + 1, Y% + 2 COLOR 15, 4 PRINT " "; P$; " "; X% = CSRLIN Y% = POS(0) PRINT SPACE$(M% + 1); D$ = LEFT$(D$ + SPACE$(M%), M%) B$ = CHR$(29) P% = (LEN(RTRIM$(D$)) MOD M%) + 1 WHILE T% <> 13 LOCATE , Y%, 0 COLOR 14, 4 PRINT D$; COLOR 1, 7 LOCATE , Y% + P% - 1, INS%, 13, 13 PRINT MID$(D$, P%, 1); B$; T% = GETKEY% SELECT CASE T% CASE 32 TO 127 IF INS% <> 0 THEN D$ = LEFT$(LEFT$(D$, P%) + MID$(D$, P%), M%) MID$(D$, P%) = CHR$(T%) IF P% < M% THEN P% = (P% MOD M%) + 1 CASE 8 IF P% > 1 THEN MID$(D$, P% - 1) = MID$(D$, P%) + " " P% = P% + (P% > 1) IF P% = 1 THEN SOUND 1000, .1 CASE 27 D$ = "" T% = 13 CASE -82 INS% = ABS(INS% - 1) CASE -83 MID$(D$, P%) = MID$(D$, P% + 1) + " " CASE -75 P% = ((P% - 2 + M%) MOD M%) + 1 CASE -77 P% = (P% MOD M%) + 1 CASE 25 D$ = SPACE$(M%) P% = 1 CASE -71 P% = 1 CASE -79 P% = LEN(RTRIM$(D$)) P% = P% - (P% <> M%) END SELECT WEND SCREEN , , 0, 0 GETSTR$ = RTRIM$(D$) END FUNCTION SUB HELP SCREEN , , 1, 1 COLOR 11, 1 CLS T$ = STRING$(80, CHR$(177)) FOR T% = 1 TO 25 LOCATE T%, 1 PRINT T$; NEXT COLOR 14, 0 LOCATE 3, 7, 0 PRINT "____NORMAL KEYS_______________" LOCATE , 7 PRINT " Left Arrow (Cursor Left) " LOCATE , 7 PRINT " Right Arrow (Cursor Right) " LOCATE , 7 PRINT " Up Arrow (Cursor Up) " LOCATE , 7 PRINT " Down Arrow (Cursor Down) " LOCATE , 7 PRINT " Page Up (Cursor Page UP) " LOCATE , 7 PRINT " Page Down (Cursor Page Down) " LOCATE , 7 PRINT " Home (Cursor Home) " LOCATE , 7 PRINT " End (Cursor End) " LOCATE , 7 PRINT " Insert (Toggle Insert) " LOCATE , 7 PRINT " Delete (Delete) " LOCATE , 7 PRINT " F1 (Help) " LOCATE , 7 PRINT " F2 (Load Text) " LOCATE , 7 PRINT " F3 (Save Text) " LOCATE , 7 PRINT " ESCAPE (EXIT EDITOR) " LOCATE 19, 7 PRINT "____SHIFT KEYS________________" LOCATE , 7 PRINT " Insert (Insert CTRL/Y Line) " LOCATE , 7 PRINT " Any Cursor movement key " LOCATE , 7 PRINT " with SHIFT will mark text. " LOCATE 3, 45 PRINT "____CONTROL KEYS______________" LOCATE , 45 PRINT " F1 (Document 1) " LOCATE , 45 PRINT " F2 (Document 2) " LOCATE , 45 PRINT " F3 (View Clipboard) " LOCATE , 45 PRINT " Home (Page Top) " LOCATE , 45 PRINT " End (Page Bottom) " LOCATE , 45 PRINT " Page Up (Text top) " LOCATE , 45 PRINT " Page Down (Text Bottom) " LOCATE , 45 PRINT " Left Arrow (-line length) " LOCATE , 45 PRINT " Right Arrow (+line length) " LOCATE , 45 PRINT " CTRL/Y (Delete Line) " LOCATE 17, 45 PRINT "____ALT KEYS__________________" LOCATE , 45 PRINT " ALT/H (Help) " LOCATE , 45 PRINT " ALT/C (Copy To Clipboard) " LOCATE , 45 PRINT " ALT/D (Delete Marked Text) " LOCATE , 45 PRINT " ALT/P (Paste ClipBoard) " LOCATE , 45 PRINT " ALT/X (EXIT) " T% = GETKEY% SCREEN , , 0, 0 END SUB SUB INFOBAR (D%) P$ = SPACE$(80) MID$(P$, 7) = "l" + MID$(STR$(CFG(D%).LIN + 1), 2) MID$(P$, 27) = STR$(CFG(D%).TOT) + " lines" MID$(P$, 40) = DOC$(D%) MID$(P$, 24) = CHR$(64 + D%) MID$(P$, 18) = DOC$(CFG(D%).INS + 4) MID$(P$, 13) = "w" + MID$(STR$(CFG(D%).WID), 2) LOCATE 1, 1 MID$(P$, 2) = "c" + MID$(STR$(CFG(D%).CRS), 2) COLOR 15, 1 PRINT P$; END SUB SUB INSLINE (D%, S$) L% = CFG(D%).LIN IF D% = 1 THEN FOR T% = 799 TO L% + 1 STEP -1 D1(T%).L = D1(T% - 1).L NEXT D1(CFG(1).LIN).L = S$ END IF IF D% = 2 THEN FOR T% = 799 TO L% + 1 STEP -1 D2(T%).L = D2(T% - 1).L NEXT D2(CFG(2).LIN).L = S$ END IF IF CFG(D%).TOT < 800 THEN CFG(D%).TOT = CFG(D%).TOT + 1 SHOWDOC D% END SUB SUB LINECAT (D%, L%) R% = CFG(D%).LIN CFG(D%).LIN = L% + 1 P$ = RTRIM$(GETLINE$(D%)) C% = CFG(D%).CRS CFG(D%).LIN = L% T$ = GETLINE$(D%) IF R% = L% THEN T$ = LEFT$(T$, C% - 1) IF R% <> L% THEN T$ = RTRIM$(T$) CFG(D%).CRS = LEN(T$) + 1 END IF T$ = T$ + P$ T% = LEN(T$) IF T% < 80 THEN P$ = DELLINE$(D%) IF LEN(T$) > 79 THEN CFG(D%).LIN = L% + 1 PUTLINE D%, MID$(T$, 80) END IF CFG(D%).LIN = L% PUTLINE D%, LEFT$(T$, 79) SHOWDOC D% END SUB SUB LOADDOC (D%) DN$ = GETSTR$("Load File?", "", 32) IF DN$ <> "" THEN DOCOPN DN$, D% END SUB FUNCTION MSG% (M$, P$) M% = LEN(M$) P$ = UCASE$(P$) PCOPY 0, 1 SCREEN , , 1, 1 IF P$ = "" THEN P$ = CHR$(13) + CHR$(27) + " " WHILE INKEY$ <> "" WEND C% = 37 - (M% + 1) \ 2 LOCATE 10, C% COLOR 9, 1 LOCATE 11, C%, 0 PRINT STRING$(M% + 6, CHR$(176)) LOCATE , C% PRINT CHR$(176); CHR$(176); COLOR 14, 4 PRINT " "; M$; " "; COLOR 9, 1 PRINT CHR$(176); CHR$(176) LOCATE , C% PRINT STRING$(M% + 6, CHR$(176)) ALARM T% = 0 WHILE INSTR(P$, UCASE$(CHR$(T%))) < 1 T% = GETKEY% WEND SCREEN , , 0, 0 MSG% = INSTR(P$, UCASE$(CHR$(T%))) END FUNCTION SUB NOISE SOUND 1000, .1 END SUB SUB ORDERMARK (D%, LA%, LZ%, CA%, CZ%) CA% = CFG(D%).MCA LA% = CFG(D%).MLA CZ% = CFG(D%).MCZ LZ% = CFG(D%).MLZ LA& = LA% LZ& = LZ% LA& = LA& * 80 + CA% LZ& = LZ& * 80 + CZ% IF LA& > LZ& THEN SWAP LA%, LZ% SWAP CA%, CZ% END IF END SUB SUB PARMSINIT (D%) CFG(D%).INS = 1 CFG(D%).TOP = 0 CFG(D%).LIN = 0 CFG(D%).CRS = 1 CFG(D%).TOT = 1 CFG(D%).MLA = 0 CFG(D%).MCA = 0 CFG(D%).MLZ = 0 CFG(D%).MCZ = 0 CFG(D%).WID = 70 END SUB SUB PASTETEXT (D%) IF CFG(0).TOT = 1 AND RTRIM$(D0(0).L) = "" THEN T% = MSG%("No text in Clipboard", "") EXIT SUB END IF L% = CFG(D%).LIN R% = L% C% = CFG(D%).CRS CFG(D%).MCA = 0 O% = CFG(0).TOT I% = O% - 1 E% = CFG(D%).TOT IF (C% > 1) AND (I% = 0) THEN T$ = GETLINE$(D%) + SPACE$(80) T$ = RTRIM$(LEFT$(T$, C% - 1) + RTRIM$(D0(0).L) + MID$(T$, C%)) PUTLINE D%, LEFT$(T$, 79) IF LEN(T$) > 79 AND L% < 799 THEN CFG(D%).LIN = L% + 1 INSLINE D%, MID$(T$, 80) CFG(D%).LIN = L% END IF NOISE EXIT SUB END IF FOR T% = 799 TO L% STEP -1 IF T% - 0 >= 0 THEN IF D% = 1 THEN D1(T%).L = D1(T% - O%).L IF D% = 2 THEN D2(T%).L = D2(T% - O%).L END IF NEXT FOR T% = 0 TO I% IF D% = 1 THEN D1(T% + L%).L = D0(T%).L IF D% = 2 THEN D2(T% + L%).L = D0(T%).L NEXT CFG(D%).TOT = E% + O% IF E% + O% > 800 THEN CFG(D%).TOT = 800 NOISE END SUB SUB PUTLINE (D%, T$) IF D% = 1 THEN D1(CFG(D%).LIN).L = LEFT$(T$ + SPACE$(80), 80) IF D% = 2 THEN D2(CFG(D%).LIN).L = LEFT$(T$ + SPACE$(80), 80) END SUB SUB SAVEDOC (D%) ON ERROR GOTO WHATTHE DOC$(3) = "ok" L% = CFG(D%).LIN CFG(D%).LIN = 0 T% = CFG(D%).TOT P$ = RTRIM$(GETLINE$(D%)) IF P$ = "" AND T% = 1 THEN T% = MSG%("No Text", "") EXIT SUB END IF DN$ = DOC$(D%) DN$ = GETSTR$("Save As?", DN$, 32) IF DN$ = "" THEN CFG(D%).LIN = L% EXIT SUB END IF DOC$(D%) = DN$ OPEN DN$ FOR OUTPUT AS #1 IF DOC$(3) <> "ok" THEN T% = MSG%("File Error :: Hit a Key", "") ELSE FOR P% = 0 TO T% - 1 CFG(D%).LIN = P% P$ = RTRIM$(GETLINE$(D%)) IF P$ = "" THEN P$ = " " PRINT #1, P$ NEXT CFG(D%).LIN = L% ALARM CLOSE 1 END IF END SUB SUB SAVEQRY (D%) L% = CFG(D%).LIN CFG(D%).LIN = 0 T% = CFG(D%).TOT CFG(D%).LIN = L% P$ = RTRIM$(GETLINE$(D%)) IF P$ = "" AND T% = 1 THEN NOISE EXIT SUB END IF T% = MSG%("Save Current Document (Y:N)?", " ny" + CHR$(13)) IF T% > 2 THEN NOISE SAVEDOC D% ELSE ALARM END IF END SUB SUB SETMARK (D%, SH%) IF SH% = 0 THEN EXIT SUB L% = CFG(D%).LIN C% = CFG(D%).CRS L& = L% L& = L& * 80 + C% A% = CFG(D%).MLA A& = A% A& = A% * 80 + CFG(D%).MCA CFG(D%).MLZ = L% CFG(D%).MCZ = C% END SUB SUB SHOWDOC (D%) L% = CFG(D%).LIN T% = CFG(D%).TOP COLOR 10, 0 LOCATE , , 0 IF T% + 23 < L% THEN T% = L% - 23 CFG(D%).TOP = T% END IF FOR B% = 0 TO 23 L% = B% + T% IF L% > 799 THEN LOCATE 2 + B%, 1 PRINT SPACE$(80); ELSE SHOWLINE D%, L%, 2 + B% END IF NEXT END SUB SUB SHOWLINE (D%, L%, S%) LA% = 0 LZ% = 0 CA% = 0 CZ% = 0 IF CFG(D%).MCA <> 0 THEN ORDERMARK D%, LA%, LZ%, CA%, CZ% IF D% = 0 THEN T$ = D0(L%).L + SPACE$(80) IF D% = 1 THEN T$ = D1(L%).L + SPACE$(80) IF D% = 2 THEN T$ = D2(L%).L + SPACE$(80) LOCATE S%, 1 COLOR 10, 0 IF CA% = 0 OR (LA% > L%) OR (LZ% < L%) THEN PRINT LEFT$(T$, 80); ELSE IF LA% = LZ% THEN IF CA% > 1 THEN PRINT LEFT$(T$, CA% - 1); COLOR 0, 3 PRINT MID$(T$, CA%, CZ% - CA% + 1); COLOR 10, 0 PRINT MID$(T$, CZ% + 1, 80 - CZ%); ELSE IF (L% > LA%) AND (L% < LZ%) THEN COLOR 0, 3 PRINT LEFT$(T$, 80); ELSE IF L% = LA% THEN IF CA% > 1 THEN PRINT LEFT$(T$, CA% - 1); COLOR 0, 3 PRINT MID$(T$, CA%, 81 - CA%); ELSE COLOR 0, 3 PRINT LEFT$(T$, CZ%); COLOR 10, 0 PRINT MID$(T$, CZ% + 1, 80 - CZ%); END IF END IF END IF END IF END SUB