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/viewman/cleanup.c.pamphlet | |
download | open-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz |
Initial population.
Diffstat (limited to 'src/graph/viewman/cleanup.c.pamphlet')
-rw-r--r-- | src/graph/viewman/cleanup.c.pamphlet | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/src/graph/viewman/cleanup.c.pamphlet b/src/graph/viewman/cleanup.c.pamphlet new file mode 100644 index 00000000..7400e79a --- /dev/null +++ b/src/graph/viewman/cleanup.c.pamphlet @@ -0,0 +1,255 @@ +\documentclass{article} +\usepackage{axiom} +\begin{document} +\title{\$SPAD/src/graph/viewman cleanup.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 _CLEANUP_C +#include "axiom-c-macros.h" +#include "useproto.h" + +#include <stdlib.h> +#include <unistd.h> +#include <stdio.h> +#if !defined(BSDplatform) +#include <malloc.h> +#endif +#include <assert.h> +#include <signal.h> +#include <sys/wait.h> + +#include "viewman.h" +#include "actions.h" + +#include "util.H1" +#include "cleanup.H1" +#include "makeGraph.H1" +#include "readView.H1" + +void +#ifdef _NO_PROTO +brokenPipe(sig) +int sig; +#else +brokenPipe(int sig) +#endif +{ + fprintf(stderr, + "The viewport manager tried to write to a non-existing pipe.\n"); +} + + +void +#ifdef _NO_PROTO +endChild(sig) +int sig; +#else +endChild(int sig) +#endif +{ + + checkClosedChild = yes; +} + + +/**************************** + * void rmViewMgr(slotPtr) * + * * + * given a pointer to a * + * viewManager, this * + * procedure removes it * + * from the viewport list * +*****************************/ + +void +#ifdef _NO_PROTO +rmViewMgr(slotPtr) + viewManager *slotPtr; +#else +rmViewMgr(viewManager *slotPtr) +#endif +{ + + int i,throwAway,code; + viewManager *somePort, *someOtherPort; + graphStruct *someGraph,*someOtherGraph; /* used in discarding graphs */ + viewsWithThisGraph *someView,*someOtherView; + + for (somePort=someOtherPort=viewports; + (somePort != 0) && (somePort != slotPtr); + somePort=(someOtherPort=somePort)->nextViewport) + {} + assert ((somePort == 0) || + (somePort == viewports) || + (somePort == someOtherPort->nextViewport)); + + if (somePort) { + if (somePort == viewports) viewports=viewports->nextViewport; + else someOtherPort->nextViewport = somePort->nextViewport; + } + /*** if view2D, then clean up after the graphs as well ***/ + if (slotPtr->viewType == view2DType) { + for (i=0; i<maxGraphs; i++) { + code=readViewport(slotPtr,&throwAway,intSize); /* get the graph to discard */ + if (code == -1) break; /* read failure - give up */ + if (throwAway) { /* zero means no graph */ + + for (someGraph = someOtherGraph = graphList; + (someGraph != 0) && (someGraph->key != throwAway); + someGraph=(someOtherGraph=someGraph)->nextGraph) + { + } + /* someGraph is 0 if not found */ + /* someGraph == graphList if found at first */ + /* otherwise someGraph == someOtherGraph->nextGraph */ + assert( (someGraph == 0) || + (someGraph == graphList) || + (someGraph == someOtherGraph->nextGraph)); + + if (someGraph) { /* if found (should always be true) */ + + for(someView=someOtherView=someGraph->views; + (someView !=0 ) && (someView->viewGr != slotPtr); + someView=(someOtherView=someView)->nextViewthing) + { + } + /* similarly */ + assert( (someView == 0) || + (someView == someGraph->views) || + (someView == someOtherView->nextViewthing)); + + if (someView) { /* if found (should always be true) */ + if (someView == someGraph->views) + /* first */ + someGraph->views = someGraph->views->nextViewthing; + else + someOtherView->nextViewthing = someView->nextViewthing; + free(someView); /* remove this viewport + from list */ + } + /* if now nothing is pointing to this graph , remove the graph from the list*/ + if (someGraph->views == 0) { + if (someGraph == graphList) + graphList = graphList->nextGraph; + else + someOtherGraph->nextGraph = someGraph->nextGraph; + discardGraph(someGraph); /* free the graph */ + } + } /* if someGraph */ + } /* if throwAway */ + } /* for i */ + } /* if type is view2D */ + close(slotPtr->viewIn); + close(slotPtr->viewOut); + free(slotPtr); +} /* rmViewMgr() */ + + +/*********************************** + * int closeChildViewport(slotPtr) * + * * + * given a pointer to a viewport * + * structure (viewManager) this * + * procedure first waits for the * + * actual process to die and then * + * removes it from the list of * + * viewports via rmViewMgr(). * + ***********************************/ + +void +#ifdef _NO_PROTO +closeChildViewport(slotPtr) + viewManager *slotPtr; +#else +closeChildViewport(viewManager *slotPtr) +#endif +{ + + int status; + rmViewMgr(slotPtr); + wait(&status); + +} /* closeChildViewport */ + + +/********************* + * int goodbye() * + * * + * kill all children * + * (how mean) and * + * then kill self. * + *********************/ + +void +#ifdef _NO_PROTO +goodbye(sig) +int sig; +#else +goodbye(int sig) +#endif +{ + + viewManager *v; + + v = viewports; + while (v) { + kill(v->PID,SIGTERM); + while (wait(NULL) == -1); + v = v->nextViewport; + } + exit(0); + +} + + + + +@ +\eject +\begin{thebibliography}{99} +\bibitem{1} nothing +\end{thebibliography} +\end{document} |