Mac OS 9
OSUtils.h
Go to the documentation of this file.
1 
19 #ifndef __OSUTILS__
20 #define __OSUTILS__
21 
22 #ifndef __MACTYPES__
23 #include <MacTypes.h>
24 #endif
25 
26 #ifndef __MIXEDMODE__
27 #include <MixedMode.h>
28 #endif
29 
30 /* HandToHand and other memory utilties were moved to MacMemory.h */
31 #ifndef __MACMEMORY__
32 #include <MacMemory.h>
33 #endif
34 
35 /* GetTrapAddress and other trap table utilties were moved to Patches.h */
36 #ifndef __PATCHES__
37 #include <Patches.h>
38 #endif
39 
40 /* Date and Time utilties were moved to DateTimeUtils.h */
41 #ifndef __DATETIMEUTILS__
42 #include <DateTimeUtils.h>
43 #endif
44 
45 #ifndef __CFSTRING__
46 #include <CFString.h>
47 #endif
48 
49 #if !TARGET_OS_MAC
50 #ifndef __ENDIAN__
51 #include <Endian.h>
52 #endif
53 
54 #endif /* !TARGET_OS_MAC */
55 
56 #if PRAGMA_ONCE
57 #pragma once
58 #endif
59 
60 #ifdef __cplusplus
61 extern "C"
62 {
63 #endif
64 
65 #if PRAGMA_IMPORT
66 #pragma import on
67 #endif
68 
69 #if PRAGMA_STRUCT_ALIGN
70 #pragma options align = mac68k
71 #elif PRAGMA_STRUCT_PACKPUSH
72 #pragma pack(push, 2)
73 #elif PRAGMA_STRUCT_PACK
74 #pragma pack(2)
75 #endif
76 
77  enum
78  {
79  useFree = 0,
80  useATalk = 1,
81  useAsync = 2,
82  useExtClk = 3, /*Externally clocked*/
83  useMIDI = 4
84  };
85 
86  enum
87  {
88  false32b = 0, /*24 bit addressing error*/
89  true32b = 1 /*32 bit addressing error*/
90  };
91 
92  enum
93  {
94  /* result types for RelString Call */
95  sortsBefore = -1, /*first string < second string*/
96  sortsEqual = 0, /*first string = second string*/
97  sortsAfter = 1 /*first string > second string*/
98  };
99 
100  enum
101  {
102  dummyType = 0,
103  vType = 1,
104  ioQType = 2,
105  drvQType = 3,
106  evType = 4,
107  fsQType = 5,
108  sIQType = 6,
109  dtQType = 7,
110  nmType = 8
111  };
112 
113  typedef SignedByte QTypes;
114  struct SysParmType
115  {
116  UInt8 valid;
117  UInt8 aTalkA;
118  UInt8 aTalkB;
119  UInt8 config;
120  short portA;
121  short portB;
122  long alarm;
123  short font;
124  short kbdPrint;
125  short volClik;
126  short misc;
127  };
128  typedef struct SysParmType SysParmType;
129  typedef SysParmType *SysPPtr;
130  struct QElem
131  {
132  struct QElem *qLink;
133  short qType;
134  short qData[1];
135  };
136  typedef struct QElem QElem;
137  typedef QElem *QElemPtr;
138 #if TARGET_OS_MAC
139  struct QHdr
140  {
141  volatile short qFlags;
142  volatile QElemPtr qHead;
143  volatile QElemPtr qTail;
144  };
145  typedef struct QHdr QHdr;
146  typedef QHdr *QHdrPtr;
147 #else
153 struct QHdr
154 {
155  volatile short qFlags;
156  short pad;
157  long MutexID;
158  volatile QElemPtr qHead;
159  volatile QElemPtr qTail;
160 };
161 typedef struct QHdr QHdr;
162 typedef QHdr *QHdrPtr;
163 #endif /* TARGET_OS_MAC */
164 
165  typedef CALLBACK_API_REGISTER68K(void, DeferredTaskProcPtr, (long dtParam));
166  typedef REGISTER_UPP_TYPE(DeferredTaskProcPtr) DeferredTaskUPP;
175  DeferredTaskUPP
176  NewDeferredTaskUPP(DeferredTaskProcPtr userRoutine);
177 #if !OPAQUE_UPP_TYPES
178  enum
179  {
180  uppDeferredTaskProcInfo = 0x0000B802
181  }; /* register no_return_value Func(4_bytes:A1) */
182 #ifdef __cplusplus
183  inline DeferredTaskUPP NewDeferredTaskUPP(DeferredTaskProcPtr userRoutine)
184  {
185  return (DeferredTaskUPP)NewRoutineDescriptor((ProcPtr)(userRoutine),
186  uppDeferredTaskProcInfo,
187  GetCurrentArchitecture());
188  }
189 #else
190 #define NewDeferredTaskUPP(userRoutine) \
191  (DeferredTaskUPP) \
192  NewRoutineDescriptor((ProcPtr)(userRoutine), uppDeferredTaskProcInfo, \
193  GetCurrentArchitecture())
194 #endif
195 #endif
196 
205  void
206  DisposeDeferredTaskUPP(DeferredTaskUPP userUPP);
207 #if !OPAQUE_UPP_TYPES
208 #ifdef __cplusplus
209  inline void DisposeDeferredTaskUPP(DeferredTaskUPP userUPP)
210  {
211  DisposeRoutineDescriptor((UniversalProcPtr)userUPP);
212  }
213 #else
214 #define DisposeDeferredTaskUPP(userUPP) DisposeRoutineDescriptor(userUPP)
215 #endif
216 #endif
217 
226 #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
227 #pragma parameter InvokeDeferredTaskUPP(__A1, __A0)
228 #endif
229  void
230  InvokeDeferredTaskUPP(long dtParam, DeferredTaskUPP userUPP);
231 #if !OPAQUE_UPP_TYPES && \
232  (!TARGET_OS_MAC || !TARGET_CPU_68K || TARGET_RT_MAC_CFM)
233 #ifdef __cplusplus
234  inline void InvokeDeferredTaskUPP(long dtParam, DeferredTaskUPP userUPP)
235  {
236  CALL_ONE_PARAMETER_UPP(userUPP, uppDeferredTaskProcInfo, dtParam);
237  }
238 #else
239 #define InvokeDeferredTaskUPP(dtParam, userUPP) \
240  CALL_ONE_PARAMETER_UPP((userUPP), uppDeferredTaskProcInfo, (dtParam))
241 #endif
242 #endif
243 
244 #if CALL_NOT_IN_CARBON || OLDROUTINENAMES
245 /* support for pre-Carbon UPP routines: New...Proc and Call...Proc */
246 #define NewDeferredTaskProc(userRoutine) NewDeferredTaskUPP(userRoutine)
247 #define CallDeferredTaskProc(userRoutine, dtParam) \
248  InvokeDeferredTaskUPP(dtParam, userRoutine)
249 #endif /* CALL_NOT_IN_CARBON */
250 
252  {
253  volatile QElemPtr qLink;
254  short qType;
255  volatile short dtFlags;
256  DeferredTaskUPP dtAddr;
257  long dtParam;
258  long dtReserved;
259  };
260  typedef struct DeferredTask DeferredTask;
261  typedef DeferredTask *DeferredTaskPtr;
262 #if TARGET_OS_MAC
263  struct MachineLocation
264  {
265  Fract latitude;
266  Fract longitude;
267  union
268  {
269  SInt8 dlsDelta; /* signed byte; daylight savings delta */
270  long gmtDelta; /* use low 24-bits only */
271  } u;
272  };
273  typedef struct MachineLocation MachineLocation;
274 #else
281 {
282  Fract latitude;
283  Fract longitude;
285  delta; /* high byte is daylight savings delta, low 24-bits is GMT delta */
286 };
287 typedef struct MachineLocation MachineLocation;
288 #endif /* TARGET_OS_MAC */
289 
298  Boolean
299  IsMetric(void);
300 
316  SysPPtr
317  GetSysPPtr(void);
318 
352 #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
353 #pragma parameter __D0 DTInstall(__A0)
354 #endif
355  OSErr
357 
358 #if TARGET_CPU_PPC || !TARGET_OS_MAC
359 #define GetMMUMode() ((SInt8)true32b)
360 #define SwapMMUMode(x) (*(SInt8 *)(x) = true32b)
361 #else
362 #if CALL_NOT_IN_CARBON
363 
377 SInt8 GetMMUMode(void);
378 
379 #endif /* CALL_NOT_IN_CARBON */
380 
381 #if CALL_NOT_IN_CARBON
382 
396 #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
397 #pragma parameter SwapMMUMode(__A0)
398 #endif
399 void SwapMMUMode(SInt8 *mode);
400 
401 #endif /* CALL_NOT_IN_CARBON */
402 
403 #endif
404 
435 #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
436 #pragma parameter Delay(__A0, __A1)
437 #endif
438  void
439  Delay(unsigned long numTicks, unsigned long *finalTicks);
440 
467  OSErr
468  WriteParam(void);
469 
516 #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
517 #pragma parameter Enqueue(__A0, __A1)
518 #endif
519  void
520  Enqueue(QElemPtr qElement, QHdrPtr qHeader);
521 
551 #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
552 #pragma parameter __D0 Dequeue(__A0, __A1)
553 #endif
554  OSErr
555  Dequeue(QElemPtr qElement, QHdrPtr qHeader);
556 
571 #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
572 #pragma parameter __D0 SetCurrentA5
573 #endif
574  long
576 
590 #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
591 #pragma parameter __D0 SetA5(__D0)
592 #endif
593  long
594  SetA5(long newA5);
595 
617 #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
618 #pragma parameter __D0 InitUtil
619 #endif
620  OSErr
621  InitUtil(void);
622 
623 #if !TARGET_CPU_68K
632  void
633  MakeDataExecutable(void *baseAddress, unsigned long length);
634 
635 #endif /* !TARGET_CPU_68K */
636 
637 #if TARGET_CPU_68K
638 #if CALL_NOT_IN_CARBON
639 
659  Boolean
660  SwapInstructionCache(Boolean cacheEnable);
661 
680  Boolean
681  SwapDataCache(Boolean cacheEnable);
682 
683 #endif /* CALL_NOT_IN_CARBON */
684 
685 #if CALL_NOT_IN_CARBON
686 
735  void
736  FlushInstructionCache(void);
737 
773  void
774  FlushDataCache(void);
775 
784  void
785  FlushCodeCache(void);
786 
787 #endif /* CALL_NOT_IN_CARBON */
788 
789 #endif /* TARGET_CPU_68K */
790 
791 #if CALL_NOT_IN_CARBON
800 #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
801 #pragma parameter __D0 FlushCodeCacheRange(__A0, __A1)
802 #endif
803  OSErr
804  FlushCodeCacheRange(void *address, unsigned long count);
805 
806 #endif /* CALL_NOT_IN_CARBON */
807 
820 #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
821 #pragma parameter ReadLocation(__A0)
822 #endif
823  void
825 
838 #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
839 #pragma parameter WriteLocation(__A0)
840 #endif
841  void
843 
852  UInt32
853  TickCount(void);
854 
863  CFStringRef
864  CSCopyUserName(Boolean useShortName);
865 
874  CFStringRef
876 
877 #if OLDROUTINENAMES
878 #define IUMetric() IsMetric()
879 #endif /* OLDROUTINENAMES */
880 
884  /* Environs Equates */
885  enum
886  {
887  curSysEnvVers = 2 /*Updated to equal latest SysEnvirons version*/
888  };
889 
890  struct SysEnvRec
891  {
892  short environsVersion;
893  short machineType;
894  short systemVersion;
895  short processor;
896  Boolean hasFPU;
897  Boolean hasColorQD;
898  short keyBoardType;
899  short atDrvrVersNum;
900  short sysVRefNum;
901  };
902  typedef struct SysEnvRec SysEnvRec;
903  enum
904  {
905  /* Machine Types */
906  envMac = -1,
907  envXL = -2,
908  envMachUnknown = 0,
909  env512KE = 1,
910  envMacPlus = 2,
911  envSE = 3,
912  envMacII = 4,
913  envMacIIx = 5,
914  envMacIIcx = 6,
915  envSE30 = 7,
916  envPortable = 8,
917  envMacIIci = 9,
918  envMacIIfx = 11
919  };
920 
921  enum
922  {
923  /* CPU types */
924  envCPUUnknown = 0,
925  env68000 = 1,
926  env68010 = 2,
927  env68020 = 3,
928  env68030 = 4,
929  env68040 = 5
930  };
931 
932  enum
933  {
934  /* Keyboard types */
935  envUnknownKbd = 0,
936  envMacKbd = 1,
937  envMacAndPad = 2,
938  envMacPlusKbd = 3,
939  envAExtendKbd = 4,
940  envStandADBKbd = 5,
941  envPrtblADBKbd = 6,
942  envPrtblISOKbd = 7,
943  envStdISOADBKbd = 8,
944  envExtISOADBKbd = 9
945  };
946 
947 #if CALL_NOT_IN_CARBON
948 
997 #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
998 #pragma parameter __D0 SysEnvirons(__D0, __A0)
999 #endif
1000  OSErr
1001  SysEnvirons(short versionRequested, SysEnvRec *theWorld);
1002 
1003 #endif /* CALL_NOT_IN_CARBON */
1004 
1005 #if PRAGMA_STRUCT_ALIGN
1006 #pragma options align = reset
1007 #elif PRAGMA_STRUCT_PACKPUSH
1008 #pragma pack(pop)
1009 #elif PRAGMA_STRUCT_PACK
1010 #pragma pack()
1011 #endif
1012 
1013 #ifdef PRAGMA_IMPORT_OFF
1014 #pragma import off
1015 #elif PRAGMA_IMPORT
1016 #pragma import reset
1017 #endif
1018 
1019 #ifdef __cplusplus
1020 }
1021 #endif
1022 
1023 #endif /* __OSUTILS__ */
1024 * /*/*/ * /*/*/ * /*/*/ * /*/*/ * /*/*/ * /*/*/
International Date and Time Interfaces (previously in TextUtils)
QuickTime Interfaces.
long BigEndianLong
Definition: Endian.h:549
Memory Manager Interfaces.
Basic Macintosh data types.
unsigned char Boolean
Definition: MacTypes.h:318
Mixed Mode Manager Interfaces.
void DisposeRoutineDescriptor(UniversalProcPtr theUPP)
UniversalProcPtr NewRoutineDescriptor(ProcPtr theProc, ProcInfoType theProcInfo, ISAType theISA)
Boolean IsMetric(void)
long SetCurrentA5(void)
Get the current value of A5.
OSErr Dequeue(QElemPtr qElement, QHdrPtr qHeader)
Remove an element from a queue.
UInt32 TickCount(void)
OSErr FlushCodeCacheRange(void *address, unsigned long count)
SysPPtr GetSysPPtr(void)
Get address of start of Parameter RAM data.
OSErr SysEnvirons(short versionRequested, SysEnvRec *theWorld)
Get ROM version, machine type, system version, etc.
void Enqueue(QElemPtr qElement, QHdrPtr qHeader)
Add an element to the end of a queue.
OSErr WriteParam(void)
Write Parameter RAM data to non-volatile RAM.
void DisposeDeferredTaskUPP(DeferredTaskUPP userUPP)
void Delay(unsigned long numTicks, unsigned long *finalTicks)
Pause execution for a specified interval.
OSErr DTInstall(DeferredTaskPtr dtTaskPtr)
Add a task to the deferred task queue.
DeferredTaskUPP NewDeferredTaskUPP(DeferredTaskProcPtr userRoutine)
OSErr InitUtil(void)
Copy Parameter RAM to low-memory variables.
void ReadLocation(MachineLocation *loc)
Where is this Macintosh and what time is it?
CFStringRef CSCopyMachineName(void)
void MakeDataExecutable(void *baseAddress, unsigned long length)
long SetA5(long newA5)
Set the current value of A5.
CFStringRef CSCopyUserName(Boolean useShortName)
void InvokeDeferredTaskUPP(long dtParam, DeferredTaskUPP userUPP)
void WriteLocation(const MachineLocation *loc)
Store machine's location and time zone data in RAM.
Patch Manager Interfaces.
typedef CALLBACK_API_REGISTER68K(void, SIInterruptProcPtr,(SPBPtr inParamPtr, Ptr dataBuffer, short peakAmplitude, long sampleSize))
typedef REGISTER_UPP_TYPE(HighHookProcPtr) HighHookUPP
Definition: OSUtils.h:252
Definition: OSUtils.h:281
Definition: OSUtils.h:131
Definition: OSUtils.h:154
Definition: OSUtils.h:891
Definition: OSUtils.h:115