|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.1 (the "License"). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License.
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24:
25: /*
26: File: OSUtils.h
27:
28: Contains: OS Utilities Interfaces.
29:
30: Version: Mac OS 8
31:
32: DRI: Jerry Godes
33:
34: Copyright: � 1985-1998 by Apple Computer, Inc., all rights reserved
35:
36: Warning: *** APPLE INTERNAL USE ONLY ***
37: This file may contain unreleased API's
38:
39: BuildInfo: Built by: Naga Pappireddi
40: With Interfacer: 3.0d9 (PowerPC native)
41: From: OSUtils.i
42: Revision: 63
43: Dated: 6/19/98
44: Last change by: ngk
45: Last comment: [2244553] Add glueIgnore to Read/WriteLocation because they are
46:
47: Bugs: Report bugs to Radar component "System Interfaces", "Latest"
48: List the version information (from above) in the Problem Description.
49:
50: */
51: #ifndef __OSUTILS__
52: #define __OSUTILS__
53:
54: #ifndef __MACTYPES__
55: //#include <MacTypes.h>
56: #endif
57: #ifndef __MIXEDMODE__
58: //#include <MixedMode.h>
59: #endif
60: /* HandToHand and other memory utilties were moved to MacMemory.h */
61: #ifndef __MACMEMORY__
62: //#include <MacMemory.h>
63: #endif
64: /* GetTrapAddress and other trap table utilties were moved to Patches.h */
65: #ifndef __PATCHES__
66: //#include <Patches.h>
67: #endif
68: /* Date and Time utilties were moved to DateTimeUtils.h */
69: #ifndef __DATETIMEUTILS__
70: //#include <DateTimeUtils.h>
71: #endif
72: #if !TARGET_OS_MAC
73: #ifndef __ENDIAN__
74: //#include <Endian.h>
75: #endif
76: #endif /* !TARGET_OS_MAC */
77:
78:
79:
80: #if PRAGMA_ONCE
81: #pragma once
82: #endif
83:
84: #ifdef __cplusplus
85: extern "C" {
86: #endif
87:
88: #if PRAGMA_IMPORT
89: #pragma import on
90: #endif
91: /*
92: #if PRAGMA_STRUCT_ALIGN
93: #pragma options align=mac68k
94: #elif PRAGMA_STRUCT_PACKPUSH
95: #pragma pack(push, 2)
96: #elif PRAGMA_STRUCT_PACK
97: #pragma pack(2)
98: #endif
99: */
100:
101: enum {
102: useFree = 0,
103: useATalk = 1,
104: useAsync = 2,
105: useExtClk = 3, /*Externally clocked*/
106: useMIDI = 4
107: };
108:
109:
110: enum {
111: false32b = 0, /*24 bit addressing error*/
112: true32b = 1 /*32 bit addressing error*/
113: };
114:
115:
116: enum {
117: /* result types for RelString Call */
118: sortsBefore = -1, /*first string < second string*/
119: sortsEqual = 0, /*first string = second string*/
120: sortsAfter = 1 /*first string > second string*/
121: };
122:
123:
124: enum {
125: dummyType = 0,
126: vType = 1,
127: ioQType = 2,
128: drvQType = 3,
129: evType = 4,
130: fsQType = 5,
131: sIQType = 6,
132: dtQType = 7,
133: nmType = 8
134: };
135:
136: typedef SignedByte QTypes;
137:
138: struct SysParmType {
139: UInt8 valid;
140: UInt8 aTalkA;
141: UInt8 aTalkB;
142: UInt8 config;
143: short portA;
144: short portB;
145: long alarm;
146: short font;
147: short kbdPrint;
148: short volClik;
149: short misc;
150: };
151: typedef struct SysParmType SysParmType;
152:
153: typedef SysParmType * SysPPtr;
154:
155: struct QElem {
156: struct QElem * qLink;
157: short qType;
158: short qData[1];
159: };
160: typedef struct QElem QElem;
161: typedef QElem * QElemPtr;
162: #if TARGET_OS_MAC
163:
164: struct QHdr {
165: short qFlags;
166: QElemPtr qHead;
167: QElemPtr qTail;
168: };
169: typedef struct QHdr QHdr;
170: typedef QHdr * QHdrPtr;
171: #else
172: /*
173: QuickTime 3.0:
174: this version of QHdr contains the Mutex necessary for
175: non-mac non-interrupt code
176: */
177:
178: struct QHdr {
179: short qFlags;
180: short pad;
181: long MutexID;
182: QElemPtr qHead;
183: QElemPtr qTail;
184: };
185: typedef struct QHdr QHdr;
186: typedef QHdr * QHdrPtr;
187: #endif /* TARGET_OS_MAC */
188:
189:
190:
191: typedef CALLBACK_API( void , DeferredTaskProcPtr )(long dtParam);
192: /*
193: WARNING: DeferredTaskProcPtr uses register based parameters under classic 68k
194: and cannot be written in a high-level language without
195: the help of mixed mode or assembly glue.
196: */
197: //nagatypedef REGISTER_UPP_TYPE(DeferredTaskProcPtr) DeferredTaskUPP;
198: enum { uppDeferredTaskProcInfo = 0x0000B802 }; /* register no_return_value Func(4_bytes:A1) */
199: #if MIXEDMODE_CALLS_ARE_FUNCTIONS
200: EXTERN_API(DeferredTaskUPP)
201: NewDeferredTaskProc (DeferredTaskProcPtr userRoutine);
202: EXTERN_API(void)
203: CallDeferredTaskProc (DeferredTaskUPP userRoutine,
204: long dtParam);
205: #else
206: #define NewDeferredTaskProc(userRoutine) (DeferredTaskUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDeferredTaskProcInfo, GetCurrentArchitecture())
207: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
208: #pragma parameter CallDeferredTaskProc(__A0, __A1)
209: void CallDeferredTaskProc(DeferredTaskUPP routine, long dtParam) = 0x4E90;
210: #else
211: #define CallDeferredTaskProc(userRoutine, dtParam) CALL_ONE_PARAMETER_UPP((userRoutine), uppDeferredTaskProcInfo, (dtParam))
212: #endif
213: #endif
214:
215: struct DeferredTask {
216: QElemPtr qLink;
217: short qType;
218: short dtFlags;
219: //naga DeferredTaskUPP dtAddr;
220: long dtParam;
221: long dtReserved;
222: };
223: typedef struct DeferredTask DeferredTask;
224: typedef DeferredTask * DeferredTaskPtr;
225: #if TARGET_OS_MAC
226:
227: struct MachineLocation {
228: Fract latitude;
229: Fract longitude;
230: union {
231: SInt8 dlsDelta; /* signed byte; daylight savings delta */
232: long gmtDelta; /* use low 24-bits only */
233: } u;
234: };
235: typedef struct MachineLocation MachineLocation;
236: #else
237: /*
238: QuickTime 3.0:
239: Alignment of MachineLocation is weird. The union above used for delta
240: tends not to work on non-Mac compilers.
241: */
242: //naga
243: typedef long BigEndianLong;
244: struct MachineLocation {
245: Fract latitude;
246: Fract longitude;
247: BigEndianLong delta; /* high byte is daylight savings delta, low 24-bits is GMT delta */
248: };
249: typedef struct MachineLocation MachineLocation;
250: #endif /* TARGET_OS_MAC */
251:
252: EXTERN_API( Boolean )
253: IsMetric (void) THREEWORDINLINE(0x3F3C, 0x0004, 0xA9ED);
254:
255: EXTERN_API( SysPPtr )
256: GetSysPPtr (void) THREEWORDINLINE(0x2EBC, 0x0000, 0x01F8);
257:
258:
259: /*
260: NOTE: SysBeep() has been moved to Sound.h.
261: We could not automatically #include Sound.h in this file
262: because Sound.h indirectly #include's OSUtils.h which
263: would make a circular include.
264: */
265: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
266: #pragma parameter __D0 DTInstall(__A0)
267: #endif
268: EXTERN_API( OSErr )
269: DTInstall (DeferredTaskPtr dtTaskPtr) ONEWORDINLINE(0xA082);
270:
271:
272:
273: #if TARGET_CPU_PPC || !TARGET_OS_MAC
274: #define GetMMUMode() ((SInt8)true32b)
275: #define SwapMMUMode(x) (*(SInt8*)(x) = true32b)
276: #else
277: EXTERN_API( SInt8 )
278: GetMMUMode (void) TWOWORDINLINE(0x1EB8, 0x0CB2);
279:
280: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
281: #pragma parameter SwapMMUMode(__A0)
282: #endif
283: EXTERN_API( void )
284: SwapMMUMode (SInt8 * mode) THREEWORDINLINE(0x1010, 0xA05D, 0x1080);
285:
286: #endif
287: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
288: #pragma parameter Delay(__A0, __A1)
289: #endif
290: EXTERN_API( void )
291: Delay (unsigned long numTicks,
292: unsigned long * finalTicks) TWOWORDINLINE(0xA03B, 0x2280);
293:
294:
295: EXTERN_API( OSErr )
296: WriteParam (void);
297:
298: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
299: #pragma parameter Enqueue(__A0, __A1)
300: #endif
301: EXTERN_API( void )
302: Enqueue (QElemPtr qElement,
303: QHdrPtr qHeader) ONEWORDINLINE(0xA96F);
304:
305: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
306: #pragma parameter __D0 Dequeue(__A0, __A1)
307: #endif
308: EXTERN_API( OSErr )
309: Dequeue (QElemPtr qElement,
310: QHdrPtr qHeader) ONEWORDINLINE(0xA96E);
311:
312: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
313: #pragma parameter __D0 SetCurrentA5
314: #endif
315: EXTERN_API( long )
316: SetCurrentA5 (void) THREEWORDINLINE(0x200D, 0x2A78, 0x0904);
317:
318: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
319: #pragma parameter __D0 SetA5(__D0)
320: #endif
321: EXTERN_API( long )
322: SetA5 (long newA5) ONEWORDINLINE(0xC18D);
323:
324: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
325: #pragma parameter __D0 InitUtil
326: #endif
327: EXTERN_API( OSErr )
328: InitUtil (void) ONEWORDINLINE(0xA03F);
329:
330:
331: #if TARGET_CPU_PPC
332: EXTERN_API( void )
333: MakeDataExecutable (void * baseAddress,
334: unsigned long length);
335:
336: #endif /* TARGET_CPU_PPC */
337:
338: #if TARGET_CPU_68K
339: EXTERN_API( Boolean )
340: SwapInstructionCache (Boolean cacheEnable);
341:
342: EXTERN_API( void )
343: FlushInstructionCache (void) TWOWORDINLINE(0x7001, 0xA098);
344:
345: EXTERN_API( Boolean )
346: SwapDataCache (Boolean cacheEnable);
347:
348: EXTERN_API( void )
349: FlushDataCache (void) TWOWORDINLINE(0x7003, 0xA098);
350:
351: EXTERN_API( void )
352: FlushCodeCache (void) ONEWORDINLINE(0xA0BD);
353:
354: #endif /* TARGET_CPU_68K */
355:
356: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
357: #pragma parameter __D0 FlushCodeCacheRange(__A0, __A1)
358: #endif
359: EXTERN_API( OSErr )
360: FlushCodeCacheRange (void * address,
361: unsigned long count) TWOWORDINLINE(0x7009, 0xA098);
362:
363: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
364: #pragma parameter ReadLocation(__A0)
365: #endif
366: EXTERN_API( void )
367: ReadLocation (MachineLocation * loc) FOURWORDINLINE(0x203C, 0x000C, 0x00E4, 0xA051);
368:
369:
370: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
371: #pragma parameter WriteLocation(__A0)
372: #endif
373: EXTERN_API( void )
374: WriteLocation (const MachineLocation * loc) FOURWORDINLINE(0x203C, 0x000C, 0x00E4, 0xA052);
375:
376:
377:
378: #if OLDROUTINENAMES
379: #define IUMetric() IsMetric()
380: #endif /* OLDROUTINENAMES */
381:
382: /*
383: NOTE: SysEnvirons is obsolete. You should be using Gestalt.
384: */
385: /* Environs Equates */
386:
387: enum {
388: curSysEnvVers = 2 /*Updated to equal latest SysEnvirons version*/
389: };
390:
391:
392: struct SysEnvRec {
393: short environsVersion;
394: short machineType;
395: short systemVersion;
396: short processor;
397: Boolean hasFPU;
398: Boolean hasColorQD;
399: short keyBoardType;
400: short atDrvrVersNum;
401: short sysVRefNum;
402: };
403: typedef struct SysEnvRec SysEnvRec;
404:
405: enum {
406: /* Machine Types */
407: envMac = -1,
408: envXL = -2,
409: envMachUnknown = 0,
410: env512KE = 1,
411: envMacPlus = 2,
412: envSE = 3,
413: envMacII = 4,
414: envMacIIx = 5,
415: envMacIIcx = 6,
416: envSE30 = 7,
417: envPortable = 8,
418: envMacIIci = 9,
419: envMacIIfx = 11
420: };
421:
422:
423: enum {
424: /* CPU types */
425: envCPUUnknown = 0,
426: env68000 = 1,
427: env68010 = 2,
428: env68020 = 3,
429: env68030 = 4,
430: env68040 = 5
431: };
432:
433:
434: enum {
435: /* Keyboard types */
436: envUnknownKbd = 0,
437: envMacKbd = 1,
438: envMacAndPad = 2,
439: envMacPlusKbd = 3,
440: envAExtendKbd = 4,
441: envStandADBKbd = 5,
442: envPrtblADBKbd = 6,
443: envPrtblISOKbd = 7,
444: envStdISOADBKbd = 8,
445: envExtISOADBKbd = 9
446: };
447:
448: #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
449: #pragma parameter __D0 SysEnvirons(__D0, __A0)
450: #endif
451: EXTERN_API( OSErr )
452: SysEnvirons (short versionRequested,
453: SysEnvRec * theWorld) ONEWORDINLINE(0xA090);
454:
455:
456:
457:
458:
459:
460: /*naga
461: #if PRAGMA_STRUCT_ALIGN
462: #pragma options align=reset
463: #elif PRAGMA_STRUCT_PACKPUSH
464: #pragma pack(pop)
465: #elif PRAGMA_STRUCT_PACK
466: #pragma pack()
467: #endif
468:
469: #ifdef PRAGMA_IMPORT_OFF
470: #pragma import off
471: #elif PRAGMA_IMPORT
472: #pragma import reset
473: #endif
474:
475: #ifdef __cplusplus
476: }
477: #endif
478: */
479: #endif /* __OSUTILS__ */
480:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.