BuildCubeE/MPW-3.2.3/Interfaces/CIncludes/RTLib.h
2019-01-13 15:57:32 +08:00

135 lines
2.6 KiB
C

/*----------------------------------------------------------------------*/
/* RTLib.h */
/* Created by Sandy McEntee, Wednesday, April 2, 1990. */
/* Copyright © 1990 Apple Computer, Inc. */
/* All Rights Reserved. */
/*----------------------------------------------------------------------*/
#ifndef __RTLib__
#define __RTLib__
#ifndef __TYPES__
#include <Types.h>
#endif
#ifdef __safe_link
extern "C" {
#endif
//
// Error Codes
//
enum { eRTNoErr=0, eRTBadVersion=2, eRTInvalidOp=4, eRTInvalidJTPtr=6 };
//
// Action Codes
//
enum { kRTSysErr=0, kRTRetry=1, kRTContinue=2 };
//
// Runtime Operations
//
enum { kRTGetVersion=10, kRTGetVersionA5=11,
kRTGetJTAddress=12, kRTGetJTAddressA5=13,
kRTSetPreLoad=14, kRTSetPreLoadA5=15,
kRTSetSegLoadErr=16, kRTSetSegLoadErrA5=17,
kRTSetPostLoad=18, kRTSetPostLoadA5=19,
kRTSetPreUnload=20, kRTSetPreUnloadA5=21,
kRTPreLaunch=22, kRTPostLaunch=23
};
//
// Version and Jump Table Entry Address Parameters
//
struct RTGetVersionParam {
unsigned short fVersion;
};
typedef struct RTGetVersionParam RTGetVersionParam;
struct RTGetJTAddrParam {
void* fJTAddr;
void* fCodeAddr;
};
typedef struct RTGetJTAddrParam RTGetJTAddrParam;
//
// RTState Definition
//
struct RTState {
unsigned short fVersion; // run-time version
void* fSP; // SP: &-of user return address
void* fJTAddr; // PC: &-of called jump table entry
long fRegisters[15]; // registers D0-D7 and A0-A6 when
// _LoadSeg was called
short fSegNo; // segment number
ResType fSegType; // segment type (normally 'CODE')
long fSegSize; // segment size
Boolean fSegInCore; // true if segment is in memory
Boolean fReserved1; // (reserved for future use)
OSErr fOSErr; // error number
long fReserved2; // (reserved for future use)
};
typedef struct RTState RTState;
//
// Version Definitions
//
#define kVersion32bit 0xFFFF
#define kVersion16bit 0x0000
//
// User Handler Definition
//
typedef pascal short (*SegLoadHdlrPtr) (RTState* state);
//
// Segment Loader Hook Parameters
//
struct RTSetSegLoadParam {
SegLoadHdlrPtr fUserHdlr;
SegLoadHdlrPtr fOldUserHdlr;
};
typedef struct RTSetSegLoadParam RTSetSegLoadParam;
//
// Runtime Parameter Block
//
struct RTPB {
short fOperation;
void* fA5;
union {
RTGetVersionParam fVersionParam;
RTGetJTAddrParam fJTAddrParam;
RTSetSegLoadParam fSegLoadParam;
} fRTParam;
};
typedef struct RTPB RTPB;
pascal OSErr Runtime (RTPB* runtime_parms);
#ifdef __safe_link
}
#endif
#endif /* __RTLib__ */