This is DefaultsTable.m in view mode; [Download] [Up]
#import "DefaultsTable.h" #import <stdlib.h> #define intDefaultFormat "%d" #define pointDefaultFormat "x:%f y:%f" #define colorDefaultFormat "r:%f g:%f b:%f a:%f" #define convertToColor NXConvertRGBAToColor #define convertFromColor NXConvertColorToRGBA int writeIntDefault(const char *name, int value) { char string[BUFSIZ]; (void) sprintf(string, intDefaultFormat, value); return writeDefault(name, string); } int writePointDefault(const char *name, NXPoint point) { char string[BUFSIZ]; (void) sprintf(string, pointDefaultFormat, point.x, point.y); return writeDefault(name, string); } NXPoint getPointDefault(const char *name) { NXPoint point; const char *string = getStringDefault(name); (void) sscanf(string, pointDefaultFormat, &point.x, &point.y); return point; } int writeColorDefault(const char *name, NXColor color) { char string[BUFSIZ]; float primaries[3], alpha; convertFromColor(color, &(primaries[0]), &(primaries[1]), &(primaries[2]), &alpha); (void) sprintf(string, colorDefaultFormat, primaries[0], primaries[1], primaries[2], alpha); return writeDefault(name, string); } NXColor getColorDefault(const char *name) { float primaries[3], alpha; const char *string = getStringDefault(name); (void) sscanf(string, colorDefaultFormat, &(primaries[0]), &(primaries[1]), &(primaries[2]), &alpha); return convertToColor(primaries[0], primaries[1], primaries[2], alpha); } @implementation DefaultsTable : NXStringTable - initFromFile:(const char *) file { return [[self init] readFromFile:file]; } - registerDefaults:(const char *) owner { if(![self applyToDefaults:owner function:NXRegisterDefaults]) return nil; return self; } - writeDefaults:(const char *) owner { if(![self applyToDefaults:owner function:(int (*)(const char *, const NXDefaultsVector)) NXWriteDefaults]) return nil; return self; } - updateDefaults { NXUpdateDefaults(); return self; } - (int) applyToDefaults:(const char *) owner function:(int (*)(const char *, const NXDefaultsVector)) routine { int i, status; const void *key, *value; struct _NXDefault *vector; NXHashState state = [self initState]; if((vector = (struct _NXDefault *) calloc((size_t) ([self count] + 1), sizeof(struct _NXDefault))) == NULL) perror("calloc"); for(i = 0; [self nextState:&state key:&key value:&value]; i++) { vector[i].name = (char *) key; vector[i].value = (char *) value; } vector[i].name = vector[i].value = NULL; status = (*routine)(owner, vector); cfree(vector); return status; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.