! *** PREDECLARED TYPES %IF %DECLARED ( %BASIC$QUADWORD_DECLARED ) = 0 %THEN RECORD BASIC$QUADWORD LONG FILL ( 2 ) END RECORD %LET %BASIC$QUADWORD_DECLARED = 1 %END %IF %IF %DECLARED ( %BASIC$OCTAWORD_DECLARED ) = 0 %THEN RECORD BASIC$OCTAWORD LONG FILL ( 4 ) END RECORD %LET %BASIC$OCTAWORD_DECLARED = 1 %END %IF %IF %DECLARED ( %BASIC$HFLOAT_AXP_DECLARED ) = 0 %THEN RECORD BASIC$HFLOAT_AXP LONG FILL ( 4 ) END RECORD %LET %BASIC$HFLOAT_AXP_DECLARED = 1 %END %IF %IF %DECLARED ( %BASIC$F_FLOATING_COMPLEX_DECL ) = 0 %THEN RECORD BASIC$F_FLOATING_COMPLEX SINGLE REAL_PART SINGLE IMAGINARY_PART END RECORD %LET %BASIC$F_FLOATING_COMPLEX_DECL = 1 %END %IF %IF %DECLARED ( %BASIC$D_FLOATING_COMPLEX_DECL ) = 0 %THEN RECORD BASIC$D_FLOATING_COMPLEX DOUBLE REAL_PART DOUBLE IMAGINARY_PART END RECORD %LET %BASIC$D_FLOATING_COMPLEX_DECL = 1 %END %IF %IF %DECLARED ( %BASIC$G_FLOATING_COMPLEX_DECL ) = 0 %THEN RECORD BASIC$G_FLOATING_COMPLEX GFLOAT REAL_PART GFLOAT IMAGINARY_PART END RECORD %LET %BASIC$G_FLOATING_COMPLEX_DECL = 1 %END %IF %IF %DECLARED ( %BASIC$H_FLOAT_AXP_CMPLX_DCL ) = 0 %THEN RECORD BASIC$H_FLOATING_COMPLEX_AXP BASIC$HFLOAT_AXP REAL_PART BASIC$HFLOAT_AXP IMAGINARY_PART END RECORD %LET %BASIC$H_FLOAT_AXP_CMPLX_DCL = 1 %END %IF ! + ! PROCESS OR GLOBAL SECTION DEFINITIONS ! - ! ! ***** L_VBN, L_WINDOW, and L_PFC must be the same offset values as the ! ***** equivalently named offsets in $PFLDEF. ! DECLARE LONG CONSTANT SEC$M_GBL = x'00000001' DECLARE LONG CONSTANT SEC$M_CRF = x'00000002' DECLARE LONG CONSTANT SEC$M_DZRO = x'00000004' DECLARE LONG CONSTANT SEC$M_WRT = x'00000008' DECLARE LONG CONSTANT SEC$M_SHMGS = x'00000010' DECLARE LONG CONSTANT SEC$M_ARGS64 = x'00000020' DECLARE LONG CONSTANT SEC$M_WRTMOD = x'000000C0' DECLARE LONG CONSTANT SEC$M_AMOD = x'00000300' DECLARE LONG CONSTANT SEC$M_UNCACHED = x'00000400' DECLARE LONG CONSTANT SEC$M_READ_ONLY_SHPT = x'00000800' DECLARE LONG CONSTANT SEC$M_SHARED_PTS = x'00001000' DECLARE LONG CONSTANT SEC$M_MRES = x'00002000' DECLARE LONG CONSTANT SEC$M_PERM = x'00004000' DECLARE LONG CONSTANT SEC$M_SYSGBL = x'00008000' DECLARE LONG CONSTANT SEC$M_PFNMAP = x'00010000' DECLARE LONG CONSTANT SEC$M_EXPREG = x'00020000' DECLARE LONG CONSTANT SEC$M_PROTECT = x'00040000' DECLARE LONG CONSTANT SEC$M_PAGFIL = x'00080000' DECLARE LONG CONSTANT SEC$M_EXECUTE = x'00100000' DECLARE LONG CONSTANT SEC$M_NOPROTCHK = x'00200000' DECLARE LONG CONSTANT SEC$M_NO_OVERMAP = x'00400000' DECLARE LONG CONSTANT SEC$M_INPROG = x'00800000' DECLARE LONG CONSTANT SEC$M_PARANOID = x'01000000' DECLARE LONG CONSTANT SEC$M_GRANHINT = x'02000000' DECLARE LONG CONSTANT SEC$M_MRES_ALLOC = x'04000000' DECLARE LONG CONSTANT SEC$M_RAD_HINT = x'08000000' DECLARE LONG CONSTANT SEC$S_SECDEF = 48 record SECDEF group SEC$R_GSD_OVERLAY variant case LONG SEC$L_GSD ! GLOBAL SECTION DESCRIPTOR ADDRESS case LONG SEC$L_CCB ! CHANNEL CONTROL BLOCK ADDRESS IF PROCESS SECTION end variant end group SEC$R_GSD_OVERLAY LONG SEC$L_SECXFL ! SECTION INDEX FORWARD LINK LONG SEC$L_SECXBL ! SECTION INDEX BACKWARD LINK LONG SEC$L_PFC ! PFC - Page Fault Cluster group SEC$R_MRES_FILE_OVERLAY variant case BASIC$QUADWORD SEC$Q_MRES_REFCNT ! REFERENCE COUNT FOR MRES/SHMGS SECTIONS case group SEC$R_FILE_FIELDS group SEC$R_VBN_OVERLAY ! BASE VIRTUAL BLOCK NUMBER variant case LONG SEC$L_VBN case BASIC$QUADWORD SEC$Q_VBN end variant end group SEC$R_VBN_OVERLAY LONG SEC$L_WINDOW ! WINDOW CONTROL BLOCK end group SEC$R_FILE_FIELDS end variant end group SEC$R_MRES_FILE_OVERLAY ! ! ***** NOTE ***** ! All flags in sec$l_flags must be kept in sync with flags in the ! SECFLG structure defined further in this module. ! **************** ! group SEC$R_FLAGS_OVERLAY variant case LONG SEC$L_FLAGS ! VARIOUS CONTROL FLAGS IN LOW WORD case group SEC$R_FLAGS_BITS ! GLOBAL SECTION ! COPY ON REFERENCE ! DEMAND ZERO ! WRITABLE ! SHARED MEMORY GLOBAL SECTION ! Arguments passed as quads ! WRITE ACCESS MODE FOR SECTION ! ACCESS MODE OF SECTION ! PFN-map I/O space uncached. ! Shared page tables map section read-only ! Section is a shared PT section ! MEMORY RESIDENT SECTION ! PERMANENT SECTION ! 1 = SYSTEM GLOBAL, 0 = GROUP GLOBAL ! ! ***** THE FOLLOWING FLAGS ARE INDICATORS FOR PRIVATE AND GLOBAL SECTION ! ***** SYSTEM SERVICE REQUESTS AND ARE NOT STORED IN THE FLAGS LONGWORD ! ***** FIELD. ! ! MAP TO SPECIFIC PFN'S ! MAP INTO FIRST FREE ADDRESS SPACE ! CHECK WRITE ACCESS MODE (WRTMOD) ! GLOBAL SECTION HAS PAGE FILE BACKING STORE ! CHECK FOR EXECUTE ACCESS ! INHIBIT PROTECTION CHECK ! DON'T OVERMAP ADDRESS SPACE ! Section creation in progress ! Go into paranoia mode ! Allow enhanced GH regions ! Allocate memory resident pages during create ! Allocate pages based on RAD hint LONG GBL_bits ! COMMENT ADDED BY SDL - GBL_bits contains bits GBL through FILL_18_ end group SEC$R_FLAGS_BITS end variant end group SEC$R_FLAGS_OVERLAY LONG SEC$L_REFCNT ! COUNT OF PTE'S REFERENCING THIS SECTION (unless MRES/SHMGS) ! ! UNIT_CNT contains the number of pagelets (512 byte units) in the section, except for ! PFN-mapped sections. In that case, UNIT_CNT contains the number of PFNs mapped by the section. ! LONG SEC$L_VPX ! Starting virtual page index group SEC$R_UNIT_CNT_OVERLAY ! Number of pagelets/PFNs in the section variant case LONG SEC$L_UNIT_CNT case BASIC$QUADWORD SEC$Q_UNIT_CNT end variant end group SEC$R_UNIT_CNT_OVERLAY end record SECDEF ! ! ***** NOTE THAT NUMBER OF LONG WORDS MUST BE EVEN ! DECLARE LONG CONSTANT SEC$K_LENGTH = 48 ! SIZE OF PSTE/GSTE DECLARE LONG CONSTANT SEC$C_LENGTH = 48 ! SIZE OF PSTE/GSTE ! ! ***** NOTE ***** ! All flags in the SECFLG structure must be kept in sync with flags in ! sec$l_flags defined in the SECDEF structure. ! **************** ! DECLARE LONG CONSTANT SECFLG$M_GBL = x'00000001' DECLARE LONG CONSTANT SECFLG$M_CRF = x'00000002' DECLARE LONG CONSTANT SECFLG$M_DZRO = x'00000004' DECLARE LONG CONSTANT SECFLG$M_WRT = x'00000008' DECLARE LONG CONSTANT SECFLG$M_SHMGS = x'00000010' DECLARE LONG CONSTANT SECFLG$M_ARGS64 = x'00000020' DECLARE LONG CONSTANT SECFLG$M_WRTMOD = x'000000C0' DECLARE LONG CONSTANT SECFLG$M_AMOD = x'00000300' DECLARE LONG CONSTANT SECFLG$M_UNCACHED = x'00000400' DECLARE LONG CONSTANT SECFLG$M_READ_ONLY_SHPT = x'00000800' DECLARE LONG CONSTANT SECFLG$M_SHARED_PTS = x'00001000' DECLARE LONG CONSTANT SECFLG$M_MRES = x'00002000' DECLARE LONG CONSTANT SECFLG$M_PERM = x'00004000' DECLARE LONG CONSTANT SECFLG$M_SYSGBL = x'00008000' DECLARE LONG CONSTANT SECFLG$M_PFNMAP = x'00010000' DECLARE LONG CONSTANT SECFLG$M_EXPREG = x'00020000' DECLARE LONG CONSTANT SECFLG$M_PROTECT = x'00040000' DECLARE LONG CONSTANT SECFLG$M_PAGFIL = x'00080000' DECLARE LONG CONSTANT SECFLG$M_EXECUTE = x'00100000' DECLARE LONG CONSTANT SECFLG$M_NOPROTCHK = x'00200000' DECLARE LONG CONSTANT SECFLG$M_NO_OVERMAP = x'00400000' DECLARE LONG CONSTANT SECFLG$M_INPROG = x'00800000' DECLARE LONG CONSTANT SECFLG$M_PARANOID = x'01000000' DECLARE LONG CONSTANT SECFLG$M_GRANHINT = x'02000000' DECLARE LONG CONSTANT SECFLG$M_MRES_ALLOC = x'04000000' DECLARE LONG CONSTANT SECFLG$M_RAD_HINT = x'08000000' DECLARE LONG CONSTANT SECFLG$S_SECDEF_FLAGS = 4 record SECDEF_FLAGS group SECFLG$R_FLAGS_OVERLAY variant case WORD SECFLG$W_SAVED_FLAGS ! FLAGS SAVED IN SECTION TABLE ENTRY case LONG SECFLG$L_FLAGS ! VARIOUS CONTROL FLAGS IN LOW WORD case group SECFLG$R_FLAGS_BITS ! GLOBAL SECTION ! COPY ON REFERENCE ! DEMAND ZERO ! WRITABLE ! SHARED MEMORY GLOBAL SECTION ! Arguments passed as quads ! WRITE ACCESS MODE FOR SECTION ! ACCESS MODE OF SECTION ! PFN-map I/O space uncached. ! Shared page tables map section read-only ! Section is a shared PT section ! MEMORY RESIDENT SECTION ! PERMANENT SECTION ! 1 = SYSTEM GLOBAL, 0 = GROUP GLOBAL ! ! ***** THE FOLLOWING FLAGS ARE INDICATORS FOR PRIVATE AND GLOBAL SECTION ! ***** SYSTEM SERVICE REQUESTS AND ARE NOT STORED IN THE FLAGS LONGWORD ! ***** FIELD. ! ! MAP TO SPECIFIC PFN'S ! MAP INTO FIRST FREE ADDRESS SPACE ! CHECK WRITE ACCESS MODE (WRTMOD) ! GLOBAL SECTION HAS PAGE FILE BACKING STORE ! CHECK FOR EXECUTE ACCESS ! INHIBIT PROTECTION CHECK ! DON'T OVERMAP ADDRESS SPACE ! Section creation in progress ! Go into paranoia mode ! Allow enhanced GH regions ! Allocate memory resident pages during create ! Allocate pages based on RAD hint LONG GBL_bits ! COMMENT ADDED BY SDL - GBL_bits contains bits GBL through FILL_19_ end group SECFLG$R_FLAGS_BITS end variant end group SECFLG$R_FLAGS_OVERLAY end record SECDEF_FLAGS DECLARE LONG CONSTANT SEC$K_MATALL = 0 ! MATCH ALWAYS, USE GLOBAL SECTION DECLARE LONG CONSTANT SEC$K_MATEQU = 1 ! MATCH IF ISD$L_IDENT EQU GBL ID DECLARE LONG CONSTANT SEC$K_MATLEQ = 2 ! MATCH IF ISD$L_IDENT LEQ GBL ID DECLARE LONG CONSTANT SEC$S_SECDEF1 = 26 record SECDEF1 BYTE SECDEF$$_FILL_6 ( 1 to 25 ) BYTE SEC$B_AMOD ! ACCESS MODE OF SECTION ! + ! MATCH CONTROL VIELD VALUES ! - ! BASE OF ZERO , INCR 1 end record SECDEF1 ! ! Definitions for $GETSECI service ! DECLARE LONG CONSTANT SECI$_CHAIN = 1 ! Chained item block DECLARE LONG CONSTANT SECI$_GSMODE = 2 ! Access mode of section DECLARE LONG CONSTANT SECI$_GSFLAGS = 3 ! Flags DECLARE LONG CONSTANT SECI$_GSNAME = 4 ! Global section name DECLARE LONG CONSTANT SECI$_GSIDENT = 5 ! Global section ident DECLARE LONG CONSTANT SECI$_GSRELPAG = 6 ! Relative page number ! ! Definitions for $UPDEC(W) AND $UPDSEC_64(W) system services ! DECLARE LONG CONSTANT UPDFLG$M_WRT_MODIFIED = x'00000001' DECLARE LONG CONSTANT UPDFLG$S_UPDSEC_FLAGS = 4 record UPDSEC_FLAGS group UPDFLG$R_FLAGS_OVERLAY variant case LONG UPDFLG$L_FLAGS ! Flags case group UPDFLG$R_FLAGS_BITS ! Write pages only if modified BYTE WRT_MODIFIED_bits ! COMMENT ADDED BY SDL - WRT_MODIFIED_bits contains bits WRT_MODIFIED through & ! FILL_20_ end group UPDFLG$R_FLAGS_BITS end variant end group UPDFLG$R_FLAGS_OVERLAY end record UPDSEC_FLAGS