This is Aquarium.m in view mode; [Download] [Up]
#import "Aquarium.h" #import "Fish.h" #import "Thinker.h" #import <libc.h> #import <objc/List.h> #import <dpsclient/wraps.h> #import <appkit/appkit.h> static BOOL prefLoaded = FALSE; static char moduleDir[MAXPATHLEN]; @implementation AquariumView - oneStep { [fishList makeObjectsPerform:@selector(erase)]; if(!restart_flag){ [fishList makeObjectsPerform:@selector(move)]; } else { restart_flag = NO; [self restart]; } return self; } - initFrame:(NXRect *)frameRect { [super initFrame:frameRect]; [self restart]; return self; } - restart { int x; float r = 0.0, g = 0.0, b = 0.0; const char *ptr; int fishNumber = 6; ptr = NXGetDefaultValue([NXApp appName], "AquariumColor"); if (ptr) sscanf (ptr, "%f %f %f", &r, &g, &b ); aquariumColor = NXConvertRGBToColor(r,g,b); NXSetColor(aquariumColor); if (fishList == nil) fishList = [List allocFromZone:[self zone]] ; if ([fishList count] > 0) [fishList freeObjects]; ptr = NXGetDefaultValue([NXApp appName], "AquariumFishNumber"); if (ptr) sscanf (ptr, "%d", &fishNumber ); fishList = [[List allocFromZone:[self zone]] init]; for (x=0;x<fishNumber;x++) [fishList addObject:[[Fish allocFromZone:[self zone]] init:self]]; return self; } //-free //{ // [[fishList freeObjects] free]; // return [super free]; //} - drawSelf:(const NXRect *)rects :(int)rectCount { if (!rects || !rectCount) return self; NXSetColor(aquariumColor); NXRectFill(rects); return self; } - newViewSize { [fishList makeObjectsPerform:@selector(viewDidResize)]; return self; } - (const char *)windowTitle { return "Fish Are So Relaxing"; } - didLockFocus { return self; } - sizeTo:(NXCoord)width :(NXCoord)height { [super sizeTo:width :height]; [self newViewSize]; return self; } - (BOOL)useBufferedWindow { return YES; } -inspector:sender { char buf[MAXPATHLEN]; sprintf(moduleDir,"%s",[sender moduleDirectory:"Aquarium"]); if (!sharedInspectorPanel) { sprintf(buf,"%s/AquariumView.nib",moduleDir); [NXApp loadNibFile:buf owner:self withNames:NO]; } return sharedInspectorPanel; } - changeFishNumber:sender { int i; char str[4]; i = [sender floatValue]; sprintf(str, "%d", i); [fishNumberForm setStringValue: str at:0]; return self; } - changeFishSpeed:sender { int i; char str[4]; i = [sender floatValue]; sprintf(str, "%d", i); [fishSpeedForm setStringValue: str at:0]; return self; } - changeDissolveFactor:sender { int i; char str[4]; i = [sender floatValue]; sprintf(str, "%d", i); [dissolveForm setStringValue: str at:0]; return self; } - loadPref:sender { char buf[MAXPATHLEN]; float r = 0.0, g = 0.0, b = 0.0, x; int i = 6; const char *ptr; char str[4]; char fishType[10] = "salt"; if (!prefLoaded) { sprintf(buf,"%s/AquariumPref.nib",moduleDir); [NXApp loadNibFile:buf owner:self withNames:YES]; prefLoaded = TRUE; ptr = NXGetDefaultValue([NXApp appName], "AquariumColor"); if (ptr) sscanf (ptr, "%f %f %f", &r, &g, &b ); [colorWell setColor:NXConvertRGBToColor(r,g,b)]; ptr = NXGetDefaultValue([NXApp appName], "AquariumFishNumber"); if (ptr) sscanf (ptr, "%d", &i ); x = i; [fishNumberSlider setFloatValue: x]; sprintf(str, "%d", i); [fishNumberForm setStringValue: str]; ptr = NXGetDefaultValue([NXApp appName], "AquariumFishSpeed"); if (ptr) sscanf (ptr, "%d", &i ); x = i; [fishSpeedSlider setFloatValue: x]; sprintf(str, "%d", i); [fishSpeedForm setStringValue: str]; ptr = NXGetDefaultValue([NXApp appName], "AquariumFishType"); if (ptr) sscanf (ptr, "%s", fishType ); if(!strcmp(fishType,"salt")) [fishTypeMatrix selectCellAt:0 :0]; else [fishTypeMatrix selectCellAt:0 :1]; i = 0; ptr = NXGetDefaultValue([NXApp appName], "AquariumFxType"); if (ptr) sscanf (ptr, "%d", &i); [fxMatrix selectCellAt:i :0]; i = 3; ptr = NXGetDefaultValue([NXApp appName], "AquariumDissolveFactor"); if (ptr) sscanf (ptr, "%d", &i); x=i; [dissolveSlider setFloatValue: x]; sprintf(str, "%d", i); [dissolveForm setStringValue: str]; } [NXGetNamedObject("Preferences", self) makeKeyAndOrderFront:self]; return self; } - cancelPref:sender; { [[colorWell window] orderOut:self]; prefLoaded = FALSE; return self; } -setPref:sender { float r,g,b; char str[100]; NXWriteDefault([NXApp appName], "AquariumFishNumber", [fishNumberForm stringValueAt:0]); NXWriteDefault([NXApp appName], "AquariumFishSpeed", [fishSpeedForm stringValueAt:0]); NXConvertColorToRGB([colorWell color], &r, &g, &b); sprintf(str, "%5.3f %5.3f %5.3f", r, g, b ); NXWriteDefault([NXApp appName], "AquariumColor", str); if([fishTypeMatrix selectedCol] == 0) NXWriteDefault([NXApp appName], "AquariumFishType", "salt") ; else NXWriteDefault([NXApp appName], "AquariumFishType", "fresh"); sprintf(str,"%d",[fxMatrix selectedRow]); NXWriteDefault([NXApp appName], "AquariumFxType", str); NXWriteDefault([NXApp appName], "AquariumDissolveFactor", [dissolveForm stringValueAt:0]); [self cancelPref:self]; restart_flag = YES; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.