views:

123

answers:

1

I'm in the process of converting AMShellWrapper to my own application that runs an SH file that has userinput. Therefore, I need to send data to a running task.

Any ideas?

Elijah

A: 

You need a somewhat different approach along the lines of PseudoTTY.app!

/*
code added to PseudoTTY/PtyView.m

sources:
- PseudoTTY.app, http://amath.colorado.edu/pub/mac/programs/PseudoTTY.zip
- charliebot/server.sh, http://sourceforge.net/projects/charliebot/
  (note: modify server.sh to accept complete paths; see: 
   http://stackoverflow.com/questions/3540269/noclassdeffounderror-when-running-shell-script)
*/

@interface PtyView (PtyPrivate)
-(int)count: (NSString *) str;
...
@end

@implementation PtyView (PtyPrivate)

-(int)count: (NSString *) str {
   static int counter = 0;
   if (   
     ([str rangeOfString:@"Charlie>"].location != NSNotFound ) || \
     ([str rangeOfString:@"[Charlie] user>"].location != NSNotFound )
   )
  {
     counter++;
  }
  return counter;
}

-(void)startTask
{
   NSString * cmd = @"/path/to/charliebot/server.sh";
   //NSString * cmd = @"/bin/sh";
   ...
   [self insertText: @"\n\n"];
}

-(void) didRead: (NSNotification *)noty
{
   NSData * data = [[noty userInfo] objectForKey:NSFileHandleNotificationDataItem];

   if ([data length] == 0)
      return; // end of file

   NSString * str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

   int printvar = [self count: str];

   if   (printvar < 1 )
   {
      [self insertText: @"."];
      [str release];
      [[noty object] readInBackgroundAndNotify];
   }else if (printvar == 1) {
      [self insertText: @"\n\n"];
      [self insertText: str];
      [str release];
      [[noty object] readInBackgroundAndNotify];
   }else {
      [self insertText: str];
      [str release];
      [[noty object] readInBackgroundAndNotify];
   }
}

@end
notmp