home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
8bitfiles.net/archives
/
archives.tar
/
archives
/
genie-commodore-file-library
/
C64Toolkit
/
DISKEASE.PRG
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2019-04-13
|
8KB
|
329 lines
20 PRINT"[147]":POKE646,1
30 POKE53281,0:POKE53280,0
380 PRINT"DISK EASE"
390 PRINT"TOUCH A KEY"
400 GETA$:IFA$=""THEN400
410 GOTO 990
420 REM
430 POKE53281,1:POKE53280,11:PRINT"[144]":PRINT"[147]"
440 OPEN1,8,0,"$"
450 GET#1,A$,B$
460 GET#1,A$,B$
470 GET#1,A$,B$
480 C=0:IFA$<>""THENC=ASC(A$)
490 IFB$<>""THENC=C+ASC(B$)*256
500 PRINTMID$(STR$(C),2);TAB(3);
510 PRINTCHR$(18);:GET#1,B$
520 IFST<>0THENGOTO600
530 IFB$<>CHR$(34)THEN 510
540 PRINTTAB(05):GET#1,B$:IFB$<>CHR$(34)THENPRINTB$;:GOTO 540
550 GET#1,B$:IFB$=CHR$(32)THEN 550
560 PRINTTAB(18);:C$=""
570 C$=C$+B$:GET#1,B$:IFB$<>""THEN 570
580 PRINTTAB(25);:PRINTLEFT$(C$,3)
590 IF ST=0THEN 460
600 PRINT"[146] [194][204][207][195][203][211][160][198][210][197][197]"
610 CLOSE 1:PRINT:PRINT:PRINT"HIT ANY KEY TO RETURN"
620 GETO$:IFO$=""THEN620
630 GOTO 990
640 POKE53281,0:POKE53280,0:PRINT""
650 REM
660 POKE52,13:POKE56,31:CLR
670 FORI=0TO173
680 READD:POKE7936+I,D:NEXT
690 POKE785,0:POKE786,31
700 PL$=CHR$(19)
710 FORI=1TO24:PL$=PL$+CHR$(17):NEXT
720 FORI=1TO39:CL$=CL$+" ":NEXT
730 CL$=CL$+CHR$(13)+CL$+CHR$(13)
740 CL$=LEFT$(PL$,21)+CL$+CHR$(145)+CHR$(145)
750 SAVE"@0:DISK EASE",8:GOTO 990
760 REM
770 POKE53281,1:POKE53280,2:PRINT"[144][147]"
780 PRINTTAB(13)"[196][207][211][160][195][207][205][205][193][206][196][211]"
790 PRINT"1) [214]ALIDATE"
800 PRINT"2) [201]NITIALIZE"
810 PRINT"3) [197]RASE ANY FILE"
820 PRINT"4) [210]ENAME ANY FILE"
830 PRINT"5) [198]ORMAT ANY DISK"
840 PRINT"6) [199]OTO MAIN MENU"
850 PRINT"[212][207][213][195][200][160][217][207][213][210][160][195][200][207][201][195][197]"
860 GETO$:Z=VAL(O$):IFZ<1ORZ>6THEN860
870 ONZGOTO880,900,890,910,930,990
880 PRINT"[147][214]ALIDATING":D$="V":GOTO950
890 D$="S0:":INPUT"[147][198]ILE NAME";NA$:GOTO 960
900 PRINT"[147][201]NITIALIZING":D$="I":GOTO950
910 INPUT"[147][207]RIGINAL,NEW FILE NAME";DIS$,DES$:REN$="R:"+DES$+"="+DIS$
920 OPEN15,8,15,REN$:GOTO990
930 INPUT"[147][196]ISK NAME AND [201][196] NUMBER";DIS$,IDI$:FRM$="N0:"+DIS$+","+IDI$
940 PRINT"[198]ORMATTING ";DIS$,IDI$:OPEN15,8,15,FRM$:GOTO990
950 OPEN15,8,15:PRINT#15,D$:CLOSE15:GOTO 990
960 XX$=D$+NA$:OPEN15,8,15:PRINT#15,XX$:CLOSE15:GOTO990
970 OPEN15,8,15:PRINT#15,D$,OF$,NF$:CLOSE15
980 REM
990 CLOSE15:PRINTCHR$(14);:PRINT"[129][147]":POKE53281,1:POKE53280,1
1000 PRINT"[205][193][201][206][160][205][197][206][213]"
1010 PRINT"1) [195]OPY FILES ON SAME DISK"
1020 PRINT"2) [195]HANGE DISK [201].[196].'S"
1030 PRINT"3) [193]DVANCED DISK FUNCTIONS"
1040 PRINT"4) [196]OS COMMANDS"
1050 PRINT"5) [196]ISPLAY DIRECTORY"
1060 PRINT"6) [211]AVE [196]ISK [197]ASE TO DISK"
1070 PRINT"7) [210]EAD ERROR CHANNEL"
1080 PRINT"8) [197]ND [196][201][211][203] [197][193][211][197]"
1090 PRINT"[212][207][213][195][200][160][217][207][213][210][160][195][200][207][201][195][197]"
1100 GETO$:O=VAL(O$):IFO<1ORO>8THEN1100
1110 ON O GOTO1120,1170,3530,760,420,750,1360,1320
1120 REM
1130 INPUT"[147][207]RIGINAL FILE";DIS$
1140 INPUT"[196]ESTINATION FILE";DES$
1150 COP$="C:"+DES$+"="+DIS$:OPEN15,8,15,COP$:GOTO990
1160 REM
1170 PRINT"[147][195]HANGE [196]ISK [206]UMBER:"
1180 DATA 12,50,119,0
1190 INPUT"[207]LD [196]EVICE [206]UMBER";DO
1200 IFDO<8ORDO>15THEN1190
1210 INPUT"[206]EW [196]EVICE [206]UMBER";DN
1220 IFDN<8ORDN>15THEN1190
1230 OPEN15,DO,15
1240 A$=CHR$(DO+32):B$=CHR$(DO+64)
1250 READA:IFA=0THEN PRINT"[196]RIVE IS NOT COMPATIBLE WITH PROGRAM":GOTO990
1260 PRINT#15,"M-R"CHR$(A)CHR$(0):GET#15,X$:IFX$<>A$GOTO1250
1270 PRINT#15,"M-R"CHR$(A+1)CHR$(0):GET#15,X$:IFX$<>B$GOTO1250
1280 PRINT#15,"M-W"CHR$(A)CHR$(0)CHR$(2)CHR$(DN+32)CHR$(DN+64)
1290 CLOSE15
1300 GOTO990
1310 REM
1320 PRINT"[196]ISK [197]ASE WILL BE ERASED FROM MEMORY!"
1330 INPUT"[193]RE YOU SURE";AA$
1340 IFAA$="Y"OR AA$="YES"THENSYS 64738
1350 GOTO 990
1360 REM
1370 CLOSE15:OPEN15,8,15
1380 INPUT#15,A$,B$,C$,D$
1390 PRINT"[147]"
1400 PRINT"[197]RROR STATUS: "B$
1410 PRINT"[197]RROR NUMBER: "A$
1420 PRINT"HIT ANY KEY TO RETURN"
1430 GETO$:IFO$=""THEN1430
1440 GOTO 990
1450 REM
1460 PRINT"[147]":POKE53281,10:POKE53280,0
1470 INPUT"[196]ISK DRIVE DEVICE NUMBER";DN
1480 DIMT(100):DIMMS(100):REM BADTRACK,SECTOR ARRAY
1490 PRINT"[147][195]HECKING [196]ISK....."
1500 D$="0"
1510 OPEN15,DN,15
1520 PRINT#15,"V"D$
1530 N%=RND(TI)*255
1540 A$="":FORI=1TO255:A$=A$+CHR$(255AND(I+N%)):NEXT
1550 GOSUB 1840
1560 OPEN2,DN,2,"#"
1570 PRINT:PRINT#2,A$;
1580 T=1:S=0
1590 PRINT#15,"B-A:"D$;T;S
1600 INPUT#15,EN,EM$,ET,ES
1610 IFEN=0THEN1640
1620 IFET=0THEN1720
1630 PRINT#15,"B-A:"D$;ET;ES:T=ET:S=ES
1640 PRINT#15,"U2:2,"D$;T;S
1650 NB=NB+1:PRINT" [195]HECKED [194]LOCKS"NB
1660 PRINT" [212]RACK [157][157][157][157]"T;" [211]ECTOR [157][157][157][157]"S"[145][145]"
1670 INPUT#15,EN,EM$,ES,ET
1680 IFEN=0THEN1580
1690 T(J)=T:S(J)=S:J=J+1
1700 PRINT"[194]AD [194]LOCK:[157][157]",T;S""
1710 GOTO 1580
1720 PRINT#15,"I"D$
1730 GOSUB1840
1740 GOSUB1270
1750 IFJ=0THENPRINT"[206]O[160][194]AD[160][194]LOCKS!":FORI=1TO3000:NEXT:GOTO 990
1760 OPEN2,DN,2,"#"
1770 PRINT"[194]AD[160][194]LOCKS","[212]RACK","[211]ECTOR"
1780 FORI=0TOJ-1
1790 PRINT#15,"B-A:";D$,T(I);S(I)
1800 PRINT,,T(I),S(I)
1810 NEXT
1820 PRINT""J"[194]AD BLOCKS HAVE BEEN ALLOCATED!"
1830 CLOSE2:FORI=1TO3000:NEXT:GOTO 990
1840 INPUT#15,EN,EM$,ET,ES
1850 IFEN=0THENRETURN
1860 PRINT"[197]RROR #"EN,EM$;ET;ES""
1870 PRINT#15,"I"D$
1880 GOTO 990
1890 PRINT"[147]PROGRAM MERGER"
1900 DIM A$(2),B$(2),C$(2),N(2)
1910 OPEN 15,8,15
1920 INPUT"PROGRAM 1";X$
1930 OPEN 1,8,2,X$+",P,R"
1940 INPUT#15,E,E$,E1,E2
1950 IF E THENPRINT E$:CLOSE 15:END
1960 GET#1,A$,A$:J=1:GOSUB2210
1970 INPUT"PROGRAM 2 (OR 'N')";X$
1980 IF X$="N"THEN N(2)=1E9:GOTO2030
1990 OPEN 2,8,3,X$+",P,R"
2000 INPUT#15,E,E$,E1,E2
2010 IF E THENPRINT E$:CLOSE 15:END
2020 GET#2,A$,A$:J=2:GOSUB2210
2030 INPUT"NEW FILE";X$
2040 OPEN 8,8,8,"0:"+X$+",P,W"
2050 INPUT#15,E,E$,E1,E2
2060 IF E THENPRINT E$:CLOSE 15:FORI=1TO500:NEXTI:GOTO3530
2070 PRINT#8,CHR$(1);CHR$(4);
2080 REM
2090 X=2
2100 IF N(1)<N(2)THEN X=1
2110 N=N(X):IF N>1E8 THEN 2170
2120 PRINT#8,CHR$(1);CHR$(1);A$(X);B$(X);C$(X);CHR$(0);
2130 FOR J=1TO2
2140 IF N(J)=N THEN GOSUB 2210
2150 NEXT J
2160 GOTO 2090
2170 PRINT#8,CHR$(0);CHR$(0);
2180 CLOSE 1:CLOSE 2:CLOSE 8:CLOSE 15
2190 END
2200 REM
2210 GET#J,A$,B$
2220 IF A$="" AND B$="" THEN 2330
2230 GET#J,A$(J),B$(J)
2240 IF A$(J)="" THEN A$(J)=CHR$(0)
2250 IF B$(J)="" THEN B$(J)=CHR$(0)
2260 N(J)=ASC(A$(J))+ASC(B$(J))*256
2270 C$(J)=""
2280 GET#J,A$
2290 IF A$="" THEN 2340
2300 C$(J)=C$(J)+A$
2310 IF ST=0 AND LEN(C$(J))<254 THEN 2280
2320 PRINT"PROBLEM FILE";J
2330 N(J)=1E9
2340 RETURN
2350 POKE53280,0:POKE53281,0:PRINT"":OPEN9,0,0:OPEN15,8,15
2360 PK=PEEK(59468):POKE59468,12
2370 MD$="":FORI=1TO20:MD$=MD$+"":NEXT
2380 FORI=1TO39:BL$=BL$+" ":NEXT
2390 P0$="[147] DISK NAME CHANGER"
2400 RE$="PRESS RETURN[146] TO CONTINUE"
2410 GOTO2540
2420 INPUT#15,ER:IFER=0THENRETURN
2430 INPUT#15,ER,EM$,ET$,ES$
2440 PRINTMD$"DISK ERROR![146] #"ER" "EM$" "ET$", "ES$
2450 FORI=1TO500:NEXTI:GOTO3530
2460 INPUT#9,Q$:PRINT:Q1$=LEFT$(Q$,1):RETURN
2470 CLOSE2:CLOSE15:POKE59468,PK:PRINT"[147]":FORI=1TO500:NEXTI:GOTO3530
2480 PRINTLEFT$(MD$,MD)BL$:PRINTBL$
2490 PRINTLEFT$(MD$,MD);:RETURN
2500 MD=21:GOSUB2480
2510 PRINT"UNACCEPTABLE ENTRY -- "EM$(EM)
2520 PRINTRE$:GOSUB2460:GOSUB2480
2530 RETURN
2540 F=0:PRINTP0$
2550 PRINT"ON WHICH DRIVE FOR CHANGES? (0/1) ";:GOSUB2460
2560 DV=VAL(Q$):IFDV<0ORDV>1THENEM=1:GOSUB2500:GOTO2540
2570 IFDV=0ANDQ1$<>"0"THENEM=1:GOSUB2500:GOTO2540
2580 PRINTP0$:PRINT"PLACE DISKETTE IN DRIVE"DV""
2590 PRINTRE$:GOSUB2460
2600 PRINT#15,"I"+STR$(DV):GOSUB2420
2610 OPEN2,8,2,"#":PRINT#15,"U1:2";DV;",18,0":GOSUB2420
2620 PRINT#15,"B-P:2,144":GOSUB2420:DN$=""
2630 FORI=1TO16:GET#2,A$:DN$=DN$+A$:NEXT
2640 MD=10:GOSUB2480:IF F THEN RETURN
2650 PRINT"THE PRESENT DISK NAME IS:"
2660 PRINTTAB(5)CHR$(34)DN$CHR$(34)
2670 MD=13:GOSUB2480
2680 PRINT"DO YOU WISH TO CHANGE IT? (Y/N) ";:GOSUB2460
2690 IFQ1$="N"THEN2890
2700 IFQ1$<>"Y"THEN2670
2710 MD=16:GOSUB2480
2720 PRINT"ENTER NEW DISK NAME":PRINT"LIMIT TO 16 CHARACTERS "
2730 GOSUB2460:IFLEN(Q$)>16THENEM=2:GOSUB2500:MD=18:GOSUB2480:GOTO2730
2740 NDN$=LEFT$(Q$+BL$,16)
2750 MD=21:GOSUB2480
2760 PRINT"SHALL I SEND "NDN$
2770 PRINT"TO THE DISKETTE ON DRIVE"DV"? (Y/N) ";:GOSUB2460
2780 IFQ1$="Y"THEN2810
2790 IFQ1$<>"N"THENGOSUB2480:MD=18:GOSUB2480:GOTO2710
2800 GOTO2750
2810 MD=21:GOSUB2480:PRINT"BE PATIENT..."
2820 PRINT#15,"B-P:2,144":GOSUB2420
2830 PRINT#2,NDN$;:GOSUB2420
2840 PRINT#15,"U2:2";DV;",18,0":GOSUB2420
2850 PRINT#15,"I"+STR$(DV):GOSUB2420:CLOSE2
2860 F=1:PRINTP0$:GOSUB2600:F=0
2870 PRINT"THE NEW DISK NAME IS:"
2880 PRINTCHR$(34)DN$CHR$(34)
2890 CLOSE2:MD=21:GOSUB2480:PRINT"DO YOU WISH TO DO"
2900 PRINT"ANOTHER DISKETTE? (Y/N) ";:GOSUB2460
2910 IFQ1$="Y"THEN2580
2920 IFQ1$="N"THEN2470
2930 GOTO2890
2940 POKE53281,0:POKE53280,0:PRINT""
2950 PRINT"[147] S O R T D I R "
2960 DIM DR$(145),S(20),NM$(145)
2970 OPEN15,8,15
2980 OPEN5,8,5,"#"
2990 S(1)=1:DE=0:REM SECTOR 1. DIRECTORY ENTRY 0
3000 I=1
3010 PRINT#15,"U1:";5;0;18;S(I)
3020 PRINT"READING SECTOR: "S(I)
3030 I=I+1
3040 GET#5,T$
3050 GET#5,S$:S(I)=ASC(S$+CHR$(0))
3060 FORQ=1TO8:I$=""
3070 DE=DE+1:DR$(DE)=""
3080 FORR=1TO30
3090 GET#5,I$
3100 IFI$=""THENI$=CHR$(0)
3110 DR$(DE)=DR$(DE)+I$
3120 NEXT R
3130 IFQ<>8THENGET#5,NG$,NG$
3140 NEXT Q
3150 IFS(I)<21THEN 3010
3160 GOSUB 3480
3170 PRINT"CONVERTING FILE NAMES......"
3180 FOR X=1TODE
3190 NM$(X)=LEFT$(DR$(X),1)+MID$(DR$(X),4,16)
3200 FORP=2TO17
3210 IFMID$(NM$(X),P,1)=CHR$(160)THENNM$(X)=MID$(NM$(X),1,P-1):GOTO3230
3220 NEXT P
3230 NEXT X
3240 PRINT"SORTING.......";
3250 FOR X=1TO DE-1
3260 IFNM$(X)>NM$(X+1)THEN3300
3270 Z$=STR$(DE-X-1):Z$=Z$+" ":Z$=LEFT$(Z$,3):PRINT"[157][157][157]"Z$;
3280 NEXT X
3290 PRINT:GOTO 3340
3300 HO$=DR$(X):DR$(X)=DR$(X+1):DR$(X+1)=HO$
3310 HO$=NM$(X):NM$(X)=NM$(X+1):NM$(X+1)=HO$
3320 X=X-1:IFX<1THENX=1
3330 GOTO 3260
3340 GOSUB 3480
3350 W=I-1:DW=0
3360 FOR I=1TOW:PRINT#15,"B-P:";5;0
3370 TT=18:IFS(I+1)=255THENTT=0
3380 PRINT#5,CHR$(TT);CHR$(S(I+1));
3390 FOR Q=1TO8:DW=DW+1
3400 PRINT#5,DR$(DW);
3410 IFQ<>8THENPRINT#5,"CD";
3420 NEXT Q
3430 PRINT#15,"U2:";5;0;18;S(I)
3440 PRINT"WRITING SECTOR: "S(I)
3450 NEXT I
3460 PRINT"D O N E "
3470 CLOSE5:CLOSE15:GOTO 3530
3480 PRINT"[147]":FOR Q=1TODE
3490 IFMID$(DR$(Q),1,1)=CHR$(0)THEN3510
3500 PRINTMID$(DR$(Q),4,16)
3510 NEXT Q
3520 RETURN
3530 PRINT"[147][158]":POKE53281,2:POKE53280,2
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]:"
3550 PRINT"[205]ERGE TWO PROGRAMS................1"
3560 PRINT"[195]HANGE DISK HEADER................2"
3570 PRINT"[195]HECK DISK FOR POSSIBLE FLAWS.....3"
3580 PRINT"[211]ORT THE DISK DIRECTORY...........4"
3590 PRINT"[197]XIT TO MAIN MENU.................5"
3600 PRINT"[212]OUCH[160][217]OUR[160][195]HOICE"
3610 GETA$:IFA$=" "THEN3610
3620 A=VAL(A$):ONAGOTO1890,2350,1450,2940,980
3630 GOTO3610