ansicon: handle the disabled case properly
authorH. Peter Anvin <hpa@linux.intel.com>
Fri, 20 Mar 2009 20:43:11 +0000 (13:43 -0700)
committerH. Peter Anvin <hpa@linux.intel.com>
Fri, 20 Mar 2009 20:43:11 +0000 (13:43 -0700)
Even when disabled, we need to set the screen size, because the
downstream code depends on it.  Set it to 25x80 (maybe we should
swtich this is 24x80) in this case.

Furthermore, when disabled, we should return success == bytes
"written", not zero.

com32/lib/sys/ansicon_write.c

index 711f8b5..01d69da 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------- *
  *
- *   Copyright 2004-2008 H. Peter Anvin - All Rights Reserved
+ *   Copyright 2004-2009 H. Peter Anvin - All Rights Reserved
  *
  *   Permission is hereby granted, free of charge, to any person
  *   obtaining a copy of this software and associated documentation
@@ -38,6 +38,7 @@
 #include <minmax.h>
 #include <colortbl.h>
 #include <klibc/compiler.h>
+#include <syslinux/config.h>
 #include "file.h"
 #include "ansi.h"
 
@@ -83,11 +84,10 @@ int __ansicon_open(struct file_info *fp)
 
   if (!ansicon_counter) {
     /* Are we disabled? */
-    ireg.eax.w[0] = 0x000b;
-    __intcall(0x22, &ireg, &oreg);
-
-    if ( (signed char)oreg.ebx.b[1] < 0 ) {
+    if (syslinux_serial_console_info()->flowctl & 0x8000) {
       ti.disabled = 1;
+      ti.rows = 25;
+      ti.cols = 80;
     } else {
       /* Force text mode */
       ireg.eax.w[0] = 0x0005;
@@ -228,7 +228,7 @@ ssize_t __ansicon_write(struct file_info *fp, const void *buf, size_t count)
   (void)fp;
 
   if ( ti.disabled )
-    return n;                  /* Nothing to do */
+    return count;              /* Nothing to do */
 
   while ( count-- ) {
     __ansi_putchar(&ti, *bufp++);