[BACK]Return to cgi.trm CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gnuplot / term

File: [local] / OpenXM_contrib / gnuplot / term / Attic / cgi.trm (download)

Revision 1.1.1.2 (vendor branch), Sat Jan 22 14:16:20 2000 UTC (24 years, 4 months ago) by maekawa
Branch: GNUPLOT
CVS Tags: maekawa-ipv6, VERSION_3_7_1, RELEASE_20000124, RELEASE_1_2_2, RELEASE_1_2_1, RELEASE_1_1_3, RELEASE_1_1_2
Changes since 1.1.1.1: +1 -1 lines

Import gnuplot 3.7.1

/*
 * $Id: cgi.trm,v 1.7 1998/11/25 21:03:25 lhecking Exp $
 *
 */

/* GNUPLOT - cgi.trm */
/*
 * Copyright (C) 1990 - 1993 Ronald Florence
 *
 * Permission is hereby granted for unlimited non-commercial
 * use of this code, on condition that the copyright
 * notices are left intact and any modifications to the source
 * code are noted as such.  No warranty of any kind is implied
 * or granted for this material.
 *
 * This file is included by ../term.h.
 *
 * This terminal driver supports SCO CGI drivers
 *
 * AUTHOR
 *   Ronald Florence <ron@mlfarm.com>
 */

/*
 * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
 */

#include "driver.h"

#ifdef TERM_REGISTER
register_term(cgi)
register_term(hcgi)
#endif

#ifdef TERM_PROTO
TERM_PUBLIC void CGI_init __PROTO((void));
TERM_PUBLIC void HCGI_init __PROTO((void));
TERM_PUBLIC void CGI_graphics __PROTO((void));
TERM_PUBLIC void CGI_text __PROTO((void));
TERM_PUBLIC void CGI_reset __PROTO((void));
TERM_PUBLIC void CGI_move __PROTO((unsigned int x, unsigned int y));
TERM_PUBLIC void CGI_vector __PROTO((unsigned int x, unsigned int y));
TERM_PUBLIC void CGI_linetype __PROTO((int linetype));
TERM_PUBLIC void CGI_put_text __PROTO((unsigned int x, unsigned int y, char *str));
TERM_PUBLIC int CGI_text_angle __PROTO((int ang));
TERM_PUBLIC int CGI_justify_text __PROTO((enum JUSTIFY mode));
TERM_PUBLIC void CGI_point __PROTO((unsigned int x, unsigned int y, int num));
#define CGI_XMAX	32767
#define CGI_YMAX	32767
#define CGI_VTIC	(CGI_YMAX / 75)
#define CGI_HTIC	term->h_tic
#define CGI_VCHAR	term->v_char
#define CGI_HCHAR	term->h_char
#endif

#ifndef TERM_PROTO_ONLY
#ifdef TERM_BODY

#ifdef VGA_MONO
static short rgb[16][3] =
{
    0, 0, 0,			/* Black        */
    1000, 1000, 1000,		/* White        */
    800, 800, 0,		/* Red          */
    0, 600, 0,			/* Green        */
    0, 800, 800,		/* Blue         */
    1000, 1000, 400,		/* Yellow       */
    0, 600, 600,		/* Cyan         */
    600, 600, 600,		/* Magenta      */
    800, 800, 0,		/* Brown        */
    600, 600, 600,		/* Lt. Grey     */
    400, 600, 400,		/* Dark Grey    */
    400, 600, 1000,		/* Lt. Blue     */
    400, 1000, 400,		/* Lt Green     */
    400, 1000, 1000,		/* Lt Cyan      */
    1000, 600, 400,		/* Lt Red       */
    600, 600, 1000		/* Lt Magenta   */
};
#endif

#define CRT		(gout[45] == 0)
#define CGICOLORS	gout[13]
#define CGILINES	gout[6]
#define CGIROTATES	gout[36]
#define CGITEXTALIGN	gout[48]

static short gout[66];
static short cgidev;
static short vect[4];
static short gin[19] =
{
    0,				/* default aspect ratio */
    1,				/* solid line */
    1,				/* line color */
    1,				/* marker type . */
    1,				/* marker color */
    1,				/* graphics text font */
    1,				/* graphics text color */
    0,				/* fill interior style */
    0,				/* fill style index */
    1,				/* fill color index */
    1				/* prompt for paper changes */
};

char *cgidriver, *getenv();


TERM_PUBLIC void CGI_init()
{
    if (getenv(cgidriver = "CGIDISP") == NULL)
	HCGI_init();
}


TERM_PUBLIC void HCGI_init()
{
    if (getenv(cgidriver = "CGIPRNT") == NULL)
	int_error("no CGI driver", NO_CARET);
}


TERM_PUBLIC void CGI_graphics()
{
    int i, aspect;
    char *s;
    short font_cap[9];
    char err_str[80];

    if ((s = getenv("ASPECT")) != NULL && (aspect = atoi(s)) >= 0 && aspect <= 3)
	gin[0] = aspect;
    for (i = 0; cgidriver[i]; i++)
	gin[11 + i] = cgidriver[i];
    gin[18] = ' ';

    if (v_opnwk(gin, &cgidev, gout) < 0) {
	sprintf(err_str, "CGI error %d opening %s", -vq_error(), cgidriver);
	int_error(err_str, NO_CARET);
    }
    vqt_representation(cgidev, 9, font_cap);
    CGI_VCHAR = font_cap[8] * 3 / 2;
    CGI_HCHAR = font_cap[7];
    CGI_HTIC = CGI_VTIC * ((double) gout[1] / (double) gout[4]) /
	((double) gout[0] / (double) gout[3]);
#ifdef VGA_MONO
    if (CGICOLORS > 2)
	vsc_table(cgidev, 0, CGICOLORS, rgb);
#endif
}


