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.