I'd like to introduce you to ITAppleEventCenter, our new facility for sending and...
authorJoseph Spiros <joseph.spiros@ithinksw.com>
Wed, 29 Jan 2003 09:42:12 +0000 (09:42 +0000)
committerJoseph Spiros <joseph.spiros@ithinksw.com>
Wed, 29 Jan 2003 09:42:12 +0000 (09:42 +0000)
ITAppleEvent.h
ITAppleEventCenter.h [new file with mode: 0755]
ITAppleEventCenter.m [new file with mode: 0755]
ITStringScanner.h
ITVirtualMemoryInfo.h

index bf54bca..2eabfa1 100755 (executable)
@@ -9,7 +9,7 @@
  *     Responsibility  : Joseph Spiros <joseph.spiros@ithinksw.com>
  *                     : Kent Sutherland <kent.sutherland@ithinksw.com>
  *
- *     Copyright (c) 2002 iThink Software.
+ *     Copyright (c) 2002 - 2003 iThink Software.
  *     All Rights Reserved
  *
  */
diff --git a/ITAppleEventCenter.h b/ITAppleEventCenter.h
new file mode 100755 (executable)
index 0000000..4a71835
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ *     ITFoundation
+ *     ITAppleEventCenter
+ *
+ *     A class for sending and recieving AppleEvent data.
+ *     Who wants to mess with that Carbon shit anyway?
+ *
+ *     Original Author : Joseph Spiros <joseph.spiros@ithinksw.com>
+ *     Responsibility  : Joseph Spiros <joseph.spiros@ithinksw.com>
+ *                     : Kent Sutherland <kent.sutherland@ithinksw.com>
+ *                     : Matt Judy <matt.judy@ithinksw.com>
+ *
+ *     Copyright (c) 2002 - 2003 iThink Software.
+ *     All Rights Reserved
+ *
+ */
+
+#import <Foundation/Foundation.h>
+#import <Carbon/Carbon.h>
+
+
+@interface ITAppleEventCenter : NSObject {
+
+}
++ (id)sharedCenter;
+- (NSString*)runAEWithRequestedKey:(NSString*)key eventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn;
+- (void)printCarbonDesc:(AEDesc*)desc;
+@end
diff --git a/ITAppleEventCenter.m b/ITAppleEventCenter.m
new file mode 100755 (executable)
index 0000000..273fecb
--- /dev/null
@@ -0,0 +1,131 @@
+#import "ITAppleEventCenter.h"
+
+Boolean MyAEIdleCallback (
+                                        EventRecord * theEvent,
+                                        SInt32 * sleepTime,
+                                        RgnHandle * mouseRgn
+                                        );
+
+Boolean MyAEIdleCallback (
+                                        EventRecord * theEvent,
+                                        SInt32 * sleepTime,
+                                        RgnHandle * mouseRgn
+                                        )
+{
+    return FALSE;
+}
+
+@implementation ITAppleEventCenter
+
+static ITAppleEventCenter *_sharedAECenter = nil;
+
++ (id)sharedCenter
+{
+    if( _sharedAECenter != nil ) {
+        return _sharedAECenter;
+    } else {   
+        _sharedAECenter = [[ITAppleEventCenter alloc] init];
+        return _sharedAECenter;
+    }
+}
+
+- (NSString*)runAEWithRequestedKey:(NSString*)key eventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn
+{
+    AEEventClass eClass = *((unsigned long*)[eventClass UTF8String]);
+    AEEventID    eID    = *((unsigned long*)[eventID UTF8String]);
+    
+    const char *sendString = [[NSString stringWithFormat:@"'----':obj { form:'prop', want:type('prop'), seld:type('%s'), from:'null'() }", [key UTF8String]] UTF8String];
+    NSString  *_finalString;
+    
+    // Variables for building and sending the event    
+    AppleEvent sendEvent, replyEvent;
+    //AEDesc replyDesc;
+    AEIdleUPP upp = NewAEIdleUPP(&MyAEIdleCallback);
+    
+    // Variables for getting the result
+    char *charResult;
+    DescType resultType;
+    Size resultSize, charResultSize;
+    
+    // Variables for error checking
+    AEBuildError buildError;
+    OSStatus err;
+    OSErr err2, err3;
+    //Ptr buffer;
+    //Size length;
+    
+    // Start Code
+    // ^ Most pointless comment EVAR!
+    // ^^ Nope, that one is
+
+    NSLog(@"_sendString: %s", sendString);
+    
+    // The problem is, if I use eClass and eID in place of 'core' and 'getd' respectively, It won't build a valid AppleEvent :'(
+    err = AEBuildAppleEvent(eClass, eID, typeProcessSerialNumber,(ProcessSerialNumber*)&psn, sizeof(ProcessSerialNumber), kAutoGenerateReturnID, 0, &sendEvent, &buildError, sendString);
+    
+    [self printCarbonDesc:&sendEvent];
+    
+    if (err) {
+        NSLog(@"%d:%d at \"%@\"",buildError.fError,buildError.fErrorPos,[sendString substringToIndex:buildError.fErrorPos]);
+    }
+    
+    err = AESend(&sendEvent, &replyEvent, kAEWaitReply, kAENormalPriority, kNoTimeOut, upp, NULL);
+    
+    [self printCarbonDesc:&replyEvent];
+    
+    if (err) {
+        NSLog(@"Send Error: %i",err);
+    } else {
+
+        unichar* result=0;
+        
+        err2 = AESizeOfParam(&replyEvent, keyDirectObject, &resultType, &resultSize);
+        result=malloc(resultSize);
+        //err2 = AEGetParamDesc(&replyEvent, keyDirectObject, typeWildCard, &replyDesc);
+        
+        if (err2) { NSLog(@"Error After AESizeOfParam: %i", err2); } else {
+        //if (err2) { NSLog(@"Error After AEGetParamDesc: %i", err2); } else {
+        
+        err3 = AEGetParamPtr(&replyEvent, keyDirectObject, resultType, NULL, result, resultSize, &charResultSize);
+        //length = AEGetDescDataSize(&replyDesc);
+        //buffer = malloc(length);
+    
+        //err3 = AEGetDescData(&replyDesc, buffer, length);
+        
+        if (err3) { NSLog(@"Error After AEGetParamPtr: %i", err3); } else {
+        
+        // if (err3) { NSLog(@"Error After AEGetDescData: %i", err3); } else {
+        
+        _finalString = [[NSString stringWithCharacters:result length:charResultSize/sizeof(unichar)] copy];
+        
+        /* _finalString = [NSString stringWithCString:buffer length:length];
+        
+        if ( (! [_finalString isEqualToString:@""])      &&
+            ([_finalString characterAtIndex:0] == '\"') &&
+            ([_finalString characterAtIndex:[_finalString length] - 1] == '\"') ) {
+            _finalString = [_finalString substringWithRange:NSMakeRange(1, [_finalString length] - 2)];
+        }
+        free(buffer);
+        buffer = nil; */
+
+        }
+        }
+    }
+    
+    //NSLog(@"Result Size: %i", charResultSize);
+    //NSLog(@"Result: %c", charResult);
+    
+    AEDisposeDesc(&sendEvent);
+    AEDisposeDesc(&replyEvent);
+    
+    return _finalString;
+}
+
+- (void)printCarbonDesc:(AEDesc*)desc {
+    Handle xx;
+    AEPrintDescToHandle(desc,&xx);
+    NSLog(@"Handle: %s", *xx);
+    DisposeHandle(xx);
+}
+
+@end
index 8fb0122..fd38770 100755 (executable)
@@ -8,7 +8,7 @@
  *     Responsibility  : Alexander Strange <alexander.strange@ithinksw.com>
  *                     : Joseph Spiros <joseph.spiros@ithinksw.com>
  *
- *     Copyright (c) 2002 iThink Software.
+ *     Copyright (c) 2002 - 2003 iThink Software.
  *     All Rights Reserved
  *
  */
index f0e3bb8..0451a5e 100755 (executable)
@@ -10,7 +10,7 @@
  *     Responsibility  : Joseph Spiros <joseph.spiros@ithinksw.com>
  *                     : Matt Judy <matt.judy@ithinksw.com>
  *
- *     Copyright (c) 2002 iThink Software.
+ *     Copyright (c) 2002 - 2003 iThink Software.
  *     All Rights Reserved
  *
  */