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

Annotation of OpenXM_contrib/gnuplot/term/cgi.trm, Revision 1.1.1.2

1.1       maekawa     1: /*
1.1.1.2 ! maekawa     2:  * $Id: cgi.trm,v 1.7 1998/11/25 21:03:25 lhecking Exp $
1.1       maekawa     3:  *
                      4:  */
                      5:
                      6: /* GNUPLOT - cgi.trm */
                      7: /*
                      8:  * Copyright (C) 1990 - 1993 Ronald Florence
                      9:  *
                     10:  * Permission is hereby granted for unlimited non-commercial
                     11:  * use of this code, on condition that the copyright
                     12:  * notices are left intact and any modifications to the source
                     13:  * code are noted as such.  No warranty of any kind is implied
                     14:  * or granted for this material.
                     15:  *
                     16:  * This file is included by ../term.h.
                     17:  *
                     18:  * This terminal driver supports SCO CGI drivers
                     19:  *
                     20:  * AUTHOR
                     21:  *   Ronald Florence <ron@mlfarm.com>
                     22:  */
                     23:
                     24: /*
                     25:  * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
                     26:  */
                     27:
                     28: #include "driver.h"
                     29:
                     30: #ifdef TERM_REGISTER
                     31: register_term(cgi)
                     32: register_term(hcgi)
                     33: #endif
                     34:
                     35: #ifdef TERM_PROTO
                     36: TERM_PUBLIC void CGI_init __PROTO((void));
                     37: TERM_PUBLIC void HCGI_init __PROTO((void));
                     38: TERM_PUBLIC void CGI_graphics __PROTO((void));
                     39: TERM_PUBLIC void CGI_text __PROTO((void));
                     40: TERM_PUBLIC void CGI_reset __PROTO((void));
                     41: TERM_PUBLIC void CGI_move __PROTO((unsigned int x, unsigned int y));
                     42: TERM_PUBLIC void CGI_vector __PROTO((unsigned int x, unsigned int y));
                     43: TERM_PUBLIC void CGI_linetype __PROTO((int linetype));
                     44: TERM_PUBLIC void CGI_put_text __PROTO((unsigned int x, unsigned int y, char *str));
                     45: TERM_PUBLIC int CGI_text_angle __PROTO((int ang));
                     46: TERM_PUBLIC int CGI_justify_text __PROTO((enum JUSTIFY mode));
                     47: TERM_PUBLIC void CGI_point __PROTO((unsigned int x, unsigned int y, int num));
                     48: #define CGI_XMAX       32767
                     49: #define CGI_YMAX       32767
                     50: #define CGI_VTIC       (CGI_YMAX / 75)
                     51: #define CGI_HTIC       term->h_tic
                     52: #define CGI_VCHAR      term->v_char
                     53: #define CGI_HCHAR      term->h_char
                     54: #endif
                     55:
                     56: #ifndef TERM_PROTO_ONLY
                     57: #ifdef TERM_BODY
                     58:
                     59: #ifdef VGA_MONO
                     60: static short rgb[16][3] =
                     61: {
                     62:     0, 0, 0,                   /* Black        */
                     63:     1000, 1000, 1000,          /* White        */
                     64:     800, 800, 0,               /* Red          */
                     65:     0, 600, 0,                 /* Green        */
                     66:     0, 800, 800,               /* Blue         */
                     67:     1000, 1000, 400,           /* Yellow       */
                     68:     0, 600, 600,               /* Cyan         */
                     69:     600, 600, 600,             /* Magenta      */
                     70:     800, 800, 0,               /* Brown        */
                     71:     600, 600, 600,             /* Lt. Grey     */
                     72:     400, 600, 400,             /* Dark Grey    */
                     73:     400, 600, 1000,            /* Lt. Blue     */
                     74:     400, 1000, 400,            /* Lt Green     */
                     75:     400, 1000, 1000,           /* Lt Cyan      */
                     76:     1000, 600, 400,            /* Lt Red       */
                     77:     600, 600, 1000             /* Lt Magenta   */
                     78: };
                     79: #endif
                     80:
                     81: #define CRT            (gout[45] == 0)
                     82: #define CGICOLORS      gout[13]
                     83: #define CGILINES       gout[6]
                     84: #define CGIROTATES     gout[36]
                     85: #define CGITEXTALIGN   gout[48]
                     86:
                     87: static short gout[66];
                     88: static short cgidev;
                     89: static short vect[4];
                     90: static short gin[19] =
                     91: {
                     92:     0,                         /* default aspect ratio */
                     93:     1,                         /* solid line */
                     94:     1,                         /* line color */
                     95:     1,                         /* marker type . */
                     96:     1,                         /* marker color */
                     97:     1,                         /* graphics text font */
                     98:     1,                         /* graphics text color */
                     99:     0,                         /* fill interior style */
                    100:     0,                         /* fill style index */
                    101:     1,                         /* fill color index */
                    102:     1                          /* prompt for paper changes */
                    103: };
                    104:
                    105: char *cgidriver, *getenv();
                    106:
                    107:
                    108: TERM_PUBLIC void CGI_init()
                    109: {
                    110:     if (getenv(cgidriver = "CGIDISP") == NULL)
                    111:        HCGI_init();
                    112: }
                    113:
                    114:
                    115: TERM_PUBLIC void HCGI_init()
                    116: {
                    117:     if (getenv(cgidriver = "CGIPRNT") == NULL)
                    118:        int_error("no CGI driver", NO_CARET);
                    119: }
                    120:
                    121:
                    122: TERM_PUBLIC void CGI_graphics()
                    123: {
                    124:     int i, aspect;
                    125:     char *s;
                    126:     short font_cap[9];
                    127:     char err_str[80];
                    128:
                    129:     if ((s = getenv("ASPECT")) != NULL && (aspect = atoi(s)) >= 0 && aspect <= 3)
                    130:        gin[0] = aspect;
                    131:     for (i = 0; cgidriver[i]; i++)
                    132:        gin[11 + i] = cgidriver[i];
                    133:     gin[18] = ' ';
                    134:
                    135:     if (v_opnwk(gin, &cgidev, gout) < 0) {
                    136:        sprintf(err_str, "CGI error %d opening %s", -vq_error(), cgidriver);
                    137:        int_error(err_str, NO_CARET);
                    138:     }
                    139:     vqt_representation(cgidev, 9, font_cap);
                    140:     CGI_VCHAR = font_cap[8] * 3 / 2;
                    141:     CGI_HCHAR = font_cap[7];
                    142:     CGI_HTIC = CGI_VTIC * ((double) gout[1] / (double) gout[4]) /
                    143:        ((double) gout[0] / (double) gout[3]);
                    144: #ifdef VGA_MONO
                    145:     if (CGICOLORS > 2)
                    146:        vsc_table(cgidev, 0, CGICOLORS, rgb);
                    147: #endif
                    148: }
                    149:
                    150:
                    151: TERM_PUBLIC void CGI_text()
                    152: {
                    153:     if (CRT) {
                    154:        short ptin[2];
                    155:        char strin[2];
                    156:
                    157:        ptin[0] = 0;
                    158:        ptin[1] = 0;
                    159:        vrq_string(cgidev, 1, 0, ptin, strin);
                    160:     }
                    161:     v_clswk(cgidev);
                    162: }
                    163:
                    164:
                    165: TERM_PUBLIC void CGI_reset()
                    166: {
                    167: }
                    168:
                    169:
                    170: TERM_PUBLIC void CGI_move(x, y)
                    171: unsigned int x, y;
                    172: {
                    173:     vect[0] = x;
                    174:     vect[1] = y;
                    175: }
                    176:
                    177: TERM_PUBLIC void CGI_vector(x, y)
                    178: unsigned int x, y;
                    179: {
                    180:     vect[2] = x;
                    181:     vect[3] = y;
                    182:     v_pline(cgidev, 2, vect);
                    183:     vect[0] = x;
                    184:     vect[1] = y;
                    185: }
                    186:
                    187:
                    188: TERM_PUBLIC void CGI_linetype(linetype)
                    189: int linetype;
                    190: {
                    191:     short lcolor;
                    192:
                    193:     if (CGICOLORS > 2) {
                    194:        lcolor = (linetype + 2) % CGICOLORS + 1;
                    195:        vsl_color(cgidev, lcolor);
                    196:        vsm_color(cgidev, lcolor);
                    197:     }
                    198:     vsl_type(cgidev, (linetype < 1) ? 1 : (linetype % CGILINES) + 1);
                    199: }
                    200:
                    201:
                    202: TERM_PUBLIC void CGI_put_text(x, y, str)
                    203: unsigned int x, y;
                    204: char *str;
                    205: {
                    206:     v_gtext(cgidev, (short) x, (short) y, str);
                    207: }
                    208:
                    209:
                    210: TERM_PUBLIC CGI_text_angle(ang)
                    211: int ang;
                    212: {
                    213:     if (!CGIROTATES)
                    214:        return FALSE;
                    215:     /* angles are 1/10 degree ccw */
                    216:     vst_rotation(cgidev, (ang) ? 900 : 0);
                    217:     return TRUE;
                    218: }
                    219:
                    220:
                    221: TERM_PUBLIC CGI_justify_text(mode)
                    222: enum JUSTIFY mode;
                    223: {
                    224:     short hor_in, hor_out, vert_out;
                    225:
                    226:     if (!CGITEXTALIGN)
                    227:        return FALSE;
                    228:
                    229:     switch (mode) {
                    230:     case LEFT:
                    231:        hor_in = 0;
                    232:        break;
                    233:     case CENTRE:
                    234:        hor_in = 1;
                    235:        break;
                    236:     case RIGHT:
                    237:        hor_in = 2;
                    238:        break;
                    239:     }
                    240:     vst_alignment(cgidev, hor_in, 1, &hor_out, &vert_out);
                    241:     return TRUE;
                    242: }
                    243:
                    244:
                    245: #define POINT_TYPES 6
                    246:
                    247: TERM_PUBLIC void CGI_point(x, y, num)
                    248: unsigned int x, y;
                    249: int num;
                    250: {
                    251:     short point[2];
                    252:     static short cgimarker[POINT_TYPES] = { 1, 2, 6, 4, 5, 3 };
                    253:     /* .  +  <> [] X  * */
                    254:     if (num < 0) {
                    255:        CGI_move(x, y);
                    256:        CGI_vector(x, y);
                    257:     } else {
                    258:        vsm_type(cgidev, cgimarker[num % POINT_TYPES]);
                    259:        point[0] = x;
                    260:        point[1] = y;
                    261:        v_pmarker(cgidev, 1, point);
                    262:     }
                    263: }
                    264:
                    265: #endif /* TERM_BODY */
                    266:
                    267: #ifdef TERM_TABLE
                    268:
                    269: TERM_TABLE_START(cgi_driver)
                    270:     "cgi", "SCO CGI drivers (requires CGIDISP or CGIPRNT env variable)",
                    271:     CGI_XMAX, CGI_YMAX, 0, 0,
                    272:     CGI_VTIC, 0, options_null, CGI_init, CGI_reset,
                    273:     CGI_text, null_scale, CGI_graphics, CGI_move, CGI_vector,
                    274:     CGI_linetype, CGI_put_text, CGI_text_angle,
                    275:     CGI_justify_text, CGI_point, do_arrow, set_font_null
                    276: TERM_TABLE_END(cgi_driver)
                    277:
                    278: #undef LAST_TERM
                    279: #define LAST_TERM cgi_driver
                    280:
                    281: TERM_TABLE_START(hcgi_driver)
                    282:     "hcgi", "SCO CGI drivers (hardcopy, requires CGIPRNT env variable)",
                    283:     CGI_XMAX, CGI_YMAX, 0, 0,
                    284:     CGI_VTIC, 0, options_null, HCGI_init, CGI_reset,
                    285:     CGI_text, null_scale, CGI_graphics, CGI_move, CGI_vector,
                    286:     CGI_linetype, CGI_put_text, CGI_text_angle,
                    287:     CGI_justify_text, CGI_point, do_arrow, set_font_null
                    288: TERM_TABLE_END(hcgi_driver)
                    289:
                    290: #undef LAST_TERM
                    291: #define LAST_TERM hcgi_driver
                    292:
                    293: #endif /* TERM_TABLE */
                    294: #endif /* TERM_PROTO_ONLY */
                    295:
                    296: #ifdef TERM_HELP
                    297: START_HELP(cgi)
                    298: "1 cgi",
                    299: "?commands set terminal cgi",
                    300: "?set terminal cgi",
                    301: "?set term cgi",
                    302: "?terminal cgi",
                    303: "?term cgi",
                    304: "?cgi",
                    305: "?commands set terminal hcgi",
                    306: "?set terminal hcgi",
                    307: "?set term hcgi",
                    308: "?terminal hcgi",
                    309: "?term hcgi",
                    310: "?hcgi",
                    311: " The `cgi` and `hcgi` terminal drivers support SCO CGI drivers.  `hcgi` is for",
                    312: " printers; the environment variable CGIPRNT must be set.  `cgi` may be used",
                    313: " for either a display or hardcopy; if the environment variable CGIDISP is set,",
                    314: " then that display is used.  Otherwise CGIPRNT is used.",
                    315: "",
                    316: " These terminals have no options."
                    317: END_HELP(cgi)
                    318: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>