summaryrefslogtreecommitdiff
path: root/common/quicktime_win32/Threads.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/quicktime_win32/Threads.h')
-rw-r--r--common/quicktime_win32/Threads.h890
1 files changed, 890 insertions, 0 deletions
diff --git a/common/quicktime_win32/Threads.h b/common/quicktime_win32/Threads.h
new file mode 100644
index 0000000..913d7ac
--- /dev/null
+++ b/common/quicktime_win32/Threads.h
@@ -0,0 +1,890 @@
+/*
+ File: Threads.h
+
+ Contains: Thread Manager Interfaces.
+
+ Version: QuickTime 7.3
+
+ Copyright: (c) 2007 (c) 1991-2001 by Apple Computer, Inc., all rights reserved.
+
+ Bugs?: For bug reports, consult the following page on
+ the World Wide Web:
+
+ http://developer.apple.com/bugreporter/
+
+*/
+#ifndef __THREADS__
+#define __THREADS__
+
+#ifndef __MACTYPES__
+#include <MacTypes.h>
+#endif
+
+#ifndef __MIXEDMODE__
+#include <MixedMode.h>
+#endif
+
+#ifndef __MACERRORS__
+#include <MacErrors.h>
+#endif
+
+
+
+
+#if PRAGMA_ONCE
+#pragma once
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if PRAGMA_IMPORT
+#pragma import on
+#endif
+
+#if PRAGMA_STRUCT_ALIGN
+ #pragma options align=mac68k
+#elif PRAGMA_STRUCT_PACKPUSH
+ #pragma pack(push, 2)
+#elif PRAGMA_STRUCT_PACK
+ #pragma pack(2)
+#endif
+
+/* Thread states*/
+typedef UInt16 ThreadState;
+enum {
+ kReadyThreadState = 0,
+ kStoppedThreadState = 1,
+ kRunningThreadState = 2
+};
+
+/* Error codes have been moved to Errors.(pah)*/
+
+/* Thread environment characteristics*/
+typedef void * ThreadTaskRef;
+/* Thread characteristics*/
+typedef UInt32 ThreadStyle;
+enum {
+ kCooperativeThread = 1L << 0,
+ kPreemptiveThread = 1L << 1
+};
+
+/* Thread identifiers*/
+typedef UInt32 ThreadID;
+enum {
+ kNoThreadID = 0,
+ kCurrentThreadID = 1,
+ kApplicationThreadID = 2
+};
+
+/* Options when creating a thread*/
+typedef UInt32 ThreadOptions;
+enum {
+ kNewSuspend = (1 << 0),
+ kUsePremadeThread = (1 << 1),
+ kCreateIfNeeded = (1 << 2),
+ kFPUNotNeeded = (1 << 3),
+ kExactMatchThread = (1 << 4)
+};
+
+/* Information supplied to the custom scheduler*/
+struct SchedulerInfoRec {
+ UInt32 InfoRecSize;
+ ThreadID CurrentThreadID;
+ ThreadID SuggestedThreadID;
+ ThreadID InterruptedCoopThreadID;
+};
+typedef struct SchedulerInfoRec SchedulerInfoRec;
+typedef SchedulerInfoRec * SchedulerInfoRecPtr;
+
+/*
+ The following ProcPtrs cannot be interchanged with UniversalProcPtrs because
+ of differences between 680x0 and PowerPC runtime architectures with regard to
+ the implementation of the Thread Manager.
+ */
+typedef void * voidPtr;
+/* Prototype for thread's entry (main) routine*/
+typedef CALLBACK_API( voidPtr , ThreadEntryProcPtr )(void * threadParam);
+/* Prototype for custom thread scheduler routine*/
+typedef CALLBACK_API( ThreadID , ThreadSchedulerProcPtr )(SchedulerInfoRecPtr schedulerInfo);
+/* Prototype for custom thread switcher routine*/
+typedef CALLBACK_API( void , ThreadSwitchProcPtr )(ThreadID threadBeingSwitched, void *switchProcParam);
+/* Prototype for thread termination notification routine*/
+typedef CALLBACK_API( void , ThreadTerminationProcPtr )(ThreadID threadTerminated, void *terminationProcParam);
+/* Prototype for debugger NewThread notification*/
+typedef CALLBACK_API( void , DebuggerNewThreadProcPtr )(ThreadID threadCreated);
+/* Prototype for debugger DisposeThread notification*/
+typedef CALLBACK_API( void , DebuggerDisposeThreadProcPtr )(ThreadID threadDeleted);
+/* Prototype for debugger schedule notification*/
+typedef CALLBACK_API( ThreadID , DebuggerThreadSchedulerProcPtr )(SchedulerInfoRecPtr schedulerInfo);
+typedef TVECTOR_UPP_TYPE(ThreadEntryProcPtr) ThreadEntryUPP;
+typedef TVECTOR_UPP_TYPE(ThreadSchedulerProcPtr) ThreadSchedulerUPP;
+typedef TVECTOR_UPP_TYPE(ThreadSwitchProcPtr) ThreadSwitchUPP;
+typedef TVECTOR_UPP_TYPE(ThreadTerminationProcPtr) ThreadTerminationUPP;
+typedef TVECTOR_UPP_TYPE(DebuggerNewThreadProcPtr) DebuggerNewThreadUPP;
+typedef TVECTOR_UPP_TYPE(DebuggerDisposeThreadProcPtr) DebuggerDisposeThreadUPP;
+typedef TVECTOR_UPP_TYPE(DebuggerThreadSchedulerProcPtr) DebuggerThreadSchedulerUPP;
+/*
+ * NewThreadEntryUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( ThreadEntryUPP )
+NewThreadEntryUPP(ThreadEntryProcPtr userRoutine);
+#if !OPAQUE_UPP_TYPES
+ enum { uppThreadEntryProcInfo = 0x000000F0 }; /* pascal 4_bytes Func(4_bytes) */
+ #ifdef __cplusplus
+ inline DEFINE_API_C(ThreadEntryUPP) NewThreadEntryUPP(ThreadEntryProcPtr userRoutine) { return userRoutine; }
+ #else
+ #define NewThreadEntryUPP(userRoutine) (userRoutine)
+ #endif
+#endif
+
+/*
+ * NewThreadSchedulerUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( ThreadSchedulerUPP )
+NewThreadSchedulerUPP(ThreadSchedulerProcPtr userRoutine);
+#if !OPAQUE_UPP_TYPES
+ enum { uppThreadSchedulerProcInfo = 0x000000F0 }; /* pascal 4_bytes Func(4_bytes) */
+ #ifdef __cplusplus
+ inline DEFINE_API_C(ThreadSchedulerUPP) NewThreadSchedulerUPP(ThreadSchedulerProcPtr userRoutine) { return userRoutine; }
+ #else
+ #define NewThreadSchedulerUPP(userRoutine) (userRoutine)
+ #endif
+#endif
+
+/*
+ * NewThreadSwitchUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( ThreadSwitchUPP )
+NewThreadSwitchUPP(ThreadSwitchProcPtr userRoutine);
+#if !OPAQUE_UPP_TYPES
+ enum { uppThreadSwitchProcInfo = 0x000003C0 }; /* pascal no_return_value Func(4_bytes, 4_bytes) */
+ #ifdef __cplusplus
+ inline DEFINE_API_C(ThreadSwitchUPP) NewThreadSwitchUPP(ThreadSwitchProcPtr userRoutine) { return userRoutine; }
+ #else
+ #define NewThreadSwitchUPP(userRoutine) (userRoutine)
+ #endif
+#endif
+
+/*
+ * NewThreadTerminationUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( ThreadTerminationUPP )
+NewThreadTerminationUPP(ThreadTerminationProcPtr userRoutine);
+#if !OPAQUE_UPP_TYPES
+ enum { uppThreadTerminationProcInfo = 0x000003C0 }; /* pascal no_return_value Func(4_bytes, 4_bytes) */
+ #ifdef __cplusplus
+ inline DEFINE_API_C(ThreadTerminationUPP) NewThreadTerminationUPP(ThreadTerminationProcPtr userRoutine) { return userRoutine; }
+ #else
+ #define NewThreadTerminationUPP(userRoutine) (userRoutine)
+ #endif
+#endif
+
+/*
+ * NewDebuggerNewThreadUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( DebuggerNewThreadUPP )
+NewDebuggerNewThreadUPP(DebuggerNewThreadProcPtr userRoutine);
+#if !OPAQUE_UPP_TYPES
+ enum { uppDebuggerNewThreadProcInfo = 0x000000C0 }; /* pascal no_return_value Func(4_bytes) */
+ #ifdef __cplusplus
+ inline DEFINE_API_C(DebuggerNewThreadUPP) NewDebuggerNewThreadUPP(DebuggerNewThreadProcPtr userRoutine) { return userRoutine; }
+ #else
+ #define NewDebuggerNewThreadUPP(userRoutine) (userRoutine)
+ #endif
+#endif
+
+/*
+ * NewDebuggerDisposeThreadUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( DebuggerDisposeThreadUPP )
+NewDebuggerDisposeThreadUPP(DebuggerDisposeThreadProcPtr userRoutine);
+#if !OPAQUE_UPP_TYPES
+ enum { uppDebuggerDisposeThreadProcInfo = 0x000000C0 }; /* pascal no_return_value Func(4_bytes) */
+ #ifdef __cplusplus
+ inline DEFINE_API_C(DebuggerDisposeThreadUPP) NewDebuggerDisposeThreadUPP(DebuggerDisposeThreadProcPtr userRoutine) { return userRoutine; }
+ #else
+ #define NewDebuggerDisposeThreadUPP(userRoutine) (userRoutine)
+ #endif
+#endif
+
+/*
+ * NewDebuggerThreadSchedulerUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( DebuggerThreadSchedulerUPP )
+NewDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerProcPtr userRoutine);
+#if !OPAQUE_UPP_TYPES
+ enum { uppDebuggerThreadSchedulerProcInfo = 0x000000F0 }; /* pascal 4_bytes Func(4_bytes) */
+ #ifdef __cplusplus
+ inline DEFINE_API_C(DebuggerThreadSchedulerUPP) NewDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerProcPtr userRoutine) { return userRoutine; }
+ #else
+ #define NewDebuggerThreadSchedulerUPP(userRoutine) (userRoutine)
+ #endif
+#endif
+
+/*
+ * DisposeThreadEntryUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+DisposeThreadEntryUPP(ThreadEntryUPP userUPP);
+#if !OPAQUE_UPP_TYPES
+ #ifdef __cplusplus
+ inline DEFINE_API_C(void) DisposeThreadEntryUPP(ThreadEntryUPP) {}
+ #else
+ #define DisposeThreadEntryUPP(userUPP)
+ #endif
+#endif
+
+/*
+ * DisposeThreadSchedulerUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+DisposeThreadSchedulerUPP(ThreadSchedulerUPP userUPP);
+#if !OPAQUE_UPP_TYPES
+ #ifdef __cplusplus
+ inline DEFINE_API_C(void) DisposeThreadSchedulerUPP(ThreadSchedulerUPP) {}
+ #else
+ #define DisposeThreadSchedulerUPP(userUPP)
+ #endif
+#endif
+
+/*
+ * DisposeThreadSwitchUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+DisposeThreadSwitchUPP(ThreadSwitchUPP userUPP);
+#if !OPAQUE_UPP_TYPES
+ #ifdef __cplusplus
+ inline DEFINE_API_C(void) DisposeThreadSwitchUPP(ThreadSwitchUPP) {}
+ #else
+ #define DisposeThreadSwitchUPP(userUPP)
+ #endif
+#endif
+
+/*
+ * DisposeThreadTerminationUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+DisposeThreadTerminationUPP(ThreadTerminationUPP userUPP);
+#if !OPAQUE_UPP_TYPES
+ #ifdef __cplusplus
+ inline DEFINE_API_C(void) DisposeThreadTerminationUPP(ThreadTerminationUPP) {}
+ #else
+ #define DisposeThreadTerminationUPP(userUPP)
+ #endif
+#endif
+
+/*
+ * DisposeDebuggerNewThreadUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+DisposeDebuggerNewThreadUPP(DebuggerNewThreadUPP userUPP);
+#if !OPAQUE_UPP_TYPES
+ #ifdef __cplusplus
+ inline DEFINE_API_C(void) DisposeDebuggerNewThreadUPP(DebuggerNewThreadUPP) {}
+ #else
+ #define DisposeDebuggerNewThreadUPP(userUPP)
+ #endif
+#endif
+
+/*
+ * DisposeDebuggerDisposeThreadUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+DisposeDebuggerDisposeThreadUPP(DebuggerDisposeThreadUPP userUPP);
+#if !OPAQUE_UPP_TYPES
+ #ifdef __cplusplus
+ inline DEFINE_API_C(void) DisposeDebuggerDisposeThreadUPP(DebuggerDisposeThreadUPP) {}
+ #else
+ #define DisposeDebuggerDisposeThreadUPP(userUPP)
+ #endif
+#endif
+
+/*
+ * DisposeDebuggerThreadSchedulerUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+DisposeDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerUPP userUPP);
+#if !OPAQUE_UPP_TYPES
+ #ifdef __cplusplus
+ inline DEFINE_API_C(void) DisposeDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerUPP) {}
+ #else
+ #define DisposeDebuggerThreadSchedulerUPP(userUPP)
+ #endif
+#endif
+
+/*
+ * InvokeThreadEntryUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( voidPtr )
+InvokeThreadEntryUPP(
+ void * threadParam,
+ ThreadEntryUPP userUPP);
+#if !OPAQUE_UPP_TYPES
+ #ifdef __cplusplus
+ inline DEFINE_API_C(voidPtr) InvokeThreadEntryUPP(void * threadParam, ThreadEntryUPP userUPP) { return (*userUPP)(threadParam); }
+ #else
+ #define InvokeThreadEntryUPP(threadParam, userUPP) (*userUPP)(threadParam)
+ #endif
+#endif
+
+/*
+ * InvokeThreadSchedulerUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( ThreadID )
+InvokeThreadSchedulerUPP(
+ SchedulerInfoRecPtr schedulerInfo,
+ ThreadSchedulerUPP userUPP);
+#if !OPAQUE_UPP_TYPES
+ #ifdef __cplusplus
+ inline DEFINE_API_C(ThreadID) InvokeThreadSchedulerUPP(SchedulerInfoRecPtr schedulerInfo, ThreadSchedulerUPP userUPP) { return (*userUPP)(schedulerInfo); }
+ #else
+ #define InvokeThreadSchedulerUPP(schedulerInfo, userUPP) (*userUPP)(schedulerInfo)
+ #endif
+#endif
+
+/*
+ * InvokeThreadSwitchUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+InvokeThreadSwitchUPP(
+ ThreadID threadBeingSwitched,
+ void * switchProcParam,
+ ThreadSwitchUPP userUPP);
+#if !OPAQUE_UPP_TYPES
+ #ifdef __cplusplus
+ inline DEFINE_API_C(void) InvokeThreadSwitchUPP(ThreadID threadBeingSwitched, void * switchProcParam, ThreadSwitchUPP userUPP) { (*userUPP)(threadBeingSwitched, switchProcParam); }
+ #else
+ #define InvokeThreadSwitchUPP(threadBeingSwitched, switchProcParam, userUPP) (*userUPP)(threadBeingSwitched, switchProcParam)
+ #endif
+#endif
+
+/*
+ * InvokeThreadTerminationUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+InvokeThreadTerminationUPP(
+ ThreadID threadTerminated,
+ void * terminationProcParam,
+ ThreadTerminationUPP userUPP);
+#if !OPAQUE_UPP_TYPES
+ #ifdef __cplusplus
+ inline DEFINE_API_C(void) InvokeThreadTerminationUPP(ThreadID threadTerminated, void * terminationProcParam, ThreadTerminationUPP userUPP) { (*userUPP)(threadTerminated, terminationProcParam); }
+ #else
+ #define InvokeThreadTerminationUPP(threadTerminated, terminationProcParam, userUPP) (*userUPP)(threadTerminated, terminationProcParam)
+ #endif
+#endif
+
+/*
+ * InvokeDebuggerNewThreadUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+InvokeDebuggerNewThreadUPP(
+ ThreadID threadCreated,
+ DebuggerNewThreadUPP userUPP);
+#if !OPAQUE_UPP_TYPES
+ #ifdef __cplusplus
+ inline DEFINE_API_C(void) InvokeDebuggerNewThreadUPP(ThreadID threadCreated, DebuggerNewThreadUPP userUPP) { (*userUPP)(threadCreated); }
+ #else
+ #define InvokeDebuggerNewThreadUPP(threadCreated, userUPP) (*userUPP)(threadCreated)
+ #endif
+#endif
+
+/*
+ * InvokeDebuggerDisposeThreadUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+InvokeDebuggerDisposeThreadUPP(
+ ThreadID threadDeleted,
+ DebuggerDisposeThreadUPP userUPP);
+#if !OPAQUE_UPP_TYPES
+ #ifdef __cplusplus
+ inline DEFINE_API_C(void) InvokeDebuggerDisposeThreadUPP(ThreadID threadDeleted, DebuggerDisposeThreadUPP userUPP) { (*userUPP)(threadDeleted); }
+ #else
+ #define InvokeDebuggerDisposeThreadUPP(threadDeleted, userUPP) (*userUPP)(threadDeleted)
+ #endif
+#endif
+
+/*
+ * InvokeDebuggerThreadSchedulerUPP()
+ *
+ * Availability:
+ * Non-Carbon CFM: available as macro/inline
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( ThreadID )
+InvokeDebuggerThreadSchedulerUPP(
+ SchedulerInfoRecPtr schedulerInfo,
+ DebuggerThreadSchedulerUPP userUPP);
+#if !OPAQUE_UPP_TYPES
+ #ifdef __cplusplus
+ inline DEFINE_API_C(ThreadID) InvokeDebuggerThreadSchedulerUPP(SchedulerInfoRecPtr schedulerInfo, DebuggerThreadSchedulerUPP userUPP) { return (*userUPP)(schedulerInfo); }
+ #else
+ #define InvokeDebuggerThreadSchedulerUPP(schedulerInfo, userUPP) (*userUPP)(schedulerInfo)
+ #endif
+#endif
+
+/*
+ Thread Manager function pointers (TPP):
+ on classic 68k use raw function pointers (same as UPP's)
+ on classic PowerPC, use raw function pointers
+ on classic PowerPC with OPAQUE_UPP_TYPES=1, use UPP's
+ on CFM-68K, use UPP's
+ on Carbon, use UPP's
+*/
+
+#if TARGET_OS_MAC && TARGET_CPU_PPC && !OPAQUE_UPP_TYPES
+/* use raw function pointers*/
+typedef ThreadEntryProcPtr ThreadEntryTPP;
+typedef ThreadSchedulerProcPtr ThreadSchedulerTPP;
+typedef ThreadSwitchProcPtr ThreadSwitchTPP;
+typedef ThreadTerminationProcPtr ThreadTerminationTPP;
+typedef DebuggerNewThreadProcPtr DebuggerNewThreadTPP;
+typedef DebuggerDisposeThreadProcPtr DebuggerDisposeThreadTPP;
+typedef DebuggerThreadSchedulerProcPtr DebuggerThreadSchedulerTPP;
+#else
+/* use UPP's*/
+typedef ThreadEntryUPP ThreadEntryTPP;
+typedef ThreadSchedulerUPP ThreadSchedulerTPP;
+typedef ThreadSwitchUPP ThreadSwitchTPP;
+typedef ThreadTerminationUPP ThreadTerminationTPP;
+typedef DebuggerNewThreadUPP DebuggerNewThreadTPP;
+typedef DebuggerDisposeThreadUPP DebuggerDisposeThreadTPP;
+typedef DebuggerThreadSchedulerUPP DebuggerThreadSchedulerTPP;
+#endif /* TARGET_OS_MAC && TARGET_CPU_PPC && !OPAQUE_UPP_TYPES */
+
+/*
+ * NewThread()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+NewThread(
+ ThreadStyle threadStyle,
+ ThreadEntryTPP threadEntry,
+ void * threadParam,
+ Size stackSize,
+ ThreadOptions options,
+ void ** threadResult, /* can be NULL */
+ ThreadID * threadMade) THREEWORDINLINE(0x303C, 0x0E03, 0xABF2);
+
+
+/*
+ * SetThreadScheduler()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+SetThreadScheduler(ThreadSchedulerTPP threadScheduler) THREEWORDINLINE(0x303C, 0x0209, 0xABF2);
+
+
+/*
+ * SetThreadSwitcher()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+SetThreadSwitcher(
+ ThreadID thread,
+ ThreadSwitchTPP threadSwitcher,
+ void * switchProcParam,
+ Boolean inOrOut) THREEWORDINLINE(0x303C, 0x070A, 0xABF2);
+
+
+/*
+ * SetThreadTerminator()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+SetThreadTerminator(
+ ThreadID thread,
+ ThreadTerminationTPP threadTerminator,
+ void * terminationProcParam) THREEWORDINLINE(0x303C, 0x0611, 0xABF2);
+
+
+/*
+ * SetDebuggerNotificationProcs()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+SetDebuggerNotificationProcs(
+ DebuggerNewThreadTPP notifyNewThread,
+ DebuggerDisposeThreadTPP notifyDisposeThread,
+ DebuggerThreadSchedulerTPP notifyThreadScheduler) THREEWORDINLINE(0x303C, 0x060D, 0xABF2);
+
+
+/*
+ * CreateThreadPool()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+CreateThreadPool(
+ ThreadStyle threadStyle,
+ SInt16 numToCreate,
+ Size stackSize) THREEWORDINLINE(0x303C, 0x0501, 0xABF2);
+
+
+/*
+ * GetFreeThreadCount()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+GetFreeThreadCount(
+ ThreadStyle threadStyle,
+ SInt16 * freeCount) THREEWORDINLINE(0x303C, 0x0402, 0xABF2);
+
+
+/*
+ * GetSpecificFreeThreadCount()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+GetSpecificFreeThreadCount(
+ ThreadStyle threadStyle,
+ Size stackSize,
+ SInt16 * freeCount) THREEWORDINLINE(0x303C, 0x0615, 0xABF2);
+
+
+/*
+ * GetDefaultThreadStackSize()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+GetDefaultThreadStackSize(
+ ThreadStyle threadStyle,
+ Size * stackSize) THREEWORDINLINE(0x303C, 0x0413, 0xABF2);
+
+
+/*
+ * ThreadCurrentStackSpace()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+ThreadCurrentStackSpace(
+ ThreadID thread,
+ UInt32 * freeStack) THREEWORDINLINE(0x303C, 0x0414, 0xABF2);
+
+
+/*
+ * DisposeThread()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+DisposeThread(
+ ThreadID threadToDump,
+ void * threadResult,
+ Boolean recycleThread) THREEWORDINLINE(0x303C, 0x0504, 0xABF2);
+
+
+/*
+ * YieldToThread()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+YieldToThread(ThreadID suggestedThread) THREEWORDINLINE(0x303C, 0x0205, 0xABF2);
+
+
+/*
+ * YieldToAnyThread()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+YieldToAnyThread(void) FOURWORDINLINE(0x42A7, 0x303C, 0x0205, 0xABF2);
+
+
+/*
+ * [Mac]GetCurrentThread()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+#if TARGET_OS_MAC
+ #define MacGetCurrentThread GetCurrentThread
+#endif
+EXTERN_API( OSErr )
+MacGetCurrentThread(ThreadID * currentThreadID) THREEWORDINLINE(0x303C, 0x0206, 0xABF2);
+
+
+/*
+ * GetThreadState()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+GetThreadState(
+ ThreadID threadToGet,
+ ThreadState * threadState) THREEWORDINLINE(0x303C, 0x0407, 0xABF2);
+
+
+/*
+ * SetThreadState()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+SetThreadState(
+ ThreadID threadToSet,
+ ThreadState newState,
+ ThreadID suggestedThread) THREEWORDINLINE(0x303C, 0x0508, 0xABF2);
+
+
+/*
+ * SetThreadStateEndCritical()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+SetThreadStateEndCritical(
+ ThreadID threadToSet,
+ ThreadState newState,
+ ThreadID suggestedThread) THREEWORDINLINE(0x303C, 0x0512, 0xABF2);
+
+
+/*
+ * ThreadBeginCritical()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+ThreadBeginCritical(void) THREEWORDINLINE(0x303C, 0x000B, 0xABF2);
+
+
+/*
+ * ThreadEndCritical()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+ThreadEndCritical(void) THREEWORDINLINE(0x303C, 0x000C, 0xABF2);
+
+
+/*
+ * GetThreadCurrentTaskRef()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+GetThreadCurrentTaskRef(ThreadTaskRef * threadTRef) THREEWORDINLINE(0x303C, 0x020E, 0xABF2);
+
+
+/*
+ * GetThreadStateGivenTaskRef()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+GetThreadStateGivenTaskRef(
+ ThreadTaskRef threadTRef,
+ ThreadID threadToGet,
+ ThreadState * threadState) THREEWORDINLINE(0x303C, 0x060F, 0xABF2);
+
+
+/*
+ * SetThreadReadyGivenTaskRef()
+ *
+ * Availability:
+ * Non-Carbon CFM: in ThreadsLib 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSErr )
+SetThreadReadyGivenTaskRef(
+ ThreadTaskRef threadTRef,
+ ThreadID threadToSet) THREEWORDINLINE(0x303C, 0x0410, 0xABF2);
+
+
+
+#if PRAGMA_STRUCT_ALIGN
+ #pragma options align=reset
+#elif PRAGMA_STRUCT_PACKPUSH
+ #pragma pack(pop)
+#elif PRAGMA_STRUCT_PACK
+ #pragma pack()
+#endif
+
+#ifdef PRAGMA_IMPORT_OFF
+#pragma import off
+#elif PRAGMA_IMPORT
+#pragma import reset
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __THREADS__ */
+