MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page   0

TABLE OF CONTENTS   



   (2)     105  EXE$SNDEVMSG - SEND DEVICE DRIVER MAILBOX MESSA

   (3)     152  SYSTEM INTERNAL WRITE TO MAILBOX SUBROUTINE

   (4)     228  CANCELIO - CANCEL I/O ON MAILBOX UNIT

   (5)     303  CHECKIO - CHECK READ AND WRITE PARAMETERS

   (6)     367  FDTREAD - READ FUNCTION DECISION ROUTINE

   (7)     436  FDTSET - SET UP ATTENTION AST FUNCTION

   (8)     487  FDTEOF - WRITE EOF MESSAGE TO MAILBOX

   (9)     518  FDTWRITE - WRITE OPERATION FDT ROUTINE

   (11)    640  INSERT MESSAGE IN MAILBOX QUEUE

   (12)    676  STARTIO - STARTIO OPERATION

   (13)    704  FINISHREAD - FINISH READ I/O OPERATION

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page   1

V06                                                                                                                              (1)



                                     0000     1 	.TITLE	MBDRIVER - VAX/VMS MAILBOX DEVICE DRIVER 

                                     0000     2 	.IDENT	/V06/		;

                                     0000     3 ;

                                     0000     4 ; COPYRIGHT (C) 1978

                                     0000     5 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS 01754

                                     0000     6 ;

                                     0000     7 ; THIS SOFTWARE IS FURNISHED  UNDER A LICENSE FOR USE ONLY ON A SINGLE

                                     0000     8 ; COMPUTER  SYSTEM AND  MAY BE  COPIED ONLY WITH  THE INCLUSION OF THE

                                     0000     9 ; ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE, OR ANY OTHER COPIES THEREOF,

                                     0000    10 ; MAY NOT BE PROVIDED OR  OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON

                                     0000    11 ; EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE

                                     0000    12 ; TERMS.  TITLE TO AND  OWNERSHIP OF THE  SOFTWARE  SHALL AT ALL TIMES

                                     0000    13 ; REMAIN IN DEC.

                                     0000    14 ;

                                     0000    15 ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE

                                     0000    16 ; AND SHOULD  NOT BE CONSTRUED  AS A COMMITMENT  BY DIGITAL  EQUIPMENT

                                     0000    17 ; CORPORATION.

                                     0000    18 ;

                                     0000    19 ; DEC ASSUMES  NO  RESPONSIBILITY  FOR  THE USE OR  RELIABILITY OF ITS

                                     0000    20 ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.

                                     0000    21 ;

                                     0000    22 ;++

                                     0000    23 ; FACILITY:

                                     0000    24 ;

                                     0000    25 ;	VAX/VMS MAILBOX DEVICE DRIVER

                                     0000    26 ;

                                     0000    27 ; ABSTRACT:

                                     0000    28 ;

                                     0000    29 ;	THIS MODULE CONTAINS THE MAILBOX DRIVER I/O ROUTINES.

                                     0000    30 ;

                                     0000    31 ; AUTHOR: R. HEINEN 16-SEPT-76

                                     0000    32 ;

                                     0000    33 ;--

                                     0000    34 ; EXTERNAL SYMBOLS

                                     0000    35 ;

                                     0000    36 	$ACBDEF				; DEFINE AST CONTROL BLOCK

                                     0000    37 	$CADEF				; DEFINE CONDITIONAL ASSEMBLY

                                     0000    38 	$DDBDEF				; DEFINE DDB

                                     0000    39 	$DYNDEF				; DEFINE DYNAMIC BLOCK TYPES

                                     0000    40 	$IODEF				; DEFINE FUNCTION CODES

                                     0000    41 	$IRPDEF				; DEFINE I/O PACKET OFFSETS

                                     0000    42 	$IPLDEF				; DEFINE IPL NUMBERS

                                     0000    43 	$PCBDEF				; DEFINE PCB OFFSETS

                                     0000    44 	$PRDEF				; DEFINE PROCESSOR REGISTERS

                                     0000    45 	$PRIDEF				; DEFINE PRIORITY INCREMENTS

                                     0000    46 	$RSNDEF				; DEFINE RESOURCE NUMBERS

                                     0000    47 	$SSDEF				; DEFINE SYSTEM STATUS CODES

                                     0000    48 	$UCBDEF				; DEFINE UCB OFFSETS

                                     0000    49  

                                     0000    50 ;

                                     0000    51 ; LOCAL DEFINITIONS

                                     0000    52 ;

                           00000000  0000    53 UCB$L_MB_MSGQ	=UCB$L_FQFL

                           0000000C  0000    54 UCB$L_MB_W_AST	= UCB$L_ASTQFL

                           00000010  0000    55 UCB$L_MB_R_AST	= UCB$L_ASTQBL

                                     0000    56  

                           00000000  0000    57 P1		= 0			; OFFSET TO BUFFER ADDRESS IN ARGUMENT BLOCK

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page   2

V06                                                                                                                              (1)



                           00000004  0000    58 P2		= 4			; OFFSET TO REQUEST SIZE IN ARGUMENT BLOCK

                           00000008  0000    59 P3		= 8			; OFFSET FOR PARAMETER 3

                           0000000C  0000    60 P4		= 12			; OFFSET FOR PARAMETER 4

                                     0000    61  

                                     0000    62 ;

                                     0000    63 ; LOCAL DATA STORAGE

                                     0000    64 ;

                                 00000000    65 	.PSECT	$$$105_PROLOGUE

                                     0000    66 MB$DPT::				; DRIVER START

                                     0000    67 	DPTAB	-			; DRIVER PROLOGUE TABLE

                                     0000    68 		END=MB_END,-		; END OF DRIVER

                                     0000    69 		ADAPTER=UBA,-		; FAKE ADAPTER

                                     0000    70 		UCBSIZE=<^X074>,-	; SIZE OF UCB

                                     0000    71 		NAME=MBDRIVER		; DRIVER NAME

                                     001F    72 	DPT_STORE INIT			;

                                     001F    73 	DPT_STORE REINIT		;

                                     001F    74 	DPT_STORE END			; START AND END OF CONTROLLER INIT

                                     0000    75  

                                 00000000    76 	.PSECT	$$$115_DRIVER,LONG

                                     0000    77  

                                     0000    78 	DDTAB	MB,-			; DRIVER DISPATCH TABLE

                                     0000    79 		STARTIO,-		; STARTIO OPERATION

                                     0000    80 		0,-			; NO UNSOLICITED INTERRUTPS

                                     0000    81 		FUNCTABLE,-		; FUNCTION DECISION TABLE

                                     0000    82 		CANCELIO,-		; CANCEL I/O

                                     0000    83 		0,-			; REGISTER DUMP ROUTINE

                                     0000    84 		0,-			; SIZE OF DIAGNOSTIC BUFFER

                                     0000    85 		0			; SIZE OF ERROR LOG BUFFER

                                     0018    86  

                                     0018    87 ;

                                     0018    88 ; FUNCTION DECISION TABLE

                                     0018    89 ;

                                     0018    90  

                                     0018    91 FUNCTABLE:				; FUNCTION DECISION TABLE

                                     0018    92 	FUNCTAB	,<-			; LEGAL FUNCTIONS

                                     0018    93 		SETMODE,-		; ASK FOR READ OR WRITE AST'S

                                     0018    94 		WRITEOF,-		; WRITE EOF

                                     0018    95 		READLBLK,WRITELBLK,-

                                     0018    96 		READVBLK,WRITEVBLK,-

                                     0018    97 		READPBLK,WRITEPBLK>

                                     0020    98 	FUNCTAB,<READLBLK,READVBLK,READPBLK,-

                                     0020    99 		WRITELBLK,WRITEVBLK,WRITEPBLK>

                                     0028   100 	FUNCTAB FDTREAD,<READLBLK,READPBLK,READVBLK>; READ FUNCTION

                                     0034   101 	FUNCTAB FDTWRITE,<WRITELBLK,WRITEPBLK,WRITEVBLK>; WRITE FUNCTION

                                     0040   102 	FUNCTAB	FDTSET,<SETMODE>	; SET AST CONTROL

                                     004C   103 	FUNCTAB	FDTEOF,<WRITEOF>	; WRITE EOF

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page   3

V06             EXE$SNDEVMSG - SEND DEVICE DRIVER MAILBOX MESSA                                                                  (2)



                                     0058   105 	.SBTTL	EXE$SNDEVMSG - SEND DEVICE DRIVER MAILBOX MESSAGE

                                     0058   106 ;++

                                     0058   107 ; EXE$SNDEVMSG - SEND DEVICE SPECIFIC MESSAGE ON BEHALF OF DRIVER

                                     0058   108 ;

                                     0058   109 ; FUNCTIONAL DESCRIPTION:

                                     0058   110 ;

                                     0058   111 ; THIS ROUTINE BUILDS AND SENDS A DEVICE SPECIFIC MESSAGE TO A MAILBOX.

                                     0058   112 ; THE MESSAGE IS FORMATTED AS FOLLOWS:

                                     0058   113 ;

                                     0058   114 ;	WORD 0   = TYPE OF MESSAGE

                                     0058   115 ;	WORD 1   = UNIT OF DEVICE

                                     0058   116 ;	REMAINDER = COUNTED STRING OF DEVICE NAME

                                     0058   117 ;

                                     0058   118 ; INPUTS:

                                     0058   119 ;

                                     0058   120 ;	R2 = ADDRESS OF 

                                     0058   121 ;	R3 = MAILBOX UCB ADDRESS

                                     0058   122 ;	R4 = TYPE OF MESSAGE

                                     0058   123 ;	R5 = DEVICE UCB ADDRESS

                                     0058   124 ;

                                     0058   125 ;

                                     0058   126 ; OUTPUTS:

                                     0058   127 ;

                                     0058   128 ;	R0 = STATUS OF THE OPERATION

                                     0058   129 ;	R1,R2,R3,R4,R5 ARE DISTROYED

                                     0058   130 ;

                                     0058   131 ; STATUS RETURNS:

                                     0058   132 ;

                                     0058   133 ;	SEE EXE$WRTMAILBOX.

                                     0058   134 ;--

                                     0058   135 EXE$SNDEVMSG::				; SEND MESSAGE FOR DEVICE DRIVER

                          55     DD  0058   136 	PUSHL	R5			; SAVE SENDING DEVICE UCB

                     01F0 8F     BB  005A   137 	PUSHR	#^M<R4,R5,R6,R7,R8>	; PUSH MESSAGE TYPE AND RESERVE SPACE

         02 AE         48 A5     B0  005E   138 	MOVW	UCB$W_UNIT(R5),2(SP)	; INSERT UNIT OF DEVICE

            55         24 A5     D0  0063   139 	MOVL	UCB$L_DDB(R5),R5	; ADDRESS SENDING DDB

            52            5E     D0  0067   140 	MOVL	SP,R2			; COPY MESSAGE ADDRESS

                          0C     BB  006A   141 	PUSHR	#^M<R2,R3>		; SAVE MESSAGE ADDRESS AND TARGET UCB

            04            00     EF  006C   142 	EXTZV	#0,#4,DDB$T_NAME(R5),-(SP); GET SIZE OF NAME TO 15 CHARAS

            7E         14 A5         006F       

                          6E     D6  0072   143 	INCL	(SP)			; SET UP TO COPY SIZE TOO

         14 A5            6E     28  0074   144 	MOVC3	(SP),DDB$T_NAME(R5),4(R2); COPY NAME

                       04 A2         0078       

            8E            04     C1  007A   145 	ADDL3	#4,(SP)+,R3		; GET TOTAL MESSAGE SIZE

                          53         007D       

                          30     BA  007E   146 	POPR	#^M<R4,R5>		; GET ADDRESS AND TARGET UCB

                          06     10  0080   147 	BSBB	EXE$WRTMAILBOX		; DO THE MAILBOX WRITE

            5E            14     C0  0082   148 	ADDL	#20,SP			; RESTORE STACK

                          20     BA  0085   149 	POPR	#^M<R5>			; RESTORE SENDING UCB

                                 05  0087   150 	RSB				; RETURN

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page   4

