/* New for v2.0: readline support -- daw */
/*
* Routines to figure out the screen size for split mode.
* Code is mostly stolen from less-v177!
*/
#ifdef Xenix
#include <sys/types.h>
#include <sys/ioctl.h>
#endif
#ifdef HAVE_SYS_TERMIO_H
#include <sys/termio.h>
#else
#include <sgtty.h>
#endif
#if !defined(HAVE_SYS_TERMIO_H) && defined(TIOCGWINSZ)
#include <sys/ioctl.h>
#else
/*
* For the Unix PC (ATT 7300 & 3B1):
* Since WIOCGETD is defined in sys/window.h, we can't use that to decide
* whether to include sys/window.h. Use SIGPHONE from signal.h instead.
*/
#include <signal.h>
#ifdef SIGPHONE
#include <sys/window.h>
#endif
#endif
/* for SCO. god only knows if this'll work. -- daw */
#if defined(HAVE_PTEM_H) && defined(TIOCGWINSZ)
/*
* All this just to get struct winsize. Sigh.
*/
#include <sys/types.h>
#include <sys/stream.h>
#include <sys/ptem.h>
#endif
/*
* These two variables are sometimes defined in,
* and needed by, the termcap library.
* It may be necessary on some systems to declare them extern here.
*/
/*extern*/ short ospeed; /* Terminal output baud rate */
/*extern*/ char PC; /* Pad character */
extern char *tgetstr();
extern char *tgoto();
extern char *getenv();
/*
* Get size of the output screen.
*/
void
scrsize(p_height, p_width)
int *p_height;
int *p_width;
{
register char *s;
#ifdef TIOCGWINSZ
struct winsize w;
#else
#ifdef WIOCGETD
struct uwdata w;
#endif
#endif
#ifdef TIOCGWINSZ
if (ioctl(2, TIOCGWINSZ, &w) == 0 && w.ws_row > 0)
*p_height = w.ws_row;
else
#else
#ifdef WIOCGETD
if (ioctl(2, WIOCGETD, &w) == 0 && w.uw_height > 0)
*p_height = w.uw_height/w.uw_vs;
else
#endif
#endif
if ((s = getenv("LINES")) != (char *) 0)
*p_height = atoi(s);
else
*p_height = tgetnum("li");
if (*p_height <= 0)
*p_height = 24;
#ifdef TIOCGWINSZ
if (ioctl(2, TIOCGWINSZ, &w) == 0 && w.ws_col > 0)
*p_width = w.ws_col;
else
#ifdef WIOCGETD
if (ioctl(2, WIOCGETD, &w) == 0 && w.uw_width > 0)
*p_width = w.uw_width/w.uw_hs;
else
#endif
#endif
if ((s = getenv("COLUMNS")) != (char *) 0)
*p_width = atoi(s);
else
*p_width = tgetnum("co");
if (*p_width <= 0)
*p_width = 80;
}