Artifact 8e80dc423e144a1d21c563333ab5bba9400701c33207e68629370bb5204cbdd5:
- File
r34.1/plot/term/cgi.trm
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 4490) [annotate] [blame] [check-ins using] [more...]
/* * $Id: cgi.trm,v 3.26 92/03/24 22:34:47 woo Exp Locker: woo $ */ /* GNUPLOT - cgi.trm */ /* * Copyright (C) 1990, 1991, 1992 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 <ron@mlfarm.com> */ #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 */ }; char *cgidriver, *getenv(); CGI_init() { if (getenv(cgidriver = "CGIDISP") == NULL) HCGI_init(); } HCGI_init() { if (getenv(cgidriver = "CGIPRNT") == NULL) int_error("no CGI driver", NO_CARET); } 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 } 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); } CGI_reset() { } CGI_move(x, y) int x, y; { vect[0] = x; vect[1] = y; } CGI_vector(x, y) int x, y; { vect[2] = x; vect[3] = y; v_pline(cgidev, 2, vect); vect[0] = x; vect[1] = y; } 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); } CGI_put_text(x, y, str) int x, y; char *str; { v_gtext(cgidev, (short) x, (short) y, str); } CGI_text_angle(ang) int ang; { if (!CGIROTATES) return FALSE; /* angles are 1/10 degree ccw */ vst_rotation(cgidev, (ang) ? 900 : 0); return TRUE; } 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 CGI_point(x,y,num) int x, y, 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); } }