home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib29a.dsk
/
NOVEMBER.1986
/
PRINT.MASTER.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
11KB
|
194 lines
10 REM **********************
20 REM * PRINT.MASTER *
30 REM * BY LOREN W. WRIGHT *
40 REM * COPYRIGHT (C) 1986 *
50 REM * BY MICROSPARC, INC *
60 REM * CONCORD, MA 01742 *
70 REM **********************
80 TEXT : HOME : VTAB 8: HTAB 14: PRINT "PRINTMASTER": VTAB 12: HTAB 12: PRINT "BY LOREN WRIGHT": VTAB 16: PRINT "** COPYRIGHT 1986 BY MICROSPARC, INC **"
90 EF = 1: ONERR GOTO 1300
100 GOSUB 1190
110 GOSUB 1480: REM READ IN MENU ITEMS
120 D$ = CHR$(4):EX$ = CHR$(27):HD$ = "0123456789ABCDEF"
130 PS = 1:SS = 6:SD = 1:WS = 6:WD = 1
140 DIM PC$(14,1)
150 GOSUB 1860: REM LOAD IN DEFAULT CODES
160 GOTO 240: REM SKIP MENU ROUTINE
170 REM MENU HANDLER
180 SL = SE(TL)
190 N = SL:OS = SL: GOSUB 220:Z = 0: VTAB 24: HTAB PX: CALL -868: POKE -16368,0
200 VTAB 24: HTAB PX: PRINT SL;: WAIT -16384,128:Z = PEEK( -16384) -128: IF Z > = 49 AND Z < = MX +48 THEN SL = Z -48:N = OS: GOSUB 220: GOTO 190
210 Z = (Z = 21 OR Z = 10) -(Z = 8 OR Z = 11) +10 *(Z = 13) +20 *(Z = 27): ON NOT Z GOTO 200:SL = SL +Z *(Z <10):SL = SL -MX *(SL >MX) +MX *(SL <1):N = OS: GOSUB 220: ON Z <10 GOTO 190:SE(TL) = SL: POKE -16368,0: RETURN
220 VTAB 3 +2 *N: HTAB SX: PRINT X$(SL = OS);: RETURN
230 REM MAIN MENU
240 EF = 1:HM = 0:TL = 1: GOSUB 1410
250 PX = 38:SX = 4:SE(TL) = SE(TL) +(SE(TL) = 0):MX = MITEMS(1): GOSUB 180: IF Z = 20 THEN PRINT CHR$(7): GOTO 240
260 ON SE(TL) GOSUB 290,500,1040,960,780,1170
270 GOTO 240
280 REM DISPLAY/EDIT/CHANGE
290 HM = 1:TL = 3: GOSUB 1410
300 PX = 38:SX = 4:SE(TL) = SE(TL) +(SE(TL) = 0):MX = MITEMS(TL):: GOSUB 180
310 IF Z = 20 THEN RETURN
320 ON SE(TL) = 8 GOTO 400: ON SE(TL) GOSUB 340,340,340,340,340,340,380
330 GOTO 290
340 GOSUB 1120: IF Z = 20 THEN RETURN : REM ON/OFF
350 PX$ = PC$(SE(3),PM):P7$ = MENU$(3,SE(3)) +" " + MID$ ("OFFON ",1 +3 *PM,3): HOME : GOSUB 1530:PC$(SE(3),PM) = PX$
360 RETURN
370 REM HANDLE MASTER RESET
380 PX$ = PC$(7,1):P7$ = MENU$(3,SE(3)): HOME : GOSUB 1530:PC$(7,1) = PX$
390 RETURN
400 HM = 1:TL = 5: GOSUB 1410: REM USER-DEFINED CODES
410 PX = 38:SX = 4:SE(TL) = SE(TL) +(SE(TL) = 0):MX = MITEMS(TL):: GOSUB 180
420 IF Z = 20 THEN RETURN
430 ON SE(TL) = 8 GOTO 480: ON SE(TL) GOSUB 450,450,450,450,450,450,450
440 GOTO 400
450 GOSUB 1120: IF Z = 20 THEN RETURN : REM ON/OFF
460 PX$ = PC$(SE(5) +7,PM):P7$ = MENU$(5,SE(5)) +" " + MID$ ("OFFON ",1 +3 *PM,3): HOME : GOSUB 1530:PC$(SE(5) +7,PM) = PX$
470 RETURN
480 GOTO 290: REM MAIN SET OF CODES
490 REM TEST CODES
500 HM = 1:TL = 3: GOSUB 1410
510 PX = 38:SX = 4:SE(TL) = SE(TL) +(SE(TL) = 0):MX = MITEMS(TL):: GOSUB 180
520 IF Z = 20 THEN RETURN
530 ON SE(TL) = 8 GOTO 600: ON SE(TL) GOSUB 550,550,550,550,550,550,730
540 GOTO 500
550 HOME : VTAB 10: PRINT "TEST CODE FOR "MENU$(3,SE(3))"."
560 PS$ = PC$(SE(3),1) +"THIS IS A TEST OF " +MENU$(3,SE(3)) +"." +PC$(SE(3),0)
570 GOSUB 690: REM PRINT STRING
580 RETURN
590 REM TEST USER CODES
600 HM = 1:TL = 5: GOSUB 1410
610 PX = 38:SX = 4:SE(TL) = SE(TL) +(SE(TL) = 0):MX = MITEMS(TL):: GOSUB 180
620 IF Z = 20 THEN RETURN
630 ON SE(TL) = 8 GOTO 500: ON SE(TL) GOSUB 650,650,650,650,650,650,650
640 GOTO 500: REM MAIN SET OF CODES
650 HOME : VTAB 10: PRINT "TEST CODE FOR "MENU$(5,SE(5))"."
660 PS$ = PC$(SE(5) +7,1) +"THIS IS A TEST OF " +MENU$(5,SE(5)) +"." +PC$(SE(5) +7,0)
670 GOSUB 690: REM PRINT STRING
680 RETURN
690 VTAB 1: HTAB 1: PRINT "<";: INVERSE : PRINT "ESC";: NORMAL : PRINT "> FOR CODE MENU": VTAB 20: PRINT "PUT PRINTER ON LINE AND": VTAB 20: PRINT "PRESS <RETURN> TO PRINT TEST STRING"
700 POKE -16368,0: WAIT -16384,128: IF PEEK( -16384) = 155 THEN RETURN
710 PRINT D$"PR#"PS: PRINT CHR$(9)"80N": PRINT PS$: PRINT D$"PR#0"
720 RETURN
730 HOME : VTAB 10: PRINT "TEST CODE FOR "MENU$(3,SE(3))"."
740 PS$ = PC$(SE(3),1) +"THIS IS A TEST OF " +MENU$(3,7) +"."
750 GOSUB 690: REM PRINT STRING
760 RETURN
770 REM CONFIGURE SYSTEM
780 HM = 1:TL = 2: GOSUB 1410
790 PX = 38:SX = 4:SE(TL) = SE(TL) +(SE(TL) = 0):MX = MITEMS(TL):: GOSUB 180
800 IF Z = 20 THEN RETURN
810 ON SE(TL) GOSUB 830,870
820 GOTO 780
830 HOME : VTAB 3: HTAB 12: INVERSE : PRINT "CONFIGURE PRINTER": NORMAL : VTAB 12: HTAB 1: PRINT "PRINTER SLOT (1-7): "PS; CHR$(8);
840 VTAB 12: HTAB 21: INPUT "";Z$: IF Z$ < >"" AND (Z$ <"1" OR Z$ >"7") THEN PRINT CHR$(7);: GOTO 840
850 IF Z$ = "" THEN RETURN
860 PS = VAL(Z$): RETURN
870 HOME : VTAB 3: HTAB 7: INVERSE : PRINT "CONFIGURE DATA DISK": NORMAL : VTAB 12: HTAB 1: PRINT "DATA DISK SLOT (1-7): "WS; CHR$(8);
880 VTAB 12: HTAB 23: INPUT "";Z$: IF Z$ < >"" AND (Z$ <"1" OR Z$ >"7") THEN PRINT CHR$(7);: GOTO 880
890 IF Z$ = "" THEN VTAB 12: HTAB 23: PRINT WS: GOTO 910
900 WS = VAL(Z$)
910 VTAB 15: PRINT "DATA DISK DRIVE (1-2): "WD; CHR$(8);
920 VTAB 15: HTAB 24: INPUT "";Z$: IF Z$ < >"" AND (Z$ <"1" OR Z$ >"2") THEN PRINT CHR$(7);: GOTO 920
930 IF Z$ = "" THEN RETURN
940 WD = VAL(Z$): RETURN
950 REM SAVE PRINTER CODES
960 EF = 2: HOME : INVERSE : HTAB 15: PRINT "SAVE FILE": NORMAL : VTAB 12
970 INPUT "FILE NAME (? FOR CATALOG): ";NA$: IF LEFT$(NA$,1) = "?" THEN PRINT D$ LEFT$("CATALOG",7 -4 *( PEEK(48896) = 76)): GOTO 970
980 IF NA$ = "" THEN RETURN
990 PRINT D$"OPEN"NA$",S"WS",D"WD: PRINT D$"CLOSE"NA$: PRINT D$"DELETE"NA$: PRINT D$"OPEN"NA$: PRINT D$"WRITE"NA$
1000 FOR I = 1 TO 14: FOR J = 0 TO 1:PX$ = PC$(I,J): GOSUB 1250: PRINT QX$: NEXT J,I
1010 PRINT D$"CLOSE"NA$
1020 RETURN
1030 REM LOAD PRINTER CODES
1040 EF = 3: HOME : INVERSE : HTAB 15: PRINT "LOAD FILE": NORMAL : VTAB 12
1050 INPUT "FILE NAME (? FOR CATALOG): ";NA$: IF LEFT$(NA$,1) = "?" THEN PRINT D$ LEFT$("CATALOG",7 -4 *( PEEK(48896) = 76)): GOTO 1050
1060 IF NA$ = "" THEN RETURN
1070 PRINT D$"OPEN"NA$: PRINT D$"READ"NA$
1080 FOR I = 1 TO 14: FOR J = 0 TO 1: INPUT QX$: GOSUB 1280:PC$(I,J) = PX$: NEXT J,I
1090 PRINT D$"CLOSE"NA$
1100 RETURN
1110 REM ON/OFF
1120 HM = 3:TL = 4: GOSUB 1410
1130 PX = 38:SX = 4:SE(TL) = SE(TL) +(SE(TL) = 0):MX = MITEMS(TL):: GOSUB 180
1140 IF Z = 20 THEN RETURN
1150 IF Z = 10 THEN PM = 2 -SE(TL): RETURN
1160 GOTO 1120
1170 HOME : VTAB 10: INPUT "ARE YOU SURE YOU WANT TO QUIT? ";YN$: IF YN$ < >"Y" AND YN$ < > CHR$(121) THEN RETURN
1180 END
1190 VTAB 22: HTAB 7: PRINT "PRESS <RETURN> TO CONTINUE";: GET Z$: PRINT : RETURN
1200 REM CHANGE DECIMAL (N) TO TWO HEX DIGITS (HX$)
1210 NN = INT(N/16):HX$ = MID$ (HD$,NN +1,1) + MID$ (HD$(N -16 *NN +1,1): RETURN
1220 REM CHANGE HEX PAIR (HX$) TO ASCII (N)
1230 N = 16 *( ASC( LEFT$(HX$,1)) -48 -7 *(HX$ >"A")) + ASC( RIGHT$(HX,1)) -48 -7 *( RIGHT$(HX$,1) >"9"): RETURN
1240 REM CONVERT ASCII STRING PX$ TO HEX STRING QX$
1250 QX$ = "": IF PX$ = "" THEN RETURN
1260 FOR L = 1 TO LEN(PX$):N = ASC( MID$ (PX$,L,1)): GOSUB 1210:QX$ = QX$ +HX$: NEXT L: RETURN
1270 REM DECODE HEX STRING QX$ TO ASCII STRING PX$
1280 LQ = LEN(QX$): IF (LQ <2) OR (LQ/2 - INT(LQ/2)) THEN RETURN
1290 PX$ = "": FOR K = 1 TO LQ -1 STEP 2:HX$ = MID$ (QX$,K,2): GOSUB 1230:PX$ = PX$ + CHR$(N): NEXT K: RETURN
1300 CALL -3288:E = PEEK(222):EL = PEEK(218) +256 * PEEK(219)
1310 HOME : VTAB 12: HTAB 1
1320 IF E = 4 THEN PRINT "DISK IS WRITE-PROTECTED.": GOTO 1390
1330 IF E = 5 THEN PRINT "END OF DATA": GOTO 1390
1340 IF E = 6 THEN PRINT "FILE NOT FOUND": GOTO 1390
1350 IF E = 8 THEN PRINT "I/O ERROR--CHECK DRIVE DOOR.": GOTO 1390
1360 IF E = 9 THEN PRINT "THIS DISK IS FULL. TRY ANOTHER.": GOTO 1390
1370 IF E = 11 THEN PRINT "ILLEGAL FILE NAME": GOTO 1390
1380 PRINT "ERROR "E" HAS OCCURRED": PRINT "IN LINE "EL"."
1390 GOSUB 1190: ON EF GOTO 240,960,1040
1400 REM PRINT A MENU
1410 HOME :TL$ = MENU$(TL,0): IF HM THEN PRINT "<";: INVERSE : PRINT "ESC";: NORMAL : PRINT "> FOR ";MENU$(HM,0)
1420 VTAB 3: HTAB INT((40 - LEN(TL$))/2)
1430 INVERSE : PRINT TL$: NORMAL
1440 FOR I = 1 TO MITEMS(TL): VTAB 3 +2 *I: HTAB 8: PRINT I". "MENU$(TL,I): NEXT
1450 VTAB 24: HTAB 1: PRINT "USE ARROWS/NUMBERS & PRESS <RETURN>: ";
1460 RETURN
1470 REM READ MENU DATA
1480 RESTORE : READ NMENUS: DIM MENU$(NMENUS,9): FOR I = 1 TO NMENUS: READ MITEMS(I): FOR J = 0 TO MITEMS(I): READ MENU$(I,J): NEXT J,I
1490 DIM X$(1):X$(0) = " ":X$(1) = "-->"
1500 RETURN
1510 REM ROUTINE TO INPUT PRINTER CODES
1520 REM PX$ IS PRINTER CONTROL STRING; P7$ IS CURRENT DESCRIPTION; I7,X7,X7$ AND Y7 ARE USED ONLY LOCALLY
1530 VTAB 15: HTAB 1: GOSUB 1780: VTAB 16: HTAB 1: CALL -958: GOTO 1680
1540 PX$ = "": VTAB 13: HTAB 1: CALL -958: PRINT "TYPE CODES FOR "P7$: PRINT "EXACTLY AS REQUIRED BY PRINTER.": GOSUB 1780: VTAB 23: GOSUB 1780: VTAB 24: HTAB 1: PRINT "TYPE '^' TO QUIT.";: VTAB 16: HTAB 1: ONERR GOTO 1790
1550 POKE -16368,0
1560 X7 = PEEK( -16384): IF X7 <128 GOTO 1560
1570 X7 = X7 -128
1580 IF X7 = 94 THEN RETURN
1590 PX$ = PX$ + CHR$(X7): IF LEN(PX$) >20 THEN PX$ = LEFT$(PX$,20): PRINT CHR$(7);: GOTO 1550
1600 IF X7 = 13 THEN X7$ = " <RETURN> ": GOTO 1650
1610 IF X7 = 27 THEN X7$ = " <ESC> ": GOTO 1650
1620 IF X7 = 32 THEN X7$ = " SPACE ": GOTO 1650
1630 IF X7 <32 THEN X7$ = " <CTRL>-" + CHR$(X7 +64) +" ": GOTO 1650
1640 X7$ = CHR$(X7)
1650 GOSUB 1660: ON NOT Y7 GOTO 1550: RETURN
1660 IF LEN(X7$) >40 - POS(0) THEN PRINT
1670 PRINT X7$;: RETURN
1680 IF PX$ = "" THEN PRINT "<NONE>": GOTO 1700
1690 Y7 = 1: FOR I7 = 1 TO LEN(PX$):X7 = ASC( MID$ (PX$,I7,1)): GOSUB 1600: NEXT I7
1700 VTAB 14: HTAB 1: PRINT "CURRENT CODES FOR "P7$: VTAB 23: HTAB 1: GOSUB 1780: VTAB 24: HTAB 1: PRINT "IS THIS OK? ";:Y7 = 0: GOTO 1760
1710 POKE -16368,0
1720 X7 = PEEK( -16384): IF X7 <128 GOTO 1720
1730 X7 = X7 -128: IF X7 = 13 THEN ON NOT (Y7) GOTO 1540: RETURN
1740 IF NOT (X7 = 8 OR X7 = 10 OR X7 = 11 OR X7 = 21) THEN PRINT CHR$(7);: GOTO 1710
1750 Y7 = 1 -Y7
1760 IF Y7 THEN VTAB 24: HTAB 13: NORMAL : PRINT "NO ";: INVERSE : PRINT "YES";: NORMAL : GOTO 1710
1770 VTAB 24: HTAB 13: INVERSE : PRINT "NO";: NORMAL : PRINT " YES";: GOTO 1710
1780 FOR I7 = 1 TO 40: PRINT CHR$(95);: NEXT : RETURN
1790 CALL -3288: IF PEEK(222) = 255 THEN X7 = 3: GOTO 1580
1800 HOME : VTAB 12: PRINT "ERROR " PEEK(222): PRINT "IN LINE " PEEK(218) +256 * PEEK(219): END
1810 DATA 5,6,MAIN MENU,DISPLAY/EDIT/CHANGE,TEST,LOAD FILE,SAVE FILE,CONFIGURE SYSTEM,QUIT
1820 DATA 2,CONFIGURE SYSTEM,PRINTER SLOT,DATA DISK
1830 DATA 8,CODE MENU,BOLD,UNDERLINE,COMPRESSED,EXPANDED,DOUBLE-STRIKE,PROPORTIONAL,MASTER RESET,MORE CHOICES
1840 DATA 2,"",ON,OFF
1850 DATA 8,USER CODE MENU,USER CODE 1,USER CODE 2,USER CODE 3,USER CODE 4,USER CODE 5,USER CODE 6,USER CODE 7,MORE CHOICES
1860 REM EPSON STANDARD CODES
1870 PC$(1,1) = EX$ +"E":PC$(1,0) = EX$ +"F": REM BOLD
1880 PC$(2,1) = EX$ +"-1":PC$(2,0) = EX$ +"-0": REM UNDERLINE
1890 PC$(3,1) = CHR$(15):PC$(3,0) = CHR$(18): REM COMPRESSED
1900 PC$(4,1) = CHR$(14):PC$(4,0) = CHR$(20): REM EXPANDED
1910 PC$(5,1) = EX$ +"G":PC$(5,0) = EX$ +"H": REM DOUBLE-STRIKE
1920 PC$(6,1) = EX$ + CHR$(112) +"1":PC$(6,0) = EX$ + CHR$(112) +"0": REM PROPORTIONAL
1930 PC$(7,1) = EX$ +"@": REM MASTER RESET
1940 RETURN