From 371f8fac6620ce362cae2c0c69fad9c1f8194be5 Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Fri, 6 Feb 2009 05:37:36 +0000
Subject: [PATCH] Disable ciolib ANSI output while doing a raw write to cterm.

---
 src/xpdoor/xpdoor.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/src/xpdoor/xpdoor.c b/src/xpdoor/xpdoor.c
index d7ed48c4fa..995af0cf02 100644
--- a/src/xpdoor/xpdoor.c
+++ b/src/xpdoor/xpdoor.c
@@ -10,6 +10,7 @@
 #include <dirwrap.h>
 
 struct xpd_info		xpd_info;
+static BOOL raw_write=FALSE;
 
 static int xpd_ansi_readbyte_cb(void)
 {
@@ -56,6 +57,11 @@ static int xpd_ansi_readbyte_cb(void)
 	return(-2);
 }
 
+static int dummy_writebyte_cb(unsigned char ch)
+{
+	return(ch);
+}
+
 static int xpd_ansi_writebyte_cb(unsigned char ch)
 {
 	switch(xpd_info.io_type) {
@@ -245,14 +251,24 @@ done_parsing:
 int xpd_rwrite(const char *data, int data_len)
 {
 	struct text_info	ti;
+
 	/* Set up cterm to match conio */
 	gettextinfo(&ti);
 	cterm.x=ti.winleft+ti.curx-1;
 	cterm.y=ti.wintop+ti.cury-1;
 	cterm.attr=ti.attribute;
 	cterm.quiet=TRUE;
+
+	/* Disable ciolib output for ANSI */
+	ciolib_ansi_writebyte_cb=dummy_writebyte_cb;
+
 	/* Send data to cterm */
 	cterm_write(data, data_len, NULL, 0, NULL);
+	xpd_ansi_writestr_cb(data,data_len);
+
+	/* Re-enable ciolib */
+	ciolib_ansi_writebyte_cb=xpd_ansi_writebyte_cb;
+
 	/* Set conio to match cterm */
 	gotoxy(cterm.x-ti.winleft+1, cterm.y-ti.winright+1);
 	textattr(cterm.attr);
-- 
GitLab