/****************************************************************************/
/*                                                                          */
/*  RMX_LDR.H:      Prototypes for iRMX LOADER system calls and definitions */
/*                  for special values and exception codes used with and/or */
/*                  returned by them.                                       */
/*                                                                          */
/*  LAST UPDATE:    September 4, 1991 [10:14:23]                            */
/*                                                                          */
/*  DEPENDENCIES:   See RMX_EXC.H.                                          */
/*                                                                          */
/****************************************************************************/

#ifndef _RMX_LDR_H
#define _RMX_LDR_H

#ifndef _RMX_EXC_H
#include <rmx_exc.h>
#endif

/*  ENVIRONMENTAL EXCEPTIONS  */

#define E_ABS_ADDRESS           0x0060
#define E_BAD_GROUP             0x0061
#define E_BAD_HEADER            0x0062
#define E_BAD_SEGDEF            0x0063
#define E_CHECKSUM              0x0064
#define E_EOF                   0x0065
#define E_FIXUP                 0x0066
#define E_NO_LOADER_MEM         0x0067
#define E_NO_MEM                0x0068
#define E_REC_FORMAT            0x0069
#define E_REC_LENGTH            0x006A
#define E_REC_TYPE              0x006B
#define E_NO_START              0x006C
#define E_JOB_SIZE              0x006D
#define E_OVERLAY               0x006E
#define E_LOADER_SUPPORT        0x006F
#define E_SEG_BOUNDS            0x0070

/*  PROGRAMMING EXCEPTIONS  */

#define E_JOB_PARAM             0x8060

/* STRUCTURE DEFINITIONS AND DEFINITIONS FOR THEIR FIELDS */

#pragma noalign( _LOAD_RESULTS, _LOAD_JOB_RESULTS )

typedef struct _LOAD_RESULTS
    {
    U16         except_code;
    U16         record_count;
    U8          error_rec_type;
    U16         undefined_ref;
    NATIVE_WORD init_ip;
    RMXOBJ      init_cs;
    NATIVE_WORD init_sp;
    RMXOBJ      init_ss;
    NATIVE_WORD stack_size;
    RMXOBJ      init_ds;
    U8          segments_created;
    RMXOBJ      segments[1];
    }                           LOAD_RESULTS;

typedef struct _LOAD_JOB_RESULTS
    {
    U16         termination_code;
    U16         user_fault_code;
    RMXOBJ      job_tkn;
    U8          return_data_len;
    U16         record_count;
    U8          error_rec_type;
    U16         undefined_ref;
    U16         mem_requested;
    U16         mem_received;
    }                           LOAD_JOB_RESULTS;

/* ROUTINE PROTOTYPES */

#pragma fixedparams( RQALOAD, RQALOADIOJOB, RQEALOADIOJOB, RQESLOADIOJOB )
#pragma fixedparams( RQSLOADIOJOB, RQSOVERLAY )

void        RQALOAD( RMXOBJ connection_tkn, RMXOBJ mbx_tkn, RMXRET *status );
RMXOBJ      RQALOADIOJOB( RMXOBJ connection_tkn, NATIVE_WORD pool_min,
                NATIVE_WORD pool_max, EXCP_HANDLER_ATTRIBS *info_ptr,
                U16 job_flags, U8 task_priority, U16 task_flags,
                RMXOBJ mbx_tkn, RMXRET *status );
RMXOBJ      RQEALOADIOJOB( RMXOBJ connection_tkn, U32 pool_min, U32 pool_max,
                EXCP_HANDLER_ATTRIBS *info_ptr, U16 job_flags,
                U8 task_priority, U16 task_flags, RMXOBJ mbx_tkn,
                RMXRET *status );
RMXOBJ      RQESLOADIOJOB( RMXSTR *path_ptr, U32 pool_min, U32 pool_max,
                EXCP_HANDLER_ATTRIBS *info_ptr, U16 job_flags,
                U8 task_priority, U16 task_flags, RMXOBJ mbx_tkn,
                RMXRET *status );
RMXOBJ      RQSLOADIOJOB( RMXSTR *path_ptr, NATIVE_WORD pool_min,
                NATIVE_WORD pool_max, EXCP_HANDLER_ATTRIBS *info_ptr,
                U16 job_flags, U8 task_priority, U16 task_flags,
                RMXOBJ mbx_tkn, RMXRET *status );
void        RQSOVERLAY( RMXSTR *name_ptr, RMXRET *status );

#endif /* ndef _RMX_LDR_H */

