sys7.1-doc-wip/Interfaces/CIncludes/OSUtils.h
2019-07-27 22:37:48 +08:00

456 lines
12 KiB
C

/************************************************************
Created: Saturday, July 27, 1991 at 5:07 PM
OSUtils.h
C Interface to the Macintosh Libraries
Copyright Apple Computer, Inc. 1985-1992
All rights reserved
Dont use:
-SetUpA5
-RestoreA5
Instead:
SetUpA5 --> myA5 = SetCurrentA5()
RestoreA5 --> oldA5 = SetA5(myA5)
Change History (most recent first):
<SM1> 10/26/92 CSS Conditionalize SwapMMUMode to generate no code when
we don't support 24 bit mode.
<20> 8/13/92 JDR Add Deferred Task structure.
<19> 5/29/92 DCL Moved DateTime stuff from TextUtils to OSUtils.
<18> 5/7/92 DCL NIIM: Movin date & time Stuff back from DateTime to OSUtils.
<17> 4/16/92 DCL For New Inside Mac: Moved Read&WriteLocation from Script to
OSUtils.
<16> 3/26/92 DCL For New Inside Mac: Moved all of the Date & Time stuff to the
New DateTime include file. #1025005
<15> 3/12/92 DCL For New Inside Mac Text volume: Moved KeyTrans, EqualString,
RelString, Compare String, UprString, UpperString to the new
TextUtils.[ph]
<14> 3/10/92 DTY Strike three for Don: Change second #pragma parameter Secs2Date
to be #pragma parameter SecsToDate.
<13> 3/10/92 DCL For New Improved Inside Mac: Added Call names without Abbrevs.:
SecsToDate (Secs2Date) and DateToSecs (Date2Secs). Affected
Files: OSUtils.[ph], SysEqu.a, Traps.[aph].
<12> 7/30/91 JL Updated Copyright.
<11> 1/27/91 LN Checked in Database generate file from DSG.
<9> 12/14/90 dba <JDR> change SystemSixOrBetter to SystemSixOrLater
<8> 11/28/90 JL Put formal parameter names back.
<7> 11/7/90 JL Changed all #defines to anonymous enums
<6> 11/4/90 dba made some parameters void* instead of Ptr; added more use of
const in parameters; make a smaller GetMMUMode with #define; got
rid of some extraneous parameter names; added
GetToolboxTrapAddress, SetToolboxTrapAddress; used
constStr255Parameter
<5> 10/21/90 gbm (with dba) Made compatible with 3.2 C compiler (and incompatible
with previous compilers).
<4> 10/9/90 JAL Added SIQType and envMacIIfx.
New style #Pragma Parameters for MPW 3.2 C
<3> 03/07/90 JAL Added support for Deferred Task.
** 1.2 CCH 12/15/1989 Updated SysEnvirons equates.
** 1.1 CCH 11/ 9/1988 Fixed headers and removed projector resource.
** 1.0 CCH 11/ 9/1988 Adding to EASE.
************************************************************/
#ifndef __OSUTILS__
#define __OSUTILS__
#ifndef __TYPES__
#include <Types.h>
#endif
enum {
useFree = 0,
useATalk = 1,
useAsync = 2,
useExtClk = 3, /*Externally clocked*/
useMIDI = 4,
/**** Environs Equates ****/
curSysEnvVers = 2, /*Updated to equal latest SysEnvirons version*/
/* Machine Types */
envMac = -1,
envXL = -2,
envMachUnknown = 0,
env512KE = 1,
envMacPlus = 2,
envSE = 3,
envMacII = 4,
envMacIIx = 5,
envMacIIcx = 6,
envSE30 = 7,
envPortable = 8,
envMacIIci = 9,
envMacIIfx = 11,
/* CPU types */
envCPUUnknown = 0
};
enum {
env68000 = 1,
env68010 = 2,
env68020 = 3,
env68030 = 4,
env68040 = 5,
/* Keyboard types */
envUnknownKbd = 0,
envMacKbd = 1,
envMacAndPad = 2,
envMacPlusKbd = 3,
envAExtendKbd = 4,
envStandADBKbd = 5,
envPrtblADBKbd = 6,
envPrtblISOKbd = 7,
envStdISOADBKbd = 8,
envExtISOADBKbd = 9,
false32b = 0, /*24 bit addressing error*/
true32b = 1, /*32 bit addressing error*/
/* result types for RelString Call */
sortsBefore = -1, /*first string < second string*/
sortsEqual = 0, /*first string = second string*/
sortsAfter = 1 /*first string > second string*/
};
enum {
/* Toggle results */
toggleUndefined = 0,
toggleOK = 1,
toggleBadField = 2,
toggleBadDelta = 3,
toggleBadChar = 4,
toggleUnknown = 5,
toggleBadNum = 6,
toggleOutOfRange = 7, /*synonym for toggleErr3*/
toggleErr3 = 7,
toggleErr4 = 8,
toggleErr5 = 9,
/* Date equates */
smallDateBit = 31, /*Restrict valid date/time to range of Time global*/
togChar12HourBit = 30, /*If toggling hour by char, accept hours 1..12 only*/
togCharZCycleBit = 29, /*Modifier for togChar12HourBit: accept hours 0..11 only*/
togDelta12HourBit = 28, /*If toggling hour up/down, restrict to 12-hour range (am/pm)*/
genCdevRangeBit = 27, /*Restrict date/time to range used by genl CDEV*/
validDateFields = -1,
maxDateField = 10,
eraMask = 0x0001,
yearMask = 0x0002,
monthMask = 0x0004,
dayMask = 0x0008,
hourMask = 0x0010,
minuteMask = 0x0020,
secondMask = 0x0040,
dayOfWeekMask = 0x0080,
dayOfYearMask = 0x0100,
weekOfYearMask = 0x0200,
pmMask = 0x0400,
dateStdMask = 0x007F /*default for ValidDate flags and ToggleDate TogglePB.togFlags*/
};
enum {eraField,yearField,monthField,dayField,hourField,minuteField,secondField,
dayOfWeekField,dayOfYearField,weekOfYearField,pmField,res1Field,res2Field,
res3Field};
typedef unsigned char LongDateField;
enum {dummyType,vType,ioQType,drvQType,evType,fsQType,sIQType,dtQType};
typedef unsigned short QTypes;
enum {OSTrap,ToolTrap};
typedef unsigned char TrapType;
struct SysParmType {
char valid;
char aTalkA;
char aTalkB;
char config;
short portA;
short portB;
long alarm;
short font;
short kbdPrint;
short volClik;
short misc;
};
typedef struct SysParmType SysParmType;
typedef SysParmType *SysPPtr;
struct QElem {
struct QElem *qLink;
short qType;
short qData[1];
};
typedef struct QElem QElem;
typedef QElem *QElemPtr;
struct QHdr {
short qFlags;
QElemPtr qHead;
QElemPtr qTail;
};
typedef struct QHdr QHdr;
typedef QHdr *QHdrPtr;
typedef pascal void (*DTProcPtr)(void);
struct DeferredTask {
QElemPtr qLink;
short qType;
short dtFlags;
DTProcPtr dtAddr;
long dtParam;
long dtReserved;
};
typedef struct DeferredTask DeferredTask;
typedef DeferredTask *DeferredTaskPtr;
struct SysEnvRec {
short environsVersion;
short machineType;
short systemVersion;
short processor;
Boolean hasFPU;
Boolean hasColorQD;
short keyBoardType;
short atDrvrVersNum;
short sysVRefNum;
};
typedef struct SysEnvRec SysEnvRec;
struct MachineLocation {
Fract latitude;
Fract longitude;
union{
char dlsDelta; /*signed byte; daylight savings delta*/
long gmtDelta; /*must mask - see documentation*/
}gmtFlags;
};
typedef struct MachineLocation MachineLocation;
struct DateTimeRec {
short year;
short month;
short day;
short hour;
short minute;
short second;
short dayOfWeek;
};
typedef struct DateTimeRec DateTimeRec;
typedef comp LongDateTime;
union LongDateCvt {
comp c;
struct {
long lHigh;
long lLow;
} hl;
};
typedef union LongDateCvt LongDateCvt;
union LongDateRec {
struct {
short era;
short year;
short month;
short day;
short hour;
short minute;
short second;
short dayOfWeek;
short dayOfYear;
short weekOfYear;
short pm;
short res1;
short res2;
short res3;
} ld;
short list[14]; /*Index by LongDateField!*/
struct {
short eraAlt;
DateTimeRec oldDate;
} od;
};
typedef union LongDateRec LongDateRec;
typedef char DateDelta;
struct TogglePB {
long togFlags; /*caller normally sets low word to dateStdMask=$7F*/
ResType amChars; /*from 'itl0', but uppercased*/
ResType pmChars; /*from 'itl0', but uppercased*/
long reserved[4];
};
typedef struct TogglePB TogglePB;
typedef short ToggleResults;
#ifdef __cplusplus
extern "C" {
#endif
pascal void LongDateToSeconds(const LongDateRec *lDate,LongDateTime *lSecs)
= {0x2F3C,0x8008,0xFFF2,0xA8B5};
pascal void LongDate2Secs(const LongDateRec *lDate,LongDateTime *lSecs)
= {0x2F3C,0x8008,0xFFF2,0xA8B5};
pascal void LongSecondsToDate(LongDateTime *lSecs,LongDateRec *lDate)
= {0x2F3C,0x8008,0xFFF0,0xA8B5};
pascal void LongSecs2Date(LongDateTime *lSecs,LongDateRec *lDate)
= {0x2F3C,0x8008,0xFFF0,0xA8B5};
pascal ToggleResults ToggleDate(LongDateTime *lSecs,LongDateField field,
DateDelta delta,short ch,const TogglePB *params)
= {0x2F3C,0x820E,0xFFEE,0xA8B5};
pascal short ValidDate(const LongDateRec *vDate,long flags,LongDateTime *newSecs)
= {0x2F3C,0x820C,0xFFE4,0xA8B5};
pascal Boolean IsMetric(void)
= {0x3F3C,0x0004,0xA9ED};
pascal Boolean IUMetric(void) /* obsolete name */
= {0x3F3C,0x0004,0xA9ED};
#pragma parameter __D0 ReadDateTime(__A0)
pascal OSErr ReadDateTime(unsigned long *time)
= 0xA039;
#pragma parameter GetDateTime(__A0)
pascal void GetDateTime(unsigned long *secs)
= {0x20B8,0x020C};
#pragma parameter __D0 SetDateTime(__D0)
pascal OSErr SetDateTime(unsigned long time)
= 0xA03A;
#pragma parameter SetTime(__A0)
pascal void SetTime(const DateTimeRec *d)
= {0xA9C7,0xA03A};
#pragma parameter GetTime(__A0)
pascal void GetTime(DateTimeRec *d)
= {0x2038,0x020C,0xA9C6};
pascal void DateToSeconds(const DateTimeRec *d,unsigned long *secs);
pascal void Date2Secs(const DateTimeRec *d,unsigned long *secs);
#pragma parameter SecondsToDate(__D0,__A0)
pascal void SecondsToDate(unsigned long secs,DateTimeRec *d)
= 0xA9C6;
#pragma parameter Secs2Date(__D0,__A0)
pascal void Secs2Date(unsigned long secs,DateTimeRec *d)
= 0xA9C6;
#define GetSysPPtr() ((SysPPtr) 0x01F8)
pascal void SysBeep(short duration)
= 0xA9C8;
#pragma parameter __D0 DTInstall(__A0)
pascal OSErr DTInstall(DeferredTaskPtr dtTaskPtr)
= 0xA082;
#define GetMMUMode() (* (char*) 0x0CB2)
#ifdef Supports24Bit // <SM1> CSS
#pragma parameter SwapMMUMode(__A0)
pascal void SwapMMUMode(char *mode)
= {0x1010,0xA05D,0x1080};
#else
#define SwapMMUMode(x)
#endif
#if SystemSixOrLater
#pragma parameter __D0 SysEnvirons(__D0,__A0)
pascal OSErr SysEnvirons(short versionRequested,SysEnvRec *theWorld)
= 0xA090;
#else
pascal OSErr SysEnvirons(short versionRequested,SysEnvRec *theWorld);
#endif
#pragma parameter Delay(__A0,__A1)
pascal void Delay(long numTicks,long *finalTicks)
= {0xA03B,0x2280};
#pragma parameter __A0 GetTrapAddress(__D0)
pascal long GetTrapAddress(short trapNum)
= 0xA146;
#pragma parameter SetTrapAddress(__A0,__D0)
pascal void SetTrapAddress(long trapAddr,short trapNum)
= 0xA047;
pascal long NGetTrapAddress(short trapNum,TrapType tTyp);
pascal void NSetTrapAddress(long trapAddr,short trapNum,TrapType tTyp);
#pragma parameter __A0 GetOSTrapAddress(__D0)
pascal long GetOSTrapAddress(short trapNum)
= 0xA346;
#pragma parameter SetOSTrapAddress(__A0,__D0)
pascal void SetOSTrapAddress(long trapAddr,short trapNum)
= 0xA247;
#pragma parameter __A0 GetToolTrapAddress(__D0)
pascal long GetToolTrapAddress(short trapNum)
= 0xA746;
#pragma parameter SetToolTrapAddress(__A0,__D0)
pascal void SetToolTrapAddress(long trapAddr,short trapNum)
= 0xA647;
#pragma parameter __A0 GetToolboxTrapAddress(__D0)
pascal long GetToolboxTrapAddress(short trapNum)
= 0xA746;
#pragma parameter SetToolboxTrapAddress(__A0,__D0)
pascal void SetToolboxTrapAddress(long trapAddr,short trapNum)
= 0xA647;
pascal OSErr WriteParam(void);
#pragma parameter Enqueue(__A0,__A1)
pascal void Enqueue(QElemPtr qElement,QHdrPtr qHeader)
= 0xA96F;
#pragma parameter __D0 Dequeue(__A0,__A1)
pascal OSErr Dequeue(QElemPtr qElement,QHdrPtr qHeader)
= 0xA96E;
long SetCurrentA5(void)
= {0x200D,0x2A78,0x0904};
#pragma parameter __D0 SetA5(__D0)
long SetA5(long newA5)
= 0xC18D;
pascal void Environs(short *rom,short *machine);
pascal OSErr HandToHand(Handle *theHndl);
#pragma parameter __D0 PtrToXHand(__A0,__A1,__D0)
pascal OSErr PtrToXHand(const void *srcPtr,Handle dstHndl,long size)
= 0xA9E2;
pascal OSErr PtrToHand(const void *srcPtr,Handle *dstHndl,long size);
#pragma parameter __D0 HandAndHand(__A0,__A1)
pascal OSErr HandAndHand(Handle hand1,Handle hand2)
= 0xA9E4;
#pragma parameter __D0 PtrAndHand(__A0,__A1,__D0)
pascal OSErr PtrAndHand(const void *ptr1,Handle hand2,long size)
= 0xA9EF;
#pragma parameter __D0 InitUtil
pascal OSErr InitUtil(void)
= 0xA03F;
pascal Boolean SwapInstructionCache(Boolean cacheEnable);
pascal void FlushInstructionCache(void);
pascal Boolean SwapDataCache(Boolean cacheEnable);
pascal void FlushDataCache(void);
pascal void ReadLocation(MachineLocation *loc)
= {0x205F,0x203C,0x000C,0x00E4,0xA051};
pascal void WriteLocation(const MachineLocation *loc)
= {0x205F,0x203C,0x000C,0x00E4,0xA052};
#ifdef __cplusplus
}
#endif
#endif