Google
 

Trailing-Edge - PDP-10 Archives - BB-P363B-SM_1985 - mcb/nml/netdir.r16
There are no other files named netdir.r16 in the archive.
!
!                    COPYRIGHT (c) 1980, 1981, 1982
!                    DIGITAL EQUIPMENT CORPORATION
!                        Maynard, Massachusetts
!
!     This software is furnished under a license and may  be  used
!     and copied only in accordance with the terms of such license
!     and with the inclusion of the above copyright notice.   This
!     software  or any other copies thereof may not be provided or
!     otherwise made available to any other person.  No  title  to
!     and ownership of the software is hereby transferred.
!
!     The information  in  this  software  is  subject  to  change
!     without  notice  and should not be construed as a commitment
!     by DIGITAL EQUIPMENT CORPORATION.
!
!     DIGITAL assumes no responsibility for the use or reliability
!     of  its  software  on  equipment  which  is  not supplied by
!     DIGITAL.
!
!

!++
! FACILITY: BLISS System Interfaces
!
! ABSTRACT:
!
! This file contains DECnet-11/Phase 2  defintions for use in programs to
! be executed under RSX-11M. Refer to DOC:BLILIB.DOC for documentation on
! the use of these definitions and macros.
!
!
!
! ENVIRONMENT: To be used in a BLISS-16 program.
!
! AUTHOR: H. R. Siegler	CREATION DATE:  8-April-79
!
! MODIFIED BY:
!
!--
!
!	STANDARD QIO DIRECTIVE IDENTIFICATION CODES
!

literal
	QIO$$_  =  1 + 12 ^8,
	QIOW$$_ =  3 + 12 ^8;

!
!	QIO DPB OFFSET DESCRIPTORS
!

field	Q$IOF = SET
	QIO$DC = [0,0,16,0],		! Directive Identification Code
	QIO$FN = [1,0,16,0],		! I/O function code.
	QIO$LU = [2,0,16,0],		! Logical unit number.
	QIO$EF = [3,8,8,0],		! Event Flag number.
	QIO$PR = [3,0,8,0],		! Priority (defaulted to null argument).
	QIO$SB = [4,0,16,0],		! Address of I/O status block.
	QIO$AE = [5,0,16,0],		! Address of I/O done AST routine.
	QIO$P0 = [6,0,16,0],		! Parameter list word 0.
	QIO$P1 = [7,0,16,0],		! Parameter list word 1.
	QIO$P2 = [8,0,16,0],		! Parameter list word 2.
	QIO$P3 = [9,0,16,0],		! Parameter list word 3.
	QIO$P4 = [10,0,16,0],		! Parameter list word 4.
	QIO$P5 = [11,0,16,0] tes;	! Parameter list word 5.

!
!	DECNET FUNCTION CODES
!

literal
	ABT$_	= %o'016010',
	ACC$_	= %o'015410',
	CLS$_	= %o'016410',
	CON$_	= %o'015400',
	DSC$_	= %o'016000',
	GLN$_	= %o'016670',
	GND0$_	= %o'016630',	! GND no flag Form
	GND1$_	= %o'016640',	! GND NT$LON Form
	GND2$_	= %o'016650',	! GND NT$TYP Form
	OPN$_	= %o'016400',
	REC$_	= %o'015000',
	REJ$_	= %o'016020',
	SND$_	= %o'014400',
	SPA$_	= %o'016420',
	XMI$_	= %o'014410';

!
! DEFINITIONS FROM NSSYM$
!

