diff options
-rw-r--r-- | Makefile.wcc | 3 | ||||
-rw-r--r-- | teco.h | 4 | ||||
-rw-r--r-- | tecterm.c | 35 |
3 files changed, 41 insertions, 1 deletions
diff --git a/Makefile.wcc b/Makefile.wcc index 21d1b8e..ffee78c 100644 --- a/Makefile.wcc +++ b/Makefile.wcc @@ -24,7 +24,8 @@ LDFLAGS += format dos option map option stack=16k & set WCC_DEFS=-dSTDC_HEADERS=1 -dHAVE_STDIO_H -dHAVE_CTYPE_H -dHAVE_ERRNO_H & -dHAVE_STRING_H -dHAVE_STRINGS_H -dHAVE_FCNTL_H -dHAVE_IO_H & -dHAVE_SYS_STAT_H -dHAVE_SIGNAL_H -dHAVE_STDLIB_H -dHAVE_UNISTD_H & - -dHAVE_STDINT_H -dHAVE_DIRECT_H -dHAVE_SBRK -dHAVE_STRCHR -dTERMCAP + -dHAVE_STDINT_H -dHAVE_DIRECT_H -dHAVE_I86_H & + -dHAVE_SBRK -dHAVE_STRCHR -dTERMCAP all : teco.exe .SYMBOLIC @@ -477,6 +477,10 @@ typedef unsigned long teco_ptrint_t; #include <direct.h> #endif +#if HAVE_I86_H +#include <i86.h> +#endif + #if HAVE_SYS_WAIT_H # include <sys/wait.h> #endif @@ -1069,6 +1069,32 @@ term_flush() }/* End Routine */ +#ifdef MSDOS + +#define VIDEO 0x10 + +static int +term_isvga(void) +{ + union REGS regs; + regs.x.ax = 0x1a00; + int86(VIDEO, ®s, ®s); + return regs.h.al == 0x1a && regs.h.bl > 6; +} + +static int +term_isega(void) +{ + union REGS regs; + if(term_isvga()) return 0; + regs.h.ah = 0x12; + regs.h.bl = 0x10; + int86(VIDEO, ®s, ®s); + return regs.h.bl != 0x10; +} + +#endif + /** @@ -1115,6 +1141,15 @@ init_term_description( void ) * really knows the size of the terminal window, and in this case, we will * leave it alone. */ +#ifdef MSDOS + /* + * NOTE: It could also be done generically with + * term_goto(9999,9999), followed by \e[6n + */ + if(!term_columns) term_columns = *(uint8_t*)MK_FP(0x40,0x4a) & 255; + if(!term_lines && (term_isvga() || term_isega())) term_lines = *(uint8_t*)MK_FP(0x40,0x84) + 1; +#endif + #ifdef TERMCAP if(!term_columns) term_columns = tgetnum("co"); if(!term_lines) term_lines = tgetnum("li"); |