home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib29a.dsk / NOVEMBER.1986 / PRINT.MASTER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  11KB  |  194 lines

  1. 10  REM  **********************
  2. 20  REM  *    PRINT.MASTER    *
  3. 30  REM  * BY LOREN W. WRIGHT *
  4. 40  REM  * COPYRIGHT (C) 1986 *
  5. 50  REM  * BY MICROSPARC, INC *
  6. 60  REM  * CONCORD, MA  01742 *
  7. 70  REM  **********************
  8. 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 **"
  9. 90 EF = 1: ONERR  GOTO 1300
  10. 100  GOSUB 1190
  11. 110  GOSUB 1480: REM  READ IN MENU ITEMS
  12. 120 D$ =  CHR$(4):EX$ =  CHR$(27):HD$ = "0123456789ABCDEF"
  13. 130 PS = 1:SS = 6:SD = 1:WS = 6:WD = 1
  14. 140  DIM PC$(14,1)
  15. 150  GOSUB 1860: REM  LOAD IN DEFAULT CODES
  16. 160  GOTO 240: REM  SKIP MENU ROUTINE
  17. 170  REM  MENU HANDLER
  18. 180 SL = SE(TL)
  19. 190 N = SL:OS = SL: GOSUB 220:Z = 0: VTAB 24: HTAB PX: CALL  -868: POKE  -16368,0
  20. 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
  21. 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 
  22. 220  VTAB 3 +2 *N: HTAB SX: PRINT X$(SL = OS);: RETURN 
  23. 230  REM  MAIN MENU
  24. 240 EF = 1:HM = 0:TL = 1: GOSUB 1410
  25. 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
  26. 260  ON SE(TL) GOSUB 290,500,1040,960,780,1170
  27. 270  GOTO 240
  28. 280  REM  DISPLAY/EDIT/CHANGE
  29. 290 HM = 1:TL = 3: GOSUB 1410
  30. 300 PX = 38:SX = 4:SE(TL) = SE(TL) +(SE(TL) = 0):MX = MITEMS(TL):: GOSUB 180
  31. 310  IF Z = 20  THEN  RETURN 
  32. 320  ON SE(TL) = 8 GOTO 400: ON SE(TL) GOSUB 340,340,340,340,340,340,380
  33. 330  GOTO 290
  34. 340  GOSUB 1120: IF Z = 20  THEN  RETURN : REM  ON/OFF
  35. 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$
  36. 360  RETURN 
  37. 370  REM  HANDLE MASTER RESET
  38. 380 PX$ = PC$(7,1):P7$ = MENU$(3,SE(3)): HOME : GOSUB 1530:PC$(7,1) = PX$
  39. 390  RETURN 
  40. 400 HM = 1:TL = 5: GOSUB 1410: REM  USER-DEFINED CODES
  41. 410 PX = 38:SX = 4:SE(TL) = SE(TL) +(SE(TL) = 0):MX = MITEMS(TL):: GOSUB 180
  42. 420  IF Z = 20  THEN  RETURN 
  43. 430  ON SE(TL) = 8 GOTO 480: ON SE(TL) GOSUB 450,450,450,450,450,450,450
  44. 440  GOTO 400
  45. 450  GOSUB 1120: IF Z = 20  THEN  RETURN : REM  ON/OFF
  46. 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$
  47. 470  RETURN 
  48. 480  GOTO 290: REM  MAIN SET OF CODES
  49. 490  REM  TEST CODES
  50. 500 HM = 1:TL = 3: GOSUB 1410
  51. 510 PX = 38:SX = 4:SE(TL) = SE(TL) +(SE(TL) = 0):MX = MITEMS(TL):: GOSUB 180
  52. 520  IF Z = 20  THEN  RETURN 
  53. 530  ON SE(TL) = 8 GOTO 600: ON SE(TL) GOSUB 550,550,550,550,550,550,730
  54. 540  GOTO 500
  55. 550  HOME : VTAB 10: PRINT "TEST CODE FOR "MENU$(3,SE(3))"."
  56. 560 PS$ = PC$(SE(3),1) +"THIS IS A TEST OF " +MENU$(3,SE(3)) +"." +PC$(SE(3),0)
  57. 570  GOSUB 690: REM  PRINT STRING
  58. 580  RETURN 
  59. 590  REM  TEST USER CODES
  60. 600 HM = 1:TL = 5: GOSUB 1410
  61. 610 PX = 38:SX = 4:SE(TL) = SE(TL) +(SE(TL) = 0):MX = MITEMS(TL):: GOSUB 180
  62. 620  IF Z = 20  THEN  RETURN 
  63. 630  ON SE(TL) = 8 GOTO 500: ON SE(TL) GOSUB 650,650,650,650,650,650,650
  64. 640  GOTO 500: REM  MAIN SET OF CODES
  65. 650  HOME : VTAB 10: PRINT "TEST CODE FOR "MENU$(5,SE(5))"."
  66. 660 PS$ = PC$(SE(5) +7,1) +"THIS IS A TEST OF " +MENU$(5,SE(5)) +"." +PC$(SE(5) +7,0)
  67. 670  GOSUB 690: REM  PRINT STRING
  68. 680  RETURN 
  69. 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"
  70. 700  POKE  -16368,0: WAIT  -16384,128: IF  PEEK( -16384) = 155  THEN  RETURN 
  71. 710  PRINT D$"PR#"PS: PRINT  CHR$(9)"80N": PRINT PS$: PRINT D$"PR#0"
  72. 720  RETURN 
  73. 730  HOME : VTAB 10: PRINT "TEST CODE FOR "MENU$(3,SE(3))"."
  74. 740 PS$ = PC$(SE(3),1) +"THIS IS A TEST OF " +MENU$(3,7) +"."
  75. 750  GOSUB 690: REM  PRINT STRING
  76. 760  RETURN 
  77. 770  REM  CONFIGURE SYSTEM
  78. 780 HM = 1:TL = 2: GOSUB 1410
  79. 790 PX = 38:SX = 4:SE(TL) = SE(TL) +(SE(TL) = 0):MX = MITEMS(TL):: GOSUB 180
  80. 800  IF Z = 20  THEN  RETURN 
  81. 810  ON SE(TL) GOSUB 830,870
  82. 820  GOTO 780
  83. 830  HOME : VTAB 3: HTAB 12: INVERSE : PRINT "CONFIGURE PRINTER": NORMAL : VTAB 12: HTAB 1: PRINT "PRINTER SLOT (1-7): "PS; CHR$(8);
  84. 840  VTAB 12: HTAB 21: INPUT "";Z$: IF Z$ < >""  AND (Z$ <"1"  OR Z$ >"7")  THEN  PRINT  CHR$(7);: GOTO 840
  85. 850  IF Z$ = ""  THEN  RETURN 
  86. 860 PS =  VAL(Z$): RETURN 
  87. 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);
  88. 880  VTAB 12: HTAB 23: INPUT "";Z$: IF Z$ < >""  AND (Z$ <"1"  OR Z$ >"7")  THEN  PRINT  CHR$(7);: GOTO 880
  89. 890  IF Z$ = ""  THEN  VTAB 12: HTAB 23: PRINT WS: GOTO 910
  90. 900 WS =  VAL(Z$)
  91. 910  VTAB 15: PRINT "DATA DISK DRIVE (1-2): "WD; CHR$(8);
  92. 920  VTAB 15: HTAB 24: INPUT "";Z$: IF Z$ < >""  AND (Z$ <"1"  OR Z$ >"2")  THEN  PRINT  CHR$(7);: GOTO 920
  93. 930  IF Z$ = ""  THEN  RETURN 
  94. 940 WD =  VAL(Z$): RETURN 
  95. 950  REM  SAVE PRINTER CODES
  96. 960 EF = 2: HOME : INVERSE : HTAB 15: PRINT "SAVE FILE": NORMAL : VTAB 12
  97. 970  INPUT "FILE NAME (? FOR CATALOG): ";NA$: IF  LEFT$(NA$,1) = "?"  THEN  PRINT D$ LEFT$("CATALOG",7 -4 *( PEEK(48896) = 76)): GOTO 970
  98. 980  IF NA$ = ""  THEN  RETURN 
  99. 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$
  100. 1000  FOR I = 1 TO 14: FOR J = 0 TO 1:PX$ = PC$(I,J): GOSUB 1250: PRINT QX$: NEXT J,I
  101. 1010  PRINT D$"CLOSE"NA$
  102. 1020  RETURN 
  103. 1030  REM  LOAD PRINTER CODES
  104. 1040 EF = 3: HOME : INVERSE : HTAB 15: PRINT "LOAD FILE": NORMAL : VTAB 12
  105. 1050  INPUT "FILE NAME (? FOR CATALOG): ";NA$: IF  LEFT$(NA$,1) = "?"  THEN  PRINT D$ LEFT$("CATALOG",7 -4 *( PEEK(48896) = 76)): GOTO 1050
  106. 1060  IF NA$ = ""  THEN  RETURN 
  107. 1070  PRINT D$"OPEN"NA$: PRINT D$"READ"NA$
  108. 1080  FOR I = 1 TO 14: FOR J = 0 TO 1: INPUT QX$: GOSUB 1280:PC$(I,J) = PX$: NEXT J,I
  109. 1090  PRINT D$"CLOSE"NA$
  110. 1100  RETURN 
  111. 1110  REM  ON/OFF
  112. 1120 HM = 3:TL = 4: GOSUB 1410
  113. 1130 PX = 38:SX = 4:SE(TL) = SE(TL) +(SE(TL) = 0):MX = MITEMS(TL):: GOSUB 180
  114. 1140  IF Z = 20  THEN  RETURN 
  115. 1150  IF Z = 10  THEN PM = 2 -SE(TL): RETURN 
  116. 1160  GOTO 1120
  117. 1170  HOME : VTAB 10: INPUT "ARE YOU SURE YOU WANT TO QUIT? ";YN$: IF YN$ < >"Y"  AND YN$ < > CHR$(121)  THEN  RETURN 
  118. 1180  END 
  119. 1190  VTAB 22: HTAB 7: PRINT "PRESS <RETURN> TO CONTINUE";: GET Z$: PRINT : RETURN 
  120. 1200  REM  CHANGE DECIMAL (N) TO TWO HEX DIGITS (HX$)
  121. 1210 NN =  INT(N/16):HX$ =  MID$ (HD$,NN +1,1) + MID$ (HD$(N -16 *NN +1,1): RETURN 
  122. 1220  REM  CHANGE HEX PAIR (HX$) TO ASCII (N)
  123. 1230 N = 16 *( ASC( LEFT$(HX$,1)) -48 -7 *(HX$ >"A")) + ASC( RIGHT$(HX,1)) -48 -7 *( RIGHT$(HX$,1) >"9"): RETURN 
  124. 1240  REM  CONVERT ASCII STRING PX$ TO HEX STRING QX$
  125. 1250 QX$ = "": IF PX$ = ""  THEN  RETURN 
  126. 1260  FOR L = 1 TO  LEN(PX$):N =  ASC( MID$ (PX$,L,1)): GOSUB 1210:QX$ = QX$ +HX$: NEXT L: RETURN 
  127. 1270  REM  DECODE HEX STRING QX$ TO ASCII STRING PX$
  128. 1280 LQ =  LEN(QX$): IF (LQ <2)  OR (LQ/2 - INT(LQ/2))  THEN  RETURN 
  129. 1290 PX$ = "": FOR K = 1 TO LQ -1  STEP 2:HX$ =  MID$ (QX$,K,2): GOSUB 1230:PX$ = PX$ + CHR$(N): NEXT K: RETURN 
  130. 1300  CALL  -3288:E =  PEEK(222):EL =  PEEK(218) +256 * PEEK(219)
  131. 1310  HOME : VTAB 12: HTAB 1
  132. 1320  IF E = 4  THEN  PRINT "DISK IS WRITE-PROTECTED.": GOTO 1390
  133. 1330  IF E = 5  THEN  PRINT "END OF DATA": GOTO 1390
  134. 1340  IF E = 6  THEN  PRINT "FILE NOT FOUND": GOTO 1390
  135. 1350  IF E = 8  THEN  PRINT "I/O ERROR--CHECK DRIVE DOOR.": GOTO 1390
  136. 1360  IF E = 9  THEN  PRINT "THIS DISK IS FULL. TRY ANOTHER.": GOTO 1390
  137. 1370  IF E = 11  THEN  PRINT "ILLEGAL FILE NAME": GOTO 1390
  138. 1380  PRINT "ERROR "E" HAS OCCURRED": PRINT "IN LINE "EL"."
  139. 1390  GOSUB 1190: ON EF GOTO 240,960,1040
  140. 1400  REM  PRINT A MENU
  141. 1410  HOME :TL$ = MENU$(TL,0): IF HM  THEN  PRINT "<";: INVERSE : PRINT "ESC";: NORMAL : PRINT "> FOR ";MENU$(HM,0)
  142. 1420  VTAB 3: HTAB  INT((40 - LEN(TL$))/2)
  143. 1430  INVERSE : PRINT TL$: NORMAL 
  144. 1440  FOR I = 1 TO MITEMS(TL): VTAB 3 +2 *I: HTAB 8: PRINT I". "MENU$(TL,I): NEXT 
  145. 1450  VTAB 24: HTAB 1: PRINT "USE ARROWS/NUMBERS & PRESS <RETURN>: ";
  146. 1460  RETURN 
  147. 1470  REM  READ MENU DATA
  148. 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
  149. 1490  DIM X$(1):X$(0) = "   ":X$(1) = "-->"
  150. 1500  RETURN 
  151. 1510  REM  ROUTINE TO INPUT PRINTER CODES
  152. 1520  REM  PX$ IS PRINTER CONTROL STRING; P7$ IS CURRENT DESCRIPTION; I7,X7,X7$ AND Y7 ARE USED ONLY LOCALLY
  153. 1530  VTAB 15: HTAB 1: GOSUB 1780: VTAB 16: HTAB 1: CALL  -958: GOTO 1680
  154. 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
  155. 1550  POKE  -16368,0
  156. 1560 X7 =  PEEK( -16384): IF X7 <128 GOTO 1560
  157. 1570 X7 = X7 -128
  158. 1580  IF X7 = 94  THEN  RETURN 
  159. 1590 PX$ = PX$ + CHR$(X7): IF  LEN(PX$) >20  THEN PX$ =  LEFT$(PX$,20): PRINT  CHR$(7);: GOTO 1550
  160. 1600  IF X7 = 13  THEN X7$ = " <RETURN> ": GOTO 1650
  161. 1610  IF X7 = 27  THEN X7$ = " <ESC> ": GOTO 1650
  162. 1620  IF X7 = 32  THEN X7$ = " SPACE ": GOTO 1650
  163. 1630  IF X7 <32  THEN X7$ = " <CTRL>-" + CHR$(X7 +64) +" ": GOTO 1650
  164. 1640 X7$ =  CHR$(X7)
  165. 1650  GOSUB 1660: ON   NOT Y7 GOTO 1550: RETURN 
  166. 1660  IF  LEN(X7$) >40 - POS(0)  THEN  PRINT 
  167. 1670  PRINT X7$;: RETURN 
  168. 1680  IF PX$ = ""  THEN  PRINT "<NONE>": GOTO 1700
  169. 1690 Y7 = 1: FOR I7 = 1 TO  LEN(PX$):X7 =  ASC( MID$ (PX$,I7,1)): GOSUB 1600: NEXT I7
  170. 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
  171. 1710  POKE  -16368,0
  172. 1720 X7 =  PEEK( -16384): IF X7 <128 GOTO 1720
  173. 1730 X7 = X7 -128: IF X7 = 13  THEN  ON   NOT (Y7) GOTO 1540: RETURN 
  174. 1740  IF   NOT (X7 = 8  OR X7 = 10  OR X7 = 11  OR X7 = 21)  THEN  PRINT  CHR$(7);: GOTO 1710
  175. 1750 Y7 = 1 -Y7
  176. 1760  IF Y7  THEN  VTAB 24: HTAB 13: NORMAL : PRINT "NO ";: INVERSE : PRINT "YES";: NORMAL : GOTO 1710
  177. 1770  VTAB 24: HTAB 13: INVERSE : PRINT "NO";: NORMAL : PRINT " YES";: GOTO 1710
  178. 1780  FOR I7 = 1 TO 40: PRINT  CHR$(95);: NEXT : RETURN 
  179. 1790  CALL  -3288: IF  PEEK(222) = 255  THEN X7 = 3: GOTO 1580
  180. 1800  HOME : VTAB 12: PRINT "ERROR " PEEK(222): PRINT "IN LINE " PEEK(218) +256 * PEEK(219): END 
  181. 1810  DATA  5,6,MAIN MENU,DISPLAY/EDIT/CHANGE,TEST,LOAD FILE,SAVE FILE,CONFIGURE SYSTEM,QUIT
  182. 1820  DATA  2,CONFIGURE SYSTEM,PRINTER SLOT,DATA DISK
  183. 1830  DATA  8,CODE MENU,BOLD,UNDERLINE,COMPRESSED,EXPANDED,DOUBLE-STRIKE,PROPORTIONAL,MASTER RESET,MORE CHOICES
  184. 1840  DATA  2,"",ON,OFF
  185. 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
  186. 1860  REM  EPSON STANDARD CODES
  187. 1870 PC$(1,1) = EX$ +"E":PC$(1,0) = EX$ +"F": REM  BOLD
  188. 1880 PC$(2,1) = EX$ +"-1":PC$(2,0) = EX$ +"-0": REM  UNDERLINE
  189. 1890 PC$(3,1) =  CHR$(15):PC$(3,0) =  CHR$(18): REM  COMPRESSED
  190. 1900 PC$(4,1) =  CHR$(14):PC$(4,0) =  CHR$(20): REM  EXPANDED
  191. 1910 PC$(5,1) = EX$ +"G":PC$(5,0) = EX$ +"H": REM  DOUBLE-STRIKE
  192. 1920 PC$(6,1) = EX$ + CHR$(112) +"1":PC$(6,0) = EX$ + CHR$(112) +"0": REM  PROPORTIONAL
  193. 1930 PC$(7,1) = EX$ +"@": REM  MASTER RESET
  194. 1940  RETURN