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"