V06             SYSTEM INTERNAL WRITE TO MAILBOX SUBROUTINE                                                                      (3)



                                     0088   152 	.SBTTL	SYSTEM INTERNAL WRITE TO MAILBOX SUBROUTINE

                                     0088   153 ;++

                                     0088   154 ; EXE$WRTMAILBOX - WRITE TO MAILBOX SUBROUTINE FOR EXECUTIVE USE

                                     0088   155 ;

                                     0088   156 ; FUNCTIONAL DESCRIPTION:

                                     0088   157 ;

                                     0088   158 ; THIS ROUTINE IS USED BY SYSTEM ROUTINES TO WRITE A MESSAGE TO A MAILBOX.

                                     0088   159 ;

                                     0088   160 ; INPUTS:

                                     0088   161 ;

                                     0088   162 ;	R3 = SIZE OF MESSAGE

                                     0088   163 ;	R4 = MESSAGE ADDRESS

                                     0088   164 ;	R5 = MAILBOX UCB ADDRESS

                                     0088   165 ;

                                     0088   166 ; OUTPUTS:

                                     0088   167 ;

                                     0088   168 ;	R0 = STATUS OF OPERATION

                                     0088   169 ;

                                     0088   170 ;	R1,R2 USED.

                                     0088   171 ;

                                     0088   172 ; COMPLETION CODES:

                                     0088   173 ;

                                     0088   174 ;	SS$_NORMAL

                                     0088   175 ;	SS$_MBTOOSML - MESSAGE TOO LARGE FOR MAILBOX

                                     0088   176 ;	SS$_MBFULL - MAILBOX FULL OF MESSAGES

                                     0088   177 ;	SS$_INSFMEM - MEMORY ALLOCATION PROBLEM

                                     0088   178 ;

                                     0088   179 ;--

                                     0088   180 EXE$WRTMAILBOX::			;

                                     0088   181 ;

                                     0088   182 ; SET THE PROPER IPL FOR INTERLOCK

                                     0088   183 ;

            7E            12     DB  0088   184 	MFPR	#PR$_IPL,-(SP)		; SAVE CURRENT IPL

            6E            0B     91  008B   185 	CMPB	#IPL$_MAILBOX,(SP)	; HIGH ENOUGH?

                          03     1B  008E   186 	BLEQU	10$			; IF LEQU THEN YES

                                     0090   187 	SETIPL	#IPL$_MAILBOX		; SET THE PROPER IPL

                                     0093   188 ;

                                     0093   189 ; MAIL THE MESSAGE

                                     0093   190 ;

            50       08D8 8F     3C  0093   191 10$:	MOVZWL	#SS$_MBFULL,R0		; ASSUME MESSAGE WILL NOT FIT

         14 A5         16 A5     B1  0098   192 	CMPW	UCB$W_MSGCNT(R5),UCB$W_MSGMAX(R5); MAIL BOX FULL?

                          4C     13  009D   193 	BEQL	20$			; IF YES THEN NO WRITE

            50       019C 8F     3C  009F   194 	MOVZWL	#SS$_MBTOOSML,R0	; ASSUME MESSAGE TOO BIG

            51         16 A3     9E  00A4   195 	MOVAB	22(R3),R1		; SET SIZE TO REQUEST

         18 A5            53     B1  00A8   196 	CMPW	R3,UCB$W_BUFQUO(R5)	; MESSAGE FIT?

                          3D     1A  00AC   197 	BGTRU	20$			; IF GTRU THEN NO

         3A A5            53     B1  00AE   198 	CMPW	R3,UCB$W_DEVBUFSIZ(R5)	; BIGGER THAN ALLOWED?

                          37     1A  00B2   199 	BGTRU	20$			; IF YES THEN ALSO ERROR

                          38     BB  00B4   200 	PUSHR	#^M<R3,R4,R5>		; SAVE REGISTERS FROM MOVC

                 00000000'GF     16  00B6   201 	JSB	G^EXE$ALONONPAGED	; GET THE MEMORY BLOCK

            2A            50     E9  00BC   202 	BLBC	R0,15$			; RETURN UNSUCESSFULLY ON FAILURE

                                     00BF   203 ;

                                     00BF   204 ; FILL IN BLOCK

                                     00BF   205 ;

                          82     7F  00BF   206 	PUSHAQ	(R2)+			; SAVE BLOCK ADDRESS AND PASS LINK WORDS

            82            51     B0  00C1   207 	MOVW	R1,(R2)+		; INSERT BLOCK SIZE

            82            13     B0  00C4   208 	MOVW	#DYN$C_BUFIO,(R2)+	; INSERT BLOCK TYPE

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page   5

V06             SYSTEM INTERNAL WRITE TO MAILBOX SUBROUTINE                                                                      (3)



            82         04 AE     B0  00C7   209 	MOVW	4(SP),(R2)+		; INSERT SIZE OF MESSAGE

                          82     D4  00CB   210 	CLRL	(R2)+			; SET NO PACKET

            50   00000000'GF     D0  00CD   211 	MOVL	G^SCH$GL_CURPCB,R0	; GET CURRENT PCB

            82         60 A0     D0  00D4   212 	MOVL	PCB$L_PID(R0),(R2)+	; INSERT IT ( WHATEVER IT IS! )

                                     00D8   213 ;

                                     00D8   214 ; COPY DATA

                                     00D8   215 ;

            64         04 AE     28  00D8   216 	MOVC3	4(SP),(R4),(R2)		; MOVE DATA

                          62         00DC       

                                     00DD   217 ;

                                     00DD   218 ; INSERT IN MESSAGE QUEUE

                                     00DD   219 ;

                          04     BA  00DD   220 	POPR	#^M<R2>			; RESTORE BLOCK ADDRESS

            55         08 AE     D0  00DF   221 	MOVL	8(SP),R5		; RESTORE MAILBOX UCB ADDRESS

                          020F   30  00E3   222 	BSBW	INSMBQUEUE		; INSERT ON QUEUE

            50            01     9A  00E6   223 	MOVZBL	#SS$_NORMAL,R0		; SET SUCCESS

                          38     BA  00E9   224 15$:	POPR	#^M<R3,R4,R5>		; RESTORE REGISTERS

                                     00EB   225 20$:	ENBINT				; ENABLE INTERUPTS TO CALLER'S IPL

                                 05  00EE   226 	RSB				; AND RETURN

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page   6

V06             CANCELIO - CANCEL I/O ON MAILBOX UNIT                                                                            (4)



                                     00EF   228 	.SBTTL	CANCELIO - CANCEL I/O ON MAILBOX UNIT

                                     00EF   229 ;++

                                     00EF   230 ; CANCELIO - CANCEL I/O ON MAILBOX UNIT

                                     00EF   231 ;

                                     00EF   232 ; FUNCTIONAL DESCRIPTION:

                                     00EF   233 ;

                                     00EF   234 ; THIS ROUTINE IS ENTERED TO CANCEL ALL OUTSTANDING I/O FOR A PARTICULAR

                                     00EF   235 ; PROCESS AND CHANNEL ON A MAILBOX UNIT.

                                     00EF   236 ; IF THE UNIT IS BUSY, THE CURRENT READ PACKET IS CHECKED AND COMPLETED

                                     00EF   237 ; IF IT BELONGS TO THE CANCELLING PROCESS. ALL QUEUED REQUESTS HAVE BEEN REMOVED.

                                     00EF   238 ; IF NO READER EXISTS THEN THE QUEUE OF OUTSTANDING MESSAGES IS SEARCHED

                                     00EF   239 ; FOR MESSAGES AND WAITING WRITES. IF A PID MATCH EXISTS THEN THESE I/O

                                     00EF   240 ; ARE ALSO COMPLETED ALONG WITH REMOVING THE MESSAGES.

                                     00EF   241 ; THE FINAL ACTION IS TO SEARCH THE QUEUE OF AST REQUESTS TO REMOVE THE ONES

                                     00EF   242 ; ASSOCIATED WITH THE CANCELLING PROCESS.

                                     00EF   243 ;

                                     00EF   244 ; INPUTS:

                                     00EF   245 ;

                                     00EF   246 ;	R2 = NEGITIVE OF CHANNEL NUMBER

                                     00EF   247 ;	R3 = CURRENT PACKET ADDRESS

                                     00EF   248 ;	R4 = PCB OF CANCELLING PROCESS

                                     00EF   249 ;	R5 = UCB OF UNIT

                                     00EF   250 ;

                                     00EF   251 ; OUTPUTS:

                                     00EF   252 ;

                                     00EF   253 ;	R4,R5 ARE PRESERVED

                                     00EF   254 ;

                                     00EF   255 ; IPL = MAILBOX IPL

                                     00EF   256 ;--

                                     00EF   257 CANCELIO:				; CANCEL I/O ON MAILBOX UNIT

            7E            56     7D  00EF   258 	MOVQ	R6,-(SP)		; SAVE R6,R7

            56            52     D0  00F2   259 	MOVL	R2,R6			; COPY CHANNEL NUMBER

         58 A5            08     E1  00F5   260 	BBC	#UCB$V_BSY,UCB$W_STS(R5),10$; BUSY?

                          18         00F9       

         0C A3         60 A4     D1  00FA   261 	CMPL	PCB$L_PID(R4),IRP$L_PID(R3); PIDS MATCH?

                          54     12  00FF   262 	BNEQ	40$			; IF NO THEN CANCEL DONE

         28 A3            56     B1  0101   263 	CMPW	R6,IRP$W_CHAN(R3)	; CHANNEL MATCH?

                          4E     12  0105   264 	BNEQ	40$			; IF NEQ THEN NO

            50            2C     7D  0107   265 	MOVQ	#SS$_ABORT,R0		; SET STATUS FOR ABORT

                 00000000'GF     16  010A   266 	JSB	G^IOC$REQCOM		; COMPLETE THE REQUEST

                          43     11  0110   267 	BRB	40$			; AND CANCEL IS DONE

                                     0112   268 ;

                                     0112   269 ; NO READER WAITING - CHECK MESSAGE QUEUE

                                     0112   270 ;

            52            65     9E  0112   271 10$:	MOVAB	UCB$L_MB_MSGQ(R5),R2	; ADDRESS MESSAGE QUEUE

            50            52     D0  0115   272 	MOVL	R2,R0			; COPY LIST HEAD ADDRESS

            52            62     D0  0118   273 20$:	MOVL	(R2),R2			; ADDRESS LIST ENTRY

            52            50     D1  011B   274 	CMPL	R0,R2			; END OF LIST?

                          35     13  011E   275 	BEQL	40$			; IF YES THEN DONE

         12 A2         60 A4     D1  0120   276 	CMPL	PCB$L_PID(R4),18(R2)	; MESSAGE BELONG TO CANCELLING PROCESS?

                          F1     12  0125   277 	BNEQ	20$			; IF NO THEN SEARCH MORE

            53         0E A2     D0  0127   278 	MOVL	14(R2),R3		; ADDRESS PACKET IF ANY

                          EB     13  012B   279 	BEQL	20$			; IF EQL THEN NO ASSOC PACKET

         28 A3            56     B1  012D   280 	CMPW	R6,IRP$W_CHAN(R3)	; CHANNEL MATCH?

                          E5     12  0131   281 	BNEQ	20$			; IF NEQ THEN NO

                                     0133   282 					; BUT GET RID OF MESSAGE

         34 A3            2C     7D  0133   283 	MOVQ	#SS$_ABORT,IRP$L_MEDIA(R3); SET STATUS

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page   7

V06             CANCELIO - CANCEL I/O ON MAILBOX UNIT                                                                            (4)



                 00000000'GF     16  0137   284 	JSB	G^COM$POST		; COMPLETE THE OPERATION

            50            62     0F  013D   285 30$:	REMQUE	(R2),R0			; REMOVE MESSAGE FROM QUEUE

         18 A5         0C A2     A0  0140   286 	ADDW	12(R2),UCB$W_BUFQUO(R5)	; ADJUST QUOTA

                       16 A5     B7  0145   287 	DECW	UCB$W_MSGCNT(R5)	; AND MESSAGE COUNT

         3C A5         16 A5     B0  0148   288 	MOVW	UCB$W_MSGCNT(R5),UCB$L_DEVDEPEND(R5); SAVE IT

                 00000000'GF     16  014D   289 	JSB	G^COM$DRVDEALMEM	; DEALLOCATE MESSAGE

                          BD     11  0153   290 	BRB	10$			; SEARCH LIST FROM THE START

                                     0155   291 ;

                                     0155   292 ; SEARCH AST QUEUE

                                     0155   293 ;

            57         0C A5     9E  0155   294 40$:	MOVAB	UCB$L_MB_W_AST(R5),R7	; ADDRESS LIST OF AST'S

                 00000000'GF     16  0159   295 	JSB	G^COM$FLUSHATTNS	; FLUSH ATTENTION AST'S

            57         10 A5     9E  015F   296 	MOVAB	UCB$L_MB_R_AST(R5),R7	; ADDRESS WRITER AST'S

                 00000000'GF     16  0163   297 	JSB	G^COM$FLUSHATTNS	; FLUSH THAT LIST

            56            8E     7D  0169   298 	MOVQ	(SP)+,R6		; RESTORE REGISTERS

                                     016C   299 	SETIPL	#IPL$_SYNCH		; LOWER IPL

            50            02     9A  016F   300 	MOVZBL	#RSN$_MAILBOX,R0	; DECLARE RESOURCE AVAILABLE

                 00000000'GF     17  0172   301 	JMP	G^SCH$RAVAIL		;  AND RETURN TO CALLER

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page   8

