'=========================================================================== ' Subject: TEXT RITE (EDITOR) Date: 01-31-97 (09:45) ' Author: Christopher S. Wyatt Code: QB, QBasic, PDS ' Origin: alt.lang.basic Packet: TEXT.ABC '=========================================================================== '>Can someone please send me a simple text editor in plain Basic (QBasic or '>QB45) code. It must have the ability to print on paper, on screen; load '>files; save files; edit files;; all in a simple code. I am trying to learn '>this language, but I need some good examples. '>I will probably use this txt editor for my own purposes and not for any '>distribution of any sort. 'I never finished this program -- I was adding a cut, copy paste 'feature -- but it is functional. I stopped programming when DOS 'started to ship with a REAL editor, not EDLIN. I used Text Rite for 'years, installing it on every machine I used. 'It runs under QBASIC, QuickBasic, and PowerBASIC. Note: For PB, 'you have to change calls to PCOPY... but that's easy, it's well 'documented in the manual. I've tested it, and it does work. 'If anyone would like to continue the Text Rite challenge (a 'good BASIC editor) let me know. I'd love to see this done, if 'just to prove BASIC isn't a toy. 'Again, I was going to add: CUT/COPY/PASTE, and MOUSE calls. 'I realized AFTER I wrote the code that the menu routines were 'sloppy; I have since re-written them to be more logical. My 'newer (two or three years old!) menu routines are a lot easier 'to read and modify. I switched to TYPEd variables to enable a help 'string for each menu item. 'It's old and ugly, but here goes nothing: ' Text Rite Version 2.24.00B (15 Jul 1992) ' (c) 1984-1992 Student Oriented Software ' by C. S. Wyatt ' =====> Variable Types <===== DEFINT A-Z DECLARE SUB DelFile () DECLARE SUB DelLine (row) DECLARE SUB DelText () DECLARE SUB FileDir () DECLARE SUB FindRepl (itemnum) DECLARE SUB InputBox (inprompt$, answerlen, col, row, hide, answer$) DECLARE SUB InputText (answer$, answerlen, col, row, hide) DECLARE SUB InsLine (row) DECLARE SUB ItemBox (box$(), col, row, itemnum) DECLARE SUB LoadMode () DECLARE SUB MakeMenu () DECLARE SUB MenuCall () DECLARE SUB MenuBox () DECLARE SUB MainScreen () DECLARE SUB NewFile () DECLARE SUB NewText (edline) DECLARE SUB PosText (itemnum) DECLARE SUB PrintMode (itemnum) DECLARE SUB PrintSetup (pglines, topmar, btmar, leftmar, startnum, nummode) DECLARE SUB SaveLine () DECLARE SUB SaveMode () DECLARE SUB TextWrap () ' =====> Screen Color Variables <===== bcolor = 0: ' Background color (0-7) fcolor = 7: ' Foreground color (Text) (0-7) mcolor = 7: ' Menu bar color (0-7) ' =====> Generic & Editor Variables <===== a = 0: ' Generic numeric value a$ = "": ' Generic string linelen = 60: ' Line length newscrn = 0: ' Update text on ccreen insmode = 1: ' Insert Mode On scrnline = 3: ' Screen line marker scrncol = 1: ' Screen row marker edline = 1: ' Line being edited ' =====> Editing Variables <===== blockbeg = -1: ' Edit block (start) blockbch = -1: ' Edit block (start char) blockend = -1: ' Edit block (end) blockech = -1: ' Edit block (end char) blockmode = 0: ' Block mode toggle pasteallow = 0: ' Paste active toggle blockflag = 0: ' Block mode flag ' =====> MakeMenu Variables <===== CONST maxmenu = 10: ' Last declared menu (-1) CONST maxitem = 12: ' Maximum menu items (+2) menubar$ = " ": ' Begin building menus ' =====> I/O and Printer Variables <===== filespec$ = "": ' File selected ' =====> Arrays and Such <===== DIM SHARED menu$(maxmenu, maxitem): ' Define menu array (11x10) '$DYNAMIC DIM SHARED ibox$(1): ' Array for item menus DIM SHARED scandir(1) AS STRING * 12: ' Set # of files DIM SHARED doctxt(600) AS STRING: ' Document Text CALL MakeMenu IF COMMAND$ <> "" THEN ON ERROR GOTO ErrorTrap filespec$ = COMMAND$ scrncol = -1 CALL LoadMode END IF ProgramStart: ON ERROR GOTO ErrorTrap CALL MainScreen edline = 1 CALL NewText(1) MainLoop: DO WHILE 1 a$ = "": exkey = 0 COLOR bcolor + (8 * insmode), mcolor + (8 * insmode) LOCATE scrnline, scrncol PRINT CHR$(SCREEN(scrnline, scrncol)); VIEW PRINT LOCATE 1, 65 PRINT USING "###:##"; edline; scrncol; LOCATE 1, 75 IF blockmode = 1 THEN PRINT "BLK"; ELSE IF insmode = 1 THEN PRINT "INS"; ELSE PRINT " "; END IF VIEW PRINT 3 TO 23 WHILE a$ = "" a$ = INKEY$ COLOR mcolor + 8, bcolor LOCATE 25, 45, 0: PRINT "Date: "; DATE$; LOCATE 25, 65: PRINT "Time: "; TIME$; COLOR fcolor, bcolor IF blockmode = 1 THEN COLOR bcolor, fcolor WEND IF blockmode = 1 THEN blockend = edline: ' Edit block (end) blockech = scrncol: ' Edit block (end char) CALL NewText(edline + 3 - scrnline) END IF LOCATE scrnline, scrncol PRINT CHR$(SCREEN(scrnline, scrncol)); IF scrnline = 23 THEN CALL SaveLine CALL NewText(edline) scrnline = 3 END IF IF a$ = CHR$(27) THEN a$ = CHR$(27) + CHR$(33): ' ESC = ALT-F IF LEN(a$) > 1 THEN exkey = ASC(RIGHT$(a$, 1)) IF exkey <> 75 AND exkey <> 77 AND exkey <> 82 THEN CALL SaveLine IF exkey = 18 THEN exkey = 60: ' ALT - E IF exkey = 33 THEN exkey = 65: ' ALT - F IF exkey = 24 THEN exkey = 64: ' ALT - O IF exkey = 25 THEN exkey = 61: ' ALT - P IF exkey = 20 THEN exkey = 63: ' ALT - T IF exkey > 58 AND exkey < 69 THEN IF menu$(exkey - 59, 0) <> "" THEN menucalled = exkey - 59 newscrn = 0 blockflag = blockmode CALL MenuCall IF blockflag = 0 AND blockmode = 1 THEN blockbeg = edline: ' Edit block (start) blockbch = scrncol: ' Edit block (start char) END IF IF newscrn = 1 THEN CALL MainScreen CALL NewText(edline) END IF END IF END IF IF exkey = 71 THEN IF scrnline = 3 AND scrncol = 1 THEN edline = 1: scrnline = 3 CALL NewText(edline) END IF IF scrncol = 1 AND scrnline > 3 THEN a = scrnline - 3 edline = edline - a IF edline < 1 THEN edline = 1 scrnline = 3: scrncol = 1: ' Home CALL NewText(edline) END IF IF scrncol > 1 THEN scrncol = 1 END IF IF exkey = 72 THEN IF scrnline > 3 AND edline > 1 THEN scrnline = scrnline - 1 edline = edline - 1 ELSE IF edline > 1 THEN edline = edline - 1 scrnline = 3 CALL NewText(edline) END IF END IF IF LEN(doctxt(edline)) < scrncol THEN exkey = 79 IF blockmode = 1 THEN blockend = edline: ' Edit block (end) blockech = scrncol: ' Edit block (end char) CALL NewText(edline + 3 - scrnline) END IF END IF: ' Up IF exkey = 73 THEN edline = edline - 19 scrnline = 3: scrncol = 1 IF edline < 1 THEN edline = 1 CALL NewText(edline) END IF: ' PgUp IF exkey = 75 AND scrncol > 1 THEN scrncol = scrncol - 1: ' Left IF exkey = 77 AND scrncol < 78 THEN IF SCREEN(scrnline, scrncol) <> 255 THEN scrncol = scrncol + 1 IF blockmode = 1 THEN blockend = edline: ' Edit block (end) blockech = scrncol: ' Edit block (end char) CALL NewText(edline + 3 - scrnline) END IF END IF: ' Right IF exkey = 80 AND scrnline < 23 THEN scrnline = scrnline + 1: edline = edline + 1: ' Down IF blockmode = 1 THEN blockend = edline: ' Edit block (end) blockech = scrncol: ' Edit block (end char) CALL NewText(edline + 3 - scrnline) END IF IF LEN(doctxt(edline)) < scrncol THEN exkey = 79 END IF IF exkey = 79 AND scrncol < 79 THEN scrncol = LEN(RTRIM$(doctxt(edline))) + 1 IF scrncol > 1 THEN IF SCREEN(scrnline, scrncol - 1) = 255 THEN scrncol = scrncol - 1 END IF END IF: ' End IF exkey = 81 THEN scrnline = 3: scrncol = 1 edline = edline + 19 IF edline > UBOUND(doctxt, 1) THEN edline = UBOUND(doctxt, 1) CALL NewText(edline) END IF: ' PgDn IF exkey = 82 THEN insmode = (insmode XOR 1): ' Ins a$ = "" END IF IF a$ <> "" THEN a = ASC(a$) ELSE a = 0 IF (a$ <> "" AND insmode = 1) OR exkey = 83 THEN b$ = "" FOR t = scrncol TO 80 b$ = b$ + CHR$(SCREEN(scrnline, t)) NEXT t b$ = RTRIM$(b$) IF b$ = "" THEN b$ = " " END IF IF exkey = 83 THEN exkey = 0: ' Delete pressed CALL SaveLine IF LEN(RTRIM$(doctxt(edline))) = 0 AND scrncol = 1 THEN CALL DelLine(1) IF scrnline < 23 AND scrnline > 3 THEN FOR t = (scrnline - 1) TO 23 LOCATE t, 1 PRINT SPACE$(79); LOCATE t, 1 b = edline + t - scrnline PRINT doctxt(b); NEXT t ELSE CALL NewText(edline) END IF ELSE IF scrncol < linelen THEN CALL DelText END IF END IF IF a = 8 THEN scrncol = scrncol + (scrncol > 1): ' Backspace LOCATE scrnline, scrncol PRINT b$; " "; a = 0: a$ = "" END IF IF a = 9 THEN a$ = SPACE$(5 - (scrncol MOD 5)): ' Tab IF scrncol > linelen THEN IF a$ = " " OR a$ = CHR$(13) THEN a$ = CHR$(13) LOCATE scrnline, scrncol PRINT " "; ELSE CALL TextWrap LOCATE scrnline, 1 PRINT a$; CALL SaveLine a$ = "" END IF END IF IF a = 13 THEN LOCATE scrnline, scrncol: ' Enter PRINT CHR$(255); SPACE$(78 - scrncol); scrncol = scrncol + 1 CALL SaveLine IF insmode = 1 THEN CALL InsLine(1) IF scrnline < 21 AND scrnline > 3 THEN FOR t = (scrnline - 1) TO 23 LOCATE t, 1 PRINT SPACE$(79); LOCATE t, 1 b = edline + t - scrnline PRINT doctxt(b); NEXT t ELSE CALL NewText(edline) END IF END IF END IF IF a$ <> "" THEN LOCATE scrnline, scrncol: PRINT a$; IF CSRLIN > scrnline THEN CALL SaveLine edline = edline + 1 END IF scrnline = CSRLIN scrncol = POS(0) IF insmode = 1 THEN PRINT b$; " "; END IF LOOP END ErrorTrap: CLS COLOR fcolor + 16, bcolor PRINT TAB(34); "E R R O R !!" BEEP: BEEP: BEEP COLOR fcolor + 8 a$ = "#" + STR$(ERR) IF ERR = 7 THEN a$ = "Out of Memory." IF ERR > 49 THEN a$ = "Check Diskette." IF ERR = 53 THEN a$ = "File not Found." IF ERR = 61 THEN a$ = "Disk is Full." IF ERR = 64 THEN a$ = "Illegal File Name." IF ERR > 70 THEN a$ = "Disk not Ready." IF ERR = 73 THEN a$ = "Feature Unavailable." PRINT : PRINT TAB(40 - LEN(a$) / 2); a$ COLOR fcolor LOCATE 7, 30: PRINT "Hit any key, please." a$ = INPUT$(1) scrncol = 1 RESUME ProgramStart REM $STATIC SUB DelFile SHARED filespec$ b$ = filespec$ CALL FileDir a$ = "N" CALL InputBox("Deleting " + filespec$ + "! Are you sure??", 1, 35, 8, 0, a$) a$ = UCASE$(a$) IF a$ <> "Y" THEN filespec$ = b$ EXIT SUB END IF KILL filespec$ END SUB SUB DelLine (row) SHARED doctxt() AS STRING, edline FOR t = (edline + row - 1) TO (UBOUND(doctxt, 1) - 1) SWAP doctxt(t), doctxt(t + 1) NEXT t FOR t = (UBOUND(doctxt, 1) - row + 1) TO UBOUND(doctxt, 1) doctxt(t) = "" NEXT t END SUB SUB DelText SHARED doctxt() AS STRING, edline, b$, scrnline, scrncol, linelen IF LEN(b$) = 1 THEN b$ = " " IF LEN(b$) > 1 THEN b$ = RIGHT$(b$, LEN(b$) - 1) IF b$ = " " AND scrnline < 23 THEN b = INSTR(linelen - (scrncol + 1), doctxt(edline + 1), " ") IF b = 0 AND LEN(doctxt(edline + 1)) > 0 THEN b = LEN(doctxt(edline + 1)) doctxt(edline + 1) = doctxt(edline + 1) + " " END IF c$ = LEFT$(doctxt(edline + 1), b) b$ = b$ + c$ doctxt(edline + 1) = RIGHT$(doctxt(edline + 1), LEN(doctxt(edline + 1)) - b) LOCATE scrnline + 1, 1 PRINT SPACE$(79); LOCATE scrnline + 1, 1 PRINT doctxt(edline + 1); END IF LOCATE scrnline, scrncol PRINT b$; " "; END SUB SUB FileDir SHARED ibox$(), filespec$ ReadDir: LOCATE 1, 1, 0 SHELL "dir > scanfile.dir" OPEN "scanfile.dir" FOR INPUT AS #1 fcounter = 0 WHILE NOT EOF(1) LINE INPUT #1, a$ fcounter = fcounter + 1 WEND CLOSE #1 REDIM scandir(fcounter + 3) AS STRING * 12 OPEN "scanfile.dir" FOR INPUT AS #1 fcounter = 1 WHILE NOT EOF(1) LINE INPUT #1, a$ IF LEFT$(a$, 1) <> " " AND LEN(a$) > 1 AND LEFT$(a$, 8) <> "SCANFILE" THEN IF MID$(a$, 14, 1) = "<" THEN a$ = LEFT$(a$, 9) + "" a$ = MID$(a$, 1, 8) + "." + MID$(a$, 10, 3) scandir(fcounter) = a$ fcounter = fcounter + 1 END IF WEND limit = fcounter - 1 DO swaps = 0 FOR item = 0 TO (limit - 1) IF scandir(item) > scandir(item + 1) THEN SWAP scandir(item), scandir(item + 1) swaps = item END IF NEXT item limit = swaps LOOP WHILE swaps scandir(fcounter) = " [A:] " scandir(fcounter + 1) = " [B:] " scandir(fcounter + 2) = " [C:] " fcounter = fcounter + 2 CLOSE #1 REDIM ibox$(fcounter + 2) KILL "scanfile.dir" IF fcounter = 0 THEN EXIT SUB ibox$(0) = "Directory:" ibox$(1) = STR$(fcounter + 3) ibox$(2) = "12" FOR dircntr = 1 TO (fcounter) ibox$(dircntr + 2) = LEFT$(scandir(dircntr) + " ", 12) NEXT dircntr item = 0 CALL ItemBox(ibox$(), 27, 8, item) IF item > 0 THEN IF RIGHT$(ibox$(item + 2), 3) = "" THEN CHDIR RTRIM$(LEFT$(ibox$(item + 2), 8)) GOTO ReadDir ELSE IF INSTR(ibox$(item + 2), ":]") = 7 THEN LOCATE 1, 1 SHELL MID$(ibox$(item + 2), 6, 2) GOTO ReadDir END IF filespec$ = ibox$(item + 2) END IF END IF END SUB SUB FindRepl (itemnum) STATIC SHARED doctxt() AS STRING, edline, fcolor, bcolor, scrncol CALL InputBox("Search For?", 40, 20, 6, 0, ftext$) ftext$ = RTRIM$(ftext$) IF ftext$ = CHR$(27) THEN EXIT SUB IF itemnum = 1 THEN CALL InputBox("Replace With?", 40, 22, 10, 0, rtext$) rtext$ = RTRIM$(rtext$) IF rtext$ = CHR$(27) THEN EXIT SUB CALL InputBox("Confirm? (Y/N)", 1, 24, 14, 0, conftxt$) conftxt$ = UCASE$(conftxt$) IF conftext$ = CHR$(27) THEN EXIT SUB END IF IF itemnum = 0 THEN FOR counter = edline TO UBOUND(doctxt, 1) a = INSTR(doctxt(counter), ftext$) IF a > 0 AND (a <> scrncol AND counter <> edline) THEN edline = counter scrncol = a: BEEP EXIT FOR END IF NEXT counter IF scrncol = a THEN EXIT SUB FOR counter = 1 TO edline - 1 a = INSTR(doctxt(counter), ftext$) IF a > 0 THEN edline = counter scrncol = a: BEEP EXIT FOR END IF NEXT counter EXIT SUB END IF ' =====> Replace <===== FOR counter = 1 TO UBOUND(doctxt, 1) a = INSTR(doctxt(counter), ftext$) IF a > 0 THEN ans$ = "Y" IF conftxt$ = "Y" THEN COLOR fcolor, bcolor CALL NewText(counter) LOCATE 3, a COLOR bcolor, fcolor PRINT ftext$; CALL InputBox("Replace? (Y/N)", 1, 24, 14, 0, ans$) ans$ = UCASE$(ans$) IF ans$ = CHR$(27) THEN EXIT SUB END IF IF ans$ = "Y" THEN c$ = LEFT$(doctxt(counter), a - 1) + rtext$ b$ = RIGHT$(doctxt(counter), LEN(doctxt(counter)) + 1 - (a + LEN(ftext$))) doctxt(counter) = c$ + b$ END IF END IF NEXT counter END SUB SUB InputBox (inprompt$, answerlen, col, row, hide%, answer$) COLOR 0, 7, 0 menuwidth = answerlen + 2 IF LEN(inprompt$) > answerlen THEN menuwidth = LEN(inprompt$) + 2 LOCATE row, col PRINT CHR$(218); STRING$(menuwidth, 196); CHR$(191); LOCATE row + 1, col PRINT CHR$(179); " "; LEFT$(inprompt$ + STRING$(80, 32), menuwidth - 1); CHR$(179); COLOR 8, 0, 0 PRINT CHR$(SCREEN(CSRLIN, POS(0))) COLOR 0, 7, 0 LOCATE row + 2, col PRINT CHR$(195); STRING$(menuwidth, 196); CHR$(180); COLOR 8, 0, 0 PRINT CHR$(SCREEN(CSRLIN, POS(0))) COLOR 0, 7, 0 LOCATE row + 3, col PRINT CHR$(179); STRING$(menuwidth, 32); CHR$(179); COLOR 8, 0, 0 PRINT CHR$(SCREEN(CSRLIN, POS(0))) COLOR 0, 7, 0 LOCATE row + 4, col PRINT CHR$(192); STRING$(menuwidth, 196); CHR$(217); COLOR 8, 0, 0 PRINT CHR$(SCREEN(CSRLIN, POS(0))) LOCATE row + 5, col + 1 FOR border = 1 TO menuwidth + 2 PRINT CHR$(SCREEN(CSRLIN, POS(0))); NEXT border COLOR 4, 7 row = row + 3 col = col + 2 answer$ = RTRIM$(answer$) CALL InputText(answer$, answerlen, col, row, hide%) END SUB SUB InputText (answer$, answerlen, col, row, hide%) LOCATE row, col, 1 PRINT answer$; FOR letter = 1 TO answerlen a$ = "" WHILE a$ = "" a$ = INKEY$ IF LEN(a$) > 1 THEN IF RIGHT$(a$, 1) = CHR$(75) THEN a$ = CHR$(8) END IF IF LEN(a$) > 1 THEN a$ = "" WEND IF a$ = CHR$(9) THEN a$ = CHR$(13) IF a$ = CHR$(27) THEN answer$ = CHR$(27) EXIT FOR END IF IF a$ = CHR$(13) THEN EXIT FOR IF letter = 1 THEN LOCATE row, col PRINT STRING$(answerlen, 32); answer$ = "" LOCATE row, col END IF IF a$ <> CHR$(8) THEN IF hide% = 1 THEN PRINT "*"; ELSE PRINT a$; END IF END IF IF a$ <> CHR$(8) THEN answer$ = answer$ + a$ IF a$ = CHR$(8) AND letter > 1 THEN LOCATE CSRLIN, POS(0) - 1: PRINT " "; letter = letter - 2 answer$ = LEFT$(answer$, letter) LOCATE row, col, 1 IF hide% = 0 THEN PRINT answer$; ELSE PRINT STRING$(letter, "*"); END IF NEXT letter answer$ = LEFT$(answer$ + STRING$(answerlen, 32), answerlen) END SUB SUB InsLine (row) SHARED doctxt() AS STRING, edline, scrncol a$ = LEFT$(doctxt(edline), scrncol - 1) FOR t = UBOUND(doctxt, 1) TO (edline + row) STEP -1 SWAP doctxt(t), doctxt(t - row) NEXT t FOR t = (edline) TO (edline + row) doctxt(t) = "" NEXT t doctxt(edline) = a$ END SUB SUB ItemBox (box$(), col, row, itemnum) SHARED bcolor, mcolor '=====> Item list for choice box <===== ' box$(0) ---> Menu Name ' box$(1) ---> Last Item's *REAL* Number (item + 2) ' box$(2) ---> Menu Width (Same as LEN of longest item) ' col Horizontal location of box ' row vertical location of box ' item selected item in array lastitem = VAL(box$(1)) - 3 IF itemnum > lastitem OR itemnum = 0 THEN itemnum = 1 IF lastitem < 1 THEN EXIT SUB menuwidth = VAL(box$(2)) + 2 COLOR bcolor + 8, mcolor, 0 LOCATE row, col, 0 PRINT CHR$(201); STRING$(menuwidth, 205); CHR$(187); LOCATE row + 1, col PRINT CHR$(186); LEFT$(" " + box$(0) + STRING$(menuwidth, 32), menuwidth); CHR$(186); COLOR 8, 0, 0 PRINT CHR$(SCREEN(CSRLIN, POS(0))) COLOR bcolor + 8, mcolor, 0 LOCATE row + 2, col PRINT CHR$(199); STRING$(menuwidth, 196); CHR$(182); COLOR 8, 0, 0 PRINT CHR$(SCREEN(CSRLIN, POS(0))) COLOR bcolor + 8, mcolor, 0 menu = itemnum ' =====> List Files in Box <===== FOR border = 1 TO 10 LOCATE row + 2 + border, col, 0 PRINT CHR$(186); IF menu > lastitem THEN PRINT STRING$(menuwidth, 32); ELSE PRINT LEFT$(" " + box$(menu + 2) + STRING$(menuwidth, 32), menuwidth); menu = menu + 1 END IF PRINT CHR$(186); COLOR 8, 0, 0 PRINT CHR$(SCREEN(CSRLIN, POS(0))) COLOR bcolor + 8, mcolor, 0 NEXT border LOCATE CSRLIN, col, 0 PRINT CHR$(200); STRING$(menuwidth, 205); CHR$(188); COLOR 0, 8, 0 PRINT CHR$(SCREEN(CSRLIN, POS(0))) LOCATE CSRLIN, col + 1 FOR border = 1 TO menuwidth + 2 PRINT CHR$(SCREEN(CSRLIN, POS(0))); NEXT border COLOR bcolor + 8, mcolor, 0 menu = 1: item = itemnum LOCATE row + 3, col + 1 COLOR 7, 0 PRINT LEFT$(" " + box$(item + 2) + STRING$(menuwidth, 32), menuwidth); COLOR bcolor + 8, mcolor, 0 ' =====> Select Item <===== a$ = "": a = 0 WHILE (a$ <> CHR$(13)) a$ = "" b = VAL(RIGHT$(TIME$, 4)) IF b > 7 THEN b = 0 WHILE a$ = "" COLOR mcolor, bcolor LOCATE 25, 45, 0: PRINT "Date: "; DATE$; LOCATE 25, 65: PRINT "Time: "; TIME$; a$ = INKEY$ WEND IF a$ = CHR$(27) THEN itemnum = 0 col = 27 EXIT SUB END IF IF a$ = CHR$(13) THEN col = 13 itemnum = item EXIT SUB END IF IF LEN(a$) > 1 THEN a = ASC(RIGHT$(a$, 1)) IF a = 73 THEN menu = menu - 9: item = menu IF a = 81 THEN menu = menu + 9: item = menu IF a = 71 THEN menu = 1: item = 1 IF a = 72 THEN IF item = menu THEN menu = menu - 9 item = item - 1 END IF IF a = 80 THEN IF item = menu + 9 THEN menu = menu + 9 item = item + 1 END IF IF a = 79 THEN menu = lastitem + 1 END IF IF LEN(a$) = 1 THEN a$ = UCASE$(a$) a = item FOR border = 3 TO (lastitem + 2) IF a$ = LEFT$(box$(border), 1) THEN item = border - 2: menu = border - 2 EXIT FOR END IF NEXT border END IF IF menu > lastitem THEN menu = lastitem - 9 item = lastitem END IF IF menu < 1 THEN menu = 1 IF item < 1 THEN item = 1 IF item > lastitem THEN item = lastitem COLOR bcolor + 8, mcolor, 0 box = menu FOR border = 1 TO 10 LOCATE row + 2 + border, col + 1, 0 IF box > lastitem THEN PRINT STRING$(menuwidth, 32); ELSE IF box = item THEN COLOR 7, 0, 0 PRINT " "; box$(box + 2); " "; COLOR bcolor + 8, mcolor, 0 box = box + 1 END IF NEXT border WEND itemnum = item END SUB SUB LoadMode SHARED doctxt() AS STRING, filespec$, bcolor, fcolor, linelen SHARED scrncol, scrnline, edline FOR edline = 1 TO UBOUND(doctxt, 1) doctxt(edline) = "" NEXT edline IF scrncol = -1 THEN scrncol = 1 GOTO LoadFile END IF CALL FileDir a$ = "Y" CALL InputBox("Load " + filespec$ + "?", 1, 35, 8, 0, a$) IF a$ = CHR$(27) OR UCASE$(a$) = "N" THEN edline = 1 EXIT SUB END IF LoadFile: OPEN "I", 1, filespec$ edline = 1 WHILE NOT EOF(1) AND edline < UBOUND(doctxt, 1) a$ = INPUT$(1, #1) IF a$ = CHR$(13) THEN a$ = " " IF a$ <> CHR$(10) THEN doctxt(edline) = doctxt(edline) + a$ IF a$ = " " AND LEN(doctxt(edline)) > linelen THEN doctxt(edline) = doctxt(edline) + a$ el = LEN(doctxt(edline)) IF el > linelen THEN el = linelen b = 0 FOR t = el TO 1 STEP -1 IF MID$(doctxt(edline), t, 1) = " " THEN b = t EXIT FOR END IF NEXT t IF b <> 0 THEN b$ = LTRIM$(RIGHT$(doctxt(edline), LEN(doctxt(edline)) - (b))) doctxt(edline) = LEFT$(doctxt(edline), b) edline = edline + 1 doctxt(edline) = RTRIM$(b$) + " " ELSE edline = edline + 1 END IF END IF IF a$ = CHR$(10) THEN doctxt(edline) = RTRIM$(doctxt(edline)) + CHR$(255) edline = edline + 1 COLOR bcolor, fcolor LOCATE 1, 65 PRINT USING "###"; edline; END IF WEND CLOSE #1 scrnline = 3: scrncol = 1: edline = 1 END SUB SUB MainScreen SHARED fcolor, bcolor, mcolor, menubar$ SHARED filespec$, linelen SCREEN 0, 0, 0, 0 VIEW PRINT COLOR fcolor, bcolor WIDTH 80 CLS BoxDraw: COLOR bcolor + 8, mcolor LOCATE 1, 1: PRINT menubar$; COLOR mcolor, bcolor LOCATE 2, 1 FOR t = 1 TO 80 a$ = "-" IF t / 5 = INT(t / 5) THEN a$ = "|" IF t / 10 = INT(t / 10) THEN a$ = RIGHT$(STR$(t / 10), 1) IF t = INT(linelen / 2) THEN a$ = CHR$(23) PRINT a$; NEXT t COLOR bcolor, mcolor LOCATE 2, linelen: PRINT "]"; LOCATE 24, 1: PRINT " "; RIGHT$(SPACE$(12) + RTRIM$(filespec$), 12); TAB(30); PRINT "Text Rite 2.24(c) 1992, Student Oriented Software "; COLOR mcolor + 8, bcolor LOCATE 25, 45, 0: PRINT "Date: "; DATE$; LOCATE 25, 65: PRINT "Time: "; TIME$; LOCATE 25, 3: COLOR bcolor, mcolor PRINT "ESC"; COLOR mcolor, bcolor PRINT " - (Escape) to Exit any Menu"; VIEW PRINT 3 TO 23 END SUB SUB MakeMenu SHARED menu$(), menubar$ ' CALLed by: Menuz.bas '=====> Menu, options (10 Max) <===== ' menu$(x,0) ---> Menu Name ' menu$(x,1) ---> Last Item's *REAL* Number (item + 2) ' menu$(x,2) ---> Menu Width (Same as LEN of longest item) ' menu$(0, 0) = "F1-Help" ' menu$(0, 3) = "Index" menu$(1, 0) = "F2-Edit" menu$(1, 3) = "Block Define" menu$(1, 4) = STRING$(13, 196) menu$(1, 5) = "Copy Block" menu$(1, 6) = "Paste Block" menu$(1, 7) = "Delete Block" menu$(1, 8) = STRING$(13, 196) menu$(1, 9) = "Find" menu$(1, 10) = "Replace" menu$(5, 0) = "F6-Print" menu$(5, 3) = "Print" menu$(5, 4) = "Setup" menu$(4, 0) = "F5-Format" menu$(4, 3) = "Center" menu$(4, 4) = "Left" menu$(4, 5) = "Right" menu$(2, 0) = "F3-Options" menu$(2, 3) = "Line Length" menu$(2, 4) = STRING$(16, 196) menu$(2, 5) = "Text Color" menu$(2, 6) = "Background Color" menu$(2, 7) = "Menu Color" menu$(2, 8) = STRING$(16, 196) menu$(2, 9) = "Defaults" menu$(6, 0) = "F7-File" menu$(6, 3) = "New" menu$(6, 4) = "Load" menu$(6, 5) = "Save" menu$(6, 6) = STRING$(6, 196) menu$(6, 7) = "Delete" menu$(6, 8) = STRING$(6, 196) menu$(6, 9) = "X Exit" menu$(10, 0) = "Colors" menu$(10, 3) = "0 Black" menu$(10, 4) = "1 Blue" menu$(10, 5) = "2 Green" menu$(10, 6) = "3 Cyan" menu$(10, 7) = "4 Red" menu$(10, 8) = "5 Purple" menu$(10, 9) = "6 Orange" menu$(10, 10) = "7 White" FOR menu = 0 TO maxmenu IF menu < 10 THEN menubar$ = menubar$ + menu$(menu, 0) + " " menu$(menu, 2) = "0" FOR item = 3 TO maxitem IF menu$(menu, item) <> "" THEN menu$(menu, 1) = STR$(item) IF LEN(menu$(menu, item)) > VAL(menu$(menu, 2)) THEN menu$(menu, 2) = STR$(LEN(menu$(menu, item))) END IF END IF NEXT item NEXT menu menubar$ = LEFT$(menubar$ + STRING$(70, 32), 80) END SUB SUB MenuBox : 'Draws Pull-Down menus using MENU$() SHARED menu$(), menucalled, col IF col = 0 AND menucalled = 0 THEN EXIT SUB COLOR 0, 7, 0 FOR menu = 3 TO VAL(menu$(menucalled, 1)) LOCATE menu - 1, col, 0 b$ = LEFT$(menu$(menucalled, menu) + STRING$(VAL(menu$(menucalled, 2)) + 1, 32), VAL(menu$(menucalled, 2)) + 1) PRINT CHR$(179); " "; IF LEFT$(b$, 1) <> CHR$(196) THEN COLOR 15, 0, 0 PRINT LEFT$(b$, 1); COLOR 0, 7, 0 PRINT RIGHT$(b$, LEN(b$) - 1); CHR$(179); COLOR 8, 0, 0 PRINT CHR$(SCREEN(CSRLIN, POS(0))) COLOR 0, 7, 0 NEXT menu LOCATE VAL(menu$(menucalled, 1)), col PRINT CHR$(192); STRING$(VAL(menu$(menucalled, 2)) + 2, 196); CHR$(217); COLOR 8, 0, 0 PRINT CHR$(SCREEN(CSRLIN, POS(0))) LOCATE VAL(menu$(menucalled, 1)) + 1, col + 1 FOR menu = 1 TO (VAL(menu$(menucalled, 2)) + 4) PRINT CHR$(SCREEN(CSRLIN, POS(0))); NEXT menu END SUB SUB MenuCall STATIC SHARED menubar$, menu$(), menucalled, item, col SHARED fcolor, bcolor, mcolor, linelen, newscrn SHARED scandir() AS STRING * 12 SHARED ibox$(), filespec$, scrncol SHARED blockmode, pasteallow DO IF menucalled < 10 THEN PCOPY 0, 1: ' Copy non-menu screen into RAM col = INSTR(1, menubar$, menu$(menucalled, 0)) - 1 END IF SCREEN 0, 0, 1, 1: ' Menu's use Screen 1 to save COLOR 7, 0, 0: ' original display (Screen 0) item = 2 xitmenu = 0: ' Remain in menus until Exit CALL MenuBox IF menucalled = 0 AND col = 0 THEN SCREEN 0, 0, 0, 0 COLOR fcolor, bcolor EXIT SUB END IF SelectItem: a = 0: ' No key pressed yet DO UNTIL (a = 13 OR a = 27 OR (LEN(a$) > 1 AND (a = 77 OR a = 75))) a$ = "": a = 0 WHILE a$ = "" a$ = UCASE$(INKEY$) COLOR mcolor + 8, bcolor LOCATE 25, 45, 0: PRINT "Date: "; DATE$; LOCATE 25, 65: PRINT "Time: "; TIME$; WEND a = ASC(RIGHT$(a$, 1)) IF LEN(a$) > 1 THEN ' =====> Special Key Pressed <===== IF a = 77 OR a = 75 THEN DO IF a = 77 THEN menucalled = menucalled + 1 + ((menucalled > 8) * 10) ELSE menucalled = menucalled - 1 - ((menucalled < 1) * 10) END IF LOOP WHILE menu$(menucalled, 0) = "" xitmenu = 0 END IF IF a = 80 OR a = 72 THEN item = item - (a = 80) + (a = 72) IF item < 3 THEN item = VAL(menu$(menucalled, 1)) IF item > VAL(menu$(menucalled, 1)) THEN item = 3 IF LEFT$(menu$(menucalled, item), 1) = CHR$(196) THEN item = item - (a = 80) + (a = 72) END IF CALL MenuBox LOCATE item - 1, col + 1, 0 b$ = LEFT$(" " + menu$(menucalled, item) + STRING$(VAL(menu$(menucalled, 2)) + 1, 32), VAL(menu$(menucalled, 2)) + 2) IF menucalled <> 10 OR (menucalled = 10 AND (item = 10 OR item = 3)) THEN COLOR 7, 0: PRINT b$; : COLOR 0, 7 ELSE COLOR 0, VAL(menu$(menucalled, item)): PRINT b$: COLOR 0, 7 END IF END IF END IF ' =====> Letter Pressed <===== IF (a <> 27 AND a <> 13) AND (LEN(a$) = 1) THEN a = item FOR menu = (item + 1) TO maxitem IF a$ = LEFT$(menu$(menucalled, menu), 1) THEN item = menu EXIT FOR END IF NEXT menu IF a = item THEN FOR menu = 3 TO item IF a$ = LEFT$(menu$(menucalled, menu), 1) THEN item = menu EXIT FOR END IF NEXT menu END IF CALL MenuBox IF item > 2 THEN LOCATE item - 1, col + 1, 0 b$ = LEFT$(" " + menu$(menucalled, item) + STRING$(VAL(menu$(menucalled, 2)) + 1, 32), VAL(menu$(menucalled, 2)) + 2) IF menucalled <> 10 OR (menucalled = 10 AND (item = 10 OR item = 3)) THEN COLOR 7, 0: PRINT b$; : COLOR 0, 7 ELSE COLOR 0, VAL(menu$(menucalled, item)): PRINT b$: COLOR 0, 7 END IF END IF END IF LOOP ' =====> Item Selected <===== IF a = 27 THEN xitmenu = 1: ' ESC menu item selected, so menus will be left IF a = 13 THEN xitmenu = 1 IF item > 2 THEN choice$ = menu$(menucalled, item) IF menucalled = 10 THEN IF choice$ = "0 Black" THEN a = 0 IF choice$ = "1 Blue" THEN a = 1 IF choice$ = "2 Green" THEN a = 2 IF choice$ = "3 Cyan" THEN a = 3 IF choice$ = "4 Red" THEN a = 4 IF choice$ = "5 Purple" THEN a = 5 IF choice$ = "6 Orange" THEN a = 6 IF choice$ = "7 White" THEN a = 7 IF rcolor = 1 AND (a <> bcolor) THEN fcolor = a IF rcolor = 2 AND (a <> fcolor) THEN bcolor = a IF rcolor = 4 AND (a <> bcolor) THEN mcolor = a COLOR fcolor, bcolor EXIT SUB END IF IF menucalled = 1 THEN IF choice$ = "Block Define" THEN blockmode = 1 menu$(1, 3) = "Block End " END IF IF choice$ = "Block End " THEN blockmode = 0 menu$(1, 3) = "Block Define" END IF IF choice$ = "Copy Block" THEN ' Set the value docbuffer(0) = lines in buffer ' then copy into docbuffer (1+) BlockBegin -> BlockEnd ' (copy into buffer in case of delete) END IF IF choice$ = "Delete Block" THEN ' Use the DelLine sub to delete lines ' from BlockBegin to BlockEnd, ' storing text in docbuffer() same as Copy Block END IF IF choice$ = "Paste Block" THEN ' Use InsLine(0) to insert # lines in docbuffer(0) ' copy text from docbuffer(1+) in blank lines END IF IF choice$ = "Find" THEN CALL FindRepl(0) newscrn = 1 END IF IF choice$ = "Replace" THEN CALL FindRepl(1) newscrn = 1 END IF END IF IF menucalled = 5 THEN IF choice$ = "Print" THEN CALL PrintMode(0) IF choice$ = "Setup" THEN CALL PrintMode(1) END IF IF menucalled = 4 THEN IF choice$ = "Center" THEN CALL PosText(1) IF choice$ = "Left" THEN CALL PosText(0) IF choice$ = "Right" THEN CALL PosText(2) END IF IF menucalled = 2 THEN newscrn = 1 IF choice$ = "Line Length" THEN a$ = "60" CALL SaveMode CALL InputBox("New Line Length:", 3, 35, 8, 0, a$) linelen = VAL(a$) IF linelen < 15 OR linelen > 79 THEN linelen = 60 IF RTRIM$(filespec$) <> "" THEN scrncol = -1 CALL LoadMode END IF END IF IF choice$ = "Defaults" THEN fcolor = 3: bcolor = 0: mcolor = 7 linelen = 60 END IF IF INSTR(choice$, "Color") > 0 THEN IF INSTR(choice$, "Back") > 0 THEN rcolor = 2 IF INSTR(choice$, "Text") > 0 THEN rcolor = 1 IF INSTR(choice$, "Menu") > 0 THEN rcolor = 4 menucalled = 10: 'Color Menu col = INSTR(1, menubar$, menu$(2, 0)) + VAL(menu$(2, 2)) + 2 CALL MenuBox xitmenu = 0: ' ====> Remain in Menuing system <===== END IF END IF IF menucalled = 6 THEN IF choice$ = "New" THEN CALL NewFile newscrn = 1 END IF IF choice$ = "Load" THEN CALL LoadMode newscrn = 1 END IF IF choice$ = "Save" THEN CALL SaveMode END IF IF choice$ = "Delete" THEN CALL DelFile END IF IF choice$ = "X Exit" THEN VIEW PRINT: CLS END END IF END IF END IF ' Exit Menus SCREEN 0, 0, 0, 0 COLOR fcolor, bcolor a$ = "" LOOP WHILE xitmenu = 0 END SUB SUB NewFile SHARED doctxt() AS STRING, scrnline, scrncol, filespec$, edline filespec$ = "" FOR edline = 1 TO UBOUND(doctxt, 1) doctxt(edline) = "" NEXT edline edline = 1: scrnline = 3: scrncol = 1 END SUB SUB NewText (edline) SHARED doctxt() AS STRING, fcolor, bcolor, mcolor SHARED blockbeg, blockbch, blockend, blockech SHARED blockmode COLOR fcolor, bcolor, mcolor CLS 2 FOR t = edline TO edline + 20 LOCATE t - edline + 3, 1 IF t < UBOUND(doctxt, 1) THEN COLOR fcolor, bcolor, mcolor IF blockmode <> 0 THEN IF t = blockbeg OR t = blockend THEN FOR a = 1 TO LEN(doctxt(t)) COLOR fcolor, bcolor IF (t = blockbeg AND t = blockend) AND (a >= blockbch AND a <= blockech) THEN COLOR bcolor, fcolor END IF IF (t = blockbeg AND a >= blockbch) AND t <> blockend THEN COLOR bcolor, fcolor END IF IF (t = blockend AND a <= blockech) AND t <> blockbeg THEN COLOR bcolor, fcolor END IF PRINT MID$(doctxt(t), a, 1); NEXT a END IF IF t <> blockbeg AND t <> blockend THEN IF t > blockbeg AND t < blockend THEN COLOR bcolor, fcolor PRINT doctxt(t); END IF ELSE COLOR fcolor, bcolor PRINT doctxt(t); END IF END IF NEXT t END SUB SUB PosText (itemnum) SHARED doctxt() AS STRING, edline, linelen, bcolor, fcolor, scrnline SCREEN 0, 0, 0, 0 LOCATE scrnline, 1 CALL SaveLine doctxt(edline) = LTRIM$(doctxt(edline)) doctxt(edline) = RTRIM$(doctxt(edline)) IF RIGHT$(doctxt(edline), 1) = CHR$(255) THEN doctxt(edline) = LEFT$(doctxt(edline), LEN(doctxt(edline)) - 1) END IF IF itemnum = 1 THEN a$ = SPACE$((linelen / 2) - (LEN(doctxt(edline)) / 2) - 1) doctxt(edline) = a$ + doctxt(edline) END IF IF itemnum = 2 THEN a$ = SPACE$(linelen - LEN(doctxt(edline))) doctxt(edline) = a$ + doctxt(edline) END IF doctxt(edline) = doctxt(edline) + CHR$(255) COLOR fcolor, bcolor LOCATE scrnline, 1 PRINT SPACE$(79); LOCATE scrnline, 1 PRINT doctxt(edline); END SUB SUB PrintMode (itemnum) STATIC SHARED doctxt() AS STRING, linelen, fcolor, bcolor IF pglines = 0 THEN pglines = 60 IF topmar = 0 THEN topmar = 3 IF btmar = 0 THEN btmar = 9 IF startnum = 0 THEN startnum = 1 IF leftmar = 0 THEN leftmar = 40 - (linelen / 2) IF itemnum = 1 THEN CALL PrintSetup(pglines, topmar, btmar, leftmar, startnum, nummode) EXIT SUB END IF prnout = pglines - (topmar + btmar) pgnum = startnum - 1 FOR edline = 1 TO UBOUND(doctxt, 1) IF RTRIM$(doctxt(edline)) <> "" THEN b = edline NEXT edline FOR counter = 1 TO topmar IF counter = 1 AND nummode > 1 AND nummode < 4 THEN pgnum = pgnum + 1 IF nummode = 1 THEN LPRINT SPACE$(linelen); pgnum IF nummode = 2 THEN LPRINT SPACE$(39); pgnum IF nummode = 3 THEN LPRINT SPACE$(leftmar); pgnum ELSE LPRINT END IF NEXT counter FOR edline = 1 TO b COLOR bcolor, fcolor LOCATE 1, 65 PRINT USING "###"; edline; LPRINT SPACE$(leftmar); LEFT$(doctxt(edline), LEN(doctxt(edline)) - 1) IF (edline / prnout) = INT(edline / prnout) THEN IF btmar > 2 AND nummode > 3 THEN pgnum = pgnum + 1 LPRINT IF nummode = 4 THEN LPRINT SPACE$(linelen); pgnum IF nummode = 5 THEN LPRINT SPACE$(39); pgnum END IF LPRINT CHR$(12); FOR counter = 1 TO topmar IF counter = 1 AND nummode > 1 AND nummode < 4 THEN pgnum = pgnum + 1 IF nummode = 1 THEN LPRINT SPACE$(linelen); pgnum IF nummode = 2 THEN LPRINT SPACE$(39); pgnum IF nummode = 3 THEN LPRINT SPACE$(leftmar); pgnum ELSE LPRINT END IF NEXT counter END IF NEXT edline IF nummode > 3 AND (edline / prnout <> INT(edline / prnout)) THEN edline = edline - 1 WHILE (edline / prnout) <> INT(edline / prnout) LPRINT edline = edline + 1 WEND IF btmar > 2 THEN pgnum = pgnum + 1 LPRINT IF nummode = 4 THEN LPRINT SPACE$(linelen); pgnum IF nummode = 5 THEN LPRINT SPACE$(39); pgnum END IF END IF LPRINT CHR$(12); END SUB SUB PrintSetup (pglines, topmar, btmar, leftmar, startnum, nummode) SHARED ibox$() REDIM ibox$(9) ibox$(0) = "Printer Options" ibox$(1) = "8" ibox$(2) = "15" ibox$(3) = "Lines Per Page " ibox$(4) = "Top Margin " ibox$(5) = "Bottom Margin " ibox$(6) = "Left Margin " ibox$(7) = "Page Numbering " item = 1 CALL ItemBox(ibox$(), 21, 2, item) IF item = 0 THEN EXIT SUB IF item = 1 THEN ibox$(0) = "Lines Per Page" ibox$(1) = "9" ibox$(2) = "31" ibox$(3) = "66 - Letter Regular/Portrait " ibox$(4) = "88 - Letter Condensed/Portrait" ibox$(5) = "84 - Legal Regular/Portrait " ibox$(6) = "112 - Legal Condensed/Portrait " ibox$(7) = "51 - Landscape Regular " ibox$(8) = "68 - Landscape Condensed " item = 1 CALL ItemBox(ibox$(), 39, 4, item) IF item = 0 THEN EXIT SUB pglines = VAL(ibox$(item + 2)) EXIT SUB END IF IF item = 2 THEN ibox$(0) = "Top Margin" ibox$(1) = "10" ibox$(2) = "27" ibox$(3) = "0 - No Top Margin " ibox$(4) = "2 - 1/3-inch or 1/4-inch" ibox$(5) = "4 - 2/3-inch or 1/2-inch" ibox$(6) = "6 - 1-inch or 3/4-inch" ibox$(7) = "8 - 1.3-inch or 1-inch" ibox$(8) = "10 - 1.6-inch or 1.25-inch" ibox$(9) = "12 - 2-inch or 1.5-inch" item = 1 CALL ItemBox(ibox$(), 39, 4, item) IF item = 0 THEN EXIT SUB topmar = VAL(ibox$(item + 2)) EXIT SUB END IF IF item = 3 THEN ibox$(0) = "Bottom Margin" ibox$(1) = "10" ibox$(2) = "27" ibox$(3) = "0 - No Bottom Margin " ibox$(4) = "2 - 1/3-inch or 1/4-inch" ibox$(5) = "4 - 2/3-inch or 1/2-inch" ibox$(6) = "6 - 1-inch or 3/4-inch" ibox$(7) = "8 - 1.3-inch or 1-inch" ibox$(8) = "10 - 1.6-inch or 1.25-inch" ibox$(9) = "12 - 2-inch or 1.5-inch" item = 1 CALL ItemBox(ibox$(), 39, 4, item) IF item = 0 THEN EXIT SUB btmar = VAL(ibox$(item + 2)) EXIT SUB END IF IF item = 4 THEN mar$ = STR$(leftmar / 10) CALL InputBox("Left Margin?", 5, 24, 14, 0, mar$) IF INSTR(mar$, CHR$(27)) > 0 THEN EXIT SUB leftmar = VAL(mar$) * 10 EXIT SUB END IF IF item = 5 THEN ibox$(0) = "Page Numbering" ibox$(1) = "10" ibox$(2) = "27" ibox$(3) = "0 - No Page Numbering " ibox$(4) = "1 - Top Right Corner " ibox$(5) = "2 - Top Center " ibox$(6) = "3 - Top Left Corner " ibox$(7) = "4 - Bottom Right Corner " ibox$(8) = "5 - Bottom Center " ibox$(9) = "New Starting Page Number " item = 1 CALL ItemBox(ibox$(), 39, 4, item) IF item = 0 THEN EXIT SUB IF item = 7 THEN ans$ = STR$(startnum) CALL InputBox("Starting Page Number?", 5, 24, 14, 0, ans$) IF INSTR(ans$, CHR$(27)) > 0 THEN EXIT SUB startnum = VAL(ans$) EXIT SUB END IF nummode = VAL(ibox$(item + 2)) EXIT SUB END IF END SUB SUB SaveLine SHARED scrnline, edline, doctxt() AS STRING IF edline = UBOUND(doctxt, 1) THEN BEEP: EXIT SUB doctxt(edline) = "" FOR t = 1 TO 80 doctxt(edline) = doctxt(edline) + CHR$(SCREEN(scrnline, t)) NEXT t doctxt(edline) = RTRIM$(doctxt(edline)) END SUB SUB SaveMode SHARED doctxt() AS STRING, filespec$, bcolor, fcolor b$ = filespec$ CALL InputBox("File Name?", 60, 10, 8, 0, filespec$) IF filespec$ = CHR$(27) OR RTRIM$(filespec$) = "" THEN filespec$ = b$ EXIT SUB END IF FOR edline = 1 TO UBOUND(doctxt, 1) IF RTRIM$(doctxt(edline)) <> "" THEN b = edline NEXT edline OPEN filespec$ FOR OUTPUT AS #1 FOR edline = 1 TO b COLOR bcolor, fcolor LOCATE 1, 65 PRINT USING "###"; edline; b$ = RTRIM$(doctxt(edline)) IF RIGHT$(b$, 1) = CHR$(255) THEN b$ = LEFT$(b$, LEN(b$) - 1) + CHR$(13) + CHR$(10) ELSE b$ = b$ + " " END IF PRINT #1, b$; NEXT edline CLOSE #1 SCREEN 0, 0, 0, 1 LOCATE 24, 3 PRINT LEFT$(filespec$ + SPACE$(12), 12); SCREEN 0, 0, 1, 1 END SUB SUB TextWrap SHARED a$, linelen, scrnline, scrncol, edline, doctxt() AS STRING c$ = a$: ' Store last character typed in holder a$ = "" x = 1 WHILE SCREEN(scrnline, linelen - x) <> 32 AND SCREEN(scrnline, linelen - x) <> 45 x = x + 1 IF x > linelen THEN BEEP: BEEP scrncol = scrncol - 1 EXIT SUB END IF WEND el = linelen - x: ' Line Length b$ = "" FOR t = 1 TO el IF CHR$(SCREEN(scrnline, t)) <> CHR$(255) THEN b$ = b$ + CHR$(SCREEN(scrnline, t)) END IF NEXT t FOR t = el + 1 TO 80 IF CHR$(SCREEN(scrnline, t)) <> CHR$(255) THEN a$ = a$ + CHR$(SCREEN(scrnline, t)) END IF NEXT t a$ = RTRIM$(a$) a$ = a$ + c$ LOCATE CSRLIN, 1: PRINT SPACE$(79) LOCATE CSRLIN - 1, 1: PRINT b$; SPACE$(80 - el) CALL SaveLine IF edline < UBOUND(doctxt, 1) THEN scrncol = LEN(a$) + 1 edline = edline + 1 a$ = a$ + " " + doctxt(edline) END IF scrnline = scrnline + 1 IF scrnline > 23 THEN scrnline = 23 END SUB