This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

.*Console.* Functions vs. tty


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/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]