home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib42a.dsk / FEBRUARY.1992 / PRINT.MASTER.bas next >
BASIC Source File  |  2023-02-26  |  17KB  |  422 lines

  1. 10  REM *************************
  2. 20  REM *     PRINT MASTER      *
  3. 30  REM *  by Charles T. Hill   *
  4. 40  REM *  Copyright (C) 1992   *
  5. 50  REM * Mindcraft Publ. Corp. *
  6. 60  REM *   Lincoln, MA 01773   *
  7. 70  REM *************************
  8. 80 :
  9. 90  REM INITIALIZE VARIABLES
  10. 100  ONERR  GOTO 3990
  11. 110  IF  PEEK(48640) < >76  THEN  PRINT "PROGRAM REQUIRES PRODOS": END 
  12. 120 D$ =  CHR$(4): PRINT D$;"PR#3":HT = 1403:DL = 20
  13. 130 RI = 0:A = 0:RT = 0:MD$ = "":P$ = "":PL = 0
  14. 140  DIM FI$(100),L(255),BT$(128),SV$(1100),SN(1100)
  15. 150 NZ = 0:N1 = 1:N2 = 2:N3 = 3:N4 = 4:N5 = 5:N6 = 6:N8 = 8
  16. 160 NS = 32:NE = 127:NR = 178:ND = 131:NA = 64:NU = 95:NQ = 34
  17. 170 LM = 10:WL = 96:WL = WL -LM -8
  18. 180  GOTO 1100
  19. 190 :
  20. 200  REM READ LINE FROM INPUT BUFFER
  21. 210  IF B <512  THEN 250
  22. 220 RI = 1: REM SET FLAG FOR ERROR 2 AT EOF
  23. 230  PRINT D$;"READ";PI$;",B512": REM MORE
  24. 240 B = NZ:X =  FRE(0)
  25. 250 A = A +N1:K = NZ:K =  PEEK(38400 +B):B = B +N1
  26. 260  GOSUB 2470: REM CHECK FOR ESCAPE OR PAUSE
  27. 270  IF A = N2  AND K = NZ  THEN EOF = N1: GOTO 3620: REM END OF FILE
  28. 280  IF A <N3  THEN 210: REM SKIP MEMORY BITS
  29. 290  IF A = N3  THEN LN = K: GOTO 210: REM LINE NUMBER LOW BIT
  30. 300  IF A = N4  THEN LN = LN +K *256: GOTO 210: REM LINE NUMBER
  31. 310  IF K = NZ  THEN 360: REM END OF LINE
  32. 320 L(A -N5) = K: REM STORE LINE IN ARRAY
  33. 330  GOTO 210: REM GET NEXT CHARACTER
  34. 340 :
  35. 350  REM END OF LINE
  36. 360  IF PC = 6  THEN 700: REM CROSS-REFERENCE
  37. 370  IF PC < >3  THEN 400
  38. 380  VTAB 23: POKE HT,0: INVERSE : PRINT "LINE ";LN: NORMAL 
  39. 390  PRINT D$;"WRITE";PW$
  40. 400  GOSUB 460: REM PRINT LINE
  41. 410  IF PC = 1  THEN  GOSUB 630
  42. 420  IF PC = 3  THEN  PRINT D$: REM RETURN TO SCREEN
  43. 430 A = 0: GOTO 210: REM READ NEXT LINE
  44. 440 :
  45. 450  REM PRINT LINE ROUTINE
  46. 460  IF PC = N1  THEN  PRINT  SPC( LM);: REM LEFT MARGIN
  47. 470  PRINT LN;" ";: REM LINE NUMBER
  48. 480 PK = NZ:LL =  LEN( STR$(LN)) +N1
  49. 490  FOR I = NZ TO A -N6
  50. 500 K = L(I)
  51. 510  IF K = NS  AND (PK = NR  OR PK = ND)  THEN 610: REM OMIT EXCESS SPACES
  52. 520 PK = K: REM STORE CHARACTER
  53. 530  IF K >NE  THEN  PRINT BT$(K -NE);:LL = LL + LEN(BT$(K -NE))
  54. 540  IF K > = NS  AND K < = NE  THEN  PRINT  CHR$(K);
  55. 550  IF K <NS  AND PC = N1  THEN  PRINT  CHR$(K +NA); CHR$(N8); CHR$(NU);
  56. 560  IF K <NS  AND PC = N2  THEN  INVERSE : PRINT  CHR$(K +NA);: NORMAL 
  57. 570  IF K <NS  AND PC = N3  THEN  PRINT  CHR$(K);
  58. 580  IF K <128  THEN LL = LL +N1
  59. 590 WW = LM + LEN( STR$(LN))
  60. 600  IF LL >WL  AND PC = N1  THEN  PRINT  CHR$(13); SPC( WW);:LL = NZ:PL = PL +N1
  61. 610  NEXT I
  62. 620  PRINT : RETURN 
  63. 630 PL = PL +1
  64. 640  IF PL >55  THEN  FOR J = 1 TO (66 -PL): PRINT : NEXT :PL = 0
  65. 650  RETURN 
  66. 660 :
  67. 670  REM CROSS-REFERENCE ROUTINE
  68. 680  INVERSE : PRINT "READING VARIABLES IN ";PI$: NORMAL 
  69. 690 NJ = 0:A = 0: GOTO 210: REM READ LINE
  70. 700  PRINT : PRINT LN;" - ";
  71. 710 BV = 0:RM = 0:QT = 0:DT = 0:VN$ = "": REM RESET FLAGS
  72. 720  FOR I = 0 TO A -6
  73. 730 K = L(I)
  74. 740  IF RM = 1  OR QT = 1  OR DT = 1  THEN 850: REM SKIP VARIABLE
  75. 750  IF BV = 0  AND K <65  THEN 840: REM NOT INITIAL LETTER
  76. 760  IF K = 36  OR K = 37  OR K = 40  THEN 810: REM $ OR % OR (
  77. 770  IF K <48  OR K >122  THEN 840: REM NOT LETTER OR NUMBER
  78. 780  IF K >57  AND K <65  THEN 840: REM NOT LETTER OR NUMBER
  79. 790  IF K >90  AND K <97  THEN 840: REM NOT LETTER OR NUMBER
  80. 800 BV = 1: REM LETTER FOUND
  81. 810 VN$ = VN$ + CHR$(K)
  82. 820  IF K = 40  OR I = A -6  THEN 840
  83. 830  GOTO 900: REM NEXT
  84. 840  IF BV >0  THEN  GOSUB 950: REM STORE VARIABLE
  85. 850  IF K = NR  THEN RM = N1: GOTO 900: REM  REM STATEMENT
  86. 860  IF K = ND  THEN DT = N1: GOTO 900: REM  DATA STATEMENT
  87. 870  IF K = NQ  AND QT = NZ  THEN QT = N1: GOTO 900: REM BEGIN QUOTE
  88. 880  IF K = NQ  AND QT = N1  THEN QT = NZ: GOTO 900: REM END QUOTE
  89. 890  IF K = 58  THEN DT = NZ: GOTO 900: REM COLON ENDS DATA
  90. 900  NEXT I
  91. 910  IF NJ >1000  THEN 3680: REM PRINT VARIABLES
  92. 920 A = 0: GOTO 210: REM READ LINE
  93. 930 :
  94. 940  REM STORE VARIABLE IN ARRAY
  95. 950  PRINT VN$;" ";
  96. 960 LJ = 1:HJ = NJ
  97. 970  IF HJ <LJ  THEN SJ = LJ: GOTO 1020
  98. 980 CJ =  INT((HJ -LJ)/2 +.5) +LJ
  99. 990  IF VN$ = SV$(CJ)  AND LN =  INT(SN(CJ))  THEN SN(CJ) = SN(CJ) +.01: GOTO 1070
  100. 1000  IF VN$ <SV$(CJ)  THEN HJ = CJ -1: GOTO 970
  101. 1010 LJ = CJ +1: GOTO 970
  102. 1020  IF LJ >NJ  THEN 1060
  103. 1030  FOR J = NJ TO LJ  STEP  -1
  104. 1040 SV$(J +1) = SV$(J):SN(J +1) = SN(J)
  105. 1050  NEXT J
  106. 1060 SV$(SJ) = VN$:SN(SJ) = LN:NJ = NJ +1
  107. 1070 BV = 0:VN$ = "": RETURN 
  108. 1080 :
  109. 1090  REM GREETING
  110. 1100  HOME : PRINT : VTAB 2
  111. 1110  PRINT  SPC( 31);"PRINT MASTER"
  112. 1120  PRINT  SPC( 28);"By Charles T. Hill": PRINT 
  113. 1130  PRINT  SPC( 28);"Copyright (C) 1992"
  114. 1140  PRINT  SPC( 24);"Mindcraft Publishing Corp."
  115. 1150  PRINT  SPC( 28);"Lincoln, MA  01773"
  116. 1160  PRINT : PRINT 
  117. 1170  PRINT  SPC( 12);"This program prints Applesoft files with left margin,"
  118. 1180  PRINT  SPC( 12);"line wrap, and page breaks. It can also display, write"
  119. 1190  PRINT  SPC( 12);"as a TXT file, load, or RUN any Applesoft file, or"
  120. 1200  PRINT  SPC( 12);"cross-reference variables with line numbers."
  121. 1210  PRINT 
  122. 1220  PRINT  SPC( 12);"For file selection, use letters or Up- or Down-Arrows"
  123. 1230  PRINT  SPC( 12);"to change lines or Left-and Rioght-Arrows for next or"
  124. 1240  PRINT  SPC( 12);"previous page. Return selects file or opens subdirectory"
  125. 1250  PRINT  SPC( 12);"Space pauses listings, and Escape backs up or exits."
  126. 1260  PRINT : PRINT 
  127. 1270 :
  128. 1280  REM INPUT PREFIX
  129. 1290 LA$ = "": REM RESET LABELS TO INDICATE DIR NOT READ FOR RESTART
  130. 1300  PRINT : PRINT  SPC( 8);"PREFIX OR SLOT NUMBER: ";
  131. 1310 IS = 1: GOSUB 2080: REM GET LINE
  132. 1320  IF GL$ = ""  OR GL$ =  CHR$(27)  THEN 2750: REM CHECK FOR END
  133. 1330 PS$ = GL$:SN =  VAL(PS$)
  134. 1340  IF (SN <1  OR SN >7)  THEN P$ = PS$: GOTO 1400: REM not a slot
  135. 1350  PRINT : PRINT  SPC( 17);"DRIVE NUMBER: ";
  136. 1360 IS = 0: GOSUB 2080: REM GET LINE
  137. 1370  IF GL$ =  CHR$(27)  THEN 2750: REM CHECK FOR END
  138. 1380 PD$ = GL$
  139. 1390 P$ = ",S" +PS$ +",D" +PD$: REM CONSTRUCT PATH USING SLOT,DRIVE
  140. 1400  PRINT D$;"PREFIX";P$: REM ENTER PATH
  141. 1410  PRINT D$;"PREFIX": INPUT P$: REM RETRIEVE FULL PREFIX
  142. 1420 P$ =  LEFT$(P$, LEN(P$) -1): REM strip trailing slash
  143. 1430 :
  144. 1440  REM OPEN DIRECTORY
  145. 1450  VTAB 23: POKE HT,79: PRINT : REM AVOID BLANK LINE ABOVE
  146. 1460 PG = 0:EOD = 0: REM RESET FLAGS FOR BEGIN AND END OF DIRECTORY
  147. 1470 X =  FRE(0): REM CLEAR MEMORY OF OLD VALUES OF CHANGED STRINGS
  148. 1480  PRINT D$;"CLOSE";P$
  149. 1490  PRINT D$;"OPEN ";P$;",TDIR"
  150. 1500  PRINT D$;"READ";P$: IF FS = 1  THEN 1570
  151. 1510  INPUT A$: INPUT LA$: INPUT A$: REM READ HEADER
  152. 1520 :
  153. 1530  REM READ DIRECTORY FILES
  154. 1540  IF EOD = 1  THEN  GOTO 1660: REM NO MORE FILES TO DISPLAY
  155. 1550 PG = PG +1
  156. 1560  VTAB 23: POKE HT,79: PRINT : REM AVOID BLANK LINE ABOVE
  157. 1570  FOR J = 1 TO DL: REM NUMBER OF DISPLAY LINES
  158. 1580  INPUT FI$(J): REM READ FILEINFO
  159. 1590  GOSUB 2470: REM CHECK FOR ESCAPE
  160. 1600  IF FI$(J) = ""  THEN  INPUT "";ST$:EOD = 1: GOTO 1620: REM END OF DIR
  161. 1610  NEXT 
  162. 1620 NL = J -1: REM NUMBER OF LINES READ
  163. 1630 OI = 1: REM RESET DISPLAY LINE
  164. 1640 :
  165. 1650  REM SELECT DIRECTORY ENTRY
  166. 1660  HOME : IF PC = 1  THEN  PRINT : PRINT  CHR$(4);"PR#3"
  167. 1670  PRINT P$: VTAB 2: PRINT  SPC( 1);LA$
  168. 1680  FOR I = 1 TO NL: GOSUB 1900: NEXT :
  169. 1690  GOSUB 1970:I = OI: GOSUB 1890
  170. 1700  IF EOD = 1  THEN  VTAB NL +3: IF NL <20  THEN  PRINT 
  171. 1710  IF EOD = 1  THEN  PRINT ST$
  172. 1720  VTAB 1: POKE HT,68: PRINT "PAGE ";PG;: POKE HT,77: PRINT "-->";
  173. 1730  IF EOD = 1  THEN  VTAB 1: POKE HT,77: PRINT "<--";
  174. 1740  GOSUB 2010: REM GET KEY
  175. 1750  IF K = 13  THEN K = I: GOTO 2310: REM RETURN -- CHECK FILETYPE
  176. 1760  IF K = 8  THEN  GOSUB 1900: GOTO 1450: REM LEFT
  177. 1770  IF K = 11  THEN  GOSUB 1900:I = I -1: REM UP
  178. 1780  IF K = 21  THEN  GOSUB 1900: GOTO 1540: REM RIGHT
  179. 1790  IF K = 10  THEN  GOSUB 1900:I = I +1: REM DOWN
  180. 1800  IF K = 27  THEN 2530: REM ESC -- RESTART
  181. 1810  IF K >96  AND K <123  THEN K = K -32: REM SMALL LETTERS
  182. 1820  IF K >64  AND K <85  THEN  GOSUB 1900:I = K -64: REM LETTERS A-T
  183. 1830  IF I >NL  THEN I = NL
  184. 1840  IF I <1  THEN I = 1
  185. 1850 OI = I
  186. 1860  GOSUB 1890: GOTO 1740
  187. 1870 :
  188. 1880  REM DISPLAY DIRECTORY FILES
  189. 1890  INVERSE 
  190. 1900 V = I +2
  191. 1910  VTAB V: POKE HT,1: PRINT FI$(I);: NORMAL 
  192. 1920  INVERSE :VA = I +64
  193. 1930  VTAB V: POKE HT,0: PRINT  CHR$(VA);
  194. 1940  NORMAL : RETURN 
  195. 1950 :
  196. 1960  REM DISPLAY PROGRAM TITLE
  197. 1970  VTAB 23: POKE HT,0: INVERSE : PRINT  SPC( 2);"PRINT.BAS ";
  198. 1980  RETURN 
  199. 1990 :
  200. 2000  REM GET KEY FROM KEYBOARD
  201. 2010 K =  PEEK(49152): IF K <128  THEN 2010
  202. 2020 K = K -128: POKE 49168,0: RETURN 
  203. 2030 :
  204. 2040  REM CLEAR LINE
  205. 2050  VTAB 24: POKE HT,0: PRINT  SPC( 79);: RETURN 
  206. 2060 :
  207. 2070  REM GET LINE FROM KEYBOARD
  208. 2080 V =  PEEK(37) +1:H = 30
  209. 2090 GL$ = ""
  210. 2100  GOSUB 2010: REM GET KEY
  211. 2110  IF K = 13  THEN  RETURN : REM RETURN
  212. 2120 LL =  LEN(GL$)
  213. 2130  IF K = 27  THEN 2260: REM ESC -- BACKUP
  214. 2140  IF K < >8  AND K < >127  THEN 2200: REM NOT LEFT
  215. 2150 LL = LL -1: REM LEFT
  216. 2160  IF LL >0  THEN GL$ =  LEFT$(GL$,LL)
  217. 2170  IF LL = 0  THEN GL$ = ""
  218. 2180  VTAB V: POKE HT,H +LL +1: PRINT " ";
  219. 2190  GOTO 2100: REM GET ANOTHER CHARACTER
  220. 2200  IF LL = 40  THEN 2100: REM LIMIT 40 CHARACTERS
  221. 2210  IF IS = 0  AND K >47  AND K <58  THEN GL$ = GL$ + CHR$(K): REM #
  222. 2220  IF IS = 1  AND K >31  THEN GL$ = GL$ + CHR$(K): REM STRING
  223. 2230  VTAB V: POKE HT,H +LL +1
  224. 2240  IF  LEN(GL$) >LL  THEN  PRINT  CHR$(K);
  225. 2250  GOTO 2100: REM  ANOTHER CHARACTER
  226. 2260  IF LL >0  THEN  VTAB V: POKE HT,H: PRINT  SPC( LL +1): GOTO 2090
  227. 2270 GL$ =  CHR$(27)
  228. 2280  RETURN : REM escape when blank
  229. 2290 :
  230. 2300  REM CHECK FILETYPE
  231. 2310 NM$ =  MID$ (FI$(I),2,16): REM GET PRODOS FILENAME
  232. 2320  FOR J = 1 TO 15: REM TO STRIP TRAILING BLANKS
  233. 2330  IF  RIGHT$(NM$,1) = " "  THEN NM$ =  LEFT$(NM$, LEN(NM$) -1)
  234. 2340  NEXT J
  235. 2350 MD$ =  MID$ (FI$(I),31,15): REM GET MODIFICATION DATE AND TIME
  236. 2360 FT$ =  MID$ (FI$(I),18,3): REM GET PRODOS FILETYPE
  237. 2370  IF FT$ = "DIR"  THEN P$ = P$ +"/" +NM$: GOTO 2720: REM READ NEW DIR
  238. 2380 PI$ = P$ +"/" +NM$: REM PATH FOR INPUT FILE
  239. 2390  IF FT$ = "BAS"  THEN 2820: REM DISPLAY OPTIONS
  240. 2400  IF FT$ = "SYS"  THEN 3030
  241. 2410  VTAB 24: POKE HT,0: INVERSE 
  242. 2420  PRINT "Filetype is not BAS -- Press any key";
  243. 2430  NORMAL : GOSUB 2010
  244. 2440  GOSUB 2050: GOTO 1740
  245. 2450 :
  246. 2460  REM CHECK FOR ESCAPE
  247. 2470 E =  PEEK(49152):E = E -128: POKE 49168,0
  248. 2480  IF E = 27  THEN  POP : GOTO 2530: REM ESCAPE
  249. 2490  IF E = 32  AND FT$ = "BAS"  THEN  GOSUB 2010: REM PAUSE
  250. 2500  RETURN 
  251. 2510 :
  252. 2520  REM RESTART
  253. 2530  IF PR = 1  THEN  PRINT D$;"PR#3": PRINT : VTAB 22: POKE HT,0:PR = 0
  254. 2540  PRINT D$;"CLOSE": GOSUB 2050:PL = 0
  255. 2550  IF LA$ = ""  THEN 2750: REM DIRECTORY NOT READ
  256. 2560  IF FT$ < >"BAS"  THEN 2620: REM NO INPUT FILE YET
  257. 2570  VTAB 24: POKE HT,0
  258. 2580  INVERSE : PRINT "SAME INPUT FILE? <Y>";: NORMAL 
  259. 2590  GOSUB 2010: IF K = 78  OR K = 110  OR K = 27  THEN  GOSUB 2050: GOTO 2620
  260. 2600  IF K < >89  AND K < >121  AND K < >13  THEN 2570
  261. 2610  GOTO 2820: REM DISPLAY OPTIONS
  262. 2620  VTAB 24: POKE HT,0
  263. 2630  INVERSE : PRINT "DISPLAY PREVIOUS DIRECTORY? <Y>";: NORMAL 
  264. 2640  GOSUB 2010: IF K = 78  OR K = 110  OR K = 27  THEN  GOSUB 2050: GOTO 2750
  265. 2650  IF K < >89  AND K < >121  AND K < >13  THEN 2620
  266. 2660  GOSUB 2050
  267. 2670 NP$ = P$
  268. 2680 NP$ =  LEFT$(NP$, LEN(NP$) -1): REM STRIP SUBDIRECTORY NAME
  269. 2690  IF  RIGHT$(NP$,1) < >"/"  THEN 2680
  270. 2700  IF  LEN(NP$) = 1  THEN 2720: REM WAS ROOT DIRECTORY
  271. 2710 P$ =  LEFT$(NP$, LEN(NP$) -1): REM STRIP TRAILING SLASH
  272. 2720  VTAB 23: POKE HT,0: PRINT  SPC( 80);
  273. 2730  VTAB 23: POKE HT,0: INVERSE : PRINT "READING DIRECTORY ";P$;
  274. 2740  NORMAL : GOTO 1400: REM RESET PREFIX
  275. 2750  POKE HT,0
  276. 2760  VTAB 24: INVERSE : PRINT "RESTART? <Y> ";
  277. 2770  NORMAL : GOSUB 2010: IF K = 78  OR K = 110  OR K = 27  THEN  END 
  278. 2780  IF K < >89  AND K < >121  AND K < >13  THEN 2750
  279. 2790  GOTO 1100: REM GREETING
  280. 2800 :
  281. 2810  REM DISPLAY OPTIONS MENU
  282. 2820  HOME 
  283. 2830  PRINT "INPUT FILE: ";PI$
  284. 2840  PRINT 
  285. 2850  PRINT "(1) Print file"
  286. 2860  PRINT "(2) Display file"
  287. 2870  PRINT "(3) Write TXT"
  288. 2880  PRINT "(4) Load file"
  289. 2890  PRINT "(5) Run file"
  290. 2900  PRINT "(6) Cross-reference"
  291. 2910  PRINT "(7) Quit"
  292. 2920  PRINT : PRINT "CHOICE? <1> ";
  293. 2930  GOSUB 2010: REM get key
  294. 2940  IF K = 27  THEN 2530: REM RESTART
  295. 2950  IF K = 13  THEN K = 49: GOTO 2970: REM return
  296. 2960  IF K <49  OR K >56  THEN 2930: REM NOT 1-7
  297. 2970  PRINT  CHR$(K):PC = K -48
  298. 2980  IF PC <7  THEN  PRINT "READING ";PI$: PRINT 
  299. 2990  PRINT D$;"CLOSE": REM CLOSE DIR FILE
  300. 3000  ON PC GOTO 3080,3080,3080,3010,3030,3080,3050
  301. 3010  HOME : PRINT  CHR$(21): PRINT "LOADING ";PI$
  302. 3020  PRINT D$;"LOAD";PI$
  303. 3030  HOME : PRINT  CHR$(21): PRINT "RUNNING ";PI$
  304. 3040  PRINT D$;"-";PI$
  305. 3050  END 
  306. 3060 :
  307. 3070  REM OPEN INPUT FILE
  308. 3080 X =  FRE(0): REM CLEAR MEMORY OF OLD STRINGS
  309. 3090 EOF = 0:B = 0
  310. 3100  PRINT D$;"OPEN ";PI$;",T";FT$
  311. 3110  REM IF ERROR THEN GOTO RESTART
  312. 3120 A = 0: REM CHARACTER COUNTER FOR LINE CODES
  313. 3130  IF PC <3  THEN 3380: REM READ BASIC TOKENS
  314. 3140  IF PC = 6  THEN 680: REM CROSS-REFERENCE
  315. 3150 :
  316. 3160  REM OUTPUT PATHNAME
  317. 3170  PRINT 
  318. 3180  PRINT "PATHNAME OF TXT FILE: ";
  319. 3190 IS = 1: GOSUB 2080:PW$ = GL$: REM GET LINE
  320. 3200  PRINT 
  321. 3210  IF GL$ =  CHR$(27)  THEN 2820: REM DISPLAY OPTIONS
  322. 3220  PRINT 
  323. 3230 VF = 1: PRINT D$;"VERIFY";PW$:VF = 0
  324. 3240  REM IF ERROR=6 THEN FILE DOES NOT EXIST
  325. 3250  PRINT "FILE ALREADY EXISTS.  DELETE IT? <N> "
  326. 3260  GOSUB 2010: REM GET KEY
  327. 3270  IF K = 121  OR K = 89  THEN  PRINT D$;"DELETE";PW$: GOTO 3320
  328. 3280  IF K < >78  AND K < >1120  AND K < >27  AND K < >13  THEN 3260
  329. 3290  GOTO 3170: REM GET OUTPUT PATHNAME IF NOT YES
  330. 3300 :
  331. 3310  REM OPEN OUTPUT FILE
  332. 3320  PRINT D$;"OPEN";PW$
  333. 3330 CM$ = "": REM CHECK FOR COMMA IN NAME WITH DRIVE NUMBER
  334. 3340  IF  LEN(PW$) >3  THEN CM$ =  MID$ (PW$, LEN(PW$) -2,1)
  335. 3350  IF CM$ =  CHR$(44)  THEN PW$ =  LEFT$(PW$, LEN(PW$) -3)
  336. 3360 :
  337. 3370  REM READ IN BASIC TOKENS
  338. 3380  IF RT = 1  THEN 3480: REM ALREADY READ
  339. 3390  RESTORE 
  340. 3400  FOR I = 1 TO 107: READ BT$(I)
  341. 3410  IF I = 36  OR I = 37  THEN BT$(I) = BT$(I) + CHR$(58): REM ADD COLON TO HIMEM,LOMEM
  342. 3420 BT$(I) = " " +BT$(I) +" ": REM ADD SPACES
  343. 3430  NEXT I
  344. 3440  FOR I = 108 TO 128:BT$(I) = "": NEXT I
  345. 3450 RT = 1: REM SET FLAG
  346. 3460 :
  347. 3470  REM PRINT PROGRAM TITLE
  348. 3480  ON PC GOTO 3490,3550,3560
  349. 3490  HOME : PRINT  CHR$(21): REM TURN OFF 80-COL FOR PRINTER
  350. 3500  INVERSE : PRINT "PRINTING ";PI$: NORMAL :PR = 1
  351. 3510  PRINT D$;"PR#1": REM SEND TO PRINTER
  352. 3520  POKE HT,0: PRINT  SPC( LM);: GOSUB 3540
  353. 3530 PL = PL +2: GOTO 210
  354. 3540  PRINT "REM";PI$; SPC( WL -20 - LEN(PI$));MD$: PRINT : RETURN 
  355. 3550  INVERSE : GOSUB 3540: NORMAL : GOTO 210
  356. 3560  INVERSE : PRINT "WRITING";PW$: NORMAL 
  357. 3570  PRINT D$;"WRITE";PW$
  358. 3580  GOSUB 3540
  359. 3590  PRINT D$: GOTO 210: REM  RETURN TO SCREEN
  360. 3600 :
  361. 3610  REM END OF FILE
  362. 3620  IF PR = 1  THEN  PRINT : PRINT 
  363. 3630  IF PR = 1  THEN  PRINT D$;"PR#3": PRINT : VTAB 22: POKE HT,0:PR = 0
  364. 3640  IF PC = 6  THEN  PRINT 
  365. 3650  INVERSE : PRINT "END OF FILE ";PI$;: NORMAL : PRINT : PRINT 
  366. 3660  IF PC <6  THEN 2530: REM RESTART
  367. 3670  IF NJ = 0  THEN  PRINT "NO VARIABLES FOUND": GOTO 2530
  368. 3680  HOME : PRINT  CHR$(21): REM TURN OFF 80-COL FOR PRINTER
  369. 3690  INVERSE : PRINT "PRINTING VARIABLES": NORMAL :PR = 1
  370. 3700  PRINT D$;"PR#1"
  371. 3710  POKE HT,0: PRINT  SPC( LM);"VARIABLES IN ";PI$;"  ";MD$
  372. 3720 NV = 0: GOSUB 630
  373. 3730  FOR I = 1 TO NJ: IF I = 1  THEN  GOTO 3750: REM FIRST VARIABLE
  374. 3740  IF SV$(I) = SV$(I -1)  THEN 3770
  375. 3750  PRINT : GOSUB 630: PRINT  SPC( LM);SV$(I);" - ";:NV = NV +1
  376. 3760 VV = LM + LEN(SV$(I)) +3:LV = VV: REM RESET LENGTH OF VARIABLES PRINTED
  377. 3770  IF SN(I) > INT(SN(I))  THEN SN(I) = SN(I) +.01
  378. 3780  IF LV >WL  THEN  PRINT : GOSUB 630: PRINT  SPC( VV):LV = VV
  379. 3790  PRINT SN(I);" ";:LV = LV + LEN( STR$(SN(I))) +1: NEXT I: PRINT : PRINT 
  380. 3800  PRINT  SPC( LM);NV;" VARIABLES - ";NJ;" NUMBERS"
  381. 3810  PRINT : PRINT :PL = PL +4: GOSUB 630
  382. 3820  IF EOF = 0  THEN  PRINT D$;"PR#3": PRINT : VTAB 22: POKE HT,0:PR = 0: GOTO 680
  383. 3830  GOTO 2530: REM RESTART
  384. 3840 :
  385. 3850  REM BASIC TOKENS
  386. 3860  DATA END,FOR,NEXT,DATA,INPUT,DEL,DIM,READ,GR,TEXT
  387. 3870  DATA PR#,IN#,CALL,PLOT,HLIN,VLIN,HGR2,HGR,HCOLOR=,HPLOT
  388. 3880  DATA DRAW,XDRAW,HTAB,HOME,ROT=,SCALE=,SHLOAD,TRACE,NOTRACE,NORMAL
  389. 3890  DATA INVERSE,FLASH,COLOR=,POP,VTAB,HIMEM,LOMEM,ONERR,RESUME,RECALL
  390. 3900  DATA STORE,SPEED=,LET,GOTO,RUN,IF,RESTORE,&,GOSUB,RETURN
  391. 3910  DATA REM,STOP,ON,WAIT,LOAD,SAVE,DEF,POKE,PRINT,CONT
  392. 3920  DATA LIST,CLEAR,GET,NEW,TAB(,TO,FN,SPC(,THEN,AT
  393. 3930  DATA NOT,STEP,+,-,*,/,^,AND,OR,>
  394. 3940  DATA =,<,SGN,INT,ABS,USR,FRE,SCRN(,PDL,POS
  395. 3950  DATA SQR,RND,LOG,EXP,COS,SIN,TAN,ATN,PEEK,LEN
  396. 3960  DATA STR$,VAL,ASC,CHR$,LEFT$,RIGHT$,MID$
  397. 3970 :
  398. 3980  REM ERROR ROUTINE
  399. 3990 EN =  PEEK(222): REM GET ERROR NUMBER
  400. 4000 EL =  PEEK(219) *256 + PEEK(218): REM GET LINE
  401. 4010  POKE 216,0: CALL  -3288
  402. 4020  ONERR  GOTO 3990: REM  SET ERROR TRAPPING
  403. 4030  IF EN = 2  AND RI = 1  THEN EOF = 1:RI = 0: GOTO 3620
  404. 4040  IF EN = 6  AND VF = 1  THEN VF = 0: GOTO 3320: REM OUTPUT FILE NOT FOUND
  405. 4050  IF EN = 255  THEN  END : REM TRAPPED CTRL-C
  406. 4060  PRINT  CHR$(4);"CLOSE": REM CLOSE ALL FILES
  407. 4070  IF PR = 1  THEN  PRINT D$;"PR#0":PR = 0: REM TURN OFF PRINTER
  408. 4080  VTAB 23: POKE HT,0
  409. 4090  INVERSE : PRINT "ERROR ";EN;" ON LINE ";EL;
  410. 4100  IF EN = 254  THEN 2530: REM TRAPPED ESC
  411. 4110  IF EN = 2  THEN  PRINT " -- RANGE ERROR";
  412. 4120  IF EN = 4  THEN  PRINT " -- WRITE PROTECTED";
  413. 4130  IF EN = 6  THEN  PRINT " -- PATH NOT FOUND";
  414. 4140  IF EN = 8  THEN  PRINT " -- I/O ERROR";
  415. 4150  IF EN = 9  THEN  PRINT " -- DISK FULL";
  416. 4160  IF EN = 10  THEN  PRINT " -- FILE LOCKED";
  417. 4170  IF EN = 11  OR EN = 16  THEN  PRINT " -- SYNTAX ERROR";
  418. 4180  PRINT " -- ";: NORMAL 
  419. 4190  INVERSE 
  420. 4200  PRINT "PRESS ANY KEY ";: NORMAL : PRINT " ";
  421. 4210  GOSUB 2010: REM GET KEY
  422. 4220  GOTO 2530: REM RESTART