This is Pattern.m in view mode; [Download] [Up]
#import "Pattern.h"
#import <appkit/appkit.h>
#import <objc/Object.h>
#include <streams/streams.h>
#import <stdlib.h>
#import <string.h>
#import <appkit/publicWraps.h> /* for NXBeep() */
#define PAT_UNKOWN 0
#define PAT_ASCII 1
#define PAT_BIN 2
@implementation Pattern
+ new
{
self=[super new];
return self;
}
- init
{
[super init];
fileName = 0;
return self;
}
- (char *)fileName
{
return fileName;
}
- (int)Dimension
{
return (int)dimPat;
}
- (int)Quantity
{
return (int)quanPat;
}
- (float)Maximum;
{
return (float)maxPat;
}
// carefull 'cause it's the real pointer to pattern
- (float *)thePattern:(int)i
{
return (float *)PatArray[i];
}
- setFileName:(char *)aName
{
if (fileName)
free(fileName);
fileName = (char *)malloc(strlen(aName)+1);
strcpy(fileName,aName);
return self;
}
- load:sender
{
int i,n;
char savecode[10];
char *str1="ascii";
char *str2="bin";
NXStream *stream;
// disallocation of PatArray
if (PatArray) {
for (i=0; i<quanPat; i++)
free(PatArray[i]);
free(PatArray);
}
stream=NXMapFile(fileName,NX_READONLY);
if (stream) {
NX_DURING
NXScanf(stream, "%s%d%d",savecode,&quanPat,&dimPat);
PatSaveCode=PAT_UNKOWN;
if (strcmp(savecode,str1)==0)
PatSaveCode=PAT_ASCII;
if (strcmp(savecode,str2)==0)
PatSaveCode=PAT_BIN;
NX_ASSERT( (PatSaveCode!=PAT_UNKOWN),"Unkown pattern file");
// if (PatSaveCode==PAT_UNKOWN) NX_VALRETURN(nil);
// new allocation of PatArray
PatArray=0;
PatArray=(float **) malloc(quanPat*sizeof(float *));
NX_ASSERT( PatArray,"Bad allocation of pattern array");
// if (!PatArray) NX_VALRETURN(nil);
for (i=0; i<quanPat; i++)
PatArray[i]=(float *) malloc(dimPat*sizeof(float));
maxPat=0.0;
switch (PatSaveCode) {
case PAT_ASCII:
for (i=0; i<quanPat; i++)
for (n=0; n<dimPat; n++) {
NXScanf(stream, "%f",&PatArray[i][n]);
maxPat=(maxPat<PatArray[i][n]) ? PatArray[i][n]:maxPat;
}
break;
case PAT_BIN:
NXSeek(stream,quanPat*dimPat*sizeof(float),NX_FROMEND);
for (i=0; i<quanPat; i++)
for (n=0; n<dimPat; n++)
NXRead(stream,&PatArray[i][n],sizeof(float));
break;
}
NXCloseMemory(stream,NX_FREEBUFFER);
NX_VALRETURN(self);
NX_HANDLER
NX_DURING
NXCloseMemory(stream,NX_FREEBUFFER);
NX_HANDLER
NX_ENDHANDLER
return nil;
NX_ENDHANDLER
return self;
}
return nil;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.