literal
	IE$NDA	= %o'177662' and %o'377',
	IE$NNT	= %o'177660' and %o'377',
	IE$NRJ	= %o'177666' and %o'377',
	IE$URJ	= %o'177667' and %o'377',
	IS$DAO	= %o'000002',
	NE$ABO	= %o'000046',
	NE$ABT	= %o'000011',
	NE$ACC	= %o'000042',
	NE$ACT	= %o'000044',
	NE$CDI	= %o'000052',
	NE$COM	= %o'000047',
	NE$FCF	= %o'000050',
	NE$FMT	= %o'000005',
	NE$GEN	= %o'000007',
	NE$ILS	= %o'000043',
	NE$IMG	= %o'000053',
	NE$MLB	= %o'000006',
	NE$NOD	= %o'000002',
	NE$NSD	= %o'000003',
	NE$RES	= %o'000001',
	NE$SSR	= %o'000000',
	NE$SSS	= %o'000045',
	NE$STA	= %o'000051',
	NE$TCN	= %o'000040',
	NE$TCO	= %o'000041',
	NE$TPA	= %o'000010',
	NE$UOB	= %o'000004',
	NO$DTR	= %o'000077',
	NO$FAL	= %o'000021',
	NO$FA1	= %o'000001',
	NO$NCU	= %o'000023',
	NO$RTL	= %o'000022',
	NO$TAS	= %o'000000',
	NO$TCL	= %o'000017',
	NO$TC1	= %o'000005',
	NO$TLK	= %o'000020',
	NR$IFC	= %o'000030',
	NT$ABO	= %o'000005',
	NT$ABT	= %o'000004',
	NT$CON	= %o'000001',
	NT$DSC	= %o'000003',
	NT$INT	= %o'000002',
	NT$MOP	= %o'000010';

!
! DEFINITIONS FROM CNBDF$ and CRBDF$
!

literal ! Byte Offset Definitions

	N$CAC	= %o'000120',
	N$CACC	= %o'000116',
	N$CBL	= %o'000142',
	N$CDA	= %o'000142',
	N$CDAC	= %o'000140',
	N$CID	= %o'000064',
	N$CIDC	= %o'000062',
	N$CPS	= %o'000106',
	N$CPSC	= %o'000104',
	N$CTL	= %o'000000',
	N$DDE	= %o'000010',
	N$DDEC	= %o'000006',
	N$DFM	= %o'000004',
	N$DGP	= %o'000006',
	N$DNM	= %o'000014',
	N$DNMC	= %o'000012',
	N$DOT	= %o'000005',
	N$DUS	= %o'000010',
	N$RAC	= %o'000070',
	N$RACC	= %o'000066',
	N$RDE	= %o'000012',
	N$RDEC	= %o'000010',
	N$RFM	= %o'000006',
	N$RGP	= %o'000010',
	N$RID	= %o'000034',
	N$RIDC	= %o'000032',
	N$RND	= %o'000000',
	N$RNM	= %o'000016',
	N$RNMC	= %o'000014',
	N$ROT	= %o'000007',
	N$RPS	= %o'000056',
	N$RPSC	= %o'000054',
	N$RQL	= %o'000110',
	N$RUS	= %o'000012',
	N$SDE	= %o'000042',
	N$SDEC	= %o'000040',
	N$SEGZ	= %o'000002',
	N$SFM	= %o'000036',
	N$SGP	= %o'000040',
	N$SND	= %o'000030',
	N$SNM	= %o'000046',
	N$SNMC	= %o'000044',
	N$SOT	= %o'000037',
	N$SUS	= %o'000042';

literal

	NT$LON 	= 0,
	NT$TYP	= 1;
!
!	SUPPORT MACROS
!

macro	%RSX_EMT(ERR) =
	(linkage RSX = EMT : CLEARSTACK VALUECBIT;
	%if %null(ERR)
	%then not RSX(%o'377',%remaining)
	%else  if RSX(%o'377',%remaining) then ERR %fi ) %;

macro	%DIR$(ADR, ERR) = %RSX_EMT(ERR, ADR) %;

macro	%DEFLT(DEFAULT, ACTUAL) =
	%if %null (ACTUAL) %then DEFAULT
	%else ACTUAL %fi  %;

