Annotation of OpenXM_contrib/gnuplot/term/t410x.trm, Revision 1.1
1.1 ! maekawa 1: /*
! 2: * $Id: t410x.trm,v 1.16 1998/04/14 00:18:07 drd Exp $
! 3: *
! 4: */
! 5:
! 6: /* GNUPLOT - t410x.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: Tektronix 410x and 420x series terminals
! 42: *
! 43: * AUTHORS
! 44: * Colin Kelley, Thomas Williams
! 45: *
! 46: * send your comments or suggestions to (info-gnuplot@dartmouth.edu).
! 47: *
! 48: */
! 49:
! 50: /* Tektronix 410X and 420X driver written by Cary D. Renzema.
! 51: * email address: caryr@mxim.com
! 52: *
! 53: * I've tested this driver on the following terminals: 4106, 4107A, 4109
! 54: * and 4207. It should work, without editing, on other terminals in the
! 55: * 410x and 420x families. It will probably need to be changed to work
! 56: * on a 4105 (screen size and character rotation are two guesses). This
! 57: * file can also be used as a start for a 411x driver.
! 58: *
! 59: * Cary R.
! 60: * April 5, 1990
! 61: */
! 62:
! 63: /*
! 64: * adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
! 65: */
! 66:
! 67: #include "driver.h"
! 68:
! 69: #ifdef TERM_REGISTER
! 70: register_term(tek410x)
! 71: #endif
! 72:
! 73: #ifdef TERM_PROTO
! 74: TERM_PUBLIC void T410X_init __PROTO((void));
! 75: TERM_PUBLIC void T410X_reset __PROTO((void));
! 76: TERM_PUBLIC void T410X_graphics __PROTO((void));
! 77: TERM_PUBLIC void T410X_text __PROTO((void));
! 78: TERM_PUBLIC void T410X_move __PROTO((unsigned int x, unsigned int y));
! 79: TERM_PUBLIC void T410X_vector __PROTO((unsigned int x, unsigned int y));
! 80: TERM_PUBLIC void T410X_point __PROTO((unsigned int x, unsigned int y, int number));
! 81: TERM_PUBLIC void T410X_linetype __PROTO((int linetype));
! 82: TERM_PUBLIC void T410X_put_text __PROTO((unsigned int x, unsigned int y, char str[]));
! 83: TERM_PUBLIC int T410X_text_angle __PROTO((int ang));
! 84: #define T410XXMAX 4095
! 85: #define T410XYMAX 3131
! 86:
! 87: #define T410XVCHAR 71
! 88: #define T410XHCHAR 51
! 89: #define T410XVTIC 36
! 90: #define T410XHTIC 36
! 91: #endif /* TERM_PROTO */
! 92:
! 93: #ifndef TERM_PROTO_ONLY
! 94: #ifdef TERM_BODY
! 95: void T410X_encode_x_y __PROTO((unsigned int x, unsigned int y));
! 96: void T410X_encode_int __PROTO((int number));
! 97:
! 98:
! 99: static int T410X_angle = 0;
! 100:
! 101: TERM_PUBLIC void T410X_init()
! 102: {
! 103: fputs("\033%%!0\033MN0\033MCB7C;\033MQ1\033MT1", gpoutfile);
! 104: fputs("\033MG1\033RK!\033SK!\033LZ\033%%!1", gpoutfile);
! 105: /*
! 106: 1. set tek mode
! 107: 2. set character path to 0 (characters placed equal to rotation)
! 108: 3. set character size to 59 height
! 109: 4. set character precision to string
! 110: 5. set character text index to 1
! 111: 6. set character write mode to overstrike
! 112: 7. clear the view
! 113: 8. clear the segments
! 114: 9. clear the dialog buffer
! 115: 10. set ansi mode
! 116: */
! 117: (void) fflush(gpoutfile);
! 118: }
! 119:
! 120:
! 121: TERM_PUBLIC void T410X_reset()
! 122: {
! 123: fputs("\033%%!0\033LZ\033%%!1", gpoutfile);
! 124: /*
! 125: 1. set tek mode
! 126: 2. clear the dialog buffer
! 127: 3. set ansi mode
! 128: */
! 129: (void) fflush(gpoutfile);
! 130: }
! 131:
! 132:
! 133: TERM_PUBLIC void T410X_graphics()
! 134: {
! 135: fputs("\033%%!0\033\014\033LV0", gpoutfile);
! 136: /*
! 137: 1. set tek mode
! 138: 2. clear the screen
! 139: 3. set dialog area invisible
! 140: */
! 141: (void) fflush(gpoutfile);
! 142: }
! 143:
! 144: TERM_PUBLIC void T410X_text()
! 145: {
! 146: fputs("\033LV1\033%%!1", gpoutfile);
! 147: /*
! 148: 1. set dialog area visible
! 149: 2. set ansi mode
! 150: */
! 151: (void) fflush(gpoutfile);
! 152: }
! 153:
! 154:
! 155: TERM_PUBLIC void T410X_move(x, y)
! 156: unsigned int x, y;
! 157: {
! 158: fputs("\033LF", gpoutfile);
! 159:
! 160: (void) T410X_encode_x_y(x, y);
! 161: (void) fflush(gpoutfile);
! 162: }
! 163:
! 164:
! 165: TERM_PUBLIC void T410X_vector(x, y)
! 166: unsigned int x, y;
! 167: {
! 168: fputs("\033LG", gpoutfile);
! 169: (void) T410X_encode_x_y(x, y);
! 170: (void) fflush(gpoutfile);
! 171: }
! 172:
! 173:
! 174: TERM_PUBLIC void T410X_point(x, y, number)
! 175: unsigned int x, y;
! 176: int number;
! 177: {
! 178: fputs("\033MM", gpoutfile);
! 179: (void) T410X_encode_int(GPMAX(number, 0) % 11);
! 180: fputs("\033LH", gpoutfile);
! 181: (void) T410X_encode_x_y(x, y);
! 182: (void) fflush(gpoutfile);
! 183: }
! 184:
! 185:
! 186: TERM_PUBLIC void T410X_linetype(linetype)
! 187: int linetype;
! 188: {
! 189: switch (linetype) {
! 190: case -1:
! 191: fputs("\033ML5", gpoutfile);
! 192: break;
! 193: case -2:
! 194: fputs("\033ML?", gpoutfile);
! 195: break;
! 196: default:
! 197: fputs("\033ML", gpoutfile);
! 198: (void) T410X_encode_int(linetype % 14 + 2);
! 199: break;
! 200: }
! 201: fputs("\033MV", gpoutfile);
! 202: (void) T410X_encode_int(GPMAX(linetype, 0) % 8);
! 203: (void) fflush(gpoutfile);
! 204: }
! 205:
! 206:
! 207: TERM_PUBLIC void T410X_put_text(x, y, str)
! 208: unsigned int x, y;
! 209: char str[];
! 210: {
! 211:
! 212: if (T410X_angle == 0) {
! 213: (void) T410X_move(x, y - T410XVCHAR / 2 + 6);
! 214: fputs("\033MR00", gpoutfile);
! 215: } else {
! 216: (void) T410X_move(x + T410XHCHAR / 2 - 6, y);
! 217: fputs("\033MRE:0", gpoutfile);
! 218: }
! 219: (void) fputs("\033LT", gpoutfile);
! 220: (void) T410X_encode_int(strlen(str));
! 221: (void) fputs(str, gpoutfile);
! 222: (void) fflush(gpoutfile);
! 223: }
! 224:
! 225: TERM_PUBLIC int T410X_text_angle(ang)
! 226: int ang;
! 227: {
! 228:
! 229: T410X_angle = ang;
! 230: return (TRUE);
! 231: }
! 232:
! 233: /* These last two routines are based on fortran code found in the
! 234: * 4106/4107/4109/CX PROGRAMMERS manual.
! 235: */
! 236:
! 237: void T410X_encode_x_y(x, y)
! 238: unsigned int x, y;
! 239: {
! 240: static char chix = 0, chiy = 0, cloy = 0, ceb = 0;
! 241:
! 242: register unsigned int hix, lox, hiy, loy, eb, lx, ly;
! 243:
! 244: lx = (x <= T410XXMAX) ? x : T410XXMAX;
! 245: ly = (y <= T410XYMAX) ? y : T410XYMAX;
! 246:
! 247: hix = lx / 128 + 32;
! 248: lox = (lx / 4) % 32 + 64;
! 249: hiy = ly / 128 + 32;
! 250: loy = (ly / 4) % 32 + 96;
! 251: eb = (ly % 4) * 4 + lx % 4 + 96;
! 252:
! 253: if (chiy != hiy)
! 254: (void) putc(hiy, gpoutfile);
! 255: if (ceb != eb)
! 256: (void) putc(eb, gpoutfile);
! 257: if ((cloy != loy) || (ceb != eb) || (chix != hix))
! 258: (void) putc(loy, gpoutfile);
! 259: if (chix != hix)
! 260: (void) putc(hix, gpoutfile);
! 261: (void) putc(lox, gpoutfile);
! 262:
! 263: chix = hix;
! 264: chiy = hiy;
! 265: cloy = loy;
! 266: ceb = eb;
! 267: }
! 268:
! 269:
! 270: void T410X_encode_int(number)
! 271: int number;
! 272: {
! 273: register unsigned int mag, hi1, hi2, lo;
! 274:
! 275: mag = ABS(number);
! 276:
! 277: hi1 = mag / 1024 + 64;
! 278: hi2 = (mag / 16) % 64 + 64;
! 279: lo = mag % 16 + 32;
! 280:
! 281: if (number >= 0)
! 282: lo += 16;
! 283:
! 284: if (hi1 != 64)
! 285: (void) putc(hi1, gpoutfile);
! 286: if ((hi2 != 64) || (hi1 != 64))
! 287: (void) putc(hi2, gpoutfile);
! 288: (void) putc(lo, gpoutfile);
! 289:
! 290: }
! 291:
! 292: #endif /* TERM_BODY */
! 293:
! 294: #ifdef TERM_TABLE
! 295:
! 296: TERM_TABLE_START(tek410x_driver)
! 297: "tek410x", "Tektronix 4106, 4107, 4109 and 420X terminals",
! 298: T410XXMAX, T410XYMAX, T410XVCHAR, T410XHCHAR,
! 299: T410XVTIC, T410XHTIC, options_null, T410X_init, T410X_reset,
! 300: T410X_text, null_scale, T410X_graphics, T410X_move, T410X_vector,
! 301: T410X_linetype, T410X_put_text, T410X_text_angle,
! 302: null_justify_text, T410X_point, do_arrow, set_font_null
! 303: TERM_TABLE_END(tek410x_driver)
! 304:
! 305: #undef LAST_TERM
! 306: #define LAST_TERM tek410x_driver
! 307:
! 308: #endif /* TERM_TABLE */
! 309: #endif /* TERM_PROTO_ONLY */
! 310:
! 311: #ifdef TERM_HELP
! 312: START_HELP(tek410x)
! 313: "1 tek410x",
! 314: "?commands set terminal tek410x",
! 315: "?set terminal tek410x",
! 316: "?set term tek410x",
! 317: "?terminal tek410x",
! 318: "?term tek410x",
! 319: "?tek410x",
! 320: " The `tek410x` terminal driver supports the 410x and 420x family of Tektronix",
! 321: " terminals. It has no options."
! 322: END_HELP(tek410x)
! 323: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>