This is OptionsEditor.m in view mode; [Download] [Up]
//*****************************************************************************
//
// OptionsEditor.m.
//
// Edit the options file contained within a Gate doc
//
// by Felipe A. Rodriguez
//
// This code is supplied "as is" the author makes no warranty as to its
// suitability for any purpose. This code is free and may be distributed
// in accordance with the terms of the:
//
// GNU GENERAL PUBLIC LICENSE
// Version 2, June 1991
// copyright (C) 1989, 1991 Free Software Foundation, Inc.
// 675 Mass Ave, Cambridge, MA 02139, USA
//
//*****************************************************************************
#import "GKdefs.h"
#import "OptionsEditor.h"
#import "options.h"
#import "Coordinator.h"
char *devNames[] = { "cua", "cufa", "cudfa", "cub", "cufb", "cudfb", "cuc",
"cufc", "cudfc", "cud", "cufd", "cudfd", NULL};
@implementation OptionsEditor
//*****************************************************************************
//
// init -- reset ivars
//
//*****************************************************************************
- init
{
[super init];
debug = NO;
crtscts = NO;
lockFlag = NO;
defaultroute = NO;
shouldSave = NO;
return self;
}
//*****************************************************************************
//
// Open file to parse and search
//
//*****************************************************************************
- parseOptionsFile:(const char *)filePath
{
struct stat statbuf;
char **devNamePtr;
setDelegate(self);
// check for installed ports, add those found to device popup List
devNamePtr = devNames;
if (![dvPopup isKindOf:[PopUpList class]])
dvPopupList = [dvPopup target]; // get popuplist from trig button
while(*devNamePtr)
{
strcpy(devName, "/dev/");
strcat(devName, *devNamePtr);
if (stat(devName, &statbuf) == 0)
[dvPopupList addItem:*devNamePtr];
devNamePtr++;
}
devName[1] = 0;
options_from_file(filePath, 0, 1);
strcpy(path, filePath);
if(defaultroute)
[[swMatrix findCellWithTag:0] setIntValue:1];
if(lockFlag)
[[swMatrix findCellWithTag:1] setIntValue:1];
if(crtscts)
[[swMatrix findCellWithTag:2] setIntValue:1];
if(debug)
[[swMatrix findCellWithTag:3] setIntValue:1];
return self;
}
//*****************************************************************************
//
// Open file to parse and search without setting GUI controls
//
//*****************************************************************************
- parseOptions:(const char *)filePath
{
setDelegate(self);
[self init]; // reset ivars
options_from_file(filePath, 0, 1);
return self;
}
//*****************************************************************************
//
// defaultroute -- return status of or set from info in options file
//
//*****************************************************************************
- setDefaultRoute
{
defaultroute = YES;
return self;
}
- (BOOL)defaultRoute
{
return defaultroute;
}
//*****************************************************************************
//
// lockFlag -- return status of or set from info in options file
//
//*****************************************************************************
- setLockFlag
{
lockFlag = YES;
return self;
}
- (BOOL)lockFlag
{
return lockFlag;
}
//*****************************************************************************
//
// defaultroute -- return status of or set from info in options file
//
//*****************************************************************************
- setDebug
{
debug = YES;
return self;
}
- (BOOL)debug
{
return debug;
}
//*****************************************************************************
//
// defaultroute -- return status of or set from info in options file
//
//*****************************************************************************
- setCrtscts
{
crtscts = YES;
return self;
}
- (BOOL)crtscts
{
return crtscts;
}
//*****************************************************************************
//
// if set, GUI settings will be saved to options file when it is parsed
//
//*****************************************************************************
- (BOOL)shouldSave
{
return shouldSave;
}
//************************************************************************
//
// Target method of save switch
//
//************************************************************************
- setShouldSave:sender
{
shouldSave = YES;
setDelegate(self);
options_from_file(path, 0, 1);
shouldSave = NO;
return self;
}
//************************************************************************
//
// Target method of switches
// check switches based on the tag assigned in IB to each switch.
//
//************************************************************************
- switch:sender
{
switch([sender selectedTag])
{
case 0: // defaultroute
defaultroute = (BOOL)[sender intValue];
[self setShouldSave:self];
break;
case 1: // lock
lockFlag = (BOOL)[sender intValue];
[self setShouldSave:self];
break;
case 2: // crtscts
crtscts = (BOOL)[sender intValue];
[self setShouldSave:self];
break;
case 3: // debug
debug = (BOOL)[sender intValue];
[self setShouldSave:self];
break;
default: // parent -- vfork returns pid of the child
break;
}
return self;
}
//*****************************************************************************
//
// devName -- set, return and target of
//
//*****************************************************************************
- setDevName:(const char *)device
{
const char *sPtr;
static int i;
sPtr = device + 5;
if(dvPopup != nil) // if not connected we are just parsing for port
{
strncpy(devName, device, MAXPATHLEN);
if (![dvPopup isKindOf:[PopUpList class]])
dvPopupList = [dvPopup target]; // get popuplist from trig button
dvPopMtrx = [dvPopupList itemList]; // get matrix from popuplist
for (i = 0; i < [dvPopMtrx cellCount]; i++) // scan matrix for device
{ // str found in options
if(strcmp(sPtr,[[[dvPopMtrx selectCellAt:i :0]
selectedCell] title])==0)
break;
} // set button title to that of sel'd cell
[dvPopup setTitle:[[[dvPopMtrx selectCellAt:i :0]selectedCell] title]];
[dvPopupList setTarget:self];
[dvPopupList setAction:@selector(devPopUpAction:)];
}
else
strncpy(devName, sPtr, MAXPATHLEN);
devName[MAXPATHLEN-1] = 0;
return self;
}
- (const char *)devName
{
return devName;
}
- devPopUpAction:sender
{
strcpy(devName, "/dev/");
strncat(devName, [[sender selectedCell] title], MAXPATHLEN - 5);
devName[MAXPATHLEN-1] = 0;
[self setShouldSave:self];
return self;
}
//*****************************************************************************
//
// speed -- set, return and target of
//
//*****************************************************************************
- setSpeed:(const char *)aSpeed
{
static int i;
strncpy(speed, aSpeed, MAXPATHLEN);
speed[MAXPATHLEN-1] = 0;
if(spPopup)
{
if (![spPopup isKindOf:[PopUpList class]])
spPopupList = [spPopup target];
spPopMtrx = [spPopupList itemList];
for (i = 0; i < [spPopMtrx cellCount]; i++) // scan matrix for speed
{ // str found in options
if(strcmp(speed,[[[spPopMtrx selectCellAt:i :0]
selectedCell]title])==0)
break;
} // set button title to that of sel'd cell
[spPopupList setTarget:self];
[spPopupList setAction:@selector(speedPopUpAction:)];
if(i < [spPopMtrx cellCount])
{
[spPopup setTitle:[[[spPopMtrx selectCellAt:i :0]
selectedCell] title]];
return self; // aSpeed was in popuplist, success
}
}
return nil; // aSpeed was not in popuplist, fail
}
- (const char *)speed
{
return speed;
}
- speedPopUpAction:sender
{
strncpy(speed, [[sender selectedCell] title], MAXPATHLEN);
speed[MAXPATHLEN-1] = 0;
[self setShouldSave:self];
return self;
}
//*****************************************************************************
//
// return status of or set from info in options file
//
//*****************************************************************************
- editorWindow
{
return editWin;
}
//*****************************************************************************
//
// Edit options file in Edit.app
//
//*****************************************************************************
- editOptions:sender
{
if([[NXApp delegate] readable:path])
// call edit to open radioButtons selected file
[[Application workspace] openFile:path withApplication:"Edit"];
return self;
}
//*****************************************************************************
//
// Edit Gate pppup file in Edit.app
//
//*****************************************************************************
- editPppup:sender
{
static char *sPtr;
strcpy(Path, path);
sPtr = Path + (strlen(path) - 8);
strcpy(sPtr, PPPUP);
if([[NXApp delegate] readable:Path])
// call edit to open radioButtons selected file
[[Application workspace] openFile:Path withApplication:"Edit"];
return self;
}
//*****************************************************************************
//
// set our owner
//
//*****************************************************************************
- setOwner:anObject
{
owner = anObject;
return self;
}
//******************* Gate doc panel delegate methods *************************
//*****************************************************************************
//
// called whenever the user minituriazes our status window.
//
//*****************************************************************************
- windowWillMiniaturize:sender toMiniwindow:miniwindow
{
return [sender setMiniwindowIcon:".dir"];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.