Article View: comp.terminals
Article #1573Re: Lines and columns under 4.3
From: Doug Gwyn
Date: Fri, 09 Jan 1987 19:03
Date: Fri, 09 Jan 1987 19:03
54 lines
3098 bytes
3098 bytes
In article <234@su-russell.ARPA> goldberg@su-russell.UUCP (Jeffrey Goldberg) writes:
>"Lines and columns are now stored in the kernel as well as in the
>termcap entry. Most programs now use the kernel information
>primarily; the information in this file is used only if the kernel
>does not have any information."
The 4.3BSD kernel (following the lead of Sun and/or AT&T) maintains
information about the dimensions of each "terminal" (which may
actually be just a window on a multi-window display) in a
/*
* Window size structure
*/
struct winsize {
unsigned short ws_row, ws_col; /* character size of window */
unsigned short ws_xpixel, ws_ypixel; /* pixel size of window */
};
That contains all 0 data if the "terminal" size has never been set.
The only way to set the size is via a TIOCSWINSZ ioctl, and the only
way to query the size is via a TIOCGWINSZ ioctl, both of which take
a (struct winsize *) as their third parameter.
(Note: DMD-supporting UNIX System Vs, such as SVR3, have analogous
information contained in a (struct jwinsize) with a JWINSIZE ioctl
to retrieve it; it's updated automatically inside the kernel when
a window size changes.)
The general procedure for determining a terminal's screen size is:
1) Try a TIOCGWINSZ. If it fails, or if it returns 0 data,
then proceed to step 3; otherwise use the returned
information as the terminal's screen size.
2) Some sites have added pagination to their terminal
handler; in this case one might be able to obtain
the number of rows via an ioctl analogous to the
procedure of step 1; if supported and successful
(and non-zero!), use this value and proceed to
step 3 just to get columns information.
3) Try to fetch COLUMNS and/or LINES from the environment
(if not yet known from previous steps). If either
is available, use it for the terminal size in that
direction; if either is not set in the environment,
find it out by proceeding to step 4.
4) Get TERM from the environment and use it in a tgetent (or
equivalent call to initialize the display-handling
package). The termcap capability "li" (terminfo
"lines") is the default number of lines and termcap
"co" (terminfo "cols") is the default number of
columns to assume for that terminal type.
5) If one still hasn't determined the terminal screen size,
assume that it is an "infinite quadrant". This
probably isn't correct, but then it's what the user
deserves for not setting up any information about
his terminal.
Technical Details
Message-ID:
<5502@brl-smoke.ARPA>Path:
arc1-ca.pugleaf.net!utzoo!mnetor!seismo!brl-adm!brl-smoke!gwynReferences:
<234@su-russell.ARPA>Show Full Headers
Complete Article Headers
Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: arc1-ca.pugleaf.net!utzoo!mnetor!seismo!brl-adm!brl-smoke!gwyn From: gwyn@brl-smoke.ARPA (Doug Gwyn ) Newsgroups: comp.terminals Subject: Re: Lines and columns under 4.3 Message-ID: <5502@brl-smoke.ARPA> Date: Fri, 9-Jan-87 14:03:47 EST Article-I.D.: brl-smok.5502 Posted: Fri Jan 9 14:03:47 1987 Date-Received: Mon, 12-Jan-87 21:52:15 EST References: <234@su-russell.ARPA> Reply-To: gwyn@brl.arpa (Doug Gwyn (VLD/VMB) <gwyn>) Organization: Ballistic Research Lab (BRL), APG, MD. Lines: 54