Listing of file='@DOSCOPY' on disk='vmedia/mvp-cs386-1.30-disk2.wvd.zip'
# Sector 515, 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