macro	%PAD_DIRECT(P1,P2,P3,P4,P5,P6) =
	P1+0, P2+0, P3+0, P4+0, P5+0, P6+0 %;

macro	%PAD_REVERSE(P1,P2,P3,P4,P5,P6) =
	P6+0, P5+0, P4+0, P3+0, P2+0, P1+0 %;

macro	%PAD_REV_CON(P1,P2,P3,P4,P5,P6) =
	P6+0, P5+0, P4+0, P3+0,
	%if %null(P2) %then N$RQL, %else P2+0, %fi
	P1+0 %;

macro	%PAD_DIR_CON(P1,P2,P3,P4,P5,P6) =
	P1+0,
	%if %null(P2) %then N$RQL, %else P2+0, %fi
	P3+0, P4+0, P5+0, P6+0 %;

macro	%PROC_CON_PRL(P1,P2,P3,P4,P5,P6) = begin
	%if not %null (P1) %then DPB$$$ [QIO$P0] = P1 + 0; %fi
	%if not %null (P2)
	    %then DPB$$$ [QIO$P1] = P2 + 0;
	    %else DPB$$$ [QIO$P1] = N$RQL; %fi
	%if not %null (P3) %then DPB$$$ [QIO$P2] = P3 + 0; %fi
	%if not %null (P4) %then DPB$$$ [QIO$P3] = P4 + 0; %fi
	%if not %null (P5) %then DPB$$$ [QIO$P4] = P5 + 0; %fi
	%if not %null (P6) %then DPB$$$ [QIO$P5] = P6 + 0; %fi end %;

macro	%PROCESS_PRL(P1,P2,P3,P4,P5,P6) = begin
	%if not %null (P1) %then DPB$$$ [QIO$P0] = P1 + 0; %fi
	%if not %null (P2) %then DPB$$$ [QIO$P1] = P2 + 0; %fi
	%if not %null (P3) %then DPB$$$ [QIO$P2] = P3 + 0; %fi
	%if not %null (P4) %then DPB$$$ [QIO$P3] = P4 + 0; %fi
	%if not %null (P5) %then DPB$$$ [QIO$P4] = P5 + 0; %fi
	%if not %null (P6) %then DPB$$$ [QIO$P5] = P6 + 0; %fi end %;

macro	%PROCESS_CON(DIC,FNC,LABL,LUN,EFN,ISB,AST,PRL,ERR) = begin
	bind DPB$$$ = LABL: block [ DIC ^ -8 ] field (Q$IOF);
	DPB$$$ [QIO$DC] = DIC;
	DPB$$$ [QIO$FN] = FNC;
	DPB$$$ [QIO$PR] = 0;
	%if not %null (LUN) %then DPB$$$ [QIO$LU] = LUN; %fi
	%if not %null (EFN) %then DPB$$$ [QIO$EF] = EFN; %fi
	%if not %null (ISB) %then DPB$$$ [QIO$SB] = ISB; %fi
	%if not %null (AST) %then DPB$$$ [QIO$AE] = AST; %fi
	%if not %null (%remove(PRL)) %then %PROC_CON_PRL ( %remove (PRL)); %fi
	%if not %null (ERR) %then %DIR$ (DPB$$$, ERR)
	%else %DIR$ (DPB$$$); %fi
	end %;

macro	%PROCESS_(DIC,FNC,LABL,LUN,EFN,ISB,AST,PRL,ERR) = begin
	bind DPB$$$ = LABL: block [ DIC ^ -8 ] field (Q$IOF);
	DPB$$$ [QIO$DC] = DIC;
	DPB$$$ [QIO$FN] = FNC;
	DPB$$$ [QIO$PR] = 0;
	%if not %null (LUN) %then DPB$$$ [QIO$LU] = LUN; %fi
	%if not %null (EFN) %then DPB$$$ [QIO$EF] = EFN; %fi
	%if not %null (ISB) %then DPB$$$ [QIO$SB] = ISB; %fi
	%if not %null (AST) %then DPB$$$ [QIO$AE] = AST; %fi
	%if not %null (%remove(PRL)) %then %PROCESS_PRL ( %remove (PRL)); %fi
	%if not %null (ERR) %then %DIR$ (DPB$$$, ERR)
	%else %DIR$ (DPB$$$); %fi
	end %;

