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

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

1.1     ! maekawa     1: /*[
        !             2:  * GNUPLOT - grass.trm
        !             3:  * $Id: grass.trm,v
        !             4:  *-
        !             5:  * Copyright (C) 1992-1995, 1999. James Darrell McCauley
        !             6:  *
        !             7:  * Permission to use, copy, and distribute this software and its
        !             8:  * documentation for any purpose with or without fee is hereby granted,
        !             9:  * provided that the above copyright notice appear in all copies and
        !            10:  * that both that copyright notice and this permission notice appear
        !            11:  * in supporting documentation.
        !            12:  *
        !            13:  * Permission to modify the software is granted, but not the right to
        !            14:  * distribute the complete modified source code.  Modifications are to
        !            15:  * be distributed as patches to the released version.  Permission to
        !            16:  * distribute binaries produced by compiling modified sources is granted,
        !            17:  * provided you
        !            18:  *   1. distribute the corresponding source modifications from the
        !            19:  *    released version in the form of a patch file along with the binaries,
        !            20:  *   2. add special version identification to distinguish your version
        !            21:  *    in addition to the base release version number,
        !            22:  *   3. provide your name and address as the primary contact for the
        !            23:  *    support of your modified version, and
        !            24:  *   4. retain our contact information in regard to use of the base
        !            25:  *    software.
        !            26:  * Permission to distribute the released version of the source code along
        !            27:  * with corresponding source modifications in the form of a patch file is
        !            28:  * granted with same provisions 2 through 4 for binary distributions.
        !            29:  *
        !            30:  * This software is provided "as is" without express or implied warranty
        !            31:  * to the extent permitted by applicable law.
        !            32:  *
        !            33:  * This software  is provided "as is" without express or implied warranty.
        !            34:  *
        !            35:  * This file is included by ../term.c.
        !            36:  *
        !            37:  * This terminal driver supports:
        !            38:  *  GRASS graphics driver
        !            39:  *
        !            40:  * AUTHOR
        !            41:  * James Darrell McCauley, PhD        http://soils.ecn.purdue.edu/~mccauley/
        !            42:  * Dept of Agricultural Engineering   mccauley@ecn.purdue.edu
        !            43:  * Purdue University                  tel: 317.494.1198 fax: 317.496.1115
        !            44:  *
        !            45:  * 05 Apr 1995 - cleaned up code by adding explicit function declarations.
        !            46:  *               compiles clean with 'gcc -Wall'
        !            47:  * 14 Apr 1995 - adapted for new layout, added font selection
        !            48:  *
        !            49:  * 13 Jan 1999 - Copyright statement changed to new gnuplot copyright
        !            50:  *               Permission given by orig author in private email (lh)
        !            51:  *
        !            52:  * send your comments or suggestions to (grassp-list@moon.cecer.army.mil).
        !            53:  *
        !            54: ]*/
        !            55:
        !            56: #include "driver.h"
        !            57:
        !            58: #ifdef TERM_REGISTER
        !            59: register_term(grass)
        !            60: #endif
        !            61:
        !            62:
        !            63: #ifdef TERM_PROTO
        !            64: TERM_PUBLIC void GRASS_move __PROTO((unsigned int x, unsigned int y));
        !            65: TERM_PUBLIC void GRASS_options __PROTO((void));
        !            66: TERM_PUBLIC void GRASS_init __PROTO((void));
        !            67: TERM_PUBLIC void GRASS_reset __PROTO((void));
        !            68: TERM_PUBLIC void GRASS_graphics __PROTO((void));
        !            69: TERM_PUBLIC void GRASS_text __PROTO((void));
        !            70: TERM_PUBLIC void GRASS_vector __PROTO((unsigned int x, unsigned int y));
        !            71: TERM_PUBLIC void GRASS_linetype __PROTO((int lt));
        !            72: TERM_PUBLIC void GRASS_put_text __PROTO((unsigned int x, unsigned int y, char *str));
        !            73: TERM_PUBLIC int GRASS_text_angle __PROTO((int ang));
        !            74: TERM_PUBLIC int GRASS_justify_text __PROTO((enum JUSTIFY mode));
        !            75: TERM_PUBLIC void GRASS_point __PROTO((unsigned int x, unsigned int y, int point));
        !            76: TERM_PUBLIC int GRASS_set_font __PROTO((char *font));
        !            77: /* TERM_PUBLIC void GRASS_set_pointsize __PROTO((double size)); */
        !            78: TERM_PUBLIC void GRASS_arrow __PROTO((unsigned int sx, unsigned int sy, unsigned int ex, unsigned int ey, int head));
        !            79: #endif /* TERM_PROTO */
        !            80:
        !            81: #ifndef TERM_PROTO_ONLY
        !            82: #ifdef TERM_BODY
        !            83:
        !            84: #include <stdio.h>
        !            85: #include <string.h>
        !            86: /* #include "gis.h" */ /* this causes conflicts with things in term.c */
        !            87:
        !            88: #define GRASS_XMAX 1000
        !            89: #define GRASS_YMAX 1000
        !            90: #define GRASS_VCHAR 5
        !            91: #define GRASS_HCHAR 5
        !            92: #define GRASS_VTIC 3
        !            93: #define GRASS_HTIC 3
        !            94:
        !            95: #define PNT_SIZE 3
        !            96: #define TYPE_DOT  -1
        !            97: #define TYPE_X  0
        !            98: #define TYPE_PLUS   1
        !            99: #define TYPE_BOX    2
        !           100: #define TYPE_DIAMOND    3      /* need type 4 and 5 */
        !           101: #define TYPE_TRIANGLE 4
        !           102: #define TYPE_OCTO 5
        !           103: #define TYPE_ITRIANGLE 6
        !           104: #define TYPE_FBOX 7
        !           105: #define TYPE_FTRIANGLE 8
        !           106: #define TYPE_FITRIANGLE 9
        !           107: #define TYPE_FOCTO 10
        !           108:
        !           109: static void cont_abs __PROTO((int x, int y));
        !           110: static void draw_points_dot __PROTO((int x, int y));
        !           111: static void draw_points_diamond __PROTO((int x, int y));
        !           112: static void draw_points_box __PROTO((int x, int y));
        !           113: static void draw_points_fbox __PROTO((int x, int y));
        !           114: static void draw_points_itriangle __PROTO((int x, int y));
        !           115: static void draw_points_fitriangle __PROTO((int x, int y));
        !           116: static void draw_points_triangle __PROTO((int x, int y));
        !           117: static void draw_points_ftriangle __PROTO((int x, int y));
        !           118: static void draw_points_plus __PROTO((int x, int y));
        !           119: static void draw_points_octo __PROTO((int x, int y));
        !           120: static void draw_points_focto __PROTO((int x, int y));
        !           121: static void draw_points_x __PROTO((int x, int y));
        !           122:
        !           123: static int R__curx, R__cury;
        !           124:
        !           125: static int grass_yoffset;
        !           126: static int grass_xoffset;
        !           127: static int y_max;
        !           128: static int points_buf_x[PNT_SIZE*PNT_SIZE]; /* for filled point types */
        !           129: static int points_buf_y[PNT_SIZE*PNT_SIZE];
        !           130:
        !           131: TERM_PUBLIC void GRASS_move (x, y)
        !           132:   unsigned int x, y;
        !           133: {
        !           134:   int R_move_abs ();
        !           135:   /* R_move_abs (grass_xoffset+x, grass_yoffset-y + y_max); */
        !           136:   R_move_abs (grass_xoffset+x, grass_yoffset-y);
        !           137: }
        !           138:
        !           139: static void cont_abs (x, y)
        !           140:   int x, y;
        !           141: {
        !           142:   int R_cont_abs ();
        !           143:   /* R_cont_abs (grass_xoffset+x, grass_xoffset-y + y_max); */
        !           144:   R_cont_abs (grass_xoffset+x, grass_yoffset-y);
        !           145: }
        !           146:
        !           147: TERM_PUBLIC void GRASS_options ()
        !           148: {
        !           149:   options_null ();             /* no options to begin with */
        !           150: }
        !           151:
        !           152: TERM_PUBLIC void GRASS_init ()
        !           153: {
        !           154:   /* char buff[128]; */
        !           155:   char window_name[64];
        !           156:   float size = 3.0;
        !           157:   /* int backcolor; */
        !           158:   int dots_per_line;
        !           159:   int top, b, l, r;
        !           160:   /* int textcolor; */
        !           161:   struct termentry *t = term;
        !           162:   int G_gisinit();
        !           163:   int R_open_driver();
        !           164:   int D_setup();
        !           165:   int D_get_cur_wind();
        !           166:   int G_fatal_error();
        !           167:   int D_set_cur_wind();
        !           168:   int D_get_screen_window();
        !           169:   int R_set_window();
        !           170:   int R_text_size();
        !           171:   int R_font();
        !           172:   int R_screen_top();
        !           173:   int R_screen_bot();
        !           174:   int D_erase_window();
        !           175:
        !           176:   G_gisinit ("g.gnuplot");
        !           177:
        !           178:   R_open_driver ();
        !           179:
        !           180:   D_setup (0);
        !           181:
        !           182:   if (D_get_cur_wind (window_name))
        !           183:     G_fatal_error ("No current window");
        !           184:
        !           185:   if (D_set_cur_wind (window_name))
        !           186:     G_fatal_error ("Current window not available");
        !           187:
        !           188:   /* Set up the screen, conversions, and graphics */
        !           189:   D_get_screen_window (&top, &b, &l, &r);
        !           190:   /* D_set_overlay_mode (1); */
        !           191:
        !           192:   /* Figure out where to put text */
        !           193:
        !           194:   R_set_window (top, b, l, r);
        !           195:   t->xmax = r-l;
        !           196:   t->ymax = b-top;
        !           197:   grass_xoffset=l;
        !           198:   grass_yoffset=b;
        !           199:
        !           200:   dots_per_line = (int) (size / 100.0 * (float) (t->ymax));
        !           201:   t->v_char = t->h_char = (int) (.8 * (float) dots_per_line);
        !           202:   R_text_size (t->h_char, t->v_char);
        !           203:   R_font("romans");
        !           204:
        !           205:   t->v_tic = t->h_tic = 4;
        !           206:
        !           207:   y_max = t->ymax; /* kludge? */
        !           208:
        !           209:   R__curx = R_screen_top ();
        !           210:   R__cury = R_screen_bot () + grass_yoffset;
        !           211:
        !           212:   D_erase_window();
        !           213: /*
        !           214: fprintf(stderr,"**********************************************\n");
        !           215: fprintf(stderr,"DIAGNOSTIC TERMINAL SETUP\n");
        !           216: fprintf(stderr,"top = %d\tb = %d\tl = %d\tr = %d\n", top,b,l,r);
        !           217: fprintf(stderr,"name = %s\n", t->name);
        !           218: fprintf(stderr,"description = %s\n", t->description);
        !           219: fprintf(stderr,"xmax = %d\t", (int)t->xmax);
        !           220: fprintf(stderr,"ymax = %d\n", (int)t->ymax);
        !           221: fprintf(stderr,"v_char = %d\t", (int)t->v_char);
        !           222: fprintf(stderr,"h_char = %d\n", (int)t->h_char);
        !           223: fprintf(stderr,"v_tic = %d\t", (int)t->v_tic);
        !           224: fprintf(stderr,"h_tic = %d\n", (int)t->h_tic);
        !           225: fprintf(stderr,"**********************************************\n\n");
        !           226: */
        !           227: }
        !           228:
        !           229: TERM_PUBLIC void GRASS_reset ()
        !           230: {
        !           231:   int R_standard_color();
        !           232:   int D_translate_color();
        !           233:   int R_flush();
        !           234:   int R_stabilize();
        !           235:   int R_close_driver();
        !           236:
        !           237:   R_standard_color (D_translate_color ("black"));
        !           238:   /* D_erase_window(); .* don't clear after g.gnuplot is finished */
        !           239:   R_flush ();
        !           240:   R_stabilize ();
        !           241:   R_close_driver ();
        !           242: }
        !           243:
        !           244: TERM_PUBLIC void GRASS_graphics ()
        !           245: {
        !           246:   int D_erase_window();
        !           247:   int R_flush();
        !           248:   int R_stabilize();
        !           249:   int R_standard_color();
        !           250:   int D_translate_color();
        !           251:
        !           252:   R_flush ();
        !           253:   R_stabilize ();
        !           254:   R_standard_color (D_translate_color ("black"));
        !           255:   D_erase_window();
        !           256:   return;
        !           257: }
        !           258:
        !           259: TERM_PUBLIC void GRASS_text ()
        !           260: {
        !           261:   int R_flush ();
        !           262:   int R_stabilize ();
        !           263:
        !           264:   R_flush ();
        !           265:   R_stabilize ();
        !           266:   return;                      /* device can't be used as a terminal */
        !           267: }
        !           268:
        !           269: TERM_PUBLIC void GRASS_vector (x, y)
        !           270:   unsigned int x, y;
        !           271: {
        !           272:   int R_flush ();
        !           273:   int R_stabilize ();
        !           274:
        !           275:   cont_abs (x, y);
        !           276:   R_flush ();
        !           277:   R_stabilize ();
        !           278: }
        !           279:
        !           280: TERM_PUBLIC void GRASS_linetype (lt)
        !           281:   int lt;
        !           282: {
        !           283:   int R_standard_color();
        !           284:   int D_translate_color();
        !           285:   int R_flush ();
        !           286:   int R_stabilize ();
        !           287:
        !           288:   while (lt > 10) lt-=10;
        !           289:
        !           290:   if (lt <= -2)
        !           291:     R_standard_color (D_translate_color ("gray"));
        !           292:   else if (lt == -1)
        !           293:     R_standard_color (D_translate_color ("white"));
        !           294:   else if (lt == 0)
        !           295:     R_standard_color (D_translate_color ("red"));
        !           296:   else if (lt == 1)
        !           297:     R_standard_color (D_translate_color ("green"));
        !           298:   else if (lt == 2)
        !           299:     R_standard_color (D_translate_color ("magenta"));
        !           300:   else if (lt == 3)
        !           301:     R_standard_color (D_translate_color ("brown"));
        !           302:   else if (lt == 4)
        !           303:     R_standard_color (D_translate_color ("orange"));
        !           304:   else if (lt == 5)
        !           305:     R_standard_color (D_translate_color ("yellow"));
        !           306:   else if (lt == 6)
        !           307:     R_standard_color (D_translate_color ("blue"));
        !           308:   else if (lt == 7)
        !           309:     R_standard_color (D_translate_color ("violet"));
        !           310:   else if (lt == 8)
        !           311:     R_standard_color (D_translate_color ("indigo"));
        !           312:   else if (lt == 9)
        !           313:     R_standard_color (D_translate_color ("gray"));
        !           314:   else /* if (lt == 10) */
        !           315:     R_standard_color (D_translate_color ("white"));
        !           316:   R_flush ();
        !           317:   R_stabilize ();
        !           318:   return;
        !           319: }
        !           320:
        !           321: /* originally /usr/grass4/src/display/d.label/cmd/label.c */
        !           322:
        !           323: TERM_PUBLIC void GRASS_put_text (x, y, str)
        !           324:   unsigned int x, y;
        !           325:   char *str;
        !           326: {
        !           327:   int R_text();
        !           328:   int R_flush ();
        !           329:   int R_stabilize ();
        !           330:   if (strlen (str) == 0)
        !           331:     return;
        !           332:
        !           333:   GRASS_move (x, y);
        !           334:   /* R_standard_color (D_translate_color ("white")); */
        !           335:   R_text (str);
        !           336:   R_flush ();
        !           337:   R_stabilize ();
        !           338: }
        !           339:
        !           340: TERM_PUBLIC int GRASS_text_angle (ang)
        !           341: int ang;
        !           342: {
        !           343:   int R_text_rotation();
        !           344:
        !           345:   R_text_rotation((float)ang);
        !           346:   return TRUE;                 /* GRASS can (?) rotate text */
        !           347: }
        !           348:
        !           349: TERM_PUBLIC int GRASS_justify_text (mode)
        !           350:   enum JUSTIFY mode;
        !           351: {
        !           352:   return (FALSE);              /* don't mess with this now */
        !           353: }
        !           354:
        !           355:
        !           356: TERM_PUBLIC void GRASS_point (x, y, point)
        !           357: unsigned int x,y;
        !           358: int point;
        !           359: {
        !           360:   switch (point)
        !           361:   {
        !           362:   case TYPE_DOT:
        !           363:     draw_points_dot (x, y);
        !           364:     break;
        !           365:   case TYPE_X:
        !           366:     draw_points_x (x, y);
        !           367:     break;
        !           368:   case TYPE_PLUS:
        !           369:     draw_points_plus (x, y);
        !           370:     break;
        !           371:   case TYPE_BOX:
        !           372:     draw_points_box (x, y);
        !           373:     break;
        !           374:   case TYPE_DIAMOND:
        !           375:     draw_points_diamond (x, y);
        !           376:     break;
        !           377:   case TYPE_TRIANGLE:
        !           378:     draw_points_triangle (x, y);
        !           379:     break;
        !           380:   case TYPE_OCTO:
        !           381:     draw_points_octo (x, y);
        !           382:     break;
        !           383:   case TYPE_ITRIANGLE:
        !           384:     draw_points_itriangle (x, y);
        !           385:     break;
        !           386:   case TYPE_FBOX:
        !           387:     draw_points_fbox (x, y);
        !           388:     break;
        !           389:   case TYPE_FTRIANGLE:
        !           390:     draw_points_ftriangle (x, y);
        !           391:     break;
        !           392:   case TYPE_FITRIANGLE:
        !           393:     draw_points_fitriangle (x, y);
        !           394:     break;
        !           395:   case TYPE_FOCTO:
        !           396:     draw_points_focto (x, y);
        !           397:     break;
        !           398:   }
        !           399: }
        !           400:
        !           401: /* modified from /usr/grass4/src/display/d.points/cmd/main.c */
        !           402:
        !           403: static void draw_points_dot (x, y)
        !           404:   int x, y;
        !           405: {
        !           406:   GRASS_move (x, y);
        !           407:   cont_abs (x, y);
        !           408: }
        !           409:
        !           410: static void draw_points_diamond (x, y)
        !           411:   int x, y;
        !           412: {
        !           413:   GRASS_move (x, y + PNT_SIZE);
        !           414:   GRASS_vector (x + PNT_SIZE, y);
        !           415:   GRASS_vector (x, y - PNT_SIZE);
        !           416:   GRASS_vector (x - PNT_SIZE, y);
        !           417:   GRASS_vector (x, y + PNT_SIZE);
        !           418: }
        !           419:
        !           420: static void draw_points_box (x, y)
        !           421:   int x, y;
        !           422: {
        !           423:   GRASS_move (x - PNT_SIZE, y - PNT_SIZE);
        !           424:   GRASS_vector (x - PNT_SIZE, y + PNT_SIZE);
        !           425:   GRASS_vector (x + PNT_SIZE, y + PNT_SIZE);
        !           426:   GRASS_vector (x + PNT_SIZE, y - PNT_SIZE);
        !           427:   GRASS_vector (x - PNT_SIZE, y - PNT_SIZE);
        !           428: }
        !           429:
        !           430: static void draw_points_fbox (x, y)
        !           431:   int x, y;
        !           432: {
        !           433:   int R_polygon_abs();
        !           434:   points_buf_x[0] = grass_xoffset + x - PNT_SIZE;
        !           435:   points_buf_y[0]= grass_yoffset - (y + PNT_SIZE);
        !           436:   points_buf_x[1] = grass_xoffset + x + PNT_SIZE;
        !           437:   points_buf_y[1]= grass_yoffset - (y + PNT_SIZE);
        !           438:   points_buf_x[2] = grass_xoffset + x + PNT_SIZE;
        !           439:   points_buf_y[2]= grass_yoffset - (y - PNT_SIZE);
        !           440:   points_buf_x[3] = grass_xoffset + x - PNT_SIZE;
        !           441:   points_buf_y[3]= grass_yoffset - (y - PNT_SIZE);
        !           442:   R_polygon_abs(points_buf_x, points_buf_y, 4 );
        !           443: }
        !           444:
        !           445: static void draw_points_itriangle (x, y)
        !           446:   int x, y;
        !           447: {
        !           448:   GRASS_move (x - PNT_SIZE, y + PNT_SIZE);
        !           449:   GRASS_vector (x + PNT_SIZE, y + PNT_SIZE);
        !           450:   GRASS_vector (x , y - PNT_SIZE);
        !           451:   GRASS_vector (x - PNT_SIZE, y + PNT_SIZE);
        !           452: }
        !           453:
        !           454: static void draw_points_fitriangle (x, y)
        !           455:   int x, y;
        !           456: {
        !           457:   int R_polygon_abs();
        !           458:
        !           459:   points_buf_x[0] = grass_xoffset + x + PNT_SIZE;
        !           460:   points_buf_y[0] = grass_yoffset - (y + PNT_SIZE);
        !           461:   points_buf_x[1] = grass_xoffset + x ;
        !           462:   points_buf_y[1] = grass_yoffset - (y - PNT_SIZE);
        !           463:   points_buf_x[2] = grass_xoffset + x - PNT_SIZE;
        !           464:   points_buf_y[2] = grass_yoffset - (y + PNT_SIZE);
        !           465:   R_polygon_abs(points_buf_x, points_buf_y, 3 );
        !           466: }
        !           467:
        !           468: static void draw_points_triangle (x, y)
        !           469:   int x, y;
        !           470: {
        !           471:   GRASS_move (x - PNT_SIZE, y - PNT_SIZE);
        !           472:   GRASS_vector (x , y + PNT_SIZE);
        !           473:   GRASS_vector (x + PNT_SIZE, y - PNT_SIZE);
        !           474:   GRASS_vector (x - PNT_SIZE, y - PNT_SIZE);
        !           475: }
        !           476:
        !           477: static void draw_points_ftriangle (x, y)
        !           478:   int x, y;
        !           479: {
        !           480:   int R_polygon_abs();
        !           481:
        !           482:   points_buf_x[0] = grass_xoffset + x;
        !           483:   points_buf_y[0]= grass_yoffset - (y + PNT_SIZE);
        !           484:   points_buf_x[1] = grass_xoffset + x + PNT_SIZE;
        !           485:   points_buf_y[1]= grass_yoffset - (y - PNT_SIZE);
        !           486:   points_buf_x[2] = grass_xoffset + x - PNT_SIZE;
        !           487:   points_buf_y[2]= grass_yoffset - (y - PNT_SIZE);
        !           488:   R_polygon_abs(points_buf_x, points_buf_y, 3 );
        !           489: }
        !           490:
        !           491: static void draw_points_plus (x, y)
        !           492:   int x, y;
        !           493: {
        !           494:   GRASS_move (x - PNT_SIZE, y);
        !           495:   GRASS_vector (x + PNT_SIZE, y);
        !           496:   GRASS_move (x, y - PNT_SIZE);
        !           497:   GRASS_vector (x, y + PNT_SIZE);
        !           498: }
        !           499:
        !           500: /* depends on PNT_SIZE */
        !           501: static void draw_points_octo (x, y)
        !           502:   int x, y;
        !           503: {
        !           504:   /* CCW */
        !           505:   GRASS_move (x - (int) (PNT_SIZE/3), y - PNT_SIZE);   /* 1 */
        !           506:   GRASS_vector (x + (int) (PNT_SIZE/3), y - PNT_SIZE); /* 2 */
        !           507:   GRASS_vector (x + PNT_SIZE, y - (int) (PNT_SIZE/3)); /* 3 */
        !           508:   GRASS_vector (x + PNT_SIZE, y + (int) (PNT_SIZE/3)); /* 4 */
        !           509:   GRASS_vector (x + (int) (PNT_SIZE/3), y + PNT_SIZE); /* 5 */
        !           510:   GRASS_vector (x - (int) (PNT_SIZE/3), y + PNT_SIZE); /* 6 */
        !           511:   GRASS_vector (x - PNT_SIZE, y + (int) (PNT_SIZE/3)); /* 7 */
        !           512:   GRASS_vector (x - PNT_SIZE, y - (int) (PNT_SIZE/3)); /* 8 */
        !           513:   GRASS_vector (x - (int) (PNT_SIZE/3), y - PNT_SIZE); /* 1 */
        !           514: }
        !           515:
        !           516: /* depends on PNT_SIZE */
        !           517: static void draw_points_focto (x, y)
        !           518:   int x, y;
        !           519: {
        !           520:   int R_polygon_abs();
        !           521:
        !           522:   /* CCW */
        !           523:   points_buf_x[0] = grass_xoffset + x + (int) (PNT_SIZE/3);
        !           524:   points_buf_y[0] = grass_yoffset - (y - PNT_SIZE);
        !           525:   points_buf_x[1] = grass_xoffset + x + PNT_SIZE;
        !           526:   points_buf_y[1] = grass_yoffset - (y - (int) (PNT_SIZE/3));
        !           527:   points_buf_x[2] = grass_xoffset + x + PNT_SIZE;
        !           528:   points_buf_y[2] = grass_yoffset - (y + (int) (PNT_SIZE/3));
        !           529:   points_buf_x[3] = grass_xoffset + x + (int) (PNT_SIZE/3);
        !           530:   points_buf_y[3] = grass_yoffset - (y + PNT_SIZE);
        !           531:   points_buf_x[4] = grass_xoffset + x - (int) (PNT_SIZE/3);
        !           532:   points_buf_y[4] = grass_yoffset - (y + PNT_SIZE);
        !           533:   points_buf_x[5] = grass_xoffset + x - PNT_SIZE;
        !           534:   points_buf_y[5] = grass_yoffset - (y + (int) (PNT_SIZE/3));
        !           535:   points_buf_x[6] = grass_xoffset + x - PNT_SIZE;
        !           536:   points_buf_y[6] = grass_yoffset - (y - (int) (PNT_SIZE/3));
        !           537:   points_buf_x[7] = grass_xoffset + x - (int) (PNT_SIZE/3);
        !           538:   points_buf_y[7] = grass_yoffset - (y - PNT_SIZE);
        !           539:   R_polygon_abs(points_buf_x, points_buf_y, 8 );
        !           540: }
        !           541:
        !           542: static void draw_points_x (x, y)
        !           543: int x,y;
        !           544: {
        !           545:   GRASS_move (x - PNT_SIZE, y - PNT_SIZE);
        !           546:   GRASS_vector (x + PNT_SIZE, y + PNT_SIZE);
        !           547:   GRASS_move (x + PNT_SIZE, y - PNT_SIZE);
        !           548:   GRASS_vector (x - PNT_SIZE, y + PNT_SIZE);
        !           549: }
        !           550:
        !           551: TERM_PUBLIC int GRASS_set_font (font)
        !           552: char *font;
        !           553: {
        !           554:   char name[32];
        !           555:   int size,sep, R_font();
        !           556:   struct termentry *t = term;
        !           557:   int R_text_size (), dots_per_line;
        !           558:
        !           559:   /* G_warning(font); */
        !           560:
        !           561:   sep=strcspn(font,",");
        !           562:   strncpy(name,font,sep); name[sep]=NUL;
        !           563:   sscanf (&(font[sep+1]),"%d",&size);
        !           564:
        !           565:   if (size==0)
        !           566:     size=3;
        !           567:   dots_per_line = (int) (size / 100.0 * (float) (t->ymax));
        !           568:   t->v_char = t->h_char = (int) (.8 * (float) dots_per_line);
        !           569:   R_text_size (t->h_char, t->v_char);
        !           570: /* cyrilc,gothgbt,gothgrt,gothitt,greekc,greekcs,greekp,
        !           571: greeks,italicc,italiccs,italict,romanc,romancs,romand,
        !           572: romans,romant,scriptc,scripts */
        !           573:
        !           574:   if (strlen(name) > 5 )
        !           575:     R_font(name);
        !           576:   else
        !           577:     R_font("romans");
        !           578:   return TRUE;
        !           579: }
        !           580:
        !           581: #ifdef GRASS_POINTSIZE
        !           582: TERM_PUBLIC void GRASS_set_pointsize (size));
        !           583: double *size;
        !           584: {
        !           585:   return;
        !           586: }
        !           587: #endif /* GRASS_POINTSIZE */
        !           588:
        !           589: /* need to fix */
        !           590: TERM_PUBLIC void GRASS_arrow (sx, sy, ex, ey, head)
        !           591:   unsigned int sx, sy, ex, ey;
        !           592:   int head;
        !           593: {
        !           594:   do_arrow (sx, sy, ex, ey, 1);
        !           595:   return;
        !           596: }
        !           597:
        !           598: #endif /* TERM_BODY */
        !           599:
        !           600: #ifdef TERM_TABLE
        !           601: TERM_TABLE_START(grass_driver)
        !           602:     "grass", "GRASS Graphics Monitor",
        !           603:     GRASS_XMAX, GRASS_YMAX, GRASS_VCHAR, GRASS_HCHAR,
        !           604:     GRASS_VTIC, GRASS_HTIC, GRASS_options, GRASS_init, GRASS_reset,
        !           605:     GRASS_text, null_scale, GRASS_graphics, GRASS_move, GRASS_vector,
        !           606:     GRASS_linetype, GRASS_put_text, GRASS_text_angle,
        !           607:     GRASS_justify_text, GRASS_point, GRASS_arrow, GRASS_set_font
        !           608: TERM_TABLE_END(grass_driver)
        !           609:
        !           610:
        !           611: #undef LAST_TERM
        !           612: #define LAST_TERM grass_driver
        !           613: #endif /* TERM_TABLE */
        !           614: #endif /* TERM_PROTO_ONLY */
        !           615:
        !           616:
        !           617: #ifdef TERM_HELP
        !           618: START_HELP(grass)
        !           619: "1 grass",
        !           620: "?commands set terminal grass",
        !           621: "?set terminal grass",
        !           622: "?set term grass",
        !           623: "?terminal grass",
        !           624: "?term grass",
        !           625: "?grass",
        !           626: " The `grass` terminal driver gives `gnuplot` capabilities to users of the ",
        !           627: " GRASS geographic information system.  Contact grassp-list@moon.cecer.army.mil",
        !           628: " for more information.  Pages are written to the current frame of the GRASS",
        !           629: " Graphics Window.  There are no options."
        !           630: END_HELP(grass)
        !           631: #endif

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