mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-12-27 10:29:32 +00:00
4325cdcc78
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included. The Tools directory, containing mostly junk, is also excluded.
302 lines
11 KiB
C
302 lines
11 KiB
C
/*
|
|
File: SysMisc.h
|
|
|
|
Contains: Miscellaneous Mac system nonsense that has no better home...
|
|
|
|
Written by: Phil Goldman and Erich Ringewald
|
|
|
|
Copyright: © 1986-1992 by Apple Computer, Inc., all rights reserved.
|
|
|
|
Change History (most recent first):
|
|
|
|
<13> 8/26/92 DTY Roll in latest changes for A/UX.
|
|
<12> 1/22/92 DTY Take the synFOND field out of the synthetic strike table
|
|
structure. WeÕre gauranteeing unique font IDs, so this extra
|
|
differentiation wonÕt be necessary.
|
|
<11> 11/15/91 DTY Added synFOND to the SynEntry structure. (We might need to
|
|
store this information elsewhere if it turns out that developers
|
|
are looking at the synthetic fonts.
|
|
<10> 9/16/91 DFH Added GetCPUStatusRegister and SR definitions.
|
|
<9> 4/1/91 DFH (with John Iarocci) Merge in latest AUX support code. NOTE: No
|
|
AUX support code is referenced unless the build defines the
|
|
HAS_AUX_PROCESSMGR condition.
|
|
<8> 3/1/91 DFH KST,WS#DFH-910301a: Added xfiScriptCodeMask.
|
|
<7> 1/21/91 DFH (KSM) Removed system menu IDs, since they are now in
|
|
MenuMgrPriv.a.
|
|
<6> 1/15/91 DFH (VL) Conditionalize out the AUX call macros.
|
|
<4> 12/10/90 DFH Moved file attribute and finder flag equates from
|
|
OSDispatchPrivate.h.
|
|
<3> 12/5/90 DFH Added #defines for prettier calls to AuxDispatch. Removed
|
|
NewFXInfo since FXInfo is now in Files.h.
|
|
<0> 10/25/86 PYG New Today.
|
|
|
|
*/
|
|
|
|
#ifndef __SYSMISC__
|
|
#define __SYSMISC__
|
|
|
|
#include <Retrace.h>
|
|
|
|
/* Access to the CPU's status register (SR) */
|
|
#define kCPUSupervisorMode (1<<13)
|
|
#define kCPUMasterStack (1<<12)
|
|
unsigned short GetCPUStatusRegister(void) = {0x40C0};
|
|
|
|
/* Definitions of the flags in the ioFlAttrib of a CInfoPBRec */
|
|
#define FILE_ATTRIB_ISLOCKED (0x00)
|
|
#define FILE_ATTRIB_RFOPEN (0x04)
|
|
#define FILE_ATTRIB_DFOPEN (0x08)
|
|
#define FILE_ATTRIB_ISDIR (0x10)
|
|
#define FILE_ATTRIB_ISBUSY (0x80)
|
|
|
|
/* Definitions for the fdFlags field in the ioFndrInfo record of an FInfo structure */
|
|
#define FILE_FLAG_LOCKED (1<<15)
|
|
#define FILE_FLAG_INVISIBLE (1<<14)
|
|
#define FILE_FLAG_HASBUNDLE (1<<13)
|
|
#define FILE_FLAG_SYSTEM (1<<12)
|
|
#define FILE_FLAG_HAS_CUSTOM_ICON (1<<10)
|
|
#define FILE_FLAG_CHANGED (1<<9)
|
|
#define FILE_FLAG_INITED (1<<8)
|
|
#define FILE_FLAG_MULTILAUNCH (1<<6)
|
|
#define FILE_FLAG_BF_ALWAYS (1<<5)
|
|
#define FILE_FLAG_BF_NEVER (1<<4)
|
|
#define FILE_FLAG_BF_OWNAPPL (1<<1)
|
|
#define FILE_FLAG_ONDESKTOP (1<<0)
|
|
|
|
/* The icon family resource ID when FILE_FLAG_HAS_CUSTOM_ICON is on */
|
|
#define kCustomIconID (-16455)
|
|
|
|
/* Flag in fdScript field of FXInfo (extended Finder file information). */
|
|
#define kScriptValidBit (7)
|
|
#define xfiScriptCodeMask (0x7F)
|
|
|
|
#ifdef HAS_AUX_PROCESSMGR
|
|
/* Stuff that ought to be in Aux.h, whenever that gets moved to {CIncludes}. */
|
|
#define AUX_StartTimer() (void) AUXDispatch(AUX_STARTTIMER, 0)
|
|
#define AUX_StopTimer() (void) AUXDispatch(AUX_STOPTIMER, 0)
|
|
#define AUX_Highest() (short) AUXDispatch(AUX_HIGHEST, 0)
|
|
#define AUX_SetAUXMask(newMask) (Boolean) AUXDispatch(AUX_SETAUXMASK, (void *) newMask)
|
|
#define AUX_ForkExec(pParams) AUXDispatch(AUX_FORKEXEC, pParams)
|
|
#define AUX_GetAnyEvent(pParams) AUXDispatch(AUX_GETANYEVENT, pParams)
|
|
#define AUX_GetTask(pTaskId) (void) AUXDispatch(AUX_GETTASK, pTaskId)
|
|
#define AUX_Kill(fatedTaskID) (void) AUXDispatch(AUX_KILL, (void *) fatedTaskID)
|
|
#define AUX_Switch(taskID) AUXDispatch(AUX_SWITCH, (void *) taskId)
|
|
#define AUX_SetTimeOut(timeout) (void) AUXDispatch(AUX_SETTIMEOUT, (void *) timeout)
|
|
#define AUX_SetBounds(bounds) (void) AUXDispatch(AUX_SETBOUNDS, bounds)
|
|
#define AUX_COFF_FSSpec(coffname) AUXDispatch(AUX_COFFFSSPEC, (char *) coffname)
|
|
#define AUX_EnableCoffLaunch() AUXDispatch(AUX_ENABLECOFFLAUNCH, 0)
|
|
|
|
#endif HAS_AUX_PROCESSMGR
|
|
|
|
/* Command characters understood by the MDEF */
|
|
#define noMarkSmallIconCmd (0x1A) /* small icon with no left margin */
|
|
#define shrunkenIconCmd (0x1D) /* shrink the icon to 16x16 */
|
|
#define smallIconCmd (0x1E) /* small icon */
|
|
#define largeIconCmd (0x1F) /* large icon */
|
|
#define familyIconCmd (0x20) /* icon suite/cache */
|
|
|
|
/* Internal menu manager structures we crawl */
|
|
typedef struct MenuPair
|
|
{
|
|
MenuHandle menuHdl;
|
|
short leftEdge;
|
|
} MenuPair;
|
|
|
|
typedef struct MenuList
|
|
{
|
|
unsigned short lastMenu;
|
|
short lastRight;
|
|
short notUsed;
|
|
MenuPair menuPairs[];
|
|
} MenuList, *MenuListPtr, **MenuListHandle;
|
|
|
|
typedef struct MenuItemAttributes {
|
|
unsigned char itemIcon; /* icon resource number */
|
|
unsigned char itemCmd; /* key equivalent (& variant) */
|
|
unsigned char itemMark; /* mark character */
|
|
unsigned char itemStyle; /* text style */
|
|
} MenuItemAttributes;
|
|
|
|
/* Menu Manager keeps track of enable/disabled state as bits in a long word, and one
|
|
* flag (bit 0) is assigned for the menu itself. This means that item numbered greater
|
|
* than MAX_ENABLEFLAG_INDEX can't be tracked, so they are always enabled.
|
|
*/
|
|
#define MAX_ENABLEFLAG_INDEX (sizeof(long) - 1)
|
|
|
|
/* Mungy way to walk a menu data structure */
|
|
#define INC_MENU_ITEMPTR(pItem) \
|
|
pItem += Length(pItem) + 1 + sizeof(MenuItemAttributes);
|
|
#define SKIP_TO_MENU_ATTRIBUTES(pItem) pItem += Length(pItem) + 1;
|
|
#define FROM_MENU_ATTRIBUTES_TO_NEXT_ITEM(pItem) pItem += sizeof(MenuItemAttributes);
|
|
#define IS_NOT_LAST_MENUITEM(pItem) (Length(pItem) != 0)
|
|
#define IS_LAST_MENUITEM(pItem) (Length(pItem) == 0)
|
|
|
|
/* If we're using GetItem, all our IS_DASH_STRING calls are against
|
|
* strings on the stack, which are naturally even-aligned. If we look
|
|
* directly into the menu structure, alignment is not guaranteed.
|
|
* This requires a different, bigger, and slower check.
|
|
*/
|
|
#define IS_DASH_STRING(pStr) ( (Length(pStr) == 1) && (StringByte(pStr, 0) == '-') )
|
|
|
|
/* Macros to construct or examine a menu selection. A menu selection is a long
|
|
* word whose high word is the menu ID, and whose low word is the item ID.
|
|
*/
|
|
#define BUILD_MENUSELECTION(menu, item) ((menu << 16) | item)
|
|
#define MENU_ID_OF_SELECTION(menuSelection) (*((short *)&(menuSelection)))
|
|
#define ITEM_ID_OF_SELECTION(menuSelection) ((unsigned short)(menuSelection))
|
|
#define SMALLEST_VALID_MENULONG 0x00010000
|
|
#define VALID_MENUSELECTION(menuSelection) ((u_long) menuSelection >= SMALLEST_VALID_MENULONG)
|
|
|
|
/* Owned resource format (from IM I-109). */
|
|
#define OWNED_RESOURCE (0xC000)
|
|
#define OWNED_BY_DRVR (OWNED_RESOURCE | (0 <<11))
|
|
#define OWNED_BY_WDEF (OWNED_RESOURCE | (1 <<11))
|
|
#define OWNED_BY_MDEF (OWNED_RESOURCE | (2 <<11))
|
|
#define OWNED_BY_CDEF (OWNED_RESOURCE | (3 <<11))
|
|
#define OWNED_BY_PDEF (OWNED_RESOURCE | (4 <<11))
|
|
#define OWNED_BY_PACK (OWNED_RESOURCE | (5 <<11))
|
|
|
|
#define MAX_OWNED_RESOURCE_ID (63)
|
|
|
|
/* Tests for ROM versions */
|
|
#define IS_NUMAC_ROMS(romVersion) ((*((char *)&(romVersion)) & (char)0xC0) == 0)
|
|
#define IS_OLD_ROMS(romVersion) (*((char *)&(romVersion)) < 0)
|
|
|
|
/* Flags in EXTENSIONSENABLEBYTE */
|
|
#define ExtensionsEnabledBit (5)
|
|
/*
|
|
* Structures we don't know where else to put.
|
|
*/
|
|
|
|
/* Previously unused field in the WDPBRec */
|
|
#define ioWDCreated filler1
|
|
|
|
/* Working directory structure from fsequ.a */
|
|
typedef struct WDCB
|
|
{
|
|
Ptr WDVCBPtr;
|
|
long WDDirID;
|
|
long WDCatHint;
|
|
long WDProcID;
|
|
} WDCB, *WDCBPtr;
|
|
|
|
/* Definition of the APPPARMHANDLE (files to open and/or print) */
|
|
typedef struct AppParmRec {
|
|
short message;
|
|
short count;
|
|
AppFile appFiles[0];
|
|
} AppParmRec, *AppParmRecPtr, **AppParmRecHdl;
|
|
|
|
/* Launch-time parameters to application */
|
|
struct appparmarea {
|
|
unsigned long stdin;
|
|
unsigned long stdout;
|
|
Handle parmhandle;
|
|
unsigned short physexec;
|
|
};
|
|
|
|
/* SIZE resource */
|
|
typedef struct swParmDesc {
|
|
unsigned short flags;
|
|
unsigned long psize;
|
|
unsigned long msize;
|
|
} swParms, *swParmPtr, **swParmHdl;
|
|
|
|
/* The value of the DEFLTSTACK lomem on a MacPlus. MacPlus is used as a base machine
|
|
* for default partition and stack sizes.
|
|
*/
|
|
#define MACPLUS_DEFLTSTACK (0x2000)
|
|
|
|
/* Segment header information */
|
|
typedef struct CodeEntry
|
|
{
|
|
short pea; /* This is the PEA instruction ($3F3C) */
|
|
#define PEA 0x3F3C
|
|
short segID; /* This is the segment (i.e. rsrc) id */
|
|
short LoadSeg; /* This is the _LoadSeg ($A9F0) */
|
|
} CodeEntry;
|
|
|
|
/* Jump table entry after CODE segment has been loaded in by LoadSeg */
|
|
typedef struct JTEntry {
|
|
short jmpOpCode;
|
|
void (*routinePC)();
|
|
} JTEntry;
|
|
|
|
#define CODE_ENTRY_UNLOADED(pCodeEntry) ((pCodeEntry)->pea == PEA)
|
|
#define FNC_PTR_UNLOADED(pFnc) (CODE_ENTRY_UNLOADED((CodeEntry *)(pFnc)))
|
|
#define GET_SEGMENT_ID_FROM_FNC_PTR(pFnc) (((CodeEntry *)pFnc)->segID)
|
|
#define GET_SCOD_HDL_FROM_FNC_PTR(pFnc) (GetResource(SYS_SEGMENT_TYPE, GET_SEGMENT_ID_FROM_FNC_PTR(pFnc)))
|
|
#define ROUTINE_ADDR(jta) (((JTEntry *)jta)->routinePC)
|
|
|
|
/* The header of a CODE 0 resource looks like this... */
|
|
struct code0 {
|
|
unsigned long abovea5;
|
|
unsigned long belowa5;
|
|
unsigned long jtsize;
|
|
unsigned long jtoffset;
|
|
unsigned char jt[];
|
|
};
|
|
|
|
/* Header information for driver and DA code. There is no hard and fast way to
|
|
* distinguish a DA from a device driver just by looking in the unit table or in
|
|
* this header. By convention, though, device driver names start with a particular
|
|
* character. The character is a period ('.', ASCII $2E).
|
|
*/
|
|
|
|
typedef struct Driver
|
|
{
|
|
short drvrFlags; /* flags */
|
|
short drvrDelay; /* ticks between periodic actions */
|
|
short drvrEMask; /* DA event mask */
|
|
short drvrMenu; /* menu ID of driver's menu */
|
|
short drvrOpen; /* offset to open routine */
|
|
short drvrPrime; /* offset to prime routine */
|
|
short drvrCtl; /* offset to control routine */
|
|
short drvrStatus; /* offset to status routine */
|
|
short drvrClose; /* offset to close routine */
|
|
char drvrName[]; /* driver name (Pascal string) */
|
|
} Driver, *DriverPtr, **DriverHandle;
|
|
|
|
#define DrvrNameFirstChar '.' /* distinction between drivers and DAs */
|
|
#define DNeedLock (1<<(8+6)) /* Driver will be locked when opened? */
|
|
#define DNeedTime (1<<(8+5)) /* Does driver need periodic control calls? */
|
|
#define DNeedGoodbye (1<<(8+4)) /* Does driver need a goodbye kiss? */
|
|
#define DStatEnable (1<<(8+3)) /* Can driver respond to Status calls? */
|
|
#define DCtlEnable (1<<(8+2)) /* Can driver respond to Control calls? */
|
|
#define DWritEnable (1<<(8+1)) /* Can driver respond to Write calls? */
|
|
#define DReadEnable (1<<(8+0)) /* Can driver respond to Read calls? */
|
|
#define DActive (1<<7) /* Is driver currently executing? */
|
|
#define DRamBased (1<<6) /* Is driver RAM-based? */
|
|
#define DOpened (1<<5) /* Is driver already open? */
|
|
|
|
#define WantsTime(pDCE) \
|
|
((pDCE->dCtlFlags & (DNeedTime | DCtlEnable | DOpened | DActive)) == (DNeedTime | DCtlEnable | DOpened))
|
|
|
|
#define FIRSTDREFNUM (-1) /* Ref Num of first driver */
|
|
#define NOTDREFNUM (0) /* Invalid ref num */
|
|
#define csCodeGoodBye ((short) -1) /* GoodBye control code */
|
|
|
|
/* Synthetic strike descriptor */
|
|
typedef struct SynEntry
|
|
{
|
|
Handle synStrikeHdl;
|
|
short synNFNT;
|
|
short synID;
|
|
RGBColor synFGColor, synBGColor;
|
|
} SynEntry, *SynEntryPtr, **SynEntryHandle;
|
|
|
|
/* Count of color inverse tables */
|
|
#define NUMITABLES (12)
|
|
|
|
/* Flags in ALARMSTATE lomem */
|
|
#define AlrmParity (0x80)
|
|
#define AlrmBeeped (0x40)
|
|
#define AlrmFlEnable (0x01)
|
|
|
|
/* MacJmp bits */
|
|
#define DEBUGGER_RUNNING (1<<7)
|
|
#define DEBUGGER_INITIALIZED (1<<6)
|
|
#define DEBUGGER_INSTALLED (1<<5)
|
|
|
|
#endif __SYSMISC__
|