home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib35b.dsk / NIBBLEWRITER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  13KB  |  324 lines

  1. 10  REM *************************
  2. 20  REM *     NIBBLEWRITER      *
  3. 21  REM *     ------------      *
  4. 30  REM *  BY ROBERT T. YUILLE  *
  5. 40  REM *  COPYRIGHT (C) 1988   *
  6. 50  REM *  BY MICROSPARC, INC.  *
  7. 60  REM *  CONCORD, MA  01742   *
  8. 70  REM *************************
  9. 80  HOME : PRINT  CHR$(21)
  10. 90  REM   SET HIMEM
  11. 100 PRODOS =  PEEK(48896) = 76: IF   NOT PRODOS  THEN  HIMEM: 24832: GOTO 170
  12. 110  REM   FOR PRODOS
  13. 120  POKE 768,32: POKE 769,248: POKE 770,190
  14. 130  POKE 771,169: POKE 772,53: POKE 773,32
  15. 140  POKE 774,245: POKE 775,190: POKE 776,96
  16. 150  CALL 768
  17. 160  REM   INITIALIZATION
  18. 170 LM$ = "1.0":RM$ = "1.0":TM$ = "1.0":BM$ = "1.0"
  19. 180 LM = 8:RM = 66:TM = 6:BM = 60
  20. 190  POKE 30,0: POKE 233,0: REM  NEWF & PRNTF
  21. 200 D$ =  CHR$(4):B$ =  CHR$(7):E$ =  CHR$(27):R$ =  CHR$(13): IF   NOT PRODOS  THEN D$ =  CHR$(13) + CHR$(4)
  22. 210 M1$ = "MARGIN VALUE EXCEEDS MAXIMUM"
  23. 220 M2$ = "MARGIN VALUE IS LESS THAN MINIMUM"
  24. 230 M3$ = "CHAR CANNOT BE USED IN THIS INPUT"
  25. 240 FL$ = "WP.40.O"
  26. 250 FADDR = 26124: REM   FILENAME ($660C)
  27. 260 ST = 6:DR = 1: REM  DEFAULT SLOT AND DRIVE
  28. 270  PRINT D$"PR#0"
  29. 280 :
  30. 290  REM   LOAD WP OBJECT FILE
  31. 300 :
  32. 310 LK = 1: ONERR  GOTO 3130
  33. 320  PRINT D$"BLOAD NW.BIN"
  34. 330  POKE 216,0: REM  RESET ERROR FLAG
  35. 340 :
  36. 350  REM    INITIALIZE & READ MENU DATA
  37. 360 :
  38. 370  READ MITEMS: DIM MENU$(9): FOR J = 0 TO MITEMS: READ MENU$(J): NEXT 
  39. 380  DIM X$(1):X$(0) = "   ":X$(1) = "-->"
  40. 390 :
  41. 400  REM   MAIN MENU
  42. 410 :
  43. 420  TEXT : HOME : GOSUB 3040: POKE 216,0: ONERR  GOTO 3130
  44. 430 PX = 38:SX = 4:SE = SE +(SE = 0):MX = MITEMS: GOSUB 2960: IF Z = 20  THEN  PRINT B$: GOTO 420
  45. 440  ON SE GOTO 480,560,670,890,940,990,1480,2750,1740
  46. 450 :
  47. 460  REM   START NEW DOCUMENT
  48. 470 :
  49. 480  IF  PEEK(30) = 2  THEN  GOSUB 2660: IF ESCF = 1  THEN 420
  50. 490  GOSUB 1830: IF ESCF = 1  THEN 420
  51. 500  POKE 30,0
  52. 510  CALL 26112: REM   ENTRY ($6600)
  53. 520  GOTO 420
  54. 530 :
  55. 540  REM   LOAD NEW DOCUMENT
  56. 550 :
  57. 560  IF  PEEK(30) = 2  THEN  GOSUB 2660: IF ESCF = 1  THEN 420
  58. 570  GOSUB 1830: IF ESCF = 1  THEN 420
  59. 580  HTAB 1: VTAB 20: PRINT "LOADING "FL$
  60. 590 LK = 3: ONERR  GOTO 3130
  61. 600  PRINT D$"BLOAD "FL$",S"ST",D"DR
  62. 610  POKE 216,0
  63. 620  POKE 30,1: REM  SET NEWF FOR LOADED FILE
  64. 630  GOTO 510
  65. 640 :
  66. 650  REM   SAVE CURRENT DOCUMENT
  67. 660 :
  68. 670  HOME : IF  PEEK(30) < >2  THEN  VTAB 5: PRINT "THERE IS NO CURRENT DOCUMENT": VTAB 10: PRINT "PRESS RETURN FOR MAIN MENU: ";: GET A$: GOTO 420
  69. 680 EF =  PEEK(252) +256 * PEEK(253): REM  EFL($FC) & EFH($FD)
  70. 690 LN = EF -28672
  71. 700  ONERR  GOTO 800
  72. 710  PRINT D$"VERIFY "FL$",S"ST",D"DR
  73. 720  HOME : VTAB 5: PRINT "FILE: '"FL$"' ALREADY EXISTS"
  74. 730  VTAB 13: PRINT "PRESS 'Y' TO REPLACE EXISTING FILE": PRINT : PRINT "PRESS 'N' TO RENAME FILE": VTAB 10: PRINT "DO YOU WANT TO REPLACE": PRINT "THE EXISTING FILE? (Y/N) ";
  75. 740  GET A$
  76. 750  IF A$ = "N"  OR A$ = "n"  THEN  POKE 216,0: GOTO 840
  77. 760  IF A$ < >"Y"  AND A$ < >"y"  THEN  GOTO 740
  78. 770  HTAB 1: VTAB 20: PRINT "DELETING "FL$
  79. 780 LK = 2: ONERR  GOTO 3130
  80. 790  PRINT D$"DELETE "FL$",S"ST",D"DR
  81. 800  HTAB 1: VTAB 21: PRINT "SAVING "FL$
  82. 810 LK = 2: ONERR  GOTO 3130
  83. 820  PRINT D$"BSAVE "FL$",A$7000,L"LN",S"ST",D"DR
  84. 830  POKE 216,0: GOTO 420
  85. 840  GOSUB 1830: IF ESCF = 1  THEN 420
  86. 850  GOTO 670
  87. 860 :
  88. 870  REM   RENAME CURRENT DOCUMENT
  89. 880 :
  90. 890  GOSUB 1830: IF ESCF = 1  THEN 420
  91. 900  GOTO 510
  92. 910 :
  93. 920  REM   CONTINUE WITH CURRENT DOCUMENT
  94. 930 :
  95. 940  IF  PEEK(30) < >2  THEN 670
  96. 950  GOTO 510
  97. 960 :
  98. 970  REM   PRINTER ROUTINE
  99. 980 :
  100. 990  IF  PEEK(30) < >2  THEN 670
  101. 1000  HOME : VTAB 2: PRINT "MARGIN VALUES ARE AS FOLLOWS:": PRINT : PRINT "LM= "LM$"  RM= "RM$"  TM= "TM$"  BM= "BM$
  102. 1010  VTAB 10: PRINT "DO YOU WANT TO CHANGE MARGINS (Y/N)? ";
  103. 1020  GET A$
  104. 1030  IF A$ = "Y"  OR A$ = "y"  THEN 1060
  105. 1040  IF A$ < >"N"  AND A$ < >"n"  THEN 1020
  106. 1050  GOTO 1370
  107. 1060 M$ = "LM":MA$ = "7.0":MI$ = "0.5"
  108. 1070  GOSUB 2330: IF ESCF = 1  THEN 420
  109. 1080 N =  VAL(N$)
  110. 1090  IF N >7  THEN MSG$ = M1$: GOSUB 2250: GOTO 1060
  111. 1100  IF N <.5  THEN MSG$ = M2$: GOSUB 2250: GOTO 1060
  112. 1110 LM = N *10 -2
  113. 1120 LM$ = N$
  114. 1130 M$ = "RM":MA$ = "7.0":MI$ = "0.5"
  115. 1140  GOSUB 2330: IF ESCF = 1  THEN 420
  116. 1150 N =  VAL(N$)
  117. 1160  IF N >7  THEN MSG$ = M1$: GOSUB 2250: GOTO 1130
  118. 1170  IF N <.5  THEN MSG$ = M2$: GOSUB 2250: GOTO 1130
  119. 1180 RM = 80 -(N *10 -4) -LM
  120. 1190  IF RM < = 0  THEN MSG$ = "LEFT MARGIN EXCEEDS RIGHT MARGIN": GOSUB 2250:RM = 66: GOTO 990
  121. 1200 RM$ = N$
  122. 1210 M$ = "TM":MA$ = "8.0":MI$ = "0.2"
  123. 1220  GOSUB 2330: IF ESCF = 1  THEN 420
  124. 1230 N =  VAL(N$)
  125. 1240  IF N >8  THEN MSG$ = M1$: GOSUB 2250: GOTO 1210
  126. 1250  IF N <.2  THEN MSG$ = M2$: GOSUB 2250: GOTO 1210
  127. 1260 TM =  INT(6 *N +.5)
  128. 1270 TM$ = N$
  129. 1280 M$ = "BM":MA$ = "8.0":MI$ = "0.2"
  130. 1290  GOSUB 2330: IF ESCF = 1  THEN 420
  131. 1300 N =  VAL(N$)
  132. 1310  IF N >8  THEN MSG$ = M1$: GOSUB 2250: GOTO 1280
  133. 1320  IF N <.2  THEN MSG$ = M2$: GOSUB 2250: GOTO 1280
  134. 1330 BM = 66 - INT(6 *N +.5)
  135. 1340  IF TM > = BM  THEN MSG$ = "TOP MARGIN EXCEEDS BOTTOM MARGIN": GOSUB 2250: GOTO 1210
  136. 1350 BM$ = N$
  137. 1360  GOTO 990
  138. 1370  POKE 26,TM: POKE 27,BM: POKE 28,LM: POKE 29,RM
  139. 1380  HOME : VTAB 2: PRINT "BE SURE YOUR PRINTER IS READY": VTAB 10: PRINT "PRESS RETURN TO CONTINUE: ";: GET A$
  140. 1390  HOME : VTAB 15: PRINT "PRESS ESCAPE TO CANCEL PRINTING."
  141. 1400  VTAB 10: PRINT "PRESS SPACE BAR TO CONTINUE: "
  142. 1410  PRINT D$"PR#1"
  143. 1420  PRINT  CHR$(9)"80N": POKE 233,1: CALL 26112: POKE 233,0
  144. 1430  PRINT D$"PR#0"
  145. 1440  GOTO 420
  146. 1450 :
  147. 1460  REM   HELP SCREEN
  148. 1470 :
  149. 1480  TEXT : HOME 
  150. 1490  NORMAL : PRINT "             HELP SCREEN": REM  13 SPACES
  151. 1500  PRINT : PRINT 
  152. 1510  PRINT "<ARROWS> - MOVE CURSOR"
  153. 1520  PRINT 
  154. 1530  PRINT "<ESCAPE> - RETURN TO MAIN MENU"
  155. 1540  PRINT 
  156. 1550  PRINT "<DELETE> - DELETE CHAR LEFT OF CURSOR"
  157. 1560  PRINT 
  158. 1570  PRINT "<CTRL>-D - DELETE CHAR UNDER CURSOR"
  159. 1580  PRINT 
  160. 1590  PRINT "<CTRL>-E - CHANGE INSERT/REPLACE CURSOR"
  161. 1600  PRINT 
  162. 1610  PRINT "<CTRL>-Y - CLEAR FROM CURSOR TO EOL"
  163. 1620  PRINT 
  164. 1630  PRINT "<CTRL>-Z - SHOW CR'S AS INV ASTERISK"
  165. 1640  PRINT 
  166. 1650  PRINT "   <TAB> - MOVE CURSOR TO NEXT TAB POS"
  167. 1660  PRINT 
  168. 1670  PRINT "<CTRL>-F - MOVE TO FIRST LINE"
  169. 1680  PRINT "<CTRL>-C - MOVE TO CENTER LINE"
  170. 1690  PRINT "<CTRL>-L - MOVE TO LAST LINE";
  171. 1700  HTAB 1: VTAB 24: PRINT "PRESS RETURN TO CONTINUE: ";: GET A$: GOTO 420
  172. 1710 :
  173. 1720  REM   QUIT
  174. 1730 :
  175. 1740  HOME : VTAB 10: PRINT "DO YOU REALLY WANT TO QUIT (Y/N)? ";
  176. 1750  GET A$
  177. 1760  IF A$ = "Y"  OR A$ = "y"  THEN 1790
  178. 1770  IF A$ = "N"  OR A$ = "n"  THEN 420
  179. 1780  GOTO 1750
  180. 1790  HOME : END 
  181. 1800 :
  182. 1810  REM   FILENAME INPUT ROUTINE
  183. 1820 :
  184. 1830  HOME :N$ = "":ESCF = 0
  185. 1840  VTAB 2: PRINT "ENTER FILENAME FOR DOCUMENT": PRINT : PRINT 
  186. 1850  PRINT "PRESS '?' TO CATALOG DISK": PRINT 
  187. 1860  PRINT "ESCAPE ON 1ST CHAR RETURNS TO MAIN MENU": PRINT 
  188. 1870  PRINT "ESCAPE ON ANY OTHER CHARACTER": PRINT " CANCELS INPUT AND STARTS OVER": PRINT 
  189. 1880  PRINT "RETURN ACCEPTS INPUT"
  190. 1890  HTAB 1: VTAB 15: PRINT "FILENAME: ";
  191. 1900  GET C$
  192. 1910  IF C$ = E$  THEN ESCF = 1: RETURN 
  193. 1920  IF C$ = "?"  THEN  PRINT D$ LEFT$("CATALOG",7 -4 *PRODOS)",S"ST",D"DR: HTAB 1: VTAB 24: PRINT "PRESS RETURN TO CONTINUE: ";: GET A$: GOTO 1830
  194. 1930 AN =  ASC(C$)
  195. 1940  IF AN >96  AND AN <123  THEN AN = AN -32
  196. 1950  IF AN <65  OR AN >90  THEN MSG$ = "FIRST POSITION MUST BE A LETTER": GOSUB 2250: GOTO 1830
  197. 1960  PRINT  CHR$(AN)
  198. 1970 N$ =  CHR$(AN)
  199. 1980  FOR K = 1 TO 15
  200. 1990  HTAB 1: VTAB 18: CALL  -958
  201. 2000  VTAB 15: HTAB (11 +K)
  202. 2010  GET C$
  203. 2020  IF C$ = E$  THEN K = 15: NEXT : GOTO 1830
  204. 2030  IF C$ =  CHR$(8)  AND K = 1  THEN K = 15: NEXT : GOTO 1830
  205. 2040  IF C$ =  CHR$(8)  THEN K = K -1: HTAB (11 +K): PRINT " ":N$ =  LEFT$(N$,K): GOTO 2000
  206. 2050  IF C$ = R$  THEN LC = K:K = 15: GOTO 2110
  207. 2060 AN =  ASC(C$)
  208. 2070  IF AN >96  AND AN <123  THEN AN = AN -32
  209. 2080  IF (AN <65  OR AN >90)  AND (AN <48  OR AN >57)  AND AN < >46  THEN MSG$ = "CHARACTER CANNOT BE USED IN FILENAME": GOSUB 2250: GOTO 1990
  210. 2090  PRINT  CHR$(AN)
  211. 2100 N$ = N$ + CHR$(AN)
  212. 2110  NEXT 
  213. 2120  IF C$ < >R$  THEN MSG$ = "FILENAME TOO LONG, LIMIT - 15 CHARACTERS": GOSUB 2250: GOTO 1830
  214. 2130 FL$ = N$
  215. 2140  FOR I = 0 TO 15
  216. 2150  POKE FADDR +I,0
  217. 2160  NEXT 
  218. 2170  FOR K = 1 TO  LEN(N$)
  219. 2180  POKE FADDR -1 +K, ASC( MID$ (N$,K,1)) +128
  220. 2190  NEXT 
  221. 2200  POKE FADDR +LC,0
  222. 2210  RETURN 
  223. 2220 :
  224. 2230  REM   ERROR MESSAGES
  225. 2240 :
  226. 2250  PRINT B$
  227. 2260  HTAB 1: VTAB 18
  228. 2270  PRINT MSG$: PRINT : PRINT 
  229. 2280  PRINT "PRESS RETURN AND TRY AGAIN: ";: POKE  -16368,0: GET AA$
  230. 2290  RETURN 
  231. 2300 :
  232. 2310  REM   PRINTER MARGIN ROUTINE
  233. 2320 :
  234. 2330  HOME :N$ = "":ESCF = 0
  235. 2340  VTAB 2: PRINT "ENTER VALUE FOR "M$: PRINT "MAXIMUM "MA$" - MINIMUM "MI$: PRINT 
  236. 2350  PRINT "ESCAPE ON 1ST CHAR RETURNS TO MAIN MENU": PRINT 
  237. 2360  PRINT "ESCAPE ON ANY OTHER CHARACTER": PRINT " CANCELS INPUT AND STARTS OVER": PRINT 
  238. 2370  PRINT "RETURN ACCEPTS INPUT"
  239. 2380  PRINT : PRINT "RETURN ON 1ST CHAR ACCEPTS DEFAULT (1.0)"
  240. 2390  HTAB 1: VTAB 15: PRINT M$":  1.0"
  241. 2400  HTAB 5: VTAB 15
  242. 2410  GET C$
  243. 2420  IF C$ = E$  THEN ESCF = 1: RETURN 
  244. 2430  IF C$ = R$  THEN N$ = "1.0": RETURN 
  245. 2440 AN =  ASC(C$)
  246. 2450  IF AN <48  OR AN >57  THEN MSG$ = M3$: GOSUB 2250: GOTO 2330
  247. 2460  PRINT C$;: CALL  -868
  248. 2470 N$ = C$
  249. 2480  FOR K = 1 TO 3
  250. 2490  HTAB 1: VTAB 18: CALL  -958
  251. 2500  VTAB 15: HTAB (5 +K)
  252. 2510  GET C$
  253. 2520  IF C$ = E$  THEN K = 3: NEXT : GOTO 2330
  254. 2530  IF C$ =  CHR$(8)  AND K = 1  THEN K = 3: NEXT : GOTO 2330
  255. 2540  IF C$ =  CHR$(8)  THEN K = K -1: HTAB (5 +K): PRINT " ":N$ =  LEFT$(N$,K): GOTO 2500
  256. 2550  IF C$ = R$  THEN K = 3: GOTO 2600
  257. 2560 AN =  ASC(C$)
  258. 2570  IF (AN <48  OR AN >57)  AND AN < >46  THEN MSG$ = M3$: GOSUB 2250: GOTO 2490
  259. 2580  PRINT C$
  260. 2590 N$ = N$ +C$
  261. 2600  NEXT 
  262. 2610  IF C$ < >R$  THEN MSG$ = "INPUT TOO LONG, LIMIT - 3 CHARACTERS": GOSUB 2250: GOTO 2330
  263. 2620  RETURN 
  264. 2630 :
  265. 2640  REM  ERASE CURRENT DOCUMENT?
  266. 2650 :
  267. 2660  HOME :ESCF = 0: VTAB 8: PRINT "YOU ARE ABOUT TO ERASE": PRINT "THE CURRENT DOCUMENT."
  268. 2670  VTAB 12: PRINT "DO YOU REALLY WANT TO DO THIS? (Y/N) ";
  269. 2680  GET A$
  270. 2690  IF A$ = "N"  OR A$ = "n"  THEN ESCF = 1: RETURN 
  271. 2700  IF A$ < >"Y"  AND A$ < >"y"  THEN 2680
  272. 2710  RETURN 
  273. 2720 :
  274. 2730  REM  SELECT SLOT AND DRIVE
  275. 2740 :
  276. 2750  HOME : VTAB 1: PRINT "WHICH SLOT DO YOU WANT TO USE? (2-7) ";
  277. 2760  GET A$
  278. 2770  IF A$ =  >"2"  AND A$ < =  CHR$(54 +PRODOS)  THEN  PRINT A$:ST =  VAL(A$): GOTO 2790
  279. 2780  GOTO 2760
  280. 2790  VTAB 5: PRINT "WHICH DISK DRIVE": PRINT "DO YOU WANT TO USE? (1-2) ";
  281. 2800  GET A$
  282. 2810  IF A$ = "1"  OR A$ = "2"  THEN  PRINT A$:DR =  VAL(A$): GOTO 2830
  283. 2820  GOTO 2800
  284. 2830  POKE 216,0: ONERR  GOTO 2870: IF PRODOS  THEN  PRINT D$"PREFIX,S";ST;",D";DR:
  285. 2840  IF PRODOS  THEN  GOTO 420
  286. 2850  PRINT D$"VERIFY JUNK,S";ST;",D";DR
  287. 2860  GOTO 420
  288. 2870  POKE 216,0:EN =  PEEK(222):EL =  PEEK(218) +256 * PEEK(219): IF EL = 2850  AND EN = 6  THEN 420
  289. 2880  VTAB 23: PRINT "DISK ERROR": PRINT "PRESS RETURN TO CONTINUE ";: POKE  -16368,0: GET AA$: GOTO 420
  290. 2890 :
  291. 2900  REM  DATA FOR MAIN MENU
  292. 2910 :
  293. 2920  DATA  9,MAIN MENU,START NEW DOCUMENT,LOAD DOCUMENT,SAVE DOCUMENT,RENAME DOCUMENT,CONTINUE WITH CURRENT DOCUMENT,PRINT DOCUMENT,HELP,SET SLOT/DRIVE,QUIT
  294. 2930 :
  295. 2940  REM   MENU HANDLER
  296. 2950 :
  297. 2960 SL = SE
  298. 2970 N = SL:OS = SL: GOSUB 3000:Z = 0: VTAB 24: HTAB PX: CALL  -868: POKE  -16368,0
  299. 2980  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 3000: GOTO 2970
  300. 2990 Z = (Z = 21  OR Z = 10) -(Z = 8  OR Z = 11) +10 *(Z = 13) +20 *(Z = 27): ON   NOT Z GOTO 2980:SL = SL +Z *(Z <10):SL = SL -MX *(SL >MX) +MX *(SL <1):N = OS: GOSUB 3000: ON Z <10 GOTO 2970:SE = SL: POKE  -16368,0: RETURN 
  301. 3000  VTAB 3 +2 *N: HTAB SX: PRINT X$(SL = OS);: RETURN 
  302. 3010 :
  303. 3020  REM   PRINT A MENU
  304. 3030 :
  305. 3040  HOME :TL$ = MENU$(0): VTAB 1: PRINT "NIBBLEWRITER   (C)1988   MICROSPARC,INC.": VTAB 2: FOR I = 1 TO 40: PRINT "-";: NEXT 
  306. 3050  VTAB 3: HTAB  INT((40 - LEN(TL$))/2)
  307. 3060  PRINT TL$
  308. 3070  FOR I = 1 TO MITEMS: VTAB 3 +2 *I: HTAB 8: PRINT I". "MENU$(I): NEXT 
  309. 3080  VTAB 24: HTAB 1: PRINT "USE ARROWS/NUMBERS & PRESS RETURN: ";
  310. 3090  RETURN 
  311. 3100 :
  312. 3110  REM  DISK ERRORS
  313. 3120 :
  314. 3130  HOME : VTAB 10
  315. 3140  POKE 216,0
  316. 3150  IF  PEEK(222) = 6  OR  PEEK(222) = 7  THEN MSG$ = "FILE (" +FL$ +")" + CHR$(13) +"IS NOT ON THIS DISK.": ON (( PEEK(218) +256 * PEEK(219) = 320) +1) GOTO 3210,3230
  317. 3160  IF  PEEK(222) = 13  THEN MSG$ = "FILE (" +FL$ +")" + CHR$(13) +"IS NOT A BINARY FILE.": GOTO 3210
  318. 3170  IF  PEEK(222) = 9  OR  PEEK(222) = 17  THEN MSG$ = "DISK OR DIRECTORY IS FULL.": GOTO 3210
  319. 3180  IF  PEEK(222) = 10  THEN MSG$ = "EXISTING FILE (" +FL$ +")" + CHR$(13) +"IS LOCKED.": GOTO 3210
  320. 3190  PRINT "SYSTEM ERROR #"; PEEK(222);" HAS OCCURRED"
  321. 3200  PRINT "AT LINE #"; PEEK(218) + PEEK(219) *256:MSG$ = ""
  322. 3210  GOSUB 2250
  323. 3220  GOTO 420
  324. 3230  VTAB 24: PRINT "BINARY FILE NOT FOUND": END