/* prototypes for this file are in cgi.trm-proto */ /* GNUPLOT - cgi.trm */ /* * Copyright (C) 1990 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.c. * * This terminal driver supports SCO CGI drivers * * AUTHOR * Ronald Florence */ #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 CGI_XMAX 32767 #define CGI_YMAX 32767 #define CGI_VTIC (CGI_YMAX / 75) #define CGI_HTIC term_tbl[term].h_tic #define CGI_VCHAR term_tbl[term].v_char #define CGI_HCHAR term_tbl[term].h_char #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 */ }; int CGI_init(void) { if (getenv(cgidriver = "CGIDISP") == NULL) HCGI_init(); } int HCGI_init(void) { if (getenv(cgidriver = "CGIPRNT") == NULL) int_error("no CGI driver", NO_CARET); } int CGI_graphics(void) { 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 } int CGI_text(void) { if (CRT) { short ptin[2]; char strin[2]; ptin[0] = 0; ptin[1] = 0; vrq_string(cgidev, 1, 0, ptin, strin); } v_clswk(cgidev); } int CGI_reset(void) { } int CGI_move(int x, int y) { vect[0] = x; vect[1] = y; } int CGI_vector(int x, int y) { vect[2] = x; vect[3] = y; v_pline(cgidev, 2, vect); vect[0] = x; vect[1] = y; } int CGI_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); } int CGI_put_text(int x, int y, char *str) { v_gtext(cgidev, (short) x, (short) y, str); } int CGI_text_angle(?2) { if (!CGIROTATES) return FALSE; /* angles are 1/10 degree ccw */ vst_rotation(cgidev, (ang) ? 900 : 0); return TRUE; } int CGI_justify_text(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 int CGI_point(int x, int 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); } }