home *** CD-ROM | disk | FTP | other *** search
- #include <CodeFragments.h>
- #include "DemoLib.h"
-
- static OSErr Setup_UPP(UniversalProcPtr* pUPP,Str255 pSymName);
- static pascal OSErr GetSystemArchitecture(OSType *archType);
-
- // Private functions
-
- static OSErr Setup_UPP(UniversalProcPtr* pUPP,Str255 pSymName)
- {
- static CFragConnectionID gConnectionID = 0;
- static OSType sArchType = kAnyCFragArch;
- Str255 tLibName;
- ProcPtr tSymbolAddr;
- OSErr myErr = noErr;
- unsigned char tSymClass;
-
- if (sArchType == kAnyCFragArch) // if architecture is still undefined…
- {
- gConnectionID = 0; // …force (re)connect to library
- myErr = GetSystemArchitecture(&sArchType); // & determine current atchitecture.
- if (myErr != noErr)
- return myErr;
- }
-
- if (*pUPP == 0)
- {
- if (gConnectionID == 0)
- myErr = GetSharedLibrary("\pDemoLibrary",sArchType,kLoadLib,
- &gConnectionID,(Ptr *) &tSymbolAddr,tLibName);
- if (myErr == noErr)
- myErr = FindSymbol(gConnectionID,pSymName,(Ptr *) pUPP, &tSymClass);
- }
- return myErr;
- }
-
- static pascal OSErr GetSystemArchitecture(OSType *archType)
- {
- static long sSysArchitecture = 0; // static so we only Gestalt the first time
- OSErr tOSErr = noErr;
-
- *archType = kAnyCFragArch; // assume wild architecture
-
- // If we don't know the system architecture yet…
- if (sSysArchitecture == 0)
- // …Ask Gestalt what kind of machine we are running on.
- tOSErr = Gestalt(gestaltSysArchitecture, &sSysArchitecture);
-
- if (tOSErr == noErr) // if no errors
- {
- if (sSysArchitecture == gestalt68k) // 68k?
- *archType = kMotorola68KArch;
- else if (sSysArchitecture == gestaltPowerPC) // PPC?
- *archType = kPowerPCArch;
- else
- tOSErr = gestaltUnknownErr; // who knows what might be next?
- }
- return tOSErr;
- }
-
- // Public functions
-
- pascal void Do_Demo(void)
- {
- static UniversalProcPtr tDo_Demo_UPP = 0;
- if (noErr == Setup_UPP(&tDo_Demo_UPP,"\pDo_DemoRD"))
- ((Do_DemoProcPtr)(tDo_Demo_UPP))();
- }
-
- pascal void Set_DemoValue(long pLong)
- {
- static UniversalProcPtr tSet_DemoValue_UPP = 0;
- if (noErr == Setup_UPP(&tSet_DemoValue_UPP,"\pSet_DemoValueRD"))
- ((Set_DemoValueProcPtr)(tSet_DemoValue_UPP))(pLong);
- }
- pascal long Get_DemoValue(void)
- {
- static UniversalProcPtr tGet_DemoValue_UPP = 0;
- if (noErr == Setup_UPP(&tGet_DemoValue_UPP,"\pGet_DemoValueRD"))
- return ((Get_DemoValueProcPtr)(tGet_DemoValue_UPP))();
- else
- return 0;
- }
-