This is Terminator.m in view mode; [Download] [Up]
#pragma .h #import <objc/Object.h> #pragma .h #import "Glyph.h" #import "Terminator.h" #import <appkit/Application.h> /** ** Terminators are often called "sentinels" ** in CS literature. They are used stop off ** the is, than, and ancestor pointers in ** a glyph. They generally function a ** the basis of recursive calls on a ** TTree. There really is only one ** Terminator, returned by the new message. ** If we could get doesNotUnderstand: to ** work with factory objects, ** then this class could be all ** class methods. **/ static id _soleInstanceOfTerminator = nil ; @implementation Terminator: Object { } + new ; { if(!_soleInstanceOfTerminator) _soleInstanceOfTerminator = [super new] ; return _soleInstanceOfTerminator ; } - doesNotRecognize: (SEL)aSelector ; { // if I don't recognize something, // I just return return self ; } - enlist: (Glyph *) aGlyt ; { // I will terminate this Glist aGlyt->then = (Glyph *) self ; return aGlyt ; } -hitTest: (NXPoint *) aPnt ; { return nil ; } - (char *) iam ; // remove: debugging purposes only { return "Term" ; } - (BOOL) isTerminator ; { return YES ; } - (BOOL) precedes: (Glyph *) aGlyph ; { // Terminators cannot precede anything return NO ; } - test: (int) anInt ; { // remove when you are satisfied... [NXApp printf: "T%d\n", anInt] ; return self ; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.