Trailing-Edge
-
PDP-10 Archives
-
TOPS-20_V6.1_DECnetSrc_7-23-85
-
mcb/v3p0/rsx11m.r16
There are 2 other files named rsx11m.r16 in the archive. Click here to see a list.
!%title 'Bliss-16 System Interface file for RSX-11M'
!%sbttl 'RSX11M - Copyright Notice and Revision History'
!
! COPYRIGHT (c) 1977, 1978, 1979, 1980 BY
! DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
!
! 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 definitions for use in programs
! to be executed under RSX-11M. For documentation on the use of these
! definitions see the RSX-11M Executive Reference Manual.
!
!
! ENVIRONMENT: To be used in a BLISS-16 program.
!
! AUTHOR: B. Dawson, CREATION DATE: 13-Jun-78
!
! MODIFIED BY:
!
! 01 B. Dawson 12-Dec-78 The RSX_EMT macro was producing the wrong code
! for testing the carry bit.
!
! 02 B. Dawson 25-Mar-79 There were uses of GMRKT$_ (an undefined symbol),
! in MRKT$. All occurances of GMRKT were changed to MRKT.
!
! 03 H. Siegler April-79 Incorporated all symbols and definitions for
! SPCIO$, DRERR$, FILIO$, IOERR$, and TTSYM$. All values are in octal
! notation.
!
! Corrected QIO$ and QIOW$ macros to insert the 6 <PRL> parameters
! into the DPB in the proper order.
!
! Revised the RSX_EMT macro for BLISS16 for code optimization and
! conformance to RSX-11M Directive Usage.
!
! Includes Macros WDBBK$, RDBBK$, RDBDF$, and WDBDF$.
!
! Redefined Parameters Buffer Offsets for Directives GTIM$,GREG$,GTSK$,
! GLUN$, and GPRT$ from field to macro.
!
! 04 H. Siegler August 29, 1979
! Included TSK argument to RCVD directives
!
! Converted all DRERR$ values to full word to conform with contents of
! $DSW.
!
! Included the CINT$ (connect to interupt vector) Directive.
!
! 05 W. Clark 09-Nov-79
! Renamed the Utility Macros to avoid symbol naming conflicts
! with user code.
!
! Changed GLUN$ info buffer definitions from macros to fields.
! Added GLUN$INFO definition for this information buffer.
!
! Added $QIO_STATUS definition for the QIO Status Block.
!
! Corrected the following macro definitions: ABRT$S, ALTP$S, CSRQ$S,
! GPRT$S, RCVD$S, RQST$S, RSUM$S, RUN$S, SDAT$S, SREF$S
!
! Reformatted nearly all macro definitions.
!
! 06 G. Hetrick 14-Nov-79
! Eliminated an inconsistency between RCVD$S and SDAT$S in regard to the
! task name parameter. Both macros now expect the task name to already
! be in RAD50 format.
!
! 07 G. Hetrick 21-Nov-79
! Corrected the spelling of SVDB_ and SVTK_.
!
! 08 T. Van Court 30-Nov-79
! Corrections to in-line forms of executive calls that deal with tasks,
! and renamed local names in those macros to avoid conflicts with user
! names.
!
! Make $RSX$RAD50_2 work as a parameter to a linkage
!
! 09 Mike Cogan 13-Feb-80
! formatting changes
!
! 10 Mike Cogan 15-Feb-80
! moved error and function codes to FCS11.R16 (see revision 12)
!
! 11 Mike Cogan 15-Feb-80
! added defn.s for 11M V3.2
!
! 12 Don Frank 28-Feb-80
! Copied error and fuction codes to new require file RSXEFC.R16 from
! FCS11.R16 (see 10), System interface files (RSX11M.R16 and IAS.R16)
! now REQUIRE RSXEFC.
!
! 13 Dan Brown 23-Oct-81
! Fixed problem with SPWN$S directive
!--
!%sbttl 'RSX11M - Utility macros for easy definition'
MACRO
$rsx$rad50_2( nam ) =
%RAD50_11 %EXACTSTRING(3, %C' ', nam),
$rsx$second_3(%EXPLODE(%EXACTSTRING(6, %C' ', nam))) %,
$rsx$second_3(x1,x2,x3,a,b,c) =
%RAD50_11 %STRING(a,b,c) %,
$rsx$bind( name, arg ) =
%IF %NULL(arg)
%THEN
LITERAL %NAME( name, '0' ) = 0,
%NAME( name, '1' ) = 0;
%ELSE
BIND %NAME( name, '0' ) = .(arg),
%NAME( name, '1' ) = .((arg)+2);
%FI %,
$rsx$emt( err ) = ! Use this form with BLISS16
BEGIN
LINKAGE RSX = EMT : CLEARSTACK VALUECBIT;
%IF %NULL(err)
%THEN
NOT RSX(%O'377',%REMAINING)
%ELSE
IF RSX(%O'377',%REMAINING) THEN err
%FI
END %,
! $rsx$emt( err ) = ! Obsolete form previously used with BLS16C
! (LINKAGE RSX = EMT : CLEARSTACK;
! builtin ROT;
! %IF %NULL(err)
! %THEN IF NOT ROT(RSX(%O'377',%REMAINING),1) THEN 1 ELSE 0
! %ELSE IF ROT(RSX(%O'377',%REMAINING),1) THEN err ELSE 0 %FI ) %,
$rsx$default( default, actual ) =
%IF %NULL(actual) %THEN default %ELSE actual %FI %,
! Zero pad arguments for DPB Structure
$rsx$pad6( p1, p2, p3, p4, p5, p6 ) =
p1+0, p2+0, p3+0, p4+0, p5+0, p6+0 %,
! Zero pad 6 arguments in reverse order for Stack Form
$rsx$pad_6( p1, p2, p3, p4, p5, p6 ) =
p6+0, p5+0, p4+0, p3+0, p2+0, p1+0 %,
$RSX_TASK_NAME( nam ) =
UPLIT( %RAD50_11 nam ) %;
!%sbttl 'RSX11M - DIRECTIVE CODES (DIC)'
!
! Format:
! n, c , l
! where n - RSX Executive function name
! c - predefined directive code
! l - number of words in DPB
! the first word of the DPB is then formed by
! n$_ = c + l^8
!
macro $rsx$dics [n,c,l] = %name(n,'$_') = c + l^8 %;
LITERAL $rsx$dics (
ABRT, 83, 3,
ALTP, 9, 4,
ALUN, 7, 4,
ASTX,115, 1,
ATRG, 57, 2,
CINT,129, 7,
CLEF, 31, 2,
CMKT, 27, 1, ! (there is also a 3 word version)
CNCT,146, 3,
CRAW,117, 2,
CRGF,157, 2,
CRRG, 55, 2,
CSRQ, 25, 3,
DECL, 35, 1,
DSAR, 99, 1,
DSCP, 95, 1,
DTRG, 59, 2,
ELAW,119, 2,
ELGF,159, 2,
ENAR,101, 1,
ENCP, 97, 1,
EXIF, 53, 2,
EXIT, 51, 1,
EXST, 29, 2,
EXTK, 89, 3,
GLUN, 5, 3,
GMCR,127,41,
GMCX,113, 2,
GPRT, 65, 4,
GREG, 65, 4,
GSSW,125, 1,
GTIM, 61, 2,
GTSK, 63, 2,
IHAR, 99, 1,
MAP ,121, 2,
MRKT, 23, 5,
QIO , 1,12,
QIOW, 3,12,
RCST,139, 4,
RCVD, 75, 4,
RCVX, 77, 4,
RDAF, 39, 2,
RDXF, 39, 3,
RQST, 11, 7,
RREF, 81, 2,
RSUM, 47, 3,
RUN , 17,11,
SDAT, 71, 5,
SETF, 33, 2,
SFPA,111, 2,
SPND, 45, 1,
SPRA,109, 2,
SPWN, 11,14,
SRDA,107, 2,
SREF, 69, 5,
SRRA, 21, 2,
STLO,137, 3,
STOP,131, 1,
STSE,135, 2,
SVDB,103, 3,
SVTK,105, 3,
UMAP,123, 2,
USTP,133, 3,
WSIG, 49, 1,
WTLO, 43, 3,
WTSE, 41, 2
) ;
undeclare %quote $rsx$dics ;
!%sbttl 'RSX11M - DIRECTIVE LOCAL FIELD DEFINITIONS'
!
! Format:
! "name"$F = SET ... TES
!
! where name - RSX Executive function name
! ... - predefined local symbols
!
FIELD
ABRT$F = set
A$BTTN = [1,0,16,0] tes, ! Task name.
ALTP$F = set
A$LTTN = [1,0,16,0], ! Task name.
A$LTPR = [3,0,16,0] tes, ! Priority.
ALUN$F = set
A$LULU = [1,0,16,0], ! Logical Unit number.
A$LUNA = [2,0,16,0], ! Physical device name.
A$LUNU = [3,0,16,0] tes, ! Physical device unit number.
ATRG$F = set
A$TRBA = [1,0,16,0] tes, ! Region def. block address.
CINT$F = set
C$INVE = [1,0,16,0], ! Vector Address
C$INBA = [2,0,16,0], ! Base Address
C$INIS = [3,0,16,0], ! ISR Address
C$INDI = [4,0,16,0], ! Ena/Dis Interupt Routine Address
C$INPS = [5,0,16,0], ! Priority - word aligned - note macro-11 expansion. H.Siegler
C$INAS = [6,0,16,0] tes, ! AST Address
CLEF$F = set
C$LEEF = [1,0,16,0] tes, ! Event Flag number.
CMKT$F = set
C$MKEF = [0,0,16,0], ! Event flag number
C$MKAE = [1,0,16,0] tes, ! Mark time request AST routine address
CNCT$F = set
C$NCTN = [1,0,16,0], ! Task name
C$NCEF = [3,0,16,0], ! Event flag
C$NCEA = [4,0,16,0], ! AST routine address
C$NCES = [5,0,16,0] tes, ! Exit status block address
CRAW$F = set
C$RABA = [1,0,16,0] tes, ! Window def. block address.
CRGF$F = set
C$RGRP = [1,0,16,0] tes, ! Group number
CRRG$F = set
C$RRBA = [1,0,16,0] tes, ! Region def. block address.
CSRQ$F = set
C$SRTN = [1,0,16,0] tes, ! Target Task name.
DTRG$F = set
D$TRBA = [1,0,16,0] tes, ! Region def. block address.
ELAW$F = set
E$LABA = [1,0,16,0] tes, ! Window def. block address.
ELGF$F = set
E$LGRP = [1,0,16,0] tes, ! Group number
EXIF$F = set
E$XFEF = [1,0,16,0] tes, ! Event flag number.
EXST$F = set
E$XSTS = [1,0,16,0] tes, ! Value of status to be returned
EXTK$F = set
E$XTIN = [1,0,16,0] tes, ! Extend increment.
GLUN$F = set
G$LULU = [1,0,16,0], ! Logical Unit number.
G$LUBA = [2,0,16,0] tes, ! Buffer address.
GMCR$F = set
G$MCRB = [1,0,16,0] tes, ! MCR Line Buffer.
GMCX$F = set
G$MCVA = [1,0,16,0] tes, ! Vector address.
GPRT$F = set
G$PRPN = [1,0,16,0], ! Partition name.
G$PRBA = [3,0,16,0] tes, ! Buffer address.
GREG$F = set
G$RGID = [2,0,16,0], ! Region ID.
G$RGBA = [3,0,16,0] tes, ! Buffer address.
GTIM$F = set
G$TIBA = [1,0,16,0] tes, ! Buffer address.
GTSK$F = set
G$TSBA = [1,0,16,0] tes, ! Buffer address.
MAP$F = set
M$APBA = [1,0,16,0] tes, ! Window def. Block address.
MRKT$F = set
M$KTEF = [1,0,16,0], ! Event Flag number.
M$KTMG = [2,0,16,0], ! Time magnitude.
M$KTUN = [3,0,16,0], ! Time Unit.
M$KTAE = [4,0,16,0] tes, ! AST Entry point address.
QIO$F = set
Q$IOFN = [1,0,16,0], ! I/O function code.
Q$IOLU = [2,0,16,0], ! Logical unit number.
Q$IOEF = [3,8,8,0], ! Event Flag number.
Q$IOPR = [3,0,8,0], ! Priority.
Q$IOSB = [4,0,16,0], ! Address of I/O status block.
Q$IOAE = [5,0,16,0], ! Address of I/O done AST routine.
Q$IOPL = [6,0,16,0] tes, ! Parameter list.
! QIOW$F = QIO$F,
RCST$F = set
R$CSTN = [1,0,16,0], ! Task name
R$CSBF = [3,0,16,0] tes, ! Buffer address
RCVD$F = set
R$VDTN = [1,0,16,0], ! Sender Task Name.
R$VDBA = [3,0,16,0] tes, ! Buffer address.
RCVX$F = set
R$VXTN = [1,0,16,0], ! Sender Task Name.
R$VXBA = [3,0,16,0] tes, ! Buffer address.
RDAF$F = set
R$DABA = [1,0,16,0] tes, ! Buffer address.
! RDXF$F = RDAF$F,
RQST$F = set
R$QSTN = [1,0,16,0], ! Task name.
R$QSPN = [3,0,16,0], ! Partition name.
R$QSPR = [5,0,16,0], ! Priority.
R$QSGC = [6,8,8,0], ! UIC Group.
R$QSPC = [6,0,8,0] tes, ! UIC Member.
RREF$F = set
R$REBA = [1,0,16,0] tes, ! Window def. Block address.
RSUM$F = set
R$SUTN = [1,0,16,0] tes, ! Task name.
RUN$F = set
R$UNTN = [1,0,16,0], ! Task name.
R$UNPN = [3,0,16,0], ! Partition name.
R$UNPR = [5,0,16,0], ! Priority.
R$UNGC = [6,8,8,0], ! UIC Group code.
R$UNPC = [6,0,8,0], ! UIC Member code.
R$UNSM = [7,0,16,0], ! Schedule magnitude.
R$UNSU = [8,0,16,0], ! Schedule unit.
R$UNRM = [9,0,16,0], ! Reschedule magnitude.
R$UNRU = [10,0,16,0] tes, ! Reschedule unit.
SDAT$F = set
S$DATN = [1,0,16,0], ! Task name.
S$DABA = [3,0,16,0], ! Buffer address.
S$DAEF = [4,0,16,0] tes, ! Event Flag number.
SETF$F = set
S$ETEF = [1,0,16,0] tes, ! Event Flag number.
SFPA$F = set
S$FPAE = [1,0,16,0] tes, ! AST Entry address.
SPRA$F = set
S$PRAE = [1,0,16,0] tes, ! AST Entry address.
SPWN$F = set
S$PWTN = [1,0,16,0], ! Task name
S$PWXX = [3,0,16,0], ! (Reserved)
S$PWUM = [6,0, 8,0], ! User member code
S$PWUG = [6,8, 8,0], ! User group code
S$PWEF = [7,0,16,0], ! Event flag number
S$PWEA = [8,0,16,0], ! Exit AST routine address
S$PWES = [9,0,16,0], ! Exit status block address
S$PWCA =[10,0,16,0], ! Command line address
S$PWCL =[11,0,16,0], ! Command line length
S$PWVT =[12,0,16,0], ! Terminal unit number
S$PWDN =[13,0,16,0] tes, ! Device name
SRDA$F = set
S$DRAE = [1,0,16,0] tes, ! AST Entry address.
SREF$F = set
S$RETN = [1,0,16,0], ! Receiver Task name.
S$REBA = [4,0,16,0], ! Window def. Block address.
S$REEF = [5,0,16,0] tes, ! Event Flag number.
SRRA$F = set
S$RRAE = [1,0,16,0] tes, ! AST Entry address.
STLO$F = set
S$TLGR = [1,0,16,0], ! Group flags
S$TLMS = [2,0,16,0] tes, ! Mask word
STSE$F = set
S$TSEF = [1,0,16,0] tes, ! Local event flag number
SVDB$F = set
S$VDTA = [1,0,16,0], ! Table address.
S$VDTL = [2,0,16,0] tes, ! Table length.
SVTK$F = set
S$VTTA = [1,0,16,0], ! Table address.
S$VTTL = [2,0,16,0] tes, ! Table length.
UMAP$F = set
U$MABA = [1,0,16,0] tes, ! Window def. block address.
USTP$F = set
U$STTN = [1,0,16,0] tes, ! Task name
WTSE$F = set
W$TSEF = [1,0,16,0] tes; ! Event Flag number.
!%sbttl 'RSX11M - REGION DEFINITION BLOCK'
FIELD
RDBDF$ = set ! Region Definition Block Offsets
R$GID = [0,0,16,0], ! Region ID
R$GSIZ = [1,0,16,0], ! Number of 32 word blocks in region
R$GNAM = [2,0,16,0], ! Name of Region
R$GPAR = [4,0,16,0], ! Main partition name
R$GSTS = [6,0,16,0], ! Status word.
R$GPRO = [7,0,16,0] tes; ! Region protection word
literal ! Region Definition Block Status Bit Values
RS$CRR = %o'100000',
RS$UNM = %o'40000',
RS$MDL = %o'200',
RS$NDL = %o'100',
RS$ATT = %o'40',
RS$NEX = %o'20',
RS$DEL = %o'10',
RS$EXT = %o'4',
RS$WRT = %o'2',
RS$RED = %o'1';
MACRO ! Regional Definition Block Create Macro
RDBBK$(siz, nam, par, sts, pro) =
BLOCK[8] FIELD(RDBDF$)
INITIAL(
0,
$rsx$default( 0, siz ),
$rsx$rad50_2( nam ),
$rsx$rad50_2( par ),
$rsx$default( 0, %remove ( sts )),
$rsx$default( 0, pro )) %;
!%sbttl 'RSX11M - WINDOW DEFINITION BLOCK'
FIELD
WDBDF$ = set ! Window Definition Block Offsets
W$NAPR = [0,8,8,0], ! Base APR
W$NID = [0,0,8,0], ! Window ID
W$NBAS = [1,0,16,0], ! Virtual base address
W$NSIZ = [2,0,16,0], ! Number of 32 word blocks in window
W$NRID = [3,0,16,0], ! Region ID
W$NOFF = [4,0,16,0], ! Offset in region (# of 32W blocks)
W$NLEN = [5,0,16,0], ! Length to map (# of 32W blocks)
W$NSTS = [6,0,16,0], ! Window status
W$NSRB = [7,0,16,0] tes; ! Buffer address (# of bytes)
literal ! Window Definition Block Status Bit Values
WS$CRW = %o'100000',
WS$UNW = %o'40000',
WS$ELW = %o'20000',
WS$RRF = %o'10000',
WS$64B = %o'400',
WS$MAP = %o'200',
WS$RCX = %o'100',
WS$DEL = %o'10',
WS$EXT = %o'4',
WS$WRT = %o'2',
WS$RED = %o'1';
MACRO ! Window Definition Block Create Macro
WDBBK$(apr, siz, rid, off, len, sts, srb) =
BLOCK[8] FIELD(WDBDF$)
INITIAL(
$rsx$default( 0, apr ^ 8),
0,
$rsx$default( 0, siz),
$rsx$default( 0, rid),
$rsx$default( 0, off),
$rsx$default( 0, len),
$rsx$default( 0, %remove( sts )),
$rsx$default( 0, srb)) %;
!%sbttl 'RSX11M - GLUN$ INFORMATION'
FIELD
$GL$FIELDS = set ! GLUN$ information buffer
G$LUNA = [0,0,16,0], ! Device name (ASCII)
G$LUNU = [1,0,8,0], ! Device unit number (binary)
G$LUFB = [1,8,8,0], ! Driver flag value
G$LUCW = [2,0,16,0], ! 4 Device Characteristics Words
GL$FLAGS = [2,0,16,0], ! Device characteristics:
GL$UNIT_REC = [2,0,1,0], ! unit record device
GL$CC = [2,1,1,0], ! carriage control device
GL$TERMINAL = [2,2,1,0], ! terminal device
GL$DIRECTORY = [2,3,1,0], ! directory device (e.g., disk, DECtape)
GL$1_DIRECTORY= [2,4,1,0], ! single directory device (e.g., ANSI magtape)
GL$SEQUENTIAL = [2,5,1,0], ! sequential device (e.g., ANSI magtape)
GL$MASSBUS = [2,9,1,0], ! massbus device
GL$USER_DIAG = [2,10,1,0], ! user-mode diagnostics supported
GL$SOFT_LOCK = [2,11,1,0], ! unit software write-locked
GL$PSEUDO = [2,12,1,0], ! pseudo device
GL$COMM_CHAN = [2,13,1,0], ! device mountable as communications channel (e.g, DP11)
GL$FILES_11 = [2,14,1,0], ! device mountable as FILES-11 device (e.g., disk)
GL$MOUNTABLE = [2,15,1,0], ! GL$COMM_CHAN OR GL$FILES_11
GL$BUFF_SIZE = [5,0,16,0] ! default buffer size for device
tes;
MACRO
GLUN$INFO =
BLOCK[6] FIELD($gl$fields) %;
!%sbttl 'RSX11M - MISCELLANEOUS "GET" INFORMATION'
MACRO ! GPRT$ Parameters Buffer Offsets
G$PRPB = 0,0,16,0 %, ! Block number of Base address
G$PRPS = 1,0,16,0 %, ! Number of blocks in Partition
G$PRFW = 2,0,16,0 %; ! Partition flags word
MACRO ! GREG$ Parameters Buffer Offsets
G$RGRB = 0,0,16,0 %, ! Block number of Base address
G$RGRS = 1,0,16,0 %, ! Number of blocks in Region
G$RGFW = 2,0,16,0 %; ! Region flags word.
MACRO ! GTIM$ Parameters Buffer Offsets
G$TIYR = 0,0,16,0 %, ! Year
G$TIMO = 1,0,16,0 %, ! Month
G$TIDA = 2,0,16,0 %, ! Day
G$TIHR = 3,0,16,0 %, ! Hour
G$TIMI = 4,0,16,0 %, ! Minute
G$TISC = 5,0,16,0 %, ! Second
G$TICT = 6,0,16,0 %, ! Clock ticks of second
G$TICP = 7,0,16,0 %; ! Number of ticks per second
MACRO ! GTSK$ Parameters Buffer Offsets
G$TSTN = 0,0,16,0 %, ! Issuing Task's Name
G$TSPN = 2,0,16,0 %, ! Partition name
G$TSRN = 4,0,16,0 %, ! Not in RSX-11M, RSX-11D Compatability
G$TSPR = 6,0,16,0 %, ! Run Priority
G$TSPC = 7,0,8,0 %, ! User UIC Member Code
G$TSGC = 7,8,8,0 %, ! User UIC Group Code
G$TSNL = 8,0,16,0 %, ! Number of LUNS
G$TSMT = 9,0,16,0 %, ! Not in RSX-11M, RSX-11D Compatability
G$TSFW = 10,0,16,0 %, ! Not in RSX-11M, RSX-11D Compatability
G$TSVA = 11,0,16,0 %, ! Address of Task's SST Vector Tables
G$TSVL = 12,0,16,0 %, ! Size of SST Vector Tables in words
G$TSTS = 13,0,16,0 %, ! Task's Window 0 size (in bytes)
G$TSSY = 14,0,16,0 %, ! System on which task is running
G$TSDU = 15,0,16,0 %; ! Protection or log-in UIC
literal ! GTSK$ System-Type Values
RX$IAS = %o'000003',
RX$11D = %o'000000',
RX$11M = %o'000001',
RX$11S = %o'000002',
$$$OST = %o'000004';
!%sbttl 'RSX11M - I/O STATUS BLOCK'
FIELD
$qs$fields = set ! QIO Status Block
QS$ERROR = [0,0,16,0], ! Composite error code:
QS$ERR = [0,0,8,1], ! error code
QS$ERR1 = [0,8,8,1], ! 0 = I/O error, -1 = directive error
QS$IO_COUNT = [1,0,16,0] ! I/O count (bytes)
tes;
MACRO
$QIO_STATUS =
BLOCK[ 2 ] FIELD( $qs$fields ) %;
!%sbttl 'RSX11M - RSX-11M DIRECTIVES'
! The "name"$ form creates a compile-time DPB which can then
! be executed at run-time with the DIR$ macro.
! The "name"$S form creates a run-time DPB on the stack and
! then executes it.
MACRO
ABRT$( tsk ) = ! ABORT TASK
BLOCK[ ABRT$_ ^ -8 ] FIELD( ABRT$F ) INITIAL( ABRT$_, $rsx$rad50_2(tsk) ) %,
ABRT$S( tsk, err ) = ! ABORT TASK
BEGIN
$rsx$bind( $$tsk, tsk )
$rsx$emt( err, $$tsk1, $$tsk0, ABRT$_ )
END %,
ALTP$( tsk, pri ) = ! ALTER PRIORITY
BLOCK[ ALTP$_ ^ -8 ] FIELD( ABRT$F ) INITIAL( ALTP$_, $rsx$rad50_2(tsk), pri ) %,
ALTP$S( tsk, pri, err ) = ! ALTER PRIORITY
BEGIN
$rsx$bind( $$tsk, tsk )
$rsx$emt( err, pri, $$tsk1, $$tsk0, ALTP$_ )
END %,
ALUN$( lun, dev, unt ) = ! ASSIGN LUN
BLOCK[ ALUN$_ ^ -8 ] FIELD( ALUN$F ) INITIAL( ALUN$_, lun, %ASCII dev, unt ) %,
ALUN$S( lun, dev, unt, err ) = ! ASSIGN LUN
$rsx$emt( err, unt, dev, lun, ALUN$_ ) %,
ASTX$S( err ) = ! AST SERVICE EXIT
$rsx$emt( err, ASTX$_ ) %,
ATRG$( rdb ) = ! ATTACH REGION
BLOCK[ ATRG$_ ^ -8 ] FIELD( ATRG$F ) INITIAL( ATRG$_, rdb ) %,
ATRG$S( rdb, err ) = ! ATTACH REGION
$rsx$emt( err, rdb, ATRG$_ ) %,
CINT$( vec, base, isr, edir, pri, ast ) = ! CONNECT TO INTERUPT VECTOR
BLOCK[ CINT$_ ^ -8 ] FIELD( CINT$F )
INITIAL( CINT$_, $rsx$default(0,vec), $rsx$default(0,base), $rsx$default(0,isr), $rsx$default(0,edir),
$rsx$default(0,pri), $rsx$default(0,ast) ) %,
CINT$S( vec, base, isr, edir, pri, ast, err ) = ! CONNECT TO INTERUPT VECTOR
$rsx$emt( err, $rsx$default(0,ast), $rsx$default(0,pri), $rsx$default(0,edir),
$rsx$default(0,isr), $rsx$default(0,base), $rsx$default(0,vec), CINT$_ ) %,
CLEF$( efn ) = ! CLEAR EVENT FLAGS
BLOCK[ CLEF$_ ^ -8 ] FIELD( CLEF$F ) INITIAL( CLEF$_, efn ) %,
CLEF$S( efn, err ) = ! CLEAR EVENT FLAGS
$rsx$emt( err, efn, CLEF$_ ) %,
CMKT$S( err ) = ! CANCEL MARK TIME REQUESTS (all)
$rsx$emt( err, CMKT$_ ) %,
! CMKT$S( efn, ast, err ) = ! CANCEL MARK TIME REQUEST (one)
CNCT$( tname, efn, east, esb ) = ! CONNECT
BLOCK[ CNCT$_ ^ -8 ] FIELD( CNCT$F )
INITIAL( CNCT$_, $rsx$rad50_2(tname), efn, east, esb ) %,
CNCT$S( tname, efn, east, esb, err) = ! CONNECT
BEGIN
$rsx$bind( $$tname, tname )
$rsx$emt( err, esb, east, efn, $$tname1, $$tname0, CNCT$_ )
END %,
CRAW$( wdb ) = ! CREATE ADDRESS WINDOW
BLOCK[ CRAW$_ ^ -8 ] FIELD( CRAW$F ) INITIAL( CRAW$_, wdb ) %,
CRAW$S( wdb, err ) = ! CREATE ADDRESS WINDOW
$rsx$emt( err, wdb, CRAW$_ ) %,
CRGF$( group ) = ! CREATE GROUP GLOBAL EVENT FLAGS
BLOCK[ CRGF$_ ^ -8 ] FIELD( CRGF$F ) INITIAL( CRGF$_, group ) %,
CRGF$S( group, err ) = ! CREATE GROUP GLOBAL EVENT FLAGS
$rsx$emt( err, group, CRGF$_ ) %,
CRRG$( rdb ) = ! CREATE REGION
BLOCK[ CRRG$_ ^ -8 ] FIELD( CRRG$F ) INITIAL( CRRG$_, rdb ) %,
CRRG$S( rdb, err ) = ! CREATE REGION
$rsx$emt( err, rdb, CRRG$_ ) %,
CSRQ$( tsk ) = ! CANCEL TIME BASED INITIATION REQUESTS
BLOCK[ CSRQ$_ ^ -8 ] FIELD( CSRQ$F ) INITIAL( CSRQ$_, $rsx$rad50_2(tsk) ) %,
CSRQ$S( tsk, err ) = ! CANCEL TIME BASED INITIATION REQUESTS
BEGIN
$rsx$bind( $$tsk, tsk )
$rsx$emt( err, $$tsk1, $$tsk0, CSRQ$_ )
END %,
DECL$S( err ) = ! DECLARE SIGNIFICANT EVENT
$rsx$emt( err, DECL$_ ) %,
DIR$( adr, err ) =
! this macro causes execution of the DPB at "adr".
! this would normally have been created by a 'name'$ function call.
$rsx$emt(err,adr) %,
DSAR$S( err ) = ! DISABLE AST RECOGNITION
$rsx$emt( err, DSAR$_ ) %,
DSCP$S( err ) = ! DISABLE CHECKPOINTING
$rsx$emt( err, DSCP$_ ) %,
DTRG$( rdb ) = ! DETACH REGION
BLOCK[ DTRG$_ ^ -8 ] FIELD( DTRG$F ) INITIAL( DTRG$_, rdb ) %,
DTRG$S( rdb, err ) = ! DETACH REGION
$rsx$emt( err, rdb, DTRG$_ ) %,
ELAW$( wdb ) = ! ELIMINATE ADDRESS WINDOW
BLOCK[ ELAW$_ ^ -8 ] FIELD( ELAW$F ) INITIAL( ELAW$_, wdb ) %,
ELAW$S( wdb, err ) = ! ELIMINATE ADDRESS WINDOW
$rsx$emt( err, wdb, ELAW$_ ) %,
ELFG$( group ) = ! ELIMINATE GROUP GLOBAL EVENT FLAGS
BLOCK[ ELFG$_ ^ -8 ] FIELD( ELFG$F ) INITIAL( ELFG$_, group ) %,
ELFG$S( group, err ) = ! ELIMINATE GROUP GLOBAL EVENT FLAGS
$rsx$emt( err, group, ELFG$_ ) %,
ENAR$S( err ) = ! ENABLE AST RECOGNITION
$rsx$emt( err, ENAR$_ ) %,
ENCP$S( err ) = ! ENABLE CHECKPOINTING
$rsx$emt( err, ENCP$_ ) %,
EXIF$( efn ) = ! EXIT IF EVENT FLAG NOT SET
BLOCK[ EXIF$_ ^ -8 ] FIELD( EXIF$F ) INITIAL( EXIF$_, efn ) %,
EXIF$S( efn, err ) = ! EXIT IF EVENT FLAG NOT SET
$rsx$emt( err, efn, EXIF$_ ) %,
EXIT$S( err ) = ! TASK EXIT
$rsx$emt( err, EXIT$_ ) %,
EXST$( status ) = ! EXIT WITH STATUS
BLOCK[ EXST$_ ^ -8 ] FIELD( EXST$F ) INITIAL( EXST$_, status ) %,
EXST$S( status, err ) = ! EXIT WITH STATUS
$rsx$emt( err, status, EXST$_ ) %,
EXTK$( inc ) = ! EXTEND TASK
BLOCK[ EXTK$_ ^ -8 ] FIELD( EXTK$F ) INITIAL( EXTK$_, inc ) %,
EXTK$S( inc, err ) = ! EXTEND TASK
$rsx$emt( err, 0 , inc , EXTK$_ ) %,
GLUN$( lun, buf ) = ! GET LUN INFORMATION
BLOCK[ GLUN$_ ^ -8 ] FIELD( GLUN$F ) INITIAL( GLUN$_, lun, buf ) %,
GLUN$S( lun, buf, err ) = ! GET LUN INFORMATION
$rsx$emt( err, buf, lun, GLUN$_ ) %,
GMCR$ = ! GET MCR COMMAND LINE
BLOCK[ GMCR$_ ^ -8 ] FIELD( GMCR$F ) INITIAL( GMCR$_, REP 40 OF (0) ) %,
! GMCR$S = ! GET MCR COMMAND LINE (not supplied)
GMCX$( vec ) = ! GET MAPPING CONTEXT
BLOCK[ GMCX$_ ^ -8 ] FIELD( GMCX$F ) INITIAL( GMCX$_, vec ) %,
GMCX$S( vec, err ) = ! GET MAPPING CONTEXT
$rsx$emt( err, vec, GMCX$_ ) %,
GPRT$( prt, buf ) = ! GET PARTITION PARAMETERS
BLOCK[ GPPT$_ ^ -8 ] FIELD( GPRT$F )
INITIAL( GPRT$_, %IF %NULL(prt) %THEN 0,0 %ELSE $rsx$rad50_2(prt) %FI, buf ) %,
GPRT$S( prt, buf, err ) = ! GET PARTITION PARAMETERS
%IF %NULL(buf)
%THEN
%ERROR( '"buf" parameter must be specified' )
%EXITMACRO
%FI
BEGIN
$rsx$bind( $$prt, prt )
$rsx$emt( err, buf, $$prt1, $$prt0, GPRT$_ )
END %,
GREG$( rid, buf ) = ! GET REGION PARAMETERS
BLOCK[ GREG$_ ^ -8 ] FIELD( GREG$F ) INITIAL( GREG$_, 0, rid, buf ) %,
GREG$S( rid, buf, err ) = ! GET REGION PARAMETERS
$rsx$emt( err, buf, rid, 0, GREG$_ ) %,
GSSW$S( err ) = ! GET SENSE SWITCHES
$rsx$emt( err, GSSW$_ ) %,
GTIM$( buf ) = ! GET TIME PARAMETERS
BLOCK[ GTIM$_ ^ -8 ] FIELD( GTIM$F ) INITIAL( GTIM$_, buf ) %,
GTIM$S( buf, err ) = ! GET TIME PARAMETERS
$rsx$emt( err, buf, GTIM$_ ) %,
GTSK$( buf ) = ! GET TASK PARAMETERS
BLOCK[ GTSK$_ ^ -8 ] FIELD( GTSK$F ) INITIAL( GTSK$_, buf ) %,
GTSK$S( buf, err ) = ! GET TASK PARAMETERS
$rsx$emt( err, buf, GTSK$_ ) %,
! IHAR$S ! INHIBIT AST RECOGNITION (not supplied. see DSAR$S)
MAP$( wdb )= ! MAP ADDRESS WINDOW
BLOCK[ MAP$_ ^ -8 ] FIELD( MAP$F ) INITIAL( MAP$_, wdb ) %,
MAP$S( wdb, err ) = ! MAP ADDRESS WINDOW
$rsx$emt( err, wdb, MAP$_ ) %,
MRKT$( efn, tmg, tnt, ast ) = ! MARK TIME
BLOCK[ MRKT$_ ^ -8 ] FIELD( MRKT$F )
INITIAL( MRKT$_, $rsx$default(0,efn), tmg, tnt, $rsx$default(0,ast) ) %,
MRKT$S( efn, tmg, tnt, ast, err ) = ! MARK TIME
$rsx$emt( err, $rsx$default(0,ast), tnt, tmg, $rsx$default(0,efn),MRKT$_ ) %,
QIO$( fnc, lun, efn, pri, isb, ast, prl ) = ! QUEUE I/O REQUEST
BLOCK[ QIO$_ ^ -8 ] FIELD( QIO$F )
INITIAL( QIO$_, fnc, lun, $rsx$default(0,pri)^8+$rsx$default(0,efn), $rsx$default(0,isb),
$rsx$default(0,ast), $rsx$pad6(%remove(prl)) ) %,
QIO$S( fnc, lun, efn, pri, isb, ast, prl, err ) = ! QUEUE I/O REQUEST
$rsx$emt( err, $rsx$pad_6(%remove(prl)), $rsx$default(0,ast), $rsx$default(0,isb),
$rsx$default(0,pri)^8+$rsx$default(0,efn),lun,fnc,QIO$_ ) %,
QIOW$( fnc, lun, efn, pri, isb, ast, prl ) = ! QUEUE I/O REQUEST AND WAIT
BLOCK[ QIOW$_ ^ -8 ] FIELD( QIO$F )
INITIAL( QIOW$_, fnc, lun, $rsx$default(0,pri)^8+$rsx$default(0,efn), $rsx$default(0,isb),
$rsx$default(0,ast), $rsx$pad6(%remove(prl)) ) %,
QIOW$S( fnc, lun, efn, pri, isb, ast, prl, err ) = ! QUEUE I/O REQUEST AND WAIT
$rsx$emt( err, $rsx$pad_6(%remove(prl)), $rsx$default(0,ast), $rsx$default(0,isb),
$rsx$default(0,pri)^8+$rsx$default(0,efn),lun,fnc,QIOW$_ ) %,
RCST$( tname, buf ) = ! RECEIVE DATA OR STOP
BLOCK[ RCST$_ ^ -8 ] FIELD( RCST$F )
INITIAL( RCST$_, $rsx$rad50_2(tsk), buf ) %,
RCST$S( tname, buf, err ) = ! RECEIVE DATA OR STOP
BEGIN
$rsx$bind( $$tname, tname )
$rsx$emt( err, buf, $$tname1, $$tname0, RCST$_ )
END %,
RCVD$( tsk, buf ) = ! RECEIVE DATA
BLOCK[ RCVD$_ ^ -8 ] FIELD( RCVD$F ) INITIAL( RCVD$_, $rsx$rad50_2(tsk), buf ) %,
RCVD$S( tsk, buf, err ) = ! RECEIVE DATA
$rsx$bind( $$tsk, tsk )
$rsx$emt( err, buf, $$tsk1, $$tsk0, RCVD$_ ) %,
RCVX$( tsk, buf ) = ! RECEIVE DATA OR EXIT
BLOCK[ RCVX$_ ^ -8 ] FIELD( RCVX$F ) INITIAL( RCVX$_, $rsx$rad50_2(tsk), buf ) %,
RCVX$S( tsk, buf, err ) = ! RECEIVE DATA OR EXIT
$rsx$bind( $$tsk, tsk )
$rsx$emt( err, buf, $$tsk1, $$tsk0, RCVX$_ ) %,
RDAF$( buf ) = ! READ ALL EVENT FLAGS
BLOCK[ RDAF$_ ^ -8 ] FIELD( RDAF$F ) INITIAL( RDAF$_, buf ) %,
RDAF$S( buf, err ) = ! READ ALL EVENT FLAGS
$rsx$emt( err, buf, RDAF$_ ) %,
RDXF$( buf ) = ! READ EXTENDED EVENT FLAGS
BLOCK[ RDXF$_ ^ -8 ] FIELD( RDXF$F ) INITIAL( RDXF$_, buf ) %,
RDXF$S( buf, err ) = ! READ EXTENDED EVENT FLAGS
$rsx$emt( err, buf, RDXF$_ ) %,
RQST$( tsk, prt, pri, ugc, umc ) = ! REQUEST
BLOCK[ RQST$_ ^ -8 ] FIELD( RQST$F ) INITIAL( RQST$_, $rsx$rad50_2(tsk), 0, 0, 0, umc+ugc^8 ) %,
RQST$S( tsk, prt, pri, ugc, umc, err ) = ! REQUEST
BEGIN
$rsx$bind( $$tsk, tsk )
$rsx$emt( err, umc+ugc^8, 0, 0, 0, $$tsk1, $$tsk0, RQST$_ )
END %,
RREF$( wdb ) = ! RECEIVE BY REFERENCE
BLOCK[ RREF$_ ^ -8 ] FIELD( RREF$F ) INITIAL( RREF$_, wdb ) %,
RREF$S( wdb, err ) = ! RECEIVE BY REFERENCE
$rsx$emt( err, wdb, RREF$_ ) %,
RSUM$( tsk ) = ! RESUME
BLOCK[ RSUM$_ ^ -8 ] FIELD( RSUM$F ) INITIAL( RSUM$_, $rsx$rad50_2(tsk) ) %,
RSUM$S( tsk, err ) = ! RESUME
BEGIN
$rsx$bind( $$tsk, tsk )
$rsx$emt( err, $$tsk1, $$tsk0, RSUM$_ )
END %,
RUN$( tsk, prt, pri, ugc, umc, smg, snt, rmg, rnt ) = ! RUN
BLOCK[ RUN$_ ^ -8 ] FIELD( RUN$F )
INITIAL( RUN$_, $rsx$rad50_2(tsk), 0, 0, 0, ugc^8+umc, smg, snt, rmg, rnt ) %,
RUN$S( tsk, prt, pri, ugc, umc, smg, snt, rmg, rnt, err ) = ! RUN
BEGIN
$rsx$bind( $$tsk, tsk )
$rsx$emt( err, rnt, rmg, snt, smg, ugc^8+umc, 0, 0, 0, $$tsk1, $$tsk0, RUN$_ )
END %,
SDAT$( tsk, buf, efn ) = ! SEND DATA
BLOCK[ SDAT$_ ^ -8 ] FIELD( SDAT$F ) INITIAL( SDAT$_, $rsx$rad50_2(tsk), buf, $rsx$default(0,efn) ) %,
SDAT$S( tsk, buf, efn, err ) = ! SEND DATA
BEGIN
$rsx$bind( $$tsk, tsk )
$rsx$emt( err, $rsx$default(0,efn), buf, $$tsk1, $$tsk0, SDAT$_ )
END %,
SETF$( efn ) = ! SET EVENT FLAG
BLOCK[ SETF$_ ^ -8 ] FIELD( SETF$F ) INITIAL( SETF$_, efn ) %,
SETF$S( efn, err ) = ! SET EVENT FLAG
$rsx$emt( err, efn, SETF$_ ) %,
SFPA$( ast ) = ! SPECIFY FLOATING POINT PROCESSOR EXCEPTION AST
BLOCK[ SFPA$_ ^ -8 ] FIELD( SFPA$F ) INITIAL( SFPA$_, $rsx$default(0,ast) ) %,
SFPA$S( ast, err ) = ! SPECIFY FLOATING POINT PROCESSOR EXCEPTION AST
$rsx$emt( err, $rsx$default(0,ast), SFPA$_ ) %,
SPND$S( err ) = ! SUSPEND
$rsx$emt( err, SPND$_ ) %,
SPRA$( ast ) = ! SPECIFY POWER RECOVERY AST
BLOCK[ SPRA$_ ^ -8 ] FIELD( SPRA$F ) INITIAL( SPRA$_, $rsx$default(0,ast) ) %,
SPRA$S( ast, err ) = ! SPECIFY POWER RECOVERY AST
$rsx$emt( err, $rsx$default(0,ast), SPRA$_ ) %,
SPWN$(tname,xx,yy,ugc,umc,efn,east,esb,cmdlin,cmdlen,unum,dnam) = ! SPAWN
BLOCK[ SPWN$_ ^ -8 ] FIELD( SPWN$F )
INITIAL(SPWN$_,$rsx$rad50_2(tname),0,0,0,ugc^8+umc,
efn,east,esb,cmdlin,cmdlen,unum,%ASCII dnam) %,
SPWN$S(tname,xx,yy,ugc,umc,efn,east,esb,cmdlin,cmdlen,unum,dnam,err) = ! SPAWN
BEGIN
$rsx$bind( $$tname, tname )
$rsx$emt( err,%ASCII dnam,unum,cmdlen,cmdlin,esb,east,efn,
ugc^8+umc,0,0,0,$$tname1,$$tname0,SPWN$_)
END %,
SRDA$( ast ) = ! SPECIFY RECEIVE DATA AST
BLOCK[ SRDA$_ ^ -8 ] FIELD( SRDA$F ) INITIAL( SRDA$_, $rsx$default(0,ast) ) %,
SRDA$S( ast, err ) = ! SPECIFY RECEIVE DATA AST
$rsx$emt( err, $rsx$default(0,ast), SRDA$_ ) %,
SREF$( tsk, wdb, efn ) = ! SEND BY REFERENCE
BLOCK[ SREF$_ ^ -8 ] FIELD( SREF$F ) INITIAL( SREF$_, $rsx$rad50_2(tsk), $rsx$default(0,efn), wdb ) %,
SREF$S( tsk, wdb, efn, err ) = ! SEND BY REFERENCE
BEGIN
$rsx$bind( $$tsk, tsk )
$rsx$emt( err, wdb, $rsx$default(0,efn), $$tsk1, $$tsk0, SREF$_ )
END %,
SRRA$( ast ) = ! SPECIFY RECEIVE BY REFERENCE AST
BLOCK[ SRRA$_ ^ -8 ] FIELD( SRRA$F ) INITIAL( SRRA$_, $rsx$default(0,ast) ) %,
SRRA$S( ast, err ) = ! SPECIFY RECEIVE BY REFERENCE AST
$rsx$emt( err, $rsx$default(0,ast), SRRA$_ ) %,
STLO$( grp,msk ) = ! STOP FOR LOGICAL OR OF EVENT FLAGS
BLOCK[ STLO$_ ^ -8 ] FIELD( STLO$F ) INITIAL( STLO$_, grp, msk ) %,
STLO$S( grp,msk,err ) = ! STOP FOR LOGICAL OR OF EVENT FLAGS
$rsx$emt( err, msk, grp, STLO$_ ) %,
STOP$S( err ) = ! STOP
$rsx$emt( err, STOP$_ ) %,
STSE$( efn ) = ! STOP FOR SINGLE EVENT FLAG
BLOCK[ STSE$_ ^ -8 ] FIELD( STSE$F ) INITIAL( STSE$_, efn ) %,
STSE$S( efn, err ) = ! STOP FOR SINGLE EVENT FLAG
$rsx$emt( err, efn, STSE$_ ) %,
SVDB$( adr, len ) = ! SPECIFY SST VECTOR TABLE FOR DEBUGGING AID
BLOCK[ SVDB$_ ^ -8 ] FIELD( SVDB$F ) INITIAL( SVDB$_, $rsx$default(0,adr), $rsx$default(0,len) ) %,
SVDB$S( adr, len, err ) = ! SPECIFY SST VECTOR TABLE FOR DEBUGGING AID
$rsx$emt( err, $rsx$default(0,len), $rsx$default(0,adr), SVDB$_ ) %,
SVTK$( adr, len ) = ! SPECIFY SST VECTOR TABLE FOR TASK
BLOCK[ SVTK$_ ^ -8 ] FIELD( SVTK$F ) INITIAL( SVTK$_, $rsx$default(0,adr), $rsx$default(0,len) ) %,
SVTK$S( adr, len, err ) = ! SPECIFY SST VECTOR TABLE FOR TASK
$rsx$emt( err, $rsx$default(0,len), $rsx$default(0,adr), SVTK$_ ) %,
UMAP$( wdb ) = ! UNMAP ADDRESS WINDOW
BLOCK[ UMAP$_ ^ -8 ] FIELD( UMAP$F ) INITIAL( UMAP$_, wdb ) %,
UMAP$S( wdb, err ) = ! UNMAP ADDRESS WINDOW
$rsx$emt( err, wdb, UMAP$_ ) %,
USTP$( tname ) = ! UNSTOP TASK
BLOCK[ USTP$_ ^ -8 ] FIELD( USTP$F )
INITIAL( USTP$_, $rsx$rad50_2(tname) ) %,
USTP$S( tname, err ) = ! UNSTOP TASK
BEGIN
$rsx$bind( $$tname, tname )
$rsx$emt( err, $$tname1, $$tname0, USTP$_ )
END %,
WSIG$S( err ) = ! WAIT FOR SIGNIFICANT EVENT
$rsx$emt( err, WSIG$_ ) %,
WTLO$( grp, msk ) = ! WAIT FOR LOGICAL 'OR' OF EVENT FLAGS
BLOCK[ WTLO$_ ^ -8 ] INITIAL( WTLO$_, grp, msk ) %,
WTLO$S( grp, msk, err ) = ! WAIT FOR LOGICAL 'OR' OF EVENT FLAGS
$rsx$emt( err, msk, grp, WTLO$_ ) %,
WTSE$( efn ) = ! WAIT FOR SINGLE EVENT FLAG
BLOCK[ WTSE$_ ^ -8 ] FIELD( WTSE$F ) INITIAL( WTSE$_, efn ) %,
WTSE$S( efn, err ) = ! WAIT FOR SINGLE EVENT FLAG
$rsx$emt( err, efn, WTSE$_ ) %;
!%sbttl 'RSX11M - Include Error and Function Codes'
REQUIRE 'BLI:RSXEFC';
!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++!
! !
! E N D O F R S X 1 1 M . R 1 6 S Y S T E M I N T E R F A C E !
! !
!+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++!