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

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

1.1     ! maekawa     1: /*
        !             2:  * $Id: emxvga.trm,v 1.16 1998/04/14 00:17:40 drd Exp $
        !             3:  */
        !             4:
        !             5: /* GNUPLOT - emxvga.trm */
        !             6:
        !             7: /*[
        !             8:  * Copyright 1994, 1998
        !             9:  *
        !            10:  * Permission to use, copy, and distribute this software and its
        !            11:  * documentation for any purpose with or without fee is hereby granted,
        !            12:  * provided that the above copyright notice appear in all copies and
        !            13:  * that both that copyright notice and this permission notice appear
        !            14:  * in supporting documentation.
        !            15:  *
        !            16:  * Permission to modify the software is granted, but not the right to
        !            17:  * distribute the complete modified source code.  Modifications are to
        !            18:  * be distributed as patches to the released version.  Permission to
        !            19:  * distribute binaries produced by compiling modified sources is granted,
        !            20:  * provided you
        !            21:  *   1. distribute the corresponding source modifications from the
        !            22:  *    released version in the form of a patch file along with the binaries,
        !            23:  *   2. add special version identification to distinguish your version
        !            24:  *    in addition to the base release version number,
        !            25:  *   3. provide your name and address as the primary contact for the
        !            26:  *    support of your modified version, and
        !            27:  *   4. retain our contact information in regard to use of the base
        !            28:  *    software.
        !            29:  * Permission to distribute the released version of the source code along
        !            30:  * with corresponding source modifications in the form of a patch file is
        !            31:  * granted with same provisions 2 through 4 for binary distributions.
        !            32:  *
        !            33:  * This software is provided "as is" without express or implied warranty
        !            34:  * to the extent permitted by applicable law.
        !            35: ]*/
        !            36:
        !            37: /*
        !            38:  * This file is included by ../term.c.
        !            39:  *
        !            40:  * This terminal driver supports:
        !            41:  *  SVGA 1024x768x256 for PC's running DOS or OS/2
        !            42:  *
        !            43:  * AUTHOR
        !            44:  *   David J. Liu (liudj0@minerva.cis.yale.edu)
        !            45:  */
        !            46: /*
        !            47:  * Compile with GCC (emx) with VESA and SVGAKIT maintained by
        !            48:  * Johannes Martin (JMARTIN@GOOFY.ZDV.UNI-MAINZ.DE)
        !            49:  * with additions by David J. Liu (liudj0@minerva.cis.yale.edu)
        !            50:  * supports VESA, Trident, Cirrus, ET4000, WD and S3.
        !            51:  */
        !            52: /*
        !            53:  * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
        !            54:  */
        !            55:
        !            56: #include "driver.h"
        !            57:
        !            58: #ifdef TERM_REGISTER
        !            59: #ifdef EMXVESA
        !            60: register_term(vesa)
        !            61: #endif /* EMXVESA */
        !            62: register_term(emxvga)
        !            63: #endif
        !            64:
        !            65: #ifdef TERM_PROTO
        !            66: TERM_PUBLIC void EMXVGA_init __PROTO((void));
        !            67: TERM_PUBLIC void EMXVGA_reset __PROTO((void));
        !            68: TERM_PUBLIC void EMXVGA_text __PROTO((void));
        !            69: TERM_PUBLIC void EMXVGA_graphics __PROTO((void));
        !            70: TERM_PUBLIC void EMXVGA_linetype __PROTO((int));
        !            71: TERM_PUBLIC void EMXVGA_move __PROTO((unsigned int, unsigned int));
        !            72: TERM_PUBLIC void EMXVGA_vector __PROTO((unsigned int, unsigned int));
        !            73: TERM_PUBLIC int EMXVGA_text_angle __PROTO((int));
        !            74: TERM_PUBLIC void EMXVGA_put_text __PROTO((unsigned int, unsigned int, char *));
        !            75: #define EMXVGA_VCHAR 8
        !            76: #define EMXVGA_HCHAR 8
        !            77: #define EMXVGA_VTIC 4
        !            78: #define EMXVGA_HTIC 4
        !            79: #define EMXVGA_XMAX 0          /* These two entries are just place holders. */
        !            80: #define EMXVGA_YMAX 0          /* The actual values will be filled in init. */
        !            81: #ifdef EMXVESA
        !            82: TERM_PUBLIC void EMXVESA_options __PROTO((void));
        !            83: TERM_PUBLIC void EMXVESA_init __PROTO((void));
        !            84: TERM_PUBLIC void EMXVESA_graphics __PROTO((void));
        !            85: TERM_PUBLIC void EMXVESA_text __PROTO((void));
        !            86: TERM_PUBLIC void EMXVESA_reset __PROTO((void));
        !            87: #endif
        !            88: #endif /* TERM_PROTO */
        !            89: #ifndef TERM_PROTO_ONLY
        !            90: #ifdef TERM_BODY
        !            91: /* avoid name clash with graph.h - lets hope that no following
        !            92:  * driver needs these symbols !
        !            93:  */
        !            94: #ifdef RIGHT
        !            95: #undef RIGHT
        !            96: #endif
        !            97: #ifdef DOWN
        !            98: #undef DOWN
        !            99: #endif
        !           100: #include <vesa.h>
        !           101: #include <jmgraph.h>
        !           102: #include <conio.h>             /* for getch()            -SB */
        !           103: #include <stdlib.h>
        !           104: #include <dos.h>
        !           105: /*
        !           106:  * Some versions of graph.h (e.g. jmgraph.h) define RIGHT to be 0
        !           107:  * colliding with enum JUSTIFY. We don't need this define anyway,
        !           108:  * just undef it.                      -SB
        !           109:  */
        !           110: #ifdef RIGHT
        !           111: #undef RIGHT
        !           112: #endif
        !           113: #ifdef DOWN
        !           114: #undef DOWN
        !           115: #endif
        !           116: static int EMXVGA_vmode = G640x480x256;                /* default mode */
        !           117: static int vgacolor[] ={ 7, 8, 2, 3, 4, 5, 9, 14, 12, 15, 13, 10, 11, 1, 6 };
        !           118: static int graphics_on = FALSE;
        !           119: int startx, starty, lasty;
        !           120: int EMXVGA_angle, EMXVGA_color;
        !           121: char *EMXVGA_buf;
        !           122: void emx_getch()
        !           123: {
        !           124:     union REGS reg;
        !           125:     char c;
        !           126:     if (_osmode == OS2_MODE)
        !           127:        VesaGetCharacter(&c);
        !           128:     else {
        !           129:        reg.x.ax = 0x0000;
        !           130:        _int86(0x16, &reg, &reg);
        !           131:        if (reg.h.al == 0) {
        !           132:            reg.x.ax = 0x0000;
        !           133:            _int86(0x16, &reg, &reg);
        !           134:        }
        !           135:     }
        !           136: }
        !           137:
        !           138: /* gstring.c (emx+gcc) -- Copyright (c) 1994 by David J. Liu */
        !           139: unsigned char font[128][8] =
        !           140: {                              /* 8x8 font */
        !           141:     {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
        !           142:     {0x7E, 0x81, 0xA5, 0x81, 0xBD, 0x99, 0x81, 0x7E},
        !           143:     {0x7E, 0xFF, 0xDB, 0xFF, 0xC3, 0xE7, 0xFF, 0x7E},
        !           144:     {0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00},
        !           145:     {0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00},
        !           146:     {0x38, 0x7C, 0x38, 0xFE, 0xFE, 0x92, 0x10, 0x7C},
        !           147:     {0x00, 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x7C},
        !           148:     {0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00},
        !           149:     {0xFF, 0xFF, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0xFF},
        !           150:     {0x00, 0x3C, 0x66, 0x42, 0x42, 0x66, 0x3C, 0x00},
        !           151:     {0xFF, 0xC3, 0x99, 0xBD, 0xBD, 0x99, 0xC3, 0xFF},
        !           152:     {0x0F, 0x07, 0x0F, 0x7D, 0xCC, 0xCC, 0xCC, 0x78},
        !           153:     {0x3C, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18},
        !           154:     {0x3F, 0x33, 0x3F, 0x30, 0x30, 0x70, 0xF0, 0xE0},
        !           155:     {0x7F, 0x63, 0x7F, 0x63, 0x63, 0x67, 0xE6, 0xC0},
        !           156:     {0x99, 0x5A, 0x3C, 0xE7, 0xE7, 0x3C, 0x5A, 0x99},
        !           157:     {0x80, 0xE0, 0xF8, 0xFE, 0xF8, 0xE0, 0x80, 0x00},
        !           158:     {0x02, 0x0E, 0x3E, 0xFE, 0x3E, 0x0E, 0x02, 0x00},
        !           159:     {0x18, 0x3C, 0x7E, 0x18, 0x18, 0x7E, 0x3C, 0x18},
        !           160:     {0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00},
        !           161:     {0x7F, 0xDB, 0xDB, 0x7B, 0x1B, 0x1B, 0x1B, 0x00},
        !           162:     {0x3E, 0x63, 0x38, 0x6C, 0x6C, 0x38, 0x86, 0xFC},
        !           163:     {0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x00},
        !           164:     {0x18, 0x3C, 0x7E, 0x18, 0x7E, 0x3C, 0x18, 0xFF},
        !           165:     {0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x00},
        !           166:     {0x18, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00},
        !           167:     {0x00, 0x18, 0x0C, 0xFE, 0x0C, 0x18, 0x00, 0x00},
        !           168:     {0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00},
        !           169:     {0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xFE, 0x00, 0x00},
        !           170:     {0x00, 0x24, 0x66, 0xFF, 0x66, 0x24, 0x00, 0x00},
        !           171:     {0x00, 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x00, 0x00},
        !           172:     {0x00, 0xFF, 0xFF, 0x7E, 0x3C, 0x18, 0x00, 0x00},
        !           173:     {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
        !           174:     {0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00},
        !           175:     {0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00},
        !           176:     {0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00},
        !           177:     {0x18, 0x7E, 0xC0, 0x7C, 0x06, 0xFC, 0x18, 0x00},
        !           178:     {0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00},
        !           179:     {0x38, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0x76, 0x00},
        !           180:     {0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00},
        !           181:     {0x18, 0x30, 0x60, 0x60, 0x60, 0x30, 0x18, 0x00},
        !           182:     {0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00},
        !           183:     {0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00},
        !           184:     {0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00},
        !           185:     {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30},
        !           186:     {0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00},
        !           187:     {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00},
        !           188:     {0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00},
        !           189:     {0x7C, 0xCE, 0xDE, 0xF6, 0xE6, 0xC6, 0x7C, 0x00},
        !           190:     {0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0xFC, 0x00},
        !           191:     {0x78, 0xCC, 0x0C, 0x38, 0x60, 0xCC, 0xFC, 0x00},
        !           192:     {0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00},
        !           193:     {0x1C, 0x3C, 0x6C, 0xCC, 0xFE, 0x0C, 0x1E, 0x00},
        !           194:     {0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00},
        !           195:     {0x38, 0x60, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00},
        !           196:     {0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00},
        !           197:     {0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00},
        !           198:     {0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0x18, 0x70, 0x00},
        !           199:     {0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00},
        !           200:     {0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30},
        !           201:     {0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00},
        !           202:     {0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00},
        !           203:     {0x60, 0x30, 0x18, 0x0C, 0x18, 0x30, 0x60, 0x00},
        !           204:     {0x3C, 0x66, 0x0C, 0x18, 0x18, 0x00, 0x18, 0x00},
        !           205:     {0x7C, 0xC6, 0xDE, 0xDE, 0xDC, 0xC0, 0x7C, 0x00},
        !           206:     {0x30, 0x78, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0x00},
        !           207:     {0xFC, 0x66, 0x66, 0x7C, 0x66, 0x66, 0xFC, 0x00},
        !           208:     {0x3C, 0x66, 0xC0, 0xC0, 0xC0, 0x66, 0x3C, 0x00},
        !           209:     {0xF8, 0x6C, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00},
        !           210:     {0xFE, 0x62, 0x68, 0x78, 0x68, 0x62, 0xFE, 0x00},
        !           211:     {0xFE, 0x62, 0x68, 0x78, 0x68, 0x60, 0xF0, 0x00},
        !           212:     {0x3C, 0x66, 0xC0, 0xC0, 0xCE, 0x66, 0x3A, 0x00},
        !           213:     {0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00},
        !           214:     {0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00},
        !           215:     {0x1E, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00},
        !           216:     {0xE6, 0x66, 0x6C, 0x78, 0x6C, 0x66, 0xE6, 0x00},
        !           217:     {0xF0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xFE, 0x00},
        !           218:     {0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00},
        !           219:     {0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00},
        !           220:     {0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x00},
        !           221:     {0xFC, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00},
        !           222:     {0x7C, 0xC6, 0xC6, 0xC6, 0xD6, 0x7C, 0x0E, 0x00},
        !           223:     {0xFC, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0xE6, 0x00},
        !           224:     {0x7C, 0xC6, 0xE0, 0x78, 0x0E, 0xC6, 0x7C, 0x00},
        !           225:     {0xFC, 0xB4, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00},
        !           226:     {0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xFC, 0x00},
        !           227:     {0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00},
        !           228:     {0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0x6C, 0x00},
        !           229:     {0xC6, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0xC6, 0x00},
        !           230:     {0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x78, 0x00},
        !           231:     {0xFE, 0xC6, 0x8C, 0x18, 0x32, 0x66, 0xFE, 0x00},
        !           232:     {0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x00},
        !           233:     {0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x02, 0x00},
        !           234:     {0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00},
        !           235:     {0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00},
        !           236:     {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF},
        !           237:     {0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00},
        !           238:     {0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00},
        !           239:     {0xE0, 0x60, 0x60, 0x7C, 0x66, 0x66, 0xDC, 0x00},
        !           240:     {0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00},
        !           241:     {0x1C, 0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0x76, 0x00},
        !           242:     {0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00},
        !           243:     {0x38, 0x6C, 0x64, 0xF0, 0x60, 0x60, 0xF0, 0x00},
        !           244:     {0x00, 0x00, 0x76, 0xCC, 0xCC, 0x7C, 0x0C, 0xF8},
        !           245:     {0xE0, 0x60, 0x6C, 0x76, 0x66, 0x66, 0xE6, 0x00},
        !           246:     {0x30, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00},
        !           247:     {0x0C, 0x00, 0x1C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78},
        !           248:     {0xE0, 0x60, 0x66, 0x6C, 0x78, 0x6C, 0xE6, 0x00},
        !           249:     {0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00},
        !           250:     {0x00, 0x00, 0xCC, 0xFE, 0xFE, 0xD6, 0xD6, 0x00},
        !           251:     {0x00, 0x00, 0xB8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00},
        !           252:     {0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00},
        !           253:     {0x00, 0x00, 0xDC, 0x66, 0x66, 0x7C, 0x60, 0xF0},
        !           254:     {0x00, 0x00, 0x76, 0xCC, 0xCC, 0x7C, 0x0C, 0x1E},
        !           255:     {0x00, 0x00, 0xDC, 0x76, 0x62, 0x60, 0xF0, 0x00},
        !           256:     {0x00, 0x00, 0x7C, 0xC0, 0x70, 0x1C, 0xF8, 0x00},
        !           257:     {0x10, 0x30, 0xFC, 0x30, 0x30, 0x34, 0x18, 0x00},
        !           258:     {0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00},
        !           259:     {0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00},
        !           260:     {0x00, 0x00, 0xC6, 0xC6, 0xD6, 0xFE, 0x6C, 0x00},
        !           261:     {0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00},
        !           262:     {0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0xF8},
        !           263:     {0x00, 0x00, 0xFC, 0x98, 0x30, 0x64, 0xFC, 0x00},
        !           264:     {0x1C, 0x30, 0x30, 0xE0, 0x30, 0x30, 0x1C, 0x00},
        !           265:     {0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00},
        !           266:     {0xE0, 0x30, 0x30, 0x1C, 0x30, 0x30, 0xE0, 0x00},
        !           267:     {0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
        !           268:     {0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0x00}
        !           269: };
        !           270:
        !           271: void g_set(int x, int y, int color);   /* part of SVGA */
        !           272:
        !           273: void g_string(x0, y0, color, angle, s)
        !           274: /* upper left corner of text, color and angle */
        !           275: int x0, y0, color, angle;
        !           276: char *s;
        !           277: {
        !           278:     int i, j, k;
        !           279:     float sa, ca, x, y;
        !           280:     k = 0;
        !           281:     x = 0.5 + x0;
        !           282:     y = 0.5 + y0;
        !           283:     sa = sin(-Pi * angle / 180);
        !           284:     ca = cos(Pi * angle / 180);
        !           285:     while (s[k]) {
        !           286:        for (i = 0; i < 8; i++)
        !           287:            for (j = 0; j < 8; j++)
        !           288:                g_set(x + ca * j - sa * i, y + ca * i + sa * j, (font[(int) s[k]][i] & (1 << (7 - j))) ? color : 0);
        !           289:        k++;
        !           290:        x += ca * 8;
        !           291:        y += sa * 8;
        !           292:     }
        !           293: }
        !           294:
        !           295: /* end of gstring.c */
        !           296:
        !           297: TERM_PUBLIC void EMXVGA_init()
        !           298: {
        !           299:     if (!g_mode(EMXVGA_vmode)) {
        !           300:        fputs("Unable to initiate graphics.\n", stderr);
        !           301:        return;
        !           302:     }
        !           303:     term->xmax = g_xsize;
        !           304:     term->ymax = g_ysize;
        !           305:     lasty = g_ysize - 1;
        !           306: }
        !           307: TERM_PUBLIC void EMXVGA_reset()
        !           308: {
        !           309:     g_mode(GTEXT);
        !           310:     graphics_on = FALSE;
        !           311: }
        !           312: TERM_PUBLIC void EMXVGA_text()
        !           313: {
        !           314:     if (graphics_on) {
        !           315:        emx_getch();
        !           316:        g_mode(GTEXT);
        !           317:        graphics_on = FALSE;
        !           318:     }
        !           319: }
        !           320: TERM_PUBLIC void EMXVGA_graphics()
        !           321: {
        !           322:     if (!graphics_on) {
        !           323:        g_mode(EMXVGA_vmode);
        !           324:        graphics_on = TRUE;
        !           325:     }
        !           326: }
        !           327: TERM_PUBLIC void EMXVGA_linetype(linetype)
        !           328: int linetype;
        !           329: {
        !           330:     EMXVGA_color = vgacolor[(linetype % 13) + 2];
        !           331: }
        !           332: TERM_PUBLIC void EMXVGA_move(x, y)
        !           333: unsigned int x, y;
        !           334: {
        !           335:     startx = x;
        !           336:     starty = y;
        !           337: }
        !           338: TERM_PUBLIC void EMXVGA_vector(x, y)
        !           339: unsigned int x, y;
        !           340: {
        !           341:     g_line(startx, lasty - starty, x, lasty - y, EMXVGA_color);
        !           342:     startx = x;
        !           343:     starty = y;
        !           344: }
        !           345: TERM_PUBLIC int EMXVGA_text_angle(ang)
        !           346: int ang;
        !           347: {
        !           348:     EMXVGA_angle = ang * 90;
        !           349:     return (TRUE);
        !           350: }
        !           351: TERM_PUBLIC void EMXVGA_put_text(x, y, str)
        !           352: unsigned int x, y;
        !           353: char *str;
        !           354: {
        !           355:     g_string(x, lasty - y - 3, EMXVGA_color, EMXVGA_angle, str);
        !           356: }
        !           357: TERM_PUBLIC void EMXVGA_suspend()
        !           358: {
        !           359:     if (EMXVGA_buf)
        !           360:        free(EMXVGA_buf);       /* do this just for safety */
        !           361:     EMXVGA_buf = (char *) malloc(g_memsize);
        !           362:     g_save(EMXVGA_buf);
        !           363:     emx_getch();
        !           364:     g_mode(GTEXT);
        !           365: }
        !           366: TERM_PUBLIC void EMXVGA_resume()
        !           367: {
        !           368:     g_mode(EMXVGA_vmode);
        !           369:     g_restore(EMXVGA_buf);
        !           370:     free(EMXVGA_buf);
        !           371: }
        !           372:
        !           373: #ifdef EMXVESA
        !           374: int emx_vesamode = G640x480x256;
        !           375: int emx_xlast, emx_ylast;
        !           376: TERM_PUBLIC void EMXVESA_options()
        !           377: {
        !           378:     if (!END_OF_COMMAND) {
        !           379:        if (almost_equals(c_token, "d$efault")) {
        !           380:            emx_vesamode = G640x480x256;
        !           381:            c_token++;
        !           382:        }
        !           383:     }
        !           384:     if (!END_OF_COMMAND) {
        !           385:        /* We have a vesa mode specified */
        !           386:        struct value a;
        !           387:        emx_vesamode = (int) real(const_express(&a));
        !           388:     }
        !           389:     sprintf(term_options, "%d", emx_vesamode);
        !           390: }
        !           391: TERM_PUBLIC void EMXVESA_init()
        !           392: {
        !           393:     if (!g_mode(emx_vesamode))
        !           394:        int_error("Couldn't select graphics mode", NO_CARET);
        !           395:     emx_xlast = g_xsize - 1;
        !           396:     term->xmax = emx_xlast + 1;
        !           397:     emx_ylast = g_ysize - 1;
        !           398:     term->ymax = emx_ylast + 1;
        !           399:     g_mode(GTEXT);
        !           400: }
        !           401: TERM_PUBLIC void EMXVESA_graphics()
        !           402: {
        !           403:     g_mode(emx_vesamode);
        !           404: }
        !           405: TERM_PUBLIC void EMXVESA_text()
        !           406: {
        !           407:     int ch;
        !           408:     ch = getch();
        !           409:     g_mode(GTEXT);
        !           410:     if (ch == 3)
        !           411:        int_error("Interrupt", NO_CARET);
        !           412: }
        !           413: TERM_PUBLIC void EMXVESA_reset()
        !           414: {
        !           415: }
        !           416:
        !           417: #endif /* VESA */
        !           418: #endif /* TERM_BODY */
        !           419:
        !           420: #ifdef TERM_TABLE
        !           421: #ifdef EMXVESA
        !           422: TERM_TABLE_START(vesa_driver)
        !           423:     "vesa", "IBM PC/Clone with VESA SVGA graphics board [vesa mode]",
        !           424:     EMXVGA_XMAX, EMXVGA_YMAX, EMXVGA_VCHAR, EMXVGA_HCHAR,
        !           425:     EMXVGA_VTIC, EMXVGA_HTIC, EMXVESA_options, EMXVESA_init, EMXVESA_reset,
        !           426:     EMXVESA_text, null_scale, EMXVESA_graphics, EMXVGA_move, EMXVGA_vector,
        !           427:     EMXVGA_linetype, EMXVGA_put_text, EMXVGA_text_angle,
        !           428:     null_justify_text, do_point, do_arrow, set_font_null
        !           429: TERM_TABLE_END(vesa_driver)
        !           430:
        !           431: #undef LAST_TERM
        !           432: #define LAST_TERM vesa_driver
        !           433:
        !           434: #endif /* VESA */
        !           435:
        !           436: TERM_TABLE_START(emxvga_driver)
        !           437:     "emxvga", "PC with VGA running DOS or OS/2",
        !           438:     EMXVGA_XMAX, EMXVGA_YMAX, EMXVGA_VCHAR, EMXVGA_HCHAR,
        !           439:     EMXVGA_VTIC, EMXVGA_HTIC, options_null, EMXVGA_init, EMXVGA_reset,
        !           440:     EMXVGA_text, null_scale, EMXVGA_graphics, EMXVGA_move,
        !           441:     EMXVGA_vector, EMXVGA_linetype, EMXVGA_put_text, EMXVGA_text_angle,
        !           442:     null_justify_text, do_point, do_arrow, set_font_null,
        !           443:     0,                         /* pointsize */
        !           444:     TERM_CAN_MULTIPLOT, EMXVGA_suspend, EMXVGA_resume
        !           445: TERM_TABLE_END(emxvga_driver)
        !           446:
        !           447: #undef LAST_TERM
        !           448: #define LAST_TERM emxvga_driver
        !           449:
        !           450: #endif /* TERM_TABLE */
        !           451: #endif /* TERM_PROTO_ONLY */
        !           452: #ifdef TERM_HELP
        !           453: START_HELP(emxvga)
        !           454: "1 emxvga",
        !           455: "?commands set terminal emxvga",
        !           456: "?set terminal emxvga",
        !           457: "?set term emxvga",
        !           458: "?terminal emxvga",
        !           459: "?term emxvga",
        !           460: "?emxvga",
        !           461: "?commands set terminal emxvesa",
        !           462: "?set terminal emxvesa",
        !           463: "?set term emxvesa",
        !           464: "?terminal emxvesa",
        !           465: "?term emxvesa",
        !           466: "?emxvesa",
        !           467: "?commands set terminal vgal",
        !           468: "?set terminal vgal",
        !           469: "?set term vgal",
        !           470: "?terminal vgal",
        !           471: "?term vgal",
        !           472: "?vgal",
        !           473: " The `emxvga`, `emxvesa` and `vgal` terminal drivers support PCs with SVGA,",
        !           474: " vesa SVGA and VGA graphics boards, respectively.  They are intended to be",
        !           475: " compiled with \"emx-gcc\" under either DOS or OS/2.  They also need VESA and",
        !           476: " SVGAKIT maintained by Johannes Martin (JMARTIN@GOOFY.ZDV.UNI-MAINZ.DE) with",
        !           477: " additions by David J. Liu (liu@phri.nyu.edu).",
        !           478: "",
        !           479: " Syntax:",
        !           480: "       set terminal emxvga",
        !           481: "       set terminal emxvesa {vesa-mode}",
        !           482: "       set terminal vgal",
        !           483: "",
        !           484: " The only option is the vesa mode for `emxvesa`, which defaults to G640x480x256."
        !           485: END_HELP(emxvga)
        !           486: #endif /* TERM_HELP */

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