diff options
author | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
commit | ab8cc85adde879fb963c94d15675783f2cf4b183 (patch) | |
tree | c202482327f474583b750b2c45dedfc4e4312b1d /src/graph/viewAlone/spoon2D.c.pamphlet | |
download | open-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz |
Initial population.
Diffstat (limited to 'src/graph/viewAlone/spoon2D.c.pamphlet')
-rw-r--r-- | src/graph/viewAlone/spoon2D.c.pamphlet | 397 |
1 files changed, 397 insertions, 0 deletions
diff --git a/src/graph/viewAlone/spoon2D.c.pamphlet b/src/graph/viewAlone/spoon2D.c.pamphlet new file mode 100644 index 00000000..f8a1b185 --- /dev/null +++ b/src/graph/viewAlone/spoon2D.c.pamphlet @@ -0,0 +1,397 @@ +\documentclass{article} +\usepackage{axiom} +\begin{document} +\title{\$SPAD/src/graph/viewAlone spoon2D.c} +\author{The Axiom Team} +\maketitle +\begin{abstract} +\end{abstract} +\eject +\tableofcontents +\eject +\section{License} +<<license>>= +/* +Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of The Numerical ALgorithms Group Ltd. nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +@ +<<*>>= +<<license>> + +#define _SPOON2D_C +#include "axiom-c-macros.h" +#include "useproto.h" + +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +#include "viewAlone.h" + + +#include "util.H1" +#include "all_alone.H1" + +/* #define huhDEBUG */ + +/* #define spoonDEBUG */ + +void +#ifdef _NO_PROTO +spoonView2D() +#else +spoonView2D(void) +#endif +{ + + int i,code,pipe0[2],pipe1[2],there; + char envAXIOM[100],runView[100]; + + sprintf(errorStr,"%s","creating pipes"); + check(pipe(pipe0)); + check(pipe(pipe1)); + switch(fork()) { + + case -1: + fprintf(stderr, + "Cannot create a new process - probably have too many things running already.\n"); + exit(-1); + + case 0: + /************ + * Child * + ************/ + printf("(spoon2D child) mapping of pipes to standard I/O for view2D\n"); + sprintf(errorStr,"%s","(viewAlone) mapping of pipes to standard I/O for view2D"); + check(dup2(pipe0[0],0)); + check(dup2(pipe1[1],1)); + close(pipe0[0]); + close(pipe0[1]); + close(pipe1[0]); + close(pipe1[1]); + printf("(spoon2D child) start the TwoDimensionalViewport process\n"); + sprintf(errorStr,"%s","(viewAlone) execution of the TwoDimensionalViewport process"); + sprintf(envAXIOM,"%s",getenv("AXIOM")); + sprintf(runView,"%s%s",envAXIOM,"/lib/view2D"); + check(execl(runView,runView,NULL)); + fprintf(stderr,"Could not execute view2D! Check that view2D is on your path variable.\n"); + exit(-1); + + default: + /************* + * Parent * + *************/ + + viewP.viewType = view2DType; + + /* set up pipes to child process */ + close(pipe0[0]); + close(pipe1[1]); + viewP.viewIn = pipe1[0]; + viewP.viewOut = pipe0[1]; + printf("(spoon2D parent) pipes created\n"); + if (viewP.viewIn <0) { + fprintf(stderr," Could not connect from Viewport manager to viewport process. Try again.\n"); + return; + } else { + code = read(viewP.viewIn,&ack,intSize); + if (code < 0) { + fprintf(stderr," Could not connect from Viewport manager to viewport process. Try again.\n"); + return; + } + } + printf("(spoon2D parent) making View2D data\n"); + makeView2DFromFileData(&doView2D); + + /* tell child it is to be a stand alone program */ + i = yes; + fprintf(stderr," Transmitting data to viewport...\n"); + write(viewP.viewOut,&i,intSize); + + write(viewP.viewOut,&doView2D,sizeof(view2DStruct)); + i = strlen(doView2D.title)+1; + write(viewP.viewOut,&i,intSize); /* tell the length of the title to child */ + write(viewP.viewOut,doView2D.title,i); /* tell the title to the child, child */ + for (i=0; i<maxGraphs; i++) { + there = graphArray[i].key; + write(viewP.viewOut,&there,intSize); + sendGraphToView2D(i,there,&viewP); + }; /* for i in graphs */ + + fprintf(stderr," Done.\n"); + + /*** get acknowledge from viewport */ + + code = read(viewP.viewIn,&(viewP.viewWindow),sizeof(Window)); + sleep(1); /* wait a second...*/ + exit(0); + + } /* switch */ + +} /* forkView2D() */ + + + +/*void sendGraphToView2D(i,there,viewP) */ +void +#ifdef _NO_PROTO +sendGraphToView2D(i,there,viewP) + int i,there; + viewManager *viewP; +#else +sendGraphToView2D(int i,int there,viewManager *viewP) +#endif +{ + graphStruct *gPtr; + pointListStruct *llPtr; + pointStruct *p; + int j,k; + printf("(spoon2D sendGraphToView2D) i=%d there=%d\n",i,there); + if (there) { + + gPtr = &(graphArray[i]); + printf("(spoon2D sendGraphToView2D) graph %d is there\n",i); + write(viewP->viewOut,&(gPtr->xmin),floatSize); + write(viewP->viewOut,&(gPtr->xmax),floatSize); + write(viewP->viewOut,&(gPtr->ymin),floatSize); + write(viewP->viewOut,&(gPtr->ymax),floatSize); + write(viewP->viewOut,&(gPtr->xNorm),floatSize); + write(viewP->viewOut,&(gPtr->yNorm),floatSize); + write(viewP->viewOut,&(gPtr->spadUnitX),floatSize); + write(viewP->viewOut,&(gPtr->spadUnitY),floatSize); + write(viewP->viewOut,&(gPtr->unitX),floatSize); + write(viewP->viewOut,&(gPtr->unitY),floatSize); + write(viewP->viewOut,&(gPtr->originX),floatSize); + write(viewP->viewOut,&(gPtr->originY),floatSize); + write(viewP->viewOut,&(gPtr->numberOfLists),intSize); + + llPtr = gPtr->listOfListsOfPoints; + for (j=0; j<(gPtr->numberOfLists); j++) { + write(viewP->viewOut,&(llPtr->numberOfPoints),intSize); + p = llPtr->listOfPoints; + for (k=0; k<(llPtr->numberOfPoints); k++) { + write(viewP->viewOut,&(p->x),floatSize); + write(viewP->viewOut,&(p->y),floatSize); + write(viewP->viewOut,&(p->hue),floatSize); + write(viewP->viewOut,&(p->shade),floatSize); + p++; + } /* for k in list of points */ + write(viewP->viewOut,&(llPtr->pointColor),intSize); + write(viewP->viewOut,&(llPtr->lineColor),intSize); + write(viewP->viewOut,&(llPtr->pointSize),intSize); + llPtr++; + } /* for j in list of lists of points */ + + /* a state is defined for a graph if it is there */ + write(viewP->viewOut,&(graphStateArray[i].scaleX),floatSize); + write(viewP->viewOut,&(graphStateArray[i].scaleY),floatSize); + write(viewP->viewOut,&(graphStateArray[i].deltaX),floatSize); + write(viewP->viewOut,&(graphStateArray[i].deltaY),floatSize); + write(viewP->viewOut,&(graphStateArray[i].pointsOn),intSize); + write(viewP->viewOut,&(graphStateArray[i].connectOn),intSize); + write(viewP->viewOut,&(graphStateArray[i].splineOn),intSize); + write(viewP->viewOut,&(graphStateArray[i].axesOn),intSize); + write(viewP->viewOut,&(graphStateArray[i].axesColor),intSize); + write(viewP->viewOut,&(graphStateArray[i].unitsOn),intSize); + write(viewP->viewOut,&(graphStateArray[i].unitsColor),intSize); + write(viewP->viewOut,&(graphStateArray[i].showing),intSize); + + } /* if graph is there */ + +} + + +void +#ifdef _NO_PROTO +makeView2DFromFileData(doView2D) + view2DStruct *doView2D; +#else +makeView2DFromFileData(view2DStruct *doView2D) +#endif +{ + + int i,j,k; + char title[256]; + FILE *graphFile; + char graphFilename[256]; + pointListStruct *aList; + pointStruct *aPoint; + printf("(spoon2D makeView2DFromFileData)\n"); + fgets(title,256,viewFile); + printf("(spoon2D) title=%s\n",title); + if (!(doView2D->title = + (char *)malloc((strlen(title)+1) * sizeof(char)))) { + fprintf(stderr, + "Ran out of memory (malloc) trying to get the title.\n"); + exit(-1); + } + sprintf(doView2D->title,"%s",title); + /* put in a null terminator over the newline that the fgets reads */ + doView2D->title[strlen(doView2D->title)-1] = '\0'; + fscanf(viewFile,"%d %d %d %d\n", + &(doView2D->vX), + &(doView2D->vY), + &(doView2D->vW), + &(doView2D->vH)); + printf("(spoon2D) X=%d Y=%d W=%d H=%d \n", + doView2D->vX,doView2D->vY,doView2D->vW,doView2D->vH); + for (i=0; i<maxGraphs; i++) { + fscanf(viewFile,"%d\n", + &(graphArray[i].key)); + printf("(spoon2D) i=%d key=%d\n", + i,graphArray[i].key); + fscanf(viewFile,"%g %g\n", + &(graphStateArray[i].scaleX), + &(graphStateArray[i].scaleY)); + printf("(spoon2D) scaleX=%g scaleY=%g\n", + graphStateArray[i].scaleX,graphStateArray[i].scaleY); + fscanf(viewFile,"%g %g\n", + &(graphStateArray[i].deltaX), + &(graphStateArray[i].deltaY)); + printf("(spoon2D) deltaX=%g deltaY=%g\n", + graphStateArray[i].deltaX,graphStateArray[i].deltaY); + fscanf(viewFile,"%g %g\n", + &(graphStateArray[i].centerX), + &(graphStateArray[i].centerY)); + printf("(spoon2D) centerX=%g centerY=%g\n", + graphStateArray[i].centerX,graphStateArray[i].centerY); + fscanf(viewFile,"%d %d %d %d %d %d %d\n", + &(graphStateArray[i].pointsOn), + &(graphStateArray[i].connectOn), + &(graphStateArray[i].splineOn), + &(graphStateArray[i].axesOn), + &(graphStateArray[i].axesColor), + &(graphStateArray[i].unitsOn), + &(graphStateArray[i].unitsColor)); + printf("(spoon2D) pointsOn=%d connectOn=%d splineOn=%d axesOn=%d axesColor=%d unitsOn=%d unitsColor=%d\n", + graphStateArray[i].pointsOn,graphStateArray[i].connectOn, + graphStateArray[i].splineOn,graphStateArray[i].axesOn, + graphStateArray[i].axesColor,graphStateArray[i].unitsOn, + graphStateArray[i].unitsColor); + fscanf(viewFile,"%d %d\n", + &(graphStateArray[i].showing), + &(graphStateArray[i].selected)); + printf("(spoon2D) showing=%d selected=%d\n", + graphStateArray[i].showing,graphStateArray[i].selected); + } + fclose(viewFile); + for (i=0; i<maxGraphs; i++) { + if (graphArray[i].key) { + /** OPEN FILE FOR GRAPHS **/ + sprintf(graphFilename,"%s%s%d",pathname,"/graph",i); + if ((graphFile = fopen(graphFilename,"r")) == NULL) { + fprintf(stderr," Error: Cannot find the file %s\n",graphFilename); + perror("fopen"); + return; + } else { + printf("(spoon2d) \n\nGRAPH%i\n",i); + fscanf(graphFile,"%g %g %g %g\n", + &(graphArray[i].xmin), + &(graphArray[i].ymin), + &(graphArray[i].xmax), + &(graphArray[i].ymax)); + printf("(spoon2d) xmin=%g ymin=%g xmax=%g ymax=%g\n", + graphArray[i].xmin,graphArray[i].ymin, + graphArray[i].xmax,graphArray[i].ymax); + fscanf(graphFile,"%g %g\n", + &(graphArray[i].xNorm), + &(graphArray[i].yNorm)); + printf("(spoon2d) xNorm=%g yNorm=%g\n", + graphArray[i].xNorm,graphArray[i].yNorm); + fscanf(graphFile,"%g %g\n", + &(graphArray[i].originX), + &(graphArray[i].originY)); + printf("(spoon2d) originX=%g originY=%g\n", + graphArray[i].originX,graphArray[i].originY); + fscanf(graphFile,"%g %g\n", + &(graphArray[i].spadUnitX), + &(graphArray[i].spadUnitY)); + printf("(spoon2d) spadUnitX=%g spadUnitY=%g\n", + graphArray[i].spadUnitX,graphArray[i].spadUnitY); + fscanf(graphFile,"%g %g\n", + &(graphArray[i].unitX), + &(graphArray[i].unitY)); + printf("(spoon2d) unitX=%g unitY=%g\n", + graphArray[i].unitX,graphArray[i].unitY); + fscanf(graphFile,"%d\n", + &(graphArray[i].numberOfLists)); + printf("(spoon2d) numberOfLists=%d\n", + graphArray[i].numberOfLists); + if (!(aList = + (pointListStruct *)malloc(graphArray[i].numberOfLists * + sizeof(pointListStruct)))) { + fprintf(stderr,"viewAlone: Fatal Error>> Out of memory trying to receive a graph.\n"); + exit(-1); + } + graphArray[i].listOfListsOfPoints = aList; + for (j=0; + j<graphArray[i].numberOfLists; + j++, aList++) { + printf("(spoon2d) list number %d\n",j); + fscanf(graphFile,"%d\n",&(aList->numberOfPoints)); + printf("(spoon2d) number of points %d\n", + aList->numberOfPoints); + fscanf(graphFile,"%d %d %d\n", + &(aList->pointColor), + &(aList->lineColor), + &(aList->pointSize)); + printf("(spoon2d) pointColor=%d lineColor=%d pointSize=%d\n", + aList->pointColor,aList->lineColor,aList->pointSize); + if (!(aPoint = (pointStruct *)malloc(aList->numberOfPoints * + sizeof(pointStruct)))) { + fprintf(stderr,"viewAlone: Fatal Error>> Out of memory trying to receive a graph.\n"); + exit(-1); + } + aList->listOfPoints = aPoint; /** point to current point list **/ + for (k=0; + k<aList->numberOfPoints; + k++,aPoint++) + { fscanf(graphFile,"%g %g %g %g\n", + &(aPoint->x), + &(aPoint->y), + &(aPoint->hue), + &(aPoint->shade)); + printf("(spoon2d)k=%d x=%g y=%g hue=%g shade=%g\n", + k,aPoint->x,aPoint->y,aPoint->hue,aPoint->shade); + } + } /* for j, aList */ + fclose(graphFile); + } /* else, opened up a file */ + } /* if graph.key */ + } /* for i */ +} /* makeView2DFromFileData */ +@ +\eject +\begin{thebibliography}{99} +\bibitem{1} nothing +\end{thebibliography} +\end{document} |