TERM_PUBLIC void CGI_text()
{
    if (CRT) {
	short ptin[2];
	char strin[2];

	ptin[0] = 0;
	ptin[1] = 0;
	vrq_string(cgidev, 1, 0, ptin, strin);
    }
    v_clswk(cgidev);
}


TERM_PUBLIC void CGI_reset()
{
}


TERM_PUBLIC void CGI_move(x, y)
unsigned int x, y;
{
    vect[0] = x;
    vect[1] = y;
}

TERM_PUBLIC void CGI_vector(x, y)
unsigned int x, y;
{
    vect[2] = x;
    vect[3] = y;
    v_pline(cgidev, 2, vect);
    vect[0] = x;
    vect[1] = y;
}


TERM_PUBLIC void CGI_linetype(linetype)
int linetype;
{
    short lcolor;

    if (CGICOLORS > 2) {
	lcolor = (linetype + 2) % CGICOLORS + 1;
	vsl_color(cgidev, lcolor);
	vsm_color(cgidev, lcolor);
    }
    vsl_type(cgidev, (linetype < 1) ? 1 : (linetype % CGILINES) + 1);
}


TERM_PUBLIC void CGI_put_text(x, y, str)
unsigned int x, y;
char *str;
{
    v_gtext(cgidev, (short) x, (short) y, str);
}


TERM_PUBLIC CGI_text_angle(ang)
int ang;
{
    if (!CGIROTATES)
	return FALSE;
    /* angles are 1/10 degree ccw */
    vst_rotation(cgidev, (ang) ? 900 : 0);
    return TRUE;
}


TERM_PUBLIC CGI_justify_text(mode)
enum JUSTIFY mode;
{
    short hor_in, hor_out, vert_out;

    if (!CGITEXTALIGN)
	return FALSE;

    switch (mode) {
    case LEFT:
	hor_in = 0;
	break;
    case CENTRE:
	hor_in = 1;
	break;
    case RIGHT:
	hor_in = 2;
	break;
    }
    vst_alignment(cgidev, hor_in, 1, &hor_out, &vert_out);
    return TRUE;
}


#define POINT_TYPES 6

TERM_PUBLIC void CGI_point(x, y, num)
unsigned int x, y;
int num;
{
    short point[2];
    static short cgimarker[POINT_TYPES] = { 1, 2, 6, 4, 5, 3 };
    /* .  +  <> [] X  * */
    if (num < 0) {
	CGI_move(x, y);
	CGI_vector(x, y);
    } else {
	vsm_type(cgidev, cgimarker[num % POINT_TYPES]);
	point[0] = x;
	point[1] = y;
	v_pmarker(cgidev, 1, point);
    }
}

#endif /* TERM_BODY */

#ifdef TERM_TABLE

TERM_TABLE_START(cgi_driver)
    "cgi", "SCO CGI drivers (requires CGIDISP or CGIPRNT env variable)",
    CGI_XMAX, CGI_YMAX, 0, 0,
    CGI_VTIC, 0, options_null, CGI_init, CGI_reset,
    CGI_text, null_scale, CGI_graphics, CGI_move, CGI_vector,
    CGI_linetype, CGI_put_text, CGI_text_angle,
    CGI_justify_text, CGI_point, do_arrow, set_font_null
TERM_TABLE_END(cgi_driver)

#undef LAST_TERM
#define LAST_TERM cgi_driver

TERM_TABLE_START(hcgi_driver)
    "hcgi", "SCO CGI drivers (hardcopy, requires CGIPRNT env variable)",
    CGI_XMAX, CGI_YMAX, 0, 0,
    CGI_VTIC, 0, options_null, HCGI_init, CGI_reset,
    CGI_text, null_scale, CGI_graphics, CGI_move, CGI_vector,
    CGI_linetype, CGI_put_text, CGI_text_angle,
    CGI_justify_text, CGI_point, do_arrow, set_font_null
TERM_TABLE_END(hcgi_driver)

#undef LAST_TERM
#define LAST_TERM hcgi_driver

#endif /* TERM_TABLE */
#endif /* TERM_PROTO_ONLY */

#ifdef TERM_HELP
START_HELP(cgi)
"1 cgi",
"?commands set terminal cgi",
"?set terminal cgi",
"?set term cgi",
"?terminal cgi",
"?term cgi",
"?cgi",
"?commands set terminal hcgi",
"?set terminal hcgi",
"?set term hcgi",
"?terminal hcgi",
"?term hcgi",
"?hcgi",
" The `cgi` and `hcgi` terminal drivers support SCO CGI drivers.  `hcgi` is for",
" printers; the environment variable CGIPRNT must be set.  `cgi` may be used",
" for either a display or hardcopy; if the environment variable CGIDISP is set,",
" then that display is used.  Otherwise CGIPRNT is used.",
"",
" These terminals have no options."
END_HELP(cgi)
#endif