sys7.1-doc-wip/Interfaces/CIncludes/Devices.h

355 lines
9.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Hacks to match MacOS (most recent first):
<Sys7.1> 8/3/92 Worked around accRun double define in Devices.h and Desk.h
9/2/94 SuperMario ROM source dump (header preserved below)
*/
/************************************************************
Devices.h
C Interface to the Macintosh Libraries
Created: Saturday, July 27, 1991 at 2:55 PM
Copyright Apple Computer, Inc. 1985-1991
All rights reserved
Change History (most recent first):
<SM4> 1/16/94 pdw Fixed PBControlSync in-line.
<SM3> 1/13/94 chp Added lots of types and constants defined in Inside Mac but
always missing from the C headers. Fixed DrvrInstall prototypes.
<SM2> 10/14/93 pdw <MC2>
<MC2> 9/26/93 pdw Rolled in a lot of Reality changes. Made it bearable in spots
and added DrvrGestalt stuff.
<14> 7/30/93 DTY Sync up with NuReality again.
<13> 6/3/93 DTY Sync up with NuReality version of this header.
<12> 7/30/91 JL Updated Copyright.
<11> 1/30/91 JL group enums into groups of 20.
<10> 1/27/91 LN Checked in Database generate file from DSG.
<9> 1/7/91 JDR (dba) Adding messages sent to the monitor function in the
Control Panel.
<7> 12/12/90 JL Put formal parameter names back.
<6> 11/8/90 JL Changed all #defines to anonymous enums
<5> 11/4/90 dba used constStr255Parameter; got rid of some extraneous parameter
names; made some parameters void* instead of Ptr; added more use
of const in parameters
<4> 10/21/90 gbm (with dba) Made compatible with 3.2 C compiler (and incompatible
with previous compilers).
10/10/90 JAL New style #Pragma Parameters for MPW 3.2 C
1.1 11/9/88 CCH Fixed headers and removed projector resource.
1.0 11/9/88 CCH Adding to EASE.
************************************************************/
#ifndef __DEVICES__
#define __DEVICES__
#ifndef __OSUTILS__
#include <OSUtils.h>
#endif
#ifndef __FILES__
#include <Files.h>
#endif
#ifndef __QUICKDRAW__
#include <Quickdraw.h>
#endif
/* control panel message constants (Why are these in Devices.h?) */
enum {
chooserID = 1,
initDev = 0, // Time for cdev to initialize itself
hitDev = 1, // Hit on one of my items
closeDev = 2, // Close yourself
nulDev = 3, // Null event
updateDev = 4, // Update event
activDev = 5, // Activate event
deactivDev = 6, // Deactivate event
keyEvtDev = 7, // Key down/auto key
macDev = 8, // Decide whether or not to show up
undoDev = 9,
cutDev = 10,
copyDev = 11,
newSelMsg = 12,
fillListMsg = 13,
getSelMsg = 14,
selectMsg = 15,
deselectMsg = 16,
terminateMsg = 17,
buttonMsg = 19,
pasteDev = 12,
clearDev = 13,
cursorDev = 14,
cdevGenErr = -1, // General error; gray cdev w/o alert
cdevMemErr = 0, // Memory shortfall; alert user please
cdevResErr = 1, // Couldn't get a needed resource; alert
cdevUnset = 3 // cdevValue is initialized to this
};
/* Monitors control panel messages */
enum {
initMsg = 1, // initialization
okMsg = 2, // user clicked OK button
cancelMsg = 3, // user clicked Cancel button
hitMsg = 4, // user clicked control in Options dialog
nulMsg = 5, // periodic event
updateMsg = 6, // update event
activateMsg = 7, // not used
deactivateMsg = 8, // not used
keyEvtMsg = 9, // keyboard event
superMsg = 10, // show superuser controls
normalMsg = 11, // show only normal controls
startupMsg = 12 // code has been loaded
};
/* Device Manager structures and constants */
struct DCtlEntry {
Ptr dCtlDriver;
short dCtlFlags;
QHdr dCtlQHdr;
long dCtlPosition;
Handle dCtlStorage;
short dCtlRefNum;
long dCtlCurTicks;
WindowPtr dCtlWindow;
short dCtlDelay;
short dCtlEMask;
short dCtlMenu;
};
typedef struct DCtlEntry DCtlEntry, *DCtlPtr, **DCtlHandle;
struct AuxDCE {
Ptr dCtlDriver;
short dCtlFlags;
QHdr dCtlQHdr;
long dCtlPosition;
Handle dCtlStorage;
short dCtlRefNum;
long dCtlCurTicks;
GrafPtr dCtlWindow;
short dCtlDelay;
short dCtlEMask;
short dCtlMenu;
char dCtlSlot;
char dCtlSlotId;
long dCtlDevBase;
Ptr dCtlOwner;
char dCtlExtDev;
char fillByte;
};
typedef struct AuxDCE AuxDCE, *AuxDCEPtr, **AuxDCEHandle;
struct DriverHeader {
short drvrFlags;
short drvrDelay;
short drvrEMask;
short drvrMenu;
short drvrOpen;
short drvrPrime;
short drvrCtl;
short drvrStatus;
short drvrClose;
unsigned char drvrName [1];
};
typedef struct DriverHeader DriverHeader, *DriverHeaderPtr, **DriverHeaderHandle;
// miscellaneous Device Manager constants
enum {
ioInProgress = 1, // predefined value of ioResult while I/O is pending
aRdCmd = 2, // low byte of ioTrap for Read calls
aWrCmd = 3, // low byte of ioTrap for Write calls
/* trap word modifiers */
asyncTrpBit = 10,
noQueueBit = 9,
/* special csCodes */
goodBye = -1,
killCode = 1,
#ifndef __DESK__ // <Sys7.1>
accRun = 65
#endif
};
// old dCtlFlags bit definitions (treated as bytes)
enum {
// Set if driver...
/* driver flags in high byte [IM II-188] */
dReadEnable = 0, // can respond to Read calls
dWritEnable = 1, // can respond to Write calls
dCtlEnable = 2, // can respond to Control calls
dStatEnable = 3, // can respond to Status calls
dNeedGoodBye = 4, // needs to be called before the application heap is reinitialized
dNeedTime = 5, // needs time for performing a periodic action
dNeedLock = 6, // will be locked in memory as soon as its opened
// (always set for ROM drivers)
/* DCE flags in low byte [IM II-190] */
dOpened = 5, // is open
dRAMBased = 6, // dCtlDriver is a resource handle
drvrActive = 7 // has pending I/O
};
// new dCtlFlags bit definitions (treated as word)
enum {
Is_AppleTalk = 0,
Is_Agent = 1,
FollowsNewRules = 2, // New DRVR Rules Bit
unused3 = 3,
unused4 = 4,
Is_Open = 5,
Is_Ram_Based = 6,
Is_Active = 7,
Read_Enable = 8,
Write_Enable = 9,
Control_Enable = 10,
Status_Enable = 11,
Needs_Goodbye = 12,
Needs_Time = 13,
Needs_Lock = 14,
unused15 = 15
};
#define Is_AppleTalk_Mask (1 << Is_AppleTalk)
#define Is_Agent_Mask (1 << Is_Agent)
#define FollowsNewRules_Mask (1 << FollowsNewRules)
#define Is_Open_Mask (1 << Is_Open)
#define Is_Ram_Based_Mask (1 << Is_Ram_Based)
#define Is_Active_Mask (1 << Is_Active)
#define Read_Enable_Mask (1 << Read_Enable)
#define Write_Enable_Mask (1 << Write_Enable)
#define Control_Enable_Mask (1 << Control_Enable)
#define Status_Enable_Mask (1 << Status_Enable)
#define Needs_Goodbye_Mask (1 << Needs_Goodbye)
#define Needs_Time_Mask (1 << Needs_Time)
#define Needs_Lock_Mask (1 << Needs_Lock)
/*** Driver Gestalt Structures ***/
#define driverGestaltCode 43
// Currently defined drvrGestalt selectors
#define driverGestaltSync 'sync' // True if driver only behaves synchronously.
#define driverGestaltPrefetch 'prft' // The prefetch buffer characteristics (size and time to prefetch)
#define driverGestaltBoot 'boot' // value to place in PRAM for this drive (long)
// Structures for currently defined drvrGestalt selectors
typedef struct
{
Boolean behavesSynchronously;
} driverGestaltSyncResponse;
typedef struct
{
unsigned char extDev; // Packed target (upper 5 bits) LUN (lower 3 bits)
unsigned char partition; // Unused
unsigned char SIMSlot; // Slot
unsigned char SIMsRSRC // sRsrcID
} driverGestaltBootResponse;
typedef union
{
driverGestaltSyncResponse sync;
driverGestaltBootResponse boot;
} driverGestaltInfo;
// status parameter block for drvrGestalt calls
typedef struct DriverGestaltParam {
ParamBlockHeader
short ioCRefNum; // refNum for I/O operation
short csCode; // == driverGestaltCode
OSType driverGestaltSelector;
driverGestaltInfo * driverGestaltResponse;
} DriverGestaltParam;
#ifdef __cplusplus
extern "C" {
#endif
pascal DCtlHandle GetDCtlEntry(short refNum);
pascal Boolean SetChooserAlert(Boolean f);
pascal OSErr OpenDriver(ConstStr255Param name,short *drvrRefNum);
OSErr opendriver(char *driverName,short *refNum);
pascal OSErr CloseDriver(short refNum);
pascal OSErr Control(short refNum,short csCode,const void *csParamPtr);
pascal OSErr Status(short refNum,short csCode,void *csParamPtr);
pascal OSErr KillIO(short refNum);
pascal OSErr PBControl(ParmBlkPtr paramBlock,Boolean async);
pascal OSErr PBStatus(ParmBlkPtr paramBlock,Boolean async);
pascal OSErr PBKillIO(ParmBlkPtr paramBlock,Boolean async);
#pragma parameter __D0 DrvrInstall(__A0,__D0)
pascal OSErr DrvrInstall(DriverHeaderPtr drvrPtr, short refNum) = 0xA03D;
#pragma parameter __D0 DrvrInstallResrvMem(__A0, __D0)
pascal OSErr DrvrInstallResrvMem(DriverHeaderPtr drvrPtr, short refNum) = 0xA43D;
#pragma parameter __D0 DrvrRemove(__D0)
pascal OSErr DrvrRemove(short refNum) = 0xA03E;
#pragma parameter __D0 PBControlSync(__A0)
pascal OSErr PBControlSync(ParmBlkPtr paramBlock) = 0xA004;
#pragma parameter __D0 PBControlAsync(__A0)
pascal OSErr PBControlAsync(ParmBlkPtr paramBlock) = 0xA404;
#pragma parameter __D0 PBStatusSync(__A0)
pascal OSErr PBStatusSync(ParmBlkPtr paramBlock) = 0xA005;
#pragma parameter __D0 PBStatusAsync(__A0)
pascal OSErr PBStatusAsync(ParmBlkPtr paramBlock) = 0xA405;
#pragma parameter __D0 PBKillIOSync(__A0)
pascal OSErr PBKillIOSync(ParmBlkPtr paramBlock) = 0xA006;
#pragma parameter __D0 PBKillIOAsync(__A0)
pascal OSErr PBKillIOAsync(ParmBlkPtr paramBlock) = 0xA406;
#ifdef __cplusplus
}
#endif
#endif