Google
 

Trailing-Edge - PDP-10 Archives - BB-H348C-RM_1982 - swskit-v21/listings/mcb/netlib.mac
There are 5 other files named netlib.mac in the archive. Click here to see a list.
	.MACRO	ABODF$,L,B
S.COAD='B'0.
S.CSGF='B'2.
S.CBPT='B'4.
S.CIOT='B'6.
S.CILI='B'8.
S.CEMT='B'10.
S.CTRP='B'12.
S.CFLT='B'14.
S.CSST='B'16.
S.CAST='B'18.
S.CABO='B'20.
S.CLRF='B'22.
S.CCRF='B'24.
S.IOMG='B'26.
S.PRTY='B'28.
T.NDNR='B'0
T.NDSE='B'2
T.NCWF='B'4
T.NCRE='B'6
T.NDMO='B'8.
T.NLDN='B'12.
T.NLUP='B'14.
	.MACRO	ABODF$	X,Y
	.ENDM
	.ENDM
	.MACRO	ABTW$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$
	QDPB$	3,16010,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	ABTW$
	.MACRO	ABTW$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$E
	QDPB$E	LABEL,3,#16010,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	ABTW$E
	.MACRO	ABTW$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$S
	QDPB$S	3,#16010,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	ABTW$S
	.MACRO	ABT$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$
	QDPB$	1,16010,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	ABT$
	.MACRO	ABT$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$E
	QDPB$E	LABEL,1,#16010,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	ABT$E
	.MACRO	ABT$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$S
	QDPB$S	1,#16010,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	ABT$S
	.MACRO	ACCW$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$
	$CON$	3,15410,LUN,EFN,IOST,AST,98.,PRMLST
	.ENDM	ACCW$
	.MACRO	ACCW$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$E
	$CON$E	LABEL,3,#15410,LUN,EFN,IOST,AST,PRMLST
	.ENDM	ACCW$E
	.MACRO	ACCW$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$S
	$CON$S	3,#15410,LUN,EFN,IOST,AST,#98.,PRMLST
	.ENDM	ACCW$S
	.MACRO	ACC$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$
	$CON$	1,15410,LUN,EFN,IOST,AST,98.,PRMLST
	.ENDM	ACC$
	.MACRO	ACC$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$E
	$CON$E	LABEL,1,#15410,LUN,EFN,IOST,AST,PRMLST
	.ENDM	ACC$E
	.MACRO	ACC$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$S
	$CON$S	1,#15410,LUN,EFN,IOST,AST,#98.,PRMLST
	.ENDM	ACC$S
	.MACRO	ASCII$	TEXT
	.ASCII	/'TEXT'/
	.ENDM
	.MACRO	ASL$	COUNT,REGISTER
	.IF DF	R$$11D ! I$$AS ! R$$EIS
	ASH	#'COUNT',REGISTER
	.IFF
	.REPT	COUNT
	ASL	REGISTER
	.ENDR
	.ENDC
	.ENDM	ASL$
	.MACRO	ASR$	COUNT,REGISTER
	.IF DF	R$$11D ! I$$AS ! R$$EIS
	ASH	#-'COUNT',REGISTER
	.IFF
	.REPT	COUNT
	ASR	REGISTER
	.ENDR
	.ENDC
	.ENDM	ASR$
	.MACRO	A1$	LB
 
	.BYTE	5. , 0		; OPCODE, COUNT
 
 
	.ENDM
	.MACRO	A10$	LB,ROW,COL,VA,STRING
 
	.BYTE	14.		; OPCODE
	.BYTE	LB'C		; COUNT
LB:	.BYTE	ROW,COL		; ROW AND COLLUMN
	.BYTE	LB'C-4		; LENGTH OF TEXT
	.IF	B,VA
	.BYTE	V.N		; DEFAULT
	.IFF
	.BYTE	VA
	.ENDC
	.ASCII	STRING
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	A11$	LB,ROW,COL,VA,STRING
 
	.BYTE	15.		; OPCODE
	.BYTE	LB'C		; COUNT
LB:	.BYTE	ROW,COL		; ROW AND COLLUMN
	.BYTE	LB'C-4		; LENGTH OF TEXT
	.IF	B,VA
	.BYTE	V.N		; DEFAULT
	.IFF
	.BYTE	VA
	.ENDC
	.ASCII	STRING
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	A2$	LB,VA,STRING
 
	.BYTE	6		; OP CODE
	.BYTE	LB'C		; COUNT
LB:
	.IF	B,VA
	.BYTE	V.N			; DEFAULT
	.IFF
	.BYTE	VA
	.ENDC
	.ASCII	STRING
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	A3$	LB,VA,STRING
 
	.BYTE	7.		; OPCODE
	.BYTE	LB'C		; COUNT
LB:
	.IF	B,VA
	.BYTE	V.N		; DEFAULT
	.IFF
	.BYTE	VA
	.ENDC
	.ASCII	STRING		; TEXT TO BE WRITTEN
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	A4$	LB,RW,CL,VA,STRING
 
	.BYTE	8.		; OPCODE
	.BYTE	LB'C		; COUNT
LB:	.BYTE	RW,CL		; ROW AND COLLUMN
	.BYTE	LB'C-4		; LENGTH OF TEXT
	.IF	B,VA
	.BYTE	V.N			; DEFAULT
	.IFF
	.BYTE	VA
	.ENDC
	.ASCII	STRING
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	A5$	LB,ROW,COL,VA,STRING
 
	.BYTE	9.		; OPCODE
	.BYTE	LB'C		; COUNT
LB:	.BYTE	ROW,COL		; ROW, COLLUMN
	.BYTE	LB'C-4		; LENGTH OF TEXT
	.IF	B,VA
	.BYTE	V.N			; DEFAULT
	.IFF
	.BYTE	VA
	.ENDC
	.ASCII	STRING
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	A6$	LB
 
	.BYTE	10., 0		; OP CODE, COUNT
 
 
	.ENDM
	.MACRO	A7$	LB
 
	.BYTE	11. , 0		; OPCODE, COUNT
 
 
	.ENDM
	.MACRO	A8$	LB,VA,STRING
 
	.BYTE	12.		; OPCODE
	.BYTE	LB'C		; COUNT
LB:
	.IF	B,VA
	.BYTE	V.N		; DEFAULT
	.IFF
	.BYTE	VA
	.ENDC
	.ASCII	STRING
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	A9$	LB,VA,STRING
 
	.BYTE	13.		; OPCODE
	.BYTE	LB'C		; COUNT
LB:
	.IF	B,VA
	.BYTE	V.N		; DEFAULT
	.IFF
	.BYTE	VA
	.ENDC
	.ASCII	STRING
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	BITDF$
BIT0	= 1
BIT1	= 2
BIT2	= 4
BIT3 	= 10
BIT4	= 20
BIT5	= 40
BIT6	= 100
BIT7	= 200
BIT8	= 400
BIT9	= 1000
BIT10	= 2000
BIT11	= 4000
BIT12	= 10000
BIT13	= 20000
BIT14	= 40000
BIT15	= 100000
	.MACRO	BITDF$
	.ENDM
	.ENDM
	.MACRO BUF$DF	CCB,SCCB,NRDB,SRDB,NSDB,SSDB,THR,PSH,W,X,Y,Z
	DEF$DF				; DEFINE ALL DEFAULT VALUES
	CCB.NB=CCB	; USER DEFINED NUMBER OF CCBS'S
	CCB.SZ=SCCB	; USER DEFINED SIZE OF CCB'S
	RDB.NB=NRDB	; USER DEFINED NUMBER OF RDB'S
	RDB.SZ=SRDB	; USER DEFINED SIZE OF RDB'S
	SDB.NB=NSDB	; USER DEFINED NUMBER OF SDB'S
	SDB.SZ=SSDB	; USER DEFINED SIZE OF SDB'S
	TR=THR		; FAIL TO ALLOCATE LDB'S HERE
	XM=PSH		; STACK THIS MANY TRANSMIT BUFFERS
	.ENDM	BUF$DF
.MACRO  BYTADF
.MACRO  PSHSTK,SRC
CLR     -(SP)
MOVB    SRC,(SP)
.ENDM   PSHSTK
.MACRO  POPSTK,DST
MOV     (SP)+,DST
.ENDM   POPSTK
.MACRO  ADDSTK
ADD     (SP)+,(SP)
.ENDM   ADDSTK
.MACRO  SUBSTK
SUB     (SP)+,(SP)
.ENDM   SUBSTK
.ENDM   BYTADF
	.MACRO	CALLC	LABEL
	.IF DF	RSX11D
	CALL	LABEL
	.IFF
	.IF DF	M$$MGE
	CALLX	LABEL,PD$NSP
	.IFF
	CALL	LABEL
	.ENDC
	.ENDC
	.ENDM
	.MACRO	CALLX	LABEL,PDV
	.IF DF	M$$MGE!RSX11D
	JSR	R5,$CALLX	; TRANSFER TO INTERMEDIATE ROUTINE
	.WORD	LABEL		; ADDRESS OF SUBROUTINE TO CALL
	.WORD	PDV		; PDV INDEX OF TARGET PROCESS
	.IFF
	CALL	LABEL		; CALL SUBROUTINE DIRECTLY
	.ENDC
	.ENDM	CALLX
	.MACRO  CASE
	.IF GT $$CSTA
	  $$ELSE
	  $$TRNM=$$TRNM-2
	.IFF
$$CSTA=1
	.ENDC
	.ENDM
	.MACRO	CCBDF$,L,B,LST
	.IIF NB,LST,	.LIST
; COMMUNICATIONS CONTROL BLOCK FORMAT
;
;
;	---------------------------------
;	!             C.LNK             !	000
;	!-------------------------------!
;	!     C.BID     !     C.RSV     !	002
;	!-------------------------------!
;	!             C.NSP             !	004
;	!-------------------------------!
;	!     C.STA     !     C.LIN     !    	006
;	!-------------------------------!
;	!     C.MOD     !     C.FNC     !	010
;	!-------------------------------!
;	!             C.STS             !	012
;	!-------------------------------!
;	!                               !	014
;	!-            C.BUF1           -!
;	!                               !	016
;	!-------------------------------!
;	!             C.CNT1	        !	020
;	!-------------------------------!
;	!             C.FLG1            !	022
;	!-------------------------------!
;	!                               !	024
;	!-            C.BUF2           -!
;	!                               !	026
;	!-------------------------------!
;	!             C.CNT2	        !	030
;	!-------------------------------!
;	!             C.FLG2            !	032
;	---------------------------------
 
	.ASECT
.=0
C.LNK:'L'	.BLKW	1	;FORWARD LINK
C.RSV:'L'	.BLKB	1	;RESERVED CELL FOR ALLOCATOR OF CCB
C.BID:'L'	.BLKB	1	;BUFFER ID
C.NSP:'L'	.BLKW	1	;NSP RESERVED CELL
C.LIN:'L'	.BLKB	1	;LINE NUMBER
C.STA:'L'	.BLKB	1	;STATION NUMBER
C.FNC:'L'	.BLKB	1	;FUNCTION CODE
C.MOD:'L'	.BLKB	1	;FUNCTION CODE MODIFIER
C.STS:'L'	.BLKW	1	;STATUS WORD
 
				;FIRST BUFFER DESCRIPTOR
C.BUF1:'L'	
C.BUF:'L'	.BLKW	2	;BUFFER ADDRESS DOUBLEWORD
C.CNT1:'L'	
C.CNT:'L'	.BLKW	1	;BUFFER COUNT
C.FLG1:'L'	
C.FLG:'L'	.BLKW	1	;BUFFER FLAGS
				;SECOND BUFFER DESCRIPTOR
C.BUF2:'L'	.BLKW	2	;BUFFER ADDRESS DOUBLEWORD
C.CNT2:'L'	.BLKW	1	;BUFFER COUNT
C.FLG2:'L'	.BLKW	1	;BUFFER FLAGS
 
	.PSECT
;
; CCB BUFFER ID DEFINITONS
;
CB.CCB='B'	000002		; COMMON POOL CCB
CB.RDB='B'	000004		; LARGE/RECEIVE DATA BUFFER CCB
 
;
; CCB STATUS WORD BIT DEFINITIONS (C.STS) DDM > DLC
;
 
CS.EOF='B'	000001		;END OF FILE
CS.DEV='B'	000002		;HARD DEVICE ERROR (I.E. NXM)
CS.ROV='B'	000004		;RECEIVER OVERRUN
CS.RNG='B'	000010		;RING DETECT
CS.ENB='B'	000020		;CONNECTION ESTABLISHED
CS.DIS='B'	000040		;DISCONNECT DETECTED
CS.ABO='B'	000100		;MESSAGE ABORTED
CS.BUF='B'	000200		;PREVIOUS BUFFER ALLOCATION FAILED & DEVICE RESYNC
CS.DCR='B'	000400		;DATA CRC ERROR
CS.HFE='B'	002000		;HEADER FORMAT ERROR
CS.MTL='B'	004000		;MESSAGE TO LONG
CS.RSN='B'	010000		;RECEIVER RESYNCED BEFORE THIS MESSAGE
CS.TMO='B'	020000		;TIMEOUT ERROR (CLOCK LOSS)
CS.LST='B'	040000		;LAST CCB IN MESSAGE CHAIN (USED BY COMM EXEC)
 
CS.ERR='B'	100000		;INCLUSIVE OR OF ALL ERRORS
;
; CCB STATUS WORD BIT DEFINITIONS (C.STS)
;	DLC  (DDCMP OR DMC11) > LLC  (NSP)
;
CE.RTE='B'	100376		;RECEIVE THRESHOLD EXCEEDED
CE.TMO='B'	100374		;REP THRESHOLD EXCEEDED
CE.MOP='B'	100372		;MOP MESSAGE RECEIVED
CE.ERR='B'	100370		;GENERAL ERROR
CE.DIS='B'	100366		;DISCONNECT
CE.SRC='B'	100364		;START RECEIVED
CE.ABO='B'	100362		;OPERATION ABORTED
CE.NTE='B'	100361		;NAK THRESHOLD EXCEEDED
CS.SUC='B'	000001		;OPERATION SUCCESSFUL
 
;
; BUFFER FLAGS WORD BIT DEFINITIONS (C.FLG)
;
 
CF.EOM='B'	000004		;END OF MESSAGE
CF.SOM='B'	000010		;START OF MESSAGE
CF.HDR='B'	000020		;BUFFER IS A HEADER
CF.SYN='B'	000040		;PRECEED BUFFER BY SYNCS
CF.TRN='B'	000100		;LIST MARKER FOR TURN AROUND
CF.LB='B'	100000		;LAST BUFFER IN THIS LINK
;
; PROCESS OPERATION FUNCTION CODE DEFINITIONS
;
FC.XME='B'	0		;TRANSMIT ENABLE
FC.RCE='B'	2		;RECEIVE ENABLE (BUFFER RETURN)
FC.KIL='B'	4		;KILL I/O
FC.CTL='B'	6		;CONTROL
FC.TIM='B'	10		;TIMEOUT
FC.XCP='B'	12		;TRANSMIT COMPLETE
FC.RCP='B'	14		;RECEIVE COMPLETE
FC.KCP='B'	16		;KILL COMPLETE
FC.CCP='B'	20		;CONTROL COMPLETE
;
; RECEIVE ENABLE SUBFUNCTION CODES
;
FS.RTN='B'	2*400		;BUFFER FROM BUFFER WAIT REQUEST
;
; RECEIVE COMPLETE SUBFUNCTION CODES
;
FS.DVC='B'	2*400		;DEVICE CHECKS CRC (CHECK C.STS FOR ERROR INDICATION)
FS.CIB='B'	4*400		;CRC IS IN RECEIVE BUFFER
;
; KILL SUBFUNCTION CODES
;
FS.KIL='B'	0*400		;RECEIVE & TRANSMIT KILL
FS.CRA='B'	2*400		;RECEIVE KILL
FS.XKL='B'	4*400		;TRANSMIT KILL
;
; CONTROL SUBFUNCTION CODES
;
FS.AST='B'	0*400		;ASYNCHRONOUS EVENT (COMPLETION ONLY)
FS.INI='B'	0*400		;INITIALIZE
FS.STR='B'	2*400		;START
FS.STP='B'	4*400		;STOP
FS.TRM='B'	6*400		;TERMINATE
FS.MNT='B'	10*400		;MAINTAINANCE
FS.SET='B'	12*400		;SET CHARACTERISTICS
FS.GET='B'	14*400		;GET CHARACTERISTICS
FS.XON='B'	16*400		;XON
FS.XOF='B'	20*400		;XOFF
				;MODEM CONTROL: LLC > DLC > MDMCTL > DDM
FS.RNG='B'	22*400		;LOOK FOR RING
				;MODEM CONTROL: DLC > MDMCTL > DDM
FS.ENB='B'	24*400		;ENABLE LINE
FS.DIS='B'	26*400		;DISABLE LINE
				;MODEM CONTROL: MDMCTL > DDM
FS.MSN='B'	30*400		;SENSE MODEM STATUS
;
; TIMEOUT SUBFUNCTION CODES
;
FS.STM='B'	0*400		;SHORT TIMEOUT (50 MSEC)
FS.LTM='B'	2*400		;LONG TIMEOUT (1 SEC)
 
	.IF NB	LST
	.NLIST
	.IFF
	.MACRO	CCBDF$,X,Y
	.ENDM
	.ENDC
	.ENDM
	.MACRO	CHADF$
CH.DUP	=	000001
CH.ECH	=	000002
CH.SYN	=	000004
CH.TYP	=	000010
CH.MDT	=	000020
CH.STA	=	000040
CH.PAR	=	000100
CH.PRM	=	000200
	.ENDM	CHADF$
	.MACRO 	CLKDF$,L,B
C.MRKT='B'0
C.SCHD='B'2
C.SSHT='B'4
C.SYST='B'6
C.SYTK='B'8.
C.CSTP='B'10.
	.ASECT
.=0
C.LNK:'L' .BLKW	1
C.RQT:'L' .BLKB	1
C.EFN:'L' .BLKB	1
C.TCB:'L' .BLKW	1
C.TIM:'L' .BLKW	2
.=C.TIM+4
C.AST:'L' .BLKW	1
C.SRC:'L' .BLKW	1
C.DST:'L' .BLKW	1
.=C.TIM+4
C.RSI:'L' .BLKW	2
C.UIC:'L' .BLKW	1
.=C.TIM+4
	.BLKW	2
	.BLKW	1
.=C.TIM+4
C.SUB:'L' .BLKW	1
C.AR5:'L' .BLKW	1
	.BLKW	1
C.LGTH='B'.
	.PSECT
	.MACRO	CLKDF$	X,Y
	.ENDM
	.ENDM
	.MACRO	CLSW$	LUN,EFN,IOST,AST
	.MCALL	QDPB$
	.IF B	<LUN>
	QDPB$	3,16410,<.MBXLU>,EFN,,IOST,AST
	.IFF
	QDPB$	3,16410,LUN,EFN,,IOST,AST
	.ENDC
	.ENDM	CLSW$
	.MACRO	CLSW$E	LABEL,LUN,EFN,IOST,AST
	.MCALL	QDPB$E
	QDPB$E	LABEL,3,#16410,LUN,EFN,,IOST,AST
	.ENDM	CLSW$E
	.MACRO	CLSW$S	LUN,EFN,IOST,AST
	.MCALL	QDPB$S
	.IF B	<LUN>
	QDPB$S	3,#16410,<#.MBXLU>,EFN,,IOST,AST
	.IFF
	QDPB$S	3,#16410,LUN,EFN,,IOST,AST
	.ENDC
	.ENDM	CLSW$S
	.MACRO	CLS$	LUN,EFN,IOST,AST
	.MCALL	QDPB$
	.IF B	<LUN>
	QDPB$	1,16410,<.MBXLU>,EFN,,IOST,AST
	.IFF
	QDPB$	1,16410,LUN,EFN,,IOST,AST
	.ENDC
	.ENDM	CLS$
	.MACRO	CLS$E	LABEL,LUN,EFN,IOST,AST
	.MCALL	QDPB$E
	QDPB$E	LABEL,1,#16410,LUN,EFN,,IOST,AST
	.ENDM	CLS$E
	.MACRO	CLS$S	LUN,EFN,IOST,AST
	.MCALL	QDPB$S
	.IF B	<LUN>
	QDPB$S	1,#16410,<#.MBXLU>,EFN,,IOST,AST
	.IFF
	QDPB$S	1,#16410,LUN,EFN,,IOST,AST
	.ENDC
	.ENDM	CLS$S
.MACRO	CMDMDF
.PSECT	CMDDAT,RW,D,GBL,REL,OVR
CMIPHD:	.WORD	0
CMIPTL:	.WORD	CMIPHD
DFLCNT:	.WORD	0
DFLNAM:	.WORD	0,0,0
.PSECT
.ENDM
.MACRO	CMIMDF
TERINP	= 1.
.PSECT	CMIDAT,RW,D,GBL,REL,OVR
CMIFLG:	.BYTE	0
.PSECT
.ENDM
.MACRO	CMOMDF
.PSECT	CMODAT,RW,D,GBL,REL,OVR
CMLOCK:	.BYTE	0
.PSECT
.ENDM
	.MACRO	CNBDF$,L,B
 
	.ASECT
 
.=0
N.CTL:'L' .BLKW		1	;TEMPORARY LINK ADDRESS
				;
N.SEGZ:'L'.BLKW		1	;SEGMENT SIZE
N.DFM:'L' .BLKB		1	;DESTINATION DESCRIPTOR FORMAT
N.DOT:'L' .BLKB		1	;     "      OBJECT TYPE
				;FORMAT 0 -
	.BLKB	18.		; [UNUSED]
.=.-18.				;FORMAT 1 -
N.DDEC:'L' .BLKW	1	; DESTINATION PROCESS BYTE COUNT
N.DDE:'L' .BLKB		16.	;      "         "
.=.-18.				;FORMAT 2 -
N.DGP:'L' .BLKW		1	; DESTINATION GROUP
N.DUS:'L' .BLKW		1	;      "      USER
N.DNMC:'L' .BLKW	1	;      "      NAME BYTE COUNT
N.DNM:'L' .BLKB		12.	;      "        "
				;
N.SND:'L' .BLKB		6	;SOURCE NODE NAME
N.SFM:'L' .BLKB		1	;  "    DESCRIPTOR FORMAT
N.SOT:'L' .BLKB		1	;  "    OBJECT TYPE
				;FORMAT 0 -
	.BLKB	18.		; [UNUSED]
.=.-18.				;FORMAT 1 -
N.SDEC:'L' .BLKW	1	; SOURCE PROCESS NAME BYTE COUNT
N.SDE:'L' .BLKB		16.	;    "      "      "
.=.-18.				;FORMAT 2 -
N.SGP:'L' .BLKW		1	; SOURCE GROUP
N.SUS:'L' .BLKW		1	;   "    USER
N.SNMC:'L' .BLKW	1	;   "    NAME BYTE COUNT
N.SNM:'L' .BLKB		12.	;   "      "
				;
N.CIDC:'L' .BLKW	1	;SOURCE TASK ID BYTE COUNT
N.CID:'L' .BLKB		16.	;   "     "   "
N.CPSC:'L' .BLKW	1	;PASSWORD BYTE COUNT
N.CPS:'L' .BLKB		8.	;    "
N.CACC:'L' .BLKW	1	;ACCOUNTING INFORMATION BYTE COUNT
N.CAC:'L' .BLKB		16.	;     "          "
N.CDAC:'L' .BLKW	1	;OPTIONAL DATA BYTE COUNT
N.CDA:'L'			;   "       "  BUFFER
				;
N.CBL='B'.-N.CTL			;LENGTH OF CNB (WITHOUT ANY DATA)
 
	.PSECT
 
	.MACRO	CNBDF$,X,Y
	.ENDM	CNBDF$
 
	.ENDM	CNBDF$
.MACRO	CNFDF
TGNMAD	= 0.
SVNMAD	= 4.
SVLNID	= 8.
LDFLAD	= 12.
LDPRAD	= 16.
BTPSAD	= 20.
DMFLAD	= 24.
ENTLEN	= 28.
.MACRO	CNFDF
.ENDM
.ENDM
.MACRO	CNFMAC
NODLEN	= 6.
BPSLEN	= 8.
FILLEN	= 30.
PARLEN	= 30.
.MACRO	CNFBEG
CNFDB::
.ENDM
.MACRO	CNFEND
CNFDBE::
.EVEN
.ENDM
.MACRO	CNFENT NODE,SERVER,LOAFIL,LOAPAR,BOOPAS,DUMFIL
STRENT	NODE,NODLEN
SERENT	SERVER
STRENT	LOAFIL,FILLEN
PARENT	LOAPAR
STRENT	BOOPAS,BPSLEN
STRENT	DUMFIL,FILLEN
.ENDM
.MACRO	STRENT STRNG,MAXLEN
.PSECT	CNFSTR,RW,D,LCL,REL,OVR
$$ADDR	= .
.ASCII	/'STRNG'/
$$LEN	= .-$$ADDR
.PSECT
.IF	LT MAXLEN-$$LEN
  .ERROR
.ENDC
.WORD	$$ADDR
.WORD	$$LEN
.ENDM
.MACRO	SERENT NAME,DEV,CON,LIN,STA
STRENT	NAME,NODLEN
.BYTE	DEV,CON,LIN,STA
.ENDM
.MACRO	PARENT NAME,NUMBER,HOST
.PSECT	CNFSTR,RW,D,LCL,REL,OVR
$$ADDR	= .
NODPAR	NAME,1
NUMPAR	NUMBER,2
NODPAR	HOST,3
.BYTE	0
$$LEN	= .-$$ADDR
.PSECT
.IF	LT PARLEN-$$LEN
  .ERROR
.ENDC
.WORD	$$ADDR
.WORD	$$LEN
.ENDM
.MACRO	NODPAR NODNAM,CODE
.IF	NB NODNAM
  .BYTE   CODE
  .NCHR   $$LEN,<NODNAM>
  .IF     LT 6-$$LEN
    .ERROR
  .ENDC
  .BYTE   $$LEN
  .ASCII  /'NODNAM'/
.ENDC
.ENDM
.MACRO	NUMPAR NUMBER,CODE
.IF	NB NUMBER
  .BYTE   CODE,2
  .IF     LE NUMBER-377
    .BYTE   NUMBER
    .BYTE   0
  .IFF
    .BYTE   NUMBER&377
    .BYTE   NUMBER/400
  .ENDC
.ENDC
.ENDM
.ENDM
.MACRO	CNT$	LB
LB'C	= .-1$
	.ENDM
	.MACRO CNT$DF A,B,C,D,E,F,G,H,I,J,K,L,M
	.ENDM	CNT$DF
	.MACRO	CONB$$	NODNAM,OBJ,FMT,DSCRIP,RQID,PASS,ACNT
$$$LOC=.
	.IF NB	<NODNAM>
	.NCHR	$$$,<NODNAM>
	.IF GE	6-$$$
	.ASCII	''NODNAM''
	.REPT	6-$$$
	.BYTE	' 
	.ENDR
	.IFF
	.ERROR	NODE	;NODE NAME TOO LONG
	.ENDC
	.IFF
	.BLKB	6
	.ENDC
	.IF NB	<FMT>
$$$FMT=FMT
	.IF LE	$$$FMT-2
	.BYTE	FMT
	.IFF
	.ERROR	FMT	;ILLEGAL FORMAT NUMBER
	.ENDC
	.IFF
$$$FMT=0
	.BLKB	1
	.ENDC
	.IF NB	<OBJ>
	.BYTE	OBJ
	.IFF
	.BLKB	1
	.ENDC
	.IF NB	<DSCRIP>
	.IF EQ	$$$FMT
	.ERROR	DSCRIP	;FORMAT 0 DESCRIPTOR NOT ALLOWED
	.ENDC
	.IF EQ	1-$$$FMT
	.NCHR	$$$,<DSCRIP>
	.IF GE	16.-$$$
	.WORD	$$$
	.ASCII	''DSCRIP''
	.BLKB	16.-$$$
	.IFF
	.ERROR	DSCRIP	;FORMAT 1 DESCRIPTOR TOO LONG
	.ENDC
	.ENDC
	.IF EQ	$$$FMT-2
$$$=0
	.IRP	A,<DSCRIP>
$$$=$$$+1
	.ENDM
	.IF GE	3-$$$
$$$=0
	.IRP	B,<DSCRIP>
$$$=$$$+1
	.IF GE	2-$$$
	.IF NB	<B>
	.WORD	B
	.IFF
	.BLKW	1
	.ENDC
	.ENDC
	.IF EQ	3-$$$
	.NCHR	$$$,<B>
	.IF GE	12.-$$$
	.WORD	$$$
	.ASCII	''B''
	.BLKB	12.-$$$
	.IFF
	.ERROR	B	;FORMAT 2 DESCRIPTOR NAME TOO LONG
	.ENDC
	.ENDC
	.ENDM
	.IFF
	.ERROR	$$$	;ILLEGAL FORMAT 2 DESCRIPTOR
	.ENDC
	.ENDC
	.IFF
	.BLKB	18.
	.ENDC
	.IF NB	<RQID>
	.NCHR	$$$,<RQID>
	.IF GE	16.-$$$
	.WORD	$$$
	.ASCII	''RQID''
	.BLKB	16.-$$$
	.IFF
	.ERROR	RQID	;REQUESTOR ID TOO LONG
	.ENDC
	.IFF
	.BLKB	18.
	.ENDC
	.IF NB	<PASS>
$$$=0
	.IRP	A,<PASS>
$$$=$$$+1
	.ENDM
	.IF GE	8.-$$$
	.WORD	$$$
	.BYTE	PASS
	.BLKB	8.-$$$
	.IFF
	.ERROR	PASS	;PASSWORD TOO LONG
	.ENDC
	.IFF
	.BLKB	10.
	.ENDC
	.IF NB	<ACNT>
	.NCHR	$$$,<ACNT>
	.IF GE	16.-$$$
	.WORD	$$$
	.ASCII	''ACNT''
	.BLKB	16.-$$$
	.IFF
	.ERROR	ACNT	;ACCOUNTING INFORMATION TOO LONG
	.ENDC
	.IFF
	.BLKB	18.
	.ENDC
	.ENDM	CONB$$
.MACRO	CONDF
C$RLCI	= 0.
C$RLBF	= 1.
C$RLCB	= 2.
C$CLCO	= 3.
C$CLFL	= 4.
C$CLLN	= 5.
C$NOPN	= 25.
C$NORD	= 26.
C$ALBF	= 26.
C$ALCB	= 27.
C$OPCO	= 28.
C$RDCM	= 29.
C$WRCM	= 30.
C$STPR	= 31.
C$STPS	= C$STPR
C$RDIN	= 32.
C$RDIS	= C$RDIN
C$OPIN	= 33.
C$OPOT	= 34.
C$RDBK	= 35.
C$WRBK	= 36.
C$OPLN	= 37.
C$TRBK	= 38.
C$RCBK	= 39.
C$RCEV	= 40.
C$OPLK	= 41.
C$CLLK	= 42.
C$TRMS	= 43.
C$RCMS	= 44.
C$STBK	= 45.
C$OPIR	= 46.
C$OPOR	= 47.
C$RDRC	= 48.
C$WRRC	= 49.
C$RCIN	= 50.
C$TRIN	= 51.
C$ZRCN	= 52.
C$WRCL	= 53.
C$OPCL	= 54.
C$CLCL	= 55.
C$ORD	= 101.
C$TRMA	= 101.
C$RCMA	= 102.
C$PROC	= 128.
CS$SUC	= 1.
CS$ACK	= 2.
CS$NCH	= 3.
CS$LKE	= 1.
CS$LNA	= 2.
CS$LOG	= 3.
CE$FUN	= -1.
CE$ADR	= -2.
CE$LEN	= -3.
CE$FAI	= -4.
CE$GEN	= CE$FAI
CE$NWE	= -5.
CE$REJ	= -6.
CE$DIS	= -7.
CE$CON	= -8.
CE$EOF	= -9.
CE$LID	= -10.
CE$NOD	= -11.
CE$OVR	= -12.
CE$PAR	= -13.
CE$TMO	= -14.
CE$OPN	= -15.
CE$IO	= -16.
CE$IND	= -17.
CE$FIL	= -18.
CE$NSD	= -19.
CE$NST	= -20.
CE$ACP	= -21.
CE$LST	= -22.
CE$PRO	= -23.
CE$OBJ	= -24.
C.PTR	= 0.
C.SERV	= 2.
C.CTXT	= 4.
C.FUNC	= 6.
C.PROC	= 7.
C.RET	= 8.
C.LEN	= 10.
C.ADDR	= 12.
C.LINE	= C.ADDR
C.BKNM	= C.ADDR
C.TYPE	= 14.
C.PROM	= C.TYPE
C.TASK	= C.TYPE
C.PRID	= 15.
C.LUN	= 16.
C.LKNM	= C.LUN
C.WAIT	= C.LUN
C.MODE	= 17.
C.SAVE	= 18.
C$LEN	= 22.
RI$LCC	= 1.
RI$LCS	= 2.
RI$RML	= 3.
RI$RMC	= 4.
RI$RMS	= 5.
RI$LNL	= 6.
RI$LNC	= 7.
RI$LNS	= 8.
RI$ZLC	= 9.
RI$ZRM	= 10.
RI$ZLN	= 11.
SP$LST	= 1.
SP$LHO	= 2.
SP$DHO	= 3.
SP$RRP	= 4.
SP$RTP	= 5.
SP$NST	= 6.
SP$DRP	= 7.
SP$DTP	= 8.
SP$LLP	= 9.
SP$LOF	= 10.
SP$NDO	= 11.
SP$NDM	= 12.
SP$LNO	= 13.
SP$LNM	= 14.
.MACRO	CONDF
.ENDM
.ENDM
.MACRO	CONMDF
.MCALL	CONFIG
.PSECT	CONDAT,RW,D,GBL,REL,OVR
CONFIG
CBLEN	= 22.
CBLIST:	.REPT	F$CB-1
	  .WORD	  .+CBLEN
	  .BLKB	  CBLEN-2
	.ENDM
	.WORD	0
	.BLKB	CBLEN-2
FSTCB	= CBLIST
LSTCB	= F$CB-1
LSTCB	= LSTCB*CBLEN+FSTCB
CBHEAD:	.WORD	CBLIST
.PSECT
.ENDM
	.MACRO	CONW$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$
	$CON$	3,15400,LUN,EFN,IOST,AST,72.,PRMLST
	.ENDM	CONW$
	.MACRO	CONW$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$E
	$CON$E	LABEL,3,#15400,LUN,EFN,IOST,AST,PRMLST
	.ENDM	CONW$E
	.MACRO	CONW$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$S
	$CON$S	3,#15400,LUN,EFN,IOST,AST,#72.,PRMLST
	.ENDM	CONW$S
	.MACRO	CON$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$
	$CON$	1,15400,LUN,EFN,IOST,AST,72.,PRMLST
	.ENDM	CON$
	.MACRO	CON$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$E
	$CON$E	LABEL,1,#15400,LUN,EFN,IOST,AST,PRMLST
	.ENDM	CON$E
	.MACRO	CON$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$S
	$CON$S	1,#15400,LUN,EFN,IOST,AST,#72.,PRMLST
	.ENDM	CON$S
.MACRO	CPH$	CODE
	.IF	B,CODE
	.BYTE	0	;DEFAULT CPH CODE TO ZERO
	.IFF
	.BYTE	CODE
	.ENDC
	.ENDM
	.MACRO	CRBDF$,L,B
 
	.ASECT
 
.=0
N.RND:'L' .BLKB		6	;DESTINATION NODE NAME
N.RFM:'L' .BLKB		1	;     "      DESCRIPTOR FORMAT
N.ROT:'L' .BLKB		1	;     "      OBJECT TYPE
				;FORMAT 0 -
	.BLKB	18.		; [UNUSED]
.=.-18.				;FORMAT 1 -
N.RDEC:'L' .BLKW	1	; DESTINATION PROCESS BYTE COUNT
N.RDE:'L' .BLKB		16.	;      "         "
.=.-18.				;FORMAT 2 -
N.RGP:'L' .BLKW		1	; DESTINATION GROUP
N.RUS:'L' .BLKW		1	;      "      USER
N.RNMC:'L' .BLKW	1	;      "      NAME BYTE COUNT
N.RNM:'L' .BLKB		12.	;      "        "
				;
N.RIDC:'L' .BLKW	1	;REQUESTING PROCESS ID BYTE COUNT
N.RID:'L' .BLKB		16.	;     "        "     "
N.RPSC:'L' .BLKW	1	;REQUESTING PASSWORD BYTE COUNT
N.RPS:'L' .BLKB		8.	;    "         "
N.RACC:'L' .BLKW	1	;ACCOUNTING INFORMATION BYTE COUNT
N.RAC:'L' .BLKB		16.	;     "          "
				;
N.RQL='B'.-N.RND		;LENGTH OF RDB
 
	.PSECT
 
	.MACRO	CRBDF$,X,Y
	.ENDM	CRBDF$
 
	.ENDM	CRBDF$
	.MACRO	CRDLT$ L,B
	.MCALL	TMPDF$
	TMPDF$
;
; NURD CR11 DEVICE DRIVER LINE TABLE TEMPLATE
;
	.ASECT
	.=0
C.TIMC:'L	.BLKB	1		;TWO BYTE TIMER ENTRY, CURRENT VALUE
C.TIMI:'L	.BLKB	1		;  AND INITIAL TIMER VALUE
C.CALL:'L	.INT			;INTERRUPT DISPATCH CALL
C.PRI:'L	.PRI			;SCHEDULING PRIORITY
					;DDM LEVEL DATA BASE
					;ORDER FOR THIS SECTION IS CRITICAL
C.CSR:'L	.CSR			;ONE WORD CSR POINTER
C.RST:'L	.BLKW	1		;CR11 STATUS READ AT INTERRUPT
C.COLC:'L	.BLKB	1		;PHYSICAL COLUMN COUNT
C.HUNG:'L	.BLKB	1		;DEVICE HUNG TIMER
C.PUBP:'L	.BLKW	2		;BUFFER PTR DOUBLEWORD
C.SGHD:'L	.BLKW	1		;CURRENT SEGMENT HEADER ADDRESS
C.LDAT:'L	.BLKW	1		;LAST DATA ITEM READ
C.PUBS:'L	.BLKW	1		;BUFFER INPUT COUNTER
C.NRDA:'L	.BLKW	1		;BEG OF NURD MESSAGE(ADDRESS)
C.DDMQ:'L	.LSTHD			;CCB'S QUEUED FOR INPUT
C.ASTS:'L	.BLKW	1		;ACTION STATUS BIT MAP
	CA.CLO	='B	1		;CLOSED
	CA.PAU	='B	2		;PAUSED
	CA.ADN	='B	4		;ABORT WHEN DONE WITH DDM QUEUE
	CA.ABO	='B	10		;ABORTING
	CA.ABE	='B	20		;CLEAR ABORT ON EOF (ELSE ON CLEAR)
	CA.EOF	='B	40		;CURRENT MESSAGE HAS EOF
	CA.HOP	='B	100		;HOPPER CHECK - EMPTY INPUT OR FULL OUTPUT
	CA.MOT	='B	200		;MOTION CHECK - PICK FAIL,STACK FAIL,MOTION ERROR
	CA.TER	='B	400		;TIMING ERROR - DATA OVERRUN CONDITION
	   CA.ERR='B	CA.HOP!CA.MOT!CA.TER	;SUMMARY - HARD ERROR
	CA.OFL	='B	1000		;READER OFFLINE
	CA.IVP	='B	2000		;INVALID PUNCH - MULTIPUNCH
	CA.TMO	='B	4000		;DEVICE TIME OUT
	CA.XOF	='B	100000		;READER XOF'D
C.CDCT:'L	.BLKW	1		;PHYSICAL CARD COUNT
					;MISCELLANEOUS ITEMS
	.EVEN
C.SLN:'L	.SLNW			;DEVICE SYSTEM LINE NUMBER
C.IOCN:'L	.BLKW	1		;OUTSTANDING IO COUNT
C.IOWT:'L	.BLKW	1		;CLOSE WAIT FLAG = CLOSE CCB
					;CONTROL MESSAGE PROCESSING DATA BASE
	.EVEN
C.CMSQ:'L	.LSTHD			;CONTROL MESSAGE QUEUE
C.RECO:'L	.BLKB	1		;CONTROL MESSAGE RESOURCE ERROR FLAG
C.RATT:'L	.BLKB	1		;PENDING ATTENTION MESSAGE FLAG - REASON CODE
C.CAPP:'L	.BLKB	1		;PENDING CAPABILITIES MESSAGE FLAG
C.STRT:'L	.BLKB	1		;PENDING READ START
					;DATA & FEATURES PROCESSING DATA BASE
	.EVEN
C.DLCQ:'L	.LSTHD			;CCB'S QUEUED INTO DLC
C.MFLG:'L	.BLKB	1		;CURRENT NURD MESSAGE FLAGS
C.CAPN:'L	.BLKB	1		;CURRENT INDEX INTO CAPABILITIES LIST
C.NFSP:'L	.BLKB	1		;NO. FEATURE SPECS IN CURRENT MSG
	.EVEN
C.DMAD:'L	.BLKW	2		;DATA MSG ADDRESS DOUBLEWORD (PTR)
C.DMBS:'L	.BLKW	1		;DATA MSG BUFFER SIZE
C.DMSQ:'L	.BLKB	2		;LAST GOOD, CURRENT DATA SEQ NUMBERS
C.PBRC:'L	.BLKB	1		;TEMP BYTE
	.EVEN
C.MSGQ:'L	.LSTHD			;OUTGOING MSG QUEUE
C.MSGA:'L	.BLKW	2		;CURRENT MSG BUFFER ADDRESS DOUBLEWORD
C.MSGS:'L	.BLKW	1		;CURRENT MSG BUFFER SIZE
					;DATA/FEATURES PROCESS HYBER CONTEXT
C.DWAK:'L	.BLKB	1		;WAKE CONDITION
	DWAKS	='B	1		;WAKE WHEN NEW MESSAGE SEGMENT RECEIVED
	DWAKP	='B	2		;WAKE WHEN PHYSICAL BUFFER RETURNED TO QUEUE
	DWAKT	='B	3		;WAKE ON CLOCK TOCK
	DWAKR	='B	4		;WAKE WHEN RESUME CONTROL FCN DONE
C.DTXL:'L	.BLKB	1		;NO. WORDS ON STACK AT SLEEP TIME
	.EVEN
C.DFSP:'L	.BLKW	1		;STACK ORIGIN
DTXTSZ	='B	16.			;DATA/FEATURES PROCESS CONTEXT ALLOCATED
C.DTXT:'L	.BLKW	DTXTSZ		;CONTEXT BLOCK FOR DA/FEATURES PROCESS
					;FEATURE CRUFT
C.CFET:'L				;LP11 COMMON FEATURE LIST
	.BLKB	1			;NUMBER OF COMMON FEATURES
	.BLKB	1			;FEATURE FE.DAT     SUPPORTED
	.BLKB	1			;FEATURE FE.SER NOT SUPPORTED
	.BLKB	1			;FEATURE FE.LCR NOT SUPPORTED
	.BLKB	1			;FEATURE FE.FWD NOT SUPPORTED
	.BLKB	1			;FEATURE FE.EOF     SUPPORTED
	.BLKB	1			;FEATURE FE.DVT NOT SUPPORTED
	.BLKB	1			;FEATURE FE.TRN NOT SUPPORTED
	.BLKB	1			;FEATURE FE.FNM NOT SUPPORTED
	.BLKB	1			;FEATURE FE.DWD     SUPPORTED
CCFETL	='B	.-C.CFET-1
C.DFET:'L	.BLKB	1		;NUMBER OF DEVICE SPECIFIC FEATURES
	.BLKB	1			;FEATURE 129    NOT DEFINED
	.BLKB	1			;FEATURE CD.CWD     SUPPORTED
CDFETL	='B	.-C.DFET-1
					;FEATURE BLOCKS
F.FSB	='B	0			;(BM)FEATURES STATUS BYTE
	FB.CL0	='B 0			;CLASS 0 FEATURE => <BIT> FORM
	FB.CL1	='B 1			;CLASS 1 FEATURE => <CNT><...> FORM
	FB.WRD	='B 2			;FEATURE IS A WORD AND
					; F.FCV IS A DLT OFFSET TO IT
	FB.STR	='B 4			;FEATURE IS A STRING
					;F.FCV IS THE LENGTH
					;CURRENT VALUE BEGINS AT F.FCV+1
					;STANDARD VALUE(IF ANY) BEGINS AT F.FCV+1+(F.FCV)
	FB.STE	='B 10			;STANDARD VALUE EXISTS
	FB.SST	='B 20			;STANDARD IS SET
	FB.CP	='B 40			;CHANGE PENDING
	FB.CA	='B 100			;CHANGE ALLOWED
F.FCV	='B	1			;FEATURE CURRENT VALUE BYTE
F.FSV	='B	2			;FEATURE STANDARD VALUE BYTE
CR.DAT:'L					;DATA MODE
	.BLKB	1
	CRDATS	='B	FB.CL1!FB.CA!FB.SST!FB.STE	;INITIAL STATUS OF LE.DOF LE.DAT
	.BLKB	1				;ASCII
	.BLKB	1				;ASCII IS STD
;CR.SER:'L					;SERIAL NUMBER
;CR.LCR:'L					;LOWER CASE RAISE
;CR.FWD:'L					;FORM WIDTH
CR.EOF:'L						;EOF RECOGNITION
	.BLKB	1
	CREOFS	='B	FB.CL1!FB.CA		;INITIAL STATUS OF CR.EOF
	.BLKB	1
;CR.DVT:'L					;DEVICE TYPE
;CR.TRN:'L					;RECORD TRUNCATION
;CR.FNM:'L					;FORM NAME
CR.DWD:'L					;DEVICE WIDTH
	.BLKB	1
	.BLKB	1				;STD WIDTH
;	DEVICE SPECIFIC FEATURES
CR.CWD:'L					;CARD WIDTH
	.BLKB	1
	CRCWDS	='B	FB.CL1!FB.CA!FB.STE!FB.SST	;INITIAL STATUS OF CR.CWD
	.BLKB	1
	.BLKB	1
	.PSECT
	.ENDM	CRDLT$
	.MACRO	CUCDF$	X,Y
	.ASECT
.=	U.CW2+2
U.ACUR:'X	.BLKW	1
U.NSYN:'X	.BLKB	1
U.NSYC:'X	.BLKB	1
.=	U.VCB+2
U.PHDR:'X	.BLKW	1
U.RCHK:'X	.BLKW	1
U.QSYN:'X
U.RCAC:'X	.BLKW	1
U.RBUF:'X	.BLKW	2
U.RCNT:'X	.BLKW	1
U.SVC:'X	.BLKW	1
U.TXCT:'X
U.INTP:'X	.BLKW	1
U.SYNC:'X	.BLKB	1
U.MPN:'X	.BLKB	1
U.RFRK:'X	.BLKW	1
U.RFPC:'X	.BLKW	1
U.RFR5:'X	.BLKW	1
U.RFR4:'X	.BLKW	1
U.RFCT='Y	U.TXCT+1
	.PSECT
U2.HDX='Y	100000
U2.LIN='Y	 40000
U2.CTS='Y	 20000
U2.SWC='Y	 10000
U2.ONL='Y	  4000
U2.HPT='Y   1000
U2.HRC='Y	   400
U2.RCV='Y	   200
U2.ACU='Y	   100
U2.MPT='Y	    40
U2.FTM='Y	    20
U2.SFL='Y	    10
U2.RFK='Y	     4
U2.SYC='Y	     3
U2.TXA='Y	     2
U2.SNC='Y      1
US.SYN='Y	1
U3.LOK='Y	100000
U3.RPD='Y	   400
U3.RAC='Y	   200
U3.SND='Y	     1
	.MACRO	CUCDF$	A,B
	.ENDM
	.ENDM
	.MACRO	CVCDF$	X,Y
	.ASECT
.=	V.IFWI
V.CPRT:'X	.BLKW	1
V.CLUN:'X	.BLKB	1
V.CMPN:'X	.BLKB	1
V.CSTS:'X	.BLKW	1
V.CST1:'X	.BLKB	1
V.CNID:'X	.BLKB	1
V.CUCB:'X	.BLKW	1
V.CMPL:'X	.BLKW	1
V.CNPN:'X	.BLKW	1
V.CMBC:'X	.BLKW	1
V.CRED:'X	.BLKW	1
V.CNHD:'X	.BLKW	1
V.CTBL:'X	.BLKW	1
V.CRBL:'X	.BLKW	1
V.NXHD:'X	.BLKW	1
V.CDBC:'X	.BLKW	1
V.CIAD:'X	.BLKW	1
V.CICT:'X	.BLKW	1
V.CSAD:'X	.BLKW	1
V.CSCT:'X	.BLKW	1
V.CMXI:'X	.BLKW	1
V.CMXO:'X	.BLKW	1
V.CTDH:'X	.BLKW	1
V.CTDT:'X	.BLKW	1
V.CSTQ:'X	.BLKW	2
V.CLMT:'X	.BLKB	1
V.CTMA:'X	.BLKB	1
V.CLMR:'X	.BLKB	1
V.CRMA:'X	.BLKB	1
V.CMCT:'X	.BLKW	2
V.CRPC:'X	.BLKB	1
V.CRPL:'X	.BLKB	1
V.CRTM:'X	.BLKW	1
V.CREP:'X	.BLKW	1
V.CBCC:'X	.BLKW	1
V.CDCC:'X	.BLKW	1
V.CURH:'X	.BLKW	1
V.CDLE:'X	.BLKW	1
V.COVR:'X	.BLKW	1
V.CRST:'X	.BLKW	1
V.CALF:'X	.BLKW	1
V.CREA:'X	.BLKB	1
	.BLKB	1
	.IF DF	C$$ACU
V.CTPN:'X	.BLKB	12.
	.ENDC
V.CLEN:'X	.BLKW	1
	.PSECT
VS.SEL='Y	100000
VS.FIN='Y	 40000
VS.REP='Y  20000
VS.RTR='Y	 10000
VS.STK='Y	  4000
VS.STR='Y	  2000
VS.ACK='Y	  1000
VS.NAK='Y	   400
VS.MPT='Y	   200
VS.DIS='Y    200
VS.CTL='Y	   100
VS.DAT='Y	    40
VS.SYN='Y	    20
VS.POL='Y	    10
VS.ONL='Y	     4
VS.BOO='Y	     2
VS.TRN='Y	     1
	.MACRO	CVCDF$	A,B
	.ENDM
	.ENDM
.MACRO	CVLMDF
.PSECT	CVLDAT,RW,D,GBL,REL,OVR
CONTAB:
	.REPT	40.
	.WORD	0
	.ENDR
ENDIX	= .-CONTAB
	.MCALL	DVTMDF
	.MACRO	XXX NAM,DSP,NUM,ARG4,ARG5,ARG6,ARG7
	.IIF LE,<40.*2-'NUM'>,.ERROR 'NUM';DEVICE INDEX TOO LARGE
	.IF EQ	$$$PAS
	$$$'NUM'=0
	.IFF
	.IF EQ	$$$'NUM'
	$$$'NUM'=1
	.=CONTAB+'NUM'
	.RAD50	/'NAM'/
	.ENDC
	.ENDC
	.ENDM	XXX
	.IF NDF	$$$PAS
	$$$PAS=0
	.IFF
	$$$PAS=1
	.ENDC
	DVTMDF	XXX
.PSECT
.ENDM
	.MACRO	C1$	LB,TIME
 
LB:	.BYTE	50.,1		; OPCODE, COUNT
	.BYTE	TIME
 
	.ENDM
	.MACRO	C2$	LB,STRNG
 
	; LB - LABEL
	; STRING - UP TO 4 CHAR ID
 
LB:	.BYTE	51.		; OPCODE
	.BYTE	LB'C		; COUNT
1$:	.ASCII	STRNG
 
	LB'C=	.-1$
 
	.ENDM
	.MACRO	C3$	LB
 
LB:	.BYTE	52.,0		; OPCODE, COUNT
 
	.ENDM
	.MACRO	C4$	LB
 
LB:	.BYTE	53.,0		; OPCODE, COUNT 
 
	.ENDM
	.MACRO	DADF$	LST
	.IIF NB,LST,	.LIST
	.MCALL	TMPDF$
	TMPDF$
	.ASECT
	.=0
	.INT
	.=-<.+2>
T.VCT:	.INT			;SPACE FOR $INTSX SAVE'S ETC.
	.PRI			;DEVICE PRIORITY
	T.OFFS==.-T.VCT
T.TIMR:	.BLKB	1		;TIMER CELL
T.TIME:	.BLKB	1		;TIMOUT TIME IN SECONDS
T.DR:	.CSR			;DEVICE REGISTER ADDRESS
T.FL:	.BLKW	1		;FLAGS WORD
T.RA:	.BLKW	1		;RECEIVE BUFFER AVAILABLE
T.RC:	.BLKW	1		;RECEIVE BUFFER WAITING FOR COMPLETION
T.XW:	.LSTHD			;XMIT BUFFERS WAITING QUEUE
T.XC:	.BLKW	1		;XMIT BUFFER WAITING FOR COMPLETION
T.SP:	.BLKW	1		;STOP PENDING CCB
T.LN:	.SLNW			;LINE NUMBER
T.ER:	.BLKW	1		;ASYNC ERROR PENDING
T.XMT:	.BLKW	1		;NUMBER OF BLOCKS TRANSMITTED
T.RCV:	.BLKW	1		;NUMBER OF BLOCKS RECEIVED
T.TLZ:	.BLKW	1		;TIME COUNTS WERE LAST ZEROED
.PSECT
	.IIF NB,LST,	.NLIST
	.ENDM
	.MACRO	DCBDF$,L,B
	.ASECT
.=0
D.LNK:'L' .BLKW	1
D.UCB:'L' .BLKW	1
D.NAM:'L' .BLKW	1
D.UNIT:'L' .BLKB 1
	.BLKB	1
D.UCBL:'L' .BLKW 1
D.DSP:'L' .BLKW	1
D.MSK:'L' .BLKW	1
	.BLKW	1
	.BLKW	1
	.BLKW	1
	.BLKW	1
	.BLKW	1
	.BLKW	1
	.BLKW	1
D.PCB:'L' .BLKW	1
	.PSECT
D.VINI='B'0
D.VCAN='B'2
D.VOUT='B'4
D.VPWF='B'6
	.MACRO	DCBDF$,X,Y
	.ENDM
	.ENDM
	.MACRO	DCLW$S	LUN,EFN,IOST,AST,UAST
	.IF B	LUN
	.ERROR	;DCLW$S - A LOGICAL UNIT # MUST BE SPECIFIED
	.MEXIT
	.ENDC
	.IF B	UAST
	.PRINT	;DCLW$S WARNING - TRAP ADDRESS NOT SPECIFIED 
	.IFTF
	MOV	R0,-(SP)		;GET A REGISTER TO WORK WITH
	.IFF
	MOV	UAST,-(SP)		;GET THE UAST
	.ENDC
	.IF NB	IOST
	MOV	IOST,-(SP)		;AND THE IOST
	.ENDC
	MOV	LUN,-(SP)		;AND FINALLY THE LUN
	MOV	#$ASTBL,R0		;GET THE AST TABLE ADDRESS
	TST	(R0)			;WHAT'S THIS LOCATION'S STATUS?
	.IF B	IOST
	.IF B	UAST
	BMI	.+14			;IF MI, THERE'S NO MORE ROOM
					;IN THE TABLE
	.IFF
	BMI	.+22			;.
	.ENDC
	.IFF
	.IF B	UAST
	BMI	.+24			;.
	.IFF
	BMI	.+32			;.
	.ENDC
	.ENDC
	.IF NB	UAST
	BEQ	.+12			;IF EQ, THIS IS A FREE LOCATION
	.IFTF
	CMP	(SP),(R0)+		;IS THIS THE WANTED LUN?
	.IFF
	BEQ	.+6			;IF EQ, YES
	.IFT
	BEQ	.+10			;.
	.IFTF
	TST	(R0)+			;GET TO THE NEXT TABLE ENTRY
	.IFF
	BR	.-12			;TRY AGAIN
	.IFT
	BR	.-14			;.
	.IFF
	CLR	-(R0)			;DELETE THE TABLE ENTRY
	.IFT
	MOV	(SP),(R0)+		;STORE THE LUN #
	.IF B	IOST
	MOV	2(SP),(R0)		;AND IT'S AST ADDRESS
	.IFF
	MOV	4(SP),(R0)		;.
	.ENDC
	.ENDC
	.IF NB	IOST
	MOV	#1,@2(SP)		;INDICATE SUCCESS
	BR	.+10			;BRANCH AROUND ERROR CODE
	MOV	#-1,@2(SP)		;SET THE ERROR CODE
	CMP	(SP)+,(SP)+		;POP OFF THE LUN AND IOST
					;STORAGE LOCATIONS
	.IFF
	TST	(SP)+			;POP THE LUN STORAGE LOCATION
	.ENDC
	.IF NB	UAST
	TST	(SP)+			;POP OFF THE UAST STORAGE
					;LOCATION
	.ENDC
	MOV	(SP)+,R0		;RESTORE R0
	.ENDM
.MACRO	DDCDF$	L
;
	    .ASECT
;
; DDCMP LINE TABLE OFFSETS
 
.=0
L.CTMO:	.BLKB	1		;CURRENT TIMEOUT VALUE
L.ITMO:	.BLKB	1		;LINK TIMER INITIAL VALUE
L.STS:	.BLKW	1		;LINE STATUS WORD
L.PTXQ:	.BLKW	2		;PRE TRANSMIT MESSAGE QUEUE
L.TDNQ:	.BLKW	2		;TRANSMIT DONE QUEUE
L.FCNL:	.BLKW	2		;CONTROL FUNCTION QUEUE
L.STAL:	.BLKW	2		;STATIONS  LIST
L.CRST:	.BLKW	1		;POINTER TO CURRENT STATION
L.HDR:	.BLKW	1		;LIST OF CCBS FOR HEADERS
	.IF	DF,M$$MGE
L.CRC:	.BLKW	2		;POINTER TO CRC LIBRARY ROUTINE
	.IFF
L.CRC:	.BLKW	1		;POINTER TO CRC LIBRARY ROUTINE
	.ENDC
L.CHAR:	.BLKW	2		;DEVICE CHARTERISTICS
L.ENA:	.BLKB	1		;LINE ENABLE COUNTER (MPT ONLY)
L.STIC:	.BLKB	1		;MPT ONLY
L.STCC:	.BLKB	1		;MPT ONLY
L.NAST:	.BLKB	1		;NUMBER OF ACTIVE STATIONS ON THIS LINE
L.HCCB:	.BLKB	1		;NUMBER OF CCB'S TO ASSIGN AS HEADERS
L.MOTD:	.BLKB	1		;NUMBER OF CCB'S AVAILABLE FOR HEADERS
L.LNUM:	.BLKB	1		;SYSTEM LINE NO. THIS LINE
 
	.EVEN
 
L.STBL:'L'				;START OF STATION TABLES FOR LINE
 
; DEFINITIONS OF BITS IN LINE STATUS WORD
 
LS.LEN=1			;SET IF LINE IS ENABLED
LS.MPM=2			;SET IF MULTIPOINT MASTER
LS.MPS=4			;SET IF MULTIPOINT SLAVE
LS.HDX=10			;SET IF LINK IS HALF DUPLEX
LS.OLD=20			;SET IF LINK COMPATIBLE WITH RELEASE 1
LS.PLW=40			;SET IF POLLING SUSPENDED
LS.TRT=100			;SET IF TURNAROUND TIMER SET
LS.HRC=200			;SET IF DEVICE HAS HARDWARE CRC 
LS.RSN=400			;SET IF LINE IN RESYNC STATE
LS.RSA=1000			;SET IF CCB OUTSTANDING FOR A RESYNC
LS.CTL=2000			;SET IF CONTROL MESSAGE OUTSTANDING
LS.MPT=LS.MPM!LS.MPS		;MASK FOR MULTIPOINT STATION
; DEFINITIONS FOR STATIONS TABLE OFFSETS
 
.=0
 
S.LNK:	.BLKW	1		;STATION TABLE THREAD WORD
S.STS:	.BLKW	1		;STATION STATUS WORD
S.PTXQ:	.BLKW	2		;SLAVE-ONLY PRETRANSMIT QUEUE
S.MOPQ:				;MOP MESSAGE QUEUE
S.TAKQ:	.BLKW	2		;WAITING FOR ACKNOWLEDGE QUEUE
S.FCNL:	.BLKW	1		;FUNCTION PENDING LIST
S.SLAN:	.BLKB	1		;STATION LOGICAL ADDRESS NUMBER
S.SPAN:	.BLKB	1		;STATION PHYSICAL ADDRESS NUMBER
S.STE:	.BLKB	1		;STATUS EXTENSION BYTE
S.RXEN:	.BLKB	1		;RECEIVE ENABLE COUNTER
S.MOTD:	.BLKB	1		;NO. OF MESSAGES OUTSTANDING TO DRIVER
S.LTM:	.BLKB	1		;NO. OF LAST TRANSMITTED MESSAGE
S.LTMR:	.BLKB	1		;NO. OF LAST TX MESSAGE RETURNED
S.LTMA:	.BLKB	1		;NO. OF LAST TX MESSAGE ACKNOWLEDGED
S.HTNA:	.BLKB	1		;HIGHEST TRANSMIT NUMBER ASSIGNED
S.TNRP:	.BLKB	1		;TX NO. FOR REP RESPONSE
S.LRM:	.BLKB	1		;NO. OF LAST RECEIVED MESSAGE
S.RMA:	.BLKB	1		;NO. OF LAST RECEIVED MESSAGE ACKED
S.SIPC:	.BLKB	1		;STATION'S INITIAL PRIORITY VALUE
S.SCPC:	.BLKB	1		;STATION'S CURRENT PRIORITY COUNTER
S.NKRE:	.BLKB	1		;NAK REASON TO BE SENT IN NAK MESSAGE
 
; COUNTERS FOR VARIOUS STATISTICS
 
S.RCVE:	.BLKB	1		;RECEIVE ERRORS
S.TMOE:	.BLKB	1		;RECEIVE TIMEOUTS AND SELECTION ERRORS
S.RSTE:	.BLKB	1		;RECEIVE SYSTEM RESOURCE ERRORS
S.XMTE:	.BLKB	1		;TRANSMITTER ERRORS (FROM NAKS)
S.DSTE:	.BLKB	1		;DESTINATION SYSTEM ERRORS (FROM NAKS)
; THRESHOLD COUNTERS
S.STRC:	.BLKB	1		;START AND RESTART COUNTER
S.REPS:	.BLKB	1		;NO. OF REP MESSAGES SENT TO STATION
S.RETH:	.BLKB	1		;RECEIVER ERROR THRESHOLD COUNTER
S.RPTH:	.BLKB	1		;REPS SENT THRESHOLD ERROR COUNTER
S.NAKT:	.BLKB	1		;NAKS RECEIVED THRESHOLD COUNTER
 
;WORD COUNTERS FOR VARIOUS STATISTICS
	.EVEN
S.TIM:	.BLKW	1		;TIME WHEN STATISTICS ZEROED
S.RCV:	.BLKW	1		;NUMBER OF MESSAGES RECEIVED
S.XMT:	.BLKW	1		;NUMBER OF MESSAGES TRANSMITTED
 
S.STLG:'L'				;LENGTH OF STATION TABLE
; VALUES OF BITS IN STATION STATUS WORD
 
SS.STR=1			;STATION IN START MODE
SS.STK=2			;STATION IN STACK MODE
SS.ONL=4			;STATION IS ONLINE
SS.MOP=10			;STATION IN MOP MODE
SS.HLT=20			;STATION IS BEING HALTED
SS.RTX=40			;RETRANSMISSION IS REQUESTED
SS.SHU=100			;SET IF STATION BEING SHUT DOWN
SS.SEL=200			;SET IF THIS STATION SELECTED
SS.REP=400			;SET IF STATION IN REP MODE
SS.FLO=1000			;SET IF STATION IS FLOW CONTROLLED
SS.MDC=^C<SS.FLO>		;OR OF STATUS STATE BITS
 
; VALUES OF BITS IN STATION STATUS EXTENSION BYTE
 
SE.SSK=1			;SET IF SEND STACK MESSAGE
SE.SST=2			;SET IF SEND START MESSAGE
SE.SNK=4			;SET IF SEND NAK MESSAGE
SE.SRP=10			;SET IF SEND REP MESSAGE
SE.SAK=20			;SET IF SEND ACK MESSAGE
SE.SSL=40			;SET IF SEND SELECT ON THIS MESSAGE
SE.CMS=^C<SE.SAK!SE.SSL>	;MASK FOR DDCMP CONTROL MESSAGES
; OFFSETS FOR RECEIVE MESSAGE PROCESSING
 
.=0
R.HDR1:	.BLKB	1		;FIRST BYTE OF DDCMP HEADER
R.HDR2:	.BLKB	1		;SECOND BYTE OF DDCMP HEADER
R.HDR3:	.BLKB	1		;THIRD BYTE OF DDCMP HDR
R.HDR4:	.BLKB	1		;FOURTH BYTE OF HEADER
R.HDR5:	.BLKB	1		;FIFTH BYTE OF HEADER
R.HDR6:	.BLKB	1		;SIXTH BYTE OF HEADER
R.HDR7:	.BLKB	1		;SEVENTH BYTE OF HEADER
R.HDR8:	.BLKB	1		;EIGTH BYTE OF HEADER
 
; ASCII COMMUNICATION CHARACTERS
CM.ENQ=005			;ENQUIRE (CONTROL MESSAGE)
CM.SOH=201			;START OF HEADER (DATA MESSAGE)
CM.DLE=220			;DATA LINK ESCAPE (BOOT MESSAGE)
CM.SYN=226			;SYN CHARACTER
; CONTROL MESSAGE TYPES
MT.ACK=001			;ACKNOWLEDGE
MT.NAK=002			;NEGATIVE ACKNOWLEDGE
MT.REP=003			;REPLY
MT.RES=004			;RESET
MT.RSK=005			;RESET ACKNOWLEDGE
MT.STR=006			;START
MT.STK=007			;START ACKNOWLEDGE
 
 
; DDCMP DEFINED NAK REASON ERROR CODES
 
RN.HBC=1			;HEADER BLOCK CHECK ERROR
RN.DBC=2			;DATA BLOCK CHECK ERROR
RN.REP=3			;REP RESPONSE
RN.BUF=10			;RECEIVER BUFFER ALLOCATION FAILRE
RN.ROV=11			;RECEIVER OVERRUN FLIALURE
RN.MTL=20			;RECEIVED MESSAGE TOO LONG
RN.HFE=21			;RECEIVED HEADER FORMAT ERROR
 
; SPECIAL HEADER BITS
 
DD.QSN=100			;DDCMP FINAL OR QSYNC BIT
DD.SEL=200			;DDCMP SELECT BIT
 
 
	.PSECT
	.ENDM
	.MACRO DDM$DF	NAM,FLG,PRI
	NAM'PR=PRI
	NAM'FL=FLG
	.ENDM	DDM$DF
	.MACRO DEF$DF
	SLN=-1			; INTERNAL COUNTER
	STATBL=0		; TOTAL NUMBER OF STATIONS
;
;	DEFINE SYMBOLS NEEDED DURING PART 1
;
	SLTDF$
	PDVDF$
;
;	PROCESSOR PRIORITIES
;
	PR0=0
	PR1=40
	PR2=100
	PR3=140
	PR4=200
	PR5=240
	PR6=300
	PR7=340	
 
	.ENDM	DEF$DF
.MACRO	DEVDF
	.MCALL	DVTMDF
	.MACRO	XXX NAM,DSP,NUM,ARG4,ARG5,ARG6,ARG7
	'NAM'='NUM'
	.ENDM	XXX
	DVTMDF	XXX
.MACRO	DEVDF
.ENDM
.ENDM
	.MACRO	DEVDF$,L,B
	.MCALL	DCBDF$
	DCBDF$	<L>,<B>
	.MCALL	UCBDF$
	UCBDF$	<L>,<B>
	.MCALL	SCBDF$
	SCBDF$	<L>,<B>
	.MCALL	LCBDF$
	LCBDF$	<L>,<B>
	.MACRO	DEVDF$,X,Y
	.ENDM
	.ENDM
.MACRO	DHTDF$	PS
	.ASECT
.=	0
DHDLT:			; DH11 DEVICE LINE TABLE OFFSETS
DRCV:	.BLKW	7	; RECIEVE INTERRUPT ENTRY
DRPRI:	.BLKW	1	; RCV PRIORITY
DRNCR:	.BLKW	1	; ADDR OF DH11 NCR
DTRN:	.BLKW	7	; TRANSMIT INTERRUPT ENTRY
DTPRI:	.BLKW	1	; TRN PRIORITY
DTBAR:	.BLKW	1	; ADDR OF DH11 BUFFER ACTIVE REG
DTCTR:	.BLKW	1	; CURRENT TRN ACTIVE BITS (C0=B0)
DMDM:	.BLKW	7	; NO MODEM INTERRUPT ENTRY
DMPRI:	.BLKW	1	; MODEM INTERUPT PRIORITY
DMCSR:	.BLKW	1	; DM11-BB CSR ADDRESS
DHSCR:	.BLKW	1	; ADDR OF DH11 SCR
DHHDR:	.BLKW	2	; HEADER LIBRARY POINTER
DHCRC:	.BLKW	2	; CRC LIBRARY POINTER
DHACT:	.BLKB	0	; ACTIVE LINE COUNT
DHFLG:	.BLKW	1	; DH FLAGS
DHTIM:	.BLKW	2	; SHORT TIMER CONTROL
;
; TABLE OF 16 ENTRIES, ONE ENTRY PER DH LINE (CHANNEL)
;
DHCTB:
.=	0
DCLTW:	.BLKW	1	; LONG TIMER WORD
DCTCR:	.BLKW	1	; CURRENT TRN CCB ENTRY
DCTQH:	.BLKW	1	; CURRENT TRN CCB QUEUE
DCRAD:	.BLKW	1	; RCV BUFFER MAPPING BIAS
DCRPT:	.BLKW	1	; RCV BUFFER BYTE POINTER
DCRCT:	.BLKW	1	; RCV BUFFER BYTE COUNTER
DCRQH:	.BLKW	1	; RCV BUFFER QUEUE
DCLPR:	.BLKW	1	; DH11 DEV LINE PARAM VALUE
DCDLP:	.BLKW	1	; STANDARD DEV LINE PARAM VALUE
DCDFL:	.BLKW	1	; DEFAULT DEV LINE PARAM VALUE
DCSWT:	.BLKW	1	; LINE SWITCHES
DCPST:	.BLKW	1	; PROTOCOL STATUS BITS
DCCHN:	.BLKB	1	; CHANNEL NUMBER
DCSLN:	.BLKB	1	; SYSTEM LINE NUMBER
	.EVEN
DHCTS=	.		;SIZE OF ENTRY
	.PSECT
.ENDM	DHTDF$
	.MACRO DLC$DF	NAM,FLG,PRI
	NAM'PR=PRI
	NAM'FL=FLG
	.ENDM	DLC$DF
.MACRO	DLPDF$	L,X
	.IIF	B,L,	.NLIST
	LP....=	0
	.IF	NB,X
	.IIF	EQ,''X-'M,	LP....=	1
	.IIF	EQ,''X-'B,	LP....=	-1
	.ENDC
	.IF	GE,LP....
	.LIST
 
;
; MASK DEFINITIONS FOR STANDARD DEVICE LINE PARAMETER WORD
;
LP.DUP=	000001		;DUPLEX MODE (0=FULL, 1=HALF)
LP.ECO=	000002		;HARDWARE AUTO-ECHO SWITCH (1=ENABLE)
LP.SAD=	000004		;SECONDARY ADDRESS PRESENT FOR SET CHARACTERISTICS
LP.CLN=	000030		;CHARACTER LENGTH (SEE BELOW)
LP.STP=	000040		;STOP CODE (0=1 BIT, 1=1.5 OR 2 BITS)
LP.PAR=	000300		;PARITY MODE (SEE BELOW)
LP.TRN=	007400		;TRANSMIT SPEED (OR TRN+RCV SPEED FOR SINGLE
			;  SPEED DEVICES) (SEE BELOW)
LP.RCV=	170000		;RECEIVE SPEED (SEE BELOW)
	.NLIST
	.ENDC
	.IF	LE,LP....
	.LIST
 
;
; BIT DEFINITIONS FOR MULTI-BIT MASKS
;
LB.CL5=	000000		;CHARACTER LENGTH = 5 BITS
LB.CL6=	000010		;CHARACTER LENGTH = 6 BITS
LB.CL7=	000020		;CHARACTER LENGTH = 7 BITS
LB.CL8=	000030		;CHARACTER LENGTH = 8 BITS
 
LB.PRN=	000000		;PARITY = NONE
LB.PRE=	000100		;PARITY = EVEN
LB.PRO=	000300		;PARITY = ODD
 
LB.T00=	000000		;TRN SPEED =   50   BAUD
LB.T01=	000400		;TRN SPEED =   75   BAUD
LB.T02=	001000		;TRN SPEED =  110   BAUD
LB.T03=	001400		;TRN SPEED =  134.5 BAUD
LB.T04=	002000		;TRN SPEED =  150   BAUD
LB.T05=	002400		;TRN SPEED =  300   BAUD
LB.T06=	003000		;TRN SPEED =  600   BAUD
LB.T07=	003400		;TRN SPEED = 1200   BAUD
LB.T08=	004000		;TRN SPEED = 1800   BAUD
LB.T09=	004400		;TRN SPEED = 2000   BAUD
LB.T10=	005000		;TRN SPEED = 2400   BAUD
LB.T11=	005400		;TRN SPEED = 3600   BAUD
LB.T12=	006000		;TRN SPEED = 4800   BAUD
LB.T13=	006400		;TRN SPEED = 7200   BAUD
LB.T14=	007000		;TRN SPEED = 9600   BAUD
LB.T15=	007400		;TRN SPEED = EXTERNAL INPUT
 
LB.R00=	000000		;RCV SPEED =   50   BAUD
LB.R01=	010000		;RCV SPEED =   75   BAUD
LB.R02=	020000		;RCV SPEED =  110   BAUD
LB.R03=	030000		;RCV SPEED =  134.5 BAUD
LB.R04=	040000		;RCV SPEED =  150   BAUD
LB.R05=	050000		;RCV SPEED =  300   BAUD
LB.R06=	060000		;RCV SPEED =  600   BAUD
LB.R07=	070000		;RCV SPEED = 1200   BAUD
LB.R08=	100000		;RCV SPEED = 1800   BAUD
LB.R09=	110000		;RCV SPEED = 2000   BAUD
LB.R10=	120000		;RCV SPEED = 2400   BAUD
LB.R11=	130000		;RCV SPEED = 3600   BAUD
LB.R12=	140000		;RCV SPEED = 4800   BAUD
LB.R13=	150000		;RCV SPEED = 7200   BAUD
LB.R14=	160000		;RCV SPEED = 9600   BAUD
LB.R15=	170000		;RCV SPEED = EXTERNAL INPUT
	.NLIST
	.ENDC
 
	.IIF	B,L,	.LIST
	.ENDM	DLPDF$
.MACRO	DLTDF$	PS
	.NLIST
	....PS=	0
	.IF	NB,PS
	.IIF	NE,PS,	....PS=	1
	.ENDC
	.LIST
	.ASECT
.=	0
 
DLDLT:					;DL11 DEVICE LINE TABLE OFFSETS
DLLTM:	.BLKW	1			;LONG TIMEOUT CONTROL
 
DRCV:	.INT				;RCV INTERRUPT RE-VECTORING
	.PRI				;RCV PRIORITY
DRBUF:	.BLKW	1			;RCV RBUF REGISTER ADDRESS
	.IF	NE,....PS
DPSTS:	.BLKW	1			;PROTOCOL STATUS HOLDER
DRBAD:	.IF	DF,M$$MGE
	.BLKW	1			;RCV BUFFER MAPPING BIAS
	.IFTF
DRPNT:	.BLKW	1			;RCV BUFFER BYTE POINTER
DRCNT:	.BLKW	1			;RCV BUFFER BYTE COUNTER
DRQHD:	.BLKW	1			;RCV CCB QUEUE HEAD
	.ENDC
	.ENDC
 
DTRN:	.INT				;TRN INTERRUPT RE-VECTORING
	.PRI				;TRN PRIORITY
DTBAD:	.IF	DF,M$$MGE
	.BLKW	1			;TRN BUFFER MAPPING BIAS
	.ENDC
DTPNT:	.BLKW	1			;TRN BUFFER BYTE POINTER
DTBUF:	.BLKW	1			;TRN TBUF REGISTER ADDRESS
DTCNT:	.BLKW	1			;TRN BUFFER BYTE COUNTER
DTCCE:	.BLKW	1			;TRN CURRENT CCB ENTRY
DTQHD:	.BLKW	1			;TRN CCB QUEUE HEAD
 
DLTCR:	.BLKW	1			;TRN CONTROL REGISTER ADDRESS
TCRC:	.LIBR				;STCRC POINTER
DLSLN:	.BLKW	1			;SYSTEM LINE NUMBER
DLSWT:	.BLKW	1			;SWITCHES
DLDLP:	.BLKW	2			;DEVICE LINE PARAMETERS
	DLTLN==.
	.PSECT
.ENDM	DLTDF$
	.MACRO	DLXDF
;+
; NICE FUNCTIONS IN DLX
;
NX.NIC	=36*400+50		; NICE QIO FUNCTION CODE
;
; SUB-FUNCTIONS IN PARAM(3)
;
NX$RNN	=0			; READ NODE NAMES
NX$RNS	=2			; READ NODE STATUS
NX$RNC	=4			; READ NODE COUNTERS
NX$ZNC	=6			; ZERO NODE COUNTERS
NX$SNS	=10			; SET NODE STATUS
NX$RLN	=12			; READ LINE IDENTIFIERS
NX$RLS	=14			; READ LINE STATUS
NX$RLC	=16			; READ LINE COUNTERS
NX$ZLC	=20			; ZERO LINE COUNTERS
NX$SLS	=22			; SET LINE STATE
NX$SNH	=24			; SET HOST NODE
NX$SLH	=26			; SET HOST FOR LINE
NX$XMT	=30			; SET XMT PASSWORD FOR NODE
NX$RCV	=32			; SET RCV PASSWORD FOR NODE
NX$SNO	=34			; SET OPERATOR STATE FOR LOCAL NODE
NX$SNM	=36			; SET MAINTENANCE STATE FOR LOCAL NODE
NX$SLO	=40			; SET OPERATOR STATE FOR LINE
NX$SLM	=42			; SET MAINTENANCE STATE FOR LINE
;	=44			; (UNUSED)
NX$DEP	=46			; DEPOSIT MEMORY
NX$EXM	=50			; EXAMINE MEMORY
;
; NODE TYPE CODES
;
N$XLCL	=1			; LOCAL NODE
N$XADJ	=2			; ADJACENT NODE
N$XINT	=3			; INTERCEPT NODE
N$XRMT	=4			; REMOTE NODE
;
;-
	.MACRO	DLXDF
	.ENDM	DLXDF
	.ENDM	DLXDF
	.MACRO	DLXDF$
;
; LINE PARAMETER BLOCK OFFSET DEFINITIONS:
;
	.ASECT
	.=0
TNAM:	.BLKW	1		; RAD50 PROCESS NAME
TCTL:	.BLKB	1		; CONTROLLER NUMBER
TLIN:	.BLKB	1		; LINE NUMBER ON CONTROLLER
TSTA:	.BLKB	1		; MULTIPOINT STATION ADDRESS
	.BLKB	1		; RESERVED
TFLG:	.BLKB	1		; PROCESS FLAGS
TPDV:	.BLKB	1		; PROCESS INDEX
TSLN:	.BLKW	1		; SYSTEM LINE NUMBER AND LOGICAL STATION
TSLF:	.BLKW	1		; SYSTEM LINE TABLE FLAGS
TDDM:	.BLKB	1		; DDM PROCESS INDEX
TDLC:	.BLKB	1		; DLC PROCESS INDEX
TASN:	.BLKW	1		; CURRENT ASSIGNMENT (PDV & CHAN)
;
; NODE PARAMETER BLOCK OFFSET DEFINITIONS:
;
	.=0
NNOD:	.BLKW	1		; NODE NAME DESCRIPTOR ADDRESS
NNUM:	.BLKW	1		; NODE NUMBER
NPWD:	.BLKW	1		; PASSWORD BLOCK ADDRESS
NSTA:	.BLKW	1		; STATISTICS PARAMETER BLOCK ADDRESS
;
; DEVICE SERVICES DISPATCH TABLE
;
	.=0
S.SLG:	.BLKW	1		; SET LOGGING STATE
S.RLG:	.BLKW	1		; READ LOGGING STATE
S.RCN:	.BLKW	1		; READ LINE COUNTERS
S.ZCN:	.BLKW	1		; ZERO LINE COUNTERS
	.PSECT
	.MACRO	PROCESS .NM,SLG,RCN,ZCN,RLG
	.PSECT
$$$	=.
	.IRP	.AD,<SLG,RLG,RCN,ZCN>
	.IF NB	.AD
	.WORD	.AD
	.IFF
	.WORD	$NXNOP
	.ENDC
	.ENDR
	.PSECT	$$DSP1,D,GBL
	.WORD	$$$
	.PSECT	$$NAM1,D,GBL
	.RAD50	\.NM\
	.PSECT
	.ENDM	PROCESS
	.ENDM	DLXDF$
.MACRO	DMCDF$	L,B,LST
	.IIF NB	<LST>,	.LIST
	.MCALL	TMPDF$
	TMPDF$
	.ASECT
	.=0
	.INT
	..OFF.=-<<.*2>+20>
	.=..OFF.
D.IVCT:'L'				; INPUT INTERRUPT TRANSFER VECTOR
	.INT			; INPUT INTERRUPT TRANSFER VECTOR
	.PRI			; ^C< DEVICE PRIORITY >
D.SEL0:'L'	.CSR			; ADDRESS OF DMC SEL0 REGISTER
	.BLKW	1		; OFFSET TO INTERRUPT SERVICE DISPATCH TABLE
D.OFFI='B' -.
	.BLKW	1		; OFFSET TO START OF LINE TABLE
D.OVCT:'L'				; OUTPUT INTERRUPT TRANSFER VECTOR
	.INT			; OUTPUT INTERRUPT TRANSFER VECTOR
	.PRI			; ^C< DEVICE PRIORITY >
D.SEL2:'L'	.CSR			; ADDRESS OF DMC SEL2 REGISTER
	.BLKW	1		; OFFSET TO INTERRUPT SERVICE DISPATCH TABLE
D.OFFO='B' -.
	.BLKW	1		; OFFSET TO START OF LINE TABLE
D.OFFS='B' .-D.IVCT
D.TIMR:'L'	.BLKB	1		; LINE TABLE TIMER CELL
D.TIME:'L'	.BLKB	1		; TIMER RESET VALUE CELL
D.RAQC:'L'	.BLKB	1		; MINUS THE CURRENT NUMBER OF RECV BUFFERS ASSIG
D.RBFC:'L'	.BLKB	1		; MINUS THE MAXIMUM NUMBER OF RECV BUFFERS ASSIG
D.RAWQ:'L'	.LSTHD			; RECV BUFFERS AWAITING ASSIGNMENT QUEUE
D.RASQ:'L'	.LSTHD			; RECV BUFFERS ASSIGNED TO DMC QUEUE
D.XAQC:'L'	.BLKB	1		; MINUS THE CURRENT NUMBER OF XMIT BUFFERS ASSIG
D.XBFC:'L'	.BLKB	1		; MINUS THE MAXIMUM NUMBER OF XMIT BUFFERS ASSIG
D.XAWQ:'L'	.LSTHD			; XMIT BUFFERS AWAITING ASSIGNMENT QUEUE
D.XASQ:'L'	.LSTHD			; XMIT BUFFERS ASSIGNED TO DMC QUEUE
D.LINE:'L'	.BLKW	1		; SYSTEM LINE NUMBER
D.LBIA:'L'	.IF DF	M$$MGE
	.BLKW	1		;DMC LINE TABLE BIAS ADDRESS
	.ENDC
D.LVA:'L'	.BLKW	1		; DMC LINE TABLE VIRTUAL ADDRESS
D.ERRS:'L'	.BLKW	1		; PENDING STATUS WORD
D.CFNC:'L'	.BLKW	1		; CONTROL FUNCTION IN PROGRESS
D.PFNC:'L'	.LSTHD			; PENDING CONTROL FUNCTION QUEUE
D.STAT:'L'	.BLKW	1		; STATE FLAGS
D.PLEX:'L'	.DVCHA			; DEVICE CHARACTERISTICS
D.TLZ:'L'	.BLKW	1		; THE TIME COUNTERS WHERE LAST ZEROED
D.XMT:'L'	.BLKW	1		; NUMBER OF BLOCKS TRANSMITTED
D.RCV:'L'	.BLKW	1		; NUMBER OF BLOCKS RECEIVED
D.LREC:'L'	.BLKB	6.		; ERROR COUNTER VALUES FROM LAST READ OF BASE TA
D.LOGG:'L'	.BLKW	1		; EVENT LOGGING DESTINATION
D.LEN='B'.-..OFF.
	.PSECT
	.IIF NB <LST>,	.NLIST
.ENDM	DMCDF$
.MACRO DMEMDF
.MCALL	CONFIG
CONFIG
.PSECT	DYNMEM,RW,D,GBL,REL,OVR
.MACRO	$$DFBF BEGLAB,LEN,CNT
BEGLAB':
.IF	GT	CNT
  .REPT	  CNT-1
	.WORD	  .+LEN
	.BLKB	  LEN-2
  .ENDM
	.WORD	0
	.BLKB	LEN-2
.ENDC
.ENDM
$$DFBF	BG550,550.,F$550
$$DFBF	BG300,300.,F$300
$$DFBF	BG150,150.,F$150
$$DFBF  BG50,50.,F$50
BFMAX	=.-2
BFHEAD:
	.WORD	BG50
	.WORD	BG150
	.WORD	BG300
	.WORD	BG550
BFLEN:
	.WORD	50.
	.WORD	150.
	.WORD	300.
	.WORD	550.
BFBEG:
	.WORD	BG50
	.WORD	BG150
	.WORD	BG300
	.WORD	BG550
BFPCNT	= 4.
.PSECT
.ENDM
.MACRO  DMXB
LINLEN	= 5.
NODLEN	= 6.
ADCINC	= 010
BADBIT	= 360
FILINC	= 004
IDTYPE	= 003
RESBIT  = 001
SRVINC	= 002
X.CB	= 0.
X.CB2	= 2.
X.ADDR	= 4.
X.CNT	= 8.
X.DBUF	= 12.
X.DLEN	= 14.
X.DFIL	= 16.
X.LLBF	= 18.
X.LLEN	= 20.
X.LLPR	= 22.
X.CPU	= 24.
X.FLGS	= 25.
X.SLIN	= 26.
X.SIMG	= 31.
X.SNOD	= 32.
X.STAT	= 38.
X.LKNM	= 40.
X.LLUN	= 42.
X.DLUN	= 44.
X.OSTE	= 46.
X.ERR	= 48.
	.ASECT
.=50.
X.TNOD: .BLKB	NODLEN+1
	.EVEN
X.DSD:	.BLKW	6
X.DFNB:	.BLKW	15.
X.SPEC:	.BLKB	32.
X$LEN	= .
	.PSECT
XF$DSA	= 1
XF$DSC	= 2
XF$LRA	= 4
XF$LRC	= 10
XF$LWA	= 20
XF$LWC	= 40
XF$EOD	= 100
XF$SAD	= 200
GTNXCB	= 1.
ODFSLL	= 2.
WDUMLB	= 3.
XMSPRD	= 4.	;SEND MESSAGE
ABORT	= 6.
FINISH	= 97.
GTDKBF	= 98.
BUFSZ4	= 512.
	.MACRO	DMXB
	.ENDM
	.ENDM
	.MACRO	DO
	THEN
	.ENDM
	.MACRO	DQDF$	LST
	.IIF NB,LST,	.LIST
	.MCALL	TMPDF$
	TMPDF$
	.ASECT
	.=0
TIME:	.BLKB	1		;TIMER BYTE
TIMS:	.BLKB	1		;TIME OUT TIME IN SECONDS
DQREG:	.CSR			;CSR VALUE (CSR + 5 IN TEMPLATE)
RTINS:	.INT			;RECEIVE INTERRUPT ENTRY POINT
RPRI:	.PRI			;RECEIVE PRIORITY
RINS:	.BLKW	1		;ROUTINE TO CALL ON NEXT REC INTERRUPT
RFLAG:	.BLKW	1		;RECEIVER FLAGS
RSTAT:	.BLKW	1		;RECEIVER STATUS
	.IF DF	M$$MGE
RBIAS:	.BLKW	1		;RELOCATION BIAS
	.ENDC
RADD:	.BLKW	1		;VIRTUAL ADDRESS OF REC BUFFER
RBUF1:	.BLKW	1		;BUFFER TO RETURN RECEIVE COMPLETE ON
RBUF2:	.BLKW	1		;BUFFER THAT IS BEING SET UP
TTINS:	.INT			;TRANSMIT INTERRUPT ENTRY POINT
TPRI:	.PRI			;TRANSMITTER PRIORITY
TFLAG:	.BLKW	1		;FLAGS FROM BUFFER DESCRIPTOR
TBUFP:	.BLKW	1		;BUFFER IN PRIMARY XMIT REGISTER
TBUFS:	.BLKW	1		;BUFFER IN SECONDARY XMIT REGISTER
TQUE:	.LSTHD			;QUEUE OF BUFFERS TO TRANSMIT
KICCB:	.BLKW	1		;CCB ADDRESS FOR A KILL
LINE:	.SLNW			;SYSTEM LINE NUMBER
DQCHA:	.DVCHA			;DEVICE CHARACTERISTICS
DDHAR:	.LIBR			;DDHAR LIBRARY CALL
CLCRC:	.LIBR			;STCRC LIBRARY CALL
.PSECT
	.IIF NB,LST,	.NLIST
	.ENDM
	.MACRO	DSCW$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$
	QDPB$	3,16000,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	DSCW$
	.MACRO	DSCW$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$E
	QDPB$E	LABEL,3,#16000,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	DSCW$E
	.MACRO	DSCW$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$S
	QDPB$S	3,#16000,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	DSCW$S
	.MACRO	DSC$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$
	QDPB$	1,16000,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	DSC$
	.MACRO	DSC$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$E
	QDPB$E	LABEL,1,#16000,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	DSC$E
	.MACRO	DSC$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$S
	QDPB$S	1,#16000,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	DSC$S
.MACRO	DTEDF$	LST
	.IIF NB	<LST>,	.LIST
	.MCALL	TMPDF$
	TMPDF$
	.ASECT
.=0
L.TIM:	.BLKB	1	;COMM/EXEC TIMER
L.UNT:	.BLKB	1	;DTE20 NUMBER
	.EVEN
;
; *** DO NOT CHANGE ORDER OF L.IVC THROUGH L.ICB ***
;      (USED BY INTERRUPT SERVICE)
;
L.IVC:	.INT	$DTEIS	;INTERRUPT VECTOR CONTROL BLOCK
L.ICB:	.BLKW	1	;INTERRUPT CCB FOR DDM ==> DLC
L.CST:	.BLKW	1	;EXTERNAL PAGE ADDRESS OF CSTAT REGISTER
L.STS:	.BLKW	1	;LINE STATUS:
	LS.RUN=^O100000	; LINE IS RUNNING NORMAL PROTOCOL *** MUST BE SIGN BIT ***
	LS.INI=^O040000	; LINE IS DOING AN INITIALIZE SEQUENCE
	LS.ICB=^O020000	; LINE HAS AN INTERRUPT CCB
L.SLN:	.BLKW	1	;SYSTEM LINE NUMBER
L.PSW:	.BLKW	1	;PENDING STATUS WORD (FOR $ASCMP) OR ZERO
L.LOG:	.BLKW	1	;EVENT LOGGING DESTINATION
L.PCQ:	.LSTHD		;PENDING CONTROL FUNCTION QUEUE
L.MPN:	.BLKB	1	;MY PROTOCOL PROCESSOR #
L.HPN:	.BLKB	1	;HIS PROTOCOL PROCESSOR #
	.EVEN
L.EHG:	.BLKW	1	;EXAMINE HIS GENERAL OFFSET
L.EHM:	.BLKW	1	;EXAMINE HIS TO-ME
L.EMG:	.BLKW	1	;EXAMINE MY GENERAL
			;EXAMINE MY TO-HIM  IS (L.EMG)+(L.DMH)
			;DEPOSIT MY GENERAL  IS ALWAYS 0
L.DMH:	.BLKW	1	;DEPOSIT MY TO-HIM
;
L.HKA:	.BLKW	1	;HIS KEEP-ALIVE
L.MKA:	.BLKW	1	;MY KEEP-ALIVE
;
; RECEIVE CONTROL BLOCK     ** DO NOT CHANGE ORDER OF  L.RST  THRU  L.RTM **
;
L.RST:	.BLKW	3	;TO-ME STATUS WORD
L.RFQ:	.LSTHD		;FREE RECEIVE BUFFER QUEUE
L.RCB:	.BLKW	1	;CCB ADDRESS OF CURRENT BUFFER
L.RBA:			;RECEIVE BUSS ADDRESS:
	.BLKW	1	; BITS 17-16, STORED IN BITS 15-14
L.RLA:	.BLKW	1	; BITS 15-0
L.RCT:	.BLKW	1	;RECEIVE BYTE COUNT
L.RBZ:	.BLKW	1	;RECEIVE BUFFER SIZE
L.RQZ:			;TO-ME QSIZE WORD:
L.RCZ:	.BLKW	1	; SIZE OF THIS TRANSFER
L.RPZ:	.BLKW	1	; SIZE OF THIS MESSAGE
L.RTM:	.BLKW	1	; TRNASFER MODE
;
; TRANSMIT CONTROL BLOCK     ** DO NOT CHANGE THE ORDER OF  L.XST  THRU  L.XTM **
;
L.XST:	.BLKW	3	;TO-HIM STATUS WORD
L.XMQ:	.LSTHD		;TRANSMIT QUEUE
L.XCB:	.BLKW	1	;CCB ADDRESS OF CURRENT TRANSMIT
L.XBA:			;TRANSMIT BUSS ADDRESS
	.BLKW	1	; BITS 17-16, STORED IN BITS 15-14
L.XLA:	.BLKW	1	; BITS 15-0
L.XQZ:			;TO-HIM QSIZE WORD:
L.XCT:	.BLKW	1	; TRANSMIT BYTE COUNT
L.XBZ:	.BLKW	1	; TRANSMIT BUFFER SIZE
L.XTM:	.BLKW	1	; TRANSFER MODE
; LINE COUNTERS
L.TLZ:	.BLKW	1		; SECONDS SINCE LINE COUNTERS ZEROED
L.RCV:	.BLKW	1		; BLOCKS SUCCESSFULLY RECEIVED
L.XMT:	.BLKW	1		;    "        "       TRANSMITTED
L.TMO:	.BLKB	1		; RECEIVE TIMEOUTS
L.RES:	.BLKB	1		; RESOURCE ALLOC ERRORS
;
$DTELZ==.		;SIZE OF DTE20 LINE TABLE
	.PSECT
	.IIF NB	<LST>,	.NLIST
.ENDM	DTEDF$
.MACRO	DUPDF$	LST
	.IIF NB	<LST>,	.LIST
	.MCALL	TMPDF$
	TMPDF$
;
; DEVICE LINE TABLE OFFSET DEFINITIONS
;
	.ASECT
.=0
TIME:	.BLKB	1	; DEVICE DRIVER TIMER CELL
TIMS:	.BLKB	1	; DEVICE DRIVER INITIAL TIMEOUT
RINS:	.INT		; RECEIVE TRANSFER INSTRUCTION
RDBF:	.BLKW	1	;         RECEIVE DATA ADDRESS
	.IF DF	M$$MGE
RBIAS:	.BLKW	1	;         RELOCATION BIAS
	.IFTF
RADD:	.BLKW	1	;         VIRTUAL ADDRESS
RCNT:	.BLKW	1	;         REMAINING COUNT
RPRI:	.PRI		;         PRIORITY
RTHRD:	.BLKW	1	;         POINTER TO CURRENT BUFFER IN CCB
RFLAG:	.BLKW	1	;         FLAGS WORD
RPRIM:	.BLKW	1	;         PRIMARY CCB (CURRENT)
RSTAT:	.BLKW	1	;         DEVICE STATUS
RPCNT:	.BLKW	1	;	SIZE OF DATA IN NUMBERED MESSAGE
TINS:	.INT		; TRANSMIT TRANSFER INSTRUCTION
TCSR:	.BLKW	1	;          CSR ADDRESS
	.IFT
TBIAS:	.BLKW	1	;          RELOCATION BIAS
	.IFTF
TADD:	.BLKW	1	;          VIRTUAL ADDRESS
TCNT:	.BLKW	1	;          REMAINING COUNT
TPRI:	.PRI		;          PRIORITY
TSTAT:	.BLKW	1	;	   NEXT STATE
TTHRD:	.BLKW	1	;          POINTER TO CURRENT BUFFER IN CCB
TPRIM:	.BLKW	1	;          PRIMARY CCB (CURRENT)
TSEC:	.BLKW	1	;          SECONDARY CCB CHAIN
KICCB:	.BLKW	1	; ADDRESS OF CCB USED IN KILL
LINE:	.BLKW	1	; DEVICE SYSTEM LINE NUMBER
DUPCH:	.DVCHA		; DEVICE CHA. (LOADED BY .DVCHA) ONLY THE
			;  FULL/HALF DUPLEX INDICATOR IS USED
DUPLG:	.BLKW	1	; EVENT LOGGING DESTINATION
HDRA:	.LIBR
	.ENDC
	DUPLN==.
	.PSECT
	.IIF NB	<LST>,	.NLIST
.ENDM	DUPDF$
	.MACRO	DVBDF$,L,B
 
	.ASECT
 
.=0
V.TRCT:'L' .BLKW	1	;VOLUME TRANSACTION COUNT (RESERVED FOR RSX)
V.TIMR:'L' .BLKB	1	;CURRENT TIMER VALUE
V.TIME:'L' .BLKB	1	;RESET TIME VALUE
V.CULT:'L' .BLKW	1	;CURRENT USER LINK TABLE ADDRESS
V.ULT:'L' .BLKW		1	;POINTER TO START OF USER LINK TABLE
V.ULTE:'L' .BLKW 	1	;POINTER TO END OF USER LINK TABLE
V.MBXQ:'L' .BLKW	2	;USER TASK MAILBOX LISTHEAD
V.GENQ:'L' .BLKW	2	;GENERAL DELIVERY CCB QUEUE LISTHEAD
V.1CPQ:'L' .BLKW	2	;VERSION 1 CONNECT PENDING QUEUE LISTHEAD
				;
V.VBL='B'.-V.TRCT		;LENGTH OF DECNET (V2) VOLUME CONTROL BLOCK
 
	.PSECT
 
	.MACRO	DVBDF$,X,Y
	.ENDM	DVBDF$
 
	.ENDM	DVBDF$
.MACRO	DVTMDF	MCRO
	'MCRO'	DP,DP,0,<DV$NET!DV$LOD>,15.,0,255.	;** MOP
	'MCRO'	DU,DU,2,<DV$NET!DV$LOD>,15.,0,255.	;** MOP
	'MCRO'	DUV,DUV,2,<DV$NET!DV$LOD>,15.,0,255.	;** MOP
	'MCRO'	DL,DL,4,<DV$NET!DV$LOD>,15.,0,255.	;** MOP
	'MCRO'	DLV,DLV,4,<DV$NET!DV$LOD>,0.,0,255.	;** MOP
	'MCRO'	DQ,DQ,6,<DV$NET!DV$LOD>,15.,0,255.	;** MOP
	'MCRO'	DA,DA,10,<DV$NET!DV$LOD>,1.,0,0.	;** MOP
	'MCRO'	DUP,DUP,12,<DV$NET!DV$LOD>,15.,0,255.	;** MOP
	'MCRO'	DMC,DMC,14,<DV$NET!DV$LOD>,7.,0,0.	;** MOP
	'MCRO'	DLA,DLA,20,,0.,0.,0.			;OUR DEFINITION
	'MCRO'	DTE,DTE,24,<DV$NET>,0.,0,0.		;** MOP
	'MCRO'	DV,DV,26,<DV$NET!DV$LOD>,3.,15.,255.	;MAYNARD DEFINITION
	'MCRO'	DZ,DZ,30,<DV$NET!DV$LOD>,7.,7.,255.	;MAYNARD DEFINITION
	'MCRO'	KDP,KDP,34,<DV$NET!DV$LOD>,0.,15.,255.	;MAYNARD DEFINITION
	'MCRO'	KDZ,KDZ,36,<DV$NET!DV$LOD>,2.,47.,255.	;MAYNARD DEFINITION
	'MCRO'	KL,KL,40,<DV$NET>,15.,0,255.		;** MOP
	'MCRO'	DH,DH,42,<DV$NET!DV$LOD>,7.,15.,255.	;OUR DEFINITION
	'MCRO'	CR,CR,44,,0.,0.,0.			;OUR DEFINITION
	'MCRO'	LE,LE,46,,0.,0.,0.			;OUR DEFINITION
.ENDM	DVTMDF
.MACRO	DZTDF$	PS
	.MCALL	TMPDF$
	TMPDF$
	.NLIST
	....PS=	0
	.IF	NB,PS
	.IIF	NE,PS,	....PS=	1
	.ENDC
	.LIST
	.ASECT
	.=	0
DZDLT:					;DZ11 DEVICE LINE TABLE OFFSETS
DRCV:	.INT				;NTL .INT & .PRI OPERATOR
	.PRI
DRDBR:	.BLKW	1			;RCV DATA BUF REG ADDR
DTRN:	.INT			;NTL .INT & .PRI OPERATOR
	.PRI
DTDBR:	.BLKW	1			;XMT DATA BUF REG ADDR
DZCSR:	.BLKW	1			;DZ11 CSR ADDRESS
DTIM:	.BLKW	2			;2 WORD ENTRY FOR TIMER QUEUE
DFLG:	.BLKB	1			;REMOVED: FREE TO ALL TAKERS
DCNT:	.BLKB	1			;ACTIVE CHANNEL COUNT
DCRC:	.LIBR				;CRC ROUTINE POINTER
DTMSTP:	.BLKW	1			;STORAGE FOR STOP CCB WHILE
					;TIMER STOPS
DTTAB::					;TABLE OF 8 CHN ENTRIES
.=	0				;OFFSETS INTO TABLE ENTRIES
DTTLT:	.BLKW	1			;TIMEOUT COUNT, MUST BE FIRST
DTTAD:	.IF	DF,M$$MGE
	.BLKW	1			;TRN CHAR BUFFER RELOC BIAS
	.ENDC
DTTPT:	.BLKW	1			;TRN CHAR BUFF POINTER
DTTCT:	.BLKW	1			;TRN CHARACTER COUNT
DTTCE:	.BLKW	1			;TRN CCB BUFFER ENTRY POINTER
DTTQH:	.BLKW	1			;TRN CCB Q HEAD AND CURRENT CCB
DTLOG:	.BLKW	1			;EVENT LOGGING DESTINATION
	.IF	NE,....PS
DTPST:	.BLKW	1			;PROTOCOL I/O STATUS BITS
DTRAD:	.IF	DF,M$$MGE
	.BLKW	1			;RCV CHAR BUFFER RELOC BIAS
	.ENDC
DTRPT:	.BLKW	1			;RCV CHAR BUFFER POINTER
DTRCT:	.BLKW	1			;RCV CHARACTER COUNT
DTRQH:	.BLKW	1			;RCV CURRENT CCB
	.ENDC
DTFLG:	.BLKB	1			;DZ11 CHANNEL'S FLAGS
DTSLN:	.BLKB	1			;SYSTEM LINE NUMBER
DTTLS:	.DVCHA				;LPR (LINE PARAM REG) INIT VALUE
DTLIN:	.BLKB	1			;SPACE FOR LINE NO (0-7)
					;USED ONLY BY START CODE TO INIT
					;3 LSB IN LINE CHA. WORDS
	.EVEN
DTTLN==	.				;LEN OF TABLE ENTRY
	.PSECT
.ENDM	DZTDF$
	.MACRO	D1$	LB,D
 
	; L - LABEL
	; D - DISPLAY END
 
	.BYTE	1.,1		; OPCODE, COUNT
	.BYTE	D		; LINE AT WHICH DISPLAY AREA ENDS
 
	.ENDM
	.MACRO	D2F$	ROW,COL,LEN,VA,IC,FA
 
	;  FIELD DEFINATIONS
 
	.BYTE	ROW,COL,LEN
	.IF	B,VA
	.BYTE	V.N		; DEFAULT TO NORMAL VIDEO
	.IFF
	.BYTE	VA
	.ENDC
	.IF	B,IC
	.BYTE	I.S		; DEFAULT TO SPACES
	.IFF
	.BYTE	IC
	.ENDC
	.BYTE	FA & 377	; 1ST BYTE
				; LOW BYTE - DATA TYPE, EMPTY-FULL BITS
	.BYTE	FA/400 & 377	; 2ND BYTE
				; HIGH BYTE - RJ, MODIFIER BITS
 
	.ENDM
	.MACRO	D2H$	LB
 
	; SET OPCODE, RESERVE BYTE FOR COUNT
 
	.BYTE	2		; OPCODE
	.BYTE	LB'C & 177 ! 200 ; 1ST BYTE OF BYTE COUNT
	.BYTE	LB'C / 200	 ; 2ND BYTE
LB:				; LABEL USED TO COMPUTE COUNT
 
	.ENDM
	.MACRO	D2T$	LB
 
	; COMPUTE COUNT AND LENGTH
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	D2$	LB,R,COL,LEN,V,IC,F
 
	; *** THIS MACRO USED FOR DEFINE ONE AND ONLY ONE FIELD ***
	;      FOR MULTIPLE FIELDS USE D2H$, D2F$, D2T$
 
	; LB - LABEL
	; FIELD DEFINITIONS
	;     <ROW>
	;     <COLUMN>
	;     <LENGTH>
	;     <VIDEO ATTRIBUTES>
	;     <INITIALIZATION CHAR>
	;     <FIELD ATTRIBUTES>
 
	.BYTE	2.		; OPCODE
	.BYTE	LB'C		; COUNT
LB:	.BYTE	R,COL,LEN	; ROW, COLUMN, LENGHT
	.BYTE	V 		; VIDEO ATTRIBUTES
	.BYTE	IC		; INIT CHAR
	.BYTE	F & 377		; 1ST BYTE
				; LOW BYTE - CONTAINS DATA TYPE, EMPTY-FULL BITS
	.BYTE	F/400&377	; 2ND BYTE OF ATTRIBUTES
				; HIGH BYTE - CONTAINS RJ, MODIFIER BITS
 
	LB'C=	.-LB
     
	.ENDM
	.MACRO	D3F$	ROW,COL,LEN,VA
 
	; SET FIELD DEFINATIONS
 
	.BYTE	ROW,COL,LEN
	.IF	B,VA
	.BYTE	V.N			; DEFAULT
	.IFF
	.BYTE	VA
	.ENDC
 
	.ENDM
	.MACRO	D3H$	LB
 
	; SET OPCODE, RESERVE BYTE FOR COUNT
 
	.BYTE	3		; OPCODE
	.BYTE	LB'C&177!200	;COUNT LOW BYTE
	.BYTE	LB'C/200	;HIGH BYTE
LB:				; LABEL USED TO COMPUTE COUNT
 
	.ENDM
	.MACRO	D3T$	LB
 
	; COMPUTE COUNT
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	D3$	LB,ROW,COL,LEN,VA
 
	; *** THIS MACRO USED FOR DEFINING ONE AND ONLY ONE FIELD ***
	;	FOR MULTIPLE FIELDS USE D3H$, D3F$, D3T$
 
 
	; LB - LABEL
	; VA - VIDEO ATTRIBUTES
 
 
	.BYTE	3		; OP CODE
	.BYTE	LB'C		; COUNT
LB:	.BYTE	ROW, COL, LEN
	.BYTE	VA
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	D4$	LB,MSG,VA,STRING
 
	; LB - LABEL
	; MSG - MESSAGE NUMBER (1-32)
 
	.BYTE	4		; OP CODE
	.BYTE	LB'C		; COUNT
LB:	.BYTE	MSG
	.IF	B,VA
	.BYTE	V.N			; DEFAULT
	.IFF
	.BYTE	VA
	.ENDC
	.ASCII	STRING
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	ELSE
	$$ELSE
$$TRNM=11
	.ENDM
	.MACRO	EMBDF$,L,B
EC.INI='B'40
EC.DVC='B'1
EC.DTO='B'140
EC.NSI='B'141
EC.LOA='B'4
EC.UNL='B'10
	.ASECT
.=0
E.SIZE:'L' .BLKW 1
E.CODE:'L' .BLKB 1
	 .BLKB 1
E.TIME:'L' .BLKB 6
E.SEQ:'L'.BLKW 1
E.ABM:'L'.BLKW 1
.=E.ABM+2
E.VCTR:'L' .BLKB 1
E.LOST:'L' .BLKB 1
E.OPS:'L'.BLKW 1
E.OPC:'L'  .BLKW 1
.=E.ABM+2
E.RTRY:'L' .BLKB 2
	 .BLKB 1
E.IOC:'L'.BLKB 1
E.TASK:'L' .BLKW 2
E.PAR:'L'.BLKW 1
E.UIC:'L'.BLKW 1
E.UCB:'L'.BLKW 1
E.FCN:'L'.BLKB 2
E.PRM:'L'.BLKW 1
	 .BLKW 6
E.RCNT:'L' .BLKB 1
	 .BLKB 1
E.REGS='B'.
E.LGTH='B'.
.=E.TIME+<9.*2>
E.WHY:'L'.BLKW	1
.=.+2
E.NAME:'L'.BLKW	1
	.PSECT
	.MACRO	EMBDF$	X,Y
	.ENDM
	.ENDM
	.MACRO	EMSG$	NUMBER,REG
	.IF NB	REG
	MOV	#$ERR'NUMBER',REG
	CALL	@(REG)+
	.IFF
	MOV	#$ERR'NUMBER',R0
	CALL	@(R0)+
	.ENDC
	.ENDM	EMSG$
	.MACRO	EMSG$R	NUMBER,REG
	.IF NB	REG
	MOV	#$ERR'NUMBER',REG
	JMP	@(REG)+
	.IFF
	MOV	#$ERR'NUMBER',R0
	JMP	@(R0)+
	.ENDC
	.ENDM	EMSG$R
	.MACRO	ENABL$
 
	.IF DF	L$$SI1
 
	MTPS	(SP)+		;;; RESTORE PREVIOUS PRIORITY
 
	.IFF
 
	MOVB	(SP)+,@#PS	;;; RESTORE PREVIOUS PRIORITY
 
	.ENDC
 
	.ENDM
	.MACRO  ENDCASE
	$$POP	$$CSTA
	.IF NE $$TRNM-11
	  $$LAB	  \$$STNM,10
	.ENDC
	ENDIF
	.ENDM
	.MACRO	ENDIF
	$$LAB	\$$STNM,\$$TRNM-1
	$$POP	$$TRNM
	$$POP	$$STNM
	.ENDM
	.MACRO	ENDPROC
	.IF	EQ $$SUB
	$$GEN1	,RTS,PC
	.ENDC
	.ENDM
	.MACRO	ENDSYSTATE
	.IF	DF,R$$11D!I$$AS
	  .ENB0
	.ENDC
	.IF	NDF,R$$11M
	  MOV     (SP)+,R5
	  MOV     (SP)+,R4
	  MOV     (SP)+,R3
	  MOV     (SP)+,R2
	  MOV     (SP)+,R1
	  MOV     (SP)+,R0
	.IFF
	  $$GEN1	,RTS,PC
	  $$LAB	\$$STNM,10
	  ENDIF
	.ENDC
	.ENDM
	.MACRO	ENDWHILE
	$$BGNN	R,\$$STNM,10
	ENDIF
	.ENDM
	.MACRO END$DF
	SLTTOT=SLN+1
	PDVTOT=PDN+1
	.ENDM	END$DF
	.MACRO	ERBLK$	AA,BB
	.BYTE	0		; TERMINATE STRING
	$$=-1			; FORCE NEW ADDRESS TO BE SAVED IN ERMSG$
	.EVEN
	$$$$=.
	.IF NB AA
AA':
	.ENDC
	.WORD	$$$		; ADDRESS OF INPUT ASCIZ STRING
	.IF NB <BB>
	.IRP	CC,<BB>
	.WORD	CC
	.ENDR
	.ENDC
	.ENDM	ERBLK$
	.MACRO	ERMSG$	AA
	.IF NDF $$
	$$=-1
	.ENDC
	.IIF EQ,$$+1, $$$=.
	$$=+1
	.ASCII	^AA^
	.ENDM	ERMSG$
	.MACRO	ERRPT$	AA,BB,CC
	.IF B AA
	MOV	#$$$$,R2	; ADDRESS ARGUMENT BLOCK
	.IFF
	MOV	#'AA,R2		; ADDRESS OF ARGUMENT BLOCK
	.ENDC
	.IF NB BB
	.IF NB CC
	MOV	#'CC,R1		; PASS OPTIONAL WORD
	.ENDC
	CALL	BB		; CALL USER SUBROUTINE
	.IFF
	.ERROR	ERRPT$ MACRO MUST BE SUPPLIED WITH USER SUBROUTINE
	.ENDC
	.ENDM	ERRPT$
.MACRO	EVDF
SIDLEN	= 16.
NODLEN	= 6.
.ASECT
.=0
CMLKNM:	.BLKW	1
MESBUF:	.BLKW	1
MEMLEN:	.BLKW	2
ORIGCB:	.BLKW	1
EXTCB:	.BLKW	1
STATE:	.BLKB	1
FLAGS:	.BLKB	1
LINE:	.BLKB	4
MODE:	.BLKB	1
BOODEV:	.BLKB	1
REQPRO:	.BLKB	1
SOFTID:	.BLKB	SIDLEN+1
REQTYP:	.BLKB	1
ERRFUN:	.BLKB	1
ERRCOD:	.BLKB	1
CTXTLN	= .
.PSECT
LOGPRO	= 1.
LINPRO	= 2.
LNKPRO	= 3.
FINISH	= 4.
LINSWI	= 001
FINMES	= 002
OPTSPE	= 004
TRAPEN	= 010
RECPEN	= 020
MAINT	= 0.
LOAD	= 1.
DUMP	= 2.
.MACRO	EVDF
.ENDM
.ENDM
	.MACRO EXPALL NAM,CNT,UNT,SLN,DLCLST
	EXPFLG	\S'SLN'SF,NAM,\S'SLN'CN,\SLN ; EXPAND FLAG LINE
	.RADIX 10
	EXPDDM \PD$'NAM,NAM
	.RADIX 8
;
;	SPECIAL CASE OF DDM=DLC ( SUCH AS DMC )
;
	.IF EQ S'SLN'DD-S'SLN'DL
	.RADIX 10
	EXPDLC \PD$'NAM,NAM
	.RADIX 8
	EXPWRD NAM,NAM,\S'SLN'CN,\S'SLN'UN
	.IFF
;
;	NORMAL DLC PROCESSES
;
	.IRP NAMDL,<DLCLST>
	.IF EQ NAMDL-S'SLN'DL
	.RADIX 10
	EXPDLC \PD$'NAMDL,NAMDL
	.RADIX 8
	EXPWRD NAM,NAMDL,\S'SLN'CN,\S'SLN'UN
	.MEXIT
	.ENDC
	.ENDM
	.ENDC
	.ENDM	EXPALL
	.MACRO EXPATS	AT,PD,ST,SL
	ATLL'AT=PD	; CHANNEL AT LLC PDI
	ATSL'AT=SL	; CHANNEL AT SLN
	ATST'AT=ST	; CHANNEL AT STATION NUMBER
	.ENDM EXPATS
	.MACRO EXPATT AT,NAM
	EXPATU	\ATLL'AT,\ATSL'AT,\ATST'AT,NAM,\AT
	.ENDM EXPATT
	.MACRO EXPATU LL,SL,ST,NAM,AT
	.IF LE AT-ATS		; IF NOT INTO EXENDED TABLE SPACE
	.IF EQ LL-PD$'NAM	; AND THIS CHANNEL BELONGS TO THIS LLC
	.LIST
	.BYTE	SL,ST		; (A) ;	CHANNEL AT': SLN'SL,STATION ST
	.NLIST
	.IFF			; IF IT BELONGS TO SOME OTHER LLC
	.LIST
	.BYTE	0,200		; (A) ;	CHANNEL AT': NOT ASSIGNED TO THIS LLC
	.NLIST
	.ENDC
	.IFF			; IF INTO EXTENDED SPACE
	.LIST
	.BYTE	0,200		; (A) ;	CHANNEL AT': UNASSIGNED CHANNEL
	.NLIST
	.ENDC
	.ENDM EXPATU
	.MACRO EXPBFT
	.LIST
;
;		COMMUNICATION SYSTEM COMMON DATA BASE
;			( ORDERING IMPACTS VNP )
;
;
;
;
;
	.NLIST
 
	.RADIX 10
	EXPTAB	\SLTTOT,\PDVTOT
	EXPBUF	\CCB.NB,\CCB.SZ,\RDB.NB,\RDB.SZ,\SDB.NB,\SDB.SZ,\TR,\XM
	.RADIX 8
	.LIST
$CMPDV::.WORD	0		; (R) ; PDV INDEX OF CURRENT DISPATCHED PROCESS
	.IF DF R$$11D!I$$AS
$PRQUE::.WORD	0		; (R) ; QUEUE LISTHEAD
	.WORD	.-2		; (R) ; POINTER TO LAST CCB IN QUEUE
	.ENDC
	.IF DF R$$11M!X$$MCB
$CMFRK::.WORD	$SQSRV		; (R) ;	INITIAL LINK MARKS FORK BLOCK FREE
	.WORD	$SQSRV		; (R) ;	ADDRESS OF FORK PROCESS
	.WORD	0		; (R) ;	FORK PROCESS QUEUE
	.WORD	.-2		; (R) ;	 IS INITIALLY EMPTY
	.ENDC
$CCBLH::.WORD	0		; (D) ; POINTER TO FIRST FREE CCB
$SDBLH::.WORD	0		; (D) ; POINTER TO FIRST FREE SMALL DATA BUFFER
	.WORD	0		; (D) ; SECOND HALF OF ADDRESS DOUBLEWORD
$RDBLH::.WORD	0		; (D) ; POINTER TO FIRST FREE RECEIVE BUFFER
$RDQSL::.WORD	0		; (R) ; SYSTEM LINE NUMBER TO CHECK ON NEXT BUFFER RETURN
$RDQCT::.WORD	0		; (R) ; NUMBER OF BUFFER WAIT REQUESTS AND FLAG
$NTLPT::.WORD	0		; (D) ; NTL POINTER TO IMPURE AREA IN NTPOOL
	.IF DF R$$11D!I$$AS
$EVFLG::.WORD	0		; (D) ; POINTER TO FIRST 16 LOCAL EVENT FLAGS
	.ENDC
	.IF NDF M$$MGE
	.WORD	77		; (A) ;	GLITCH FOR ALLOCATION ROUTINES
$QBIAS::.WORD	0		; (R) ; START OF COMMUNICATION BUFFER POOL
	.WORD	0		; (R) ;	SECOND WORD OF $QBIAS LISTHEAD
$PUMA::	.WORD	0		; (R) ; FREE WORD ON UNMAPPED SYSTEMS
	.IFF
$NBIAS::.WORD	0		; (R) ; POINTER TO NON-UMR MAPPED PORTION OF POOL
$QBIAS::.WORD	0		; (R) ; POINTER TO UMR-MAPPED PORTION OF POOL
$QSTRT::.WORD	0		; (R) ; ORIGINAL BIAS OF UMR-MAPPED PORTION OF POOL
$PUMR::	.WORD	0		; (D) ; STARTING UMR BIAS
	.ENDC
	.IF	DF,R$$11D!I$$AS
$XUMR::	.WORD	0		; (D) ; STARTING UMR BIAS OF SCOM AREA
$POOLB::.WORD	0		; (D) ; BASE ADDRESS OF NETWORK POOL
$POOLS::.WORD	0		; (D) ; SIZE OF NETWORK POOL
	.ENDC
	.NLIST
	.ENDM	EXPBFT
	.MACRO EXPBUF NCCB,SCCB,NRDB,SRDB,NSDB,SSDB,THRESH,XMIT
	.LIST
$CCBNM::.WORD	NCCB'.		; (D) ; # OF CCB'S ALLOCATED
$CCBSZ::.WORD	SCCB'.		; (A) ; # BYTES / CCB
$RDBNM::.WORD	NRDB'.		; (D) ; # OF RDB'S ALLOCATED
$RDBSZ::.WORD	SRDB'.		; (D) ; # BYTES / RDB
$SDBNM::.WORD	NSDB'.		; (D) ; # OF SDB'S ALLOCATED
$SDBSZ::.WORD	SSDB'.		; (D) ; # BYTES / SDB
$CCBCT::.WORD	NCCB'.		; (D) ; COUNTER OF CURRENT # OF CCBS IN POOL
$RDBCT::.WORD	NRDB'.		; (D) ; COUNTER OF CURRENT # OF RDBS IN POOL
$SDBCT::.WORD	NSDB'.		; (D) ; COUNTER OF CURRENT # OF SDBS IN POOL
$CCBAF::.WORD	0		; (D) ; COUNTER OF # OF CCB ALLOCATION FAILURES
$RDBAF::.WORD	0		; (D) ; COUNTER OF # OF RDB ALLOCATION FAILURES
$LDBAF::.WORD	0		; (D) ; COUNTER OF # OF LDB ALLOCATION FAILURES
$SDBAF::.WORD	0		; (D) ; COUNTER OF # OF SDB ALLOCATION FAILURES
$RDBTH::.WORD	THRESH'.		; (D) ; POOL THRESHOLD FOR LARGE DATA BUFFER ALLOCATON FAILURE
$XMTBF::.WORD	XMIT'.		; (D) ; # OF XMITS/LINK TO STACK
	.NLIST
	.ENDM	EXPBUF
	.MACRO EXPCHN NCHAN,NAM
	.LIST
	.BYTE	NCHAN'.		; (A) ; NUMBER OF CHANNELS ALLOCATED FOR NAM
	.NLIST
	.ENDM	EXPCHN
	.MACRO EXPDDM	DDMIND,NAM
	.LIST
	.BYTE	DDMIND'.	; (D) ; NAM OFFSET IN PDVTB::
	.NLIST
	.ENDM	EXPDDM
	.MACRO EXPDLC	DLCIND,NAM
	.LIST
	.BYTE	DLCIND'.	; (D) ; NAM OFFSET IN PDVTB::
	.NLIST
	.ENDM	EXPDLC
	.MACRO EXPFLG	FLG,NAM,NUM,SLNN
	.LIST
	.IF EQ SSL'SLNN
;   SLN'SLNN NAM'NUM
	.IFF
;   SLN'SLNN NAM'NUM  ***  MULTIDROP ***
	.ENDC
	.WORD	FLG	; (D) ; FLAG FOR NAM'NUM
	.NLIST
	.ENDM	EXPFLG
	.MACRO EXPLLL CHAN,PDI,SL,NAM,AT
 
	.IF LE SSL'SL-1
	.IF NDF X$$ATS
	.LIST
	.BYTE	CHAN,PDI		; (A) ; SLN'SL': CHANNEL CHAN-NAM
	.NLIST
	NAM'CHAN=SL		; GENERATE SYMBOL FOR LLC CHANNEL TABLE
	.IFF
	.LIST
	.BYTE	AT,PDI			; (A) ; SLN'SL': CHANNEL AT-NAM
	.NLIST
	ATLL'AT=PDI		; CHANNEL AT LLC PDI
	ATSL'AT=SL		; CHANNEL AT SLN
	ATST'AT=0		; CHANNEL AT STATION NUMBER
	ATS=ATS+1		; ONE MORE ATS CHANNEL ( GLOBAL TOTAL )
	.ENDC
	.IFF
	.LIST
	.WORD	<ST'SL-.>/2!100000	; (A) ;	SLN'SL: MULTIDROP
	.NLIST
	M'NAM'CHAN=SL		; GENERATE SYMBOL FOR LLC  MULTIDROP ENTRY
	NAM'CNT=NAM'CNT+SSL'SL-1	; # CHANNELS/LLC
	SSN'SL=CHAN			; STARTING CHANNEL # BY SLN
	.IF DF X$$ATS
	STA=0				; START WITH STATION ZERO
	SSN'SL=ATS			; STARTING CHANEL NUMBER / SLN
	.REPT	SSL'SL			; GENERATE SYMBOLS FOR EACH CHANNEL
	EXPATS	\ATS,\PDI,\STA,\SL	; GERNERATE SYMBOLS
	STA=STA+1
	ATS=ATS+1			; NUMBER ATS CHANNELS CONSECUTIVELY
	.ENDR
	.ENDC
	.ENDC
	.ENDM	EXPLLL
	.MACRO EXPLLN SLN,LST
	.IRP	NAM,<LST>
 
	.IF EQ	NAM-S'SLN'LL
	NAM'CNT=NAM'CNT+1		; INCREMENT REFERENCE COUNTER
	EXPLLL	\NAM'CNT,\PD$'NAM,\SLN,NAM,\ATS
	.MEXIT
	.ENDC
	.ENDR
	.ENDM	EXPLLN
	.MACRO EXPLLR SL,CHAN,STA
	.IF B STA
	.LIST
	.BYTE	0,200		; (A) ;	CHANNEL CHAN': UNASSIGNED
	.NLIST
	.IFF
	.LIST
	.BYTE	SL',STA 		; (A) ; CHANNEL CHAN': SLN'SL,STATION STA
	.NLIST
	.ENDC
	.ENDM	EXPLLR
	.MACRO EXPLLS SL,NAM,CHA
	.IF GE NAM'CNT-CHA
	.IF DF NAM'CHA
	STA=0
	EXPLLR	\NAM'CHA,\CHA,\STA
	.ENDC
	.IF DF M'NAM'CHA
	CHAN=CHA-1
	STA=-1
	.REPT SSL'SL
	STA=STA+1
	CHAN=CHAN+1
	EXPLLR SL,\CHAN,\STA
	.ENDR
	.ENDC
	.IFF
	STA=0
	EXPLLR	0,CHA
	.ENDC
	.ENDM	EXPLLS
	.MACRO EXPLLT	LST
	.PAGE
	.LIST
	.IF NE STATBL
;
;	SYSTEM LINE TABLE ( EXTENSION )
;
;	THIS TABLE IS INDEXED BY SYSTEM LINE NUMBER AND
;	   ASSOCIATES EACH SYSTEM LINE WITH AN:
;
;		1 - LLC PROCESS AND A CHANNEL NUMBER WITHIN THAT PROCESS
;	OR	2 - ADDRESS OF A STATION TABLE FOR A MULTIDROP LINE
 
	.IFF
;
;	SYSTEM LINE TABLE ( EXTENSION )
;
;	THIS TABLE IS INDEXED BY SYSTEM LINE NUMBER AND
;	   ASSOCIATES EACH SYSTEM LINE WITH AN LLC PROCESS
;	   AND A CHANNEL NUMBER WITHIN THAT PROCESS.
 
	.ENDC
$LLCTB::
	.NLIST
 
	SLN=-1
	ATS=0			; COUNT TOTAL NUMBER OF CHANNELS
	.REPT	SLTTOT
	SLN=SLN+1
	EXPLLN	\SLN,<LST>
	.ENDR
	ATS=ATS-1		; DECREMENT TO TRUE COUNT
	.ENDM	EXPLLT
	.MACRO	EXPNOD	ARG1,ARG2,ARG3,ARG4=1
	.NLIST	BEX
	.LIST
$NSPNM::.WORD	'ARG4'		; (X) ; LOCAL NODE NUMBER
$NTNAM::.ASCII	/'ARG1'/	; (D) ; LOCAL NODE NAME
$HOST::	.ASCII	/      /	; (D) ; HOST SYSTEM ID ( SET WITH VNP )
	.NLIST
	.NCHR	$$TMP,<ARG2>
	.LIST
$NODID::.WORD	$$TMP		; (D) ; LOCAL NODE IDENTIFICATION
	.ASCII	@'ARG2'@
	.NLIST
	.LIST	BEX
	.BLKB	32.-$$TMP
	.ENDM
	.MACRO EXPPDL	NAM,NUM,LDRFLG,XXX
	.IF EQ	LDRFLG&ZF.MFL	; DON'T LOAD PROCESS
	.LIST
.WORD	NAM'PDV	; NAM	  XXX	   NUM'.	   NO	; (A) ;
	.NLIST
	.IFF			; LOAD PROCESS
	.LIST
.WORD	NAM'PDV	; NAM	  XXX	   NUM'.	  YES	; (A) ;
	.NLIST
	.ENDC
 
	.ENDM	EXPPDL
	.MACRO EXPPDN	LST,XXX
 
	.IRP	NAM,<LST>
	PDN=PDN+1
	.RADIX 10
	EXPPDL	NAM,\PDN*2,NAM'FL,XXX
	.RADIX 8
	.ENDM
 
	.ENDM	EXPPDN
	.MACRO EXPPDT	LLCLST,DLCLST,DDMLST
	.LIST
 
;
;	PROCESS DESCRIPTOR ADDRESS TABLE
;
;	EACH ENTRY IS THE ADDRESS OF THE CORRESPONDING
;	PROCESS DESCRIPTOR VECTOR ( BELOW ).
;
;		PROCESS	PROCESS	PROCESS	PROCESS
;		 NAME	 LEVEL	 INDEX	  MFL
$PDVTB::
	.NLIST
 
	PDN=-1
	EXPPDN <LLCLST>,LLC
	EXPPDN <DLCLST>,DLC
	EXPPDN <DDMLST>,DDM
	.LIST
$PDVND::
	.NLIST
	.ENDM	EXPPDT
	.MACRO EXPPVL NAM,FLG,PRI,PDN,XXX
	.LIST
;
;	NAM - PROCESS DESCRIPTOR VECTOR # 'PDN'
	.IF DIF XXX,LLC
;		THIS IS A XXX PROCESS
	.IFF
;
;		THIS IS AN XXX PROCESS
	.ENDC
;
	.NLIST
	.LIST
NAM'PDV::
	.IF DF M$$MGE
	.WORD	0		; (I) ; RELOCATION BIAS
	.IFF
	.WORD	0		; (I) ; UNUSED WORD ON UNMAPPED SYSTEMS
	.ENDC
	.WORD	0		; (I) ; DISPATCH TABLE ADDRESS
	.IF DF X$$MCB
	.WORD	0		; (R) ; RESERVED WORD
	.ENDC
	.WORD	^C<PR'PRI'>&PR7 	; (D) ; PRIORITY PRI
	.RAD50	/'NAM'/		; (D) ; PROCESS NAME
	.IF DF NAM'CHN
	.IF NE NAM'CHN
	.IF NDF X$$ATS
	.NLIST
	.IIF GT,NAM'CNT-NAM'CHN, NAM'CHN=NAM'CNT
	.LIST
	.IFF
	.NLIST
	.IIF GT,ATS-NAM'CHN, NAM'CHN=ATS
	.LIST
	.ENDC
	.ENDC
	.IFT
	.IF NE NAM'CHN
	.NLIST
	.RADIX 10
	.IF NDF X$$ATS
	EXPCHN	\NAM'CHN+1,NAM	; NUMBER OF CHANNELS ( EXCLUDING CHANNEL 0 )
	.IFF
	EXPCHN	\NAM'CHN,NAM
	.ENDC
	.RADIX 8
	.LIST
	.IFF
	.BYTE	0		; (R) ; AVAILABLE BYTE
	.ENDC
	.IFF
	.BYTE	0		; (R) ; AVAILABLE BYTE
	.ENDC
	.BYTE	FLG		; (D) ; FLAG BYTE
	.IF DF R$$11M
	.WORD	0		; (I) ; LOADED PROCESS PCB POINTER
	.ENDC
	.IF DF R$$11D!I$$AS
	.WORD	0		; (I) ; GCD POINTER
	.ENDC
	.NLIST
	.IF DF NAM'CHN
	.LIST
	.WORD	0		; (I) ;	VIRTUAL ADDRESS OF LLC DATA BASE
	.NLIST
	.IF NE NAM'CHN
	.IF NDF X$$ATS
	.LIST
	.BYTE	0,300		; (A) ; CHANNEL 0: RESERVED FOR LOOPBACK
	.NLIST
	CHAN=0
	SLN=-1
	.REPT NAM'CHN
	SLN=SLN+1
	CHAN=CHAN+1
	EXPLLS	\SLN,NAM,\CHAN
	.IIF EQ,NAM'CHN-CHAN, .MEXIT	; EXIT NOW IF ENOUGH CHANNELS ARE ALLOCATED
	.ENDR
	.IFF
	AT=-1		; START WITH CHANNEL 0
	.REPT NAM'CHN
	AT=AT+1
	EXPATT	\AT,NAM
	.ENDR
	.ENDC
	.ENDC
	.ENDC
	.ENDM	EXPPVL
	.MACRO EXPPVN	LST,XXX
	.IRP	NAM,<LST>
	PDN=PDN+1
	EXPPVL	NAM,\NAM'FL,\NAM'PR,\PDN,XXX
	.ENDR
	.ENDM	EXPPVN
	.MACRO EXPPVT	LLCLST,DLCLST,DDMLST
	PDVDF$	,,LST		; LIST PDV OFFSETS AND FLAG VALUES
	.RADIX	8
	PDN=-1
	EXPPVN <LLCLST>,LLC
	EXPPVN <DLCLST>,DLC
	EXPPVN <DDMLST>,DDM
	.ENDM	EXPPVT
	.MACRO EXPSLN NAM,CNT,UNT,DLCLST
 
	.IF DF NAM'CNT'UNT
	SLN=SLN+1
	EXPALL NAM,\CNT,\UNT,\SLN,<DLCLST>
	.IFF
	EXITUN=1
	.ENDC
 
	.ENDM	EXPSLN
	.MACRO EXPSLT	DLCLST,DDMLST
	SLTDF$	,,LST		; LIST SLT OFFSETS AND FLAG WORD BIT VALUES
	.LIST
 
;
;	SYSTEM LINE TABLE
;
$SLTTB::
	.NLIST
	SLN=-1
	.IRP NAM,<DDMLST>
	CNT=-1
	.REPT 8.
	CNT=CNT+1
	EXITUN=0
	UNT=-1
	.REPT	48.
	UNT=UNT+1
	EXPSLN NAM,\CNT,\UNT,<DLCLST>
	.IIF EQ,EXITUN-1,	.MEXIT
	.ENDR
	.ENDR
	.ENDM
	.LIST
$SLTND::
	.NLIST
	.ENDM	EXPSLT
	.MACRO EXPSTA SL,CHAN,CHANN
	EXPSTS	\SL,\CHAN,\S'SL'C'CHANN
	.ENDM EXPSTA
	.MACRO EXPSTN SLN
	.IF GT SSL'SLN-1
	.LIST
ST'SLN:
	.NLIST
	CHANN=-1
	.REPT	SSL'SLN
	CHANN=CHANN+1
	EXPSTA	\SLN,\SSN'SLN,\CHANN
	SSN'SLN=SSN'SLN+1
	.ENDR
	.LIST
	.WORD	-1		; (D) ; END OF TABLE
	.NLIST
	.ENDC
	.ENDM EXPSTN
	.MACRO EXPSTS SL,CHAN,PDI
	.LIST
	.BYTE	CHAN,PDI		; (D) ;	SLN'SL: CHANNEL,LLC
	.NLIST
	.ENDM EXPSTS
	.MACRO EXPSTT
	.LIST
	.IF NE STATBL
;
;	STATION TABLE ORDERED BY SYSTEM LINE NUMBER
;		( INDEXED THROUGH $LLCTB )
;
	.IFF
;
;	NO STATIONS IN THIS CONFIGURATION
;
	.ENDC
	.NLIST
	SLN=-1
	.REPT	SLTTOT
	SLN=SLN+1
	EXPSTN	\SLN
	.ENDR
	.ENDM	EXPSTT
	.MACRO EXPTAB	SLTN,PDVN
 
	.LIST
$PDVTA::.WORD	$PDVTB		; (A) ; ADDRESS OF PDV ADDRESS TABLE
$SLTTA::.WORD	$SLTTB		; (A) ; ADDRESS OF SYSTEM LINE TABLE
$LLCTA::.WORD	$LLCTB		; (A) ; ADDRESSS OF LLC REVERSE MAPPING TABLE
$PDVNM::.WORD	PDVN'.		; (A) ; NUMBER OF PDV ENTRIES
$SLTNM::.WORD	SLTN'.		; (A) ; NUMBER OF SYSTEM LINES
	.NLIST
	.ENDM	EXPTAB
	.MACRO EXPWRD NAMPL,NAMDL,CNTN,UNTN
	.LIST
	.WORD	0	; (I) ; NAMPL LINE TABLE ADDRESS
	.WORD	0	; (I) ;	NAMDL LINE TABLE BIAS
	.WORD	0	; (I) ; NAMDL LINE TABLE ( VIRTUAL ) ADDRESS
	.BYTE	CNTN	; (D) ; CONTROLLER NUMBER ( NAMPL'CNTN )
	.BYTE	UNTN	; (D) ; MULTIPLEXER UNIT NUMBER
	.NLIST
	.ENDM EXPWRD
	.MACRO	FALSE,COMP,OP1,OP2
	$$GNCM	COMP,<OP1>,<OP2>,1
	.ENDM
	.MACRO	FALSEB,COMP,OP1,OP2
	$$GNCM	COMP,<OP1>,<OP2>,1,B
	.ENDM
.MACRO	FLUDF
INUSE	= 0.
LUN	= 1.
ADDR	= 2.
FILOPE	= 1.
DEVATT	= 2.
ENTLEN	= 4.
.ENDM
.MACRO	FLUMDF
.MCALL	CONFIG,SRDF,FDBDF$,FDRC$A,FDBK$A,FDOP$A,FDAT$A
.PSECT	FLUDAT,RW,D,GBL,REL,OVR
CONFIG
SRDF
	$$LUN	= FILLUN-1
FDBS:
INFDBS:	.REPT	F$INLU
	$$LUN	= $$LUN+1
	FDBDF$
	FDRC$A	FD.RWM
	FDBK$A	,512.,,,,SRAST
	FDOP$A	$$LUN,,,FO.RD
	.ENDR
IRFDBS:	.REPT	F$IRLU
	$$LUN	= $$LUN+1
	FDBDF$
	FDOP$A	$$LUN,,,FO.RD
	.ENDR
OTFDBS:	.REPT	F$OTLU
	$$LUN	= $$LUN+1
	FDBDF$
	FDRC$A	FD.RWM
	FDBK$A	,512.,,,,SRAST
	FDOP$A	$$LUN,,,FO.WRT
	.ENDR
ORFDBS:	.REPT	F$ORLU
	$$LUN	= $$LUN+1
	FDBDF$
	FDAT$A	R.VAR,FD.CR
	FDOP$A	$$LUN,,,FO.WRT
	.ENDR
	$$LUN	= FILLUN-1
LUNDB:
ILUNDB:	.REPT	F$INLU
	$$LUN	= $$LUN+1
	.BYTE	0
	.BYTE	$$LUN
	.WORD	FDBS+<S.FDB*<$$LUN-FILLUN>>
	.ENDR
ILUNEN	= .
IRLUDB:	.REPT	F$IRLU
	$$LUN	= $$LUN+1
	.BYTE	0
	.BYTE	$$LUN
	.WORD	FDBS+<S.FDB*<$$LUN-FILLUN>>
	.ENDR
IRLUEN	= .
OLUNDB:	.REPT	F$OTLU
	$$LUN	= $$LUN+1
	.BYTE	0
	.BYTE	$$LUN
	.WORD	FDBS+<S.FDB*<$$LUN-FILLUN>>
	.ENDR
OLUNEN	= .
ORLUDB:	.REPT	F$ORLU
	$$LUN	= $$LUN+1
	.BYTE	0
	.BYTE	$$LUN
	.WORD	FDBS+<S.FDB*<$$LUN-FILLUN>>
	.ENDR
ORLUEN	= .
.PSECT
.ENDM
	.MACRO	F1$	LB,F
 
	; LB - LABEL
	; F - FIELD NUMBER(S)
 
 
	.BYTE	19.		; OPCODE
	.BYTE	LB'C		; COUNT
LB:	.BYTE	F		; FIELD NUMBERS
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	F11DF$
	.ASECT
.=0
V.TRCT:	.BLKW	1
V.IFWI:	.BLKW	1
	.IF	DF,R$$11D
V.STD:	.BLKW	1
	.ENDC
V.FCB:	.BLKW	2
V.IBLB:	.BLKB	1
V.IBSZ:	.BLKB	1
	.BLKW	1
V.FMAX:	.BLKW	1
V.WISZ:	.BLKB	1
V.SBCL:	.BLKB	1
V.SBSZ:	.BLKW	1
V.SBLB:	.BLKB	1
V.FIEX:	.BLKB	1
	.BLKW	1
	.IF	DF,R$$11M
V.VOWN:	.BLKW	1
V.VPRO:	.BLKW	1
V.VCHA:	.BLKW	1
	.IFTF
V.FPRO:	.BLKW	1
	.IFT
V.VFSQ:	.BLKW	1
	.IFF
	.BLKW	1
	.ENDC
V.FRBK:	.BLKB	1
V.LRUC:	.BLKB	1
	.BLKW	1
	.IF	DF,R$$11D
V.LABL:	.BLKB	12.
	.ENDC
V.STAT:	.BLKB	1
	VC.IFW=	1
	VC.BMW=	2
V.FFNU:	.BLKB	1
V.LGTH:
	.ASECT
.=0
F.LINK:	.BLKW	1
	.IF	DF,R$$11D
F.FEXT:	.BLKW	1
F.STD:	.BLKW	1
	.ENDC
F.FNUM:	.BLKW	1
F.FSEQ:	.BLKW	1
	.BLKB	1
F.FSQN:	.BLKB	1
F.FOWN:	.BLKW	1
F.FPRO:	.BLKW	1
F.UCHA:	.BLKB	1
F.SCHA:	.BLKB	1
F.HDLB:	.BLKW	2
F.LBN:	.BLKW	2
F.SIZE:	.BLKW	2
F.NACS:	.BLKB	1
F.NLCK:	.BLKB	1
	S.STBK=.-F.LBN
F.STAT:
F.NWAC:	.BLKB	1
	.BLKB	1
	FC.WAC=100000
	FC.DIR=40000
	FC.CEF=20000
	FC.FCO=10000
F.DREF:	.BLKW	1
F.DRNM:	.BLKW	1
	.IF	DF,R$$11M
F.FEXT:	.BLKW	1
	.ENDC
F.FVBN:	.BLKW	2
F.LKL:	.BLKW	1
F.LGTH:
	.ASECT
.=0
W.CTL:	.BLKW	1
	WI.RDV=400
	WI.WRV=1000
	WI.EXT=2000
	WI.LCK=4000
	WI.DLK=10000
	WI.EXL=40000
	WI.BPS=100000
	.IF	DF,R$$11M
W.VBN:	.BLKB	1
W.WISZ:	.BLKB	1
	.BLKW	1
W.FCB:	.BLKW	1
	.ENDC
	.IF	DF,R$$11D
W.FCB:	.BLKW	1
W.STD:	.BLKW	1
W.VBN:	.BLKB	1
W.WISZ:	.BLKB	1
	.BLKW	1
	.ENDC
W.LKL:	.BLKW	1
W.RTRV:
	.ASECT
.=0
L.LNK:	.BLKW	1
L.WI1:	.BLKW	1
	.IF	DF,R$$11D
L.STD:	.BLKW	1
L.VB1:	.BLKW	2
L.VB2:	.BLKW	2
L.CNT:	.BLKB	1
	.BLKB	1
	.IFF
L.VB1:	.BLKB	1
L.CNT:	.BLKB	1
	.BLKW	1
	.ENDC
L.LGTH:
	.PSECT
	.MACRO	F11DF$
	.ENDM	F11DF$
	.ENDM	F11DF$
	.MACRO	F2$	LB,F,STRNG
 
	; LB - LABEL
	; F - FIELD NUMBER  (ONLY 1 ACCEPTED)
	; STRING - TEXT TO BE WRITTEN IN FIELD
 
	.ENABL	LSB
 
	.BYTE	20.		; OPCODE
	.BYTE	LB'C		; COUNT
LB:	.BYTE	F		; FIELD NUMBER
	.BYTE	LB'C-2		; SIZE OF TEXT
	.ASCII	STRNG
 
	LB'C=	.-LB
 
	.DSABL	LSB
 
	.ENDM
	.MACRO	F3$	LB,STRING
 
	.BYTE	21.		; OPCODE
	.BYTE	LB'C		; COUNT
LB:	.ASCII	STRING
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	F4$	LB,FIELDS
 
	; IF MORE THAN 1 FIELD IS USED, THEY MUST BE ENCLOSED IN <>'S
 
	.BYTE	22.		; OPCODE
	.BYTE	LB'C		; COUNT
LB:	.BYTE	FIELDS
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	F5$	LB,FIELDS
 
	; IF MORE THAN 1 FIELD IS USED, THEY MUST BE ENCLOSED IN <>'S
 
	.BYTE	23.		; OPCODE
	.BYTE	LB'C		; COUNT
LB:	.BYTE	FIELDS
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	F6$	LB,A,F
 
	; LB - LABEL
	; A - AREA
	; F - FIELD
 
	.BYTE	24.,2		; OPCODE, COUNT
	.BYTE	A		; AREA
	.BYTE	F		; FIELD NUMBER
 
	.ENDM
.MACRO	GCDF
IS$INZ	= 1.
IS$INP 	= 2.
IS$SEL	= 3.
IS$ABO	= 4.
IS$FIN	= 5.
.MACRO	GCDF
.ENDM
.ENDM
	.MACRO GCLDF$	AA,AF,BB,CC,DD,EE,FF,GG,HH
 
 
; MACRO CALLS
 
	.IF NB AA		; ASSEMBLE FOR ROOT SECTION ONLY
 
	.IF NB AF
	EF=AF			; USE SPECIFIED EVENT FLAG
	.IFF
	EF=AA			; OR DEFAULT TO LUN
	.ENDC
 
	.PSECT	$$$GCL		; NAME PSECT ( GENERATE DATA OUT OF LINE )
 
	.MCALL	GMCR$,WTSE$,QIO$,ALUN$,FDBDF$,FDOP$A,FDRC$A,NMBLK$,CSI$,SETF$
	.GLOBL G.MCRB,Q.IOAE,Q.IOFN,Q.IOPL,Q.IOSB
 
$CLMCR::GMCR$			; GET MCR COMMAND LINE DPB
$CLQIO::QIO$	0,AA,EF,,$CLMCR+G.MCRB+72.,,<0,0> ; QIO DPB
$CLWEF::WTSE$	EF		; WAIT FOR FLAG DPB ( I/O COMPLETION )
$CLSEF::SETF$	EF		; SET FLAG DPB ( AFTER GET$ )
$CLASN::ALUN$	AA,TI,0		; REASSIGN LUN DPB
$CLAST::.WORD	0		; AST SERVICE ROUTINE POINTER
$PSHPT::.WORD	$CLMCR+G.MCRB	; POINTER TO TOP OF STACK OF FILES
$CLEVL::.BYTE	0		; START AT TI:/MCR LEVEL
	.BYTE	0		; FLAG FOR QUEUED FILES
$ASTLV::.BYTE	0		; AST LEVEL ( 0 = NO ASTS PENDING )
	.EVEN
	CSI$			; DEFINE C.SIZE
$CLCSI::.BLKB	C.SIZE		; CSI CONTROL BLOCK
$CLFDB::FDBDF$			; INPUT FILE FDB
	FDOP$A	AA,$CLCSI+C.DSDS,DFLTNB ; ASSIGN LUN
DFLTNB:	NMBLK$	BB,CMD,,SY,0	; DEFAULT VALUES
	.IF NB CC
	.IF NB DD
	FDRC$A	,CC,DD-1	; USER SPECIFIED BUFFER AND SIZE
	.IFF
	.ERROR	IF USER SPECIFIES BUFFER, THEN SIZE MUST ALSO BE SPEC'ED
	.ENDC
	.IFF
	.IF NB DD
	FDRC$A	,BUFFER,DD-1	; USER SPECIFIED SIZE OF INTERNAL BUFFER
	.IFF
	FDRC$A	,BUFFER,80.	; DEFAULT BUFFER AND SIZE
	.ENDC
	.ENDC
$CLBUF	==$CLFDB+F.URBD+2	; POINTER TO DATA BUFFER
$CLSIZ	==$CLFDB+F.URBD		; BUFFER SIZE IN BYTES
$CLIOS	==$CLQIO+Q.IOSB		; GCL I/O STATUS BLOCK ( IOS/LENGTH )
	DEFFLG=CL.CMT!CL.IND!CL.EXT!CL.ATT!CL.LCC ; DEFAULT FLAG VLAUES
	.IF NB EE
	.IF NB FF
$CLFLG::.WORD	DEFFLG!EE&^C<FF>; USER DEFINED OPTIONS
	.IFF
$CLFLG::.WORD	DEFFLG!EE	; USE DESIRED EXTRAS
	.ENDC
	.IFF
	.IF NB FF
$CLFLG::.WORD	DEFFLG&^C<FF>	; USER DOESN'T WANT THESE OPTIONS
	.IFF
$CLFLG::.WORD	DEFFLG		; DEFAULT ALL THE WAY
	.ENDC
	.ENDC
	.IF NB BB
$CLPMT::.WORD	$CLPRM		; POINTER TO USER SPECIFIED DEFAULT PROMPT
	.IFF
$CLPMT::.WORD	0		; POINTER TO PROMPT STRING
	.ENDC
	.IF NB GG
$CLSRV::.WORD	GG		; AST SERVICE SUBROUTINE
	.IFF
$CLSRV::.WORD	$CLRTN		; POINT AT A FAKE AST SERVICE ROUTINE
	.ENDC
	.IF B CC
	.IF B DD
BUFFER:	.BLKB	80.		; INTERNALLY GENERATED BUFFER
	BUFLEN=79.
	.IFF
BUFFER:	.BLKB	DD		; USER SPECIFIED BUFFER SIZE
	BUFLEN=.-BUFFER-1
	.ENDC
	.ENDC
	.EVEN
	.IF NB BB
$CLPRM:	.BYTE	12,15		; LINE FEED, CARRIAGE RETURN
	.ASCII	"BB"		; USER DEFINED DEFAULT PROMPT STRING
	.ASCIZ	">"
	DFTLEN=.-$CLPRM
	.ENDC
	.EVEN
 
	.PSECT	HH		; BACK TO USER PSECT
 
	.ENDC			; END OF ROOT SEGMENT DATA
 
	.MCALL	DIR$,GCL$	; ALWAYS .MCALL THESE
 
; FLAG WORD BIT DEFINITIONS ( COMMAND LINE RETURNED W/O MODS UNLESS
;		A MODIFIER BIT IS SET )
 
CL.CMT=1	; ENABLE COMMENT LINES
CL.IND=2	; ENABLE INDIRECTION INDICATOR "@"
CL.RNE=4	; READ WITHOUT ECHOING
CL.EXT=10	; ENABLE EXTENDED COMMAND LINE SUPPORT
CL.LCC=20	; CONVERT TO UPPER CASE
CL.EIF=40	; ECHO INDIRECT PROMPTS AND RESPONSES (IF CL.RNE CLEAR)
CL.OPN=100	; LEAVE INDIRECT FILES OPEN
CL.ATT=200	; ATTACH TI: WHENEVER POSSIBLE USING LUN ASSIGNED TO GCL
 
CL.AST=4000	; ENABLE ASYCHRONOUS COMPLETION
CL.CAS=20000	; INTERNAL STATE ( MULTIPLE ASTS IN PROGRESS )
CL.EXN=40000	; INTERNAL STATE ( EXTENDED COMMAND LINE MODE )
CL.XIT=100000	; INTERNAL STATE ( EXIT NEXT TIME WE GET TO LEVEL 0 )
 
	.ENDM	GCLDF$
	.MACRO GCL$ AA,BB,CC,DD
	.IF NB AA
	MOV	AA,$CLPMT	; USER SPECIFIED NEW PROMPT STRING
	.ENDC
	.IF NB BB
	MOV	BB,$CLBUF	; USER SPECIFIED DESTINATION
	.IF B CC
	.ERROR GCL$ MACRO "BUFFER SIZE" ARGUMENT MUST BE INCLUDED
	.IFF
	MOV	CC,$CLSIZ	; SIZE OF USER SPECIFIED BUFFER
	.ENDC
	.ENDC
	.IF NB DD
	MOV	DD,$CLIOS
	.ENDC
	CALL	$GCLEP			; CALL SUBROUTINE
	.ENDM GCL$
.MACRO	GCMDF
.MCALL	CONFIG
.PSECT	GCDAT,RW,D,GBL,REL,OVR
MODULE	= 0.
STATE	= 2.
CONFIG
CBADDR:	.WORD	0
CMDSOR: .WORD	0
WINDUP: .WORD	0
CTEXT:
NCLKIX	= .-CTEXT
.IF	NE FS$NET
	.WORD	CTNTCM
.ENDC
INCMIX	= .-CTEXT
.IF	NE FS$INT
	.WORD	CTINCM
.ENDC
CTEXTE	= .-CTEXT
.IF	NE FS$INT
CTINCM:	.WORD	GCINCM
ISTATE:	.WORD	0
IBUFAD: .WORD	0
IBUFLN: .WORD	300.
ICMDNM: .WORD	1.
.ENDC
.IF	NE FS$NET
CTNTCM: .WORD	GCNTCM
NSTATE:	.WORD	0
.ENDC
.PSECT
.ENDM
	.MACRO	GETAD ADDR,SIZE,BLOCK
	.MCALL RAND
	.IF NB	BLOCK
	MOV	BLOCK,$RBLCK
	.ENDC
	RAND	$GETAD,ADDR,SIZE
	.ENDM
	.MACRO	GETRC ADDR,SIZE
	.MCALL	RAND
	RAND	$GETRC,ADDR,SIZE
	.ENDM
	.MACRO	GETRV ADDR,SIZE
	.MCALL RAND
	RAND	$GETRV,ADDR,SIZE
	.ENDM
	.MACRO	GLNW$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$
	.IF B	<LUN>
	QDPB$	3,16670,<.MBXLU>,EFN,,IOST,AST,<PRMLST>
	.IFF
	QDPB$	3,16670,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDC
	.ENDM	GLNW$
	.MACRO	GLNW$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$E
	QDPB$E	LABEL,3,#16670,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	GLNW$E
	.MACRO	GLNW$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$S
	.IF B	<LUN>
	QDPB$S	3,#16670,<#.MBXLU>,EFN,,IOST,AST,<PRMLST>
	.IFF
	QDPB$S	3,#16670,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDC
	.ENDM	GLNW$S
	.MACRO	GLN$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$
	.IF B	<LUN>
	QDPB$	1,16670,<.MBXLU>,EFN,,IOST,AST,<PRMLST>
	.IFF
	QDPB$	1,16670,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDC
	.ENDM	GLN$
	.MACRO	GLN$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$E
	QDPB$E	LABEL,1,#16670,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	GLN$E
	.MACRO	GLN$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$S
	.IF B	<LUN>
	QDPB$S	1,#16670,<#.MBXLU>,EFN,,IOST,AST,<PRMLST>
	.IFF
	QDPB$S	1,#16670,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDC
	.ENDM	GLN$S
.MACRO	GNDMDF
.MCALL	NETDF$
NETDF$
.PSECT	GNDDAT,RW,D,GBL,REL,OVR
IOSB:	.WORD	0,0
GNDCNT:	.WORD	0
CONBLK:	.BLKB	N.CBL
GNDSTA:	.BYTE	0
LUNSAV:	.BYTE	0
.PSECT
.ENDM
	.MACRO	GNDW$	LUN,EFN,IOST,AST,PRMLST,FLAG
	.MCALL	QDPB$,$GNDF$
	$GNDF$	FLAG
	.IF B	<LUN>
	QDPB$	3,<$$$FLG>,<.MBXLU>,EFN,,IOST,AST,<PRMLST>
	.IFF
	QDPB$	3,<$$$FLG>,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDC
	.ENDM	GNDW$
	.MACRO	GNDW$E	LABEL,LUN,EFN,IOST,AST,PRMLST,FLAG
	.MCALL	QDPB$E,$GNDF$
	$GNDF$	FLAG
	QDPB$E	LABEL,3,<#$$$FLG>,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	GNDW$E
	.MACRO	GNDW$S	LUN,EFN,IOST,AST,PRMLST,FLAG
	.MCALL	QDPB$S,$GNDF$
	$GNDF$	FLAG
	.IF B	<LUN>
	QDPB$S	3,<#$$$FLG>,<#.MBXLU>,EFN,,IOST,AST,<PRMLST>
	.IFF
	QDPB$S	3,<#$$$FLG>,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDC
	.ENDM	GNDW$S
	.MACRO	GND$	LUN,EFN,IOST,AST,PRMLST,FLAG
	.MCALL	QDPB$,$GNDF$
	$GNDF$	FLAG
	.IF B	<LUN>
	QDPB$	1,<$$$FLG>,<.MBXLU>,EFN,,IOST,AST,<PRMLST>
	.IFF
	QDPB$	1,<$$$FLG>,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDC
	.ENDM	GND$
	.MACRO	GND$E	LABEL,LUN,EFN,IOST,AST,PRMLST,FLAG
	.MCALL	QDPB$E,$GNDF$
	$GNDF$	FLAG
	QDPB$E	LABEL,1,<#$$$FLG>,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	GND$E
	.MACRO	GND$S	LUN,EFN,IOST,AST,PRMLST,FLAG
	.MCALL	QDPB$S,$GNDF$
	$GNDF$	FLAG
	.IF B	<LUN>
	QDPB$S	1,<#$$$FLG>,<#.MBXLU>,EFN,,IOST,AST,<PRMLST>
	.IFF
	QDPB$S	1,<#$$$FLG>,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDC
	.ENDM	GND$S
	.MACRO	GTCNT$ RQCNT
	.MCALL	$$GETB
	$$GETB	C.NSP(R4),RQCNT
	.ENDM
	.MACRO	GTLLA$ LLA
	.MCALL	$$GETB
	$$GETB	C.NSP(R4),LLA
	.ENDM
	.MACRO	GTSEG$ SEGSIZ
	MOV	C.FLG1(R4),SEGSIZ
	.ENDM
	.MACRO	GTULA$ ULA
	.MCALL	$$GETB
	$$GETB	C.LIN(R4),ULA
	.ENDM
	.MACRO	HDRDF$,L,B
	.ASECT
.=0
H.CSP:'L'.BLKW	1
H.HDLN:'L'.BLKW	1
H.EFLM:'L'.BLKW	2
H.CUIC:'L'.BLKW	1
H.DUIC:'L'.BLKW	1
H.IPS:'L'.BLKW	1
H.IPC:'L'.BLKW	1
H.ISP:'L'.BLKW	1
H.ODVA:'L'.BLKW	1
H.ODVL:'L'.BLKW	1
H.TKVA:'L'.BLKW	1
H.TKVL:'L'.BLKW	1
H.PFVA:'L'.BLKW	1
H.FPVA:'L'.BLKW	1
H.RCVA:'L'.BLKW	1
H.EFSV:'L'.BLKW	1
H.FPSA:'L'.BLKW	1
H.WND:'L'.BLKW	1
H.DSW:'L'.BLKW	1
H.FCS:'L'.BLKW	1
H.FORT:'L'.BLKW	1
H.OVLY:'L'.BLKW	1
H.VEXT:'L'.BLKW	1
H.SPRI:'L'.BLKB	1
H.NML:'L'.BLKB	1
H.RRVA:'L'.BLKW	1
	.BLKW	3
H.GARD:'L'.BLKW	1
H.NLUN:'L'.BLKW	1
H.LUN:'L'.BLKW	2
.=0
W.BPCB:'L'.BLKW	1
W.BLVR:'L'.BLKW	1
W.BHVR:'L'.BLKW	1
W.BATT:'L'.BLKW	1
W.BSIZ:'L'.BLKW	1
W.BOFF:'L'.BLKW	1
W.BFPD:'L'.BLKB	1
W.BNPD:'L'.BLKB	1
W.BLPD:'L'.BLKW	1
W.BLGH:'L'
	.PSECT
	.MACRO	HDRDF$	X,Y
	.ENDM
	.ENDM
	.MACRO	HLDDF$
	.ASECT
	.=0
	.BLKW	1		; LINK WORD
H$OVR:	.BLKW	1		; OVERLAY ENTRY POINT ADDRESS
H$ERX:	.BLKB	1		; ERROR INDEX
H$ERC:	.BLKB	1		; ERROR CODE
H$NODE:	.BLKW	3		; NODE NAME IN ASCII
				; CONNECT PARAMETERS
H$TASK:	.BLKW	2		; TASK NAME
  EB$LEN = .+2
H$PBAS:	.BLKW	1		; PARTITION BASE ADDRESS (0=MAPPED)
H$PSIZ:	.BLKW	1		; PARTITION SIZE (BLOCKS MAPPED, BYTES UNMAPPED)
H$GP:	.BLKB	1		; SLD2 G/P SUPPORT (0=NO)
H$TYP:	.BLKB	1		; TRANSFER TYPE (0=LOAD, 1=CKP READ, 2=CKP)
				; WORD FIELDS
H$ACSB:	.BLKW	2		; CONNECT ACCEPT IOSB
H$DISK:	.BLKW	1		; DISK BLOCKS REMAINING TO BE TRANSFERRED
H$LBN:	.BLKW	2		; LOGICAL BLOCK NUMBER
H$LUN:	.BLKW	1		; FIRST LUN BLOCK LBN
H$MBX:	.BLKW	1		; COPY OF FIRST WORD OF MAILBOX
H$NET:	.BLKW	1		; NETWORK BLOCKS REMAINING TO BE TRANSFERRED
H$STAT:	.BLKW	1		; STATUS
  HS$ACC = 1		; CONNECTION HAS BEEN ACCEPTED
  HS$DIO = 2		; DISK I/O'S STILL PENDING
  HS$DR1 = 4		; FIRST DISK READ HAS BEEN DONE
  HS$DSC = 10		; LINK HAS BEEN DISCONNECTED
  HS$ERR = 20		; ERROR OF SOME SORT HAS OCCURRED
  HS$FIL = 40		; "HTASK$" CAME FROM MAPPING FILE, NOT TASK
  HS$GP  = 100		; "HTASK$" CAME FROM GENERAL-PURPOSE LIST
  HS$LB1 = 200		; DISK LUN BLOCK 1 TRANSFER STILL PENDING
  HS$LB2 = 400		; DISK LUN BLOCK 2 TRANSFER STILL PENDING
  HS$LFX = 1000		; LUN FIXING NEEDED
  HS$NIO = 2000		; NETWORK I/O'S STILL PENDING
  HS$NL1 = 4000		; NETWORK LUN BLOCK 1 TRANSFER STILL PENDING
  HS$NL2 = 10000	; NETWORK LUN BLOCK 2 TRANSFER STILL PENDING
  HS$TRM = 20000	; LINK HAS BEEN TERMINATED
    HS$ACT = HS$DIO ! HS$LB1 ! HS$LB2 ! HS$NIO ! HS$NL1 ! HS$NL2
				; BYTE FIELDS
H$DLU:	.BLKB	1		; DISK LUN NUMBER
H$IOC:	.BLKB	1		; ACTIVE I/O COUNT
H$NBF:	.BLKB	1		; BUFFERING LEVEL
H$NLU:	.BLKB	1		; NETWORK LUN NUMBER
	.EVEN
H$EMB:	.BLKB	EB$LEN		; ERROR MESSAGE BLOCK
H$LEN:	.BLKW	1		; CONTROL BLOCK ADDRESS (LENGTH OF FIXED PART)
H$BUF:	.BLKW	1		; BUFFER ADDRESS
H$IOSB:	.BLKW	2		; IOSB
	.PSECT
	.ENDM	HLDDF$
	.MACRO	HLDTB$	TYPE
	.MCALL	HNODE$,HTASK$
	.MACRO	LABEL$	A,B
A'B:
	.ENDM	LABEL$
	.MACRO	THRED$	A,B
	.IF DF	A'B
	.WORD	A'B
	.IFF
	.WORD	0
	.ENDC
	.ENDM	THRED$
.NODES=0
.TASKS=0
.IIF NDF,.GPTSK, .GPTSK=0
	.IF NB	TYPE
	.IF IDN	TYPE,<TASK>
	.PSECT	.HTSK
$HTSK::	CLR	R4
	JMP	$FFS
	.IFF
	.ERROR			; ILLEGAL ARGUMENT
	.ENDC
	.ENDC
	.PSECT	.HTAB
.HLDTB::.RAD50	"HLD"
	.WORD	.GPTSK
	THRED$	ND,\.NODES
	.ENDM	HLDTB$
	.MACRO	HNODE$	NODNAM
	LABEL$	ND,\.NODES
.NODES=.NODES+1
.TASKS=.TASKS+1
	THRED$	ND,\.NODES
	THRED$	TK,\.TASKS
	.ASCII	"NODNAM"
	.NCHR	.SIZE,NODNAM
	.IF GT	.SIZE-6
	.ERROR			; NODE NAME TOO LONG
	.ENDC
	.REPT	6-.SIZE
	.ASCII	" "
	.ENDR
	.ENDM	HNODE$
.MACRO	HOSDF
ENTLEN	= 11.
TABBEG	= 7.
.ENDM
.MACRO	HOSMAC
.MCALL	CONFIG
CONFIG
NODLEN	= 6.
.MACRO	HOSBEG DEFHOS
HOSDB::
NODENT	DEFHOS
.ENDM
.MACRO	HOSEND
.REPT	F$EXHO
  HOSENT
.ENDR
HOSDBE::
.EVEN
.ENDM
.MACRO	HOSENT DEVICE,CONT,LINE,STAT,HOST
.IF     NB DEVICE
  .BYTE   DEVICE,CONT,LINE,STAT
  NODENT  <HOST>
.IFF
  .BYTE   -1,0,0,0
  NODENT
.ENDC
.ENDM
.MACRO	NODENT NAME
.NCHR   $$TEMP,<NAME>
.BYTE   $$TEMP
.ASCII  /'NAME'/
$$TEMP  = NODLEN-$$TEMP
.IF     LT $$TEMP
  .ERROR
.IFF
  .REPT   $$TEMP
    .BYTE   0
  .ENDR
.ENDC
.ENDM
.ENDM
	.MACRO	HTASK$	TSKNAM,FILNAM,TYPE
	.IIF EQ,.NODES, .GPTSK=.GPTSK+1
	LABEL$	TK,\.TASKS
.TASKS=.TASKS+1
	THRED$	TK,\.TASKS
	.RAD50	"TSKNAM"
	.NCHR	.SIZE,TSKNAM
	.IF GT	.SIZE-6
	.ERROR			; TASK NAME TOO LONG
	.ENDC
	.IF LE	.SIZE-3
	.WORD	0
	.ENDC
	.IF B	TYPE
	.BYTE	0
	.IFF
	.IF EQ	.NODES
	.IF IDN	TYPE,<MAP>
	.BYTE	0
	.IFF
	.IF IDN	TYPE,<UNM>
	.BYTE	1
	.IFF
	.ERROR			; ILLEGAL THIRD ARGUMENT
	.ENDC
	.ENDC
	.IFF
	.IF IDN	TYPE,<LUN>
	.BYTE	1
	.IFF
	.ERROR			; ILLEGAL THIRD ARGUMENT
	.ENDC
	.ENDC
	.ENDC
	.ASCIZ	"FILNAM"
	.EVEN
	.ENDM	HTASK$
	.MACRO HWDDF$,L,B
MPCSR='B'177746
MPAR='B'172100
PIRQ='B'177772
PR0='B'0
PR1='B'40
PR4='B'200
PR5='B'240
PR6='B'300
PR7='B'340
PS='B'177776
SWR='B'177570
TPS='B'177564
	.IF DF	E$$EAE
AC='B'177302
MQ='B'177304
SC='B'177310
	.ENDC
	.IF DF	M$$MGE
KDSAR0='B'172360
KDSDR0='B'172320
KISAR0='B'172340
KISAR5='B'172352
KISAR6='B'172354
KISAR7='B'172356
KISDR0='B'172300
KISDR6='B'172314
KISDR7='B'172316
SISDR0='B'172200
UDSAR0='B'177660
UDSDR0='B'177620
UISAR0='B'177640
UISAR4='B'177650
UISAR5='B'177652
UISAR6='B'177654
UISAR7='B'177656
UISDR0='B'177600
UISDR4='B'177610
UISDR5='B'177612
UISDR6='B'177614
UISDR7='B'177616
UBMPR='B'170200
CMODE='B'140000
PMODE='B'30000
SR0='B'177572
SR3='B'172516
	.ENDC
FE.EXT='B'1
FE.MUP='B'2
FE.EXV='B'4
FE.DRV='B'10
FE.PLA='B'20
FE.CAL='B'40
FE.PKT='B'100
FE.EXP='B'200
FE.LSI='B'400
FE.MXT='B'40000
FE.NLG='B'100000
	.MACRO	HWDDF$	X,Y
	.ENDM
	.ENDM
.MACRO	IBUFDF
B$TLEN	= 8.
B$NLEN	= 6.
B$CLEN	= 82.
B$PLEN	= 128.
B$PNTR	= 0.
B$CPTR	= B$PNTR+2
B$CLLN	= B$CPTR+2
B$CRNM	= B$CLLN+2
B$PPTR	= B$CRNM+2
B$PCNT	= B$PPTR+2
B$TYPE	= B$PCNT+2
B$TCNT	= B$TYPE+2
B$TNAM	= B$TCNT+2
B$ECNT	= B$TNAM+B$TLEN
B$ENAM	= B$ECNT+2
B$CBUF	= B$ENAM+B$NLEN
B$PBUF	= B$CBUF+B$CLEN
B$STA	= B$PBUF+B$PLEN
B$NPTR	= B$STA+2
B$LINK	= B$NPTR+2
B$BCNT	= B$LINK+2
B$BTYP	= B$BCNT+2
B$BSTA	= B$BTYP+2
B$BADR	= B$BSTA+2
B$BLEN	= B$BADR+2
B$TBUF	= B$BLEN+2
.ENDM
	.MACRO	IF
	$$PUSH	$$STNM
$$STNM=$$PRST+1
$$PRST=$$STNM
	$$PUSH	$$TRNM
$$TRNM=77
	.ENDM
	.MACRO	INHIB$
 
	.IF DF	L$$SI1
 
	MFPS	-(SP)		; SAVE CURRENT PRIORITY
	MTPS	#PR7		;;; DISABLE INTERRUPTS
 
	.IFF
 
	MOV	@#PS,-(SP)	; SAVE CURRENT PRIORITY
	MOVB	#PR7,@#PS	;;; DISABLE INTERRUPTS
 
	.ENDC
 
	.ENDM
.MACRO	INTCFG
YES	= 1
NO	= 0
O$TELL	= YES					;AP0001
O$TRNS	= YES					;AP0001
O$DROP	= YES					;AP0001
O$LPAR	= YES					;AP0001
O$LBCK	= YES					;AP0001
O$NOFF	= YES					;AP0001
I$HELP	= YES
I$STEX	= O$TELL
I$STST	= YES
I$STLG	= YES					;AP0001
I$STHS	= YES
I$STPW	= YES
I$STLN	= YES
I$STPC	= YES
I$STLL	= YES
.IF	DF	R$$11D!I$$AS
I$STCX	= NO
.IFF
I$STCX	= YES
.ENDC
I$CLHS	= YES
I$CLPW	= YES
I$CLLN	= YES
I$CLPC	= YES
.IF	DF	R$$11D!I$$AS
I$CLCX	= NO
.IFF
I$CLCX	= YES
.ENDC
I$LDRM	= YES
I$LDVI	= YES
I$LDKN	= NO
I$LPRM	= YES
I$LPLN	= YES
I$SHCT	= YES
I$SHST	= YES
I$SHEX	= YES					;AP0001
I$SHQU	= NO
I$SHLK	= NO
I$ZERO	= YES
I$EXIT	= YES
I$SET	= I$STEX+I$STST+I$STLG+I$STHS+I$STPW+I$STLN+I$STPW+I$STLL+I$STCX
I$CLR	= I$CLHS+I$CLPW+I$CLLN+I$CLPC+I$CLCX
I$LOAD	= I$LDRM+I$LDVI+I$LDKN
I$LOOP	= I$LPRM+I$LPLN
I$SHOW	= I$SHCT+I$SHST+I$SHEX+I$SHQU+I$SHLK
K$CEX	= NO
K$CLR	= NO
K$CNT	= NO
K$CNTS	= NO
K$CSR	= NO
K$DSAB	= NO
K$ECHO	= NO
K$ENAB	= NO
K$EXEC	= NO
K$EXIT	= NO
K$FDX	= NO
K$FOR	= NO
K$FROM	= NO
K$HDX	= NO
K$HELP	= NO
K$HOST	= NO
K$INCR	= NO
K$KNOW	= NO
K$LENG	= NO
K$LINE	= NO
K$LINS	= NO
K$LNKS	= NO
K$LOAD	= NO
K$LOCL	= NO
K$LOGG	= NO
K$LOOP	= NO
K$LBCK	= NO
K$MAIN	= NO
K$MIXD	= NO
K$NAME	= NO
K$NONE	= NO
K$NMBR	= NO
K$OBJ	= NO
K$OFF	= NO
K$ON	= NO
K$ONES	= NO
K$OPER	= NO
K$PAR	= NO
K$PART	= NO
K$PASS	= NO
K$PRI	= NO
K$PROC	= NO
K$QUE	= NO
K$RCEV	= NO
K$REMT	= NO
K$REMS	= NO
K$SET	= NO
K$SHOW	= NO
K$SHUT	= NO
K$STA	= NO
K$STAT	= NO
K$TELL	= O$TELL
K$TO	= NO
K$TOP	= NO
K$XMIT	= NO
K$VECT	= NO
K$VIA	= NO
K$WITH	= NO
K$ZERO	= NO
K$ZROS	= NO
.MACRO	CMDFLG FLAG,KYFLGS
.IF	NE FLAG
  .IRP	  KEYFLG,<KYFLGS>
    K$'KEYFLG=K$'KEYFLG+1
  .ENDM
.ENDC
.ENDM
CMDFLG	I$HELP,<HELP>
CMDFLG	I$STEX,<EXEC,SET>
CMDFLG	I$STST,<KNOW,LINE,LINS,LOCL,LBCK,MAIN,OFF,ON,SET,SHUT,STA>
CMDFLG	I$STLG,<KNOW,LINE,LINS,LOCL,LOGG,MAIN,OFF,ON,OPER,SET,STA>
CMDFLG	I$STHS,<FOR,HOST,SET>
CMDFLG	I$STPW,<PASS,RCEV,SET,XMIT>
CMDFLG	I$STLN,<CSR,ECHO,FDX,HDX,LINE,PRI,SET,TOP,VECT>
CMDFLG	I$STPC,<ECHO,INCR,PART,PROC,SET,TOP>
CMDFLG	I$STLL,<DSAB,ENAB,LBCK,LOCL,SET>
CMDFLG	I$STCX,<CEX,SET>
CMDFLG	I$CLHS,<CLR,FOR,HOST>
CMDFLG	I$CLPW,<CLR,PASS,RCEV,XMIT>
CMDFLG	I$CLLN,<CLR,LINE>
CMDFLG	I$CLPC,<CLR,PROC>
CMDFLG	I$CLCX,<CEX,CLR>
CMDFLG	I$LDRM,<FROM,HOST,LOAD,NAME,NONE,NMBR,PAR,PASS,REMT,VIA>
CMDFLG	I$LDVI,<FROM,HOST,LOAD,NAME,NONE,NMBR,PAR,PASS,VIA>
CMDFLG	I$LDKN,<KNOW,LOAD>
CMDFLG	I$LPRM,<CNT,LENG,LOOP,MIXD,REMT,ONES,WITH,ZROS>
CMDFLG	I$LPLN,<CNT,LENG,LINE,LOOP,MIXD,ON,ONES,WITH,ZROS>
CMDFLG	I$SHCT,<CNTS,KNOW,LINE,LINS,LOCL,REMT,REMS,SHOW,TO>
CMDFLG	I$SHST,<KNOW,LINE,LINS,LOCL,REMT,REMS,SHOW,STAT,TO>
CMDFLG	I$SHEX,<EXEC,SHOW>
CMDFLG	I$SHQU,<SHOW,QUE>
CMDFLG	I$SHLK,<LNKS,NMBR,OBJ,REMT,SHOW>
CMDFLG	I$ZERO,<KNOW,LINE,LINS,LOCL,REMT,REMS,ZERO>
CMDFLG	I$EXIT,<EXIT>
.ENDM
	.MACRO	ITBDF$	L,B,SYSDEF
	.IF DF	A$$TRP
	.MCALL	PKTDF$
	PKTDF$
	.ENDC
	.ASECT
	.=0
X.LNK:'L' .BLKW	1
X.JSR:'L' JSR	R5,@#0
X.PSW:'L' .BLKB	1
	.BLKB	1
X.ISR:'L' .BLKW	1
X.FORK:'L'
	.BLKW	1
	.BLKW	1
	.BLKW	1
	.BLKW	1
	.IF DF	M$$MGE
X.REL:'L' .BLKW	1
	.ENDC
X.DSI:'L' .BLKW	1
X.TCB:'L' .BLKW	1
	.IF NB	SYSDEF
	.IF DF	A$$TRP
	.BLKW	1
X.AST:'L' .BLKB	A.PRM
	.ENDC
X.VEC:'L' .BLKW	1
X.VPC:'L' .BLKW	1
X.LEN:'L'
	.ENDC
	.PSECT
.MACRO	ITBDF$	X,Y,Z
.ENDM	ITBDF$
.ENDM	ITBDF$
	.MACRO	I1$	LB,FLAGS,FNKYS
 
	.BYTE	25.		; OPCODE
	.BYTE	LB'C		; COUNT
LB:	.BYTE	FLAGS
 
	.IF	B,<FNKYS>
	.IFF
 
	.BYTE	FNKYS		; FUNCTION KEYS ENABLED
 
	.ENDC
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	I2$	LB
 
	.BYTE	26. , 0		; OPCODE, COUNT
 
	.ENDM
	.MACRO	I3$	LB
 
	.BYTE	27. , 0		; OPCODE, COUNT
 
	.ENDM
	.MACRO	I4$	LB
 
	.BYTE	28. , 0		; OPCODE, COUNT
 
	.ENDM
	.MACRO	I5$	LB,KEY,FIELDS
 
	; IF MORE THAN 1 FIELD IS TO BE MODIFIED, THEY MUST BE ENCLOSED IN <>'S
 
	.BYTE	29.		; OP CODE
	.BYTE	LB'C		; COUNT
LB:	.BYTE	KEY		; FUNCTION-KEY
	.BYTE	FIELDS
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	I6$	LB,KEY,FIELDS
 
	; IF MORE THAN 1 FIELD IS TO BE MODIFIED, THEY MUST BE ENCLOSED IN <>'S
 
LB:	.BYTE	30.		; OPCODE
	.BYTE	LB'C		; COUNT
1$:	.BYTE	KEY		; FUNCTION-KEY
	.BYTE	FIELDS
 
	LB'C=	.-1$
 
	.ENDM
	.MACRO	JMPPROC NAME
	$$GEN1	,JMP,NAME
	.ENDM
.MACRO	KDPDF$	LST
	.IIF NB	<LST>,	.LIST
	.MCALL	TMPDF$
	TMPDF$
	.ASECT
;---------------------------------------------------------------;
;	K M C - 1 1    D E V I C E    L I N E    T A B L E	;
;---------------------------------------------------------------;
.=0
CMIRI:	.INT1	$CDIRI	; INPUT  INTERRUPT CALL SEQUENCE
CMIPR:	.PRI		; INPUT  DEVICE PRIORITY FOR $INTSX
CMORI:	.INT2	$CDORI	; OUTPUT INTERRUPT CALL SEQUENCE
CMOPR:	.PRI		; OUTPUT DEVICE PRIORITY FOR $INTSX
CMCSR:	.CSR		; KMC-11 CSR ADDRESS [SEL 0]
CMSWT:	.BLKW	1	; KMC-11 CONTROL SWITCHES
CMIQH:	.LSTHD		; KMC-11 INPUT INTERRUPT REQUEST QUEUE
CMKQH:	.LSTHD		; KMC-11 KILL I/O IN PROGRESS QUEUE
CMLEN::			; KMC-11 DEVICE TABLE LENGTH
;---------------------------------------------------------------;
;	D U P - 1 1    D E V I C E    L I N E    T A B L E	;
;---------------------------------------------------------------;
.=0
CTLTW:	.BLKW	1	; LONG TIMER WORD
CTCSR:	.SECSR		; DUP-11 CSR ADDRESS [SEL 0]
CTFLG:	.BLKW	1	; DUP-11 CONTROL FLAGS
CTDUP:	.UNB		; DUP-11 NUMBER (0-17 OCTAL)
CTSLN:	.SLNB		; DUP-11 SYSTEM LINE NUMBER
CTCHR:	.DVCHA		; DUP-11 LINE CHARACTERISTICS (TWO WORDS)
CTLOG:	.BLKW	1	; EVENT LOGGING DESTINATION
CTCTL:	.BLKW	1	; STATION ADDRESS + CONTROL-IN FLAGS
CTITQ:	.LSTHD		; INACTIVE TRANSMIT CCB QUEUE
CTTA1:	.BLKW	1	; TRANSMIT CCB ACTIVE ON DESCRIPTOR #1
CTTD1:	.BLKW	3	; TRANSMIT BUFFER DESCRIPTOR #1
CTTA2:	.BLKW	1	; TRANSMIT CCB ACTIVE ON DESCRIPTOR #2
CTTD2:	.BLKW	3	; TRANSMIT BUFFER DESCRIPTOR #2
CTRA1:	.BLKW	1	; RECEIVE CCB ACTIVE ON DESCRIPTOR #1
CTRD1:	.BLKW	3	; RECEIVE BUFFER DESCRIPTOR #1
CTRA2:	.BLKW	1	; RECEIVE CCB ACTIVE ON DESCRIPTOR #2
CTRD2:	.BLKW	3	; RECEIVE BUFFER DESCRIPTOR #2
	.IF DF	X$$ITO
CTITM:	.BLKB	1	; TEMP STORAGE TIMER MUX.
	.ENDC
	.EVEN
CTLEN::			; DUP-11 DEVICE LINE TABLE LENGTH
	.PSECT
	.IIF NB	<LST>,	.NLIST
.ENDM	KDPDF$
.MACRO	KZTDF$
	.MCALL	TMPDF$
	TMPDF$
	.ASECT
	.=0
;
; COMIOP MAIN LINE TABLE, FOR COMIOP KMC/DZ
;
CZDLT:					;COMIOP LINE TABLE
CMIRI:	.INT1				;INPUT RELATED INTERUPT RE-VECTOR
	.PRI				;INPUT INTERUPT PRIORITY
CMORI:	.INT2				;OUTPUT RELATED INTERUPT RE-VECTOR
	.PRI				;OUTPUT INTERUPT PRIORITY
CMCSR:	.CSR				;ADDRESS OF COMIOP SEL 0
CMSWT:	.BLKB	1			;COMIOP CONTROL SWITCHES
CMARB:	.BLKB	1			;ASSIGN DUMMY RECEIVE BUFFER COUNT
CMIQH:	.LSTHD				;COMIOP INPUT INTERUPT REQUEST QUEUE
CMKQH:	.LSTHD				;COMIOP KILL I/O IN PROGRESS QUEUE
CMDRB:	.BLKW	3			;DUMMY RECEIVE BUFFER DESCRIPTOR
;
; LIST OF ADDRESSES OF EXTERNAL TABLES, FORM = "MAPPING,DISPLACEMENT"
;
CMETA:					;BASE FOR EXTERNAL TABLE ADDRESS LIST
CMCWT:	.CORE				;COMIOP CORE WORK TABLE ADDRESS
CMPMT:	.BIN				;DDCMP MODE TABLE ADDRESS
	.IF NE	P$$V52
CMVMT:	.BIN				;VT52 CONTROL MODE TABLE ADDRESS
	.ENDC
CMNET=	<.-CMETA>/4			;NUMBER OF EXTERNAL TABLES IN LIST
;
; LIBRARY CALLS
;
CMCRC:	.LIBR				;STCRC ROUTINE
CMLEN=	.
CTCLT:					;START OF DZ TABLES (48 ALLOWED)
;
; DZ CHANNEL SPECIFIC LINE TABLE OFFSETS, FOR COMIOP/DZ
;
	.=0
CTLTW:	.BLKW	1			;LONG TIMER WORD
CTCSR:	.SECSR				;ADDRESS OF DZ11 CSR
CTLIN:	.UNB				;LINE NUMBER (0-57 OCTAL)
CTSLN:	.SLNB				;SYSTEM LINE NUMBER
CTTFL:	.BLKW	1			;TRANSMIT AND CONTROL FLAGS
CTITQ:	.BLKW	1			;QUEUE OF INACTIVE TRN CCB'S
CTATQ:	.BLKW	1			;QUEUE OF ACTIVE TRN CCB'S
CTTD1:	.BLKW	6			;TRN BUFFER DESCRIPTOR 1
CTTD2:	.BLKW	6			;TRN BUFFER DESCRIPTOR 2
CTRFL:	.BLKB	1			;RECEIVE FLAGS
CTHDR:	.BLKB	1			;DDCMP HEADER CHARACTER
CTARQ:	.BLKW	1			;QUEUE OF ACTIVE RCV CCB'S
CTRD1:	.BLKW	3			;RCV BUFFER DESCRIPTOR 1
CTRD2:	.BLKW	3			;RCV BUFFER DESCRIPTOR 2
CTDLP:	.DVCHA				;CURRENT DEVICE LINE PARAMETERS
CTDFP:	.DVCHA				;DEFAULT DEVICE LINE PARAMETERS
CTLOG:	.BLKW	1			;EVENT LOGGING DESTINATION
CTLEN=	.
	.PSECT
.ENDM	KZTDF$
	.MACRO	LBLDF$	L,B
	.ASECT
.=0
R$LNAM:'L'.BLKW	2
R$LSA:'L' .BLKW	1
R$LHGV:'L'.BLKW	1
R$LMXV:'L'.BLKW	1
R$LLDZ:'L'.BLKW	1
R$LMXZ:'L'.BLKW	1
R$LOFF:'L'.BLKW	1
R$LWND:'L'.BLKW	1
R$LSEG:'L'.BLKW	1
R$LFLG:'L'.BLKW	1
R$LDAT:'L'.BLKW	3
R$LSIZ:'L'.BLKW	0
LD$ACC='B'100000
LD$RSV='B'040000
LD$REL='B'000004
.=0
L$BTSK:'L'.BLKW	2
L$BPAR:'L'.BLKW	2
L$BSA:'L' .BLKW	1
L$BHGV:'L'.BLKW	1
L$BMXV:'L'.BLKW	1
L$BLDZ:'L'.BLKW	1
L$BMXZ:'L'.BLKW	1
L$BOFF:'L'.BLKW	1
L$BWND:'L'.BLKW	1
L$BSEG:'L'.BLKW	1
L$BFLG:'L'.BLKW	1
L$BDAT:'L'.BLKW	3
L$BLIB:'L'.BLKW	<7.*<R$LSIZ/2>>+1
L$BPRI:'L'.BLKW	1
L$BXFR:'L'.BLKW	1
L$BEXT:'L'.BLKW	1
L$BSGL:'L'.BLKW	1
L$BHRB:'L'.BLKW	1
L$BBLK:'L'.BLKW	1
L$BLUN:'L'.BLKW	1
	.BLKW	<512.-.>/2
L$BASG:'L'.BLKW	0
TS$PIC='B'100000
TS$NHD='B'040000
TS$ACP='B'020000
TS$PMD='B'010000
TS$SLV='B'004000
TS$NSD='B'002000
TS$NET='B'001000
TS$PRV='B'000400
TS$CMP='B'000200
TS$CHK='B'000100
TS$RES='B'000040
	.PSECT
	.MACRO	LBLDF$	X,Y
	.ENDM
	.ENDM
	.MACRO	LCBDF$,L,B
	.ASECT
.=0
L.LNK:'L' .BLKW 1
L.NAM:'L' .BLKW 1
L.UNIT:'L' .BLKB 1
L.TYPE:'L' .BLKB 1
L.UCB:'L' .BLKW	1
L.ASG:'L' .BLKW 1
L.LGTH='B'.-L.LNK
	.PSECT
	.MACRO	LCBDF$,X,Y
	.ENDM
	.ENDM
.MACRO	LDDF
NODLEN	= 6.
SIDLEN	= 16.
BPSLEN	= 8.
FILLEN	= 30.
PARLEN	= 30.
FDSLEN	= 6.+15.
.ASECT
.=0
MSBFHD:	.BLKW	1
CMLKNM:	.BLKW	1
LSLKNM:	.BLKW	1
BLKCNT:	.BLKW	1
FINCNT:	.BLKW	1
BLKADR:	.BLKW	1
DATADR:	.BLKW	1
DATCNT:	.BLKW	1
BEGADR:	.BLKW	2
TRAADR:	.BLKW	2
FILDSC:	.BLKW	FDSLEN
STATE:	.BLKB	1
SBSTAT:	.BLKB	1
RETCOD:	.BLKB	1
OPTION:	.BLKB	1
LUN:	.BLKB	1
BOODEV:	.BLKB	1
CPU:	.BLKB	1
REQPRO:	.BLKB	1
SOFTID:	.BLKB	SIDLEN+1
TGNODE:	.BLKB	NODLEN+1
SVNODE:	.BLKB	NODLEN+1
LINE:	.BLKB	4
BOOPAS:	.BLKB	BPSLEN+1
INFILE:	.BLKB	FILLEN+1
SYSPAR:	.BLKB	PARLEN+1
PHASE:	.BLKB	1
FLAGS:	.BLKB	1
TRACNT:	.BLKB	1
CTXTLN	= .
.PSECT
CONFIG	= 1.
LINK	= 2.
BOOT	= 3.
LOAD	= 4.
FINISH	= 5.
ALBF	= 1.
OPLK	= 2.
TRMS	= 3.
RCMS	= 4.
CLFL	= 5.
CLLK	= 6.
RLBF	= 7.
RDBK	= 8.
RCMA	= 9.
OPIN	= 10.
WAIT	= 11.
CLEAN	= 12.
STBK	= 13.
FILINI	= 1.
LNKINI	= 2.
TRAIMA	= 3.
CLEUP	= 4.
BLKLEN	= 512.
OPSYS	= 2.
MAXTRA	= 3.
IMASEG	= 256.
BADBIT	= 300
NOTNAM	= 001
SRVINC	= 002
BPSPRQ	= 010
TRIBOO	= 004
FILINC	= 020
PARINC	= 040
RCVPND	= 001
SETADR	= 002
ALLBUF	= 004
RDBLK	= 010
LOACOM	= 020
.MACRO	LDDF
.ENDM
.ENDM
.MACRO	LDFDF
ENTLEN	= 6.
NAMLEN	= 2.
NAMADR	= 4.
.ENDM
.MACRO	LDFMAC
SECLOA	= 0.
TERLOA	= 1.
.MACRO	LDFBEG
LDFDB::
.ENDM
.MACRO	LDFEND
LDFDBE::
.EVEN
.ENDM
.MACRO	LDFENT PROTYP,DEVTYP,NAMSTR
.BYTE	PROTYP,DEVTYP
.NCHR	$$TEMP,<NAMSTR>
.WORD	$$TEMP
.PSECT	LDFSTR,RW,D,GBL,REL,OVR
$$TEMP	=.
.ASCII	/NAMSTR/
.PSECT
.WORD	$$TEMP
.ENDM
.ENDM
	.MACRO	LEDLT$ L,B
	.MCALL	TMPDF$
	TMPDF$
;
; NURD LP11 DEVICE DRIVER LINE TABLE TEMPLATE
;
	.ASECT
	.=0
L.TIMC:'L	.BLKB	1		;TWO BYTE TIMER ENTRY, CURRENT VALUE
L.TIMI:'L	.BLKB	1		;  AND INITIAL TIMER VALUE
L.CALL:'L	.INT			;INTERRUPT DISPATCH CALL
L.PRI:'L	.PRI			;SCHEDULING PRIORITY
					;DDM LEVEL DATA BASE
					;ORDER FOR THIS SECTION IS CRITICAL
L.CSR:'L	.CSR			;ONE WORD CSR POINTER
L.ASTS:'L	.BLKW	1		;ACTION STATUS BIT MAP
	LA.CLO	='B	1		;CLOSED
	LA.PAU	='B	2		;PAUSED
	LA.ADN	='B	4		;ABORT WHEN DONE WITH DDM QUEUE
	LA.ABO	='B	10		;ABORTING
	LA.ABE	='B	20		;CLEAR ABORT ON EOF (ELSE ON CLEAR)
	LA.CPC	='B	40		;CLEAR PAGE COUNTER ENABLE
	LA.AKR	='B	100		;ACKNOWLEDGE REQUESTED
	LA.ERR	='B	200		;AN ERROR HAS BEEN NOTED
	LA.EOF	='B	400		;CURRENT MESSAGE HAS EOF
	LA.EOR	='B	1000		;END OF RECORD ENCOUNTERED
	LA.CTL	='B	2000		;CONTROL MESSAGE TO RETURN
	LA.TMO	='B	4000		;DEVICE TIME OUT
	LA.PLE	='B	10000		;PAGE LIMIT ERROR OCCURRED
L.PUBP:'L	.BLKW	2		;BUFFER PTR DOUBLEWORD
L.PUBS:'L	.BLKW	1		;BUFFER SIZE DOWN COUNTER
L.DDMQ:'L	.LSTHD			;CCB'S QUEUED FOR OUTPUT
L.PGCT:'L	.BLKW	1		;PHYSICAL PAGE COUNT
L.PGLM:'L	.BLKW	1		;PAGE LIMIT REGISTER
L.PLNC:'L	.BLKB	1		;PHYSICAL LINE COUNT
L.HUNG:'L	.BLKB	1		;DEVICE HUNG TIMER
					;MISCELLANEOUS ITEMS
	.EVEN
L.SLN:'L	.SLNW			;DEVICE SYSTEM LINE NUMBER
L.IOCN:'L	.BLKW	1		;OUTSTANDING IO COUNT
L.IOWT:'L	.BLKW	1		;CLOSE WAIT FLAG = CLOSE CCB
					;CONTROL MESSAGE PROCESSING DATA BASE
	.EVEN
L.CMSQ:'L	.LSTHD			;CONTROL MESSAGE QUEUE
L.RECO:'L	.BLKB	1		;CONTROL MESSAGE RESOURCE ERROR FLAG
L.RATT:'L	.BLKB	1		;PENDING ATTENTION MESSAGE FLAG - REASON CODE
L.CAPP:'L	.BLKB	1		;PENDING CAPABILITIES MESSAGE FLAG
					;DATA & FEATURES PROCESSING DATA BASE
	.EVEN
L.CSMP:'L	.BLKW	1		;CHARACTER SET MAP ADDRESS
L.LNCT:'L	.BLKB	1		;LINE COUNTER
L.COCT:'L	.BLKB	1		;COLUMN COUNTER
	.EVEN
L.VFUA:'L	.BLKW	1		;ADDRESS OF VFU MAP IN USE
L.DLCQ:'L	.LSTHD			;CCB'S QUEUED INTO DLC
L.MFLG:'L	.BLKB	1		;CURRENT NURD MESSAGE FLAGS
L.DMSQ:'L	.BLKB	1		;LAST GOOD/CURRENT DATA SEQ NUMBERS
L.DMSG:'L	.BLKB	1		;DATA MESSAGE SEGMENT COUNT BYTE
L.DMSS:'L	.BLKB	1		;DATA MSG CURRENTSEGMENT SIZE
L.CAPN:'L	.BLKB	1		;CURRENT INDEX INTO CAPABILITIES LIST
L.NFSP:'L	.BLKB	1		;NO. FEATURE SPECS IN CURRENT MSG
	.EVEN
L.DMCR:'L	.BLKW	1		;CHAR REPEAT COUNT, 2 BYTES USED AS WORD
L.DMAD:'L	.BLKW	2		;DATA MSG ADDRESS DOUBLEWORD (PTR)
L.DMBS:'L	.BLKW	1		;DATA MSG BUFFER SIZE
L.PLBQ:'L	.LSTHD			;FREE PHYSICAL BUFFER QUEUE
L.PLBP:'L	.BLKW	2		;CHARACTER POINTER DOUBLEWORD
L.PLBS:'L	.BLKW	1		;BUFFER SIZE DOWN COUNTER
L.PBRC:'L	.BLKB	1		;TEMP BYTE
	.EVEN
L.MSGQ:'L	.LSTHD			;OUTGOING MSG QUEUE
L.MSGA:'L	.BLKW	2		;CURRENT MSG BUFFER ADDRESS DOUBLEWORD
L.MSGS:'L	.BLKW	1		;CURRENT MSG BUFFER SIZE
					;DATA/FEATURES PROCESS HYBER CONTEXT
L.DWAK:'L	.BLKB	1		;WAKE CONDITION
	DWAKS	='B	1		;WAKE WHEN NEW MESSAGE SEGMENT RECEIVED
	DWAKP	='B	2		;WAKE WHEN PHYSICAL BUFFER RETURNED TO QUEUE
	DWAKT	='B	3		;WAKE ON CLOCK TOCK
	DWAKR	='B	4		;WAKE WHEN RESUME CONTROL FCN DONE
L.DTXL:'L	.BLKB	1		;NO. WORDS ON STACK AT SLEEP TIME
	.EVEN
L.DFSP:'L	.BLKW	1		;STACK ORIGIN
DTXTSZ	='B	16.			;DATA/FEATURES PROCESS CONTEXT ALLOCATED
L.DTXT:'L	.BLKW	DTXTSZ		;CONTEXT BLOCK FOR DA/FEATURES PROCESS
					;FEATURE CRUFT
L.CFET:'L				;LP11 COMMON FEATURE LIST
	.BLKB	1			;NUMBER OF COMMON FEATURES
	.BLKB	1			;FEATURE FE.DAT     SUPPORTED
	.BLKB	1			;FEATURE FE.SER NOT SUPPORTED
	.BLKB	1			;FEATURE FE.LCR     SUPPORTED
	.BLKB	1			;FEATURE FE.FWD     SUPPORTED
	.BLKB	1			;FEATURE FE.EOF NOT SUPPORTED
	.BLKB	1			;FEATURE FE.DVT NOT SUPPORTED
	.BLKB	1			;FEATURE FE.TRN     SUPPORTED
	.BLKB	1			;FEATURE FE.FNM NOT SUPPORTED
	.BLKB	1			;FEATURE FE.DWD     SUPPORTED
LCFETL	='B	.-L.CFET-1
L.DFET:'L	.BLKB	1		;NUMBER OF DEVICE SPECIFIC FEATURES
	.BLKB	1			;FEATURE 129    NOT DEFINED
	.BLKB	1			;FEATURE LP.HT      SUPPORTED
	.BLKB	1			;FEATURE LP.SFC     SUPPORTED
	.BLKB	1			;FEATURE LP.OVP NOT SUPPORTED
	.BLKB	1			;FEATURE LP.CVF NOT SUPPORTED
	.BLKB	1			;FEATURE LP.FCC     SUPPORTED
	.BLKB	1			;FEATURE LP.VFR NOT SUPPORTED
	.BLKB	1			;FEATURE LP.CHS     SUPPORTED
	.BLKB	1			;FEATURE LP.PLE     SUPPORTED
	.BLKB	1			;FEATURE LP.OPV NOT SUPPORTED
LDFETL	='B	.-L.DFET-1
					;FEATURE BLOCKS
F.FSB	='B	0			;(BM)FEATURES STATUS BYTE
	FB.CL0	='B 0			;CLASS 0 FEATURE => <BIT> FORM
	FB.CL1	='B 1			;CLASS 1 FEATURE => <CNT><...> FORM
	FB.WRD	='B 2			;FEATURE IS A WORD AND
					; F.FCV IS A DLT OFFSET TO IT
	FB.STR	='B 4			;FEATURE IS A STRING
					;F.FCV IS THE LENGTH
					;CURRENT VALUE BEGINS AT F.FCV+1
					;STANDARD VALUE(IF ANY) BEGINS AT F.FCV+1+(F.FCV)
	FB.STE	='B 10			;STANDARD VALUE EXISTS
	FB.SST	='B 20			;STANDARD IS SET
	FB.CP	='B 40			;CHANGE PENDING
	FB.CA	='B 100			;CHANGE ALLOWED
F.FCV	='B	1			;FEATURE CURRENT VALUE BYTE
F.FSV	='B	2			;FEATURE STANDARD VALUE BYTE
LE.DAT:'L					;DATA MODE
	.BLKB	1
	LEDATS	='B	FB.CL1!FB.SST!FB.STE	;INITIAL STATUS OF LE.DOF LE.DAT
	.BLKB	1				;ASCII
	.BLKB	1				;ASCII IS STD
;LE.SER:'L					;SERIAL NUMBER
LE.LCR:'L					;LOWER CASE RAISE
	.BLKB	1
	LELCRS	='B	FB.CL0!FB.CA		;INITIAL STATUS OF LE.LCR
	.BLKB	1				;OFF
LE.FWD:'L					;FORM WIDTH
	.BLKB	1
	.BLKB	1
;LE.EOF:					;EOF RECOGNITION
;LE.DVT:'L					;DEVICE TYPE
LE.TRN:'L					;RECORD TRUNCATION
	.BLKB	1
	LETRNS	='B	FB.CL0!FB.CA!FB.SST!FB.STE	;INITIAL STATUS OF LE.TRN
	.BLKB	1				;OFF
	.BLKB	1				;OFF IS STD
;LE.FNM:'L					;FORM NAME
LE.DWD:'L					;DEVICE WIDTH
	.BLKB	1
	.BLKB	1				;STD WIDTH
;	DEVICE SPECIFIC FEATURES
LE.HT:'L					;HORIZONTAL TAB
	.BLKB	1
	LEHTS	='B	FB.CL1!FB.SST!FB.STE	;INITIAL STATUS OF LE.HT
	.BLKB	1				;STD TABS ON
	.BLKB	1
LE.SFC:'L					;STD VFU
	.BLKB	1
	LESFCS	='B	FB.CL0!FB.SST!FB.STE	;INITIAL STATUS OF LE.SFC
	.BLKB	1				;ON
	.BLKB	1
;LE.OVP:'L					;OVERPRINT LIMIT
;LE.CVF:'L					;CUSTOM VFU
LE.FCC:'L					;FORTRAN CARRIAGE CONTROL
	.BLKB	1
	LEFCCS	='B	FB.CL0!FB.CA!FB.SST!FB.STE	;INITIAL STATUS OF LE.FCC
	.BLKB	1				;OFF
	.BLKB	1
;LE.VFR:'L					;VARIABLE FORMS RATIO
LE.CHS:'L					;CHARACTER SET
	.BLKB	1
	.BLKB	1				;96 CHAR ASCII
LE.PLE:'L					;PAGE LIMIT ENFORCEMENT
	.BLKB	1
	LEPLES	='B	FB.CL1!FB.WRD!FB.CA!FB.SST!FB.STE	;INITIAL STATUS OF LE.PLE
	.BLKB	1				;PAGE COUNTER
	.BLKB	2				;STD = 0 => OFF
;LE.OPV:'L					;OPTICAL VFU
	.PSECT
	.ENDM	LEDLT$
.MACRO	LFDF
LF.OPN	= 33*400
LF.CLS	= 34*400+210
LF.RD	= 32*400
LF.WRT	= 31*400
LF.OFF	= 36*400+10
LF.ON	= 36*400+0
LF.RAS	= 36*400+20
.MACRO	LFDF
.ENDM
.ENDM
.MACRO	LGDF
.ASECT
.=0
MESBUF:	.BLKW	1		;MESSAGE BUFFER
NODE:	.BLKW	1		;ADDRESS OF NODE NAME
COMP:	.BLKW	1		;ADDRESS OF COMPONENT NAME
EVNT:	.BLKW	1		;EVENT NUMBER
DTBEG:	.BLKW	1		;BEGIN ADDRESS OF LOG DATA
DTEND:	.BLKW	1		;END ADDRESS OF LOG DATA
LOGD:	.BLKW	1		;LOG DATA BASE ENTRY ADDRESS
FLAGS:	.BLKW	1		;TARGET FLAGS
SEQN:	.BLKB	1		;SEQUENCE NUMBER
STATE:	.BLKB	1		;LOG DATA PROCESSOR STATE
OLDLUN:	.BLKB	1		;LUN FROM LOGICAL LINK
.EVEN
CTXTLN:	.BLKW	0		;LENGTH OF CONTEXT BLOCK
.PSECT
				;LOG PROCESSOR STATES:
START	= 0			; INITIALIZE
PROC	= 1			; PROCESS REQUESTS
FINISH	= 2			; CLEAN UP
.MACRO	LGDF
.ENDM
.ENDM
.MACRO	LIDMDF
.PSECT	LIDDAT,RW,D,GBL,REL,OVR
.MCALL	DEVDF
DEVDF
L.DNAD	= 0.
L.DNLN	= 2.
L.DLGL	= 3.
L.DTYP	= 4.
L.MCTL	= 5.
L.MLIN	= 6.
L.MSTA	= 7.
L.ELEN	= 8.
DV$NET	= 1.
DV$LOD	= 2.
	.MCALL	DVTMDF
	.MACRO	XXX NAM,DSP,ARG3,ARG4,ARG5,ARG6,ARG7
A'NAM':	.ASCII	/'DSP'/
L'NAM'	= .-A'NAM'
	.ENDM	XXX
	DVTMDF	XXX
.EVEN
LIDBLK:
	.MACRO	XXX NAM,DSP,NUM,FLG,CTL,UNT,STA
	.WORD	A'NAM'
	.BYTE	L'NAM','FLG','NAM','CTL','UNT','STA'
	.ENDM	XXX
	DVTMDF	XXX
LIDEND:
.PSECT
.ENDM
.MACRO	LIMDF
.ASECT
.=0
STATE:	.BLKW	1
LOCK:	.BLKB	1
LENGTH:	.BLKB	1
LINEID:	.BLKB	16.
.PSECT
.ENDM
.MACRO	LIMMDF
.PSECT	LIMDAT,RW,D,GBL,REL,OVR
LIMBLK:
	.WORD	0
LOCK:	.BYTE	0
LENGTH:	.BYTE	0
LINEID:	.BLKB	16.
.PSECT
.ENDM
.MACRO	LKUDF
INUSE	= 0.
LUN	= 1.
ENTLEN	= 2.
MASTER	= 1.
SLAVE	= 2.
.ENDM
.MACRO	LKUMDF
.MCALL	CONFIG,SRDF
CONFIG
SRDF
.PSECT	LKUDAT,RW,D,GBL,REL,OVR
RCEVCB:	.WORD	0
LKUTAB:
$$LUN	= LNKLUN
.REPT	F$LKLU
.BYTE	0
.BYTE	$$LUN
$$LUN	= $$LUN+1
.ENDR
LKUEND:
.PSECT
.ENDM
	.MACRO LLC$DF	NAM,FLG,PRI,NLL,AA,BB
	NAM'PR=PRI	; PRIORITY
	NAM'FL=FLG	; FLAG
	NAM'CHN=NLL	; NUMBER OF CHANNELS TO ALLOCATE
	NAM'CNT=0	; DYNAMIC REFERENCE COUNT ( CROSS-CHECK )
	.ENDM	LLC$DF
	.MACRO	LLWDF$,L,B
 
	.ASECT
 
.=0
W.CTL:'L' .BLKW		1	;(RESERVED FOR RSX)
W.TASK:'L' .BLKW	1	;POINTER TO TASK (TCB/ATL ADDRESS)
W.STAT:'L' .BLKB	1	;STATUS
W.MODC:'L' .BLKB	1	;MODIFY FLOW CONTROL COUNT
W.CCBU:'L' .BLKB	1	;NUMBER OF TRANSMIT CCB'S IN USE
W.LUN:'L' .BLKB		1	;TASK LUN # 
W.LLA:'L' .BLKB		1	;NSP'S LOGICAL LINK ADDRESS (INDEX)
W.ULA:'L' .BLKB		1	;INTERFACE'S USER LINK ADDRESS (INDEX)
W.SEGZ:'L' .BLKW	1	;TRANSMIT SEGMENT SIZE
W.PIO:'L' .BLKW		1	;PENDING I/O PACKET ADDRESS
W.MBOX:'L' .BLKW	1	;POINTER TO TASK MAILBOX
W.CSND:'L' .BLKW	1	;POINTER TO CURRENT TRANSMIT I/O PACKET
W.SNDQ:'L' .BLKW	2	;TRANSMIT QUEUE LISTHEAD
W.RCVQ:'L' .BLKW	2	;RECEIVE QUEUE LISTHEAD
W.CINT:'L' .BLKW	1	;POINTER TO CURRENT INTERRUPT I/O PACKET
W.INTQ:'L' .BLKW	2	;INTERRUPT QUEUE LISTHEAD
				;
W.WBL='B'.-W.CTL		;LENGTH OF LOGICAL LINK WINDOW BLOCK
 
	.PSECT
 
;+
; WINDOW BLOCK STATUS WORD
;-
 
WS.VE1='B'1			;VERSION 1 INTERFACE (0-VERSION 2)
WS.EST='B'2			;LINK IS ESTABLISHED
WS.DIC='B'4			;DISCONNECT ALREADY CLEANED UP FOR TASK
WS.MOD='B'10			;NEEDS FLOW CONTROL MODIFICATION
WS.STA='B'20			;NEEDS CCB FOR TRANSMIT
WS.INT='B'40			;NEEDS CCB FOR INTERRUPT
WS.DIP='B'100			;DISCONNECT IN PROGRESS
WS.KIP='B'200			;KILL (I/O RUNDOWN) IN PROGRESS
 
	.MACRO	LLWDF$,X,Y
	.ENDM	LLWDF$
 
	.ENDM	LLWDF$
.MACRO	LNDMDF
.PSECT	LNDDAT,RW,D,GBL,REL,OVR
NODNUM:	.WORD	0
NAMLEN:	.WORD	6
NODNAM:	.ASCII	/MANILA/
.PSECT
.ENDM
.MACRO	LNUDF
INUSE	= 0.
LUN	= 1.
ENTLEN	= 2.
.ENDM
.MACRO	LNUMDF
.MCALL	CONFIG,SRDF
CONFIG
SRDF
.PSECT	LNUDAT,RW,D,GBL,REL,OVR
LNUTAB:
$$LUN	= LINLUN
.REPT	F$LNLU
.BYTE	0
.BYTE	$$LUN
$$LUN	= $$LUN+1
.ENDR
LNUEND:
.PSECT
.ENDM
.MACRO	LOGDF
.ASECT
.=0
L.GTYP:	.BLKB	0		; LOGGING TYPE:
 LG.OPR	=	0		;  OPERATOR
 LG.MNT	=	1		;  MAINTENANCE
L.GSW:	.BLKW	1		; SWITCHES:
 LG.ON	=	100000		;  LOGGING IS ON.
 LG.CNS	=	001000		;  CONSOLE TARGET SPECIFIED.
 LG.MND	=	000400		;  MASTER NODE TARGET SPECIFIED.
;		000377		; (LOGGING TYPE)
L.GCNS:	.BLKW	2		; CONSOLE DEVICE.
L.GSEQ:	.BLKB	1		; NEXT SEQUENCE NUMBER TO ASSIGN.
L.GMND:	.BLKB	7.		; MASTER NODE NAME
	.EVEN
L.GLEN:	.BLKW	0		; LENGTH OF LOG TARGET ENTRY.
.PSECT
.MACRO	LOGDF
.ENDM
.ENDM
.MACRO	LOGMAC
.MCALL	CONFIG,LOGDF
CONFIG
LOGDF
.MACRO	LOGBEG
LOGDB::
.ENDM
.MACRO	LOGEND
LOGDBE::
.ENDM
.MACRO	LOGENT TYPE,ON,MASTER,CONSOL
$$TEMP=0
.IIF NB	<ON>,$$TEMP=$$TEMP+LG.ON
.IIF NB	<MASTER>,$$TEMP=$$TEMP+LG.MND
.IIF NB	<CONSOL>,$$TEMP=$$TEMP+LG.CNS
.WORD	'TYPE'+$$TEMP
DVCNAM	CONSOL
.BYTE	0
NODNAM	MASTER
.EVEN
.ENDM
.MACRO	NODNAM NAME
STRENT	6.,NAME
.ENDM
.MACRO	STRENT MAX,TEXT
.NCHR   $$TEMP,<TEXT>
.BYTE   $$TEMP
.ASCII  /'TEXT'/
$$TEMP  = MAX-$$TEMP
.IF     LT $$TEMP
  .ERROR
.IFF
  .REPT   $$TEMP
    .BYTE   0
  .ENDR
.ENDC
.ENDM
.MACRO	DVCNAM NAME
.IF NB	<NAME>
$$CNT=0
$$TEMP=0
.IRPC	..C,<NAME>
$$CNT=$$CNT+1
.IF LE	<$$CNT-2>
.ASCII	\'..C'\
.IFF
$$TEMP=$$TEMP*8.+'..C'
.ENDC
.ENDR
.WORD	$$TEMP
.IFF
.WORD	0,0
.ENDC
.ENDM
.ENDM
.MACRO	LSDF
BPSLEN	= 8.
SIDLEN	= 16.
.ASECT
.=0
CMLKNM:	.BLKW	1
CMBFAD:	.BLKW	1
COUNT:	.BLKW	2
MEMADR:	.BLKW	2
LNBFAD:	.BLKW	1
LNBFLN:	.BLKW	1
LNBFMX:	.BLKW	1
DATADR:	.BLKW	1
DATLEN:	.BLKW	1
RESADR:	.BLKW	2
REQLEN:	.BLKW	1
TRACB:	.BLKW	1
ORIGCB	= TRACB
RECCB:	.BLKW	1
EXTCB	= RECCB
STATE:	.BLKB	1
RETCOD:	.BLKB	1
OPTION:	.BLKB	1
FLAGS:	.BLKB	1
LINE:	.BLKB	4
LUN:	.BLKB	1
PROTYP:	.BLKB	1
LOANUM:	.BLKB	1
BOOPAS:	.BLKB	BPSLEN+1
RETRYS:	.BLKB	1
CPUTYP:	.BLKB	1
BOODEV:	.BLKB	1
REQPRO:	.BLKB	1
REQLOA	= REQPRO
SOFTID:	.BLKB	SIDLEN+1
CTXTLN	= .
.PSECT
START	= 1.
LOAD	= 2.
DUMP	= 3.
LOOP	= 4.
BOOT	= 5.
FINISH	= 6.
DIALOG	= 001
XFRSNT	= 002
EODREC	= 004
RCMSPN	= 010
TRMSPN	= 020
RCBKPN	= 040
TRBKPN	= 100
MXRTRY	= 5.
MXWAIT	= 30.
SCBFLN	= 550.
RGBFLN	= 300.
DUMSEG	= 256.
.MACRO	LSDF
.ENDM
.ENDM
	.MACRO	L1$	LB
 
	.BYTE	16.,0		; OP CODE, COUNT
 
 
	.ENDM
	.MACRO	L2$	LB,VA,STRING
 
	.BYTE	17.		; OP CODE
	.BYTE	LB'C		; COUNT
LB:
	.IF	B,VA
	.BYTE	V.N		; DEFAULT
	.IFF
	.BYTE	VA
	.ENDC
	.ASCII	STRING
 
	LB'C=	.-LB
 
	.ENDM
	.MACRO	L3$	LB,MSG
 
	.BYTE	18.		; OP CODE
	.BYTE	1		; COUNT  (TO WRITE MESSAGE)
	.BYTE	MSG		; MESSAGE NUMBER
 
 
	.ENDM
	.MACRO	L4$	LB
 
	.BYTE	18.		; OP CODE  (SAME AS L3$)
	.BYTE	0		; COUNT  (ENTER ERROR MODE ONLY)
 
 
	.ENDM
	.MACRO	MAP BIAS
	.IF DF	M$$MGE
	.MCALL	HWDDF$
	HWDDF$
	MOV	  BIAS,KISAR6
	.ENDC
	.ENDM
.MACRO  MAPXDF
.MACRO  ADDBIA ADDR
.IF     DF R$$11D!I$$AS
IF
FALSE   LE ADDR
THEN
  ADD     #AB,ADDR
ENDIF
.ENDC
.ENDM   ADDBIA
.MACRO  MAPEXM BIAS,VADDR,APRADR,APRCON
.IF     DF R$$11M
.IF     DF M$$MGE
.IF     NB APRCON
IF ; TASK'S FIRST APR NOT ALREADY SAVED
FALSE   SET APRADR
THEN
  SAVSTK  <R0>
  MOV     $HEADR,R0
  MOV     H.ISP(R0),R0
  BIC     #017777,R0
  IF ; KISAR5 IS THE TASK'S FIRST APR
  FALSE   NE R0,#5*20000
  THEN
    MOV     #KISAR5,APRADR
    RESSTK  <R0>
  ELSE
    MOV     #KISAR5-2,APRADR
    RESSTK  <R0>
  ENDIF
  MOV     @APRADR,APRCON
ENDIF
.ENDC
MOV     BIAS,@APRADR
MOV     VADDR,R0
BIC     #7*20000,R0
IF ; KISAR5 IS THE TASK'S FIRST APR
FALSE   NE APRADR,#KISAR5
THEN
  BIS     #5*20000,R0
ELSE
  BIS     #4*20000,R0
ENDIF
.IFF
MOV     VADDR,R0
.ENDC
.ENDC
.IF     DF R$$11D!I$$AS
IF
FALSE   SET APRCON
THEN
  MOV     #77406,-(SP)
  MOV     BIAS,-(SP)
  CALL    ..SPD3
  MOV     (SP)+,APRCON
  MOV     (SP)+,APRADR
ENDIF
MOV	VADDR,R0
BIC     #7*20000,R0
BIS     #3*20000,R0
.ENDC
.ENDM   MAPEXM
.MACRO  MAPBAK APRADR,APRCON
.IF     DF M$$MGE
IF ; TASK'S FIRST APR WAS SAVED
FALSE   CLEAR APRADR
THEN
  ;MAPPED RSX-11M
  .IF     DF R$$11M
  MOV     APRCON,@APRADR
  .ENDC
  .IF     DF R$$11D!I$$AS
  MOV     APRADR,-(SP)
  MOV     APRCON,-(SP)
  CALL    ..SPD3
  CMP     (SP)+,(SP)+
  .ENDC
  CLR     APRADR
  CLR     APRCON
ENDIF
.ENDC
.ENDM   MAPBAK
.ENDM   MAPXDF
	.MACRO	MBXDF$,L,B
 
	.ASECT
 
.=0
M.NEXT:'L' .BLKW	1	;POINTER TO NEXT MAILBOX
M.TASK:'L' .BLKW	1	;POINTER TO TASK (TCB/ATL ADDRESS)
M.STAT:'L' .BLKB	1	;STATUS
M.NAST:'L' .BLKB	1	;NUMBER OF AST'S NEEDED
M.USE:'L' .BLKB		1	;COUNT OF ACTIVE LOGICAL LINKS
M.MAX:'L' .BLKB		1	;MAXIMUM # OF LOGICAL LINKS ALLOWED
M.SPA:'L' .BLKW		1	;USER NETWORK DATA AST ADDRESS
M.MAIL:'L' .BLKW	2	;NETWORK DATA (MAIL) QUEUE LISTHEAD
				;
M.MBL='B'.-M.NEXT			;MAILBOX BLOCK LENGTH
 
	.PSECT
 
;+
; MAILBOX BLOCK STATUS WORD
;-
 
MS.AST='B'10			;NEEDS NETWORK DATA AST
MS.CIP='B'200			;KILL (CLOSE) IN PROGRESS
 
;+
; PENDING CONNECT AND MOP EVENT CCB FUNCTION CODE MODIFIER BYTE
;-
 
CX.GDQ='B'1			;CCB HAS BEEN IN GENERAL DELIVERY QUEUE
CX.REQ='B'2			;TASK ASSOCIATED WITH CCB NEEDS REQUESTING
CX.UNL='B'4			;CCB MARKED AS DEQUEUED
 
	.MACRO	MBXDF$,X,Y
	.ENDM	MBXDF$
 
	.ENDM	MBXDF$
	.MACRO	MDCDF$,L,B,LST
	.IIF NB,LST,	.LIST
	.PSECT
	; MODEM CONTROL SERVICE BITS
	MC.CAR='B'	1	; CARRIER DETECT
	MC.DSR='B'	2	; DATA SET READY DETECT
	MC.RNG='B'	4	; RING DETECT
	MC.CCBNA='B'	200	; CCB NOT ALLOCATED ON PREV SCAN
	; STATUS BITS (BYTE 0 IN LINE TABLE)
	MS.SYNC='B'	1	; SYNCHRONOUS DEVICE
	MS.SCAN='B'	2	; DEV W/DISABLED MODEM INTERRUPTS
	.IF NB LST
	.NLIST
	.IFF
	.MACRO	MDCDF$,X,Y
	.ENDM	MDCDF$
	.ENDC
	.ENDM	MDCDF$
.MACRO	MEDF
.ASECT
.=0
MPRM:	.BLKW	1
MLEN:	.BLKW	1
MDAT:	.BLKW	1
MCNT:	.BLKW	1
STATE:	.BLKB	1
RETCOD:	.BLKB	1
CTXTLN	= .
.PSECT
SETUP	= 1.
PROC	= 2.
FINISH	= 3.
.MACRO	MEDF
.ENDM
.ENDM
.MACRO	MOPDF
M$LDTR	= 0.
M$LOAD	= 2.
M$DUMP	= 4.
M$EMOP	= 6.
M$RQPG	= 8.
M$RQLD	= 10.
M$MRUN	= 12.
M$DATA	= 14.
M$PARM	= 20.
M$LOOP	= 24.
M$ASCD	= 28.
MF$LOA	= 000
MF$DUM	= 002
MF$LOO	= 004
.MACRO	MOPDF
.ENDM
.ENDM
	.MACRO	MTADF$,L,B
	.ASECT
.=0
V.TCNT:'L' .BLKW 1
V.NXT:'L' .BLKW 1
V.MVL:'L' .BLKW 1
V.UVL:'L' .BLKW 1
V.ATL:'L' .BLKW 1
V.UCB:'L' .BLKW 1
V.RVOL:'L' .BLKB 1
V.MOU:'L' .BLKB 1
V.TCHR:'L' .BLKW 1
V.SEQN:'L' .BLKW 1
V.SECN:'L' .BLKW 1
V.TPOS:'L' .BLKB 1
V.PSTA:'L' .BLKB 1
V.TIMO:'L' .BLKW 1
V.STS:'L' .BLKW 3
V.SPAR:'L' .BLKW 1
V.BLKL:'B' .BLKW 1
V.RECL:'B' .BLKW 1
V.FNAM:'L' .BLKW 3
V.FTYP:'L' .BLKW 1
V.FVER:'L' .BLKW 1
V.CDAT:'L' .BLKW 2
V.EDAT:'L' .BLKW 2
V.BLKC:'L' .BLKW 2
V.RTYP:'L' .BLKB 1
V.FATT:'L' .BLKB 1
V.WIND:'L' .BLKW 6
S.VSCB=.
	.PSECT
	.ASECT
.=0
	W.CTL:	.BLKW 1
	V.WINC=V.WIND+W.CTL
	.PSECT
	.ASECT
.=0
	.IF	DF	R$$11M
M.NXT:'L' .BLKW 1
	.ENDC
M.UIC:'L' .BLKW 1
M.CH:'L' .BLKW 1
M.PROT:'L' .BLKW 1
	.IF	NDF	R$$11M
		.BLKW 2
M.NXT:'L' .BLKW 1
	.ENDC
M.RVOL:'L' .BLKB 1
M.STAT:'L' .BLKB 1
M.VIDP:'L' .BLKW 1
M.UCB:'L' .BLKW 1
S.MVL=.
	.PSECT
	.ASECT
.=0
L.NXT:'L' .BLKW 1
L.VOL1:'L' .BLKB 1
L.VOL2:'L' .BLKB 1
L.VID1:'L' .BLKB 6
L.VID2:'L' .BLKB 6
S.UVL=.
	.PSECT
VM.OLD	='B'	200
VM.BYP	='B'	100
VM.ULB	='B'	40
VM.FSC	='B'	20
VM.EXC	='B'	10
VP.RM	='B'	2
VP.WM	='B'	4
VP.SM	='B'	10
VP.MOU	='B'	20
VP.RWD	='B'	40
VP.VFY	='B'	VP.RWD
VP.POS	='B'	100
	VP.TO=1
WI.RDV	='B'	400
WI.WRV	='B'	1000
WI.EXT	='B'	2000
WI.LCK	='B'	4000
MS.VER	='B'	200
MS.RID	='B'	1
MS.NMO	='B'	2
MS.TMO	='B'	4
MS.EXP	='B'	10
MO.OVR	='B'	1
MO.UIC	='B'	2
MO.PRO	='B'	4
MO.160	='B'	10
	.ENDM
	.MACRO	NABO$ ULA
	.MCALL	$$MOVB,$$QUE
	$$MOVB	ULA,C.NSP
	$$MOVB	$CMPDV,C.NSP+1
	BIS	#100000,C.NSP(R4)
	$$QUE	NT$ABO,FC.XME
	.ENDM
	.MACRO	NACC$ ULA,FLAGS,SNDCNT,SEGSIZ
	.MCALL	$$MOV,$$MOVB,$$QUE
	MOV	C.NSP(R4),-(SP)
	MOV	C.LIN(R4),C.NSP(R4)
	MOV	(SP)+,C.LIN(R4)
	$$MOVB	ULA,C.NSP
	$$MOV	FLAGS,C.STS
	$$MOV	SNDCNT,C.CNT1
	$$MOV	SEGSIZ,C.FLG1
	$$QUE	NT$ACC,FC.RCE
	.ENDM
	.MACRO	NCAC$ REQID,PASSWD,ACNT,OPDAT
	.MCALL	$$STST
	.=.-<N.OPTD+16.-N.RQDL>
	$$STST	<REQID>,16.
	$$STST	<PASSWD>,8.
	$$STST	<ACNT>,16.
	$$STST	<OPDAT>,16.
	.ENDM
	.MACRO	NCBK$ NODE,SEGSIZ,DSTOBJ,DSTID,SRCOBJ,SRCID
	.MCALL	$$STST,$$SNOD,$$SET,$$STID
	$$SNOD	NODE,6
	$$SET	SEGSIZ
	$$STID	DSTOBJ,DSTID
	$$STID	SRCOBJ,SRCID
	$$SET
	.BLKB	N.PASL-N.RQID
	$$SET
	.BLKB	N.ACTL-N.PASS
	$$SET
	.BLKB	N.OPDL-N.ACNT
	$$SET
	.BLKB	16.
	.ENDM
.MACRO	NCDF
NS$INZ	= 1.
NS$NIC	= 2.
NS$RES	= 3.
NS$DAT	= 4.
NS$ABO	= 5.
NS$FIN	= 6.
IE$RME	= -1
IE$DVE	= -2
.ENDM
	.MACRO	NCON$ ULA,FLAGS,BLKDAT,RCVDAT
	.MCALL	$$MOV,$$MOVB,$$BUFD,$$QUE
	$$MOVB	$CMPDV,C.NSP+1
	$$MOVB	ULA,C.NSP
	$$MOV	FLAGS,C.STS
	$$BUFD  1,BLKDAT
	$$BUFD  2,RCVDAT
	CLRB	C.LIN(R4)
	$$QUE	NT$CON,FC.XME
	.ENDM
	.MACRO	NDAT$ LLA,FLAGS,DATA
	.MCALL	$$MOVB,$$BUFD,$$QUE,$$MOV
	$$MOVB	LLA,C.LIN
	$$MOV	FLAGS,C.STS
	$$BUFD	1,DATA
	$$QUE	NT$DAT,FC.XME
	.ENDM
	.MACRO	NDIS$	LLA,OPDATA
	.MCALL	$$BUFD,$$MOVB,$$QUE,$$MOV
	$$MOVB	LLA,C.LIN
	$$BUFD	1,OPDATA
	$$QUE	NT$DIS,FC.XME
	.ENDM
	.MACRO	NETDF$,L,B
 
	.MCALL	CRBDF$
	CRBDF$	L,B		;REQUEST DESCRIPTOR BLOCK
	.MCALL	CNBDF$
	CNBDF$	L,B		;REQUEST PENDING BLOCK
	.MCALL	NSSYM$
	NSSYM$	B		;RETURN SYMBOLS
 
	.MACRO	NETDF$,X,Y
	.ENDM	NETDF$
 
	.ENDM	NETDF$
	.MACRO NHWDF$	L,B
PR0='B'0		; PROCESSOR PRIORITY 0
PR1='B'40		; PROCESSOR PRIORITY 1
PR2='B'100		; PROCESSOR PRIORITY 2
PR3='B'140		; PROCESSOR PRIORITY 3
PR4='B'200		; PROCESSOR PRIORITY 4
PR5='B'240		; PROCESSOR PRIORITY 5
PR6='B'300		; PROCESSOR PRIORITY 6
PR7='B'340		; PROCESSOR PRIORITY 7
PS='B'177776		; PROCESSOR STATUS WORD
SWR='B'177570		; CONSOLE SWITCH AND DISPLAY REGISTER
TPS='B'177564		; CONSOLE TERMINAL PRINTER STATUS REGISTER
;+
; MEMORY MANAGEMENT HARDWARE REGISTERS AND STATUS CODES
;-
	.IF DF	M$$MGE
	.IF DF R$$11D!I$$AS
BUFKMP='B'172344	; BUFFER MAPPING IN KERNEL MODE
PRCKMP='B'172346	; PROCESS MAPPING IN KERNEL MODE
CEXUMP='B'177640	; COMEXEC MAPPING USER MODE
BUFUMP='B'177644	; BUFFER MAPPING IN USER MODE
.BASEB='B'040000	; BUFFER PAR BIAS
PRCUMP='B'177646	; PROCESS MAPPING IN USER MODE
.BASEP='B'060000	; PROCESS PAR BIAS
	.IFF
BUFUMP='B'172354	; BUFFER MAPPING IN SYSTEM STATE
.BASEB='B'140000	; BUFFER PAR BIAS
KISAR6='B'172354	; KERNEL MODE APR 6
UISAR1='B'177642	; USER MODE APR 1
	.ENDC
MPCSR='B'177746		; ADDRESS OF PDP-11/70 MEMORY PARITY REGISTER
MPAR='B'172100		; ADDRESS OF FIRST MEMORY PARITY REGISTER
PIRQ='B'177772		; PROGRAMMED INTERRUPT REQUEST REGISTER
UBMPR='B'170200		; UNIBUS MAPPING REGISTER 0
CMODE='B'140000		; CURRENT MODE FIELD OF PS WORD
PMODE='B'30000		; PREVIOUS MODE FIELD OF PS WORD
KISAR0='B'172340	; KERNEL MODE APR 0
UISAR0='B'177640	; USER MODE APR 0
	.ENDC
	.ENDM
.MACRO	NICDF
N.MLEN	= 300.
N$LOAD	= 2.
N$DUMP	= 3.
N$TRIG	= 4.
N$LOOP	= 5.
N$TEST	= 6.
N$STPR	= 7.
N$RDIN	= 8.
N$ZERO	= 9.
N$DPOS	= 12.
N$EXAM	= 13.
N$LOGD	= 1.
N$LNSR	= 14.
LS$LOA	= 0.
LS$LOO	= 1.
LS$DUM	= 2.
LS$TRQ	= 3.
LS$TRI	= 4.
ND$LCC	= 0.
ND$LCS	= 1.
ND$RMC	= 2.
ND$RMS	= 3.
ND$LNC	= 4.
ND$LNS	= 5.
ND$BAD	= -1.
ND$ZLC	= 0.
ND$ZRM	= 1.
ND$ZLN	= 2.
NN$ZRO	= 0.
NN$UMS	= 1.
NN$UMR	= 2.
NN$EXT	= 3.
NN$NKS	= 4.
NN$FMT	= 5.
NN$RES	= 6.
NN$IZS	= 7.
NN$IZU	= 8.
NN$CAC	= 9.
NN$MAC	= 10.
NN$CNI	= 11.
NN$CNR	= 12.
NL$ZRO	= 0.
NL$BRC	= 1.
NL$BTR	= 2.
NL$RTR	= 3.
NL$RLE	= 4.
NL$RES	= 5.
NL$TMO	= 6.
ST$ON	= 0.
ST$OFF	= 1.
ST$SHU	= 2.
ST$LOO	= 3.
ST$MAI	= 4.
ST$ENA	= 5.
ST$DIS	= 6.
LI$KNO	= 0.
LI$STA	= 1.
LI$STR	= 2.
DM$END	= 0.
DM$SAD	= 1.
DM$MIM	= 2.
DM$PXA	= 3.
PT$END	= 0.
PT$NAM	= 1.
PT$NUM	= 2.
PT$HOS	= 3.
NS$SUC	= 1.
NE$FUN	= -1.
NE$FOR	= -2.
NE$STA	= -3.
NE$ORD	= -4.
NE$LID	= -8.
NE$LST	= -9.
NE$LCO	= -10.
NE$NOD	= -11.
NE$SER	= -12.
NE$FIL	= -13.
NE$CON	= -14.
NE$RES	= -15.
NE$PAR	= -16.
NE$LPR	= -17.
NE$FIO	= -18.
NE$NCO	= -19.
NE$NOR	= -20.
NE$NIC	= -21.
.MACRO	NICDF
.ENDM
.ENDM
	.MACRO	NINT$ LLA,DATA
	.MCALL	$$MOVB,$$BUFD,$$QUE,$$MOV
	$$MOVB	LLA,C.LIN
	$$BUFD	1,DATA
	$$QUE	NT$INT,FC.XME
	.ENDM
	.MACRO	NMOD$ LLA,RQCNT
	.MCALL	$$MOVB,$$QUE
	$$MOVB	LLA,C.LIN
	$$MOVB	RQCNT,C.NSP
	$$QUE	NT$MOD,FC.XME
	.ENDM
	.MACRO NOD$DF A,B,C
	.ENDM
	.MACRO	NQRY$ LLA
	.MCALL	$$MOVB,$$QUE
	$$MOVB	LLA,C.LIN
	$$QUE	NT$QRY,FC.XME
	.ENDM
	.MACRO	NRDIN$
;	CCB STATUS CODES : DLC ->NRD
LS.ABO	=	100201		;ABORTING(COMPLIANCE WITH HIGHER (POWERS)
LS.REJ	=	100202		;REJECTING MSG
LS.CLO	=	100203		;DEVICE IS CLOSED,REJECTING
LS.ILM	=	100204		;ILLEGAL NURD MSG
LS.BOM	=	100205		;DLC IS ABORTING THE LINK DUE TO USER ERROR
;	CCB STATUS CODES : NRD -> NRM
NR.NDV	=	100377		;NOT A NURD DEVICE
	.ENDM	NRDIN$
	.MACRO	NREJ$ SNDCNT
	.MCALL	$$BUFD,$$QUE,$$MOV
	MOV	C.NSP(R4),-(SP)
	MOV	C.LIN(R4),C.NSP(R4)
	MOV	(SP)+,C.LIN(R4)
	$$MOV	SNDCNT,C.CNT1
	$$QUE	NT$REJ,FC.RCE
	.ENDM
	.MACRO	NRTI$ LLA
	.MCALL	$$MOVB,$$QUE
	$$MOVB	LLA,C.LIN
	$$QUE	NT$RTI,FC.RCE
	.ENDM
	.MACRO	NRTN$ LLA,FLAGS
	.MCALL	$$MOV,$$MOVB,$$QUE
	$$MOVB	LLA,C.LIN
	$$MOV	FLAGS,C.STS
	$$QUE	NT$RTN,FC.RCE
	.ENDM
	.MACRO	NSDDB$
 
;
; DATA DESCRIPTOR BLOCK DEFINITIONS:
;
	.ASECT
.=0
N$ACQ:	.BLKW	2	; ACP QUEUE LISTHEAD
N$TCB:	.BLKW	1	; ACP TCB ADDRESS
N$ICF:	.BLKW	1	; INTERCEPT SWITCH  (ADDRESS OF PHYSICAL LINK BLOCK)
N$LNI:	.BLKW	1	; LOOPBACK SWITCH   (ADDRESS OF PHYSICAL LINK BLOCK)
N$TMP:	.BLKW	4	; SCRATCH STORAGE AREA
N$LVC:	.BLKW	2	; LOGICAL LINK ADDRESS TABLE (LENGTH & ADDRESS)
N$PLD:	.BLKW	2	; PHYSICAL LINK DESCRIPTOR (NUMBER & ADDRESS)
N$NOD:	.BLKW	2	; NODE NAME DESCRIPTOR  (NUMBER & ADDRESS)
N$VER:	.BLKW	2	; PASSWORD DESCRIPTOR   (NUMBER & ADDRESS)
N$STS:	.BLKW	2	; STATISTICS DESCRIPTOR (LENGTH & ADDRESS)
	.PSECT
 
;
; PHYSICAL LINK BLOCK DEFINITIONS
;
	.ASECT
.=0
P$LST:	.BLKW	1	; STATE AND FLAGS
P$LCD:	.BLKB	1	; RECOVERY FLAGS
P$TIM:	.BLKB	1	; RECOVERY TIMER
P$CHN:	.BLKB	1	; LOGICAL LINE NUMBER
P$CNT:	.BLKB	1	; NUMBER OF MESSAGES QUEUED
P$PFQ:	.BLKW	1	; PENDING CONTROL FUCTION QUEUE
P$NOD:	.BLKW	1	; POINTER TO ADJACENT NODE
P$FRQ:	.BLKB	1	; FUNCTIONS REQUESTED
P$FSP:	.BLKB	1	; FUNCTIONS REQUESTED
P$LEN:	.BLKW	0	; LENGTH OF PHYSICAL LINK TABLE
	.PSECT
 
;
; PHYSICAL LINK FLAGS AND STATES
;
; STATES:
;
PS$OFF	= 0		;OFF
PS$STR	= 1		;STARTING
PS$WT	= 2		;WAIT
PS$NTI	= 3		;NOT INITIALIZED
PS$VER	= 4		;VERIFICATION WAIT
PS$UP	= 5		;UP
;
; FLAGS:
;
PF$OFF	= 0		;OFF STATE DESIRED
PF$UP	= 1		;UP STATE DESIRED
PF$STA	= 3		;MASK TO DESIRED STATE
 
PF$ENB	= 200		;LINK HAS BEEN ENABLED
PF$EIP	= 100		;CONTROL ENABLE FUNCTION IN PROGRESS
PF$RVR	= 40		;VERIFICATION REQUESTED WHEN NODE INIT SENT
 
;
; RECOVERY FLAGS:
;
RF.CTL	= 3		;COUNT OF OUTSTANDING CONTROL REQUESTS
RF.CLN	= 0		;LOGICAL LINK CLEAN UP REQUIRED
 
RF.WTM	= 30		;MASK FOR ALLOCATION FAILURE INTO WAIT STATE
RF.WTS	= 10		;STOP FUNCTION FLAG
RF.WTD	= 20		;DISABLE FUNCTION FLAG
 
RF.TIM	= 377*400	;MASK FOR TIMEOUT VALUE
RF.TM0	= 1*400		;INITIAL TIMEOUT VALUE
 
;
; FUNCTIONS SUPPORTED BY ADJACENT NODE
;
; NOTE:	THESE DEFINTIONS ARE SYNCHRONIZED WITH THE PROTOCOL
;	DEFINITIONS.
;
PF$SRT	= 1		; ROUTE THROUGH
PF$SLI	= 2		; LINK INTERRCEPT
PF$SRI	= 4		; ROUTING INTERCEPT
PF$SUB	= 10		; MESSAGE UNBLOCKING
;
; FUNCTIONS REQUESTED FROM ADJACENT NODE
;
; NOTE:	THESE DEFINITIONS ARE SYNCHRONIZED WITH THE PROTOCOL
;	DEFINITIONS.
;
PF$RVE	= 1		;REQUEST VERIFICATION MESSAGE
PF$RLI	= 2		;REQUEST LINK INTERCEPT (MEANS THIS IS LEVEL 1 NSP)
PF$RRI	= 4		;REQUEST ROUTING INTERCEPT
 
;
; NODE DATA BASE DEFINTIONS
;
	.ASECT
.=0
D$FLG:	.BLKW	1	; NODE ENTRY FLAGS
D$CHN:	.BLKW	1	; POINTER TO PHYSICAL LINK BLOCK
D$USE:	.BLKB	1	; NUMBER OF LOGICAL LINKS
D$LNG:	.BLKB	1	; LENGTH OF NODE NAME
D$NAM:	.BLKW	3	; NODE NAME
D$LEN:	.BLKW	0	; LENGTH OF NODE ENTRY
	.PSECT
 
;
; NODE ENTRY FLAGS DEFINTIONS:
;
DF$TMP	= 100000	; THIS IS THE SCRATCH NODE NAME ENTRY
DF$LCL	=  40000	; THIS IS THE LOCAL NODE NAME
DF$ADJ	=  20000	; THIS IS AN ADJACENT NODE
DF$REM	=  10000	; THIS IS A NON ADJACENT NODE
DF$LNK	=   4000	; REMOVE ENTRY WHEN USE COUNT GOES TO ZERO
 
DF$FRE	= DF$LCL!DF$ADJ!DF$REM ; MASK TO DETECT A FREE NODE ENTRY
 
;
; PASSWORD DESCRIPTOR ENRTY DEFINITIONS
;
	.ASECT
.=0
V$FLG:	.BLKW	1	; PASSWORD VALIDITY FLAGS
V$RCV:	.BLKB	8.	; RECEIVE PASSWORD
V$XMT:	.BLKB	8.	; TRANSMIT PASSWORD
V$LEN:	.BLKW	0	; LENGTH OF PASSWORD ENTRY
	.PSECT
 
;
; VALIDITY FLAGS DEFINITIONS:
;
VF$RCV	= 100000	; RECEIVE PASSWORD IS VALID
VF$XMT	=  40000	; TRANSMIT PASSWORD IS VALID
 
 
;
; STATISTICS DESCRIPTOR ENTRY DEFINITIONS
;
	.ASECT
.=0
S$SEC:	.BLKW	1	; SECONDS SINCE LAST ZEROED
S$UMS:	.BLKW	1	; USER MESSAGES SENT
S$UMR:	.BLKW	1	; USER MESSAGE RECEIVED
S$EMR:	.BLKW	1	; EXTRANIOUS MESSAGES RECEIVED
S$NKS:	.BLKW	1	; NAKS TRANSMITTED
S$FMT:	.BLKW	1	; FORMAT ERRORS
S$RES:	.BLKW	1	; RESOURCE ALLOCATION FAILURES
S$SNI:	.BLKW	1	; SUCESSFUL NODE INITS
S$UNI:	.BLKW	1	; UNSUCCESSFUL NODE INITS
S$LNK:	.BLKW	1	; CURRENT NUMBER OF LOGICAL LINKS
S$MLK:	.BLKW	1	; MAXIMUM NUMBER OF LOGICAL LINKS
	.BLKW	5	; RESERVED STORAGE
S$LEN:	.BLKW	0	; LENGTH OF THE STATISTICS BLOCK
	.PSECT
 
 
	.ENDM	NSDDB$
	.MACRO	NSPDF$
	.MCALL	NSPIF$
	.MCALL	NCON$,NACC$,NREJ$,NDIS$,NDAT$,NINT$,NRTN$,NRTI$
	.MCALL	NMOD$,NQRY$,NABO$,NXON$,NXOF$,NCBK$,NCAC$
	.MCALL	GTULA$,GTLLA$,GTSEG$,GTCNT$
	NSPIF$		; INVOKE SYSTEM INTERFACE DEFINITIONS
	.MACRO	NSPDF$
	.ENDM
	.ENDM
	.MACRO	NSPIF$
;
; USER FUNCTION CODES (FOR C.MOD)
;
; NOTE: THESE SUBFUNCTION CODES ARE ONLY THOSE CODE SEEN AT THE SYSTEM
;	USER INTERFACE. NSP USES ADDITIONAL SUBFUNCTION CODES INTERNALY.
;
; SUBFUNCTION CODES FOR TRANSMIT ENABLE, TRANMIT COMPLETE,
; RECEIVE COMPLETE.
;
NT$CON	= 0		; CONNECT
NT$DAT	= 2		; DATA
NT$INT	= 4		; INTERRUPT
NT$SNG	= 6		; SINGLE MESSAGE (NOT IMPLEMENTED)
NT$DIS	= 10		; DISCONNECT	(TRANSMIT ONLY)
NT$MOD	= 12		; MODIFY	(TRANSMIT ONLY)
NT$QRY	= 14		; QUERY		(TRANSMIT ONLY)
NT$XON	= 16		; BACK PRESSURE ON (TRANSMIT ONLY)
NT$XOF	= 20		; BACK PRESSURE OFF (TRANSMIT ONLY)
NT$ABO	= 22		;USER ABORT        (TRANSMIT ONLY)
 
;
; SUBFUNCTION CODES FOR RECEIVE ENABLE & BUFFER RETURN.
;
NT$RTN	= 0		; BUFFER RETURN
NT$ACC	= 2		; CONNECT ACCEPT
NT$REJ	= 4		; CONNECT REJECT
NT$SNG	= 6		; SINGLE MESSAGE (NOT IMPLEMENTED)
NT$RTI	= 10		; INTERRUPT MESSAGE RETURN
 
;
; SUBFUNCTION CODES FOR CONTROL ENABLE AND CONTROL COMPLETE.
;
;	THESE ARE SYNCHRONIZED WITH THE NORMAL CONTROL SUBFUNCTIONS.
;
;
NT$ADS	= 0		; ASYNCRONOUS DISCONNECT
NT$ON	= 2		; PHYSICAL LINK ON
NT$STP	= 4		; PHYSICAL LINK STOP
			; BACKPRESSURE VALUES ARE DEFINED ELSEWHERE
NT$NAK	= 22		; NAK COMPLETE FOR SYSTEM INTERFACE
NT$OFF	= 26		; PHYSICAL LINK OFF
;
; FUNCTION CODE MODIFIER FLAGS  (C.STS)
;
; FOR CONNECT INITIATE AND RECEIVE CONNECT INITIATE
;
NT.NFL	= 0			;REQUESTS NO FLOW CONTROL
NT.SFL	= 1			;REQUESTS SEGMENT FLOW CONTROL
NT.MFL	= 2			;REQUESTS MESSAGE FLOW CONTROL
 
;
; FOR TRANSMIT DATA
;
NT.MOM	= 0*20			; MIDDLE SEGMENT OF MESSAGE
NT.BOM	= 2*20			; BEGINNING SEGMENT OF MESSAGE
NT.EOM	= 4*20			; END SEGMENT OF MESSAGE
NT.SOL	= NT.EOM!NT.BOM		; SOLE SEGMENT OF MESSAGE
 
;
; FOR DATA BUFFER RETURN
;
NT.ACK	= 1			; ACKNOWLEDGE SEGMENT
NT.NAK	= 2			; NEGATIVE SEGEMENT ACKNOWLEDGE
NT.XOF	= 1*4			; BACKPRESSURE OFF
NT.XON	= 2*4			; BACKPRESSURE ON
NT.MOD	= 1*20			; MODIFY FLOW COUNT
NT.FCN	= 77*400		; FLOW COUNT MODIFICATION
NT.MD1	= NT.MOD!400		; INCREMENT FLOW COUNT
 
;
; SUCCESS AND  RETURN CODES (C.STS)
;
NS.SUC	= 1			; SUCCESS
 
;
; COMPLETION CODES USED ON CONNECT COMPLETE AND CONNECT RECEIVE
;
NS.NFL	= 1			; SUCCESS - NO FLOW CONTROL
NS.SFL	= 2			; SUCCESS - SEGMENT FLOW CONTROL
NS.MFL	= 3			; SUCCESS - MESSAGE FLOW CONTROL
 
;
; COMPLETION CODES USED ON RECEIVE COMPLETE OF DATA
;
NS.MOM	= NT.MOM		; SUCCESS - MIDDLE SEGMENT OF MESSAGE
NS.BOM	= NT.BOM		; SUCCESS - BEGGING SEGMENT OF MESSAGE
NS.EOM	= NT.EOM		; SUCCESS - END SEGMENT OF MESSAGE
NS.SOL	= NT.BOM!NT.EOM		; SUCCESS - SOLE SEGMENT OF MESSAGE
 
;
; SUCCESS CODES FOR CONTROL COMPLETIONS
;
NS.SET	= 2			; STATE REQUESTED IS ALREADY SET
 
;
;ERROR RETURN CODES (C.STS)
;
NE.DIS	= -1			; LOGICAL LINK DISCONNECTED
NE.ABO	= -2			; LOGICAL LINK ABORTED
NE.REJ	= -3			; LOGICAL LINK REJECTED BY REMOTE USER
NE.NOD	= -4			; CANNOT COMMUNICATE WITH REMOTE NODE
NE.RES	= -5			; NO MORE RESOURCES AVAILABLE
NE.TIM	= -6			; TOO MANY INTERRUPT MESSAGES
NE.ACT	= -7			; LOGICAL LINK ACTIVE
NE.FMT	= -10			; FORMAT ERROR IN CONNECT REQUEST
NE.CLS	= -11			; FLOW CLOSED ON LINK
NE.NDT	= -12			; LINK IN WRONG STATE (NOT IN DATA STATE)
;
; NSP CONFIGURATION PARAMETERS
;
 
;
; SIZES OF RESERVED BUFFER AREAS
;
;/////////////////////////////////
;/////TEMPORARY
;////////
N$$DAT	= 24.			;MAX LENGTH OF AN NSP HEADER
N$$OVR	= N$$DAT+10.		;TOTAL NUMBER OF PROTOCOL OVERHEAD BYTES
N$$OPT	= 16.			;MAX LENGTH OF OPT DATA(CONNECT)
N$$INT	= 16.			;MAX LENGTH OF INTERRRUPT DATA
N$$DIS	= 16.			;MAX LENGTH OF OPT DATA(DISCONNECT)
NP$RTR	= 3.			;MAX # OF RETRIES AFTER TIMEOUT
N.RSRV	= N$$DAT		;NUMBER OF BYTES TO RESERVE FOR NSP HEADER
;
;
; CONNECT INITIATE AND CONNECT PENDING BLOCK OFFSET DEFINITIONS
;
	.ASECT
.=0
N.NODE:	.BLKB	6	; DESTINATION NODE NAME (ASCII SPACE FILLED)
N.SEG:	.BLKW	1	; LOGICAL LINK SEGMENT SIZE
N.DFMT:	.BLKB	1	; DESTINATION DESCRIPTOR FORMAT TYPE
N.DOBJ:	.BLKB	1	; DESTINATION OBJECT TYPE
N.DDL1:			; DESTINATION DESCRIPTOR LENGTH (FORMAT 1)
N.DGRP:	.BLKW	1	; DESTINATION GROUP CODE (FORMAT 2)
N.DDS1:			; DESTINATION PROCESS NAME (FORMAT 1)
N.DUSR:	.BLKW	1	; DESTINATION USER CODE (FORMAT 2)
N.DDL2:	.BLKW	1	; DESTINATION DESCRIPTOR LENGTH (FORMAT 2)
N.DDS2:	.BLKB	12.	; DESTINATION PROCESS NAME (FORMAT 2)
N.SFMT:	.BLKB	1	; SOURCE DESCRIPTOR FORMAT TYPE
N.SOBJ:	.BLKB	1	; SOURCE OBJECT TYPE
N.SDL1:			; SOURCE DESCRIPTOR LENGTH (FORMAT 1)
N.SGRP:	.BLKW	1	; SOURCE GROUP CODE (FORMAT 2)
N.SDS1:			; SOURCE PROCESS NAME (FORMAT 1)
N.SUSR:	.BLKW	1	; SOURCE USER CODE
N.SDL2:	.BLKB	12.	; SOURCE DESCRIPTOR LENGTH (FORMAT 2)
N.SDS2:	.BLKW	1	; SOURCE PROCESS NAME (FORMAT 2)
N.RQDL:	.BLKW	1	; ACCESS REQUESTOR ID LENGTH
N.RQID:	.BLKB	16.	; ACCESS REQUESTOR ID
N.PASL:	.BLKW	1	; ACCESS PASSWORD LENGTH
N.PASS:	.BLKB	8.	; ACCESS CONTROL PASSWORD
N.ACTL:	.BLKW	1	; ACCOUNTING INFORMATION LENGTH
N.ACNT:	.BLKB	16.	; ACCOUNTING INFORMATION
N.OPDL:	.BLKW	1	; OPTIONAL USER DATA LENGTH
N.OPTD:	.BLKB	16.	; OPTIONAL USER DATA
N.LGTH	= .		; LENGTH OF THE CONNECT BLOCK
 
	.IF DF	R$$11D!I$$AS
N.LGTH = -N.LGTH
	.ENDC
 
	.PSECT
 
;
; FORMAT TYPE DEFINITIONS
;
NC.FM0	=	000	; DESCRIPTOR FORMAT 0
NC.FM1	=	001	; DESCRIPTOR FORMAT 1
NC.FM2	=	002	; DESCRIPTOR FORMAT 2
 
	.ENDM	NSPIF$
	.MACRO	NSPIN$
;
;  MODIFICATIONS:
;
;	LW0001	17-MAY-78  LEE WEBBER
;			ADD SUBFUNCTION CODE NT$IDC
;
;
; SUBFUNCTION CODES USED INTERNALLY BY NSP FOR TRANSMIT ENABLE AND
; TRANSMIT COMPLETE.
;
NT$CC	= 12		; CONNECT CONFIRM
NT$LS	= 14		; LINK STATUS
NT$AKD	= 16		; DATA ACK/NAK
NT$AKI	= 20		; INTERRUPT/LS ACK/NAK
NT$ROU	= 22		; ROUTED MESSAGE  (RELEASE RESOURCE ON COMPLETION)
NT$IND	= 24		; INTERCEPTED DATA MESSAGE
NT$INL	= 26		; INTERCEPTED I/LS MESSAGE
NT$IDN	= 30		; INTERCEPT NODE NAK'D DATA SEGMENT
NT$ILN	= 32		; INTERCEPT NODE NAK'D I/LS SEGMENT
NT$IDC	= 34		; INTERCEPTED DC MESSAGE                                ;LW0001
;
; DISCONNECT REASON CODES
;
ER$SSR	= 0		;NO ERROR OF SINGLE MESSAGE REPLY
ER$RES	= 1.		;RESOURCE ERROR
ER$NOD	= 2.		;NODE DOES NOT EXIST
ER$NSD	= 3.		;NODE SHUTTING DOWN
ER$UOB	= 4.		;OBJECT UNSUPPORTED OR DOES NOT EXIST
ER$FMT	= 5.		;INVALID FORMAT FOR OBJECT SPECIFICATION
ER$MLB	= 6.		;MAILBOX FULL FOR QUEUING MESSAGE TO OBJECT
ER$GEN	= 7.		;UNSPECIFIED ERROR CONDITION
ER$TPA	= 8.		;THIRD PARTY ABORTED LINK
ER$ABT	= 9.		;USER PROCESS ABORT REQUEST
ER$IFC	= 24.		;INVALID FLOW CONTROL VALUE REQUESTED
ER$TCN	= 32.		;TOO MANY CONNECTS TO NODE
ER$TCO	= 33.		;TOO MANY CONNECTS TO OBJECT
ER$ACC	= 34.		;ACCESS NOT PERMITTED, UNACCEPTABLE RQSTRID OR PASSWORD
ER$ILS	= 35.		;LOGICAL LINK SERVICES MISMATCH
ER$ACT	= 36.		;UNACCEPTABLE ACOUNT INFORMATION
ER$SSS	= 37.		;SEGMENT SIZE TOO SMALL
ER$ABO	= 38.		;LINK ABORT DUE TO USER FAULT OR CONNECT TIMEOUT
ER$COM	= 39.		;UNABLE TO COMMUNICATE WITH NODE
ER$FCF	= 40.		;FLOW CONTROL FAILURE
ER$STA	= 41.		;MESSAGE RECEIVED FOR IDLE STATE
ER$CDI	= 42.		;CONFIRMATION OF DI MESSAGE
ER$IMG	= 43.		;IMAGE DATA FIELD TOO LONG
;
;	LOGICAL LINK TABLE (LLT) DEFINITIONS - PART 1
;
; THIS TABLE DEFINES THE CONTEXT OF A SINGLE LOGICAL LINK.
; THERE IS ONE SUCH TABLE FOR EACH ACTIVE LOGICAL LINK IN
; THE SYSTEM.
;
;	!------------------------------------------------!
;	!  LINK LEVEL & TYPE	!	STATE		 !
;	!------------------------------------------------!
;	!	LOGICAL LINK ADDRESS (LLA)		 !
;	!------------------------------------------------!
;	! # XMITS IN PROG  DATA ! # XMITS IN PROG  I/LS  !
;	!------------------------------------------------!
;	!	REMOTE NODE POINTER			 !
;	!------------------------------------------------!
;	!	REMOTE LINK ADDRESS			 !
;	!------------------------------------------------!
;	!	LINK FLAGS				 !
;	!------------------------------------------------!
;	!	NEXT DATA SEGMENT NUMBER TO BE ASSIGNED  !
;	!------------------------------------------------!
;	!	NEXT INT/LS SEGMENT NUMBER TO BE ASSIGNED!
;	!------------------------------------------------!
;	!	NEXT DATA SEGMENT NUMBER TO BE RECEIVED  !
;	!------------------------------------------------!
;	!	NEXT INT/LS SEGMENT NUMBER TO BE RECEIVED!
;	!------------------------------------------------!
;	!	LAST DATA SEGMENT NUMBER ACK'D		 !
;	!------------------------------------------------!
;	!	LAST INT/LS SEGMENT NUMBER ACK'D	 !
;	!------------------------------------------------!
;	!	HIGHEST ACKNUM FROM USER ON DATA CHANNEL !
;	!------------------------------------------------!
;	!	DELAYED ACK FLAG ON I/LS CHANNEL	 !
;	!------------------------------------------------!
;	!	NUMBER OF DATA SEGMENTS TO ACK		 !
;	!------------------------------------------------!
;	!	NUMBER OF I/LS SEGMENTS TO ACK		 !
;	!------------------------------------------------!
;	!	PDV & USERS LINK ADDRESS (ULA)		 !
;	!------------------------------------------------!
;	! INTERRUPT COUNT	! TRANSMIT COUNT	 !
;	!------------------------------------------------!
;	!	TRANSMIT QUE HEADER			 !
;	!------------------------------------------------!
;	!	TIMED DATA CCB QUEUE HEADER		 !
;	!------------------------------------------------!
;	!	TIMED INTERRUPT/LS CCB QUEUE HEADER	 !
;	!------------------------------------------------!
;	!  DATA RETRY COUNT	!  DATA TIMER VALUE	 !
;	!------------------------------------------------!
;	!  INT/LS RETRY COUNT	!  INT/LS TIMER VALUE	 !
;	!------------------------------------------------!
;
;
;	LLT DEFINITIONS (CONT'D - PART 2)
;
; THESE SYMBOL DEFINITIONS CORRESPOND TO THE OFFSETS
; PRESENTED IN THE PREVIOUS DIAGRAM FOR AN LLT.
;
; NOTE:
;	IN MOST CASES, THE NSP CODE REFERENCES EACH
;	FIELD BY SYMBOL, INDEPENDENTLY FROM EVERY OTHER
;	FIELD. THERE ARE THE FOLLOWING EXCEPTIONS.
;
;	L.STA & L.LVL MUST HAVE AN OFFSET OF ZERO.
;
;	THESE BYTES MUST NOT BE UNPAIRED:
;		(L.USTA,L.NSTA)
;		(L.TIMD,L.RTRD)
;		(L.TIML,L.RTRL)
;
; THE OFFSET DEFINITIONS ARE:
;
	.ASECT
.=0
L.STA:	.BLKB	1	;STATE BYTE
L.LVL:	.BLKB	1	;LINK LEVEL AND TYPE
L.LLA:	.BLKW	1	;LOCAL LOGICAL LINK ADDRESS
L.TIPI:	.BLKB	1	;# OF TRANSMIT IN PROGRESS I/LS
L.TIPD:	.BLKB	1	;# OF TRANSMITS IN PROGRESS DATA
L.REM:	.BLKW	1	;REMOTE NODE POINTER
L.RLA:	.BLKW	1	;REMOTE LOGICAL LINK ADDRESS
L.FLG:	.BLKW	1	;LINK FLAGS
L.NXN:	.BLKW	1	;NEXT DATA SEGMENT NUMBER TO BE ASSIGNED
L.NIN:	.BLKW	1	;NEXT I/LS SEGMENT NUMBER TO BE ASSIGNED
L.RNO:	.BLKW	1	;NEXT DATA SEGMENT NUMBER TO BE RECEIVED
L.LNO:	.BLKW	1	;NEXT I/LS SEGMENT NUMBER TO BE RECEIVED
L.LDA:	.BLKW	0	;LAST DATA SEGMENT NUMBER ACKNOWLEDGED BY NET
L.USTA:	.BLKB	1	;DISCONNECT SUBSTATE FOR THE USER
L.NSTA:	.BLKB	1	;DISCONNECT SUBSTATE FOR THE NETWORK
L.LIA:	.BLKW	0	;LAST I/LS SEGMENT NUMBER ACKNOWLEDGED BY NET
L.CIQ:	.BLKW	1	;CONNECT INITIATE & CONNECT CONFIRM PENDING QUEUE
L.USA:	.BLKW	1	;HIGHEST DATA SEGMENT NUMBER ACK'D BY USER
L.LSA:	.BLKW	1	;HIGHEST I/LS SEGMENT NUMBER ACK'D BY THIS NODE
L.NDA:	.BLKW	0	;NUMBER OF DATA SEGMENTS TO ACKNOWLEDGE
L.UDQ:	.BLKW	1	;DISCONNECT INITIATE PENDING QUEUE
L.NLA:	.BLKW	0	;NUMBER OF I/LS SEGMENTS TO ACKNOWLEDGE
L.DCR:	.BLKW	1	;DISCONNECT REASON CODE
L.ULA:	.BLKB	1	;USERS LINK ADDRESS (ULA)
L.PDV:	.BLKB	1	;USERS PDV INDEX
L.TC:	.BLKB	1	;NUMBER OF DATA SEGMENTS OR MESSAGES REQUESTED
L.TIC:	.BLKB	1	;NUMBER OF INTERRUPT MESSAGES REQUESTED
L.LSF:	.BLKW	1	;FLOW CONTROL REQUEST COUNT STATUS
L.XQ1:	.BLKW	1	;TRANSMIT QUEUE HEADER
L.XQ2:	.BLKW	1	;TIMED DATA CCB QUEUE HEADER
L.XQ3:	.BLKW	1	;TIMED I/LS CCB QUEUE HEADER
L.LNG1:	.BLKW	0	;LENGTH OF TABLE FOR LEVEL 1
	.IF DF	N$$LV2
L.TIMD:	.BLKB	1	;DATA TIMER VALUE
L.RTRD:	.BLKB	1	;DATA RETRY COUNT
L.TIML:	.BLKB	1	;INT/LS TIMER VALUE
L.RTRL:	.BLKB	1	;INT/LS RETRY COUNT
L.LNG2:	.BLKW	0	;LENGTH OF TABLE FOR LEVEL 2
	.ENDC
	.PSECT
;
;	LLT DEFINITIONS (CONT'D - PART 3)
;
;
; LOGICAL LINK STATE DEFINITIONS:
;
ST$CIS	= 1		;CONNECT INITIATE SENT
ST$CC	= 2		;RECEIVED CI, SENT CC
ST$CIR	= 3		;CONNECT INITIATE RECEIVED
ST$DAT	= 5		;NORMAL DATA TRANSFER
ST$DIP	= 6		;DISCONNECT IN PROGRESS
;
; DISCONNECT SUB-STATES
;
ST$UNR	= 11		;USER NOTIFICATION OF DISCONNECT REQUIRED
ST$DIR	= 12		;DISCONNECT RECEIVED FROM NETWORK
ST$UDI	= 13		;DISCONNECT RECEIVED FROM USER
ST$DIS	= 14		;DISCONNECT SENT (DC RESPONSE REQUIRED)
ST$DID	= 15		;DISCONNECT DONE (NO RESPONSE REQUIRED)
;
; LINK LEVEL AND TYPE DEFINITIONS:
;
LF.RSU	= 100000	; RESOURCE RECOVERY REQUIRED
LF.LCL	=  40000	; LOCAL LOGICAL LINK
LF.INT	=    400	; INTERCEPT LINK
LF.DSP	= 40		;STOP DATA FLOW
LF.DST	= 20		;START DATA FLOW
LF.DFL	= LF.DSP!LF.DST	;DATA FLOW CHANGE BITS
LF.FPN	= 10		;FLOW NOTIFICATION TO LOCAL PROCESS PENDING
;	= 6		;INTERCEPT FLAGS
LF.NPN	= 1		;NAK COMPLETE TO LOCAL PROCESS PENDING
;
; THE FLAG DEFINITIONS ARE:
;
LF.MMF	= 100000	;MY MESSAGE FLOW CONTROL
LF.MSF	= 40000		;MY SEGMENT FLOW CONTROL
LF.HMF	= 20000		;HIS MESSAGE FLOW CONTROL
LF.HSF	= 10000		;HIS SEGMENT FLOW CONTROL
LF.NTS	= 2000		;DATA OR LS RECEIVED IN CIS STATE - SEND NAKS
LF.HF0	= 1000		;LINK IS BACKPRESSURED - DON'T TRANSMIT
LF.NKS	= 400		;OUR USER HAS SENT A DATA NAK, NEVER SENDS I/LS NAK
LF.NKR	= 200		;NSP HAS RECEIVED A DATA NAK.
LF.INR	= 100		;NSP HAS RECVD A I/LS NAK
;
; FLOW CONTROL STATUS DEFINITIONS
;
LS.DLS	= 200		;LINK SERVICE FOR DATA IS NOT OUTSTANDING (UNACKNOWLEDGED)
LS.ILS	= 200		;LINK SERVICE FOR INTERRUPT IS NOT OUTSTANDING
;
; INTERCEPT LINK TABLE
;
; THIS TABLE CONTAINS INFORMATION REQUIRED FOR THE
; INTERCEPT FUNCTION. THERE IS ONE SUCH LINK FOR
; EACH LOGICAL LINK BEING INTERCEPTED ON A GIVEN LINE.
;
;	!------------------------------------------------!
;	!  LINK LEVEL & TYPE	!	STATE		 !
;	!------------------------------------------------!
;	!	LOGICAL LINK ADDRESS (LLA)		 !
;	!------------------------------------------------!
;	! # XMITS IN PROG  DATA ! # XMITS IN PROG  I/LS  !
;	!------------------------------------------------!
;	!	REMOTE NODE INDEX			 !
;	!------------------------------------------------!
;	!	REMOTE LINK ADDRESS			 !
;	!------------------------------------------------!
;	!			! LINE NUMBER		 !
;	!------------------------------------------------!
;	!	USERS LINK ADDRESS  (ULA)		 !
;	!------------------------------------------------!
;	!	LINK FLAGS				 !
;	!------------------------------------------------!
;	!	NEXT DATA SEGMENT NUMBER TO BE ASSIGNED  !
;	!------------------------------------------------!
;	!	NEXT INT/LS SEGMENT NUMBER TO BE ASSIGNED!
;	!------------------------------------------------!
;	!	NEXT DATA SEGMENT NUMBER TO BE RECEIVED  !
;	!------------------------------------------------!
;	!	NEXT INT/LS SEGMENT NUMBER TO BE RECEIVED!
;	!------------------------------------------------!
;	!	LAST DATA SEGMENT NUMBER ACK'D		 !
;	!------------------------------------------------!
;	!	LAST INT/LS SEGMENT NUMBER ACK'D	 !
;	!------------------------------------------------!
;	!	HIGHEST ACKNUM FROM USER ON DATA CHANNEL !
;	!------------------------------------------------!
;	!	DELAYED ACK FLAG ON I/LS CHANNEL	 !
;	!------------------------------------------------!
;	!	NUMBER OF DATA SEGMENTS TO ACK		 !
;	!------------------------------------------------!
;	!	NUMBER OF I/LS SEGMENTS TO ACK		 !
;	!------------------------------------------------!
;	!	INTERCEPTED LINKS ADDRESS		 !
;	!------------------------------------------------!
;	!	HIGHEST ACK FOR USER ON I/LS CHANNEL	 !
;	!------------------------------------------------!
;	!	INTERCEPTED NODES INDEX			 !
;	!------------------------------------------------!
;
;	ILT DEFINITIONS CONTINUED
;
; THESE SYMBOL DEFINITIONS CORRESPOND TO THE OFFSETS
; PRESENTED IN THE PREVIOUS DIAGRAM.
;
; NOTE:
;	IN MOST CASES THE NSP CODE REFERENCES EACH FIELD
;	BY SYMBOL, INDEPENDENTLY FROM EVERY OTHER FIELD.
;	THERE ARE THE FOLLOWING EXCEPTIONS,HOWEVER, WHERE
;	PAIRS OF FIELDS ARE ASSUMED, BY THE NSP CODE, TO
;	OCCUPY ADJACENT BYTES IN THE SAME WORD.
;	THESE BYTES MUST NOT BE UNPAIRED:
;		(L.USTA,L.NSTA)
;		(L.TC,L.TIC)
;
; THE OFFSETS ARE:
;
;	NOTE:
;		THE OFFSETS FOR THE ILT WILL CORRESPOND EXACTLY
;		WITH THE LLT DEFINITIONS, EXCEPT FOR 3 WORDS, AND
;		THIS WILL BE COMMENTED.
	.IF DF	N$$ICF
I.STA	= L.STA		;SAME
I.LVL	= L.LVL		;SAME
I.LLA	= L.LLA		;SAME
I.TIPI	= L.TIPI	;SAME
I.TIPD	= L.TIPD	;SAME
I.REM	= L.REM		;SAME
I.RLA	= L.RLA		;SAME
I.FLG	= L.FLG		;SAME
I.NXN	= L.NXN		;SAME
I.NIN	= L.NIN		;SAME
I.RNO	= L.RNO		;SAME
I.LNO	= L.LNO		;SAME
I.LDA	= L.LDA		;SAME
I.LIA	= L.LIA		;SAME
I.USA	= L.USA		;SAME
I.LSA	= L.LSA		;SAME
;I.ISA	= L.ISA		;SAME
I.NDA	= L.NDA		;SAME
I.NLA	= L.NLA		;SAME
I.USTA	= L.USTA	;SAME
I.NSTA	= L.NSTA	;SAME
I.ILA	= L.ULA		;INTERCEPTED LINKS ADDRESS
I.IREM	= L.TC		;INTERCEPTED LINKS INDEX
	.ENDC
;
;	ILT DEFINITIONS CONTINUED
;
; THE FLAG DEFINITIONS ARE
;
	.IF DF	N$$ICF
IF.NRD	= LF.NKR	;SAME..DATA SEGMENT NAK'D BY NET
IF.NKS	= LF.NKS	;SAME
IF.NTS	= LF.NTS	;REDEFINES..RECV'D DATA/LS IN CIR OR CIS STATE
IF.NRI	= LF.MMF	;REDEFINES..I/LS SEGMENT HAS BEEN NAK'D BY NET
IF.INS	= LF.MSF	;REDEFINES..I/LS NAK HAS BEEN SENT
IF.SND	= 4		;SEND NAK ON DATA CHANNEL LATER
IF.SNL	= 2		;SEND NAK ON I/LS CHANNEL LATER
	.ENDC
;
; SYMBOL DEFINITIONS FOR NSP MESSAGE TYPES
;
;
;
; ROUTE HEADER FLAG DEFINTIONS
;
RH.CNT	= 1		; BLOCKING COUNT FIELD
RH.HDR	= 2		; ROUTE HEADER FIELD
RH.PRI	= 14		; MESSAGE PRIORITY FIELD MASK
RH.PR1	= 04		; MESSAGE PRIORITY 1
RH.EFM	= 20		; COMMUNICATION PROTOCOL FORMAT
RH.RFM	= 100		; ROUTE HEADER FORMAT (1=ASCII)
;
; MSGFLGS DEFINITIONS
;
; EACH NSP MESSAGE SENT OR RECEIVED CONTAINS A MSGFLGS
; FIELD. THIS TABLE DEFINES THE VALUES FOR THAT FIELD.
;
; NOTE: SINCE THESE VALUES ARE USED FOR DISPATCHING,
; 	THEY SHOULD NOT BE MODIFIED WITHOUT EXAMING ROUTINES
; 	RCVMSG AND RCVCTL !
;
; BITS 0,1 (INDICATE AS <0:1>) ARE ALWAYS 0
;
; BITS <2:3> DEFINE THE GENERAL CATAGORY OF MESSAGE
;
MF.DAT	= 0*4		;<2:3>=0  DATA MESSAGE
MF.ACK	= 1*4		;<2:3>=1  ACKNOWLEDGE MESSAGE
MF.CTL	= 2*4		;<2:3>=2  CONTROL MESSAGE
			;<2:3>=4  RESERVED
;
; BITS <4:6> TAKE ON VALUES DEPENDING ON THE VALUE OF <2:3>
; DATA MSG. BITS ARE MD.NN, SINGLE MESSAGE BITS ARE MS.NN
; LINK STATUS BITS ARE ML.NN, AND CONTROL MESSAGE
; BITS ARE MC.NN.
;
MD.IM	= 1*20		;<4>=1  INTERRUPT/LINK SERVICES MESSAGE
MD.BM	= 2*20		;<5>=1  BEGINNING OF MESSAGE
MD.EM	= 4*20		;<6>=1  END OF MESSAGE
MD.ILS	= 2*20		;<5>=1	INTERRUPT
;
; LINK SERVICES DEFINITIONS (LSFLAGS)
;
; FC MOD <0:1>
;
LS.FC0	= 1		; BACKPRESSURE
LS.FC1	= 2		; RELEASE BACKPRESSURE
;
; FCVAL INT <2:3>
;
LS.FCC	= 4		; INTERRUPT REQUEST COUNT
;
; MSGACK <4:5>
;
LS.MAK	= 20		; MESSAGE ACKNOWLEDGE
LS.MNK	= 40		; MESSAGE NEGATIVE ACKNOWLEDGE
;
; RESERVED BITS
;
LS.RSV	= 300		; RESERVED BITS
LS.RES	= LS.RSV!LS.MAK!LS.MNK ; MASK FOR CHECKING RESERVED BITS
MA.DA	= 0*20		;ACKNOWLEDGES DATA SEGMENT
MA.IL	= 1*20		;ACKNOWLEDGES INTERRUPT OF LINKS SERVICES MESSAGE
;
; FOR MC. VALUES, <4:6> IS A VALUE FIELD INDICATING WHAT
; TYPE OF CONTROL MESSAGE THIS IS:
;
MC.NO	= 0*20		;<4:6>=0 NOP MESSAGE
MC.CI	= 1*20		;<4:6>=1 CONNECT INITIATE
MC.CC	= 2*20		;<4:6>=2 CONNECT CONFIRM
MC.DI	= 3*20		;<4:6>=3 DISCONECT INITIATE
MC.DC	= 4*20		;<4:6>=4 DISCONNECT CONFIRM
MC.ST	= 5*20		;<4:6>=5 START UP MESSAGE
			;<4:6>=6 RESERVED
			;<4:6>=7 RESERVED
;
; CONNECT INITIATE
;
; SERVICES
;
; LTYPE <0:1>
;
CL$TYP	= 1		;LOGICAL LINK ESTABLISHED
;
; FCOPT <2:3>
;
CL$SFL	= 4		;SEGMENT FLOW CONTROL
CL$MFL	= 10		;MESSAGE FLOW CONTROL
;
; ACKOPT <4:5>
;
CL$NRM	= 20		;NORMAL LINK (DELIVERY OPTION)
CL$ACK	= 40		;MESSAGE ACK/NAK
;
;MENU BITS FOR ACCESS CONTROL INFORMATION
;
CL.MU1	= 1		;REQUESTOR ID, PASSWORD, AND ACCOUNT FIELDS INCLUDED
CL.MU2	= 2		;USERDATA FIELD INCLUDED
CL.RES	= ^C<CL.MU1!CL.MU2> ;RESERVED MENU BITS
;
; NODE INIT MESSAGE TYPES
;
; STARTTYPE VALUE DEFINITIONS
;
NI.INI	= 1		;INIT MESSAGE
NI.VER	= 2		;VERIFICATION MESSAGE
;
; NODE FUNCTIONS SUPPORTED
;
NI.FRT	= 1		;SUPPORT ROUTE THROUGH
NI.FLI	= 2		;SUPPORT LINK INTERCEPT
NI.FRI	= 4		;SUPPORT ROUTING INTERCEPT
NI.FUB	= 10		;SUPPORT MESSAGE UNBLOCKING
;
; NODE FUNCTIONS REQUESTED
;
NI.RVE	= 1		;REQUEST VERIFICATION MESSAGE
NI.RLI	= 2		;REQUEST LINK INTERCEPT
NI.RRI	= 4		;REQUEST ROUTING INTERCEPT
;
; ACK/NAK FLAGS
;
LA.MSK	= 170000	;MASK TO PERFORM 12 BIT WRAP AROUND
LA.ACK	= 100000	;ACKNUM IDENTIFIER AND ACK REQUIRED FLAG
LA.NAK	= 110000	;NAKNUM IDENTIFIER AND NAK REQUIRED FLAG
LA.NMS	= 010000	;MASK TO TEST FOR NAK AND WRAP AROUND
LA.RES	= 060000	;RESERVED BITS IN ACK/NAK FIELD
;
; TEMPORARY
;
;
; NSP MISCELLANEOUS SYMBOLS
;
ACKMASK=170000		;CLEAR UPPER 4 BITS OF ACKNUM
ACKRES = 60000		;CHECK FOR RESERVED BITS IN ACKNUM
ACKWRAP= 10000		;12 BIT WRAPAROUND ADJUSTMENT
WINDOW = 2048.		;RANGE FOR RECVD DATA AND LINK SERVICE SEGMENTS ON SEGNUMS
ACKPRE = 100000		;ACKNUM PRESENT BIT
A.NAK = 10000		;NAK BIT IN ACKNUM
NETTIM = 5		;TIMING VALUE FOR DATA, INTERRUPT, AND LINK SERVICE MESSAGES
MSGHDR	= 7		;LENGTH OF MESSAGE HEADER FOR INTERRUPT AND DATA MESSAGES
	.ENDM	NSPIN$
	.MACRO	NSPSY$
	.MCALL	NSPIF$,NSPIN$,NSDDB$
	NSPIF$		; INVOKE SYSTEM INTERFACE DEFINITIONS
	NSPIN$		; INVOKE INTERNAL DEFINTIONS
	NSDDB$		; INVOKE THE DATA BASE DEFINITIONS
	.MACRO	NSPSY$
	.ENDM
	.ENDM
	.MACRO	NSPVR$
RT$VER	= 3		; ROUTING VERSION NUMBER
RT$ECO	= 1		; 	  ECO NUMBER
RT$REV	= 0		;	  MINOR REVION LEVEL
 
CM$VER	= 3		; COMMUNICATION VERSION NUMBER
CM$ECO	= 1		;		ECO NUMBER
CM$REV	= 0		;		MINOR REVISION LEVEL
	.ENDM	NSPVR$
	.MACRO	NSSYM$	B
 
NO.TAS ='B' 0			;GENERAL TASK, USER PROCESS
NO.FA1 ='B' 1			;FILE ACCESS LISTENER (V1)
NO.TC1 ='B' 5			;TASK CONTROL LISTENER (V1)
NO.TCL ='B' 17			;TASK CONTROL LISTENER
NO.TLK ='B' 20			;TALK UTILITY
NO.FAL ='B' 21			;FILE ACCESS UTILITY
NO.RTL ='B' 22			;REMOTE TASK LOADER
NO.NCU ='B' 23			;NETWORK CONTROL UTILITY EXECUTOR
NO.DTR ='B' 77			;DECNET TEST RECEIVER
				;
NT.CON ='B' 1			;CONNECT
NT.INT ='B' 2			;INTERRUPT MESSAGE
NT.DSC ='B' 3			;USER SYNCHRONOUS DISCONNECT
NT.ABT ='B' 4			;USER ABORT
NT.ABO ='B' 5			;NETWORK ABORT
NT.MOP ='B' 10			;MOP EVENT
NT.LOG ='B' 11			;EVENT LOG DATA
				;
NE$SSR ='B' 0			;NO ERROR OR SINGLE MESSAGE REPLY
NE$RES ='B' 1.			;RESOURCE ALLOCATION FAILURE
NE$NOD ='B' 2.			;DESTINATION NODE DOES NOT EXIST
NE$NSD ='B' 3.			;NODE SHUTTING DOWN
NE$UOB ='B' 4.			;DESTINATION PROCESS DOES NOT EXIST
NE$FMT ='B' 5.			;INVALID PROCESS NAME FIELD
NE$MLB ='B' 6.			;MAILBOX FULL FOR QUEUING MESSAGE TO OBJECT
NE$GEN ='B' 7.			;UNSPECIFIED ERROR CONDITION
NE$TPA ='B' 8.			;THIRD PARTY ABORTED LOGICAL LINK
NE$ABT ='B' 9.			;LINK ABORT BY DIALOGUE PROCESS
NR$IFC ='B' 24.			;INVALID FLOW CONTROL VALUE
NE$TCN ='B' 32.			;TOO MANY CONNECTS TO NODE
NE$TCO ='B' 33.			;TOO MANY CONNECTS TO DESTINATION PROCESS
NE$ACC ='B' 34.			;ACCESS NOT PERMITTED - UNACCEPTABLE
				; RQSTRID OR PASSWORD
NE$ILS ='B' 35.			;LOGICAL LINK SERVICES MISMATCH
NE$ACT ='B' 36.			;INVALID ACCOUNT INFORMATION - NOT AUTHORIZED OR BROKE
NE$SSS ='B' 37.			;SEGMENT SIZE TOO SMALL
NE$ABO ='B' 38.			;USER PROGRAM FAULTED OR TIMED OUT
NE$COM ='B' 39.			;UNABLE TO COMMUNICATE WITH NODE
NE$FCF ='B' 40.			;FLOW CONTROL FAILURE
NE$STA ='B' 41.			;MESSAGE RECEIVED FOR IDLE STATE
NE$CDI ='B' 42.			;CONFIRMATION OF DISCONNECT INITIATE
				; MESSAGE
NE$IMG ='B' 43.			;IMAGE DATA FIELD TOO LONG
				;
IE.NNT ='B' -80.		;NOT A NETWORK TASK
IE.NDA ='B' -78.		;NO NETWORK DATA AVAILABLE
IE.NRJ ='B' -74.		;CONNECTION REJECTED BY NETWORK
IE.URJ ='B' -73.		;CONNECTION REJECTED BY USER
				;
IS.DAO ='B' 2.			;SUCCESS, BUT DATA OVERRUN
 
	.MACRO	NSSYM$,X
	.ENDM	NSSYM$
 
	.ENDM	NSSYM$
	.MACRO	NTLDF$	C,E,HOME
	.ASECT
	.=0
LR.STS:'C'	.BLKW	1	; FUNCTION CODE, STATUS BITS
				; "SET CEX" REQUEST BLOCK OFFSETS
LR.TCB:'C'	.BLKW	1	; NETACP'S TCB ADDRESS (POWERFAIL RECOVERY)
LR.EFN:'C'	.BLKW	1	; NETACP'S EVENT FLAG MASK WORD (DITTO)
	.=2			; "SET PROCESS" REQUEST BLOCK OFFSETS
LR.PRO:'C'	.BLKW	1	; PROCESS NAME (RAD50)
LO.INC:'C'	.BLKW	1	; INCREMENT VALUE (32. WORD BLOCKS)
LO.PAR:'C'	.BLKW	2	; PARTITION NAME (RAD50)
	.=2			; "SET LINE" REQUEST BLOCK OFFSETS
LR.LIN:'C'	.BLKW	1	; DDM NAME (RAD50)
LR.CTL:'C'	.BLKB	1	; CONTROLLER NUMBER
LR.UNT:'C'	.BLKB	1	; UNIT NUMBER
LO.CSR:'C'	.BLKW	1	; CSR ADDRESS
LO.PRI:'C'	.BLKW	1	; INTERRUPT PRIORITY (1 THRU 7)
LO.VCT:'C'	.BLKW	1	; INTERRUPT VECTOR
			; FUNCTION CODES
LS.CEX='E'1		; "SET CEX"
LS.PRO='E'2		; "SET PROCESS"
LS.LIN='E'3		; "SET LINE"
LX.CEX='E'4		; "CLEAR CEX"
LX.PRO='E'5		; "CLEAR PROCESS"
LX.LIN='E'6		; "CLEAR LINE"
LS.LMC='E'7		; RELOAD ALL KMC MICROCODE (AFTER POWERFAIL)
LS.ON='E'10		; "SET STATE LOCAL ON"
			; STATUS BITS
LS.OPT='E'400		; OPTIONAL PARAMETERS INCLUDED
LS.ECH='E'1000		; ECHO THE TEMPLATE
LS.TOP='E'2000		; LOAD PROCESS AT TOP OF PARTITION
			; "SET PROCESS"/"SET LINE" STATUS BITS
LS.FDX='E'4000		; FULL-DUPLEX
LS.HDX='E'10000		; HALF-DUPLEX
			; "SET CEX" STATUS BITS
LS.NTI='E'4000		; PERFORM NTINIT AS PART OF LOADING CEX (NETLDR)
LS.CXO='E'10000		; PERFORM "SET STATE LOCAL ON" AS PART OF "SET CEX"
LS.UNF='E'20000		; NTINIT UNFIX ITSELF (11S ONLY)
LS.PWF='E'40000		; POWERFAIL RECOVERY, NOT A REAL "SET CEX"
			; "CLEAR PROCESS" STATUS BITS
LS.11D='E'4000		; SPECIAL RSX11D/IAS OVERRIDE SWITCH
	.IF NB	HOME
	.=0		; NETLDR HOME BLOCK OFFSETS
.NTPCB:'C'	.BLKW	1	; NETWORK POOL PCB ADDRESS (NTINIT)
.NTUMR:'C'	.BLKW	1	; NETWORK POOL UMR BLOCK ADDRESS (NTINIT)
.CXCSR:'C'	.BLKW	1	; VNP SLT -> CSR LIST BLOCK ADDRESS
.CXPCB:'C'	.BLKW	1	; COMM EXEC PCB ADDRESS
.CXSYM:'C'	.BLKW	10.	; PROCESS VERIFICATION SYMBOL VALUES
.CXUNL:'C'	.BLKW	1	; FIRST UNLOAD BLOCK ADDRESS
.CXKMC:'C'	.BLKW	1	; FIRST KMC CSR BLOCK ADDRESS
.CXLB1:'C'	.BLKW	6	; FIRST LIBRARY DESCRIPTOR
.CXLB2:'C'	.BLKW	6	; SECOND LIBRARY DESCRIPTOR
.CXLBR:'C'	.BLKW	1	; FIRST LIBRARY DESCRIPTOR BLOCK ADDRESS
		.BLKW	3	; AVAILABLE
	.ENDC
	.PSECT
	.ENDM	NTLDF$
	.MACRO	NTLER$	NUMBER,FORMAT,LINE1,REPLACE,LINE2,TEXT,LAST
$ERR'NUMBER'::
	.WORD	LINE1
	.IF NB	FORMAT
	.IF IDN	FORMAT,<NONE>
	.WORD	0
	.IFF
	.WORD	FMT'FORMAT'
FM.'FORMAT'=0
	.ENDC
	.IFF
	.WORD	FMT0
FM.0=0
	.ENDC
	.WORD	REPLACE
	.WORD	LINE2
	.ASCIZ	\TEXT\
	.IF NB	LAST
		.IF DF	FM.0
FMT0:	.ASCIZ	""
		.ENDC
		.IF DF	FM.1
FMT1:	.ASCIZ	"* "
		.ENDC
		.IF DF	FM.2
FMT2:	.ASCIZ	"* TEMPLATE -- "
		.ENDC
		.IF DF	FM.2A
FMT2A:	.ASCIZ	"* TEMPLATE -- SYMBOL * "
		.ENDC
		.IF DF	FM.2B
FMT2B:	.ASCIZ	"* TEMPLATE -- VECTOR * "
		.ENDC
		.IF DF	FM.3
FMT3:	.ASCIZ	"* TEMPLATE FILE -- "
		.ENDC
		.IF DF	FM.4
FMT4:	.ASCIZ	"* SYMBOL TABLE FILE -- "
		.ENDC
		.IF DF	FM.4A
FMT4A:	.ASCIZ	"* SYMBOL TABLE FILE -- SYMBOL * "
		.ENDC
		.IF DF	FM.5
FMT5:	.ASCIZ	"* PROCESS FILE -- "
		.ENDC
		.IF DF	FM.5A
FMT5A:	.ASCIZ	"* PROCESS FILE -- PARTITION * "
		.ENDC
		.IF DF	FM.6
FMT6:	.ASCIZ	"* IMAGE FILE -- "
		.ENDC
		.IF DF	FM.7
FMT7:	.ASCIZ	""
		.ENDC
		.IF DF	FM.7A
FMT7A:	.ASCIZ	"CHANNEL * "
		.ENDC
		.IF DF	FM.7B
FMT7B:	.ASCIZ	"LINE * "
		.ENDC
		.IF DF	FM.8
FMT8:	.ASCIZ	"CONFIG FILE -- "
		.ENDC
		.IF DF	FM.8A
FMT8A:	.ASCIZ	"CONFIG FILE -- DEVICE * "
		.ENDC
		.IF DF	FM.8B
FMT8B:	.ASCIZ	"CONFIG FILE -- PARTITION * "
		.ENDC
		.IF DF	FM.9
FMT9:	.ASCIZ	"*: DEVICE TABLES -- "
		.ENDC
		.IF DF	FM.10A
FMT10A:	.ASCIZ	"* MICRO-CODE FILE -- "
		.ENDC
		.IF DF	FM.10B
FMT10B:	.ASCIZ	"* DEVICE I/O ERROR, CSR = *, RAM ADDRESS = *"
		.ENDC
		.IF DF	FM.10C
FMT10C:	.ASCIZ	"LIST ALLOC. FAILURE, DEV=*, CSR=*, CNTRLR=*"
		.ENDC
		.IF DF	FM.11
FMT11:	.ASCIZ	"PARTITION * "
		.ENDC
		.IF DF	FM.12
FMT12:	.ASCIZ	"* -- "
		.ENDC
	.ENDC
	.EVEN
	.ENDM	NTLER$
	.MACRO NURDF$
; GENERAL MESSAGE DEFINITIONS
N.TYP	= 0			;(B)OFFSET TO MESSAGE TYPE
	NM.TYP	= 17		;MESSAGE TYPE MASK
	NM.DAT	= 0&NM.TYP	;DATA MESSAGE
	NM.ATT	= 1&NM.TYP	;ATTENTION MESSAGE
	NM.FTR	= 2&NM.TYP	;FEATURES MESSAGE
	NM.CTL	= 3&NM.TYP	;CONTROL MESSAGE
	NM.ALR	= 4&NM.TYP	;ALERT MESSAGE
	NM.CAP	= 5&NM.TYP	;CAPABILITIES MESSAGE
	NM.OTR	= 6&NM.TYP	;***CURRENT OUT OF RANGE VALUE***
N.MFL	= 1			;(BM)OFFSET TO MESSAGE FLAGS
; DATA MESSAGE DEFINITIONS
				;DATA MESSAGE OFFSETS
N.DSEQ	= 2			;(B)SEQUENCE NUMBER
N.DFLG	= 3			;(BM)DATA FLAGS
	ND.ACK	= 1		;ACKNOWLEDGE REQD
	ND.IER	= 2		;INPUT ERROR
	ND.EOF	= 4		;SEGMENT IS END OF FILE
N.DSGC	= 4			;(B)SEGMENT COUNT
N.DDAT	= 5			;START OF DATA
				;DATA SEGMENT CONTROL BYTE DEFINITIONS
	ND.CMP	= 200		;COMPRESSION FLAG
				;CONTROL BYTE=0 => END OF RECORD MARK
; ATTENTION MESSAGE DEFINITIONS
				;ATTENTION MESSAGE OFFSETS
N.ALGD	= 2			;(B)"LAST GOOD" ID
N.ACOD	= 3			;(B)ATTENTION CODE OFFSET
				;ATTENTION CODE VALUES
				;0 IS RESERVED
	N.ASTC	= 1		;STATUS CHANGE
	N.AACK	= 2		;DATA ACKNOWLEDGEMENT
	N.ARQS	= 3		;REQUESTED
	N.AABC	= 4		;OUTPUT ABORT RECEIVED OR INPUT ABORT COMPLETE
	N.APLE	= 5		;PAGE LIMIT EXCEEDED
N.AFLG	= 4			;(BM)(EX)ATTENTION FLAGS (UP TO 3 BYTES REQ'D)
				;COMMON FLAGS
				;BYTE 1 FLAGS
	NA.FAT	= 1		;FATAL ERROR
	NA.OFL	= 2		;OFFLINE
	NA.PAU	= 4		;PAUSED
	NA.OMD	= 10		;OUT OF MEDIA
	NA.JAM	= 20		;JAMMED
	NA.OOF	= 40		;OPERATOR OFFLINE
	NA.NOE	= 100		;NON OPERATOR ERROR
				;BYTE 2 FLAGS
	NA.OUF	= 1		;OUTPUT FULL
	NA.NAC	= 2		;DEVICE NOT ACCESSIBLE
	NA.DTO	= 4		;DEVICE TIME OUT
	NA.RNA	= 10		;RESOURCE NOT AVAILABLE
				;LINE PRINTER SPECIFIC ERRORS
	NA.PSE	= 20		;PAPER SLEW ERROR
	NA.INK	= 40		;OUT OF INK
				;RESERVED CODE
				;BYTE 3 FLAGS
	NA.OVP	= 1		;ILLEGAL OVERPRINT
			 	;PUNCHED CARD SPECIFIC ERRORS
				;BYTE 2 FLAGS
	NA.PF	= 20		;PICK FAILURE
	NA.RAP	= 40		;READ AFTER PUNCH ERROR
	NA.REG	= 100		;REGISTRATION ERROR
				;BYTE 3 FLAGS
	NA.IVP	= 1		;INVALID PUNCH ERROR
; N.APGC	= 		;(2B)PAGE CNTR (PREV FLD EXTNSBLE, NO FIXED OFFSET)
; FEATURES MESSAGES DEFINITIONS
				;FEATURES MESSAGE OFFSETS
N.FSEQ	= 2			;(B)FEATURES SEQUENCE NUMBER
N.NSPC  = 3			;(B) NO. OF FEATURES SPECS IN MSG
N.FSPC  = 4			;OFFSET TO 1ST FEATURE SPEC
				;REMAINING OFFSETS RELATIVE TO BEG OF A FEATURE SPEC
N.FID	= 0			;(B)FEATURES IDENTIFIER
				;COMMON UNIT RECORD DEVICE FEATURES
	FE.ESC	=	0	;RESERVED FOR FUTURE ESCAPE CODE
	FE.DAT	=	1	;(CLASS 1) DATA MODE
	   DM.ASC	=	1	;7 BIT ASCII
	   DM.CLI	=	2	;COLUMNIMAGE
	   DM.EBC	=	3	;EBCDIC
	   DM.AUG	=	4	;AUGMENTED COLUMNIMAGE
	   DM.AS8	=	5	;8 BIT ASCII
	FE.SER	=	2	;(CLASS 1) SERIAL NUMBER
	FE.LCR	=	3	;(CLASS 0) LOWER CASE RAISE
	FE.FWD	= 	4	;(CLASS 1) FORM WIDTH
	FE.EOF	=	5	;(CLASS 1) EOF RECOGNITION
	   EO.ASC	=	1	;ASCII
		EOFASC	=	7417	;ASCII EOF (COLUMN 1) PUNCH
	   EO.IMG	=	2	;IMAGE
	FE.DVT	=	6	;(CLASS 1) DEVICE TYPE
	FE.TRN	=	7	;(CLASS 0) RECORD TRUNCATION
	FE.FNM	=	8.	;(CLASS 1) FORM NAME
	FE.DWD	=	9.	;(CLASS 1) DEVICE WIDTH
				;DEVICE SPECIFIC FEATURES
				;LINE PRINTER
	LP.HT	=	130.	;(CLASS 1) HORIZONTAL TAB STOP
	LP.SFC	=	131.	;(CLASS 0) STANDARD VERTICAL FORMS CONTROL
	LP.OVP	=	132.	;(CLASS 1) OVERPRINT LIMIT
	LP.CVF	=	133.	;(CLASS 1) CUSTOM VFU
	LP.FCC	=	134.	;(CLASS 0) FORTRAN CARRIAGE CONTROL
	LP.VFR	=	135.	;(CLASS 1) VARIABLE FORMS RATIO
	   VF.6LI	=	1	;6 LINES PER INCH
	   VF.8LI	=	2	;8 LINES PER INCH
	LP.CHS	=	136.	;(CLASS 1) CHARACTER SET
	   CH.64	=	1	;64 CHARACTER SET
	   CH.96	=	2	;96 CHARACTER SET
	LP.PLE	=	137.	;(CLASS 1) PAGE LIMIT ENFORCEMENT
	LP.OPV	=	138.	;(CLASS 1) OPTICAL VFU NAME
				;CARD READER/PUNCH
	CD.CWD =	130.	;(CLASS 1) CARD WIDTH
				;SPECIAL FEATURE ID
	FE.ALL	=	255.	;AFFECTS ALL FEATURES(READ OR SET TO STD.)
N.FFLG	=	1		;(BM)FEATURES FLAGS
	NF.CMD	= 1		;SET FEATURES=1, READ=0
	NF.STD	= 2		;STANDARD FLAG
N.FCLS	=	2		;(B)FEATURE CLASS
	FC.CL0	= 0		;CLASS 0 FEATURE => <BIT> FORM
	FC.CL1	= 1		;CLASS 1 FEATURE => <CNT><...> FORM
	FC.SST	= 2		;SET TO STANDARD
	FC.CLM	= 3		;CLASS MASK
N.FRSP	=	3		;FEATURE RESPONSE FIELD
	FR.USF	= 1		;UNSUPPORTED FEATURE
	FR.BCL	= 2		;BAD CLASS SPEC'D
	FR.NST	= 3		;NO STANDARD VALUE
	FR.ERR	= 4		;FEATURE DATA OR FORMAT ERROR
	FR.CPN	= 5		;CHANGE PENDING
	FR.NEB	= 6		;NOT ENOUGH BUFFER (FOR REPORT)
	FR.DNP	= 7		;DEVICE NOT PAUSED
N.FDAT	= 4			;BEG FEATURES DATA(FORMAT CLASS DEPENDENT)
;CONTROL MESSAGE DEFINITIONS
				;CONTROL MESSAGE OFFSETS
N.CSEQ	= 2			;(B)CONTROL SEQUENCE NUMBER
N.CCMD	= 3			;(B)CONTROL COMMAND
	NC.AUE	=	1	;(INTERRUPT) ABORT UNTIL EOF
	NC.AUC	=	2	;(INTERRUPT) ABORT UNTIL CLEARED
	NC.CAB	=	3	;	CLEAR OUTPUT ABORT/ ACK INPUT ABORT
	NC.RQS	=	4	;	REQUEST STATUS
	NC.DMP	=	5	;	DUMP OUTPUT BUFFERS
	NC.PAU	=	6	;(INTERRUPT) PAUSE
	NC.RES	=	7	;(INTERRUPT) RESUME
	NC.RQC	=	9.	;	REQUEST CAPABILITIES
N.CRES	= 4			;(B)CONTROL RESULT CODE
				;NC.AUE,NC.AUC RESPONSE
	NR.ABS	=	0	;ABORT STATE
	NR.NAB	=	1	;NOTHING TO ABORT
				;NC.AUE RESPONSE
	NR.NOE	=	2	;NO EOF DEFINED
				;NC.CAB	RESPONSE
	NR.ACC	=	0	;ABORT COMPLETE CLEARED
	NR.ACN	=	1	;ABORT COMPLETE NOT SET
				;NC.RQS RESPONSE
	NR.ATT	=	0	;ATTENTION MSG FOLLOWS
				;NC.DMP RESPONSE
	NR.DMP	=	0	;OUTPUT BEING DUMPED
	NR.NOB	=	1	;NO OUTPUT BUFFERED
				;NC.PAU RESPONSE
	NR.DPS	=	0	;DEVICE WILL PAUSE
	NR.PAU	=	1	;DEVICE ALREADY PAUSED
	NR.NDP	=	2	;NO DATA TRANSFER TO PAUSE
				;NC.RES RESPONSE
	NR.RES	=	0	;DEVICE WILL RESUME
	NR.NPS	=	1	;DEVICE NOT PAUSED
	NR.NDR	=	2	;NO DATA TRANSFER TO RESUME
				;NC.RQC	RESPONSE
	NR.CAP	=	0	;CAPABILITIES FOLLOWS
; CAPABILITIES MESSAGE DEFINITIONS
				;CAPABILITIES MESSAGE OFFSETS
N.PCNT	= 2			;LIST COUNT BYTE
N.PCAP	= 3			;START OF CAPABILITIES LIST
	.ENDM	NURDF$
	.MACRO	NXOF$ LLA
	.MCALL	$$MOVB,$$QUE
	$$MOVB	LLA,C.LIN
	$$QUE	NT$XOF,FC.XME
	.ENDM
	.MACRO	NXON$ LLA
	.MCALL	$$MOVB,$$QUE
	$$MOVB	LLA,C.LIN
	$$QUE	NT$XON,FC.XME
	.ENDM
	.MACRO	ONCASE
	IF
	$$PUSH	$$CSTA
$$CSTA=0
	.ENDM
	.MACRO	OPNW$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$
	.IF B	<LUN>
	QDPB$	3,16400,<.MBXLU>,EFN,,IOST,AST,<PRMLST>
	.IFF
	QDPB$	3,16400,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDC
	.ENDM	OPNW$
	.MACRO	OPNW$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$E
	QDPB$E	LABEL,3,#16400,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	OPNW$E
	.MACRO	OPNW$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$S
	.IF B	<LUN>
	QDPB$S	3,#16400,<#.MBXLU>,EFN,,IOST,AST,<PRMLST>
	.IFF
	QDPB$S	3,#16400,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDC
	.ENDM	OPNW$S
	.MACRO	OPN$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$
	.IF B	<LUN>
	QDPB$	1,16400,<.MBXLU>,EFN,,IOST,AST,<PRMLST>
	.IFF
	QDPB$	1,16400,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDC
	.ENDM	OPN$
	.MACRO	OPN$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$E
	QDPB$E	LABEL,1,#16400,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	OPN$E
	.MACRO	OPN$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$S
	.IF B	<LUN>
	QDPB$S	1,#16400,<#.MBXLU>,EFN,,IOST,AST,<PRMLST>
	.IFF
	QDPB$S	1,#16400,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDC
	.ENDM	OPN$S
	.MACRO PAR$DF A,B,C,D,E
	.ENDM
	.MACRO	PCBDF$	L,B,SYSDEF
	.ASECT
.=0
P.LNK:'L'.BLKW	1
P.PRI:'L'.BLKB	1
P.IOC:'L'.BLKB	1
P.NAM:'L'.BLKW	2
P.SUB:'L'.BLKW	1
P.MAIN:'L'.BLKW	1
	.IF NB	SYSDEF
	.IF NDF	M$$MGE
P.HDR:'L'
	.ENDC
	.IFTF
P.REL:'L'.BLKW	1
P.BLKS:'L'
P.SIZE:'L'.BLKW	1
P.WAIT:'L'.BLKW	1
P.SWSZ:'L'.BLKW	1
P.BUSY:'L'.BLKB	2
P.OWN:'L'
P.TCB:'L'.BLKW	1
P.STAT:'L'.BLKW	1
	.IFT
	.IF DF	M$$MGE
P.HDR:'L' .BLKW 1
	.ENDC
P.PRO:'L' .BLKW 1
P.ATT:'L' .BLKW 2
	.IF NDF	P$$LAS
P.LGTH='B'P.PRO
	.IFF
P.LGTH='B'.
	.ENDC
	.IFF
	.PSECT
PS.OUT='B'100000
PS.CKP='B'40000
PS.CKR='B'20000
PS.CHK='B'10000
PS.FXD='B'4000
PS.PER='B'2000
PS.LIO='B'1000
PS.NSF='B'400
PS.COM='B'200
PS.PIC='B'100
PS.SYS='B'40
PS.DRV='B'20
PS.DEL='B'10
PS.APR='B'7
	.ASECT
.=0
A.PCBL:'L'.BLKW	1
A.PRI:'L'.BLKB	1
A.IOC:'L'.BLKB	1
A.TCB:'L'.BLKW	1
A.TCBL:'L'.BLKW	1
A.STAT:'L'.BLKB	1
A.MPCT:'L'.BLKB	1
A.PCB:'L'.BLKW	1
A.LGTH='B'.
	.PSECT
AS.DEL='B'10
AS.EXT='B'4
AS.WRT='B'2
AS.RED='B'1
	.ENDC
	.MACRO	PCBDF$	X,Y,Z
	.ENDM
	.ENDM
	.MACRO	PDVDF$	L,B,LST
 
	.RADIX 8
	.ASECT
.=0
 
.IIF NB,LST,	.LIST
;
;	PROCESS DESCRIPTOR VECTOR OFFSETS AND BIT DEFINITIONS
;
 
Z.DSP:'B'	.BLKW	1	; RELOCATION BIAS OF DISPATCH TABLE
	.BLKW	1	; VIRTUAL ADDRESS OF DISPATCH TABLE
 
	.IF DF	X$$MCB
Z.QUE:'B'	.BLKW	1	; ADDRESS OF SCHEDULER LEVEL QUEUE
	.ENDC
Z.SCH:'B'	.BLKW	1	; ADDRESS OF SCHEDULER DATA BASE
Z.NAM:'B'	.BLKW	1	; PROCESS NAME (RAD50)
Z.LLN:'B'	.BLKB	1	; # OF LOGICAL LINES (LLC'S ONLY)
Z.FLG:'B'	.BLKB	1	; FLAGS BYTE
	.IF DF 	X$$MCB!R$$11M!R$$11S
Z.PCB:'B'	.BLKW	1	; PCB OF LOADED PROCESS PARTITION
	.ENDC
	.IF DF	R$$11D!I$$AS
Z.GCD:'B'	.BLKW	1	; ADDRESS OF GCD NODE( 0 = PROCESS NOT RESIDENT )
	.ENDC
Z.LEN='L'	.-Z.DSP		; LENGTH OF PDV
Z.DAT:'B'	.BLKW	1	; BIAS OF LLC DATA BASE
Z.MAP:'B'			; DISPLACEMENT OF LLC MAPPING TABLE
	.NLIST
	.PSECT
	.LIST
;
; FLAGS BYTE BIT DEFINTIONS
;
ZF.DDM='L'   1		; PROCESS IS A DDM
ZF.DLC='L'   2		; PROCESS IS A DLC
ZF.LLC='L'   4		; PROCESS IS A LLC
ZF.MFL='L'  10		; PROCESS IS MARKED FOR LOAD ( WITH NS )
ZF.KMX='L'  20		; PROCESS IS A DDM FOR A KMC DEVICE
ZF.MUX='L'  40		; PROCESS IS A DDM FOR A MULTIPLEXER DEVICE
ZF.LMC='L' 100		; PROCESS REQUIRES MICRO-CODE TO BE LOADED
ZF.TIM='L' 200		; PROCESS REQUESTS TIMER SUPPORT
 
.IIF NB,LST,	.NLIST
 
	.PSECT		; BACK TO BLANK PSECT
 
	.ENDM	PDVDF$
	.MACRO PDV$DF	LLCLST,DLCLST,DDMLST
 
	PDN=-1
 
	.IRP	NAM,<LLCLST>	; NUMBER LLC'S
	PDN=PDN+1
	NAM=PDN
	PD$'NAM==PDN*2
	.ENDM
 
	.IRP	NAM,<DLCLST>	; NUMBER DLC'S
	PDN=PDN+1
	NAM=PDN
	PD$'NAM==PDN*2
	.ENDM
 
	.IRP	NAM,<DDMLST>	; NUMBER DDM'S
	PDN=PDN+1
	NAM=PDN
	PD$'NAM==PDN*2
	.ENDM
 
	.ENDM	PDV$DF
	.MACRO	PKTDF$,L,B,SYSDEF
	.ASECT
.=177774
A.KSR5:'L' .BLKW 1
A.DQSR:'L' .BLKW 1
	.BLKW	1
A.CBL:'L' .BLKW	1
A.BYT:'L' .BLKW	1
A.AST:'L' .BLKW	1
A.NPR:'L' .BLKW	1
A.PRM:'L' .BLKW	1
	.ASECT
.=0
I.LNK:'L' .BLKW	1
I.PRI:'L' .BLKB	1
I.EFN:'L' .BLKB	1
I.TCB:'L' .BLKW	1
I.LN2:'L' .BLKW	1
I.UCB:'L' .BLKW	1
I.FCN:'L' .BLKW	1
I.IOSB:'L' .BLKW	1
	.BLKW	1
	.BLKW	1
I.AST:'L' .BLKW	1
I.PRM:'L' .BLKW	1
	.BLKW	6
	.BLKW	1
I.ATTL='B'.
I.LGTH='B'.
	.PSECT
	.MACRO	PKTDF$	X,Y,Z
	.ENDM
	.ENDM
.MACRO	PRDF
P$GTCM	= 1.
P$LOAD	= 2.
P$DUMP	= 3.
P$LNSR	= 4.
P$LOOP	= 5.
P$TEST	= 6.
P$STPR	= 7.
P$RDIN	= 8.
P$EVNT	= 9.
P$TRIG	= 10.
P$ZERO	= 11.
P$NTCM	= 12.
P$INCM	= 13.
P$DPOS	= 14.
P$EXAM	= 15.
P$LOGD	= 16.
.IF NE	F$TRACE
TRCFLG	= 5.
.ENDC
.MACRO	PRDF
.ENDM
.ENDM
	.MACRO	PROC NAME,FLAG
	.MCALL  $$INSY,$$INMC
	$$INSY
	$$INMC	FLAG
	$$GEN1	NAME'::
$$SUB=0
	.ENDM
	.MACRO	PROCLC NAME,FLAG
	.MCALL	$$INSY,$$INMC
	$$INSY
	$$INMC	FLAG
	$$GEN1	NAME':
$$SUB=0
	.ENDM
	.MACRO	PROCMN NAME,FLAG
	.MCALL	$$INSY,$$INMC
	$$INSY
	$$INMC	FLAG
	$$GEN1	NAME'::
$$SUB=1
	.ENDM
	.MACRO	PSW$DF	A,B
	.ENDM
	.MACRO	PUTAD ADDR,SIZE,BLOCK
	.MCALL RAND
	.IF NB	BLOCK
	MOV	BLOCK,$RBLCK
	.ENDC
	RAND	$PUTAD,ADDR,SIZE
	.ENDM
	.MACRO	PUTRC ADDR,SIZE
	.MCALL RAND
	RAND	$PUTRC,ADDR,SIZE
	.ENDM
	.MACRO	P1$	LB,LINES
 
	; IF MORE THAN 1 LINE IS TO BE PRINTED, THEY MUST BE ENCLOSED IN <>'S
 
LB:	.BYTE	32.		; OPCODE
	.BYTE	LB'C		; COUNT
1$:	.BYTE	LINES
 
	LB'C=	.-1$
 
	.ENDM
	.MACRO	P2$	LB,STRING
 
	; TEXT MUST BE ENCLOSED IN </       />
 
LB:	.BYTE	33.		; OPCODE
	.BYTE	LB'C		; COUNT
1$:	.ASCII	STRING
 
	LB'C=	.-1$
 
	.ENDM
	.MACRO	QDPB$E	LBL,DIC,FNC,LUN,EFN,PRI,IOST,AST,PRMLST
	.MCALL	OFF$,DIR$
	.IF  B	LBL
	.ERROR	;MISSING ADDRESS LABEL
	.MEXIT
	.ENDC
	.IF NDF N.IOFN
	.NLIST
	.IRP	X,<,<N.IOFN,2>,<N.IOLU,2>,<N.IOEF,1>,<N.IOPR,1>>
	OFF$	X
	.ENDR
	.IRP	X,<<N.IOSB,2>,<N.IOAE,2>,<N.IOPL>>
	OFF$	X
	.ENDR
	.LIST
	.ENDC
	MOV	#<12.*400+DIC>,LBL
	MOV	FNC,LBL+N.IOFN
	.IIF NB <LUN>,	MOV	LUN,LBL+N.IOLU
	.IIF NB <EFN>,	MOVB	EFN,LBL+N.IOEF
	.IIF NB <PRI>,	MOVB	PRI,LBL+N.IOPR
	.IIF NB <IOST>,	MOV	IOST,LBL+N.IOSB
	.IIF NB <AST>,	MOV	AST,LBL+N.IOAE
	.IF NB	<PRMLST>
	.NLIST
$$$ARG = N.IOPL
	.LIST
	.IRP	X,<PRMLST>
	.IIF NB <X>,	MOV	X,LBL+$$$ARG
	.NLIST
$$$ARG = $$$ARG+2
	.LIST
	.ENDR
	.ENDC
	DIR$	#LBL
	.ENDM	QDPB$E
	.MACRO	RAND SUBR,ADDR,SIZE
	.IF NB	ADDR
	MOV	ADDR,$RADDR
	.ENDC
	.IF NB	SIZE
	MOV	SIZE,SYSFDB+F.RSIZ
	.ENDC
	CALL	SUBR
	.ENDM
.MACRO	RCIMDF
.PSECT	RCIDAT,RW,D,GBL,REL,OVR
RECCNT:	.WORD	0
.PSECT
.ENDM
	.MACRO	RECMAP
	.IF DF	M$$MGE
	.MCALL	HWDDF$
	HWDDF$
	MOV	UISAR6,KISAR6
	.ENDC
	.ENDM	RECMAP
	.MACRO	RECW$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$
	QDPB$	3,15000,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	RECW$
	.MACRO	RECW$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$E
	QDPB$E	LABEL,3,#15000,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	RECW$E
	.MACRO	RECW$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$S
	QDPB$S	3,#15000,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	RECW$S
	.MACRO	REC$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$
	QDPB$	1,15000,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	REC$
	.MACRO	REC$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$E
	QDPB$E	LABEL,1,#15000,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	REC$E
	.MACRO	REC$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$S
	QDPB$S	1,#15000,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	REC$S
	.MACRO	REGSV
	JSR	R5,.REGSV
	.ENDM
	.MACRO	REJW$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$
	.IF B	<LUN>
	$CON$	3,16020,<.MBXLU>,EFN,IOST,AST,98.,PRMLST
	.IFF
	$CON$	3,16020,LUN,EFN,IOST,AST,98.,PRMLST
	.ENDC
	.ENDM	REJW$
	.MACRO	REJW$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$E
	$CON$E	LABEL,3,#16020,LUN,EFN,IOST,AST,PRMLST
	.ENDM	REJW$E
	.MACRO	REJW$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$S
	.IF B	<LUN>
	$CON$S	3,#16020,<#.MBXLU>,EFN,IOST,AST,#98.,PRMLST
	.IFF
	$CON$S	3,#16020,LUN,EFN,IOST,AST,#98.,PRMLST
	.ENDC
	.ENDM	REJW$S
	.MACRO	REJ$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$
	.IF B	<LUN>
	$CON$	1,16020,<.MBXLU>,EFN,IOST,AST,98.,PRMLST
	.IFF
	$CON$	1,16020,LUN,EFN,IOST,AST,98.,PRMLST
	.ENDC
	.ENDM	REJ$
	.MACRO	REJ$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$E
	$CON$E	LABEL,1,#16020,LUN,EFN,IOST,AST,PRMLST
	.ENDM	REJ$E
	.MACRO	REJ$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	$CON$S
	.IF B	<LUN>
	$CON$S	1,#16020,<#.MBXLU>,EFN,IOST,AST,#98.,PRMLST
	.IFF
	$CON$S	1,#16020,LUN,EFN,IOST,AST,#98.,PRMLST
	.ENDC
	.ENDM	REJ$S
	.MACRO	RESMAP
	.IF DF	M$$MGE
	.MCALL	HWDDF$
	HWDDF$
	MOV	(SP)+,KISAR6
	.ENDC
	.ENDM
	.MACRO	RESRG	LIST
	.IRP	R,<LIST>
	MOV	(SP)+,R
	.ENDM
	.ENDM
.MACRO	RESSTK ARGLIN
.IRP	ARG,<ARGLIN>
  MOV	  (SP)+,ARG
.ENDM
.ENDM
.MACRO	RIDF
NODLEN	= 6.
LINLEN	= 5.
LENCNT	= 3.
.ASECT
.=0
MSBFHD:	.BLKW	1
LILEN:	.BLKW	1
LIADDR:	.BLKW	1
LIPTR:	.BLKW	1
MSGCOD:	.BLKB	1
MSGCNT:	.BLKB	2
STATE:	.BLKB	1
SBSTAT:	.BLKB	1
RETCOD:	.BLKB	1
OPTION:	.BLKB	1
RMNODE:	.BLKB	NODLEN+1
LINE:	.BLKB	5
	.EVEN
CTXTLN	= .
.PSECT
GTINFO	= 1.
FINISH	= 2.
ALBF	= 1.
RDIN	= 2.
RDLI	= 3.
RLBF	= 4.
TRC	= 5.
TRCC	= 6.
TRDB	= 7.
ZERO	= 8.
TRC	= 9.
PIDALL	= 0.
PIDNSP	= 1.
.ENDM   RIDF
.MACRO	RISDF
.IF     DF,R$$11M
AB      = 0*20000
.ENDC
.IF     DF,R$$11D!I$$AS
AB      = 3*20000
.ENDC
.ASECT
.=0
F1PBLK:
F1NAM:	.BLKW	1
F1CTL:	.BLKB	1
F1LIN:	.BLKB	1
F1STA:	.BLKB	1
	.BLKB	1
F1FLG:	.BLKB	1
F1PDV:	.BLKB	1
F1SLN:	.BLKB	1
F1LSA:	.BLKB	1
F1SLF:	.BLKW	1
F1DDM:	.BLKB	1
F1DLC:	.BLKB	1
F1CHNA:	.BLKB	1
F1PDVA:	.BLKB	1
F1LBIA:	.BLKW	1
F1LVIR:	.BLKW	1
F1BBIA:	.BLKW	1
F1BVIR:	.BLKW	1
F1STAL:	.BLKW	1
F1PN:	.BLKW	1
F1PEND:
.=0
F2PBLK:
F2NAM:	.BLKW	1
F2CTL:	.BLKB	1
F2LIN:	.BLKB	1
F2STA:	.BLKB	1
	.BLKB	1
F2FLG:	.BLKB	1
F2PDV:	.BLKB	1
F2SLN:	.BLKB	1
F2LSA:	.BLKB	1
F2SLF:	.BLKW	1
F2DDM:	.BLKB	1
F2DLC:	.BLKB	1
F2CHNA:	.BLKB	1
F2PDVA:	.BLKB	1
F2PEND:
DMCNKR	= 5
DMCNBS	= 6
DMCBHS	= 7
DMCBDS	= 10
DMCRTO	= 11
DMCERR	= DMCNKR
DMCLEN	= DMCRTO - DMCERR + 1
NOLLEN	= 1.
NMLLEN	= 1.
NSTLEN	= 1.
.PSECT
.ENDM   RISDF
	.MACRO	RMDDB$	L,B
	.MCALL	TMPDF$
	TMPDF$
;+
; THE RESOURCE MANAGER DATA BASE DESCRIPTION
;-
	.ASECT
.=0
R$FLG:'L	.BLKW	1		; CONTROL FLAGS:
 RF.CVR	='B	100000		;  RESOURCE RECOVERY IN PROGRESS.
 RF.LIN	='B	001000		;  RESOURCE LINE SERVICE PENDING.
 RF.CCB	='B	000400		;  CCB PENDING.
 ;		000377		;  PIPE BEING FLUSHED.
R$RWT:'L	.LSTHD			; RESOURCE WAIT QUEUE.
R$TCQ:'L	.BLKW	1		; RESOURCE LINE SERVICE QUEUE.
R$PCB:'L	.BLKW	1		; NUMBER OF PCBS FOLLOWED BY
	.POOL			; THE POINTER TO THE PCB TABLE.
R$TCB:'L	.BLKW	1		; NUMBER OF TCBS FOLLOWED BY
	.BLKW	0		; THE TCB TABLE.
	.PSECT
	.ENDM	RMDDB$
	.MACRO	RMDF$	L,B
 
;+
; THIS MACRO DEFINES THE SYMBOLS WHICH THE RESOURCE MANAGER USES
; TO GENERATE RETURN CODES TO THE USER PROGRAM.
;-
 
 
; <RESPONSE> CODE DEFINITIONS
 
RC.FIN='B		0.		; FINAL RESPONSE, NO ERROR
RC.INT='B		1.		; INTERMEDIATE RESPONSE
RC.ACC='B		2.		; HANDOFEE ACCEPTS RESOURCE
RC.ANP='B		20.		; ACCESS NOT PERMITTED
RC.IAC='B		21.		; INVALID ACCOUNTING INFORMATION
RC.IRC='B		22.		; INVALID OR UNSUPPORTED REQUEST TYPE
RC.ICT='B		23.		; INVALID REQUEST CONCATENATION
RC.RQO='B		24.		; CONTROL ID ALREADY IN USE
RC.RNE='B		25.		; SPECIFIED RESOURCE DOES NOT EXIST
RC.RNA='B		26.		; REQUESTED RESOURCE NOT AVAILABLE
RC.IRD='B		27.		; INVALID RESOURCE DESCRIPTOR FORMAT
RC.GND='B		28.		; GENERIC DESCRIPTOR NOT SUPPORTED
RC.SHN='B		29.		; SHARED ACCESS NOT SUPPORTED
RC.RSO='B		30.		; TOO MANY USERS OF THE RESOURCE
RC.MLN='B		31.		; MULTI-LINK USAGE NOT SUPPORTED
RC.SLN='B		32.		; SINGLE-LINK USAGE NOT SUPPORTED
RC.ISO='B		33.		; INVALID SERVOR OPTION FIELD
RC.SNE='B		34.		; SPECIFIED SERVOR DOES NOT EXIST
RC.CNO='B		35.		; TOO MANY CONNECTIONS TO SERVOR
RC.RNS='B		36.		; RESOURCE NOT SUPPORTED BY SERVOR
RC.RJS='B		37.		; REQUEST REJECTED BY SERVOR
RC.RSI='B		38.		; RESOURCE OR SERVOR STATE INCONSISTENCY
RC.RSE='B		39.		; REQUEST MESSAGE SEQUENCE ERROR
RC.HNE='B		40.		; HANDOFEE DOES NOT EXIST
RC.REJ='B		41.		; HANDOFEE REJECTS RESOURCE
RC.ACA='B		42.		; ACCEPTANCE OF HANDOFF ABORTED
 
 
; <RESPONSE> MESSAGE DATA
 
RD.PNC='B		1.		; DATA PIPE NOT CONNECTED
RD.STR='B		2.		; START THRESHOLD ERROR
RD.NDI='B		1.		; REQUESTED RESOURCE NOT ONLINE
 
 
; <STATUS-REPORT> MESSAGE DATA
 
RP.RCV='B		1.		; RECEIVE ERROR THRESHOLD ERROR
RP.REP='B		2.		; REPLY THRESHOLD ERROR
RP.NAK='B		3.		; NAK THRESHOLD ERROR
RP.TRM='B		4.		; HARD TERMINAL ERROR
RP.IRQ='B		5.		; INTERVENTION REQUIRED AT TERMINAL
RP.PWF='B		6.		; POWERFAIL
RP.DSC='B		7.		; DATA PIPE DISCONNECTED
 
 
	.PSECT
	.ENDM
	.MACRO	RSXOK$
	CMP	$CRAVL-2,#3
	.IIF NDF,R$$11S, RSX$OK = 0
	.IF DF	RSX$OK
	BNE	.+20
	MOV	#.TT0,-(SP)
	ADD	#U.SCB,(SP)
	CMP	#$TT0,@(SP)+
	.ENDC
	BEQ	.+4
	SEC
	.ENDM	RSXOK$
	.MACRO	SABDF$
;
; SMART ASCII STATUS BYTE DEFINITIONS
;
; ONLY THE LOW BYTE OF THE STATUS WORD IS BEING USED TO AVOID CONFLICT
; WITH FUTURE RESERVATIONS OF BITS BY THE COMM/EXEC.
;
; ERROR CODES
;
SA.ABO	=	100377		; OPERATION ABORTED.
SA.NBF	=	100376		; COULD NOT OBTAIN BUFFER.
SA.NCH	=	100375		; NO CHARACTERISTICS DEFINED.
SA.BCH	=	100374		; BAD CHARACTERISTICS DEFINED.
SA.PAR	=	100373		; PARITY ERROR.
SA.OVR	=	100372		; OVER-RUN ERROR.
SA.BRK	=	100371		; BREAK OR FRAMING ERROR.
SA.IES	=	100370		; ILLEGAL ESCAPE SEQUENCE.		;**ADP07
;
; SUCCESS CODES
;
SA.SUC	=	000001		; OPERATION SUCCESSFUL.
SA.IMM	=	000002		; IMMEDIATE INTERRUPT.
SA.DFI	=	000003		; DEFERRED INTERRUPT.
SA.DFW	=	000004		; DEFERRED WAKE.
SA.WAK	=	000005		; WAKE.
SA.RRD	=	000006		; READ BUFFER BEING RESET.
SA.BFE	=	000007		; LOCAL EDIT EMPTIED BUFFER.
SA.FFL	=	000010		; FIELD FULL ON READ.
SA.TMO	=	000011		; READ TIMED OUT.
SA.XMF	=	000012		; TRANSMITTER QUIET.
SA.ESQ	=	000013		; ESCAPE SEQUENCE.			;**ADP05
;									;**ADP05
; FUNCTION CODE MODIFIERS						;**ADP05
;									;**ADP05
SA.WT	=	000000		; NORMAL WRITE.				;**ADP05
SA.FWT	=	001000		; FORCED WRITE.				;**ADP05
;									;**ADP05
SA.RD	=	000000		; NORMAL READ.				;**ADP05
SA.RDI	=	001000		; READ INITIATE.			;**ADP05
SA.RDR	=	002000		; READ RESUME.				;**ADP05
;
; SMART ASCII CCB FLAGS DEFINITIONS (INPUT FROM LLC)
;
SA.CHR	=	040000		; CHARACTERISTICS POINTED TO BY C.BUF2
SA.BF2	=	020000		; CHARACTERISTICS IN C.BUF2		;**ADP10
SA.TMP	=	010000		; CHARACTERISTICS ARE TEMPORARY		;**ADP10
	.ENDM	SABDF$
	.MACRO	SATDF$
	.ASECT
.=0
TIMER:	.BLKW	1		; DCOPS TIMER (MUST BE FIRST IN LT)
;
RCCB:	.BLKW	1		; CURRENT RECIEVE ENABLE CCB
RMAX:	.BLKW	1		; RECIEVE BUFFER COUNT REMAINING.
RLMT:	.BLKW	1		; RECIEVE BUFFER DATA LIMIT		;**ADP10
;
TCCB:	.BLKW	1		; CURRENT TRANSMIT ENABLE CCB
;									;**-1
XCCB:	.BLKW	1		; CURRENT TRANSMIT CCB
;
ECCB:	.BLKW	1		; CURRENT ECHO CCB
;
LINE:	.BLKW	1		; SYSTEM LINE NUMBER
;
; PROCESSING CHARACTERISTICS CCB POINTERS
;
IPRCH:	.BLKW	1		; CURRENT INPUT
IPRCHD:	.BLKW	1		; DEFAULT INPUT
OPRCH:	.BLKW	1		; CURRENT OUTPUT
OPRCHD:	.BLKW	1		; DEFAULT OUTPUT
;
TBUF:	.BLKW	1		; POINTER TO TAB STOP TABLE		;**ADP04
PBUF:	.BLKW	1		; POINTER TO PROMPT STRING		;**ADP04
DBUF:	.BLKW	2		; DEFERRED PROCESSING SILO.		;**ADP04
IBUF:	.BLKW	2		; COPY OF INPUT LINE.			;**ADP04
IBEG:	.BLKW	1		; STARTING ADDRESS OF ICOPY.		;**ADP04
ESQPT:	.BLKW	1		; ESCAPE SEQUENCE POINTER.		;**ADP07
OBUF:	.BLKW	2		; CURRENT POSITION IN OUTPUT.		;**ADP04
OCNT:	.BLKW	1		; CHARACTERS LEFT TO TRANSLATE.		;**ADP04
TCCBQ:	.BLKW	1		; COUNT OF XMIT CCBS OUTSTANDING.
ECCBQ	=	TCCBQ+1		; ECHO CCBS OUTSTANDING.
FPOS:	.BLKW	1		; FIELD STARTING POSITION:
ROW	=	FPOS+0		; FIELD STARTING ROW
COL	=	FPOS+1		; FIELD STARTING COLUMN
CPOS:	.BLKW	1		; CURRENT CURSOR POSITION:
HPOS	=	CPOS+0		; CURRENT HORIZONTAL POSITION
VPOS	=	CPOS+1		; CURRENT VERTICAL POSITION
SSIZ:	.BLKW	1		; SCREEN SIZE:
HSIZ	=	SSIZ+0		; TERMINAL SCREEN WIDTH
VSIZ	=	SSIZ+1		; TERMINAL SCREEN LENGTH
LCNT:	.BLKB	1		; LINES REMAINING IN PAGE.		;**ADP06
PCHR:	.BLKB	1		; FIELD PAINT CHARACTER
OSTS:	.BLKB	1		; RESOURCE STATUS:			;**ADP10
RWAIT	=	   200		;  WAITING ON RESOURCE			;**ADP10
RWTXMT	=	   300		;   ON TRANSMIT.			;**ADP10
RWTFLD	=	   240		;   ON FIELD POSITION.			;**ADP10
RWTPRM	=	   220		;   ON PROMPT.				;**ADP10
RWTLIN	=	   210		;   ON LINE RE-TYPE.			;**ADP10
RWTPNT	=	   204		;   ON FIELD PAINT.			;**ADP10
RWTECO	=	   202		;   ON ECHO.				;**ADP10
ITIM:	.BLKB	1		; TIMEOUT VALUE IN SECONDS
LCHR:	.BLKB	1		; LAST CHARACTER TYPED.
SCHR:	.BLKB	1		; LAST CHARACTER RECIEVED FROM SILO.
PFLG:	.BLKB	1		; PROCESSING FLAGS
PFLDFR	=	   001		;  DEFER INPUT PROCESSING
PFLECO	=	   002		;  ALLOW ECHOING
PFLNHB	=	004		;  INHIBIT INITIALIZATION OF FIELD	;**ADP11
PFLILM	=	   010		;  INPUT LIMIT SPECIFIED		;**ADP10
PFLRTM	=	   020		;  RESOURCE TIMEOUT IN PROGRESS		;**ADP04
PFLITM	=	   040		;  INPUT TIMEOUT IN PROGRESS		;**ADP03
PFLFLS	=	   100		;  OUTPUT FLUSHING CONTROL
PFLACK	=	   200		;  ACKNOWLEDGE OUTPUT DONE
TTYP:	.BLKB	1		; GENERIC TERMINAL TYPE
PGFMT:	.BLKB	1		; PAGE FORMATTING CONTROLS
PGFSHT	=	   001		;  SIMULATE HORIZONTAL TABS
PGFSFF	=	   002		;  SIMULATE FORM FEEDS
PGFSVT	=	   004		;  SIMULATE VERTICAL TABS
PGFLC	=	   010		;  TERMINAL HAS LOWER CASE		;**ADP02
PGFFF	=	   020		;  TERMINAL HAS HARDWARE FORMFEED	;**ADP02
PGFHT	=	   040		;  TERMINAL HAS HARDWARE TABS		;**ADP02
PGFVID	=	   100		;  TERMINAL IS A VIDEO			;**ADP02
PGFDEL	=	   200		;  HARDCOPY DELETE IN PROGRESS		;**ADP02
PAD:	.BLKB	1		; PADDING CLASS				;**ADP06
	.EVEN
DLTLN	=	.		; LENGTH OF LINE TABLE ENTRY.
	.PAGE
;
; PROCESSING FLAGS CCB FORMAT
;
.=0
MODE:	.BLKB	1		; GENERIC PROCESSING MODE
	.BLKB	1		; FLAGS
MODFLG	=	100000		;  MODIFIED PROCESSING MODE
ICCFLG	=	040000		;  INPUT MASK DEFINED
ECCFLG	=	020000		;  ECHO MASK DEFINED
OCCFLG	=	010000		;  OUTPUT MASK DEFINED
CLSFLG	=	004000		;  CLASS MAP DEFINED			;**ADP07
IEDIT:	.BLKB	1		; INPUT EDIT BIT FLAGS
IEDBT8	=	   001		;  RETAIN BIT 8
IEDIG0	=	   002		;  IGNORE NULLS
IEDRLC	=	   004		;  RAISE LOWER CASE
IEDCLF	=	   010		;  INSERT LINE FEEDS AFTER CARRIAGE RETURNS
IEDESC	=	   020		;  CONVERT 175-176 TO 33 (ESC)
IEDHDW	=	   200		;  IGNORE HARDWARE ERROR CHARACTERS
IISTD:	.BLKB	1		; INPUT INTERRUPT STANDARD MAP
IISCTC	=	   001		;  ^C - DEFERRED INTERRUPT, ECHO WITH CRLF
IISCTT	=	   002		;  ^T - IMMEDIATE INTERRUPT, NO ECHO
IISCTS	=	   004		;  ^S - IMMEDIATE INTERRUPT, NO ECHO
IISCTQ	=	   010		;  ^Q - IMMEDIATE INTERRUPT, NO ECHO
IISCTO	=	   020		;  ^O - IMMEDIATE INTERRUPT, ECHO WITH CRLF
IWCLS:	.BLKW	1		; INPUT I/W CLASS MAP
IWCFMT	=	000003		;  FORMATTING CONTROL CHARACTERS
IWCNFM	=	000014		;  NON-FORMATTING CONTROL CHARACTERS
IWCNUM	=	000060		;  NUMERICS
IWCALP	=	000300		;  ALPHABETICS
IWCPC0	=	001400		;  NUMERIC PUNCTUATION ".-,"
IWCPC1	=	006000		;  REMAINING PUNCTUATION
IWCHDW	=	140000		;  HARDWARE ERROR ACTION		;**ADP09
IWSTD:	.BLKB	1		; INPUT WAKE STANDARD MAP
IWSCR	=	   001		;  CR - ECHOED
IWSLF	=	   002		;  LF - ECHOED
IWSESC	=	   004		;  ESC - ECHOED
IWSBEL	=	   010		;  BEL - ECHOED
IWSFF	=	   020		;  FF - ECHOED
IWSCTZ	=	   040		;  ^Z - ECHOED WITH CRLF
IWSESQ	=	   100		;  ESCAPE SEQUENCE - NOT ECHOED		;**ADP05
IWSFFL	=	   200		;  FIELD FULL				;**ADP09
ILEDT:	.BLKB	1		; LOCAL EDIT ENABLES
ILEDEL	=	   001		;  DEL - DELETE CHARACTER
ILECTW	=	   002		;  ^W - DELETE TO PUNCTUATION
ILECTU	=	   004		;  ^U - DELETE LINE
ILECTR	=	   010		;  ^R - REDISPLAY LINE
ILEBFE	=	   200		;  WAKE ON BUFFER EMPTY
FLOW:	.BLKB	1		; FLOW CONTROLS
FLWCTO	=	   001		;  ENABLE ^O OUTPUT FLUSHING
FLWCTS	=	   002		;  ENABLE ^S & ^Q OUTPUT CONTROLS
FLWPAG	=	   004		;  ENABLE PAGE OUTPUT CONTROLS
OEDIT:	.BLKB	1		; OUTPUT STANDARD EDIT MAP
OEDBT8	=	   001		;  RETAIN BIT 8
OEDCTX	=	   002		;  NON-FORMATTING CONTROLS -> ^X
OEDBEL	=	   004		;  BELL -> ^X				;**ADP01
OEDESC	=	   010		;  ESCAPE -> $				;**ADP01
OEDCLF	=	   020		;  INSERT CRLF ON SCREEN OVERFLOW	;**ADP01
OEDFLC	=	   040		;  LOWER CASE -> 'X			;**ADP01
OEDFUC	=	   100		;  UPPER CASE -> 'X			;**ADP01
OEDRLC	=	   200		;  RAISE LOWER CASE			;**ADP01
ICCMSK:	.BLKB	10		; INPUT I/W CONTROL CHARACTER MASK
ECCMSK:	.BLKB	4		; ECHO CONTROL CHARACTER MASK
OCCMSK:	.BLKB	4		; OUTPUT CONTROL CHARACTER MASK
PRCCBL	=	.
	.PSECT
	.ENDM	SATDF$
	.MACRO	SAVALL		
	JSR	R5,.SAVAL
	.ENDM
	.MACRO	SAVMAP
	.IF DF	M$$MGE
	.MCALL	HWDDF$
	HWDDF$
	MOV	KISAR6,-(SP)
	.ENDC
	.ENDM
	.MACRO	SAVRG	LIST
	.IRP	R,<LIST>
	MOV	R,-(SP)
	.ENDM
	.ENDM
.MACRO	SAVSTK ARGLIN
.IRP	ARG,<ARGLIN>
  MOV	  ARG,-(SP)
.ENDM
.ENDM
	.MACRO	SCBDF$,L,B,SYSDEF
	.ASECT
.=177772
S.RCNT:'L' .BLKB 1
S.ROFF:'L' .BLKB 1
S.BMSV:'L' .BLKW 1
S.BMSK:'L' .BLKW 1
S.LHD:'L' .BLKW	2
S.PRI:'L' .BLKB	1
S.VCT:'L' .BLKB	1
S.CTM:'L' .BLKB	1
S.ITM:'L' .BLKB	1
S.CON:'L' .BLKB	1
S.STS:'L' .BLKB	1
S.CSR:'L' .BLKW	1
S.PKT:'L' .BLKW	1
S.FRK:'L' .BLKW	1
	.BLKW	1
	.BLKW	1
	.BLKW	1
	.IF NB	SYSDEF
	.IF DF	L$$DRV & M$$MGE
	.BLKW	1
	.ENDC
S.CCB:'L'
S.MPR:'L' .BLKW	6
	.IFF
	.PSECT
SP.EIP='B'1
SP.ENB='B'2
SP.LOG='B'4
SPARE=10
	.ASECT
.=0
M.LNK:'L'  .BLKW 1
M.UMRA:'L' .BLKW 1
M.UMRN:'L' .BLKW 1
M.UMVL:'L' .BLKW 1
M.UMVH:'L' .BLKB 1
M.BFVH:'L' .BLKB 1
M.BFVL:'L' .BLKW 1
M.LGTH='B'.
	.ENDC
	.MACRO	SCBDF$,X,Y,Z
	.ENDM
	.ENDM
.MACRO	SEBC$	LEN,ADJ
	.IF	B,ADJ
	
.ADJ	= 3		;DEFAULT IS 3 (CPH,CNT1,CNT2)
	.IFF
.ADJ	= ADJ
	.ENDC
.A	= LEN - .ADJ
.B	= .A & 177
	.BYTE	.B!200
	.BYTE	.A/200
	.ENDM
	.MACRO SLTDF$	L,B,LST
	.ASECT
	.=0
 
.IIF NB,LST,	.LIST
;
;	SYSTEM LINE TABLE OFFSETS AND FLAG WORD BIT DEFINITIONS
;
L.FLG:'B'	.BLKW	1	; FLAGS WORD
L.DDM:'B'	.BLKB	1	; DDM PROCESS INDEX
L.DLC:'B'	.BLKB	1	; DLC PROCESS INDEX
L.DDS:'B'	.BLKW	1	; DDM LINE TABLE ADDRESS
L.DLM:'B'	.BLKW	1	; DLC LINE TABLE RELOCATION BIAS
L.DLS:'B'	.BLKW	1	; DLC LINE TABLE ( VIRTUAL ) ADDRESS
L.CTL:'B'	.BLKB	1	; CONTROLLER NUMBER
L.UNT:'B'	.BLKB	1	; MULTIPLEXER UNIT NUMBER
L.LEN='L'.			; LENGTH OF EACH SLT ENTRY
;
;	FLAG WORD DEFINITIONS
;
LF.BWT='L'000007	; BUFFER WAIT QUEUE COUNT
LF.TIM='L'000010	; LINE NEEDS TIMER SERVICE
LF.MTP='L'000020	; LINE IS MULTI-POINT
LF.DLO='L'000040	; LINE IS DIAL-OUT
LF.MDC='L'000100	; LINE NEEDS MODEM CONTROL
;	000200	UNUSED
;	000400	UNUSED
;	001000	UNUSED
LF.ENA='L'002000	; LINE IS TO BE ENABLED AT INITIALIZATION TIME
LF.MFL='L'004000	; LINE IS MARKED FOR LOAD AT INITIALIZATION TIME
LF.REA='L'010000	; LINE IS REASSIGNABLE
LF.UNL='L'020000	; LINE IS MARKED FOR UNLOAD
LF.RDY='L'040000	; LINE IS READY (DDM,DLC PROCESSES AND LINE TABLES ASSIGNED)
LF.ACT='L'100000	; LINE IS ACTIVE ( LINE IS ASSIGNED TO AN LLC )
 
.IIF NB,LST,	.NLIST
 
	.PSECT	; RETURN TO BLANK PSECT
	.ENDM	SLTDF$
	.MACRO SLTSYM	NAM,DLC,LLC,FLG,CNT,UNT,SLN
 
	S'SLN'DD=NAM		; SLN DDM
	S'SLN'DL=DLC		; SLN DLC
	S'SLN'LL=LLC		; SLN LLC
	S'SLN'CN=CNT		; SLN CONTROLLER NUMBER
	S'SLN'UN=UNT		; SLN UNIT NUMBER
	.IF NB FLG
	S'SLN'SF=FLG		; SLN FLAG VALUE
	.IFF
	S'SLN'SF=0		; SLN FLAG VALUE DEFAULT
	.ENDC
	NAM'CNT'UNT=1		; CONTROLLER-UNIT NUMBER EXISTS
	SSL'SLN=0		; COUNT NUMBER OF STATIONS ON THIS LINE
	STATN=0			; START WITH STATION 0 ON THIS LINE ( USED BY STA$DF )
 
	.ENDM	SLTSYM
	.MACRO SLT$DF	NAM,DLC,LLC,FLG,CNT,UNT,ENB
 
;
;	SYSTEM LINE TABLE DEFINITIONS
;
	SLN=SLN+1
	SLTSYM NAM,DLC,LLC,FLG,\CNT,\UNT,\SLN
 
	.ENDM	SLT$DF
	.MACRO	SNDW$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$
	QDPB$	3,14400,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	SNDW$
	.MACRO	SNDW$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$E
	QDPB$E	LABEL,3,#14400,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	SNDW$E
	.MACRO	SNDW$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$S
	QDPB$S	3,#14400,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	SNDW$S
	.MACRO	SND$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$
	QDPB$	1,14400,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	SND$
	.MACRO	SND$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$E
	QDPB$E	LABEL,1,#14400,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	SND$E
	.MACRO	SND$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$S
	QDPB$S	1,#14400,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	SND$S
	.MACRO	SPAW$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$
	.IF B	<LUN>
	QDPB$	3,16420,<.MBXLU>,EFN,,IOST,AST,<PRMLST>
	.IFF
	QDPB$	3,16420,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDC
	.ENDM	SPAW$
	.MACRO	SPAW$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$E
	QDPB$E	LABEL,3,#16420,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	SPAW$E
	.MACRO	SPAW$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$S
	.IF B	<LUN>
	QDPB$S	3,#16420,<#.MBXLU>,EFN,,IOST,AST,<PRMLST>
	.IFF
	QDPB$S	3,#16420,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDC
	.ENDM	SPAW$S
	.MACRO	SPA$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$
	.IF B	<LUN>
	QDPB$	1,16420,<.MBXLU>,EFN,,IOST,AST,<PRMLST>
	.IFF
	QDPB$	1,16420,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDC
	.ENDM	SPA$
	.MACRO	SPA$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$E
	QDPB$E	LABEL,1,#16420,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	SPA$E
	.MACRO	SPA$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$S
	.IF B	<LUN>
	QDPB$S	1,#16420,<#.MBXLU>,EFN,,IOST,AST,<PRMLST>
	.IFF
	QDPB$S	1,#16420,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDC
	.ENDM	SPA$S
.MACRO	SPDF
NODLEN	= 6.
PASLEN	= 8.
.ASECT
.=0
CMLKNM:	.BLKW	1
LINCOU:	.BLKW	1
NEXLIN:	.BLKW	1
STATE:	.BLKB	1
RETCOD:	.BLKB	1
OPTION:	.BLKB	1
NODE:	.BLKB	NODLEN+1
LINE:	.BLKB	4
PASWOR:	.BLKB	PASLEN+1
REQSTA:	.BLKB	1
FLAGS:	.BLKB	1
CTXTLN	= .
.PSECT
SETUP	= 1.
PROC	= 2.
FINISH	= 3.
KNLNST	= 001
DEFHOS	= 0.
LINHOS	= 1.
LOCLOO	= 4.
NODOPR	= 6.
NODMAI	= 7.
LINSTA	= 8.
LINOPR	= 9.
LINMAI	= 10.
DEFREC	= 11.
DEFTRA	= 12.
LOGTGT	= 13.
.MACRO	SPDF
.ENDM
.ENDM
.MACRO	SPMDF
.MCALL	CONFIG,CONDF
CONFIG
CONDF
.MACRO	TABENT FLAG,INDEX,TYPCOD,VALUES
.IF     NE FLAG
  INDEX   = .-CONTAB
  .BYTE   TYPCOD
  .IRP    $$TEMP,<VALUES>
    .BYTE   $$TEMP
  .ENDM
  .BYTE	0
.ENDC
.ENDM
.PSECT	SPDAT,RW,D,GBL,REL,OVR
CONTAB:
TABENT	FS$HOS,DFHOIX,SP$DHO,<<NODE,0.>>
TABENT	FS$HOS,LNHOIX,SP$LHO,<<LINE,4.>,<NODE,0.>>
TABENT	FS$PAS,DFRCIX,SP$DRP,<<PASWOR,8.>>
TABENT	FS$PAS,DFTRIX,SP$DTP,<<PASWOR,8.>>
TABENT	FS$LLP,LCLPIX,SP$LLP,<<REQSTA,1.>,<LINE,4.>>
TABENT  FS$LST,LNSTIX,SP$LST,<<LINE,4.>,<REQSTA,1.>>
.PSECT
.ENDM
.MACRO	SRDF
.MCALL	CONFIG
CONFIG
SERFLG	= 1.
TIMFLG	= 2.
BLKFLG	= 3.
TEMFLG  = 24.
SERBIT	= 1.
TIMBIT	= 2.
FLGGRP	= 0.
FLGMSK	= SERBIT!TIMBIT
CMOLUN	= 1.
CMILUN	= CMOLUN+1
.IF NE	F$TRACE
TRCLUN	= CMILUN+1.
NETLUN	= TRCLUN+1.
.IFF
NETLUN	= CMILUN+1.
.ENDC
LNKLUN	= NETLUN+1.
FILLUN	= LNKLUN+F$LKLU
NCOLUN	= FILLUN+F$INLU+F$OTLU+F$IRLU+F$ORLU
LINLUN	= NCOLUN+1.
.MACRO	SRDF
.ENDM
.ENDM
.MACRO	SRMDF
.PSECT	SRDAT,RW,D,GBL,REL,OVR
ORWTHD:	.WORD	0
ORWTTL:	.WORD	ORWTHD
UNWTHD:	.WORD	0
UNWTTL:	.WORD	UNWTHD
INPRHD:	.WORD	0
INPRTL:	.WORD	INPRHD
.IF	DF	R$$11D!I$$AS
NETPUD:	.WORD	0
.ENDC
.PSECT
.ENDM
	.MACRO STASYM SL,PDI,STA
	SSL'SL=SSL'SL+1			; ONE MORE STATION ON THIS SYSTEM LINE
	S'SL'C'STA=PDI			; REMEMBER PROCESS DESCR. INDEX
	.ENDM STASYM
	.MACRO STA$DF ID,LLC
	STASYM \SLN,\PD$'LLC,\STATN	; DEFINE STATION'S SYMBOLS
	STATN=STATN+1			; ONE MORE MULTIDROP STATION
	STATBL=STATBL+1			; TOTAL NUMBER OF STATIONS
	.ENDM STA$DF
	.MACRO	STOPDV,SRC	;STORES DEST PDV IN CCB
	MOVB	SRC,C.STA(R5)
	BISB	#200,C.STA(R5)
	.ENDM
	.MACRO	STOULA,SRC	;STORES ULA IN CCB
	MOVB	SRC,C.LIN(R5)
	.ENDM
	.MACRO SWTCHI	AA,BB
	.IF NB AA
	MOV	AA,SYSFDB+F.URBD+2	; NEW BUFFER ADDRESS
	.IFF
	MOV	#$BFR,SYSFDB+F.URBD+2	; DEFAULT BUFFER ADDRESS
	.ENDC
	.IF NB BB
	MOV	BB,SYSFDB+F.URBD	; NEW BUFFER SIZE
	.ENDC
	.ENDM	SWTCHB
	.MACRO SWTCHO	AA,BB
	.IF NB AA
	MOV	AA,SYSFDB+F.NRBD+2	; NEW BUFFER ADDRESS
	.IFF
	MOV	#$BFR,SYSFDB+F.NRBD+2	; DEFAULT BUFFER ADDRESS
	.ENDC
	.IF NB BB
	MOV	BB,SYSFDB+F.NRBD	; NEW BUFFER SIZE
	.ENDC
	.ENDM	SWTCHB
	.MACRO	SYSTATE
	.IF	DF,R$$11M
	  IF
	  $$SYS	\$$STNM,10
	.IFF
	  MOV     R0,-(SP)
	  MOV     R1,-(SP)
	  MOV     R2,-(SP)
	  MOV     R3,-(SP)
	  MOV     R4,-(SP)
	  MOV     R5,-(SP)
	.ENDC
	.IF	DF,R$$11D!I$$AS
	  .INH0
	.ENDC
	.ENDM
	.MACRO	TCBDF$,L,B,SYSDEF
	.ASECT
.=0
T.LNK:'L' .BLKW	1
T.PRI:'L' .BLKB	1
T.IOC:'L' .BLKB	1
T.CPCB:'L' .BLKW 1
T.NAM:'L' .BLKW	2
T.RCVL:'L' .BLKW 2
T.ASTL:'L' .BLKW 2
T.EFLG:'L' .BLKW 2
T.UCB:'L' .BLKW	1
T.TCBL:'L' .BLKW 1
T.STAT:'L' .BLKW 1
T.ST2:'L' .BLKW 1
T.ST3:'L' .BLKW 1
T.DPRI:'L' .BLKB 1
T.LBN:'L' .BLKB	3
T.LDV:'L' .BLKW	1
T.PCB:'L' .BLKW	1
T.MXSZ:'L' .BLKW 1
T.ACTL:'L' .BLKW 1
T.ATT:'L' .BLKW 2
T.OFF:'L' .BLKW 1
	.BLKB 1
T.SRCT:'L' .BLKB 1
T.RRFL:'L' .BLKW 2
	.IF NB	SYSDEF
	.IF NDF	P$$LAS
T.LGTH='B'T.ATT
	.IFF
T.LGTH='B'.
	.ENDC
T.EXT='B'0
	.IFF
TS.EXE='B'100000
TS.RDN='B'40000
TS.MSG='B'20000
TS.NRP='B'10000
TS.RUN='B'4000
TS.OUT='B'400
TS.CKP='B'200
TS.CKR='B'100
TS.BLK='B'TS.CKP!TS.CKR!TS.EXE!TS.MSG!TS.NRP!TS.OUT!TS.RDN
T2.AST='B'100000
T2.DST='B'40000
T2.CHK='B'20000
T2.CKD='B'10000
T2.BFX='B'4000
T2.FXD='B'2000
T2.TIO='B'1000
T2.CAF='B'400
T2.HLT='B'200
T2.ABO='B'100
T2.STP='B'40
T2.STP='B'20
T2.SPN='B'10
T2.SPN='B'4
T2.WFR='B'2
T2.WFR='B'1
T3.ACP='B'100000
T3.PMD='B'40000
T3.REM='B'20000
T3.PRV='B'10000
T3.MCR='B'4000
T3.SLV='B'2000
T3.CLI='B'1000
T3.RST='B'400
T3.NSD='B'200
T3.CAL='B'100
T3.ROV='B'40
T3.NET='B'20
	.ENDC
	.PSECT
	.MACRO	TCBDF$	X,Y,Z
	.ENDM
	.ENDM
.MACRO	TEMMDF
.PSECT	TEMDAT,RW,D,LCL,REL,OVR
TEMWLN	= 13.
TEMBLN	= TEMWLN*2
TEMBLK:	.BLKW	TEMWLN
.PSECT
.ENDM
	.MACRO	THEN
	$$LAB	\$$STNM,\$$TRNM
	.ENDM
.MACRO	TMPDF
C$HELP	= 1.
C$STEX	= 11.
C$STST	= 12.
C$STLG	= 13.
C$STHS	= 14.
C$STPW	= 15.
C$STLN	= 16.
C$STPC	= 17.
C$STLL	= 18.
C$STCX	= 19.
C$CLHS	= 21.
C$CLPW	= 22.
C$CLLN	= 23.
C$CLPC	= 24.
C$CLCX	= 25.
C$LDRM	= 31.
C$LDVI	= 32.
C$LDKN	= 33.
C$LPRM	= 41.
C$LPLN	= 42.
C$SHCT	= 51.
C$SHST	= 52.
C$SHEX	= 53.
C$SHQU	= 54.
C$SHLK	= 55.
C$ZERO	= 61.
C$EXIT	= 71.
IE$NOD	= -1.
IE$NDN	= -2.
IE$LIN	= -3.
IE$PAS	= -4.
IE$CSR	= -5.
IE$VCT	= -6.
IE$PRI	= -7.
IE$FIL	= -8.
IE$BCT	= -9.
IE$BLN	= -10.
IE$OPT	= -11.
IE$PFX	= -12.
IE$KEY	= -13.
IE$CMD	= -14.
IE$PRO	= -15.
IE$PAR	= -16.
IE$INC	= -17.
IE$MEX	= -18.
LO$OPT	= 1
LO$TOP	= 2
LO$ECO	= 4
LO$FDX	= 10
LO$HDX	= 20
LF$LIN	= 1.
LF$STR	= 2.
NS$ON	= 1.
NS$OFF	= 2.
NS$SHU	= 3.
NS$LBK	= 4.
NS$MAI	= 5.
NS$ENA	= 6.
NS$DIS	= 7.
LT$OPR	= 1.
LT$MAI	= 2.
EN$REM	= 1.
EN$LIN	= 2.
EN$LCL	= 3.
EN$KNR	= 4.
EN$KNL	= 5.
PW$REC	= 1.
PW$XMT	= 2.
BT$ZRO	= 1.
BT$ONE	= 2.
BT$MIX	= 3.
.ENDM
	.MACRO	TMPDF$
	.MCALL	.BIN,.CNB,.CNW,.CORE,.CSR,.DVCHA,.INT,.INT1,.INT2,.INT3
	.MCALL	.LIBR,.LINKS,.LFLHD,.LSTHD,.LTAB,.MPLHD,.POOL,.PRI,.SCOM
	.MCALL	.SECSR,.SLNB,.SLNW,.STNB,.STNW,.UNB,.UNW,.VFY
	.ENDM	TMPDF$
.MACRO	TMPMDF
.PSECT	TMPDAT,RW,D,GBL,REL,OVR
CMTYPE:	.WORD	0
CMNAML:	.WORD	0
CMNAME:	.WORD	0,0,0,0
ERRFLG:	.WORD	0
ENTITY:	.WORD	0
STATEN:	.WORD	0
LOGTYP:	.WORD	0
NTLOPT:	.WORD
CSR:	.WORD	0
VECTOR:	.WORD	0
PRIOR:	.WORD	0
PROCNM:	.WORD	0
PARTN1:	.WORD	0
PARTN2:	.WORD	0
INCRMN:	.WORD	0
PNODEC:	.WORD	0
PNODEA:	.WORD	0
RNODEC:	.WORD	0
RNODEA:	.WORD	0
SNODEC:	.WORD	0
SNODEA:	.WORD	0
PARFLG:	.WORD	0
NNODEC:	.WORD	0
NNODEA:	.WORD	0
NODNUM:	.WORD	0
HNODEC:	.WORD	0
HNODEA:	.WORD	0
LIDFMT:	.WORD	0
LIDPT1:	.WORD	0
LIDPT2:	.WORD	0
LIDPT3:	.WORD	0
LIDPT4:	.WORD	0
CTLMAX:	.WORD	0
LINMAX:	.WORD	0
STAMAX:	.WORD	0
FILEC:	.WORD	0
FILEA:	.WORD	0
PASTYP:	.WORD	0
PASWDC:	.WORD	0
PASWDA:	.WORD	0
BLKCNT:	.WORD	0
BLKTYP:	.WORD	0
BLKLEN:	.WORD	0
TMPSIZ	= .-CMTYPE
.PSECT
.ENDM
.MACRO	TRDF
NODLEN	= 6.
BPSLEN	= 8.
.ASECT
.=0
CMLKNM:	.BLKW	1
LSLKNM:	.BLKW	1
STATE:	.BLKB	1
RETCOD:	.BLKB	1
OPTION:	.BLKB	1
TGNODE:	.BLKB	NODLEN+1
SVNODE:	.BLKB	NODLEN+1
LINE:	.BLKB	4
BOOPAS:	.BLKB	BPSLEN+1
CTXTLN	= .
.PSECT
CONFIG	= 1.
PROC	= 2.
FINISH	= 3.
BADBIT	= 370
NOTNAM	= 001
SRVINC	= 002
BPSINC	= 004
.MACRO	TRDF
.ENDM
.ENDM
.MACRO	TRIMDF
.PSECT	TRIDAT,RW,D,GBL,REL,OVR
NTLSTD:	.BLKW	1
GCD:	.BLKW	2
OPAR3:	.BLKW	1
OPDR3:	.BLKW	1
.PSECT
.ENDM
	.MACRO	TRUE,COMP,OP1,OP2
	$$GNCM	COMP,<OP1>,<OP2>,0
	.ENDM
	.MACRO	TRUEB,COMP,OP1,OP2
	$$GNCM	COMP,<OP1>,<OP2>,0,B
	.ENDM
.MACRO	TSDF
NODLEN	= 6.
.ASECT
.=0
CMLKNM:	.BLKW	1
LPLKNM:	.BLKW	1
COUNT:	.BLKW	1
MSGADR:	.BLKW	1
MSGLEN:	.BLKW	1
BLKLEN:	.BLKW	1
STATE:	.BLKB	1
RETCOD:	.BLKB	1
OPTION:	.BLKB	1
NODE:	.BLKB	NODLEN+1
LINE:	.BLKB	4
BLKTYP:	.BLKB	1
CTXTLN	= .
.PSECT
NODTES	= 1.
LINTES	= 2.
FINISH	= 3.
TESNOD	= 0.
TESLIN	= 1.
MXBKTY	= 2.
MXBKLN	= 300.-2.
.MACRO	TSDF
.ENDM
.ENDM
	.MACRO	TSK$DF	A,B
	.ENDM
	.MACRO	TTDF$	L,B
	.ASECT
;+
;		    PIPE CONTROL BLOCK (PCB)
;
;		+----------------------------------+	000
;		!		P.RSV		   !
;		+----------------------------------+	002
;		!	    P.RES / P.OPN	   !
;		+----------------------------------+	004
;		!	    P.REF / P.CBTN	   !
;		+----------------------------------+	006
;		!		P.USER		   !
;		+----------------------------------+	010
;		!		P.STS		   !
;		+----------------------------------+	012
;		!				   !
;		+		P.BPQ		   +
;		!				   !
;		+----------------------------------+	016
;		!		  !	P.LLA	   !
;		+----------------------------------+	020
;		!	P.SPI	  !	P.NUM	   !
;		+----------------------------------+	022
;		!		P.SEG		   !
;		+----------------------------------+	024
;-
 
;  PCB OFFSET DEFINITIONS
 
.=0
P.RSV:'L	.BLKW	1		; RESERVED WORD
P.RES:'L				; * POINTER TO RESERVED TERMINAL LIST
P.OPN:'L	.BLKW	1		; ** POINTER TO OPEN TERMINAL LIST
P.REF:'L				; * POINTER TO REFERED CONTROL TERMINAL LIST
P.CBTN:'L	.BLKW	1		; ** CURRENT BTN FOR MULTI-SEGMENT MSSAGES
P.USER:'L	.BLKW	1		; USER IDENTIFICATION NUMBER
P.STS:'L	.BLKW	1		; PIPE STATUS:
 PS.CI	='B	000001		;  CONNECT INITIATED
 PS.CC	='B	000002		;  CONNECT COMPLETED
 PS.DIP	='B	000004		;  DISCONNECT INITIATE PENDING
 PS.ABO	='B	000010		;  ABORT PENDING
 PS.BP	='B	000020		;  LINK IS BACK-PRESSURED
 PS.NKP	='B	000040		;  NAK PENDING
 PS.IMP	='B	000100		;  INTERRUPT MESSAGE PENDING
 PS.CTL	='B	010000		;  * PIPE IS CONTROL PIPE
 PS.DAT	='B	020000		;  ** PIPE IS DATA PIPE
;				   BIT MASKS:
 PS.RCN	='B PS.CI!PS.CC!PS.DIP	;  PIPE READY FOR CONNECT
P.BPQ:'L	.BLKW	2		; BACK-PRESSURE QUEUE
P.LLA:'L	.BLKB	1		; LOGICAL LINK ADDRESS OF PIPE
	.BLKB	1		; (RESERVED)
P.NUM:'L	.BLKB	1		; PIPE NUMBER
P.SPI:'L	.BLKB	1		; PDV INDEX OF PIPE OWNER
P.SEG:'L	.BLKW	1		; LINK SEGMENT SIZE
PCBLEN ='B .			; LENGTH OF PCB
; NOTE:'L
; *  - CONTROL PIPE ONLY
; ** - DATA PIPE ONLY
;+
;
;		  TERMINAL CONTROL BLOCK (TCB)
;
;		+--------------------------------+	000
;		!		T.LNK		 !
;		+--------------------------------+	002
;		!		T.OLNK		 !
;		+--------------------------------+	004
;		!		T.PCBR		 !
;		+--------------------------------+	006
;		!		T.PCBD		 !
;		+--------------------------------+	010
;		!		T.RID		 !
;		+--------------------------------+	012
;		!		T.STS		 !
;		+--------------------------------+	014
;		!	T.FLG	 !	T.TT	 !
;		+--------------------------------+	016
;		!	T.SPI	 !	T.NUM	 !
;		+--------------------------------+	020
;		!	T.NAML	 !	T.OBJ	 !
;		+--------------------------------+	022
;		!				 !
;		=		T.NAM		 =
;		!				 !
;		+--------------------------------+	030
;		!		T.WCNT		 !
;		+--------------------------------+	032
;		!		T.RCNT		 !
;		+--------------------------------+	034
;		!		T.DMRB		 !
;		+--------------------------------+	036
;		!		T.DMVA		 !
;		+--------------------------------+	040
;
;-
 
;
;  TCB OFFSET DEFINITIONS
;
 
.=0
T.LNK:'L	.BLKW	1		; LINK TO NEXT RESERVED TERMINAL
T.OLNK:'L	.BLKW	1		; LINK TO NEXT OPENED TERMINAL
T.PCBR:'L	.BLKW	1		; LINK TO RESERVER'S CONTROL/DATA PCB
T.PCBD:'L	.BLKW	1		; LINK TO DATA PCB/HANDOFFEE'S CONTROL PCB
T.RID:'L	.BLKW	1		; REQUESTOR ID FOR RESERVER
T.STS:'L	.BLKW	1		; TERMINAL STATUS:
 TS.CLP	='B	000001		;  CLOSE PENDING
 TS.OPP	='B	000002		;  OPEN PENDING
 TS.OP	='B	000004		;  OPEN TERMINAL
 TS.RLP	='B	000010		;  RELEASE PENDING
 TS.RS	='B	000020		;  RESERVED
 TS.HP	='B	000040		;  HANDOFF PENDING
 TS.SRP	='B	000200		;  STATUS REPORT PENDING
 TS.OSP	='B	000400		;  OPERATIONAL STATUS PENDING
 TS.STE	='B	001000		;  START ERROR PENDING
 TS.PWF	='B	002000		;  POWERFAIL PROCESSING PENDING
;					   BIT MASKS:
 TS.OCP	='B TS.CLP!TS.OPP!TS.OP		;  OPEN OR CLOSE PENDING
 TS.ROP	='B TS.OCP!TS.RLP!TS.HP		;  READY FOR OPEN
 TS.RHF	='B TS.ROP!TS.SRP		;  READY FOR HANDOFF
 TS.RRL	='B TS.CLP!TS.OPP!TS.RLP!TS.HP	;  READY FOR RELEASE
T.TT:'L	.BLKB	0		; RESOURCE TYPE:
 TT.V62	='B	  1.		;  VT62 TERMINAL
 TT.V52	='B	  2.		;  VT52 TERMINAL
 TT.L36	='B	  3.		;  LA36 TERMINAL
 TT.L18	='B	  4.		;  LA180 PRINTER
 TT.DDC	='B	  5.		;  DDCMP LINE
 TT.LE	='B	  6.		;  LP11 LINE PRINTER
 TT.LP	='B	  7.		;  LP20 LINE PRINTER
 TT.CR	='B	  8.		;  CR11 CARD READER
 TT.CD	='B	  9.		;  CD20 CARD READER
T.FLG:'L	.BLKW	1		; CONTROL FLAGS:
 TF.DEA	='B	040000		;  RESOURCE DEASSIGNED
 TF.DIS	='B	020000		;  LINE DISABLED
;		000377		; (RESOURCE TYPE)
;					   BIT MASKS:
 TF.RAL	='B	TF.DEA!TF.DIS		;  READY FOR ALLOCATION
T.NUM:'L	.BLKB	1		; TERMINAL NUMBER
T.SPI:'L	.BLKB	1		; SERVER PROCESS INDEX
T.OBJ:'L	.BLKB	1		; RESOURCE OBJECT TYPE
T.NAML:'L	.BLKB	1		; TERMINAL NAME LENGTH
T.NAM:'L	.BLKB	6		; TERMINAL NAME (ASCII)
T.WCNT:'L	.BLKW	1		; WRITE COUNT
T.RCNT:'L	.BLKW	1		; READ COUNT
T.DMRB:'L	.BLKW	1		; RELOCATION BIAS OF DIALOG MANAGER BUFFER
T.DMVA:'L	.BLKW	1		; VIRTUAL ADDRESS OF DIALOG MANAGER BUFFER
TCBLEN	='B .			; LENGTH OF TCB
 
	.PSECT
	.ENDM
	.MACRO	T1$	LB
 
LB:	.BYTE	40., 0		; OPCODE, COUNT
 
	.ENDM
	.MACRO	T2$	LB
 
LB:	.BYTE	41., 0		; OPCODE, COUNT
 
	.ENDM
	.MACRO	UCBDF$,L,B
	.ASECT
.=177772
U.CLI:'L' .BLKW	1
U.LUIC:'L' .BLKW 1
U.OWN:'L' .BLKW 1
U.DCB:'L' .BLKW	1
U.RED:'L' .BLKW	1
U.CTL:'L' .BLKB	1
U.STS:'L' .BLKB	1
U.UNIT:'L' .BLKB 1
U.ST2:'L' .BLKB	1
U.CW1:'L' .BLKW	1
U.CW2:'L' .BLKW	1
U.CW3:'L' .BLKW	1
U.CW4:'L' .BLKW	1
U.SCB:'L' .BLKW	1
U.ATT:'L' .BLKW	1
U.BUF:'L' .BLKW	1
	.BLKW	1
U.CNT:'L' .BLKW	1
U.ACP='B'U.CNT+2
U.VCB='B'U.CNT+4
U.CBF='B'U.CNT+2
U.UIC='B'U.CNT+<9.*2>
	.PSECT
DV.REC='B'1
DV.CCL='B'2
DV.TTY='B'4
DV.DIR='B'10
DV.SDI='B'20
DV.SQD='B'40
DV.MXD='B'100
DV.UMD='B'200
DV.SWL='B'1000
DV.ISP='B'2000
DV.OSP='B'4000
DV.PSE='B'10000
DV.COM='B'20000
DV.F11='B'40000
DV.MNT='B'100000
U2.DH1='B'100000
U2.DJ1='B'40000
U2.RMT='B'20000
U2.L8S='B'10000
U2.NEC='B'4000
U2.CRT='B'2000
U2.ESC='B'1000
U2.LOG='B'400
U2.SLV='B'200
U2.DZ1='B'100
U2.HLD='B'40
U2.AT.='B'20
U2.PRV='B'10
U2.L3S='B'4
U2.VT5='B'2
U2.LWC='B'1
U2.R04='B'100000
U2.7CH='B'10000
UC.ALG='B'200
UC.NPR='B'100
UC.QUE='B'40
UC.PWF='B'20
UC.ATT='B'10
UC.KIL='B'4
UC.LGH='B'3
US.BSY='B'200
US.MNT='B'100
US.FOR='B'40
US.MDM='B'20
US.ABO='B'1
US.MDE='B'2
US.WCK='B'10
US.DSB='B'10
US.CRW='B'4
US.ECH='B'2
US.OUT='B'1
US.FRK='B'2
US.SHR='B'1
US.LAB='B'4
US.OFL='B'1
US.RED='B'2
US.PUB='B'4
US.UMD='B'10
	.MACRO	UCBDF$,X,Y
	.ENDM
	.ENDM
	.MACRO UNT$DF A,B,C,D,E,F,G,H,I,J,K,L,M
	.ENDM	UNT$DF
	.MACRO	VNPBPT	AA,BB
	.MCALL	ERMSG$,ERBLK$,ERRPT$
	.IF NB BB
	BR	1$
	ERMSG$	<AA>
	ERBLK$
1$:	MOV	#2$,-(SP)	; SET RETURN ADDRESS
	ERRPT$	,$EROUT
2$:
	.LIST MEB
	BPT
	.NLIST MEB
	.ENDC
	.ENDM	VNPBPT
	.MACRO	VNPDF$	C,E
	.ASECT
	.=0
LR.STS:'C'	.BLKW	1	; FUNCTION CODE, STATUS BITS
 
; "NODE ON" REQUEST BLOCK OFFSETS
 
LR.BLK:'C'	.BLKW	1	; NETLDR DATA BLOCK ADDRESS
 
; "SET PROCESS" REQUEST BLOCK OFFSETS
 
	.=LR.BLK
LR.PRO:'C'	.BLKW	1	; PROCESS NAME (RAD50)
LO.INC:'C'	.BLKW	1	; INCREMENT VALUE (32. WORD BLOCKS)
LO.PAR:'C'	.BLKW	2	; PARTITION NAME (RAD50)
 
; "SET LINE" OR "SET STATE" REQUEST BLOCK OFFSETS
 
	.=LR.BLK
LR.LIN:'C'	.BLKW	1	; DDM NAME (RAD50)
LR.CTL:'C'	.BLKB	1	; CONTROLLER NUMBER
LR.UNT:'C'	.BLKB	1	; UNIT NUMBER
LO.CSR:'C'	.BLKW	1	; CSR ADDRESS
LO.PRI:'C'	.BLKW	1	; INTERRUPT PRIORITY (1 THRU 7)
LO.VCT:'C'	.BLKW	1	; INTERRUPT VECTOR
LO.CHA:'C'	.BLKW	1	; DEVICE CHARACTERISTICS (NON-MUX ONLY)
 
; "SET PASSWORD" REQUEST BLOCK OFFSETS
 
	.=LR.BLK
LR.PAS:'C'	.BLKW	4	; MAX 8 ASCII CHARACTERS
LR.NOD:'C'	.BLKW	2	; NODE NAME INS RAD50 ( 6 ALPHA )
 
; FUNCTION CODES
 
LS.CEX='E'1		; "NODE ON"
LS.PRO='E'2		; "SET PROCESS"
LS.LIN='E'3		; "SET LINE"
LX.CEX='E'4		; "NODE OFF"
LX.PRO='E'5		; "CLEAR PROCESS"
LX.LIN='E'6		; "CLEAR LINE"
LS.LMC='E'7		; RELOAD ALL KMC MICROCODE (AFTER POWERFAIL)
LS.TST='E'10		; TEST ( VNP TEST ROUTINES )
LS.PAS='E'11		; SET/CLEAR PASSWORD
LS.ENA='E'12		; ENABLE/DISABLE LINE
LS.XIT='E'13		; EXIT FROM VNP
LS.NTI='E'14		; RUN NTINIT
LS.ACP='E'15		; MOUNT ACP
LS.SHL='E'16		; SHOW STATE KNOWN LINES
LS.HST='E'17		; SET HOST
	; STATUS BITS
LS.OPT='E'400		; OPTIONAL PARAMETERS INCLUDED
LS.ECH='E'1000		; ECHO THE TEMPLATE
LS.TOP='E'2000		; TOP-DOWN LOADING
LS.FDX='E'4000		; FULL-DUPLEX
LS.HDX='E'10000		; HALF-DUPLEX
LS.CXO='E'10000		; PERFORM 'SET STA LOC ON' AS PART OF 'SET CEX'
LS.UNF='E'20000		; NTINIT SHOULD 'UNFIX' ITSELF WHEN FINISHED
	.PSECT
	.ENDM	VNPDF$
	.MACRO	V62DF$	LST
 
	.MCALL	D1$,D2$,D2H$,D2F$,D2T$,D3$,D3H$,D3F$,D3T$,D4$
	.MCALL	A1$,A2$,A3$,A4$,A5$,A6$,A7$,A8$,A9$,A10$,A11$
	.MCALL	L1$,L2$,L3$,L4$
	.MCALL	F1$,F2$,F3$,F4$,F5$,F6$
	.MCALL	I1$,I2$,I3$,I4$,I5$,I6$
	.MCALL	P1$,P2$
	.MCALL	T1$,T2$
	.MCALL	C1$,C2$,C3$,C4$
	.MCALL	ASCII$, CNT$, CPH$, SEBC$
 
	.IF	B,LST
	.NLIST
	.ENDC
 
; VIDEO ATTRIBUTES
 
	V.N=	0		; NORMAL VIDEO
	V.R=	100		; REVERSE VIDEO
 
; FIELD INITIALIZATION CHARACTERS (STANDARD)
 
	I.N=	0		; NULLS
	I.S=	40		; SPACES
	I.D=	56		; DOTS
	I.U=	137		; UNDERLINES
 
; FIELD ATTRIBUTES
 
	; DATA TYPE DESCRIPTOR
 
	D.A=	0		; ALPHABETIC
	D.X=	1		; ALPHANUMBERIC
	D.N=	2		; NUMBERIC
	D.S=	3		; SIGNED NUMBERIC
	D.D=	4		; ANY DISPLABLE CHAR
 
	; FIELD DEFINATIONS
 
	F.E=	20		; EMPTY FIELD
	F.F=	40		; FULL FIELD
	F.AX=	100		; AUTO XMIT
	F.AT=	200		; AUTO TAB
 
	F.RJ=	20*400		; RIGHT JUSTIFIED
	F.M=	40*400		; MODIFIED FIELD
 
; COMMAND PACKET HEADER
 
	H.KBL=	60		; KEYBOARD LOCK
	H.KBU=	40		; KEYBOARD UNLOCK
	H.KIL=	10		; KILL INPUT REQUEST
	H.CBS=	4		; RETURN COMMAND BUFFER SIZE
	H.STS=	2		; SEND STATUS
 
 
; INPUT REQUEST FLAGS
 
 
	I.FUP=	1		; XMIT FORMS UNPACKED
	I.MNC=	2		; XMIT MENU FIELD NUMBERS AND CONTENTS
	I.AXE=	4		; AUTO-TRANSMIT ENABLED
	I.FKP=	10		; ENABLE FUNCTION KEY PAD
	I.SID=	20		; SEND TERMINAL ID
	I.CMB=	40		; CLEAR MODIFIER BITS
 
 
; FUNCTION KEY CODES
 
 
	F.PF0=	0		; PROGRAM FUNCTION KEY #0
	F.PF1=	1
	F.PF2=	2
	F.PF3=	3
	F.PF4=	4
	F.PF5=	5
	F.PF6=	6
	F.PF7=	7
	F.PF8=	10
	F.PF9=	11
	F.PF10=	12		; PROGRAM FUNCTION KEY #10  (PERIOD)
 
	F.UNX=	41		; UNSHIFTED NEXT
	F.SNX=	42		; SHIFTED NEXT
	F.PRT=	43		; PRINT
	F.ENT=	44		; ENTER
	F.ABO=	45		; ABORT
 
; FUNCTION KEY FLAGS
 
	F.SF=	100		; SEND FORM
	F.SM=	200		; SEND MENU
	F.SFM=	300		; SEND FORM AND MENU
 
	.IF	B,LST
	.LIST
	.ENDC
 
	.ENDM
	.MACRO	WHILE
	IF
	$$LAB	\$$STNM,10
	.ENDM
	.MACRO	XMIW$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$
	QDPB$	3,14410,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	XMIW$
	.MACRO	XMIW$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$E
	QDPB$E	LABEL,3,#14410,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	XMIW$E
	.MACRO	XMIW$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$S
	QDPB$S	3,#14410,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	XMIW$S
	.MACRO	XMI$	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$
	QDPB$	1,14410,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	XMI$
	.MACRO	XMI$E	LABEL,LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$E
	QDPB$E	LABEL,1,#14410,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	XMI$E
	.MACRO	XMI$S	LUN,EFN,IOST,AST,PRMLST
	.MCALL	QDPB$S
	QDPB$S	1,#14410,LUN,EFN,,IOST,AST,<PRMLST>
	.ENDM	XMI$S
	.MACRO	$CON$	DIC,FNC,LUN,EFN,IOST,AST,P0,P1,P2,P3,P4,P5,P6
	.MCALL	QDPB$
	.IF NB	<P2>
	QDPB$	DIC,FNC,LUN,EFN,,IOST,AST,<P1,P2,P3,P4,P5,P6>
	.IFF
	QDPB$	DIC,FNC,LUN,EFN,,IOST,AST,<P1,P0,P3,P4,P5,P6>
	.ENDC
	.ENDM	$CON$
	.MACRO	$CON$E	LABEL,DIC,FNC,LUN,EFN,IOST,AST,P1,P2,P3,P4,P5,P6
	.MCALL	QDPB$E
	QDPB$E	LABEL,DIC,FNC,LUN,EFN,,IOST,AST,<P1,P2,P3,P4,P5,P6>
	.ENDM	$CON$E
	.MACRO	$CON$S	DIC,FNC,LUN,EFN,IOST,AST,P0,P1,P2,P3,P4,P5,P6
	.MCALL	QDPB$S
	.IF NB	<P2>
	QDPB$S	DIC,FNC,LUN,EFN,,IOST,AST,<P1,P2,P3,P4,P5,P6>
	.IFF
	QDPB$S	DIC,FNC,LUN,EFN,,IOST,AST,<P1,P0,P3,P4,P5,P6>
	.ENDC
	.ENDM	$CON$S
	.MACRO	$DEQ	BASE,OFFSET,NODE,TAG,?TAG2,?TAG3
	.IF NB	NODE
	.IF NB	OFFSET
	MOV	OFFSET'(BASE),NODE
	.IFF
	MOV	@BASE,NODE
	.IFTF
	.IF NB	TAG
	BEQ	TAG
	.IFF
	BEQ	TAG3
	.ENDC
	.IFT
	MOV	@NODE,OFFSET'(BASE)
	BNE	TAG2
	MOV	BASE,OFFSET'+2(BASE)
	ADD	#'OFFSET,OFFSET'+2(BASE)
	.IFF
	MOV	(NODE),(BASE)
	BNE	TAG2
	MOV	BASE,2(BASE)
	.ENDC
	.IFF
	.IF NB	OFFSET
	MOV	OFFSET'(BASE),R4
	.IFF
	MOV	(BASE),R4
	.IFTF
	.IF NB	TAG
	BEQ	TAG
	.IFF
	BEQ	TAG3
	.ENDC
	.IFT
	MOV	(R4),OFFSET'(BASE)
	BNE	TAG2
	MOV	BASE,OFFSET'+2(BASE)
	ADD	#'OFFSET,OFFSET'+2(BASE)
	.IFF
	MOV	(R4),(BASE)
	BNE	TAG2
	MOV	BASE,2(BASE)
	.ENDC
	.IFTF
TAG2:
	.IFT
	CLR	@NODE
	.IFF
	CLR	@R4
	.ENDC
TAG3:
	.ENDM
	.MACRO	$ENQ	BASE,OFFSET,NODE
	.IF NB  NODE
	CLR	(NODE)
	BIS	#CS.LST,C.STS(NODE)
	.IF NB	OFFSET
	MOV	NODE,@'OFFSET'+2(BASE)
	MOV	NODE,OFFSET'+2(BASE)
	.IFF
	MOV	NODE,@2(BASE)
	MOV	NODE,2(BASE)
	.ENDC
	.IFF
	CLR	(R4)
	BIS	#CS.LST,C.STS(R4)
	.IF NB  OFFSET
	MOV	R4,@'OFFSET'+2(BASE)
	MOV	R4,OFFSET'+2(BASE)
	.IFF
	MOV	R4,@2(BASE)
	MOV	R4,2(BASE)
	.ENDC
	.ENDC
	.ENDM
	.MACRO	$GNDF$	FLG
	.IF NB	<FLG>
	.IF IDN	<FLG>,<NT.LON>
	.NLIST
$$$FLG = 16440
	.LIST
	.IFF
	.IF IDN	<FLG>,<NT.TYP>
	.NLIST
$$$FLG = 16650
	.LIST
	.IFF
	.ERROR	FLG	;ILLEGAL FLAG
	.ENDC
	.ENDC
	.IFF
	.NLIST
$$$FLG = 16630
	.LIST
	.ENDC
	.ENDM	$GNDF$
	.MACRO	$INTSX
	JSR	R4,$INTSX
	.ENDM
	.MACRO	$INTXT
	CALLR	$INTX7
	.ENDM
	.MACRO	$LIBCL	OFF,REG,LBL,SAVE6
;MACRO TO CALL A LIBRARY PROCESS THROUGH LINETABLE
;	OFF = OFFSET FROM LINETABLE POINTER
;	REG = LINETABLE POINTER
;	LBL = OFFSET INTO LIBRARY PROCESS (IF LIBRARY STB FILE IS LINKED
;			WITH CALLING PROCESS THIS FIELD MAY BE A LABEL)
;	SAVE6 = IF DEFINED SAVE CURRENT KISAR6 MAPPING
	.IF	DF M$$MGE
	.IF	NB SAVE6
	MOV	@#KISAR6,-(SP)
	.ENDC
	MOV	OFF(REG),@#KISAR6
	CALL	@#LBL
	.IFF
	MOV	OFF(REG),-(SP)
	ADD	#LBL,(SP)
	CALL	@(SP)+
	.IFT
	.IF	NB SAVE6
	MOV	(SP)+,@#KISAR6
	.ENDC
	.ENDC
	.ENDM
	.MACRO	$LIBCM	OFF,REG,LBL,SAVE6
;MACRO TO CALL A LIBRARY PROCESS THROUGH LINETABLE
;	OFF = OFFSET FROM LINETABLE POINTER
;	REG = LINETABLE POINTER
;	LBL = OFFSET INTO LIBRARY PROCESS (IF LIBRARY STB FILE IS LINKED
;			WITH CALLING PROCESS THIS FIELD MAY BE A LABEL)
;	SAVE6 = IF DEFINED SAVE CURRENT KISAR6 MAPPING
	.IF	DF M$$MGE
	.IF	NB SAVE6
	MOV	@#KISAR6,-(SP)
	.ENDC
	MOV	OFF(REG),@#KISAR6
	CALL	@#LBL
	.IFF
	MOV	OFF(REG),-(SP)
	ADD	#LBL,(SP)
	CALL	@(SP)+
	.IFT
	.IF	NB SAVE6
	MOV	(SP)+,@#KISAR6
	.ENDC
	.ENDC
	.ENDM
	.MACRO	$LIBCN	OFF,REG,LBL,SAVE6
;MACRO TO CALL A LIBRARY PROCESS THROUGH LINETABLE
;	OFF = OFFSET FROM LINETABLE POINTER
;	REG = LINETABLE POINTER
;	LBL = OFFSET INTO LIBRARY PROCESS (IF LIBRARY STB FILE IS LINKED
;			WITH CALLING PROCESS THIS FIELD MAY BE A LABEL)
;	SAVE6 = IF DEFINED SAVE CURRENT KISAR6 MAPPING
	.IF	DF M$$MGE
	.IF	NB SAVE6
	MOV	@#KISAR6,-(SP)
	.ENDC
	MOV	OFF(REG),@#KISAR6
	CALL	@#LBL
	.IFF
	MOV	OFF(REG),-(SP)
	ADD	#LBL,(SP)
	CALL	@(SP)+
	.IFT
	.IF	NB SAVE6
	MOV	(SP)+,@#KISAR6
	.ENDC
	.ENDC
	.ENDM
	.MACRO	$MVBYT,SRC,DST
	.IF	B	DST
		.ERROR	;DESTINATION FIELD NOT PRESENT
	.IFF
		.NTYPE	$TYP,DST
		.IF	EQ	$TYP&70
		CLR	DST
		BISB	SRC(R5),DST
		.IFF
		MOVB	SRC(R5),DST
		.ENDC
	.ENDC
	.ENDM
	.MACRO	$MVFBF RX,OFF
	.IF DF	M$$MGE
	MOV	OFF(RX),-(SP)
	.ENDC
	MOV	OFF+2(RX),-(SP)
	JSR	R1,$MVFBF
	.ENDM
	.MACRO	$MVTBF RX,OFF
	.IF DF	M$$MGE
	MOV	OFF(RX),-(SP)
	.ENDC
	MOV	OFF+2(RX),-(SP)
	JSR	R1,$MVTBF
	.ENDM
	.MACRO	$QDLC	ARG1,ARG2
	.IF NB	ARG1
	MOV	ARG1,C.FNC(R4)
	.ENDC
	.IF NB	ARG2
	MOVB	ARG2,C.LIN(R4)
	.ENDC
	JSR	PC,$LLCRQ
	.ENDM
	.MACRO	$QLLC	ARG1,ARG2,ARG3
	.IF NB	ARG1
	MOV	ARG1,C.FNC(R4)
	.ENDC
	.IF NB	ARG2
	MOVB	ARG2,C.STA(R4)
	.ENDC
	.IF NB	ARG3
	MOVB	ARG3,C.LIN(R4)
	.ENDC
	JSR	PC,$LLCRS
	.ENDM
	.MACRO	$$BGND,BRTYPE,DIF
	$$BGNN	BRTYPE,\$$STNM,\$$TRNM-DIF
	.ENDM
	.MACRO	$$BGNN BRTYPE,N1,N2
	$$GEN1	,B'BRTYPE,N1'N2'$
	.ENDM
	.MACRO	$$BUFD BUFNUM,BIAS,ADDR,CNT
	.NARG	$$NARG
	.IF	NE $$NARG-2
	  .IF	  NE $$NARG-1
	    $$MOV   BIAS,C.BUF'BUFNUM
	    $$MOV   ADDR,C.BUF'BUFNUM+2
	    $$MOV   CNT,C.CNT'BUFNUM
	  .ENDC
	.IFF
	  .IF     IDN <#0>,<BIAS>
	    $$MOV	  #0,C.CNT'BUFNUM
	  .ENDC
	.ENDC
	.ENDM
	.MACRO	$$ELSE
	$$BGNN	R,\$$STNM,10
	$$LAB	\$$STNM,\$$TRNM-1
	.ENDM
	.MACRO	$$GEN1,LAB,OPCODE,OP1
	.IF	DF $$SLST
	.LIST
					LAB	OPCODE	OP1
	.NLIST
	.IFF
LAB	OPCODE	OP1
	.ENDC
	.ENDM
	.MACRO	$$GEN2,OPCODE,OP1,OP2
	.IF	DF $$SLST
	.LIST
						OPCODE	OP1,OP2
	.NLIST
	.IFF
	OPCODE	OP1,OP2
	.ENDC
	.ENDM
	.MACRO	$$GETB SRC,DST
	.NTYPE	$$TYPE,DST
	.IF	EQ $$TYPE&70	;REGISTER
	  CLR	  DST
	  BISB	  SRC,DST
	.IFF
	  MOVB	  SRC,DST
	  .IF	  EQ $$TYPE-46	;PUSH
	    CLRB    1(SP)
	  .ENDC
	.ENDC
	.ENDM
	.MACRO	$$GNAB,A,B,BYTE
	.IF	NB B
	  $$GEN2  CMP'BYTE,<A>,<B>
	.IFF
	  .IF	  NB A
	    $$GEN1  ,TST'BYTE,<A>
	  .ENDC
	.ENDC
	.ENDM
	.MACRO	$$GNBT,A,B,BYTE
	.IF	NB B
	  $$GEN2  BIT'BYTE,<A>,<B>
	.IFF
	  .IF	  NB A
	    $$GEN1  ,TST'BYTE,<A>
	  .ENDC
	.ENDC
	.ENDM
	.MACRO	$$GNCM,COMP,OP1,OP2,DIF,BYTE
	.IF	IDN <SET>,<COMP>
	  $$GNBT  <OP1>,<OP2>,BYTE
	  $$BGND  NE,DIF
	.IFF
	  .IF	  IDN <CLEAR>,<COMP>
	    $$GNBT  <OP1>,<OP2>,BYTE
	    $$BGND  EQ,DIF
	  .IFF
	    $$GNAB  <OP1>,<OP2>,BYTE
	    $$BGND  COMP,DIF
	  .ENDC
	.ENDC
	.ENDM
	.MACRO	$$INMC FLAG
	.MCALL	ENDPROC,IF,ENDIF,WHILE,ENDWHILE,ONCASE,CASE,ENDCASE
	.MCALL	PROCLC,JMPPROC,DO,THEN,ELSE,TRUE,FALSE,TRUEB,FALSEB
	.MCALL	$$PUSH,$$POP,$$POPI,$$ELSE,$$BGNN,$$BGND,$$LAB,$$STSM
	.MCALL	$$GEN1,$$GEN2,$$GNCM,$$GNBT,$$GNAB
	.IF	IDN <FLAG>,<SYSTEM>
	  .MCALL  SYSTATE,ENDSYSTATE
	.ENDC
	.IF	DF,R$$11M
	  .MCALL  SWSTK$,$$SYS
	.ENDC
	.IF	DF,R$$11D!I$$AS
	  .MCALL  .INH0,.ENB0
	.ENDC
	.ENDM
	.MACRO	$$INSY
$$CSTA=0
$$PRST=7
$$STNM=0
$$TRNM=0
$$STIX=777
	.ENDM
	.MACRO 	$$LAB N1,N2
	$$GEN1	N1'N2'$:
	.ENDM
	.MACRO	$$MOV SRC,DST
	.IF	NB SRC
	  .IF	  IDN <#0>,<SRC>
	    CLR	    DST(R4)
	  .IFF
	    MOV	    SRC,DST(R4)
	  .ENDC
	.ENDC
	.ENDM
	.MACRO	$$MOVB SRC,DST
	.IF	NB SRC
	  .IF	  IDN <#0>,<SRC>
	    CLRB    DST(R4)
	  .IFF
	    MOVB    SRC,DST(R4)
	  .ENDC
	.ENDC
	.ENDM
	.MACRO	$$POP VAR
$$STIX=$$STIX+1
	$$POPI	<VAR>,\$$STIX
	.ENDM
	.MACRO	$$POPI VAR,NUM
VAR'=$$S'NUM
	.ENDM
	.MACRO	$$PUSH VAL
	$$STSM	$$S,\$$STIX,<VAL>
$$STIX=$$STIX-1
	.ENDM
	.MACRO	$$QUE MODCOD,FCNCOD
	MOV	#<MODCOD*400!FCNCOD>,C.FNC(R4)
	MOVB	#<200+PD$NSP>,C.LIN+1(R4)
	CALL	$LLCRS
	.ENDM
	.MACRO	$$SET WORD
	.IF	NB WORD
	  .WORD   WORD
	.IFF
	  .WORD   0
	.ENDC
	.ENDM
	.MACRO	$$SETB BYTE
	.IF	NB BYTE
	  .BYTE   BYTE
	.IFF
	  .BYTE   0
	.ENDC
	.ENDM
	.MACRO	$$SNOD STNG,MAXLEN
	.NCHR	$$TEMP,<STNG>
	$$TEMP=MAXLEN-$$TEMP
	.IF LT	$$TEMP
	.ERROR	;STRING TOO LONG
	.BLKB	MAXLEN
	.IFF
	.ASCII	/STNG/
	.REPT	$$TEMP
	.BYTE	<' >
	.ENDM
	.ENDC
	.ENDM
	.MACRO	$$STID OBJ,FMT,NAME,GROUP,USER
	.NARG	$$NARG
	.IF NB	FMT
	$$FMT	=FMT
	.IFF
	$$FMT	=0
	.ENDC
	.IF NB	OBJ
	$$OBJ	=OBJ
	.IFF
	$$OBJ	=0
	.ENDC
	.BYTE	$$FMT,$$OBJ	;SET FORMAT AND OBJECT TYPE
	.IF LE	$$NARG-2	;IF 1 OR 2 ARGUMENTS
	.IF NE	$$FMT
	.ERROR	;INVALID DESCRIPTOR
	.ENDC
	.BLKB	18.		;FORMAT 0 - UNDEFINED DESCRIPTOR
	.IFF
	.IF EQ	$$NARG-3	;IF 3 ARGUMENTS
	.IF NE	$$FMT-1		;MUST BE FORMAT 1
	.ERROR	;INVALID DESCRIPTOR
	.ENDC
	$$STST	NAME,16.
	.IFF
	.IF EQ	$$NARG-4	;IF 4 ARGUMENTS
	.ERROR	;INVALID DESCRIPTOR
	.ENDC
				;MUST BE 5 ARGUMENTS
	.IF NE	$$FMT-2		;AND MUST BE FORMAT 2
	.ERROR	;INVALID DESCRIPTOR
	.ENDC
	$$SET	GROUP
	$$SET	USER
	$$STST	NAME,12.
	.ENDC
	.ENDC
	.ENDM
	.MACRO	$$STSM NAME,NUMB,VAL
NAME'NUMB'='VAL
	.ENDM
	.MACRO	$$STST STNG,MAXLEN
	.NCHR	$$TEMP,<STNG>
	$$TMP0=MAXLEN-$$TEMP
	.IF	LT $$TMP0
	  .ERROR  ;STRING TOO LONG
	  .BLKB	MAXLEN+2
	.IFF
	  $$SET	$$TEMP
	  .ASCII  /STNG/
	  .BLKB  $$TMP0
	.ENDC
	.ENDM
	.MACRO	$$SYS N1,N2
	$$GEN1	,SWSTK$,N1'N2'$
	.ENDM
	.MACRO	.BIN	AA,BB
	.EVEN
	.IF DF	M$$MGE
	.BLKW	2
	.IFF
	.BLKW	1
	.ENDC
	.ENDM	.BIN
	.MACRO	.CNB
	.BLKB	1
	.ENDM	.CNB
	.MACRO	.CNW
	.EVEN
	.BLKW	1
	.ENDM	.CNW
	.MACRO	.CORE	AA,BB
	.EVEN
	.IF DF	M$$MGE
	.BLKW	2
	.IFF
	.BLKW	1
	.ENDC
	.ENDM	.CORE
	.MACRO	.CSR
	.EVEN
	.BLKW	1
	.ENDM	.CSR
	.MACRO	.DVCHA
	.EVEN
	.BLKW	2
	.ENDM	.DVCHA
	.MACRO	.INT	AA
	.EVEN
	.IF DF	M$$MGE
	.BLKW	7
	.IFF
	.BLKW	2
	.ENDC
	.ENDM	.INT
	.MACRO	.INT1	AA
	.EVEN
	.IF DF	M$$MGE
	.BLKW	7
	.IFF
	.BLKW	2
	.ENDC
	.ENDM	.INT1
	.MACRO	.INT2	AA
	.EVEN
	.IF DF	M$$MGE
	.BLKW	7
	.IFF
	.BLKW	2
	.ENDC
	.ENDM	.INT2
	.MACRO	.INT3	AA
	.EVEN
	.IF DF	M$$MGE
	.BLKW	7
	.IFF
	.BLKW	2
	.ENDC
	.ENDM	.INT3
	.MACRO	.LFLHD
	.EVEN
	.BLKW	2
	.ENDM	.LFLHD
	.MACRO	.LIBR	AA,BB
	.EVEN
	.IF DF	M$$MGE
	.BLKW	2
	.IFF
	.BLKW	1
	.ENDC
	.ENDM	.LIBR
	.MACRO	.LINKS
	.EVEN
	.BLKW	1
	.ENDM	.LINKS
	.MACRO	.LSTHD
	.EVEN
	.BLKW	2
	.ENDM	.LSTHD
	.MACRO	.LTAB
	.EVEN
	.BLKW	1
	.ENDM	.LTAB
	.MACRO	.MPLHD
	.EVEN
	.BLKW	2
	.ENDM	.MPLHD
	.MACRO	.POOL	AA
	.EVEN
	.BLKW	1
	.ENDM	.POOL
	.MACRO	.PRI
	.EVEN
	.BLKW	1
	.ENDM	.PRI
	.MACRO	.SCOM	AA
	.EVEN
	.BLKW	1
	.ENDM	.SCOM
	.MACRO	.SECSR
	.EVEN
	.BLKW	1
	.ENDM	.SECSR
	.MACRO	.SLNB
	.BLKB	1
	.ENDM	.SLNB
	.MACRO	.SLNW
	.EVEN
	.BLKW	1
	.ENDM	.SLNW
	.MACRO	.STNB
	.BLKB	1
	.ENDM	.STNB
	.MACRO	.STNW
	.EVEN
	.BLKW	1
	.ENDM	.STNW
	.MACRO	.UNB
	.BLKB	1
	.ENDM	.UNB
	.MACRO	.UNW
	.EVEN
	.BLKW	1
	.ENDM	.UNW
	.MACRO	.VFY	AA
	.ENDM	.VFY