libs-base/Testing/nstask.m
Richard Frith-Macdonald bfb6ebd9bc Use __MINGW32__ rather than __MINGW__ because gcc does that too.
NB. It seems some recent patches put ___MINGW32__ in the public headers ...
that needs to be fixed as the headers should be system independent!


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@21795 72102866-910b-0410-8b05-ffd578937521
2005-10-11 19:09:26 +00:00

91 lines
2.4 KiB
Objective-C

/* Test/example program for the base library
Copyright (C) 2005 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
This file is part of the GNUstep Base Library.
*/
#include <Foundation/Foundation.h>
@interface TaskObs : NSObject
- (void) terminated: (NSNotification*)aNotification;
@end
@implementation TaskObs
- (void) terminated: (NSNotification*)aNotification
{
NSLog(@"Task (%@) terminated", [aNotification object]);
}
@end
int
main()
{
NSAutoreleasePool *pool;
NSDictionary *env;
NSTask *task;
NSTask *t0, *t1;
NSData *d;
TaskObs *obs = [TaskObs new];
pool = [NSAutoreleasePool new];
[[NSNotificationCenter defaultCenter]
addObserver: obs
selector: @selector(terminated:)
name: NSTaskDidTerminateNotification
object: nil];
#ifdef __MINGW32__
task = [NSTask launchedTaskWithLaunchPath: @"C:\\windows\\system32\\mem.exe"
arguments: nil];
#else
task = [NSTask launchedTaskWithLaunchPath: @"/bin/ls"
arguments: nil];
#endif
[task waitUntilExit];
printf("Exit status - %d\n", [task terminationStatus]); fflush(stdout);
RELEASE(pool);
pool = [NSAutoreleasePool new];
task = [NSTask new];
env = [[[[NSProcessInfo processInfo] environment] mutableCopy] autorelease];
[task setEnvironment: env];
[task setLaunchPath: @"/bin/sh"];
[task setArguments: [NSArray arrayWithObjects: @"-c", @"echo $PATH", nil]];
if ([task usePseudoTerminal] == NO)
printf("Argh - unable to use pseudo terminal\n");
[task launch];
d = [[task standardOutput] availableData];
NSLog(@"Got PATH of '%*s'", [d length], [d bytes]);
[task waitUntilExit];
RELEASE(task);
NSLog(@"Testing two tasks at the same time");
t0 = [NSTask launchedTaskWithLaunchPath: @"/bin/sh"
arguments:
[NSArray arrayWithObjects: @"-c", @"echo task0", nil]];
NSLog(@"Launched task0 - %@", t0);
t1 = [NSTask launchedTaskWithLaunchPath: @"/bin/sh"
arguments:
[NSArray arrayWithObjects: @"-c", @"echo task1", nil]];
NSLog(@"Launched task1 - %@", t1);
while ([t0 isRunning] == YES || [t1 isRunning] == YES)
{
NSAutoreleasePool *arp = [NSAutoreleasePool new];
[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate:
[NSDate dateWithTimeIntervalSinceNow: 1]];
RELEASE(arp);
}
RELEASE(pool);
exit(0);
}