version 1.1, 2000/01/09 17:01:14 |
version 1.1.1.3, 2003/09/15 07:09:37 |
Line 80 TERM_PUBLIC void LINUX_linetype __PROTO((int linetype) |
|
Line 80 TERM_PUBLIC void LINUX_linetype __PROTO((int linetype) |
|
TERM_PUBLIC void LINUX_move __PROTO((unsigned int x, unsigned int y)); |
TERM_PUBLIC void LINUX_move __PROTO((unsigned int x, unsigned int y)); |
TERM_PUBLIC void LINUX_vector __PROTO((unsigned int x, unsigned int y)); |
TERM_PUBLIC void LINUX_vector __PROTO((unsigned int x, unsigned int y)); |
TERM_PUBLIC int LINUX_text_angle __PROTO((int ang)); |
TERM_PUBLIC int LINUX_text_angle __PROTO((int ang)); |
TERM_PUBLIC void LINUX_put_text __PROTO((unsigned int x, unsigned int y, char *str)); |
TERM_PUBLIC void LINUX_put_text __PROTO((unsigned int x, unsigned int y, const char *str)); |
TERM_PUBLIC void LINUX_suspend __PROTO((void)); |
TERM_PUBLIC void LINUX_suspend __PROTO((void)); |
TERM_PUBLIC void LINUX_resume __PROTO((void)); |
TERM_PUBLIC void LINUX_resume __PROTO((void)); |
|
|
Line 94 TERM_PUBLIC void LINUX_resume __PROTO((void)); |
|
Line 94 TERM_PUBLIC void LINUX_resume __PROTO((void)); |
|
static int linux_vmode = G1024x768x256; /* default mode */ |
static int linux_vmode = G1024x768x256; /* default mode */ |
static int vgacolor[] = { 7, 8, 2, 3, 4, 5, 9, 14, 12, 15, 13, 10, 11, 1, 6 }; |
static int vgacolor[] = { 7, 8, 2, 3, 4, 5, 9, 14, 12, 15, 13, 10, 11, 1, 6 }; |
static int graphics_on = FALSE; |
static int graphics_on = FALSE; |
vga_modeinfo *modeinfo; |
static vga_modeinfo *modeinfo; |
static int linux_startx, linux_starty, linux_lasty; |
static int linux_startx, linux_starty, linux_lasty; |
static int linux_angle; |
static int linux_angle; |
int LINUX_graphics_allowed; |
int LINUX_graphics_allowed; /* also used in vgagl.trm */ |
|
extern void drop_privilege(); |
|
extern void take_privilege(); |
|
|
typedef (*linux_line_func_ptr) __PROTO((int x1, int y1, int x2, int y2)); |
typedef int (*linux_line_func_ptr) __PROTO((int x1, int y1, int x2, int y2)); |
|
|
static void LINUX_putc __PROTO((unsigned int x, unsigned int y, int c, int ang, |
static void LINUX_putc __PROTO((unsigned int x, unsigned int y, int c, int ang, |
linux_line_func_ptr line_func)); |
linux_line_func_ptr line_func)); |
|
|
/* this function is called at the very beginning of main() to initialize |
/* this function is called at the very beginning of main() to initialize |
* the vgalib and to revoke suid privileges. |
* the vgalib and to revoke suid privileges. |
* /dev/console and /dev/tty\d are considered graphic terminals, all other |
* /dev/console and /dev/tty\d and /dev/vc/\d are considered graphic terminals, all other |
* don't support the linux terminal */ |
* don't support the linux terminal */ |
|
|
void LINUX_setup(void) |
void |
|
LINUX_setup(void) |
{ |
{ |
char line[256]; |
char line[256]; |
FILE *pipe; |
FILE *pipe; |
Line 124 void LINUX_setup(void) |
|
Line 127 void LINUX_setup(void) |
|
fgets(line, 256, pipe); |
fgets(line, 256, pipe); |
pclose(pipe); |
pclose(pipe); |
line[strlen(line) - 1] = '\0'; |
line[strlen(line) - 1] = '\0'; |
if (strcmp(line, "/dev/console") == 0 || |
if ( |
(strncmp(line, "/dev/tty", 8) == 0 && isdigit(line[8]))) |
strcmp(line, "/dev/console") == 0 || |
|
|
|
( ( strncmp(line, "/dev/tty", 8) == 0 || strncmp(line, "/dev/vc/", 8) == 0 ) |
|
&& isdigit((unsigned char) line[8])) |
|
|
|
) { |
LINUX_graphics_allowed = TRUE; |
LINUX_graphics_allowed = TRUE; |
|
} else { |
|
/* check for socket name as set for example by `screen' */ |
|
char* sty = getenv("STY"); |
|
if (sty) { |
|
int n1, n2; |
|
if (3 == sscanf(sty, "%d.tty%d.%s", &n1, &n2, line)) { |
|
/* we could check here, if host is the |
|
* same as gethostname() returns. */ |
|
LINUX_graphics_allowed = TRUE; |
|
} |
|
} |
|
} |
} |
} |
if (LINUX_graphics_allowed) { |
if (LINUX_graphics_allowed) { |
|
take_privilege(); |
vga_init(); |
vga_init(); |
|
drop_privilege(); |
} else { |
} else { |
/* err - shouldn't we give up root uid whatever happens ? |
/* err - shouldn't we give up root uid whatever happens ? |
* or perhaps vga_init() does it ? |
* or perhaps vga_init() does it ? |
Line 138 void LINUX_setup(void) |
|
Line 160 void LINUX_setup(void) |
|
} |
} |
} |
} |
|
|
TERM_PUBLIC void LINUX_options() |
TERM_PUBLIC |
|
void LINUX_options() |
{ |
{ |
if (!LINUX_graphics_allowed) { |
if (!LINUX_graphics_allowed) { |
int_error("Linux terminal driver not available", NO_CARET); |
int_error("Linux terminal driver not available", NO_CARET); |
Line 146 TERM_PUBLIC void LINUX_options() |
|
Line 169 TERM_PUBLIC void LINUX_options() |
|
fprintf(stderr, "%s\n", vga_getmodename(linux_vmode)); |
fprintf(stderr, "%s\n", vga_getmodename(linux_vmode)); |
} |
} |
|
|
TERM_PUBLIC void LINUX_init() |
TERM_PUBLIC |
|
void LINUX_init() |
{ |
{ |
/* vga_init () has been moved to immediately after main () for security */ |
/* vga_init () has been moved to immediately after main () for security */ |
if (vga_getdefaultmode() != -1) |
if (vga_getdefaultmode() != -1) |
Line 165 TERM_PUBLIC void LINUX_init() |
|
Line 189 TERM_PUBLIC void LINUX_init() |
|
linux_lasty = modeinfo->height - 1; |
linux_lasty = modeinfo->height - 1; |
} |
} |
|
|
TERM_PUBLIC void LINUX_reset() |
TERM_PUBLIC void |
|
LINUX_reset() |
{ |
{ |
if (graphics_on) { |
if (graphics_on) { |
vga_setmode(TEXT); |
vga_setmode(TEXT); |
Line 173 TERM_PUBLIC void LINUX_reset() |
|
Line 198 TERM_PUBLIC void LINUX_reset() |
|
} |
} |
} |
} |
|
|
TERM_PUBLIC void LINUX_text() |
TERM_PUBLIC void |
|
LINUX_text() |
{ |
{ |
if (graphics_on) { |
if (graphics_on) { |
vga_getch(); |
vga_getch(); |
Line 182 TERM_PUBLIC void LINUX_text() |
|
Line 208 TERM_PUBLIC void LINUX_text() |
|
} |
} |
} |
} |
|
|
TERM_PUBLIC void LINUX_graphics() |
TERM_PUBLIC void |
|
LINUX_graphics() |
{ |
{ |
if (!graphics_on) { |
if (!graphics_on) { |
vga_setmode(linux_vmode); |
vga_setmode(linux_vmode); |
Line 190 TERM_PUBLIC void LINUX_graphics() |
|
Line 217 TERM_PUBLIC void LINUX_graphics() |
|
} |
} |
} |
} |
|
|
TERM_PUBLIC void LINUX_suspend() |
TERM_PUBLIC void |
|
LINUX_suspend() |
{ |
{ |
vga_flip(); |
vga_flip(); |
} |
} |
|
|
TERM_PUBLIC void LINUX_resume() |
TERM_PUBLIC void |
|
LINUX_resume() |
{ |
{ |
vga_flip(); |
vga_flip(); |
} |
} |
|
|
TERM_PUBLIC void LINUX_linetype(linetype) |
TERM_PUBLIC void |
|
LINUX_linetype(linetype) |
int linetype; |
int linetype; |
{ |
{ |
if (linetype >= 13) |
if (linetype >= 13) |
|
|
vga_setcolor(vgacolor[linetype + 2]); |
vga_setcolor(vgacolor[linetype + 2]); |
} |
} |
|
|
TERM_PUBLIC void LINUX_move(x, y) |
TERM_PUBLIC void |
|
LINUX_move(x, y) |
unsigned int x; |
unsigned int x; |
unsigned int y; |
unsigned int y; |
{ |
{ |
|
|
linux_starty = y; |
linux_starty = y; |
} |
} |
|
|
TERM_PUBLIC void LINUX_vector(x, y) |
TERM_PUBLIC void |
|
LINUX_vector(x, y) |
unsigned int x; |
unsigned int x; |
unsigned int y; |
unsigned int y; |
{ |
{ |
|
|
linux_starty = y; |
linux_starty = y; |
} |
} |
|
|
TERM_PUBLIC int LINUX_text_angle(ang) |
TERM_PUBLIC int |
|
LINUX_text_angle(ang) |
int ang; |
int ang; |
{ |
{ |
linux_angle = ang; |
linux_angle = ang; |
return TRUE; |
return TRUE; |
} |
} |
|
|
static void LINUX_putc(x, y, c, ang, line_func) |
static void |
|
LINUX_putc(x, y, c, ang, line_func) |
unsigned int x, y; |
unsigned int x, y; |
int c; |
int c; |
int ang; |
int ang; |
Line 258 linux_line_func_ptr line_func; |
|
Line 292 linux_line_func_ptr line_func; |
|
} |
} |
} |
} |
|
|
TERM_PUBLIC void LINUX_put_text(x, y, str) |
TERM_PUBLIC void |
|
LINUX_put_text(x, y, str) |
unsigned int x, y; |
unsigned int x, y; |
char *str; |
const char *str; |
{ |
{ |
int i; |
int i; |
switch (linux_angle) { |
switch (linux_angle) { |