Some mre debugging stuff, should be removed before rele
authorAlexander Strange <astrange@ithinksw.com>
Mon, 24 Feb 2003 07:21:24 +0000 (07:21 +0000)
committerAlexander Strange <astrange@ithinksw.com>
Mon, 24 Feb 2003 07:21:24 +0000 (07:21 +0000)
ITAppleEventCenter.h
ITAppleEventCenter.m

index f2eae2a..48327a9 100755 (executable)
@@ -33,7 +33,9 @@
 - (void)sendAEWithEventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn;
 
 - (NSString*)sendAEWithSendString:(NSString*)nssendString eventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn;
+- (NSString*)sendAEWithSendString:(NSString*)nssendString eventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn fixForAECrappiness:(long)fix;
 - (long)sendAEWithSendStringForNumber:(NSString*)string eventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn;
+- (long)sendAEWithSendStringForNumber:(NSString*)string eventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn fixForAECrappiness:(long)fix;
 - (AEArrayDataPointer)sendAEWithSendStringForArray:(NSString*)string eventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn;
 
 - (void)printCarbonDesc:(AEDesc*)desc;
index 1fedec5..562dbc7 100755 (executable)
@@ -439,8 +439,9 @@ static ITAppleEventCenter *_sharedAECenter = nil;
     //AEBuildAppleEvent(eClass, eID, typeProcessSerialNumber,(ProcessSerialNumber*)&psn, sizeof(ProcessSerialNumber), kAutoGenerateReturnID, kAnyTransactionID, &event, nil, "");
     AECreateDesc(typeProcessSerialNumber,(ProcessSerialNumber*)&psn,sizeof(ProcessSerialNumber),&dest);
     AECreateAppleEvent(eClass,eID,&dest,kAutoGenerateReturnID,kAnyTransactionID,&event);
+[self printCarbonDesc:&event];
     AESend(&event, &reply, kAENoReply, kAENormalPriority, kAEDefaultTimeout, idleUPP, nil);
-
+[self printCarbonDesc:&reply];
     AEDisposeDesc(&dest);
     AEDisposeDesc(&event);
     AEDisposeDesc(&reply);
@@ -612,4 +613,171 @@ return result;
 
     return result;
 }
