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
+@end
\ No newline at end of file
--- /dev/null
+//
+// ITByteStream.h
+// ITFoundation
+//
+// Created by Alexander Strange on Thu Feb 27 2003.
+// Copyright (c) 2003 __MyCompanyName__. All rights reserved.
+//
+
+#import "ITByteStream.h"
+
+// TODO: Add NSCopying/NSCoding support
+
+@implementation ITByteStream
+-(id) init
+{
+ if (self == [super init])
+ {
+ data = [[NSMutableData alloc] init];
+ }
+ return self;
+}
+
+-(id) initWithStream:(ITByteStream*)stream
+{
+ if (self == [super init])
+ {
+ data = [stream->data copy];
+ }
+ return 0;
+}
+
+-(void) dealloc
+{
+ [data release];
+ [super dealloc];
+}
+
+-(int) availableDataLength
+{
+ return [data length];
+}
+
+-(NSData*) readDataOfLength:(int)length
+{
+ NSData *ret, *tmp;
+ NSRange range = {0, length};
+ ret = [data subdataWithRange:range];
+#if MAC_OS_X_VERSION_10_2 <= MAC_OS_X_VERSION_MAX_ALLOWED
+ [data replaceBytesInRange:range withBytes:nil length:0]; // this should delete off the end. should test.
+#else
+ range = {length, [data length]};
+ tmp = [data subdataWithRange:range];
+ [data setData:tmp]; // maybe i should add a lock to this? it would be bad if someone was writing when it was reading...
+#endif
+ return ret;
+}
+
+-(void) writeData:(NSData*)_data
+{
+ [data appendData:_data];
+}
+@end