VOL - MCR VOLUME DISPLAY TASK MACRO D1013 13-APR-78 11:14 PAGE 1 1 .NLIST BEX 2 .TITLE VOL - MCR VOLUME DISPLAY TASK 3 .IDENT /WBCCII/ 4 .MCALL QIOW$,DIR$,RQST$,GMCR$,EXIT$S 5 ; 6 ; VOL IS AN MCR TASK WHICH DISPLAYS THE VOLUME CHARACTERISTICS OF ALL MOUNTABLE, 7 ; FILES-11, DIRECTORY-STRUCTURED DEVICES IN THE PUD. IT DISPLAYS WHETHER THE 8 ; DEVICE IS OFF-LINE, REDIRECTED, MOUNTED AS A FOREIGN VOLUME, OR MOUNTED AS A 9 ; FILES-11 VOLUME. IF A FILES-11 VOLUME IS MOUNTED ON A DEVICE, VOL DISPLAYS 10 ; THE VOLUME'S LABEL AND ITS NUMBER OF USERS. 11 ; 12 ; ASSEMBLY INSTRUCTIONS: 13 ; MCR>MAC VOLUME,VOLUME=VOLUME 14 ; 15 ; TASK-BUILD INSTRUCTIONS: 16 ; MCR>TKB 17 ; TKB>[11,1]VOLUME/PR/MU/-CP/-FP/-TA,VOLUME=VOLUME 18 ; TKB>SY:[1,1]EXEC.STB/SS 19 ; TKB>/ 20 ; ENTER OPTIONS: 21 ; TKB>TASK=...VOL ! UIC=[1,1] ! PRI=221 ! PAR=GEN ! STACK=100 22 ; TKB>// 23 ; 24 ; INSTALLATION INSTRUCTIONS: 25 ; MCR>INS [11,1]VOLUME 26 ; 27 ; VOL IS INVOKED AS FOLLOWS: 28 ; MCR>VOL OR 29 ; 30 ; MACROS USED 31 ; 32 .MACRO PUSH,LIST 33 .IRP .I., 34 .IF IDN,<.I.>,<*> 35 CLR -(SP) 36 .IFF 37 MOV .I.,-(SP) 38 .ENDC 39 .ENDR 40 .ENDM 41 .MACRO POP,LIST 42 .IRP .I., 43 .IF IDN,<.I.>,<*> 44 TST (SP)+ 45 .IFF 46 MOV (SP)+,.I. 47 .ENDC 48 .ENDR 49 .ENDM VOL - MCR VOLUME DISPLAY TASK MACRO D1013 13-APR-78 11:14 PAGE 2 51 ; 52 ; EQUATES 53 ; 54 000005 LUN = 5 ;DISPLAY LINE LUN 55 000012 FLAG = 10. ;DISPLAY LINE EVENT FLAG 56 177777 EOM = -1 ;END-OF-MESSAGE INDICATOR 57 000120 MAXLNG = 80. ;MAXIMUM MESSAGE LENGTH 58 000000 V.TRCT = 0 ;VCB EXTENSION USER NUMBER OFFSET 59 000040 V.LABL = 40 ;VCB EXTENSION VOLUME LABEL OFFSET 60 000014 V.LENG = 12. ;VOLUME LABEL LENGTH 61 ; 62 ; DIRECTIVES 63 ; 64 000000 THEQIO: QIOW$ IO.WVB,LUN,FLAG,,IOSTAT,,<0,0,40> 65 000022 GETMCR: GMCR$ 66 000144 000000 000000 IOSTAT: .WORD 0,0 ;I/O STATUS BLOCK 67 ; 68 ; MESSAGES 69 ; 70 000150 104 126 116 DV1MSG: .ASCII /DVN: / 71 000156 130 130 130 MOUMSG: .ASCII /XXXXXXXXXXXX/ 72 000172 040 115 117 BLANK: .ASCII / MOUNTED HAS / 73 000207 104 104 104 USER: .ASCII /DDDDD USER/ 74 000221 123 377 S: .ASCII /S/ 75 000223 122 105 104 REDMSG: .ASCII /REDIRECTED TO / 76 .EVEN 77 000242 104 126 116 DV2MSG: .ASCII /DVN:/ 78 000247 104 111 123 DMOMSG: .ASCII /DISMOUNT PENDING/ 79 000270 115 117 125 FORMSG: .ASCII /MOUNTED AS FOREIGN/ 80 000313 103 117 116 DUFMSG: .ASCII /CONTROLLER OFF-LINE/ 81 000337 126 117 114 VOFMSG: .ASCII /VOLUME OFF-LINE/ 82 000357 104 105 126 DH1MSG: .ASCII /DEVICE HANDLER RESIDENT/ 83 000407 104 105 126 DH2MSG: .ASCII /DEVICE HANDLER NON-RESIDENT/ 84 000443 102 101 104 BADMSG: .ASCII /BAD VCB EXTENSION/ 85 000465 040 055 040 SEPMSG: .ASCII / - / 86 .EVEN VOL - MCR VOLUME DISPLAY TASK MACRO D1013 13-APR-78 11:14 PAGE 3 88 ; 89 ; INITIALIZATION 90 ; 91 000472 VOLUME: DIR$ #GETMCR ;GET AN MCR COMMAND LINE 92 000500 162706 000120 SUB #MAXLNG,SP ;ALLOCATE SPACE FOR THE MESSAGE LINE 93 000504 010667 177304 MOV SP,THEQIO+Q.IOPL ;PUT ITS ADDRESS IN THE QIO PARAMETER LIST 94 000510 016704 000000G MOV .PUDBA,R4 ;SET THE START OF THE PUD TABLE 95 ; 96 ; CHECK FOR PUD REDIRECTION 97 ; 98 000514 010405 CHKRED: MOV R4,R5 ;SET THE CURRENT PUD ADDRESS 99 000516 026505 000000G 10$: CMP U.RP(R5),R5 ;IF THE PUD IS REDIRECTED TO ITSELF, 100 000522 001403 BEQ CHKUC1 ;THAT'S THE END OF THE REDIRECTION 101 000524 016505 000000G MOV U.RP(R5),R5 ;OTHERWISE, SET THE REDIRECTED PUD 102 000530 000772 BR 10$ ;ADDRESS AND CHECK IT FOR REDIRECTION 103 ; 104 ; CHECK CHARACTERISTICS WORD 1 105 ; 106 000532 032765 000000G 000000G CHKUC1: BIT #UC.DIR,U.C1(R5) ;CHECK IF THE DEVICE IS DIRECTORY-STRUCTURED 107 000540 001410 BEQ 10$ 108 000542 032765 000000G 000000G BIT #UC.MNT,U.C1(R5) ;CHECK IF THE DEVICE IS MOUNTABLE 109 000550 001404 BEQ 10$ 110 000552 032765 000000G 000000G BIT #UC.F11,U.C1(R5) ;CHECK IF THE DEVICE IS FILES-11 STRUCTURED 111 000560 001002 BNE SETDV1 112 000562 000167 000414 10$: JMP NXTPUD ;IF ANY CHECK FAILS => NEXT PUD 113 ; 114 ; SET THE DEVICE MESSAGE 115 ; 116 000566 016467 000000G 177354 SETDV1: MOV U.DN(R4),DV1MSG ;SET THE DEVICE NAME 117 000574 116467 000000G 177350 MOVB U.UN(R4),DV1MSG+2 ;SET THE UNIT NUMBER 118 000602 152767 000060 177342 BISB #'0,DV1MSG+2 ;MAKE IT AN ASCII CHARACTER 119 000610 PUSH #DV1MSG ;ADD THE DEVICE MESSAGE 120 000614 020405 CMP R4,R5 ;CHECK FOR REDIRECTION 121 000616 001414 BEQ CHKUFB ;IF FOUND, 122 000620 016567 000000G 177414 MOV U.DN(R5),DV2MSG ;SET THE REDIRECTED DEVICE NAME 123 000626 116567 000000G 177410 MOVB U.UN(R5),DV2MSG+2 ;SET THE REDIRECTED UNIT NUMBER 124 000634 152767 000060 177402 BISB #'0,DV2MSG+2 ;MAKE IT AN ASCII CHARACTER 125 000642 PUSH #REDMSG ;BUILD THE REDIRECTED DEVICE MESSAGE 126 000646 000524 BR MESAGE 127 ; 128 ; CHECK THE FLAGS BYTE 129 ; 130 000650 132764 000000G 000000G CHKUFB: BITB #UF.OFL,U.FB(R4) ;CHECK IF THE CONTROLLER IS OFF-LINE 131 000656 001416 BEQ CHKUCH 132 000660 012701 000357' MOV #DH1MSG,R1 ;IF IT IS, 133 000664 132764 000000G 000000G BITB #UF.RH,U.FB(R4) 134 000672 001002 BNE 10$ ;CHECK IF THE DEVICE HANDLER IS RESIDENT 135 000674 012701 000407' MOV #DH2MSG,R1 136 000700 10$: PUSH <#DUFMSG,#SEPMSG,R1> ;THEN BUILD THE OFF-LINE MESSAGE 137 000712 000502 BR MESAGE VOL - MCR VOLUME DISPLAY TASK MACRO D1013 13-APR-78 11:14 PAGE 4 139 ; 140 ; CHECK THE CHARACTERISTIC FLAGS BYTE 141 ; 142 000714 132764 000000G 000000G CHKUCH: BITB #CH.OFF,U.CH(R4) ;CHECK IF THE VOLUME IS OFF-LINE 143 000722 001403 BEQ 10$ 144 000724 PUSH #VOFMSG ;IF SO => BUILD THE VOLUME OFF-LINE MESSAGE 145 000730 000473 BR MESAGE 146 000732 132764 000000G 000000G 10$: BITB #CH.FOR,U.CH(R4) ;CHECK IF THE VOLUME IS MOUNTED AS FOREIGN 147 000740 001403 BEQ CHKVCB 148 000742 PUSH #FORMSG ;IF SO => BUILD THE VOLUME MOUNTED AS 149 000746 000454 BR CHKUNL ;FOREIGN MESSAGE 150 ; 151 ; EXTRACT THE MOUNT INFORMATION FROM THE VCB EXTENSION AREA 152 ; 153 000750 016405 000000G CHKVCB: MOV U.VA(R4),R5 ;SET THE VCB EXTENSION ADDRESS 154 000754 001003 BNE 10$ 155 000756 PUSH #BADMSG ;IF IT'S ZERO => BUILD THE BAD VCB MESSAGE 156 000762 000446 BR CHKUNL 157 000764 012700 000207' 10$: MOV #USER,R0 ;OTHERWISE, 158 000770 016501 000000 MOV V.TRCT(R5),R1 159 000774 112767 000123 177217 MOVB #'S,S ;PUT THE NUMBER OF USERS OF THE VOLUME 160 001002 022701 000001 CMP #1,R1 ;INTO THE VOLUME MOUNTED MESSAGE 161 001006 001002 BNE 20$ 162 001010 105067 177205 CLRB S 163 001014 012702 000005 20$: MOV #5,R2 164 001020 010003 MOV R0,R3 165 001022 105023 30$: CLRB (R3)+ 166 001024 077202 SOB R2,30$ 167 001026 004767 000000G CALL $CBDMG 168 001032 012700 000156' MOV #MOUMSG,R0 ;NEXT, 169 001036 062705 000040 ADD #V.LABL,R5 ;PUT THE VOLUME LABEL INTO 170 001042 012701 000006 MOV #V.LENG/2,R1 ;THE VOLUME MOUNTED MESSAGE 171 001046 005002 CLR R2 172 001050 051502 40$: BIS (R5),R2 173 001052 012520 MOV (R5)+,(R0)+ 174 001054 077103 SOB R1,40$ 175 001056 112767 000040 177106 MOVB #40,BLANK 176 001064 005702 TST R2 177 001066 001002 BNE 50$ 178 001070 105067 177076 CLRB BLANK 179 001074 50$: PUSH #MOUMSG 180 ; 181 ; CHECK IF A DISMOUNT IS PENDING 182 ; 183 001100 132764 000000G 000000G CHKUNL: BITB #CH.UNL,U.CH(R4) ;CHECK IF A DISMOUNT IS PENDING 184 001106 001404 BEQ MESAGE ;ON THE VOLUME 185 001110 PUSH <#SEPMSG,#DMOMSG> VOL - MCR VOLUME DISPLAY TASK MACRO D1013 13-APR-78 11:14 PAGE 5 187 ; 188 ; BUILD AND DISPLAY THE DEVICE MESSAGE 189 ; 190 001120 016700 176670 MESAGE: MOV THEQIO+Q.IOPL,R0 ;SET THE STARTING ADDRESS OF 191 001124 010001 MOV R0,R1 ;THE MESSAGE LINE AREA 192 001126 010102 MOV R1,R2 193 001130 160600 SUB SP,R0 ;CALCULATE THE NUMBER OF MESSAGE BLOCKS 194 001132 006200 ASR R0 ;TO BE COMBINED INTO THE DISPLAY LINE 195 001134 001422 BEQ NXTPUD 196 001136 014103 10$: MOV -(R1),R3 197 001140 112322 20$: MOVB (R3)+,(R2)+ ;BUILD THE DISPLAY LINE, SKIPPING NULLS AND 198 001142 003376 BGT 20$ ;STOPPING AT THE END-OF-MESSAGE INDICATOR 199 001144 105742 TSTB -(R2) 200 001146 001774 BEQ 20$ 201 001150 077006 SOB R0,10$ ;AFTER THE DISPLAY LINE IS ASSEMBLED, 202 001152 166702 176636 SUB THEQIO+Q.IOPL,R2 ;CALCULATE ITS LENGTH 203 001156 001411 BEQ NXTPUD 204 001160 010267 176632 MOV R2,THEQIO+Q.IOPL+2 ;DISPLAY THE MESSAGE 205 001164 DIR$ #THEQIO 206 001172 122767 000000G 176744 CMPB #IS.SUC,IOSTAT ;CHECK FOR AN ERROR 207 001200 001011 BNE EXIT 208 ; 209 ; ADVANCE TO THE NEXT PUD 210 ; 211 001202 016706 176606 NXTPUD: MOV THEQIO+Q.IOPL,SP ;RESET THE STACK POINTER 212 001206 062704 000000G ADD #U.SZ,R4 ;POINT AT THE NEXT PUD ENTRY 213 001212 026704 000000G CMP .PUDEA,R4 ;CHECK FOR THR END OF THE PUD TABLE 214 001216 101402 BLOS EXIT 215 001220 000167 177270 JMP CHKRED 216 ; 217 ; AT THE END OF THE PUD TABLE => EXIT 218 ; 219 001224 EXIT: EXIT$S 220 000472' .END VOLUME VOL - MCR VOLUME DISPLAY TASK MACRO D1013 13-APR-78 11:14 PAGE 5-1 SYMBOL TABLE BADMSG 000443R DUFMSG 000313R MESAGE 001120R SETDV1 000566R U.SZ = ****** GX BLANK 000172R DV1MSG 000150R MOUMSG 000156R THEQIO 000000R U.UN = ****** GX CHKRED 000514R DV2MSG 000242R NXTPUD 001202R UC.DIR= ****** GX U.VA = ****** GX CHKUCH 000714R EOM = 177777 Q.IOAE= 000012 UC.F11= ****** GX VOFMSG 000337R CHKUC1 000532R EXIT 001224R Q.IOEF= 000006 UC.MNT= ****** GX VOLUME 000472R CHKUFB 000650R FLAG = 000012 Q.IOFN= 000002 UF.OFL= ****** GX V.LABL= 000040 CHKUNL 001100R FORMSG 000270R Q.IOLU= 000004 UF.RH = ****** GX V.LENG= 000014 CHKVCB 000750R GETMCR 000022R Q.IOPL= 000014 USER 000207R V.TRCT= 000000 CH.FOR= ****** GX G.MCRB= 000002 Q.IOPR= 000007 U.CH = ****** GX $CBDMG= ****** GX CH.OFF= ****** GX IOSTAT 000144R Q.IOSB= 000010 U.C1 = ****** GX $$$ARG= 000011 CH.UNL= ****** GX IO.WVB= ****** GX REDMSG 000223R U.DN = ****** GX $$$OST= 000122 DH1MSG 000357R IS.SUC= ****** GX S 000221R U.FB = ****** GX .PUDBA= ****** GX DH2MSG 000407R LUN = 000005 SEPMSG 000465R U.RP = ****** GX .PUDEA= ****** GX DMOMSG 000247R MAXLNG= 000120 . ABS. 000000 000 001232 001 ERRORS DETECTED: 0 VIRTUAL MEMORY USED: 1656 WORDS ( 7 PAGES) DYNAMIC MEMORY: 14969 WORDS ( 57 PAGES) ELAPSED TIME: 00:00:23 ,VOLUME/-SP=VOLUME