macro	%UNPAK_FMT_1(DESCRIPTOR) =
	%if %null (DESCRIPTOR)
	%then ) %errormacro ('Format 1 Descriptor: Remote Task Name Missing')
 	%else
	%if %charcount (DESCRIPTOR) leq 16 %then %charcount (DESCRIPTOR),
	%exactstring (16, %char(0), DESCRIPTOR)
	%else ) %errormacro ('Remote Task Name Exceeded 16 Characters') %fi %fi %;

macro	%UNPAK_FMT_2(GROUP,USER,NAME) =
	%if not %null (GROUP) %then GROUP, 
	%else ) %errormacro ('Format 2 Descriptor: Remote Group Sub-Field missing') %fi
	%if not %null (USER) %then USER, 
	%else ) %errormacro ('Format 2 Descriptor: Remote User Sub-Field missing') %fi
	%if %null (NAME) %then
	%errormacro ) ('Format 2 Descriptor: Remote Program Name missing')
	%else
	%if %charcount (NAME) leq 12 %then %charcount (NAME),
	%exactstring (12, %char(0), NAME)
	%else ) %errormacro ('User Name Exceeded 12 Characters') %fi %fi %;

macro	%UNPAK_PSWD(PSWD) =
	%if %charcount (PSWD) leq 8 %then %charcount (PSWD),
	%exactstring (8,%char(0),PSWD)
	%else ) %errormacro ('Requesting Task Password Field Exceeded 8 Characters') %fi %;
!
!	INTERTASK COMMUNICATIONS MACROS
!

!
!	ABORT A LOGICAL LINK
!

macro	ABT$(LUN,EFN,ISB,AST,PRL) =
	block [QIO$$_ ^ - 8] field (Q$IOF) initial (
	QIO$$_, ABT$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	ABT$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, ABT$_, QIO$$_) %;

macro	ABTW$(LUN,EFN,ISB,AST,PRL) =
	block [QIOW$$_ ^ -8] field (Q$IOF) initial(
	QIOW$$_, ABT$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	ABTW$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, ABT$_, QIOW$$_) %;

macro	ABT$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIO$$_,ABT$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

macro	ABTW$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIOW$$_,ABT$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

!
!	ACCEPT A LOGICAL LINK CONNECTION REQUEST
!

macro	ACC$(LUN,EFN,ISB,AST,PRL) =
	block [QIO$$_ ^ - 8] field (Q$IOF) initial (
	QIO$$_, ACC$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	ACC$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, ACC$_, QIO$$_) %;

macro	ACCW$(LUN,EFN,ISB,AST,PRL) =
	block [QIOW$$_ ^ -8] field (Q$IOF) initial(
	QIOW$$_, ACC$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	ACCW$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, ACC$_, QIOW$$_) %;

macro	ACC$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIO$$_,ACC$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

macro	ACCW$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIOW$$_,ACC$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

!
!	END A TASK'S NETWORK OPERATION
!

macro	CLS$(LUN,EFN,ISB,AST,PRL) =
	block [QIO$$_ ^ - 8] field (Q$IOF) initial (
	QIO$$_, CLS$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	CLS$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, CLS$_, QIO$$_) %;

macro	CLSW$(LUN,EFN,ISB,AST,PRL) =
	block [QIOW$$_ ^ -8] field (Q$IOF) initial(
	QIOW$$_, CLS$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	CLSW$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, CLS$_, QIOW$$_) %;

macro	CLS$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIO$$_,CLS$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

