This is String.m in view mode; [Download] [Up]
/* Generated by Interface Builder */ #import "String.h" #import <strings.h> #import <stdlib.h> #import <stdio.h> #import <NXCType.h> #import <c.h> @implementation String - setString:(char *)AString { // If it's outta bounds theres nothing to do if(!AString) return self; // First see if we have to allocate space to the string [self preAlloc :strlen(AString)+1]; strcpy(buffer,AString); /* Copy in string */ return self; } - (char *)string { return buffer; } - freeString { if(!buffer) return self; /* Get out if nothing to free */ /* Free up string here */ free(buffer); /* Blank buffer and length so we know it's blank */ buffer = 0; length = 0; return self; } - (BOOL)writeString :(NXStream *)MyStream { if(length) { int strlength = strlen(buffer); if(NXWrite(MyStream,buffer,strlength) != strlength) return FALSE; /* A Problem */ } return TRUE; } - (BOOL)writeWithTerminator :(NXStream *)MyStream :(char)terminator { return [self writeWithTerminator :MyStream :&terminator :1]; } - (BOOL)writeWithTerminator :(NXStream *)MyStream :(char *)terminator :(int)mylength { if(![self writeString :MyStream]) return FALSE; if(NXWrite(MyStream,terminator,mylength) != mylength) return FALSE; return TRUE; } - (int)readString: (NXStream *)MyStream { char TempBuffer[2024]; int mylength; mylength = 0; do { if(NXRead(MyStream,&TempBuffer[mylength],1) != 1) break; /* Problem!! */ if((!NXIsPrint(TempBuffer[mylength])) && (TempBuffer[mylength] != 0xA)) continue; mylength++; } while(TempBuffer[mylength-1] != 0xA); if(mylength == 0) // Didn't read anything return 0; TempBuffer[mylength-1] = 0; /* Strip off linefeed */ /* Allocate some memory for our buffer */ [self setString:TempBuffer]; return strlen(TempBuffer)+1; } - (void)free { [self freeString]; [super free]; } - init { [super init]; /* Do my initialisation */ buffer = 0; length = 0; return self; } - preAlloc :(int)size { if(size <= length) return self; // we already have that size available [self freeString]; buffer = malloc(size); buffer[0] = 0; length = size; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.