This is UGDef.m in view mode; [Download] [Up]
/************************************************** * SynthBuilder * Copyright 1993 Nick Porcaro All Rights Reserved **************************************************/ #import <stdlib.h> #import <string.h> #import "UGDef.h" #import "UGMethodDef.h" #import "UGArgDef.h" #import "IconView.h" extern char *getAppName(); @implementation UGDef static char TempString[1024]; + initialize /* Set the version. This can be used in a later version to distinguish older * formats when unarchiving documents. */ { [UGDef setVersion:3]; return self; } - init { inspector = nil; isEnvelopeHandler = NO; isADSwitch = NO; isData = NO; isOscg = NO; isSineROM = NO; hasLength = NO; isStorage = NO; nibFile = NULL; nameString = NULL; typeString = NULL; iconName = NULL; currMethod = 0; currArg = 0; methods = [[List alloc] init]; arguments = [[List alloc] init]; return self; } - free /* Free any mess we created */ { return [super free]; } - takeNameFrom:sender { [self setName:(char *) [sender stringValue]]; return self; } - takeNibFileFrom:sender { [self setNibFile:(char *) [sender stringValue]]; return self; } - takeTypeFrom:sender { [self setTheType:(char *) [sender stringValue]]; return self; } - takeIconFrom:sender { [self setIconFile:(char *) [sender stringValue]]; [self showIcon]; return self; } - setName:(char *) aName { int len; if (! aName || ! (len = strlen(aName))) { return self; } if (nameString) { NXZoneFree([self zone], nameString); } len += 10; // for good measure! nameString = (char *) NXZoneCalloc([self zone], len, sizeof(char)); strcpy(nameString, aName); [theNameField setStringValue:nameString]; [self updateDisplay]; return self; } - (char *) getName { return nameString; } - setMetaType:(int) aType { metaType = aType; return self; } - (int) getMetaType { return metaType; } - setNibFile:(char *) fileName { int len; if (! fileName || ! (len = strlen(fileName))) { return self; } if (nibFile) { NXZoneFree([self zone], nibFile); } len += 10; // for good measure! nibFile = (char *) NXZoneCalloc([self zone], len, sizeof(char)); strcpy(nibFile, fileName); [theNibField setStringValue:nibFile]; [self updateDisplay]; return self; } - (char *) getNibFile { return nibFile; } - (char *) getType { return typeString; } - (char *) getIconFile { return iconName; } - (char *) getMethodFieldValue { return (char *) [theMethodField stringValue]; } - setTheType:(char *) aType { int len; if (! aType || ! (len = strlen(aType))) { return self; } if (typeString) { NXZoneFree([self zone], typeString); } len += 10; // for good measure! typeString = (char *) NXZoneCalloc([self zone], len, sizeof(char)); strcpy(typeString, aType); return self; } - setIconFile:(char *) anIcon { int len; if (! anIcon || ! (len = strlen(anIcon))) { return self; } if (iconName) { NXZoneFree([self zone], iconName); } len += 10; // for good measure! iconName = (char *) NXZoneCalloc([self zone], len, sizeof(char)); strcpy(iconName, anIcon); return self; } - showIcon { [theIconView showImageInFile:iconName]; return self; } - editIcon:sender { sprintf(TempString, "open %s.tiff", iconName); system(TempString); return self; } - takeOptionFrom:sender { int theTag, theValue; theTag = [[sender selectedCell] tag]; theValue = [[sender selectedCell] intValue]; switch (theTag) { case (0): { (theValue ? [self setIsEnvelopeHandler: YES] : [self setIsEnvelopeHandler: NO]); break; } case (1): { (theValue ? [self setIsADSwitch: YES] : [self setIsADSwitch: NO]); break; } case (2): { (theValue ? [self setIsData: YES] : [self setIsData: NO]); break; } case (3): { (theValue ? [self setIsOscg: YES] : [self setIsOscg: NO]); break; } case (4): { (theValue ? [self setIsSineROM: YES] : [self setIsSineROM: NO]); break; } case (5): { (theValue ? [self setHasLength: YES] : [self setHasLength: NO]); break; } case (6): { (theValue ? [self setHasConstant: YES] : [self setHasConstant: NO]); break; } case (7): { (theValue ? [self setIsStorage: YES] : [self setIsStorage: NO]); break; } default: { ; /* Nothing */ } } return self; } - updateOptionSwitch { id matrix; matrix = theOptionSwitch; [[matrix cellAt:0:0] setIntValue: (isEnvelopeHandler ? 1 : 0)]; [[matrix cellAt:1:0] setIntValue: (isADSwitch ? 1 : 0)]; [[matrix cellAt:2:0] setIntValue: (isData ? 1 : 0)]; [[matrix cellAt:3:0] setIntValue: (isOscg ? 1 : 0)]; [[matrix cellAt:4:0] setIntValue: (isSineROM ? 1 : 0)]; [[matrix cellAt:5:0] setIntValue: (hasLength ? 1 : 0)]; [[matrix cellAt:6:0] setIntValue: (hasConstant ? 1 : 0)]; [[matrix cellAt:7:0] setIntValue: (isStorage ? 1 : 0)]; return self; } - setIsEnvelopeHandler:(BOOL) val { isEnvelopeHandler = val; return self; } - setIsADSwitch:(BOOL) val { isADSwitch = val; return self; } - setIsData:(BOOL) val { isData = val; return self; } - setIsOscg:(BOOL) val { isOscg = val; return self; } - setIsSineROM:(BOOL) val { isSineROM = val; return self; } - setHasLength:(BOOL) val { hasLength = val; return self; } - setHasConstant:(BOOL) val { hasConstant = val; return self; } - setIsStorage:(BOOL) val { isStorage = val; return self; } - setIsMidi:(BOOL) val { isMidi = val; return self; } - setIsClavier:(BOOL) val { isClavier = val; return self; } - setIsPatchParameter:(BOOL) val { isPatchParameter = val; return self; } - setIsNoteFilter:(BOOL) val { isNoteFilter = val; return self; } - (BOOL) isEnvelopeHandler { return isEnvelopeHandler; } - (BOOL) isADSwitch { return isADSwitch; } - (BOOL) isData { return isData; } - (BOOL) isOscg { return isOscg; } - (BOOL) isSineROM { return isSineROM; } - (BOOL) hasLength { return hasLength; } - (BOOL) hasConstant { return hasConstant; } - (BOOL) isStorage { return isStorage; } - (BOOL) isMidi { return isMidi; } - (BOOL) isClavier { return isClavier; } - (BOOL) isPatchParameter { return isPatchParameter; } - (BOOL) isNoteFilter { return isNoteFilter; } - methods { return methods; } - addNewMethod:(char *) aName { UGMethodDef *aMethod; if (! aName) { return self; } aMethod = [[UGMethodDef alloc] init]; [aMethod initUGDef:self]; [aMethod setName:aName]; [methods addObjectIfAbsent:aMethod]; return aMethod; } - editNewMethod:sender { [self addNewMethod:(char *) [sender stringValue]]; currMethod = [methods count] - 1; [self updateDisplay]; [self editMethod:currMethod]; return self; } - switchMethod:sender /* Change the method being displayed on the inspector */ { int button; int num_methods; num_methods = [methods count]; if (num_methods <= 0) { [self updateDisplay]; return self; } /* button = -1 for top, 1 for botton */ button = [[sender selectedCell] tag]; currMethod += button; if (currMethod < 0) { currMethod = num_methods - 1; } else if (currMethod == num_methods) { currMethod = 0; } [self updateDisplay]; return self; } - editCurrentMethod:sender { [self editMethod:currMethod]; return self; } - removeCurrentMethod:sender { int count; count = [methods count]; if (count > 0) { id anObj = [methods objectAt:currMethod]; [anObj closeInspector]; [methods removeObject:anObj]; currMethod = 0; } [self updateDisplay]; return self; } - editMethod:(int) meth_num { [[methods objectAt:meth_num] edit]; return self; } - arguments { return arguments; } - addNewArg:(char *) aName { UGArgDef *anArg; if (! aName) { return self; } anArg = [[UGArgDef alloc] init]; [anArg initUGDef:self]; [anArg setName:aName]; [arguments addObjectIfAbsent:anArg]; return anArg; } - editNewArg:sender { [self addNewArg:(char *) [sender stringValue]]; currArg = [arguments count] - 1; [self updateDisplay]; [self editArg:currArg]; return self; } - switchArg:sender /* Change the Arg being displayed on the inspector */ { int button; int num_args; num_args = [arguments count]; if (num_args <= 0) { [self updateDisplay]; return self; } /* button = -1 for top, 1 for botton */ button = [[sender selectedCell] tag]; currArg += button; if (currArg < 0) { currArg = num_args - 1; } else if (currArg == num_args) { currArg = 0; } [self updateDisplay]; return self; } - editCurrentArg:sender { [self editArg:currArg]; return self; } - removeCurrentArg:sender { int count; count = [arguments count]; if (count > 0) { id anObj = [arguments objectAt:currArg]; [anObj closeInspector]; [arguments removeObject:anObj]; currArg = 0; } [self updateDisplay]; return self; } - editArg:(int) arg_num { [[arguments objectAt:arg_num] edit]; return self; } - edit { [self updateDisplay]; [inspector makeKeyAndOrderFront:self]; [self showIcon]; return self; } - closeInspector { if (inspector) { [inspector performClose:self]; } return self; } - addHelp:sender { NXRunAlertPanel(getAppName(), "Only if you scream loud enough", NULL, NULL, NULL); return self; } - updateDisplay { int count, ival; if (!inspector) { [NXApp loadNibSection:"UGDef.nib" owner:self withNames:YES]; } [theNameField setStringValue: nameString]; [inspector setTitle:nameString]; [theTypeField setStringValue: typeString]; [theNibField setStringValue: nibFile]; [theIconField setStringValue: iconName]; [self updateOptionSwitch]; count = [methods count]; if (count <= 0) { ival = 0; [theMethodField setStringValue:"None"]; } else { ival = currMethod + 1; [theMethodField setStringValue:(char *) [[methods objectAt:currMethod] getName]]; } [methodCountField setIntValue:count]; [methodIndexField setIntValue:ival]; count = [arguments count]; if (count <= 0) { [theArgField setStringValue:"None"]; ival = 0; } else { ival = currArg + 1; [theArgField setStringValue:(char *) [[arguments objectAt:currArg] getName]]; } [argCountField setIntValue:count]; [argIndexField setIntValue:ival]; return self; } - write:(NXTypedStream *) stream { [super write:stream]; NXWriteTypes(stream, "i", &metaType); NXWriteTypes(stream, "*", &nibFile); NXWriteTypes(stream, "*", &nameString); NXWriteTypes(stream, "*", &typeString); NXWriteTypes(stream, "*", &iconName); NXWriteTypes(stream, "c", &isEnvelopeHandler); NXWriteTypes(stream, "c", &isADSwitch); NXWriteTypes(stream, "c", &isData); NXWriteTypes(stream, "c", &isOscg); NXWriteTypes(stream, "c", &isSineROM); NXWriteTypes(stream, "c", &hasLength); NXWriteTypes(stream, "c", &hasConstant); NXWriteTypes(stream, "c", &isStorage); NXWriteTypes(stream, "c", &isMidi); NXWriteTypes(stream, "c", &isClavier); NXWriteTypes(stream, "c", &isPatchParameter); NXWriteTypes(stream, "c", &isNoteFilter); NXWriteTypes(stream, "@", &methods); NXWriteTypes(stream, "@", &arguments); NXWriteTypes(stream, "i", &currMethod); NXWriteTypes(stream, "i", &currArg); return self; } - read:(NXTypedStream *) stream { int version; id anAppKitObj; [super read:stream]; version = NXTypedStreamClassVersion(stream, "UGDef"); if (version == 3) { NXReadTypes(stream, "i", &metaType); NXReadTypes(stream, "*", &nibFile); NXReadTypes(stream, "*", &nameString); NXReadTypes(stream, "*", &typeString); NXReadTypes(stream, "*", &iconName); NXReadTypes(stream, "c", &isEnvelopeHandler); NXReadTypes(stream, "c", &isADSwitch); NXReadTypes(stream, "c", &isData); NXReadTypes(stream, "c", &isOscg); NXReadTypes(stream, "c", &isSineROM); NXReadTypes(stream, "c", &hasLength); NXReadTypes(stream, "c", &hasConstant); NXReadTypes(stream, "c", &isStorage); NXReadTypes(stream, "c", &isMidi); NXReadTypes(stream, "c", &isClavier); NXReadTypes(stream, "c", &isPatchParameter); NXReadTypes(stream, "c", &isNoteFilter); NXReadTypes(stream, "@", &methods); NXReadTypes(stream, "@", &arguments); NXReadTypes(stream, "i", &currMethod); NXReadTypes(stream, "i", &currArg); } else { NXReadTypes(stream, "i", &metaType); NXReadTypes(stream, "*", &nibFile); NXReadTypes(stream, "*", &nameString); NXReadTypes(stream, "*", &typeString); NXReadTypes(stream, "*", &iconName); NXReadTypes(stream, "c", &isEnvelopeHandler); NXReadTypes(stream, "c", &isADSwitch); NXReadTypes(stream, "c", &isData); NXReadTypes(stream, "c", &isOscg); NXReadTypes(stream, "c", &isSineROM); NXReadTypes(stream, "c", &hasLength); NXReadTypes(stream, "c", &hasConstant); NXReadTypes(stream, "c", &isStorage); NXReadTypes(stream, "c", &isMidi); NXReadTypes(stream, "c", &isClavier); NXReadTypes(stream, "c", &isPatchParameter); NXReadTypes(stream, "c", &isNoteFilter); NXReadTypes(stream, "@", &methods); NXReadTypes(stream, "@", &arguments); NXReadTypes(stream, "@", &anAppKitObj); NXReadTypes(stream, "@", &anAppKitObj); NXReadTypes(stream, "@", &anAppKitObj); NXReadTypes(stream, "@", &anAppKitObj); NXReadTypes(stream, "@", &anAppKitObj); NXReadTypes(stream, "@", &anAppKitObj); NXReadTypes(stream, "@", &anAppKitObj); NXReadTypes(stream, "@", &anAppKitObj); NXReadTypes(stream, "@", &anAppKitObj); NXReadTypes(stream, "i", &currMethod); NXReadTypes(stream, "i", &currArg); } return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.