aboutsummaryrefslogtreecommitdiff
path: root/src/graph/Gdraws/Gfun.c.pamphlet
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2008-03-09 03:47:21 +0000
committerdos-reis <gdr@axiomatics.org>2008-03-09 03:47:21 +0000
commit6e07ce8f0c6c77b61cfa2f8be54781160018ff91 (patch)
tree91e5069719c924bd58242e932bd585d3e676112b /src/graph/Gdraws/Gfun.c.pamphlet
parent3f7d906f8cd6edd2597a49f629bd31914de8ca08 (diff)
downloadopen-axiom-6e07ce8f0c6c77b61cfa2f8be54781160018ff91.tar.gz
* graph/: Depamphletize.
* include/addfile.h: Move from hyper. * include/addfile.H1: Move external declarations into addfile.h. Remove.
Diffstat (limited to 'src/graph/Gdraws/Gfun.c.pamphlet')
-rw-r--r--src/graph/Gdraws/Gfun.c.pamphlet1349
1 files changed, 0 insertions, 1349 deletions
diff --git a/src/graph/Gdraws/Gfun.c.pamphlet b/src/graph/Gdraws/Gfun.c.pamphlet
deleted file mode 100644
index c7ef9d6e..00000000
--- a/src/graph/Gdraws/Gfun.c.pamphlet
+++ /dev/null
@@ -1,1349 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/graph Gfun.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 _GFUN_C
-
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "Gdraws0.h"
-#include "G.h"
-#include "hash.h"
-
-#include "hash.H1"
-#include "Gfun.H1"
-
-
-/*
- * Given 2 file pointers, this function copies file ifp to file ofp
- */
-
-static void
-filecopy(FILE * ifp, FILE * ofp)
-{
-
- int c;
-
- while ((c = getc(ifp)) != EOF)
- putc(c, ofp);
-}
-
-
-/*
- * PSCreateFile generates the output file by using the order of defined
- * variables; they are used to create the OUTPUT file. Essentially,
- * PSCreateFile() loop through the index of 0 to psDrawNo and checks if the
- * file/procedure is used. If so, the file is included into the output
- * file.
- */
-
-int
-PSCreateFile(
- int bWidth, /* border width of picture frame */
- Window vw, Window tw, /* viewWindow, and titleWindow */
- char *title) /* title of picture to be drawn in title bar */
-{
- FILE *ifp, *ofp, *fp; /* input, output and temp file pointer */
- int i; /* index */
-
- /* last things to add to the script file */
-
- fp = fopen(psData[scriptps].filename, "a");
- fprintf(fp, "\n grestore\t%% restore graphics state\n\n");
- fclose(fp);
-
-#if 0
- /* Make frame drawing optional. */
-
- Gdraws_drawFrame(bWidth, vw, tw, title);
-#endif
-
- /* put procedures and script together into OUTPUT.ps */
-
- if ((ofp = fopen(psData[output].filename, "w")) == NULL) {
- fprintf(stderr, "Cannot open %s to write.\n", psData[output].filename);
- return (psError);
- }
- else {
- i = 1;
- while (i < psDrawNo) { /* loops through each file/procedure */
- if (psData[i].flag) { /* if set, procedure/file is used */
- if ((ifp = fopen(psData[i].filename, "r")) == NULL) {
- if (i == GCdictps) { /* GC dictionaries */
- fprintf(stderr, "Warning: missing GCdictionary.\n");
- }
- else {
- fprintf(stderr, "Cannot open %s to read.\n",
- psData[i].filename);
- fclose(ofp);
- return (psError);
- }
- }
- else {
- filecopy(ifp, ofp);
- fclose(ifp);
- }
- }
- i++;
- }
- }
-
- /* remove script file in tmp */
-
- unlink(psData[scriptps].filename);
-
-#if 0
- /* remove GCdict file in tmp */
- unlink(psData[GCdictps].filename);
-#endif
-
- return (fclose(ofp));
-}
-
-
-
-/*
- * This function draws the frame of the picture, which corresponds to the
- * picture frame on the X display. In addition, it draws the title window as
- * well as the title of the picture.
- */
-
-int
-Gdraws_drawFrame(
- int borderW, /* border width */
- Window viewWindow, Window titleWindow,
- char *title) /* title of picture */
-{
- FILE *fp;
- XWindowAttributes vwInfo, twInfo;
-
- /* choose 2 and "frameDict" for frame dictionary: can be anything else */
-
- PSCreateContext((GC)2, "frameDict", borderW, psButtCap, psMiterJoin,
- psWhite, psBlack);
-
- fp = fopen(psData[scriptps].filename, "a");
-
- XGetWindowAttributes(dsply, viewWindow, &vwInfo);
-
- /* draw title window */
-
- XGetWindowAttributes(dsply, titleWindow, &twInfo);
- fprintf(fp, "\t%s\t%d\t%d\t%d\t%d\ttitle\n", "frameDict",
- twInfo.height - vwInfo.height, twInfo.width, 0, vwInfo.height);
-
- /* draw viewport window */
-
- fprintf(fp, "\t%s\tdrawFrame\n", "frameDict"); /* using Gdraws_setDimension() */
-
- /* draw title text */
-
- psData[drawIstrps].flag = yes;
- fprintf(fp, "\t%s\tloadFont\n\t%d\t(%s) stringwidth pop sub 2 div\n",
- "frameDict", twInfo.width, title);
- fprintf(fp, "\t%d\t(%s)\t(%s)\tpsDrawIStr\n", 15, title, "title");
-
- return (fclose(fp));
-}
-
-
-/* setDimension sets the dimension of the picture */
-
-int
-Gdraws_setDimension(
- Window viewWindow,
- Window titleWindow)
-{
- FILE *fp;
- XWindowAttributes vwInfo, twInfo;
- float pageWidth, pageHeight, width;
-
- fp = fopen(psData[scriptps].filename, "w");
-
- XGetWindowAttributes(dsply, titleWindow, &twInfo);
- XGetWindowAttributes(dsply, viewWindow, &vwInfo);
- pageWidth = 575.0;
- pageHeight = 750.0;
-
-#if 0
- pageWidth = (float) (DisplayWidth(dsply, scrn) / DisplayWidthMM(dsply, scrn));
- pageWidth *= 160.0;
- pageHeight = (float) (DisplayHeight(dsply, scrn) / DisplayHeightMM(dsply, scrn));
- pageHeight *= 210.0;
- fprintf(stderr, "%f, %f\n", pageWidth, pageHeight);
-#endif
-
- fprintf(fp, "\n gsave\t%% save graphics state for clipping path\n\n");
- if ((vwInfo.height > pageWidth) || (vwInfo.height > pageHeight)) {
- width = (float) vwInfo.width;
- if (vwInfo.height > pageWidth) {
- width = pageWidth / width;
- fprintf(fp, "\t%f\t%f", width, width);
- }
- else {
- if (vwInfo.height > pageHeight)
- fprintf(fp, "\t%f\t%f", width, pageHeight / width);
- }
- }
- else {
- fprintf(fp, "\t%f\t%f", 1.0, 1.0);
- }
- fprintf(fp, "\tscale\n\n");
-
- fprintf(fp, "\t%d\t%d\t%d\tsetDim\n", twInfo.height - vwInfo.height,
- vwInfo.height, vwInfo.width);
-
- /* Write a Bounding Box for psfig etc. */
-
- fprintf(fp, "%%%%BoundingBox: 0 0 %d %d\n", vwInfo.height, vwInfo.width);
-
- fprintf(fp, "\tmaxX maxY\t0 0\trectangle\tclip\t%% set clip path\n\n");
- return (fclose(fp));
-}
-/*
- * GDrawImageString draws an image text string
- */
-
-int
-GDrawImageString(
- GC gc, /* graphics context */
- Window wid, /* window id */
- int x, int y,
- char *string,
- int length, int dFlag)
-{
- int s;
-
- switch (dFlag) {
- case Xoption:
- s = XDrawImageString(dsply, wid, gc, x, y, string, length);
- break;
- case PSoption:
- {
- FILE *fp;
-
- if ((fp = fopen(psData[scriptps].filename, "a")) == NULL) {
- fprintf(stderr, "GDrawImageString cannot open %s\n",
- psData[scriptps].filename);
- return (psError);
- }
-
- psData[drawIstrps].flag = yes; /* set procedure flag */
- fprintf(fp, "\t%s\t%d\t%d\t(%s)\t(%s)\tpsDrawIStr\n",
- PSfindGC(gc), x, y, string, "window");
- s = fclose(fp);
- }
- break;
- default:
- fprintf(stderr, "GdrawImagestring request (%d) not implemented yet.\n", dFlag);
- return (psError);
- }
- return (s);
-}
-
-/* Draws an arc; see XDrawArc */
-
-int
-GDrawArc(
- GC gc, /* graphics context */
- Window wid, /* window id */
- int x, int y,
- unsigned int wdth, unsigned int hght,
- int ang1, int ang2, int dFlag)
-{
- int s = 0;
-
- switch (dFlag) {
- case Xoption:
- XDrawArc(dsply, wid, gc, x, y, wdth, hght, ang1, ang2);
- break;
- case PSoption:
- {
- FILE *fp;
-
- if ((fp = fopen(psData[scriptps].filename, "a")) == NULL) {
- fprintf(stderr, "GDrawArc cannot open %s\n",
- psData[scriptps].filename);
- return (psError);
- }
-
- psData[drawarcps].flag = yes;
- fprintf(fp, "\t%s\t%d\t%d\t%d\t%d\t%d\t%d\tpsDrawArc\n",
- PSfindGC(gc), x, y, hght, wdth, ang1 / 64, ang2 / 64);
- s = fclose(fp);
- }
- break;
- default:
- fprintf(stderr, "Gdrawarc request (%d) not implemented yet.\n",
- dFlag);
- return (psError);
- }
- return (s);
-}
-/*
- * GDrawLine draws a line, see XDrawLine
- */
-
-int
-GDrawLine(
- GC gc, /* graphics context */
- Window wid, /* window id */
- int x0, int y0, int x1, int y1, int dFlag)
-{
- int s = 0;
-
- switch (dFlag) {
- case Xoption:
- XDrawLine(dsply, wid, gc, x0, y0, x1, y1);
- break;
- case PSoption:
- {
- FILE *fp;
-
- if ((fp = fopen(psData[scriptps].filename, "a")) == NULL) {
- fprintf(stderr, "GDrawLine cannot open %s\n",
- psData[scriptps].filename);
- return (psError);
- }
-
- psData[drawlineps].flag = yes; /* sets procedure flag */
- fprintf(fp, "\t%s\t%d\t%d\t%d\t%d\tpsDrawLine\n",
- PSfindGC(gc), x1, y1, x0, y0);
- s = fclose(fp);
- }
- break;
- default:
- fprintf(stderr, "Gdrawline request (%d) not implemented yet.\n",
- dFlag);
- return (psError);
- }
- return (s);
-}
-
-
-
-
-
-/*
- * GDrawLines draws lines; see XDrawLines
- */
-
-int
-GDrawLines(
- GC gc, /* graphics context */
- Window wid, /* window id */
- XPoint * points, /* points */
- int numberOfPoints, int mode, int dFlag)
- /* number of points, mode and display flag */
-{
- int s = 0;
-
- switch (dFlag) {
- case Xoption:
- XDrawLines(dsply, wid, gc, points, numberOfPoints, mode);
- break;
- case PSoption:
- {
- FILE *fp; /* not dealing with modes yet */
- int i = 0;
-
- if ((fp = fopen(psData[scriptps].filename, "a")) == NULL) {
- fprintf(stderr, "GDrawLines cannot open %s\n",
- psData[scriptps].filename);
- return (psError);
- }
-
- psData[drawlinesps].flag = yes; /* set procedure flag */
- fprintf(fp, "\t%s\n", PSfindGC(gc));
- i = numberOfPoints - 1;
- while (i > 0)
- { fprintf(fp, "\t%d\t%d\n", points[i].x, points[i].y);
- i = i-1;
- }
-
- fprintf(fp, "\t%d\t%d\t%d\tpsDrawLines\n",
- numberOfPoints, points[i].x, points[i].y);
- s = fclose(fp);
- }
- break;
- default:
- fprintf(stderr, "Gdrawlines request (%d) not implemented yet\n",
- dFlag);
- return (psError);
- }
- return (s);
-}
-
-/*
- * GDrawPoint draws a point, see XDrawPoint
- */
-
-int
-GDrawPoint(
- Window wid, /* window id */
- GC gc, /* graphics context */
- int x0, int y0, int dFlag)
-{
- int s = 0;
-
- switch (dFlag) {
- case Xoption:
- XDrawPoint(dsply, wid, gc, x0, y0);
- break;
- case PSoption:
- {
- FILE *fp;
-
- if ((fp = fopen(psData[scriptps].filename, "a")) == NULL) {
- fprintf(stderr, "GDrawPoint cannot open %s\n",
- psData[scriptps].filename);
- return (psError);
- }
-
- psData[drawpointps].flag = yes; /* sets procedure flag */
- fprintf(fp, "\t%s\t%d\t%d\t%d\t%d\tpsDrawPoint\n",
- PSfindGC(gc), x0, y0, x0 + 1, y0 + 1);
- s = fclose(fp);
- }
- break;
- default:
- fprintf(stderr, "Gdrawpoint request (%d) not implemented yet\n",
- dFlag);
- return (psError);
- }
- return (s);
-}
-
-/*
- * GDrawRectangle draws a rectangle; see XDrawRectangle
- */
-
-int
-GDrawRectangle(
- GC gc,
- Window windowId,
- short int x,short int y,short int width,short int height,
- int dFlag)
-{
- int s = 0;
-
- switch (dFlag) {
- case Xoption:
- XDrawRectangle(dsply, windowId, gc, x, y, width, height);
- break;
- case PSoption:
- {
- FILE *fp;
-
- if ((fp = fopen(psData[scriptps].filename, "a")) == NULL) {
- fprintf(stderr, "GDrawRect cannot open %s\n",
- psData[scriptps].filename);
- return (psError);
- }
-
- psData[drawrectps].flag = yes;
- fprintf(fp, "\t%s\t%d\t%d\t%d\t%d\tpsDrawRect\n",
- PSfindGC(gc), width, height, x, y);
- s = fclose(fp);
- }
- break;
- default:
- fprintf(stderr, "Gdrawrect request (%d) not implemented yet\n",
- dFlag);
- return (psError);
- }
- return (s);
-}
-
-/*
- * GDraw3DButtonOut draws a rectangle with 3D shading on rhs and bottom
- */
-
-int
-GDraw3DButtonOut(
- GC gc,
- Window windowId,
- short int x,short int y,short int width,short int height,
- int dFlag)
-{
- /* draw regular rectangle */
-
- int s = GDrawRectangle(gc, windowId, x, y, width - 1, height - 1, dFlag);
-
- /* add extra line down rhs */
-
- GDrawLine(gc, windowId,
- x + width, y + 1, x + width, y + height,
- dFlag);
-
- /* add extra line across bottom */
-
- GDrawLine(gc, windowId,
- x + 1, y + height, x + width, y + height,
- dFlag);
-
- return (s);
-}
-
-/*
- * GDraw3DButtonIn draws a rectangle with 3D shading on lhs and top
- */
-
-int
-GDraw3DButtonIn(
- GC gc,
- Window windowId,
- short int x,short int y,short int width,short int height,
- int dFlag)
-{
- /* draw regular rectangle */
-
- int s = GDrawRectangle(gc, windowId, x + 1, y + 1, width - 1, height - 1, dFlag);
-
- /* add extra line down lhs */
-
- GDrawLine(gc, windowId,
- x, y, x, y + height - 1,
- dFlag);
-
- /* add extra line across top */
-
- GDrawLine(gc, windowId,
- x, y, x + width - 1, y,
- dFlag);
-
- return (s);
-}
-
-/*
- * GDrawPushButton draws a push button whose appearance depends on "isOn."
- */
-
-int
-GDrawPushButton(
- Display * display,
- GC gc1, GC gc2, GC gc3,
- Window windowId,
- short int x,short int y,short int width,short int height,
- int isOn, char *text,
- unsigned long buttonColor, unsigned long color,
- int dFlag)
-{
- int len = strlen(text);
-
- if (dFlag == Xoption)
- XClearArea(display, windowId, x, y, width + 1, height + 1, False);
-
- GSetForeground(gc1, (float) buttonColor, dFlag);
-
- if (isOn)
- GDraw3DButtonIn(gc1, windowId, x, y, width, height, dFlag);
- else
- GDraw3DButtonOut(gc1, windowId, x, y, width, height, dFlag);
-
- GSetForeground(gc2, (float) color, dFlag);
-
- return GDrawString(gc2, windowId,
- x + (isOn ? 2 : 0) + centerX(gc3, text, len, width),
- y + (isOn ? 2 : 0) + centerY(gc3, height),
- text, len, dFlag);
-}
-
-
-
-/*
- * Draws a string; see XDrawString
- */
-
-int
-GDrawString(
- GC gc, /* graphics context */
- Window wid, /* window id */
- int x, int y,
- char *string, /* string to be drawn */
- int length, int dFlag)
-{
- int s;
-
- switch (dFlag) {
- case Xoption:
- s = XDrawString(dsply, wid, gc, x, y, string, length);
- break;
- case PSoption:
- {
- FILE *fp;
-
- if ((fp = fopen(psData[scriptps].filename, "a")) == NULL) {
- fprintf(stderr, "GDrawString cannot open %s\n",
- psData[scriptps].filename);
- return (psError);
- }
-
- psData[drawstrps].flag = yes; /* sets procedure flag */
- fprintf(fp, "\t%s\t(%s)\t%d\t%d\tpsDrawStr\n",
- PSfindGC(gc), string, x, y);
-
- s = fclose(fp);
- }
- break;
- default:
- fprintf(stderr, "Gdrawstring request (%d) not implemented yet\n",
- dFlag);
- return (psError);
- }
- return (s);
-}
-
-/*
- * Draws and fills an arc with foreground color; see XFillArc
- */
-
-int
-GFillArc(
- GC gc, /* graphics context */
- Window wid, /* window id */
- int x, int y,
- unsigned int wdth, unsigned int hght,
- int ang1, int ang2, int dFlag)
-{
- int s = 0;
-
- switch (dFlag) {
- case Xoption: /* angle: times 64 already */
- XFillArc(dsply, wid, gc, x, y, wdth, hght, ang1, ang2);
- break;
- case PSoption:
- {
- FILE *fp;
-
- if ((fp = fopen(psData[scriptps].filename, "a")) == NULL) {
- fprintf(stderr, "GFillArc cannot open %s\n",
- psData[scriptps].filename);
- return (psError);
- }
-
- psData[fillarcps].flag = yes; /* sets procedure flag */
- fprintf(fp, "\t%s\t%d %d\t%d %d\t%d %d\t%d %d\tpsFillArc\n",
- PSfindGC(gc), x, y, hght, wdth, ang1 / 64, ang2 / 64,
- x + wdth / 2, y + hght / 2);
- s = fclose(fp);
- }
- break;
- default:
- fprintf(stderr, "GFillArc request (%d) not implemented yet\n",
- dFlag);
- return (psError);
- }
- return (s);
-}
-
-/*
- * Initializes the path and files to be used.
- */
-
-int
-PSGlobalInit(void)
-{ /* This needs to be called only once each
- * session. */
- char *tmp;
-
- /* path-independent global file name */
- psData[GCdictps].flag = yes;
- tmp = tempnam(NULL, "axPS");
- sprintf(psData[GCdictps].filename, "%s", tmp);
- free(tmp);
- psData[setupps].flag = yes;
- psData[scriptps].flag = yes;/* new script file name */
- psData[endps].flag = yes;
-
- /* path specific file names */
-
- if ((envAXIOM = getenv("DEVE")) != NULL) { /* get env var AXIOM */
-
- psData[headerps].flag = yes;
- sprintf(psData[headerps].filename, "%s%s", envAXIOM, "/Gdraws/PS/header.ps");
- sprintf(psData[drawps].filename, "%s%s", envAXIOM, "/Gdraws/PS/draw.ps");
- sprintf(psData[drawarcps].filename, "%s%s", envAXIOM,
- "/Gdraws/PS/drawarc.ps");
- sprintf(psData[drawfilledps].filename, "%s%s", envAXIOM,
- "/Gdraws/PS/drwfilled.ps");
- sprintf(psData[drawcolorps].filename, "%s%s", envAXIOM,
- "/Gdraws/PS/drawcolor.ps");
- sprintf(psData[fillpolyps].filename, "%s%s", envAXIOM,
- "/Gdraws/PS/fillpoly.ps");
- sprintf(psData[colorpolyps].filename, "%s%s", envAXIOM,
- "/Gdraws/PS/colorpoly.ps");
- sprintf(psData[fillwolps].filename, "%s%s", envAXIOM,
- "/Gdraws/PS/fillwol.ps");
- sprintf(psData[colorwolps].filename, "%s%s", envAXIOM,
- "/Gdraws/PS/colorwol.ps");
- sprintf(psData[drawpointps].filename, "%s%s", envAXIOM,
- "/Gdraws/PS/drawpoint.ps");
- sprintf(psData[drawlineps].filename, "%s%s", envAXIOM,
- "/Gdraws/PS/drawline.ps");
- sprintf(psData[drawlinesps].filename, "%s%s", envAXIOM,
- "/Gdraws/PS/drawlines.ps");
- sprintf(psData[drawrectps].filename, "%s%s", envAXIOM,
- "/Gdraws/PS/drawrect.ps");
- sprintf(psData[drawstrps].filename, "%s%s", envAXIOM,
- "/Gdraws/PS/drawstr.ps");
- sprintf(psData[drawIstrps].filename, "%s%s", envAXIOM,
- "/Gdraws/PS/drawIstr.ps");
- sprintf(psData[fillarcps].filename, "%s%s", envAXIOM,
- "/Gdraws/PS/fillarc.ps");
- sprintf(psData[setupps].filename, "%s%s", envAXIOM, "/Gdraws/PS/setup.ps");
- sprintf(psData[endps].filename, "%s%s", envAXIOM, "/Gdraws/PS/end.ps");
- }
- else if ((envAXIOM = getenv("AXIOM")) != NULL) {
- psData[headerps].flag = yes;
- sprintf(psData[headerps].filename, "%s%s", envAXIOM,
- "/lib/graph/header.ps");
- sprintf(psData[drawps].filename, "%s%s", envAXIOM,
- "/lib/graph/draw.ps");
- sprintf(psData[drawarcps].filename, "%s%s", envAXIOM,
- "/lib/graph/drawarc.ps");
- sprintf(psData[drawfilledps].filename, "%s%s", envAXIOM,
- "/lib/graph/drwfilled.ps");
- sprintf(psData[drawcolorps].filename, "%s%s", envAXIOM,
- "/lib/graph/drawcolor.ps");
- sprintf(psData[fillpolyps].filename, "%s%s", envAXIOM,
- "/lib/graph/fillpoly.ps");
- sprintf(psData[colorpolyps].filename, "%s%s", envAXIOM,
- "/lib/graph/colorpoly.ps");
- sprintf(psData[fillwolps].filename, "%s%s", envAXIOM,
- "/lib/graph/fillwol.ps");
- sprintf(psData[colorwolps].filename, "%s%s", envAXIOM,
- "/lib/graph/colorwol.ps");
- sprintf(psData[drawpointps].filename, "%s%s", envAXIOM,
- "/lib/graph/drawpoint.ps");
- sprintf(psData[drawlineps].filename, "%s%s", envAXIOM,
- "/lib/graph/drawline.ps");
- sprintf(psData[drawlinesps].filename, "%s%s", envAXIOM,
- "/lib/graph/drawlines.ps");
- sprintf(psData[drawrectps].filename, "%s%s", envAXIOM,
- "/lib/graph/drawrect.ps");
- sprintf(psData[drawstrps].filename, "%s%s", envAXIOM,
- "/lib/graph/drawstr.ps");
- sprintf(psData[drawIstrps].filename, "%s%s", envAXIOM,
- "/lib/graph/drawIstr.ps");
- sprintf(psData[fillarcps].filename, "%s%s", envAXIOM,
- "/lib/graph/fillarc.ps");
- sprintf(psData[setupps].filename, "%s%s", envAXIOM,
- "/lib/graph/setup.ps");
- sprintf(psData[endps].filename, "%s%s", envAXIOM,
- "/lib/graph/end.ps");
- }
- else {
- fprintf(stderr, " need environment variable AXIOM or DEVE; process aborted\n");
- return (psError);
- }
-
- return (psInit = yes);
-}
-
-
-/*
- * This needs to be called for every postscript file generated. It
- * initializes the procedure flags.
- */
-
-int
-PSInit(Window vw, Window tw)
-{
- if (!psInit) {
- /* must have PSGlobalInit() called before this */
- fprintf(stderr, "Error: need initialization for ps data files: call PSGlobalInit().\n");
- return (psError);
- }
-
- sprintf(psData[output].filename, "%s", PSfilename); /* output file name */
-
- psData[drawps].flag = no; /* ps procedures flags */
- psData[drawarcps].flag = no;
- psData[drawfilledps].flag = no;
- psData[drawcolorps].flag = no;
- psData[fillpolyps].flag = no;
- psData[fillwolps].flag = no;
- psData[colorpolyps].flag = no;
- psData[colorwolps].flag = no;
- psData[drawpointps].flag = no;
- psData[drawlineps].flag = no;
- psData[drawlinesps].flag = no;
- psData[drawrectps].flag = no;
- psData[drawstrps].flag = no;
- psData[drawIstrps].flag = no;
- psData[fillarcps].flag = no;
-
- sprintf(psData[scriptps].filename, "%s", tmpnam(NULL)); /* script file */
- return (Gdraws_setDimension(vw, tw));
-}
-
-/*
- * This procedure sets the line attributes; notice that lineWidth is not set
- * for PS, this is because lineWidth of 0, the thinest line on the ps device,
- * is device-dependent, thus, we'll leave it and use default. Also lineStyle
- * is solid in ps by default, thus we don't need to set it. We'll leave out
- * line style here since we really never used anything other than line solid
- * which is the default line style in postscript.
- */
-
-int
-PSCreateContext(
- GC gc, /* graphics context */
- char *C_gc, /* GC name to be used as postscript variable */
- int lineWidth, int capStyle, int joinStyle,
- float bg, float fg)
-{
- FILE *fp;
- GCptr newGC, curGC;
-
- /* get memory for new GC cell */
-
- if (!(newGC = (GCptr) malloc(sizeof(GCstruct)))) {
- fprintf(stderr, "Ran out of memory(malloc) trying to create a ps GC.\n");
- exit(-1);
- }
-
- /* attach newGC to chain */
-
- if (GChead == NULL)
- GChead = newGC;
- else { /* attach newGC to end of linked list */
- curGC = GChead;
- while (curGC->next != NULL)
- curGC = curGC->next;
- curGC->next = newGC;
- }
-
- /* fill newGC with information */
-
- newGC->GCint = gc;
- sprintf(newGC->GCchar, "%s", C_gc);
- newGC->next = NULL;
-
- if ((fp = fopen(psData[GCdictps].filename, "a")) == NULL) {
- fprintf(stderr, "PSCreateContext cannot open %s\n",
- psData[GCdictps].filename);
- return (psError);
- }
-
- fprintf(fp, "\t%d\t%d\t%d\n\t%f\t%f\t/%s\tmakeDict\n", joinStyle,
- capStyle, lineWidth, bg, fg, C_gc);
-
- return (fclose(fp));
-}
-
-/*
- * Looks into GC linked list with gc (unsigned long) as index to find the
- * character name.
- */
-
-char *
-PSfindGC(GC gc)
-{
- GCptr curGC;
-
- curGC = GChead;
- while ((curGC != NULL) && (curGC->GCint != gc))
- curGC = curGC->next;
-
- if (curGC == NULL) {
- fprintf(stderr, "PSfindGC cannot find gc: %p.\n",gc);
- return (NULL);
- }
- else
- return (curGC->GCchar);
-}
-
-/*
- * Sets foreground color; see XSetForeground
- */
-
-int
-GSetForeground(
- GC gc, /* graphics context */
- float color, /* foreground color to be set */
- int dFlag) /* display flag: PS, X,... */
-{
- int s = 0;
-
- switch (dFlag) {
- case Xoption:
- XSetForeground(dsply, gc, (unsigned long) color);
- break;
- case PSoption:
- {
- FILE *fp;
-
- if ((fp = fopen(psData[scriptps].filename, "a")) == NULL) {
- fprintf(stderr, "GSetForeground cannot open %s\n",
- psData[scriptps].filename);
- return (0);
- }
- fprintf(fp, "\t%s\t%f\tsetForeground\n", PSfindGC(gc), color);
- s = fclose(fp);
- break;
- }
- default:
- fprintf(stderr, "GSetForeground request (%d) not implemented yet\n", dFlag);
- return (0);
- }
- return (s);
-}
-
-/*
- * Sets background color; see XSetBackground
- */
-
-int
-GSetBackground(
- GC gc, /* graphics context */
- float color, /* background color to be set */
- int dFlag) /* display flag: PS, X,... */
-{
- int s = 0;
-
- switch (dFlag) {
- case Xoption:
- XSetBackground(dsply, gc, (unsigned long) color);
- break;
- case PSoption:
- {
- FILE *fp;
-
- if ((fp = fopen(psData[scriptps].filename, "a")) == NULL) {
- fprintf(stderr, "GSetBackground cannot open %s\n",
- psData[scriptps].filename);
- return (0);
- }
- fprintf(fp, "\t%s\t%f\tsetBackground\n", PSfindGC(gc), color);
- s = fclose(fp);
- break;
- }
- default:
- fprintf(stderr, "GSetBackground request (%d) not implemented yet\n", dFlag);
- return (0);
- }
- return (s);
-}
-
-/*
- * See XSetLineAttributes. Notice that we'll not setting line style for
- * postscript. This is because solid is the ls in ps and in view3D and 2D,
- * we really don't use anything else than solid.
- */
-
-int
-GSetLineAttributes(
- GC gc,
- int lineWidth, int lineStyle, int capStyle, int joinStyle,
- int dFlag)
-{
- int s = 0;
-
- switch (dFlag) {
- case Xoption:
- XSetLineAttributes(dsply, gc, lineWidth, lineStyle,
- capStyle, joinStyle);
- break;
- case PSoption:
- {
- FILE *fp;
- int psCap, psJoin;
-
- switch (capStyle) {
- case 0: /* CapNotLast is not implemented in ps */
- case 1:
- psCap = psButtCap;
- break;
- case 2:
- psCap = psRoundCap;
- break;
- case 3:
- psCap = psPSqCap;
- break;
- default:
- fprintf(stderr, "cap style: %d unknown, using default.\n", capStyle);
- psCap = psButtCap;
- }
-
- switch (joinStyle) {
- case 0:
- psJoin = psMiterJoin;
- break;
- case 1:
- psJoin = psRoundJoin;
- break;
- case 2:
- psJoin = psBevelJoin;
- break;
- default:
- fprintf(stderr, "join style: %d unknown, using default.\n", joinStyle);
- psJoin = psMiterJoin;
- }
-
- /*
- * width of zero is machine-dependent and is not recom- mended,
- * we'll use 1 as the thinest line available if (lineWidth < 1)
- * lineWidth = 1;
- */
-
- if ((fp = fopen(psData[scriptps].filename, "a")) == NULL) {
- fprintf(stderr, "GSetLineAttributes cannot open %s\n",
- psData[scriptps].filename);
- return (0);
- }
-
- fprintf(fp, "\t%d\t%d\t%d\t%s\tsetLineAttributes\n",
- lineWidth, psCap, psJoin, PSfindGC(gc));
- s = fclose(fp);
- }
- break;
- default:
- fprintf(stderr, "GSetLineAttributes request (%d) not implemented yet\n", dFlag);
- return (0);
- }
- return (s);
-}
-
-/*
- * This procedure frees the data structure used for GC information, and also
- * unlinks the GC dictionary file.
- */
-
-int
-PSClose(void)
-{
- if (GChead != NULL) {
-
- /* free memory used by GC struct */
-
- GCptr curGC = GChead;
-
- while (curGC != NULL) {
- GCptr freeGC = curGC;
-
- curGC = curGC->next;
- free(freeGC);
- }
- }
-
- /* remove GC dictionary file */
-
- return (unlink(psData[GCdictps].filename));
-}
-
-
-
-
-int
-centerX (GC viewGCx,char * theString,int strlength,int windowWidth)
-{
- XFontStruct *fontStruct;
- GContext con;
- int result;
-
-
- con=XGContextFromGC(viewGCx);
- fontStruct = XQueryFont(dsply,con);
- if(fontStruct == NULL) return(0);
- result = (windowWidth - XTextWidth(fontStruct,theString,strlength))/2 -
- fontStruct->min_bounds.lbearing;
- XFreeFontInfo(NULL,fontStruct,1);
- return(result);
-}
-
-
-int
-centerY (GC viewGCy,int windowHeight)
-{
-
- XFontStruct *fontStruct;
- GContext con;
- int result;
-
- con=XGContextFromGC(viewGCy);
- fontStruct = XQueryFont(dsply,con);
- if (fontStruct == NULL) return(0);
- result = (windowHeight -
- (fontStruct->max_bounds.ascent + fontStruct->max_bounds.descent))/2 +
- fontStruct->max_bounds.ascent;
- XFreeFontInfo(NULL,fontStruct,1);
- return(result);
-
-}
-
-
-/*
- * PSColorPolygon draws and fills a polygon given data in XPoint; see
- * XFillPolygon
- */
-
-int
-PSColorPolygon(
- float r, float g, float b, /* red, green and blue color
- * components */
- XPoint * points, /* vertices of polygon */
- int numberOfPoints) /* number of points */
-{
- int i = 0;
- FILE *fp;
-
- if ((fp = fopen(psData[scriptps].filename, "a")) == NULL) {
- fprintf(stderr, "PSColorPolygon cannot open %s\n",
- psData[scriptps].filename);
- return (psError);
- }
-
- psData[colorpolyps].flag = yes; /* sets procedure flag */
-
- fprintf(fp, "\t%f\t%f\t%f\tsetrgbcolor\n", r, g, b);
-
- i = numberOfPoints - 1;
- while (i > 0)
- { fprintf(fp, "\t%d\t%d\n", points[i].x, points[i].y);
- i = i-1;
- }
-
- fprintf(fp, "\t%d\t%d\t%d\tpsColorPoly\n", numberOfPoints, points[i].x, points[i].y);
-
- return (fclose(fp));
-}
-
-
-/*
- * PSColorwOutline draws and also outlines the colored polygon.
- */
-
-int
-PSColorwOutline(
- float r, float g, float b, /* red, green and blue color
- * components */
- XPoint * points, /* vertices of polygon */
- int numberOfPoints) /* number of points */
-{
- int i = 0;
- FILE *fp;
-
- if ((fp = fopen(psData[scriptps].filename, "a")) == NULL) {
- fprintf(stderr, "PSDrawFOL cannot open %s\n", psData[scriptps].filename);
- return (psError);
- }
-
- psData[colorwolps].flag = yes; /* sets procedure flag */
-
- fprintf(fp, "\t%f\t%f\t%f\tsetrgbcolor\n", r, g, b);
-
- i = numberOfPoints - 1;
- while (i > 0)
- { fprintf(fp, "\t%d\t%d\n", points[i].x, points[i].y);
- i = i-1;
- }
-
- fprintf(fp, "\t%d\t%d\t%d\tpsFillwOutline\n",
- numberOfPoints, points[i].x, points[i].y);
-
- return (fclose(fp));
-}
-/*
- * This function does what XDraw would do, notice that only a subset of
- * attributes in GC is implemented -- adequate for our purpose now
- */
-
-int
-PSDrawColor(
- float r, float g, float b, /* red, green and blue color
- * components */
- XPoint *points, /* point list */
- int numberOfPoints) /* vertex count and display flag (X, PS,...) */
-{
- int i = 0;
- FILE *fp;
-
- if ((fp = fopen(psData[scriptps].filename, "a")) == NULL) {
- fprintf(stderr, "GDraw cannot open %s\n",
- psData[scriptps].filename);
- return (psError);
- }
-
- psData[drawcolorps].flag = yes; /* set procedure flag */
-
- fprintf(fp, "\t%f\t%f\t%f\tsetrgbcolor\n", r, g, b);
-
- i = numberOfPoints - 1;
- while (i > 0)
- { fprintf(fp, "\t%d\t%d\n", points[i].x, points[i].y);
- i=i-1;
- }
-
- fprintf(fp, "\t%d\t%d\t%d\tpsDrawColor\n", numberOfPoints, points[i].x, points[i].y);
-
- return (fclose(fp));
-}
-/*
- * PSFillPolygon draws and fills a polygon given data in XPoint; see
- * XFillPolygon.
- */
-
-int
-PSFillPolygon(
- GC gc, /* graphics context */
- XPoint * points, /* vertices of polygon */
- int numberOfPoints) /* number of points */
-{
- int i = 0;
- FILE *fp;
-
- if ((fp = fopen(psData[scriptps].filename, "a")) == NULL) {
- fprintf(stderr, "PSFillPolygon cannot open %s\n",
- psData[scriptps].filename);
- return (psError);
- }
-
- psData[fillpolyps].flag = yes; /* sets procedure flag */
- fprintf(fp, "\t%s\n", PSfindGC(gc));
-
- i = numberOfPoints - 1;
- while (i > 0)
- { fprintf(fp, "\t%d\t%d\n", points[i].x, points[i].y);
- i = i-1;
- }
-
- fprintf(fp, "\t%d\t%d\t%d\tpsFillPoly\n", numberOfPoints, points[i].x, points[i].y);
-
- return (fclose(fp));
-}
-
-/*
- * PSFillwOutline draws and also outlines the filled polygon.
- */
-
-int
-PSFillwOutline(
- GC gc, /* graphics context */
- XPoint * points, /* vertices of polygon */
- int numberOfPoints)
- /* number of points */
-{
- int i = 0;
- FILE *fp;
-
- if ((fp = fopen(psData[scriptps].filename, "a")) == NULL) {
- fprintf(stderr, "PSDrawFOL cannot open %s\n", psData[scriptps].filename);
- return (psError);
- }
-
- psData[fillwolps].flag = yes; /* sets procedure flag */
- fprintf(fp, "\t%s\n", PSfindGC(gc));
-
- i = numberOfPoints - 1;
- while (i > 0)
- { fprintf(fp, "\t%d\t%d\n", points[i].x, points[i].y);
- i = i-1;
- }
-
- fprintf(fp, "\t%d\t%d\t%d\tpsFillwOutline\n",
- numberOfPoints, points[i].x, points[i].y);
-
- return (fclose(fp));
-}
-
-static int
-TrivEqual(Window s1,Window s2)
-{
- return ( s1 == s2);
-}
-
-static int
-TrivHash_code(Window s,int size)
-{
- return (s % size);
-}
-
-
-HashTable *
-XCreateAssocTable(int size)
-{
- HashTable * table;
- table = (HashTable *) malloc(sizeof(HashTable));
- hash_init(table,size,(EqualFunction)TrivEqual,(HashcodeFunction)TrivHash_code);
- return table;
-}
-
-void
-XMakeAssoc(Display * dsp, HashTable *table, Window w, int * p)
-{
- hash_insert(table,(char *) p, (char *) w);
-}
-
-int *
-XLookUpAssoc(Display * dsp, HashTable *table,Window w)
-{
- return (int *) hash_find(table,(char *)w);
-}
-
-void
-XDeleteAssoc(Display * dsp,HashTable * table, Window w)
-{
- hash_delete(table,(char *) w);
-}
-
-
-
-
-
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}