X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fterminal%2Fterminal.c;h=c8a605d8f2eb4169ead36f70d3e6622779414cb9;hb=71ca6750d4f402feb0f3c630ba8d12eb73ef2216;hp=9f371821f95436b1c24a9c13b286ca6c627d8aa6;hpb=bce579d144b66ca2eee18f6d27d847285a96d7b9;p=pspp diff --git a/src/ui/terminal/terminal.c b/src/ui/terminal/terminal.c index 9f371821f9..c8a605d8f2 100644 --- a/src/ui/terminal/terminal.c +++ b/src/ui/terminal/terminal.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2006, 2007, 2010, 2017 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,77 +16,58 @@ #include -#include +#include "ui/terminal/terminal.h" #include #include -#include +#include "data/settings.h" +#include "libpspp/compiler.h" -#include "error.h" +#include "gl/error.h" #include "gettext.h" -#define _(msgid) gettext (msgid) -static int view_width = -1; -static int view_length = -1; -/* Initializes the terminal interface by determining the size of - the user's terminal. Stores a pointer to the size variables - in *VIEW_WIDTH_P and *VIEW_LENGTH_P. */ -void -terminal_init (int **view_width_p, int **view_length_p) -{ - *view_width_p = &view_width; - *view_length_p = &view_length; - terminal_check_size (); -} +#ifdef HAVE_TERMIOS_H +# include +#endif -/* Code that interfaces to ncurses. This must be at the very end - of this file because curses.h redefines "bool" on some systems - (e.g. OpenBSD), causing declaration mismatches with functions - that have parameters or return values of type "bool". */ -#if HAVE_LIBNCURSES -#include -#include +#ifdef GWINSZ_IN_SYS_IOCTL +# include #endif +#define _(msgid) gettext (msgid) + + /* Determines the size of the terminal, if possible, or at least takes an educated guess. */ void terminal_check_size (void) { -#if HAVE_LIBNCURSES - if (getenv ("TERM") != NULL) + int view_width = 0; + int view_length = 0; + +#ifdef HAVE_TERMIOS_H + struct winsize ws; + if (0 == ioctl (0, TIOCGWINSZ, &ws)) { - char term_buffer [16384]; - - if (tgetent (term_buffer, getenv ("TERM")) > 0) - { - if (tgetnum ("li") > 0) - view_length = tgetnum ("li"); - if (tgetnum ("co") > 1) - view_width = tgetnum ("co") - 1; - } - else - error (0, 0, _("could not access definition for terminal `%s'"), - getenv ("TERM")); + view_width = ws.ws_col; + view_length = ws.ws_row; } + else #endif - - if (view_width <= 0) { - if (getenv ("COLUMNS") != NULL) - view_width = atoi (getenv ("COLUMNS")); - if (view_width <= 0) - view_width = 79; - } + if (view_width <= 0 && getenv ("COLUMNS") != NULL) + view_width = atoi (getenv ("COLUMNS")); - if (view_length <= 0) - { - if (getenv ("LINES") != NULL) - view_length = atoi (getenv ("LINES")); - if (view_length <= 0) - view_length = 24; + if (view_length <= 0 && getenv ("LINES") != NULL) + view_length = atoi (getenv ("LINES")); } + + if (view_width > 0) + settings_set_viewwidth (view_width); + + if (view_length > 0) + settings_set_viewlength (view_length); }