.TITLE MTCOPY ; ; PROGRAM MTCOPY.MAC ; ; TO READ RECORDS FROM AN INPUT MAGTAPE AND ; WRITE THEM TO AN OUTPUT MAGTAPE ; ; PROGRAM IS CALLED FROM MCR AS FOLLOWS: ; ; MCR>MTC /SWS ; ; WHERE THE FOLLOWING SWITCHES ARE ALLOWED: ; ; /HE PRINTS THIS HELP MESSAGE ; /NM SUPPRESSES FILE COPY MESSAGES ; /RI REWINDS INPUT TAPE BEFORE PROCESSING ; /RO REWINDS OUTPUT TAPE BEFORE PROCESSING ; /EO WINDS OUTPUT TAPE TO LOGICAL EOV BEFORE PROCESSING ; /SI:NN WHERE NN SPECIFIES THE NUMBER OF EOF'S TO SKIP BE- ; FORE PROCESSING INPUT TAPE ; /SO:NN WHERE NN SPECIFIES THE NUMBER OF EOF'S TO SKIP BE- ; FORE PROCESSING OUTPUT TAPE ; /CO:NN WHERE NN SPECIFIES THE NUMBER OF FILES TO COPY ; .MCALL CSI$ QIOW$ SVTK$ FINIT$ DIR$ .MCALL GCML$ CSI$1 CSI$2 GCMLB$ WTSE$ .MCALL EXIT$S MOUT$ MODF$ MOWA$S QIO$ .MCALL FSRSZ$ CSI$SW CSI$SV CSI$ND B.LEN=46000 ;DEFINE I/O RECORD LENGTH B.BUF1=46000 ;DEFINE I/O BUFFER 1 SIZE B.BUF2=46000 ;DEFINE I/O BUFFER 2 SIZE RECCNT: .WORD 0 ;PLACE TO COUNT RECORDS IN EACH FILE COPIED FILCNT: .WORD 0 ;PLACE TO COUNT FILES COPIED RWORD2: .WORD 0 ;INPUT TAPE REWIND WORD RWORD3: .WORD 0 ;OUTPUT TAPE REWIND WORD ENDVOL: .WORD 0 ;OUTPUT EOV WORD HELPFL: .WORD 0 ;HELP MESSAGE FLAG BUFFLG: .WORD 0 ;BUFFER I/O FLAG NOMESS: .WORD 0 ;NO FILE COPY MESSAGE FLAG EOFFLG: .WORD 0 ;EOV FLAG MTBUF1: .BLKB B.BUF1 ;BUFFER 1 FOR TRANSFER MTBUF2: .BLKB B.BUF2 ;BUFFER 2 FOR TRANSFER .EVEN CMLBLK: GCMLB$ 1,MTC,,1 .EVEN CSI$ CSIBLK: .BLKB C.SIZE QIORD2: QIOW$ IO.RLB,2,1,,MTST2,,<,B.LEN> QIOWR3: QIO$ IO.WLB,3,2,,MTST3,,<,B.LEN> QIOSK2: QIOW$ IO.SPF,2,1,,MTST2,, QIOSK3: QIOW$ IO.SPF,3,1,,MTST3,, QIORW2: QIOW$ IO.RWD,2,1,,MTST2 QIORW3: QIOW$ IO.RWD,3,1,,MTST3 QIOEF3: QIOW$ IO.EOF,3,1,,MTST3 WAITFL: WTSE$ 2 MTST2: .BLKW 2 MTST3: .BLKW 2 VECDIR: SVTK$ VECTAB,7 VECTAB: .BLKW 6 .WORD TRPHDL SWTABL: CSI$SW CO,,,,,COPTAB ;SPECIFY # OF FILES TO COPY CSI$SW SI,,,,,SK2TAB ;SPECIFY # OF FILES TO SKIP ON INPUT CSI$SW SO,,,,,SK3TAB ;SPECIFY # OF FILES TO SKIP ON OUTPUT CSI$SW RI,1,RWORD2,SET ;SPECIFY INPUT MAGTAPE REWIND CSI$SW RO,1,RWORD3,SET ;SPECIFY OUTPUT MAGTAPE REWIND CSI$SW EO,1,ENDVOL,SET ;SPECIFY OUTPUT MAGTAPE EOV CSI$SW HE,1,HELPFL,SET ;SPECIFY HELP MESSAGE OUTPUT CSI$SW NM,1,NOMESS,SET ;SPECIFY NO FILE COPY MESSAGES CSI$ND COPTAB: CSI$SV DECIMAL,FCOPY2,2 SK2TAB: CSI$SV DECIMAL,SKPVL2,2 SK3TAB: CSI$SV DECIMAL,SKPVL3,2 CSI$ND FCOPY2: .WORD 77777 ;SPECIFY DEFAULT FILES TO COPY SKPVL2: .WORD 0 ;SPECIFY DEFAULT SKIP ON INPUT SKPVL3: .WORD 0 ;SPECIFY DEFAULT SKIP ON OUTPUT ; QIOMES: QIOW$ IO.WVB,1,10,,IOSTAT,,<,,40> MESSG1: .ASCIZ ' RECORDS COPIED FROM FILE ' MESSG2: .ASCIZ ' TO FILE ' .EVEN MESBUF: .BLKB 80. IOSTAT: .BLKW 2 ; HELPIO: QIOW$ IO.WVB,1,10,,IOSTAT,, HELMES: .ASCII <12>?ALLOWED SWITCHES ARE:? .ASCII <15><12><12>? /HE PRINTS THIS HELP MESSAGE? .ASCII <15><12><12>? /NM SUPPRESSES FILE COPY MESSAGES? .ASCII <15><12><12>? /RI REWINDS INPUT TAPE BEFORE PROCESSING? .ASCII <15><12><12>? /RO REWINDS OUTPUT TAPE BEFORE PROCESSING? .ASCII <15><12><12>? /EO WINDS OUTPUT TAPE TO LOGICAL EOV BEFORE PROCESSING? .ASCII <15><12><12>? /SI:NN WHERE NN SPECIFIES THE NUMBER OF EOF'S TO SKIP BE-? .ASCII <15><12>? FORE PROCESSING INPUT TAPE? .ASCII <15><12><12>? /SO:NN WHERE NN SPECIFIES THE NUMBER OF EOF'S TO SKIP BE-? .ASCII <15><12>? FORE PROCESSING OUTPUT TAPE? .ASCII <15><12><12>? /CO:NN WHERE NN SPECIFIES THE NUMBER OF FILES TO COPY? HELLEN=.-HELMES .EVEN ; MTFILE: FINIT$ DIR$ #VECDIR GCML$ #CMLBLK BCC 2$ CMPB CMLBLK+G.ERR,#GE.EOF ;EOF? BNE 1$ ;IF NOT, REPORT ERROR JMP EXIT ;IF SO, DO NORMAL EXIT 1$: TRAP TE.CLE ;COMMAND LINE ERROR 2$: CSI$1 #CSIBLK,CMLBLK+G.CMLD+2,CMLBLK+G.CMLD BCC 3$ TRAP TE.CSE 3$: CSI$2 #CSIBLK,OUTPUT,#SWTABL BCC 4$ TRAP TE.CSE 4$: TST HELPFL BEQ 44$ DIR$ #HELPIO JMP EXIT 44$: TST RWORD2 BEQ 5$ DIR$ #QIORW2 5$: TST RWORD3 BEQ 6$ DIR$ #QIORW3 6$: TST SKPVL2 BEQ 7$ MOV SKPVL2,QIOSK2+Q.IOPL DIR$ #QIOSK2 BCS 8$ 7$: TST SKPVL3 BEQ 10$ MOV SKPVL3,QIOSK3+Q.IOPL DIR$ #QIOSK3 BCS 9$ BR 10$ 8$: TRAP TE.MT2 9$: TRAP TE.MT3 10$: TST ENDVOL BEQ 11$ MOV #77777,QIOSK3+Q.IOPL DIR$ #QIOSK3 BCS 9$ MOV MTST3+2,SKPVL3 11$: CLR BUFFLG MOV #MTBUF1,R4 MOV #MTBUF2,R5 MOV R4,QIORD2+Q.IOPL INC BUFFLG DIR$ #QIORD2 BCS 8$ TSTB MTST2 BPL 12$ CMPB #IE.EOF,MTST2 ;END OF FILE? BNE 8$ ;IF NOT, ERROR BR 131$ 12$: CLR EOFFLG TST BUFFLG BEQ 121$ MOV R4,QIOWR3+Q.IOPL BR 122$ 121$: MOV R5,QIOWR3+Q.IOPL 122$: MOV MTST2+2,QIOWR3+Q.IOPL+2 DIR$ #QIOWR3 BCS 9$ INC RECCNT TST BUFFLG BEQ 123$ MOV R5,QIORD2+Q.IOPL CLR BUFFLG BR 124$ 123$: MOV R4,QIORD2+Q.IOPL INC BUFFLG 124$: DIR$ #QIORD2 BCS 8$ TSTB MTST2 BPL 125$ CMPB #IE.EOF,MTST2 BNE 8$ BR 13$ 125$: DIR$ #WAITFL JMP 12$ 13$: DIR$ #WAITFL 131$: DIR$ #QIOEF3 BCS 9$ TST EOFFLG BNE CLSEXT TST NOMESS BNE 16$ MOV #MESBUF,R0 MOV R0,QIOMES+Q.IOPL CLR R2 MOV RECCNT,R1 CALL $CBDMG MOV #MESSG1,R2 14$: MOVB (R2)+,(R0)+ TSTB (R2) BNE 14$ CLR R2 INC SKPVL2 MOV SKPVL2,R1 CALL $CBDMG MOV #MESSG2,R2 15$: MOVB (R2)+,(R0)+ TSTB (R2) BNE 15$ CLR R2 INC SKPVL3 MOV SKPVL3,R1 CALL $CBDMG SUB #MESBUF,R0 MOV R0,QIOMES+Q.IOPL+2 DIR$ #QIOMES BCC 16$ TRAP TE.MES 16$: MOV #0,RECCNT INC FILCNT INC EOFFLG CMP FILCNT,FCOPY2 BGE 17$ JMP 11$ 17$: DIR$ #QIOEF3 BCC CLSEXT JMP 9$ CLSEXT: TRAP TS.EXT ;DO SUCCESSFUL EXIT EXIT: EXIT$S ; ; TRAP HANDLER SECTION FOR MTCOPY PROGRAM ; ; DEFINE TRAP VALUES TE.CLE=1 ;COMMAND LINE ERROR TE.CSE=2 ;CSI ERROR TE.MT2=3 ;INPUT MAGTAPE ERROR TE.MT3=4 ;OUTPUT MAGTAPE ERROR TE.MES=5 ;MESSAGE ERROR ; TS.EXT=100 ;SUCCESSFUL EXIT MOLUN=4 ;DEFINE LUN FOR MO MODPB: MOUT$ STRDSC,PARLST,0,CONT,SYLOG,,,MOSTAT,MOLUN MOSTAT: .BLKW 2 STRDSC: .WORD STRE-STRING .WORD STRING .NLIST BEX STRING: .ASCII /TRAP #%P%LMTIN STATUS =%D%LMTOUT STATUS =%D/ .ASCII /%LDSW =%D/ STRE: STR2: .ASCII /%D RECORDS COPIED FROM FILE %D TO FILE %D/ STR2E: STR3: .ASCII /%LA TOTAL OF %D FILES COPIED%L/ STR3E: .LIST BEX .EVEN PARLST: .BLKW 4 ;RESERVE 4 WORDS FOR PARAM LIST MODF$ ; HANDLER TRAP CODE TRPHDL: MOV (SP)+,R5 ;2*TRAP CODE MOV #MODPB,R0 MOVB #SY$STM,M.ODST(R0) ;ELIMINATE HEADER ASR R5 ;TRAP CODE IN R5 CMP R5,#TS.EXT ;SUCCESSFUL TRAP? BLT 1$ ;IF NOT, BRANCH MOV #STR3,STRDSC+2 ;MOVE IN NEW STRING MOV #STR3E-STR3,STRDSC ;DESCRIPTOR MOV FILCNT,PARLST ;PUT FILE COUNT IN PARAM LIST BR 3$ ;GO DO MO THING 1$: MOV #STRING,STRDSC+2 ;MAKE SURE RIGHT STRING MOV #STRE-STRING,STRDSC ;IS DESCRIBED. MOV R5,PARLST ;PUT TRAP VALUE IN PARAM LIST MOVB MTST2,R1 ;PUT INPUT MAGTAPE STATUS IN LIST MOV R1,PARLST+2 ;WITH SIGN EXTEND MOVB MTST3,R1 ;DO SAME WITH OUTPUT MAGTAPE MOV R1,PARLST+4 MOV @#0,PARLST+6 ;DSW IN 4TH WORD OF LIST MOV #CLSEXT,(SP) ;JIMMY THE RETURN ADDRESS 3$: DIR$ #MODPB BCS 2$ MOWA$S RTT 2$: MOV @#0,R0 ;DSW IN R0 MOV MOSTAT,R1 ;MO STATUS IN R1 MOV MTST2,R2 ;INPUT MAGTAPE STATUS IN R2 MOV MTST3,R3 ;OUTPUT MAGTAPE STATUS IN R3 HALT ;GET INFO OUT IN TKTN MESSAGE FSRSZ$ 2 .END MTFILE