///////////////////////////////////////////////////////////////////////////////
// Name: wx/private/terminal.h
// Purpose: Helpers for working with terminal output
// Author: Vadim Zeitlin
// Created: 2024-11-22
// Copyright: (c) 2024 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_PRIVATE_TERMINAL_H_
#define _WX_PRIVATE_TERMINAL_H_
#ifdef __WINDOWS__
#include "wx/utils.h"
#include "wx/msw/wrapwin.h"
#endif
#ifdef __UNIX__
#include <stdio.h>
#include <unistd.h>
#include <sys/ioctl.h>
#endif
namespace wxTerminal
{
// Return the current terminal width or 0 if we couldn't find it.
inline int GetWidth()
{
#ifdef __WINDOWS__
CONSOLE_SCREEN_BUFFER_INFO csbi;
if ( ::GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi) )
return csbi.srWindow.Right - csbi.srWindow.Left + 1;
#elif defined TIOCGWINSZ
winsize w;
int fd = fileno(stdout);
if ( fd != -1 && ioctl(fd, TIOCGWINSZ, &w) == 0 )
return w.ws_col;
#endif
return 0;
}
} // namespace wxTerminal
#endif // _WX_PRIVATE_TERMINAL_H_