This is AppDelegate.TreeSearching.m in view mode; [Download] [Up]
// Wed Nov 13 12:19:35 MET 1996 by Daniel Böhringer #import "AppDelegate.TreeSearching.h" @implementation AppDelegate(SearchableText) - renewSearchHashtable { if(searchHash) [self invalidateSearchHashtable]; searchHash=[[HashTable alloc] initKeyDesc:"*" valueDesc:"@"]; return self; } - invalidateSearchHashtable { if(searchHash) searchHash=[[searchHash freeObjects] free]; return self; } - (int)searchFor:(const char *)pattern mode:(SearchMode)mode reverse:(BOOL)rev regexpr:(BOOL)regexpr cases:(BOOL)cases position:(out int *)pos size:(out int *)size { int found=NO; MiscList *cashedSearch; if(!strlen(pattern)) return NO; if(cashedSearch=[searchHash valueForKey:pattern]) { if(rev) found=!![self selectEntry:[cashedSearch setPreviousObject]]; else { found=!![self selectEntry:[cashedSearch setNextObject]]; if(!found && [cashedSearch currentPosition]+1 == [cashedSearch count]) { [cashedSearch setTo:0]; // cycle¼ found=!![self selectEntry:[cashedSearch objectAt:0]]; } } } else { MiscList *foundLetters; MiscString *searchPattern=[[MiscString alloc] initString:pattern]; MiscTreeCmpMode_t cmp=cases? MiscTreeCmp_casestrcmp:MiscTreeCmp_strcmp; if(regexpr) cmp=cases? MiscTreeCmp_caseregex:MiscTreeCmp_regex; if(foundLetters=[[self root] listOfOccurence:searchPattern useLabel:YES cmp:cmp]) { [searchHash insertKey:NXCopyStringBuffer(pattern) value:foundLetters]; found=!![self selectEntry:[foundLetters objectAt:0]]; } searchPattern=[searchPattern free]; } return found; } - (int)replaceAll:(const char *)pattern with:(const char *)replacement mode:(SearchMode)mode regexpr:(BOOL)regexpr cases:(BOOL)cases { return SEARCH_UNIMPLEMENTED; } - (oneway void)makeSelectionVisible {} // although required these methods make no sense here - (oneway void)replaceSelection:(const char *)replacement {} - (oneway void)selectTextFrom:(int)start to:(int)end {} - (void)writeSelectionToPasteboard:(in Pasteboard *)pboard asType:(in NXAtom)type {} @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.