This is scFrontend.m in view mode; [Download] [Up]
#import "scFrontend.h" #import <appkit/Application.h> #import <appkit/Pasteboard.h> #import <appkit/Speaker.h> #import <appkit/Listener.h> #import <appkit/defaults.h> #import <libc.h> #import <string.h> #import <mach.h> @implementation scFrontend : Object - copyString:(char *)s { id p = [Pasteboard new]; [p declareTypes:&NXAsciiPboard num:1 owner:self]; [p writeType:NXAsciiPboard data:s length:strlen(s)]; return self; } - launchTerminal:(char *)program { id p = [NXApp appSpeaker]; port_t t = NXPortFromName("Terminal",NULL); int ok; if (t==PORT_NULL) return self; [p setSendPort:t]; [self copyString:program]; (void)[p msgPaste:&ok]; return self; } static id openFile(const char *directory, const char *name) /* * Opens a file with the given name in the specified directory. * Returns self if successful, nil otherwise. */ { char buffer[MAXPATHLEN+1], path[MAXPATHLEN+1], cmd[MAXPATHLEN+1]; if (name) { if (!directory) { directory = "."; } else if (*directory != '/') { strcpy(buffer, "./"); strcat(buffer, directory); directory = buffer; } if (!chdir(directory) && getwd(path)) { if (strlen(name)) { sprintf(cmd,"cd %s;sc %s\n", path, name); } else { sprintf(cmd,"cd %s;sc\n", path); } return [[NXApp delegate] launchTerminal:cmd]; } } return nil; } /* Public methods */ - openBlankSheet:sender { openFile(".",""); [NXApp hide:sender]; return self; } /* * Application object delegate methods. */ - appDidInit:sender /* * Check for files to open specified on the command line. * If there are no open documents, then open a blank one. */ { int i; char buffer[MAXPATHLEN+1]; char *directory, *name, *ext; if (NXArgc > 1) { for (i = 1; i < NXArgc; i++) { strcpy(buffer, NXArgv[i]); ext = strrchr(buffer, '.'); if (!ext || strcmp(ext, ".pdsc")) strcat(buffer, ".pdsc"); name = strrchr(buffer, '/'); if (name) { *name++ = '\0'; directory = buffer; } else { name = buffer; directory = NULL; } openFile(directory, name); [NXApp hide:self]; } } else { if (gotFile!=YES) [[NXApp delegate] openBlankSheet:self]; } return self; } - (int)appOpenFile:(const char *)path type:(const char *)type /* * This method is performed whenever a user double-clicks on an icon * in the Workspace Manager representing a PD SC program document. */ { char *name; char directory[MAXPATHLEN+1]; if (type && !strcmp(type, "pdsc")) { strcpy(directory, path); name = strrchr(directory, '/'); if (name) { *name++ = '\0'; if (openFile(directory, name)) { [NXApp hide:self]; return gotFile= YES; } } } return NO; } - (BOOL)appAcceptsAnotherFile:sender /* * We accept any number of appOpenFile:type: messages. */ { return YES; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.