macro	CLSW$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIOW$$_,CLS$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;


!
!	REQUEST A LOGICAL LINK CONNECTION
!

macro	CON$(LUN,EFN,ISB,AST,PRL) =
	block [QIO$$_ ^ - 8] field (Q$IOF) initial (
	QIO$$_, CON$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIR_CON( %remove (PRL))) %;

macro	CON$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REV_CON( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, CON$_, QIO$$_) %;

macro	CONW$(LUN,EFN,ISB,AST,PRL) =
	block [QIOW$$_ ^ -8] field (Q$IOF) initial(
	QIOW$$_, CON$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIR_CON( %remove (PRL))) %;

macro	CONW$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REV_CON( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, CON$_, QIOW$$_) %;

macro	CON$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_CON (QIO$$_,CON$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

macro	CONW$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_CON (QIOW$$_,CON$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;


!
!	BUILD THE CONNECT BLOCK FOR THE CONx - CALL
!

macro	CONB$$(NODE,OBJ,FMT,DESCRIP,RQID,PSWD,ACCNO) =

	vector [ N$RQL, byte ] initial (

	! Destination Descriptor (Node Name)

	%if %charcount (NODE) gtr 6
	%then  ) %errormacro ('Node Name Exceeded 6 Characters')
	%else
	    %if not %null (NODE)
	    %then  %exactstring (6, %char(0), NODE),
	    %else rep 3 of (0), %fi %fi

	! Object Type and Format Descriptor (Byte Values)

	%DEFLT (0,OBJ) ^8 + %DEFLT (0,FMT),

	! Descriptor Field for Format 0 (Not Used)

	%if %null (FMT) or %char (FMT) eql 0 %then rep 9 of (0), %else

	! Descriptor Field for Format 1

	%if %char (FMT) eql 1 %then %UNPAK_FMT_1( %remove (DESCRIP)), %else

	! Descriptor Field for Format 2

	%if %char(FMT) eql 2 %then %UNPAK_FMT_2( %remove (DESCRIP)),
	%else ) %errormacro ('Illegal Format Descriptor in Connect Block')
	%fi %fi %fi

	! Access Control Fields

	%if %null (RQID) %then rep 9 of (0), %else
	%if %charcount (RQID) leq 16
	%then %charcount (RQID), %exactstring (16, %char(0), RQID),
	%else ) %errormacro ('Requesting User I.D. Field Exceeded 16 Characters') %fi %fi

	%if %null (PSWD)
	%then rep 5 of (0),
	%else %UNPAK_PSWD( %remove (PSWD)), %fi

	%if %null (ACCNO) %then rep 9 of (0)) %else
	%if %charcount (ACCNO) leq 16
	%then %charcount (ACCNO), %exactstring (16, %char(0), ACCNO))
	%else ) %errormacro ('Accounting Information Field Exceeded 16 Characters') %fi %fi
	%;

!
!	DISCONNECT A LOGICAL LINK
!

macro	DSC$(LUN,EFN,ISB,AST,PRL) =
	block [QIO$$_ ^ - 8] field (Q$IOF) initial (
	QIO$$_, DSC$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	DSC$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, DSC$_, QIO$$_) %;

macro	DSCW$(LUN,EFN,ISB,AST,PRL) =
	block [QIOW$$_ ^ -8] field (Q$IOF) initial(
	QIOW$$_, DSC$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	DSCW$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, DSC$_, QIOW$$_) %;

macro	DSC$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIO$$_,DSC$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

macro	DSCW$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIOW$$_,DSC$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;


!
!	GET LOCAL NODE INFORMATION
!

macro	GLN$(LUN,EFN,ISB,AST,PRL) =
	block [QIO$$_ ^ - 8] field (Q$IOF) initial (
	QIO$$_, GLN$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	GLN$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, GLN$_, QIO$$_) %;

