39 #if PRAGMA_STRUCT_ALIGN
40 #pragma options align = mac68k
41 #elif PRAGMA_STRUCT_PACKPUSH
43 #elif PRAGMA_STRUCT_PACK
51 kRoutineDescriptorVersion = 7
57 _MixedModeMagic = 0xAAFE
63 kCurrentMixedModeStateRecord = 1
70 kPascalStackBased = 0,
73 kD0DispatchedPascalStackBased = 8,
74 kD1DispatchedPascalStackBased = 12,
75 kD0DispatchedCStackBased = 9,
76 kStackDispatchedPascalStackBased = 14,
99 #define GetCurrentISA() ((ISAType)kPowerPCISA)
100 #define GetCurrentRTA() ((RTAType)kPowerPCRTA)
102 #define GetCurrentISA() ((ISAType)kM68kISA)
103 #if TARGET_RT_MAC_CFM
104 #define GetCurrentRTA() ((RTAType)kCFM68kRTA)
106 #define GetCurrentRTA() ((RTAType)kOld68kRTA)
110 #define GetCurrentArchitecture() (GetCurrentISA() | GetCurrentRTA())
112 #define GetCurrentArchitecture() 0
134 kCCRegisterVBit = 17,
135 kCCRegisterZBit = 18,
136 kCCRegisterNBit = 19,
140 typedef unsigned short registerSelectorType;
156 kProcDescriptorIsAbsolute = 0x00,
157 kProcDescriptorIsRelative = 0x01
162 kFragmentIsPrepared = 0x00,
163 kFragmentNeedsPreparing = 0x02
168 kUseCurrentISA = 0x00,
174 kPassSelector = 0x00,
175 kDontPassSelector = 0x08
180 kRoutineIsNotDispatchedDefaultRoutine = 0x00,
181 kRoutineIsDispatchedDefaultRoutine = 0x10
186 kProcDescriptorIsProcPtr = 0x00,
187 kProcDescriptorIsIndex = 0x20
208 kSelectorsAreNotIndexable = 0x00,
209 kSelectorsAreIndexable = 0x01
215 UInt16 goMixedModeTrap;
236 #if CALL_NOT_IN_CARBON
241 #define BUILD_ROUTINE_DESCRIPTOR(procInfo, procedure) \
244 kRoutineDescriptorVersion, \
245 kSelectorsAreNotIndexable, \
254 GetCurrentArchitecture(), \
255 kProcDescriptorIsAbsolute | \
256 kFragmentIsPrepared | \
258 (ProcPtr)(procedure), \
266 #define BUILD_FAT_ROUTINE_DESCRIPTOR(m68kProcInfo, m68kProcPtr, \
267 powerPCProcInfo, powerPCProcPtr) \
270 kRoutineDescriptorVersion, \
271 kSelectorsAreNotIndexable, \
283 kProcDescriptorIsAbsolute | \
285 (ProcPtr)(m68kProcPtr), \
292 GetCurrentArchitecture(), \
293 kProcDescriptorIsAbsolute | \
294 kFragmentIsPrepared | \
296 (ProcPtr)(powerPCProcPtr), \
309 kCallingConventionPhase = 0,
310 kCallingConventionMask = 0x0F,
313 kResultSizeMask = 0x30,
316 kStackParameterMask =
319 kRegisterResultLocationPhase =
325 kRegisterParameterMask = 0x7FFFF800,
326 kRegisterParameterSizePhase = 0,
327 kRegisterParameterSizeWidth = 2,
328 kRegisterParameterWhichPhase = kRegisterParameterSizeWidth,
329 kRegisterParameterWhichWidth =
332 kDispatchedSelectorSizePhase =
340 kSpecialCaseSelectorMask = 0x03F0
345 kSpecialCase = 0x000F
352 kSpecialCaseCaretHook = 0,
354 kSpecialCaseWidthHook = 2,
355 kSpecialCaseTextWidthHook = 2,
357 kSpecialCaseDrawHook = 4,
358 kSpecialCaseHitTestHook = 5,
359 kSpecialCaseTEFindWord = 6,
360 kSpecialCaseProtocolHandler = 7,
361 kSpecialCaseSocketListener = 8,
362 kSpecialCaseTERecalc = 9,
363 kSpecialCaseTEDoText = 10,
364 kSpecialCaseGNEFilterProc = 11,
365 kSpecialCaseMBarHook = 12
416 #if CALL_NOT_IN_CARBON
427 #if !TARGET_OS_MAC || !TARGET_RT_MAC_CFM
432 return (UniversalProcPtr)theProc;
435 #define NewRoutineDescriptor(theProc, theProcInfo, theISA) \
436 ((UniversalProcPtr)theProc)
450 #if !TARGET_OS_MAC || !TARGET_RT_MAC_CFM
454 #define DisposeRoutineDescriptor(theUPP)
460 #if CALL_NOT_IN_CARBON
475 #if TARGET_CPU_68K && !TARGET_RT_MAC_CFM
480 #if CALL_NOT_IN_CARBON
490 NewRoutineDescriptorTrap(ProcPtr theProc,
ProcInfoType theProcInfo,
502 DisposeRoutineDescriptorTrap(UniversalProcPtr theProcPtr);
513 NewFatRoutineDescriptorTrap(ProcPtr theM68kProc, ProcPtr thePowerPCProc,
520 #if !TARGET_CPU_68K || TARGET_RT_MAC_CFM
526 #if CALL_NOT_IN_CARBON
555 #if CALL_NOT_IN_CARBON
614 #define SIZE_CODE(size) \
617 : (((size) == 2) ? kTwoByteCode : (((size) == 1) ? kOneByteCode : 0)))
623 #define RESULT_SIZE(sizeCode) ((ProcInfoType)(sizeCode) << kResultSizePhase)
630 #define STACK_ROUTINE_PARAMETER(whichParam, sizeCode) \
631 ((ProcInfoType)(sizeCode) \
632 << (kStackParameterPhase + (((whichParam)-1) * kStackParameterWidth)))
640 #define DISPATCHED_STACK_ROUTINE_PARAMETER(whichParam, sizeCode) \
641 ((ProcInfoType)(sizeCode) \
642 << (kDispatchedParameterPhase + (((whichParam)-1) * kStackParameterWidth)))
649 #define DISPATCHED_STACK_ROUTINE_SELECTOR_SIZE(sizeCode) \
650 ((ProcInfoType)(sizeCode) << kDispatchedSelectorSizePhase)
656 #define REGISTER_RESULT_LOCATION(whichReg) \
657 ((ProcInfoType)(whichReg) << kRegisterResultLocationPhase)
663 #define REGISTER_ROUTINE_PARAMETER(whichParam, whichReg, sizeCode) \
664 ((((ProcInfoType)(sizeCode) << kRegisterParameterSizePhase) | \
665 ((ProcInfoType)(whichReg) << kRegisterParameterWhichPhase)) \
666 << (kRegisterParameterPhase + \
667 (((whichParam)-1) * kRegisterParameterWidth)))
697 #define SPECIAL_CASE_PROCINFO(specialCaseCode) \
698 (kSpecialCase | ((ProcInfoType)(specialCaseCode) << 4))
711 #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
713 #define STACK_UPP_TYPE(name) name
714 #define REGISTER_UPP_TYPE(name) Register68kProcPtr
715 #define TVECTOR_UPP_TYPE(name) name
716 #elif TARGET_OS_MAC && TARGET_RT_MAC_CFM
719 #define STACK_UPP_TYPE(name) struct Opaque##name##*
720 #define REGISTER_UPP_TYPE(name) struct Opaque##name##*
721 #define TVECTOR_UPP_TYPE(name) struct Opaque##name##*
723 #define STACK_UPP_TYPE(name) UniversalProcPtr
724 #define REGISTER_UPP_TYPE(name) UniversalProcPtr
725 #define TVECTOR_UPP_TYPE(name) name
727 #elif TARGET_OS_MAC && TARGET_RT_MAC_MACHO
729 #define STACK_UPP_TYPE(name) name
730 #define REGISTER_UPP_TYPE(name) name
731 #define TVECTOR_UPP_TYPE(name) name
734 #define STACK_UPP_TYPE(name) name
735 #define REGISTER_UPP_TYPE(name) name
736 #define TVECTOR_UPP_TYPE(name) name
749 #if TARGET_OS_MAC && TARGET_RT_MAC_CFM
750 #define CALL_ZERO_PARAMETER_UPP(upp, procInfo) CallUniversalProc(upp, procInfo)
751 #define CALL_ONE_PARAMETER_UPP(upp, procInfo, p1) \
752 CallUniversalProc(upp, procInfo, (p1))
753 #define CALL_TWO_PARAMETER_UPP(upp, procInfo, p1, p2) \
754 CallUniversalProc(upp, procInfo, (p1), (p2))
755 #define CALL_THREE_PARAMETER_UPP(upp, procInfo, p1, p2, p3) \
756 CallUniversalProc(upp, procInfo, (p1), (p2), (p3))
757 #define CALL_FOUR_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4) \
758 CallUniversalProc(upp, procInfo, (p1), (p2), (p3), (p4))
759 #define CALL_FIVE_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5) \
760 CallUniversalProc(upp, procInfo, (p1), (p2), (p3), (p4), (p5))
761 #define CALL_SIX_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5, p6) \
762 CallUniversalProc(upp, procInfo, (p1), (p2), (p3), (p4), (p5), (p6))
763 #define CALL_SEVEN_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5, p6, p7) \
764 CallUniversalProc(upp, procInfo, (p1), (p2), (p3), (p4), (p5), (p6), (p7))
765 #define CALL_EIGHT_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5, p6, p7, \
767 CallUniversalProc(upp, procInfo, (p1), (p2), (p3), (p4), (p5), (p6), (p7), \
769 #define CALL_NINE_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5, p6, p7, p8, \
771 CallUniversalProc(upp, procInfo, (p1), (p2), (p3), (p4), (p5), (p6), (p7), \
773 #define CALL_TEN_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5, p6, p7, p8, \
775 CallUniversalProc(upp, procInfo, (p1), (p2), (p3), (p4), (p5), (p6), (p7), \
777 #define CALL_ELEVEN_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5, p6, p7, \
779 CallUniversalProc(upp, procInfo, (p1), (p2), (p3), (p4), (p5), (p6), (p7), \
780 (p8), (p9), (p10), (p11))
781 #define CALL_TWELVE_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5, p6, p7, \
782 p8, p9, p10, p11, p12) \
783 CallUniversalProc(upp, procInfo, (p1), (p2), (p3), (p4), (p5), (p6), (p7), \
784 (p8), (p9), (p10), (p11), (p12))
785 #define CALL_THIRTEEN_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5, p6, p7, \
786 p8, p9, p10, p11, p12, p13) \
787 CallUniversalProc(upp, procInfo, (p1), (p2), (p3), (p4), (p5), (p6), (p7), \
788 (p8), (p9), (p10), (p11), (p12), (p13))
790 #define CALL_ZERO_PARAMETER_UPP(upp, procInfo) (*(upp))()
791 #define CALL_ONE_PARAMETER_UPP(upp, procInfo, p1) (*(upp))((p1))
792 #define CALL_TWO_PARAMETER_UPP(upp, procInfo, p1, p2) (*(upp))((p1), (p2))
793 #define CALL_THREE_PARAMETER_UPP(upp, procInfo, p1, p2, p3) \
794 (*(upp))((p1), (p2), (p3))
795 #define CALL_FOUR_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4) \
796 (*(upp))((p1), (p2), (p3), (p4))
797 #define CALL_FIVE_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5) \
798 (*(upp))((p1), (p2), (p3), (p4), (p5))
799 #define CALL_SIX_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5, p6) \
800 (*(upp))((p1), (p2), (p3), (p4), (p5), (p6))
801 #define CALL_SEVEN_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5, p6, p7) \
802 (*(upp))((p1), (p2), (p3), (p4), (p5), (p6), (p7))
803 #define CALL_EIGHT_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5, p6, p7, \
805 (*(upp))((p1), (p2), (p3), (p4), (p5), (p6), (p7), (p8))
806 #define CALL_NINE_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5, p6, p7, p8, \
808 (*(upp))((p1), (p2), (p3), (p4), (p5), (p6), (p7), (p8), (p9))
809 #define CALL_TEN_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5, p6, p7, p8, \
811 (*(upp))((p1), (p2), (p3), (p4), (p5), (p6), (p7), (p8), (p9), (p10))
812 #define CALL_ELEVEN_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5, p6, p7, \
814 (*(upp))((p1), (p2), (p3), (p4), (p5), (p6), (p7), (p8), (p9), (p10), (p11))
815 #define CALL_TWELVE_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5, p6, p7, \
816 p8, p9, p10, p11, p12) \
817 (*(upp))((p1), (p2), (p3), (p4), (p5), (p6), (p7), (p8), (p9), (p10), (p11), \
819 #define CALL_THIRTEEN_PARAMETER_UPP(upp, procInfo, p1, p2, p3, p4, p5, p6, p7, \
820 p8, p9, p10, p11, p12, p13) \
821 (*(upp))((p1), (p2), (p3), (p4), (p5), (p6), (p7), (p8), (p9), (p10), (p11), \
825 #if PRAGMA_STRUCT_ALIGN
826 #pragma options align = reset
827 #elif PRAGMA_STRUCT_PACKPUSH
829 #elif PRAGMA_STRUCT_PACK
833 #ifdef PRAGMA_IMPORT_OFF
Basic Macintosh data types.
unsigned short RoutineFlagsType
Definition: MixedMode.h:153
UniversalProcPtr NewFatRoutineDescriptor(ProcPtr theM68kProc, ProcPtr thePowerPCProc, ProcInfoType theProcInfo)
unsigned short CallingConventionType
Definition: MixedMode.h:67
unsigned long ProcInfoType
Definition: MixedMode.h:151
SInt8 ISAType
Definition: MixedMode.h:81
long CallOSTrapUniversalProc(UniversalProcPtr theProcPtr, ProcInfoType procInfo,...)
long CallUniversalProc(UniversalProcPtr theProcPtr, ProcInfoType procInfo,...)
@ kDispatchedSelectorSizeWidth
Definition: MixedMode.h:331
@ kRegisterParameterWidth
Definition: MixedMode.h:322
@ kResultSizeWidth
Definition: MixedMode.h:311
@ kDispatchedParameterPhase
Definition: MixedMode.h:335
@ kStackParameterWidth
Definition: MixedMode.h:314
@ kRegisterResultLocationWidth
Definition: MixedMode.h:318
@ kSpecialCaseSelectorWidth
Definition: MixedMode.h:338
@ kCallingConventionWidth
Definition: MixedMode.h:308
@ kSpecialCaseEOLHook
Definition: MixedMode.h:353
@ kSpecialCaseNWidthHook
Definition: MixedMode.h:356
@ kSpecialCaseHighHook
Definition: MixedMode.h:351
void DisposeRoutineDescriptor(UniversalProcPtr theUPP)
UniversalProcPtr NewRoutineDescriptor(ProcPtr theProc, ProcInfoType theProcInfo, ISAType theISA)
@ kCCRegisterCBit
Definition: MixedMode.h:133
UInt8 RDFlagsType
Definition: MixedMode.h:205
SInt8 RTAType
Definition: MixedMode.h:89
Definition: MixedMode.h:229
Definition: MixedMode.h:214
SInt8 version
Definition: MixedMode.h:216
UInt16 routineCount
Definition: MixedMode.h:221
UInt8 selectorInfo
Definition: MixedMode.h:220
UInt32 reserved1
Definition: MixedMode.h:218
RDFlagsType routineDescriptorFlags
Definition: MixedMode.h:217
UInt8 reserved2
Definition: MixedMode.h:219
RoutineRecord routineRecords[1]
Definition: MixedMode.h:222
Definition: MixedMode.h:191
RoutineFlagsType routineFlags
Definition: MixedMode.h:195
UInt32 selector
Definition: MixedMode.h:198
UInt32 reserved2
Definition: MixedMode.h:197
ISAType ISA
Definition: MixedMode.h:194
SInt8 reserved1
Definition: MixedMode.h:193
ProcPtr procDescriptor
Definition: MixedMode.h:196