--******************************************************************************************************************** -- Created: 9-Mar-2021 22:28:36 by OpenVMS SDL EV3-3 -- Source: 15-DEC-2000 09:43:54 $1$DGA8085:[LIB_ADA.LIS]UNCDEF.SDL;1 --******************************************************************************************************************** with SYSTEM; use SYSTEM; with STARLET; use STARLET; with CONDITION_HANDLING; use CONDITION_HANDLING; package UNCDEF is -- module $UNCDEF -- -- UNCHDRDEF - Universal Context Segment Header Definition -- UNC_C_JPI : constant := 1; -- JPI context segment (not used) UNC_C_UAI : constant := 2; -- UAI context segment UNC_C_AUDIT_EVENT : constant := 3; -- AUDIT_EVENT context segment UNC_C_OBJECT : constant := 4; -- Object management context segment UNC_C_ORB_FIXUP : constant := 5; -- Writeback ORB after boot fixup UNC_C_OBJECT_SERVICE : constant := 6; -- Object service request context UNC_C_HDR_LENGTH : constant := 16; -- size of context segment header UNC_K_HDR_LENGTH : constant := 16; -- size of context segment header UNC_C_LIST : constant := 16; -- offset to first context block UNC_K_LIST : constant := 16; -- offset to first context block UNC_S_UNCHDRDEF : constant := 16; -- Old size name - synonym type UNCHDR_TYPE is record FLINK : ADDRESS; -- forward link to next context segment BLINK : ADDRESS; -- back link to previous context segment SIZE : UNSIGNED_WORD; -- total size of context segment TYP : UNSIGNED_BYTE; -- VMS type of block (DYN$C_UNC) SUBTYP : UNSIGNED_BYTE; -- type of context segment COUNT : UNSIGNED_WORD; -- number of context blocks in segment FREE_COUNT : UNSIGNED_WORD; -- number of entries free for use LIST : STRING(1 .. 0); -- Start of context blocks end record; for UNCHDR_TYPE use record FLINK at 0 range 0 .. 31; BLINK at 4 range 0 .. 31; SIZE at 8 range 0 .. 15; TYP at 10 range 0 .. 7; SUBTYP at 11 range 0 .. 7; COUNT at 12 range 0 .. 15; FREE_COUNT at 14 range 0 .. 15; LIST at 16 range 0 .. -1; end record; for UNCHDR_TYPE'SIZE use 128; UNCHDR_TYPE_INIT : constant UNCHDR_TYPE := (FLINK => ADDRESS_ZERO, BLINK => ADDRESS_ZERO, SIZE => 0, TYP => 0, SUBTYP => 0, COUNT => 0, FREE_COUNT => 0, LIST => (others => ASCII.NUL)); -- -- Universal Context Block Definition (Go Heels!) -- UNC_M_ENTRY_INUSE : constant := 16#00000001#; UNC_M_NEW_ENTRY : constant := 16#00000002#; UNC_M_MBX_NORSWAIT : constant := 16#00000004#; UNC_C_LENGTH : constant := 84; -- size of largest context block UNC_K_LENGTH : constant := 84; -- size of largest context block UNC_C_SEGMENTS : constant := 5; -- natural number of segments/page UNC_K_SEGMENTS : constant := 5; -- natural number of segments/page UNC_S_UNCDEF : constant := 84; -- Old size name - synonym type UNC_FLAGS_TYPE is -- context cell flags record ENTRY_INUSE : BOOLEAN; -- context entry inuse NEW_ENTRY : BOOLEAN; -- Newly created entry MBX_NORSWAIT : BOOLEAN; -- Return on resource failure FILLER_1 : UNSIGNED_13; end record; for UNC_FLAGS_TYPE use record ENTRY_INUSE at 0 range 0 .. 0; NEW_ENTRY at 0 range 1 .. 1; MBX_NORSWAIT at 0 range 2 .. 2; FILLER_1 at 0 range 3 .. 15; end record; for UNC_FLAGS_TYPE'SIZE use 16; UNC_FLAGS_TYPE_INIT : constant UNC_FLAGS_TYPE := (ENTRY_INUSE => FALSE, NEW_ENTRY => FALSE, MBX_NORSWAIT => FALSE, FILLER_1 => 0); type UNC_UAI_CONTEXT_TYPE is record UAI_IFI : UNSIGNED_WORD; -- FAB$W_IFI UAI_ISI : UNSIGNED_WORD; -- RAB$W_ISI UAI_CHANNEL : UNSIGNED_WORD; -- UAF channel end record; for UNC_UAI_CONTEXT_TYPE use record UAI_IFI at 0 range 0 .. 15; UAI_ISI at 2 range 0 .. 15; UAI_CHANNEL at 4 range 0 .. 15; end record; for UNC_UAI_CONTEXT_TYPE'SIZE use 48; UNC_UAI_CONTEXT_TYPE_INIT : constant UNC_UAI_CONTEXT_TYPE := (UAI_IFI => 0, UAI_ISI => 0, UAI_CHANNEL => 0); type UNC_AE_OUR_IOSB_TYPE is -- IOSB for $AUDIT_EVENT record AE_QIO_STATUS : UNSIGNED_WORD; -- status from $AUDIT_EVENT's $QIO to reply mailbox FILLER_1 : UNSIGNED_WORD_ARRAY (1 .. 3); end record; for UNC_AE_OUR_IOSB_TYPE use record AE_QIO_STATUS at 0 range 0 .. 15; FILLER_1 at 2 range 0 .. 47; end record; for UNC_AE_OUR_IOSB_TYPE'SIZE use 64; UNC_AE_OUR_IOSB_TYPE_INIT : constant UNC_AE_OUR_IOSB_TYPE := (AE_QIO_STATUS => 0, FILLER_1 => (others => 0)); type UNC_AUDIT_EVENT_CONTEXT_TYPE is record AE_IOSB : ADDRESS; -- IOSB address AE_ASTADR : ADDRESS; -- AST address AE_ASTPRM : UNSIGNED_LONGWORD; -- AST parameter AE_EFN : UNSIGNED_WORD; -- EFN number AE_CHANNEL : UNSIGNED_WORD; -- reply mailbox channel AE_FLAGS : UNSIGNED_LONGWORD; -- $AUDIT_EVENT flags AE_REPLY : UNSIGNED_LONGWORD; -- audit server reply status AE_OUR_IOSB : UNC_AE_OUR_IOSB_TYPE; -- IOSB for $AUDIT_EVENT AE_PRVMOD : UNSIGNED_BYTE; -- mode to deliver completion AST FILLER_1 : UNSIGNED_BYTE_ARRAY (1 .. 3); end record; for UNC_AUDIT_EVENT_CONTEXT_TYPE use record AE_IOSB at 0 range 0 .. 31; AE_ASTADR at 4 range 0 .. 31; AE_ASTPRM at 8 range 0 .. 31; AE_EFN at 12 range 0 .. 15; AE_CHANNEL at 14 range 0 .. 15; AE_FLAGS at 16 range 0 .. 31; AE_REPLY at 20 range 0 .. 31; AE_OUR_IOSB at 24 range 0 .. 63; AE_PRVMOD at 32 range 0 .. 7; FILLER_1 at 33 range 0 .. 23; end record; for UNC_AUDIT_EVENT_CONTEXT_TYPE'SIZE use 288; UNC_AUDIT_EVENT_CONTEXT_TYPE_INIT : constant UNC_AUDIT_EVENT_CONTEXT_TYPE := (AE_IOSB => ADDRESS_ZERO, AE_ASTADR => ADDRESS_ZERO, AE_ASTPRM => 0, AE_EFN => 0, AE_CHANNEL => 0, AE_FLAGS => 0, AE_REPLY => 0, AE_OUR_IOSB => UNC_AE_OUR_IOSB_TYPE_INIT, AE_PRVMOD => 0, FILLER_1 => (others => 0)); type UNC_OF_OUR_IOSB_TYPE is -- IOSB for $AUDIT_EVENT record OF_STATUS : UNSIGNED_WORD; -- completion status FILLER_1 : UNSIGNED_WORD_ARRAY (1 .. 3); end record; for UNC_OF_OUR_IOSB_TYPE use record OF_STATUS at 0 range 0 .. 15; FILLER_1 at 2 range 0 .. 47; end record; for UNC_OF_OUR_IOSB_TYPE'SIZE use 64; UNC_OF_OUR_IOSB_TYPE_INIT : constant UNC_OF_OUR_IOSB_TYPE := (OF_STATUS => 0, FILLER_1 => (others => 0)); type UNC_ORB_FIXUP_CONTEXT_TYPE is record OF_ASTADR : ADDRESS; -- AST address OF_ASTPRM : UNSIGNED_LONGWORD; -- AST parameter OF_FLAGS : UNSIGNED_LONGWORD; -- flags (object specific) OF_OUR_IOSB : UNC_OF_OUR_IOSB_TYPE; -- IOSB for $AUDIT_EVENT OF_PRVMOD : UNSIGNED_BYTE; -- mode to deliver completion AST FILLER_1 : UNSIGNED_BYTE_ARRAY (1 .. 3); OF_OBJECT : UNSIGNED_LONGWORD; -- context for locating the OF_OBJECT1 : UNSIGNED_LONGWORD; -- next object profile OF_OBJECT2 : UNSIGNED_LONGWORD; -- (object specific) OF_OBJECT3 : UNSIGNED_LONGWORD; -- end record; for UNC_ORB_FIXUP_CONTEXT_TYPE use record OF_ASTADR at 0 range 0 .. 31; OF_ASTPRM at 4 range 0 .. 31; OF_FLAGS at 8 range 0 .. 31; OF_OUR_IOSB at 12 range 0 .. 63; OF_PRVMOD at 20 range 0 .. 7; FILLER_1 at 21 range 0 .. 23; OF_OBJECT at 24 range 0 .. 31; OF_OBJECT1 at 28 range 0 .. 31; OF_OBJECT2 at 32 range 0 .. 31; OF_OBJECT3 at 36 range 0 .. 31; end record; for UNC_ORB_FIXUP_CONTEXT_TYPE'SIZE use 320; UNC_ORB_FIXUP_CONTEXT_TYPE_INIT : constant UNC_ORB_FIXUP_CONTEXT_TYPE := (OF_ASTADR => ADDRESS_ZERO, OF_ASTPRM => 0, OF_FLAGS => 0, OF_OUR_IOSB => UNC_OF_OUR_IOSB_TYPE_INIT, OF_PRVMOD => 0, FILLER_1 => (others => 0), OF_OBJECT => 0, OF_OBJECT1 => 0, OF_OBJECT2 => 0, OF_OBJECT3 => 0); type UNC_OS_IOSB_TYPE is -- IOSB for $QIO record OS_STATUS : UNSIGNED_WORD; -- completion status FILLER_1 : UNSIGNED_WORD_ARRAY (1 .. 3); end record; for UNC_OS_IOSB_TYPE use record OS_STATUS at 0 range 0 .. 15; FILLER_1 at 2 range 0 .. 47; end record; for UNC_OS_IOSB_TYPE'SIZE use 64; UNC_OS_IOSB_TYPE_INIT : constant UNC_OS_IOSB_TYPE := (OS_STATUS => 0, FILLER_1 => (others => 0)); type UNC_OBJECT_SERVICE_CONTEXT_TYPE is record OS_ASTADR : ADDRESS; -- AST address OS_ASTPRM : UNSIGNED_LONGWORD; -- AST parameter OS_FLAGS : UNSIGNED_LONGWORD; -- flags (object specific) OS_REPL_CHAN : UNSIGNED_WORD; -- mailbox channel for reply OS_RQST_CHAN : UNSIGNED_WORD; -- mailbox channel for request OS_IOSB : UNC_OS_IOSB_TYPE; -- IOSB for $QIO OS_PRVMOD : UNSIGNED_BYTE; -- mode to deliver completion AST FILLER_1 : UNSIGNED_BYTE_ARRAY (1 .. 3); OS_OBJECT : UNSIGNED_LONGWORD; -- context for locating the OS_OBJECT1 : UNSIGNED_LONGWORD; -- next object profile OS_OBJECT2 : UNSIGNED_LONGWORD; -- (object specific) OS_OBJECT3 : UNSIGNED_LONGWORD; -- end record; for UNC_OBJECT_SERVICE_CONTEXT_TYPE use record OS_ASTADR at 0 range 0 .. 31; OS_ASTPRM at 4 range 0 .. 31; OS_FLAGS at 8 range 0 .. 31; OS_REPL_CHAN at 12 range 0 .. 15; OS_RQST_CHAN at 14 range 0 .. 15; OS_IOSB at 16 range 0 .. 63; OS_PRVMOD at 24 range 0 .. 7; FILLER_1 at 25 range 0 .. 23; OS_OBJECT at 28 range 0 .. 31; OS_OBJECT1 at 32 range 0 .. 31; OS_OBJECT2 at 36 range 0 .. 31; OS_OBJECT3 at 40 range 0 .. 31; end record; for UNC_OBJECT_SERVICE_CONTEXT_TYPE'SIZE use 352; UNC_OBJECT_SERVICE_CONTEXT_TYPE_INIT : constant UNC_OBJECT_SERVICE_CONTEXT_TYPE := (OS_ASTADR => ADDRESS_ZERO, OS_ASTPRM => 0, OS_FLAGS => 0, OS_REPL_CHAN => 0, OS_RQST_CHAN => 0, OS_IOSB => UNC_OS_IOSB_TYPE_INIT, OS_PRVMOD => 0, FILLER_1 => (others => 0), OS_OBJECT => 0, OS_OBJECT1 => 0, OS_OBJECT2 => 0, OS_OBJECT3 => 0); type UNC_CONTEXT_OVERLAY_TYPE is record SO_CONTEXT : UNSIGNED_LONGWORD; -- Value of this context block SO_CONTEXT_PTR : ADDRESS; -- Address of user's context cell SO_ACL_POSITION : UNSIGNED_LONGWORD; -- Position in the ACL SO_LOCKID : UNSIGNED_LONGWORD; -- Lock ID for write lock on ORB SO_PARENT_ID : UNSIGNED_LONGWORD; -- Parent lock ID for SO_LOCKID SO_OSR_FLAGS : UNSIGNED_LONGWORD; -- OSR processing flags (see $OSRDEF) SO_OCB : ADDRESS; -- Object Class Block address SO_ORB : ADDRESS; -- Address of the ORB SO_OBJECT_HANDLE : ADDRESS; -- Object handle address -- -- OBJNAM_LENGTH and OBJNAM -- must form an string -- descriptor -- SO_OBJNAM_LENGTH : UNSIGNED_WORD; -- Size of object name SO_RESERVED_1 : UNSIGNED_WORD; -- Reserved (MBZ) SO_OBJNAM : ADDRESS; -- Object name buffer address -- SO_OBJNAM_BUFSIZ : UNSIGNED_WORD; -- Size of objnam buffer alloc SO_ACMODE : UNSIGNED_BYTE; -- Access mode SO_RESERVED_2 : UNSIGNED_BYTE; -- Reserved for digital use SO_ACLCTX_PTR : ADDRESS; -- Context return address SO_RESERVED_3 : UNSIGNED_LONGWORD; -- Reserved for digital use SO_RESERVED_4 : UNSIGNED_LONGWORD; -- Reserved for digital use SO_OSR_CONTEXT : STRING(1 .. 16); -- Object Support Routine context area ----Component(s) below are defined as comments since they ----overlap other fields ---- ----UAI_CONTEXT : UNC_UAI_CONTEXT_TYPE; ----AUDIT_EVENT_CONTEXT : UNC_AUDIT_EVENT_CONTEXT_TYPE; ----ORB_FIXUP_CONTEXT : UNC_ORB_FIXUP_CONTEXT_TYPE; ----OBJECT_SERVICE_CONTEXT : UNC_OBJECT_SERVICE_CONTEXT_TYPE; end record; for UNC_CONTEXT_OVERLAY_TYPE use record SO_CONTEXT at 0 range 0 .. 31; SO_CONTEXT_PTR at 4 range 0 .. 31; SO_ACL_POSITION at 8 range 0 .. 31; SO_LOCKID at 12 range 0 .. 31; SO_PARENT_ID at 16 range 0 .. 31; SO_OSR_FLAGS at 20 range 0 .. 31; SO_OCB at 24 range 0 .. 31; SO_ORB at 28 range 0 .. 31; SO_OBJECT_HANDLE at 32 range 0 .. 31; SO_OBJNAM_LENGTH at 36 range 0 .. 15; SO_RESERVED_1 at 38 range 0 .. 15; SO_OBJNAM at 40 range 0 .. 31; SO_OBJNAM_BUFSIZ at 44 range 0 .. 15; SO_ACMODE at 46 range 0 .. 7; SO_RESERVED_2 at 47 range 0 .. 7; SO_ACLCTX_PTR at 48 range 0 .. 31; SO_RESERVED_3 at 52 range 0 .. 31; SO_RESERVED_4 at 56 range 0 .. 31; SO_OSR_CONTEXT at 60 range 0 .. 127; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----UAI_CONTEXT at 0 range 0 .. 47; ----AUDIT_EVENT_CONTEXT at 0 range 0 .. 287; ----ORB_FIXUP_CONTEXT at 0 range 0 .. 319; ----OBJECT_SERVICE_CONTEXT at 0 range 0 .. 351; end record; for UNC_CONTEXT_OVERLAY_TYPE'SIZE use 608; UNC_CONTEXT_OVERLAY_TYPE_INIT : constant UNC_CONTEXT_OVERLAY_TYPE := (SO_CONTEXT => 0, SO_CONTEXT_PTR => ADDRESS_ZERO, SO_ACL_POSITION => 0, SO_LOCKID => 0, SO_PARENT_ID => 0, SO_OSR_FLAGS => 0, SO_OCB => ADDRESS_ZERO, SO_ORB => ADDRESS_ZERO, SO_OBJECT_HANDLE => ADDRESS_ZERO, SO_OBJNAM_LENGTH => 0, SO_RESERVED_1 => 0, SO_OBJNAM => ADDRESS_ZERO, SO_OBJNAM_BUFSIZ => 0, SO_ACMODE => 0, SO_RESERVED_2 => 0, SO_ACLCTX_PTR => ADDRESS_ZERO, SO_RESERVED_3 => 0, SO_RESERVED_4 => 0, SO_OSR_CONTEXT => (others => ASCII.NUL)); type UNC_TYPE is record FLAGS : UNC_FLAGS_TYPE; -- context cell flags ACCESS_MODE : UNSIGNED_BYTE; -- access mode of context cell FILLER_1 : UNSIGNED_BYTE; IMAGE_COUNT : UNSIGNED_LONGWORD; -- IMGCNT when context cell assigned CONTEXT_OVERLAY : UNC_CONTEXT_OVERLAY_TYPE; end record; for UNC_TYPE use record FLAGS at 0 range 0 .. 15; ACCESS_MODE at 2 range 0 .. 7; FILLER_1 at 3 range 0 .. 7; IMAGE_COUNT at 4 range 0 .. 31; CONTEXT_OVERLAY at 8 range 0 .. 607; end record; for UNC_TYPE'SIZE use 672; UNC_TYPE_INIT : constant UNC_TYPE := ( FLAGS => UNC_FLAGS_TYPE_INIT, ACCESS_MODE => 0, FILLER_1 => 0, IMAGE_COUNT => 0, CONTEXT_OVERLAY => UNC_CONTEXT_OVERLAY_TYPE_INIT ); -- -- Object management Context cell layout -- OBJCTX_S_CTXDEF : constant := 8; -- Old size name - synonym type OBJCTX_TYPE is record INDEX : UNSIGNED_LONGWORD; -- Index in table SEQ : UNSIGNED_LONGWORD; -- Sequence number end record; for OBJCTX_TYPE use record INDEX at 0 range 0 .. 31; SEQ at 4 range 0 .. 31; end record; for OBJCTX_TYPE'SIZE use 64; OBJCTX_TYPE_INIT : constant OBJCTX_TYPE := (INDEX => 0, SEQ => 0); end UNCDEF;