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

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

1.1       maekawa     1: /*
1.1.1.2 ! maekawa     2:  * $Id: gpr.trm,v 1.6 1998/12/14 18:39:32 lhecking Exp $
1.1       maekawa     3:  *
                      4:  */
                      5:
                      6: /* GNUPLOT - gpr.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:  *   APOLLO's GPR windowing system
                     43:  *
                     44:  * AUTHORS
                     45:  *  Michael Aramini
                     46:  *  Roque D Oliveira , oliveria@caen.engin.umich.edu
                     47:  *
                     48:  * send your comments or suggestions to (info-gnuplot@dartmouth.edu).
                     49:  *
                     50:  */
                     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: register_term(gpr)
                     60: #endif
                     61:
                     62: #ifdef TERM_PROTO
                     63: TERM_PUBLIC void GPR_init __PROTO((void));
                     64: TERM_PUBLIC void GPR_graphics __PROTO((void));
                     65: TERM_PUBLIC void GPR_text __PROTO((void));
                     66: TERM_PUBLIC void GPR_linetype __PROTO((int linetype));
                     67: TERM_PUBLIC void GPR_move __PROTO((unsigned int x, unsigned int y));
                     68: TERM_PUBLIC void GPR_vector __PROTO((unsigned int x, unsigned int y));
                     69: TERM_PUBLIC void GPR_put_text __PROTO((unsigned int x, unsigned int y, char str[]));
                     70: TERM_PUBLIC int GPR_text_angle __PROTO((int ang));
                     71: TERM_PUBLIC int GPR_justify_text __PROTO((enum JUSTIFY mode));
                     72: TERM_PUBLIC void GPR_reset __PROTO((void));
                     73: /* landscape window */
                     74: /*
                     75: #define GPR_XMAX 720
                     76: #define GPR_YMAX 450
                     77: */
                     78: /* portrait window */
                     79: #define GPR_XMAX 585
                     80: #define GPR_YMAX 735
                     81: #define GPR_VCHAR 19
                     82: #define GPR_HCHAR 10
                     83: #define GPR_VTIC (GPR_YMAX/80)
                     84: #define GPR_HTIC (GPR_XMAX/80)
                     85: #endif /* TERM_PROTO */
                     86:
                     87: #ifndef TERM_PROTO_ONLY
                     88: #ifdef TERM_BODY
                     89: void GPRold_linetype __PROTO((int linetype));
                     90: static void check __PROTO((char *messagex));
                     91: int gpr_isa_pad __PROTO((void));
                     92: #include <apollo/base.h>
                     93: #include <apollo/error.h>
                     94: #include <apollo/gpr.h>
                     95: #include <apollo/pad.h>
                     96:
                     97: #define GPR_XLAST (GPR_XMAX - 1)
                     98: #define GPR_YLAST (GPR_YMAX - 1)
                     99:
                    100:
                    101: gpr_$direction_t gpr_path = gpr_$right;
                    102: /* text angle, 0=horizontal, 1=vertical */
                    103: int gpr_ang = 0;
                    104: /* text is flush left */
                    105: enum JUSTIFY gpr_justify = LEFT;
                    106:
                    107: static status_$t status;
                    108: /* set it to 1 when debugging program */
                    109: unsigned int Debug = 0;
                    110:
                    111:
                    112: static void check(messagex)
                    113: char *messagex;
                    114: {
                    115:     if (status.all = status_$ok) {
                    116:        error_$print(status);
                    117:        printf("Error occurred while %s.\n", messagex);
                    118:     }
                    119: }
                    120:
                    121: /* return whether stdout is a DM pad . Called by term.c */
                    122: int gpr_isa_pad()
                    123: {
                    124:     pad_$isa(1, &status);
                    125:     return (status.all == status_$ok);
                    126: }
                    127:
                    128:
                    129: TERM_PUBLIC void GPR_init()
                    130: {
                    131:     gpr_$offset_t dm_bitmap_size;
                    132:     gpr_$bitmap_desc_t dm_bitmap_desc;
                    133:     pad_$window_desc_t window;
                    134:     short font_id;
                    135:     stream_$id_t stream_id;
                    136:     static gpr_$rgb_plane_t hi_plane;
                    137:     static gpr_$disp_char_t display_characteristics;
                    138:     static float screen_size_r_width, screen_size_r_height;
                    139:     static short int disp_len = sizeof(gpr_$disp_char_t);
                    140:     static short int disp_len_returned;
                    141:
                    142:
                    143:     /* open a pad to do graphics in */
                    144:     window.top = 0;
                    145:     window.left = 0;
                    146:     /* 10 accounts for width of window border */
                    147:     window.width = GPR_XMAX + 10;
                    148:     /* 35 accounts for height of window border */
                    149:     window.height = GPR_YMAX + 35;
                    150:     pad_$create_window("", (short) 0, pad_$transcript, (short) 1, window, &stream_id, &status);
                    151:     check("pad_$create_window");
                    152:
                    153: /*  pad_$set_full_window(stream_id,(short) 1,&window, &status); */
                    154: /*  pad_$set_border (stream_id,(short) 1, true, &status); */
                    155:     pad_$set_scale(stream_id, (short) 1, (short) 1, &status);
                    156:     pad_$set_auto_close(stream_id, (short) 1, true, &status);
                    157:
                    158:     gpr_$inq_disp_characteristics(gpr_$direct, stream_id, disp_len, &display_characteristics, &disp_len_returned, &status);
                    159:     check("in gpr_$inq_display_characteristics");
                    160:     /*x_window_size in pixels */
                    161:     screen_size_r_width = (float) display_characteristics.x_window_size;
                    162:     /*y_window_size in pixels */
                    163:     screen_size_r_height = (float) display_characteristics.y_window_size;
                    164:     hi_plane = display_characteristics.n_planes - 1;
                    165:     if (Debug)
                    166:        printf("width=%f height=%f \n", screen_size_r_width, screen_size_r_height);
                    167:
                    168:     dm_bitmap_size.x_size = 1280;
                    169:     dm_bitmap_size.y_size = 1024;
                    170:     gpr_$init(gpr_$direct, stream_id, dm_bitmap_size, hi_plane, &dm_bitmap_desc, &status);
                    171:     check("in gpr_$init");
                    172: /*
                    173:   gpr_$set_obscured_opt(gpr_$pop_if_obs, &status);
                    174:   check("in gpr_$set_obscured_opt");
                    175: */
                    176:     gpr_$set_auto_refresh(true, &status);
                    177:     check("in gpr_$set_auto_refresh");
                    178:
                    179:     /* load a font and make it current */
                    180:     gpr_$load_font_file("f7x13", 5, &font_id, &status);
                    181:     check("in gpr_$load_font_file");
                    182:     gpr_$set_text_font(font_id, &status);
                    183:     check("in gpr_$set_text_font");
                    184:
                    185:     /* set up color values */
                    186:     gpr_$set_draw_value((gpr_$pixel_value_t) 7, &status);      /* white */
                    187:     check("in gpr_set_draw_value");
                    188:     gpr_$set_text_background_value((gpr_$pixel_value_t) (-1), &status);        /* trans */
                    189:     check("in gpr_$set_text_background_value");
                    190:     gpr_$set_text_value((gpr_$pixel_value_t) 7, &status);      /* white */
                    191:     check("in gpr_$set_text_value");
                    192: }
                    193:
                    194:
                    195: TERM_PUBLIC void GPR_graphics()
                    196: {
                    197:     gpr_$coordinate_t locx, locy, marker_size;
                    198:
                    199:     (void) gpr_$acquire_display(&status);
                    200:     check("in gpr_$acquire display");
                    201:     gpr_$clear((gpr_$pixel_value_t) 0, &status);       /* black */
                    202:     check("in gpr_$clear");
                    203:
                    204:     if (Debug) {
                    205:        marker_size = (short) 10;
                    206:
                    207:        locx = (short) 5;
                    208:        locy = (short) 5;
                    209:        gpr_$set_draw_value((gpr_$pixel_value_t) 2, &status);   /* white */
                    210:        gpr_$move((locx - marker_size / 2), locy, &status);
                    211:        gpr_$line((locx + marker_size / 2), locy, &status);
                    212:        gpr_$move(locx, (locy + marker_size / 2), &status);
                    213:        gpr_$line(locx, (locy - marker_size / 2), &status);
                    214:
                    215:        locx = (short) (GPR_XMAX - 1 - 5);
                    216:        locy = (short) 5;
                    217:        gpr_$set_draw_value((gpr_$pixel_value_t) 3, &status);   /* white */
                    218:        gpr_$move((locx - marker_size / 2), locy, &status);
                    219:        gpr_$line((locx + marker_size / 2), locy, &status);
                    220:        gpr_$move(locx, (locy + marker_size / 2), &status);
                    221:        gpr_$line(locx, (locy - marker_size / 2), &status);
                    222:
                    223:        locx = (short) 5;
                    224:        locy = (short) (GPR_YMAX - 1 - 5);
                    225:        gpr_$set_draw_value((gpr_$pixel_value_t) 4, &status);   /* white */
                    226:        gpr_$move((locx - marker_size / 2), locy, &status);
                    227:        gpr_$line((locx + marker_size / 2), locy, &status);
                    228:        gpr_$move(locx, (locy + marker_size / 2), &status);
                    229:        gpr_$line(locx, (locy - marker_size / 2), &status);
                    230:
                    231:        locx = (short) (GPR_XMAX - 1 - 5);
                    232:        locy = (short) (GPR_YMAX - 1 - 5);
                    233:        gpr_$set_draw_value((gpr_$pixel_value_t) 5, &status);   /* white */
                    234:        gpr_$move((locx - marker_size / 2), locy, &status);
                    235:        gpr_$line((locx + marker_size / 2), locy, &status);
                    236:        gpr_$move(locx, (locy + marker_size / 2), &status);
                    237:        gpr_$line(locx, (locy - marker_size / 2), &status);
                    238:
                    239:        gpr_$set_draw_value((gpr_$pixel_value_t) 7, &status);   /* white */
                    240:        check("in gpr_$set_draw_value");
                    241:     }                          /* end if(Debug) */
                    242: }
                    243:
                    244:
                    245: TERM_PUBLIC void GPR_text()
                    246: {
                    247:     gpr_$release_display(&status);
                    248:     check("gpr_$release_display");
                    249: }
                    250:
                    251:
                    252: void GPRold_linetype(linetype)
                    253: int linetype;
                    254: {
                    255:     static gpr_$line_pattern_t patterns[2 + 5] =
                    256:     {
                    257:        {0xFFFF},               /* solid              1111111111111111 */
                    258:        {0x3FFF},               /* very long dashed   0011111111111111 */
                    259:        {0xFFFF},               /* solid              1111111111111111 */
                    260:        {0x5555},               /* dotted             0101010101010101 */
                    261:        {0x3333},               /* short dashed       0011001100110011 */
                    262:        {0xB5AD},               /* dot short-dashed   1011010110101101 */
                    263:        {0x3FFF}                /* very long dashed   0011111111111111 */
                    264:     };
                    265:     if (linetype >= 5)
                    266:        linetype %= 5;
                    267:     gpr_$set_line_pattern((short) 1, patterns[linetype + 2], (short) 16, &status);
                    268:     check("in gpr_$set_line_pattern");
                    269: }
                    270:
                    271: TERM_PUBLIC void GPR_linetype(linetype)
                    272: int linetype;
                    273: {
                    274:     static gpr_$line_pattern_t patterns[2 + 7] =
                    275:     {
                    276:        {0xFFFF},               /* solid              1111111111111111 */
                    277:        {0x1111},               /* long-spaced dotted 0001000100010001 */
                    278:        {0xFFFF},               /* solid              1111111111111111 */
                    279:        {0x5555},               /* dotted             0101010101010101 */
                    280:        {0x3333},               /* short  dashed      0011001100110011 */
                    281:        {0x7777},               /* medium dashed      0111011101110111 */
                    282:        {0x3F3F},               /* long   dashed      0011111100111111 */
                    283:        {0x0F0F},               /* long-spaced dashed 0000111100001111 */
                    284:        {0x5F5F}                /* dot dashed         0101111101011111 */
                    285:     };
                    286:     if (linetype >= 7)
                    287:        linetype %= 7;
                    288:     gpr_$set_line_pattern((short) 1, patterns[linetype + 2], (short) 16, &status);
                    289:     check("in gpr_$set_line_pattern");
                    290:
                    291: /*
                    292:   gpr_$set_draw_value((gpr_$pixel_value_t)(linetype + 1), &status);
                    293:   check("in gpr_$set_draw_value");
                    294: */
                    295: }
                    296:
                    297:
                    298: TERM_PUBLIC void GPR_move(x, y)
                    299: unsigned int x, y;
                    300: {
                    301:     gpr_$move((short) x, (short) (GPR_YMAX - 1 - y), &status);
                    302:     check("in gpr_$move");
                    303: }
                    304:
                    305:
                    306: TERM_PUBLIC void GPR_vector(x, y)
                    307: unsigned int x, y;
                    308: {
                    309:     gpr_$line((short) x, (short) (GPR_YMAX - 1 - y), &status);
                    310:     check("in gpr_$line");
                    311: }
                    312:
                    313:
                    314: TERM_PUBLIC void GPR_put_text(x, y, str)
                    315: unsigned int x, y;             /* reference point of string */
                    316: char str[];                    /* the text */
                    317: {
                    318:     gpr_$coordinate_t xgpr, ygpr;
                    319:     gpr_$offset_t str_size_in_pixels;
                    320:     short int str_len;
                    321:
                    322:     gpr_$coordinate_t locx, locy, marker_size;
                    323:
                    324:     if (Debug) {
                    325:        locx = (short) x;
                    326:        locy = (short) (GPR_YMAX - 1 - y);
                    327:        marker_size = (short) 20;
                    328:        gpr_$set_draw_value((gpr_$pixel_value_t) 1, &status);   /* white */
                    329:        gpr_$move((locx - marker_size / 2), locy, &status);
                    330:        gpr_$line((locx + marker_size / 2), locy, &status);
                    331:        gpr_$move(locx, (locy + marker_size / 2), &status);
                    332:        gpr_$line(locx, (locy - marker_size / 2), &status);
                    333:        gpr_$set_draw_value((gpr_$pixel_value_t) 7, &status);   /* white */
                    334:     }
                    335:     xgpr = (short) x;
                    336:     ygpr = (short) (GPR_YMAX - 1 - y);
                    337:     gpr_$set_text_path(gpr_path, &status);
                    338:     check("gpr_$set_text_path");
                    339:
                    340:     str_len = (short) strlen(str);
                    341:     /* Calculate how much space (in pixels) the string requires */
                    342:     gpr_$inq_text_extent(str, str_len, &str_size_in_pixels, &status);
                    343:     check("in gpr_$inq_text_extent");
                    344:
                    345:     switch (gpr_justify) {
                    346:     case LEFT:
                    347:        {
                    348:            switch (gpr_path) {
                    349:            case gpr_$up:       /* vertical */
                    350:                {
                    351:                    if (Debug)
                    352:                        printf("LEFT and up , str=%s\n", str);
                    353:                    break;
                    354:                }
                    355:            case gpr_$right:    /* horizontal */
                    356:                {
                    357:                    ygpr = ygpr + str_size_in_pixels.y_size / 2;
                    358:                    if (Debug)
                    359:                        printf("LEFT and right, str=%s \n", str);
                    360:                    break;
                    361:                }
                    362:            }
                    363:            break;
                    364:        }
                    365:
                    366:     case CENTRE:
                    367:        {
                    368:            switch (gpr_path) {
                    369:            case gpr_$up:       /* vertical */
                    370:                {
                    371:                    xgpr = xgpr + str_size_in_pixels.x_size / 2;
                    372:                    ygpr = ygpr + str_size_in_pixels.y_size / 2;
                    373:                    if (Debug)
                    374:                        printf("CENTRE and up, str=%s \n", str);
                    375:                    break;
                    376:                }
                    377:            case gpr_$right:    /* horizontal */
                    378:                {
                    379:                    xgpr = xgpr - str_size_in_pixels.x_size / 2;
                    380:                    ygpr = ygpr + str_size_in_pixels.y_size / 2;
                    381:                    if (Debug)
                    382:                        printf("CENTRE and right, str=%s \n", str);
                    383:                    break;
                    384:                }
                    385:            }
                    386:            break;
                    387:        }
                    388:     case RIGHT:
                    389:        {
                    390:            switch (gpr_path) {
                    391:            case gpr_$up:       /* vertical */
                    392:                {
                    393:                    ygpr = ygpr + str_size_in_pixels.y_size;
                    394:                    if (Debug)
                    395:                        printf("RIGHT and up, str=%s \n", str);
                    396:                    break;
                    397:                }
                    398:            case gpr_$right:    /* horizontal */
                    399:                {
                    400:                    xgpr = xgpr - str_size_in_pixels.x_size;
                    401:                    ygpr = ygpr + str_size_in_pixels.y_size / 2;
                    402:                    if (Debug)
                    403:                        printf("RIGHT and right, str=%s \n", str);
                    404:                    break;
                    405:                }
                    406:            }
                    407:            break;
                    408:        }
                    409:     }
                    410:
                    411:     gpr_$move(xgpr, ygpr, &status);
                    412:     check("in gpr_$move");
                    413:     gpr_$text(str, str_len, &status);
                    414:     check("in gpr_$text");
                    415: }
                    416:
                    417: TERM_PUBLIC int GPR_text_angle(ang)
                    418: int ang;
                    419: {
                    420:     if (gpr_ang != ang) {
                    421:        gpr_ang = ang;
                    422:        gpr_path = (gpr_ang == 1 ? gpr_$up : gpr_$right);
                    423:     }
                    424:     return (TRUE);
                    425: }
                    426:
                    427: TERM_PUBLIC int GPR_justify_text(mode)
                    428: enum JUSTIFY mode;
                    429: {
                    430:     gpr_justify = mode;
                    431:     return (TRUE);
                    432: }
                    433:
                    434: TERM_PUBLIC void GPR_reset()
                    435: {
                    436:     gpr_$terminate(false, &status);
                    437:     check("in gpr_$terminate");
                    438: }
                    439:
                    440: #endif /* TERM_BODY */
                    441:
                    442: #ifdef TERM_TABLE
                    443:
                    444: TERM_TABLE_START(gpr_driver)
                    445:     "gpr", "Apollo Graphics Primitive Resource, fixed-size window",
                    446:     GPR_XMAX, GPR_YMAX, GPR_VCHAR, GPR_HCHAR,
                    447:     GPR_VTIC, GPR_HTIC, options_null, GPR_init, GPR_reset,
                    448:     GPR_text, null_scale, GPR_graphics, GPR_move, GPR_vector,
                    449:     GPR_linetype, GPR_put_text, GPR_text_angle,
                    450:     GPR_justify_text, line_and_point, do_arrow, set_font_null
                    451: TERM_TABLE_END(gpr_driver)
                    452:
                    453: #undef LAST_TERM
                    454: #define LAST_TERM gpr_driver
                    455:
                    456: #endif /* TERM_TABLE */
                    457: #endif /* TERM_PROTO_ONLY */
                    458:
                    459: #ifdef TERM_HELP
                    460: START_HELP(gpr)
                    461: "1 gpr",
                    462: "?commands set terminal gpr",
                    463: "?set terminal gpr",
                    464: "?set term gpr",
                    465: "?terminal gpr",
                    466: "?term gpr",
                    467: "?gpr",
                    468: " The `gpr` terminal driver supports the Apollo Graphics Primitive Resource",
                    469: " for a fixed-size window.  It has no options.",
                    470: "",
                    471: " If a variable window size is desired, use the `apollo` terminal instead."
                    472: END_HELP(gpr)
                    473: #endif /* TERM_HELP */

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