V06             CHECKIO - CHECK READ AND WRITE PARAMETERS                                                                        (5)



                                     0178   303 	.SBTTL	CHECKIO - CHECK READ AND WRITE PARAMETERS

                                     0178   304  

                                     0178   305 	.ENABL	LSB

                                     0178   306  

                                     0178   307 ;++

                                     0178   308 ; READCHECKIO - CHECK READ PARAMETERS

                                     0178   309 ; WRITECHECKIO - CHECK WRITE PARAMETERS

                                     0178   310 ;

                                     0178   311 ; FUNCTIONAL DESCRIPTION:

                                     0178   312 ;

                                     0178   313 ; THIS ROUTINE IS USED BY THE READ AND WRITE FDT ROUTINES TO VALIDATE THE

                                     0178   314 ; I/O REQUEST. THE CHECKS ARE MADE BASED ON THE SETTING OF THE IRP$V_FUNC

                                     0178   315 ; OPERATION DIRECTION BIT. THE CHECKS ARE, 1) ACCESS TO UNIT BY UIC,

                                     0178   316 ; 2) MESSAGE REQUEST SIZE WITHIN MAX MESSAGE SIZE, 3) BUFFER ACCESSIBLE.

                                     0178   317 ;

                                     0178   318 ; 0 LENGTH TRANSFERS AND ACCESS VIOLATIONS CAUSE COMPLETIONS HERE.

                                     0178   319 ;

                                     0178   320 ; INPUTS:

                                     0178   321 ;

                                     0178   322 ;	R3 = PACKET ADDRESS

                                     0178   323 ;	R4 = PCB ADDRESS

                                     0178   324 ;	R5 = UCB ADDRESS

                                     0178   325 ;	R6 = CCB ADDRESS

                                     0178   326 ;	R7 = FUNCTION CODE

                                     0178   327 ;	AP = ADDRESS OF THE FIRST QIO PARAMETER

                                     0178   328 ;

                                     0178   329 ; OUTPUTS:

                                     0178   330 ;

                                     0178   331 ;	R0 = BUFFER ADDRESS

                                     0178   332 ;	R1 = BUFFER SIZE

                                     0178   333 ;	R3 = PACKET ADDRESS

                                     0178   334 ;	R4 = PCB ADDRESS

                                     0178   335 ;	R5 = UCB ADDRESS

                                     0178   336 ;

                                     0178   337 ; IMPLICIT OUTPUTS:

                                     0178   338 ;

                                     0178   339 ;	THE BUFFER ADDRESS AND COUNT IS SAVED IN IRP$L_MEDIA.

                                     0178   340 ;--

                                     0178   341 READCHECKIO:				; CHECK READ PARAMETERS

                 00000000'GF     9F  0178   342 	PUSHAB	G^EXE$READCHK		; READ CHECKS NEEDED

            50   00000000'GF     9E  017E   343 	MOVAB	G^EXE$CHKRDACCES,R0	;

                          0D     11  0185   344 	BRB	10$			; CONTINUE IN COMMON

                                     0187   345 WRITECHECKIO:				; SET UP FOR WRITE CHECK

            50   00000000'GF     9E  0187   346 	MOVAB	G^EXE$CHKWRTACCES,R0	; SET UP WRITE CHECK

                 00000000'GF     9F  018E   347 	PUSHAB	G^EXE$WRITECHK		;

            51         1A A5     3C  0194   348 10$:	MOVZWL	UCB$W_VPROT(R5),R1	; SET UP FOR UIC CHECK

            52         1C A5     D0  0198   349 	MOVL	UCB$L_OWNUIC(R5),R2	;

                       30 A3     B4  019C   350 	CLRW	IRP$W_BOFF(R3)		; RESET QUOTA

                          60     16  019F   351 	JSB	(R0)			; CHECK UIC ACCESS

            19            50     E9  01A1   352 	BLBC	R0,ERROR		; BR IF ACCESS FAILURE

            51         04 AC     3C  01A4   353 	MOVZWL	P2(AP),R1		; GET BUFFER SIZE

                          19     13  01A8   354 	BEQL	70$			; IF EQL THEN COMPLETE HERE

         3A A5            51     B1  01AA   355 	CMPW	R1,UCB$W_DEVBUFSIZ(R5)	; MESSAGE SIZE IN RANGE?

                          08     1A  01AE   356 	BGTRU	50$			; IF GTRU THEN NO

            50            6C     D0  01B0   357 	MOVL	P1(AP),R0		; GET BUFFER ADDRESS

         34 A3            50     D0  01B3   358 	MOVL	R0,IRP$L_MEDIA(R3)	; SAVE BUFFER ADDRESS

                                 05  01B7   359 	RSB				; RETURN AND CHECK BUFFER

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page   9

V06             CHECKIO - CHECK READ AND WRITE PARAMETERS                                                                        (5)



            50       019C 8F     3C  01B8   360 50$:	MOVZWL	#SS$_MBTOOSML,R0	; SET BOX TOO SMALL

                 00000000'GF     17  01BD   361 ERROR:	JMP	G^EXE$ABORTIO		; ABORT THE I/O

            50            01     9A  01C3   362 70$:	MOVZBL	#SS$_NORMAL,R0		; COMPLETE 0 LENGTH TRANSFERS

                 00000000'GF     17  01C6   363 	JMP	G^EXE$FINISHIOC		;

                                     01CC   364  

                                     01CC   365 	.DSABL	LSB

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page  10

V06             FDTREAD - READ FUNCTION DECISION ROUTINE                                                                         (6)



                                     01CC   367 	.SBTTL	FDTREAD - READ FUNCTION DECISION ROUTINE

                                     01CC   368 ;++

                                     01CC   369 ; FDTREAD - FUNCTION DECISION ROUTINE FOR READ OPERATIONS

                                     01CC   370 ;

                                     01CC   371 ; FUNCTIONAL DESCRIPTION:

                                     01CC   372 ;

                                     01CC   373 ; THE USER REQUEST IS VAILDATED FOR:

                                     01CC   374 ;

                                     01CC   375 ;	1.ACCESS BY UIC.

                                     01CC   376 ;	2.REQUEST WITHIN MAXIMUM MESSAGE SIZE.

                                     01CC   377 ;	3.BUFFER ACCESSIBLE FOR WRITE.

                                     01CC   378 ;

                                     01CC   379 ; THEN THE PACKET IS QUEUED ONTO THE UCB FOR PROCESSING WHEN THE UNIT IS IDLE.

                                     01CC   380 ;  FOR READ NOW FUNCTIONS, IF NO MESSAGES ARE PRESENT IN THE MAILBOX

                                     01CC   381 ; THE OPERATION IS COMPLETED.

                                     01CC   382 ;

                                     01CC   383 ; INPUTS:

                                     01CC   384 ;

                                     01CC   385 ;	R3 = I/O PACKET ADDRESS

                                     01CC   386 ;	R4 = CURRENT PCB ADDRESS

                                     01CC   387 ;	R5 = UCB ADDRESS

                                     01CC   388 ;	R6 = CCB ADDRESS

                                     01CC   389 ;	R7 = FUNCTION CODE

                                     01CC   390 ;	AP = PARAMETER BLOCK AT USER ARGUMENT "P1"

                                     01CC   391 ;

                                     01CC   392 ; OUTPUTS:

                                     01CC   393 ;

                                     01CC   394 ;	THE PACKET IS QUEUED VIA "EXE$QIODRVPKT" OR

                                     01CC   395 ;	THE REQUEST IS COMPLETED WITH AN ERROR VIA "EXE$ABORTIO"

                                     01CC   396 ;

                                     01CC   397 ; STATUS CODES:

                                     01CC   398 ;

                                     01CC   399 ;	SS$_NOPRIV - USER DOES NOT HAVE PRIVILEGE TO READ MAILBOX

                                     01CC   400 ;	SS$_ACCVIO - BUFFER ACCESS VIOLATION ( "EXE$READCHK" )

                                     01CC   401 ;	SS$_MBTOOSML - REQUEST EXCEEDS THE MAXIMUM MESSAGE SIZE

                                     01CC   402 ;	SS$_ENDOFFILE - FOR "READNOW" NO DATA RETURN

                                     01CC   403 ;	SS$_NORMAL - NORMAL STATUS ( "STARTIO" )

                                     01CC   404 ;--

                                     01CC   405 FDTREAD:				;

                          AA     10  01CC   406 	BSBB	READCHECKIO		; VALIDATE THE REQUEST

         2A A3       0400 8F     A8  01CE   407 	BISW	#IRP$M_MBXIO,IRP$W_STS(R3); SET MAILBOX READ

                                     01D4   408 ;

                                     01D4   409 ; UPDATE MEASUREMENT COUNTER IF ENABLED

                                     01D4   410 ;

                           00000002  01D4   411 	.IF NE CA$_MEASURE

                 00000000'EF     D6  01D4   412 	INCL	PMS$GL_MBREADS		; COUNT MAILBOX READS

                                     01DA   413 	.ENDC

                                     01DA   414 ;

                                     01DA   415 ; CHECK FOR READ NOW FUNCTIONS

                                     01DA   416 ;

         20 A3            06     E1  01DA   417 	BBC	#IO$V_NOW,IRP$W_FUNC(R3),50$; BR IF NOT "NOW"

                          13         01DE       

                                     01DF   418 ;

                                     01DF   419 ; READ NOW

                                     01DF   420 ;

                                     01DF   421 ; TEST TO SEE IF THERE ARE ANY MESSAGES WAITING

                                     01DF   422 ;

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page  11

V06             FDTREAD - READ FUNCTION DECISION ROUTINE                                                                         (6)



                                     01DF   423 	SETIPL	#IPL$_MAILBOX		; SET TO FORK IPL

                       16 A5     B5  01E2   424 	TSTW	UCB$W_MSGCNT(R5)	; ANY MESSAGES?

                          0B     12  01E5   425 	BNEQ	50$			; IF NEQ THEN YES

                                     01E7   426 ;

                                     01E7   427 ; COMPLETE "READNOW" FUNCTIONS BECAUSE NO MESSAGES ARE AVAILABLE

                                     01E7   428 ;

            50       0870 8F     3C  01E7   429 	MOVZWL	#SS$_ENDOFFILE,R0	; SET NO TRANSFER AND STATUS

                 00000000'GF     17  01EC   430 	JMP	G^EXE$FINISHIOC		; COMPLETE THE I/O

                                     01F2   431 ;

                                     01F2   432 ; QUEUE PACKET TO DRIVER LIST

                                     01F2   433 ;

                 00000000'GF     17  01F2   434 50$:	JMP	G^EXE$QIODRVPKT		; QUEUE PACKET ON UCB

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page  12

