From: Malcolm Dunnett [nothome@spammers.are.scum] Sent: Wednesday, March 05, 2003 11:29 AM To: Info-VAX@Mvb.Saic.Com Subject: Re: DCL COPY In article , huber@mppmu.mpg.de (Joseph Huber) writes: > > Look into the help for CONV$_Routines . > > The simpliest sequence for a 1-to-one copy would be: > > CALL CONV$PASS_FILES(inputfilename , outputfilename) > CALL CONV$PASS_OPTIONS > CALL CONV$CONVERT > I believe that convert always does a conversion on the file, as opposed to a straight copy. For simple file structures the two are pretty much the same - though convert may be slower as it is doing a record-by-record copy rather than a block copy. For indexed files ( particularly those with lots of keys ) convert can be a whole lot slower than a block mode copy would be. I'd recommend looking into using callable backup to do the copy, or write a routine to copy the file using RMS block IO ( sample below, not guaranteed to meet your needs ): .TITLE COPY_FILE .IDENT /V2.0/ ; ; COPY AN RMS FILE - USING BLOCK I/O ; ; MODULE : COPY_FILE ; AUTHOR : M.DUNNETT ; DATE : FEB 12/82 ; $FABDEF $RABDEF .PSECT $LOCAL PIC,USR,CON,REL,LCL,NOSHR,NOEXE,RD,WRT ; ; DEFINE FABS ; INPFAB: $FAB FAC = OUTFAB: $FAB FAC = ,- FOP = ; ; DEFINE RABS ; INPRAB: $RAB FAB = INPFAB,- BKT = 0 ,- RAC = SEQ,- UBF = BUFFER_SPACE ,- USZ = 16384 OUTRAB: $RAB FAB = OUTFAB ,- RAC = SEQ,- BKT = 0 ,- RBF = BUFFER_SPACE ; ; DEFINE BUFFER AREA ; BUFFER_SPACE: .BLKB 16384 .PSECT $CODE,PIC,CON,REL,LCL,SHR,EXE,RD,NOWRT ; ; STAT = COPY_FILE(INP.FLE$,OUT.FLE$) ; .ENTRY COPY_FILE,^M MOVAL INPFAB,R2 MOVAL OUTFAB,R3 MOVL 4(AP),R4 ; GET INPUT FILE NAME MOVB (R4),FAB$B_FNS(R2) MOVL 4(R4),FAB$L_FNA(R2) MOVL 8(AP),R4 ; GET OUTPUT FILE NAME MOVB (R4),FAB$B_FNS(R3) MOVL 4(R4),FAB$L_FNA(R3) $OPEN FAB=(R2) ; OPEN INPUT FILE BLBS R0,1$ ; GIVE UP IF OPEN FAILS RET 1$: $CONNECT RAB=INPRAB ; CONNECT RECORD ACCESS STREAM BLBS R0,2$ RET 2$: ; ; COPY ALL RELEVANT FAB FIELDS INTO OUTFAB IN PREPARATION ; FOR THE $CREATE ; MOVL FAB$L_ALQ(R2),FAB$L_ALQ(R3) ; ALLOCATION QUANTITY MOVB FAB$B_BKS(R2),FAB$B_BKS(R3) ; BUCKET SIZE MOVW FAB$W_BLS(R2),FAB$W_BLS(R3) ; BLOCK SIZE MOVW FAB$W_DEQ(R2),FAB$W_DEQ(R3) ; DFLT EXTEND QUANTITY MOVB FAB$B_FSZ(R2),FAB$B_FSZ(R3) ; FIXED AREA SIZE MOVL FAB$L_MRN(R2),FAB$L_MRN(R3) ; MAX RECORD NUMBER MOVW FAB$W_MRS(R2),FAB$W_MRS(R3) ; MAX RECORD SIZE MOVB FAB$B_ORG(R2),FAB$B_ORG(R3) ; ORGANIZATION MOVB FAB$B_RAT(R2),FAB$B_RAT(R3) ; RECORD ATTRIBUTES MOVB FAB$B_RFM(R2),FAB$B_RFM(R3) ; RECORD FORMAT $CREATE FAB=(R3) ; CREATE OUTPUT FILE BLBS R0,3$ RET 3$: $CONNECT RAB=OUTRAB ; CONNECT OUTPUT STREAM BLBS R0,4$ RET 4$: MOVAL INPRAB,R2 MOVAL OUTRAB,R3 5$: ; ; COPY THE FILE NOW ; $READ RAB=(R2) ; READ A BUNCH OF STUFF BLBC R0,6$ MOVW RAB$W_RSZ(R2),RAB$W_RSZ(R3) ; COPY RECORD SIZE $WRITE RAB=(R3) ; WRITE IT TO OUTPUT FILE BLBS R0,5$ RET 6$: $CLOSE FAB=INPFAB $CLOSE FAB=OUTFAB RET .END