.TITLE SWAPBL -- SWAP FILE BLOCKS .IDENT /V01.00/ LUN.TI == 1 LUN.CM == 2 LUN.IO == 3 EFN.TI == 1 EFN.IO == 2 .MCALL DIR$,EXST$,QIOW$ .MCALL CSI$,CSI$1,CSI$2,CSI$ND,CSI$SV,CSI$SW .MCALL FDBDF$,FDBK$A,FDRC$A,FDOP$A,NMBLK$ .MCALL FINIT$,FSRSZ$,GCML$,GCMLB$ .MCALL CLOSE$,OPEN$M,READ$,WAIT$,WRITE$ CSI$ DEF$G FSRSZ$ 1 FDB:: FDBDF$ FDRC$A FD.RWM FDBK$A ,,,EFN.IO,IOSB FDOP$A LUN.IO,CSIBL+C.DSDS,DFNB,FO.MFY DKVB:: .WORD 0,0 DFNB:: NMBLK$ ,OLB,,SY IOSB:: .BLKW 2 CSIBL:: .BLKB C.SIZE CSISW:: CSI$SW BL,,,,,CSISV CSI$ND CSISV:: CSI$SV NUMERIC,BLKN,2 CSI$SV NUMERIC,BCNT,2 CSI$ND QIOW:: QIOW$ IO.WVB,LUN.TI,EFN.TI,,,,<,,40> EXST:: EXST$ EX$SUC GCML:: GCMLB$ 1,SWP,,LUN.CM .WORD 0 BLKN:: .WORD 0 BCNT:: .WORD 0 BLKSZ == 512. BUFF:: .BLKB BLKSZ*4 START:: FINIT$ 10$: CLR BLKN MOV #2,BCNT GCML$ #GCML BCC 40$ CMPB #IE.EOF,G.ERR(R0) BEQ 30$ MOV #ECINP,R1 20$: CALL PRINT MOV #EX$ERR,EXST+E.XSTS 30$: DIR$ #EXST 40$: MOV G.CMLD(R0),R1 BEQ 10$ CSI$1 #CSIBL,GCML+G.CMLD+2,R1 BCC 60$ 50$: MOV #ESYNT,R1 55$: CALL PRINT MOV #EX$ERR,EXST+E.XSTS BR 10$ 60$: BITB #CS.EQU,C.STAT(R0) BNE 50$ CSI$2 ,OUTPUT,#CSISW BCS 50$ BITB #CS.WLD!CS.MOR,C.STAT(R0) BNE 50$ CMP #1,BLKN BHI 50$ CMP #2,BCNT BGT 50$ CMP #4,BCNT BLT 50$ OPEN$M #FDB BCC 70$ MOVB F.ERR(R0),R1 MOV #OPERR,R0 CLR R2 CALL $CBDSG MOV #EOPEN,R1 65$: CLRB @R0 BR 55$ 70$: MOV #BUFF,R1 MOV BCNT,R2 MOV BLKN,DKVB+2 80$: READ$ R0,R1,#BLKSZ,#DKVB BCS 100$ WAIT$ R0 BCS 100$ ADD #BLKSZ,R1 INC DKVB+2 SOB R2,80$ MOV BCNT,R2 MOV BLKN,DKVB+2 90$: SUB #BLKSZ,R1 WRITE$ R0,R1,#BLKSZ,#DKVB BCS 100$ WAIT$ R0 BCS 100$ INC DKVB+2 SOB R2,90$ CLOSE$ R0 JMP 10$ 100$: MOVB F.ERR(R0),R1 CLOSE$ R0 MOV #RWERR,R0 CLR R2 CALL $CBDSG MOV #ERDWR,R1 BR 65$ PRINT:: MOV R1,QIOW+Q.IOPL 10$: TSTB (R1)+ BNE 10$ DEC R1 SUB QIOW+Q.IOPL,R1 MOV R1,QIOW+Q.IOPL+2 DIR$ #QIOW RETURN ECINP: .ASCIZ /SWP -- Command input error/ ESYNT: .ASCIZ /SWP -- Command syntax error/ EOPEN: .ASCII /SWP -- File open error / OPERR: .ASCIZ /-XXXXX/ ERDWR: .ASCII \SWP -- File I/O error \ RWERR: .ASCIZ /-XXXXX/ .END START