This is FmsDefaultController.m in view mode; [Download] [Up]
// FmsDefaultController
//
// Copyright 1994 Flying Monkey Software
// 8424 Todd Creek Cr. WestChester OH 45069
//
// This code is distributed as shareware. If you like it or use it, please
// send an appropriate amount of money (ten dollars is suggested) to the
// above address.
//
// Modification is cool by us, as well as inclusion of this code in a
// for-profit product in compiled form. However, Flying Monkey Software
// retains all copyrights; you are hereby not given permission to resell
// this code in code form without written consent of Flying Monkey.
#import <defaults/defaults.h>
#import "FmsDefaultController.h"
#import "FmsStringPair.h"
@implementation FmsDefaultController
- init
{
[super init];
defaultList = [[List alloc] init];
return self;
}
- free
{
[[defaultList freeObjects] free];
if (database != NULL)
{
free(database);
database = NULL;
}
return [super free];
}
- registerDefaults
{
struct _NXDefault *vector;
int i, I;
id element;
I = [defaultList count];
vector = (struct _NXDefault *)malloc(sizeof(struct _NXDefault)*(I+1));
for (i = 0; i < I; i++)
{
element = [defaultList objectAt:i];
vector[i].name = [element first];
vector[i].value = [element second];
}
vector[i].name = NULL;
vector[i].value = NULL;
NXRegisterDefaults(database,vector);
free(vector);
return self;
}
- remove:(char *)name
{
NXRemoveDefault(database,name);
return self;
}
- (const char *)database
{
return (const char *)database;
}
- setDatabase:(const char *)theDatabase
{
if (database != NULL)
{
free(database);
database = NULL;
}
strcpy((database = malloc(strlen(theDatabase)+1)),theDatabase);
return self;
}
// strings
- default:(char *)name toStringValue:(char *)theString
{
[defaultList addObject:[[FmsStringPair alloc] initFirst:name
second:theString]];
return self;
}
- (const char *)stringValue:(char *)name
{
return NXGetDefaultValue(database,name);
}
- setStringValue:(char *)name to:(const char *)theString
{
NXWriteDefault(database,name,theString);
return self;
}
// ints
- default:(char *)name toIntValue:(int)theInt
{
char value[64];
[defaultList addObject:[[FmsStringPair alloc] initFirst:name
second:[self convertIntValue:theInt to:value]]];
return self;
}
- (int)intValue:(char *)name
{
int value;
sscanf(NXGetDefaultValue(database,name),"%d",&value);
return value;
}
- (char *)convertIntValue:(int)theInt to:(char *)value
{
sprintf(value,"%d",theInt);
return value;
}
- setIntValue:(char *)name to:(int)theInt
{
char value[64];
[self convertIntValue:theInt to:value];
NXWriteDefault(database,name,value);
return self;
}
// floats
- default:(char *)name toFloatValue:(float)theFloat
{
char value[64];
[defaultList addObject:[[FmsStringPair alloc] initFirst:name
second:[self convertFloatValue:theFloat to:value]]];
return self;
}
- (float)floatValue:(char *)name
{
float value;
sscanf(NXGetDefaultValue(database,name),"%f",&value);
return value;
}
- (char *)convertFloatValue:(float)theFloat to:(char *)value
{
sprintf(value,"%f",theFloat);
return value;
}
- setFloatValue:(char *)name to:(float)theFloat
{
char value[64];
[self convertFloatValue:theFloat to:value];
NXWriteDefault(database,name,value);
return self;
}
// points
- default:(char *)name toPointValue:(NXPoint *)thePoint
{
char value[64];
[defaultList addObject:[[FmsStringPair alloc] initFirst:name
second:[self convertPointValue:thePoint to:value]]];
return self;
}
- (NXPoint *)get:(NXPoint *)point pointValue:(char *)name
{
if (point != NULL)
sscanf(NXGetDefaultValue(database,name),"%f %f",&(point->x),&(point->y));
return point;
}
- (char *)convertPointValue:(NXPoint *)thePoint to:(char *)value
{
sprintf(value,"%f %f",thePoint->x,thePoint->y);
return value;
}
- setPointValue:(char *)name to:(NXPoint *)thePoint
{
char value[64];
[self convertPointValue:thePoint to:value];
NXWriteDefault(database,name,value);
return self;
}
// sizes
- default:(char *)name toSizeValue:(NXSize *)theSize
{
char value[64];
[defaultList addObject:[[FmsStringPair alloc] initFirst:name
second:[self convertSizeValue:theSize to:value]]];
return self;
}
- (NXSize *)get:(NXSize *)size sizeValue:(char *)name
{
if (size != NULL)
sscanf(NXGetDefaultValue(database,name),"%f %f",
&(size->width),&(size->height));
return size;
}
- (char *)convertSizeValue:(NXSize *)theSize to:(char *)value
{
sprintf(value,"%f %f",theSize->width,theSize->height);
return value;
}
- setSizeValue:(char *)name to:(NXSize *)theSize
{
char value[64];
[self convertSizeValue:theSize to:value];
NXWriteDefault(database,name,value);
return self;
}
// rects
- default:(char *)name toRectValue:(NXRect *)theRect
{
char value[128];
[defaultList addObject:[[FmsStringPair alloc] initFirst:name
second:[self convertRectValue:theRect to:value]]];
return self;
}
- (NXRect *)get:(NXRect *)rect rectValue:(char *)name
{
if (rect != NULL)
sscanf(NXGetDefaultValue(database,name),"%f %f %f %f",
&(rect->origin.x),&(rect->origin.y),
&(rect->size.width),&(rect->size.height));
return rect;
}
- (char *)convertRectValue:(NXRect *)theRect to:(char *)value
{
sprintf(value,"%f %f %f %f",theRect->origin.x,theRect->origin.y,
theRect->size.width,theRect->size.height);
return value;
}
- setRectValue:(char *)name to:(NXRect *)theRect
{
char value[64];
[self convertRectValue:theRect to:value];
NXWriteDefault(database,name,value);
return self;
}
// colors
- default:(char *)name toColorValue:(NXColor)theColor
{
char value[64];
[defaultList addObject:[[FmsStringPair alloc] initFirst:name
second:[self convertColorValue:theColor to:value]]];
return self;
}
- (NXColor)colorValue:(char *)name
{
float red, green, blue, alpha;
sscanf(NXGetDefaultValue(database,name),
"%f %f %f %f",&red,&green,&blue,&alpha);
return NXConvertRGBAToColor(red,green,blue,alpha);
}
- (char *)convertColorValue:(NXColor)theColor to:(char *)value
{
float red, green, blue, alpha;
NXConvertColorToRGBA(theColor,&red,&green,&blue,&alpha);
sprintf(value,"%f %f %f %f",red,green,blue,alpha);
return value;
}
- setColorValue:(char *)name to:(NXColor)theColor
{
char value[64];
[self convertColorValue:theColor to:value];
NXWriteDefault(database,name,value);
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.