.TITLE COMLIB .IDENT /5.13/ ;THIS IS AN EDITED VERSION OF THE COMLIB MODULE FROM THE BRU ; OF RSX11M+ V2.1 WHICH IS NEW FOR THAT VERSION. IT CAN BUILD ON ; A VAX (IF YOU MAKE THE STACK 150 WORDS LONG INSTEAD OF THE ; DEFAULT) AND IS INTENDED TO ALLOW BRU TO WRITE TO ODS1 OR ODS2 ; MOUNTED DISKS. NOTE THE /UFD SWITCH WILL CREATE DIRECTORIES ; BUT THEY ARE CREATED IN ODS1 FORMAT, AND ARE USELESS ON ODS2 ; VOLUMES. HOWEVER, PRE-CREATED DIRECTORIES CAN BE WRITTEN TO FROM ; BRU TAPES EVEN ON ODS2 VOLUMES. ; BEWARE: THERE ARE REPORTS THAT THIS VERSION OF BRU IS INCOMPATIBLE ; WITH OLDER ONES. DEC CLAIMS (FALSELY SO FAR AS I CAN TELL THUS FAR) ; THAT THE OLDER BRU CANNOT READ THIS ONE'S TAPES. REPORTS THAT THIS ; ONE CANNOT READ TAPES FROM OLDER BRUS HAVE APPEARED. ; THE VMSCOMLIB FILE HERE IS THE COMLIB FROM THE BRU OF RSX11M+ V2.0 ; WHICH IS KNOWN TO WORK RIGHT. THIS CAN BE CONDITIONALLY BUILT EITHER ; TO ALLOW OUTPUT UNDER VMS TO MOUNTED DISKS ONLY, OR TO OUTPUT TO ; FOREIGN MOUNTED DISKS ONLY. THIS WILL BE SIMILAR. WE KEEP 2 VERSIONS ; AROUND AND MOSTLY USE THE ONES THAT ACCESS MOUNTED DISKS SINCE IT'S ; A WASTE TO USE A WHOLE VOLUME FOR JUST A FEW FILES. ; THE BRU OF RSX11M+ AND RSX11M VERSIONS IS RELATED AS FOLLOWS ; (APPROXIMATELY) ; ; RSX11M V3.2 -- RSX11M+ V1.0 -- (APPROXIMATELY IAS V3.1) ; RSX11M V4.0 -- RSX11M+ V2.0 ; RSX11M V4.1 -- RSX11M+ V2.1 ; NOTE THE V2.1 BRU MAY BE A TOTALLY NEW FORMAT AND SHOULD BE TESTED BY ;THE USER PRIOR TO USE. THE V1.0 BRU CAN READ V2.0 TAPES BUT WILL GIVE ;STRANGE AND OFTEN INVALID DATES ON VOLUMES & DIRECTORIES. OTHERWISE IT'S ;OK. NOTE THIS IS NOT ALWAYS TRUE THOUGH. THE V2.0 BRU READS V1.0 TAPES ;RELIABLY SO FAR AS ANYONE KNOWS. (AND MOSTLY READS V2.1 TAPES TOO.) .ASECT .GLOBL EC.HNR .GLOBL KY.MOU .GLOBL Q.IOLU .GLOBL FLAGWD .GLOBL V.IBSZ .GLOBL RPPNT .GLOBL EC.HRE .GLOBL $BUF2 .GLOBL RPS .GLOBL $FLAG2 .GLOBL DISUFD .GLOBL V.IFRP .GLOBL Q.IOSB .GLOBL RPNUM .GLOBL CF.DON .GLOBL $OUSTA .GLOBL EXTFLG .GLOBL EC.DAT .GLOBL $UFDWT .GLOBL Q.IOPL .GLOBL KY.RAF .GLOBL TTYMSG .GLOBL KY.RBF .GLOBL KY.CMP .GLOBL EC.NOV .GLOBL CF.UFD .GLOBL $FILES .GLOBL $MUL .GLOBL HEADRS .GLOBL $PRDEV .GLOBL V.FID .GLOBL SAVALL .GLOBL KY.RES .GLOBL RPLEFT .GLOBL KY.ATT .GLOBL MONTHS .GLOBL $BFCDT .GLOBL KY.NOI .GLOBL V.IBLB .GLOBL EC.NUT .GLOBL $BKBLK .GLOBL $DSKIN .GLOBL KY.DIS .GLOBL $INDPB .GLOBL Q.IOEF .GLOBL MFDEOF .GLOBL $PRFID .GLOBL $PRFIL .GLOBL IO.ATT .GLOBL $DSKOU .GLOBL $SDAT .GLOBL $QUAL4 .GLOBL $QUAL2 .GLOBL IE.PRI .GLOBL G.TSDU .GLOBL MFDPNT .GLOBL COMMSG .GLOBL MAPADR .GLOBL $QUAL3 .GLOBL Q.IOFN .GLOBL EFN1 .GLOBL $QUAL1 .GLOBL LOGEOF .GLOBL EC.DRE .GLOBL $UFDNM .GLOBL V.DPB .GLOBL IO.RLB .GLOBL $FILNM .GLOBL $AFRDT .GLOBL $BFRDT .GLOBL MFDRP .GLOBL KY.VMG .GLOBL DTACNT .GLOBL FILEID .GLOBL KY.VPS .GLOBL $SET .GLOBL SAVEXT .GLOBL CURUFD .GLOBL IBLB .GLOBL CR.FFI .GLOBL KY.BAC .GLOBL VOLNUM .GLOBL $INSTA .GLOBL CF.MOU .GLOBL $EDMSG .GLOBL F.HIBK .GLOBL EC.MFH .GLOBL $CFLAG .GLOBL $MAPWT .GLOBL $OUDP3 .GLOBL $OUDPB .GLOBL $OUDP2 .GLOBL KY.T2D .GLOBL KY.D2T .GLOBL $MODE .GLOBL V.RPNM .GLOBL F.EFBK .GLOBL $VRADR .GLOBL MFDNUM .GLOBL SAVPNT .GLOBL KY.SET .GLOBL HDRCNT .GLOBL $PRUFD .GLOBL $RSFLG .GLOBL HDREND .GLOBL RPTAB .GLOBL RPTABL .GLOBL CURMPT .GLOBL CURMRP .GLOBL IO.SEC .GLOBL F.FFBY .GLOBL RS.CAF .GLOBL EC.FAT .GLOBL DISPHD .GLOBL $IOCOD .GLOBL EFN2 .GLOBL CRUFD2 .GLOBL HDADR .GLOBL IBSZ .GLOBL RPADR .GLOBL $AFCDT .GLOBL OLDPTR .GLOBL RS.CMP .GLOBL KY.INI .GLOBL CF.DAT .GLOBL GTPBUF .GLOBL $DIRAD .GLOBL SAVR0 .GLOBL SAVR3 .GLOBL EC.VNM .GLOBL KY.CAF .GLOBL KY.EXC .GLOBL KY.CBF .PSECT .GLOBL OUT .GLOBL GETBLK .GLOBL RDMRPS .GLOBL $CKDAT .GLOBL UFDNAM .GLOBL $CMPDT .GLOBL $WRTFL .GLOBL $CKPRO .GLOBL $CKFIL .GLOBL $CKUFD .GLOBL $NBOOT .GLOBL $INIDV .GLOBL $WRUFD .GLOBL READRP .GLOBL $BKEND .GLOBL RESRG .GLOBL BACOUT .GLOBL SAVRG .GLOBL SAVBOT .GLOBL $CVTDT .GLOBL $FNDID .GLOBL $RSWFL .GLOBL RESBOT .GLOBL UFDCNT .PSECT GETBLK: MOV R4,-(SP) ; "& " EMT 377 ; " " BCS C00036 ; " " MOV #EFN1,-(SP) ; "f " MOV #1051,-(SP) ; "f ) " EMT 377 ; " " TSTB @Q.IOSB(R4) ; "| " BPL C00036 ; " " MOV @Q.IOSB(R4),$IOCOD ; "7 " SEC ; "1 " C00036: RETURN ; " " READRP: JSR R5,SAVRG ; "w " CLR RPS ; "7 " MOV $VRADR,R2 ; "B " MOV V.FID(R2),R0 ; " " MOV V.DPB(R2),R4 ; " " MOV HDADR,Q.IOPL(R4) ; "t " C00072: CMP R0,#20 ; " " BGT C00136 ; " " ADD V.IBSZ(R2),R0 ; " l " MOV V.IBLB(R2),R3 ; " " ADD V.IBLB+2(R2),R0 ; " l " ADC R3 ; "C " SUB #1,R0 ; "@e " SBC R3 ; " " MOV R0,Q.IOPL+10(R4) ; "4 " MOV R3,Q.IOPL+6(R4) ; "t " BR C00264 ; "+ " C00136: ADD V.IBSZ(R2),R0 ; " l " ADD #2,R0 ; "@e " MOV V.RPNM(R2),R5 ; " " MOV V.IFRP(R2),R3 ; " " CLR R1 ; " " C00160: MOV R1,R4 ; "D " MOVB 1(R3),R1 ; "A " BIC #177400,R1 ; "AE " INC R1 ; " " ADD R4,R1 ; " a" CMP R1,R0 ; "@ " BGE C00232 ; " " ADD #4,R3 ; "Ce " DEC R5 ; "E " BGT C00160 ; "s " TSTB $MODE ; "w " SEC ; "1 " BNE C00226 ; " " .BYTE EC.NOV ; " " .BYTE 211 ; " " SEC ; "1 " C00226: JMP C00652 ; "w " C00232: SUB R4,R0 ; " a" DEC R0 ; "@ " MOV V.DPB(R2),R4 ; " " MOVB (R3),Q.IOPL+6(R4) ; "t " MOV 2(R3),Q.IOPL+10(R4) ; "t " ADD R0,Q.IOPL+10(R4) ; "4` " ADC Q.IOPL+6(R4) ; "t " C00264: TST HDADR ; "w " BEQ C00652 ; "x " MOV #IO.RLB,Q.IOFN(R4) ; "t " MOV #1000,Q.IOPL+2(R4) ; "t " MOV Q.IOEF(R4),-(SP) ; "& " MOV #1,Q.IOEF(R4) ; "t " MOV R4,Q.IOSB(R4) ; "4 " ADD #30,Q.IOSB(R4) ; "te " CALL GETBLK ; "w " " MOV (SP)+,Q.IOEF(R4) ; "4 " BCC C00364 ; " " TSTB $MODE ; "w " SEC ; "1 " BEQ C00356 ; " " .BYTE EC.HRE ; " " .BYTE 211 ; " " C00356: .BYTE EC.HRE ; " " .BYTE 211 ; " " SEC ; "1 " BR C00652 ; "[ " C00364: MOV Q.IOPL(R4),R1 ; " " MOV F.EFBK+16(R1),LOGEOF ; "w " MOV F.EFBK+20(R1),LOGEOF+2 ; "w " TST F.FFBY+16(R1) ; "q " BNE C00416 ; " " DEC LOGEOF+2 ; "w " C00416: MOVB 1(R1),R3 ; "C " ASL R3 ; "C " ADD R1,R3 ; "C`" MOV R3,R1 ; "A " MOV 2(R3),SAVEXT ; "w " ADD #12,R3 ; "Ce " MOV R3,MAPADR ; "w " MOVB 10(R1),R1 ; "A " BIC #177400,R1 ; "AE " MOV R1,R0 ; "@ " ASR R1 ; " " ADD R1,RPS ; "w` " BEQ C00504 ; " " MOV RPADR,R2 ; "B " BEQ C00504 ; " " C00476: MOV (R3)+,(R2)+ ; "R " DEC R0 ; "@ " BNE C00476 ; "} " C00504: MOV SAVEXT,R0 ; "@ " BEQ C00652 ; "0 " MOV R2,RPADR ; "7 " MOV $VRADR,R2 ; "B " TST EXTFLG ; "w " BEQ C00652 ; ") " BLT C00546 ; " " ADD #400,Q.IOPL(R4) ; "te " DEC EXTFLG ; "w " BR C00576 ; " " C00546: INC EXTFLG ; "7 " CMP V.FID(R2),#1 ; " , " BNE C00570 ; " " MOV RPS,V.RPNM(R2) ; "r " C00570: TSTB $MODE ; "w " BNE C00646 ; " " C00576: CMP V.FID(R2),#1 ; " , " BNE C00616 ; " " MOV RPS,RPNUM ; "w " BR C00626 ; " " C00616: CMP V.FID(R2),#3 ; " , " BNE C00646 ; " " C00626: MOV #CR.FFI,R5 ; "E " C00632: TST (R5) ; "M " BEQ C00644 ; " " ADD #2,R5 ; "Ee " BR C00632 ; "{ " C00644: MOV R0,(R5) ; " " C00646: JMP C00072 ; "w ~" C00652: JSR R5,RESRG ; "w " RETURN ; " " SAVRG: MOV R4,-(SP) ; "& " MOV R3,-(SP) ; "f " MOV R2,-(SP) ; "& " MOV R1,-(SP) ; "f " MOV R0,-(SP) ; "& " MOV 12(SP),-(SP) ; "& " RTS R5 ; " " RESRG: MOV (SP)+,R0 ; " " MOV (SP)+,R0 ; " " MOV (SP)+,R1 ; " " MOV (SP)+,R2 ; " " MOV (SP)+,R3 ; " " MOV (SP)+,R4 ; " " RTS R5 ; " " $CMPDT: MOV R1,-(SP) ; "f " MOV R0,R1 ; " " CALL $CVTDT ; "w R " MOV R1,R0 ; "@ " MOV (SP)+,R1 ; " " ADD #5,R0 ; "@e " ADD #5,R1 ; "Ae " CALL C01024 ; "w . " SUB #5,R0 ; "@e " SUB #5,R1 ; "Ae " CALL C01024 ; "w " " SUB #4,R0 ; "@e " SUB #4,R1 ; "Ae " CALL C01024 ; "w " ADD #5,R0 ; "@e " ADD #5,R1 ; "Ae " CALL C01024 ; "w " CALL C01024 ; "w " CALL C01024 ; "w " RETURN ; " " C01024: MOV #2,R2 ; "B " CALL C01252 ; "w " BEQ C01046 ; " " CLC ; "! " BGT C01044 ; " " SEC ; "1 " C01044: DEC (SP)+ ; "V " C01046: RETURN ; " " $CVTDT: ADD #2,R1 ; "Ae " MOV #MONTHS,R0 ; "@ " MOV #14,R2 ; "B " C01064: CMPB (R0),(R1) ; " "" BNE C01110 ; " " CMPB 1(R0),1(R1) ; "1, " BNE C01110 ; " " CMPB 2(R0),2(R1) ; "1, " BEQ C01236 ; "+ " C01110: ADD #3,R0 ; "@e " DEC R2 ; "B " BNE C01064 ; "r " MOV #CURUFD,$PRUFD ; "w " MOV R3,$PRFIL ; "w " ADD #6,$PRFIL ; "we " BIT #400,$FLAG2 ; "w5 " BNE C01212 ; " " CMP DISUFD,CURUFD ; "w- " BNE C01212 ; " " CMP DISUFD+2,CURUFD+2 ; "w- " BNE C01212 ; " " BIT #KY.VPS,$QUAL3 ; "w5 " BNE C01212 ; " " BIT #1000,$FLAG2 ; "w5 " BNE C01212 ; " " .BYTE EC.DAT ; " " .BYTE 211 ; " " C01212: CLR $PRUFD ; "7 " CLC ; "! " BIT #20000,FLAGWD ; "w5 " BEQ C01232 ; " " SEC ; "1 " C01232: MOV (SP)+,(SP)+ ; " " RETURN ; " " C01236: MOVB R2,(R1)+ ; " " CLRB (R1)+ ; " " CLRB (R1) ; " " SUB #4,R1 ; "Ae " RETURN ; " " C01252: CMPB (R0)+,(R1)+ ; " $" BNE C01262 ; " " DEC R2 ; "B " BNE C01252 ; "| " C01262: RETURN ; " " $CKDAT: BIT #CF.DAT,$CFLAG ; "w5 " BNE C01440 ; "2 " BIT #KY.RBF,$QUAL2 ; "w5 " BEQ C01322 ; " " BIS #30000,FLAGWD ; "wU 0 " MOV #$BFRDT,$SDAT ; "w " BR C01422 ; " " C01322: BIT #KY.CBF,$QUAL2 ; "w5 " BEQ C01350 ; " " BIS #24000,FLAGWD ; "wU ( " MOV #$BFCDT,$SDAT ; "w " BR C01422 ; " " C01350: BIT #KY.RAF,$QUAL2 ; "w5 " BEQ C01376 ; " " BIS #50000,FLAGWD ; "wU P " MOV #$AFRDT,$SDAT ; "w " BR C01422 ; " " C01376: BIT #KY.CAF,$QUAL2 ; "w5 " BEQ C01440 ; " " MOV #$AFCDT,$SDAT ; "w " BIS #44000,FLAGWD ; "wU H " C01422: MOV $SDAT,R1 ; "A " CALL $CVTDT ; "w " BIS #CF.DAT,$CFLAG ; "wU " C01440: RETURN ; " " $CKUFD: MOV $FILNM,R2 ; "B " BEQ C01574 ; "* " CMP R2,$UFDNM ; "7 " BNE C01476 ; " " BIT #KY.VPS,$QUAL3 ; "w5 " BNE C01476 ; " " BIS #CF.DON,$CFLAG ; "wU " BR C01546 ; " " C01476: MOV #$FILES,R5 ; "E " C01502: CMP #177777,(R5) ; "M% " BEQ C01514 ; " " CMP (R5),(R0) ; "H#" BNE C01534 ; " " C01514: CMP #177777,2(R5) ; "u% " BEQ C01574 ; " " CMP 2(R5),2(R0) ; "p- " BEQ C01552 ; " " C01534: DEC R2 ; "B " BEQ C01546 ; " " ADD #16,R5 ; "Ee " BR C01502 ; "n " C01546: SEC ; "1 " BR C01644 ; " " C01552: CMP #177777,(R5) ; "M% " BEQ C01574 ; " " BIT #KY.EXC!KY.VPS,$QUAL3 ; "w5 " BNE C01574 ; " " INC $UFDNM ; "7 " C01574: CLC ; "! " BIT #KY.EXC,$QUAL3 ; "w5 " BEQ C01650 ; " " TST 4(R5) ; "u " BEQ C01644 ; " " CMP #177777,4(R5) ; "u% " BNE C01650 ; " " CMP #177777,12(R5) ; "u% " BNE C01650 ; " " CMP #177777,14(R5) ; "u% " BNE C01650 ; " " C01644: JMP C02120 ; "w ( " C01650: RETURN ; " " $CKFIL: MOV #$FILES,R5 ; "E " MOV $FILNM,R2 ; "B " BEQ C02116 ; "M " C01664: CMP #177777,(R5) ; "M% " BEQ C01700 ; " " CMP (R5),CURUFD ; "w# " BNE C02100 ; "@ " C01700: CMP #177777,2(R5) ; "u% " BEQ C01720 ; " " CMP 2(R5),CRUFD2 ; "w- " BNE C02100 ; "8 " C01720: TST 4(R5) ; "u " BNE C01752 ; " " TST 12(R5) ; "u " BNE C01752 ; " " TST 14(R5) ; "u " BNE C01752 ; " " C01742: BIS #1000,FLAGWD ; "wU " BR C02116 ; "2 " C01752: CMP #177777,4(R5) ; "u% " BNE C02004 ; " " CMP #177777,12(R5) ; "u% " BNE C02032 ; " " CMP #177777,14(R5) ; "u% " BEQ C01742 ; "p " BR C02062 ; " " C02004: CMP 4(R5),(R3) ; "K- " BNE C02100 ; " " CMP 6(R5),2(R3) ; "s- " BNE C02100 ; " " CMP 10(R5),4(R3) ; "s- " BNE C02100 ; " " C02032: CMP #177777,12(R5) ; "u% " BEQ C02052 ; " " CMP 12(R5),6(R3) ; "s- " BNE C02100 ; " " C02052: CMP #177777,14(R5) ; "u% " BEQ C02116 ; " " C02062: TST 14(R5) ; "u " BEQ C02116 ; " " CMP 14(R5),10(R3) ; "s- " BEQ C02116 ; " " C02100: DEC R2 ; "B " BEQ C02112 ; " " ADD #16,R5 ; "Ee " BR C01664 ; "5 " C02112: SEC ; "1 " BR C02120 ; " " C02116: CLC ; "! " C02120: BIT #KY.EXC,$QUAL3 ; "w5 " BEQ C02140 ; " " BCS C02136 ; " " SEC ; "1 " BR C02140 ; " " C02136: CLC ; "! " C02140: RETURN ; " " BACOUT: MOV #$BUF2,R2 ; "B " BIT #KY.RES,$QUAL4 ; "w5 " BEQ C02162 ; " " MOV $DIRAD,R2 ; "B " C02162: BIT #KY.SET,$QUAL2 ; "w5 " BEQ C02234 ; " " MOV #6,R3 ; "C " MOV #$SET,R1 ; "A " C02202: CMP (R1)+,(R2)+ ; "R$" BNE C02332 ; "* " DEC R3 ; "C " BNE C02202 ; "| " BIT #KY.RES,$QUAL4 ; "w5 " BEQ C02230 ; " " MOV $DIRAD,R2 ; "B " BR C02234 ; " " C02230: MOV #$BUF2,R2 ; "B " C02234: MOV #C02476,R1 ; "A " MOV 14(R2),(R1)+ ; " " MOV #14,(R1)+ ; "Q " MOV R2,(R1)+ ; " " MOV #C02551,(R1)+ ; "Q " MOV #14,(R1)+ ; "Q " MOV R2,(R1) ; " " ADD #16,(R1)+ ; "Qe " MOV #C02551,(R1)+ ; "Q " MOV #6,R3 ; "C " ADD #32,R2 ; "Be " C02304: MOV (R2)+,(R1)+ ; " " DEC R3 ; "C " BNE C02304 ; "} " MOV #C02476,R2 ; "B " MOV #C02442,R1 ; "A " CALL OUT ; "w 8 " CLC ; "! " BR C02334 ; " " C02332: SEC ; "1 " C02334: RETURN ; " " UFDNAM: MOV R4,R2 ; " " ADD #12,R2 ; "Be " MOV #C02532,R1 ; "A " CALL OUT ; "w " " RETURN ; " " UFDCNT: CMP R4,#$BUF2+1000 ; " ! " BEQ C02414 ; " " TST (R4) ; "L " BEQ C02414 ; " " MOV R4,R2 ; " " ADD #6,R2 ; "Be " MOV #C02544,R1 ; "A " CALL OUT ; "w " ADD #20,R4 ; "De " BR UFDCNT ; "q " C02414: RETURN ; " " OUT: MOV #COMMSG,R0 ; "@ " CALL $EDMSG ; "w " MOV R1,TTYMSG+Q.IOPL+2 ; "w " MOV #TTYMSG,-(SP) ; "f " EMT 377 ; " " RETURN ; " " C02442: BIC @47526(R0),-(R5) ; "%NVO" CMP (R5)+,(R4) ; "L%" CMP @20040(R1),(R5) ; "M. " CMP (R4)+,-(R0) ; " %" BIC R5,(SP)+ ; "VA" BIC R4,-(R5) ; "%A" BIS @(R0)+,-(R5) ; "%V" CMP (R5)+,R1 ; "A%" CMP (R5)+,R1 ; "A%" CMP R1,@(R1)+ ; "Y " BIT (R4),-(R5) ; "%3" JMP @(R2)+ ; "Z " .=.+34 C02532: BIC @22533(R0),-(R5) ; "%N[%" CMP 51045(R1),(R2)+ ; "R,%R" JMP @(R5)+ ; "] " C02544: BIC @54045(R0),-(R5) ; "%N%X" C02550: JSR R4,R0 ; " " C02551= C02550+1 $INIDV: BIT #KY.D2T,$QUAL3 ; "w5 " BEQ C02570 ; " " CALL C02672 ; "w D " BR C02670 ; " " C02570: BIT #KY.T2D,$QUAL3 ; "w5 " BEQ C02606 ; " " CALL C03044 ; "w " BR C02670 ; " " C02606: BIT #KY.BAC,$QUAL4 ; "w5 " BEQ C02624 ; " " CALL C02672 ; "w ( " BR C02670 ; " " C02624: BIT #KY.RES,$QUAL4 ; "w5 " BEQ C02642 ; " " CALL C03044 ; "w " BR C02670 ; " " C02642: BIT #KY.ATT,$QUAL3 ; "w5 " BNE C02670 ; " " CALL C02672 ; "w " CALL C03044 ; "w r " BIS #KY.ATT,$QUAL3 ; "wU " C02670: RETURN ; " " C02672: MOV #IO.ATT,$INDPB+Q.IOFN ; "w " MOVB $DSKIN+3,$INDPB+Q.IOLU ; "w " MOVB #EFN1,$INDPB+Q.IOEF ; "w " MOV #$INDPB,-(SP) ; "f " EMT 377 ; " " BCS C02740 ; " " MOV #EFN1,-(SP) ; "f " MOV #1051,-(SP) ; "f ) " EMT 377 ; " " BCC C02742 ; " " C02740: .BYTE EC.HNR ; " " .BYTE 211 ; " " C02742: MOVB $INSTA,R0 ; "@ " BPL C03004 ; " " MOV #$DSKIN,$PRDEV ; "w " MOV R0,$IOCOD ; "7 " CMPB R0,#IE.PRI ; " " BNE C03002 ; " " BIT #KY.MOU,$QUAL3 ; "w5 " BNE C03004 ; " " .BYTE EC.VNM ; " " .BYTE 211 ; " " C03002: .BYTE EC.FAT ; " " .BYTE 211 ; " " C03004: CLR $IOCOD ; "7 " CLR $PRDEV ; "7 " MOV #IO.SEC,$INDPB+Q.IOFN ; "w " MOV #$INDPB,-(SP) ; "f " EMT 377 ; " " MOV #EFN1,-(SP) ; "f " MOV #1051,-(SP) ; "f ) " EMT 377 ; " " RETURN ; " " C03044: MOV #1000,$OUDPB+Q.IOPL+2 ; "w " MOVB $DSKOU+3,$OUDPB+Q.IOLU ; "w " MOVB $DSKOU+3,$OUDP2+Q.IOLU ; "w " MOVB $DSKOU+3,$OUDP3+Q.IOLU ; "w " MOV #IO.ATT,$OUDPB+Q.IOFN ; "w " MOV #$OUDPB,-(SP) ; "f " EMT 377 ; " " BCS C03126 ; " " MOV #EFN2,-(SP) ; "f " MOV #1051,-(SP) ; "f ) " EMT 377 ; " " BCC C03130 ; " " C03126: .BYTE EC.HNR ; " " .BYTE 211 ; " " C03130: .IF DF,$VGRSX ;VIRGIN RSX VERSION IF DEFINED MOVB $OUSTA,R0 ; "@ " .IFF JMP ATPAT$ ;IF WE'RE FAKING IT FOR VMS, DO IN PATCH NOP ;MAINTAIN LENGTH ALIKE .ENDC BPL C03200 ; " " ; GO TO ATTACH SUCCESS POINT IF + ; TO ALLOW BRU TO WORK ON VMS, FILTER SUCCESSES AND MAKE THEM LOOK ; LIKE FAILURES WITH IE.PRI IF USER SAID /NOI (OR IF THAT'S CURRENT DEFAULT) ; GCE ATFAL: ; ATTACH FAILURE POINT MOVB R0,$IOCOD ; "7 " MOV #$DSKOU,$PRDEV ; "w " CMPB R0,#IE.PRI ; " " BNE C03176 ; " " BIS #CF.MOU,$CFLAG ; "wU " BIT #KY.INI,$QUAL1 ; "w5 " BEQ C03220 ; " " C03174: .BYTE EC.VNM ; " " .BYTE 211 ; " " C03176: .BYTE EC.FAT ; " " .BYTE 211 ; " " ATTSUC: C03200: BIT #KY.CMP,$QUAL2 ; "w5 " BNE C03220 ; " " BIT #KY.INI,$QUAL1 ; "w5 " BEQ C03174 ; "v " C03220: CLR $IOCOD ; "7 " CLR $PRDEV ; "7 " MOV #IO.SEC,$OUDPB+Q.IOFN ; "w " MOV #$OUDPB,-(SP) ; "f " EMT 377 ; " " MOV #EFN2,-(SP) ; "f " MOV #1051,-(SP) ; "f ) " EMT 377 ; " " RETURN ; " " $RSWFL: BIT #KY.VPS,$QUAL3 ; "w5 " BNE C03506 ; "G " BIT #KY.VMG,$QUAL3 ; "w5 " BEQ C03310 ; " " BIT #KY.CMP,$QUAL2 ; "w5 " BEQ C03506 ; "? " C03310: BIT #RS.CAF,$RSFLG ; "w5 " BNE C03506 ; "; " INC HDRCNT ; "7 " ADD F.HIBK+20(R0),DTACNT+2 ; "7l " ADC DTACNT ; "w " ADD F.HIBK+16(R0),DTACNT ; "7l " BR C03376 ; " " $WRTFL: BIT #KY.VPS,$QUAL3 ; "w5 " BNE C03506 ; ", " BIT #KY.VMG,$QUAL3 ; "w5 " BEQ C03376 ; " " BIT #KY.CMP,$QUAL2 ; "w5 " BEQ C03506 ; "$ " C03376: BIT #KY.DIS,$QUAL3 ; "w5 " BEQ C03506 ; " " JSR R5,SAVRG ; "w &z" MOV #C03542,R1 ; "A " INC DISPHD ; "7 " BR C03460 ; " " $WRUFD: BIT #KY.DIS,$QUAL3 ; "w5 " BEQ C03506 ; " " BIT #KY.VPS,$QUAL3 ; "w5 " BNE C03506 ; " " JSR R5,SAVRG ; "w z" MOV #C03524,R1 ; "A " MOV #CURUFD,R2 ; "B " C03460: MOV #COMMSG,R0 ; "@ " CALL $EDMSG ; "w " MOV R1,TTYMSG+Q.IOPL+2 ; "w " MOV #TTYMSG,-(SP) ; "f " EMT 377 ; " " JSR R5,RESRG ; "w zz" C03506: MOV CURUFD,DISUFD ; "w " MOV CURUFD+2,DISUFD+2 ; "w " RETURN ; " " C03524: BIC @47045(R0),-(R5) ; "%N%N" CMP (R5)+,@(R3)+ ; "[%" CMP 51045(R1),(R2)+ ; "R,%R" CMP (R5)+,@(R5)+ ; "]%" JMP (SP) ; "N " C03542: BIC @54045(R0),-(R5) ; "%N%X" .BYTE 0 ; " " .=.+1 $CKPRO: BIT #KY.MOU,$QUAL3 ; "w5 " BEQ C03744 ; ": " BIT #400,FLAGWD ; "w5 " BNE C03744 ; "6 " BIT #KY.EXC,$QUAL3 ; "w5 " BNE C03744 ; "2 " CMPB #10,GTPBUF+G.TSDU+1 ; "w% " BCS C03620 ; " " BIT #1,12(R5) ; "u5 " BEQ C03744 ; "* " C03620: CMP GTPBUF+36,10(R5) ; "u- " BNE C03640 ; " " BIT #20,12(R5) ; "u5 " BEQ C03744 ; "" " C03640: CMPB GTPBUF+G.TSDU+1,11(R5) ; "u- " BNE C03660 ; " " BIT #400,12(R5) ; "u5 " BEQ C03744 ; " " C03660: BIT #10000,12(R5) ; "u5 " BEQ C03744 ; " " BIT #400,$FLAG2 ; "w5 " BNE C03740 ; " " BIT #CF.UFD,$CFLAG ; "w5 " BEQ C03716 ; " " MOV R0,$PRFIL ; "7 " BR C03730 ; " " C03716: MOV R3,$PRFIL ; "w " MOV #CURUFD,$PRUFD ; "w " C03730: ADD #6,$PRFIL ; "we " .BYTE EC.VNM ; " " .BYTE 211 ; " " C03740: SEC ; "1 " BR C03746 ; " " C03744: CLC ; "! " C03746: RETURN ; " " $BKEND: TST HDRCNT ; "w " BNE C04076 ; "( " BIS #10,$FLAG2 ; "wU " BIT #KY.D2T,$QUAL3 ; "w5 " BNE C04062 ; " " BIT #KY.NOI,$QUAL1 ; "w5 " BNE C04062 ; " " BIT #KY.BAC,$QUAL4 ; "w5 " BNE C04062 ; " " BIT #RS.CMP,$RSFLG ; "w5 " BNE C04062 ; " " MOV R2,-(SP) ; "& " MOV #$OUDP2,R2 ; "B " CALL $MAPWT ; "w " MOV #$OUDP3,R2 ; "B " CALL $MAPWT ; "w " MOV (SP)+,R2 ; " " MOV #1000,$OUDPB+Q.IOPL+2 ; "w " CALL $UFDWT ; "w " C04062: CLR $PRDEV ; "7 " TST DISPHD ; "w " BNE C04076 ; " " .BYTE EC.NUT ; " " .BYTE 211 ; " " C04076: BIT #KY.DIS,$QUAL3 ; "w5 " BEQ C04146 ; " " MOV DISPHD,C04220 ; "w D " MOV #COMMSG,R0 ; "@ " MOV #C04216,R2 ; "B " MOV #C04150,R1 ; "A " CALL $EDMSG ; "w " MOV R1,TTYMSG+Q.IOPL+2 ; "w " MOV #TTYMSG,-(SP) ; "f " EMT 377 ; " " C04146: RETURN ; " " C04150: BIC @67524(R0),-(R5) ; "%NTo" ADD R5,20154(R4) ; "tal " ADD @(R1)+,@-(PC) ; "of" CMP (R4)+,-(R0) ; " %" CMP @61040(R1),(R4)+ ; "T. b" ADD @65543(R5),@-(R4) ; "lock" CMP R1,67151(R3) ; "s in" CMP (R4)+,-(R0) ; " %" CMP @63040(R1),(R5) ; "M. f" ADD 71545(R1),@-(R1) ; "iles" .WORD 47045 ; "%N" .BYTE 0 ; " " .=.+1 C04216: .WORD DTACNT ; " " C04220: HALT ; " " $FNDID: MOV IBSZ,R5 ; "E " MOV #$BUF2,Q.IOPL+$INDPB ; "w " MOV IBLB,Q.IOPL+6+$INDPB ; "w " MOV IBLB+2,Q.IOPL+10+$INDPB ; "w " CLR R1 ; " " C04252: MOV #$INDPB,R4 ; "D " CALL GETBLK ; "w Nw" BCC C04276 ; " " MOV #1,$PRFID ; "w " .BYTE EC.DRE ; " " .BYTE 211 ; " " BR C04324 ; " " C04276: MOV #$BUF2,R2 ; "B " C04302: CMP #177777,(R2) ; "J% " BNE C04342 ; " " C04310: INC R1 ; " " ADD #2,R2 ; "Be " CMP R2,#$BUF2+1000 ; " " BNE C04302 ; "w " C04324: DEC R5 ; "E " BEQ C04452 ; ") " INC $INDPB+Q.IOPL+10 ; "7 " ADC $INDPB+Q.IOPL+6 ; "w " BR C04252 ; "d " C04342: MOV R1,-(SP) ; "f " MOV #20,R0 ; "@ " CALL $MUL ; "w " TST R0 ; "@ " BNE C04452 ; " " CLR R4 ; " " MOV (R2),R0 ; " " C04364: INC R4 ; " " CMP R4,#21 ; " ! " BEQ C04446 ; " " ROR R0 ; " " BCS C04364 ; "z " ADD R4,R1 ; " a" BCS C04452 ; " " CMP R1,#62435 ; "W e" BGT C04452 ; " " MOV R5,-(SP) ; "f " MOV #CR.FFI,R5 ; "E " C04420: TST (R5) ; "M " BEQ C04432 ; " " ADD #2,R5 ; "Ee " BR C04420 ; "{ " C04432: MOV R1,(R5) ; "M " MOV (SP)+,R5 ; " " DEC R3 ; "C " BEQ C04452 ; " " SUB R4,R1 ; " a" BR C04364 ; "g " C04446: MOV (SP)+,R1 ; " " BR C04310 ; "O " C04452: TST (SP)+ ; "V " RETURN ; " " RDMRPS: MOV #$BUF2,HDADR ; "w " MOV #$BKBLK,R2 ; "B " MOV #MFDRP,RPADR ; "w " MOV #4,FILEID ; "w " CLR EXTFLG ; "7 " CALL READRP ; "w Tv" MOV LOGEOF+2,MFDEOF ; "w " MOV RPS,MFDNUM ; "w " RETURN ; " " $NBOOT: NOP ; " " RESET ; " " MOV #1000,SP ; "F " MOV PC,R0 ; "@ " ADD #362,R0 ; "@er " C04550: MOVB (R0)+,R1 ; " " BEQ C04562 ; " " CALL C04566 ; "w " BR C04550 ; "{ " C04562: RESET ; " " HALT ; " " C04566: MOVB R1,@#177566 ; "_ v " C04572: TSTB @#177564 ; "_ t " BPL C04572 ; "} " RETURN ; " " SAVBOT: MOV R0,-(SP) ; "& " CMPB #1,VOLNUM ; "w% " BEQ C04646 ; " " MOV #CURMPT,R2 ; "B " MOV #C05062,R5 ; "E " MOV #22,R0 ; "@ " C04630: MOV (R5)+,(R2)+ ; "R " DEC R0 ; "@ " BNE C04630 ; "} " BIT #100,$FLAG2 ; "w5@ " BNE C04742 ; " " C04646: MOV #SAVALL,R2 ; "B " MOV #C05062,R5 ; "E " MOV #10,R0 ; "@ " C04662: MOV (R2)+,(R5)+ ; " " DEC R0 ; "@ " BNE C04662 ; "} " MOV SAVR0,(R5)+ ; "U " MOV SAVR3,(R5)+ ; "U " MOV RPPNT,C05110 ; "w " MOV RPTAB,R2 ; "B " MOV R2,C05106 ; "7 x " MOV #C05112,R5 ; "E " MOV #5,R0 ; "@ " C04726: MOV (R2)+,(R5)+ ; " " DEC R0 ; "@ " BNE C04726 ; "} " MOV OLDPTR,C05124 ; "w r " C04742: MOV (SP)+,R0 ; " " RETURN ; " " RESBOT: MOV R0,-(SP) ; "& " CALL RDMRPS ; "w B " BCC C04760 ; " " .BYTE EC.MFH ; " " .BYTE 211 ; " " C04760: MOV CURMPT,R0 ; "@ " BEQ C05026 ; " " MOV R0,SAVPNT ; "7 " DEC R0 ; "@ " ASL R0 ; "@ " ASL R0 ; "@ " ADD #MFDRP,R0 ; "@e " MOV R0,MFDPNT ; "7 " MOV CURMRP,(R0)+ ; "P " MOV CURMRP+2,(R0) ; "H " MOV #RPTABL,OLDPTR ; "w " C05026: BIC #1,$FLAG2 ; "wE " MOV #$BUF2,HEADRS ; "w " MOV #$BUF2+10000,HDREND ; "w " MOV #1000,RPLEFT ; "w " MOV (SP)+,R0 ; " " RETURN ; " " C05062: HALT ; " " .=.+4 HALT ; " " HALT ; " " .=.+4 HALT ; " " HALT ; " " HALT ; " " C05106: HALT ; " " C05110: HALT ; " " .=.+12 C05124: HALT ; " " CLR (R5) ; " " CMP R0,(R2) ; " " CMP R0,-(R0) ; " " CMP @-(R0),@-(R2) ; "**" BIS (R0)+,@-(R2) ; "*T" BIC -(R5),(R0) ; "HI" CMP R1,(R3)+ ; "S " BIC @52514(R5),(SP)+ ; "VOLU" BIC (R5)+,(R5) ; "ME" BIC (R0)+,-(R0) ; " D" BIC (R5)+,(PC) ; "OE" CMP R1,(R3)+ ; "S " BIC @20124(R5),(SP) ; "NOT " BIC @52116(R5),R3 ; "CONT" BIC -(R5),R1 ; "AI" CMP R1,(SP) ; "N " CMP R1,R1 ; "A " BIC R5,(R0) ; "HA" BIC (R1)+,(R2)+ ; "RD" BIC R5,#42522 ; "WARE" BIC (R0),-(R0) ; " B" BIC @40524(R5),(PC) ; "OOTA" BIC 20105(R1),R2 ; "BLE " BIS -(R5),(R3)+ ; "SY" BIS (R1)+,(R3)+ ; "ST" BIC 25040(R5),R5 ; "EM *" CMP @-(R0),@-(R2) ; "**" CLR (R5) ; " " .WORD 12 ; " " .IF NDF,$VGRSX ; ATTACH PATCH... .PSECT $$PAT ATPAT$: MOVB $OUSTA,R0 ;GET ATTACH STATUS BPL 1$ ;IF SUCCESS, HAVE TO FIX. LEAVE FAILURE ALONE JMP ATFAL 1$: BIT #KY.INI,$QUAL1 ;IF HE SAID /INI, BIT IS SET BEQ 2$ ;IF EQ, IT'S /NOI ; HE SAID /INI BUT ATTACH WORKED. LET HIM SUFFER. JMP ATTSUC 2$: MOVB #IE.PRI,R0 ;HE SAID /NOI, SO PRETEND JMP ATFAL ;WE GOT PRI ERROR AND FAILED .PSECT ;BACK TO NORMAL PSECT .ENDC .=.-5236 C02476= .+2476 C05112= .+5112 .END