V06             FDTSET - SET UP ATTENTION AST FUNCTION                                                                           (7)



                                     01F8   436 	.SBTTL	FDTSET - SET UP ATTENTION AST FUNCTION

                                     01F8   437 ;++

                                     01F8   438 ; FDTSET - SET UP ATTENTION AST

                                     01F8   439 ;

                                     01F8   440 ; FUNCTIONAL DESCRIPTION:

                                     01F8   441 ;

                                     01F8   442 ; THIS ROUTINE PROCESSES SET MODE REQUESTS TO ENABLE OR DISABLE AN ATTENTION

                                     01F8   443 ; AST. THE WORK IS DONE BY A COMMUNICATION DRIVER SUBROUTINE AFTER A CHECK

                                     01F8   444 ; IS MADE TO SEE IF THE REQUESTOR HAS ACCESS TO THE MAILBOX.

                                     01F8   445 ;

                                     01F8   446 ; INPUTS:

                                     01F8   447 ;

                                     01F8   448 ;	R3 = I/O PACKET ADDRESS

                                     01F8   449 ;	R4 = CURRENT PCB

                                     01F8   450 ;	R5 = UCB ADDRESS FOR MAILBOX UNIT

                                     01F8   451 ;

                                     01F8   452 ; OUTPUTS:

                                     01F8   453 ;

                                     01F8   454 ;	NONE, THE I/O IS COMPLETED

                                     01F8   455 ;

                                     01F8   456 ; STATUS RETURNS:

                                     01F8   457 ;

                                     01F8   458 ;	SS$_NORMAL - SUCCESSUFL COMPLETION

                                     01F8   459 ;	SS$_INSFMEM - INSUFICIENT MEMORY

                                     01F8   460 ;	SS$_EXQUOTA - AST QUOTA EXCEEDED

                                     01F8   461 ;--

                                     01F8   462 FDTSET:					; SET RECEIVE AST FUNCTION

                                     01F8   463 ;

                                     01F8   464 ; SEE IF USER CAN READ THIS MAILBOX

                                     01F8   465 ;

            51         1A A5     3C  01F8   466 	MOVZWL	UCB$W_VPROT(R5),R1	; GET UNIT PROTECTION

            52         1C A5     D0  01FC   467 	MOVL	UCB$L_OWNUIC(R5),R2	; GET OWNER UIC

                 00000000'GF     16  0200   468 	JSB	G^EXE$CHKRDACCES	; CHECK THE ACCESS OF THIS USER

            B4            50     E9  0206   469 	BLBC	R0,ERROR		; IF LOW CLEAR THEN ERROR

            57         0C A5     9E  0209   470 	MOVAB	UCB$L_MB_W_AST(R5),R7	; ASSUME WRITER AST

         20 A3            07     E1  020D   471 	BBC	#IO$V_READATTN,IRP$W_FUNC(R3),10$; BR IF NOT READER AST

                          02         0211       

                          87     D5  0212   472 	TSTL	(R7)+			; POINT TO READER AST LIST

                     0090 8F     BB  0214   473 10$:	PUSHR	#^M<R4,R7>		; SAVE PCB AND LIST HEAD

                 00000000'GF     16  0218   474 	JSB	G^COM$SETATTNAST	; CONTINUE IN COMMON

                          12     BA  021E   475 	POPR	#^M<R1,R4>		; POP PCB AND SET LIST HEAD ADDRESS

                                     0220   476 	SETIPL	#IPL$_MAILBOX		; SET UP THE IPL

         20 A3            07     E0  0223   477 	BBS	#IO$V_READATTN,IRP$W_FUNC(R3),15$; BR IF READER AST

                          07         0227       

                                     0228   478 					; DEFUALT IS WRITE ATTN

                       16 A5     B5  0228   479 	TSTW	UCB$W_MSGCNT(R5)	; ANY MESSAGES?

                          0D     13  022B   480 	BEQL	25$			; IF EQL THEN NONE

                          05     11  022D   481 	BRB	20$			; IF NEQ THEN DELIVER AST

         58 A5            08     E1  022F   482 15$:	BBC	#UCB$V_BSY,UCB$W_STS(R5),25$; BR IF NOT BUSY

                          06         0233       

                 00000000'GF     16  0234   483 20$:	JSB	G^COM$DELATTNAST	; DELIVER THE ASTS

            54            51     D0  023A   484 25$:	MOVL	R1,R4			; RESTORE PCB

                 00000000'GF     17  023D   485 	JMP	G^EXE$FINISHIOC		; COMPLETE THE I/O

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page  13

V06             FDTEOF - WRITE EOF MESSAGE TO MAILBOX                                                                            (8)



                                     0243   487 	.SBTTL	FDTEOF - WRITE EOF MESSAGE TO MAILBOX

                                     0243   488 ;++

                                     0243   489 ; FDTEOF - WRITE EOF MESSAGE TO THE MAILBOX

                                     0243   490 ;

                                     0243   491 ; FUNCTIONAL DESCRIPTION:

                                     0243   492 ;

                                     0243   493 ; THIS IS THE FDT ROUTINE FOR IO$WRITEOF. THE ACTION IS TO BUILD A

                                     0243   494 ; ZERO LENGHT MESSAGE AND TO INSERT IT IN THE MAILBOX.

                                     0243   495 ; THIS MESSAGE, WHEN READ RESULTS IN AN SS$_ENDOFILE STATUS RETURN.

                                     0243   496 ;

                                     0243   497 ; INPUTS:

                                     0243   498 ;

                                     0243   499 ;	R3 = I/O PACKET ADDRESS

                                     0243   500 ;	R4 = CURRENT PCB ADDRESS

                                     0243   501 ;	R5 = MAILBOX UCB ADDRESS

                                     0243   502 ;

                                     0243   503 ; OUTPUTS:

                                     0243   504 ;

                                     0243   505 ;	THE I/O IS COMPLETED IN THE WRITE FDT LOGIC. ( SEE BELOW)

                                     0243   506 ;--

                                     0243   507 FDTEOF:					;

                       30 A3     D4  0243   508 	CLRL	IRP$W_BOFF(R3)		; SET NO TRANSFER AND NO QUOTA

            51         1A A5     3C  0246   509 	MOVZWL	UCB$W_VPROT(R5),R1	; GET VOLUME PROTECTION

            52         1C A5     D0  024A   510 	MOVL	UCB$L_OWNUIC(R5),R2	; GET THE OWNER UIC

                 00000000'GF     16  024E   511 	JSB	G^EXE$CHKWRTACCES	; CHECK THE ACCESS

            07            50     E9  0254   512 	BLBC	R0,10$		; IF ERROR THEN BR

                          51     D4  0257   513 	CLRL	R1			; SET NO DATA

            50            6E     9E  0259   514 	MOVAB	(SP),R0			; FAKE GOOD ADDRESS FOR THE FUTURE MOVC

                          06     11  025C   515 	BRB	WRITE			; WRITE THE MESSAGE

                          FF5C   31  025E   516 10$:	BRW	ERROR			; CONTINUE

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page  14

V06             FDTWRITE - WRITE OPERATION FDT ROUTINE                                                                           (9)



                                     0261   518 	.SBTTL	FDTWRITE - WRITE OPERATION FDT ROUTINE

                                     0261   519 ;++

                                     0261   520 ; FDTWRITE -- FUNCTION DECISION ACTION ROUTINE FOR WRITE FUNCTIONS

                                     0261   521 ;

                                     0261   522 ; FUNCTIONAL DESCRIPTION:

                                     0261   523 ;

                                     0261   524 ; THE USER REQUEST IS VALIDATED FOR PRIVILEGE, SIZE, ACCESS AND AVAILABLE

                                     0261   525 ; SPACE. IF VALID, A BUFFERED I/O BLOCK IS ALLOCATED (IMPLIED RESOURCE WAIT).

                                     0261   526 ; THE BLOCK IS SET UP AND QUEUED TO THE UNIT MESSAGE LIST. IF THE UNIT

                                     0261   527 ; IS BUSY, THE OUTSTANDING READ OPERATION IS COMPLETED DIRECTLY.

                                     0261   528 ; IN THE CASE OF "WRITENOW" FUNCTIONS THE I/O IS COMPLETED BEFORE THE

                                     0261   529 ; MESSAGE IS QUEUED. OTHERWISE THE READ COMPLETE ROUTINE COMPLETES

                                     0261   530 ; THE MESSAGE ASSOCIATED WRITE.

                                     0261   531 ;

                                     0261   532 ; INPUTS:

                                     0261   533 ;

                                     0261   534 ;	R3 = I/O PACKET ADDRESS

                                     0261   535 ;	R4 = CURRENT PCB ADDRESS

                                     0261   536 ;	R5 = UCB ADDRESS

                                     0261   537 ;	R6 = CCB ADDRESS

                                     0261   538 ;	R7 = FUNCTION CODE

                                     0261   539 ;	AP = ADDRESS OF USER ARGUMENT BLOCK AT "P1"

                                     0261   540 ;

                                     0261   541 ; OUTPUTS:

                                     0261   542 ;

                                     0261   543 ;	THE I/O IS COMPLETED IN ERROR, THE I/O IS RESTARTED BECAUSE OF

                                     0261   544 ;	RESOURCE WAIT, OR THE I/O IS COMPETED NORMALLY.

                                     0261   545 ;

                                     0261   546 ; STATUS RETURNS:

                                     0261   547 ;

                                     0261   548 ;	SS$_MBTOOSML - MESSAGE IS TOO BIG

                                     0261   549 ;	SS$_ACCVIO - BUFFER ACCESS VIOLATION ( "EXE$WRITECHK" )

                                     0261   550 ;	SS$_MBFULL - MAILBOX IS FULL

                                     0261   551 ;	SS$_NOPRIV - USER DOES NOT HAVE WRITE PRIVILEGE

                                     0261   552 ;	SS$_NORMAL - SUCCESSFUL STATUS

                                     0261   553 ;	SS$_INSFMEM - NO MEMORY FOR BUFFER ALLOCATION

                                     0261   554 ;--

                                     0261   555 FDTWRITE:				;

                          FF23   30  0261   556 	BSBW	WRITECHECKIO		; CHECK OPERATION PARAMETERS

                                     0264   557 WRITE:

                          09     BB  0264   558 	PUSHR	#^M<R0,R3>		; SAVE REGISTERS

            51            16     C0  0266   559 	ADDL	#22,R1			; ADJUST REQUEST SIZE FOR HEADER

                                     0269   560 ;

                                     0269   561 ; GET BUFFER

                                     0269   562 ;

                 00000000'GF     16  0269   563 	JSB	G^EXE$ALONONPAGED	; ALLOCATE A BUFFER

            5F            50     E9  026F   564 	BLBC	R0,55$			; CONTINUE

                          09     BA  0272   565 	POPR	#^M<R0,R3>		; RESTORE PACKET ADDRESS AND DATA ADDRESS

                                     0274   566 ;

                                     0274   567 ; SET UP BLOCK

                                     0274   568 ;

                          3C     BB  0274   569 	PUSHR	#^M<R2,R3,R4,R5>	; SAVE BLOCK,PACKET,PCB AND UCB

            52            08     C0  0276   570 	ADDL	#8,R2			; POINT PAST FIXED PART

            82            51     B0  0279   571 	MOVW	R1,(R2)+		; INSERT SIZE

            82            13     90  027C   572 	MOVB	#DYN$C_BUFIO,(R2)+	; INSERT TYPE

            82            0B     90  027F   573 	MOVB	#IPL$_MAILBOX,(R2)+	; INSERT IPL

            82         32 A3     B0  0282   574 	MOVW	IRP$W_BCNT(R3),(R2)+	; INSERT MESSAGE SIZE

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page  15

