ftp.nice.ch/pub/next/developer/apps/Eval.3.3.s.tar.gz#/Eval3.3/EvalListener.m

This is EvalListener.m in view mode; [Download] [Up]

/**
 ** EvalListener
 **
 ** Subclass Listener to provide the functionality
 ** of opening files at specific lines when called
 ** from Project Builder.
 **/

#import "Eval.h"
#import "EvalListener.h"
#import "CodeBrowser.h"

static NXRemoteMethod *evalRemoteMethods = 0 ;
  
@implementation  EvalListener:Listener 

+ initialize ;
{ if([self class] != [EvalListener class])
    return self; 
  if(!evalRemoteMethods)
  { evalRemoteMethods = (NXRemoteMethod *)
      malloc(3*sizeof(NXRemoteMethod));
    evalRemoteMethods[0].key =
       @selector(openFile:onHost:atTrueLine:);
    evalRemoteMethods[0].types = "cci";
    evalRemoteMethods[1].key =        
       @selector(openFile:onHost:fromTrueLine:to:);
    evalRemoteMethods[1].types = "ccii";
    evalRemoteMethods[2].key = 0;
  }
  return self;
}

/*
-  (int) app: sender openFile:(const char *)fName type:(const char *)aType
{ List *winList = [NXApp windowList] ;
  int i, windowKnt = [winList count] ;
  id aWin ;
  for(i = 0 ; i < windowKnt ; i++)
  { // check windowList to see if file is already open...
    aWin = [winList objectAt: i] ;
    if([aWin respondsTo: @selector(fileName)])
    { if(!strcmp(fName,[aWin fileName]))
      { // file is already open...bring to front
        [aWin makeKeyAndOrderFront: self] ;
        return YES ;
      }
    }
  }
  // file is not already open:
  if([NXApp openFileInCodeBrowser: fName])
    return YES ;
  else
    return NO ;
}
*/

- (int) openFile: (char *)fileName
               onHost: (char *)hostName
           atTrueLine: (int)line;
{ return [self openFile: fileName onHost: hostName
               fromTrueLine: line to: line + 1] ;
}


- (int) openFile: (char *)fileName 
               onHost: (char *)hostName 
         fromTrueLine: (int)startLine
                   to: (int)endLine;
{ List *winList = [NXApp windowList] ;
  int windowKnt = [winList count] ;
  id aWin = nil, theText ;
  int i ;
  for(i = 0 ; i < windowKnt ; i++)
  { // check windowList to see if this file is already open...
    aWin = [winList objectAt: i] ;
    if([aWin respondsTo: @selector(fileName)])
    { if(!strcmp(fileName,[aWin fileName]))
      { // file is already open...bring to front
        [aWin makeKeyAndOrderFront: self] ;
        break ;
      }
    }
  }
  if(i == windowKnt)
  { // then fName is not currently open
    aWin = [NXApp openFileInCodeBrowser: fileName] ;
    if(!aWin)
      return 0 ;
  }
  // now set the selection in the codeBrowser's textView
  theText = [aWin codeBrowserText] ;
  [theText setSel: [theText positionFromLine: startLine]
                 : [theText positionFromLine: endLine]] ;
  [theText scrollSelToVisible] ;
  return 1 ;
}

- (int)performRemoteMethod:(NXRemoteMethod *)aMethod
                 paramList:(NXParamValue *)params
{ switch (aMethod - evalRemoteMethods)
  { case 0:
    { return [self openFile:params[0].bval.p onHost:params[1].bval.p
               atTrueLine:params[2].ival];
    }
    case 1:
    {  return [self openFile:params[0].bval.p
                     onHost:params[1].bval.p
               fromTrueLine:params[2].ival
                         to:params[3].ival];
    }
    default:
      return [super performRemoteMethod:aMethod paramList:params];
  }
}

- (NXRemoteMethod *)remoteMethodFor: (SEL)aSelector
{ NXRemoteMethod *r = NXRemoteMethodFromSel(aSelector,evalRemoteMethods);
  return r ? r : [super remoteMethodFor:aSelector];
}

@end

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.