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) {