V06             FDTWRITE - WRITE OPERATION FDT ROUTINE                                                                           (9)



            82            53     D0  0286   575 	MOVL	R3,(R2)+		; INSERT SAVED PACKET ADDRESS

         20 A3            06     E1  0289   576 	BBC	#IO$V_NOW,IRP$W_FUNC(R3),15$; BR IF NOT "NOW"

                          03         028D       

                       FC A2     D4  028E   577 	CLRL	-4(R2)			; RESET MESSAGE PACKET POINTER

            82         60 A4     D0  0291   578 15$:	MOVL	PCB$L_PID(R4),(R2)+	; INSERT PID OF SENDER

                                     0295   579 ;

                                     0295   580 ; COPY DATA FROM USER TO SYSTEM

                                     0295   581 ;

            60         32 A3     28  0295   582 	MOVC3	IRP$W_BCNT(R3),(R0),(R2); MOVE CHARACTERS TO SYSTEM SPACE

                          62         0299       

                          3C     BA  029A   583 	POPR	#^M<R2,R3,R4,R5>	; RESTORE REGISTERS

                                     029C   584 ;

                                     029C   585 ; MAKE FINAL QUOTA CHECKS INTERLOCKED WITH DRIVER WRITERS

                                     029C   586 ;

                                     029C   587 ; THESE CHECKS MUST BE MADE AT DRIVER FORK LEVEL TO PRESERVE THE

                                     029C   588 ; INTEGRITY OF THE QUOTAS. IF THE QUOTA IS EXCEEDED THEN THE PROCESS 

                                     029C   589 ; IS PLACED IN A "RSN$_MAILBOX" WAIT STATE. THE PROCEEDURE FOR

                                     029C   590 ; PLACING THE PROCESS IN THE WAIT STATE IS COMPLICATED BY THE

                                     029C   591 ; HIGHER THAN "IPL$_SYNCH" EXECUTION LEVEL. IN THIS CASE IT

                                     029C   592 ; IS OK TO CALL RESOURCE WAIT BECAUSE THE IPL WAS RAISED TO FORK

                                     029C   593 ; LEVEL AND NOT REACHED BECAUSE OF AN INTERRUPT LEVEL FORK.

                                     029C   594 ;

                                     029C   595 ;

                                     029C   596 ; MAIL BOX OVER QUOTA?

                                     029C   597 ;

                                     029C   598 20$:	DSBINT	#IPL$_MAILBOX		; RAISE TO DRIVER FORK LEVEL

                                     02A2   599 ;

                                     02A2   600 ; TEST FIRST TO SEE IF ROOM IS AVAILABLE FOR THE MESSAGE

                                     02A2   601 ;

         18 A5         32 A3     B1  02A2   602 	CMPW	IRP$W_BCNT(R3),UCB$W_BUFQUO(R5); MESSAGE FIT?

                          2F     1A  02A7   603 	BGTRU	60$			; IF GTR THEN NO

                                     02A9   604 ;

                                     02A9   605 ; SEE IF MAILBOX IS FULL

                                     02A9   606 ;

         14 A5         16 A5     B1  02A9   607 	CMPW	UCB$W_MSGCNT(R5),UCB$W_MSGMAX(R5); FULL?

                          28     13  02AE   608 	BEQL	60$			; IF EQL THEN YES

                                     02B0   609 ;

                                     02B0   610 ; QUEUE THE MESSAGE

                                     02B0   611 ;

                          28     BB  02B0   612 	PUSHR	#^M<R3,R5>		; SAVE UCB ADDRESS AND PACKET

                          41     10  02B2   613 	BSBB	INSMBQUEUE		; INSERT THE MESSAGE

                          28     BA  02B4   614 	POPR	#^M<R3,R5>		; RESTORE UCB ADDRESS AND PACKET

                                     02B6   615 	ENBINT				; LOWER IPL

                                     02B9   616 ;

                                     02B9   617 ; SEE IF WRITE I/O GETS COMPLETED NOW

                                     02B9   618 ;

         20 A3            06     E0  02B9   619 	BBS	#IO$V_NOW,IRP$W_FUNC(R3),50$; BR IF WRITE NOW

                          06         02BD       

                 00000000'GF     17  02BE   620 	JMP	G^EXE$QIORETURN		; RETURN TO CALLER

                                     02C4   621 ;

                                     02C4   622 ; FINISH WRITE I/O OPERATION

                                     02C4   623 ;

            50         30 A3     D0  02C4   624 50$:	MOVL	IRP$W_BCNT-2(R3),R0	; GET TRANSFER COUNT

            50            01     B0  02C8   625 	MOVW	#SS$_NORMAL,R0		; SET STATUS IN LOW

                 00000000'GF     17  02CB   626 	JMP	G^EXE$FINISHIOC		; COMPLETE THE I/O

                          0A     BA  02D1   627 55$:	POPR	#^M<R1,R3>

            51            03     9A  02D3   628 	MOVZBL	#RSN$_NPDYNMEM,R1	; SET RESOURCE TO AWAIT

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page  16

V06             FDTWRITE - WRITE OPERATION FDT ROUTINE                                                                           (9)



                          14     11  02D6   629 	BRB	65$			;

                                     02D8   630 60$:	ENBINT				; ENABLE INTERRUPTS

            50            52     D0  02DB   631 	MOVL	R2,R0			; DEALLOCATE MESSAGE BLOCK

                          53     DD  02DE   632 	PUSHL	R3			; SAVE PACKET

                 00000000'GF     16  02E0   633 	JSB	G^EXE$DEANONPAGED	;

                          53   8ED0  02E6   634 	POPL	R3			; RESTORE PACKET

            51            02     9A  02E9   635 	MOVZBL	#RSN$_MAILBOX,R1	; SET RESOURCE TO AWAIT

                                     02EC   636 65$:	SETIPL	#IPL$_SYNCH		; UP IPL FOR WAIT

                 00000000'GF     17  02EF   637 	JMP	G^EXE$IORSNWAIT		; ENTER WAIT STATE

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page  17

V06             FDTWRITE - WRITE OPERATION FDT ROUTINE                                                                          (11)



                                     02F5   639 

                                     02F5   640 	.SBTTL INSERT MESSAGE IN MAILBOX QUEUE

                                     02F5   641 ;++

                                     02F5   642 ; INSMBQUEUE - INSERT MESSAGE ON MAILBOX QUEUE

                                     02F5   643 ;

                                     02F5   644 ; INPUTS:

                                     02F5   645 ;

                                     02F5   646 ;	R2 = ADDRESS OF MESSAGE BLOCK

                                     02F5   647 ;	R5 = UCB OF MAILBOX

                                     02F5   648 ;

                                     02F5   649 ; OUTPUTS:

                                     02F5   650 ;

                                     02F5   651 ;	THE MESSAGE IS QUEUED AND IF THE UNIT IS BUSY THEN

                                     02F5   652 ;	CONTROL IS TRANSFERED TO "FINISHREAD" TO COMPLETE THE

                                     02F5   653 ;	WAITING READ REQUEST.

                                     02F5   654 ;--

                                     02F5   655 INSMBQUEUE:				;

                       16 A5     B6  02F5   656 	INCW	UCB$W_MSGCNT(R5)	; ADJUST MESSAGE COUNT

         3C A5         16 A5     B0  02F8   657 	MOVW	UCB$W_MSGCNT(R5),UCB$L_DEVDEPEND(R5); SAVE IT

         18 A5         0C A2     A2  02FD   658 	SUBW	12(R2),UCB$W_BUFQUO(R5)	; ADJUST BYTE QUOTA BY MESSAGE SIZE

                      00000002       0302   659 	.IF NE CA$_MEASURE		; CHECK FOR MEASUREMENT ENABLED

                 00000000'EF     D6  0302   660 	INCL	PMS$GL_MBWRITES		; COUNT MAILBOX WRITES

                                     0308   661 	.ENDC

                                     0308   662 ;

                                     0308   663 ; TEST UNIT BUSY -- IF BUSY FINISH OUTSTANDING READ

                                     0308   664 ;

         58 A5            08     E0  0308   665 	BBS	#UCB$V_BSY,UCB$W_STS(R5),FINISHREAD; BRANCH IF BUSY

                          1E         030C       

                                     030D   666 ;

                                     030D   667 ; INSERT MESSAGE IN QUEUE

                                     030D   668 ;

         04 B5            62     0E  030D   669 	INSQUE	(R2),@UCB$L_MB_MSGQ+4(R5); INSERT MESSAGE IN QUEUE

                                     0311   670 ;

                                     0311   671 ; DELIVER ALL AST'S WAITING FOR MESSAGES ON THIS MAILBOX

                                     0311   672 ;

            54         0C A5     9E  0311   673 	MOVAB	UCB$L_MB_W_AST(R5),R4	; ADDRESS ATTENTION LIST HEAD

                 00000000'GF     17  0315   674 	JMP	G^COM$DELATTNAST	; DELIVER THE AST'S

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page  18

V06             STARTIO - STARTIO OPERATION                                                                                     (12)



                                     031B   676 	.SBTTL	STARTIO - STARTIO OPERATION

                                     031B   677 ;++

                                     031B   678 ; STARTIO - START READ OPERATION ON IDLE MAILBOX UNIT

                                     031B   679 ;

                                     031B   680 ; FUNCTIONAL DESCRIPTION:

                                     031B   681 ;

                                     031B   682 ; THIS ROUTINE IS ENTERED WHEN THE UNIT IS NOT BUSY AND THERE IS A 

                                     031B   683 ; PACKET TO PROCESS. IF THERE IS ANY MESSAGE WAITING THE READ IS COMPLETED

                                     031B   684 ; OTHERWISE, AN RSB IS DONE LEAVING THE UNIT BUSY AND THE PACKET IN

                                     031B   685 ; LIMBO.

                                     031B   686 ;

                                     031B   687 ; INPUTS:

                                     031B   688 ;

                                     031B   689 ;	R3 = I/O PACKET ADDRESS

                                     031B   690 ;	R5 = UCB ADDRESS

                                     031B   691 ;

                                     031B   692 ; OUTPUTS:

                                     031B   693 ;

                                     031B   694 ;	R2 = MESSAGE ADDRESS ON TRANSFER TO "FINISHREAD".

                                     031B   695 ;

                                     031B   696 ;	OTHERWISE AN RSB IS DONE.

                                     031B   697 ;--

                                     031B   698 STARTIO:				;

            52         00 B5     0F  031B   699 	REMQUE	@UCB$L_MB_MSGQ(R5),R2	; GET MESSAGE IF ANY FROM QUEUE

                          0A     1C  031F   700 	BVC	FINISHREAD		; IF V-CLEAR THEN COMPLETE THE READ

            54         10 A5     9E  0321   701 	MOVAB	UCB$L_MB_R_AST(R5),R4	; ADDRESS LIST OF READER AST'S

                 00000000'GF     17  0325   702 	JMP	G^COM$DELATTNAST	; DELIVER AST'S

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page  19

V06             FINISHREAD - FINISH READ I/O OPERATION                                                                          (13)



                                     032B   704 	.SBTTL	FINISHREAD - FINISH READ I/O OPERATION

                                     032B   705 ;++

                                     032B   706 ; FINISHREAD - FINISH READ OPERATION

                                     032B   707 ;

                                     032B   708 ; FUNCTIONAL DECRIPTION:

                                     032B   709 ;

                                     032B   710 ; THIS ROUTINE IS ENTERED WHEN THE UNIT IS BUSY AND A MESSAGE

                                     032B   711 ; IS AVAILABLE.

                                     032B   712 ; THE WAITING READ IS COMPLETED ALONG WITH THE MATCHING WRITE

                                     032B   713 ; REQUEST IF THE WRITE WAS A WAIT TYPE.

                                     032B   714 ;

                                     032B   715 ; INPUTS:

                                     032B   716 ;

                                     032B   717 ;	R2 = MESSAGE ADDRESS

                                     032B   718 ;	R5 = UCB ADDRESS

                                     032B   719 ;

                                     032B   720 ; OUTPUTS:

                                     032B   721 ;

                                     032B   722 ;--

                                     032B   723 FINISHREAD:				;

            53         4C A5     D0  032B   724 	MOVL	UCB$L_IRP(R5),R3	; GET CURRENT I/O PACKET

         2C A3            52     D0  032F   725 	MOVL	R2,IRP$L_SVAPTE(R3)	; INSERT BLOCK ADDRESS IN PACKET

            82         16 A2     9E  0333   726 	MOVAB	22(R2),(R2)+		; INSERT ADDRESS OF DATA

            82         34 A3     D0  0337   727 	MOVL	IRP$L_MEDIA(R3),(R2)+	; INSERT USER VIRTUAL ADDRESS

                          82     D5  033B   728 	TSTL	(R2)+			; PASS TYPE WORD

         18 A5            62     A0  033D   729 	ADDW	(R2),UCB$W_BUFQUO(R5)	; ADJUST QUOTA BY MESSAGE BLOCK SIZE

            62         32 A3     B1  0341   730 	CMPW	IRP$W_BCNT(R3),(R2)	; REQUEST GTRU ACTUAL?

                          04     1A  0345   731 	BGTRU	10$			; IF GTRU THEN MESSAGE SIZE CORRECT

            62         32 A3     B0  0347   732 	MOVW	IRP$W_BCNT(R3),(R2)	; OTHERWISE REQUEST SIZE IS CORRECT

            62            10     78  034B   733 10$:	ASHL	#16,(R2),R0		; GET SIZE TO UPPER WORD

                          50         034E       

            50            01     B0  034F   734 	MOVW	#SS$_NORMAL,R0		; ASSUME NORMAL STATUS

         32 A3            82     B0  0352   735 	MOVW	(R2)+,IRP$W_BCNT(R3)	; REPLACE ORIGIONAL SIZE WITH CORRECT

                          05     12  0356   736 	BNEQ	15$			; IF NEQ THEN OK

            50       0870 8F     B0  0358   737 	MOVW	#SS$_ENDOFFILE,R0	; SET EOF STATUS

                       16 A5     B7  035D   738 15$:	DECW	UCB$W_MSGCNT(R5)	; ADJUST MESSAGE COUNT

         3C A5         16 A5     B0  0360   739 	MOVW	UCB$W_MSGCNT(R5),UCB$L_DEVDEPEND(R5); SAVE IT

                          53     DD  0365   740 	PUSHL	R3			; SAVE PACKET OF READER

            51         0C A3     D0  0367   741 	MOVL	IRP$L_PID(R3),R1	; GET READER PID

            53            82     D0  036B   742 	MOVL	(R2)+,R3		; GET WRITER PACKET

                          0E     13  036E   743 	BEQL	20$			; IF EQL THEN NONE

         34 A3            50     7D  0370   744 	MOVQ	R0,IRP$L_MEDIA(R3)	; SET READ STATUS AND PID OF RECEIVER

         34 A3            01     9B  0374   745 	MOVZBW	#SS$_NORMAL,IRP$L_MEDIA(R3); INSURE SUCCESS

                 00000000'GF     16  0378   746 	JSB	G^COM$POST		; COMPLETE THE I/O

            51            62     D0  037E   747 20$:	MOVL	(R2),R1			; GET WRITER PID

                          53   8ED0  0381   748 	POPL	R3			; RESTORE PACKET ADDRESS

                                     0384   749 	REQCOM				; COMPLETE REQUEST!!!

                                     038A   750 MB_END:

                                     038A   751  	.END

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page  20

