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

Annotation of OpenXM_contrib/gnuplot/term/ggi.trm, Revision 1.1

1.1     ! ohara       1: /*
        !             2:  * $Id: ggi.trm,v 1.1.6.1 2000/10/20 18:41:59 lhecking Exp $
        !             3:  *
        !             4:  */
        !             5:
        !             6: /* GNUPLOT - ggi.trm */
        !             7:
        !             8: /*[
        !             9:  * Copyright 1986 - 1993, 1998   Thomas Williams, Colin Kelley
        !            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:  *   General Graphics Interface
        !            43:  *
        !            44:  * AUTHOR
        !            45:  *  Cesar Crusius <crusius@leland.stanford.edu>
        !            46:  *
        !            47:  * See also: http://www.ggi-project.org/
        !            48:  *
        !            49:  * send your comments or suggestions to (info-gnuplot@dartmouth.edu).
        !            50:  */
        !            51:
        !            52: #include "driver.h"
        !            53: #ifdef TERM_REGISTER
        !            54: register_term(ggi)
        !            55: #endif
        !            56:
        !            57: #ifdef TERM_PROTO
        !            58: TERM_PUBLIC void GGI_graphics __PROTO((void));
        !            59: TERM_PUBLIC void GGI_init __PROTO((void)); /* Done. */
        !            60: TERM_PUBLIC void GGI_linetype __PROTO((int));
        !            61: TERM_PUBLIC void GGI_move __PROTO((unsigned int,unsigned int));
        !            62: TERM_PUBLIC void GGI_options __PROTO((void)); /* Done. */
        !            63: TERM_PUBLIC void GGI_put_text __PROTO((unsigned int,unsigned int,char*));
        !            64: TERM_PUBLIC void GGI_reset __PROTO((void)); /* Done. */
        !            65: TERM_PUBLIC void GGI_text __PROTO((void));
        !            66: TERM_PUBLIC void GGI_vector __PROTO((unsigned int,unsigned int));
        !            67: #define GOT_GGI_PROTO
        !            68: #endif
        !            69:
        !            70: #define GGI_XMAX 800
        !            71: #define GGI_YMAX 600
        !            72: #define GGI_VCHAR 8
        !            73: #define GGI_HCHAR 8
        !            74: #define GGI_VTIC 8
        !            75: #define GGI_HTIC 8
        !            76:
        !            77: #ifndef TERM_PROTO_ONLY
        !            78: #ifdef TERM_BODY
        !            79:
        !            80: #include <ggi/ggi.h>
        !            81: #include <ggi/wmh.h>
        !            82:
        !            83: /* First to some global variables
        !            84:  *
        !            85:  * GGIvisual is our 'piece of paper.'
        !            86:  * GGIborderColor and axixColor have the obvious meanings.
        !            87:  * GGIcolors are the colors for linestyles 0 and up.
        !            88:  * GGImap is for initializing colors.
        !            89:  * GGIx,GGIy are the current coordinates.
        !            90:  * GGIxmax,GGIymax are the maximum coordinates in the visual.
        !            91:  */
        !            92: static ggi_visual_t GGIvisual=NULL;
        !            93: static ggi_pixel GGIborderColor;
        !            94: static ggi_pixel GGIaxisColor;
        !            95: static ggi_pixel GGIblack;
        !            96: static ggi_pixel GGIcolors[6];
        !            97: static ggi_color GGImap;
        !            98: static unsigned int GGIx,GGIy;
        !            99: static unsigned int GGIxmax,GGIymax;
        !           100: static unsigned int Xenv;
        !           101:
        !           102: static void init_ggi_driver()
        !           103: {
        !           104:     ggi_pixel GGIwhite,GGIred,GGIgreen,GGIblue,GGIcyan,GGImagenta;
        !           105:     ggi_pixel GGIyellow;
        !           106:     if(GGIvisual==NULL)
        !           107:     {
        !           108:        if(ggiInit()) {}
        !           109:        if(NULL==(GGIvisual=ggiOpen(NULL))) ggiExit();
        !           110:        if(ggiSetSimpleMode(GGIvisual,GGI_AUTO,GGI_AUTO,GGI_AUTO,GT_AUTO)) ggiExit();
        !           111:     }
        !           112:     ggiAddFlags(GGIvisual, GGIFLAG_ASYNC);
        !           113:     GGImap.r=0xFFFF; GGImap.g=0xFFFF; GGImap.b=0xFFFF; GGIwhite=ggiMapColor(GGIvisual,&GGImap);
        !           114:     GGImap.r=0x0000; GGImap.g=0x0000; GGImap.b=0x0000; GGIblack=ggiMapColor(GGIvisual,&GGImap);
        !           115:     GGImap.r=0xFFFF; GGImap.g=0x0000; GGImap.b=0x0000; GGIred=ggiMapColor(GGIvisual,&GGImap);
        !           116:     GGImap.r=0x0000; GGImap.g=0xFFFF; GGImap.b=0x0000; GGIgreen=ggiMapColor(GGIvisual,&GGImap);
        !           117:     GGImap.r=0x0000; GGImap.g=0x0000; GGImap.b=0xFFFF; GGIblue=ggiMapColor(GGIvisual,&GGImap);
        !           118:     GGImap.r=0x0000; GGImap.g=0xFFFF; GGImap.b=0xFFFF; GGIcyan=ggiMapColor(GGIvisual,&GGImap);
        !           119:     GGImap.r=0xFFFF; GGImap.g=0x0000; GGImap.b=0xFFFF; GGImagenta=ggiMapColor(GGIvisual,&GGImap);
        !           120:     GGImap.r=0xFFFF; GGImap.g=0xFFFF; GGImap.b=0x0000; GGIyellow=ggiMapColor(GGIvisual,&GGImap);
        !           121:     GGIborderColor=GGIwhite;
        !           122:     GGIaxisColor=GGIwhite;
        !           123:     GGIcolors[0]=GGIred;
        !           124:     GGIcolors[1]=GGIgreen;
        !           125:     GGIcolors[2]=GGIblue;
        !           126:     GGIcolors[3]=GGImagenta;
        !           127:     GGIcolors[4]=GGIcyan;
        !           128:     GGIcolors[5]=GGIyellow;
        !           129: }
        !           130:
        !           131: /* Called begore a graphic is displayed */
        !           132: TERM_PUBLIC void GGI_graphics()
        !           133: {
        !           134:     if(!Xenv)
        !           135:     {
        !           136:        init_ggi_driver();
        !           137:        return;
        !           138:     }
        !           139:     ggiSetGCForeground(GGIvisual,GGIblack);
        !           140:     ggiDrawBox(GGIvisual,0,0,GGIxmax,GGIymax);
        !           141: }
        !           142:
        !           143: /*
        !           144:  * init
        !           145:  * -----------------------
        !           146:  * Called only once, when the terminal is initialized. We have to open the visual here because it
        !           147:  * is during 'init' that we have to change the terminal dimensions (xmax, ymax).
        !           148:  */
        !           149: TERM_PUBLIC void GGI_init()
        !           150: {
        !           151:     ggi_mode GGImode;
        !           152:     if(ggiInit()) { }
        !           153:     if(NULL==(GGIvisual=ggiOpen(NULL))) ggiExit();
        !           154:     if(ggiSetSimpleMode(GGIvisual,GGI_AUTO,GGI_AUTO,GGI_AUTO,GT_AUTO)) ggiExit();
        !           155:     ggiGetMode(GGIvisual,&GGImode);
        !           156:     term->xmax=GGImode.virt.x;
        !           157:     term->ymax=GGImode.virt.y;
        !           158:     GGIxmax=term->xmax-1;
        !           159:     GGIymax=term->ymax-1;
        !           160:     Xenv=!ggiWmhInit();
        !           161:     if(!(Xenv=!ggiWmhAttach(GGIvisual))) ggiWmhDetach(GGIvisual);
        !           162:     else Xenv=!ggiWmhSetTitle(GGIvisual,"GGI Gnuplot Driver");
        !           163:     if(!Xenv)
        !           164:     {
        !           165:        ggiWmhDetach(GGIvisual);
        !           166:        ggiWmhExit();
        !           167:        ggiClose(GGIvisual);
        !           168:        GGIvisual=NULL;
        !           169:        ggiExit();
        !           170:     }
        !           171:     else init_ggi_driver();
        !           172: }
        !           173:
        !           174: TERM_PUBLIC void GGI_linetype(linetype)
        !           175: int linetype;
        !           176: {
        !           177:     if(linetype==-2) ggiSetGCForeground(GGIvisual,GGIborderColor);
        !           178:     if(linetype==-1) ggiSetGCForeground(GGIvisual,GGIaxisColor);
        !           179:     if(linetype<0) return;
        !           180:     if(linetype>=6) linetype%=6;
        !           181:     ggiSetGCForeground(GGIvisual,GGIcolors[linetype]);
        !           182: }
        !           183:
        !           184: TERM_PUBLIC void GGI_move(x,y)
        !           185: unsigned int x,y;
        !           186: {
        !           187:     GGIx=x;
        !           188:     GGIy=y;
        !           189: }
        !           190:
        !           191: TERM_PUBLIC void GGI_options() { }
        !           192: /* Called when terminal is terminated */
        !           193: TERM_PUBLIC void GGI_reset()
        !           194: {
        !           195:     if(GGIvisual!=NULL)
        !           196:     {
        !           197:        if(Xenv)
        !           198:        {
        !           199:            ggiWmhDetach(GGIvisual);
        !           200:            ggiWmhExit();
        !           201:        }
        !           202:        ggiClose(GGIvisual);
        !           203:        ggiExit();
        !           204:     }
        !           205: }
        !           206:
        !           207: TERM_PUBLIC void GGI_put_text(x,y,str)
        !           208: unsigned int x,y;
        !           209: char *str;
        !           210: {
        !           211:     ggi_pixel current_foreground;
        !           212:     ggiGetGCForeground(GGIvisual,&current_foreground);
        !           213:     ggiSetGCForeground(GGIvisual,GGIborderColor);
        !           214:     ggiPuts(GGIvisual,x,GGIymax-y-4,str);
        !           215:     ggiSetGCForeground(GGIvisual,current_foreground);
        !           216: }
        !           217:
        !           218: /* Wait for a key to be pressed and exit graphics mode if running in console mode. */
        !           219: TERM_PUBLIC void GGI_text(void)
        !           220: {
        !           221:     ggiFlush(GGIvisual);
        !           222:     if(Xenv) return;
        !           223:     ggiGetc(GGIvisual);
        !           224:     ggiClose(GGIvisual);
        !           225:     ggiExit();
        !           226:     GGIvisual=NULL;
        !           227: }
        !           228:
        !           229: TERM_PUBLIC void GGI_vector(x,y)
        !           230: unsigned int x,y;
        !           231: {
        !           232:     ggiDrawLine(GGIvisual,GGIx,GGIymax-GGIy,x,GGIymax-y);
        !           233:     GGIx=x;
        !           234:     GGIy=y;
        !           235: }
        !           236:
        !           237: #endif /* TERM_BODY */
        !           238:
        !           239: #ifdef TERM_TABLE
        !           240:
        !           241: TERM_TABLE_START(ggi_driver)
        !           242:     "ggi", "GGI target",
        !           243:     GGI_XMAX, GGI_YMAX, GGI_VCHAR, GGI_HCHAR, GGI_VTIC, GGI_HTIC,
        !           244:     GGI_options, GGI_init, GGI_reset, GGI_text,
        !           245:     null_scale, GGI_graphics, GGI_move, GGI_vector,
        !           246:     GGI_linetype, GGI_put_text,
        !           247:     0, /* angle */
        !           248:     0, /* justify text */
        !           249:     0, /* point */
        !           250:     0, /* arrow */
        !           251:     0, /* set_font */
        !           252:     0, /* set_pointsize */
        !           253:     0, /* flags */
        !           254:     0, /* suspend */
        !           255:     0, /* resume */
        !           256:     0, /* fillbox */
        !           257:     0 /* linewidth */
        !           258: TERM_TABLE_END(ggi_driver)
        !           259:
        !           260: #endif /* TERM_TABLE */
        !           261: #endif /* TERM_PROTO_ONLY */
        !           262:
        !           263: #ifdef TERM_HELP
        !           264: START_HELP(ggi)
        !           265: "1 ggi",
        !           266: "?set terminal ggi",
        !           267: "?ggi",
        !           268: " The GGI terminal generates output to a GGI target."
        !           269: END_HELP(ggi)
        !           270: #endif

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