#define PATCH(offset,off2,func,type) { off2, { (IPTR)&func##_stubs }, type } #define PATCHED_0(ret,name) ret name##_stubs (APTR __local_iface) { \ return (ret)name(); } ret name(void) { #define PATCHED_1(ret,name,r1,t1,n1) \ ret name##_stubs(APTR __local_iface, REG(r1, t1 n1)) \ { \ extern ret name(REG(r1, t1 n1)); \ return (ret)name(n1); \ } \ ret name(t1 n1) { #define PATCHED_2(ret,name,r1,t1,n1,r2,t2,n2) \ ret name##_stubs(APTR __local_iface, REG(r1, t1 n1),REG(r2, t2 n2)) \ { \ extern ret name(REG(r1, t1 n1),REG(r2, t2 n2)); \ return (ret)name(n1, n2); \ } \ ret name(t1 n1, t2 n2) { #define PATCHED_3(ret,name,r1,t1,n1,r2,t2,n2, r3,t3,n3) \ ret name##_stubs(APTR __local_iface, REG(r1, t1 n1),REG(r2, t2 n2),REG(r3,t3 n3)) \ { \ extern ret name(REG(r1, t1 n1),REG(r2, t2 n2), REG(r3, t3 n3)); \ return (ret)name(n1, n2 , n3); \ } \ ret name(t1 n1, t2 n2, t3 n3) { #define PATCHED_5(ret,name,r1,t1,n1,r2,t2,n2, r3,t3,n3, r4,t4,n4, r5,t5,n5) \ ret name##_stubs(APTR __local_iface, REG(r1, t1 n1),REG(r2, t2 n2),REG(r3,t3 n3), REG(r4, t4 n4), REG(r5, t5 n5)) \ { \ extern ret name(REG(r1, t1 n1),REG(r2, t2 n2), REG(r3, t3 n3), REG(r4, t4 n4), REG(r5, t5 n5)); \ return (ret)name(n1, n2 , n3, n4, n5); \ } \ ret name(t1 n1, t2 n2, t3 n3, t4 n4, t5 n5) { #define PATCHED_6(ret,name,r1,t1,n1,r2,t2,n2, r3,t3,n3, r4,t4,n4, r5,t5,n5, r6,t6,n6) \ ret name##_stubs(APTR __local_iface, REG(r1, t1 n1),REG(r2, t2 n2),REG(r3,t3 n3), REG(r4, t4 n4), REG(r5, t5 n5), REG(r6, t6 n6)) \ { \ extern ret name(REG(r1, t1 n1),REG(r2, t2 n2), REG(r3, t3 n3), REG(r4, t4 n4), REG(r5, t5 n5), REG(r6, t6 n6)); \ return (ret)name(n1, n2 , n3, n4, n5, n6); \ } \ ret name(t1 n1, t2 n2, t3 n3, t4 n4, t5 n5, t6 n6) { #define PATCHED_7(ret,name,r1,t1,n1,r2,t2,n2, r3,t3,n3, r4,t4,n4, r5,t5,n5, r6,t6,n6, r7,t7,n7) \ ret name##_stubs(APTR __local_iface, REG(r1, t1 n1),REG(r2, t2 n2),REG(r3,t3 n3), REG(r4, t4 n4), REG(r5, t5 n5), REG(r6, t6 n6), REG(r7, t7 n7)) \ { \ extern ret name(REG(r1, t1 n1),REG(r2, t2 n2), REG(r3, t3 n3), REG(r4, t4 n4), REG(r5, t5 n5), REG(r6, t6 n6), REG(r7, t7 n7)); \ return (ret)name(n1, n2 , n3, n4, n5, n6, n7); \ } \ ret name(t1 n1, t2 n2, t3 n3, t4 n4, t5 n5, t6 n6, t7 n7) {