Annotation of OpenXM_contrib/gnuplot/term/atariaes.trm, Revision 1.1.1.3
1.1 maekawa 1: /*
1.1.1.3 ! ohara 2: * $Id: atariaes.trm,v 1.9.2.1 2002/10/25 11:33:25 lhecking Exp $
1.1 maekawa 3: *
4: */
5:
6: /* GNUPLOT - atari.trm */
7:
8: /*[
9: * Copyright 1992, 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: * Atari Screens working with the normal VDI
43: * (this should include TT and big screens)
44: *
45: * AUTHORS
46: * Alexander Lehmann
47: * HE Koechling
48: *
49: * send your comments or suggestions to (info-gnuplot@dartmouth.edu).
50: *
51: * ATARI-related comments please to alexlehm@iti.informatik.th-darmstadt.de
52: *
53: */
54:
55: #include "driver.h"
56:
57: #ifdef TERM_REGISTER
58: register_term(atari)
59: #endif
60:
61: #ifdef TERM_PROTO
62:
63: /* function-prototypes */
64: TERM_PUBLIC void ATARI_options __PROTO((void));
65: TERM_PUBLIC void ATARI_init __PROTO((void));
66: TERM_PUBLIC void ATARI_reset __PROTO((void));
67: TERM_PUBLIC void ATARI_graphics __PROTO((void));
68: TERM_PUBLIC void ATARI_text __PROTO((void));
69: TERM_PUBLIC void ATARI_move __PROTO((unsigned int x, unsigned int y));
70: TERM_PUBLIC void ATARI_vector __PROTO((unsigned int x, unsigned int y));
71: TERM_PUBLIC void ATARI_linetype __PROTO((int lt));
72: TERM_PUBLIC void ATARI_put_text __PROTO((unsigned int x, unsigned int y, char *str));
73: TERM_PUBLIC int ATARI_text_angle __PROTO((int ang));
74: TERM_PUBLIC int ATARI_justify_text __PROTO((enum JUSTIFY mode));
75: TERM_PUBLIC void ATARI_point __PROTO((unsigned int x, unsigned int y, int number));
76:
77: /* default to hi-res */
78: #define ATARI_XMAX 640
79: #define ATARI_YMAX 400
80: #define ATARI_VCHAR 16
81: #define ATARI_HCHAR 8
82: #define ATARI_HTIC (ATARI_XMAX/100)
83: #define ATARI_VTIC ATARI_HTIC
84:
85: #endif /* TERM_PROTO */
86:
87: #ifndef TERM_PROTO_ONLY
88: #ifdef TERM_BODY
89:
90: #ifdef __PUREC__
91: /* why did they have to change these names ??? */
92: # include <aes.h>
93: # include <vdi.h>
94: # include <tos.h>
95: #else /* !__PUREC__ i.e. __GNUC__, maybe others */
96: # include <aesbind.h>
97: # include <vdibind.h>
98: # include <osbind.h>
99: extern short _global[];
100: #endif
101:
102: #include <ctype.h>
103:
104: static void open_window __PROTO((void));
105: static void close_window __PROTO((void));
106: static void text_mode __PROTO((void));
107: static void mouse_mode __PROTO((void));
108: static void application_exit __PROTO((void));
109: void application_init __PROTO((void));
110: static int intersect __PROTO((int *x1, int *y1, int *w1, int *h1, int x2, int y2, int w2, int h2));
111: static void walk_rects __PROTO((void (*draw) (int, int, int, int), int x1, int y1, int w1, int h1));
112: static void clear __PROTO((int x, int y, int w, int h));
113: static void process_message __PROTO((int *msg));
114: long poll_events __PROTO((int waitkey));
115: static void f_line __PROTO((int x, int y, int w, int h));
116: static void flush_line __PROTO((void));
117: static void put_text __PROTO((int x, int y, int w, int h));
118:
119: static int multi_aes;
120: static int window_id = -1;
121: static int vdi_handle = -1;
122: static int win_xpos, win_ypos;
123: static int win_xsize, win_ysize;
124:
125: #define ATARI_yc(y) (ATARI_maxycoord-(y))
126: static int ATARI_linetypes[] =
127: {
128: 0xffff, 0x1111,
129: 0xffff, 0x5555, 0x3333, 0x7777,
130: 0x3f3f, 0x0f0f, 0x5f5f, 0xe4e4, 0x55f5
131: };
132:
133: #define ATARI_LINETYPES_MAX (sizeof(ATARI_linetypes)/sizeof(int))
134:
135: static int ATARI_lt;
136: static int ATARI_maxycoord;
137: static int ATARI_rotation;
138: static int ATARI_numcolors;
139: static int pxy[128]; /* Maximum of 64 pixels per v_pline */
140: static int pxy_index;
141: static int ATARI_colors[16];
142: static int ATARI_savecolors[16][3];
143: static int ATARI_numpalette;
144:
145: #define ATARI_c_height_default 6 /* well, well ... */
146:
147: static int ATARI_c_height = ATARI_c_height_default;
148:
149: static int cursor_is_on = FALSE;
150: static int put_text_x;
151: static int put_text_y;
152: static char *put_text_str;
153:
154: /* don't change this without changing process_message() below */
155: #define WINTYPE (NAME|CLOSER|FULLER|MOVER|SIZER)
156:
157: static void open_window(void)
158: {
159: int x, y, w, h;
160:
161: if (window_id == -1) {
162: wind_calc(WC_BORDER, WINTYPE, win_xpos, win_ypos,
163: win_xsize, win_ysize, &x, &y, &w, &h);
164: window_id = wind_create(WINTYPE, x, y, w, h);
165:
166: if (window_id < 0) {
167: window_id = -1;
168: int_error("Can't create window", NO_CARET);
169: }
170: wind_set(window_id, WF_NAME, "gnuplot output");
171: wind_open(window_id, x, y, w, h);
172: }
173: }
174:
175: static void close_window(void)
176: {
177: if (window_id != -1) {
178: wind_close(window_id);
179: wind_delete(window_id);
180: window_id = -1;
181: }
182: }
183:
184: static void text_mode(void)
185: {
186: if (!multi_aes) {
187: if (!cursor_is_on) {
188: cursor_is_on = TRUE;
189: graf_mouse(M_OFF, NULL);
190: fputs("\033e", stderr);
191: }
192: fputs("\033E", stderr);
193: }
194: }
195:
196: static void mouse_mode(void)
197: {
198: if (!multi_aes) {
199: if (cursor_is_on) {
200: cursor_is_on = FALSE;
201: graf_mouse(M_ON, NULL);
202: fputs("\033f", stderr);
203: }
204: }
205: }
206:
207: static void application_exit(void)
208: {
209: close_window();
210:
211: if (vdi_handle != -1) {
212: v_clsvwk(vdi_handle);
213: }
214: mouse_mode();
215: }
216:
217: void application_init(void)
218: {
219: if (aesid < 0) {
220: if ((aesid = appl_init()) < 0)
221: int_error("APPL_INIT failed !", NO_CARET);
222: }
223: #ifdef __PUREC__
224: multi_aes = _GemParBlk.global[1] == -1;
225: #else
226: /* tested with gcc only */
227: multi_aes = _global[1] == -1;
228: #endif
229:
230: if (!multi_aes)
231: graf_mouse(ARROW, NULL);
232: else
233: menu_register(aesid, " Terminal: atari");
234:
235: text_mode();
236: atexit(application_exit);
237: }
238:
239: static int intersect(int *x1, int *y1, int *w1, int *h1, int x2, int y2, int w2, int h2)
240: {
241: if (*x1 > x2) {
242: w2 -= *x1 - x2;
243: x2 = *x1;
244: } else {
245: (*w1) -= x2 - *x1;
246: *x1 = x2;
247: }
248: if (*y1 > y2) {
249: h2 -= *y1 - y2;
250: y2 = *y1;
251: } else {
252: (*h1) -= y2 - *y1;
253: *y1 = y2;
254: }
255: if (*w1 > w2) {
256: *w1 = w2;
257: } else {
258: w2 = *w1;
259: }
260: if (*h1 > h2) {
261: *h1 = h2;
262: } else {
263: h2 = *h1;
264: }
265:
266: return (*w1) > 0 && (*h1) > 0;
267: }
268:
269: static void walk_rects(void (*draw) (int, int, int, int), int x1, int y1, int w1, int h1)
270: {
271: int x, y, w, h;
272: int pxy[4];
273:
274: wind_update(BEG_UPDATE);
275: graf_mouse(M_OFF, NULL);
276:
277: wind_get(window_id, WF_FIRSTXYWH, &x, &y, &w, &h);
278: while (w > 0 && h > 0) {
279: if (intersect(&x, &y, &w, &h, x1, y1, w1, h1)) {
280: pxy[0] = x;
281: pxy[1] = y;
282: pxy[2] = x + w - 1;
283: pxy[3] = y + h - 1;
284: vs_clip(vdi_handle, 1, pxy);
285: (*draw) (x, y, w, h);
286: }
287: wind_get(window_id, WF_NEXTXYWH, &x, &y, &w, &h);
288: }
289: vs_clip(vdi_handle, 0, pxy);
290: graf_mouse(M_ON, NULL);
291: wind_update(END_UPDATE);
292: }
293:
294: static void clear(int x, int y, int w, int h)
295: {
296: static MFDB mfdb =
297: {NULL};
298: int pxy[8];
299:
300: pxy[0] = pxy[4] = x;
301: pxy[1] = pxy[5] = y;
302: pxy[2] = pxy[6] = x + w - 1;
303: pxy[3] = pxy[7] = y + h - 1;
304:
305: vro_cpyfm(vdi_handle, ALL_WHITE /*0 */ , pxy, &mfdb, &mfdb);
306: }
307:
308: static void process_message(int *msg)
309: {
310: static int is_fulled = FALSE;
311: static int small_xpos, small_ypos, small_xsize, small_ysize;
312: int x, y, w, h;
313:
314: if (window_id == -1 || msg[3] != window_id)
315: return;
316:
317: switch (msg[0]) {
318: case WM_REDRAW:
319: walk_rects(clear, msg[4], msg[5], msg[6], msg[7]);
320: break;
321:
322: case WM_CLOSED:
323: close_window();
324: break;
325:
326: case WM_TOPPED:
327: wind_set(window_id, WF_TOP, window_id);
328: break;
329:
330: case WM_MOVED:
331: case WM_SIZED:
332: is_fulled = 0;
333: wind_calc(WC_WORK, WINTYPE, msg[4], msg[5], msg[6], msg[7],
334: &win_xpos, &win_ypos, &win_xsize, &win_ysize);
335: wind_set(window_id, WF_CURRXYWH, msg[4], msg[5], msg[6], msg[7]);
336: break;
337:
338: case WM_FULLED:
339: if (!is_fulled) {
340: is_fulled = TRUE;
341: small_xpos = win_xpos;
342: small_ypos = win_ypos;
343: small_xsize = win_xsize;
344: small_ysize = win_ysize;
345:
346: wind_get(0, WF_WORKXYWH, &x, &y, &w, &h);
347: wind_calc(WC_WORK, WINTYPE, x, y, w, h, &win_xpos, &win_ypos,
348: &win_xsize, &win_ysize);
349: } else {
350: is_fulled = FALSE;
351: win_xpos = small_xpos;
352: win_ypos = small_ypos;
353: win_xsize = small_xsize;
354: win_ysize = small_ysize;
355: }
356: wind_calc(WC_BORDER, WINTYPE, win_xpos, win_ypos, win_xsize,
357: win_ysize, &x, &y, &w, &h);
358: wind_set(window_id, WF_CURRXYWH, x, y, w, h);
359: break;
360: }
361: }
362:
363: long poll_events(int waitkey)
364: {
365: int msg[8];
366: int dummy;
367: int which;
368: int key = 0;
369: /* 1/10th second when waiting for key, poll otherwise */
370: unsigned long time = (waitkey ? 100L : 1L);
371:
372: do {
373: which = evnt_multi(
374: (waitkey ? (MU_MESAG | MU_KEYBD | MU_TIMER) : (MU_MESAG | MU_TIMER)),
375: 0, 0, 0,
376: 0, 0, 0, 0, 0,
377: 0, 0, 0, 0, 0,
378: msg,
379: #ifdef __PUREC__
380: time, 0,
381: #else
382: time,
383: #endif
384: &dummy, &dummy, &dummy, &dummy, &key, &dummy);
385:
386: if (which & MU_MESAG) {
387: process_message(msg);
388: }
389: } while (which & MU_MESAG);
390:
391: if (which & MU_KEYBD) {
392: return ((Kbshift(-1) & 7) << 24) | ((long) (key & 0xff00) << 8) | (key & 0xff);
393: } else {
394: return 0;
395: }
396: }
397:
398: static void f_line(int x, int y, int w, int h)
399: {
400: v_pline(vdi_handle, pxy_index, pxy);
401: }
402:
403: static void flush_line()
404: {
405: int line_type;
406: int color_index;
407: int i;
408:
409: if (pxy_index >= 2) {
410: if (ATARI_numcolors == 2) { /* Monochrome */
411: color_index = 1;
412: line_type = ATARI_lt;
413: if (line_type >= 0)
414: line_type %= (ATARI_LINETYPES_MAX - 2);
415: } else { /* Color */
416: if (ATARI_lt < 0) {
417: color_index = 1;
418: line_type = ATARI_lt;
419: } else {
420: color_index = 2 + ATARI_lt % (ATARI_numcolors - 2);
421: line_type = (ATARI_lt / (ATARI_numcolors - 2)) % (ATARI_LINETYPES_MAX - 2);
422: }
423: }
424:
425: vswr_mode(vdi_handle, MD_TRANS);
426: vsl_color(vdi_handle, color_index);
427:
428: vsl_type(vdi_handle, 7);
429: vsl_udsty(vdi_handle, ATARI_linetypes[line_type + 2]);
430: walk_rects(f_line, win_xpos, win_ypos, win_xsize, win_ysize);
431: }
432: if (pxy_index >= 1) {
433: pxy[0] = pxy[2 * (pxy_index - 1)];
434: pxy[1] = pxy[2 * (pxy_index - 1) + 1];
435: pxy_index = 1;
436: }
437: }
438:
439: static void put_text(int x, int y, int w, int h)
440: {
441: v_gtext(vdi_handle, put_text_x, put_text_y, put_text_str);
442: }
443:
444: TERM_PUBLIC void ATARI_options()
445: {
446: #define ATARIHEXERROR "palette values 3 hex digits, please"
447: #define ATARIHEIGHTERROR "expecting a character height"
448: char opt[6]; /* maximum: 'fff'\0 */
449: int i;
450: char *tok_end;
451:
452: term_options[0] = NUL;
453: ATARI_c_height = ATARI_c_height_default;
454:
455: for (i = 0; i < 17; i++) {
456: if (END_OF_COMMAND)
457: break;
458: if (token[c_token].length > 5) {
459: ATARI_numpalette = 0;
460: ATARI_c_height = ATARI_c_height_default;
461: term_options[0] = NUL;
462: int_error(ATARIHEXERROR, c_token);
463: }
464: capture(opt, c_token, c_token, 6);
465: if (!i) {
466: ATARI_c_height = strtoul(opt, &tok_end, 10);
467: if (*tok_end != NUL) {
468: ATARI_numpalette = 0;
469: ATARI_c_height = ATARI_c_height_default;
470: term_options[0] = NUL;
471: int_error(ATARIHEIGHTERROR, c_token);
472: }
473: if (ATARI_c_height > 999)
474: ATARI_c_height = 999; /* avoid opt length overflow */
475: sprintf(opt, "%d ", ATARI_c_height);
476: } else {
477: if (*opt == '"' || *opt == '\'') {
478: opt[strlen(opt) - 1] = NUL;
479: strcpy(opt, opt + 1);
480: }
481: ATARI_colors[i - 1] = strtoul(opt, &tok_end, 16);
482: if (*tok_end != NUL) {
483: ATARI_numpalette = 0;
484: ATARI_c_height = ATARI_c_height_default;
485: term_options[0] = NUL;
486: int_error(ATARIHEXERROR, c_token);
487: }
488: sprintf(opt, "%X ", ATARI_colors[i - 1]);
489:
490: /* do we need to quote? */
491: if (isdigit(*opt) && strpbrk(opt, "ABCDEF")) {
492: sprintf(opt, "\"%X\" ", ATARI_colors[i - 1]);
493: }
494: }
495: strcat(term_options, opt);
496: c_token++;
497: }
498: ATARI_numpalette = (i == 0 ? 0 : i - 1);
499: /* printf("Number of linetypes:%d\n", ATARI_LINETYPES_MAX); */
500: }
501:
502: TERM_PUBLIC void ATARI_init()
503: {
504: int work_in[11];
505: int work_out[57];
506: int i;
507: int hchar, wchar, dummy;
508: int rgb[3];
509: int num_save;
510: char *colors, *tok_end;
511: int x, y, w, h;
512: static int have_win_size = 0;
513:
514: application_init();
515:
516: if (ATARI_numpalette == 0 && (colors = getenv("GNUCOLORS")) && *colors) {
517: for (i = 0; i < 17; i++) {
518: if (!i) {
519: ATARI_c_height = strtoul(colors, &tok_end, 10);
520: if (colors == tok_end) {
521: i = 0;
522: ATARI_c_height = ATARI_c_height_default;
523: break;
524: }
525: } else {
526: if (*colors == '\0')
527: break;
528: ATARI_colors[i] = strtoul(colors, &tok_end, 16);
529: if (colors == tok_end || (unsigned) ATARI_colors[i] > 0xfff) {
530: i = 0;
531: break;
532: }
533: }
534: colors = tok_end;
535:
536: while (*colors == ' ')
537: colors++;
538: }
539: ATARI_numpalette = (i == 0 ? 0 : i - 1);
540: }
541: vdi_handle = graf_handle(&dummy, &dummy, &dummy, &dummy);
542:
543: if (!vdi_handle)
544: int_error("Fatal error opening virtual workstation", NO_CARET);
545:
546: for (i = 0; i < 10; work_in[i++] = 1);
547: work_in[10] = 2; /* use raster coordinates */
548: v_opnvwk(work_in, &vdi_handle, work_out);
549:
550: if (!vdi_handle)
551: int_error("Fatal error opening virtual workstation", NO_CARET);
552:
553: if (!have_win_size) {
554: wind_get(0, WF_WORKXYWH, &x, &y, &w, &h);
555: wind_calc(WC_WORK, WINTYPE, x, y, w, h, &win_xpos, &win_ypos,
556: &win_xsize, &win_ysize);
557: have_win_size = 1;
558: }
559: term->xmax = win_xsize;
560: term->ymax = win_ysize;
561:
562: vst_height(vdi_handle, ATARI_c_height, &dummy, &dummy, &wchar, &hchar);
563:
564: term->h_char = wchar;
565: term->v_char = hchar; /* hchar stands for height this time */
566: term->h_tic = win_xsize / 100;
567: term->v_tic = term->h_tic;
568:
569: ATARI_maxycoord = win_ysize - 1;
570: ATARI_numcolors = work_out[13];
571:
572: for (i = 0; i < ATARI_numpalette; i++) {
573: vq_color(vdi_handle, i, 1, ATARI_savecolors[i]);
574:
575: rgb[0] = 1000 * (ATARI_colors[i] >> 8);
576: rgb[0] /= 15;
577: rgb[1] = 1000 * ((ATARI_colors[i] >> 4) & 15);
578: rgb[1] /= 15;
579: rgb[2] = 1000 * (ATARI_colors[i] & 15);
580: rgb[2] /= 15;
581: vs_color(vdi_handle, i, rgb);
582: }
583: pxy_index = 0;
584: }
585:
586: TERM_PUBLIC void ATARI_reset()
587: {
588: int i;
589:
590: close_window();
591: if (vdi_handle != -1) {
592: for (i = 0; i < ATARI_numpalette; i++) {
593: vs_color(vdi_handle, i, ATARI_savecolors[i]);
594: }
595: v_clsvwk(vdi_handle);
596: vdi_handle = -1;
597: }
598: }
599:
600: TERM_PUBLIC void ATARI_graphics()
601: {
602: ATARI_maxycoord = win_ysize - 1;
603:
604: term->xmax = win_xsize;
605: term->ymax = win_ysize;
606:
607: mouse_mode();
608: open_window();
609: poll_events(0);
610: walk_rects(clear, win_xpos, win_ypos, win_xsize, win_ysize);
611:
612: pxy_index = 0;
613: }
614:
615: TERM_PUBLIC void ATARI_text()
616: {
617: flush_line();
618: if (!multi_aes) {
619: while (window_id != -1 && !poll_events(1));
620: close_window();
621: }
622: text_mode();
623: }
624:
625: TERM_PUBLIC void ATARI_move(unsigned int x, unsigned int y)
626: {
627: flush_line();
628:
629: pxy[0] = x + win_xpos;
630: pxy[1] = ATARI_yc(y) + win_ypos;
631: pxy_index = 1;
632: }
633:
634: TERM_PUBLIC void ATARI_vector(unsigned int x, unsigned int y)
635: {
636: pxy[2 * pxy_index] = x + win_xpos;
637: pxy[2 * pxy_index + 1] = ATARI_yc(y) + win_ypos;
638: pxy_index++;
639:
640: if (pxy_index == 64) { /* we're all full */
641: flush_line();
642: }
643: }
644:
645: TERM_PUBLIC void ATARI_linetype(int lt)
646: {
647: flush_line();
648:
649: ATARI_lt = lt;
650: }
651:
652: TERM_PUBLIC void ATARI_put_text(unsigned int x, unsigned int y, char *str)
653: {
654: int vchar = term->v_char;
655: int dummy;
656:
657: if (!strlen(str))
658: return;
659:
660: if (x < 0)
661: x = 0;
662: if (y < 0)
663: y = 0;
664:
665: /* align text left and to middle of char height */
666: vst_alignment(vdi_handle, 0, 5, &dummy, &dummy);
667: vst_rotation(vdi_handle, (ATARI_rotation ? 900 : 0));
668: if (ATARI_rotation) {
669: put_text_x = x - vchar / 2 + 1 + win_xpos;
670: put_text_y = ATARI_yc(y) - 1 + win_ypos;
671: put_text_str = str;
672: } else {
673: put_text_x = x + 1 + win_xpos;
674: put_text_y = ATARI_yc(y) - vchar / 2 + 1 + win_ypos;
675: put_text_str = str;
676: }
677: walk_rects(put_text, win_xpos, win_ypos, win_xsize, win_ysize);
678: }
679:
680: TERM_PUBLIC int ATARI_text_angle(int ang)
681: {
682: ATARI_rotation = ang;
683:
684: return TRUE;
685: }
686:
687: TERM_PUBLIC int ATARI_justify_text(enum JUSTIFY mode)
688: {
689: return FALSE;
690: }
691:
692: TERM_PUBLIC void ATARI_point(unsigned int x, unsigned int y, int number)
693: {
694: int old_linetype;
695:
696: if (ATARI_numcolors == 2) {
697: line_and_point(x, y, number); /* monochrome */
698: } else {
699: /* we map colors that exceed our limit to dotted lines, but we can't do
700: that with the markers (sortof a generalized line_and_point) */
701: old_linetype = ATARI_lt;
702: if (ATARI_lt > ATARI_numcolors - 2)
703: ATARI_linetype(ATARI_lt % (ATARI_numcolors - 2)); /* same color, but no dots */
704: do_point(x, y, number);
705: ATARI_linetype(old_linetype);
706: }
707: }
708:
709: #endif /* TERM_BODY */
710:
711: #ifdef TERM_TABLE
712:
713: TERM_TABLE_START(atari_driver)
714: "atari", "Atari AES-Terminal",
715: ATARI_XMAX, ATARI_YMAX, ATARI_VCHAR, ATARI_HCHAR,
716: ATARI_VTIC, ATARI_HTIC, ATARI_options, ATARI_init, ATARI_reset,
717: ATARI_text, null_scale, ATARI_graphics, ATARI_move, ATARI_vector,
718: ATARI_linetype, ATARI_put_text, ATARI_text_angle,
719: ATARI_justify_text, ATARI_point, do_arrow, set_font_null,
720: 0, TERM_CAN_MULTIPLOT, 0, 0
721: TERM_TABLE_END(atari_driver)
722:
723: #undef LAST_TERM
724: #define LAST_TERM atari_driver
725:
726: #endif /* TERM_TABLE */
727:
728: #endif /* TERM_PROTO_ONLY */
729:
730: #ifdef TERM_HELP
731: START_HELP(atari)
732: "1 atari ST (via AES)",
733: "?commands set terminal atari",
734: "?set terminal atari",
735: "?set term atari",
736: "?terminal atari",
737: "?term atari",
738: "?atari",
739: " The `atari` terminal has options to set the character size and the screen",
740: " colors.",
741: "",
742: " Syntax:",
743: " set terminal atari {<fontsize>} {<col0> <col1> ... <col15.}",
744: "",
745: " The character size must appear if any colors are to be specified. Each of",
746: " the (up to 16) colors is given as a three-digit hex number, where the digits",
747: " represent RED, GREEN and BLUE (in that order). The range of 0--15 is scaled",
748: " to whatever color range the screen actually has. On a normal ST screen, odd",
749: " and even intensities are the same.",
750: "",
751: " Examples:",
752: " set terminal atari 4 # use small (6x6) font",
753: " set terminal atari 6 0 # set monochrome screen to white on black",
754: " set terminal atari 13 0 fff f00 f0 f ff f0f",
1.1.1.3 ! ohara 755: " # set first seven colors to black, white, red, green,",
! 756: " # blue, cyan, and purple and use large font (8x16).",
1.1 maekawa 757: "",
758: " Additionally, if an environment variable GNUCOLORS exists, its contents are",
759: " interpreted as an options string, but an explicit terminal option takes",
760: " precedence."
761: END_HELP(atari)
762: #endif /* TERM_HELP */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>