2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these librararies and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 /* $XConsortium: getwinsize.c /main/3 1995/11/01 18:20:07 rswiston $ */
24 /***************************************************************
26 * AT&T - PROPRIETARY *
28 * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF *
29 * AT&T BELL LABORATORIES *
30 * AND IS NOT TO BE DISCLOSED OR USED EXCEPT IN *
31 * ACCORDANCE WITH APPLICABLE AGREEMENTS *
33 * Copyright (c) 1994 AT&T Bell Laboratories *
34 * Unpublished & Not for Publication *
35 * All Rights Reserved *
37 * The copyright notice above does not evidence any *
38 * actual or intended publication of such source code *
40 * This software was created by the *
41 * Software Engineering Research Department *
42 * AT&T Bell Laboratories *
44 * For further information contact *
45 * advsoft@research.att.com *
46 * Randy Hackbarth 908-582-5245 *
47 * Dave Belanger 908-582-7427 *
49 ***************************************************************/
51 /* : : generated by proto : : */
55 #if !defined(__PROTO__)
56 #if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus)
57 #if defined(__cplusplus)
58 #define __MANGLE__ "C"
63 #define __PROTO__(x) x
65 #define __PARAM__(n,o) n
66 #if !defined(__STDC__) && !defined(__cplusplus)
67 #if !defined(c_plusplus)
78 #define __PROTO__(x) ()
79 #define __OTORP__(x) x
80 #define __PARAM__(n,o) o
88 #if defined(__cplusplus) || defined(c_plusplus)
89 #define __VARARG__ ...
93 #if defined(__STDARG__)
94 #define __VA_START__(p,a) va_start(p,a)
96 #define __VA_START__(p,a) va_start(p)
104 #if defined(__STDPP__directive) && defined(__STDPP__hide)
105 __STDPP__directive pragma pp:hide ioctl sleep
107 #define ioctl ______ioctl
108 #define sleep ______sleep
111 #if defined(TIOCGWINSZ)
112 #if _sys_stream && _sys_ptem
113 #include <sys/stream.h>
114 #include <sys/ptem.h>
117 #if !defined(TIOCGSIZE) && !defined(TIOCGWINSZ)
119 #define jwinsize winsize
123 #define jwinsize winsize
124 #include <sys/jioctl.h>
130 #if defined(__STDPP__directive) && defined(__STDPP__hide)
131 __STDPP__directive pragma pp:nohide ioctl sleep
137 static int ttctl __PROTO__((int, int, __V_*));
140 getwinsize __PARAM__((int fd, register int* rows, register int* cols), (fd, rows, cols)) __OTORP__(int fd; register int* rows; register int* cols;)
147 if (!ttctl(fd, TIOCGSIZE, &ts) && ts.ts_lines > 0 && ts.ts_cols > 0)
149 if (rows) *rows = ts.ts_lines;
150 if (cols) *cols = ts.ts_cols;
158 if (!ttctl(fd, TIOCGWINSZ, &ws) && ws.ws_col > 0 && ws.ws_row > 0)
160 if (rows) *rows = ws.ws_row;
161 if (cols) *cols = ws.ws_col;
169 if (!ttctl(fd, JWINSIZE, &ws) && ws.bytesx > 0 && ws.bytesy > 0)
171 if (rows) *rows = ws.bytesy;
172 if (cols) *cols = ws.bytesx;
181 if (rows) *rows = (s = getenv("LINES")) ? strtol(s, NiL, 0) : 0;
182 if (cols) *cols = (s = getenv("COLUMNS")) ? strtol(s, NiL, 0) : 0;
189 * tty ioctl() -- no cache
193 ttctl __PARAM__((register int fd, int op, __V_* tt), (fd, op, tt)) __OTORP__(register int fd; int op; __V_* tt;)
200 for (fd = 0; fd <= 2; fd++)
201 if (!ioctl(fd, op, tt)) return(0);
202 if ((fd = open("/dev/tty", 0)) >= 0)
204 v = ioctl(fd, op, tt);
209 else if (!ioctl(fd, op, tt)) return(0);