sys7.1-doc-wip/ProcessMgr/OSDispatchPrivate.h

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__