home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64Toolkit / DISKEASE.PRG (.txt) < prev    next >
Commodore BASIC  |  2019-04-13  |  8KB  |  329 lines

  1. 20 PRINT"[147]":POKE646,1
  2. 30 POKE53281,0:POKE53280,0
  3. 380 PRINT"DISK EASE"
  4. 390 PRINT"TOUCH A KEY"
  5. 400 GETA$:IFA$=""THEN400
  6. 410 GOTO 990
  7. 420 REM
  8. 430 POKE53281,1:POKE53280,11:PRINT"[144]":PRINT"[147]"
  9. 440 OPEN1,8,0,"$"
  10. 450 GET#1,A$,B$
  11. 460 GET#1,A$,B$
  12. 470 GET#1,A$,B$
  13. 480 C=0:IFA$<>""THENC=ASC(A$)
  14. 490 IFB$<>""THENC=C+ASC(B$)*256
  15. 500 PRINTMID$(STR$(C),2);TAB(3);
  16. 510 PRINTCHR$(18);:GET#1,B$
  17. 520 IFST<>0THENGOTO600
  18. 530 IFB$<>CHR$(34)THEN 510
  19. 540 PRINTTAB(05):GET#1,B$:IFB$<>CHR$(34)THENPRINTB$;:GOTO 540
  20. 550 GET#1,B$:IFB$=CHR$(32)THEN 550
  21. 560 PRINTTAB(18);:C$=""
  22. 570 C$=C$+B$:GET#1,B$:IFB$<>""THEN 570
  23. 580 PRINTTAB(25);:PRINTLEFT$(C$,3)
  24. 590 IF ST=0THEN 460
  25. 600 PRINT"[146]  [194][204][207][195][203][211][160][198][210][197][197]"
  26. 610 CLOSE 1:PRINT:PRINT:PRINT"HIT ANY KEY TO RETURN"
  27. 620 GETO$:IFO$=""THEN620
  28. 630 GOTO 990
  29. 640 POKE53281,0:POKE53280,0:PRINT""
  30. 650 REM
  31. 660 POKE52,13:POKE56,31:CLR
  32. 670 FORI=0TO173
  33. 680 READD:POKE7936+I,D:NEXT
  34. 690 POKE785,0:POKE786,31
  35. 700 PL$=CHR$(19)
  36. 710 FORI=1TO24:PL$=PL$+CHR$(17):NEXT
  37. 720 FORI=1TO39:CL$=CL$+" ":NEXT
  38. 730 CL$=CL$+CHR$(13)+CL$+CHR$(13)
  39. 740 CL$=LEFT$(PL$,21)+CL$+CHR$(145)+CHR$(145)
  40. 750 SAVE"@0:DISK EASE",8:GOTO 990
  41. 760 REM
  42. 770 POKE53281,1:POKE53280,2:PRINT"[144][147]"
  43. 780 PRINTTAB(13)"[196][207][211][160][195][207][205][205][193][206][196][211]"
  44. 790 PRINT"1) [214]ALIDATE"
  45. 800 PRINT"2) [201]NITIALIZE"
  46. 810 PRINT"3) [197]RASE ANY FILE"
  47. 820 PRINT"4) [210]ENAME ANY FILE"
  48. 830 PRINT"5) [198]ORMAT ANY DISK"
  49. 840 PRINT"6) [199]OTO MAIN MENU"
  50. 850 PRINT"[212][207][213][195][200][160][217][207][213][210][160][195][200][207][201][195][197]"
  51. 860 GETO$:Z=VAL(O$):IFZ<1ORZ>6THEN860
  52. 870 ONZGOTO880,900,890,910,930,990
  53. 880 PRINT"[147][214]ALIDATING":D$="V":GOTO950
  54. 890 D$="S0:":INPUT"[147][198]ILE NAME";NA$:GOTO 960
  55. 900 PRINT"[147][201]NITIALIZING":D$="I":GOTO950
  56. 910 INPUT"[147][207]RIGINAL,NEW FILE NAME";DIS$,DES$:REN$="R:"+DES$+"="+DIS$
  57. 920 OPEN15,8,15,REN$:GOTO990
  58. 930 INPUT"[147][196]ISK NAME AND [201][196] NUMBER";DIS$,IDI$:FRM$="N0:"+DIS$+","+IDI$
  59. 940 PRINT"[198]ORMATTING  ";DIS$,IDI$:OPEN15,8,15,FRM$:GOTO990
  60. 950 OPEN15,8,15:PRINT#15,D$:CLOSE15:GOTO 990
  61. 960 XX$=D$+NA$:OPEN15,8,15:PRINT#15,XX$:CLOSE15:GOTO990
  62. 970 OPEN15,8,15:PRINT#15,D$,OF$,NF$:CLOSE15
  63. 980 REM
  64. 990 CLOSE15:PRINTCHR$(14);:PRINT"[129][147]":POKE53281,1:POKE53280,1
  65. 1000 PRINT"[205][193][201][206][160][205][197][206][213]"
  66. 1010 PRINT"1) [195]OPY FILES ON SAME DISK"
  67. 1020 PRINT"2) [195]HANGE DISK [201].[196].'S"
  68. 1030 PRINT"3) [193]DVANCED DISK FUNCTIONS"
  69. 1040 PRINT"4) [196]OS COMMANDS"
  70. 1050 PRINT"5) [196]ISPLAY DIRECTORY"
  71. 1060 PRINT"6) [211]AVE [196]ISK [197]ASE TO DISK"
  72. 1070 PRINT"7) [210]EAD ERROR CHANNEL"
  73. 1080 PRINT"8) [197]ND [196][201][211][203] [197][193][211][197]"
  74. 1090 PRINT"[212][207][213][195][200][160][217][207][213][210][160][195][200][207][201][195][197]"
  75. 1100 GETO$:O=VAL(O$):IFO<1ORO>8THEN1100
  76. 1110 ON O GOTO1120,1170,3530,760,420,750,1360,1320
  77. 1120 REM
  78. 1130 INPUT"[147][207]RIGINAL FILE";DIS$
  79. 1140 INPUT"[196]ESTINATION FILE";DES$
  80. 1150 COP$="C:"+DES$+"="+DIS$:OPEN15,8,15,COP$:GOTO990
  81. 1160 REM
  82. 1170 PRINT"[147][195]HANGE [196]ISK [206]UMBER:"
  83. 1180 DATA 12,50,119,0
  84. 1190 INPUT"[207]LD [196]EVICE [206]UMBER";DO
  85. 1200 IFDO<8ORDO>15THEN1190
  86. 1210 INPUT"[206]EW [196]EVICE [206]UMBER";DN
  87. 1220 IFDN<8ORDN>15THEN1190
  88. 1230 OPEN15,DO,15
  89. 1240 A$=CHR$(DO+32):B$=CHR$(DO+64)
  90. 1250 READA:IFA=0THEN PRINT"[196]RIVE IS NOT COMPATIBLE WITH PROGRAM":GOTO990
  91. 1260 PRINT#15,"M-R"CHR$(A)CHR$(0):GET#15,X$:IFX$<>A$GOTO1250
  92. 1270 PRINT#15,"M-R"CHR$(A+1)CHR$(0):GET#15,X$:IFX$<>B$GOTO1250
  93. 1280 PRINT#15,"M-W"CHR$(A)CHR$(0)CHR$(2)CHR$(DN+32)CHR$(DN+64)
  94. 1290 CLOSE15
  95. 1300 GOTO990
  96. 1310 REM
  97. 1320 PRINT"[196]ISK [197]ASE WILL BE ERASED FROM MEMORY!"
  98. 1330 INPUT"[193]RE YOU SURE";AA$
  99. 1340 IFAA$="Y"OR AA$="YES"THENSYS 64738
  100. 1350 GOTO 990
  101. 1360 REM
  102. 1370 CLOSE15:OPEN15,8,15
  103. 1380 INPUT#15,A$,B$,C$,D$
  104. 1390 PRINT"[147]"
  105. 1400 PRINT"[197]RROR STATUS:   "B$
  106. 1410 PRINT"[197]RROR NUMBER:   "A$
  107. 1420 PRINT"HIT ANY KEY TO RETURN"
  108. 1430 GETO$:IFO$=""THEN1430
  109. 1440 GOTO 990
  110. 1450 REM
  111. 1460 PRINT"[147]":POKE53281,10:POKE53280,0
  112. 1470 INPUT"[196]ISK DRIVE DEVICE NUMBER";DN
  113. 1480 DIMT(100):DIMMS(100):REM BADTRACK,SECTOR ARRAY
  114. 1490 PRINT"[147][195]HECKING [196]ISK....."
  115. 1500 D$="0"
  116. 1510 OPEN15,DN,15
  117. 1520 PRINT#15,"V"D$
  118. 1530 N%=RND(TI)*255
  119. 1540 A$="":FORI=1TO255:A$=A$+CHR$(255AND(I+N%)):NEXT
  120. 1550 GOSUB 1840
  121. 1560 OPEN2,DN,2,"#"
  122. 1570 PRINT:PRINT#2,A$;
  123. 1580 T=1:S=0
  124. 1590 PRINT#15,"B-A:"D$;T;S
  125. 1600 INPUT#15,EN,EM$,ET,ES
  126. 1610 IFEN=0THEN1640
  127. 1620 IFET=0THEN1720
  128. 1630 PRINT#15,"B-A:"D$;ET;ES:T=ET:S=ES
  129. 1640 PRINT#15,"U2:2,"D$;T;S
  130. 1650 NB=NB+1:PRINT" [195]HECKED [194]LOCKS"NB
  131. 1660 PRINT" [212]RACK    [157][157][157][157]"T;" [211]ECTOR    [157][157][157][157]"S"[145][145]"
  132. 1670 INPUT#15,EN,EM$,ES,ET
  133. 1680 IFEN=0THEN1580
  134. 1690 T(J)=T:S(J)=S:J=J+1
  135. 1700 PRINT"[194]AD [194]LOCK:[157][157]",T;S""
  136. 1710 GOTO 1580
  137. 1720 PRINT#15,"I"D$
  138. 1730 GOSUB1840
  139. 1740 GOSUB1270
  140. 1750 IFJ=0THENPRINT"[206]O[160][194]AD[160][194]LOCKS!":FORI=1TO3000:NEXT:GOTO 990
  141. 1760 OPEN2,DN,2,"#"
  142. 1770 PRINT"[194]AD[160][194]LOCKS","[212]RACK","[211]ECTOR"
  143. 1780 FORI=0TOJ-1
  144. 1790 PRINT#15,"B-A:";D$,T(I);S(I)
  145. 1800 PRINT,,T(I),S(I)
  146. 1810 NEXT
  147. 1820 PRINT""J"[194]AD BLOCKS HAVE BEEN ALLOCATED!"
  148. 1830 CLOSE2:FORI=1TO3000:NEXT:GOTO 990
  149. 1840 INPUT#15,EN,EM$,ET,ES
  150. 1850 IFEN=0THENRETURN
  151. 1860 PRINT"[197]RROR #"EN,EM$;ET;ES""
  152. 1870 PRINT#15,"I"D$
  153. 1880 GOTO 990
  154. 1890 PRINT"[147]PROGRAM MERGER"
  155. 1900 DIM A$(2),B$(2),C$(2),N(2)
  156. 1910 OPEN 15,8,15
  157. 1920 INPUT"PROGRAM 1";X$
  158. 1930 OPEN 1,8,2,X$+",P,R"
  159. 1940 INPUT#15,E,E$,E1,E2
  160. 1950 IF E THENPRINT E$:CLOSE 15:END
  161. 1960 GET#1,A$,A$:J=1:GOSUB2210
  162. 1970 INPUT"PROGRAM 2 (OR 'N')";X$
  163. 1980 IF X$="N"THEN N(2)=1E9:GOTO2030
  164. 1990 OPEN 2,8,3,X$+",P,R"
  165. 2000 INPUT#15,E,E$,E1,E2
  166. 2010 IF E THENPRINT E$:CLOSE 15:END
  167. 2020 GET#2,A$,A$:J=2:GOSUB2210
  168. 2030 INPUT"NEW FILE";X$
  169. 2040 OPEN 8,8,8,"0:"+X$+",P,W"
  170. 2050 INPUT#15,E,E$,E1,E2
  171. 2060 IF E THENPRINT E$:CLOSE 15:FORI=1TO500:NEXTI:GOTO3530
  172. 2070 PRINT#8,CHR$(1);CHR$(4);
  173. 2080 REM
  174. 2090 X=2
  175. 2100 IF N(1)<N(2)THEN X=1
  176. 2110 N=N(X):IF N>1E8 THEN 2170
  177. 2120 PRINT#8,CHR$(1);CHR$(1);A$(X);B$(X);C$(X);CHR$(0);
  178. 2130 FOR J=1TO2
  179. 2140 IF N(J)=N THEN GOSUB 2210
  180. 2150 NEXT J
  181. 2160 GOTO 2090
  182. 2170 PRINT#8,CHR$(0);CHR$(0);
  183. 2180 CLOSE 1:CLOSE 2:CLOSE 8:CLOSE 15
  184. 2190 END
  185. 2200 REM
  186. 2210 GET#J,A$,B$
  187. 2220 IF A$="" AND B$="" THEN 2330
  188. 2230 GET#J,A$(J),B$(J)
  189. 2240 IF A$(J)="" THEN A$(J)=CHR$(0)
  190. 2250 IF B$(J)="" THEN B$(J)=CHR$(0)
  191. 2260 N(J)=ASC(A$(J))+ASC(B$(J))*256
  192. 2270 C$(J)=""
  193. 2280 GET#J,A$
  194. 2290 IF A$="" THEN 2340
  195. 2300 C$(J)=C$(J)+A$
  196. 2310 IF ST=0 AND LEN(C$(J))<254 THEN 2280
  197. 2320 PRINT"PROBLEM FILE";J
  198. 2330 N(J)=1E9
  199. 2340 RETURN
  200. 2350 POKE53280,0:POKE53281,0:PRINT"":OPEN9,0,0:OPEN15,8,15
  201. 2360 PK=PEEK(59468):POKE59468,12
  202. 2370 MD$="":FORI=1TO20:MD$=MD$+"":NEXT
  203. 2380 FORI=1TO39:BL$=BL$+" ":NEXT
  204. 2390 P0$="[147]         DISK NAME CHANGER"
  205. 2400 RE$="PRESS RETURN[146] TO CONTINUE"
  206. 2410 GOTO2540
  207. 2420 INPUT#15,ER:IFER=0THENRETURN
  208. 2430 INPUT#15,ER,EM$,ET$,ES$
  209. 2440 PRINTMD$"DISK ERROR![146] #"ER" "EM$" "ET$", "ES$
  210. 2450 FORI=1TO500:NEXTI:GOTO3530
  211. 2460 INPUT#9,Q$:PRINT:Q1$=LEFT$(Q$,1):RETURN
  212. 2470 CLOSE2:CLOSE15:POKE59468,PK:PRINT"[147]":FORI=1TO500:NEXTI:GOTO3530
  213. 2480 PRINTLEFT$(MD$,MD)BL$:PRINTBL$
  214. 2490 PRINTLEFT$(MD$,MD);:RETURN
  215. 2500 MD=21:GOSUB2480
  216. 2510 PRINT"UNACCEPTABLE ENTRY -- "EM$(EM)
  217. 2520 PRINTRE$:GOSUB2460:GOSUB2480
  218. 2530 RETURN
  219. 2540 F=0:PRINTP0$
  220. 2550 PRINT"ON WHICH DRIVE FOR CHANGES? (0/1) ";:GOSUB2460
  221. 2560 DV=VAL(Q$):IFDV<0ORDV>1THENEM=1:GOSUB2500:GOTO2540
  222. 2570 IFDV=0ANDQ1$<>"0"THENEM=1:GOSUB2500:GOTO2540
  223. 2580 PRINTP0$:PRINT"PLACE DISKETTE IN DRIVE"DV""
  224. 2590 PRINTRE$:GOSUB2460
  225. 2600 PRINT#15,"I"+STR$(DV):GOSUB2420
  226. 2610 OPEN2,8,2,"#":PRINT#15,"U1:2";DV;",18,0":GOSUB2420
  227. 2620 PRINT#15,"B-P:2,144":GOSUB2420:DN$=""
  228. 2630 FORI=1TO16:GET#2,A$:DN$=DN$+A$:NEXT
  229. 2640 MD=10:GOSUB2480:IF F THEN RETURN
  230. 2650 PRINT"THE PRESENT DISK NAME IS:"
  231. 2660 PRINTTAB(5)CHR$(34)DN$CHR$(34)
  232. 2670 MD=13:GOSUB2480
  233. 2680 PRINT"DO YOU WISH TO CHANGE IT? (Y/N) ";:GOSUB2460
  234. 2690 IFQ1$="N"THEN2890
  235. 2700 IFQ1$<>"Y"THEN2670
  236. 2710 MD=16:GOSUB2480
  237. 2720 PRINT"ENTER NEW DISK NAME":PRINT"LIMIT TO 16 CHARACTERS "
  238. 2730 GOSUB2460:IFLEN(Q$)>16THENEM=2:GOSUB2500:MD=18:GOSUB2480:GOTO2730
  239. 2740 NDN$=LEFT$(Q$+BL$,16)
  240. 2750 MD=21:GOSUB2480
  241. 2760 PRINT"SHALL I SEND "NDN$
  242. 2770 PRINT"TO THE DISKETTE ON DRIVE"DV"? (Y/N) ";:GOSUB2460
  243. 2780 IFQ1$="Y"THEN2810
  244. 2790 IFQ1$<>"N"THENGOSUB2480:MD=18:GOSUB2480:GOTO2710
  245. 2800 GOTO2750
  246. 2810 MD=21:GOSUB2480:PRINT"BE PATIENT..."
  247. 2820 PRINT#15,"B-P:2,144":GOSUB2420
  248. 2830 PRINT#2,NDN$;:GOSUB2420
  249. 2840 PRINT#15,"U2:2";DV;",18,0":GOSUB2420
  250. 2850 PRINT#15,"I"+STR$(DV):GOSUB2420:CLOSE2
  251. 2860 F=1:PRINTP0$:GOSUB2600:F=0
  252. 2870 PRINT"THE NEW DISK NAME IS:"
  253. 2880 PRINTCHR$(34)DN$CHR$(34)
  254. 2890 CLOSE2:MD=21:GOSUB2480:PRINT"DO YOU WISH TO DO"
  255. 2900 PRINT"ANOTHER DISKETTE? (Y/N) ";:GOSUB2460
  256. 2910 IFQ1$="Y"THEN2580
  257. 2920 IFQ1$="N"THEN2470
  258. 2930 GOTO2890
  259. 2940 POKE53281,0:POKE53280,0:PRINT""
  260. 2950 PRINT"[147]            S O R T D I R           "
  261. 2960 DIM DR$(145),S(20),NM$(145)
  262. 2970 OPEN15,8,15
  263. 2980 OPEN5,8,5,"#"
  264. 2990 S(1)=1:DE=0:REM SECTOR 1. DIRECTORY ENTRY 0
  265. 3000 I=1
  266. 3010 PRINT#15,"U1:";5;0;18;S(I)
  267. 3020 PRINT"READING SECTOR: "S(I)
  268. 3030 I=I+1
  269. 3040 GET#5,T$
  270. 3050 GET#5,S$:S(I)=ASC(S$+CHR$(0))
  271. 3060 FORQ=1TO8:I$=""
  272. 3070 DE=DE+1:DR$(DE)=""
  273. 3080 FORR=1TO30
  274. 3090 GET#5,I$
  275. 3100 IFI$=""THENI$=CHR$(0)
  276. 3110 DR$(DE)=DR$(DE)+I$
  277. 3120 NEXT R
  278. 3130 IFQ<>8THENGET#5,NG$,NG$
  279. 3140 NEXT Q
  280. 3150 IFS(I)<21THEN 3010
  281. 3160 GOSUB 3480
  282. 3170 PRINT"CONVERTING FILE NAMES......"
  283. 3180 FOR X=1TODE
  284. 3190 NM$(X)=LEFT$(DR$(X),1)+MID$(DR$(X),4,16)
  285. 3200 FORP=2TO17
  286. 3210 IFMID$(NM$(X),P,1)=CHR$(160)THENNM$(X)=MID$(NM$(X),1,P-1):GOTO3230
  287. 3220 NEXT P
  288. 3230 NEXT X
  289. 3240 PRINT"SORTING.......";
  290. 3250 FOR X=1TO DE-1
  291. 3260 IFNM$(X)>NM$(X+1)THEN3300
  292. 3270 Z$=STR$(DE-X-1):Z$=Z$+"  ":Z$=LEFT$(Z$,3):PRINT"[157][157][157]"Z$;
  293. 3280 NEXT X
  294. 3290 PRINT:GOTO 3340
  295. 3300 HO$=DR$(X):DR$(X)=DR$(X+1):DR$(X+1)=HO$
  296. 3310 HO$=NM$(X):NM$(X)=NM$(X+1):NM$(X+1)=HO$
  297. 3320 X=X-1:IFX<1THENX=1
  298. 3330 GOTO 3260
  299. 3340 GOSUB 3480
  300. 3350 W=I-1:DW=0
  301. 3360 FOR I=1TOW:PRINT#15,"B-P:";5;0
  302. 3370 TT=18:IFS(I+1)=255THENTT=0
  303. 3380 PRINT#5,CHR$(TT);CHR$(S(I+1));
  304. 3390 FOR Q=1TO8:DW=DW+1
  305. 3400 PRINT#5,DR$(DW);
  306. 3410 IFQ<>8THENPRINT#5,"CD";
  307. 3420 NEXT Q
  308. 3430 PRINT#15,"U2:";5;0;18;S(I)
  309. 3440 PRINT"WRITING SECTOR: "S(I)
  310. 3450 NEXT I
  311. 3460 PRINT"D O N E "
  312. 3470 CLOSE5:CLOSE15:GOTO 3530
  313. 3480 PRINT"[147]":FOR Q=1TODE
  314. 3490 IFMID$(DR$(Q),1,1)=CHR$(0)THEN3510
  315. 3500 PRINTMID$(DR$(Q),4,16)
  316. 3510 NEXT Q
  317. 3520 RETURN
  318. 3530 PRINT"[147][158]":POKE53281,2:POKE53280,2
  319. 3540 PRINT"[193][196][214][193][206][195][197][196][160][196][201][211][203][160][198][213][206][195][212][201][207][206][211]:"
  320. 3550 PRINT"[205]ERGE TWO PROGRAMS................1"
  321. 3560 PRINT"[195]HANGE DISK HEADER................2"
  322. 3570 PRINT"[195]HECK DISK FOR POSSIBLE FLAWS.....3"
  323. 3580 PRINT"[211]ORT THE DISK DIRECTORY...........4"
  324. 3590 PRINT"[197]XIT TO MAIN MENU.................5"
  325. 3600 PRINT"[212]OUCH[160][217]OUR[160][195]HOICE"
  326. 3610 GETA$:IFA$=" "THEN3610
  327. 3620 A=VAL(A$):ONAGOTO1890,2350,1450,2940,980
  328. 3630 GOTO3610
  329.