home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib32a.dsk / SEPTEMBER.1987 / TEXT.SCULPTURE.bas < prev   
BASIC Source File  |  2023-02-26  |  18KB  |  482 lines

  1. 10  REM  **********************
  2. 20  REM  *  TEXT SCULPTURE    *
  3. 30  REM  * BY JOHN BELTRAMI   *
  4. 40  REM  * COPYRIGHT (C) 1987 *
  5. 50  REM  * BY MICROSPARC, INC *
  6. 60  REM  * CONCORD, MA  01742 *
  7. 70  REM  **********************
  8. 80  REM  --- HOUSEKEEPING ---
  9. 90  LOMEM: 19456:D$ =  CHR$(4):S$ = "*NONE*":T$ = "*NONE*":ESC$ =  CHR$(27)
  10. 100 SV$ = "":Y1$ = SV$:Y2$ = SV$
  11. 110 P = 1:SA = 16384:SU$ = "":CT = 0
  12. 120 FI$ = "RECYCLE TEXT":FC$ = "*":HH = 9:FF = 9
  13. 130  DIM PT(48,6)
  14. 140  REM  ***************
  15. 150  REM  *  MAIN MENU  *
  16. 160  REM  ***************
  17. 170  TEXT 
  18. 180 M1$ = "MAIN":M2$ = "EXIT": GOSUB 4740
  19. 190  INVERSE : VTAB 3: HTAB 5:W = 16: GOSUB 4630: PRINT W$
  20. 200  VTAB 5: HTAB 5: PRINT W$
  21. 210  VTAB 4: HTAB 5: PRINT " TEXT SCULPTURE "
  22. 220  NORMAL 
  23. 230  VTAB 7: HTAB 6: PRINT "COPYRIGHT 1987"
  24. 240  VTAB 8: HTAB 6: PRINT "BY MICROSPARC, INC."
  25. 250  VTAB 12: HTAB 5: PRINT "1) SELECT TEXT SHAPE"
  26. 260  VTAB 14: HTAB 5: PRINT "2) SELECT TEXT CONTENT"
  27. 270  VTAB 16: HTAB 5: PRINT "3) PRINT SCULPTURE"
  28. 280  VTAB 19: HTAB 5: INVERSE : PRINT "YOUR CHOICE -->";: NORMAL : GET Y$: PRINT Y$
  29. 290  IF Y$ =  CHR$(27)  THEN 340: REM  END
  30. 300  IF Y$ = "2"  THEN 410: REM   CONTENT
  31. 310  IF Y$ = "1"  THEN 1800: REM  SHAPE
  32. 320  IF Y$ = "3"  THEN 2660: REM  PRINT
  33. 330  PRINT  CHR$(7): GOTO 280
  34. 340  VTAB 22: HTAB 5: INVERSE 
  35. 350  PRINT "ARE YOU SURE THAT YOU"
  36. 360  VTAB 23: HTAB 5: PRINT "WANT TO QUIT NOW? ";: NORMAL : GET Y$: PRINT Y$
  37. 370  IF (Y$ < > CHR$(89))  AND (Y$ < > CHR$(121))  THEN  GOTO 180
  38. 380  END 
  39. 390  REM  * TEXT CONTENT *
  40. 400  REM  ****************
  41. 410 M1$ = "CONTENT":M2$ = "MAIN": GOSUB 4740
  42. 420  INVERSE 
  43. 430  VTAB 3: HTAB 5:W = 21: GOSUB 4630: PRINT W$
  44. 440  VTAB 5: HTAB 5: PRINT W$
  45. 450  VTAB 4: HTAB 5: PRINT " SELECT TEXT CONTENT "
  46. 460  NORMAL 
  47. 470  VTAB 8: HTAB 5: PRINT "1) INPUT TEXT FROM KEYBOARD"
  48. 480  VTAB 10: HTAB 5: PRINT "2) INPUT TEXT FROM FILE"
  49. 490  VTAB 13: HTAB 5: INVERSE : PRINT "YOUR CHOICE -->";: NORMAL : GET Y$: PRINT Y$
  50. 500  IF Y$ =  CHR$(27)  THEN  GOTO 180: REM  MAIN MENU
  51. 510  IF Y$ = "1"  THEN  GOTO 570
  52. 520  IF Y$ = "2"  THEN  GOTO 1020
  53. 530  PRINT  CHR$(7): GOTO 490
  54. 540  REM  ******************
  55. 550  REM  * KEYBOARD INPUT *
  56. 560  REM  ******************
  57. 570 M1$ = "KEYBOARD":M2$ = "CONTENT": GOSUB 4740
  58. 580  INVERSE 
  59. 590  VTAB 3: HTAB 5:W = 16: GOSUB 4630: PRINT W$
  60. 600  VTAB 5: HTAB 5: PRINT W$
  61. 610  VTAB 4: HTAB 5: PRINT " KEYBOARD INPUT "
  62. 620  NORMAL 
  63. 630  VTAB 8: HTAB 5: PRINT "PLEASE TYPE ONE LINE MESSAGE"
  64. 640  VTAB 9: HTAB 5: PRINT " (MAXIMUM OF 30 CHARACTERS) "
  65. 650  VTAB 11: HTAB 1: PRINT "> ";
  66. 660 YY$ = ""
  67. 670  VTAB 11: HTAB 3:H = 3
  68. 680  VTAB 11: HTAB H: GET Y$
  69. 690  IF Y$ =  CHR$(27)  THEN  GOTO 410: REM  LAST MENU
  70. 700  IF Y$ =  CHR$(13)  THEN  GOTO 830: REM  COMPLETE
  71. 710  IF Y$ < > CHR$(8)  THEN  GOTO 770
  72. 720  PRINT  CHR$(8)" ";: CALL  -958:H = H -1: IF H <3  THEN H = 3: GOTO 680
  73. 730 L =  LEN(YY$)
  74. 740  IF L >1  THEN YY$ =  LEFT$(YY$,L -1)
  75. 750  IF L = 1  THEN YY$ = ""
  76. 760  GOTO 680
  77. 770 V =  ASC(Y$)
  78. 780  IF V <32  THEN  GOTO 680: REM  REJECT CONTROL CHARS
  79. 790 YY$ = YY$ +Y$
  80. 800  PRINT Y$;
  81. 810 H = H +1: IF H >32  THEN  GOTO 830
  82. 820  GOTO 680
  83. 830  VTAB 14: HTAB 5: PRINT "IS THIS CORRECT ?"
  84. 840 Y$ = YY$:L =  LEN(Y$)
  85. 850  VTAB 16: HTAB 1: PRINT "> ";Y$;" <"
  86. 860  VTAB 18: HTAB 5: PRINT "(Y) OR (N) --> ";: GET Z$: NORMAL : PRINT Z$
  87. 870  IF (Z$ =  CHR$(78))  OR (Z$ =  CHR$(110))  THEN  GOTO 570
  88. 880  IF (Z$ =  CHR$(27))  THEN  GOTO 410: REM  LAST MENU
  89. 890  IF (Z$ < > CHR$(89))  AND (Z$ < > CHR$(121))  THEN  PRINT  CHR$(7): GOTO 860
  90. 900 CT = 0
  91. 910  IF L <1  THEN  GOTO 410: REM  NO TEXT FOUND
  92. 920  FOR I = 1 TO L
  93. 930 AC =  ASC( MID$ (Y$,I,1))
  94. 940  IF AC <32  OR (AC >122  AND AC <161)  OR (AC >250)  THEN AC = 32
  95. 950  POKE SA +CT,AC
  96. 960 CT = CT +1
  97. 970  NEXT I
  98. 980  GOTO 180: REM    MAIN MENU
  99. 990  REM  **************
  100. 1000  REM  * FILE INPUT *
  101. 1010  REM  **************
  102. 1020 M1$ = "FILE":M2$ = "CONTENT": GOSUB 4740
  103. 1030  INVERSE 
  104. 1040  VTAB 3: HTAB 5:W = 17: GOSUB 4630: PRINT W$
  105. 1050  VTAB 5: HTAB 5: PRINT W$
  106. 1060  VTAB 4: HTAB 5: PRINT " TEXT FILE INPUT "
  107. 1070  NORMAL 
  108. 1080  VTAB 8: HTAB 5: PRINT "CURRENT FILE NAME:"
  109. 1090  VTAB 10: HTAB 9: PRINT T$
  110. 1100  VTAB 13: HTAB 5: PRINT "INPUT NEW FILE     (?) FOR CATALOG"
  111. 1110 YY$ = ""
  112. 1120  VTAB 14: HTAB 9:H = 9
  113. 1130  VTAB 14: HTAB H: GET Y$
  114. 1140  IF Y$ =  CHR$(27)  THEN  GOTO 410: REM  LAST MENU
  115. 1150  IF Y$ =  CHR$(13)  THEN  GOTO 1290: REM  ENTRY COMPLETE
  116. 1160  IF Y$ = "?"  THEN  GOSUB 2570: GOTO 1020: REM  CATALOG
  117. 1170  IF Y$ < > CHR$(8)  THEN  GOTO 1230
  118. 1180  PRINT  CHR$(8)" ";: CALL  -958:H = H -1: IF H <9  THEN H = 9: GOTO 1130
  119. 1190 L =  LEN(YY$)
  120. 1200  IF L >1  THEN YY$ =  LEFT$(YY$,L -1)
  121. 1210  IF L = 1  THEN YY$ = ""
  122. 1220  GOTO 1130
  123. 1230 V =  ASC(Y$)
  124. 1240  IF V <32  THEN  GOTO 1130
  125. 1250 YY$ = YY$ +Y$
  126. 1260  PRINT Y$;
  127. 1270 H = H +1: IF H >39  THEN  GOTO 1290: REM  COMPLETE
  128. 1280  GOTO 1130
  129. 1290  VTAB 16: HTAB 5: PRINT "NEW FILE NAME"
  130. 1300 L =  LEN(YY$): IF L <1  THEN  GOTO 410: REM  NO CHANGE
  131. 1310  VTAB 18: HTAB 9: GOSUB 4820: PRINT YY$
  132. 1320  VTAB 20: HTAB 5: PRINT "IS THIS CORRECT ?"
  133. 1330  VTAB 22: HTAB 5: PRINT "(Y) OR (N) -->";: GET Y$: PRINT Y$
  134. 1340  IF (Y$ =  CHR$(78))  OR (Y$ =  CHR$(110))  THEN  GOTO 1020
  135. 1350  IF (Y$ < > CHR$(89))  AND (Y$ < > CHR$(121))  THEN  PRINT  CHR$(7): GOTO 1330
  136. 1360 T$ = YY$
  137. 1370  REM  *************************
  138. 1380  REM  * LOAD FILE INTO MEMORY *
  139. 1390  REM  *************************
  140. 1400  HOME : INVERSE : VTAB 5: HTAB 5: PRINT "TEXT FILE LOAD": NORMAL 
  141. 1410  VTAB 7: HTAB 5: PRINT "PLEASE PRESS <RETURN> WHEN READY": CALL ( -676)
  142. 1420  VTAB 9: HTAB 5: PRINT "VERIFYING FILE": NORMAL : PRINT 
  143. 1430  ONERR  GOTO 1470
  144. 1440  PRINT D$;"VERIFY ";T$
  145. 1450  PRINT D$;"CLOSE": GOTO 1510: REM  FILE FOUND
  146. 1460  HOME 
  147. 1470  VTAB 11: HTAB 5: PRINT "SORRY - FILE NOT FOUND": PRINT  CHR$(7): POKE 216,0
  148. 1480  VTAB 15: HTAB 5: PRINT "PRESS <RETURN> TO CONTINUE";: CALL ( -676)
  149. 1490  GOTO 410
  150. 1500  INVERSE 
  151. 1510  VTAB 11: HTAB 5: PRINT "LOADING TEXT FILE INTO MEMORY"
  152. 1520  VTAB 13: HTAB 5: PRINT "PLEASE BE PATIENT"
  153. 1530  POKE 216,0: ONERR  GOTO 1560
  154. 1540  PRINT D$;"OPEN ";T$
  155. 1550  GOTO 1620: REM  FILE OPEN SUCCESS
  156. 1560  HOME 
  157. 1570  VTAB 14: HTAB 5: PRINT "SORRY - OPEN FAILED ON "
  158. 1580  VTAB 16: HTAB 5: PRINT "FILE: ";T$
  159. 1590  PRINT  CHR$(7): POKE 216,0
  160. 1600  VTAB 20: HTAB 5: PRINT "PRESS <RETURN> TO CONTINUE";: CALL ( -676)
  161. 1610  GOTO 410
  162. 1620  ONERR  GOTO 1730
  163. 1630 CT = 0
  164. 1640  PRINT D$;"READ ";T$
  165. 1650 LC$ = ""
  166. 1660  GET CC$
  167. 1670 AC =  ASC(CC$)
  168. 1680  IF (AC <32)  OR (AC >250)  OR (AC >122  AND AC <161)  THEN AC = 32:CC$ = " "
  169. 1690  IF AC = 32  AND LC$ = " "  THEN  GOTO 1660
  170. 1700  POKE SA +CT,AC:LC$ = CC$:
  171. 1710 CT = CT +1
  172. 1720  IF CT <3000  THEN  GOTO 1660
  173. 1730  POKE 216,0: PRINT D$;"CLOSE ";T$
  174. 1740  ONERR  GOTO 4440
  175. 1750  PRINT D$: IF  PEEK(222) < >5 GOTO 4440
  176. 1760  GOTO 180: REM  MAIN MENU
  177. 1770  REM  ****************
  178. 1780  REM  * SELECT SHAPE *
  179. 1790  REM  ****************
  180. 1800 M1$ = "SHAPE":M2$ = "MAIN": GOSUB 4740
  181. 1810  INVERSE 
  182. 1820  VTAB 3: HTAB 5:W = 14: GOSUB 4630: PRINT W$
  183. 1830  VTAB 5: HTAB 5: PRINT W$
  184. 1840  VTAB 4: HTAB 5: PRINT " SELECT SHAPE "
  185. 1850  NORMAL 
  186. 1860  VTAB 8: HTAB 5: PRINT "CURRENT FILE NAME:"
  187. 1870  VTAB 10: HTAB 9: PRINT S$
  188. 1880  VTAB 13: HTAB 5: PRINT "INPUT FILE NAME    (?) FOR CATALOG"
  189. 1890 YY$ = ""
  190. 1900  VTAB 14: HTAB 9:H = 9
  191. 1910  VTAB 14: HTAB H: GET Y$
  192. 1920  IF Y$ =  CHR$(27)  THEN  GOTO 180: REM  MAIN MENU
  193. 1930  IF Y$ =  CHR$(13)  THEN  GOTO 2070: REM  ENTRY COMPLETE
  194. 1940  IF Y$ = "?"  THEN  GOSUB 2570: GOTO 1800: REM  CATALOG
  195. 1950  IF Y$ < > CHR$(8)  THEN  GOTO 2010
  196. 1960  PRINT  CHR$(8)" ";: CALL  -958:H = H -1: IF H <9  THEN H = 9: GOTO 1910
  197. 1970 L =  LEN(YY$)
  198. 1980  IF L >1  THEN YY$ =  LEFT$(YY$,L -1)
  199. 1990  IF L = 1  THEN YY$ = ""
  200. 2000  GOTO 1910
  201. 2010 V =  ASC(Y$)
  202. 2020  IF V <32  THEN  GOTO 1910
  203. 2030 YY$ = YY$ +Y$
  204. 2040  PRINT Y$;
  205. 2050 H = H +1: IF H >39  THEN  GOTO 2070
  206. 2060  GOTO 1910
  207. 2070  VTAB 16: HTAB 5: PRINT "NEW FILE NAME"
  208. 2080 L =  LEN(YY$): IF L <1  THEN  GOTO 180: REM  NO CHANGE
  209. 2090  VTAB 18: HTAB 9: GOSUB 4820: PRINT YY$
  210. 2100  VTAB 20: HTAB 5: PRINT "IS THIS CORRECT ?"
  211. 2110  VTAB 22: HTAB 5: PRINT "(Y) OR (N) -->";: GET Y$: PRINT Y$
  212. 2120  IF (Y$ =  CHR$(78))  OR (Y$ =  CHR$(110))  THEN  GOTO 1800
  213. 2130  IF (Y$ < > CHR$(89))  AND (Y$ < > CHR$(121))  THEN  PRINT  CHR$(7): GOTO 2110
  214. 2140  REM  CHECK FOR '.SHP' SUFFIX
  215. 2150 Z$ = "":K = 0
  216. 2160  FOR I = 1 TO L
  217. 2170  IF (I >K)  AND (K >0)  THEN  GOTO 2200
  218. 2180  IF  MID$ (YY$,I,1) = "."  THEN K = I: GOTO 2200
  219. 2190 Z$ = Z$ + MID$ (YY$,I,1)
  220. 2200  NEXT I
  221. 2210 Z$ = Z$ +".SHP"
  222. 2220 S$ = Z$
  223. 2230  HOME 
  224. 2240  VTAB 8: HTAB 5: INVERSE : PRINT "SHAPE FILE LOAD": NORMAL 
  225. 2250  VTAB 10: HTAB 5: PRINT "PRESS <RETURN> WHEN READY";: CALL ( -676)
  226. 2260  ONERR  GOTO 2350
  227. 2270  VTAB 12: HTAB 5: PRINT "VERIFYING SHAPE FILE"
  228. 2280  REM 
  229. 2290  PRINT D$;"VERIFY ";S$
  230. 2300  VTAB 14: HTAB 5: PRINT "LOADING SHAPE PARAMETERS"
  231. 2310  VTAB 16: HTAB 5: PRINT "PLEASE BE PATIENT": NORMAL 
  232. 2320  PRINT D$;"OPEN ";S$
  233. 2330  GOTO 2400
  234. 2340  HOME 
  235. 2350  POKE 216,0: VTAB 12: HTAB 5
  236. 2360  PRINT "SORRY - SHAPE FILE NOT FOUND"
  237. 2370  VTAB 14: HTAB 5: PRINT "FILE: ";S$
  238. 2380  VTAB 20: HTAB 5: PRINT "PRESS <RETURN> TO CONTINUE";
  239. 2390 S$ = "*NONE*": CALL ( -676): GOTO 1800: REM    SHAPE MENU
  240. 2400  PRINT D$;"READ ";S$
  241. 2410  FOR I = 1 TO 48
  242. 2420  INPUT PT(I,1)
  243. 2430  INPUT PT(I,2)
  244. 2440  INPUT PT(I,3)
  245. 2450  INPUT PT(I,4)
  246. 2460  INPUT PT(I,5)
  247. 2470  INPUT PT(I,6)
  248. 2480  NEXT I
  249. 2490  REM  * SHAPE LOADED *
  250. 2500  POKE 216,0: ONERR  GOTO 4440
  251. 2510  PRINT D$;"CLOSE ";S$
  252. 2520  PRINT D$
  253. 2530  GOTO 180: REM  MAIN MENU
  254. 2540  REM  ****************
  255. 2550  REM  * DISK CATALOG *
  256. 2560  REM  ****************
  257. 2570  HOME : NORMAL 
  258. 2580  PRINT 
  259. 2590  PRINT D$; LEFT$("CATALOG",7 -4 *( PEEK(48896) = 76)): PRINT : PRINT "PRESS <RETURN>"
  260. 2600  CALL ( -676): REM  WAIT FOR <RETURN>
  261. 2610  PRINT 
  262. 2620  RETURN 
  263. 2630  REM  *******************
  264. 2640  REM  * PRINT THE SHAPE *
  265. 2650  REM  ******************* 
  266. 2660 M1$ = "PRINT":M2$ = "MAIN": GOSUB 4740
  267. 2670  INVERSE 
  268. 2680  VTAB 3: HTAB 5:W = 17: GOSUB 4630: PRINT W$
  269. 2690  VTAB 5: HTAB 5: PRINT W$
  270. 2700  VTAB 4: HTAB 5: PRINT " PRINT SCULPTURE "
  271. 2710  NORMAL 
  272. 2720  VTAB 7: HTAB 5: PRINT "PRINTER SLOT: ";: INVERSE : PRINT P: NORMAL 
  273. 2730  VTAB 9: HTAB 5: PRINT "FILL INSTRUCTIONS:"
  274. 2740  VTAB 10: HTAB 10: INVERSE : PRINT FI$: NORMAL 
  275. 2750  VTAB 12: HTAB 5: PRINT "1) CHANGE PRINTER SLOT"
  276. 2760  VTAB 14: HTAB 5: PRINT "2) CHANGE SET-UP STRING"
  277. 2770  VTAB 16: HTAB 5: PRINT "3) CHANGE FILL INSTRUCTIONS"
  278. 2780  VTAB 18: HTAB 5: PRINT "4) PRINT IT"
  279. 2790  VTAB 20: HTAB 5: INVERSE : PRINT "YOUR CHOICE -->";: NORMAL : GET Y$: PRINT Y$
  280. 2800  IF Y$ = "1"  THEN  GOSUB 4230: GOTO 2660
  281. 2810  IF Y$ = "2"  THEN  GOSUB 3640: GOTO 2660
  282. 2820  IF Y$ = "3"  THEN  GOSUB 4040: GOTO 2660
  283. 2830  IF Y$ =  CHR$(27)  THEN  GOTO 180: REM  LAST MENU
  284. 2840  IF Y$ < >"4"  THEN  PRINT  CHR$(7): GOTO 2790
  285. 2850 M1$ = "PROCESS":M2$ = "PRINT": GOSUB 4740
  286. 2860  INVERSE 
  287. 2870  VTAB 3: HTAB 5:W = 18: GOSUB 4630: PRINT W$
  288. 2880  VTAB 5: HTAB 5: PRINT W$
  289. 2890  VTAB 4: HTAB 5: PRINT " PRINTING PROCESS ": NORMAL 
  290. 2900  REM  ************
  291. 2910  REM  * PRINT IT *
  292. 2920  REM  ************
  293. 2930  VTAB 10: HTAB 5
  294. 2940  IF S$ < >"*NONE*"  THEN  GOTO 3000
  295. 2950  PRINT "SORRY - NO SHAPE WAS SELECTED."
  296. 2960  VTAB 12: HTAB 5
  297. 2970  PRINT "YOU MUST SELECT A SHAPE FILE."
  298. 2980  VTAB 20: HTAB 5: PRINT "PRESS <RETURN> TO CONTINUE";: CALL ( -676)
  299. 2990  GOTO 180: REM  MAIN MENU
  300. 3000  PRINT "SHAPE NAME:"
  301. 3010  VTAB 12: HTAB 9: PRINT S$
  302. 3020  VTAB 14: HTAB 5: PRINT "TEXT FILL CHARACTERS: ";CT
  303. 3030  VTAB 16: HTAB 5
  304. 3040  IF CT >0  THEN  GOTO 3090
  305. 3050  PRINT "NO TEXT FILL CHARACTERS WERE"
  306. 3060  VTAB 18: HTAB 5
  307. 3070  PRINT "ENTERED.  DEFAULT (*) USED INSTEAD."
  308. 3080 FI$ = "FILL WITH CHARACTER"
  309. 3090  REM 
  310. 3100  VTAB 20: HTAB 5: PRINT "IS THIS ACCEPTABLE ?"
  311. 3110  VTAB 21: HTAB 5: PRINT "(Y) OR (N) -->";: GET Y$: PRINT Y$
  312. 3120  IF (Y$ =  CHR$(27))  THEN  GOTO 2660: REM  LAST MENU
  313. 3130  IF (Y$ =  CHR$(78))  OR (Y$ =  CHR$(110))  THEN  GOTO 2660: REM  LAST MENU
  314. 3140  IF (Y$ < > CHR$(89))  AND (Y$ < > CHR$(121))  THEN  PRINT  CHR$(7): GOTO 3110
  315. 3150  HOME 
  316. 3160  VTAB 10: HTAB 5: PRINT "PRESS <ESC> TO ABORT PRINTING"
  317. 3170  PRINT D$;"PR#";P: PRINT  CHR$(9)"80N"
  318. 3180  REM  **************
  319. 3190  REM  48 LINES OF DATA
  320. 3200  REM  3 PAIRS OF POINTS PER LINE
  321. 3210  REM  ODD POINT = SPACES
  322. 3220  REM  EVEN POINT = TEXT FILLING
  323. 3230  FOR I = 1 TO HH: PRINT : NEXT I: REM   NINE BLANK LINES
  324. 3240 J = 0: REM  SET TEXT POINTER
  325. 3250  POKE  -16368,0: REM  CLEAR KEYBOARD
  326. 3260  FOR I = 1 TO 48
  327. 3270 Z =  FRE(0): REM  STRING GARBAGE COLLECTION
  328. 3280  IF I = 1  THEN  PRINT SU$;
  329. 3290 A = PT(I,1): GOSUB 3440: PRINT B$;
  330. 3300 A = PT(I,2): GOSUB 3520: PRINT B$;
  331. 3310 A = PT(I,3): GOSUB 3440: PRINT B$;
  332. 3320 A = PT(I,4): GOSUB 3520: PRINT B$;
  333. 3330 A = PT(I,5): GOSUB 3440: PRINT B$;
  334. 3340 A = PT(I,6): GOSUB 3520: PRINT B$
  335. 3350 KB =  PEEK( -16384)
  336. 3360  IF KB >128  THEN  GET Y$: IF Y$ =  CHR$(27)  THEN  PRINT : PRINT D$;"PR#0": GOTO 3390
  337. 3370  NEXT I
  338. 3380  FOR I = 1 TO FF: PRINT : NEXT I: REM   NINE BLANK LINES
  339. 3390  PRINT D$;"PR#0"
  340. 3400  GOTO 2660
  341. 3410  REM  * CREATE SPACERS *
  342. 3420  REM  ******************
  343. 3430  REM  ODD POINTS = BLANK FILL
  344. 3440 B$ = ""
  345. 3450  IF A = 0  THEN  RETURN 
  346. 3460  FOR K = 1 TO A
  347. 3470 B$ = B$ +" "
  348. 3480  NEXT K
  349. 3490  RETURN 
  350. 3500  REM  ******************
  351. 3510  REM  * FILL WITH TEXT *
  352. 3520 B$ = "": IF A = 0  THEN  RETURN 
  353. 3530  IF (J > = CT)  AND (FI$ = "RECYCLE TEXT")  THEN J = 0: GOTO 3550
  354. 3540  IF (J > = CT)  THEN A$ = FC$: GOTO 3580
  355. 3550 AC =  PEEK(SA +J)
  356. 3560 A$ =  CHR$(AC)
  357. 3570 J = J +1
  358. 3580 B$ = B$ +A$
  359. 3590 L =  LEN(B$)
  360. 3600  IF (L <A)  THEN  GOTO 3530
  361. 3610  RETURN 
  362. 3620  REM  *****************
  363. 3630  REM  * SET-UP STRING *"
  364. 3640 M1$ = "SET-UP":M2$ = "PRINT": GOSUB 4740
  365. 3650  INVERSE 
  366. 3660  VTAB 3: HTAB 5:W = 23: GOSUB 4630: PRINT W$
  367. 3670  VTAB 5: HTAB 5: PRINT W$
  368. 3680  VTAB 4: HTAB 5: PRINT " PRINTER SET-UP STRING "
  369. 3690  NORMAL 
  370. 3700 V$ = "":Y1$ = "":Y2$ = ""
  371. 3710  VTAB 7: HTAB 5: PRINT "CURRENT SET-UP"
  372. 3720  VTAB 9: HTAB 5: PRINT SV$
  373. 3730  VTAB 12: HTAB 5: PRINT "NEW SET-UP"
  374. 3740  VTAB 23: HTAB 3: PRINT "PRESS '^' TO END INPUT."
  375. 3750  VTAB 14: HTAB 5: PRINT Y1$;
  376. 3760  GET V$
  377. 3770  IF V$ =  CHR$(94)  THEN  GOTO 3920: REM  '^'
  378. 3780  IF V$ =  CHR$(13)  THEN Y1$ = Y1$ +" <RETURN> ":Y2$ = Y2$ + CHR$(13): GOTO 3750
  379. 3790  IF V$ =  CHR$(27)  THEN Y1$ = Y1$ +"<ESC>":Y2$ = Y2$ + CHR$(27): GOTO 3750
  380. 3800 V =  ASC(V$)
  381. 3810  IF (V >127)  OR (V = 28)  OR (V = 31)  THEN  GOTO 3750
  382. 3820  IF V >30  THEN  GOTO 3870: REM  REGULAR
  383. 3830  REM  CONTROL CHARACTERS
  384. 3840 Y1$ = Y1$ +" <CTRL>-" + CHR$(V +64) +" "
  385. 3850 Y2$ = Y2$ +V$
  386. 3860  GOTO 3750
  387. 3870  REM  REGULAR CHARACTERS
  388. 3880 Y1$ = Y1$ +V$
  389. 3890 Y2$ = Y2$ +V$
  390. 3900  GOTO 3750
  391. 3910  IF Z$ = "N"  THEN  RETURN 
  392. 3920  REM  ENTRY COMPLETE
  393. 3930  VTAB 19: HTAB 5: PRINT "IS THIS CORRECT ?"
  394. 3940  VTAB 21: HTAB 5: PRINT "(Y) OR (N) -->";: GET Y$: PRINT Y$
  395. 3950  IF Y$ =  CHR$(27)  THEN  GOTO 2660: REM  LAST MENU
  396. 3960  IF (Y$ =  CHR$(78))  OR (Y$ =  CHR$(110))  THEN  GOTO 3640
  397. 3970  IF (Y$ < > CHR$(89))  AND (Y$ < > CHR$(121))  THEN  PRINT  CHR$(7): GOTO 3940
  398. 3980 SV$ = Y1$:SU$ = Y2$
  399. 3990  PRINT 
  400. 4000  RETURN 
  401. 4010  REM  ******************
  402. 4020  REM  * CHARACTER FILL *
  403. 4030  REM  ******************
  404. 4040 M1$ = "FILL":M2$ = "PRINT": GOSUB 4740
  405. 4050  INVERSE 
  406. 4060  VTAB 3: HTAB 5:W = 19: GOSUB 4630: PRINT W$
  407. 4070  VTAB 5: HTAB 5: PRINT W$
  408. 4080  VTAB 4: HTAB 5: PRINT " FILL INSTRUCTIONS "
  409. 4090  NORMAL 
  410. 4100  VTAB 8: HTAB 5: PRINT "IF THE SCULPTURE NEEDS MORE TEXT"
  411. 4110  VTAB 10: HTAB 5: PRINT "TO FILL THE SHAPE THAN THE"
  412. 4120  VTAB 12: HTAB 5: PRINT "ORIGINAL INPUT CONTAINED: "
  413. 4130  VTAB 15: HTAB 5: PRINT "1) RECYCLE ORIGINAL TEXT"
  414. 4140  VTAB 17: HTAB 5: PRINT "2) FILL WITH DEFAULT CHARACTER (*)"
  415. 4150  VTAB 19: HTAB 5: INVERSE : PRINT "YOUR CHOICE -->";: NORMAL : GET Y$: PRINT Y$
  416. 4160  IF Y$ =  CHR$(27)  THEN  GOTO 2660: REM  LAST MENU
  417. 4170  IF Y$ = "1"  THEN FI$ = "RECYCLE TEXT": RETURN 
  418. 4180  IF Y$ = "2"  THEN FI$ = "FILL WITH CHARACTER": RETURN 
  419. 4190  PRINT  CHR$(7): GOTO 4150
  420. 4200  REM  ***********************
  421. 4210  REM  * CHANGE PRINTER SLOT *
  422. 4220  REM  ***********************
  423. 4230 M1$ = "SLOT CHG":M2$ = "PRINT": GOSUB 4740
  424. 4240  INVERSE 
  425. 4250  VTAB 3: HTAB 5:W = 14: GOSUB 4630: PRINT W$
  426. 4260  VTAB 5: HTAB 5: PRINT W$
  427. 4270  VTAB 4: HTAB 5: PRINT " PRINTER SLOT "
  428. 4280  NORMAL 
  429. 4290  VTAB 7: HTAB 5: PRINT "OLD PRINTER SLOT: ";: INVERSE : PRINT P: NORMAL 
  430. 4300  VTAB 9: HTAB 5: PRINT "NEW PRINTER SLOT: ";: GET Y$: PRINT Y$
  431. 4310  IF Y$ =  CHR$(27)  THEN  GOTO 2660: REM  LAST MENU
  432. 4320 Y =  VAL(Y$): IF (Y <0)  OR (Y >7)  THEN  PRINT  CHR$(7): GOTO 4300
  433. 4330  VTAB 11: HTAB 5: PRINT "IS THIS CORRECT ?"
  434. 4340  VTAB 13: HTAB 5: INVERSE : PRINT "NEW SLOT: ";Y: NORMAL 
  435. 4350  VTAB 15: HTAB 5: PRINT "(Y) OR (N) -> ";: GET Y$: PRINT Y$
  436. 4360  IF (Y$ =  CHR$(27))  THEN  GOTO 2660: REM  LAST MENU
  437. 4370  IF (Y$ =  CHR$(78))  OR (Y$ =  CHR$(110))  THEN  GOTO 4230
  438. 4380  IF (Y$ < > CHR$(89))  AND (Y$ < > CHR$(121))  THEN  PRINT  CHR$(7): GOTO 4330
  439. 4390 P = Y: REM  SET NEW SLOT NUMBER
  440. 4400  RETURN 
  441. 4410  REM  ************************
  442. 4420  REM  * MISCELLANEOUS ERRORS *
  443. 4430  REM  ************************
  444. 4440 A =  PEEK(222): POKE 216,0
  445. 4450  HOME : INVERSE 
  446. 4460  VTAB 3: HTAB 5:W = 21: GOSUB 4630: PRINT W$
  447. 4470  VTAB 1: HTAB 5: PRINT W$
  448. 4480  VTAB 2: HTAB 5: PRINT " MISCELLANEOUS ERROR "
  449. 4490  NORMAL 
  450. 4500  NORMAL : PRINT  CHR$(7): PRINT  CHR$(7)
  451. 4510  VTAB 6: HTAB 5: PRINT "THIS PROGRAM ENCOUNTERED AN"
  452. 4520  VTAB 8: HTAB 5: PRINT "UNRECOVERABLE ERROR. PLEASE CHECK"
  453. 4530  VTAB 10: HTAB 5: PRINT "YOUR DISK BEFORE TRYING AGAIN."
  454. 4540  VTAB 12: HTAB 5: PRINT "ERROR CODE: ";A
  455. 4550  VTAB 14: HTAB 5
  456. 4560  IF A = 6  THEN  PRINT "FILE NOT FOUND"
  457. 4570  IF A = 8  THEN  PRINT "I/O ERROR"
  458. 4580  IF A = 42  THEN  PRINT "OUT OF DATA"
  459. 4590  IF A = 255  THEN  PRINT "YOU HIT CONTROL-C !!!!"
  460. 4600  VTAB 17: HTAB 5: PRINT "LINE NUMBER: "; PEEK(219) *256 + PEEK(218)
  461. 4610  END 
  462. 4620  REM  ********
  463. 4630  REM  STRING OF SPACES
  464. 4640  REM  ********
  465. 4650 W$ = ""
  466. 4660  FOR WW = 1 TO W
  467. 4670 W$ = W$ +" "
  468. 4680  NEXT WW
  469. 4690 WW =  FRE(0): REM  GARBAGE COLLECTION
  470. 4700  RETURN 
  471. 4710  REM  ************
  472. 4720  REM  HEADING ROUTINE
  473. 4730  REM  *************
  474. 4740  HOME 
  475. 4750  VTAB 1: HTAB 1: PRINT "MENU: ";M1$
  476. 4760  VTAB 1: HTAB 25: PRINT "ESC TO: ";M2$
  477. 4770  PRINT 
  478. 4780  RETURN 
  479. 4790  REM  ************
  480. 4800  REM  FILE NAME CONVERSION
  481. 4810  REM  ************
  482. 4820 YZ$ = "": FOR II = 1 TO  LEN(YY$):YX =  ASC( MID$ (YY$,II,1)):YZ$ = YZ$ + CHR$(YX -32 *(YX >96  AND YX <123)): NEXT :YY$ = YZ$: RETURN