289 lines
9.5 KiB
C
289 lines
9.5 KiB
C
/***********************************************************************
|
|
*
|
|
* Copyright (c) Palm Computing 1998 -- All Rights Reserved
|
|
*
|
|
* PROJECT: Pilot
|
|
* FILE: HostControl.h
|
|
* AUTHOR: Roger Flores/Douglas Anderson: August 17, 1998
|
|
*
|
|
* DECLARER: System
|
|
*
|
|
* DESCRIPTION:
|
|
*
|
|
*
|
|
**********************************************************************/
|
|
|
|
#ifndef _HOSTCONTROL_H_
|
|
#define _HOSTCONTROL_H_
|
|
|
|
/*
|
|
Set the base value for selectors. Note that this value MUST be
|
|
two bytes long and have the high byte be non-zero. The reason
|
|
for this has to do with the way SysGremlins was originally
|
|
declared. It took a GremlinsSelector enumerated value. Originally,
|
|
there was only one value, and it was zero. The way the 68K compiler
|
|
works, it decides that GremlinsSelectors are only one byte long,
|
|
so a call to SysGremlins would push one byte onto the stack. Because
|
|
all values on the stack need to be word-aligned, the processor
|
|
subtracts 1 from the stack before pushing on the byte. Therefore,
|
|
the stack looks like:
|
|
|
|
previous contents
|
|
garbage byte
|
|
selector
|
|
return address
|
|
|
|
With this setup, we have two choices: leave the selector size at
|
|
one byte and limit ourselves to 256 functions, or define the selector
|
|
to be a two byte value, with the first 256 values (all those with 0x00
|
|
in the upper byte) to be GremlinIsOn. The latter sounds preferable, so
|
|
we start the new selectors at 0x0100.
|
|
*/
|
|
|
|
#define hostSelectorBase 0x0100
|
|
#define hostSelectorChunk 0x0100
|
|
#define hostSection(x) (hostSelectorBase + (hostSelectorChunk * (x)))
|
|
|
|
typedef enum
|
|
{
|
|
// Host information selectors
|
|
|
|
hostSelectorGetHostVersion = hostSection(0),
|
|
hostSelectorGetHostID,
|
|
hostSelectorGetHostPlatform,
|
|
hostSelectorIsSelectorImplemented,
|
|
hostSelectorGestalt,
|
|
hostSelectorIsCallingTrap,
|
|
|
|
// Profiler selectors
|
|
|
|
hostSelectorProfileInit = hostSection(1),
|
|
hostSelectorProfileStart,
|
|
hostSelectorProfileStop,
|
|
hostSelectorProfileDump,
|
|
hostSelectorProfileCleanup,
|
|
|
|
// Std C Library wrapper selectors
|
|
|
|
hostSelectorErrNo = hostSection(2),
|
|
|
|
hostSelectorFClose,
|
|
hostSelectorFEOF,
|
|
hostSelectorFError,
|
|
hostSelectorFFlush,
|
|
hostSelectorFGetC,
|
|
hostSelectorFGetPos,
|
|
hostSelectorFGetS,
|
|
hostSelectorFOpen,
|
|
hostSelectorFPrintF, // Floating point not yet supported in Poser
|
|
hostSelectorFPutC,
|
|
hostSelectorFPutS,
|
|
hostSelectorFRead,
|
|
hostSelectorRemove, // Not yet implemented in Poser
|
|
hostSelectorRename, // Not yet implemented in Poser
|
|
hostSelectorFReopen, // Not yet implemented in Poser
|
|
hostSelectorFScanF, // Not yet implemented
|
|
hostSelectorFSeek,
|
|
hostSelectorFSetPos,
|
|
hostSelectorFTell,
|
|
hostSelectorFWrite,
|
|
hostSelectorTmpFile,
|
|
hostSelectorTmpNam, // Not yet implemented in Poser
|
|
hostSelectorGetEnv,
|
|
|
|
hostSelectorMalloc, // Not yet implemented in Poser
|
|
hostSelectorRealloc, // Not yet implemented in Poser
|
|
hostSelectorFree, // Not yet implemented in Poser
|
|
|
|
// Gremlin selectors
|
|
|
|
hostSelectorGremlinIsRunning = hostSection(3),
|
|
hostSelectorGremlinNumber,
|
|
hostSelectorGremlinCounter,
|
|
hostSelectorGremlinLimit,
|
|
// hostSelectorGremlinApp,
|
|
|
|
// Database selectors
|
|
|
|
hostSelectorImportFile = hostSection(4),
|
|
hostSelectorExportFile,
|
|
|
|
// Preferences selectors
|
|
|
|
hostSelectorSetDebugOption = hostSection(5), // Not yet implemented
|
|
hostSelectorSetWindowScale, // Not yet implemented
|
|
hostSelectorSetWindowBackground, // Not yet implemented
|
|
|
|
// Logging selectors
|
|
|
|
hostSelectorLogFile = hostSection(6),
|
|
hostSelectorSetLogFileSize,
|
|
|
|
hostSelectorLastTrapNumber
|
|
} HostControlTrapNumber;
|
|
|
|
|
|
typedef struct HostControlParamsType
|
|
{
|
|
long unused;
|
|
} HostControlParamsType;
|
|
|
|
|
|
|
|
typedef struct HostFILE
|
|
{
|
|
long _field;
|
|
} HostFILE;
|
|
|
|
|
|
|
|
typedef long HostBool;
|
|
typedef long HostErr;
|
|
typedef long HostID;
|
|
typedef long HostPlatform;
|
|
typedef long HostBG;
|
|
|
|
#ifndef hostErrorClass
|
|
#define hostErrorClass 0x1C00 // Host Control Manager
|
|
#else
|
|
#if hostErrorClass != 0x1C00
|
|
#error "You cannot change hostErrorClass without telling us."
|
|
#endif
|
|
#endif
|
|
|
|
enum // HostErr values
|
|
{
|
|
hostErrNone = 0,
|
|
|
|
hostErrBase = hostErrorClass,
|
|
|
|
hostErrUnknownGestaltSelector,
|
|
|
|
hostErrDiskError,
|
|
|
|
hostErrOutOfMemory,
|
|
hostErrMemReadOutOfRange,
|
|
hostErrMemWriteOutOfRange,
|
|
hostErrMemInvalidPtr,
|
|
|
|
hostErrInvalidParameter
|
|
};
|
|
|
|
|
|
enum // HostID values
|
|
{
|
|
hostIDPalmOS,
|
|
hostIDPalmOSEmulator, // The Copilot thingy
|
|
hostIDPalmOSSimulator // The Mac libraries you link with thingy
|
|
};
|
|
|
|
|
|
enum // HostPlatform values
|
|
{
|
|
hostPlatformPalmOS,
|
|
hostPlatformWindows,
|
|
hostPlatformMacintosh,
|
|
hostPlatformUnix
|
|
};
|
|
|
|
|
|
enum // HostBG values
|
|
{
|
|
hostBGGray,
|
|
hostBGWhite
|
|
};
|
|
|
|
#ifdef EMULATION_LEVEL
|
|
#define EMULATION_LEVEL_DEFINED 1
|
|
#else
|
|
#define EMULATION_LEVEL_DEFINED 0
|
|
#endif
|
|
|
|
#if EMULATION_LEVEL_DEFINED && EMULATION_LEVEL == EMULATION_NONE
|
|
#define HOST_TRAP(selector) \
|
|
FIVEWORD_INLINE( \
|
|
0x3F3C, selector, /* MOVE.W #selector, -(A7) */ \
|
|
m68kTrapInstr + sysDispatchTrapNum, /* TRAP $F */ \
|
|
sysTrapHostControl, /* sysTrapHostControl */ \
|
|
0x544F) /* ADD.Q #2, A7 */
|
|
#else
|
|
|
|
// The simulator implements each function separately and directly calls each function.
|
|
#define HOST_TRAP(selector)
|
|
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
long HostGetHostVersion (void) HOST_TRAP (hostSelectorGetHostVersion);
|
|
HostID HostGetHostID (void) HOST_TRAP (hostSelectorGetHostID);
|
|
HostPlatform HostGetHostPlatform (void) HOST_TRAP (hostSelectorGetHostPlatform);
|
|
HostBool HostIsSelectorImplemented (long selector) HOST_TRAP (hostSelectorIsSelectorImplemented);
|
|
HostErr HostGestalt (long gestSel, long* response) HOST_TRAP (hostSelectorGestalt);
|
|
HostBool HostIsCallingTrap (void) HOST_TRAP (hostSelectorIsCallingTrap);
|
|
|
|
HostErr HostProfileInit (long maxCalls, long maxDepth) HOST_TRAP (hostSelectorProfileInit);
|
|
HostErr HostProfileStart (void) HOST_TRAP (hostSelectorProfileStart);
|
|
HostErr HostProfileStop (void) HOST_TRAP (hostSelectorProfileStop);
|
|
HostErr HostProfileDump (const char* filename) HOST_TRAP (hostSelectorProfileDump);
|
|
HostErr HostProfileCleanup (void) HOST_TRAP (hostSelectorProfileCleanup);
|
|
|
|
long HostErrNo (void) HOST_TRAP (hostSelectorErrNo);
|
|
|
|
long HostFClose (HostFILE* f) HOST_TRAP (hostSelectorFClose);
|
|
long HostFEOF (HostFILE* f) HOST_TRAP (hostSelectorFEOF);
|
|
long HostFError (HostFILE* f) HOST_TRAP (hostSelectorFError);
|
|
long HostFFlush (HostFILE* f) HOST_TRAP (hostSelectorFFlush);
|
|
long HostFGetC (HostFILE* f) HOST_TRAP (hostSelectorFGetC);
|
|
long HostFGetPos (HostFILE* f, long* posP) HOST_TRAP (hostSelectorFGetPos);
|
|
char* HostFGetS (char* s, long n, HostFILE* f) HOST_TRAP (hostSelectorFGetS);
|
|
HostFILE* HostFOpen (const char* name, const char* mode) HOST_TRAP (hostSelectorFOpen);
|
|
long HostFPrintF (HostFILE* f, const char* fmt, ...) HOST_TRAP (hostSelectorFPrintF);
|
|
long HostFPutC (long c, HostFILE* f) HOST_TRAP (hostSelectorFPutC);
|
|
long HostFPutS (const char* s, HostFILE* f) HOST_TRAP (hostSelectorFPutS);
|
|
long HostFRead (void* buffer, long size, long count, HostFILE* f)
|
|
HOST_TRAP (hostSelectorFRead);
|
|
long HostRemove (const char* name) HOST_TRAP (hostSelectorRemove);
|
|
long HostRename (const char* oldName, const char* newName) HOST_TRAP (hostSelectorRename);
|
|
HostFILE* HostFReopen (const char* name, const char* mode, HostFILE *f)
|
|
HOST_TRAP (hostSelectorFReopen);
|
|
long HostFScanF (HostFILE* f, const char *fmt, ...) HOST_TRAP(hostSelectorFScanF);
|
|
long HostFSeek (HostFILE* f, long offset, long origin) HOST_TRAP (hostSelectorFSeek);
|
|
long HostFSetPos (HostFILE* f, long* pos) HOST_TRAP (hostSelectorFSetPos);
|
|
long HostFTell (HostFILE* f) HOST_TRAP (hostSelectorFTell);
|
|
long HostFWrite (const void* buffer, long size, long count, HostFILE* f)
|
|
HOST_TRAP (hostSelectorFWrite);
|
|
HostFILE* HostTmpFile (void) HOST_TRAP (hostSelectorTmpFile);
|
|
char* HostTmpNam (char *name) HOST_TRAP (hostSelectorTmpNam);
|
|
char* HostGetEnv (const char* name) HOST_TRAP (hostSelectorGetEnv);
|
|
|
|
void* HostMalloc (long size) HOST_TRAP (hostSelectorMalloc);
|
|
void* HostRealloc (void* p, long size) HOST_TRAP (hostSelectorRealloc);
|
|
void HostFree (void* p) HOST_TRAP (hostSelectorFree);
|
|
|
|
HostBool HostGremlinIsRunning (void) HOST_TRAP (hostSelectorGremlinIsRunning);
|
|
long HostGremlinNumber (void) HOST_TRAP (hostSelectorGremlinNumber);
|
|
long HostGremlinCounter (void) HOST_TRAP (hostSelectorGremlinCounter);
|
|
long HostGremlinLimit (void) HOST_TRAP (hostSelectorGremlinLimit);
|
|
|
|
HostErr HostImportFile (const char* fileName, long cardNum) HOST_TRAP (hostSelectorImportFile);
|
|
HostErr HostExportFile (const char* fileName, long cardNum, const char* dbName)
|
|
HOST_TRAP (hostSelectorExportFile);
|
|
|
|
HostBool HostSetDebugOption (HostBool newSetting) HOST_TRAP (hostSelectorSetDebugOption);
|
|
long HostSetWindowScale (long newScale) HOST_TRAP (hostSelectorSetWindowScale);
|
|
HostBG HostSetWindowBackground (HostBG newBackground) HOST_TRAP (hostSelectorSetWindowBackground);
|
|
|
|
HostFILE* HostLogFile (void) HOST_TRAP (hostSelectorLogFile);
|
|
void HostSetLogFileSize (long) HOST_TRAP (hostSelectorSetLogFileSize);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif /* _HOSTCONTROL_H_ */
|