static THOOKENTRY TTAG exec_dispatch(struct THook *hook, TAPTR obj, TTAG msg) { struct TExecBase *TExecBase = hook->thk_Data; switch (msg) { case TMSG_DESTROY: THALDestroyLock(TExecBase->texb_HALBase, &TExecBase->texb_Lock); TDESTROY(&TExecBase->texb_BaseMemManager); TDESTROY(&TExecBase->texb_MsgMemManager); break; #if defined(ENABLE_EXEC_IFACE) case TMSG_QUERYIFACE: { struct TInterfaceQuery *ifq = obj; if (TStrEqual(ifq->tifq_Name, "exec") && ifq->tifq_Version >= 1) return (TTAG) &TExecBase->texb_Exec1IFace; return TNULL; } case TMSG_DROPIFACE: TDBPRINTF(TDB_WARN,("drop interface: %p\n", obj)); break; #endif } return 0; }
// Search string template <typename T1, typename T2> PVOID TStrStr(T1 ptStr1, T2 ptStr2, UINT uLen) { for (T1 p = ptStr1; *p; p++) { if (TStrEqual(p, ptStr2, uLen)) { return p; } } return NULL; }