+- (long)sendAEWithSendStringForNumber:(NSString*)string eventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn fixForAECrappiness:(long)fix
+{
+    //Add error checking...
+    AEEventClass eClass = *((unsigned long*)[eventClass UTF8String]);
+    AEEventID    eID    = *((unsigned long*)[eventID UTF8String]);
+
+    const char *sendString = [string UTF8String];
+    SInt32 result = 0;
+
+    AppleEvent sendEvent, replyEvent;
+
+    DescType resultType;
+    Size resultSize, charResultSize;
+
+    AEBuildError buildError;
+    OSStatus err;
+    OSErr err2, err3;
+    /*
+        if ((GetProcessPID(&psn, &pid) == noErr) && (pid == 0)) {
+            NSLog(@"Error getting PID of application! Exiting.");
+            return nil;
+        }
+        */
+    //NSLog(@"_sendString: %s", sendString);
+
+    err = AEBuildAppleEvent(eClass, eID, typeProcessSerialNumber,(ProcessSerialNumber*)&psn, sizeof(ProcessSerialNumber), kAutoGenerateReturnID, 0, &sendEvent, &buildError, sendString);
+[self printCarbonDesc:&sendEvent];
+       //now AEBuildAppleEvent has inserted a bogus integer in there for no reason, so we fix it ourselves.
+       { //this sucks
+//hey, i'm coding this in pico, sccrew indention
+char *buf;
+Size s,i;
+s = AESizeOfFlattenedDesc(&sendEvent);
+buf = malloc(s);
+AEFlattenDesc(&sendEvent,buf,s,NULL);  
+AEDisposeDesc(&sendEvent);
+for (i=0;i<s;i++)
+{
+long *lbuf = &(buf[i]);
+if (s-i <= 8) break; //is there enough room left?
+if (*lbuf == 'long' || *lbuf=='magn')
+{
+lbuf = &(buf[i+4]);
+*lbuf = fix;
+}
+}
+//sendEvent = NULL;
+AEUnflattenDesc(buf,&sendEvent);
+free(buf);
+}
+
+
+    [self printCarbonDesc:&sendEvent];
+
+    if (err) {
+        NSLog(@"%d:%d at \"%@\"",(int)buildError.fError,buildError.fErrorPos,[string substringToIndex:buildError.fErrorPos]);
+    }
+
+    err = AESend(&sendEvent, &replyEvent, kAEWaitReply, kAENormalPriority, kNoTimeOut, idleUPP, NULL);
+
+    [self printCarbonDesc:&replyEvent];
+
+    if (err) {
+        NSLog(@"Send Error: %i",err);
+    } else {
+        err2 = AESizeOfParam(&replyEvent, keyDirectObject, &resultType, &resultSize);
+
+        if (err2) {
+            NSLog(@"Error After AESizeOfParam: %i", err2);
+        } else {
+            err3 = AEGetParamPtr(&replyEvent, keyDirectObject, resultType, NULL, &result, resultSize, &charResultSize);
+
+            if (err3) {
+                NSLog(@"Error After AEGetParamPtr: %i", err3);
+            }
+        }
+    }
+
+
+AEDisposeDesc(&sendEvent);
+AEDisposeDesc(&replyEvent);
+NSLog(@"waffles say %d",result);
+return result;
+}
+
+- (NSString*)sendAEWithSendString:(NSString*)nssendString eventClass:(NSString*)eventClass eventID:(NSString*)eventID appPSN:(ProcessSerialNumber)psn fixForAECrappiness:(long)fix
+{
+    //Add error checking...
+    AEEventClass eClass = *((unsigned long*)[eventClass UTF8String]);
+    AEEventID    eID    = *((unsigned long*)[eventID UTF8String]);
+
+    const char *sendString = [nssendString UTF8String];
+    NSString  *_finalString = nil;
+
+    AppleEvent sendEvent, replyEvent;
+
+    DescType resultType;
+    Size resultSize, charResultSize;
+
+    AEBuildError buildError;
+    OSStatus err;
+    OSErr err2, err3;
+    /*
+        if ((GetProcessPID(&psn, &pid) == noErr) && (pid == 0)) {
+            NSLog(@"Error getting PID of application! Exiting.");
+            return nil;
+        }
+        */
+    //NSLog(@"_sendString: %s", sendString);
+
+    err = AEBuildAppleEvent(eClass, eID, typeProcessSerialNumber,(ProcessSerialNumber*)&psn, sizeof(ProcessSerialNumber), kAutoGenerateReturnID, 0, &sendEvent, &buildError, sendString);
+[self printCarbonDesc:&sendEvent];
+        //now AEBuildAppleEvent has inserted a bogus integer in there for no reason, so we fix it ourselves.
+{ //this sucks
+//hey, i'm coding this in pico, sccrew indention
+Size s;
+AEDesc dirObj;
+long tmp;
+AEKeyword a;
+AESizeOfParam(&sendEvent,'from',&a,&s);
+//AEDeleteParam(&sendEvent,'seld');
+//AEPutParamPtr(&sendEvent,'seld','long',&fix,sizeof(fix));
+AEGetParamDesc(&sendEvent,'from',a,&dirObj);
+AEGetParamPtr(&dirObj,'seld','long',&a,&tmp,4,&s);
+{
+char *x = (char*)&a;
+       NSLog(@"the seld: %lu of type %c%c%c%c len %lu",tmp,x[0],x[1],x[2],x[3],s);
+}
+AEDisposeDesc(&dirObj);
+}
+    [self printCarbonDesc:&sendEvent];
+
+    if (err) {
+        NSLog(@"%d:%d at \"%@\"",(int)buildError.fError,buildError.fErrorPos,[nssendString substringToIndex:buildError.fErrorPos]);
+    }
+
+    err = AESend(&sendEvent, &replyEvent, kAEWaitReply, kAENormalPriority, kNoTimeOut, idleUPP, NULL);
+
+    [self printCarbonDesc:&replyEvent];
+
+    if (err) {
+        NSLog(@"Send Error: %i",err);
+    } else {
+        unichar *result = 0;
+
+        err2 = AESizeOfParam(&replyEvent, keyDirectObject, &resultType, &resultSize);
+        result = malloc(resultSize);
+
+        if (err2) {
+            NSLog(@"Error After AESizeOfParam: %i", err2);
+        } else {
+            err3 = AEGetParamPtr(&replyEvent, keyDirectObject, resultType, NULL, result, resultSize, &charResultSize);
+
+            if (err3) {
+                NSLog(@"Error After AEGetParamPtr: %i", err3);
+            } else {
+                _finalString = [NSString stringWithCharacters:result length:charResultSize/sizeof(unichar)];
+            }
+        }
+        free(result);
+    }
+
+    AEDisposeDesc(&sendEvent);
+    AEDisposeDesc(&replyEvent);
+
+    return _finalString;
+}
 @end