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

Annotation of OpenXM_contrib/gnuplot/term/regis.trm, Revision 1.1.1.1

1.1       maekawa     1: /*
                      2:  * $Id: regis.trm,v 1.18 1998/04/14 00:18:06 drd Exp $
                      3:  *
                      4:  */
                      5:
                      6: /* GNUPLOT - regis.trm */
                      7:
                      8: /*[
                      9:  * Copyright 1990 - 1993, 1998
                     10:  *
                     11:  * Permission to use, copy, and distribute this software and its
                     12:  * documentation for any purpose with or without fee is hereby granted,
                     13:  * provided that the above copyright notice appear in all copies and
                     14:  * that both that copyright notice and this permission notice appear
                     15:  * in supporting documentation.
                     16:  *
                     17:  * Permission to modify the software is granted, but not the right to
                     18:  * distribute the complete modified source code.  Modifications are to
                     19:  * be distributed as patches to the released version.  Permission to
                     20:  * distribute binaries produced by compiling modified sources is granted,
                     21:  * provided you
                     22:  *   1. distribute the corresponding source modifications from the
                     23:  *    released version in the form of a patch file along with the binaries,
                     24:  *   2. add special version identification to distinguish your version
                     25:  *    in addition to the base release version number,
                     26:  *   3. provide your name and address as the primary contact for the
                     27:  *    support of your modified version, and
                     28:  *   4. retain our contact information in regard to use of the base
                     29:  *    software.
                     30:  * Permission to distribute the released version of the source code along
                     31:  * with corresponding source modifications in the form of a patch file is
                     32:  * granted with same provisions 2 through 4 for binary distributions.
                     33:  *
                     34:  * This software is provided "as is" without express or implied warranty
                     35:  * to the extent permitted by applicable law.
                     36: ]*/
                     37:
                     38: /*
                     39:  * This file is included by ../term.c.
                     40:  *
                     41:  * This terminal driver supports:
                     42:  *  REGIS devices
                     43:  *
                     44:  * AUTHORS
                     45:  *  Colin Kelley, Thomas Williams
                     46:  *
                     47:  * send your comments or suggestions to (info-gnuplot@dartmouth.edu).
                     48:  *
                     49:  */
                     50:
                     51: #include "driver.h"
                     52:
                     53: #ifdef TERM_REGISTER
                     54: register_term(regis)
                     55: #endif
                     56:
                     57:
                     58: #ifdef TERM_PROTO
                     59: TERM_PUBLIC void REGISinit __PROTO((void));
                     60: TERM_PUBLIC void REGISgraphics __PROTO((void));
                     61: TERM_PUBLIC void REGISinit __PROTO((void));
                     62: TERM_PUBLIC void REGISgraphics __PROTO((void));
                     63: TERM_PUBLIC void REGIStext __PROTO((void));
                     64: TERM_PUBLIC void REGISlinetype __PROTO((int linetype));
                     65: TERM_PUBLIC void REGISmove __PROTO((unsigned int x, unsigned int y));
                     66: TERM_PUBLIC void REGISvector __PROTO((unsigned int x, unsigned int y));
                     67: TERM_PUBLIC void REGISput_text __PROTO((unsigned int x, unsigned int y, char *str));
                     68: TERM_PUBLIC int REGIStext_angle __PROTO((int ang));
                     69: TERM_PUBLIC void REGISreset __PROTO((void));
                     70: TERM_PUBLIC void REGISoptions __PROTO((void));
                     71:
                     72: #define REGISXMAX 800
                     73: #define REGISYMAX 440
                     74:
                     75: #define REGISXLAST (REGISXMAX - 1)
                     76: #define REGISYLAST (REGISYMAX - 1)
                     77:
                     78: #define REGISVCHAR             20
                     79: #define REGISHCHAR             9
                     80: #define REGISVTIC              8
                     81: #define REGISHTIC              6
                     82:
                     83: /* is defined in plot.h
                     84: #define TRUE 1
                     85: #define FALSE 0
                     86: */
                     87: #endif
                     88:
                     89:
                     90:
                     91: #ifndef TERM_PROTO_ONLY
                     92: #ifdef TERM_BODY
                     93:
                     94: static int REGIS16color = FALSE;
                     95:
                     96: static int REGISang = 0;
                     97:
                     98: TERM_PUBLIC void REGISinit()
                     99: {
                    100:     fputs("\033[r\033[24;1H", gpoutfile);
                    101:     /*     1     2
                    102:      * 1. reset scrolling region
                    103:      * 2. locate cursor on bottom line
                    104:      */
                    105: }
                    106:
                    107:
                    108: /* thanks to calmasd!dko (Dan O'Neill) for adding S(E) for vt125s */
                    109: TERM_PUBLIC void REGISgraphics()
                    110: {
                    111:     fputs("\033[2J\033P1pS(C0)S(E)T(A0)\n", gpoutfile);
                    112:     /*     1      2      3    4   5
                    113:      * 1. clear screen
                    114:      * 2. enter ReGIS graphics
                    115:      * 3. turn off graphics diamond cursor
                    116:      * 4. clear graphics screen
                    117:      * 5. character set option.
                    118:      */
                    119:     (void) REGIStext_angle(0); /* select text size and angle */
                    120: }
                    121:
                    122:
                    123: TERM_PUBLIC void REGIStext()
                    124: {
                    125:     fputs("\033\\\033[24;1H", gpoutfile);
                    126:     /*     1    2
                    127:      * 1. Leave ReGIS graphics mode
                    128:      * 2. locate cursor on last line of screen
                    129:      */
                    130: }
                    131:
                    132:
                    133: TERM_PUBLIC void REGISlinetype(linetype)
                    134: int linetype;
                    135: {
                    136:     /* This will change color in order G,R,B,G-dot,R-dot,B-dot */
                    137:
                    138:     static int in_16_map[15 + 2] = { 7, 7, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
                    139:     static int lt_16_map[15 + 2] = { 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
                    140:     static int in_map[9 + 2] = { 2, 2, 3, 2, 1, 3, 2, 1, 3, 2, 1 };
                    141:     static int lt_map[9 + 2] = { 1, 4, 1, 1, 1, 4, 4, 4, 6, 6, 6 };
                    142:
                    143:     if (!REGIS16color) {
                    144:        if (linetype >= 9)
                    145:            linetype %= 9;
                    146:        fprintf(gpoutfile, "W(I%d)\n", in_map[linetype + 2]);
                    147:        fprintf(gpoutfile, "W(P%d)\n", lt_map[linetype + 2]);
                    148:     } else {
                    149:        if (linetype >= 15)
                    150:            linetype %= 15;
                    151:        fprintf(gpoutfile, "W(I%d)\n", in_16_map[linetype + 2]);
                    152:        fprintf(gpoutfile, "W(P%d)\n", lt_16_map[linetype + 2]);
                    153:     }
                    154: }
                    155:
                    156:
                    157:
                    158: /*
                    159: ** The \n was added in the functions below (and above) in order to not cause
                    160: ** a buffer overflow in devices that can't deal with long line lengths.
                    161: ** The DEC vt-340 doesn't need this, but Reflection 4, a vt-340 emulator
                    162: ** for PC's under MS-DOS and Microsoft Windows does need it.
                    163: ** Also needed for DECterm, a vt-340 emulator for use with Motif 1.0
                    164: ** on Open/VMS.
                    165: ** NGB 9/13/93
                    166: */
                    167:
                    168: TERM_PUBLIC void REGISmove(x, y)
                    169: unsigned int x, y;
                    170: {
                    171:     fprintf(gpoutfile, "P[%d,%d]\n", x, REGISYLAST - y);
                    172: }
                    173:
                    174:
                    175: TERM_PUBLIC void REGISvector(x, y)
                    176: unsigned int x, y;
                    177: {
                    178:     fprintf(gpoutfile, "v[]v[%d,%d]\n", x, REGISYLAST - y);
                    179:     /* the initial v[] is needed to get the first pixel plotted */
                    180: }
                    181:
                    182:
                    183: /* put_text and text_angle by rjl */
                    184: TERM_PUBLIC void REGISput_text(x, y, str)
                    185: unsigned int x, y;
                    186: char *str;
                    187: {
                    188:     if (REGISang == 1)
                    189:        REGISmove(x - REGISVCHAR / 2 - 1, y);
                    190:     else
                    191:        REGISmove(x, y + REGISVCHAR / 2 - 1);
                    192:     (void) putc('T', gpoutfile);
                    193:     (void) putc('\'', gpoutfile);
                    194:     while (*str) {
                    195:        (void) putc(*str, gpoutfile);
                    196:        if (*str == '\'')
                    197:            (void) putc('\'', gpoutfile);       /* send out another one */
                    198:        str++;
                    199:     }
                    200:     (void) putc('\'', gpoutfile);
                    201:     (void) putc('\n', gpoutfile);
                    202: }
                    203:
                    204:
                    205: TERM_PUBLIC int REGIStext_angle(ang)
                    206: int ang;
                    207: {
                    208:     REGISang = ang;
                    209:     if (ang == 1)
                    210:        fputs("T(D90,S1)\n", gpoutfile);
                    211:     else
                    212:        fputs("T(D0,S1)\n", gpoutfile);
                    213:     return TRUE;
                    214: }
                    215:
                    216:
                    217: TERM_PUBLIC void REGISreset()
                    218: {
                    219:     fputs("\033[2J\033[24;1H", gpoutfile);
                    220: }
                    221:
                    222: TERM_PUBLIC void REGISoptions()
                    223: {
                    224:     int i = 0;
                    225:     struct value a;
                    226:
                    227:     if (!END_OF_COMMAND) {
                    228:        i = (int) real(const_express(&a));
                    229:     }
                    230:     REGIS16color = (i == 16);
                    231:     sprintf(term_options, "%s", REGIS16color ? "16" : "4");
                    232: }
                    233:
                    234: #endif
                    235:
                    236:
                    237: #ifdef TERM_TABLE
                    238: TERM_TABLE_START(regis_driver)
                    239:     "regis", "REGIS graphics language",
                    240:     REGISXMAX, REGISYMAX, REGISVCHAR, REGISHCHAR,
                    241:     REGISVTIC, REGISHTIC, REGISoptions, REGISinit, REGISreset,
                    242:     REGIStext, null_scale, REGISgraphics, REGISmove, REGISvector,
                    243:     REGISlinetype, REGISput_text, REGIStext_angle,
                    244:     null_justify_text, line_and_point, do_arrow, set_font_null
                    245: TERM_TABLE_END(regis_driver)
                    246:
                    247: #undef LAST_TERM
                    248: #define LAST_TERM regis_driver
                    249: #endif
                    250: #endif /* TERM_PROTO_ONLY */
                    251:
                    252: #ifdef TERM_HELP
                    253: START_HELP(regis)
                    254: "1 regis",
                    255: "?commands set terminal regis",
                    256: "?set terminal regis",
                    257: "?set term regis",
                    258: "?terminal regis",
                    259: "?term regis",
                    260: "?regis",
                    261: " The `regis` terminal device generates output in the REGIS graphics language.",
                    262: " It has the option of using 4 (the default) or 16 colors.",
                    263: "",
                    264: " Syntax:",
                    265: "       set terminal regis {4 | 16}"
                    266: END_HELP(regis)
                    267: #endif

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