This is XoxList.m in view mode; [Download] [Up]
XoxPlayers
@class BundleClasses : List
{
const char* ext;
int elen;
}
- initWith:(const char*) bext
{
[super init];
ext = bext;
elen = strlen(ext);
return self;
}
- loadFrom: (const char *) dirname
{
DIR *dir;
struct direct *de;
char path[MAXPATHLEN];
char name[60];
char *iptr;
BOOL validName;
if (!ext || !len) return nil;
dir = opendir(dirname);
if (dir == NULL)
{
return self;
}
while ((de = readdir(dir)) != NULL)
{
int i, numstrings;
// Ignore '.'-files (not really necessary, I guess)
if (de->d_name[0] == '.')
continue;
validName = NO;
if (de->d_namlen > elen &&
!strcmp(&de->d_name[de->d_namlen-elen], ext))
{
validName = YES;
}
if (!validName) continue;
// check if the name matches a module already loaded
numstrings = [gameList count];
strcpy(name, de->d_name);
// Smash out the '.' in "Foo.ext"
if (iptr = rindex(name, '.'))
*iptr = '\0';
sprintf(path,"%s/%s.XoX",dirname,name);
m = [[GameInfo alloc]
initWithScenario:NULL name:name path:path];
[gameList addObject: m];
}
closedir(dir);
return self;
}
- setupGameBrowser
{
id theMatrix;
char buf[MAXPATHLEN];
const char *ptr;
strcpy( buf, NXHomeDirectory());
strcat( buf, "/Library/XoxGames");
gameList = [[GameList alloc] init];
[self loadGamesFrom:buf];
ptr = NXGetDefaultValue([NXApp appName], "altGamePath");
if (ptr) [self loadGamesFrom:ptr];
[self loadGamesFrom: [[NXBundle mainBundle] directory]];
[self loadGamesFrom: "/LocalLibrary/XoxGames"];
return self;
}
do
{
NXBundle *myBundle = [[NXBundle allocFromZone:bundleZone]
initForDirectory:[gi path]];
theClass = [myBundle classNamed:[gi scenarioName]];
if (theClass)
{
theScenario = [[theClass allocFromZone:scenarioZone] init];
}
else
{
[myBundle free];
}
} while ((!theClass) && [gi useNextPath]);
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.