This is Tee.m in view mode; [Download] [Up]
// Tee.m // // Tee implementation file // // Copyright (C) 1992 Dimitri Tischenko & P.B. Schuller, Delft U. of T. // Many thanks to Scott Hess // #import "Tee.h" #include <stdio.h> #ifdef DEBUG static void log(STR, id, STR, SEL); #else #define log(a, b, c, d) #endif @implementation Tee - forward:(SEL)aSelector: (marg_list)argFrame { if ([target1 isKindOf:[Tee class]]) { log("target1", target1, "forward", aSelector); [target1 forward:aSelector :argFrame]; } else { if ([target1 respondsTo:aSelector]){ log("target1", target1, "performv", aSelector); [target1 performv:aSelector :argFrame]; } } if ([target2 isKindOf:[Tee class]]) { log("target2", target2, "forward", aSelector); [target2 forward:aSelector :argFrame]; } else { if ([target2 respondsTo:aSelector]){ log("target2", target2, "performv", aSelector); [target2 performv:aSelector :argFrame]; } } return self; } - (BOOL)respondsTo:(SEL)aSelector { #ifdef DEBUG printf("Tee respondsTo: %s = %s\n", sel_getName(aSelector), aSelector ? "YES":"NO"); #endif if (!aSelector) return NO; else return YES; } #ifdef DEBUG void log(STR varname, id obj, STR action, SEL aSelector) { printf("%s is a %s; %s %s\n", varname, [obj name], action, sel_getName(aSelector)); } #endif @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.