Пример #1
0
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);
}
Пример #2
0
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);
}
Пример #3
0
/* 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));
}
Пример #4
0
/*--------------------------------------------------------------------
 * 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);
}
Пример #5
0
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);
}
Пример #6
0
/*------------------------------------ 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)
              }
          }
        }
Пример #7
0
/*------------------------------------ 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)
              }
          }
Пример #8
0
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;
}
Пример #9
0
pascal Bool SBSafeToAccessStartupDisk(void)
{
	return CallUniversalProc((UniversalProcPtr)&SBSafeToAccessStartupDisk68K[0],kRegisterBased|RESULT_SIZE(SIZE_CODE(1)));
}
Пример #10
0
pascal void SBShowHideControlStrip(Bool showIt)
{
	CallUniversalProc((UniversalProcPtr)&SBShowHideControlStrip68K[0],kPascalStackBased
		 | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(1)),showIt);
}
Пример #11
0
pascal Bool SBIsControlStripVisible(void)
{
	return CallUniversalProc((UniversalProcPtr)&SBIsControlStripVisible68K[0],kRegisterBased|RESULT_SIZE(SIZE_CODE(1)));
}