SYMBOL TABLE                                                                                                                    (13)



ACB$B_RMOD       0000000B            DYN$C_LOG      = 0000000B            IO$M_FCODE     = 0000003F            

ACB$B_TYPE       0000000A            DYN$C_MTL      = 00000019            IO$M_HANGUP    = 00000200            

ACB$L_AST        00000010            DYN$C_MVL      = 00000016            IO$M_INHERLOG  = 00000800            

ACB$L_ASTPRM     00000014            DYN$C_NDB      = 0000001C            IO$M_INHEXTGAP = 00001000            

ACB$L_ASTQBL     00000004            DYN$C_NET      = 00000017            IO$M_INHRETRY  = 00008000            

ACB$L_ASTQFL     00000000            DYN$C_PBH      = 00000020            IO$M_INHSEEK   = 00001000            

ACB$L_KAST       00000018            DYN$C_PCB      = 0000000C            IO$M_INTERRUPT = 00000040            

ACB$L_PID        0000000C            DYN$C_PDB      = 00000021            IO$M_INTSKIP   = 00000100            

ACB$M_QUOTA    = 00000040            DYN$C_PFL      = 00000023            IO$M_MOUNT     = 00000200            

ACB$S_MODE     = 00000002            DYN$C_PIB      = 00000022            IO$M_NOECHO    = 00000040            

ACB$V_KAST     = 00000007            DYN$C_PQB      = 0000000D            IO$M_NOFILTR   = 00000200            

ACB$V_MODE     = 00000000            DYN$C_PTR      = 00000025            IO$M_NOFORMAT  = 00000100            

ACB$V_QUOTA    = 00000006            DYN$C_RVT      = 0000000E            IO$M_NOW       = 00000040            

ACB$W_SIZE       00000008            DYN$C_SFT      = 00000024            IO$M_NOWAIT    = 00000080            

AT$_UBA          ********   X   03   DYN$C_SSB      = 0000001D            IO$M_PACKED    = 00000080            

BIT...         = 00000000            DYN$C_TQE      = 0000000F            IO$M_PURGE     = 00000800            

CA$_MEASURE    = 00000002            DYN$C_TYPAHD   = 00000014            IO$M_READATTN  = 00000080            

CA$_MEASURE_IOT= 00000004            DYN$C_UCB      = 00000010            IO$M_REVERSE   = 00000040            

CA$_SIMULATOR  = 00000001            DYN$C_VCB      = 00000011            IO$M_SHUTDOWN  = 00000080            

CANCELIO         000000EF R     04   DYN$C_WCB      = 00000012            IO$M_STARTUP   = 00000040            

COM$DELATTNAST   ********   X   04   ERROR            000001BD R     04   IO$M_SYNCH     = 00000200            

COM$DRVDEALMEM   ********   X   04   EXE$ABORTIO      ********   X   04   IO$M_TIMED     = 00000080            

COM$FLUSHATTNS   ********   X   04   EXE$ALONONPAGED  ********   X   04   IO$M_TRMNOECHO = 00001000            

COM$POST         ********   X   04   EXE$CHKRDACCES   ********   X   04   IO$M_WRTATTN   = 00000100            

COM$SETATTNAST   ********   X   04   EXE$CHKWRTACCES  ********   X   04   IO$S_FCODE     = 00000006            

DDB$B_ACPCLASS   00000013            EXE$DEANONPAGED  ********   X   04   IO$V_ABORT     = 00000008            

DDB$B_TYPE       0000000A            EXE$FINISHIOC    ********   X   04   IO$V_ACCESS    = 00000006            

DDB$C_LENGTH     00000034            EXE$IORSNWAIT    ********   X   04   IO$V_ATTNAST   = 00000008            

DDB$K_LENGTH     00000034            EXE$QIODRVPKT    ********   X   04   IO$V_BINARY    = 00000006            

DDB$L_ACPD       00000010            EXE$QIORETURN    ********   X   04   IO$V_CANCTRLO  = 00000006            

DDB$L_DDT        0000000C            EXE$READCHK      ********   X   04   IO$V_COMMOD    = 00000006            

DDB$L_LINK       00000000            EXE$SNDEVMSG     00000058 RG    04   IO$V_CREATE    = 00000007            

DDB$L_UCB        00000004            EXE$WRITECHK     ********   X   04   IO$V_CTRLCAST  = 00000008            

DDB$T_DRVNAME    00000024            EXE$WRTMAILBOX   00000088 RG    04   IO$V_CTRLYAST  = 00000007            

DDB$T_NAME       00000014            FDTEOF           00000243 R     04   IO$V_CVTLOW    = 00000008            

DDB$W_SIZE       00000008            FDTREAD          000001CC R     04   IO$V_DATACHECK = 0000000E            

DPT$INITAB       0000001F R     03   FDTSET           000001F8 R     04   IO$V_DELETE    = 00000008            

DPT$REINITAB     0000001F R     03   FDTWRITE         00000261 R     04   IO$V_DMOUNT    = 0000000A            

DPT$TAB          00000000 R     03   FINISHREAD       0000032B R     04   IO$V_DSABLMBX  = 0000000A            

DYN$C_ACB      = 00000002            FUNCTABLE        00000018 R     04   IO$V_ENABLMBX  = 00000007            

DYN$C_ADP      = 00000001            GBL...         = 00000000            IO$V_FCODE     = 00000000            

DYN$C_AQB      = 00000003            INSMBQUEUE       000002F5 R     04   IO$V_HANGUP    = 00000009            

DYN$C_BRDCST   = 0000001A            IO$M_ABORT     = 00000100            IO$V_INHERLOG  = 0000000B            

DYN$C_BUFIO    = 00000013            IO$M_ACCESS    = 00000040            IO$V_INHEXTGAP = 0000000C            

DYN$C_CEB      = 00000004            IO$M_ATTNAST   = 00000100            IO$V_INHRETRY  = 0000000F            

DYN$C_CRB      = 00000005            IO$M_BINARY    = 00000040            IO$V_INHSEEK   = 0000000C            

DYN$C_CXB      = 0000001B            IO$M_CANCTRLO  = 00000040            IO$V_INTERRUPT = 00000006            

DYN$C_DDB      = 00000006            IO$M_COMMOD    = 00000040            IO$V_INTSKIP   = 00000008            

DYN$C_DPT      = 0000001E            IO$M_CREATE    = 00000080            IO$V_MOUNT     = 00000009            

DYN$C_FCB      = 00000007            IO$M_CTRLCAST  = 00000100            IO$V_NOECHO    = 00000006            

DYN$C_FRK      = 00000008            IO$M_CTRLYAST  = 00000080            IO$V_NOFILTR   = 00000009            

DYN$C_GSD      = 00000015            IO$M_CVTLOW    = 00000100            IO$V_NOFORMAT  = 00000008            

DYN$C_IDB      = 00000009            IO$M_DATACHECK = 00004000            IO$V_NOW       = 00000006            

DYN$C_IRP      = 0000000A            IO$M_DELETE    = 00000100            IO$V_NOWAIT    = 00000007            

DYN$C_JPB      = 0000001F            IO$M_DMOUNT    = 00000400            IO$V_PACKED    = 00000007            

DYN$C_KFH      = 00000026            IO$M_DSABLMBX  = 00000400            IO$V_PURGE     = 0000000B            

DYN$C_KFI      = 00000018            IO$M_ENABLMBX  = 00000080            IO$V_READATTN  = 00000007            

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page  21

SYMBOL TABLE                                                                                                                    (13)



IO$V_REVERSE   = 00000006            IOC$RETURN       ********   X   04   IRP$V_PAGIO    = 00000002            

IO$V_SHUTDOWN  = 00000007            IPL$_ASTDEL    = 00000002            IRP$V_PHYSIO   = 00000008            

IO$V_STARTUP   = 00000006            IPL$_HWCLK     = 00000018            IRP$V_PRIVIO   = 00000009            

IO$V_SYNCH     = 00000009            IPL$_IOPOST    = 00000004            IRP$V_SWAPIO   = 00000006            

IO$V_TIMED     = 00000007            IPL$_MAILBOX   = 0000000B            IRP$V_VIRTUAL  = 00000004            

IO$V_TRMNOECHO = 0000000C            IPL$_POWER     = 0000001F            IRP$W_ABCNT      0000003C            

IO$V_WRTATTN   = 00000008            IPL$_QUEUEAST  = 00000006            IRP$W_BCNT       00000032            

IO$_ACCESS     = 00000032            IPL$_SCHED     = 00000003            IRP$W_BOFF       00000030            

IO$_ACPCONTROL = 00000038            IPL$_SYNCH     = 00000007            IRP$W_CHAN       00000028            

IO$_CREATE     = 00000033            IPL$_TIMER     = 00000007            IRP$W_FUNC       00000020            

IO$_DEACCESS   = 00000034            IRP$B_CARCON     00000038            IRP$W_OBCNT      0000003E            

IO$_DELETE     = 00000035            IRP$B_EFN        00000022            IRP$W_SIZE       00000008            

IO$_DIAGNOSE   = 0000001D            IRP$B_PRI        00000023            IRP$W_STS        0000002A            

IO$_DRVCLR     = 00000004            IRP$B_RMOD       0000000B            IRP$W_TT_PRMPT   0000003C            

IO$_ERASETAPE  = 00000006            IRP$B_TYPE       0000000A            MASKH          = 00000100            

IO$_LOGICAL    = 0000002F            IRP$C_LENGTH     0000004C            MASKL          = 00000000            

IO$_MODIFY     = 00000036            IRP$K_LENGTH     0000004C            MB$DDT           00000000 RG    04   

IO$_MOUNT      = 00000039            IRP$L_AST        00000010            MB$DPT           00000000 RG    03   

IO$_NOP        = 00000000            IRP$L_ASTPRM     00000014            MB_END           0000038A R     04   

IO$_OFFSET     = 00000006            IRP$L_DIAGBUF    00000044            P1             = 00000000            

IO$_PACKACK    = 00000008            IRP$L_IOQBL      00000004            P2             = 00000004            

IO$_PHYSICAL   = 0000001F            IRP$L_IOQFL      00000000            P3             = 00000008            

IO$_READHEAD   = 0000000E            IRP$L_IOSB       00000024            P4             = 0000000C            

IO$_READLBLK   = 00000021            IRP$L_IOST1      00000034            PCB$B_ASTACT     0000000C            

IO$_READPBLK   = 0000000C            IRP$L_IOST2      00000038            PCB$B_ASTEN      0000000D            

IO$_READPRESET = 00000019            IRP$L_MEDIA      00000034            PCB$B_PRI        0000000B            

IO$_READPROMPT = 00000037            IRP$L_PID        0000000C            PCB$B_PRIB       00000033            

IO$_READTRACKD = 00000010            IRP$L_SEGVBN     00000040            PCB$B_TYPE       0000000A            

IO$_READVBLK   = 00000031            IRP$L_SEQNUM     00000048            PCB$B_WEFC       00000032            

