This is ClassTable.m in view mode; [Download] [Up]
/* Generated by Interface Builder, modified by the author */ /* File: ClassTable.m */ #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/dir.h> #import "ClassTable.h" #import <streams/streams.h> #import <NXCType.h> #import <objc/Storage.h> #import <appkit/Text.h> #import <appkit/Matrix.h> @implementation ClassTable typedef struct _classinfo { char className[128]; char path[1024]; } CLASSINFO; - init /* init object */ { [super init]; table= [[Storage alloc] initCount:100 elementSize:sizeof( CLASSINFO) description:NULL]; numberOfElements= 0; return self; } - reset /* reset object */ { [table empty]; numberOfElements= 0; return self; } - (BOOL)readDirectory:(char *)aName /* read the object definition in the directory */ { int position; CLASSINFO classinfo; char *pointer; DIR *directory; struct direct *entry; if( (directory= opendir( aName)) != NULL) { while( (entry= readdir( directory)) != NULL) { if( strcmp( entry->d_name, ".") && strcmp( entry->d_name, "..")) { strcpy( classinfo.path, aName); strcat( classinfo.path, "/"); strcat( classinfo.path, entry->d_name); if( ![self readDirectory:classinfo.path]) /* is directory ? */ { if( NXIsUpper( entry->d_name[0]) && ((pointer= rindex( entry->d_name, '.')) != NULL) && !strcmp( pointer+1, "h")) { *pointer= (char)0; strcpy( classinfo.className, entry->d_name); position= 0; /* search position to insert */ while( (position < numberOfElements) && (NXOrderStrings( (unsigned char *)((CLASSINFO *)[table elementAt:position])->className, (unsigned char *)classinfo.className, YES, -1, NULL) < 0)) { position++; } [table insert:&classinfo at:position]; /* insert */ numberOfElements++; } } } } closedir( directory); } return (directory != NULL); } - readClassesAtPath:(char *)aPath /* read the object definition at the path */ { char *start, *end; end= aPath; do { start= end; if( (end= index( start, ':')) != NULL) { *end= (char)0; } [self readDirectory:start]; if( end != NULL) { *end++= ':'; } } while( end != NULL); return self; } - (int)fillMatrix:aMatrix; /* fill a matrix */ { int count; for( count= 0; count < numberOfElements; count++) { [[aMatrix addRow] setTitle:((CLASSINFO *)[table elementAt:count])->className at:count:0]; } return numberOfElements; } - (BOOL)fillFile:(char *)aFilename /* fill a file */ { char class[256]; int count; BOOL ok; NXStream *stream; if( ok= ((stream= NXOpenMemory( NULL, 0, NX_WRITEONLY)) != NULL)) /* open stream */ { for( count= 0; count < numberOfElements; count++) { strcpy( class, ((CLASSINFO *)[table elementAt:count])->className); strcat( class, "\n"); NXWrite( stream, class, strlen( class)); /* write class */ } ok= (NXSaveToFile( stream, aFilename) == 0); /* save to file */ NXCloseMemory( stream, NX_TRUNCATEBUFFER); /* close stream */ } return ok; } - (char *)getPathAtPosition:(int)aPosition /* get class's path */ { return ((CLASSINFO *)[table elementAt:aPosition])->path; } - (int)getPositionOfClass:(char *)aClassName /* get position of class */ { int i, position; for( i= 0, position= -1; i < numberOfElements; i++) { if( !strcmp( ((CLASSINFO *)[table elementAt:i])->className, aClassName)) { position= i; i= numberOfElements; } } return position; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.