When you present a custom image to Intuition, you provide a pointer to a Hook structure that Intuition uses to find functions needed by various image operations. Without going into great detail, a hook provides a pointer to a function that the system calls using Amiga register parameter conventions. The hook supplies enough information to conveniently transfer control to a High-Level Language (HLL) entry point. Boopsi imageclass objects provide Intuition with a hook to a method dispatcher function. The Hook structure is defined as follows (from <utility/hooks.h>): /* new standard hook structure */ struct Hook { struct MinNode h_MinNode; ULONG (*h_Entry)(); /* stub function entry point */ ULONG (*h_SubEntry)();/* the custom function entry point */ VOID *h_Data; /* owner specific */ }; The assembly language stub for C parameter conventions that boopsi classes (and custom gadgets) require is: _hookEntry: move.l a1,-(sp) ; push message packet pointer move.l a2,-(sp) ; push object pointer move.l a0,-(sp) ; push hook pointer move.l h_SubEntry(a0),a0 ; fetch C entry point ... jsr (a0) ; ... and call it lea 12(sp),sp ; fix stack rts The C language stub, for C compilers that support registerized parameters is: /* This function converts register-parameter hook calling * convention into standard C conventions. It requires a C * compiler that supports registerized parameters, such as * SAS/C 5.xx or greater. */ ULONG __asm hookEntry( register __a0 struct Hook *h, register __a2 VOID *o, register __a1 VOID *msg) { return ((*h->h_SubEntry)(h, o, msg)); }