This is Controller.m in view mode; [Download] [Up]
/* * Written by Guy Roberts of Object Skills Ltd, drifting * in cyberspace without a domain or email address right * now. * May 7 1993. You can use this as a base for a better application * as long as it is made publically available. */ /* Controller coordinates the selection of header files and * the creation of Translator objects which themselves * create the rich text output of a manual page and optionally * launch the Edit application. */ #import "Controller.h" @implementation Controller #define SUFFIX "h" #define IS_DIR(m) (((m)&S_IFMT) == S_IFDIR) - init { [super init]; openReq = [OpenPanel new]; lastDirectoryUsed = (char *) NXHomeDirectory(); /* Become the delegate of the panels to get * panel:filterFile:inDirectory messages. */ [openReq setDelegate:self]; [NXApp setDelegate: self]; return self; } - appDidInit: sender { [self open: self]; return self; } - (int) app: sender openFile: (const char *) fileName type: (const char *) aType { [self createATranslator: (char *) fileName]; return YES; } -(BOOL) appAcceptsAnotherFile:sender { return (YES); } - open: sender { const char *nameToUse = NULL; const char *documentDir = NULL; char theTypes[2]; theTypes[0] = 'h'; theTypes[1] = 0; [[[openReq setTitle: [headingNames valueForStringKey: "openPanelTitle"]] setRequiredFileType: SUFFIX] runModalForDirectory: lastDirectoryUsed file: ""]; nameToUse = [openReq filename]; if (!nameToUse) return self; /* Remember where to open the next open panel */ [self createATranslator: (char *) nameToUse]; { char buffer[1024], *ptr; buffer[0] = '\0'; strcat(buffer, nameToUse); ptr = index(buffer, '/'); /* Truncate it */ *ptr = '\0'; /* BUG we leak the space pointed to previously by lastDirectoryUsed */ lastDirectoryUsed = NXCopyStringBuffer(buffer); } return self; } - createATranslator: (char *) name; { /* These Translator objects do the work of creating rich text */ [[Translator alloc] initForHeaderFile: name withTable: headingNames]; return self; } - (BOOL) panelValidateFilenames:sender { return(YES); } - (BOOL) panel: panel filterFile: (const char *) fileName inDirectory: (const char *) directory { char *suffix = rindex(fileName, '.'); char fullPath[1024]; struct stat buffer; sprintf(fullPath, "%s/%s", directory, fileName); /* Collect information about the file to be filtered */ if (stat(fullPath, &buffer) == -1) return NO; else if (IS_DIR(buffer.st_mode)) return YES; else if (suffix && (strcmp(suffix, ".h") == 0)) return(YES); else return(NO); } - showInfoPanel: sender; { if (infoview == 0) [NXApp loadNibSection: "info.nib" owner:self]; [[infoview window] makeKeyAndOrderFront: self]; #ifdef SHOW_OFF [infoview fadeAway:self]; #endif return self; } - showPreferences:sender { if (preferences == nil) [NXApp loadNibSection:"Preferences.nib" owner:self]; [preferences showPreferencePanel: self]; return self; } - endAllWars: sender { NXRunAlertPanel(NULL, [headingNames valueForStringKey: "notImplemented"] , NULL, NULL, NULL, "Continue"); return self; } - free { return [super free]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.