X-Git-Url: http://git.ithinksw.org/ITFoundation.git/blobdiff_plain/4e658921daf0f71aa39722ddecc5799bf2bc1d8e..f52146424225e2d13a8fe7a29d703676c91d0d46:/ITOSAScript.m diff --git a/ITOSAScript.m b/ITOSAScript.m new file mode 100755 index 0000000..6b079c8 --- /dev/null +++ b/ITOSAScript.m @@ -0,0 +1,108 @@ +/* + * ITFoundation + * ITOSAScript + * An extended NSAppleScript that allows any OSA language. + * + * Original Author : Kent Sutherland + * Responsibility : Kent Sutherland + * Responsibility : Joseph Spiros + * + * Copyright (c) 2002 - 2004 iThink Software. + * All Rights Reserved + * + */ + +/* +Script Subtypes: + kAppleScriptSubtype - AppleScript (Default) + 'Jscr' - JavaScript (if installed) +*/ + +#import "ITOSAScript.h" + +@implementation ITOSAScript + +- (id)init +{ + if ( (self = [super init]) ) { + _source = nil; + _scriptSubtype = kAppleScriptSubtype; //Default to AppleScript + } + return self; +} + +- (id)initWithContentsOfFile:(NSString *)path +{ + if ( (self = [super init]) ) { + _source = [[NSString alloc] initWithContentsOfFile:path]; + _scriptSubtype = kAppleScriptSubtype; //Default to AppleScript + } + return self; +} + +- (id)initWithSource:(NSString *)source +{ + if ( (self = [super init]) ) { + [self setSource:source]; + _scriptSubtype = kAppleScriptSubtype; //Default to AppleScript + } + return self; +} + +- (void)dealloc +{ + [_source release]; + [super dealloc]; +} + +- (NSString *)source +{ + return _source; +} + +- (void)setSource:(NSString *)newSource +{ + [_source release]; + _source = [newSource copy]; +} + +- (unsigned long)scriptSubtype +{ + return _scriptSubtype; +} + +- (void)setScriptSubtype:(unsigned long)newSubtype +{ + _scriptSubtype = newSubtype; +} + +- (NSString *)execute +{ + AEDesc scriptDesc, resultDesc; + Size length; + NSString *result; + Ptr buffer; + + AECreateDesc(typeChar, [_source cString], [_source cStringLength], &scriptDesc); + + OSADoScript(OpenDefaultComponent(kOSAComponentType, _scriptSubtype), &scriptDesc, kOSANullScript, typeChar, kOSAModeCanInteract, &resultDesc); + + length = AEGetDescDataSize(&resultDesc); + buffer = malloc(length); + + AEGetDescData(&resultDesc, buffer, length); + AEDisposeDesc(&scriptDesc); + AEDisposeDesc(&resultDesc); + result = [NSString stringWithCString:buffer length:length]; + if (![result isEqualToString:@""] && + ([result characterAtIndex:0] == '\"') && + ([result characterAtIndex:[result length] - 1] == '\"')) + { + result = [result substringWithRange:NSMakeRange(1, [result length] - 2)]; + } + free(buffer); + buffer = NULL; + return result; +} + +@end