2 /* Copyright (c) 1995, 1997, 1998, 1999, 2000, 2002 by Arkkra Enterprises */
3 /* All rights reserved */
5 /* initialization table and routine for Mup/Ghostscript display program */
7 /* when adding support for additional terminal types, you will need to
8 * add the declarations of relevant functions and add an entry to the
16 /* declare the functions, etc for each supported terminal type */
19 extern void parse_X_options P((void));
20 extern void xterm_setup P((void));
21 extern void xterm_cleanup P((int status));
22 extern void xterm_draw P((int line, int small));
23 extern void xterm_user_interf P((void));
24 extern void xterm_error P((char *msg));
25 extern void xterm_raster P((unsigned char *bitmap, int width, int height));
26 #define XVIDLINES (400) /* request 400 lines when in 640x480 mode */
29 #if defined(AT386) && ! defined(__DOS__)
30 extern void at386_setup P((void));
31 extern void at386_cleanup P((int status));
32 extern void at386_draw P((int line, int small));
33 extern void at386_user_interf P((void));
34 extern void at386_error P((char *msg));
35 extern void at386_raster P((unsigned char *bitmap, int width, int height));
36 #define VIDLINES (350) /* for 640x350 display mode */
39 #if defined(linux) && ! defined(NO_VGA_LIB)
40 extern void vgalib_setup P((void));
41 extern void vgalib_cleanup P((int status));
42 extern void vgalib_draw P((int line, int small));
43 extern void vgalib_user_interf P((void));
44 extern void vgalib_error P((char *msg));
45 extern void vgalib_raster P((unsigned char *bitmap, int width, int height));
46 #define LINVGAVIDLINES (480) /* for 640x480 display mode */
50 extern void dos_setup P((void));
51 extern void dos_cleanup P((int status));
52 extern void dos_draw P((int line, int small));
53 extern void dos_user_interf P((void));
54 extern void dos_error P((char *msg));
55 extern void dos_raster P((unsigned char *bitmap, int width, int height));
56 /* video lines determined at run time */
61 /* list of supported $TERM types and which functions and parameters to use
62 * to implement them. To support a new terminal type, write appropriate
63 * functions, and add to the Config table.
65 struct CONFIG Config [] = {
67 #if defined(AT386) && ! defined(__DOS__)
69 "AT386", /* terminal type name */
70 at386_setup, /* setup function */
71 at386_cleanup, /* cleanup function */
72 at386_draw, /* function for drawing a screen full of bits */
73 at386_user_interf, /* function to read user input and call do_cmd on it */
74 at386_error, /* error reporting function */
75 at386_raster, /* function to display a raster bitmap centered on screen */
76 VIDLINES, /* screen vertical lines */
77 0.75 /* aspect ratio */
83 "xterm", /* terminal type name */
84 xterm_setup, /* setup function */
85 xterm_cleanup, /* cleanup function */
86 xterm_draw, /* function for drawing a screen full of bits */
87 xterm_user_interf, /* function to read user input and call do_cmd on it */
88 xterm_error, /* error reporting function */
89 xterm_raster, /* function to display a raster bitmap centered on screen */
90 XVIDLINES, /* screen vertical lines */
91 1.0 /* aspect ratio */
95 #if defined(linux) && ! defined(NO_VGA_LIB)
97 "linux", /* terminal type name */
98 vgalib_setup, /* setup function */
99 vgalib_cleanup, /* cleanup function */
100 vgalib_draw, /* function for drawing a screen full of bits */
101 vgalib_user_interf, /* function to read user input and call do_cmd on it */
102 vgalib_error, /* error reporting function */
103 vgalib_raster, /* function to display a raster bitmap centered on screen */
104 LINVGAVIDLINES, /* screen vertical lines */
105 1.0 /* aspect ratio */
111 "DOS", /* terminal type name */
112 dos_setup, /* setup function */
113 dos_cleanup, /* cleanup function */
114 dos_draw, /* function for drawing a screen full of bits */
115 dos_user_interf, /* function to read user input and call do_cmd on it */
116 dos_error, /* error reporting function */
117 dos_raster, /* function to display a raster bitmap centered on screen */
118 0, /* screen vertical lines--will get set at run time */
119 0.0 /* aspect ratio adjust--will get set at run time */
125 /* initialize. Make sure TERM is supported, and set up for it. */
131 struct CONFIG *c_p; /* terminal configuration info */
132 char *termname; /* $TERM */
135 struct CONFIG *xwindow_conf_p = 0; /* info for running under X */
142 if ((termname = getenv("TERM")) == NULL) {
143 fprintf(stderr, "can't determine $TERM\n");
148 /* find appropriate functions to use based on terminal type */
149 numtypes = sizeof(Config) / sizeof(struct CONFIG);
150 for (c_p = Config; numtypes > 0; c_p++, numtypes--) {
151 if (strcmp(c_p->termname, termname) == 0) {
156 /* save the xwindow config. If we don't find a
157 * matching terminal type here, we're try some other
158 * tricks later to guess if we're running under X */
159 if (strcmp(c_p->termname, "xterm") == 0) {
160 xwindow_conf_p = c_p;
166 if (Conf_info_p == (struct CONFIG *) 0) {
167 /* There can be several variations on xterm, so
168 * if $TERM at least starts with xterm, consider that
169 * good enough to try. And to try even harder to
170 * recognize if we're probably running under X, and
171 * thus the 'xterm' type will probably work, check if
172 * $DISPLAY is set. Chances are, if it is, we're probably
173 * in X. If it turns out we're not, we'll fail eventually,
174 * but we will have at least tried pretty hard
175 * to find something that would work... */
176 if (strncmp(termname, "xterm", 5) == 0 ||
177 getenv("DISPLAY") != (char *) 0) {
178 Conf_info_p = xwindow_conf_p;
183 /* Make sure we managed to find a $TERM we can work with */
184 if (Conf_info_p == (struct CONFIG *) 0 ) {
185 fprintf(stderr, "$TERM type not supported\n");
190 /* X has some extra options, so handle them */
191 if (strcmp(Conf_info_p->termname, "xterm") == 0) {