This is HTuple.m in view mode; [Download] [Up]
/* HTuple.m by Paul Kunz December 1991
* Object used to store information on open Hippo Tuple and methods
* to archive it to NXTypedStream.
*
* $Id: HTuple.m,v 2.9 1993/07/26 21:49:09 pfkeb Exp $
*
* Copyright (C) 1991 The Board of Trustees of
* The Leland Stanford Junior University. All Rights Reserved.
*/
#import <appkit/appkit.h>
#import "HTuple.h"
#import "HAddColFunction.h"
#define INDEX_VERSION 1
#define FUNCTION_VERSION 2
#define CURRENT_VERSION FUNCTION_VERSION
@implementation HTuple
+ initialize
{
[self setVersion:CURRENT_VERSION];
return self;
}
- initTuple:(ntuple) nt file:(const char *)path
by:(BOOL)refFlag mode:(BOOL) binFlag index:(int) iValue
{
[super init];
tuple = nt;
isRef = refFlag;
isBinary = binFlag;
if ( filename == NULL ) {
NX_ZONEMALLOC( [self zone], filename, char, strlen(path)+1 );
} else {
NX_ZONEREALLOC( [self zone], filename, char, strlen(path)+1 );
}
strcpy( filename, path );
[self setFakeFilename:NO];
ntindex = iValue;
return self;
}
- (ntuple) ntuple
{
return tuple;
}
- setNtuple:(ntuple) aTuple;
{
tuple = aTuple;
return self;
}
- (BOOL) isRef
{
return isRef;
}
- setIsRef:(BOOL) refFlag
{
isRef = refFlag;
return self;
}
- setIsBinary:(BOOL) binFlag
{
isBinary = binFlag;
return self;
}
- (const char *)filename
{
return filename;
}
- setFilename:(const char *)path
{
if ( filename == NULL ) {
NX_ZONEMALLOC( [self zone], filename, char, strlen(path)+1 );
} else {
NX_ZONEREALLOC( [self zone], filename, char, strlen(path)+1 );
}
strcpy( filename, path );
return self;
}
- (int) index
{
return ntindex;
}
- setIndex:(int) value
{
ntindex = value;
return self;
}
- setAltFilename:(const char *)path
{
if ( altfilename == NULL ) {
NX_ZONEMALLOC( [self zone], altfilename, char, strlen(path)+1 );
} else {
NX_ZONEREALLOC( [self zone], altfilename, char, strlen(path)+1 );
}
strcpy( altfilename, path );
return self;
}
- (const char *)altfilename
{
return altfilename;
}
- (BOOL) isFakeFilename
{
return fakeFilename;
}
- setFakeFilename:(BOOL) bValue
{
fakeFilename = bValue;
return self;
}
- (BOOL) isSameTupleAs:aTuple
{
if ( strcmp( filename, [aTuple filename] ) ) {
if ( !altfilename || strcmp( altfilename, [aTuple filename] ) ) {
return NO;
}
}
if ( [aTuple index] != ntindex ) {
return NO;
}
return YES;
}
- (const char *) title
{
if ( tuple ) {
return h_getNtTitle( tuple );
} else {
return "not available";
}
}
/* Methods for handling column functions */
- (List *) functionList
{
if ( !functionList ) {
functionList = [[List allocFromZone:[self zone]] initCount:0];
}
return functionList;
}
- takeFunctionList:(List *)list
{
functionList = [self functionList];
[functionList appendList:list];
[list empty];
return self;
}
- startArchivingTo:(const char *)directory
{
HFunction *func;
int i;
i = [functionList count];
while( i-- ) {
func = [functionList objectAt:i];
[func saveToDirectory:directory];
}
return self;
}
- write:(NXTypedStream *) stream
{
ntuple ntlist[] = {NULL, NULL};
char *buffer;
int nt_size, len_fn;
[super write:stream];
len_fn = strlen( filename );
NXWriteTypes( stream, "cci", &isRef, &isBinary, &len_fn );
NXWriteTypes( stream, "*", &filename );
if ( [HTuple version] >= INDEX_VERSION ) {
NXWriteTypes( stream, "i", &ntindex );
}
if ( !isRef ) {
nt_size = h_ntSize( tuple );
NX_ZONEMALLOC( [self zone], buffer, char, nt_size );
ntlist[0] = tuple;
h_writeMem( buffer, nt_size, NULL, ntlist );
NXWriteType( stream, "i", &nt_size );
NXWriteArray( stream, "c", nt_size, buffer );
NX_FREE(buffer);
}
if ( [HTuple version] >= FUNCTION_VERSION ) {
NXWriteObject( stream, functionList);
}
return self;
}
- read:(NXTypedStream *) stream
{
ntuple *ntlist;
display *dlist;
char *buffer;
int nt_size, len_fn;
[super read:stream];
NXReadTypes( stream, "cci", &isRef, &isBinary, &len_fn );
NX_ZONEMALLOC( [self zone], filename, char, len_fn+1 );
NXReadTypes( stream, "*", &filename );
if ( NXTypedStreamClassVersion(stream, "HTuple") >= INDEX_VERSION ) {
NXReadType( stream, "i", &ntindex );
}
if ( !isRef ) {
NXReadType( stream, "i", &nt_size );
NX_ZONEMALLOC( [self zone], buffer, char, nt_size );
NXReadArray( stream, "c", nt_size, buffer );
h_readMem( buffer, nt_size, &dlist, &ntlist );
tuple = ntlist[0];
NX_FREE(buffer);
}
if ( NXTypedStreamClassVersion(stream, "HTuple") >= FUNCTION_VERSION ) {
functionList = NXReadObject( stream );
}
return self;
}
- (int) finishUnarchivingFrom:(const char *)directory;
{
HAddColFunction *funcObj;
unsigned int i, count;
int irc;
if ( !isRef ) {
return 0;
}
count = [functionList count];
if ( !count ) {
return 0;
}
/* The order of columns is importantfor the plot binding */
for ( i = 0; i < count; i++ ) {
funcObj = [functionList objectAt:i];
[funcObj initFromDirectory:directory];
irc = [funcObj runWith:self];
if ( irc != 0 ) return irc;
}
return 0;
}
- free
{
h_freeNt( tuple );
NXZoneFree([self zone], filename );
NXZoneFree([self zone], altfilename );
[functionList freeObjects];
NXZoneFree([self zone], functionList);
return [super free];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.