This is MOSybaseString.m in view mode; [Download] [Up]
// MOSybaseString.m // // by Mike Ferris // Part of MOKit // Copyright 1993, all rights reserved. // ABOUT MOKit // by Mike Ferris (mike@lorax.com) // // MOKit is a collection of useful and general objects. Permission is // granted by the author to use MOKit in your own programs in any way // you see fit. All other rights pertaining to the kit are reserved by the // author including the right to sell these objects as objects, as part // of a LIBRARY, or as SOURCE CODE. In plain English, I wish to retain // rights to these objects as objects, but allow the use of the objects // as pieces in a fully functional program. Permission is also granted to // redistribute the source code of MOKit for FREE as long as this copyright // notice is left intact and unchanged. NO WARRANTY is expressed or implied. // The author will under no circumstances be held responsible for ANY // consequences from the use of these objects. Since you don't have to pay // for them, and full source is provided, I think this is perfectly fair. #import "MOKit/MOSybaseString.h" #import <objc/objc-runtime.h> #define CLASS_VERSION 0 #define CLASS_NAME "MOSybaseString" @implementation MOSybaseString // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // =-=-=-=-=-=-=-=-=-=-=-=- Initializing the class -=-=-=-=-=-=-=-=-=-=-=-= // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + initialize // Set our version. { if (self == objc_lookUpClass(CLASS_NAME)) { [self setVersion:CLASS_VERSION]; } return self; } // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // =-=-=-=-=-=-=-=-=-=-=-=-= Sybase-ish Utilities =-=-=-=-=-=-=-=-=-=-=-=-= // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - convertUnixWildcardsToSybase // Converts all occurrences of "*" to "%" and all occurrences of "?" to "_". // This does not work on unique strings. { if (isUnique) { return nil; } [self replaceAllOccurrencesOfChar:'*' with:'%']; [self replaceAllOccurrencesOfChar:'?' with:'_']; return self; } - convertToCaseInsensitiveSearchString // Modifies a MOSybaseString by replacing all alphabetic // characters with a case-insensitive sql expression. (ie "a" or "A" gets // converted to "[aA]". This doesn't work for unique strings. { NXStream *stream = NULL; long l; char *buf; const char *s; int i; if (isUnique) { return nil; } if ([self isEmpty]) { return self; } // Convert to lower case [self convertToLower]; s = [self stringValue]; // Now create a stream to write the new version into stream = NXOpenMemory(NULL, 0, NX_READWRITE); // Write the new version for (i=0; i<len; i++) { if (NXIsAlpha(s[i])) { NXPutc(stream, '['); NXPutc(stream, s[i]); NXPutc(stream, NXToUpper(s[i])); NXPutc(stream, ']'); } else { NXPutc(stream, s[i]); } } // Flush and get the position of the stream (ie the length) NXFlush(stream); l = NXTell(stream); // Go back to the beginning, malloc enough space, and read the stream // back out. NXSeek(stream, 0, NX_FROMSTART); NX_MALLOC(buf, char, l+1); NXRead(stream, buf, l); // Cap the buffer buf[l]='\0'; // Free the stream NXCloseMemory(stream, NX_FREEBUFFER); // Set the stringValue of the new string to the case insensitive string // in the buffer. [self setStringValueNoCopy:buf shouldFree:YES]; return self; } - makeCaseInsensitiveSearchString // Creates a new MOSybaseString from aString by replacing all alphabetic // characters with a case-insensitive sql expression. (ie "a" or "A" gets // converted to "[aA]". { id ciss; // First make a copy ciss = [self deepCopy]; return [ciss convertToCaseInsensitiveSearchString]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.