[gforth] / gforth / termsize.fs  

gforth: gforth/termsize.fs


1 : anton 1.1 \ terminal size stuff
2 :    
3 :     \ Copyright (C) 1996 Free Software Foundation, Inc.
4 :    
5 :     \ This file is part of Gforth.
6 :    
7 :     \ Gforth is free software; you can redistribute it and/or
8 :     \ modify it under the terms of the GNU General Public License
9 :     \ as published by the Free Software Foundation; either version 2
10 :     \ of the License, or (at your option) any later version.
11 :    
12 :     \ This program is distributed in the hope that it will be useful,
13 :     \ but WITHOUT ANY WARRANTY; without even the implied warranty of
14 :     \ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 :     \ GNU General Public License for more details.
16 :    
17 :     \ You should have received a copy of the GNU General Public License
18 :     \ along with this program; if not, write to the Free Software
19 :     \ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 :    
21 :    
22 :     \ Currently we get the size from the environment. If the variables
23 :     \ LINES and COLUMNS are not set or wrong, do an "eval `resize`" before
24 :     \ starting Gforth. If you change the window size after starting
25 :     \ Gforth, you are out of luck.
26 :    
27 :     \ To do: An implementation that uses termcap and/or ioctl TIOCGWINSZ.
28 :    
29 :     \ # rows and columns that the terminal has.
30 :     \ these words are also present in PFE.
31 :     &80 Value cols
32 :     &24 Value rows
33 :    
34 :     : getenv-unum ( udefault c-addr ucount -- u )
35 :     getenv over
36 :     IF
37 :     0. 2swap >number 0=
38 :     IF ( udefault d c-addr2 )
39 :     drop drop nip
40 :     ELSE ( udefault djunk c-addr2 )
41 :     drop 2drop
42 :     ENDIF
43 :     ELSE ( udefault c-addr ucount )
44 :     2drop
45 :     ENDIF ;
46 :    
47 :     :noname ( -- )
48 :     defers 'cold
49 :     cols s" COLUMNS" getenv-unum TO cols
50 :     rows s" LINES" getenv-unum TO rows ;
51 :     IS 'cold

CVS Admin

Powered by ViewCVS 1.0-dev
(Powered by ViewCVS)

ViewCVS and CVS Help