Home » Personal collection » Commodore disks » disk46a_green.d64 » disc utility
disc utility
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Personal collection » Commodore disks » disk46a_green.d64 |
Filename: | disc utility |
Read OK: | ✔ |
File size: | 1CF6 bytes |
Load address: | 0801 |
Exec address: | 0000 |
File contents
100 POKE53272,23:POKE53280,6:DIMA$(10,0),T$(5) 110 FORI=0TO5:READT$(I):NEXTI 120 DATA DEL,SEQ,PRG,USR,REL,??? 130 PRINT"<clr>🭷╮♥🭸 ╭🭰╮🭼╮🭰🭵":PRINT"<cursor down><reverse on>╱<rev off> ╱EW DISC"TAB(20);"<reverse on>🭴<rev off> 🭸HANGE HEADER" 140 PRINT"<cursor down><reverse on>╳<rev off> ╳ALIDATE DISC";TAB(20);"<reverse on>🭷<rev off> 🭷IRECTORY" 150 PRINT"<cursor down><reverse on>🭰<rev off> 🭰RACE FILE";TAB(20);"<reverse on>♥<rev off> ♥CRATCH FILE(S)" 160 PRINT"<cursor down><reverse on>🭻<rev off> 🭻ENAME FILE";TAB(20);"<reverse on>🭶<rev off> 🭻EAD DISC ERROR" 170 PRINT"<cursor down><reverse on>🭻<rev off> 🭸OPY FILE";TAB(20);"<reverse on>♠<rev off> ♠PPEND FILES" 180 PRINT"<cursor down><reverse on>🭲<rev off> 🭲ACKUP FILE";TAB(20);"<reverse on>╲<rev off> ╲OD/DISP BLOCKS" 190 PRINT"<cursor down><reverse on>╮<rev off> ╮NITIALISE DISC";TAB(20);"<reverse on>♣<rev off> 🭶XIT" 200 GOSUB2360 210 IF Y$="N" THEN GOSUB530:GOTO130 220 IF Y$="V" THEN GOSUB580:GOTO130 230 IF Y$="R" THEN GOSUB620:GOTO130 240 IF Y$="S" THEN GOSUB670:GOTO130 250 IF Y$="E" THEN GOSUB740:GOTO130 260 IF Y$="A" THEN GOSUB360:GOTO130 270 IF Y$="C" THEN GOSUB840:GOTO130 280 IF Y$="D" THEN GOSUB890:GOTO130 290 IF Y$="H" THEN GOSUB1240:GOTO130 300 IF Y$="X" THEN END 310 IF Y$="M" THEN GOSUB1400:GOTO130 320 IF Y$="I" THEN GOSUB1740:GOTO130 330 IF Y$="T" THEN GOSUB1760:GOTO130 340 IF Y$="B" THEN GOSUB2130:GOTO130 350 GOTO 130 360 REM APPEND 370 PRINT"<clr>♠🭾🭾🭶╱🭷<cursor down>":PRINT"<reverse on>🭾<rev off> 🭾🭻🭱 FILES<cursor down>":PRINT"<cursor down><reverse on>♥<rev off> ♥🭶● FILES" 380 GOSUB2360:IF Y$<>"P" AND Y$<>"S" THEN 520 390 IF Y$="S" THEN GOSUB770:RETURN 400 REM PRG FILES 410 PRINT"<cursor down>♠PPEND 🭾🭻🭱 FILES - SURE (🭵/╱)":GOSUB2360:IF Y$<>"Y" THEN 520 420 INPUT"<cursor down>🭸OMBINED FINAL PRODUCT";F$:INPUT" 🭺IRST 🭾🭻🭱";X1$ 425 INPUT" ♥ECOND 🭾🭻🭱";X2$ 430 OPEN 3,8,3,"0:"+F$+",P,W":OPEN 2,8,2,"0:"+X1$+",P,R" 440 GET#2,Y$ 450 X$=Y$:GET#2,Y$:IFST<>0THEN470 460 GOSUB 2330:PRINT#3,X$:GOTO450 470 CLOSE 2:OPEN 2,8,2,"0:"+X2$+",P,R" 480 GET#2,Y$:GET#2,Y$ 490 GET#2,X$:IFST<>0THEN510 500 GOSUB2330:PRINT#3,X$;:GOTO490 510 CLOSE2:PRINT#3,CHR$(0);:CLOSE3 520 RETURN 530 REM NEW DISC 540 PRINT"<cursor down>╱EW DISC - SURE (🭵/╱)":GOSUB2360:IFY$<>"Y"THEN570 550 INPUT"<cursor down>╱AME";F$:INPUT"╮.🭷.";Y$:F$=LEFT$(F$,16)+","+LEFT$(Y$,2) 560 OPEN15,8,15,"N0:"+F$:CLOSE15 570 RETURN 580 REM VALIDATE 590 PRINT"<cursor down>VALIDATE - SURE (🭵/╱)":GOSUB2360:IFY$<>"Y"THEN570 600 OPEN 15,8,15,"V":CLOSE15 610 RETURN 620 REM RENAME 630 PRINT"<cursor down>🭻ENAME - SURE (🭵/╱)":GOSUB2360:IF Y$<>"Y" THEN 610 640 INPUT"<cursor down>🭽LD NAME";F$:INPUT"╱EW NAME";Y$:F$="R0:"+Y$+"="+F$ 650 OPEN 15,8,15,F$:CLOSE15 660 RETURN 670 REM SCRATCH FILE 680 PRINT"<cursor down>♥CRATCH - SURE (🭵/╱)":GOSUB2360:IF Y$<>"Y" THEN 730 690 F$="":PRINT"<cursor down>╭SE * OR ? FOR PATTERN MATCHING" 700 PRINT"🭴IT RETURN TO DELETE<cursor down>" 710 INPUT"🭷ELETE";Y$:IFY$<>""THEN F$=F$+","+Y$:Y$="":GOTO710 720 F$="S0:"+MID$(F$,2):OPEN 15,8,15,F$:CLOSE15 730 RETURN 740 REM ERROR 750 OPEN 15,8,15:INPUT#15,X$,F$,X1$,X2$:CLOSE15:PRINT"<cursor down>🭶🭻🭻🭽🭻:";X$,F$,X1$,X2$ 760 GOSUB2360:RETURN 770 REM APPEND SEQ FILES 780 PRINT"<cursor down>♠PPEND ♥🭶● FILES - SURE (🭵/╱)":GOSUB2360:IFY$<>"Y"THEN830 790 PRINT"<cursor down>🭴IT RETURN TO APPEND<cursor down>" 800 F$="":INPUT" NEW";X$ 810 INPUT"♠PPEND";Y$:IFY$<>""THENF$=F$+","+"0:"+Y$:Y$="":GOTO810 820 F$="C0:"+X$+"="+MID$(F$,2):OPEN15,8,15:PRINT#15,F$ 830 CLOSE15:RETURN 840 REM COPY SAME DISC 850 PRINT"<cursor down>🭸OPY - SURE (🭵/╱)":GOSUB2360:IF Y$<>"Y" THEN 880 860 INPUT"<cursor down>╱EW";F$:INPUT"🭽LD";Y$:F$="C0:"+F$+"="+"0:"+Y$ 870 OPEN 15,8,15,F$ 880 CLOSE15:RETURN 890 REM DIRECTORY 900 PRINT"<cursor down>🭷IRECTORY - SURE (🭵/╱)":GOSUB2360:IFY$<>"Y"THEN1230 910 OPEN 15,8,15:OPEN 1,8,2,"#":T=18:S=0:F$="":BF=0:BU=0 920 PRINT#15,"U1";2;0;T;S;:PRINT#15,"B-P";2;144:PRINT"<clr>";TAB(10);"<reverse on>"; 930 FORI=1TO16:GET#1,X$:GOSUB2290:PRINTX$;:NEXTI:PRINT","; 940 PRINT#15,"B-P";2;162 950 FORI=1TO2:GET#1,X$:GOSUB2290:PRINTX$;:NEXTI:PRINT"<rev off><black>":T=18:S=1 960 PRINT"$🭲🭼╯ 🭺╮🭼🭶 🭰🭵🭾🭶 $🭰╯ $♥🭰 $♠🭷🭷<light blue>" 970 PRINT#15,"U1";2;0;T;S:I=0:X=S:GOSUB2200:PRINT"<black>🭰🭻╯ 12";" ♥🭸🭰 ";X$;"<light blue>" 980 GET#1,X$:GOSUB2330:T=ASC(X$):GET#1,X$:GOSUB2330:S=ASC(X$) 990 I=I+1:PRINT#15,"B-P";2;(I-1)*32+2:GET#1,X$:GOSUB2330:X=ASC(X$):Y$="" 1000 FORJ=0TO5:IFX=JTHENY$=T$(J) 1010 IFJ=0THENX=X-128 1020 NEXTJ:IFY$=""THENY$=T$(5) 1030 GET#1,X$:GOSUB2330:X=ASC(X$):GOSUB2200:T$=X$ 1040 GET#1,X$:GOSUB2330:X=ASC(X$):GOSUB2200:S$=X$ 1050 FORJ=1TO16:GET#1,X$:GOSUB2290:F$=F$+X$:NEXTJ 1060 IFY$<>"PRG"THEN1090 1070 OPEN 3,8,3,F$+",S,P":GET#3,X$:GOSUB2330:X=ASC(X$):GOSUB2200:I$=X$ 1080 GET#3,X$:GOSUB2330:X=ASC(X$):GOSUB2200:I$=X$+I$:CLOSE3 1090 PRINT#15,"B-P";2;(I-1)*32+30 1100 GET#1,X$:GOSUB2330:J=ASC(X$) 1110 GET#1,X$:GOSUB2330:K=ASC(X$) 1120 X=K:GOSUB2200:BF$=X$:X=J:GOSUB2200:BF$=BF$+X$ 1130 BU=BU+256*K+J:IFY$<>"DEL"THENBF=BF+256*K+J 1140 PRINTBF$;" ";F$;" ";Y$;" ";T$;" ";S$;" ";I:BF$="":F$="":I$="" 1150 GETY$:IFY$<>""THENGOSUB2360 1160 IF I<8 THEN 990 1170 IF T<>0 THEN 970 1180 BF=664-BF:X=BF/256:GOSUB2200:Y$=X$:X=BF-256:GOSUB2200:Y$=Y$+X$ 1190 PRINT"<yellow>";Y$;" BLOCKS FREE<light blue>" 1200 BU=664-BU:X=BU/256:GOSUB2200:Y$=X$:X=BU-256:GOSUB2200:Y$=Y$+X$ 1210 PRINT"<yellow>";Y$;" BLOCKS FREE INC DEL FILES<light blue>" 1220 GOSUB2360:CLOSE15:CLOSE1 1230 RETURN 1240 REM CHANGE HEADER 1250 PRINT"<cursor down>🭸HANGE HEADER - SURE (🭵/╱):GOSUB2360:IFY$<>"Y" THEN 1390 1260 OPEN 15,8,15:OPEN 1,8,2,"#":T=18:S=0:BF=0:F$="" 1270 PRINT#15,"U1";2;0;T;S;:PRINT#15,"B-P";2;144:PRINT"<cursor down>🭸URRENT: "; 1280 FORI=1TO16:GET#1,X$:GOSUB2290:PRINTX$;:NEXTI:PRINT","; 1290 PRINT#15,"B-P";2;162 1300 FORI=1TO2:GET#1,X$:GOSUB2290:PRINTX$;:NEXTI:PRINT 1310 INPUT" ╱AME";F$:F$=LEFT$(F$+" ",16) 1320 INPUT" ╮.🭷.";Y$:Y$=LEFT$(Y$+"XX",2) 1330 PRINT#15,"B-P";2;144 1340 FORI=1TO16:PRINT#1,MID$(F$,I,1);:NEXTI 1350 PRINT#15,"B-P";2;162 1360 PRINT#15,"B-P";2;162 1370 FORI=1TO2:PRINT#1,MID$(Y$,I,1);:NEXTI 1380 PRINT#15,"U2";2;0;T;S:CLOSE15:CLOSE1 1390 RETURN 1400 REM MODIFY AND DISPLAY BLOCKS 1410 PRINT"<cursor down>╲ODIFY AND 🭷ISPLAY BLOCKS - SURE (🭵/╱)":GOSUB2360:IFY$<>"Y"THEN1670 1420 OPEN 15,8,15:OPEN 1,8,2,"#":F$="" 1430 INPUT"<cursor down> 🭰RACK<cursor right>$<cursor left><cursor left>";T$:X$=T$:GOSUB2250:T=X:IFX<0 OR X>40 THEN 1430 1440 INPUT"♥ECTOR<cursor right>$<cursor left><cursor left>";S$:X$=S$:GOSUB2250:S=X:IFX<0 OR X>20 THEN 1430 1450 PRINT#15,"U1";2;0;T;S;:PRINT#15,"B-P";2;0 1460 GET#1,X$:GOSUB2330:X=ASC(X$):TN=X:GOSUB2200:TN$=X$ 1470 GET#1,X$:GOSUB2330:X=ASC(X$):SM=X:GOSUB2200:SN$=X$ 1480 NT$=" ╱🭶♣🭰:🭰🭻♠🭸╯ "+TN$+" ♥🭶🭸🭰🭽🭻 "+SN$ 1490 CT$="🭸╭🭻🭻🭶╱🭰:🭰🭻♠🭸╯ "+T$+" ♥🭶🭸🭰🭽🭻 "+S$ 1500 PRINT"<clr>";CT$:PRINTNT$ 1510 PRINT#15,"B-P";2;0 1520 FORI=0TO15:F$="":X=I*8:GOSUB2200:PRINTX$;" ";:FORJ=0TO7 1530 GET#1,X$:Y$=X$:GOSUB2330:X=ASC(X$):GOSUB2200:PRINTX$;" ";: 1540 X$=Y$:GOSUB2290:F$=F$+X$:NEXTJ:PRINTF$:NEXTI 1550 GOSUB1680:IFY$="Y"THEN1500 1560 PRINT"<clr>";CT$:PRINTNT$ 1570 PRINT#15,"B-P";2;128 1580 FORI=16TO31:F$="":X=I*8:GOSUB2200:PRINTX$;" ";:FORJ=0TO7 1590 GET#1,X$:Y$=X$:GOSUB2330:X=ASC(X$):GOSUB2200:PRINTX$;" ";: 1600 X$=Y$:GOSUB2290:F$=F$+X$:NEXTJ:PRINTF$:NEXTI 1610 GOSUB1680IFY$="Y"THEN1560 1620 PRINT"🭻EVIEW AGAIN":GOSUB2360:IFY$="Y" THEN 1500 1630 PRINT"○RITE CHANGES":GOSUB2360:IFY$="Y"THENPRINT#15,"U2";2;0;T,S 1640 IFY$="Y"THENPRINT#15,"B-A";0;T;S:GOSUB2390 1650 PRINT"╱EXT 🭰/♥":GOSUB2360:IFY$="Y"THENT=TN:S=SN:T$=TN$:S$=SN$:GOTO1450 1660 CLOSE1:CLOSE15 1670 RETURN 1680 REM ANY CHANGES 1690 PRINT"♠NY CHANGES":GOSUB2360:IFY$<>"Y"THEN1730 1700 OPEN 9,0:INPUT#9,A$:CLOSE9 1710 X$=LEFT$(A$,2):GOSUB2250:PRINT#15,"B-P";2,X 1720 FORI=0TO7:X$=MID$(A$,4+I*3,2):GOSUB2250:PRINT#1,CHR$(X);:NEXTI 1730 RETURN 1740 REM INITIALIZE DISC 1750 OPEN 15,8,15,"I0":CLOSE15:RETURN 1760 REM TRACE FILE 1770 PRINT"<cursor down>🭰RACE FILE - SURE (🭵/╱)":GOSUB2360:IFY$<>"Y"THEN2120 1780 INPUT"<cursor down>🭺ILENAME";BF$ 1790 OPEN15,8,15:OPEN1,8,2,"#":T=18:S=1:F$="" 1800 PRINT#15,"U1";2;0;T;S:I=0:F$="" 1810 GET#1,X$:GOSUB2330:T=ASC(X$):GET#1,X$:GOSUB2330:S=ASC(X$) 1820 I=I+1:PRINT#15,"B-P";2;(I-1)*32+2:GET#1,X$:GOSUB2330:X=ASC(X$):Y$="" 1830 FORJ=0TO5:IFX=JTHENY$=T$(J) 1840 IFJ=0THENX=X-128 1850 NEXTJ:IFY$=""THENY$=T$(5) 1860 GET#1,X$:GOSUB2330:X=ASC(X$):GOSUB2200:T$=X$ 1870 GET#1,X$:GOSUB2330:X=ASC(X$):GOSUB2200:S$=X$ 1880 F$="":FORJ=1TO16:GET#1,X$:GOSUB2290:F$=F$+X$:NEXTJ 1890 IF LEFT$(F$,LEN(BF$))=BF$ THEN 1930 1900 IFI=8ANDT>0THEN1800 1910 GOTO1820 1920 IF T=0 THEN 2120 1930 PRINT"<clr><reverse on>🭰RACE OF<rev off> ";BF$;" FILE TYPE ";Y$:PRINT:FT$=Y$:NO=0 1940 IF FT$="DEL" THEN PRINT"🭻ECOVER FILE (🭵/╱)":GOSUB2360 1950 PRINT#15,"B-P";2;(I-1)*32+3 1960 GET#1,X$:GOSUB2330:T=ASC(X$):GET#1,X$:GOSUB2330:S=ASC(X$) 1970 X=T:GOSUB2200:T$=X$:X=S:GOSUB2200:S$=X$ 1980 PRINT"🭰RACK ";T$;" ♥ECTOR ";S$ 1990 IF Y$<>"Y" THEN 2030 2000 PRINT#15,"B-A";0;T;S:INPUT#15,E:IFE<>65 THEN 2030 2010 PRINT"🭻ECOVERY NOT POSSIBLE, BECAUSE A" 2020 PRINT"FREE BLOCK IS ALLOCATED.":NO=1 2030 PRINT#15,"U1";2;0;T;S 2040 GET#1,X$:GOSUB2330:T=ASC(X$):GET#1,X$:GOSUB2330:S=ASC(X$) 2050 IF T=0 THEN 2070 2060 GOTO 1970 2070 IF FT$="DEL" AND Y$="Y" AND NO=0 THEN 2090 2080 GOTO 2110 2090 PRINT"🭻ECOVERY 🭽KAY. 🭻EMEMBER TO CHANGE" 2100 PRINT"DIRECTORY, TRACK, AND FILE TYPE" 2110 GOSUB 2360 2120 CLOSE 1:CLOSE 15:RETURN 2130 REM BACKUP 2140 PRINT:PRINT"🭲♠🭸╯╭🭾 🭺╮🭼🭶" 2150 PRINT:PRINT"🭰O ALLOW LARGER FILES TO BE BACKED UP" 2160 PRINT"ON BOTH DISC AND CASSETTE, THERE IS A" 2170 PRINT"SEPERATE UTILITY ON THE DISC. 🭼OAD" 2180 PRINT"BACKUP-MC, AND RUN IT. THEN LOAD BACKUP." 2190 GOSUB2360:RETURN 2200 REM DECIMAL - HEXIDECIMAL 2210 X=X AND 255:X1=INT(X/16):X2=X AND 15 2220 X1$=CHR$(48+X1):IF X1>9 THEN X1$=CHR$(55+X1) 2230 X2$=CHR$(48+X2):IF X2>9 THEN X2$=CHR$(55+X2) 2240 X$=X1$+X2$:RETURN 2250 REM HEXIDECIMAL - DECIMAL 2260 X$=RIGHT$("00"+X$,2) 2270 X1=ASC(X$)-48:X2=ASC(MID$(X$,2))-48 2280 X=16*(X1+7*(X1>9))+X2+7*(X2>9):RETURN 2290 REM CONVERT TO ASCII 2300 IF X$=CHR$(160) THEN 2320 2310 IF X$<" " OR X$>"Z" THEN X$="." 2320 RETURN 2330 REM ELIMINATE NULL STRING 2340 IF X$="" THEN X$=CHR$(0) 2350 RETURN 2360 REM WAIT 2370 GET Y$:IFY$="" THEN 2370 2380 RETURN 2390 REM ERROR ON B-A CHECK 2400 INPUT#15,EN$,EM$,ET$,ES$:IF EN$<"20" OR EN$="65" THEN RETURN 2410 CLOSE 15:PRINT:PRINTEN$,EM$,ET$,ES$:GOSUB2360:RUN
(d �53272,23:�53280,6:�A$(10,0),T$(5) =n �I�0�5:�T$(I):�I [x � DEL,SEQ,PRG,USR,REL,??? �� �"����� �������":�"Β �EW DISC"�20);"Ȓ �HANGE HEADER"