home *** CD-ROM | disk | FTP | other *** search
-
- #include <stdio.h>
- #include <string.h>
- #include <math.h>
-
- #include <DeskBus.h>
-
- #include "InstallCursorHack.h"
-
-
- #define kPi 3.1415926535898
-
-
- // Control Flags....What do you want this hack to do?
- #define REVERSE_DIRECTION 0
- #define CHANGE_BUTTON_STATE 0
-
- #define SWAP_AXIS 0
- #define ROTATE_AXES 1
-
- #define kMouseADBAddress 3
- #define TwosComplement(n) ((~(n)) + 1)
-
- #define kButtonStateMask 0x80
- #define kValueMask 0x7F
-
-
- // Where is this defined??
- extern ADBInitUPP JADBProc : 0x06B8;
-
-
- #define kServiceFragmentResourceType 'Smfr'
- #define kServiceFragmentResourceID 128
-
- /*----------------------------------------------------------------------------
- PrepareServiceFragment
-
- ----------------------------------------------------------------------------*/
- OSErr PrepareServiceFragment(TPrefsData *prefsData)
- {
- Handle resHandle = nil;
- CFragConnectionID connID = 0;
- Str255 errorMsg;
- Ptr symbolAddr;
- CFragSymbolClass symbolClass;
- OSErr err;
-
- // res must be locked, in system heap. We assume this.
- resHandle = GetResource(kServiceFragmentResourceType, kServiceFragmentResourceID);
- if (! resHandle) return resNotFound;
- DetachResource(resHandle);
-
- err = GetMemFragment(*resHandle, GetHandleSize(resHandle), "\pRotato", kReferenceCFrag, &connID, &symbolAddr, errorMsg);
- if (err != noErr) return err;
-
- err = FindSymbol(connID, "\pMyADBInitProc", &symbolAddr, &symbolClass);
- if (err != noErr) return err;
- prefsData->adbInitProc = (ADBInitProcPtr)symbolAddr;
-
- err = FindSymbol(connID, "\pMyInstallServiceRoutines", &symbolAddr, &symbolClass);
- if (err != noErr) return err;
- prefsData->installRoutineProc = (InstallRoutineProcPtr)symbolAddr;
-
- err = FindSymbol(connID, "\pSetupData", &symbolAddr, &symbolClass);
- if (err != noErr) return err;
- prefsData->setupProc = (SetupProcPtr)symbolAddr;
-
- prefsData->serviceFragConnectionID = connID;
- return noErr;
- }
-
-
- /*----------------------------------------------------------------------------
- RemoveServiceRoutine
-
- ----------------------------------------------------------------------------*/
- static void RemoveServiceRoutine(TPrefsData *prefsData)
- {
- short adbcount, adbindex;
- OSErr err = paramErr;
-
- adbcount = CountADBs();
-
- for (adbindex = 1; adbindex <= adbcount; adbindex++)
- {
- ADBDataBlock adb_data;
- long adbaddr = GetIndADB(&adb_data, adbindex);
-
- if ((adb_data.origADBAddr == kMouseADBAddress))
- {
- ADBSetInfoBlock setADBInfo;
-
- BlockMoveData(&adb_data, &prefsData->mouseADBinfo, sizeof(ADBDataBlock));
-
- setADBInfo.siService = prefsData->oldMouseServiceRoutine;
- setADBInfo.siDataAreaAddr = adb_data.dbDataAreaAddr;
-
- err = SetADBInfo(&setADBInfo, adbaddr);
- break;
- }
- }
-
- }
-
-
- /*----------------------------------------------------------------------------
- InstallJADBProc
-
- Install a JADBProc callback for before and after ADBReInit
- ----------------------------------------------------------------------------*/
- static void InstallJADBProc(TPrefsData *prefsData)
- {
- ADBInitUPP ourADBInitProc;
-
- if (prefsData->adbInitProc)
- {
- prefsData->oldADBInitProc = JADBProc;
- ourADBInitProc = NewADBInitProc(prefsData->adbInitProc);
- JADBProc = ourADBInitProc;
- }
- else
- {
- //DebugStr("\pNo service proc");
- }
- }
-
-
- /*----------------------------------------------------------------------------
- RemoveJADBProc
-
- ----------------------------------------------------------------------------*/
- static void RemoveJADBProc(TPrefsData *prefsData)
- {
- JADBProc = prefsData->oldADBInitProc;
- }
-
- #pragma mark -
-
- /*----------------------------------------------------------------------------
- InstallCursorHack
-
- Install the hack.
- ----------------------------------------------------------------------------*/
- Boolean InstallCursorHack(TPrefsData *prefsData)
- {
- Boolean installedOK;
-
- if (!prefsData->installRoutineProc)
- return false;
-
- installedOK = (*prefsData->installRoutineProc)();
- if (installedOK)
- {
- // Install a JADBProc so we don't go away after a ADBReInit
- InstallJADBProc(prefsData);
- }
-
- return installedOK;
- }
-
- /*----------------------------------------------------------------------------
- RemoveCursorHack
-
- Remove the hack.
- ----------------------------------------------------------------------------*/
- void RemoveCursorHack(TPrefsData *prefsData)
- {
- RemoveServiceRoutine(prefsData);
- RemoveJADBProc(prefsData);
- }
-
-