This is EDBConnector.m in view mode; [Download] [Up]
#import "EDBConnector.h"
#import "EDBConnections.h"
#import <ctype.h>
#define NOLDEBUG
@implementation EDBConnector
- init
{
return [self initWithSource:nil andDestination:nil forOutlet:NULL
andSel:NULL];
}
- initWithSource:s andDestination:d forOutlet:(const char *)name
andSel:(const char *)sel
{
[super init];
source = s;
destination = d;
outletName = (name!=NULL) ? NXUniqueString(name) : NULL;
selName = (sel!=NULL) ? NXCopyStringBuffer(sel) : NULL;
sequence = 0;
return self;
}
- free
{
if (selName)
free((char *)selName);
return [super free];
}
- source
{
return source;
}
- destination
{
return destination;
}
- establishConnection
{
char string [1000];
SEL sel;
SEL actionSel;
sprintf(string,"set%s:",outletName);
if (string[3]>='a' && string[3]<='z')
string[3] = toupper(string[3]);
sel = sel_getUid(string);
if (sel!=NULL && [source respondsTo:sel])
[source perform:sel with:destination];
else if ([source respondsTo:@selector(establishEDBConnection:)])
{
[source establishEDBConnection:self];
return self;
}
else
object_setInstanceVariable(source,outletName,destination);
if (selName != NULL)
{
sprintf(string,"set%sAction:",outletName);
if (string[3]>='a' && string[3]<='z')
string[3] = toupper(string[3]);
sel = sel_getUid(string);
actionSel = sel_getUid(selName);
if (sel!=NULL && [source respondsTo:sel])
[source perform:sel with:(id)actionSel];
else
{
sprintf(string,"%sAction",outletName);
object_setInstanceVariable(source,string,actionSel);
}
}
return self;
}
- nibInstantiate
{
source = [source nibInstantiate];
destination = [destination nibInstantiate];
return self;
}
- renewObject:old to:new
{
if (old == source)
source = new;
else if (old == destination)
destination = new;
return self;
}
- read:(NXTypedStream *)stream
{
u_short dummy;
#ifdef LDEBUG
fprintf(stderr,"%s read:\n",[self name]);
#endif
[super read:stream];
source = NXReadObject(stream);
destination = NXReadObject(stream);
NXReadType(stream,"%",&outletName);
NXReadType(stream,"*",&selName);
NXReadTypes(stream,"SS",&sequence,&dummy);
#ifdef LDEBUG
fprintf(stderr,"destination=%lx,name=%s\n",
(u_long)destination,[destination name]);
#endif
return self;
}
- write:(NXTypedStream *)stream
{
u_short dummy = 0;
#ifdef LDEBUG
fprintf(stderr,"%s write:\n",[self name]);
#endif
[super write:stream];
NXWriteObjectReference(stream,source);
NXWriteObjectReference(stream,destination);
NXWriteType(stream,"%",&outletName);
NXWriteType(stream,"*",&selName);
NXWriteTypes(stream,"SS",&sequence,&dummy);
return self;
}
- (NXAtom)outletName
{
return outletName;
}
- setOutletName:(NXAtom)name
{
outletName = name;
return self;
}
- (const char *)selName
{
return selName;
}
- setSelName:(const char *)name
{
if (selName != NULL)
free((char *)selName);
selName = (name==NULL) ? NULL : NXCopyStringBuffer(name);
return self;
}
- (u_short)sequence
{
return sequence;
}
- setSequence:(u_short)seq
{
sequence = seq;
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.