home *** CD-ROM | disk | FTP | other *** search
/ Softdisk G-S 87 / SGDS 87.2mg / SDGS.87 / SDC87 / C / UTILITIES (.txt) < prev    next >
Encoding:
Applesoft BASIC Source Code  |  1988-11-19  |  31.1 KB  |  838 lines  |  [FC] Applesoft BASIC Program (0x0801)

  1. 1  REM    Prodisk  Utilities
  2. 2  REM    by  Robert B. Noah
  3. 3  REM **
  4. 11  ONERR  GOTO 14
  5. 12  PRINT  CHR$(4)"PR#3": GOTO 16
  6. 14  PRINT  CHR$(21);: TEXT : HOME : GOSUB 55000
  7. 15  VTAB 12: HTAB 3: PRINT "YOU DO NOT HAVE AN EIGHTY-COLUMN": HTAB 3: PRINT "CARD. PRO DISK UTILITIES REQUIRES": HTAB 3: PRINT "EIGHTY COLUMNS. PRESS A KEY TO EXIT.": GET K$: PRINT  CHR$(4)"BYE"
  8. 16  IF  PEEK(64435) = 6  AND  PEEK(64448) < >234  THEN 18
  9. 17  VTAB 12: HTAB 3: PRINT "YOU DO NOT HAVE AN ENHANCED APPLE.": HTAB 3: PRINT "PRO DISK UTILITIES REQUIRES": HTAB 3: PRINT "THIS. PRESS A KEY TO EXIT.": GET K$: PRINT  CHR$(4)"BYE"
  10. 18  CLEAR : POKE 216,0
  11. 19  REM  VARIABLES!
  12. 20 A = 0:B = 0:C = 0:D = 0:E = 0:F = 0:G = 0:H = 0:I = 0:J = 0:K = 0:L = 0:M = 0:N = 0:P = 0:Q = 0:R = 0:S = 0:T = 0:V = 0:X = 0:Y = 0:Z = 0
  13. 21 A$ = "":B$ = "":F$ = "":S$ = "":Y$ = "":Z$ = ""
  14. 22  REM 
  15. 23  REM 
  16. 24 PR$ = "": REM              CURRENT VOLUME (PREFIX)
  17. 25 D$ =  CHR$(4)
  18. 26 E$ =  CHR$(27)
  19. 27 R$ =  CHR$(13)
  20. 29 PS = 0: REM                PRINTER SLOT
  21. 30 CD = 0: REM                MLI COMMAND #
  22. 31 ML = 768: REM              LOCATION OF MLI CALLER
  23. 32 PL = 784: REM              LOCATION OF MLI PARMS
  24. 33 BF = 0: REM                PAGE # OF DATA BUFFER
  25. 34 ER = 255: REM              ERROR RETURN FOR MLI CALLER
  26. 35  DIM PM(20),ST(20): REM    ARRAY OF PARMS, STRING TO SEARCH
  27. 36 UN = 0: REM                UNIT # OF PR$ (DSSS 0000)
  28. 37 AC = 0: REM                LOCATION OF ASCII DUMP
  29. 38 HX = 0: REM                LOCATION OF HEX DUMP
  30. 39 FD = 253: REM              $FD, LOCATION OF LINE # (0= 1-16)
  31. 40 FE = 254: REM              $FE, LOW BYTE OF .5K BUFFER
  32. 41 FF = 255: REM              $FF, PAGE OF .5K BUFFER TO DUMP
  33. 42 HP = 0: REM                LOCATION OF 2-BYTE HEX PRINTER
  34. 43 BK = 0: REM                CURRENT BLOCK #
  35. 44 TB = 0: REM                TOTAL BLOCKS IN VOLUME
  36. 45 MD = 0: REM                CURRENT DISPLAY MODE (0=HEX,1=ASCII)
  37. 46 B1 = 0: REM                CURRENT BYTE POINTED TO IN BUFFER
  38. 47 B2 = 0: REM                OLD BYTE POINTED TO IN BUFFER
  39. 48 PP = 0: REM                LOCATION OF POINTER PRINTER
  40. 49 HL = 1: REM                LOW/HIGH ASCII (0=LOW,1=HIGH)
  41. 50 SC = 0: REM                LOCATION OF SEARCH ROUTINE
  42. 51 H1 = 0: REM                LOCATION OF 1-BYTE HEX PRINTER
  43. 52 BB = 0:EB = 0: REM         BEGINNING, ENDING BLOCKS
  44. 53 BX = 0:BY = 0: REM         PAGE NUMBERS OF DATA BUFFERS 2&3
  45. 54 VR = 0: REM                LOCATION OF VERIFY ROUTINE
  46. 55 MP = 0: REM                LOCATION OF MAP PRINTER
  47. 56 BR = 0: REM                LOCATION OF BIT BREAK ROUTINE
  48. 57 PT = 804: REM              LOCATION OF PATH OF FILE
  49. 58 BS = 0:BL = 0: REM         LOCATION OF BIT ROUTINES
  50. 59  REM 
  51. 60  REM  *** 80 COLUMNS ***
  52. 61  PRINT  CHR$(4)"PREFIX": INPUT GG$: IF  LEFT$(GG$,3) < >"/SD"  THEN 70
  53. 62  GOSUB 55000: VTAB 11: HTAB 10: PRINT "WARNING: THIS UTILITY IS DANGEROUS.": HTAB 10: PRINT "IT MAY BE UNWISE TO RUN IT ON SOFTDISK.": PRINT : HTAB 10: PRINT "PRESS A KEY.": POKE  -16368,0: WAIT  -16384,128: GET K$: TEXT : HOME 
  54. 70  RESTORE : FOR X = 1 TO 13: READ N,A$: NEXT 
  55. 74  DATA  1,"BAD",4,"TXT",6,"BIN",15,"DIR",25,"ADB",26,"AWP",27,"ASP",239,"PAS",240,"CMD",252,"BAS",253,"VAR",254,"REL",255,"SYS"
  56. 76  REM 
  57. 77  REM  ***  SET UP MLI CALLER  ***
  58. 79  REM 
  59. 80  FOR A = 0 TO 15: READ B: POKE ML +A,B: NEXT A
  60. 81  DATA  32,0,191,0,0,0,144,3,133,255,96,169,0,133,255,96
  61. 82  REM 
  62. 83  REM  *** SET UP ASSEMBLY ROUTINES ***
  63. 84  REM 
  64. 85 BF = 123:BX = 125:BY = 127
  65. 86 AC = BF *256 +1536:HP = AC +179:HX = BF *256 +1792:H1 = HX +153:PP = HX +159:SC = BF *256 +2048:VR = BF *256 +2213:MP = BF *256 +2304:BR = MP +65:BS = AC +192:BL = AC +199
  66. 87  REM 
  67. 88  REM  *** GET VOLUME, GO TO MENU"
  68. 89  REM 
  69. 90  POKE 216,0: GOTO 50000
  70. 91  REM 
  71. 95  REM 
  72. 96  REM  ---------------------
  73. 97  REM  * TOP LINE SETUP
  74. 98  REM  ---------------------
  75. 99  REM 
  76. 100  HOME : VTAB 1: HTAB 1: PRINT "                                                                                ";
  77. 105  VTAB 1: HTAB 1: IF PR$ = ""  THEN  PRINT "No volume selected";: GOTO 115
  78. 110  PRINT PR$;
  79. 115 A = (80 - LEN(A$))/2: HTAB A: PRINT A$;:B$ = "Esc: " +B$: PRINT  TAB( 81 - LEN(B$));B$;: PRINT : VTAB 2: HTAB 1: PRINT "--------------------------------------------------------------------------------": RETURN 
  80. 195  REM 
  81. 196  REM  --------------------
  82. 197  REM  * INPUT
  83. 198  REM  --------------------
  84. 199  REM 
  85. 200 H =  PEEK(1403) +1:V =  PEEK(37) +1
  86. 202  PRINT : VTAB V: HTAB H: FOR A = 1 TO L: PRINT " ";: NEXT A: PRINT : VTAB V: HTAB H:B$ = "":E = 0: PRINT S$;:B$ = S$
  87. 205  GET A$: IF A$ =  CHR$(27)  THEN  PRINT :E = 1: RETURN 
  88. 206  IF A$ =  CHR$(127)  OR A$ =  CHR$(255)  THEN A$ =  CHR$(8): GOTO 215
  89. 207  IF   NOT LC  THEN  IF A$ > = "a"  AND A$ < = "z"  THEN A$ =  CHR$( ASC(A$) -32)
  90. 208  IF  ASC(A$) >31  AND  LEN(B$) = 0  THEN  FOR A = 1 TO L: PRINT " ";: NEXT A: PRINT : VTAB V: HTAB H:B$ = B$ +A$: PRINT A$;: GOTO 205
  91. 209  IF  ASC(A$) >31  AND  LEN(B$) <L  THEN B$ = B$ +A$: PRINT A$;: GOTO 205
  92. 212  IF A$ =  CHR$(13)  THEN S$ = "": PRINT : RETURN 
  93. 215  IF A$ =  CHR$(8)  AND  LEN(B$) = 1  THEN S$ = "": GOTO 202
  94. 220  IF A$ =  CHR$(8)  AND  LEN(B$) >1  THEN B$ =  LEFT$(B$, LEN(B$) -1): PRINT A$;" ";A$;: GOTO 205
  95. 225  IF A$ =  CHR$(25)  THEN S$ = "": GOTO 202
  96. 230  GOTO 205
  97. 245  REM 
  98. 246  REM  --------------------
  99. 247  REM  * S & T FILES
  100. 248  REM  --------------------
  101. 249  REM 
  102. 250  PRINT : VTAB V: HTAB 1: PRINT "ENTER SOURCE FILE NAME: ";:L = 55: IF X  THEN S$ = PR$
  103. 255  GOSUB 200:Y$ = B$: RETURN 
  104. 260  PRINT : VTAB V: HTAB 1: PRINT "ENTER TARGET FILE NAME: ";:L = 55: IF X  THEN S$ = PR$
  105. 265  GOSUB 200:Z$ = B$: RETURN 
  106. 275  REM 
  107. 276  REM  --------------------
  108. 277  REM  * SUCCESS/ERROR
  109. 278  REM  --------------------
  110. 279  REM 
  111. 280  VTAB 21: HTAB 1: PRINT "                            DONE... PRESS ANY KEY:                             ";: HTAB 52: GET A$: PRINT : RETURN 
  112. 290  VTAB 21: HTAB 1: PRINT "                            ERROR...PRESS ANY KEY:                             ";: HTAB 52: GET A$: PRINT : RETURN 
  113. 295  REM 
  114. 296  REM  --------------------
  115. 297  REM  * S & T VOLUMES
  116. 298  REM  --------------------
  117. 299  REM 
  118. 300  PRINT : VTAB V: HTAB 1: PRINT "ENTER SOURCE VOLUME NAME: /";
  119. 302  IF PR$ > <""  THEN S$ =  MID$ (PR$,2, LEN(PR$) -2)
  120. 305 L = 50: GOSUB 200:Y$ = "/" +B$: IF Y$ = "/"  THEN Y$ = ""
  121. 307  RETURN 
  122. 310  PRINT : VTAB V: HTAB 1: PRINT "ENTER TARGET VOLUME NAME: /";:L = 50: GOSUB 200:Z$ = "/" +B$: RETURN 
  123. 345  REM 
  124. 346  REM  --------------------
  125. 347  REM  * PRINTER ON
  126. 348  REM  --------------------
  127. 349  REM 
  128. 350  IF PS = 0  THEN  RETURN 
  129. 351  VTAB 21: HTAB 9: PRINT "PRESS <RET> TO PRINT TO SLOT ";PS;" OR <ESC> TO PRINT TO SCREEN: ";: GET A$: PRINT : IF A$ > <R$  AND A$ > <E$  THEN  GOTO 351
  130. 352  IF A$ = R$  THEN  PRINT D$;"PR#";PS: RETURN 
  131. 353  RETURN 
  132. 355  REM 
  133. 356  REM  --------------------
  134. 357  REM  * PRINTER OFF
  135. 358  REM  --------------------
  136. 359  REM 
  137. 360  IF PS = 0  THEN  RETURN 
  138. 361  PRINT D$;"PR#0": RETURN 
  139. 390  REM 
  140. 391  REM  --------------------
  141. 392  REM  * CALL MLI
  142. 393  REM  --------------------
  143. 394  REM 
  144. 400  POKE ML +3,CD: POKE ML +5,PL/256: POKE ML +4,PL -256 * PEEK(ML +5)
  145. 405  FOR A = 0 TO PM(0): POKE PL +A,PM(A +1): NEXT 
  146. 410  CALL ML
  147. 411 E = 0
  148. 412  IF  PEEK(ER) > <0  THEN E = 1
  149. 414  RETURN 
  150. 415  REM 
  151. 416  REM  --------------------
  152. 417  REM  * READ A BLOCK
  153. 418  REM  --------------------
  154. 419  REM 
  155. 420 CD = 128:PM(0) = 5:PM(2) = UN:PM(3) = 0:PM(4) = BF:PM(6) =  INT(BK/256):PM(5) = BK -256 *PM(6):PM(1) = 3: GOSUB 400: RETURN 
  156. 425  REM 
  157. 426  REM  --------------------
  158. 427  REM  * WRITE A BLOCK
  159. 428  REM  --------------------
  160. 429  REM 
  161. 430 CD = 129:PM(0) = 5:PM(2) = UN:PM(3) = 0:PM(4) = BF:PM(6) =  INT(BK/256):PM(5) = BK -256 *PM(6):PM(1) = 3: GOSUB 400: RETURN 
  162. 445  REM 
  163. 446  REM  --------------------
  164. 447  REM  * HEX, ASCII DUMPS
  165. 448  REM  --------------------
  166. 449  REM 
  167. 450  IF MD = 0  THEN  POKE FD,L: POKE FE,0: POKE FF,BF: CALL HX: RETURN 
  168. 460  IF MD = 1  THEN  POKE FD,L: POKE FE,0: POKE FF,BF: CALL AC: RETURN 
  169. 465  REM 
  170. 466  REM  --------------------
  171. 467  REM  * 2-BYTE HEX OUTPUT
  172. 468  REM  --------------------
  173. 469  REM 
  174. 470  POKE FF, INT(N/256): POKE FE,N - PEEK(FF) *256: CALL HP: RETURN 
  175. 475  REM 
  176. 476  REM  --------------------
  177. 477  REM  * BYTE POINTER MOVE
  178. 478  REM  --------------------
  179. 479  REM 
  180. 480 L =  INT(B2/32) +1: VTAB L +5: HTAB 1: GOSUB 450
  181. 482  IF MD = 1  THEN 490
  182. 485 A = B1:B = 0: IF A >255  THEN A = A -256:B = 1
  183. 487  VTAB 5 + INT(B1/32) +1:E = B1 -( INT(B1/32) *32) +1:E = E *2 +6: FOR X = 14 TO 68  STEP 9: IF E >X  THEN E = E +1
  184. 488  NEXT X
  185. 489  HTAB E: POKE FD,A: POKE FE,0: POKE FF,BF +B: INVERSE : CALL PP: NORMAL : RETURN 
  186. 490  VTAB 5 + INT(B1/32) +1:E = B1 -( INT(B1/32) *32) +1:E = E *2 +6: FOR X = 14 TO 68  STEP 9: IF E >X  THEN E = E +1
  187. 492  NEXT X
  188. 493  HTAB E -1: PRINT "[";: HTAB (E +1): PRINT "]": RETURN 
  189. 495  REM 
  190. 496  REM  --------------------
  191. 497  REM  * HEX CONVERT
  192. 498  REM  --------------------
  193. 499  REM 
  194. 500 A$ = "0123456789ABCDEF":L =  LEN(S$):N = 0
  195. 501  FOR H = 1 TO L: FOR V = 0 TO 15: IF  MID$ (A$,V +1,1) =  MID$ (S$,H,1)  THEN N = N +V *16 ^(L -H):V = 15
  196. 502  NEXT V,H: RETURN 
  197. 505  REM 
  198. 506  REM  --------------------
  199. 507  REM  * DECIMAL CONVERT
  200. 508  REM  --------------------
  201. 509  REM 
  202. 510 A$ = "0123456789ABCDEF":B$ = ""
  203. 511  FOR H = 3 TO 0  STEP  -1:A =  INT(N/16 ^H):B$ = B$ + MID$ (A$,A +1,1):N = N -A *16 ^H: NEXT H: RETURN 
  204. 595  REM 
  205. 596  REM  --------------------
  206. 597  REM  * DATE/TIME CONVERT
  207. 598  REM  --------------------
  208. 599  REM 
  209. 600 Z =  INT(A/2):A = (A -Z *2) *8:Y =  INT(B/32):A = A +Y:B = B -32 *Y
  210. 610 A$ =  STR$(A): IF  LEN(A$) = 1  THEN A$ = "0" +A$
  211. 615 B$ =  STR$(B): IF  LEN(B$) = 1  THEN B$ = "0" +B$
  212. 620 Z$ =  STR$(Z): IF  LEN(Z$) = 1  THEN Z$ = "0" +Z$
  213. 625 A$ = A$ +"/" +B$ +"/" +Z$
  214. 630 B$ =  STR$(C): IF  LEN(B$) = 1  THEN B$ = "0" +B$
  215. 635 Z$ =  STR$(D): IF  LEN(Z$) = 1  THEN Z$ = "0" +Z$
  216. 640 B$ = B$ +":" +Z$
  217. 642  RETURN 
  218. 645  REM 
  219. 646  REM  --------------------
  220. 647  REM  * ACCESS BITS 1
  221. 648  REM  --------------------
  222. 649  REM 
  223. 650 A =  INT(N/128): IF A = 1  THEN A$ = "Yes": GOTO 655
  224. 652 A$ = "No"
  225. 655 A =  INT(N/64) -2 *(A$ = "Yes"): IF A = 1  THEN B$ = "Yes": GOTO 660
  226. 657 B$ = "No"
  227. 660  IF 2 * INT(N/2) = N  THEN Z$ = "No": GOTO 665
  228. 662 Z$ = "Yes"
  229. 665 N =  INT(N/2): IF 2 * INT(N/2) = N  THEN Y$ = "No": GOTO 670
  230. 667 Y$ = "Yes"
  231. 670  RETURN 
  232. 695  REM 
  233. 696  REM  --------------------
  234. 697  REM  * ACCESS BITS 2
  235. 698  REM  --------------------
  236. 699  REM 
  237. 700 Z = N: GOSUB 650:N = Z
  238. 710  IF B = 1  THEN N = N -128 *(A$ = "Yes") +128 *(A$ = "No"): RETURN 
  239. 715  IF B = 2  THEN N = N -64 *(B$ = "Yes") +64 *(B$ = "No"): RETURN 
  240. 720  IF B = 3  THEN N = N -2 *(Y$ = "Yes") +2 *(Y$ = "No"): RETURN 
  241. 725  IF B = 4  THEN N = N -1 *(Z$ = "Yes") +1 *(Z$ = "No")
  242. 730  RETURN 
  243. 795  REM 
  244. 796  REM  --------------------
  245. 797  REM  * ALLOCATE BLOCKS
  246. 798  REM  --------------------
  247. 799  REM 
  248. 800 E = 0: IF B = 0  THEN BK = D: IF C  THEN  GOSUB 430
  249. 810  IF B = 0  THEN  RETURN 
  250. 812  IF B >TB  THEN E = 1: RETURN 
  251. 815 N =  INT(B/4096):BK = A +N: IF BK > <D  THEN BK = D: IF C  THEN  GOSUB 430: IF E  THEN  RETURN 
  252. 820 BK = A +N: IF BK > <D  THEN  GOSUB 420: IF E  THEN  RETURN 
  253. 825 I = I +1
  254. 830 D = BK:B = B -4096 *N:N =  INT(B/8):B = B -8 *N:B = 8 -B
  255. 840  POKE FF, PEEK(BF *256 +N): POKE FE,B: CALL BL
  256. 845  IF  PEEK(FF) = 0  THEN B = 0:G = G +1: RETURN 
  257. 850  POKE BF *256 +N, PEEK(BF *256 +N) -2 ^(B -1)
  258. 860 B = 0: RETURN 
  259. 895  REM 
  260. 896  REM  --------------------
  261. 897  REM  * SAVE FILE ENTRY
  262. 898  REM  --------------------
  263. 899  REM 
  264. 900 BK = Q: GOSUB 420: IF E  THEN  RETURN 
  265. 910 L =  LEN(Z$): IF M <4  THEN  POKE Z,M *16 +L: GOTO 920
  266. 915  POKE Z,208 +L
  267. 920  IF C  THEN  GOSUB 430: IF E  THEN  RETURN 
  268. 930 BK = R: GOSUB 420: IF E  THEN  RETURN 
  269. 935 X =  PEEK(BF *256 +37):Y =  PEEK(BF *256 +38):X = X +1: IF X = 256  THEN X = 0:Y = Y +1
  270. 940  POKE BF *256 +37,X: POKE BF *256 +38,Y: IF C  THEN  GOSUB 430
  271. 945  RETURN 
  272. 995  REM 
  273. 996  REM  --------------------
  274. 997  REM  * MAIN MENU
  275. 998  REM  --------------------
  276. 999  REM 
  277. 1000  HOME 
  278. 1030 A$ = "MAIN MENU":B$ = "exit program": GOSUB 100
  279. 1060  VTAB 6: HTAB 29: PRINT "1. Block utilities menu"
  280. 1070  VTAB 8: HTAB 29: PRINT "2. File utilities menu"
  281. 1080  VTAB 10: HTAB 29: PRINT "3. Volume utilities menu"
  282. 1085  VTAB 13: HTAB 29: PRINT "4. Select a volume"
  283. 1086  VTAB 15: HTAB 29: PRINT "5. ";: IF PS = 0  THEN  PRINT "Turn on print mode": GOTO 1088
  284. 1087  PRINT "Turn off print mode"
  285. 1088  VTAB 17: HTAB 29: PRINT "6. Quit program"
  286. 1090  VTAB 20: HTAB 33: PRINT "YOUR CHOICE: ";: GET A$:A =  VAL(A$): ON A GOTO 10000,20000,30000,2000,5000,40000: IF A$ =  CHR$(27)  THEN 40000
  287. 1100  GOTO 1090
  288. 2000  HOME 
  289. 2007 A$ = "SELECT A VOLUME":B$ = "main menu": GOSUB 100
  290. 2010 CD = 197:PM(0) = 3:PM(1) = 2:PM(2) = 0:PM(3) = 0:PM(4) = BF
  291. 2020  GOSUB 400: IF E  THEN  GOSUB 290: GOTO 1000
  292. 2025 V = 0:X = 0
  293. 2030  FOR A = 256 *BF TO 256 *BF +255  STEP 16:V = V +1:X = X +1
  294. 2040 B =  PEEK(A):N =  INT(B/16):B = B -16 *N
  295. 2045 S$ = "": IF B = 0  THEN  GOTO 2052
  296. 2050  FOR H = A +1 TO A +B:N =  PEEK(H):S$ = S$ + CHR$(N): NEXT 
  297. 2052  IF S$ = ""  THEN PM(X) = 0: GOTO 2070
  298. 2055  VTAB V +5: HTAB 20 *(X >4) +20 *(X >8) +20 *(X >12) +(X <10)
  299. 2060  PRINT X;". ";
  300. 2065  PRINT "/";S$:PM(X) = 1
  301. 2070  IF V >3  THEN V = 0
  302. 2080  NEXT 
  303. 2090  VTAB 20: HTAB 32: PRINT "YOUR CHOICE: ";:L = 2:S$ = "": GOSUB 200: IF E  THEN 1000
  304. 2100 B =  VAL(B$): IF B >16  OR B <1  THEN 2090
  305. 2105  IF PM(B) > <1  THEN 2090
  306. 2110 A = 256 *BF +16 *(B -1):UN =  PEEK(A):UN =  INT(UN/16) *16
  307. 2112 PR$ = "/"
  308. 2113  VTAB 20: HTAB 1: CALL  -868
  309. 2115  FOR X = A +1 TO A + PEEK(A) -UN:PR$ = PR$ + CHR$( PEEK(X)): NEXT :PR$ = PR$ +"/"
  310. 2120 BK = 2: GOSUB 420: IF E  THEN  HOME : GOSUB 290:PR$ = "":UN = 0: GOTO 1000
  311. 2130 TB =  PEEK(BF *256 +42) *256 + PEEK(BF *256 +41): GOSUB 280: GOTO 1000
  312. 2307  VTAB 11: HTAB 1: PRINT "PATH: ";:S$ = PR$: IF S$ = ""  THEN S$ = "/"
  313. 2308 L = 60: GOSUB 200: IF E  THEN 20000
  314. 5000  IF PS = 0  THEN A$ = "TURN ON PRINT MODE": GOTO 5010
  315. 5005 A$ = "TURN OFF PRINT MODE"
  316. 5010 B$ = "main menu": GOSUB 100
  317. 5015  IF PS > <0  THEN  VTAB 10: HTAB 1: PRINT "PRINT MODE TURNED OFF.  PRESS ANY KEY: ";: GET A$:PS = 0: GOTO 1000
  318. 5020  VTAB 10: HTAB 1: PRINT "ENTER PRINTER SLOT (1-7): ";:S$ = "1":L = 1: GOSUB 200: IF E  THEN 1000
  319. 5030 PS =  VAL(B$): IF PS <1  OR PS >7  THEN PS = 0: GOTO 5020
  320. 5040  GOSUB 280: GOTO 1000
  321. 9995  REM 
  322. 9996  REM  --------------------
  323. 9997  REM  * BLOCK UTILITIES
  324. 9998  REM  --------------------
  325. 9999  REM 
  326. 10000 A$ = "BLOCK UTILITIES":B$ = "main menu": GOSUB 100
  327. 10005  IF UN = 0  THEN  VTAB 10: HTAB 1: PRINT "ERROR ... A VOLUME MUST BE SELECTED FOR THESE UTILITIES.  PRESS ANY KEY: ";: GET A$: PRINT : GOTO 1000
  328. 10010  VTAB 8: HTAB 30: PRINT "1. Edit blocks"
  329. 10020  VTAB 10: HTAB 30: PRINT "2. Search blocks for data"
  330. 10035  VTAB 12: HTAB 30: PRINT "3. Verify blocks"
  331. 10040  VTAB 20: HTAB 32: PRINT "YOUR CHOICE: ";: GET A$: IF A$ = E$  THEN  GOTO 1000
  332. 10050 A =  VAL(A$): ON A GOTO 11000,15000,17000
  333. 10060  PRINT : GOTO 10040
  334. 11000 A$ = "EDIT BLOCKS":B$ = "block utilities": GOSUB 100
  335. 11010  PRINT : VTAB 6: HTAB 1:L = 0: GOSUB 450
  336. 11020  VTAB 4: HTAB 1: PRINT "Block number:          Total blocks in volume:          COMMAND (H for help):"
  337. 11030  VTAB 4: HTAB 15:N = BK: GOSUB 470: VTAB 4: HTAB 48:N = TB: GOSUB 470: PRINT 
  338. 11035  GOSUB 480
  339. 11050  VTAB 4: HTAB 78: GET A$: PRINT 
  340. 11053  IF A$ =  CHR$(8)  THEN 11100
  341. 11055  IF A$ =  CHR$(21)  THEN 11110
  342. 11057  IF A$ =  CHR$(11)  THEN 11120
  343. 11059  IF A$ =  CHR$(10)  THEN 11130
  344. 11060  IF A$ = "F"  OR A$ = "f"  THEN MD =   NOT (MD): GOTO 11010
  345. 11065  IF A$ = E$  THEN 10000
  346. 11067  IF A$ = "="  OR A$ = "+"  THEN 11140
  347. 11068  IF A$ = "-"  THEN 11145
  348. 11069  IF A$ = "R"  OR A$ = "r"  THEN 11200
  349. 11070  IF A$ = "W"  OR A$ = "w"  THEN 11210
  350. 11071  IF A$ =  CHR$(32)  THEN 11300
  351. 11072  IF A$ = "A"  OR A$ = "a"  THEN 11500
  352. 11073  IF A$ = "H"  OR A$ = "h"  THEN 12000
  353. 11074  IF A$ = "P"  OR A$ = "p"  THEN 13000
  354. 11099  GOTO 11050
  355. 11100 B2 = B1:B1 = B1 -1: IF B1 <0  THEN B1 = 511
  356. 11105  GOSUB 480: GOTO 11050
  357. 11110 B2 = B1:B1 = B1 +1: IF B1 >511  THEN B1 = 0
  358. 11115  GOSUB 480: GOTO 11050
  359. 11120 B2 = B1:B1 = B1 -32: IF B1 <0  THEN B1 = B1 +512
  360. 11125  GOSUB 480: GOTO 11050
  361. 11130 B2 = B1:B1 = B1 +32: IF B1 >511  THEN B1 = B1 -512
  362. 11135  GOSUB 480: GOTO 11050
  363. 11140 B = BK:BK = BK +1: IF BK >TB -1  THEN BK = 0
  364. 11141  GOSUB 420: IF E  THEN  VTAB 22: PRINT :BK = B: GOSUB 290: GOTO 11000
  365. 11142  GOTO 11010
  366. 11145 B = BK:BK = BK -1: IF BK <0  THEN BK = TB -1
  367. 11146  GOTO 11141
  368. 11200  VTAB 4: HTAB 57: PRINT "READ BLOCK: $";: CALL  -868:L = 4:S$ = "": GOSUB 200: IF E  THEN 11020
  369. 11205 S$ = B$: GOSUB 500: IF N >TB -1  OR N <0  THEN N = BK
  370. 11207 B = BK:BK = N: GOTO 11141
  371. 11210 N = BK: GOSUB 510:S$ = B$: VTAB 4: HTAB 57: PRINT "WRITE BLOCK: $";: CALL  -868:L = 4: GOSUB 200: IF E  THEN 11020
  372. 11211 S$ = B$: GOSUB 500: IF N >TB -1  OR N <0  THEN 11020
  373. 11212 BK = N: GOSUB 430: IF E  THEN  VTAB 22: PRINT :BK = B: GOSUB 290: GOTO 11000
  374. 11213  GOTO 11010
  375. 11300 S$ = "": VTAB 4: HTAB 57: PRINT "NEW VALUE";: CALL  -868
  376. 11305  IF MD = 1  THEN 11350
  377. 11310 L = 2: PRINT ": $";: GOSUB 200:S$ = B$: GOSUB 500: IF E  THEN 11020
  378. 11320  IF N <0  OR N >255  THEN 11300
  379. 11330  GOTO 11400
  380. 11350  PRINT " (";: IF HL = 1  THEN  PRINT "H-ASCII): ";: GOTO 11360
  381. 11355  PRINT "L-ASCII): ";
  382. 11360  GET A$: PRINT : IF A$ = E$  THEN 11020
  383. 11365 N =  ASC(A$) +(HL *128): IF N >255  OR N <0  THEN 11300
  384. 11400  POKE BF *256 +B1,N
  385. 11410 B2 = B1:B1 = B1 +1: IF B1 >511  THEN B1 = 0
  386. 11420  GOSUB 480: GOTO 11300
  387. 11500 HL =   NOT (HL): VTAB 4: HTAB 57: PRINT "ASCII = ";: IF HL  THEN  PRINT "HIGH";: GOTO 11510
  388. 11505  PRINT "LOW";
  389. 11510  CALL  -868: PRINT : FOR A = 1 TO 500: NEXT : GOTO 11020
  390. 12000  HOME 
  391. 12010  GOSUB 350: HOME 
  392. 12020  PRINT : PRINT "COMMAND CHARACTER";: PRINT  SPC( 22);"ACTION TAKEN"
  393. 12030  PRINT "-----------------";: PRINT  SPC( 22);"------------"
  394. 12040  PRINT : PRINT  SPC( 5);"+ OR ="; SPC( 28);"READ NEXT BLOCK"
  395. 12045  PRINT  SPC( 5);"-"; SPC( 33);"READ PREVIOUS BLOCK"
  396. 12050  PRINT  SPC( 5);"A OR a"; SPC( 28);"TOGGLE ASCII ENTRY METHOD (LOW/HIGH)"
  397. 12055  PRINT  SPC( 5);"F OR f"; SPC( 28);"TOGGLE DISPLAY FORMAT (HEX/ASCII)"
  398. 12060  PRINT  SPC( 5);"H OR h"; SPC( 28);"VIEW THIS HELP SCREEN"
  399. 12062  PRINT  SPC( 5);"P OR p"; SPC( 28);"PRINT CURRENT BLOCK"
  400. 12065  PRINT  SPC( 3);"* R OR r"; SPC( 28);"READ A BLOCK"
  401. 12070  PRINT  SPC( 3);"* W OR w"; SPC( 28);"WRITE A BLOCK"
  402. 12075  PRINT  SPC( 5);"ARROWS"; SPC( 28);"MOVE POINTER"
  403. 12080  PRINT  SPC( 3);"* SPACE"; SPC( 29);"CHANGE VALUES"
  404. 12085  PRINT : PRINT "* NOTE: ESCAPE IS USED TO EXIT FROM THESE MODES AT ANY TIME."
  405. 12090  GOSUB 360
  406. 12100  VTAB 21: HTAB 33: PRINT "PRESS ANY KEY: ";: GET A$: PRINT : GOTO 11000
  407. 13000  HOME 
  408. 13005  IF PS = 0  THEN  VTAB 9: HTAB 1: PRINT "ERROR ... NO PRINTER SELECTED.  PRESS ANY KEY: ";: GET A$: PRINT : GOTO 11000
  409. 13010  VTAB 9: HTAB 1: PRINT "READY TO PRINT CURRENT BLOCK ...": GOSUB 350
  410. 13015  HOME : PRINT 
  411. 13020  PRINT "Block number: ";:N = BK: GOSUB 470: PRINT  SPC( 21);"Total blocks in volume: ";:N = TB: GOSUB 470
  412. 13030  PRINT : PRINT :L = 0: GOSUB 450: PRINT : PRINT 
  413. 13040  GOSUB 360: VTAB 21: HTAB 33: PRINT "PRESS ANY KEY: ";: GET A$: PRINT : GOTO 11000
  414. 15000 A$ = "SEARCH BLOCKS FOR DATA":B$ = "block utilities": GOSUB 100:Z = 0
  415. 15010  VTAB 4: HTAB 1: PRINT "DO YOU WANT TO ENTER THE STRING IN ASCII OR HEX (A/H): ";:L = 1:S$ = "": GOSUB 200: IF E  THEN 10000
  416. 15012  IF B$ = "H"  THEN 15100
  417. 15015  IF B$ = "A"  THEN 15300
  418. 15020  GOTO 15010
  419. 15100  HOME : VTAB 8: HTAB 1: PRINT "STRING: ":Q = 0
  420. 15105  VTAB 5: HTAB 1: PRINT "ENTER HEX NUMBERS, FOLLOWING EACH WITH <RET>.  ENTER <RET> ALONE TO END: $";:L = 2:S$ = "": GOSUB 200: IF E  THEN 10000
  421. 15107  IF B$ = ""  THEN 15500
  422. 15110 S$ = B$: GOSUB 500: IF N <0  OR N >255  THEN 15105
  423. 15120 Z = Z +1:ST(Z) = N
  424. 15130  VTAB 8: HTAB Z *3 +9: POKE FF,ST(Z): CALL H1: PRINT 
  425. 15140  IF Z >19  THEN 15500
  426. 15150  GOTO 15105
  427. 15300  HOME :Q = 128: VTAB 8: HTAB 1: PRINT "ENTER STRING IN ASCII: ";:S$ = "":L = 20:LC = 1: GOSUB 200:LC = 0: IF E  THEN 10000
  428. 15305  IF B$ = ""  THEN 15300
  429. 15310  FOR X = 1 TO  LEN(B$):ST(X) =  ASC( MID$ (B$,X,1)): NEXT :Z =  LEN(B$)
  430. 15500  IF Z <1  THEN 10000
  431. 15505  VTAB 11: HTAB 20: PRINT "ENTER BEGINNING BLOCK FOR SEARCH: $";:L = 4:S$ = "0000": GOSUB 200: IF E  THEN 10000
  432. 15510 S$ = B$: GOSUB 500: IF N <0  OR N >TB -1  THEN 15505
  433. 15515 BB = N
  434. 15520  VTAB 13: HTAB 20: PRINT "   ENTER ENDING BLOCK FOR SEARCH: $";:L = 4:N = TB -1: GOSUB 510:S$ = B$: GOSUB 200: IF E  THEN 10000
  435. 15530 S$ = B$: GOSUB 500: IF N <BB  OR N >TB -1  THEN 15520
  436. 15535 EB = N
  437. 15600  VTAB 20: HTAB 18: PRINT "PRESS <RET> TO BEGIN SEARCH, <ESC> TO EXIT: ";: GET A$: PRINT : IF A$ = E$  THEN 10000
  438. 15610  IF A$ = R$  THEN  VTAB 20: HTAB 1: FOR X = 1 TO 70: PRINT " ";: NEXT : PRINT : GOTO 15650
  439. 15620  GOTO 15600
  440. 15650  FOR X = 1 TO Z: POKE 809 +X,ST(X): NEXT 
  441. 15660  POKE 238,0: POKE 239,BF: POKE 250,Z: POKE 251,Q
  442. 15670  POKE 253, INT(BB/256): POKE 252,BB - PEEK(253) *256
  443. 15675  POKE 255, INT(EB/256): POKE 254,EB - PEEK(255) *256
  444. 15680  POKE ML +3,128: POKE ML +5,PL/256: POKE ML +4,PL -256 * PEEK(ML +5): POKE PL,3: POKE PL +1,UN: POKE PL +2,0: POKE PL +3,BF: POKE PL +4,0: POKE PL +5,0
  445. 15690  VTAB 19: HTAB 27: PRINT "NOW SEARCHING BLOCK: $";
  446. 15700  CALL SC: PRINT :A =  PEEK(251): IF A = 1  THEN  GOSUB 290: GOTO 10000
  447. 15710  IF A = 2  THEN  VTAB 21: HTAB 22: PRINT "SEARCH SUCCESSFUL!  PRESS ANY KEY: ";: GET A$: PRINT :MD = (Q = 128):BK =  PEEK(252) + PEEK(253) *256:B1 =  PEEK(206) + PEEK(207) *256:B1 = B1 -BF *256:B2 = B1: GOTO 11000
  448. 15720  VTAB 21: HTAB 24: PRINT "SEARCH FAILED.  PRESS ANY KEY: ";: GET A$: PRINT : GOTO 10000
  449. 17000 A$ = "VERIFY BLOCKS":B$ = "block utilities": GOSUB 100
  450. 17010  VTAB 9: HTAB 20: PRINT "ENTER BEGINNING BLOCK TO VERIFY: $";:L = 4:S$ = "0000": GOSUB 200: IF E  THEN 10000
  451. 17020 S$ = B$: GOSUB 500: IF N <0  OR N >TB -1  THEN 17010
  452. 17030 BB = N
  453. 17040  VTAB 12: HTAB 20: PRINT "   ENTER ENDING BLOCK TO VERIFY: $";:L = 4:N = TB -1: GOSUB 510:S$ = B$: GOSUB 200: IF E  THEN 10000
  454. 17050 S$ = B$: GOSUB 500: IF N <BB  OR N >TB -1  THEN 17040
  455. 17060 EB = N
  456. 17070  VTAB 20: HTAB 17: PRINT "PRESS <RET> TO VERIFY BLOCKS, <ESC> TO EXIT: ";: GET A$: PRINT : IF A$ = E$  THEN 10000
  457. 17080  IF A$ = R$  THEN  VTAB 20: HTAB 1: FOR X = 1 TO 70: PRINT " ";: NEXT : PRINT : GOTO 17100
  458. 17090  GOTO 17070
  459. 17100  POKE ML +3,128: POKE ML +5,PL/256: POKE ML +4,PL -256 * PEEK(ML +5): POKE PL,3: POKE PL +1,UN: POKE PL +2,0: POKE PL +3,BF: POKE PL +4,0: POKE PL +5,0
  460. 17110  POKE 253, INT(BB/256): POKE 252,BB - PEEK(253) *256
  461. 17120  POKE 255, INT(EB/256): POKE 254,EB - PEEK(255) *256
  462. 17200  VTAB 19: HTAB 27: PRINT "NOW VERIFYING BLOCK $";
  463. 17210  CALL VR: IF  PEEK(FF) = 0  THEN  VTAB 21: HTAB 28: PRINT "DONE... PRESS ANY KEY: ";: GET A$: GOTO 10000
  464. 17220  VTAB 21: HTAB 18: PRINT "ERROR IN THE ABOVE BLOCK... PRESS ANY KEY: ";: GET A$: GOTO 10000
  465. 19994  END 
  466. 19995  REM 
  467. 19996  REM  --------------------
  468. 19997  REM  * FILE UTILITIES
  469. 19998  REM  --------------------
  470. 19999  REM 
  471. 20000 A$ = "FILE UTILITIES":B$ = "main menu": GOSUB 100
  472. 20010  VTAB 6: HTAB 30: PRINT "1. Rename a file"
  473. 20020  VTAB 7: HTAB 30: PRINT "2. Delete a file"
  474. 20030  VTAB 8: HTAB 30: PRINT "3. Undelete a file"
  475. 20040  VTAB 9: HTAB 30: PRINT "4. Edit a file's attributes"
  476. 20060  VTAB 11: HTAB 30: PRINT "5. Create a subdirectory"
  477. 20070  VTAB 12: HTAB 30: PRINT "6. Delete a subdirectory"
  478. 20080  VTAB 13: HTAB 30: PRINT "7. Rename a subdirectory"
  479. 20090  VTAB 20: HTAB 34: PRINT "YOUR CHOICE: ";: GET A$: IF A$ = E$  THEN 1000
  480. 20100 A =  VAL(A$): ON A GOTO 21000,22000,23000,24000,26000,27000,28000
  481. 20110  PRINT : GOTO 20090
  482. 21000 A$ = "RENAME A FILE":B$ = "file utilities": GOSUB 100
  483. 21010 V = 9:X = 1: GOSUB 250: IF E  THEN 20000
  484. 21020 V = 11:X = 1: GOSUB 260: IF E  THEN 20000
  485. 21030  ONERR  GOTO 21100
  486. 21040  PRINT D$;"RENAME ";Y$;",";Z$: POKE 216,0: GOSUB 280: GOTO 20000
  487. 21100  POKE 216,0: GOSUB 290: GOTO 20000
  488. 22000 A$ = "DELETE A FILE":B$ = "file utilities": GOSUB 100
  489. 22010 V = 10:X = 1: GOSUB 250: IF E  THEN 20000
  490. 22020  ONERR  GOTO 22100
  491. 22030  PRINT D$;"DELETE ";Y$: POKE 216,0: GOSUB 280: GOTO 20000
  492. 22100  POKE 216,0: GOSUB 290: GOTO 20000
  493. 23000 A$ = "UNDELETE A FILE":B$ = "file utilities": GOSUB 100
  494. 23002  IF UN = 0  THEN  VTAB 10: HTAB 1: PRINT "ERROR ... A VOLUME MUST BE SELECTED FOR THIS UTILITY.  PRESS ANY KEY: ";: GET A$: PRINT : GOTO 20000
  495. 23003  VTAB 8: HTAB 1: PRINT "(Note: this will not work on /RAM/.)"
  496. 23005  VTAB 7: HTAB 1: PRINT "Enter path of directory in which to search for deleted files."
  497. 23006  VTAB 10: HTAB 1: PRINT "PATH: ";:S$ =  LEFT$(PR$, LEN(PR$) -1): IF S$ = ""  THEN S$ = "/"
  498. 23007 L = 60: GOSUB 200: ON (E < >0) GOTO 20000
  499. 23008  IF  LEN(B$) >1  THEN  IF  RIGHT$(B$,1) = "/"  THEN B$ =  LEFT$(B$, LEN(B$) -1)
  500. 23009  IF B$ =  LEFT$(PR$, LEN(PR$) -1)  THEN Q = 2: GOTO 23019
  501. 23010 F = 1:Z$ = B$: GOTO 24015
  502. 23011 Q =  PEEK(X +17) +256 * PEEK(X +18)
  503. 23019 BK = Q: GOSUB 420: IF E  THEN  GOSUB 290: GOTO 20000
  504. 23020 L =  PEEK(BF *256 +35):M =  PEEK(BF *256 +36): HOME : VTAB 4: HTAB 1: PRINT "Choose one of the following deleted files:": PRINT 
  505. 23022  FOR X = BF *256 +4 TO BF *256 +L *(M -1) +4  STEP L: IF  PEEK(X) = 0  AND  PEEK(X +1) > <0  THEN  GOTO 23025
  506. 23023  NEXT X: GOTO 23030
  507. 23025  FOR A = 1 TO 15: IF  PEEK(X +A) >0  THEN  PRINT  CHR$( PEEK(X +A));
  508. 23027  NEXT A: PRINT : GOTO 23023
  509. 23030  IF  PEEK(BF *256 +2) +256 * PEEK(BF *256 +3) = 0  THEN  GOTO 23035
  510. 23032 BK =  PEEK(BF *256 +2) +256 * PEEK(BF *256 +3): GOSUB 420: IF E  THEN  GOSUB 290: GOTO 20000
  511. 23033  GOTO 23022
  512. 23035  PRINT 
  513. 23036  VTAB 21: HTAB 1: PRINT "ENTER FILE NAME EXACTLY AS IT APPEARS ABOVE: ";:L = 15:S$ = "": GOSUB 200: IF E  THEN 20000
  514. 23037  IF B$ = ""  THEN 23036
  515. 23038 L =  LEN(B$):BK = Q:R = Q: GOSUB 420: IF E  THEN  GOSUB 290: GOTO 20000
  516. 23040 N =  PEEK(BF *256 +35):V =  PEEK(BF *256 +36)
  517. 23042  FOR X = BF *256 +4 TO BF *256 +N *(V -1) +4  STEP N: IF  PEEK(X) > <0  THEN 23045
  518. 23043  FOR A = 1 TO L: IF  PEEK(X +A) > < ASC( MID$ (B$,A,1))  THEN A = L: NEXT A: GOTO 23045
  519. 23044  NEXT A: GOTO 23050
  520. 23045  NEXT X:BK =  PEEK(BF *256 +2) +256 * PEEK(BF *256 +3): IF BK = 0  THEN  GOSUB 290: GOTO 20000
  521. 23046  GOSUB 420: IF E  THEN  GOSUB 290: GOTO 20000
  522. 23047  GOTO 23042
  523. 23050 Z = X:X = BF *256 +N *(V -1) +4: NEXT X:Q = BK:Z$ = B$:F =  PEEK(Z +17) +256 * PEEK(Z +18): IF F = 0  THEN  GOSUB 290: GOTO 20000
  524. 23055  HOME : VTAB 5: HTAB 9: PRINT "File     : ";Z$: VTAB 5: HTAB 49: PRINT "Total blocks: $";:J =  PEEK(Z +19) +256 * PEEK(Z +20):N = J: GOSUB 510: PRINT B$
  525. 23057  VTAB 7: HTAB 9: PRINT "File type: ";:T =  PEEK(Z +16): RESTORE 
  526. 23058  FOR V = 1 TO 13: READ B,A$: IF T = B  THEN V = 13: NEXT : GOTO 23060
  527. 23059  NEXT : GOSUB 510: PRINT "$"; RIGHT$(B$,2): GOTO 23062
  528. 23060  PRINT A$
  529. 23062  VTAB 7: HTAB 49: PRINT "End of file : $";:K =  PEEK(Z +21) +256 * PEEK(Z +22) +65536 * PEEK(Z +23):N =  INT(K/65536): GOSUB 510: PRINT  RIGHT$(B$,2);:N = K - INT(K/65536) *65536: GOSUB 510: PRINT B$
  530. 23064  VTAB 11: HTAB 20: PRINT "Types of undelete methods: 1. seedling": VTAB 12: HTAB 47: PRINT "2. sapling": VTAB 13: HTAB 47: PRINT "3. tree": VTAB 14: HTAB 47: PRINT "4. directory"
  531. 23066  VTAB 17: HTAB 1: PRINT "Recommended method of recovery for this file: ";
  532. 23070  IF T = 15  THEN M = 4:A$ = "Directory": GOTO 23080
  533. 23072  IF J = 1  THEN M = 1:A$ = "Seedling": GOTO 23080
  534. 23074  IF K <131073  AND J <258  THEN M = 2:A$ = "Sapling": GOTO 23080
  535. 23076 M = 3:A$ = "Tree"
  536. 23080  PRINT M
  537. 23090  VTAB 21: HTAB 1: PRINT "    ENTER A RECOVERY METHOD TO ATTEMPT (1-4): ";:L = 1:S$ =  STR$(M): GOSUB 200: IF E  THEN 20000
  538. 23092 N =  INT( VAL(B$)): IF N >0  AND N <5  THEN  GOTO 23094
  539. 23093  GOTO 23090
  540. 23094  VTAB 21: HTAB 1: PRINT "TESTING FEASIBILITY OF RECOVERY OF THE ABOVE FILE USING METHOD NUMBER ";N;": $";:C = 0
  541. 23095 M = N:G = 0:I = 0:BK = 2: GOSUB 420: IF E  THEN 23800
  542. 23096 A =  PEEK(BF *256 +39) +256 * PEEK(BF *256 +40):D = A
  543. 23097 BK = A: GOSUB 420: IF E  THEN 23800
  544. 23098  ON M GOTO 23100,23200,23300,23600
  545. 23099  GOTO 20000
  546. 23100 B = F: GOSUB 800: IF E  THEN 23800
  547. 23102  PRINT "00"; CHR$(8); CHR$(8);
  548. 23105 B = 0: GOSUB 800: IF E  THEN 23800
  549. 23110  GOSUB 900: IF E  THEN 23800
  550. 23120  GOTO 23900
  551. 23200 N = BF:BF = BX:BK = F: GOSUB 420:BF = N: IF E  THEN 23800
  552. 23205 B = F: GOSUB 800: IF E  THEN 23800
  553. 23210  FOR X = 0 TO 255:P =  PEEK(BX *256 +X):S =  PEEK(BX *256 +256 +X):B = 256 *P +S: IF B = 0  AND I > = J  THEN X = 255
  554. 23212  POKE BX *256 +X,S: POKE BX *256 +256 +X,P
  555. 23215  POKE FF,X: CALL H1: PRINT  CHR$(8); CHR$(8);
  556. 23220  IF B = 0  THEN  NEXT X: GOTO 23250
  557. 23225  GOSUB 800: IF E  THEN 23800
  558. 23230  NEXT X
  559. 23250 B = 0: GOSUB 800: IF E  THEN 23800
  560. 23255 BK = F:N = BF:BF = BX: IF C  THEN  GOSUB 430
  561. 23256 BF = N: IF E  THEN 23800
  562. 23260  GOSUB 900: IF E  THEN 23800
  563. 23270  GOTO 23900
  564. 23300 N = BF:BF = BX:BK = F: GOSUB 420:BF = N: IF E  THEN 23800
  565. 23310 B = F: GOSUB 800: IF E  THEN 23800
  566. 23320  FOR X = 0 TO 255:P =  PEEK(BX *256 +X):S =  PEEK(BX *256 +256 +X):B = 256 *P +S: IF B = 0  AND I > = J  THEN X = 255
  567. 23321  POKE BX *256 +X,S: POKE BX *256 +256 +X,P
  568. 23322  IF B = 0  THEN 23350
  569. 23325 K = B: GOSUB 800: IF E  THEN 23800
  570. 23330 N = BF:BF = BY:BK = K: GOSUB 420:BF = N: IF E  THEN 23800
  571. 23335  FOR Y = 0 TO 255:P =  PEEK(BY *256 +Y):S =  PEEK(BY *256 +256 +Y):B = 256 *P +S: IF B = 0  AND I > = J  THEN Y = 255
  572. 23336  POKE BY *256 +Y,S: POKE BY *256 +256 +Y,P
  573. 23337  IF B = 0  THEN  GOTO 23342
  574. 23340  GOSUB 800: IF E  THEN 23800
  575. 23342  POKE FF,Y: CALL H1: PRINT  CHR$(8); CHR$(8);
  576. 23345  NEXT Y
  577. 23346 BK = K:N = BF:BF = BY: IF C  THEN  GOSUB 430
  578. 23347 BF = N: IF E  THEN 23800
  579. 23350  POKE FF,X: CALL H1: PRINT  CHR$(8); CHR$(8);
  580. 23355  NEXT X
  581. 23360 B = 0: GOSUB 800: IF E  THEN 23800
  582. 23365 BK = F:N = BF:BF = BX: IF C  THEN  GOSUB 430
  583. 23366 BF = N: IF E  THEN 23800
  584. 23370  GOSUB 900: IF E  THEN 23800
  585. 23380  GOTO 23900
  586. 23600 N = BF:BF = BX:BK = F: GOSUB 420:BF = N: IF E  THEN 23800
  587. 23610 B = F: GOSUB 800: IF E  THEN 23800
  588. 23611  POKE BX *256 +4,224 + LEN(Z$): FOR X = 1 TO  LEN(Z$): POKE BX *256 +X +4, ASC( MID$ (Z$,X,1)): NEXT X
  589. 23612 N = BF:BF = BX:BK = F: IF C  THEN  GOSUB 430
  590. 23613 BF = N: IF E  THEN 23800
  591. 23620 B =  PEEK(BX *256 +2) +256 *( PEEK(BX *256 +3)): IF B = 0  THEN 23650
  592. 23625 K = B: GOSUB 800: IF E  THEN 23800
  593. 23630 N = BF:BF = BX:BK = K: GOSUB 420:BF = N: IF E  THEN 23800
  594. 23640  POKE FF,I: CALL H1: PRINT  CHR$(8); CHR$(8);: GOTO 23620
  595. 23650 B = 0: GOSUB 800: IF E  THEN 23800
  596. 23660  GOSUB 900: IF E  THEN 23800
  597. 23670  GOTO 23900
  598. 23800  IF C = 0  THEN  GOTO 23830
  599. 23810  HOME : VTAB 5: HTAB 1: PRINT "A fatal error has been detected in attempting to recover ";Z$;" using": VTAB 7: HTAB 1: PRINT "recovery method number ";M;".  Undelete attempt has been aborted.  It is possible"
  600. 23820  VTAB 9: HTAB 1: PRINT "that damage has been done to the volume used in the recovery process.  It is": VTAB 11: HTAB 1: PRINT "recommended that all files be copied to another volume and the original volume"
  601. 23825  VTAB 13: HTAB 1: PRINT "be reformatted in an attempt to recover as much data as possible."
  602. 23827  GOSUB 280: GOTO 20000
  603. 23830  HOME : VTAB 7: HTAB 1: PRINT "As a result of testing recovery method ";M;" on the file ";Z$;", a fatal": VTAB 9: HTAB 1: PRINT "error has been detected.  The cause could either be that the file cannot be"
  604. 23835  VTAB 11: HTAB 1: PRINT "undeleted or that the file can be undeleted using another method."
  605. 23840  GOTO 23827
  606. 23900  IF C = 0  THEN  GOTO 23950
  607. 23905  HOME : VTAB 8: HTAB 1: PRINT "The file ";Z$;" has been undeleted.  ";
  608. 23910  IF G  THEN  GOTO 23930
  609. 23915  PRINT "The file has no allocation": VTAB 10: PRINT "conflicts with any other files.  No damage to any other files has occurred.": GOSUB 280: GOTO 20000
  610. 23930  PRINT "However, the file has ";G;" block": VTAB 10: HTAB 1: PRINT "allocation conflicts with other files.  It is recommended that all files be"
  611. 23935  VTAB 12: HTAB 1: PRINT "copied to another volume in an effort to recover as much data as possible."
  612. 23940  GOSUB 280: GOTO 20000
  613. 23950  HOME : IF G  THEN 23975
  614. 23952  VTAB 8: HTAB 1: PRINT "The file ";Z$;" can be undeleted with no block allocation conflicts": VTAB 10: HTAB 1: PRINT "with other files using method number ";M;"."
  615. 23955  VTAB 21: HTAB 7: PRINT "DO YOU WISH TO UNDELETE THE FILE USING METHOD NUMBER ";M;" (YES/NO): ";:L = 3:S$ = "": GOSUB 200: IF E  THEN 20000
  616. 23960  IF B$ = "YES"  THEN N = M:C = 1: VTAB 21: HTAB 1: FOR X = 1 TO 78: PRINT " ";: NEXT : PRINT : VTAB 21: HTAB 1: PRINT "NOW UNDELETING THE ABOVE FILE USING METHOD NUMBER ";M;": $";: GOTO 23095
  617. 23965  IF B$ = "NO"  THEN  GOTO 20000
  618. 23970  GOTO 23955
  619. 23975  VTAB 8: HTAB 1: PRINT "The file ";Z$;" can be undeleted.  However, ";G;" block allocation    ": VTAB 10: HTAB 1: PRINT "conflicts exist.  Undeleting this file could damage other files."
  620. 23980  GOTO 23955
  621. 24000 A$ = "EDIT A FILE'S ATTRIBUTES":B$ = "file utilities": GOSUB 100
  622. 24002  IF UN = 0  THEN  VTAB 10: HTAB 1: PRINT "ERROR ... A VOLUME MUST BE SELECTED FOR THIS UTILITY.  PRESS ANY KEY: ";: GET A$: PRINT : GOTO 20000
  623. 24005  VTAB 10: HTAB 1: PRINT "ENTER FILE NAME: ";:S$ = PR$: IF S$ = ""  THEN S$ = "/"
  624. 24010 L = 60: GOSUB 200: IF E  THEN 20000
  625. 24012 F = 0
  626. 24015  FOR X = 1 TO  LEN(B$): POKE (PT +X), ASC( MID$ (B$,X,1)): NEXT :Z$ = B$:F$ = B$: POKE PT, LEN(B$)
  627. 24020 CD = 196:PM(0) = 2:PM(3) =  INT(PT/256):PM(2) = PT -256 *PM(3):PM(1) = 10: GOSUB 400: IF E  THEN  GOSUB 290: GOTO 20000
  628. 24021 Q =  PEEK(70) +256 * PEEK(71):BK = 2: GOSUB 420: IF E  THEN  GOSUB 290: GOTO 20000
  629. 24022 A$ = Z$:L = 0: IF  RIGHT$(A$,1) = "/"  THEN A$ =  LEFT$(A$, LEN(A$) -1):Z$ = A$
  630. 24023  IF L =  LEN(Z$)  THEN  GOTO 24025
  631. 24024  IF  RIGHT$(A$,1) > <"/"  THEN L = L +1:A$ =  LEFT$(A$, LEN(A$) -1): GOTO 24023
  632. 24025 B$ =  RIGHT$(Z$,L)
  633. 24026 N =  PEEK(BF *256 +35):V =  PEEK(BF *256 +36)
  634. 24027 BK = Q: GOSUB 420: IF E  THEN  GOSUB 290: GOTO 20000
  635. 24028  FOR X = BF *256 +4 TO BF *256 +N *(V -1) +4  STEP N:Y =  INT( PEEK(X)/16):Y =  PEEK(X) -16 *Y: IF Y > <L  THEN  GOTO 24031
  636. 24029  FOR A = 1 TO L: IF  PEEK(X +A) > < ASC( MID$ (B$,A,1))  THEN A = L: NEXT A: GOTO 24031
  637. 24030  NEXT A: GOTO 24032
  638. 24031  NEXT X: GOSUB 290: GOTO 20000
  639. 24032 Y = X:X = BF *256 +N *(V -1) +4: NEXT X:X = Y:BK = Q: IF F  THEN  GOTO 23011
  640. 24033 ST(0) =  PEEK(X):ST(1) =  PEEK(X +16):ST(2) =  PEEK(X +19) +256 *( PEEK(X +20)):ST(3) =  PEEK(X +21) +256 *( PEEK(X +22)) +65536 *( PEEK(X +23))::ST(4) =  PEEK(X +24):ST(5) =  PEEK(X +25):ST(6) =  PEEK(X +26):ST(7) =  PEEK(X +27)
  641. 24035 ST(8) =  PEEK(X +30):ST(9) =  PEEK(X +31) +256 *( PEEK(X +32)):ST(10) =  PEEK(X +33):ST(11) =  PEEK(X +34):ST(12) =  PEEK(X +35):ST(13) =  PEEK(X +36):ST(15) = X
  642. 24040  HOME : VTAB 4: HTAB 1: PRINT F$
  643. 24041  VTAB 7: HTAB 5: PRINT "Storage type: ";:N =  INT(ST(0)/16): IF N = 1  THEN  PRINT "Seedling";
  644. 24042  IF N = 2  THEN  PRINT "Sapling";
  645. 24043  IF N = 3  THEN  PRINT "Tree";
  646. 24044  IF N = 13  THEN  PRINT "Subdirectory";
  647. 24045  IF N = 14  THEN  PRINT "Subdirectory header": VTAB 10: HTAB 1: PRINT "ERROR... NOT A FILE OR SUBDIRECTORY.  PRESS ANY KEY: ";: GET A$: PRINT : GOTO 20000
  648. 24046  PRINT ", $";:N = ST(2): GOSUB 510: PRINT B$;" blocks"
  649. 24047  PRINT : VTAB 9: HTAB 5: PRINT "File type   : ";:N = ST(1): RESTORE 
  650. 24048  FOR A = 1 TO 13: READ B,A$: IF N = B  THEN A = 13: NEXT : GOTO 24050
  651. 24049  NEXT : GOSUB 510: PRINT "$"; RIGHT$(B$,2): GOTO 24052
  652. 24050  PRINT A$
  653. 24052  VTAB 7: HTAB 53: PRINT "Aux. file data: $";:N = ST(9): GOSUB 510: PRINT B$
  654. 24054  VTAB 9: HTAB 53: PRINT "   End of file: $";:N =  INT(ST(3)/65536): GOSUB 510: PRINT  RIGHT$(B$,2);:N = ST(3) - INT(ST(3)/65536) *65536: GOSUB 510: PRINT B$
  655. 24056 N = ST(8): GOSUB 650
  656. 24058  VTAB 12: HTAB 5: PRINT "1. File can be deleted: ";A$
  657. 24059  VTAB 13: HTAB 5: PRINT "2. File can be renamed: ";B$
  658. 24060  VTAB 14: HTAB 5: PRINT "3. File can be written: ";Y$
  659. 24061  VTAB 15: HTAB 5: PRINT "4. File can be read   : ";Z$
  660. 24065 A = ST(5):B = ST(4):C = ST(7):D = ST(6): GOSUB 600
  661. 24067  VTAB 12: HTAB 44: PRINT "5. Date of creation    : ";A$
  662. 24068  VTAB 13: HTAB 44: PRINT "6. Time of creation    : ";B$
  663. 24070 A = ST(11):B = ST(10):C = ST(13):D = ST(12): GOSUB 600
  664. 24075  VTAB 14: HTAB 44: PRINT "7. Date of modification: ";A$
  665. 24080  VTAB 15: HTAB 44: PRINT "8. Time of modification: ";B$
  666. 24100  VTAB 19: HTAB 5: PRINT "ENTER NUMBER TO CHANGE, 'SAVE' TO SAVE CHANGES, OR <ESC> TO EXIT: ";:L = 4:S$ = "": GOSUB 200
  667. 24105  IF E  THEN  GOTO 20000
  668. 24110  IF B$ = "SAVE"  THEN  GOTO 24500
  669. 24120 N =  INT( VAL(B$)): IF N <1  OR N >8  THEN  GOTO 24100
  670. 24130  ON N GOTO 24200,24230,24260,24300,24330,24360,24400,24450
  671. 24140  GOTO 24100
  672. 24200 B = 1:N = ST(8): GOSUB 700:ST(8) = N: GOTO 24040
  673. 24230 B = 2:N = ST(8): GOSUB 700:ST(8) = N: GOTO 24040
  674. 24260 B = 3:N = ST(8): GOSUB 700:ST(8) = N: GOTO 24040
  675. 24300 B = 4:N = ST(8): GOSUB 700:ST(8) = N: GOTO 24040
  676. 24330  VTAB 21: HTAB 17: PRINT "ENTER NEW DATE IN THE FORMAT MM/DD/YY: ";:L = 8:S$ = "": GOSUB 200: IF E  THEN 24040
  677. 24335  IF  LEN(B$) > <8  THEN 24330
  678. 24340 D =  VAL( MID$ (B$,4,2)):M =  VAL( MID$ (B$,1,2)):Y =  VAL( MID$ (B$,7,2))
  679. 24342 ST(5) = Y *2 + INT(M/8):M = M *32: IF M >255  THEN M = M -256
  680. 24344 ST(4) = M +D: GOTO 24040
  681. 24360  VTAB 21: HTAB 17: PRINT "  ENTER NEW TIME IN THE FORMAT HH:MM : ";:L = 5:S$ = "": GOSUB 200: IF E  THEN 24040
  682. 24362  IF  LEN(B$) > <5  THEN 24360
  683. 24364 ST(7) =  VAL( MID$ (B$,1,2)):ST(6) =  VAL( MID$ (B$,4,2)): GOTO 24040
  684. 24400  VTAB 21: HTAB 17: PRINT "ENTER NEW DATE IN THE FORMAT MM/DD/YY: ";:L = 8:S$ = "": GOSUB 200: IF E  THEN 24040
  685. 24410  IF  LEN(B$) > <8  THEN 24400
  686. 24420 D =  VAL( MID$ (B$,4,2)):M =  VAL( MID$ (B$,1,2)):Y =  VAL( MID$ (B$,7,2))
  687. 24430 ST(11) = Y *2 + INT(M/8):M = M *32: IF M >255  THEN M = M -256
  688. 24440 ST(10) = M +D: GOTO 24040
  689. 24450  VTAB 21: HTAB 17: PRINT "  ENTER NEW TIME IN THE FORMAT HH:MM : ";:L = 5:S$ = "": GOSUB 200: IF E  THEN 24040
  690. 24460  IF  LEN(B$) > <5  THEN 24450
  691. 24470 ST(13) =  VAL( MID$ (B$,1,2)):ST(12) =  VAL( MID$ (B$,4,2)): GOTO 24040
  692. 24500 X = ST(15): POKE X +24,ST(4): POKE X +25,ST(5): POKE X +26,ST(6): POKE X +27,ST(7)
  693. 24510  POKE X +30,ST(8): POKE X +33,ST(10): POKE X +34,ST(11): POKE X +35,ST(12): POKE X +36,ST(13)
  694. 24520  GOSUB 430: IF E  THEN  GOSUB 290
  695. 24530  GOTO 24040
  696. 26000 A$ = "CREATE A SUBDIRECTORY":B$ = "file utilities": GOSUB 100
  697. 26010  VTAB 10: PRINT "ENTER DIRECTORY NAME: ";:L = 55:S$ = PR$: GOSUB 200: IF E  THEN 20000
  698. 26020  ONERR  GOTO 26100
  699. 26030  PRINT D$;"CREATE ";B$: POKE 216,0: GOSUB 280: GOTO 20000
  700. 26100  POKE 216,0: GOSUB 290: GOTO 20000
  701. 27000 A$ = "DELETE A SUBDIRECTORY":B$ = "file utilities": GOSUB 100
  702. 27010  VTAB 10: PRINT "ENTER DIRECTORY NAME: ";:L = 55:S$ = PR$: GOSUB 200: IF E  THEN 20000
  703. 27020 Y$ = B$: GOTO 22020
  704. 28000 A$ = "RENAME A SUBDIRECTORY":B$ = "file utilities": GOSUB 100
  705. 28010  VTAB 9: PRINT "ENTER SOURCE DIRECTORY NAME: ";:L = 50:S$ = PR$: GOSUB 200:Y$ = B$: IF E  THEN 20000
  706. 28015  PRINT 
  707. 28020  VTAB 11: PRINT "ENTER TARGET DIRECTORY NAME: ";:L = 50:S$ = PR$: GOSUB 200:Z$ = B$: IF E  THEN 20000
  708. 28030  GOTO 21030
  709. 29994  END 
  710. 29995  REM 
  711. 29996  REM  --------------------
  712. 29997  REM  * VOLUME UTILITIES
  713. 29998  REM  --------------------
  714. 29999  REM 
  715. 30000 A$ = "VOLUME UTILITIES":B$ = "main menu": GOSUB 100
  716. 30010  VTAB 7: HTAB 29: PRINT "1. Rename a volume"
  717. 30050  VTAB 9: HTAB 29: PRINT "2  Volume allocation map"
  718. 30060  VTAB 11: HTAB 29: PRINT "3. Catalog a volume"
  719. 30070  VTAB 20: HTAB 34: PRINT "YOUR CHOICE: ";: GET A$: IF A$ = E$  THEN 1000
  720. 30080 A =  VAL(A$): ON A GOTO 31000,34000,35000
  721. 30090  PRINT : GOTO 30070
  722. 31000 A$ = "RENAME A VOLUME":B$ = "volume utilities": GOSUB 100
  723. 31010 V = 9: GOSUB 300: IF E  THEN 30000
  724. 31020 V = 11: GOSUB 310: IF E  THEN 30000
  725. 31030  ONERR  GOTO 31100
  726. 31040  PRINT D$;"RENAME ";Y$;",";Z$: POKE 216,0: GOSUB 280: GOTO 30000
  727. 31100  POKE 216,0: GOSUB 290: GOTO 30000
  728. 34000 A$ = "VOLUME ALLOCATION MAP":B$ = "volume utilities": GOSUB 100
  729. 34005  IF UN = 0  THEN  VTAB 10: HTAB 1: PRINT "ERROR... A VOLUME MUST BE SELECTED FOR THIS UTILITY.  PRESS ANY KEY: ";: GET A$: GOTO 30000
  730. 34010 BK = 2: GOSUB 420: IF E  THEN  GOSUB 290: GOTO 30000
  731. 34015 BK =  PEEK(BF *256 +39) + PEEK(BF *256 +40) *256: GOSUB 420: IF E  THEN  GOSUB 290: GOTO 30000
  732. 34020  GOSUB 350
  733. 34025  HOME : VTAB 4: HTAB 1:Z = TB: POKE 250,0: POKE 251,0
  734. 34030  PRINT "MAP OF "; LEFT$(PR$, LEN(PR$) -1);".  (X) = BLOCK IS FREE, (-) = BLOCK IS IN USE.": PRINT 
  735. 34035  POKE FF,BF: POKE FE,0
  736. 34040  IF Z >4096  THEN  POKE 252,0: POKE 253,16:Z = Z -4096: GOTO 34050
  737. 34045  POKE 253,Z/256: POKE 252,Z - PEEK(253) *256:Z = 0
  738. 34050  POKE 238,0: POKE 239,0: CALL MP: IF Z = 0  THEN 34100
  739. 34060 BK = BK +1: GOSUB 420: IF E  THEN  GOSUB 360: PRINT : GOSUB 290: GOTO 30000
  740. 34065  GOTO 34035
  741. 34100 X =  PEEK(250) +256 * PEEK(251):V = ( INT((X/TB) *1000 +.5))/10: PRINT : PRINT : PRINT X;" OF ";TB;" BLOCKS ARE FREE (";V;"%).": PRINT 
  742. 34110  GOSUB 360: GOSUB 280: GOTO 30000
  743. 35000 A$ = "CATALOG A VOLUME":B$ = "volume utilities": GOSUB 100
  744. 35010 V = 10: GOSUB 300: IF E  THEN 30000
  745. 35012  GOSUB 350
  746. 35015  HOME 
  747. 35020  ONERR  GOTO 35100
  748. 35030  PRINT D$;"CATALOG ";Y$: POKE 216,0: PRINT : GOSUB 360: GOSUB 280: GOTO 30000
  749. 35100  POKE 216,0: GOSUB 290: GOTO 30000
  750. 36000 A$ = "EDIT A VOLUME'S ATTRIBUTES":B$ = "volume utilities": GOSUB 100
  751. 36002  IF UN = 0  THEN  VTAB 10: HTAB 1: PRINT "ERROR ... A VOLUME MUST BE SELECTED FOR THIS UTILITY.  PRESS ANY KEY: ";: GET A$: PRINT : GOTO 30000
  752. 36010 BK = 2: GOSUB 420: IF E  THEN  GOSUB 290: GOTO 30000
  753. 36020 X = BF *256:ST(1) =  PEEK(X +28):ST(2) =  PEEK(X +29):ST(3) =  PEEK(X +30):ST(4) =  PEEK(X +31):ST(5) =  PEEK(X +34):ST(6) =  PEEK(X +37) +256 *( PEEK(X +38)):ST(7) =  PEEK(X +41) +256 *( PEEK(X +42)):ST(15) = X
  754. 36025  HOME 
  755. 36040  VTAB 6: HTAB 5: PRINT "Number of file entries  : $";:N = ST(6): GOSUB 510: PRINT B$
  756. 36050  VTAB 6: HTAB 45: PRINT "Total blocks in volume  : $";:N = ST(7): GOSUB 510: PRINT B$
  757. 36060  VTAB 10: HTAB 5: PRINT "1. Date of creation     : ";:A = ST(2):B = ST(1):C = ST(4):D = ST(3): GOSUB 600: PRINT A$
  758. 36070  VTAB 10: HTAB 45: PRINT "2.  Time of creation    : ";B$
  759. 36080 N = ST(5): GOSUB 650
  760. 36090  VTAB 13: HTAB 5: PRINT "3. Volume can be deleted: ";A$
  761. 36095  VTAB 14: HTAB 5: PRINT "4. Volume can be renamed: ";B$
  762. 36100  VTAB 13: HTAB 45: PRINT "5. Volume can be written: ";Y$
  763. 36110  VTAB 14: HTAB 45: PRINT "6. Volume can be read   : ";Z$
  764. 36200  VTAB 19: HTAB 5: PRINT "ENTER NUMBER TO CHANGE, 'SAVE' TO SAVE CHANGES, OR <ESC> TO EXIT: ";:L = 4:S$ = "": GOSUB 200
  765. 36210  IF E  THEN  GOTO 30000
  766. 36220  IF B$ = "SAVE"  THEN  GOTO 36500
  767. 36230 N =  INT( VAL(B$)): IF N <1  OR N >6  THEN  GOTO 36200
  768. 36240  ON N GOTO 36290,36300,36250,36260,36270,36280
  769. 36245  GOTO 36100
  770. 36250 B = 1:N = ST(5): GOSUB 700:ST(5) = N: GOTO 36025
  771. 36260 B = 2:N = ST(5): GOSUB 700:ST(5) = N: GOTO 36025
  772. 36270 B = 3:N = ST(5): GOSUB 700:ST(5) = N: GOTO 36025
  773. 36280 B = 4:N = ST(5): GOSUB 700:ST(5) = N: GOTO 36025
  774. 36290  VTAB 21: HTAB 17: PRINT "ENTER NEW DATE IN THE FORMAT MM/DD/YY: ";:L = 8:S$ = "": GOSUB 200: IF E  THEN 36025
  775. 36292  IF  LEN(B$) > <8  THEN 36290
  776. 36294 D =  VAL( MID$ (B$,4,2)):M =  VAL( MID$ (B$,1,2)):Y =  VAL( MID$ (B$,7,2))
  777. 36296 ST(2) = Y *2 + INT(M/8):M = M *32: IF M >255  THEN M = M -256
  778. 36298 ST(1) = M +D: GOTO 36025
  779. 36300  VTAB 21: HTAB 17: PRINT "  ENTER NEW TIME IN THE FORMAT HH:MM : ";:L = 5:S$ = "": GOSUB 200: IF E  THEN 36025
  780. 36302  IF  LEN(B$) > <5  THEN 36300
  781. 36304 ST(4) =  VAL( MID$ (B$,1,2)):ST(3) =  VAL( MID$ (B$,4,2)): GOTO 36025
  782. 36500 X = ST(15): POKE X +28,ST(1): POKE X +29,ST(2): POKE X +30,ST(3): POKE X +31,ST(4): POKE X +34,ST(5)
  783. 36510  GOSUB 430: IF E  THEN  GOSUB 290
  784. 36520  GOTO 36025
  785. 39994  END 
  786. 39995  REM 
  787. 39996  REM  --------------------
  788. 39997  REM  * EXIT TO SOFTDISK
  789. 39998  REM  --------------------
  790. 39999  REM 
  791. 40000 A$ = "EXIT PROGRAM":B$ = "main menu": GOSUB 100
  792. 40010  PRINT : VTAB 9: HTAB 1: PRINT "Press RETURN to exit.";: GET A$: IF A$ = E$  THEN 1000
  793. 40020  IF A$ > <R$  THEN 40010
  794. 40030  POKE 216,0: ONERR  GOTO 40040
  795. 40035  PRINT  CHR$(149): HOME : PRINT D$;"BYE"
  796. 40040  POKE 216,0: TEXT : HOME : PRINT "Trouble exiting program.": END 
  797. 50000  TEXT : HOME 
  798. 50001  VTAB 23: HTAB 1: PRINT "--------------------------------------------------------------------------------";
  799. 50002  VTAB 24: HTAB 1: PRINT "ProDOS block, file, and volume utilities                       By Robert B. Noa";: POKE 2039, ASC("h") +128
  800. 50003  POKE 35,22
  801. 50004 A$ = "TITLE SCREEN":B$ = "select a volume": GOSUB 100
  802. 50005  POKE 34,2
  803. 50010  VTAB 6: HTAB 28: PRINT "Prodisk   Utilities"
  804. 50020  VTAB 8: HTAB 17: PRINT "            by Robert B. Noah"
  805. 50025  VTAB 10: HTAB 17: PRINT "                               "
  806. 50030  VTAB 11: HTAB 16: PRINT  SPC( 7)"WARNING: This utility is very"
  807. 50040  VTAB 13: HTAB 16: PRINT  SPC( 7)"dangerous!  For hackers only!"
  808. 50045  VTAB 16: HTAB 17: PRINT "Copyright (c) 1988.  Published on Softdisk #87."
  809. 50046  VTAB 17: HTAB 9: PRINT "Subscriptions 1-800-831-2694. Changing this notice is illegal."
  810. 50050  VTAB 21: HTAB 23: PRINT "Insert disk(s).  Press any key: ";: GET A$: GOTO 2000
  811. 55000  TEXT : HOME : COLOR= 10: VLIN 0,47 AT 0: VLIN 0,47 AT 39: HLIN 0,38 AT 0: HLIN 0,39 AT 46: RETURN 
  812. 60000  REM PROGRAM ADJUSTER
  813. 60005  REM ******************************
  814. 25960  editor, send us a text file on a disk and you'll come out ahead.<CTRL-0x0d>^P<CTRL-0x0d>All program submissions should be accompanied by a _program submission form".  If your printer is online, you can make one right now by pressing P.<CTRL-0x0d><CTRL-0x0d>You've got nothing to lose (zip, scratch, total void of anything) and everything to gain (money, groupies, money, glamour, and money). Why not join the fun?  Send us something today.<CTRL-0x0d>~e<CTRL-0x0d>^S155,4,30,168<CTRL-0x0d>^T159,1,37<CTRL-0x0d>~cEnd of Submissions text<CTRL-0x0d> VALBLOOP
  815. 21333 TON!k RETURN <CTRL-0x04><CTRL-0x0a><CTRL-0x04>
  816. 13 
  817. 9986  ONERR <UNKNOWN TOKEN> -
  818. 160  ROT=  LET  INPUT <UNKNOWN TOKEN> LOMEM: <UNKNOWN TOKEN> @<UNKNOWN TOKEN> SPEED=  IF  <UNKNOWN TOKEN><UNKNOWN TOKEN> SPEED=  COLOR=  <UNKNOWN TOKEN><UNKNOWN TOKEN> SPEED=  COLOR=  <UNKNOWN TOKEN><UNKNOWN TOKEN> LOMEM: <UNKNOWN TOKEN> VTAB <CTRL-0x08> RETURN <UNKNOWN TOKEN> +8 RIGHT$ END  GOSUB <CTRL-0x02>i END 8 RIGHT$  GOSUB <CTRL-0x02> SPEED= <CTRL-0x0e><CTRL-0x18>i <CTRL-0x09> END  <UNKNOWN TOKEN><UNKNOWN TOKEN> LEFT$ SPEED=  COLOR=  <UNKNOWN TOKEN><UNKNOWN TOKEN> LEFT$ TAN<CTRL-0x10><UNKNOWN TOKEN><CTRL-0x1a> TAN<CTRL-0x19><UNKNOWN TOKEN><CTRL-0x16> TAN"<UNKNOWN TOKEN><CTRL-0x12> TAN+<UNKNOWN TOKEN><CTRL-0x0e> TAN4<UNKNOWN TOKEN><CTRL-0x0a> TAN=<UNKNOWN TOKEN><CTRL-0x06> = <CTRL-0x02> = , TANF<UNKNOWN TOKEN><CTRL-0x02> = <CTRL-0x04> <UNKNOWN TOKEN><UNKNOWN TOKEN> LEFT$ TANO =  LOAD  SPEED=  PLOT  <UNKNOWN TOKEN><UNKNOWN TOKEN> ONERR <UNKNOWN TOKEN> -<UNKNOWN TOKEN><UNKNOWN TOKEN>5 TAB( 
  819. 35280  ASC<UNKNOWN TOKEN> ASC<UNKNOWN TOKEN> ONERR <UNKNOWN TOKEN> -<CTRL-0x02><UNKNOWN TOKEN><CTRL-0x02> = <UNKNOWN TOKEN>`  NOT <UNKNOWN TOKEN> ONERR <UNKNOWN TOKEN><CTRL-0x0a><CTRL-0x0a><CTRL-0x0a><CTRL-0x0a><CTRL-0x0a> STORE  HGR2 <CTRL-0x0a> ASC<UNKNOWN TOKEN> SPEED= <CTRL-0x01> DEL <UNKNOWN TOKEN> -<CTRL-0x01><UNKNOWN TOKEN><CTRL-0x04> SPEED= 
  820. 65449  DEL <UNKNOWN TOKEN> -
  821. 169  DEL <UNKNOWN TOKEN>` SPEED=  LOMEM:  <UNKNOWN TOKEN><UNKNOWN TOKEN> RESUME <UNKNOWN TOKEN> LOMEM: <UNKNOWN TOKEN> @<UNKNOWN TOKEN>` ONERR <UNKNOWN TOKEN><CTRL-0x05><UNKNOWN TOKEN> DEL <UNKNOWN TOKEN>` ONERR <UNKNOWN TOKEN> RESUME <UNKNOWN TOKEN> *<UNKNOWN TOKEN><CTRL-0x04>J<CTRL-0x18> HGR2 <UNKNOWN TOKEN>J GOSUB <CTRL-0x05> SPEED= 
  822. 43360 <CTRL-0x01> DEL <UNKNOWN TOKEN>` ONERR <UNKNOWN TOKEN> -
  823. 160  ROT=  LET  INPUT <UNKNOWN TOKEN> LOMEM: <UNKNOWN TOKEN> @<UNKNOWN TOKEN> SPEED=  IF  <UNKNOWN TOKEN><UNKNOWN TOKEN> SPEED=  COLOR=  <UNKNOWN TOKEN><UNKNOWN TOKEN> SPEED=  COLOR=  <UNKNOWN TOKEN><UNKNOWN TOKEN> LOMEM: <UNKNOWN TOKEN> VTAB <CTRL-0x08> RETURN <UNKNOWN TOKEN> +  SQR<UNKNOWN TOKEN> SPEED=  COLOR=  LEFT$ LEFT$ TAN<CTRL-0x10><UNKNOWN TOKEN><CTRL-0x1a> TAN<CTRL-0x19><UNKNOWN TOKEN><CTRL-0x16> TAN"<UNKNOWN TOKEN><CTRL-0x12> TAN+<UNKNOWN TOKEN><CTRL-0x0e> TAN4<UNKNOWN TOKEN><CTRL-0x0a> TAN=<UNKNOWN TOKEN><CTRL-0x06> TANF<UNKNOWN TOKEN><CTRL-0x02> = <CTRL-0x04> <UNKNOWN TOKEN><UNKNOWN TOKEN> LEFT$ TANO =  =  SPEED=  PLOT  <UNKNOWN TOKEN><UNKNOWN TOKEN> ONERR <UNKNOWN TOKEN> -<UNKNOWN TOKEN><UNKNOWN TOKEN>5 TAB( 
  824. 41936  ASC<UNKNOWN TOKEN> ASC<UNKNOWN TOKEN> ONERR <UNKNOWN TOKEN> -<CTRL-0x02><UNKNOWN TOKEN><CTRL-0x02> =  HOME `  NOT <UNKNOWN TOKEN> ONERR <UNKNOWN TOKEN><CTRL-0x0a><CTRL-0x0a><CTRL-0x0a><CTRL-0x0a><CTRL-0x0a> STORE  HGR2 <CTRL-0x0a> ASC<UNKNOWN TOKEN> SPEED= <CTRL-0x01> DEL <UNKNOWN TOKEN> -<CTRL-0x01><UNKNOWN TOKEN><CTRL-0x04> SPEED= 
  825. 65449  DEL <UNKNOWN TOKEN> -
  826. 169  DEL <UNKNOWN TOKEN>` ONERR <UNKNOWN TOKEN>  SQR<UNKNOWN TOKEN>` LOMEM: <UNKNOWN TOKEN> RETURN <UNKNOWN TOKEN>  SQR<UNKNOWN TOKEN>`
  827. 34287 <UNKNOWN TOKEN> ONERR <UNKNOWN TOKEN> DEL  LEN ONERR <UNKNOWN TOKEN> PLOT <CTRL-0x14><CTRL-0x03> LET  ONERR <UNKNOWN TOKEN> PLOT <CTRL-0x15><CTRL-0x03> STORE  @<UNKNOWN TOKEN> SPEED=  GR  <UNKNOWN TOKEN><UNKNOWN TOKEN> <UNKNOWN TOKEN><UNKNOWN TOKEN> <UNKNOWN TOKEN><UNKNOWN TOKEN> <UNKNOWN TOKEN><UNKNOWN TOKEN> 
  828. 53503 o ONERR  LEN DEL <UNKNOWN TOKEN> ONERR <UNKNOWN TOKEN> DEL <UNKNOWN TOKEN> COLOR= 
  829. 52868  ONERR <UNKNOWN TOKEN> DEL  > RETURN <UNKNOWN TOKEN> DEL <UNKNOWN TOKEN> CLEAR *<CTRL-0x03> AT <UNKNOWN TOKEN><UNKNOWN TOKEN><CTRL-0x06><CTRL-0x05><UNKNOWN TOKEN> AT <UNKNOWN TOKEN> = <CTRL-0x15> LEFT$ STR$<UNKNOWN TOKEN><UNKNOWN TOKEN>= + TAB( 
  830. 61349  AT <UNKNOWN TOKEN> = 2 ASC<UNKNOWN TOKEN><CTRL-0x18> HGR2  SQR LOMEM:   OR  ONERR  > DEL <UNKNOWN TOKEN> + TAB( 
  831. 61349  AT <UNKNOWN TOKEN> = <CTRL-0x07> ASC<UNKNOWN TOKEN><CTRL-0x18> HGR2  LIST  HGR2  CALL  ONERR <UNKNOWN TOKEN> AT <UNKNOWN TOKEN> = <CTRL-0x06> ONERR <UNKNOWN TOKEN> AT <UNKNOWN TOKEN><UNKNOWN TOKEN><CTRL-0x0e> ASC<UNKNOWN TOKEN> = <CTRL-0x02> ASC<UNKNOWN TOKEN><CTRL-0x18> HGR2  RIGHT$ SPEED= <CTRL-0x02> DEL <UNKNOWN TOKEN>` SPEED= 
  832. 43360 <CTRL-0x01> DEL <UNKNOWN TOKEN>`
  833. 34303  LEN ONERR <UNKNOWN TOKEN> PLOT <CTRL-0x14><CTRL-0x03> LET  ONERR <UNKNOWN TOKEN> PLOT <CTRL-0x15><CTRL-0x03> STORE  @<UNKNOWN TOKEN> SPEED=  GR  <UNKNOWN TOKEN><UNKNOWN TOKEN> <UNKNOWN TOKEN><UNKNOWN TOKEN> <UNKNOWN TOKEN><UNKNOWN TOKEN> <UNKNOWN TOKEN><UNKNOWN TOKEN> 
  834. 53503 <CTRL-0x19> ONERR  LEN DEL <UNKNOWN TOKEN> ONERR <UNKNOWN TOKEN> AT <UNKNOWN TOKEN> = <CTRL-0x06> ONERR <UNKNOWN TOKEN> AT <UNKNOWN TOKEN><UNKNOWN TOKEN><CTRL-0x0e> ASC<UNKNOWN TOKEN> = <CTRL-0x02> ASC<UNKNOWN TOKEN><CTRL-0x18> HGR2  SPC(  SPEED= <CTRL-0x01> DEL <UNKNOWN TOKEN>` SPEED= 
  835. 96  COLOR= 
  836. 2210 <CTRL-0x0a> * DEL <UNKNOWN TOKEN> HGR2 <CTRL-0x0d> SPEED=  PDL <UNKNOWN TOKEN><UNKNOWN TOKEN> ASC<UNKNOWN TOKEN> = <CTRL-0x02> ASC<UNKNOWN TOKEN> GOSUB <CTRL-0x05> SPEED=  IF  <UNKNOWN TOKEN><UNKNOWN TOKEN> ASC<UNKNOWN TOKEN> = <CTRL-0x02> ASC<UNKNOWN TOKEN> ONERR <UNKNOWN TOKEN> AT <UNKNOWN TOKEN> = <CTRL-0x06> ONERR <UNKNOWN TOKEN> AT <UNKNOWN TOKEN><UNKNOWN TOKEN><CTRL-0x0e> ONERR <UNKNOWN TOKEN> TAN
  837. 53448  - ASC<UNKNOWN TOKEN><CTRL-0x18> HGR2  FN `
  838. 40960 <CTRL-0x01> ONERR <UNKNOWN TOKEN>J HGR2 <CTRL-0x04> INPUT <UNKNOWN TOKEN> GOSUB <CTRL-0x02> DIM <UNKNOWN TOKEN>J HGR2 <CTRL-0x04> INPUT <UNKNOWN TOKEN> GOSUB <CTRL-0x02> DIM <UNKNOWN TOKEN>J HGR2 <CTRL-0x04> INPUT <UNKNOWN TOKEN> GOSUB <CTRL-0x02> DIM <UNKNOWN TOKEN>J HGR2 <CTRL-0x04> INPUT <UNKNOWN TOKEN> GOSUB <CTRL-0x02> DIM <UNKNOWN TOKEN>J HGR2 <CTRL-0x04> INPUT <UNKNOWN TOKEN> GOSUB <CTRL-0x02> DIM <UNKNOWN TOKEN>J HGR2 <CTRL-0x04> INPUT <UNKNOWN TOKEN> GOSUB <CTRL-0x02> DIM <UNKNOWN TOKEN>J HGR2 <CTRL-0x04> INPUT <UNKNOWN TOKEN> GOSUB <CTRL-0x02> DIM <UNKNOWN TOKEN>J HGR2 <CTRL-0x04> INPUT <UNKNOWN TOKEN> GOSUB <CTRL-0x02> DIM <UNKNOWN TOKEN>`