pascal OSErr SetDragImage ( DragReference theDragRef, PixMapHandle imagePixMap, RgnHandle imageRgn, Point imageOffsetPt, DragImageFlags theImageFlags ) { enum { uppSetDragImageInfo = kD0DispatchedPascalStackBased | RESULT_SIZE (SIZE_CODE (sizeof(OSErr))) | DISPATCHED_STACK_ROUTINE_SELECTOR_SIZE (SIZE_CODE (sizeof (unsigned long))) | DISPATCHED_STACK_ROUTINE_PARAMETER (1, SIZE_CODE (sizeof (theDragRef))) | DISPATCHED_STACK_ROUTINE_PARAMETER (2, SIZE_CODE (sizeof (imagePixMap))) | DISPATCHED_STACK_ROUTINE_PARAMETER (3, SIZE_CODE (sizeof (imageRgn))) | DISPATCHED_STACK_ROUTINE_PARAMETER (4, SIZE_CODE (sizeof (imageOffsetPt))) | DISPATCHED_STACK_ROUTINE_PARAMETER (5, SIZE_CODE (sizeof (theImageFlags))) }; return CallUniversalProc ( GetToolTrapAddress (_DragDispatch), uppSetDragImageInfo, 0x27L, theDragRef, imagePixMap, imageRgn, imageOffsetPt, theImageFlags); }
static pascal void SBShowHideControlStrip(Boolean showIt) { static short procData[] = THREEWORDSTUB(0x303C, 0x0101, 0xAAF2); ProcInfoType procInfo = kD0DispatchedPascalStackBased | DISPATCHED_STACK_ROUTINE_SELECTOR_SIZE(kFourByteCode) | DISPATCHED_STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Boolean))); CallUniversalProc((UniversalProcPtr) procData, procInfo, 0x01, showIt); }
/* ControlStrip inline glue for PowerPC */ static pascal Boolean SBIsControlStripVisible(void) { static short procData[] = TWOWORDSTUB(0x7000, 0xAAF2); ProcInfoType procInfo = kD0DispatchedPascalStackBased | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) | DISPATCHED_STACK_ROUTINE_SELECTOR_SIZE(kFourByteCode); return((Boolean) CallUniversalProc((UniversalProcPtr) procData, procInfo, 0x00)); }
/*-------------------------------------------------------------------- * FUNCTION NAME * callProgress - Macintosh Version * * DESCRIPTION * This function calls the user's call back function * must be done as separate subroutine so that progress function * address is addressed via the A6 stack * *--------------------------------------------------------------------*/ static PTErr_t FAR PASCAL callProgress ( callBack_p callBack, KpInt32_t percent) { initializedGlobals_p iGP; PTRelay_t relay; PTErr_t theReturn; #if defined (KPMACPPC) long thisA5; #endif if (callBack->progressFunc == NULL) { return KCP_SUCCESS; } iGP = getInitializedGlobals (); if (iGP == NULL) { return KCP_NO_PROCESS_GLOBAL_MEM; } relay = iGP->callBackRelay; /* do the progress call-back */ #if defined (KPMACPPC) thisA5 = SetA5 (callBack->gHostA5); /* PPC or 68K callback code? */ if ( ((UniversalProcPtr)callBack->progressFunc)->goMixedModeTrap == _MixedModeMagic) { theReturn = (PTErr_t) CallUniversalProc ((UniversalProcPtr)callBack->progressFunc, uppCallProgressProcInfo, percent); } else { /* callback code is 68K */ theReturn = (PTErr_t) CallUniversalProc ((UniversalProcPtr)relay, upprelayProcInfo, callBack->gHostA5, callBack->gHostA4, callBack->progressFunc, percent); } SetA5 (thisA5); #endif #if defined (KPMAC68K) theReturn = (PTErr_t)relay (callBack->gHostA5, callBack->gHostA4, callBack->progressFunc, percent); #endif return (theReturn); }
pascal OSErr GetDragHiliteColor (WindowPtr window, RGBColor *color) { enum { uppGetDragHiliteColorInfo = kD0DispatchedPascalStackBased | RESULT_SIZE (SIZE_CODE (sizeof(OSErr))) | DISPATCHED_STACK_ROUTINE_SELECTOR_SIZE (SIZE_CODE (sizeof (unsigned long))) | DISPATCHED_STACK_ROUTINE_PARAMETER (1, SIZE_CODE (sizeof (window))) | DISPATCHED_STACK_ROUTINE_PARAMETER (2, SIZE_CODE (sizeof (color))) }; return CallUniversalProc ( GetToolTrapAddress (_DragDispatch), uppGetDragHiliteColorInfo, 0x26L, window, color); }
/*------------------------------------ performPut ---*/ static bool performPut(FidgetPtr xx, HIDDeviceDataPtr walkerHID, PSymbol deviceType, const short argc, PAtom argv) { bool okSoFar = true; OSErr result; E_PhidgResult action = kPhidgDoDefault; if (walkerHID->fClass) { PhidgetDescriptorPtr kind = reinterpret_cast<PhidgetDescriptorPtr>(walkerHID->fClass); #if defined(COMPILE_FOR_OSX_4) action = reinterpret_cast<FpDoPut>(kind->fDoPutFun)(OUR_NAME, deviceType, xx->fDataOut, kind->fShared, walkerHID->fPrivate, walkerHID, short(argc - 2), argv + 2, &result); #endif /* COMPILE_FOR_OSX_4 */ #if defined(COMPILE_FOR_OS9_4) action = static_cast<E_PhidgResult>(CallUniversalProc(kind->fDoPutUpp, uppDoPutProcInfo, OUR_NAME, deviceType, xx->fDataOut, kind->fShared, walkerHID->fPrivate, walkerHID, short(argc - 2), argv + 2, &result)); #endif /* COMPILE_FOR_OS9_4 */ } if (action == kPhidgDoDefault) { if (argc >= 4) { long element = 0, singleValue = 0; UInt32 extendedLength = 0; PAtom extendedValue = NULL_PTR; if (argv[2].a_type == A_LONG) element = argv[2].a_w.w_long; else { okSoFar = false; LOG_ERROR_2(OUTPUT_PREFIX "element is not an integer for '%s:put'", deviceType->s_name) } // Gather the data if (okSoFar) { int ii; for (ii = 3; ii < argc; ++ii) { if (argv[ii].a_type != A_LONG) { okSoFar = false; LOG_ERROR_2(OUTPUT_PREFIX "non-integer value for '%s:put'", deviceType->s_name) break; } } if (okSoFar) { if (argc == 4) singleValue = argv[3].a_w.w_long; else { extendedLength = static_cast<UInt32>(argc - 3); extendedValue = argv + 3; } } } if (okSoFar) { HIDElementDataPtr anElement = NULL_PTR; if (element) { // Find the matching element: for (anElement = walkerHID->fFirstElement; anElement; anElement = anElement->fNext) { if (anElement->fCookie == reinterpret_cast<IOHIDElementCookie>(element)) break; } } if (anElement) { #if defined(COMPILE_FOR_OSX_4) IOReturn result; #endif /* COMPILE_FOR_OSX_4 */ #if defined(COMPILE_FOR_OS9_4) OSStatus result; #endif /* COMPILE_FOR_OS9_4 */ setHIDElementValue(OUR_NAME, *walkerHID, *anElement, extendedLength, extendedValue, singleValue, result); if (result) outlet_int(xx->fResultOut, result); } else { okSoFar = false; LOG_ERROR_2(OUTPUT_PREFIX "element not found for '%s:put'", deviceType->s_name) } } }
/*------------------------------------ performGet ---*/ static bool performGet(FidgetPtr xx, HIDDeviceDataPtr walkerHID, PSymbol deviceType, const short argc, PAtom argv) { bool okSoFar = true; OSErr result; E_PhidgResult action = kPhidgDoDefault; if (walkerHID->fClass) { PhidgetDescriptorPtr kind = reinterpret_cast<PhidgetDescriptorPtr>(walkerHID->fClass); #if defined(COMPILE_FOR_OSX_4) action = reinterpret_cast<FpDoGet>(kind->fDoGetFun)(OUR_NAME, deviceType, xx->fDataOut, kind->fShared, walkerHID->fPrivate, walkerHID, short(argc - 2), argv + 2, &result); #endif /* COMPILE_FOR_OSX_4 */ #if defined(COMPILE_FOR_OS9_4) action = static_cast<E_PhidgResult>(CallUniversalProc(kind->fDoGetUpp, uppDoGetProcInfo, OUR_NAME, deviceType, xx->fDataOut, kind->fShared, walkerHID->fPrivate, walkerHID, short(argc - 2), argv + 2, &result)); #endif /* COMPILE_FOR_OS9_4 */ } if (action == kPhidgDoDefault) { #if defined(COMPILE_FOR_OSX_4) // Note that 'default' is only supported with 'CATS' - there is no reasonable behaviour // if we are using a report handler... as we do for non-'CATS'! if (argc >= 3) { long element = 0; if (argv[2].a_type == A_LONG) element = argv[2].a_w.w_long; else { okSoFar = false; LOG_ERROR_2(OUTPUT_PREFIX "element is not an integer for '%s:get'", deviceType->s_name); } if (okSoFar) { HIDElementDataPtr anElement = NULL_PTR; if (element) { // Find the matching element: for (anElement = walkerHID->fFirstElement; anElement; anElement = anElement->fNext) { if (anElement->fCookie == reinterpret_cast<IOHIDElementCookie>(element)) break; } } if (anElement) { UInt32 extendedLength; Pvoid extendedValue; IOReturn result; long value = getHIDElementValue(OUR_NAME, *walkerHID, *anElement, extendedLength, extendedValue, result); if (result == KERN_SUCCESS) { if (extendedLength) { PAtom newList = GETBYTES(extendedLength + 2, Atom); Pchar longValue = reinterpret_cast<Pchar>(extendedValue); SETSYM(newList, deviceType); SETSYM(newList + 1, walkerHID->fSerialNumber); for (UInt32 ii = 0; ii < extendedLength; ++ii, ++longValue) SETLONG(newList + ii + 2, long(*longValue & 0x00FF)); genericListOutput(xx->fDataOut, short(extendedLength + 2), newList); FREEBYTES(newList, extendedLength + 2) } else { Atom newList[3]; SETSYM(newList, deviceType); SETSYM(newList + 1, walkerHID->fSerialNumber); SETLONG(newList + 2, value); genericListOutput(xx->fDataOut, sizeof(newList) / sizeof(*newList), newList); } } if (result) outlet_int(xx->fResultOut, result); } else { okSoFar = false; LOG_ERROR_2(OUTPUT_PREFIX "element not found for '%sget'", deviceType->s_name) } }
OSErr NetDDPOpenSocket( short *socketNumber, packetHandlerProcPtr packetHandler) { OSErr error; Handle socket_listener_resource; ProcPtr initialize_socket_listener, socket_listener; MPPPBPtr myMPPPBPtr= (MPPPBPtr) NewPtrClear(sizeof(MPPParamBlock)); static ProcPtr initialize_upp = NULL; static UniversalProcPtr packet_handler_upp = NULL; assert(packetHandler); /* canÕt have NULL packet handlers */ assert(!ddpPacketBuffer); /* canÕt have more than one socket listener installed */ socket_listener_resource = GetResource(SOCKET_LISTENER_RESOURCE_TYPE, SOCKET_LISTENER_ID); assert(socket_listener_resource); HLock(socket_listener_resource); HNoPurge(socket_listener_resource); initialize_socket_listener = (ProcPtr) StripAddress(*socket_listener_resource); ddpPacketBuffer= (DDPPacketBufferPtr) NewPtrClear(sizeof(DDPPacketBuffer)); error= MemError(); if (error==noErr) { if (packet_handler_upp == NULL) { packet_handler_upp = (UniversalProcPtr) NewRoutineDescriptor((ProcPtr) packetHandler, uppPacketHandlerProcInfo, GetCurrentISA()); } assert(packet_handler_upp); if (initialize_upp == NULL) { initialize_upp = (ProcPtr) NewRoutineDescriptor((ProcPtr) initialize_socket_listener, uppInitializeListenerProcInfo, kM68kISA); // it's in a 68k code resource } assert(initialize_upp); #ifdef env68k // it seems that we don't have CallUniversalProc() in the library. strange... #ifndef VULCAN socket_listener = (ProcPtr) initialize_socket_listener(packet_handler_upp, ddpPacketBuffer, 1); #else debugstr("Hey, socket listener was never initialized"); #endif #else socket_listener = (ProcPtr) CallUniversalProc((UniversalProcPtr) initialize_upp, uppInitializeListenerProcInfo, packet_handler_upp, ddpPacketBuffer, 1); #endif listenerUPP = (DDPSocketListenerUPP) NewRoutineDescriptor((ProcPtr) socket_listener, uppDDPSocketListenerProcInfo, kM68kISA); // have to force it to realize that it's a 68K resource assert(listenerUPP); myMPPPBPtr->DDP.socket= 0; myMPPPBPtr->DDP.u.listener= listenerUPP; error= POpenSkt(myMPPPBPtr, FALSE); if (error==noErr) { *socketNumber= myMPPPBPtr->DDP.socket; } DisposePtr((Ptr)myMPPPBPtr); } return error; }
pascal Bool SBSafeToAccessStartupDisk(void) { return CallUniversalProc((UniversalProcPtr)&SBSafeToAccessStartupDisk68K[0],kRegisterBased|RESULT_SIZE(SIZE_CODE(1))); }
pascal void SBShowHideControlStrip(Bool showIt) { CallUniversalProc((UniversalProcPtr)&SBShowHideControlStrip68K[0],kPascalStackBased | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(1)),showIt); }
pascal Bool SBIsControlStripVisible(void) { return CallUniversalProc((UniversalProcPtr)&SBIsControlStripVisible68K[0],kRegisterBased|RESULT_SIZE(SIZE_CODE(1))); }