This is AppDefaults.m in view mode; [Download] [Up]
// Copyright 1991, 1994 Scott Hess. Permission to use, copy,
// modify, and distribute this software and its documentation for
// any purpose and without fee is hereby granted, provided that
// this copyright notice appear in all copies.
//
// Scott Hess makes no representations about the suitability of
// this software for any purpose. It is provided "as is" without
// express or implied warranty.
//
#import "AppDefaults.h"
@implementation Application (AppDefaults)
int appDefaultsReference=0;
-(const char *)default:(const char *)defName default:(const char *)defValue
{
// If the default name is bogus, there's no way to get a
// real value.
if( !defName || !defName[ 0]) {
return defValue;
// Get the real value and return it if non-NULL, otherwise
// return defValue. I use NXGetDefaultValue() here, though
// sometimes it's desirable to change that to NXReadDefault().
// As of yet, I've not determined which is saner.
// NXReadDefault() may be in light of the -defaultAs*:default:
// methods, which allow the specification of the default
// value to be moved from NXRegisterDefaults() to the point
// of use.
} else {
const char *value=NXGetDefaultValue( [self appName], defName);
return value ? value : defValue;
}
}
-(int)defaultAsInt:(const char *)defName default:(int)defValue
{
const char *value=[self default:defName default:NULL];
int ret;
// Attempt to find an integer in value.
if( sscanf( value, "%d", &ret)) {
return ret;
}
return defValue;
}
-(BOOL)defaultAsBOOL:(const char *)defName default:(BOOL)defValue
{
const char *value=[self default:defName default:NULL];
// If it's NULL, return the default value.
if( !value) {
return defValue;
// Explicit "YES" and "NO" are simple to handle.
} else if( !NXOrderStrings( value, "YES", NO, -1, NULL)) {
return YES;
} else if( !NXOrderStrings( value, "NO", NO, -1, NULL)) {
return NO;
// Otherwise, see if it's an integer and return that value
// if found.
} else {
int ret;
if( sscanf( value, "%d", &ret)) {
return ret;
}
return defValue;
}
}
-(float)defaultAsFloat:(const char *)defName default:(float)defValue
{
const char *value=[self default:defName default:NULL];
float ret;
// Attempt to find a float in value.
if( sscanf( value, "%f", &ret)) {
return ret;
}
return defValue;
}
-(NXColor)defaultAsColor:(const char *)defName default:(NXColor)defValue
{
const char *value=[self default:defName default:NULL];
// If there's a value, attempt to parse out rgba components
// and put them together into a color.
if( value) {
float r, g, b, a=NX_NOALPHA;
if( sscanf( value, "%f %f %f %f", &r, &g, &b, &a)>=3) {
return NXConvertRGBAToColor ( r, g, b, a);
}
}
return defValue;
}
// Call the corrosponding -default*:default: method with sane
// default values.
- (const char *)default:(const char *)defName
{
return [self default:defName default:NULL];
}
-(int)defaultAsInt:(const char *)defName
{
return [self defaultAsInt:defName default:0];
}
-(BOOL)defaultAsBOOL:(const char *)defName
{
return [self defaultAsBOOL:defName default:NO];
}
-(float)defaultAsFloat:(const char *)defName
{
return [self defaultAsFloat:defName default:0.0];
}
-(NXColor)defaultAsColor:(const char *)defName
{
return [self defaultAsColor:defName default:NX_COLORWHITE];
}
- default:(const char *)defName as:(const char *)defValue
{
// Cannot write if the default name is bogus.
if( !defName || !defName[ 0]) {
return nil;
}
// Also note if we fail to write.
if( !NXWriteDefault( [self appName], defName, defValue)) {
return nil;
}
return self;
}
static char buffer[ 32];
- default:(const char *)defName asInt:(int)defValue
{
sprintf( buffer, "%d", defValue);
return [self default:defName as:buffer];
}
- default:(const char *)defName asFloat:(float)defValue
{
sprintf( buffer, "%f", defValue);
return [self default:defName as:buffer];
}
- default:(const char *)defName asBOOL:(BOOL)defValue
{
return [self default:defName as:defValue ? "YES" : "NO"];
}
- default:(const char *)defName asColor:(NXColor)defValue
{
float r, g, b, a;
NXConvertColorToRGBA( defValue, &r, &g, &b, &a);
sprintf( buffer, "%f %f %f %f", r, g, b, a);
return [self default:defName as:buffer];
}
-(BOOL)cmpDefault:(const char *)defName with:(const char *)cmp
{
const char *value=[self default:defName];
// Only attempt a comparison if the strings both exist.
if( value && cmp) {
return !NXOrderStrings( value, cmp, YES, -1, NULL);
// If value && !cmp, not equal.
} else if( value) {
return NO;
// If !value && cmp, not equal.
} else if( cmp) {
return NO;
// If !value && !cmp, equal.
} else {
return YES;
}
}
-(BOOL)cmpDefault:(const char *)defName caseWith:(const char *)cmp
{
const char *value=[self default:defName];
// Only attempt a comparison if the strings both exist.
if( value && cmp) {
return !NXOrderStrings( value, cmp, NO, -1, NULL);
// If value && !cmp, not equal.
} else if( value) {
return NO;
// If !value && cmp, not equal.
} else if( cmp) {
return NO;
// If !value && !cmp, equal.
} else {
return YES;
}
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.