home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1999 / MacHack 1999.toast / The Hacks / MACtive Desktop / Source / PatchHarness.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-05-09  |  3.0 KB  |  89 lines  |  [TEXT/CWIE]

  1. #ifndef _PATCHHARNESS_
  2. #define _PATCHHARNESS_
  3.  
  4. #include <ConditionalMacros.h>
  5. #include <MixedMode.h>
  6. #include <Types.h>
  7.  
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11.  
  12. #if PRAGMA_ALIGN_SUPPORTED
  13. #pragma options align=mac68k
  14. #endif
  15.  
  16.  
  17. typedef pascal OSStatus (*PatchInitProcPtr)(struct PatchDesc **list);
  18. typedef pascal void (*PatchInstallProcPtr)(struct PatchDesc *desc,UniversalProcPtr patch);
  19. typedef pascal void (*PatchRemoveProcPtr)(struct PatchDesc *desc);
  20.  
  21.  
  22. #if GENERATINGCFM
  23. typedef UniversalProcPtr    PatchInitUPP;
  24. typedef UniversalProcPtr    PatchInstallUPP;
  25. typedef UniversalProcPtr    PatchRemoveUPP;
  26. #else
  27. typedef PatchInitProcPtr    PatchInitUPP;
  28. typedef PatchInstallProcPtr    PatchInstallUPP;
  29. typedef PatchRemoveProcPtr    PatchRemoveUPP;
  30. #endif
  31.  
  32. enum {
  33.     uppPatchInitProcInfo = kPascalStackBased
  34.         | RESULT_SIZE(SIZE_CODE(sizeof(OSStatus)))
  35.         | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(struct PatchDesc **))),
  36.     
  37.     uppPatchInstallProcInfo = kPascalStackBased
  38.         | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(struct PatchDesc *)))
  39.         | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(UniversalProcPtr))),
  40.     
  41.     uppPatchRemoveProcInfo = kPascalStackBased
  42.         | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(struct PatchDesc *)))
  43. };
  44.  
  45. #if GENERATINGCFM
  46. #define NewPatchInitProc(userRoutine)        (PatchInitUPP)NewRoutineDescriptor((ProcPtr)(userRoutine),uppPatchInitProcInfo,GetCurrentArchitecture())
  47. #define NewPatchInstallProc(userRoutine)    (PatchInstallUPP)NewRoutineDescriptor((ProcPtr)(userRoutine),uppPatchInstallProcInfo,GetCurrentArchitecture())
  48. #define NewPatchRemoveProc(userRoutine)        (PatchRemoveUPP)NewRoutineDescriptor((ProcPtr)(userRoutine),uppPatchRemoveProcInfo,GetCurrentArchitecture())
  49. #else
  50. #define NewPatchInitProc(userRoutine)        ((PatchInitUPP)(userRoutine))
  51. #define NewPatchInstallProc(userRoutine)    ((PatchInstallUPP)(userRoutine))
  52. #define NewPatchRemoveProc(userRoutine)        ((PatchRemoveUPP)(userRoutine))
  53. #endif
  54.  
  55. #if GENERATINGCFM
  56. #define CallPatchInitProc(userRoutine,desc)                    CallUniversalProc((UniversalProcPtr)(userRoutine),uppPatchInitProcInfo,(desc))
  57. #define CallPatchInstallProc(userRoutine,desc,patch)        CallUniversalProc((UniversalProcPtr)(userRoutine),uppPatchInstallProcInfo,(desc),(patch))
  58. #define CallPatchRemoveProc(userRoutine,desc)                CallUniversalProc((UniversalProcPtr)(userRoutine),uppPatchRemoveProcInfo,(desc))
  59. #else
  60. #define CallPatchInitProc(userRoutine,desc)                    (*(PatchInitProcPtr)(userRoutine))((desc))
  61. #define CallPatchInstallProc(userRoutine,desc,patch)        (*(PatchInstallProcPtr)(userRoutine))((desc),(patch))
  62. #define CallPatchRemoveProc(userRoutine,desc)                (*(PatchRemoveProcPtr)(userRoutine))((desc))
  63. #endif
  64.  
  65.  
  66. typedef struct PatchDesc
  67. {
  68.     struct PatchDesc        *next;
  69.     OSType                    type;
  70.     PatchInstallUPP            install;
  71.     PatchRemoveUPP            remove;
  72. } PatchDesc;
  73.  
  74.  
  75. OSStatus InstallPatchHarness(PatchDesc **patchList);
  76. OSStatus InstallPatch(PatchDesc *patchList,OSType type,UniversalProcPtr patch);
  77. OSStatus DCRemovePatch(PatchDesc *patchList,OSType type);
  78.  
  79.  
  80. #if PRAGMA_ALIGN_SUPPORTED
  81. #pragma options align=reset
  82. #endif
  83.  
  84. #ifdef __cplusplus
  85. }
  86. #endif
  87.  
  88. #endif /* _PATCHHARNESS_ */
  89.