diff options
Diffstat (limited to 'macosx/PcsxPlugin.m')
-rw-r--r-- | macosx/PcsxPlugin.m | 303 |
1 files changed, 0 insertions, 303 deletions
diff --git a/macosx/PcsxPlugin.m b/macosx/PcsxPlugin.m deleted file mode 100644 index 9ee3111..0000000 --- a/macosx/PcsxPlugin.m +++ /dev/null @@ -1,303 +0,0 @@ -// -// PcsxPlugin.m -// Pcsx -// -// Created by Gil Pedersen on Fri Oct 03 2003. -// Copyright (c) 2003 __MyCompanyName__. All rights reserved. -// - -#import <Cocoa/Cocoa.h> -#import "PcsxPlugin.h" -#include "psxcommon.h" -#include "plugins.h" - -@implementation PcsxPlugin - -+ (NSString *)getPrefixForType:(int)aType -{ - switch (aType) { - case PSE_LT_GPU: return @"GPU"; - case PSE_LT_CDR: return @"CDR"; - case PSE_LT_SPU: return @"SPU"; - case PSE_LT_PAD: return @"PAD"; - case PSE_LT_NET: return @"NET"; - } - - return @""; -} - -+ (NSString *)getDefaultKeyForType:(int)aType -{ - //return @"Plugin" [PcsxPlugin getPrefixForType:aType]; - switch (aType) { - case PSE_LT_GPU: return @"PluginGPU"; - case PSE_LT_CDR: return @"PluginCDR"; - case PSE_LT_SPU: return @"PluginSPU"; - case PSE_LT_PAD: return @"PluginPAD"; - case PSE_LT_NET: return @"PluginNET"; - } - - return @""; -} - -+ (char **)getConfigEntriesForType:(int)aType -{ - static char *gpu[2] = {(char *)&Config.Gpu, NULL}; - static char *cdr[2] = {(char *)&Config.Cdr, NULL}; - static char *spu[2] = {(char *)&Config.Spu, NULL}; - static char *pad[3] = {(char *)&Config.Pad1, (char *)&Config.Pad2, NULL}; - static char *net[2] = {(char *)&Config.Net, NULL}; - - switch (aType) { - case PSE_LT_GPU: return (char **)gpu; - case PSE_LT_CDR: return (char **)cdr; - case PSE_LT_SPU: return (char **)spu; - case PSE_LT_PAD: return (char **)pad; - case PSE_LT_NET: return (char **)net; - } - - return nil; -} - -- (id)initWithPath:(NSString *)aPath -{ - if (!(self = [super init])) { - return nil; - } - - PSEgetLibType PSE_getLibType = NULL; - PSEgetLibVersion PSE_getLibVersion = NULL; - PSEgetLibName PSE_getLibName = NULL; - - pluginRef = nil; - name = nil; - path = [aPath retain]; - NSString *fullPath = [[NSString stringWithCString:Config.PluginsDir] stringByAppendingPathComponent:path]; - - pluginRef = SysLoadLibrary([fullPath fileSystemRepresentation]); - if (pluginRef == nil) { - [self release]; - return nil; - } - - // TODO: add support for plugins with multiple functionalities??? - PSE_getLibType = (PSEgetLibType) SysLoadSym(pluginRef, "PSEgetLibType"); - if (SysLibError() != nil) { - if (([path rangeOfString: @"gpu" options:NSCaseInsensitiveSearch]).length != 0) - type = PSE_LT_GPU; - else if (([path rangeOfString: @"cdr" options:NSCaseInsensitiveSearch]).length != 0) - type = PSE_LT_CDR; - else if (([path rangeOfString: @"spu" options:NSCaseInsensitiveSearch]).length != 0) - type = PSE_LT_SPU; - else if (([path rangeOfString: @"pad" options:NSCaseInsensitiveSearch]).length != 0) - type = PSE_LT_PAD; - else { - [self release]; - return nil; - } - } else { - type = (int)PSE_getLibType(); - if (type != PSE_LT_GPU && type != PSE_LT_CDR && type != PSE_LT_SPU && type != PSE_LT_PAD) { - [self release]; - return nil; - } - } - - PSE_getLibName = (PSEgetLibName) SysLoadSym(pluginRef, "PSEgetLibName"); - if (SysLibError() == nil) { - name = [[NSString alloc] initWithCString:PSE_getLibName()]; - } - - PSE_getLibVersion = (PSEgetLibVersion) SysLoadSym(pluginRef, "PSEgetLibVersion"); - if (SysLibError() == nil) { - version = PSE_getLibVersion(); - } - else { - version = -1; - } - - // save the current modification date - NSDictionary *fattrs = [[NSFileManager defaultManager] fileAttributesAtPath:fullPath traverseLink:YES]; - modDate = [[fattrs fileModificationDate] retain]; - - active = 0; - - return self; -} - -- (void)dealloc -{ - int i; - - // shutdown if we had previously been inited - for (i=0; i<32; i++) { - if (active & (1 << i)) { - [self shutdownAs:(1 << i)]; - } - } - - if (pluginRef) SysCloseLibrary(pluginRef); - - [path release]; - [name release]; - - [super dealloc]; -} - -- (void)runCommand:(id)arg -{ - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - NSString *funcName = [arg objectAtIndex:0]; - long (*func)(void); - - func = SysLoadSym(pluginRef, [funcName lossyCString]); - if (SysLibError() == nil) { - func(); - } else { - NSBeep(); - } - - [arg release]; - [pool release]; - return; -} - -- (long)initAs:(int)aType -{ - char symbol[255]; - long (*init)(void); - long (*initArg)(long arg); - int res = PSE_ERR_FATAL; - - if ((active & aType) == aType) { - return 0; - } - - sprintf(symbol, "%sinit", [[PcsxPlugin getPrefixForType:aType] lossyCString]); - init = initArg = SysLoadSym(pluginRef, symbol); - if (SysLibError() == nil) { - if (aType != PSE_LT_PAD) - res = init(); - else - res = initArg(1|2); - } - - if (0 == res) { - active |= aType; - } else { - NSRunCriticalAlertPanel(NSLocalizedString(@"Plugin Initialization Failed!", nil), - [NSString stringWithFormat:NSLocalizedString(@"Pcsx failed to initialize the selected %s plugin (error=%i).\nThe plugin might not work with your system.", nil), [PcsxPlugin getPrefixForType:aType], res], - nil, nil, nil); - } - - return res; -} - -- (long)shutdownAs:(int)aType -{ - char symbol[255]; - long (*shutdown)(void); - - sprintf(symbol, "%sshutdown", [[PcsxPlugin getPrefixForType:aType] lossyCString]); - shutdown = SysLoadSym(pluginRef, symbol); - if (SysLibError() == nil) { - active &= ~aType; - return shutdown(); - } - - return PSE_ERR_FATAL; -} - -- (BOOL)hasAboutAs:(int)aType -{ - char symbol[255]; - - sprintf(symbol, "%sabout", [[PcsxPlugin getPrefixForType:aType] lossyCString]); - SysLoadSym(pluginRef, symbol); - - return (SysLibError() == nil); -} - -- (BOOL)hasConfigureAs:(int)aType -{ - char symbol[255]; - - sprintf(symbol, "%sconfigure", [[PcsxPlugin getPrefixForType:aType] lossyCString]); - SysLoadSym(pluginRef, symbol); - - return (SysLibError() == nil); -} - -- (void)aboutAs:(int)aType -{ - NSArray *arg; - char symbol[255]; - - sprintf(symbol, "%sabout", [[PcsxPlugin getPrefixForType:aType] lossyCString]); - arg = [[NSArray alloc] initWithObjects:[NSString stringWithCString:symbol], - [NSNumber numberWithInt:0], nil]; - - // detach a new thread - [NSThread detachNewThreadSelector:@selector(runCommand:) toTarget:self - withObject:arg]; -} - -- (void)configureAs:(int)aType -{ - NSArray *arg; - char symbol[255]; - - sprintf(symbol, "%sconfigure", [[PcsxPlugin getPrefixForType:aType] lossyCString]); - arg = [[NSArray alloc] initWithObjects:[NSString stringWithCString:symbol], - [NSNumber numberWithInt:1], nil]; - - // detach a new thread - [NSThread detachNewThreadSelector:@selector(runCommand:) toTarget:self - withObject:arg]; -} - -- (NSString *)getDisplayVersion -{ - if (version == -1) - return @""; - - return [NSString stringWithFormat:@"v%ld.%ld.%ld", version>>16,(version>>8)&0xff,version&0xff]; -} - -- (int)getType -{ - return type; -} - -- (NSString *)path -{ - return path; -} - -- (unsigned)hash -{ - return [path hash]; -} - -- (NSString *)description -{ - if (name == nil) - return [path lastPathComponent]; - - return [NSString stringWithFormat:@"%@ %@ [%@]", name, [self getDisplayVersion], [path lastPathComponent]]; -} - -// the plugin will check if it's still valid and return the status -- (BOOL)verifyOK -{ - // check that the file is still there with the same modification date - NSFileManager *dfm = [NSFileManager defaultManager]; - NSString *fullPath = [[NSString stringWithCString:Config.PluginsDir] stringByAppendingPathComponent:path]; - if (![dfm fileExistsAtPath:fullPath]) - return NO; - - NSDictionary *fattrs = [dfm fileAttributesAtPath:fullPath traverseLink:YES]; - return [[fattrs fileModificationDate] isEqualToDate:modDate]; -} - -@end |