This is ModuleList.m in view mode; [Download] [Up]
/* indent:4 tabsize:8 font:fixed-width */
#import "ModuleList.h"
#define str_copy(str,zone) (( str== NULL) ? NULL : NXCopyStringBufferFromZone(str,zone))
#define str_free(str) {if (str) free(str);}
@implementation ModuleInfo
/*----------------------------------------------------------------------------
|
| - initWithController:aController name:(const char *)aName \
| path:(const char *)aPath
|
| returns: (id) self OK
| (id) nil Unable to initialize.
|
|-----------------------------------------------------------------------------
|
| Designated initializer for ModuleInfo class.
|
\----------------------------------------------------------------------------*/
- initWithController:aController
name:(const char *)aName
path:(const char *)aPath
{
[super init];
controller = aController;
// get the bundle for this game
if (aPath && strlen(aPath))
{
theBundle = [[NXBundle allocFromZone:[self zone]]
initForDirectory:aPath];
if (theBundle == nil)
{
NXLogError("Unable to access bundle %s (%s)\n", aPath, aName);
[self free];
return nil;
}
}
else
{
NXLogError("ModuleList:initWithView:name:path: -- invalid path\n");
return nil;
}
realName = str_copy(aName, [self zone]);
/* this lets you customize the name of the game using the
Localizable.strings file in the game bundle */
gameName = str_copy(
NXLoadLocalStringFromTableInBundle(NULL, theBundle, aName, NULL),
[self zone]);
return self;
}
/*----------------------------------------------------------------------------
|
| - setController:newController
|
| returns: (id) the old controller
|
|-----------------------------------------------------------------------------
|
| Set the game controller.
|
\----------------------------------------------------------------------------*/
- setController:newController
{
id oldController = controller;
controller = newController;
return oldController;
}
/*----------------------------------------------------------------------------
|
| - controller
|
| returns: (id) the controller
|
|-----------------------------------------------------------------------------
|
| Return the game controller.
|
\----------------------------------------------------------------------------*/
- controller
{
return controller;
}
/*----------------------------------------------------------------------------
|
| - setFailed:(BOOL)flag
|
| returns: (id) self
|
|-----------------------------------------------------------------------------
|
| Set the failed flag. Turn on the failed flag when the module has failed
| to load.
|
\----------------------------------------------------------------------------*/
- setFailed:(BOOL)flag
{
failed = flag;
return self;
}
/*----------------------------------------------------------------------------
|
| - (BOOL)failed
|
| returns: (BOOL) state of failed flag
|
|-----------------------------------------------------------------------------
|
| Return the failed flag.
|
\----------------------------------------------------------------------------*/
- (BOOL)failed
{
return failed;
}
/*----------------------------------------------------------------------------
|
| - (const char *) gameName
|
| returns: (const char *) the name of the game
|
|-----------------------------------------------------------------------------
|
| Returns the name of this game module (localized).
|
\----------------------------------------------------------------------------*/
- (const char *) gameName
{
return gameName;
}
/*----------------------------------------------------------------------------
|
| - (const char *) realName
|
| returns: (const char *) the real name of the game
|
|-----------------------------------------------------------------------------
|
| Returns the name of this game module (non-localized).
|
\----------------------------------------------------------------------------*/
- (const char *) realName
{
return realName;
}
/*----------------------------------------------------------------------------
|
| - (const char *) path
|
| returns: (const char *) the path of the module
|
|-----------------------------------------------------------------------------
|
| Returns the path to this game module.
|
\----------------------------------------------------------------------------*/
- (const char *) path
{
return [theBundle directory];
}
/*----------------------------------------------------------------------------
|
| - (NXBundle *)bundle
|
| returns: (NXBundle *) the bundle for the module
|
|-----------------------------------------------------------------------------
|
| Returns an NXBundle corresponding to this game module.
|
\----------------------------------------------------------------------------*/
- (NXBundle *)bundle
{
return theBundle;
}
/*----------------------------------------------------------------------------
|
| - free
|
| returns: [super free]
|
|-----------------------------------------------------------------------------
|
| Deallocate this object.
|
\----------------------------------------------------------------------------*/
- free
{
[controller free];
str_free(gameName);
str_free(realName);
// NXBundles with dynamically loaded code can't be freed; this
// might be a problem, but I don't think so.
[theBundle free];
return [super free];
}
@end
/*===========================================================================*/
@implementation ModuleList
- (const char *) nameAt: (int) i
{
return [[self objectAt: i] gameName];
}
- (const char *) realNameAt: (int) i
{
return [[self objectAt: i] realName];
}
- controllerAt: (int) i
{
return [[self objectAt: i] controller];
}
- (const char *)pathAt:(int)i
{
return [[self objectAt:i] path];
}
static int docompare(const void *x, const void *y)
{
return strcasecmp([(id)(*(ModuleInfo **)x) realName],
[(id)(*(ModuleInfo **)y) realName]);
}
- sort
{
qsort((ModuleInfo **)dataPtr, numElements, sizeof(id), docompare);
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.