.PSECT MOVE_FILES_CODE,RD,NOWRT,EXE,SHR .ENTRY start,^M num_blocks=1000 ; ; Open the input file ; ; ; Set up output RMS data structures ; $FAB_STORE FAB=OUTPUT_FAB,- FAC=,- FNA=DUMMY_NAME_STRING,- FNS=DUMMY_NAME_LENGTH,- FOP=,- ORG=seq,- RAT=cr,- RFM=var,- RTV=#0,- SHR=,- XAB=OUTPUT_XAB_all $XABALL_STORE XAB=OUTPUT_XAB_ALL,- AID=#0,- ALN=#XAB$C_LBN,- ALQ=#num_blocks,- LOC=#1 $RAB_STORE RAB=OUTPUT_RAB,- FAB=OUTPUT_FAB,- RAC=,- ROP= $CREATE FAB=OUTPUT_FAB BLBS R0,12$ ;CHECK FOR ERROR $exit_s r0 12$: $CONNECT RAB=OUTPUT_RAB ;CONNECT THE RAB TO THE NOW OPEN OUTPUT BLBS R0,13$ ;CHECK FOR ERROR PUSHL #^M ;SAVE R0 FOR ERROR RETURN AFTER CLEANUP $CLOSE FAB=OUTPUT_FAB POPR #^M $exit_s r0 13$: .PAGE .SUBTITLE MOVE FILE- ACTUAL MOVE FILE CODE BY BLOCKS ; ; Init the input and output RABS ; MOVAL IO_BUFFER,OUTPUT_RAB+RAB$L_RBF ;repeat for output buffer MOVW #<80>,OUTPUT_RAB+RAB$W_RSZ CLRL OUTPUT_RAB+RAB$L_BKT num_rec=/<80+2>+10 movl #num_rec,r11 25$: $put RAB=OUTPUT_RAB ;write to new file BLBc R0,26$ ;if no error loop back decl r11 bgtr 25$ 26$: .PAGE .SUBTITLE ERROR AND NORMAL EXITS ; ; If we got here, we have some error trying to write to ; the new file. No atempt is made to try and recover. The new file ; is deleted and the old one is left alone ; PUSHL #^M ;SAVE R0 FOR ERROR RETURN AFTER CLEANUP $CLOSE FAB=OUTPUT_FAB $exit_s r0 .PAGE .SUBTITLE MOVE FILE DATA AREA .PSECT MOVE_FILES_DATA,RD,WRT,NOEXE,NOSHR,PAGE DUMMY_NAME_STRING: .ascii /test_file.dat/ DUMMY_NAME_LENGTH: .LONG .-dummy_name_string .PAGE .SUBTITLE MOVE FILES RMS DATA STRUCTURES AREA .PSECT MOVE_FILES_RMS_BLOCKS,RD,WRT,NOEXE,NOSHR,PAGE ; ; INPUT FILE DATA STRUCTURES ; .align long OUTPUT_FAB: $FAB .ALIGN LONG OUTPUT_RAB: $RAB .ALIGN LONG OUTPUT_XAB_ALL: $XABALL .PSECT MOVE_FILES_BUFFER,RD,WRT,NOEXE,NOSHR,LONG .ALIGN LONG IO_BUFFER: .BLKB <512*64> ;BLOCK I/O as 64 block segments .end start