IO$_RECAL      = 00000003            IRP$L_SVAPTE     0000002C            PCB$C_LENGTH     0000007C            

IO$_RELEASE    = 00000005            IRP$L_TT_TERM    00000038            PCB$K_LENGTH     0000007C            

IO$_RETCENTER  = 00000007            IRP$L_UCB        0000001C            PCB$L_ASTQBL     00000014            

IO$_REWIND     = 00000024            IRP$L_WIND       00000018            PCB$L_ASTQFL     00000010            

IO$_REWINDOFF  = 00000022            IRP$M_BUFIO    = 00000001            PCB$L_EFC2P      00000058            

IO$_SEARCH     = 00000009            IRP$M_CHAINED  = 00000020            PCB$L_EFC3P      0000005C            

IO$_SEEK       = 00000002            IRP$M_COMPLX   = 00000008            PCB$L_EFCS       00000050            

IO$_SENSECHAR  = 0000001B            IRP$M_DIAGBUF  = 00000080            PCB$L_EFCU       00000054            

IO$_SENSEMODE  = 00000027            IRP$M_FUNC     = 00000002            PCB$L_EFWM       0000004C            

IO$_SETCHAR    = 0000001A            IRP$M_MBXIO    = 00000400            PCB$L_OWNER      0000001C            

IO$_SETMODE    = 00000023            IRP$M_PAGIO    = 00000004            PCB$L_PHD        00000064            

IO$_SKIPFILE   = 00000025            IRP$M_PHYSIO   = 00000100            PCB$L_PHYPCB     00000018            

IO$_SKIPRECORD = 00000026            IRP$M_PRIVIO   = 00000200            PCB$L_PID        00000060            

IO$_SPACEFILE  = 00000002            IRP$M_SWAPIO   = 00000040            PCB$L_PQB        0000004C            

IO$_SPACERECORD= 00000009            IRP$M_VIRTUAL  = 00000010            PCB$L_SQBL       00000004            

IO$_STARTSPNDL = 00000019            IRP$Q_NT_PRVMSK  0000003C            PCB$L_SQFL       00000000            

IO$_UNLOAD     = 00000001            IRP$S_FCODE    = 00000006            PCB$L_STS        00000028            

IO$_VIRTUAL    = 0000003F            IRP$S_FMOD     = 0000000A            PCB$L_UIC        00000020            

IO$_WRITECHECK = 0000000A            IRP$S_MODE     = 00000002            PCB$L_WSSWP      00000024            

IO$_WRITECHECKH= 00000018            IRP$V_BUFIO    = 00000000            PCB$L_WTIME      0000002C            

IO$_WRITEHEAD  = 0000000D            IRP$V_CHAINED  = 00000005            PCB$T_LNAME      0000006C            

IO$_WRITELBLK  = 00000020            IRP$V_COMPLX   = 00000003            PCB$V_ASTPEN   = 00000011            

IO$_WRITEMARK  = 0000001C            IRP$V_DIAGBUF  = 00000007            PCB$V_BATCH    = 0000000E            

IO$_WRITEOF    = 00000028            IRP$V_FCODE    = 00000000            PCB$V_DELPEN   = 00000001            

IO$_WRITEPBLK  = 0000000B            IRP$V_FMOD     = 00000006            PCB$V_FORCPEN  = 00000002            

IO$_WRITETRACKD= 0000000F            IRP$V_FUNC     = 00000001            PCB$V_HIBER    = 00000013            

IO$_WRITEVBLK  = 00000030            IRP$V_MBXIO    = 0000000A            PCB$V_INQUAN   = 00000003            

IOC$REQCOM       ********   X   04   IRP$V_MODE     = 00000000            PCB$V_LOGIN    = 00000014            

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page  22

SYMBOL TABLE                                                                                                                    (13)



PCB$V_NETWRK   = 00000015            PR$_SBIER      = 00000034            SS$_BUFBYTALI  = 0000030C            

PCB$V_NOACNT   = 0000000F            PR$_SBIFS      = 00000030            SS$_BUFFEROVF  = 00000601            

PCB$V_NODELET  = 00000017            PR$_SBIMT      = 00000033            SS$_BUGCHECK   = 000002A4            

PCB$V_PHDRES   = 00000012            PR$_SBIQC      = 00000036            SS$_CANCEL     = 00000830            

PCB$V_PSWAPM   = 00000004            PR$_SBIS       = 00000031            SS$_CHANINTLK  = 0000004C            

PCB$V_PWRAST   = 00000016            PR$_SBISC      = 00000032            SS$_CLIFRCEXT  = 00000980            

PCB$V_RES      = 00000000            PR$_SBITA      = 00000035            SS$_CMODSUPR   = 0000041C            

PCB$V_RESPEN   = 00000005            PR$_SBR        = 0000000C            SS$_CMODUSER   = 00000424            

PCB$V_SSFEXC   = 00000006            PR$_SCBB       = 00000011            SS$_COMPAT     = 0000042C            

PCB$V_SSFEXCE  = 00000007            PR$_SID        = 0000003E            SS$_CONTINUE   = 00000001            

PCB$V_SSFEXCS  = 00000008            PR$_SIRR       = 00000014            SS$_CONTROLC   = 00000651            

PCB$V_SSFEXCU  = 00000009            PR$_SISR       = 00000015            SS$_CONTROLO   = 00000609            

PCB$V_SSRWAIT  = 0000000A            PR$_SLR        = 0000000D            SS$_CONTROLY   = 00000611            

PCB$V_SUSPEN   = 0000000B            PR$_SSP        = 00000002            SS$_CREATED    = 00000619            

PCB$V_SWPVBN   = 00000010            PR$_TBIA       = 00000039            SS$_CTRLERR    = 00000054            

PCB$V_WAKEPEN  = 0000000C            PR$_TBIS       = 0000003A            SS$_DATACHECK  = 0000005C            

PCB$V_WALL     = 0000000D            PR$_TODR       = 0000001B            SS$_DATAOVERUN = 00000838            

PCB$W_APTCNT     00000034            PR$_TXCS       = 00000022            SS$_DEBUG      = 0000046C            

PCB$W_ASTCNT     0000003C            PR$_TXDB       = 00000023            SS$_DECOVF     = 000004A4            

PCB$W_BIOCNT     0000003E            PR$_USP        = 00000003            SS$_DEVACTIVE  = 000002C4            

PCB$W_BIOLM      00000040            PR$_WCSA       = 0000002C            SS$_DEVALLOC   = 00000840            

PCB$W_BYTCNT     00000042            PR$_WCSD       = 0000002D            SS$_DEVALRALLOC= 00000641            

PCB$W_BYTLM      00000068            PRI$_IOCOM     = 00000001            SS$_DEVASSIGN  = 00000848            

PCB$W_DIOCNT     00000044            PRI$_NULL      = 00000000            SS$_DEVFOREIGN = 00000064            

PCB$W_DIOLM      00000046            PRI$_RESAVL    = 00000002            SS$_DEVICEFULL = 00000850            

PCB$W_FILCNT     00000048            PRI$_TICOM     = 00000004            SS$_DEVMOUNT   = 0000006C            

PCB$W_GPGCNT     00000038            PRI$_TIMER     = 00000002            SS$_DEVNOTALLOC= 00000858            

PCB$W_GRP        00000022            PRI$_TOCOM     = 00000003            SS$_DEVNOTMBX  = 00000074            

PCB$W_MEM        00000020            READCHECKIO      00000178 R     04   SS$_DEVNOTMOUNT= 0000007C            

PCB$W_MTXCNT     0000000E            RSN$_ASTWAIT   = 00000001            SS$_DEVOFFLINE = 00000084            

PCB$W_PPGCNT     0000003A            RSN$_BRKTHRU   = 00000006            SS$_DIRFULL    = 00000860            

PCB$W_PRCCNT     0000006A            RSN$_IACLOCK   = 00000007            SS$_DRVERR     = 0000008C            

PCB$W_SIZE       00000008            RSN$_MAILBOX   = 00000002            SS$_DUPFILENAME= 00000868            

PCB$W_STATE      00000030            RSN$_NPDYNMEM  = 00000003            SS$_DUPLNAM    = 00000094            

PCB$W_TMBU       00000036            RSN$_PGDYNMEM  = 00000005            SS$_ENDOFFILE  = 00000870            

PCB$W_TQCNT      0000004A            RSN$_PGFILE    = 00000004            SS$_ENDOFTAPE  = 00000878            

PMS$GL_MBREADS   ********   X   04   SCH$GL_CURPCB    ********   X   04   SS$_ENDOFUSRLBL= 00000970            

PMS$GL_MBWRITES  ********   X   04   SCH$RAVAIL       ********   X   04   SS$_EXQUOTA    = 0000001C            

PR$_ACCR       = 00000029            SS$_ABORT      = 0000002C            SS$_EXTIDXFILE = 00000880            

PR$_ACCS       = 00000028            SS$_ACCONFLICT = 00000800            SS$_FCPREADERR = 00000888            

PR$_ASTLVL     = 00000013            SS$_ACCVIO     = 0000000C            SS$_FCPREPSTN  = 00000988            

PR$_ESP        = 00000001            SS$_ACPVAFUL   = 000002FC            SS$_FCPREWNDERR= 00000890            

PR$_ICCS       = 00000018            SS$_ARTRES     = 00000474            SS$_FCPSPACERR = 00000898            

PR$_ICR        = 0000001A            SS$_ASTFLT     = 0000040C            SS$_FCPWRITERR = 000008A0            

PR$_IPL        = 00000012            SS$_BADATTRIB  = 00000034            SS$_FILACCERR  = 0000009C            

PR$_ISP        = 00000004            SS$_BADCHKSUM  = 00000808            SS$_FILALRACC  = 000000A4            

PR$_KSP        = 00000000            SS$_BADESCAPE  = 0000003C            SS$_FILELOCKED = 000008A8            

PR$_MAPEN      = 00000038            SS$_BADFILEHDR = 00000810            SS$_FILENUMCHK = 000008B0            

PR$_NICR       = 00000019            SS$_BADFILENAME= 00000818            SS$_FILESEQCHK = 000008B8            

PR$_P0BR       = 00000008            SS$_BADFILEVER = 00000820            SS$_FILESTRUCT = 000008C0            

PR$_P0LR       = 00000009            SS$_BADIMGHDR  = 00000044            SS$_FILNOTACC  = 000000AC            

PR$_P1BR       = 0000000A            SS$_BADIRECTORY= 00000828            SS$_FILNOTCNTG = 000002AC            

PR$_P1LR       = 0000000B            SS$_BADPARAM   = 00000014            SS$_FILNOTEXP  = 000000B4            

PR$_PCBB       = 00000010            SS$_BADSTACK   = 000002B4            SS$_FLTDIV     = 00000494            

PR$_PME        = 0000003D            SS$_BEGOFFILE  = 00000938            SS$_FLTOVF     = 0000048C            

PR$_RXCS       = 00000020            SS$_BLOCKCNTERR= 00000940            SS$_FLTUND     = 0000049C            

PR$_RXDB       = 00000021            SS$_BREAK      = 00000414            SS$_FORMAT     = 000000BC            

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page  23

SYMBOL TABLE                                                                                                                    (13)



SS$_GPTFULL    = 000000C4            SS$_NONLOCAL   = 000008F0            UCB$B_CEX        00000077            

SS$_GSDFULL    = 000000CC            SS$_NOPRIV     = 00000024            UCB$B_CM1        0000004A            

SS$_HANGUP     = 000002CC            SS$_NORMAL     = 00000001            UCB$B_CM2        0000004B            

SS$_HEADERFULL = 000008C8            SS$_NOSIGNAL   = 00000900            UCB$B_DEVCLASS   00000038            

SS$_IDXFILEFULL= 000008D0            SS$_NOSOLICIT  = 00000284            UCB$B_DEVTYPE    00000039            

SS$_ILLBLKNUM  = 000000DC            SS$_NOSUCHDEV  = 00000908            UCB$B_DIPL       00000052            

SS$_ILLCNTRFUNC= 000000E4            SS$_NOSUCHFILE = 00000910            UCB$B_DX_SCTCNT  000000A6            

SS$_ILLEFC     = 000000EC            SS$_NOSUCHNODE = 0000028C            UCB$B_ERTCNT     00000070            

SS$_ILLIOFUNC  = 000000F4            SS$_NOSUCHSEC  = 00000978            UCB$B_ERTMAX     00000071            

