.*Console.* Functions vs. tty

Parker, Ron rdparker@butlermfg.com
Mon Oct 29 10:29:00 GMT 2001


I am working on a program that offers a choice of user interfaces at run
time, similar to what xemacs does.  This application is designed to be
portable at least between cygwin, Linux, and native Windows.  One of the
UI's uses the standard console interfaces.  However, when the code runs
under cygwin with "tty" enabled, I cannot get the console screen buffer
information.  This is not dependent upon it being a cygwin compiled
application.  It "malfunctions" if compiled by gcc for cygwin, gcc for
MinGW, or MSVC.

I have narrowed the problem down to a simple portion of code, which will
exhibit the same behavior as my application.  The GetConsoleScreenBufferInfo
function fails with error 6, ERROR_INVALID_HANDLE.  

How can I work around this without forcing the user to use "notty"?

#include <windows.h>

int main()
{
  int retval = 0;
  CONSOLE_SCREEN_BUFFER_INFO csbi;
  
  HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);

  AllocConsole();
  if (output == INVALID_HANDLE_VALUE)
  {
    printf("GetStdHandle failed: %ld\n", GetLastError());
    retval = 1;
  }
  else if (!GetConsoleScreenBufferInfo(output, &csbi))
  {
    printf("GetConsoleScreenBufferInfo failed: %ld\n", GetLastError());
    retval = 2;
  }
  else
    printf("Success.");

  return retval;
}


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list