--- /dev/null
+/* Hello, Emacs, this is -*-C-*- */
+/* $Id: tgif.trm,v 1.41.2.2 2009/03/02 23:57:54 sfeam Exp $ */
+
+/* GNUPLOT - tgif.trm */
+
+/*[
+ * Copyright 1990 - 1993, 1998, 2004
+ *
+ * Permission to use, copy, and distribute this software and its
+ * documentation for any purpose with or without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.
+ *
+ * Permission to modify the software is granted, but not the right to
+ * distribute the complete modified source code. Modifications are to
+ * be distributed as patches to the released version. Permission to
+ * distribute binaries produced by compiling modified sources is granted,
+ * provided you
+ * 1. distribute the corresponding source modifications from the
+ * released version in the form of a patch file along with the binaries,
+ * 2. add special version identification to distinguish your version
+ * in addition to the base release version number,
+ * 3. provide your name and address as the primary contact for the
+ * support of your modified version, and
+ * 4. retain our contact information in regard to use of the base
+ * software.
+ * Permission to distribute the released version of the source code along
+ * with corresponding source modifications in the form of a patch file is
+ * granted with same provisions 2 through 4 for binary distributions.
+ *
+ * This software is provided "as is" without express or implied warranty
+ * to the extent permitted by applicable law.
+]*/
+
+/* */
+/* This file is included by ../term.c. */
+/* */
+/* This terminal driver supports: */
+/* TGIF */
+/* */
+/* AUTHORS: */
+/* Werner Geppert and Andreas Kuhlewind */
+/* March, 21st 1995 */
+/* */
+/* send your comments or suggestions to werner@mez.ruhr-uni-bochum.de */
+/* */
+/* */
+/* MODIFIED May, 11st 1997 by NOVÁK Levente (novakl@tigris.klte.hu): */
+/* */
+/* - Modified the default linewidth for borders from 3 to 2 */
+/* - Modified the default size of markers' bounding box */
+/* to allow nicer shapes */
+/* - Slightly modified the markers and added several new ones, */
+/* now we have 64 different pointtypes, the same as for the */
+/* PostScript terminal */
+/* - I left the %.1f format for pixel positions, but I think */
+/* Tgif does only calculate with integer positions */
+/* */
+/* Modified 07 July 2000 by Ian MacPhedran */
+/* - added PM3D support */
+/* */
+/* Modified 04 February 2002 by Levente Novák */
+/* - break long "polygon()" directives into lines, as it made */
+/* Tgif fail polygons had >8 sides */
+/* (e.g. when using "filledcurves") */
+/* */
+/* Modified 29 November 2004 Shigeharu TAKENO <shige@iee.niit.ac.jp> */
+/* - add linewidth and monochrome options */
+/* update option parsing to be order-independent */
+/* */
+/***************************************************************************/
+
+/*}}} */
+/***************************************************************************/
+#include "driver.h"
+
+#ifdef TERM_REGISTER
+register_term(tgif)
+#endif
+
+#define USE_LINEWIDTH
+#define USE_MONO_MODE
+
+#ifdef TERM_PROTO
+TERM_PUBLIC void TGIF_options __PROTO((void));
+TERM_PUBLIC void TGIF_init __PROTO((void));
+TERM_PUBLIC void TGIF_reset __PROTO((void));
+TERM_PUBLIC void TGIF_text __PROTO((void));
+TERM_PUBLIC void TGIF_graphics __PROTO((void));
+TERM_PUBLIC void TGIF_move __PROTO((unsigned int ux, unsigned int uy));
+TERM_PUBLIC void TGIF_vector __PROTO((unsigned int ux, unsigned int uy));
+TERM_PUBLIC void TGIF_linetype __PROTO((int linetype));
+TERM_PUBLIC void TGIF_put_text __PROTO((unsigned int ux, unsigned int uy, const char *str)); /* ref point and text */
+TERM_PUBLIC int TGIF_text_angle __PROTO((int ang));
+TERM_PUBLIC int TGIF_justify_text __PROTO((enum JUSTIFY mode));
+TERM_PUBLIC void TGIF_point __PROTO((unsigned int ux, unsigned int uy, int number));
+TERM_PUBLIC void TGIF_arrow __PROTO((unsigned int sx, unsigned int sy, unsigned int ex, unsigned int ey, int head));
+TERM_PUBLIC int TGIF_set_font __PROTO((const char *font));
+TERM_PUBLIC void TGIF_set_pointsize __PROTO((double size));
+#ifdef USE_LINEWIDTH
+TERM_PUBLIC void TGIF_set_linewidth __PROTO((double size));
+#endif
+TERM_PUBLIC int TGIF_make_palette (t_sm_palette *);
+/* TERM_PUBLIC void TGIF_previous_palette (void); */
+TERM_PUBLIC void TGIF_set_color (t_colorspec *);
+TERM_PUBLIC void TGIF_filled_polygon (int, gpiPoint *);
+/*}}} */
+/* default length for static strings */
+#define TGIF_STRLEN_MAX 255
+
+/* standard x/y plot size in portrait mode */
+#define TGIF_XMAX 950
+#define TGIF_YMAX 634
+
+/* total available plotting area */
+#define TGIF_XTOT 950
+#define TGIF_YTOT 1400
+
+/* Offset */
+#define TGIF_XOFF 50
+#define TGIF_YOFF 50
+
+#define TGIF_XSHIFT 1030 /* 80 points skip */
+#define TGIF_YSHIFT 714
+
+#define TGIF_VCHAR 18 /* default is 18 pt */
+#define TGIF_HCHAR (18*6/10)
+
+#define TGIF_VTIC (TGIF_YMAX/80)
+#define TGIF_HTIC (TGIF_YMAX/80)
+
+static int TGIF_palette_set = FALSE; /* PM3D Palette Set ? */
+static int TGIF_palette_size = 128; /* Number of colours in palette */
+/* unused (joze) */
+#if 0
+static int TGIF_palette_offst = 32; /* Offset from zero for user colours */
+#endif
+static char TGIF_colours[128][8]; /* Colours */
+
+
+#define TGIF_MAXPOLY 100
+/*}}} */
+#define GOT_TGIF_PROTO
+#endif
+
+#ifndef TERM_PROTO_ONLY
+
+#ifdef TERM_BODY
+/* tgif driver by Werner Geppert, werner@mez.ruhr-uni-bochum.de */
+/***************************************************************************/
+/* Variables: */
+static unsigned int uLastTgifX, uLastTgifY; /* last Coordinate */
+
+static unsigned int uActNr; /* current elementnumber */
+static unsigned int uActPage; /* current pagenumber */
+static unsigned int uActResolution=100; /* resolution in percent */
+static unsigned int uActZoom; /* zoom factor */
+static unsigned int uActAngle; /* current textangle */
+static unsigned int uActThick; /* actual linethickness */
+static unsigned int uActPointSize; /* point size */
+static unsigned int uActStyle; /* actual linestyle */
+static unsigned int uActJust; /* actual textjustification */
+static unsigned int uXshift; /* actual shift x */
+static unsigned int uYshift; /* actual shift y */
+static unsigned int uTgifPlotCount; /* counts number of plots */
+static unsigned int uTgifPlotRow=1, uTgifPlotCol=1; /* actual plot row and col */
+static unsigned int uTgif_win_horiz=1, /* number of plots in x and */
+ uTgif_win_verti=1; /* y direction [x,y] */
+
+
+#ifdef USE_LINEWIDTH
+static double uActThick_factor=1.0;
+static double uActThick_default=1.0;
+#endif
+#ifdef USE_MONO_MODE
+static TBOOLEAN TgifUseColor = TRUE;
+#endif
+
+static char sActColor[TGIF_STRLEN_MAX]; /* current color */
+static unsigned int uDefaultFontSize = 18; /* default font size */
+static unsigned int uActFontSize = 18; /* current font size */
+static char sDefaultFont[TGIF_STRLEN_MAX] = "Helvetica"; /* default font */
+static char sActFont[TGIF_STRLEN_MAX] = "Helvetica"; /* current font */
+/* static char sActPointString[TGIF_STRLEN_MAX]; HBB: unused */
+
+static TBOOLEAN TgifSolid = FALSE;
+static TBOOLEAN TgifPortrait = TRUE;
+
+static unsigned int uTgifPlotsPerPage = 1;
+
+/*
+ * 10 different pointtypes need 10 different linetypes
+ */
+
+/* NL: Modified first value to 2 from 3 */
+static unsigned int uLineThick[] = { 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
+static unsigned int uLineStyle[] = { 0, 5, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0 };
+static const char *psColors[] = {
+ "black", "black", /* border and x/y-zero-axes */
+ "red", "green", "blue", "magenta", "cyan", "yellow",
+ "DarkSeaGreen", "HotPink", "black", "coral"
+};
+
+#if 0 /* HBB: unused */
+static const char *psFonts[] = {
+ "Times-Roman", "Courier", "Helvetica", "NewCenturySchlbk-Roman",
+ "Symbol", NULL
+};
+
+static unsigned int psFontSizes[] = {
+ 8, 10, 11, 12, 14, 17, 18, 20, 24, 25, 34, 40, 45, 50
+};
+#endif
+
+static int iTgifPolyCount;
+static unsigned int uBuffX[TGIF_MAXPOLY], uBuffY[TGIF_MAXPOLY];
+
+enum eState {
+ NEWPOLY = 100, INPOLY
+};
+static enum eState eTgifState = NEWPOLY;
+
+static void TGIF_flush_poly __PROTO((void));
+
+
+
+/*}}} */
+/***************************************************************************/
+static void
+TGIF_flush_poly()
+{
+ int i;
+
+
+ if (eTgifState == INPOLY) {
+ fprintf(gpoutfile, "poly('%s',%d,[\n\t", sActColor, iTgifPolyCount);
+
+ for (i = 0; i < iTgifPolyCount - 1; i++) {
+ fprintf(gpoutfile, "%u,%u,", uBuffX[i], uBuffY[i]);
+ if ((i + 1) % 8 == 0)
+ fputs("\n\t", gpoutfile);
+ }
+
+ fprintf(gpoutfile, "%u,%u],0,%u,1,%u,0,0,%u,0,8,3,0,[\n]).\n",
+ uBuffX[iTgifPolyCount - 1], uBuffY[iTgifPolyCount - 1],
+ uActThick, uActNr, uActStyle);
+
+ uActNr++;
+
+ eTgifState = NEWPOLY;
+ iTgifPolyCount = 0;
+ if (gpoutfile != (FILE *) NULL)
+ fflush(gpoutfile);
+ }
+} /* TGIF_flush_poly */
+/*}}} */
+/***************************************************************************/
+
+enum TGIF_id {
+ TGIF_MONOCHROME, TGIF_COLOR,
+ TGIF_LINEWIDTH,
+ TGIF_PORTRAIT, TGIF_LANDSCAPE,
+ TGIF_GRAPHS,
+ TGIF_SOLID, TGIF_DASHED,
+ TGIF_FONT,
+ TGIF_OTHER,
+ TGIF_DEFAULT
+};
+
+static struct gen_table TGIF_opts[] =
+{
+ {"mo$nochrome", TGIF_MONOCHROME},
+ {"c$olor", TGIF_COLOR},
+ {"c$olour", TGIF_COLOR},
+ {"linew$idth", TGIF_LINEWIDTH},
+ {"lw", TGIF_LINEWIDTH},
+ {"p$ortrait", TGIF_PORTRAIT},
+ {"l$andscape", TGIF_LANDSCAPE},
+ {"[", TGIF_GRAPHS},
+ {"s$olid", TGIF_SOLID},
+ {"d$ashed", TGIF_DASHED},
+ {"font", TGIF_FONT},
+ {"default", TGIF_DEFAULT},
+ {NULL, TGIF_OTHER}
+};
+
+TERM_PUBLIC void
+TGIF_options()
+{
+
+ struct value a, b;
+ double dscaleH, dscaleV;
+ int option;
+
+ while (!END_OF_COMMAND) {
+ option = lookup_table(&TGIF_opts[0],c_token);
+ switch(option) {
+ case TGIF_DEFAULT:
+ strcpy(sActFont, "Helvetica");
+ strcpy(sDefaultFont, "Helvetica");
+ uActFontSize = 18;
+ uDefaultFontSize = 18;
+ term->v_char = (unsigned int) (uActFontSize);
+ term->h_char = (unsigned int) (uActFontSize * 6 / 10);
+
+ TgifPortrait = TRUE;
+#ifdef USE_MONO_MODE
+ TgifUseColor = TRUE;
+#endif
+ TgifSolid = FALSE;
+ uTgifPlotsPerPage = 1;
+ uTgifPlotRow = 1;
+ uTgifPlotCol = 1;
+ uTgif_win_horiz = 1;
+ uTgif_win_verti = 1;
+ uActResolution = 100;
+#ifdef USE_LINEWIDTH
+ uActThick_factor = 1.0;
+ uActThick_default = 1.0;
+#endif
+ c_token++;
+ break;
+#ifdef USE_MONO_MODE
+ case TGIF_MONOCHROME:
+ TgifUseColor = FALSE;
+ c_token++;
+ break;
+ case TGIF_COLOR:
+ TgifUseColor = TRUE;
+ c_token++;
+ break;
+#endif
+#ifdef USE_LINEWIDTH
+ case TGIF_LINEWIDTH:
+ c_token++;
+ if (END_OF_COMMAND) {
+ int_error(c_token, "linewidth: width is not specified.");
+ } else {
+ if((uActThick_default = real(const_express(&a)))<=0.0){
+ int_error(c_token-1,"linewidth: out of range");
+ uActThick_default = 1.0;
+ }
+ }
+ break;
+#endif
+ case TGIF_PORTRAIT:
+ TgifPortrait = TRUE;
+ c_token++;
+ break;
+ case TGIF_LANDSCAPE:
+ TgifPortrait = FALSE;
+ /* uActResolution = 140;
+ */
+ c_token++;
+ break;
+ case TGIF_GRAPHS:
+ c_token++;
+ if (END_OF_COMMAND) {
+ int_error(c_token, "no. windows: [horizontal,vertical] expected");
+ } else if (!equals(c_token, ",")) {
+ uTgif_win_horiz = (int) real(const_express(&a));
+ }
+ if (!equals(c_token, ","))
+ int_error(c_token, "',' expected");
+ c_token++;
+ if (!equals(c_token, "]")) {
+ uTgif_win_verti = (int) real(const_express(&a));
+ }
+ if (!equals(c_token, "]"))
+ int_error(c_token, "expecting ']'");
+ c_token++;
+ uTgifPlotsPerPage = uTgif_win_verti * uTgif_win_horiz;
+ break;
+ case TGIF_SOLID:
+ TgifSolid = TRUE;
+ c_token++;
+ break;
+ case TGIF_DASHED:
+ TgifSolid = FALSE;
+ c_token++;
+ break;
+ case TGIF_FONT:
+ c_token++;
+ /* Fall through */
+ case TGIF_OTHER:
+ default:
+ {
+ char *s;
+ if ((s = try_to_get_string())) {
+ double fontsize;
+ char *comma = strrchr(s,',');
+ if (comma && (1 == sscanf(comma+1,"%lf",&fontsize))) {
+ *comma = '\0';
+ uActFontSize = (int)(fontsize+0.5);
+ }
+ strncpy(sActFont, s, sizeof(sActFont));
+ strcpy(sDefaultFont, sActFont);
+ free(s);
+ } else if (option == TGIF_FONT) {
+ int_error(c_token,"Expecting font name ");
+ } else {
+ /* We have font size specified */
+ uActFontSize = (unsigned int) real(const_express(&b));
+ uDefaultFontSize = uActFontSize;
+ term->v_char = (unsigned int) (uActFontSize);
+ term->h_char = (unsigned int) (uActFontSize * 6 / 10);
+ }
+ break;
+ }
+ }
+ }
+ if (TgifPortrait) {
+ dscaleH = (double) 100.0 *(TGIF_XTOT) / (xsize * (TGIF_XMAX + (uTgif_win_horiz - 1) * TGIF_XSHIFT));
+ dscaleV = (double) 100.0 *(TGIF_YTOT) / (ysize * (TGIF_YMAX + (uTgif_win_verti - 1) * TGIF_YSHIFT));
+ uActResolution = (int) GPMIN(dscaleH, dscaleV);
+ switch (uTgif_win_verti) {
+ case 1:
+ uActZoom = 0;
+ break;
+
+ case 2:
+ uActZoom = 1;
+ break;
+ default:
+ uActZoom = 2;
+ break;
+
+ }
+ } else {
+ dscaleH = (double) 100.0 *(TGIF_YTOT) / (xsize * (TGIF_XMAX + (uTgif_win_horiz - 1) * TGIF_XSHIFT));
+ dscaleV = (double) 100.0 *(TGIF_XTOT) / (ysize * (TGIF_YMAX + (uTgif_win_verti - 1) * TGIF_YSHIFT));
+ uActResolution = (unsigned int) GPMIN(dscaleH, dscaleV);
+
+ switch (uTgif_win_verti) {
+ case 1:
+ uActZoom = 0;
+ break;
+
+ case 2:
+ uActZoom = 1;
+ break;
+ default:
+ uActZoom = 2;
+ break;
+
+ }
+ }
+
+ sprintf(&(term_options[strlen(term_options)]), "%s [%u,%u]",
+ TgifPortrait ? "portrait" : "landscape",
+ uTgif_win_horiz, uTgif_win_verti);
+
+#ifdef USE_MONO_MODE
+ strcat(term_options, TgifUseColor ? " color" : " monochrome");
+#endif
+#ifdef USE_LINEWIDTH
+ sprintf(&(term_options[strlen(term_options)]), " linewidth %f", uActThick_default);
+#endif
+ sprintf(&(term_options[strlen(term_options)]), " %s \"%s\" %u",
+ TgifSolid ? "solid" : "dashed",
+ sActFont, uActFontSize);
+}
+/*}}} */
+/***************************************************************************/
+TERM_PUBLIC void
+TGIF_init()
+{
+
+ if (multiplot) {
+ /* uActResolution= TgifPortrait ? (unsigned int)100 : (unsigned int)145 ; */
+ uActResolution = (unsigned int) 100;
+
+ if (uTgifPlotsPerPage > 1) {
+ fputs("warning: using standard multiplot\n", stderr);
+ uTgifPlotsPerPage = 1;
+ }
+ uActZoom = 1;
+ }
+ fprintf(gpoutfile, "\
+%%TGIF 2.15-p7\n\
+state(%d,30,%u,0,0,%u,16,1,9,1,1,0,0,0,0,1,0,'%s',0,%u,0,0,1,10,0,0,1,1,0,16,0,0,1,1,1).\n\
+%%\n\
+%% @(#)Creator: gnuplot %s patchlevel %s\n\
+%% %%W%%\n\
+%%\n\
+page(1,\"\").\n",
+ TgifPortrait ? 0 : 1, uActResolution, uActZoom, sActFont, uActFontSize,
+ gnuplot_version, gnuplot_patchlevel);
+ eTgifState = NEWPOLY;
+ iTgifPolyCount = 0;
+ uTgifPlotCount = 0;
+ uActPage = 1;
+ TGIF_palette_set = FALSE; /* PM3D Palette Set ? */
+} /* TGIF_init */
+/*}}} */
+
+/***************************************************************************/
+TERM_PUBLIC void
+TGIF_graphics()
+{
+
+ TGIF_flush_poly();
+
+ if (multiplot) {
+
+ term->xmax = (TgifPortrait) ? TGIF_XTOT : TGIF_YTOT;
+ term->ymax = (TgifPortrait) ? TGIF_YTOT : TGIF_XTOT;
+ uLastTgifX = (TgifPortrait) ? TGIF_XOFF : TGIF_YOFF;
+ uLastTgifY = (TgifPortrait) ? TGIF_YTOT + TGIF_YOFF : TGIF_XTOT + TGIF_XOFF;
+
+ uYshift = uLastTgifY;
+ uXshift = uLastTgifX;
+
+ } else {
+ if (uTgifPlotCount < uTgifPlotsPerPage)
+ uTgifPlotCount++;
+ else {
+ fputs("error: number of plots > plots per page\n", stderr);
+ return;
+ }
+
+ uXshift = (unsigned int) TGIF_XOFF *100 / uActResolution + (xsize * (uTgifPlotCol - 1) * TGIF_XSHIFT);
+ uYshift = (unsigned int) TGIF_YOFF *100 / uActResolution + (ysize * (TGIF_YMAX +
+ (uTgifPlotRow - 1) * TGIF_YSHIFT));
+
+ if (uTgifPlotCount % uTgif_win_horiz == 0) {
+ uTgifPlotCol = 1;
+ uTgifPlotRow++;
+ } else {
+ uTgifPlotCol++;
+ }
+
+ uLastTgifX = uXshift;
+ uLastTgifY = uYshift;
+
+ }
+
+
+
+
+
+/* default settings for each plot */
+ iTgifPolyCount = 0;
+ uActNr = 0;
+ uActAngle = 0;
+ uActThick = 1;
+ uActStyle = 0;
+ uActJust = LEFT;
+#ifndef USE_MONO_MODE
+ strcpy(sActColor, psColors[0]);
+#else
+ if(TgifUseColor == FALSE) strcpy(sActColor,"black");
+ else strcpy(sActColor, psColors[0]);
+#endif
+
+} /* TGIF_graphics */
+/*}}} */
+/***************************************************************************/
+TERM_PUBLIC void
+TGIF_text()
+{
+ TGIF_flush_poly();
+
+
+} /* TGIF_text */
+
+/*}}} */
+/***************************************************************************/
+TERM_PUBLIC void
+TGIF_reset()
+{
+ TGIF_flush_poly();
+ iTgifPolyCount = 0;
+ uTgifPlotCount = 0;
+ uTgifPlotRow = 1;
+ uTgifPlotCol = 1;
+
+
+ if (gpoutfile != (FILE *) NULL)
+ fflush(gpoutfile);
+
+} /* TGIF_reset */
+/*}}} */
+/***************************************************************************/
+TERM_PUBLIC void
+TGIF_linetype(int linetype)
+{
+ unsigned int ult;
+
+
+ TGIF_flush_poly();
+
+
+ if (linetype >= 0)
+ ult = 2 + linetype % 10;
+ else if (linetype < -2)
+ ult = 0;
+ else
+ ult = linetype + 2;
+
+#ifndef USE_MONO_MODE
+ strcpy(sActColor, psColors[ult]);
+#else
+ if(TgifUseColor == FALSE) strcpy(sActColor,"black");
+ else strcpy(sActColor, psColors[ult]);
+#endif
+#ifndef USE_LINEWIDTH
+ uActThick = uLineThick[ult];
+#else
+ uActThick = uActThick_factor * uActThick_default * uLineThick[ult]+0.5;
+#endif
+ if (!TgifSolid)
+ uActStyle = uLineStyle[ult];
+ else {
+ if (ult == 1) /* grid */
+ uActStyle = uLineStyle[ult];
+ else
+ uActStyle = uLineStyle[2];
+
+ }
+
+} /* TGIF_linetype */
+/*}}} */
+/***************************************************************************/
+TERM_PUBLIC void
+TGIF_move(unsigned int ux, unsigned int uy)
+{
+
+ uLastTgifX = ux + uXshift;
+ uLastTgifY = uYshift - uy;
+
+ if (eTgifState == INPOLY)
+ TGIF_flush_poly();
+
+
+
+} /* TGIF_move */
+/*}}} */
+/***************************************************************************/
+TERM_PUBLIC void
+TGIF_vector(unsigned int ux, unsigned int uy)
+{
+
+ ux = ux + uXshift;
+ uy = uYshift - uy;
+
+
+
+ if (eTgifState == NEWPOLY) {
+ uBuffX[0] = uLastTgifX;
+ uBuffY[0] = uLastTgifY;
+ iTgifPolyCount = 1;
+ eTgifState = INPOLY;
+ }
+ uBuffX[iTgifPolyCount] = ux;
+ uBuffY[iTgifPolyCount] = uy;
+ uLastTgifX = ux;
+ uLastTgifY = uy;
+ iTgifPolyCount++;
+ eTgifState = INPOLY;
+
+ if (iTgifPolyCount == TGIF_MAXPOLY) {
+ TGIF_flush_poly();
+
+ }
+} /* TGIF_vector */
+/*}}} */
+/***************************************************************************/
+TERM_PUBLIC void
+TGIF_arrow(
+ unsigned int sx, unsigned int sy,
+ unsigned int ex, unsigned int ey,
+ int head)
+{
+
+ TGIF_flush_poly();
+
+ sx = sx + uXshift;
+ ex = ex + uXshift;
+ sy = uYshift - sy;
+ ey = uYshift - ey;
+
+
+ if (head) {
+ fprintf(gpoutfile, "\
+poly('%s',%d,[\n\
+\t%u,%u,%u,%u],1,%u,1,%u,0,0,%u,0,8,3,0,[\n]).\n",
+ sActColor, 2, sx, sy, ex, ey, uActThick, uActNr, uActStyle);
+ } else {
+ fprintf(gpoutfile, "\
+poly('%s',%d,[\n\
+\t%u,%u,%u,%u],1,%u,1,%u,0,0,%u,0,8,3,0,[\n]).\n",
+ sActColor, 2, sx, sy, ex, ey, uActThick, uActNr, uActStyle);
+ }
+
+ uActNr++;
+
+
+
+ uLastTgifX = ex;
+ uLastTgifY = ey;
+
+} /* TGIF_arrow */
+/*}}} */
+/***************************************************************************/
+TERM_PUBLIC void
+TGIF_put_text(unsigned int ux, unsigned int uy, const char *str)
+{
+
+ unsigned int x, y;
+ struct termentry *t = term;
+
+ TGIF_flush_poly();
+
+ x = ux + uXshift;
+ y = uYshift - uy - t->v_char / 2;
+
+ if (strlen(str) == 0)
+ return;
+
+ fprintf(gpoutfile, "\
+text('%s',%u,%u,'%s',0,%u,1,%u,%u,1,55,119,%u,0,15,4,0,0,0,0,[\n\t\"%s\"]).\n",
+ sActColor, x, y, sActFont, uActFontSize,
+ (uActAngle ? CENTRE : uActJust), uActAngle,
+ uActNr, str);
+
+ uActNr += 2;
+
+#if 0
+ /* reset font size and font, they might have been changed */
+ uActFontSize = uDefaultFontSize;
+ strcpy(sActFont, sDefaultFont);
+#endif
+
+} /* TGIF_put_text */
+/*}}} */
+/***************************************************************************/
+TERM_PUBLIC int
+TGIF_text_angle(int ang)
+{
+ switch (ang) {
+ case 90: uActAngle = 3; break;
+ case 180:
+ case -180: uActAngle = 2; break;
+ case -90:
+ case 270: uActAngle = 1; break;
+ default: uActAngle = 0; break;
+ }
+ return (TRUE);
+} /* TGIF_text_angle */
+
+/*}}} */
+/***************************************************************************/
+TERM_PUBLIC int
+TGIF_justify_text(enum JUSTIFY mode)
+{
+ uActJust = mode;
+ return (TRUE);
+} /* TGIF_justify_text */
+
+/*}}} */
+/***************************************************************************/
+TERM_PUBLIC void
+TGIF_point(unsigned int ux, unsigned int uy, int number)
+{
+ double p; /* all pointtypes fit in a (x +/-p)x(y +/-p) box */
+
+ double x, y;
+
+
+
+ x = (double) (ux + uXshift);
+ y = (double) (uYshift - uy);
+
+ p = pointsize * 8.0; /* NL: Increased the bounding box (p value) from 4.0 to 8.0 */
+ if (p == (double) 0.0)
+ p = 0.1;
+
+ TGIF_flush_poly();
+
+ if (number != -1)
+ number = number % 63;
+ switch (number) {
+ case -1:
+ /* HBB: corrected format string, shuts up gcc -Wall */
+ fprintf(gpoutfile, "\
+poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,1,1,%u,0,0,0,0,8,3,0,[\n]).\n",
+ sActColor, x, y, x + 1, y + 1, uActNr++);
+ break;
+ case 0:
+ /* cross */
+ /* taking thickness 2 for cross & plus & star */
+ fprintf(gpoutfile, "\
+group([\n\
+poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,2,1,%u,0,0,0,0,8,3,0,[\n]).\n\
+poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,2,1,%u,0,0,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr+1,
+ sActColor, x - p, y + p, x + p, y - p, uActNr+2);
+ uActNr += 4;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 1:
+ /* plus */
+ /* taking thickness 2 for cross & plus & star */
+ fprintf(gpoutfile, "\
+group([\n\
+poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,2,1,%u,0,0,0,0,8,3,0,[\n]),\n\
+poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,2,1,%u,0,0,0,0,8,3,0,[\n])\n",
+ sActColor, x, y - p - 1, x, y + p + 1, uActNr+1,
+ sActColor, x - p - 1, y, x + p + 1, y, uActNr+2);
+ uActNr += 4;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 2:
+ /* star */
+ /* taking thickness 2 for cross & plus & star */
+ fputs("group([\n", gpoutfile);
+ fprintf(gpoutfile, "\
+poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,2,1,%u,0,0,0,0,8,3,0,[\n]),\n",
+ sActColor, x, y - p - 1, x, y + p + 1, uActNr++);
+ fprintf(gpoutfile, "\
+poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,2,1,%u,0,0,0,0,8,3,0,[\n])\n",
+ sActColor, x - p - 1, y, x + p + 1, y, uActNr++);
+ fprintf(gpoutfile, "\
+poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,2,1,%u,0,0,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "\
+poly('%s',2,[\n\t%.1f,%.1f,%.1f,%.1f],0,2,1,%u,0,0,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y + p, x + p, y - p, uActNr++);
+ uActNr += 4;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 3:
+ /* box */
+ fprintf(gpoutfile, "\
+box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr);
+ uActNr++;
+ break;
+ /*}}} */
+ case 4:
+ /* filled box */
+ fprintf(gpoutfile, "\
+box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr);
+ uActNr++;
+ break;
+ /*}}} */
+ case 5:
+ /* circle */
+ fprintf(gpoutfile, "\
+oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr);
+ uActNr++;
+ break;
+ /*}}} */
+ case 6:
+ /* filled circle */
+ fprintf(gpoutfile, "\
+oval('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr);
+ uActNr++;
+ break;
+ /*}}} */
+ case 7:
+ /* triangle up */
+ fprintf(gpoutfile, "\
+polygon('%s',4,[\n\
+%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y - p, x + p, y + 0.75 * p, x - p, y + 0.75 * p,
+ x, y - p, uActNr);
+ uActNr++;
+ break;
+ /*}}} */
+ case 8:
+ /* filled triangle up */
+ fprintf(gpoutfile, "\
+polygon('%s',4,[\n\
+%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y - p, x + p, y + 0.75 * p, x - p, y + 0.75 * p,
+ x, y - p, uActNr);
+ uActNr++;
+ break;
+ /*}}} */
+ case 9:
+ /* triangle down */
+ fprintf(gpoutfile, "\
+polygon('%s',4,[\n\
+%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x - p, y - 0.75 * p, x + p, y - 0.75 * p,
+ x, y + p, uActNr);
+ uActNr++;
+ break;
+ /*}}} */
+ case 10:
+ /* filled triangle down */
+ fprintf(gpoutfile, "\
+polygon('%s',4,[\n\
+%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x - p, y - 0.75 * p, x + p, y - 0.75 * p,
+ x, y + p, uActNr);
+ uActNr++;
+ break;
+ /*}}} */
+ case 11:
+ /* diamond */
+ fprintf(gpoutfile, "\
+polygon('%s',5,[\n\
+%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n\
+]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p,
+ uActNr);
+ uActNr++;
+ break;
+ /*}}} */
+ case 12:
+ /* filled diamond */
+ fprintf(gpoutfile, "\
+polygon('%s',5,[\n\
+%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n\
+]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p,
+ uActNr);
+ uActNr++;
+ break;
+ /*}}} */
+ case 13:
+ /* pentagon */
+ fprintf(gpoutfile, "\
+polygon('%s',6,[\n\
+%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y - p, x + p, y - p / 4, x + 0.625 * p, y + p,
+ x - 0.625 * p, y + p, x - p, y - p / 4, x, y - p, uActNr);
+ uActNr++;
+ break;
+ /*}}} */
+ case 14:
+ /* filled pentagon */
+ fprintf(gpoutfile, "\
+polygon('%s',6,[\n\
+%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y - p, x + p, y - p / 4, x + 0.625 * p, y + p,
+ x - 0.625 * p, y + p, x - p, y - p / 4, x, y - p, uActNr);
+ uActNr++;
+ break;
+ /*}}} */
+ case 15:
+ /* circle1 */
+ fputs("group([\n", gpoutfile);
+ fprintf(gpoutfile, "\
+oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n\
+]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "\
+arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,4480,2560,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x + p * 0.342, y - p * 0.94,
+ x - p * 0.342, y - p * 0.94, 2 * p, 2 * p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 16:
+ /* circle2 */
+ fputs("group([\n", gpoutfile);
+ fprintf(gpoutfile, "\
+oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "\
+arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,0,5760,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x + p, y, x, y - p, 2 * p,
+ 2 * p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 17:
+ /* circle3 */
+ fputs("group([\n", gpoutfile);
+ fprintf(gpoutfile, "\
+oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "\
+arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,5760,5760,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x, y - p, x - p, y, 2 * p,
+ 2 * p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 18:
+ /* circle4 */
+ fputs("group([\n", gpoutfile);
+ fprintf(gpoutfile, "\
+oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "\
+arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,0,11520,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x + p, y, x - p, y, 2 * p,
+ 2 * p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 19:
+ /* circle5 */
+ fputs("group([\n", gpoutfile);
+ fprintf(gpoutfile, "\
+oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "\
+arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,11520,5760,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x - p, y, x, y + p, 2 * p,
+ 2 * p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 20:
+ /* circle6 */
+ fputs("group([\n", gpoutfile);
+ fprintf(gpoutfile, "\
+oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "\
+arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,0,5760,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x + p, y, x, y - p, 2 * p,
+ 2 * p, uActNr++);
+ fprintf(gpoutfile, "\
+arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,11520,5760,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x - p, y, x, y + p, 2 * p,
+ 2 * p, uActNr++);
+ uActNr += 3;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 21:
+ /* circle7 */
+ fputs("group([\n", gpoutfile);
+ fprintf(gpoutfile, "\
+oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "\
+arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,5760,11520,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x, y - p, x, y + p, 2 * p,
+ 2 * p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 22:
+ /* circle8 */
+ fputs("group([\n", gpoutfile);
+ fprintf(gpoutfile, "\
+oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "\
+arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,0,17280,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x + p, y, x, y + p, 2 * p,
+ 2 * p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 23:
+ /* circle9 */
+ fputs("group([\n", gpoutfile);
+ fprintf(gpoutfile, "\
+oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "\
+arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,17280,5760,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x, y + p, x + p, y, 2 * p,
+ 2 * p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 24:
+ /* circle10 */
+ fputs("group([\n", gpoutfile);
+ fprintf(gpoutfile, "\
+oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "\
+arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,17280,11520,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x, y + p, x, y - p, 2 * p,
+ 2 * p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 25:
+ /* circle11 */
+ fputs("group([\n", gpoutfile);
+ fprintf(gpoutfile, "\
+oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "\
+arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,5760,5760,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x, y - p, x - p, y, 2 * p,
+ 2 * p, uActNr++);
+ fprintf(gpoutfile, "\
+arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,17280,5760,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x, y + p, x + p, y, 2 * p,
+ 2 * p, uActNr++);
+ uActNr += 3;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 26:
+ /* circle12 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile,
+ "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,17280,17280,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x, y + p, x - p, y, 2 * p, 2 * p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 27:
+ /* circle13 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile,
+ "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,11520,11520,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x - p, y, x + p, y, 2 * p, 2 * p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 28:
+ /* circle14 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile,
+ "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,11520,17280,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x - p, y, x, y - p, 2 * p, 2 * p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 29:
+ /* circle15 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile,
+ "arc('%s',1,1,1,0,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,0,%.1f,%.1f,5760,17280,%u,0,0,8,3,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, x, y - p, x + p, y, 2 * p, 2 * p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 30:
+ /* circle16 */
+ fprintf(gpoutfile, "oval('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr);
+ uActNr++;
+ break;
+ /*}}} */
+ case 31:
+ /* box1 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p / 4, y - p, x + p / 4, y, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 32:
+ /* box2 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x, y - p, x + p, y, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 33:
+ /* box3 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 34:
+ /* box4 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 35:
+ /* box5 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y, x, y + p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 36:
+ /* box6 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x, y - p, x + p, y, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y, x, y + p, uActNr++);
+ uActNr += 3;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 37:
+ /* box7 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y + p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 38:
+ /* box8 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y, x, y + p, uActNr++);
+ uActNr += 3;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 39:
+ /* box9 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x, y, x + p, y + p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 40:
+ /* box10 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x, y - p, x + p, y + p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 41:
+ /* box11 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x, y, x + p, y + p, uActNr++);
+ uActNr += 3;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 42:
+ /* box12 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x, y, x + p, y + p, uActNr++);
+ uActNr += 3;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 43:
+ /* box13 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y, x + p, y + p, uActNr++);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 44:
+ /* box14 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x, y - p, x + p, y, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y, x + p, y + p, uActNr++);
+ uActNr += 3;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 45:
+ /* box15 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,2,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x, y, uActNr++);
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y, x + p, y + p, uActNr++);
+ uActNr += 3;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 46:
+ /* box16 */
+ fprintf(gpoutfile, "box('%s',%.1f,%.1f,%.1f,%.1f,1,1,1,%u,0,0,0,[\n]).\n",
+ sActColor, x - p, y - p, x + p, y + p, uActNr);
+ uActNr++;
+ break;
+ /*}}} */
+ case 47:
+ /* diamond1 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x - 0.625 * p, y - 0.375 * p, x - 0.375 * p, y - 0.625 * p, x + p / 8,
+ y - p / 8, x - p / 8, y + p / 8, x - 0.625 * p, y - 0.375 * p, uActNr);
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ uActNr += 2;
+ break;
+ /*}}} */
+ case 48:
+ /* diamond2 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x - p / 2, y - p / 2, x, y - p, x + p / 2, y - p / 2, x, y, x - p / 2,
+ y - p / 2, uActNr);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 49:
+ /* diamond3 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x - p, y, x - p / 2, y - p / 2, x, y, x - p / 2, y + p / 2, x - p, y, uActNr);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 50:
+ /* diamond4 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x - p, y, x, y - p, x + p / 2, y - p / 2, x - p / 2, y + p / 2, x - p,
+ y, uActNr);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 51:
+ /* diamond5 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x - p / 2, y + p / 2, x, y, x + p / 2, y + p / 2, x, y + p, x - p / 2,
+ y + p / 2, uActNr);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 52:
+ /* diamond6 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x - p / 2, y - p / 2, x, y - p, x + p / 2, y - p / 2, x, y, x - p / 2,
+ y - p / 2, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x - p / 2, y + p / 2, x, y, x + p / 2, y + p / 2, x, y + p, x - p / 2,
+ y + p / 2, uActNr);
+ uActNr += 3;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 53:
+ /* diamond7 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x - p, y, x - p / 2, y - p / 2, x + p / 2, y + p / 2, x, y + p, x - p,
+ y, uActNr);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 54:
+ /* diamond8 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',7,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x - p, y, x, y - p, x + p / 2, y - p / 2, x, y, x + p / 2, y + p / 2,
+ x, y + p, x - p, y, uActNr);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 55:
+ /* diamond9 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y, x + p / 2, y - p / 2, x + p, y, x + p / 2, y + p / 2, x, y, uActNr);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 56:
+ /* diamond10 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x - p / 2, y - p / 2, x, y - p, x + p, y, x + p / 2, y + p / 2, x - p /
+ 2, y - p / 2, uActNr);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 57:
+ /* diamond11 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x - p, y, x - p / 2, y - p / 2, x, y, x - p / 2, y + p / 2, x - p, y, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y, x + p / 2, y - p / 2, x + p, y, x + p / 2, y + p / 2, x, y, uActNr);
+ uActNr += 3;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 58:
+ /* diamond12 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',7,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x - p, y, x, y - p, x + p, y, x + p / 2, y + p / 2, x, y, x - p / 2, y
+ + p / 2, x - p, y, uActNr);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 59:
+ /* diamond13 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x - p / 2, y + p / 2, x + p / 2, y - p / 2, x + p, y, x, y + p, x - p /
+ 2, y + p / 2, uActNr);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 60:
+ /* diamond14 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',7,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x - p / 2, y - p / 2, x, y - p, x + p, y, x, y + p, x - p / 2, y + p /
+ 2, x, y, x - p / 2, y - p / 2, uActNr);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 61:
+ /* diamond15 */
+ fprintf(gpoutfile, "group([\n");
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],0,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
+ fprintf(gpoutfile,
+ "polygon('%s',7,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x - p, y, x - p / 2, y - p / 2, x, y, x + p / 2, y - p / 2, x + p, y,
+ x, y + p, x - p, y, uActNr);
+ uActNr += 2;
+ fprintf(gpoutfile, "],\n%u,0,[\n]).\n", uActNr++);
+ break;
+ /*}}} */
+ case 62:
+ /* diamond16 */
+ fprintf(gpoutfile,
+ "polygon('%s',5,[\n%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f,%.1f],1,1,1,0,%u,0,0,0,0,0,[\n]).\n",
+ sActColor, x, y + p, x + p, y, x, y - p, x - p, y, x, y + p, uActNr);
+ uActNr++;
+ break;
+ /*}}} */
+
+ } /* switch */
+} /* TGIF_point */
+
+/*}}} */
+/***************************************************************************/
+TERM_PUBLIC void
+TGIF_set_pointsize(double size)
+{
+ uActPointSize = size < 0. ? 1. : size;
+}
+
+#ifdef USE_LINEWIDTH
+TERM_PUBLIC void
+TGIF_set_linewidth(double size)
+{
+ uActThick_factor = size < 0. ? 1. : size;
+}
+#endif
+
+/*}}} */
+/***************************************************************************/
+TERM_PUBLIC int
+TGIF_set_font(const char *font)
+{
+ int sep;
+
+ if (!font || !(*font))
+ font = sDefaultFont;
+ sep = strcspn(font, ",");
+ if (sep > 0) {
+ strncpy(sActFont, font, sep);
+ sActFont[sep] = NUL;
+ }
+ sscanf(&(font[sep + 1]), "%d", &uActFontSize);
+ return TRUE;
+}
+
+TERM_PUBLIC int
+TGIF_make_palette(t_sm_palette *palette)
+{
+ int i;
+
+ /* Query to determine palette size */
+ if (palette==NULL) {
+ return(TGIF_palette_size); /* How big is palette ? */
+ }
+
+ TGIF_flush_poly(); /* Clean up current data */
+
+ if (TGIF_palette_set == FALSE) {
+#ifdef USE_MONO_MODE
+ if (TgifUseColor == FALSE
+ || sm_palette.colorMode == SMPAL_COLOR_MODE_GRAY) {
+ /* Gray palette */
+ if (TgifUseColor == FALSE
+ && sm_palette.colorMode == SMPAL_COLOR_MODE_RGB){
+ fprintf(stderr, "Monochrome Tgif file: ");
+ fprintf(stderr, "using gray palette instead of color\n");
+ }
+ for (i = 0; i < sm_palette.colors; i++) {
+ int j = (int)(i * 255.0 / (sm_palette.colors-1) + 0.5);
+ sprintf(TGIF_colours[i],"#%.2x%.2x%.2x",j,j,j);
+ }
+ } else {
+#endif
+ /* Create new palette */
+ for (i = 0; i < sm_palette.colors; i++) {
+ sprintf(TGIF_colours[i],"#%.2x%.2x%.2x",
+ (int)( palette->color[i].r * 255 + 0.5 ),
+ (int)( palette->color[i].g * 255 + 0.5 ),
+ (int)( palette->color[i].b * 255 + 0.5 ) );
+ }
+#ifdef USE_MONO_MODE
+ }
+#endif
+ TGIF_palette_set = TRUE;
+ } else {
+ fprintf(stderr, "Attempt to set palette twice\n");
+ }
+ return(0);
+}
+
+TERM_PUBLIC void
+TGIF_set_color(t_colorspec *colorspec)
+{
+ double gray = colorspec->value;
+ int color;
+
+ if (colorspec->type != TC_FRAC)
+ return;
+
+ color = (gray <= 0) ? 0 : (int)(gray * TGIF_palette_size);
+ if (color >= TGIF_palette_size)
+ color = TGIF_palette_size - 1;
+ if (TGIF_palette_set == FALSE) {
+ fprintf(stderr, "tgif: Palette used before set\n"); /* Error condition */
+ }
+ sprintf(sActColor, "%s", TGIF_colours[color]);
+}
+
+TERM_PUBLIC void
+TGIF_filled_polygon(int points, gpiPoint *corners)
+{
+ int i;
+
+ if (eTgifState == INPOLY)
+ TGIF_flush_poly(); /* Clean up current data */
+
+ fprintf(gpoutfile, "polygon('%s',%d,[\n\t",sActColor,points+1);
+ /* loop through points, do the first one last as well as first */
+ fprintf(gpoutfile,"%u,%u,", corners[0].x+uXshift, uYshift-corners[0].y);
+ for (i = 1; i < points; i++) {
+ fprintf(gpoutfile, "%u,%u,",
+ corners[i].x+uXshift, uYshift-corners[i].y);
+ /* LN: Break long lines as Tgif is rather picky about them */
+ if ((i + 1) % 8 == 0)
+ fputs("\n\t", gpoutfile);
+ }
+ fprintf(gpoutfile, "%u,%u", corners[0].x+uXshift, uYshift-corners[0].y);
+ fprintf(gpoutfile, "],1,1,1,0,%u,0,0,0,0,0,[\n]).\n", uActNr);
+ uActNr++;
+}
+
+/*}}} */
+/***************************************************************************/
+
+#endif /* TERM_BODY */
+
+#ifdef TERM_TABLE
+
+TERM_TABLE_START(tgif_driver)
+ "tgif",
+ "TGIF X11 [mode] [x,y] [dashed] [\042font\042 [fontsize]]",
+ TGIF_XMAX, TGIF_YMAX, TGIF_VCHAR, TGIF_HCHAR,
+ TGIF_VTIC, TGIF_HTIC, TGIF_options, TGIF_init, TGIF_reset,
+ TGIF_text, null_scale, TGIF_graphics, TGIF_move, TGIF_vector,
+ TGIF_linetype, TGIF_put_text, TGIF_text_angle,
+ TGIF_justify_text, TGIF_point, TGIF_arrow, TGIF_set_font,
+#ifndef USE_LINEWIDTH
+ TGIF_set_pointsize, TERM_CAN_MULTIPLOT, 0, 0, 0, 0
+#else
+ TGIF_set_pointsize, TERM_CAN_MULTIPLOT, 0, 0, 0, TGIF_set_linewidth
+#endif
+#ifdef USE_MOUSE
+ ,0, 0, 0, 0, 0 /* no mouse support for the tgif terminal */
+#endif
+ , TGIF_make_palette, 0 /*previous_palette*/, TGIF_set_color, TGIF_filled_polygon
+TERM_TABLE_END(tgif_driver)
+
+#undef LAST_TERM
+#define LAST_TERM tgif_driver
+
+#endif /* TERM_TABLE */
+
+#endif /* TERM_PROTO_ONLY */
+
+#ifdef TERM_HELP
+START_HELP(tgif)
+"1 tgif",
+"?commands set terminal tgif",
+"?set terminal tgif",
+"?set term tgif",
+"?terminal tgif",
+"?term tgif",
+"?tgif",
+" Tgif is an X11-based drawing tool---it has nothing to do with GIF.",
+"",
+" The `tgif` driver supports different pointsizes (with `set pointsize`),",
+" different label fonts and font sizes (e.g. `set label \"Hallo\" at x,y font",
+" \"Helvetica,34\"`) and multiple graphs on the page. The proportions of the",
+" axes are not changed.",
+"",
+" Syntax:",
+" set terminal tgif {portrait | landscape | default} {<[x,y]>}",
+" {monochrome | color}",
+" {{linewidth | lw} <LW>}",
+" {solid | dashed}",
+" {font \"<fontname>\"} {<fontsize>}",
+"",
+" where <[x,y]> specifies the number of graphs in the x and y directions on the",
+" page, `color` enables color, `linewidth` scales all linewidths by <LW>,",
+" \"<fontname>\" is the name of a valid PostScript font, and <fontsize>",
+" specifies the size of the PostScript font.",
+" `defaults` sets all options to their defaults: `portrait`, `[1,1]`, `color`,",
+" `linwidth 1.0`, `dashed`, `\"Helvetica\"`, and `18`.",
+"",
+" The `solid` option is usually prefered if lines are colored, as they often",
+" are in the editor. Hardcopy will be black-and-white, so `dashed` should be",
+" chosen for that.",
+"",
+" Multiplot is implemented in two different ways.",
+"",
+" The first multiplot implementation is the standard gnuplot multiplot feature:",
+"",
+" set terminal tgif",
+" set output \"file.obj\"",
+" set multiplot",
+" set origin x01,y01",
+" set size xs,ys",
+" plot ...",
+" ...",
+" set origin x02,y02",
+" plot ...",
+" unset multiplot",
+"",
+" See `set multiplot` for further information.",
+"",
+" The second version is the [x,y] option for the driver itself. The advantage",
+" of this implementation is that everything is scaled and placed automatically",
+" without the need for setting origins and sizes; the graphs keep their natural",
+" x/y proportions of 3/2 (or whatever is fixed by `set size`).",
+"",
+" If both multiplot methods are selected, the standard method is chosen and a",
+" warning message is given.",
+"",
+" Examples of single plots (or standard multiplot):",
+" set terminal tgif # defaults",
+" set terminal tgif \"Times-Roman\" 24",
+" set terminal tgif landscape",
+" set terminal tgif landscape solid",
+"",
+" Examples using the built-in multiplot mechanism:",
+" set terminal tgif portrait [2,4] # portrait; 2 plots in the x-",
+" # and 4 in the y-direction",
+" set terminal tgif [1,2] # portrait; 1 plot in the x-",
+" # and 2 in the y-direction",
+" set terminal tgif landscape [3,3] # landscape; 3 plots in both",
+" # directions"
+END_HELP(tgif)
+#endif
+/*{{{}}}*/