Listing of file='@DOSCOPY' on disk='vmedia/731-8028.wvd.zip'
# Sector 175, program filename = '@DOSCOPY'
0010 REM %^ @DOSCOPY UTILITY BY KIRIT BAXI EAME R&D
0020 REM % Version 1.0 20 JUN 1991
0030 REM ***********************************************
0040 REM * *
0050 REM * COPY Program *
0060 REM * *
0070 REM ***********************************************
0100 REM % DEFINE VARIABLES
0110 DIM A$(16)32,B$(16)32,D$(16),B$4,C$16,D$3,E$4,F$11,G$2,H$8,K$1,J$12,J1$12
,L$2,M$4,N$1,O$1,P$1,Q$1,V$11,X$1
: PRINT HEX(02050F)
: IF N=2THEN Q$="A"
: IF N=3THEN Q$="B"
0120 IF STR(I2$,1,12)=" "THEN I2$=I1$
0130 REM % File name to copy from J$
: C$=ALL(00)
: MAT SEARCHI1$,=":"TO C$
: C=VAL(C$,2)
: IF C=0THEN DO
: J$=I1$
: END DO
0140 IF C<>0THEN DO
: IF LEN(I1$)>2THEN J$=STR(I1$,C+1)
: IF LEN(I1$)<3THEN J$=I1$
: IF STR(I1$,1,1)="A"THEN N=N1
: IF STR(I1$,1,1)="B"THEN N=N2
: IF N=2THEN X$="A"
: IF N0=3THEN X$="B"
: END DO
0150 REM % File name to copy to J1$
: C$=ALL(00)
: MAT SEARCHI2$,=":"TO C$
: C=VAL(C$,2)
: IF C=0THEN DO
: J1$=I2$
: END DO
0160 IF C<>0THEN DO
: IF LEN(I2$)>2THEN J1$=STR(I2$,C+1)
: IF LEN(I2$)=2THEN J1$=J$
: IF STR(I2$,1,1)="A"THEN N0=N1
: IF STR(I2$,1,1)="B"THEN N0=N2
: IF N0=2THEN X$="A"
: IF N0=3THEN X$="B"
: END DO
0170 IF STR(J1$,2,1)=":"THEN DO
: J1$=STR(I2$,3)
: END DO
0180 REM % Find limits of workfile
: LIMITS T#0,"workfile",A1,B1,C1,D1
: IF D1=0THEN DO
: DATA SAVE DC OPEN T#0,(4801)"workfile"
: LIMITS T#0,"workfile",A1,B1,C1,D1
: END DO
0190 PRINT " Insert Source diskette in drive '";Q$;"'";HEX(02050F)
0200 PRINT " Press ENTER to continue . . . ";
0210 KEYIN K$
: IF POS(HEX(7E7FF0)=K$)<>0THEN 480
: IF K$<>HEX(0D)THEN 210
: PRINT K$;
0220 REM % CHECK FOR DRIVE READY
: DATA LOAD BA T#N,(0)D$()
: ERRORE=ERR
: IF E=98THEN DO
: PRINT HEX(070E);"Please insert Diskette in Drive"
: END DO
: IF E=98THEN 480
0230 REM % FIND DISK TYPE AND SET OFFSET SECTOR
0240 DATA LOAD BMT#N,(1440,M)A$()
: ERRORE=ERR
: IF E=98THEN Y=10
: V=13
: GOTO 260
0250 DATA LOAD BMT#N,(4800,M)A$()
: ERRORE=ERR
: IF E=98THEN Y=30
: V=27
: GOTO 260
0260 A,B,C,D,D2=0
: IF Y=0THEN DO
: Y=10
: V=13
: END DO
0270 REM % Check if file exists
: E=0
: DATA LOAD ACOPEN T#N,J$
: ERRORE=ERR
0280 IF E<>0THEN PRINT HEX(070E);"Bad command or filename"
: IF E<>0THEN 480
0290 REM % Find the start sector
: LIMITS T#N,A2,B2,C2
0300 REM % SET START POINTER TO COPY TO
: L=A1
: REM % FIND NUMBER OF BYTES IN FILE
: GOSUB 620
: REM % NO OF BYTES
: A8=A9
0310 PRINT " Copying ";STR(J$,1,LEN(J$));" to ";STR(J1$,1,LEN(J1$))
0320 A$()=ALL(00)
: DATA LOAD AC#N,A$()
: IF END THEN 360
0330 DATA SAVE BMT#0,(L,L)A$()
0340 GOTO 320
0350 REM % COPY STARTS HERE!
0360 DATA SAVE BMT#0,(L,L)A$()
: DATA SAVE ACCLOSE#N
0370 REM % end pointer
: K=L
: IF N0=0THEN X$=Q$
: IF STR(I2$,2,1)=":"THEN 510
: PRINT " Insert output diskette in drive '";X$;"'";HEX(02050F)
0380 PRINT " Press ENTER to continue . . . ";
0390 KEYIN K$
: IF POS(HEX(7E7FF0)=K$)<>0THEN 480
: IF K$<>HEX(0D)THEN 390
: PRINT K$;
0400 REM % set start pointer for workfile
: L=A1
: REM % CALCULATE NO OF SECTORS
: J=B2
: IF J=1THEN J=2
0410 E=0
: DATA SAVE ACOPEN T#N,(J*2)J1$
: ERRORE=ERR
0420 IF E<>0THEN PRINT HEX(070E);"Can not open file."
: IF E<>0THEN 480
0430 DATA LOAD BMT#0,(L,L)A$()
0440 DATA SAVE AC#N,A$()
0450 IF K=LTHEN 460
: ELSE GOTO 430
0460 DATA SAVE AC#N,END
: DATA SAVE ACCLOSE#N
0470 GOSUB 730
0480 REM % RET > CMD PROC
: PRINT
: I4$="R"
: LOAD T"@DOS"
0490 END
0500 REM % COPY STARTS HERE IS COPY A > B
0510 PRINT " Insert output diskette in drive '";X$;"'";HEX(02050F)
0520 PRINT " Press ENTER to continue . . . ";
0530 KEYIN K$
: IF POS(HEX(7E7FF0)=K$)<>0THEN 480
: IF K$<>HEX(0D)THEN 530
: PRINT K$;
0540 REM % set start pointer for workfile
: L=A1
: % REM CALCULATE NO OF SECTORS: J=B2: IF J=1THEN J=2
0550 E=0
: DATA SAVE ACOPEN T#N0,(J*2)J1$
: ERRORE=ERR
: IF E<>0THEN PRINT HEX(070E);"Can not open file."
: IF E<>0THEN 480
0560 DATA LOAD BMT#0,(L,L)A$()
0570 DATA SAVE AC#N0,A$()
0580 IF K=LTHEN 590
: ELSE GOTO 560
0590 DATA SAVE AC#N0,END
: DATA SAVE ACCLOSE#N0
0600 IF LEN(I2$)<3THEN J1$=J$
: GOSUB 860
0610 GOTO 480
0620 REM % CALCULATE BYTES FOR THE FILE TO COPY
0630 C$=ALL(00)
: F$=ALL(20)
: MAT SEARCHJ$,="."TO C$
: C=VAL(C$,2)
: IF C=0THEN 640
: STR(F$,1,8)=STR(J$,1,C-1)
: STR(F$,9,3)=STR(J$,C+1,3)
: GOTO 650
0640 F$=J$
0650 REM % GET THE DIRECTORY INFORMATION AND CALCUTATE AND DISPLAY THE DATA
0660 FOR Z=YTO Y+VSTEP 2
0670 DATA LOAD BMT#N,(Z,M)B$()
0680 FOR X=1TO 16
: IF STR(B$(X),1,11)=STR(F$,1,11)THEN 690
: ELSE GOTO 700
0690 REM % CALCULATE BYTES USED
: E$=ALL(00)
: STR(E$,3,1)=STR(B$(X),30,1)
: STR(E$,4,1)=STR(B$(X),29,1)
: STR(E$,1,1)=STR(B$(X),32,1)
: STR(E$,2,1)=STR(B$(X),31,1)
: A9=VAL(E$,4)
: GOTO 720
0700 NEXT X
0710 NEXT Z
0720 RETURN
0730 REM % UPDATE BYTES USED IN FILE JUST COPIED.
0740 C$=ALL(00)
: F$=ALL(20)
: MAT SEARCHI2$,="."TO C$
: C=VAL(C$,2)
: IF C=0THEN 750
: STR(F$,1,8)=STR(I2$,1,C-1)
: STR(F$,9,3)=STR(I2$,C+1,3)
: GOTO 760
0750 F$=I2$
0760 REM % GET THE DIRECTORY INFORMATION
0770 DATA LOAD BMT#N,(1440,M)A$()
: ERRORE=ERR
: IF E=98THEN Y=10
: V=13
: GOTO 790
0780 DATA LOAD BMT#N,(4800,M)A$()
: ERRORE=ERR
: IF E=98THEN Y=30
: V=27
: IF Y=0THEN DO
: Y=10
: V=13
: END DO
0790 FOR Z=YTO Y+VSTEP 2
0800 DATA LOAD BMT#N,(Z,M)B$()
0810 FOR X=1TO 16
: IF STR(B$(X),1,11)=STR(F$,1,11)THEN 820
: ELSE GOTO 830
0820 REM % CALCULATE BYTES USED
: E$=BIN(A8,4)
: STR(B$(X),30,1)=STR(E$,3,1)
: STR(B$(X),29,1)=STR(E$,4,1)
: STR(B$(X),32,1)=STR(E$,1,1)
: STR(B$(X),31,1)=STR(E$,2,1)
: GOTO 850
0830 NEXT X
0840 NEXT Z
0850 DATA SAVE BMT#N,(Z,M)B$()
: RETURN
0860 REM % UPDATE BYTES USED IN FILE JUST COPIED. IF COPY A > B
0870 C$=ALL(00)
: F$=ALL(20)
: MAT SEARCHJ1$,="."TO C$
: C=VAL(C$,2)
: IF C=0THEN 880
: STR(F$,1,8)=STR(J1$,1,C-1)
: STR(F$,9,3)=STR(J1$,C+1,3)
: GOTO 890
0880 F$=J1$
0890 REM % GET THE DIRECTORY INFORMATION
0900 DATA LOAD BMT#N0,(1440,M)A$()
: ERRORE=ERR
: IF E=98THEN Y=10
: V=13
: GOTO 790
0910 DATA LOAD BMT#N0,(4800,M)A$()
: ERRORE=ERR
: IF E=98THEN Y=30
: V=27
: IF Y=0THEN DO
: Y=10
: V=13
: END DO
0920 FOR Z=YTO Y+VSTEP 2
0930 DATA LOAD BMT#N0,(Z,M)B$()
0940 FOR X=1TO 16
: IF STR(B$(X),1,11)=STR(F$,1,11)THEN 950
: ELSE GOTO 960
0950 REM % CALCULATE BYTES USED
: E$=BIN(A8,4)
: STR(B$(X),30,1)=STR(E$,3,1)
: STR(B$(X),29,1)=STR(E$,4,1)
: STR(B$(X),32,1)=STR(E$,1,1)
: STR(B$(X),31,1)=STR(E$,2,1)
: GOTO 980
0960 NEXT X
0970 NEXT Z
0980 DATA SAVE BMT#N0,(Z,M)B$()
: RETURN