This is MOStringANSI.m in view mode; [Download] [Up]
// MOStringANSI.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 "MOString.h" extern char *MOBuildStringFromFormatV(const char *formatStr, va_list param_list); @implementation MOString(ANSI) // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ANSI covers -=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // (strtok is not provided... see -tokenize: above) // (strcoll, and strxfrm are not provided) - (size_t)strlen // Returns the length of the string. Returns 0 if the string is empty. { return len; } - (const char *)strcpy:(const char *)s // Simply the same as -setStringValue: but returns the string as well. { [self setStringValue:s]; return str; } - (const char *)strncpy:(const char *)s :(size_t)n // Sets the string to be the first n characters of s. { char *buf=NULL; if ((s) && (n>0)) { NX_MALLOC(buf, char, n+1); strncpy(buf, s, n); buf[n]='\0'; } [self setStringValueNoCopy:buf shouldFree:YES]; return str; } - (const char *)strcat:(const char *)s // Adds the the given char string to the receiver's contents. // Returns NULL if s is NULL or empty or the receiver is unique, self if // it succeeds. // Unique strings CANNOT be modified. { if (isUnique) { return NULL; } if ((!s) || (strlen(s)==0)) { return NULL; } if ([self isNull]) { [self setStringValue:s]; } else { char *newStr; NX_MALLOC(newStr, char, len+strlen(s)+1); strcpy(newStr, str); strcat(newStr, s); [self setStringValueNoCopy:newStr shouldFree:YES]; } return str; } - (const char *)strncat:(const char *)s :(size_t)n // Adds the first n characters of s to the string. // Unique strings CANNOT be modified. { char *buf=NULL; if (isUnique) { return NULL; } if ((s) && (n>0)) { NX_MALLOC(buf, char, n+1); strncpy(buf, s, n); buf[n]='\0'; } return [self strcat:buf]; } - (int)strcmp:(const char *)s // Compares the receiver's contents with s using strcmp. // Returns the normal strcmp values or -2 on error. { if ((isUnique?!uStr:!str) || (!s)) { return -2; } return strcmp((isUnique?uStr:str), s); } - (int)strncmp:(const char *)s :(size_t)n // Compares the receiver's contents with s using strcmp to n significant chars. // Returns the normal strcmp values or -2 on error. { if ((isUnique?!uStr:!str) || (!s)) { return -2; } return strncmp((isUnique?uStr:str), s, n); } - (const char *)strchr:(char)aChar // Returns a pointer to the first occurrence of aChar in the string. // Returns NULL if the string is empty or aChar does not appear in it. { if (isUnique?!uStr:!str) { return NULL; } return strchr((isUnique?uStr:str), aChar); } - (const char *)strrchr:(char)aChar // Returns a pointer to the first occurrence of aChar in the string. // Returns NULL if the string is empty or aChar does not appear in it. { if (isUnique?!uStr:!str) { return NULL; } return strrchr((isUnique?uStr:str), aChar); } - (const char *)strstr:(const char *)searchStr // Returns a pointer to the first occurrence of searchStr in the // contents of the receiver or NULL if there isn't one. { if ((isUnique?!uStr:!str) || (!searchStr)) { return NULL; } return strstr((isUnique?uStr:str), searchStr); } - (const char *)strpbrk:(const char *)breakChars // Returns a pointer to the first occurrence of any char in breakChars or // NULL if there isn't one. { if ((isUnique?!uStr:!str) || (!breakChars)) { return NULL; } return strpbrk((isUnique?uStr:str), breakChars); } - (size_t)strspn:(const char *)acceptableChars // Returns the length of the segment of the contents of the receiver // starting from the beginning which consists entirely of characters in // acceptableChars or -1 if one of the strings is NULL. { if ((isUnique?!uStr:!str) || (!acceptableChars)) { return 0; } return strspn((isUnique?uStr:str), acceptableChars); } - (size_t)strcspn:(const char *)breakChars // Returns the length of the segment of the contents of the receiver // starting from the beginning which consists entirely of characters not in // breakChars or 0 if one of the strings is NULL. { if ((isUnique?!uStr:!str) || (!breakChars)) { return 0; } return strcspn((isUnique?uStr:str), breakChars); } - sprintf:(const char *)formatStr, ... // Sets the strings contents as the result of printf'ing with the // given format string and arguments. Same as setFromFormat:, ... { va_list param_list; char *buf; va_start(param_list, formatStr); buf = MOBuildStringFromFormatV(formatStr, param_list); va_end(param_list); [self setStringValueNoCopy:buf shouldFree:YES]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.