OpticalMessageListener.m   [plain text]


/*
 * © Copyright 2003 Apple Computer, Inc. All rights reserved.
 *
 * IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc. (ÒAppleÓ) in 
 * consideration of your agreement to the following terms, and your use, installation, 
 * modification or redistribution of this Apple software constitutes acceptance of these
 * terms.  If you do not agree with these terms, please do not use, install, modify or 
 * redistribute this Apple software.
 *
 * In consideration of your agreement to abide by the following terms, and subject to these 
 * terms, Apple grants you a personal, non exclusive license, under AppleÕs copyrights in this 
 * original Apple software (the ÒApple SoftwareÓ), to use, reproduce, modify and redistribute 
 * the Apple Software, with or without modifications, in source and/or binary forms; provided 
 * that if you redistribute the Apple Software in its entirety and without modifications, you 
 * must retain this notice and the following text and disclaimers in all such redistributions 
 * of the Apple Software.  Neither the name, trademarks, service marks or logos of Apple 
 * Computer, Inc. may be used to endorse or promote products derived from the Apple Software 
 * without specific prior written permission from Apple. Except as expressly stated in this 
 * notice, no other rights or licenses, express or implied, are granted by Apple herein, 
 * including but not limited to any patent rights that may be infringed by your derivative 
 * works or by other works in which the Apple Software may be incorporated.
 * 
 * The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO WARRANTIES, 
 * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-
 * INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE 
 * SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. 
 *
 * IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL 
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, 
 * REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND 
 * WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR 
 * OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#import "OpticalMessageListener.h"

@implementation OpticalMessageListener

- ( void ) applicationDidFinishLaunching : ( NSNotification * ) notification
{
	
	[ NSThread detachNewThreadSelector : @selector(startApp:) toTarget: self withObject: nil ];
	
}

- ( void ) startApp: ( id ) ignored
{
	
	NSAutoreleasePool *		pool 	= [ [ NSAutoreleasePool alloc ] init ];
	NSString *				string	= nil;
	NSData *				data	= nil;
	
	task		= [ [ NSTask alloc ] init ];
	pipe		= [ NSPipe pipe ];
	fileHandle	= [ pipe fileHandleForReading ];
	
	string = [ [ [ NSBundle mainBundle ] resourcePath ] stringByAppendingString : @"/OpticalMessageListenerTool" ];
	
	[ task setLaunchPath : string ];
	[ task setArguments: [ NSMutableArray arrayWithCapacity: 0 ] ];
	[ task setStandardOutput : pipe ];
	
	[ task launch ];
	
	data = [ fileHandle availableData ];
	
	while ( ( data != nil ) && ( [ data length] != 0 ) )
	{
		
		NSString *	newString;
		
		newString = [ [ self textView ] string ];
		newString = [ newString stringByAppendingString : [ NSString stringWithCString : [ data bytes ] length: [ data length ] ] ];
		
		[ [ self textView ] setString : newString ];
		[ [ self textView ] setSelectedRange : NSMakeRange ( [ newString length ], 0 ) ];
		[ [ self textView ] scrollRangeToVisible : NSMakeRange ( [ newString length ], 0 ) ];
		
		data = [ fileHandle availableData ];
		
	}
	
	[ pool release ];
	
}


- ( void ) applicationWillTerminate : ( NSNotification * ) notification
{
	
	[ task terminate ];
	[ task release ];
	task = nil;
	
}

- ( id ) textView	{ return textView; }

@end