SS$_ILLLBLAST  = 00000968            SS$_NOTAPEOP   = 00000264            UCB$B_ESCAPE     0000004B            

SS$_ILLPAGCNT  = 000000FC            SS$_NOTFILEDEV = 000001CC            UCB$B_FEX        00000076            

SS$_ILLSEQOP   = 000002DC            SS$_NOTINTBLSZ = 000001D4            UCB$B_FIPL       0000000B            

SS$_ILLSER     = 00000104            SS$_NOTLABELMT = 000001DC            UCB$B_LOCSRV     0000003C            

SS$_ILLUSRLBLRD= 00000958            SS$_NOTMODIFIED= 00000659            UCB$B_OFFNDX     00000094            

SS$_ILLUSRLBLWT= 00000960            SS$_NOTNETDEV  = 000002EC            UCB$B_OFFRTC     00000095            

SS$_INCVOLLABEL= 0000010C            SS$_NOTRAN     = 00000629            UCB$B_REMSRV     0000003D            

SS$_INSFARG    = 00000114            SS$_NOTSQDEV   = 000001E4            UCB$B_SECTORS    0000003C            

SS$_INSFMEM    = 00000124            SS$_OPCCUS     = 00000434            UCB$B_SLAVE      00000074            

SS$_INSFRAME   = 0000012C            SS$_OPCDEC     = 0000043C            UCB$B_SPR        00000075            

SS$_INSFWSL    = 0000011C            SS$_OPINCOMPL  = 000002D4            UCB$B_STATE      00000052            

SS$_INTDIV     = 00000484            SS$_PAGOWNVIO  = 000001EC            UCB$B_TRACKS     0000003D            

SS$_INTOVF     = 0000047C            SS$_PAGRDERR   = 00000444            UCB$B_TYPE       0000000A            

SS$_IVADDR     = 00000134            SS$_PARITY     = 000001F4            UCB$B_VERTSZ     0000003F            

SS$_IVCHAN     = 0000013C            SS$_PARTESCAPE = 000001FC            UCB$C_LENGTH     00000074            

SS$_IVCHNLSEC  = 0000026C            SS$_PFMBSY     = 00000204            UCB$C_LOGLNK   = 00000001            

SS$_IVDEVNAM   = 00000144            SS$_PLHLDR     = 00000404            UCB$K_LENGTH     00000074            

SS$_IVGSDNAM   = 0000014C            SS$_PSTFULL    = 0000020C            UCB$L_AMB        00000054            

SS$_IVLOGNAM   = 00000154            SS$_RADRMOD    = 0000044C            UCB$L_ASTQBL     00000010            

SS$_IVLOGTAB   = 0000015C            SS$_REJECT     = 00000294            UCB$L_ASTQFL     0000000C            

SS$_IVPROTECT  = 000002F4            SS$_REMOTE     = 00000649            UCB$L_CPID       0000005C            

SS$_IVQUOTAL   = 00000164            SS$_RESIGNAL   = 00000918            UCB$L_CRB        00000020            

SS$_IVSECFLG   = 0000016C            SS$_RESULTOVF  = 00000214            UCB$L_DDB        00000024            

SS$_IVSECIDCTL = 000002E4            SS$_ROPRAND    = 00000454            UCB$L_DEVCHAR    00000034            

SS$_IVSSRQ     = 00000174            SS$_SECTBLFUL  = 0000021C            UCB$L_DEVDEPEND  0000003C            

SS$_IVSTSFLG   = 0000017C            SS$_SSFAIL     = 0000045C            UCB$L_DPC        00000080            

SS$_IVTIME     = 00000184            SS$_SUBRNG     = 000004AC            UCB$L_DUETIM     0000005C            

SS$_LCKPAGFUL  = 000000D4            SS$_SUPERSEDE  = 00000631            UCB$L_DX_BFPNT   0000009C            

SS$_LENVIO     = 0000018C            SS$_TAPEPOSLOST= 00000224            UCB$L_DX_BUF     00000098            

SS$_LKWSETFUL  = 00000194            SS$_TBIT       = 00000464            UCB$L_DX_RXDB    000000A0            

SS$_MBFULL     = 000008D8            SS$_TIMEOUT    = 0000022C            UCB$L_EMB        00000078            

SS$_MBTOOSML   = 0000019C            SS$_TOOMANYVER = 00000990            UCB$L_FIRST      00000014            

SS$_MCHECK     = 000002BC            SS$_TOOMUCHDATA= 0000029C            UCB$L_FPC        0000000C            

SS$_MEDOFL     = 000001A4            SS$_UNASEFC    = 00000234            UCB$L_FQBL       00000004            

SS$_MSGNOTFND  = 00000621            SS$_UNSAFE     = 0000023C            UCB$L_FQFL       00000000            

SS$_MTLBLLONG  = 00000304            SS$_UNWIND     = 00000920            UCB$L_FR3        00000010            

SS$_MUSTCLOSEFL= 00000948            SS$_UNWINDING  = 00000928            UCB$L_FR4        00000014            

SS$_NOAQB      = 00000314            SS$_VASFULL    = 00000244            UCB$L_IOQBL      00000044            

SS$_NODATA     = 000001AC            SS$_VECINUSE   = 0000024C            UCB$L_IOQFL      00000040            

SS$_NOHANDLER  = 000008F8            SS$_VOLINV     = 00000254            UCB$L_IRP        0000004C            

SS$_NOHOMEBLK  = 000008E0            SS$_WAITUSRLBL = 00000950            UCB$L_LINK       0000002C            

SS$_NOIOCHAN   = 000001B4            SS$_WASCLR     = 00000001            UCB$L_LOGADR     00000064            

SS$_NOLINKS    = 0000027C            SS$_WASECC     = 00000639            UCB$L_MAXBLOCK   00000084            

SS$_NOLOGNAM   = 000001BC            SS$_WASSET     = 00000009            UCB$L_MB_MSGQ  = 00000000            

SS$_NOMBX      = 00000274            SS$_WRITLCK    = 0000025C            UCB$L_MB_R_AST = 00000010            

SS$_NOMOREFILES= 00000930            SS$_WRONGACP   = 0000031C            UCB$L_MB_W_AST = 0000000C            

SS$_NONEXDRV   = 000001C4            STARTIO          0000031B R     04   UCB$L_MEDIA      0000008C            

SS$_NONEXPR    = 000008E8            UCB$B_AMOD       00000053            UCB$L_NT_DATSSB  00000074            

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page  24

SYMBOL TABLE                                                                                                                    (13)



UCB$L_NT_INTSSB  00000078            UCB$V_NT_BFROVF= 00000002            

UCB$L_OPCNT      00000060            UCB$V_NT_BREAK = 00000005            

UCB$L_OWNUIC     0000001C            UCB$V_NT_NAME  = 00000004            

UCB$L_PID        00000028            UCB$V_ONLINE   = 00000004            

UCB$L_RQBL       00000004            UCB$V_POWER    = 00000005            

UCB$L_RQFL       00000000            UCB$V_PRMMBX   = 00000000            

UCB$L_SVAPTE     00000068            UCB$V_SEGFLO   = 00000002            

UCB$L_SVPN       00000064            UCB$V_TIM      = 00000000            

UCB$L_TTCHAR     0000003C            UCB$V_TIMOUT   = 00000006            

UCB$L_VCB        00000030            UCB$V_TT_NOTIF = 00000002            

UCB$M_BACKP    = 00000020            UCB$V_TT_TIMO  = 00000001            

UCB$M_BSY      = 00000100            UCB$V_UNLOAD   = 0000000C            

UCB$M_CANCEL   = 00000008            UCB$V_VALID    = 0000000B            

UCB$M_DEADMO   = 00000400            UCB$W_BCNT       0000006E            

UCB$M_DELMBX   = 00000002            UCB$W_BCR        00000096            

UCB$M_DIAGBUF  = 00000002            UCB$W_BOFF       0000006C            

UCB$M_DX_WRITE = 00000008            UCB$W_BUFQUO     00000018            

UCB$M_ECC      = 00000001            UCB$W_BYTESTOGO  0000003E            

UCB$M_ERLOGIP  = 00000004            UCB$W_CHARGE     0000004A            

UCB$M_INT      = 00000002            UCB$W_CYLINDERS  0000003E            

UCB$M_INTTYPE  = 00000080            UCB$W_DA         0000008C            

UCB$M_JOB      = 00000001            UCB$W_DC         0000008E            

UCB$M_MOUNTING = 00000200            UCB$W_DEVBUFSIZ  0000003A            

UCB$M_NOCNVRT  = 00000004            UCB$W_DEVSTS     0000005A            

UCB$M_NT_BFROVF= 00000004            UCB$W_DIRSEQ     00000088            

UCB$M_NT_BREAK = 00000020            UCB$W_DSTADDR    00000018            

UCB$M_NT_NAME  = 00000010            UCB$W_DX_BCR     000000A4            

UCB$M_ONLINE   = 00000010            UCB$W_EC1        00000090            

UCB$M_POWER    = 00000020            UCB$W_EC2        00000092            

UCB$M_PRMMBX   = 00000001            UCB$W_ERRCNT     00000072            

UCB$M_TIM      = 00000001            UCB$W_FUNC       0000007E            

UCB$M_TIMOUT   = 00000040            UCB$W_MB_SEED    FFFFFFFC            

UCB$M_TT_NOTIF = 00000004            UCB$W_MSGCNT     00000016            

UCB$M_TT_TIMO  = 00000002            UCB$W_MSGMAX     00000014            

UCB$M_UNLOAD   = 00001000            UCB$W_NT_CHAN    0000007C            

UCB$M_VALID    = 00000800            UCB$W_OFFSET     0000008A            

UCB$S_LNKPRI   = 00000002            UCB$W_REFC       00000050            

UCB$S_LTYPE    = 00000002            UCB$W_SIZE       00000008            

UCB$T_PARTNER    0000000C            UCB$W_SRCADDR    0000001A            

UCB$V_BACKP    = 00000005            UCB$W_STS        00000058            

UCB$V_BSY      = 00000008            UCB$W_UNIT       00000048            

UCB$V_CANCEL   = 00000003            UCB$W_VPROT      0000001A            

UCB$V_DEADMO   = 0000000A            WRITE            00000264 R     04   

UCB$V_DELMBX   = 00000001            WRITECHECKIO     00000187 R     04   

UCB$V_DIAGBUF  = 00000001            

UCB$V_DX_WRITE = 00000003            

UCB$V_ECC      = 00000000            

UCB$V_ERLOGIP  = 00000002            

UCB$V_INT      = 00000001            

UCB$V_INTTYPE  = 00000007            

UCB$V_JOB      = 00000000            

UCB$V_LNKPRI   = 00000006            

UCB$V_LTYPE    = 00000000            

UCB$V_MOUNTING = 00000009            

UCB$V_MSGACK   = 00000004            

UCB$V_MSGFLO   = 00000003            

UCB$V_NOCNVRT  = 00000002            

MBDRIVER        - VAX/VMS MAILBOX DEVICE DRIVER                  21-AUG-1978 20:55:42   VAX-11 MACRO X0.3-11               Page  25

PROGRAM SECTION SYNOPSIS                                                                                                        (13)







PROGRAM SECTION SYNOPSIS



.  ABS  .        00000000      00     NOPIC   USR   CON   ABS   LCL NOSHR NOEXE NORD  NOWRT BYTE  

. BLANK .        00000000      01     NOPIC   USR   CON   REL   LCL NOSHR   EXE   RD    WRT BYTE  

$ABS$            FFFFFFFE      02     NOPIC   USR   CON   ABS   LCL NOSHR   EXE   RD    WRT BYTE  

$$$105_PROLOGUE  00000020      03     NOPIC   USR   CON   REL   LCL NOSHR   EXE   RD    WRT BYTE  

$$$115_DRIVER    0000038A      04     NOPIC   USR   CON   REL   LCL NOSHR   EXE   RD    WRT LONG  





THERE WERE NO ERRORS OR WARNINGS.

4008. BYTES LEFT IN FREE MEMORY POOL.

2962. BYTES OF RECLAIMED MEMORY.

OBJ$:MBDRIVER,LIS$:MBDRIVER/-SP=EXECML$/ML,SRC$:MBDRIVER

17 MLB DIR RDS - 1253 GETS TO DEFINE 31 MACROS. 96 INTER. FILE WRITES. 

