home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib40a.dsk / APRIL.1991 / NIBBLE.PUBLISH.bas < prev    next >
BASIC Source File  |  2023-02-26  |  19KB  |  326 lines

  1. 1  REM  *************************
  2. 2  REM  * NIBBLE.PUBLISH        *
  3. 3  REM  * BY ROBERT T. YUILLE   *
  4. 4  REM  * COPYRIGHT (C) 1991    *
  5. 5  REM  * MINDCRAFT PUBL. CORP. *
  6. 6  REM  * CONCORD, MA 01742     *
  7. 7  REM  *************************
  8. 10  REM  PROTECT HI-RES PAGES
  9. 20 :
  10. 30  IF  PEEK(104) = 96  THEN 50
  11. 40  POKE 103,1: POKE 104,96: POKE 24576,0: PRINT  CHR$(4)"RUN NIBBLE.PUBLISH"
  12. 50  TEXT : HOME : PRINT  CHR$(21): VTAB 8: NORMAL 
  13. 60  REM  TITLE SCREEN
  14. 70  VTAB 8: INVERSE : FOR I = 1 TO 40: PRINT "*";: NEXT : NORMAL 
  15. 80  VTAB 10: HTAB 8: PRINT "NIBBLE GRAPHIC PUBLISHER"
  16. 90  HTAB 10: PRINT "BY: ROBERT T. YUILLE"
  17. 100  HTAB 8: PRINT "(C) 1991 MINDCRAFT PUBL."
  18. 110  VTAB 14: INVERSE : FOR I = 1 TO 40: PRINT "*";: NEXT : NORMAL : PRINT 
  19. 120  GOSUB 2990
  20. 130 :
  21. 140  REM  INITIALIZATION
  22. 150 :
  23. 160  REM  PRINTER FLAG: IMAGEWRITER = 1
  24. 170 PF = 1: POKE 7,PF
  25. 180 D$ =  CHR$(4):H$ =  CHR$(8):I$ =  CHR$(9):J$ =  CHR$(10):K$ =  CHR$(11):R$ =  CHR$(13):U$ =  CHR$(21):E$ =  CHR$(27):BL =  -198:DR = 1:ST = 6:TB = 12
  26. 190 CL$(0) = "BLACK 1":CL$(1) = "GREEN  ":CL$(2) = "VIOLET ":CL$(3) = "WHITE 1":CL$(4) = "BLACK 2":CL$(5) = "ORANGE ":CL$(6) = "BLUE   ":CL$(7) = "WHITE 2"
  27. 200 PD =  PEEK(48896) = 76: ON PD GOTO 240:D$ = R$ +D$
  28. 210 :
  29. 220  REM  LOAD BIN FILES & HRL ADDR
  30. 230 :
  31. 240  HOME : VTAB 10: PRINT "PLEASE WAIT ......"
  32. 250 LK = 1: ONERR  GOTO 3090
  33. 260 P$ = "CHARACTER.SET": PRINT D$"BLOAD"P$:P$ = "SCRN.DMP.BIN": PRINT D$"BLOAD"P$
  34. 270 :
  35. 280 D = 2304:C = 0:A = 0: HTAB 19: VTAB 10: GOSUB 290:A = 32: GOSUB 290: GOTO 350
  36. 290  FOR X = 0 TO 2:B = 31 +A: FOR Y = 0 TO 3:B = B +1: FOR J = 0 TO 1: FOR K = 0 TO 7: POKE D +C,B +(4 *K):C = C +1: NEXT K,J,Y: PRINT ".";: NEXT 
  37. 300 B = 0: GOSUB 310: PRINT ".";:B = 40: GOSUB 310: PRINT ".";:B = 80: GOSUB 310: PRINT ".";: RETURN 
  38. 310  FOR Y = 0 TO 3: FOR J = 0 TO 1: FOR K = 0 TO 7: POKE D +C,B:C = C +1: NEXT :B = B +128: NEXT :B = B -256: NEXT : RETURN 
  39. 320 :
  40. 330  REM  SET UP SHAPE TABLE
  41. 340 :
  42. 350  FOR K = 0 TO 29: READ X: POKE (768 +K),X: NEXT : POKE 232,0: POKE 233,3: CALL BL
  43. 360  DATA  4,0,10,0,20,0,26,0,28,0,186,45,21,31,31,78,54,54,54,0,186,45,30,54,54,0,50,0,4,0
  44. 370 :
  45. 380  REM  LOAD PICTURE FILE
  46. 390 :
  47. 400 CF = 1: HOME : TEXT : VTAB 5: PRINT "ENTER NAME OF PICTURE TO BE LOADED"R$R$"INPUT '?' TO CATALOG DISK"R$R$"PRESS <RTN> TO START NEW PICTURE"R$R$R$"PICTURE FILNAME: ";:VS = 12:FF = 1: GOSUB 2780
  48. 410  IF P$ = "?"  THEN 2480
  49. 420  IF P$ = E$  OR P$ = ""  THEN 450
  50. 430 LK = 2: ONERR  GOTO 3090
  51. 440  HGR : PRINT D$"BLOAD"P$",A$2000": GOTO 460
  52. 450  HGR 
  53. 460  SCALE= 1:RN = 0:RS = RN:CC = 3:SL = 1:SH = 2:SS = SH:X = 1:SX = 1:Y = 153:SY = 153
  54. 470 :
  55. 480  REM  MAIN LOOP
  56. 490 :
  57. 500  HOME : HTAB 7: VTAB 21: PRINT "PRESS 'H' FOR HELP SCREEN"R$"COLOR: "CL$(CC)R$"SCALE: "SL" INCH/DOT";: ON SL GOTO 510: HTAB 1: PRINT "SCALE: "SL" INCHES/DOT"
  58. 510  VTAB 22: HTAB 25: PRINT "X:    ";: HTAB 28: PRINT X: HTAB 25: PRINT "Y:    ";: HTAB 28: PRINT Y
  59. 520  ROT= RN: HCOLOR= 3: XDRAW SH AT X,Y: GOSUB 3030: XDRAW SH AT X,Y: HCOLOR= CC: IF  PEEK(49249) =  >128  THEN 1000
  60. 530  IF  PEEK(49250) =  >128  THEN 1140
  61. 540  GOSUB 3040: IF A$ = "A"  THEN 1220
  62. 550  IF A$ = "B"  THEN  FOR K = 1 TO 100: NEXT : HCOLOR= 3: XDRAW SH AT X,Y: FOR K = 1 TO 100: NEXT : XDRAW SH AT X,Y: GOTO 520
  63. 560  IF A$ = "C"  THEN  ON CC = 7 GOTO 800:CC = CC +1: GOTO 500
  64. 570  IF A$ = "D"  THEN  HPLOT X,Y: GOTO 520
  65. 580  IF A$ = "E"  THEN  HCOLOR= 0: HPLOT X,Y: GOTO 520
  66. 590  IF A$ = "F"  THEN SX = X:SY = Y:RS = RN:SS = SH: GOTO 520
  67. 600  IF A$ = "H"  THEN 860
  68. 610  IF A$ = "J"  THEN 1080
  69. 620  IF A$ = "L"  THEN  GOSUB 2980: ON YN GOTO 400: GOTO 2370
  70. 630  IF A$ = "M"  THEN  GOSUB 1290: GOTO 520
  71. 640  IF A$ = "N"  THEN  GOSUB 2980: ON YN GOTO 450: GOTO 2370
  72. 650  IF A$ = "P"  THEN 1420
  73. 660  IF A$ = "Q"  THEN 2430
  74. 670  IF A$ = "R"  THEN  ON RN = 48 GOTO 810:RN = RN +16: GOTO 520
  75. 680  IF A$ = "S"  THEN 2290
  76. 690  IF A$ = "T"  THEN 1350
  77. 700  IF A$ = "V"  THEN A = 0: GOTO 1620
  78. 710  IF A$ = "W"  THEN 1910
  79. 720  IF A$ = "X"  THEN A = 1: GOTO 1620
  80. 730  IF A$ = "Z"  THEN  ON SH = 3 GOTO 820:SH = SH +1: GOTO 520
  81. 740  IF A$ = H$  THEN  ON X = 0 GOTO 790:X = X -1: GOTO 510
  82. 750  IF A$ = U$  THEN  ON X = 279 GOTO 790:X = X +1: GOTO 510
  83. 760  IF A$ = J$  THEN  ON Y = 159 GOTO 790:Y = Y +1: GOTO 510
  84. 770  IF A$ = K$  THEN  ON Y = 0 GOTO 790:Y = Y -1: GOTO 510
  85. 780 K = (A$ =  CHR$(18)) +2 *(A$ =  CHR$(12)) +3 *(A$ =  CHR$(2)) +4 *(A$ =  CHR$(20)) +5 *(A$ =  CHR$(16)): ON K GOTO 1000,1010,1020,1030,2110
  86. 790  CALL BL: GOTO 520
  87. 800 CC = 0: GOTO 500
  88. 810 RN = 0: GOTO 520
  89. 820 SH = 1: GOTO 520
  90. 830 :
  91. 840  REM  HELP SCREEN
  92. 850 :
  93. 860  TEXT : HOME : PRINT "        CURSOR MOVEMENT/COMMANDS"R$R$"ARROW KEYS - MOVE CURSOR BY ONE DOT"R$"FOLLOWING KEYS MOVE CURSOR BY 20 DOTS"R$"   OPEN APPLE ARROW - DIRECTION OF ARROW";
  94. 870  PRINT "   OR <CTRL>-L,<CTRL>-R - LEFT OR RIGHT"R$"   OR <CTRL>-B,<CTRL>-T - DOWN OR UP"R$"J - JUMP CURSOR TO X,Y INPUT"R$"CLOSED APPLE ARROW KEYS -"R$"   ROTATE CURSOR TO DIRECTION OF ARROW"
  95. 880  PRINT "R - ROTATE CURSOR 90~ CLOCKWISE"R$"B - BLINK CURSOR"R$"Z - CHANGE SIZE OF CURSOR"R$R$"       PROGRAM OPTIONS/COMMANDS"R$R$"<CTRL>-P - DUMPS CURR SCREEN TO PRINTER"
  96. 890  PRINT "L - LOAD A DIFFERENT PICTURE"R$"N - START A NEW PICTURE"R$"S - SAVE THE CURRENT PICTURE"R$"Q - QUIT THE PROGRAM"
  97. 900  PRINT R$"PRESS <ESC> TO EXIT HELP MENUS": GOSUB 2990: ON A$ = E$ GOTO 2370: HOME : PRINT "        DRAWING OPTIONS/COMMANDS"R$R$"D - DRAW DOT AT CURSOR POINT"R$R$"E - ERASE DOT AT CURSOR POINT"
  98. 910  PRINT : PRINT "F - REGISTERS STARTING POINT (FROM)"R$R$"M - DISPLAYS LENGTH OF LINE (MEASURE)"R$R$"T - DRAW/ERASE LINE (TO)"R$R$"P - ENTER PAINT LINE MODE"R$"    <ESC> KEY - EXITS MODE"
  99. 920  PRINT "    ARROW KEYS - DRAW LINE AT 90~ ANGLE"R$"    FOLLOWING KEYS DRAW 45~ ANGLE LINE"R$"       (,) - UP & LEFT, UP & RIGHT"R$"       <,> - DOWN & LEFT, DOWN & RIGHT"
  100. 930  PRINT "    D/E - SWITCH BETWEEN DRAW & ERASE"R$"    F/M - AS DESCRIBED ABOVE"R$R$"PRESS <ESC> TO EXIT HELP MENUS": GOSUB 2990: ON A$ = E$ GOTO 2370: HOME : PRINT "    DRAWING OPTIONS/COMMANDS, CONT'D"
  101. 940  PRINT R$"A - CHANGE SCALE OF PICTURE"R$R$"C - CHANGE COLOR"R$R$"V - ENTER MOVE SECTION MODE"R$"    <ESC> KEY - EXITS MODE"R$"    ARROW KEYS - MOVE SECTION BY 1 DOT"
  102. 950  PRINT R$"W - ENTER TEXT MODE"R$"    <ESC> KEY - EXITS MODE"R$"    <CTRL>-X - SWITCHES NORMAL/GRAPHICS"R$"    ARROW KEYS - MOVE DOT CURSOR"R$"    TEXT KEYS - ENTER TEXT ABOVE CURSOR"
  103. 960  PRINT R$"X - ENTER EXPAND SECTION MODE"R$"    <ESC> KEY - EXITS MODE"R$"    R - EXPANDS TO RIGHT"R$"    D - EXPANDS DOWN": GOSUB 2990: GOTO 2370
  104. 970 :
  105. 980  REM  OPEN APPLE-ARROWS
  106. 990 :
  107. 1000  IF A$ = U$  OR A$ =  CHR$(18)  THEN  ON X >259 GOTO 790:X = X +20: GOTO 510
  108. 1010  IF A$ = H$  OR A$ =  CHR$(12)  THEN  ON X <20 GOTO 790:X = X -20: GOTO 510
  109. 1020  IF A$ = J$  OR A$ =  CHR$(2)  THEN  ON Y >139 GOTO 790:Y = Y +20: GOTO 510
  110. 1030  IF A$ = K$  OR A$ =  CHR$(20)  THEN  ON Y <20 GOTO 790:Y = Y -20: GOTO 510
  111. 1040  GOTO 790
  112. 1050 :
  113. 1060  REM  JUMP CURSOR
  114. 1070 :
  115. 1080  HOME : VTAB 23: INPUT "COLUMN LOCATION - X -? ";X: INPUT "ROW LOCATION - Y -? ";Y
  116. 1090  IF X <0  OR X >279  OR Y <0  OR Y >159  THEN  CALL BL: GOTO 1080
  117. 1100  GOTO 500
  118. 1110 :
  119. 1120  REM  CLOSED APPLE-MACROS
  120. 1130 :
  121. 1140  IF A$ = H$  THEN RN = 48: GOTO 520
  122. 1150  IF A$ = U$  THEN RN = 16: GOTO 520
  123. 1160  IF A$ = J$  THEN RN = 32: GOTO 520
  124. 1170  IF A$ = K$  THEN RN = 0: GOTO 520
  125. 1180  GOTO 790
  126. 1190 :
  127. 1200  REM  CHANGE SCALE FACTOR
  128. 1210 :
  129. 1220  HTAB 1: VTAB 24: CALL  -868: HTAB 10: INPUT "SCALE FACTOR?: ";A$: IF  LEN(A$) >3  THEN A$ =  LEFT$(A$,3)
  130. 1230  IF  VAL(A$) <.1  THEN SL = .1: GOTO 500
  131. 1240  IF  VAL(A$) >240  THEN SL = 240: GOTO 500
  132. 1250 SL =  VAL(A$): GOTO 500
  133. 1260 :
  134. 1270  REM  MEASURE LINE LENGTH
  135. 1280 :
  136. 1290 EX = X:EY = Y:A = SL *((EX -SX) ^2 +(EY -SY) ^2) ^.5:B =  INT(A/12):C = A -B *12: IF  LEFT$( RIGHT$( STR$(C),4),1) = "E"  THEN A$ = "0": GOTO 1310
  137. 1300 A$ =  LEFT$( STR$(C),6)
  138. 1310  HTAB 1: VTAB 24: CALL  -868: PRINT "LENGTH= "B" FT "A$" IN";: RETURN 
  139. 1320 :
  140. 1330  REM  DRAW OR ERASE LINE
  141. 1340 :
  142. 1350 EX = X:EY = Y: HTAB 1: VTAB 24: CALL  -868: PRINT "DRAW OR ERASE D/E?: ";
  143. 1360  GET A$: GOSUB 3040: IF A$ = "D"  THEN  HPLOT SX,SY TO EX,EY: GOTO 500
  144. 1370  IF A$ = "E"  THEN  HCOLOR= 0: HPLOT SX,SY TO EX,EY: GOTO 500
  145. 1380  CALL BL: GOTO 1360
  146. 1390 :
  147. 1400  REM  PAINT LINES MODE
  148. 1410 :
  149. 1420  HOME : VTAB 21: PRINT "USE ARROW KEYS OR < > ( ) TO PAINT LINES""<ESC> EXITS MODE"R$"D/E - DRAW OR ERASE DOTS"R$"F AND M KEYS MEASURE AS BEFORE";
  150. 1430 XS = X:YS = Y: HCOLOR= 3: XDRAW SH AT X,Y: HCOLOR= CC: HPLOT X,Y
  151. 1440  VTAB 22: HTAB 30: PRINT "X:    ";: HTAB 33: PRINT X: HTAB 30: PRINT "Y:    ";: HTAB 33: PRINT Y
  152. 1450  GOSUB 3030: IF A$ = E$  THEN X = XS:Y = YS: XDRAW SH AT X,Y: GOTO 500
  153. 1460  IF A$ = H$  THEN  ON X = 0 GOTO 1580:X = X -1: HPLOT X,Y: GOTO 1440
  154. 1470  IF A$ = U$  THEN  ON X = 279 GOTO 1580:X = X +1: HPLOT X,Y: GOTO 1440
  155. 1480  IF A$ = J$  THEN  ON Y = 159 GOTO 1580:Y = Y +1: HPLOT X,Y: GOTO 1440
  156. 1490  IF A$ = K$  THEN  ON Y = 0 GOTO 1580:Y = Y -1: HPLOT X,Y: GOTO 1440
  157. 1500  IF A$ = "("  OR A$ = "9"  THEN  ON X = 0  OR Y = 0 GOTO 1580:X = X -1:Y = Y -1: HPLOT X,Y: GOTO 1440
  158. 1510  IF A$ = ")"  OR A$ = "0"  THEN  ON X = 279  OR Y = 0 GOTO 1580:X = X +1:Y = Y -1: HPLOT X,Y: GOTO 1440
  159. 1520  IF A$ = "<"  OR A$ = ","  THEN  ON X = 0  OR Y = 159 GOTO 1580:X = X -1:Y = Y +1: HPLOT X,Y: GOTO 1440
  160. 1530  IF A$ = ">"  OR A$ = "."  THEN  ON X = 279  OR Y = 159 GOTO 1580:X = X +1:Y = Y +1: HPLOT X,Y: GOTO 1440
  161. 1540  GOSUB 3040: IF A$ = "D"  THEN  HCOLOR= CC: HPLOT X,Y: GOTO 1440
  162. 1550  IF A$ = "E"  THEN  HCOLOR= 0: HPLOT X,Y: GOTO 1440
  163. 1560  IF A$ = "F"  THEN SX = X:SY = Y: GOTO 1440
  164. 1570  IF A$ = "M"  THEN  GOSUB 1290: GOTO 1440
  165. 1580  CALL BL: GOTO 1440
  166. 1590 :
  167. 1600  REM  MOVE/EXPAND SECTION MODE
  168. 1610 :
  169. 1620 EX = X:EY = Y: IF EX <SX  OR EY >SY  OR (EX = SX  AND EY = SY)  THEN  CALL BL: GOTO 500
  170. 1630  HCOLOR= 3: XDRAW SH AT X,Y: ROT= RS: XDRAW SS AT SX,SY: ROT= 0: ON A GOTO 1760: HOME : VTAB 21: PRINT  SPC( 14)"MOVE SECTION"R$"<ESC> EXITS MODE"R$R$"USE ARROWS TO MOVE SECTION L,R,U,D: ";
  171. 1640  GET A$: IF A$ = E$  THEN 1870
  172. 1650  IF A$ = H$  THEN  ON SX = 0 GOTO 1690:A = SX:B = EX:C = 1:D =  -1: GOTO 1700
  173. 1660  IF A$ = U$  THEN  ON EX = 279 GOTO 1690:A = EX:B = SX:C =  -1:D = 1: GOTO 1700
  174. 1670  IF A$ = K$  THEN  ON EY = 0 GOTO 1690:A = EY:B = SY:C = 1:D =  -1: GOTO 1730
  175. 1680  IF A$ = J$  THEN  IF SY <159  THEN A = SY:B = EY:C =  -1:D = 1: GOTO 1730
  176. 1690  CALL BL: GOTO 1640
  177. 1700  FOR J = EY TO SY: FOR K = A TO B  STEP C: XDRAW 4 AT K,J: IF  PEEK(234)  THEN  XDRAW 4 AT K,J: GOTO 1720
  178. 1710  HPLOT K +D,J
  179. 1720  NEXT K,J: GOTO 1640
  180. 1730  FOR J = SX TO EX: FOR K = A TO B  STEP C: XDRAW 4 AT J,K: IF  PEEK(234)  THEN  XDRAW 4 AT J,K: GOTO 1750
  181. 1740  HPLOT J,K +D
  182. 1750  NEXT K,J: GOTO 1640
  183. 1760  HOME : VTAB 21: PRINT  SPC( 13)"EXPAND SECTION"R$"<ESC> EXITS MODE"R$R$"EXPAND RIGHT OR DOWN (R/D)?: ";
  184. 1770  GET A$: IF A$ = E$  THEN 1870
  185. 1780  GOSUB 3040: IF A$ = "R"  THEN  ON (2 *EX -SX) >278 GOTO 1800: GOTO 1840
  186. 1790  IF A$ = "D"  THEN  IF (2 *SY -EY) < = 158  THEN 1810
  187. 1800  CALL BL: GOTO 1770
  188. 1810  FOR J = SX TO EX: FOR K = SY TO EY  STEP  -1: XDRAW 4 AT J,K: IF  PEEK(234)  THEN  XDRAW 4 AT J,K: GOTO 1830
  189. 1820  HPLOT J,2 *K -EY: HPLOT J,2 *K -EY +1
  190. 1830  NEXT K,J: GOTO 1870
  191. 1840  FOR J = EY TO SY: FOR K = EX TO SX  STEP  -1: XDRAW 4 AT K,J: IF  PEEK(234)  THEN  XDRAW 4 AT K,J: GOTO 1860
  192. 1850  HPLOT 2 *K -SX,J: HPLOT 2 *K -SX +1,J
  193. 1860  NEXT K,J
  194. 1870  ROT= RN: XDRAW SH AT X,Y:RN = RS: ROT= RN:SH = SS:X = SX:Y = SY: XDRAW SH AT X,Y: GOTO 500
  195. 1880 :
  196. 1890  REM  TEXT WRITING MODE
  197. 1900 :
  198. 1910  HOME : VTAB 21: PRINT "TYPE IN TEXT";: HTAB 20: PRINT "<ESC> EXITS MODE"R$"<CTRL>-X SWITCHES NORMAL/GRAPHICS"R$"ARROW KEYS MOVE DOT CURSOR": HCOLOR= 3: ROT= 0:YY = Y:XX =  INT(X/7)
  199. 1920  HTAB 1: VTAB 24: CALL  -868: PRINT "CHARACTER SET: ";: IF TB = 12  THEN  PRINT "NORMAL";: GOTO 1940
  200. 1930  PRINT "GRAPHICS";
  201. 1940  XDRAW 4 AT XX *7 +3,YY: GOSUB 3030: XDRAW 4 AT XX *7 +3,YY: IF A$ = E$  THEN X = XX *7 +4:Y = YY:SH = 2:RN = 0: GOTO 500
  202. 1950  IF A$ = H$  THEN  ON XX = 0 GOTO 2000:XX = XX -1: GOTO 1940
  203. 1960  IF A$ = U$  THEN  ON XX = 39 GOTO 2010:XX = XX +1: GOTO 1940
  204. 1970  IF A$ = J$  THEN  ON YY >151 GOTO 2030:YY = YY +8: GOTO 1940
  205. 1980  IF A$ = K$  THEN  ON YY <8 GOTO 2030:YY = YY -8: GOTO 1940
  206. 1990  GOTO 2020
  207. 2000  ON YY <8 GOTO 2030:XX = 39:YY = YY -8: GOTO 1940
  208. 2010  ON YY >151 GOTO 2030:XX = 0:YY = YY +8: GOTO 1940
  209. 2020  IF A$ =  CHR$(24)  THEN TB = 27 -TB: GOTO 1920
  210. 2030  IF YY <7  OR A$ < CHR$(32)  THEN  CALL BL: GOTO 1940
  211. 2040 A = ( ASC(A$) -32) *8:YY = YY -7: FOR K = 0 TO 7: POKE (( PEEK(2304 +YY) *256) + PEEK(2496 +YY) +XX), PEEK(TB *256 +A +K):YY = YY +1: NEXT : IF XX <39  THEN XX = XX +1: GOTO 2070
  212. 2050  IF YY <153  THEN XX = 0:YY = YY +7: GOTO 1940
  213. 2060  CALL BL
  214. 2070 YY = YY -1: GOTO 1940
  215. 2080 :
  216. 2090  REM  SCREEN DUMP
  217. 2100 :
  218. 2110  HOME : VTAB 21: PRINT "PRINTER READY?"R$"PRESS <RTN> TO CONTINUE ";: GET A$: IF A$ = E$  THEN 500
  219. 2120  HOME : VTAB 22: PRINT "DO YOU WANT TO PRINT 2 COLUMNS (Y/N)? ";: POKE 8,0: POKE 9,0: GOSUB 3000: IF YN  THEN  POKE 8,1
  220. 2130  HOME : VTAB 22: PRINT "LARGE OR SMALL CHARACTERS (L/S)? ";
  221. 2140  GET A$: GOSUB 3040: IF A$ = "L"  THEN  ON YN GOTO 2170: GOTO 2210
  222. 2150  IF A$ < >"S"  THEN  CALL BL: GOTO 2140
  223. 2160  POKE 9,1: IF YN = 0  THEN 2210
  224. 2170  HOME : VTAB 21: PRINT "ENTER NAME OF PICTURE FOR SECOND COLUMN"R$"INPUT '?' TO CATALOG DISK"R$"PICTURE FILENAME: ";:CF = 2:VS = 23:FF = 1: GOSUB 2780: IF P$ = E$  OR P$ = ""  THEN 2110
  225. 2180  IF P$ = "?"  THEN 2480
  226. 2190 LK = 3: ONERR  GOTO 3090
  227. 2200  PRINT D$"BLOAD"P$",A$4000"
  228. 2210  PRINT D$"PR#1"
  229. 2220  PRINT I$"L D"I$"K"I$"Z"
  230. 2230  IF PF = 0  THEN  PRINT E$"A" CHR$(7): GOTO 2250
  231. 2240  PRINT E$"n"E$"T14"E$">": REM  9CPI,DIST BTWN LNS,LEFT TO RIGHT ONLY
  232. 2250  CALL 4608: PRINT D$"PR#0": GOTO 500
  233. 2260 :
  234. 2270  REM  SAVE CURRENT PICTURE
  235. 2280 :
  236. 2290  HOME : VTAB 21: PRINT "INPUT '?' TO CATALOG DISK"R$"PRESS <ESC> TO CANCEL SAVE"R$"PICTURE FILENAME: ";:CF = 3:VS = 23:FF = 1: GOSUB 2780: IF P$ = "?"  THEN 2480
  237. 2300  IF P$ = E$  OR P$ = ""  THEN 2370
  238. 2310  ONERR  GOTO 2350
  239. 2320  PRINT D$"VERIFY"P$: HOME : VTAB 21: PRINT "FILE: ("P$") ALREADY EXISTS"R$R$"DO YOU WANT TO REPLACE"R$"THE EXISTING FILE: (Y/N)? ";: GOSUB 3000: IF YN = 0  THEN 2290
  240. 2330 LK = 4: ONERR  GOTO 3090
  241. 2340  PRINT D$"DELETE"P$
  242. 2350 LK = 4: ONERR  GOTO 3090
  243. 2360  PRINT D$"BSAVE"P$",A$2000,L8192"
  244. 2370  POKE  -16304,1: GOTO 500
  245. 2380  POKE  -16304,1: GOTO 2170
  246. 2390  POKE  -16304,1: GOTO 2290
  247. 2400 :
  248. 2410  REM  QUIT?
  249. 2420 :
  250. 2430  HOME : TEXT : VTAB 10: PRINT "ARE YOU SURE YOU WANT TO QUIT (Y/N)? ";: GOSUB 3000: IF YN = 0  THEN 2370
  251. 2440  POKE 103,1: POKE 104,8: POKE 2048,0: HOME : END 
  252. 2450 :
  253. 2460  REM  CHANGE PREFIX/SLOT/DRIVE
  254. 2470 :
  255. 2480  TEXT : HOME : VTAB 10: ON PD GOTO 2490: PRINT "DO YOU WANT TO CHANGE"R$R$"THE SLOT OR DRIVE (Y/N)? ";: GOTO 2500
  256. 2490  PRINT "DO YOU WANT TO CHANGE"R$R$"THE PREFIX/SLOT/DRIVE (Y/N)? ";
  257. 2500  GOSUB 3000: IF YN = 0  THEN 2730
  258. 2510  HOME : PRINT "THE CURRENT SETTINGS ARE:"R$: IF PD = 1  THEN  PRINT "PREFIX= "PR$: GOTO 2530
  259. 2520  PRINT "SLOT= "ST"  DRIVE= "DR
  260. 2530  PRINT R$"PRESS THE NUMBER OF THE ITEM YOU WANT"R$R$"TO CHANGE, OR <ESC> TO CANCEL CHANGE"R$R$: HTAB 10: PRINT "1. DRIVE"R$: HTAB 10: PRINT "2. SLOT": IF PD = 0  THEN 2550
  261. 2540  PRINT : HTAB 10: PRINT "3. PREFIX"
  262. 2550  PRINT R$: HTAB 10: PRINT "YOUR CHOICE? ";
  263. 2560  GET A$: IF A$ = E$  THEN 2730
  264. 2570  ON  VAL(A$) GOTO 2590,2670: IF A$ = "3"  AND PD = 1  THEN 2700
  265. 2580  CALL BL: GOTO 2560
  266. 2590  HOME 
  267. 2600  VTAB 14: PRINT "WHICH DRIVE? (1/2) ";
  268. 2610  GET A$: IF A$ = "1"  OR A$ = "2"  THEN  PRINT A$:DR =  VAL(A$): GOTO 2630
  269. 2620  CALL BL: GOTO 2610
  270. 2630 LK = 5: ONERR  GOTO 3090
  271. 2640  ON PD GOTO 2660
  272. 2650  PRINT D$"VERIFY CHGSD,S"ST",D"DR: POKE 216,0: GOTO 2730
  273. 2660  PRINT D$"PREFIX ,S"ST",D"DR: POKE 216,0: PRINT D$"PREFIX": INPUT PR$: GOTO 2730
  274. 2670  HOME : VTAB 10: PRINT "WHICH SLOT? (2-7) ";: ON PD GOTO 2680: HTAB 1: PRINT "WHICH SLOT? (3-6) ";
  275. 2680  GET A$: IF A$ =  > CHR$(51 -PD)  AND A$ < =  CHR$(54 +PD)  THEN  PRINT A$:ST =  VAL(A$): GOTO 2600
  276. 2690  CALL BL: GOTO 2680
  277. 2700  HOME : VTAB 6: PRINT "BE SURE YOUR PREFIX"R$R$"BEGINS WITH A /": VTAB 11: PRINT "ENTER NEW PREFIX: ";:VS = 11:FF = 0: GOSUB 2780: IF P$ = E$  THEN 2480
  278. 2710 LK = 5: ONERR  GOTO 3090
  279. 2720  PRINT D$"PREFIX "P$: POKE 216,0:PR$ = P$
  280. 2730  HOME :LK = 6: ONERR  GOTO 3090
  281. 2740  PRINT D$ LEFT$("CATALOG",7 -4 *PD): PRINT : GOSUB 2990: ON CF GOTO 400,2380,2390
  282. 2750 :
  283. 2760  REM  INPUT ROUTINE
  284. 2770 :
  285. 2780 P$ = "":K = 1:HT = 19:VT = VS
  286. 2790  VTAB VT: HTAB HT: PRINT " ": VTAB VT: HTAB HT: GET A$: IF A$ = R$  THEN  RETURN 
  287. 2800  IF (A$ =  CHR$(8)  OR A$ =  CHR$(127))  AND K < >1  THEN  GOSUB 2930: GOTO 2790
  288. 2810  IF A$ = E$  AND K = 1  THEN P$ = E$: RETURN 
  289. 2820  IF A$ = "?"  AND K = 1  THEN P$ = A$: RETURN 
  290. 2830  IF A$ = E$  THEN  VTAB VS: HTAB 19: CALL  -958: GOTO 2780
  291. 2840  IF K = 65  OR (K = 16  AND FF = 1)  THEN 2890
  292. 2850  GOSUB 3040: IF (A$ < = "A"  OR A$ > = "Z")  AND K = 1  AND FF = 1  THEN 2890
  293. 2860  IF A$ < >"/"  AND K = 1  AND FF = 0  THEN 2890
  294. 2870  IF A$ = "."  OR (A$ = "/"  AND FF = 0)  THEN 2900
  295. 2880  IF (A$ > = "A"  AND A$ < = "Z")  OR (A$ > = "0"  AND A$ < = "9")  THEN 2900
  296. 2890  CALL BL: GOTO 2790
  297. 2900  PRINT A$:P$ = P$ +A$: GOSUB 2910: GOTO 2790
  298. 2910 K = K +1: IF HT = 40  THEN HT = 1:VT = VT +1: RETURN 
  299. 2920 HT = HT +1: RETURN 
  300. 2930 K = K -1: IF K = 1  THEN P$ = "": GOTO 2950
  301. 2940 P$ =  LEFT$(P$,K -1)
  302. 2950  IF HT = 1  THEN HT = 40:VT = VT -1: RETURN 
  303. 2960 HT = HT -1: RETURN 
  304. 2970 :
  305. 2980  TEXT : HOME : VTAB 8: PRINT "YOU ARE ABOUT TO ERASE"R$R$"THE CURRENT PICTURE."R$R$R$"ARE YOU SURE YOU"R$R$"WANT TO DO THIS? (Y/N) ";: GOSUB 3000: RETURN 
  306. 2990  HTAB 1: VTAB 24: PRINT "PRESS <RTN> TO CONTINUE: ";: GET A$: RETURN 
  307. 3000  GET A$: GOSUB 3040: IF A$ = "N"  THEN YN = 0: RETURN 
  308. 3010  IF A$ = "Y"  THEN YN = 1: RETURN 
  309. 3020  CALL BL: GOTO 3000
  310. 3030  WAIT 49152,128:AN =  PEEK(49152) -128:A$ =  CHR$(AN): POKE  -16368,0: RETURN 
  311. 3040  IF A$ > = "a"  AND A$ < = "z"  THEN A$ =  CHR$( ASC(A$) -32): RETURN 
  312. 3050  RETURN 
  313. 3060 :
  314. 3070  REM  DISK ERRORS
  315. 3080 :
  316. 3090  TEXT : HOME : VTAB 10: POKE 216,0:EN =  PEEK(222):EL =  PEEK(218) +256 * PEEK(219)
  317. 3100  IF EN = 6  AND EL = 2650  THEN  CALL  -3288: GOTO 2730
  318. 3110  IF (EN = 6  OR EN = 7  OR EN = 16)  AND LK = 5  THEN  PRINT "PREFIX NOT FOUND": GOTO 3190
  319. 3120  IF ((EN = 6  OR EN = 7)  AND LK = 6)  OR EN = 8  THEN  PRINT "I/O ERROR": GOTO 3190
  320. 3130  IF EN = 3  THEN  PRINT "NO DEVICE IN SLOT":ST = 6: GOTO 3190
  321. 3140  IF EN = 6  OR EN = 7  THEN  PRINT "FILE ("P$")"R$"IS NOT ON THIS DISK.": GOTO 3190
  322. 3150  IF EN = 13  THEN  PRINT "FILE ("P$")"R$"IS NOT A BINARY FILE.": GOTO 3190
  323. 3160  IF EN = 9  OR EN = 17  THEN  PRINT "DISK OR DIRECTORY IS FULL.": GOTO 3190
  324. 3170  IF EN = 10  THEN  PRINT "EXISTING FILE ("P$") IS LOCKED.": GOTO 3190
  325. 3180  PRINT "A SYSTEM ERROR #"EN" HAS OCCURRED"R$"AT LINE #"EL:LK = 4
  326. 3190  CALL BL: HTAB 1: VTAB 19: PRINT "PRESS <RTN> AND TRY AGAIN: ";: GET A$: CALL  -3288: HOME : ON LK GOTO 250,400,2380,2390,2510,2510