This is hgvScript.m in view mode; [Download] [Up]
/* Hippo Graphic View * a subclass of GraphicView in /NextDeveloper/Examples/Draw * to add or over-ride so that it can handle hippo Graphic objects * * This category handles compiling and running an Obj-C routine to * create and manipulate plots * * Copyright (C) 1993 The Board of Trustees of * The Leland Stanford Junior University. All Rights Reserved. */ #import "HGraphicView.h" #import "HFunction.h" #import "HDrawApp.h" #import "InspectTuple.h" #import "Draw.subproj/draw.h" const char hgvScript_m_rcsid[] = "$Id: hgvScript.m,v 2.1 1994/01/05 02:23:21 rensing Exp $"; @interface HGraphicView(Private) - runScript: (const char *)file; @end @implementation HGraphicView(Script) - executeScript:sender { OpenPanel *openpanel = [[OpenPanel new] allowMultipleFiles:NO]; const char *const fileTypes[2] = { "m", NULL }; const char *file; if ([openpanel runModalForTypes:fileTypes]) { file = [openpanel filename]; if (file) { if (NXRunAlertPanel("Save before scripting warning", "Do you want to save the document before running?", "Yes", "No", NULL) == NX_ALERTDEFAULT) { [[drawInstance currentDocument] save: nil]; } [self runScript: file]; } } return self; } @end @implementation HGraphicView(Private) - runScript: (const char *)file { HFunction *func; int rc; void (*fp)(HGraphicView *, HTuple *); char *ptr; char inclpath[MAXPATHLEN+3] = "-I"; /* * first, create an HFunction to handle the mechanics of compiling and * loading a function. */ func = [[HFunction alloc] init]; [func setFileName: file]; [func setLanguage: OBJECTIVE_C ]; [func setFunctionName: "hscript" ]; [func setOutputDir: "/tmp"]; /* ask the main bundle for the path to the needed include files */ if ( ! [[NXBundle mainBundle] getPath:(inclpath+2) forResource:"Plot" ofType:"h"] ) { NXRunAlertPanel( "Error", "Can not find needed include files in HippoDraw.app", "OK", NULL, NULL ); return NULL; } ptr = strrchr(inclpath, '/'); *ptr = '\0'; [func setCompileFlags: inclpath ]; /* * compile and link the function */ rc = [func compile]; if (rc == 0) rc = [func link]; if (rc == 0) { fp = [func funcPointer]; if (fp) { HTuple *currTuple = [[[hippoDraw inspectTuple] updateView] currentHTuple]; (*fp)(self, currTuple); } [func unload]; /* if the function loaded, unload it */ } [func free]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.