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.