This is OATextFieldFormatter.m in view mode; [Download] [Up]
// OATextFieldFormatter:Object // // COPYRIGHT 1994 BY M. ONYSCHUK AND ASSOCIATES INC. // ALL RIGHTS RESERVED. #import "OATextFieldFormatter.h" #import <objc/hashtable.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @implementation OATextFieldFormatter:Object // Local Functions static char * build_string_from_format_v(const char *format_str, va_list param_list) // This function takes a format string and a variable argument // list. It returns a pointer to a newly allocated chunk of // memory containing the results of sprintf'ing the format string // and va_list into the new memory. // // This function does not limit input data to a predetermined // size. { long l; char *str; NXStream *stream; stream = NXOpenMemory(NULL, 0, NX_READWRITE); NXVPrintf(stream, format_str, param_list); NXFlush(stream); NXSeek(stream, 0, NX_FROMEND); l = NXTell(stream); str = (char *)malloc(sizeof(char) * (l+1)); NXSeek(stream, 0, NX_FROMSTART); NXRead(stream, str, l); str[l] = '\0'; NXCloseMemory(stream, NX_FREEBUFFER); return str; } - free { if (output) { NXZoneFree([self zone], output); } return [super free]; } - filterSubstring:(unsigned char *)inputText ofSize:(int)inputSize at:(int)position { char *myOutput; myOutput = NXZoneMalloc([self zone], (sizeof(unsigned char) * inputSize) + 1); strncpy(myOutput, inputText, inputSize); myOutput[inputSize] = '\0'; [self setOutputNoCopy:myOutput]; return self; } - (BOOL)formatString:(unsigned char *)inputText { [self setOutput:inputText]; return NO; } - setTextFieldCell:aCell { return self; } - (const char *)output { return output; } - setOutput:(const char *)aValue { return [self setOutputNoCopy:(aValue) ? NXCopyStringBufferFromZone(aValue, [self zone]) : NULL]; } - setOutputNoCopy:(const char *)aValue { if (output) { NXZoneFree([self zone], output); } output = aValue; return self; } - setOutputFormat:(const char *)aFormat, ... { char *aString; va_list paramList; va_start(paramList, aFormat); aString = build_string_from_format_v(aFormat, paramList); va_end(param_list); [self setOutput:aString]; free(aString); return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.