This is COWSIBControlInterface.m in view mode; [Download] [Up]
/*
Copyright (C) 1994 Sean Luke
COWSIBControlInterface.m
and COWSControlIB--a category for Controls
and COWSCellIB--a category for Cells
Version 1.0
Sean Luke
*/
#import "COWSIBControlInterface.h"
#import "COWSLibraryNode.h"
#import <appkit/Control.h>
#import <appkit/Cell.h>
#import <stdlib.h>
#define COWSIBCONTROLINTERFACE_LARGEBUFFER 255
@implementation COWSIBControlInterface
- _prepareNodes
{
if (!output) output=[[COWSStringNode alloc] init];
if (!default_input) default_input=[[COWSStringNode alloc] init];
if (!input_1) input_1=[[COWSStringNode alloc] init];
if (!input_2) input_2=[[COWSStringNode alloc] init];
if (!input_3) input_3=[[COWSStringNode alloc] init];
if (!input_4) input_4=[[COWSStringNode alloc] init];
if (!input_5) input_5=[[COWSStringNode alloc] init];
if (!input_6) input_6=[[COWSStringNode alloc] init];
if (!input_7) input_7=[[COWSStringNode alloc] init];
if (!input_8) input_8=[[COWSStringNode alloc] init];
return self;
}
- awake
{
[super awake];
if (use_radio)
if (COWS_RADIO) [COWS_RADIO add:self]; // connects to radio if no
// interpreter and radio
// exists
value=[[COWSStringNode alloc] init];
[self _prepareNodes];
inited=1;
return self;
}
- init
{
id returnval=[super init];
printf("Initing\n");
if (use_radio)
if (COWS_RADIO) [COWS_RADIO add:self]; // connects to radio if no
// interpreter and radio
// exists
value=[[COWSStringNode alloc] init];
[self _prepareNodes];
inited=1;
return returnval;
}
- free
{
return [super free];
}
- loadLibrary:sender
{
id returnval=[super loadLibrary:sender];
if (![sender conformsTo:@protocol(LibraryControl)])
{
printf ("IBLibrary error: Interpreter cannot accept Library Control protocol!\n");
return NULL;
}
if (target&&output) [sender addLibraryFunction: [output string]
selector: @selector(performOutput:)
target: self];
interpreter=sender;
return returnval;
}
- setTarget:anObject
{
target=anObject;
return self;
}
- setAction:(SEL)aSelector
{
action=aSelector;
return self;
}
- (SEL)action
{
return action;
}
- target
{
return target;
}
- _callInterpreter:sender:(BOOL)include_argument
// calls interpreter based on sender,
// passing value as argument if asked for
{
id arguments=[[COWSArgumentList alloc] init];
id temp=[[COWSStringNode alloc] init];
if (!interpreter)
{
[arguments free];
[temp free];
return NULL;
}
if (include_argument)
{
[temp copyValue:value];
[arguments push:temp];
}
else [temp free];
if (sender==input1)
[interpreter interpretFunction:[input_1 string]
arguments:arguments];
else if (sender==input2)
[interpreter interpretFunction:[input_2 string]
arguments:arguments];
else if (sender==input3)
[interpreter interpretFunction:[input_3 string]
arguments:arguments];
else if (sender==input4)
[interpreter interpretFunction:[input_4 string]
arguments:arguments];
else if (sender==input5)
[interpreter interpretFunction:[input_5 string]
arguments:arguments];
else if (sender==input6)
[interpreter interpretFunction:[input_6 string]
arguments:arguments];
else if (sender==input7)
[interpreter interpretFunction:[input_7 string]
arguments:arguments];
else if (sender==input8)
[interpreter interpretFunction:[input_8 string]
arguments:arguments];
else // default
{
[interpreter interpretFunction:[default_input string]
arguments:arguments];
}
[arguments free];
return self;
}
- takeDoubleValueFrom:sender
{
[value setDoubleVal:[sender doubleValue]];
return [self _callInterpreter:sender:YES];
}
- takeFloatValueFrom:sender
{
[value setFloatVal:[sender floatValue]];
return [self _callInterpreter:sender:YES];
}
- takeIntValueFrom:sender
{
[value setIntVal:[sender intValue]];
return [self _callInterpreter:sender:YES];
}
- takeStringValueFrom:sender
{
const char* x=[sender stringValue];
if (x) [value setString:x];
return [self _callInterpreter:sender:YES];
}
- do:sender
{
return [self _callInterpreter:sender:NO];
}
- (const char*) stringValue
{
printf ("%s\n",[value string]);
return [value string];
}
- (int) intValue
{
return [value intVal];
}
- (float) floatValue
{
return [value floatVal];
}
- (double) doubleValue
{
return [value doubleVal];
}
- setStringValue:(const char*) this
{
[value setString:this];
return self;
}
- setFloatValue:(float) this
{
[value setFloatVal:this];
return self;
}
- setIntValue:(int) this
{
[value setIntVal:this];
return self;
}
- setDoubleValue:(double) this
{
[value setDoubleVal:this];
return self;
}
- performOutput:(COWSArgumentList*)arg_list
{
id temp=[[COWSStringNode alloc] init];
if ([arg_list top]) [value copyValue:[arg_list top]];
[target perform:action with:self];
[temp copyValue:value];
return temp;
}
- read:(NXTypedStream*) stream
{
char* o1;
char* o2;
char* o3;
char* o4;
char* o5;
char* o6;
char* o7;
char* o8;
char* o9;
char* o10;
[self _prepareNodes];
[super read:stream];
NXReadTypes(stream,"c**********",
&use_radio,&o1,&o2,&o3,&o4,&o5,&o6,&o7,&o8,&o9,&o10);
[input_1 setString:o1];
[input_2 setString:o2];
[input_3 setString:o3];
[input_4 setString:o4];
[input_5 setString:o5];
[input_6 setString:o6];
[input_7 setString:o7];
[input_8 setString:o8];
[default_input setString:o9];
[output setString:o10];
if (o1) free(o1);
if (o2) free(o2);
if (o3) free(o3);
if (o4) free(o4);
if (o5) free(o5);
if (o6) free(o6);
if (o7) free(o7);
if (o8) free(o8);
if (o9) free(o9);
if (o10) free(o10);
return self;
}
- write:(NXTypedStream*) stream
{
const char* o1;
const char* o2;
const char* o3;
const char* o4;
const char* o5;
const char* o6;
const char* o7;
const char* o8;
const char* o9;
const char* o10;
[self _prepareNodes];
[super write:stream];
o1=[input_1 string];
o2=[input_2 string];
o3=[input_3 string];
o4=[input_4 string];
o5=[input_5 string];
o6=[input_6 string];
o7=[input_7 string];
o8=[input_8 string];
o9=[default_input string];
o10=[output string];
NXWriteTypes(stream,"c**********",
&use_radio,&o1,&o2,&o3,&o4,&o5,&o6,&o7,&o8,&o9,&o10);
return self;
}
@end
@implementation Object (COWSObjectIB) // defaults which are changed
- returnIntValue:sender
{
return self;
}
- returnFloatValue:sender
{
return self;
}
- returnStringValue:sender
{
return self;
}
- returnDoubleValue:sender
{
return self;
}
@end
@implementation Cell (COWSCellIB)
- returnIntValue:sender
{
if ([sender respondsTo:@selector(setIntValue:)])
return [sender setIntValue:[self intValue]];
return NULL;
}
- returnFloatValue:sender
{
if ([sender respondsTo:@selector(setFloatValue:)])
return [sender setFloatValue:[self floatValue]];
return NULL;
}
- returnStringValue:sender
{
if ([sender respondsTo:@selector(setStringValue:)])
return [sender setStringValue:[self stringValue]];
return NULL;
}
- returnDoubleValue:sender
{
if ([sender respondsTo:@selector(setDoubleValue:)])
return [sender setDoubleValue:[self doubleValue]];
return NULL;
}
@end
@implementation Control (COWSControlIB)
- returnIntValue:sender
{
if ([sender respondsTo:@selector(setIntValue:)])
return [sender setIntValue:[self intValue]];
return NULL;
}
- returnFloatValue:sender
{
if ([sender respondsTo:@selector(setFloatValue:)])
return [sender setFloatValue:[self floatValue]];
return NULL;
}
- returnStringValue:sender
{
if ([sender respondsTo:@selector(setStringValue:)])
return [sender setStringValue:[self stringValue]];
return NULL;
}
- returnDoubleValue:sender
{
if ([sender respondsTo:@selector(setDoubleValue:)])
return [sender setDoubleValue:[self doubleValue]];
return NULL;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.