This is Controller.m in view mode; [Download] [Up]
#import "Controller.h" #import "SmsObject.h" #import "DetController.h" #import "StocController.h" #import "AsciiController.h" #import <appkit/Application.h> #import <sys/param.h> /* for MAXPATHLEN */ #import <appkit/OpenPanel.h> #import <appkit/Listener.h> #import <appkit/Panel.h> #import <appkit/Button.h> #import <appkit/ButtonCell.h> #import <appkit/Cell.h> #import <appkit/ActionCell.h> #import <appkit/Matrix.h> #import <appkit/View.h> #import <appkit/Form.h> #import <objc/List.h> #import <string.h> #import <objc/NXStringTable.h> static BOOL getOpenPath(char *buf, char const *theType) { static id openPanel = nil; char const *fileTypes[2] = {0,0}; if (!openPanel) openPanel = [OpenPanel new]; if (theType && *theType) fileTypes[0] = theType; [NXApp setAutoupdate:NO]; if ([openPanel runModalForTypes:fileTypes]) { strcpy(buf,[openPanel filename]); [NXApp setAutoupdate:YES]; return YES; } else { [NXApp setAutoupdate:YES]; return NO; } } @implementation Controller - infoPanel:sender { if(!infoPanel) { [NXApp loadNibSection:"Info.nib" owner:self]; } [infoPanel makeKeyAndOrderFront:sender]; return self; } - helpPanel:sender { if(!helpPanel) { [NXApp loadNibSection:"Info.nib" owner:self]; } [helpPanel makeKeyAndOrderFront:sender]; return self; } - headerPanel:sender { if(!headerPanel) { [NXApp loadNibSection:"Header.nib" owner:self]; } [analysisParForm setStringValue:[theSmsObject getTextCharacters]]; [headerPanel makeKeyAndOrderFront:sender]; return self; } - appDidInit:sender { [super init]; theSmsObject=NULL; myListener=[NXApp appListener]; [myListener setServicesDelegate: self]; [theWindow makeKeyAndOrderFront: self]; return self; } - saveFile:sender { return self; } - revertToSaved:sender { return self; } - displayDeterministic:sender { if(!detController) detController = [[DetController alloc] init:self]; else [detController init:self]; return self; } - displayStochastic:sender { if(!stocController) stocController = [[StocController alloc] init:self]; else [stocController init:self]; return self; } - displayAscii:sender { if(!asciiController) asciiController = [[AsciiController alloc] init:self]; else [asciiController init:self]; return self; } - getTheSmsObject { return theSmsObject; } - openFile:(const char *)fileName { if (theSmsObject) [theSmsObject free]; theSmsObject = [[SmsObject alloc] initFromFile:(char *)fileName]; return self; } - open:sender { char pChPathname[1024]; if (getOpenPath(pChPathname,"sms")) [self openFile:pChPathname]; else return self; [self getInfo:pChPathname]; return self; } - getInfo:(const char *)pChPathname { char pChString[1024]; int iFormat, iRecords, iStochType; float fLength; sprintf (pChString, "Pathname: %s", pChPathname); [pathnameForm setStringValue:pChString]; iFormat = [theSmsObject getFormat]; switch (iFormat) { case FORMAT_HARMONIC: [formatForm setStringValue:"Format: harmonic"]; break; case FORMAT_INHARMONIC: [formatForm setStringValue:"inharmonic format"]; break; case FORMAT_HARMONIC_WITH_PHASE: [formatForm setStringValue:"harmonic format with phase"]; break; case FORMAT_INHARMONIC_WITH_PHASE: [formatForm setStringValue:"inharmonic format with phase"]; break; default: [formatForm setStringValue:""]; break; } iRecords = [theSmsObject getNRecords]; fLength = (float) iRecords / [theSmsObject getFrameRate]; sprintf (pChString, "Length: %.3f seconds (%d records)", fLength, iRecords); [lengthForm setStringValue:pChString]; sprintf (pChString, "Frame rate: %d Hz", [theSmsObject getFrameRate]); [frameRateForm setStringValue:pChString]; sprintf (pChString, "Number of sinuoids: %d", [theSmsObject getNTrajectories]); [numberTrajForm setStringValue:pChString]; sprintf (pChString, "Number of stochastic coefficients: %d", [theSmsObject getNStochasticCoeff]); [numberCoeffForm setStringValue:pChString]; iStochType = [theSmsObject getStochasticType]; switch (iStochType) { case STOC_FILTER_TYPE: [stochTypeForm setStringValue:"Stochastic type: IIR Filter"]; break; case STOC_MAG_ENV_TYPE: [stochTypeForm setStringValue:"Stochastic type: line segments"]; break; case STOC_NONE: [stochTypeForm setStringValue:"Stochastic type: none"]; break; } return self; } - (int)appOpenFile:(const char *)path type:(const char *)type { if (type && !strcmp(type, "sms")) { [self openFile:path]; [self getInfo:path]; return 1; } else return 0; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.