Listing of file='@TO.DISK' on disk='vmedia/731-8009-F.wvd.zip'
# Sector 364, program filename = '@TO.DISK'
0010 REM %.@TO.DISK 01/20/89-- Disk to Disk --
0011 DEFFN'31"RESAVE DC T ";HEX(22);"@TO.DISK";HEX(22);"0,2999"
0012 PRINT HEX(03);AT(0,26);"*** DISK FILE COPY UTILITY ***"
0020 DIM T1$(250)1,S0$(8)124,X0$3,X0$(2)3,Z0$80,X0,Z1$8,K$1,M$2
0030 DIM D8$80,N$8,N1$80,D$(16)16,S$3,Q$1,F1$8
0035 REM .Create Ref file leaves E=#items, D$=Source disk, N$(E names)
0040 S8,D9=0
: F=E
: Z0$=" "
0045 IF D0<3THEN 56
: Z0$="From Disk.Image = "&F$
: SELECT #2<D$>
: LIMITS T#2,F$,S8,A,A,A
0050 DATA LOAD BA T#2,(S8)D$()
: AND (STR(D$(),2,1),7F)
: E9=VAL(STR(D$(),2,1))
0056 PRINT AT(1,40-LEN(Z0$)/2);Z0$;AT(2,35);F;"files"
: X0$(1)=D$
0063 REM X0 contains processing mode
: REM X0=1 => Copy Only
: REM X0=2 => Copy & Verify
0070 REM Print Menu
: REM Reset Restore Flag
: Z1$="JUNK0000"
: S,X1,N=0
: GOSUB '50(S9$," ")
0080 ON R1+2GOTO 100,100,112
0090 STOP "screen not found ? "#
0100 REM Cancel; SHIFT Cancel
: GOSUB '60("(terminated)",23,0,80)
0105 LOAD RUN T"START"
: ERRORGOSUB '60(" ",23,0,80)
: GOTO 70
0112 IF X0$(1)<>" " THEN 113
: REM no origin platter selected
: S9$=HEX(F218010132F902)
: GOTO 120
0113 IF X0$(2)<>" " THEN 130
: REM no destination platter selected
: S9$=HEX(F218010132F903)
0120 PRINT HEX(07);
: GOSUB '60("Information Required",23,0,80)
: GOTO 70
0130 GOSUB '100(X0$(1))
: X0$(1)=S$
: IF Q$=" "THEN 150
0140 PRINT HEX(07);
: GOSUB '60("Invalid Device Address",23,0,80)
: S9$=HEX(F218010132F902)
: GOTO 70
0150 GOSUB '100(X0$(2))
: X0$(2)=S$
: IF Q$=" "THEN 163
0160 PRINT HEX(07);
: GOSUB '60("Invalid Device Address",23, 0,80)
: S9$=HEX(F218010132F903)
: GOTO 70
0163 IF X0$(1)<>X0$(2)THEN 165
: IF D0>1THEN 165
: PRINT HEX(07);
: GOSUB '60("Duplicate Device Address",23, 0,80)
: S9$=HEX(F218010132F902)
: GOTO 70
0165 REM #1 => Origin
: SELECT #1<X0$(1)>
: $OPEN #1
: ERRORGOTO 140
0166 REM #2 => Destination
: $CLOSE#1
: SELECT #2<X0$(2)>
: $OPEN #2
: ERRORGOTO 160
0167 $CLOSE#2
0168 PRINT AT(9,40);"Cat. Cur. Max."
: PRINT AT(10,40);
: DATA LOAD BA T#1,(S8,A)D$()
: ERRORINIT(00)D$()
0170 IF STR(D$(),,2)=HEX(0000)THEN 182
: GOSUB 190
: GOSUB 180
: GOTO 720
0180 PRINT AT(11,40);
: DATA LOAD BA T#2,(0,A)D$()
: ERRORINIT(00)D$()
0182 IF STR(D$(),,2)>HEX(0000)THEN 190
: PRINT HEX(06);"DISK ERROR: Unformatted or no catalog"
: PRINT AT(20,62,17);"RUN - Retry"
0185 KEYIN K$
: ON POS(HEX(50F0820D)=K$)+1GOTO 185
: PRINT AT(10,40,40)
: PRINT AT(11,40,40)
: GOTO 70
0190 PRINTUSING "### ##### #####",VAL(STR(D$(),2)),VAL(STR(D$(),3),2)-1,VAL(ST
R(D$(),5),2)-1
: RETURN
0720 REM
0730 GOSUB '60(" ",20,1,60)
: GOSUB '60(" ",21,0,80+50)
: GOSUB '60("Start Copy ?",23,0,80)
0740 KEYIN K$
: ON POS(HEX(8250F0)=K$)+1GOTO 740,2010
: GOSUB '60(" ",23,0,80)
: GOTO 70
1990 REM %^.Disk to Disk (file by file)
2000 %Processing File ### : ######## Sectors = ####
2010 REM Begin Installation
2020 GOSUB '60(" ",20,0,4*80)
2030 PRINT HEX(06);AT(18,1,80);
: PRINTUSING 2000;
: PRINT HEX(05);
2040 GOSUB '155
: IF N$=" " THEN 2090
2050 GOSUB '154(N$)
2070 PRINT AT(22,0,80)
: PRINT AT(23,0,80)
: N=N+1
: PRINT AT(18,0);HEX(020402000E06);
: PRINTUSING 2000,N,N$,B1-A1+1
: PRINT HEX(0F);AT(19,0,80);STR(N1$,10)
: GOSUB 2120
2080 GOSUB 180
: GOTO 2040
2090 GOSUB '60("Disk File Copy Complete, Please Press Cancel/Edit",23,0,80)
2100 KEYIN K$
: ON POS(HEX(50F0)=K$)+1GOTO 2100
: GOSUB '60(" ",18,0,60)
: GOSUB '60(" ",23,0,80)
: GOTO 70
2120 IF D0<>1THEN 2410
: MOVE T#1,N$TO T#2,
: ERRORX9=ERR
: GOTO 2170
2130 IF X0=1THEN RETURN
2140 LIMITS T#2,N$,A,B,C,D
: ERRORX9=ERR
: GOTO 2170
2150 VERIFY T#2,(A,B)E1
: ERRORX9=ERR
: GOTO 2170
2160 IF E1=0THEN RETURN
: GOTO 2320
2170 REM .Interrograte error on initial attempt to move file
: ON X9-80GOTO 2240,2210,2180
: REM .81=Already catalogued 82=not on source 83=no room on platter
: GOTO 2300
2180 REM already catalogued
: SCRATCH T#2,N$
: ERRORX9=ERR
: GOTO 2300
2190 PRINT AT(18,0,10);"Replacing"
: MOVE T #1,N$TO T#2,()
: ERRORX9=ERR
: IF X9=81 THEN 2270
: IF X9=82 THEN 2210
: GOTO 2300
2200 GOTO 2130
2210 REM not at origin
: PRINT HEX(07);
: GOSUB '60("File not found on origin platter",22,0,80)
: GOTO 2245
2240 REM no room on destination platter
: PRINT HEX(07);
: GOSUB '60("No room on destination platter",22,0,80)
2245 GOSUB '60("Load new disk and press RUN or Cancel/Edit to Abort",23,0,80)
2250 KEYIN K$
: ON POS(HEX(8250F0)=K$)+1GOTO 2250,2260
: GOTO 2340
2260 GOSUB '60(" ",22,0,80*2)
: GOTO 2120
2270 REM insufficient room in old file space
: SAVE T#2,(N$)Z1$0,0
: ERRORX9=ERR
: IF X9<>83THEN 2300
: CONVERT STR(Z1$,5)TO E1
: CONVERT E1+1TO STR(Z1$,5),(####)
: IF E1>9999 THEN 2300
: GOTO 2270
2280 SCRATCH T#2,Z1$
: ERRORX9=ERR
: GOTO 2300
2290 GOTO 2120
2300 N=N-1
: RETURN CLEAR
: PRINT HEX(07);
: GOSUB '60("DISK ERROR -" ,22,0,80)
: Z0$=ERR$(X9)
: PRINT HEX(0E);X9;Z0$;HEX(0F);
: GOSUB '60("RUN - Retry CANCEL - Exit",23,0,80)
2310 KEYIN K$
: ON POS(HEX(8250F0)=K$)+1GOTO 2310, 2050
: PRINT AT(18,0,6*80)
: GOTO 70
2320 RETURN CLEAR
: PRINT HEX(07);
: GOSUB '60("MOVE FILE ABORTED, PLEASE CANCEL - VERIFY ERROR SECTOR",23,0,8
0)
: PRINT HEX(0E);E1;HEX(0F);
2330 KEYIN K$
: ON POS(HEX(50F0)=K$)+1GOTO 2310
2340 GOSUB '60(" ",18,0,80)
: GOSUB '60(" ",22,0,2*80)
: GOTO 70
2400 REM %^.Img to Disk (file by file)
: REM .MOVE T #1, TO T#2
2410 REM .#1 N$ LIMITS in A1,B1,C1,D1
: REM %0 C #1 sectors
: C=B1-A1+1
2420 LIMITS T#2,N$,A,B,D,D
: ERRORX9=ERR
: GOTO 2300
2430 IF D<>0THEN 2460
2440 REM .None on destination -- Make one
: DATA SAVE DC OPEN T#2,(C)N$
: ERRORX9=ERR
: GOTO 2170
2450 GOTO 2420
2460 REM .Is there room enuf?
: IF C>B-A+1THEN 2270
: REM /.no
2480 REM %.Move file
: PRINT AT(18,0,10);"Replacing"
: COPY T#1,(A1,A1+C)TO T#2,(A)
2490 REM .Make index item
: IF D1=1THEN K$=HEX(80)
: ELSE K$=HEX(00)
: I$=HEX(10)&K$&BIN(A,2)&BIN(A+C-1,2)&HEX(0000)&N$
2500 IF I9>0THEN 2510
: DATA LOAD BA T#2,(0,X)D$()
: I9=VAL(STR(D$(),2))
: IF I9=0THEN STOP "Index error "#
2510 FOR X=0TO I9
: DATA LOAD BA T#2,(X,C)D$()
: FOR C=1TO 16
: IF STR(D$(C),9,8)=STR(N$,,8)THEN 2520
: NEXT C
: NEXT X
: STOP "Item not found in index "#
2520 D$(C)=I$
: DATA SAVE BA T#2,(X)D$()
2525 C=16
: NEXT C
: X=I9
: NEXT X
2530 RETURN