mirror of
https://github.com/elliotnunn/supermario.git
synced 2024-12-01 02:51:04 +00:00
238 lines
8.1 KiB
C
238 lines
8.1 KiB
C
|
/*
|
||
|
File: OSDispatchPrivate.h
|
||
|
|
||
|
Contains: Private interface to the Process Mgr OSDispatch routines.
|
||
|
|
||
|
Written by: Phil Goldman and Erich Ringewald
|
||
|
|
||
|
Copyright: © 1986-1992 by Apple Computer, Inc., all rights reserved.
|
||
|
|
||
|
Change History (most recent first):
|
||
|
|
||
|
<11> 8/26/92 DTY Roll in latest changes for A/UX.
|
||
|
<10> 4/9/92 KST #1025131,<JH>: Changing SWM from a background app to a driver.
|
||
|
Adding a new call: SendEventToSWMDriver.
|
||
|
<9> 10/15/91 YK Added GetFrontAppFloatLayer macro.
|
||
|
<8> 10/9/91 YK Added FindAppFloatLayer. Searches IMLayer for the application
|
||
|
layer.
|
||
|
<7> 1/28/91 DFH JSM,#81425:Remove EnableSwitching and DisableSwitching calls.
|
||
|
They are now in MFPrivate.h.
|
||
|
<6> 1/14/91 DFH (JDR) Conditionalize out AUX support.
|
||
|
<4> 12/10/90 DFH Moved file attribute and Finder flag equates to SysMisc.h.
|
||
|
<3> 12/5/90 DFH Added #defines for prettier access to AuxDispatch.
|
||
|
<2> 11/27/90 DFH Removed unneeded parameter from cpu_resched.
|
||
|
<0> x/xx/86 PYG New Today.
|
||
|
|
||
|
*/
|
||
|
|
||
|
#ifndef __OSDISPATCHPRIVATE__
|
||
|
#define __OSDISPATCHPRIVATE__
|
||
|
|
||
|
#ifndef __PPCTOOLBOX__
|
||
|
#include <PPCToolBox.h>
|
||
|
#endif __PPCTOOLBOX__
|
||
|
|
||
|
#ifndef __DATA__
|
||
|
#include "Data.h"
|
||
|
#endif __DATA__
|
||
|
|
||
|
#ifndef __FILES__
|
||
|
#include "Files.h"
|
||
|
#endif __FILES__
|
||
|
|
||
|
#ifndef __LAYERS__
|
||
|
#include <Layers.h>
|
||
|
#endif __LAYERS__
|
||
|
|
||
|
/************************************************************************************
|
||
|
* Process Manager *
|
||
|
************************************************************************************/
|
||
|
|
||
|
#ifdef HAS_AUX_PROCESSMGR
|
||
|
#define ASYNC_LAUNCH (0x00080000)
|
||
|
#define COFF_BINARY (0x00040000)
|
||
|
#endif HAS_AUX_PROCESSMGR
|
||
|
|
||
|
/* record returned by TWGetProcInfo (old MultiFinder call we must support) */
|
||
|
struct procinfo {
|
||
|
short p_state; /* process state */
|
||
|
ProcessID p_mypid; /* the process id */
|
||
|
long p_type; /* type of task (usually APPL) */
|
||
|
long p_signature; /* signature of task */
|
||
|
long p_version; /* version of task */
|
||
|
THz p_zone; /* pointer to minor zone */
|
||
|
unsigned long p_taskmode; /* tasks created mode */
|
||
|
Boolean p_needsuspresevts; /* whether or not the process expects suspend and resume events */
|
||
|
Boolean p_back; /* can accept background time */
|
||
|
Boolean p_activateonresume; /* whether the app will activate and deactivate on susppend/resume */
|
||
|
ProcessID p_dad; /* process id of my dad */
|
||
|
unsigned long p_size; /* size of his world */
|
||
|
unsigned long p_ssize; /* size of his stack */
|
||
|
unsigned long p_slices; /* # of times process has seen the CPU */
|
||
|
|
||
|
unsigned long p_freemem; /* amount of free memory in heap */
|
||
|
Str31 p_name; /* name of backing app */
|
||
|
short p_vrefnum; /* vrefnum of app file as passed to _KernelLaunch */
|
||
|
};
|
||
|
|
||
|
/* Constants for printer type calls */
|
||
|
#define PRTYPE_CHANGESTATUS_SAME (-1)
|
||
|
#define PRTYPE_CHANGESTATUS_DISABLED (0)
|
||
|
#define PRTYPE_CHANGESTATUS_ENABLED (1)
|
||
|
|
||
|
/* Block to specify a desk accessory by name */
|
||
|
typedef struct DASpecBlock {
|
||
|
FSSpec *daFileSpec;
|
||
|
StringPtr daDrvrName;
|
||
|
} DASpecBlock, *DASpecBlockPtr;
|
||
|
|
||
|
/* Output param block for StandardLaunch */
|
||
|
typedef struct LaunchResults {
|
||
|
OSErr LaunchError;
|
||
|
PEntryPtr pNewProcess;
|
||
|
unsigned long PreferredSize;
|
||
|
unsigned long MinimumSize;
|
||
|
unsigned long AvailableSize;
|
||
|
} LaunchResults, *LaunchResultsPtr;
|
||
|
|
||
|
/* Param block used by internal routines for launch */
|
||
|
typedef struct InternalLaunchPB {
|
||
|
FSSpecPtr ilAppSpecPtr;
|
||
|
unsigned long ilTaskMode;
|
||
|
DASpecBlockPtr ilDAInfoPtr;
|
||
|
PEntryPtr ilResultProc;
|
||
|
unsigned long ilPartitionSize;
|
||
|
unsigned long ilStackSize;
|
||
|
Ptr ilAppParameters;
|
||
|
Handle ilAppParamHdl;
|
||
|
} InternalLaunchPB, *InternalLaunchPBPtr;
|
||
|
|
||
|
void StandardLaunch(FSSpecPtr, unsigned short, unsigned long, Ptr, LaunchResultsPtr, DASpecBlockPtr);
|
||
|
void LaunchFacelessTasks(void);
|
||
|
|
||
|
/************************************************************************************
|
||
|
* *
|
||
|
* Pseudo-event definitions *
|
||
|
* *
|
||
|
************************************************************************************/
|
||
|
/* Event number for pseudo events */
|
||
|
#define PSEVT_WHAT app4Evt
|
||
|
|
||
|
/* Selector goes in high byte of the message field. */
|
||
|
#define PSEVT_MOUSEMOVED (250)
|
||
|
|
||
|
/************************************************************************************
|
||
|
* *
|
||
|
* Function prototypes *
|
||
|
* *
|
||
|
************************************************************************************/
|
||
|
void INITRET(void);
|
||
|
void InitializeProcess(void);
|
||
|
void cpu_resched(void);
|
||
|
PEntryPtr fg_resched(EventRecord *, Boolean);
|
||
|
void CancelSleep(PEntryPtr);
|
||
|
void PutOnSleepQueue(PEntryPtr, unsigned long);
|
||
|
void RemoveFromStateList(PEntryPtr, PEntryPtr *);
|
||
|
void switch_task(PEntryPtr);
|
||
|
void save_state(PEntryPtr);
|
||
|
unsigned short restore_state(PEntryPtr, Boolean);
|
||
|
|
||
|
pascal void HideLayer(LayerPtr layer, Boolean showFlag);
|
||
|
void ShowHideOthers(Boolean showFlag);
|
||
|
LayerPtr FindAppBaseLayer(WindowPtr window, LayerPtr layerPtr);
|
||
|
#define FindAppLayer(window) (FindAppBaseLayer(window, MFLayer))
|
||
|
#define FindAppFloatLayer(window) (FindAppBaseLayer(window, IMLayer))
|
||
|
|
||
|
void SendEventToSWMDriver( EventRecord *theEvent );
|
||
|
|
||
|
void CancelPendingUpdates(LayerPtr layerPtr);
|
||
|
#define LayerOwner(pLayer) ((PEntryPtr) GetWRefCon(pLayer))
|
||
|
#define GetFrontAppLayer() ((LayerPtr) GetSubWindows(MFLayer))
|
||
|
#define GetFrontAppFloatLayer() ((LayerPtr) GetSubWindows(IMLayer))
|
||
|
|
||
|
#ifdef HAS_AUX_PROCESSMGR
|
||
|
/************************************************************************************
|
||
|
* *
|
||
|
* AUX calls we define and use internally. *
|
||
|
* *
|
||
|
************************************************************************************/
|
||
|
|
||
|
void AUX_Block(PEntryPtr p);
|
||
|
pascal long AUX_Dispatch_Patch(short selector, char *p);
|
||
|
pascal short AUX_EventAvail(short evtMask, EventRecord *theEvent);
|
||
|
PEntryPtr AUX_FindProc(long taskId);
|
||
|
short AUX_ForkExecGlue(short, char *);
|
||
|
short AUX_GetAnyEventGlue(short evtMask, EventRecord *theEvent,
|
||
|
long timeout, RgnHandle bounds,
|
||
|
Boolean pullit);
|
||
|
long AUX_GetMinTimeout(void);
|
||
|
RgnHandle AUX_GetMouseBounds(void);
|
||
|
pascal short AUX_GetNextEvent(short evtMask, EventRecord *theEvent);
|
||
|
long AUX_GetTaskGlue(void);
|
||
|
short AUX_HandleEvent(EventRecord *theEvent);
|
||
|
void AUX_IdleProc(void);
|
||
|
short AUX_KernelEvents(EventRecord *eventRecord);
|
||
|
void AUX_KillLayer(long taskId);
|
||
|
short AUX_Launch(InternalLaunchPBPtr pParams);
|
||
|
void AUX_MakeLayer(long taskId, unsigned short flags, long size);
|
||
|
void AUX_MakeRunnable(long taskId);
|
||
|
long AUX_ProcessMgrTask(void);
|
||
|
void AUX_Setup(void);
|
||
|
void AUX_SwitchGlue(long taskId);
|
||
|
PEntryPtr AUX_Unblock(long taskId);
|
||
|
short AUX_WaitForEvent(short mask, EventRecord *theEvent);
|
||
|
short AUX_WaitNextEvent(short evtMask, EventRecord *theEvent, long timeout, RgnHandle mbo);
|
||
|
void aux_restore_ctx(unsigned long);
|
||
|
#endif HAS_AUX_PROCESSMGR
|
||
|
|
||
|
/************************************************************************************
|
||
|
* *
|
||
|
* OSDispatch calls we use internally that are not available in the more public *
|
||
|
* files (like Processes.h and MFPrivate.h). *
|
||
|
* *
|
||
|
************************************************************************************/
|
||
|
|
||
|
/* scheduler stuff */
|
||
|
pascal short
|
||
|
KernelLaunch(InternalLaunchPBPtr pParams)
|
||
|
= {0x3F3C,0x0010,0xA88F};
|
||
|
|
||
|
pascal void
|
||
|
SleepProcess(unsigned long time)
|
||
|
= {0x3F3C,0x001C,0xA88F};
|
||
|
|
||
|
/* layer management stuff */
|
||
|
pascal LayerPtr
|
||
|
GetLayer(void)
|
||
|
= {0x3F3C,0x0004,0xA88F};
|
||
|
|
||
|
pascal long
|
||
|
MakeTopLayer(LayerPtr layer)
|
||
|
= {0x3F3C,0x000C,0xA88F};
|
||
|
|
||
|
pascal long
|
||
|
LayerClose(LayerPtr layer)
|
||
|
= {0x3F3C,0x000D,0xA88F};
|
||
|
|
||
|
pascal long
|
||
|
LayerInit(void)
|
||
|
= {0x3F3C,0x000E,0xA88F};
|
||
|
|
||
|
pascal LayerPtr
|
||
|
LGetNextLayer(LayerPtr pCurLayer, Boolean wantVisiblesOnly)
|
||
|
= {0x3F3C,0x002B,0xA88F};
|
||
|
|
||
|
pascal LayerPtr
|
||
|
LayerFind(Point mousepos)
|
||
|
= {0x3F3C,0x000F,0xA88F};
|
||
|
|
||
|
pascal short
|
||
|
LGetAuxWin(LayerPtr layer, WindowPeek window, AuxWinHandle awh)
|
||
|
= {0x3F3C,0x0023,0xA88F};
|
||
|
|
||
|
pascal short
|
||
|
LColorInvalRect(Rect *rect, short device, short sysupdate)
|
||
|
= {0x3F3C,0x0025,0xA88F};
|
||
|
|
||
|
#endif __OSDISPATCHPRIVATE__
|