This is SporView.m in view mode; [Download] [Up]
#import <stdio.h>
#import "SporView.h"
#import "sporen6.h"
BOOL	drawColor;
#define		MAX_POP				2000
#define 	START_POP				20
#define 	START_SPREAD		10
#define 	START_CLOUD			10	
#define 	START_KIND			 0
#define 	ENEMY						 0
@implementation SporView
- toggleKind:sender
{
	kind = [ [ sender selectedCell ] tag ];
#ifdef DEBUG
	fprintf( stderr, "Kind:%d\n", kind );
#endif	
	return self;
}
- toggleEnemy:sender
{
	enemy = [ [ sender selectedCell ] tag ];
#ifdef DEBUG
	fprintf( stderr, "Enemy:%d\n", enemy );
#endif
	return self;
}
- showStartParameter
{
	char	valueString[ 50 ];
	if( inspectorPresent == NO )
		return self;
	[ maxPop setIntValue: pop ];
	[ startPop setIntValue: sPop ];
	[ startSpread setIntValue: spread ];
	[ startCloud setIntValue: cloud ];
	[ kindRadio selectCellWithTag: kind ];
	[ eatRadio selectCellWithTag: enemy ];
	sprintf( valueString, "%d", pop );
  NXWriteDefault( "BackSpace", "SporMaxPopulation", valueString );
	sprintf( valueString, "%d", sPop );
  NXWriteDefault( "BackSpace", "SporSporStartPopulation", valueString );
	sprintf( valueString, "%d", spread );
  NXWriteDefault( "BackSpace", "SporStartSpread", valueString );
	sprintf( valueString, "%d", cloud );
  NXWriteDefault( "BackSpace", "SporStartCloud", valueString );
	sprintf( valueString, "%d", kind );
  NXWriteDefault( "BackSpace", "SporStartKind", valueString );
	sprintf( valueString, "%d", enemy );
  NXWriteDefault( "BackSpace", "SporEnemyMode", valueString );
	return self;
}
- getStartParameter
{ 
	if( inspectorPresent == NO )
		return self;
	
	pop = [ maxPop intValue ];
	pop = [ self setRangeForValue:pop Low:200 High:50000 ];
	sPop = [ startPop intValue ];
	sPop = [ self setRangeForValue: sPop Low:3 High:200 ];	
	spread = [ startSpread intValue ];
	spread = [ self setRangeForValue:spread Low:5 High:100 ];
	cloud = [ startCloud intValue ];
	cloud = [ self setRangeForValue:cloud Low:5 High:100 ];
	return self;
}
- ( int )setRangeForValue:( int )aValue Low:( int )low High:( int )high
{
	if( aValue > high )
		aValue = high;
	if( aValue < low )
		aValue = low;
	return( aValue );
}
- sizeTo:( NXCoord )theWidth: ( NXCoord )theHeight
{
#ifdef DEBUG
	fprintf( stderr, "sizeTo::\n" );
#endif
	initDone = NO;
	return( [super sizeTo:theWidth :theHeight] );
}
- initFrame:( NXRect * )frameRect
{
	const char	*aDefault;
	[ super initFrame: frameRect ];
	drawColor = [ self shouldDrawColor ];
#ifdef DEBUG
	fprintf( stderr, "\ninitFrame:\n" );
#endif
	aDefault = NXReadDefault( "BackSpace", "SporMaxPopulation" );
  if( !aDefault )
		pop = MAX_POP;
	else
		pop = atoi( aDefault );
	aDefault = NXReadDefault( "BackSpace", "SporStartPopulation" );
  if( !aDefault )
		sPop = START_POP;
	else
		sPop = atoi( aDefault );
	aDefault = NXReadDefault( "BackSpace", "SporStartSpread" );
  if( !aDefault )
		spread = START_SPREAD;
	else
		spread = atoi( aDefault );
	aDefault = NXReadDefault( "BackSpace", "SporStartCloud" );
  if( !aDefault )
		cloud = START_CLOUD;
	else
		cloud = atoi( aDefault );
	
	aDefault = NXReadDefault( "BackSpace", "SporStartKind" );
  if( !aDefault )
		kind = START_KIND;
	else
		kind = atoi( aDefault );
	aDefault = NXReadDefault( "BackSpace", "SporEnemyMode" );
  if( !aDefault )
		enemy = ENEMY;
	else
		enemy = atoi( aDefault );
	initDone = NO;
	inspectorPresent = NO;	
	return self;
}
- drawSelf:( const NXRect * )rects:( int )rectCount;
{
	NXRect	theRect;
	int			height,
					width;
#ifdef DEBUG
	fprintf( stderr, "drawSelf::\n" );
#endif
	if( initDone == NO )
	{
		drawColor = [ self shouldDrawColor ];
		[ self getFrame: &theRect ];
		height = ( int )theRect.size.height;
		width = ( int )theRect.size.width;
		set_screen_size( width, height, width );
		[ self getStartParameter ];
		[ self showStartParameter ];
#ifdef DEBUG
		fprintf( stderr, "set: %d %d %d %d %d %d\n", pop, sPop, spread, kind, cloud, enemy );
#endif
		set_simulation_parameter( pop, sPop, spread, kind, cloud, enemy );
		init_sim();
		initDone = YES;
	}
	else
	{
		if( !rects || !rectCount )
 			return self;
		PSsetgray( 0 );
		NXRectFill( rects );
	}
	return self;
}
- oneStep
{
	cDoSimulation();
	return self;
}
- inspector:sender
{
  char buf[ MAXPATHLEN ];
  if( !inspector )
  {
  	[ NXBundle getPath: buf 
               forResource:"SporView" 
                ofType:"nib" 
                inDirectory:[ sender moduleDirectory:"Spor" ] 
                withVersion:0 ];
    [ NXApp loadNibFile:buf owner:self withNames:NO ];
  }
  return inspector;
}
- inspectorInstalled
{
	inspectorPresent = YES;	
	[ self showStartParameter ];
	return self;
}
- inspectorWillBeRemoved
{
	[ sporWindow close ];
	return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.