! *** 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 DECLARE LONG CONSTANT LIB$K_PROC_VALUE_NULL = 0 DECLARE LONG CONSTANT LIB$K_INVO_HANDLE_NULL = 0 DECLARE LONG CONSTANT LIBICB$K_INVO_HANDLE_SIZE = 4 DECLARE LONG CONSTANT LIBICB$K_INVO_CONTEXT_VERSION = 1 ! DECLARE LONG CONSTANT LIBICB$M_FFLAGS_BITS = x'00FFFFFF' DECLARE LONG CONSTANT LIBICB$M_EXCEPTION_FRAME = x'00000001' DECLARE LONG CONSTANT LIBICB$M_AST_FRAME = x'00000002' DECLARE LONG CONSTANT LIBICB$M_BOTTOM_OF_STACK = x'00000004' DECLARE LONG CONSTANT LIBICB$M_BASE_FRAME = x'00000008' DECLARE LONG CONSTANT LIBICB$K_INVO_CONTEXT_BLK_SIZE = 544 DECLARE LONG CONSTANT LIBICB$S_INVO_CONTEXT_BLK = 544 record INVO_CONTEXT_BLK ! The first quadword contains: ! ! o The length of the structure in bytes (a longword field) ! o The frame flags (a 3 byte field of bits) ! o The version number (a 1 byte field) ! group LIBICB$R_HDR variant case BASIC$QUADWORD LIBICB$Q_HDR_QUAD case group LIBICB$R_HDR_DESC LONG LIBICB$L_CONTEXT_LENGTH group LIBICB$R_FRAMEFLAGS variant case LONG FFLAGS_BITS_bits ! COMMENT ADDED BY SDL - FFLAGS_BITS_bits contains bits FFLAGS_BITS through & ! FFLAGS_BITS case group LIBICB$R_FFLAGS_DESC BYTE EXCEPTION_FRAME_bits ! COMMENT ADDED BY SDL - EXCEPTION_FRAME_bits contains bits & ! EXCEPTION_FRAME through FILL_0_ end group LIBICB$R_FFLAGS_DESC end variant end group LIBICB$R_FRAMEFLAGS BYTE LIBICB$B_BLOCK_VERSION end group LIBICB$R_HDR_DESC end variant end group LIBICB$R_HDR ! ! The address of the procedure descriptor for the procedure. ! BASIC$QUADWORD LIBICB$PH_PROCEDURE_DESCRIPTOR ! ! The current PC of a given procedure invocation. ! BASIC$QUADWORD LIBICB$Q_PROGRAM_COUNTER ! ! The current PS of a given procedure invocation. ! BASIC$QUADWORD LIBICB$Q_PROCESSOR_STATUS ! ! The register contents areas. 31 for scalars, 31 for float. ! BASIC$QUADWORD LIBICB$Q_IREG ( 30 ) BASIC$QUADWORD LIBICB$Q_FREG ( 30 ) ! ! The following is an "internal" area that's reserved for use by ! the operating system. It's size may vary over time. ! group LIBICB$R_SYSTEM_SPECIFIC variant case BASIC$QUADWORD LIBICB$PH_CHFCTX_ADDR case BASIC$QUADWORD LIBICB$Q_SYSTEM_DEFINED ( 1 ) end variant end group LIBICB$R_SYSTEM_SPECIFIC ! ! Align to octaword. ! STRING LIBICB$T_ALIGN = 0 end record INVO_CONTEXT_BLK