This is IMediaTable.m in view mode; [Download] [Up]
#import "IMediaTable.h"
#import "IMediaD.h"
#import <strings.h>
#import <appkit/Panel.h>
#import "errdebug.h"
#import "Localization.h"
#define LoStr(key) doLocalString(NULL,key,NULL)
// This exists as a class only there are no instances. It maps file
// extensions and RTF control words to media Classes and vice versa.
extern const char *mediaClassNameTable[];
extern Class MediaClassTable[];
@implementation IMediaTable
static unsigned int count;
+ initialize
// initialize from mediaClassNameTable. mediaClassNameTable is the only
// source file that directly references a media Class. At execute time
// a media Class is always referenced indirectly through this class.
{
const char **mediaClassNamePtr;
Class *MediaClassPtr;
for (mediaClassNamePtr = mediaClassNameTable,
MediaClassPtr = MediaClassTable; *mediaClassNamePtr != NULL;
++mediaClassNamePtr, ++MediaClassPtr) {
if ((*MediaClassPtr = (Class)objc_getClass(*mediaClassNamePtr))
== Nil) {
NXRunAlertPanel(LoStr("NewsBase"),LoStr("Media Class for %s is not linked in NewsBase."),NULL,NULL,NULL, *mediaClassNamePtr);
}
}
count = MediaClassPtr - MediaClassTable;
*MediaClassPtr = Nil;
return(self);
}
+ (Class)mediaClassAt:(unsigned int)index
{
return(MediaClassTable[index]);
}
+ (unsigned int)count
{
return(count);
}
+ (Class)mediaClassForRTFControlWord:(NXAtom)controlWord
// map RTF control word to media Class.
{
Class *MediaClassPtr;
for (MediaClassPtr = MediaClassTable; *MediaClassPtr != Nil;
++MediaClassPtr) {
if (controlWord == [(id)*MediaClassPtr rtfControlWord]) {
return(*MediaClassPtr);
}
}
return(Nil);
}
+ (Class)mediaClassForFileExtension:(NXAtom)fileExtension
// map file extension to media Class.
{
Class *MediaClassPtr;
fileExtension = NXUniqueString(fileExtension);
for (MediaClassPtr = MediaClassTable; *MediaClassPtr != Nil;
++MediaClassPtr) {
if (fileExtension == [(id)*MediaClassPtr fileExtension]) {
return(*MediaClassPtr);
}
}
return(Nil);
}
+ (Class)mediaClassForPasteboardType:(NXAtom)pasteboardType
{
Class *MediaClassPtr;
for (MediaClassPtr = MediaClassTable; *MediaClassPtr != Nil;
++MediaClassPtr) {
if (pasteboardType == [(id)*MediaClassPtr pasteboardType]) {
return(*MediaClassPtr);
}
}
return(Nil);
}
@end;
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.