macro	GLNW$(LUN,EFN,ISB,AST,PRL) =
	block [QIOW$$_ ^ -8] field (Q$IOF) initial(
	QIOW$$_, GLN$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	GLNW$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, GLN$_, QIOW$$_) %;

macro	GLN$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIO$$_,GLN$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

macro	GLNW$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIOW$$_,GLN$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

!
!	GET NETWORK DATA
!

macro	GND$(LUN,EFN,ISB,AST,PRL,FLG) =
	block [QIO$$_ ^ - 8] field (Q$IOF) initial (
	QIO$$_,
	%if %null (FLG)
	%then GND0$_,
	%else
	    %if (FLG) eql NT$LON
	    %then GND1$_,
	    %else
		%if (FLG) eql NT$TYP
		%then GND2$_,
		%else , %errormacro ('Invalid FLAG Parameter for GND Macro')
		%fi %fi %fi
	LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	GND$S(LUN,EFN,ISB,AST,PRL,FLG,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN,
	%if %null (FLG)
	%then GND0$_,
	%else
	    %if (FLG) eql NT$LON
	    %then GND1$_,
	    %else
		%if (FLG) eql NT$TYP
		%then GND2$_,
		%else , %errormacro ('Invalid FLAG Parameter for GND Macro')
		%fi %fi %fi
	QIO$$_) %;

macro	GNDW$(LUN,EFN,ISB,AST,PRL,FLG) =
	block [QIOW$$_ ^ -8] field (Q$IOF) initial(
	QIOW$$_,
	%if %null (FLG)
	%then GND0$_,
	%else
	    %if (FLG) eql NT$LON
	    %then GND1$_,
	    %else
		%if (FLG) eql NT$TYP
		%then GND2$_,
		%else , %errormacro ('Invalid FLAG Parameter for GND Macro')
		%fi %fi %fi
	LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	GNDW$S(LUN,EFN,ISB,AST,PRL,FLG,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN,
	%if %null (FLG)
	%then GND0$_,
	%else
	    %if (FLG) eql NT$LON
	    %then GND1$_,
	    %else
		%if (FLG) eql NT$TYP
		%then GND2$_,
		%else , %errormacro ('Invalid FLAG Parameter for GND Macro')
		%fi %fi %fi
	QIOW$$_) %;

macro	GND$E(LABL,LUN,EFN,ISB,AST,PRL,FLG,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIO$$_,
			%if %null (FLG)
			%then GND0$_,
			%else
			    %if (FLG) eql NT$LON
			    %then GND1$_,
			    %else
				%if (FLG) eql NT$TYP
				%then GND2$_,
				%else , %errormacro ('Invalid FLAG Parameter for GND Macro')
				%fi %fi %fi
			LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

macro	GNDW$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIOW$$_,
			%if %null (FLG)
			%then GND0$_,
			%else
			    %if (FLG) eql NT$LON
			    %then GND1$_,
			    %else
				%if (FLG) eql NT$TYP
				%then GND2$_,
				%else , %errormacro ('Invalid FLAG Parameter for GND Macro')
				%fi %fi %fi
			LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;


!
!	ACCESS THE NETWORK
!

macro	OPN$(LUN,EFN,ISB,AST,PRL) =
	block [QIO$$_ ^ - 8] field (Q$IOF) initial (
	QIO$$_, OPN$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	OPN$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, OPN$_, QIO$$_) %;

macro	OPNW$(LUN,EFN,ISB,AST,PRL) =
	block [QIOW$$_ ^ -8] field (Q$IOF) initial(
	QIOW$$_, OPN$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	OPNW$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, OPN$_, QIOW$$_) %;

macro	OPN$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIO$$_,OPN$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

macro	OPNW$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIOW$$_,OPN$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

!
!	RECEIVE DATA OVER A LOGICAL LINK
!

macro	REC$(LUN,EFN,ISB,AST,PRL) =
	block [QIO$$_ ^ - 8] field (Q$IOF) initial (
	QIO$$_, REC$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	REC$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, REC$_, QIO$$_) %;

macro	RECW$(LUN,EFN,ISB,AST,PRL) =
	block [QIOW$$_ ^ -8] field (Q$IOF) initial(
	QIOW$$_, REC$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	RECW$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, REC$_, QIOW$$_) %;

macro	REC$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIO$$_,REC$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

macro	RECW$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIOW$$_,REC$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;


!
!	REJECT A LOGICAL LINK REQUEST
!

macro	REJ$(LUN,EFN,ISB,AST,PRL) =
	block [QIO$$_ ^ - 8] field (Q$IOF) initial (
	QIO$$_, REJ$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	REJ$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, REJ$_, QIO$$_) %;

macro	REJW$(LUN,EFN,ISB,AST,PRL) =
	block [QIOW$$_ ^ -8] field (Q$IOF) initial(
	QIOW$$_, REJ$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	REJW$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, REJ$_, QIOW$$_) %;

macro	REJ$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIO$$_,REJ$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

macro	REJW$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIOW$$_,REJ$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

!
!	SEND DATA OVER A LOGICAL LINK
!

macro	SND$(LUN,EFN,ISB,AST,PRL) =
	block [QIO$$_ ^ - 8] field (Q$IOF) initial (
	QIO$$_, SND$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	SND$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, SND$_, QIO$$_) %;

macro	SNDW$(LUN,EFN,ISB,AST,PRL) =
	block [QIOW$$_ ^ -8] field (Q$IOF) initial(
	QIOW$$_, SND$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	SNDW$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, SND$_, QIOW$$_) %;

macro	SND$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIO$$_,SND$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

macro	SNDW$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIOW$$_,SND$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;


!
!	SPECIFY USER AST ROUTINE
!

macro	SPA$(LUN,EFN,ISB,AST,PRL) =
	block [QIO$$_ ^ - 8] field (Q$IOF) initial (
	QIO$$_, SPA$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	SPA$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, SPA$_, QIO$$_) %;

macro	SPAW$(LUN,EFN,ISB,AST,PRL) =
	block [QIOW$$_ ^ -8] field (Q$IOF) initial(
	QIOW$$_, SPA$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	SPAW$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, SPA$_, QIOW$$_) %;

macro	SPA$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIO$$_,SPA$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

macro	SPAW$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIOW$$_,SPA$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

!
!	SEND AN INTERUPT MESSAGE OVER A LOGICAL LINK
!

macro	XMI$(LUN,EFN,ISB,AST,PRL) =
	block [QIO$$_ ^ - 8] field (Q$IOF) initial (
	QIO$$_, XMI$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	XMI$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, XMI$_, QIO$$_) %;

macro	XMIW$(LUN,EFN,ISB,AST,PRL) =
	block [QIOW$$_ ^ -8] field (Q$IOF) initial(
	QIOW$$_, XMI$_, LUN, 0 + %DEFLT(0,EFN), %DEFLT(0,ISB), %DEFLT(0,AST),
	%PAD_DIRECT( %remove (PRL))) %;

macro	XMIW$S(LUN,EFN,ISB,AST,PRL,ERR) =
	%RSX_EMT (ERR, %PAD_REVERSE( %remove (PRL)), %DEFLT(0,AST), %DEFLT(0,ISB),
	0 + %DEFLT(0,EFN), LUN, XMI$_, QIOW$$_) %;

macro	XMI$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIO$$_,XMI$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

macro	XMIW$E(LABL,LUN,EFN,ISB,AST,PRL,ERR) =
	%if %declared (LABL)
	%then %PROCESS_ (QIOW$$_,XMI$_,LABL,LUN,EFN,ISB,AST,PRL,ERR) 
	%else  %errormacro ('DPB Name Incorrect or DPB Missing') %fi %;

! [ END OF NETLIB.R16 ]