summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/SNIP/ansiload.c
diff options
context:
space:
mode:
Diffstat (limited to 'reference/C/CONTRIB/SNIP/ansiload.c')
-rwxr-xr-xreference/C/CONTRIB/SNIP/ansiload.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/ansiload.c b/reference/C/CONTRIB/SNIP/ansiload.c
new file mode 100755
index 0000000..e4dadc0
--- /dev/null
+++ b/reference/C/CONTRIB/SNIP/ansiload.c
@@ -0,0 +1,66 @@
+/*
+** ANSILOAD.C - tries to detect if an ANSI-style driver is loaded
+**
+** public domain by Bob Jarvis
+*/
+
+#include <stdio.h>
+#include <dos.h>
+
+typedef enum {FALSE, TRUE} LOGICAL;
+
+void goto_rc(int row, int col)
+{
+ union REGS regs;
+
+ regs.h.ah = 2;
+ regs.h.bh = 0; /* assumes we're using video page 0 */
+ regs.h.dh = (unsigned char)row;
+ regs.h.dl = (unsigned char)col;
+
+ int86(0x10, &regs, &regs);
+}
+
+void get_rc(int *row, int *col)
+{
+ union REGS regs;
+
+ regs.h.ah = 3;
+ regs.h.bh = 0; /* again, assume video page 0 */
+
+ int86(0x10, &regs, &regs);
+
+ *row = regs.h.dh;
+ *col = regs.h.dl;
+}
+
+int is_ansi_loaded(void)
+{
+ int save_r, save_c;
+ int new_r, new_c;
+ int isloaded;
+
+ get_rc(&save_r, &save_c);
+ goto_rc(15,15);
+ fputs("\x1B[0;0H", stderr);
+
+ get_rc(&new_r, &new_c);
+
+ if(new_r == 0 && new_c == 0)
+ isloaded = TRUE;
+ else
+ {
+ isloaded = FALSE;
+ fputs("\b\b\b\b\b\b \b\b\b\b\b\b", stderr);
+ }
+
+ goto_rc(save_r, save_c);
+ return isloaded;
+}
+
+void main(void)
+{
+ if(is_ansi_loaded())
+ puts("ANSI.SYS is loaded");
+ else puts("ANSI.SYS is NOT loaded");
+}