Terminal control/Dimensions: Difference between revisions

Content added Content deleted
m (→‎{{header|Phix}}: syntax coloured, marked p2js incompatible)
m (syntax highlighting fixup automation)
Line 4: Line 4:
=={{header|AArch64 Assembly}}==
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits}}
{{works with|as|Raspberry Pi 3B version Buster 64 bits}}
<syntaxhighlight lang="aarch64 assembly">
<lang AArch64 Assembly>
/* ARM assembly AARCH64 Raspberry PI 3B */
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program terminalSize64.s */
/* program terminalSize64.s */
Line 98: Line 98:
/* for this file see task include a file in language AArch64 assembly */
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"
.include "../includeARM64.inc"
</syntaxhighlight>
</lang>
<pre>
<pre>
Program start
Program start
Line 105: Line 105:
</pre>
</pre>
=={{header|Action!}}==
=={{header|Action!}}==
<lang Action!>PROC Main()
<syntaxhighlight lang="action!">PROC Main()
BYTE ROWCRS=$0054 ;Current cursor row
BYTE ROWCRS=$0054 ;Current cursor row
CARD COLCRS=$0055 ;Current cursor column
CARD COLCRS=$0055 ;Current cursor column
Line 120: Line 120:
PrintF("Number of colums: %U%E",width)
PrintF("Number of colums: %U%E",width)
PrintF("Number of rows: %B%E",height)
PrintF("Number of rows: %B%E",height)
RETURN</lang>
RETURN</syntaxhighlight>
{{out}}
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Terminal_control_dimensions.png Screenshot from Atari 8-bit computer]
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Terminal_control_dimensions.png Screenshot from Atari 8-bit computer]
Line 129: Line 129:


=={{header|Applesoft BASIC}}==
=={{header|Applesoft BASIC}}==
<lang ApplesoftBasic>WIDTH = PEEK(33)
<syntaxhighlight lang="applesoftbasic">WIDTH = PEEK(33)
HEIGHT = PEEK(35) - PEEK(34)</lang>
HEIGHT = PEEK(35) - PEEK(34)</syntaxhighlight>


=={{header|Arturo}}==
=={{header|Arturo}}==


<lang rebol>print ["Terminal width:" terminal\width]
<syntaxhighlight lang="rebol">print ["Terminal width:" terminal\width]
print ["Terminal height:" terminal\height]</lang>
print ["Terminal height:" terminal\height]</syntaxhighlight>


=={{header|AutoHotkey}}==
=={{header|AutoHotkey}}==
Line 141: Line 141:
{{trans|C}}
{{trans|C}}
AutoHotkey is not built for the console (it is GUI oriented) so we must call the WinAPI directly.
AutoHotkey is not built for the console (it is GUI oriented) so we must call the WinAPI directly.
<lang AHK>DllCall( "AllocConsole" ) ; create a console if not launched from one
<syntaxhighlight lang="ahk">DllCall( "AllocConsole" ) ; create a console if not launched from one
hConsole := DllCall( "GetStdHandle", int, STDOUT := -11 )
hConsole := DllCall( "GetStdHandle", int, STDOUT := -11 )


Line 155: Line 155:
columns := right - left + 1
columns := right - left + 1
rows := bottom - top + 1
rows := bottom - top + 1
MsgBox %columns% columns and %rows% rows</lang>
MsgBox %columns% columns and %rows% rows</syntaxhighlight>


=={{header|Axe}}==
=={{header|Axe}}==
Line 163: Line 163:
BaCon supports functions to retrieve the current number of <code>ROWS</code> and <code>COLUMNS</code>.
BaCon supports functions to retrieve the current number of <code>ROWS</code> and <code>COLUMNS</code>.


<lang freebasic>' ANSI terminal dimensions
<syntaxhighlight lang="freebasic">' ANSI terminal dimensions
X = COLUMNS
X = COLUMNS
Y = ROWS
Y = ROWS


PRINT "X,Y: ", X, ",", Y</lang>
PRINT "X,Y: ", X, ",", Y</syntaxhighlight>


=={{header|Batch File}}==
=={{header|Batch File}}==
'''Screen Buffer Size:'''
'''Screen Buffer Size:'''
<lang dos>@echo off
<syntaxhighlight lang="dos">@echo off


for /f "tokens=1,2 delims= " %%A in ('mode con') do (
for /f "tokens=1,2 delims= " %%A in ('mode con') do (
Line 180: Line 180:
echo Lines: %line%
echo Lines: %line%
echo Columns: %cols%
echo Columns: %cols%
exit /b 0</lang>
exit /b 0</syntaxhighlight>
{{Out}}
{{Out}}
<pre>>Size.Bat
<pre>>Size.Bat
Line 190: Line 190:
=={{header|BBC BASIC}}==
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
{{works with|BBC BASIC for Windows}}
<lang bbcbasic> dx% = @vdu.tr%-@vdu.tl% : REM Width of text viewport in pixels
<syntaxhighlight lang="bbcbasic"> dx% = @vdu.tr%-@vdu.tl% : REM Width of text viewport in pixels
dy% = @vdu.tb%-@vdu.tt% : REM Height of text viewport in pixels</lang>
dy% = @vdu.tb%-@vdu.tt% : REM Height of text viewport in pixels</syntaxhighlight>
{{works with|all BBC BASIC}}
{{works with|all BBC BASIC}}
<lang bbcbasic> PRINT:VDU 8:dx%=POS+1:PRINT : REM Width of text viewport in characters
<syntaxhighlight lang="bbcbasic"> PRINT:VDU 8:dx%=POS+1:PRINT : REM Width of text viewport in characters
REPEAT:dy%=VPOS:PRINT:UNTIL VPOS=dy%:dy%=dy%+1 : REM Height of text viewport in characters</lang>
REPEAT:dy%=VPOS:PRINT:UNTIL VPOS=dy%:dy%=dy%+1 : REM Height of text viewport in characters</syntaxhighlight>
This has the side effect of scrolling the viewport up one line.
This has the side effect of scrolling the viewport up one line.
{{works with|BBC BASIC where VDU() is supported}}
{{works with|BBC BASIC where VDU() is supported}}
<lang bbcbasic> dx% = VDU(10)-VDU(8)+1 : REM Width of text viewport in characters
<syntaxhighlight lang="bbcbasic"> dx% = VDU(10)-VDU(8)+1 : REM Width of text viewport in characters
dy% = VDU(9)-VDU(11)+1 : REM Height of text viewport in characters</lang>
dy% = VDU(9)-VDU(11)+1 : REM Height of text viewport in characters</syntaxhighlight>
This has the side effect of scrolling the viewport up one line.
This has the side effect of scrolling the viewport up one line.


Line 210: Line 210:


{{works with|BSD|4.4}}
{{works with|BSD|4.4}}
<lang c>#include <sys/ioctl.h> /* ioctl, TIOCGWINSZ */
<syntaxhighlight lang="c">#include <sys/ioctl.h> /* ioctl, TIOCGWINSZ */
#include <err.h> /* err */
#include <err.h> /* err */
#include <fcntl.h> /* open */
#include <fcntl.h> /* open */
Line 236: Line 236:
close(fd);
close(fd);
return 0;
return 0;
}</lang>
}</syntaxhighlight>


=== [[Windows]] ===
=== [[Windows]] ===
Line 242: Line 242:


{{works with|MinGW}}
{{works with|MinGW}}
<lang c>#include <windows.h>
<syntaxhighlight lang="c">#include <windows.h>
#include <wchar.h>
#include <wchar.h>


Line 269: Line 269:


return 0;
return 0;
}</lang>
}</syntaxhighlight>


=={{header|C sharp|C#}}==
=={{header|C sharp|C#}}==
Line 276: Line 276:
WindowHeight and WindowWidth are simply the size of the window, it only represents the active viewing area which may be larger or more commonly smaller than the size of the buffer.
WindowHeight and WindowWidth are simply the size of the window, it only represents the active viewing area which may be larger or more commonly smaller than the size of the buffer.


<lang csharp>
<syntaxhighlight lang="csharp">
static void Main(string[] args)
static void Main(string[] args)
{
{
Line 294: Line 294:
Console.ReadLine();
Console.ReadLine();
}
}
</syntaxhighlight>
</lang>


On the author's system this results in the following output:
On the author's system this results in the following output:
Line 307: Line 307:
=={{header|COBOL}}==
=={{header|COBOL}}==
{{works with|OpenCOBOL}}
{{works with|OpenCOBOL}}
<lang cobol> IDENTIFICATION DIVISION.
<syntaxhighlight lang="cobol"> IDENTIFICATION DIVISION.
PROGRAM-ID. terminal-dimensions.
PROGRAM-ID. terminal-dimensions.


Line 333: Line 333:


GOBACK
GOBACK
.</lang>
.</syntaxhighlight>


=={{header|Common Lisp}}==
=={{header|Common Lisp}}==
==={{header|ncurses}}===
==={{header|ncurses}}===
To interface the ncurses C library from Lisp, the ''croatoan'' library is used.
To interface the ncurses C library from Lisp, the ''croatoan'' library is used.
<lang lisp>(defun screen-dimensions ()
<syntaxhighlight lang="lisp">(defun screen-dimensions ()
(with-screen (scr :input-blocking t :input-echoing nil :cursor-visible nil)
(with-screen (scr :input-blocking t :input-echoing nil :cursor-visible nil)
(let ((width (width scr))
(let ((width (width scr))
Line 345: Line 345:
(refresh scr)
(refresh scr)
;; wait for keypress
;; wait for keypress
(get-char scr))))</lang>
(get-char scr))))</syntaxhighlight>


=={{header|Euphoria}}==
=={{header|Euphoria}}==
<lang Euphoria>include graphics.e
<syntaxhighlight lang="euphoria">include graphics.e


sequence vc
sequence vc
Line 359: Line 359:


printf(1,"Terminal height is %d\n",term_height)
printf(1,"Terminal height is %d\n",term_height)
printf(1,"Terminal width is %d\n",term_width)</lang>
printf(1,"Terminal width is %d\n",term_width)</syntaxhighlight>


=={{header|F_Sharp|F#}}==
=={{header|F_Sharp|F#}}==
{{trans|C#}}
{{trans|C#}}
<lang fsharp>open System
<syntaxhighlight lang="fsharp">open System


let bufferHeight = Console.BufferHeight
let bufferHeight = Console.BufferHeight
Line 378: Line 378:
Console.Write("Window Width: ")
Console.Write("Window Width: ")
Console.WriteLine(windowWidth)
Console.WriteLine(windowWidth)
Console.ReadLine()</lang>
Console.ReadLine()</syntaxhighlight>


=={{header|Forth}}==
=={{header|Forth}}==
{{works with|GNU Forth}} {{works with|SwiftForth}}
{{works with|GNU Forth}} {{works with|SwiftForth}}


<lang forth>variable term-width
<syntaxhighlight lang="forth">variable term-width
variable term-height
variable term-height


Line 391: Line 391:
get-size ( width height ) swap
get-size ( width height ) swap
[then]
[then]
term-width ! term-height !</lang>
term-width ! term-height !</syntaxhighlight>




=={{header|FreeBASIC}}==
=={{header|FreeBASIC}}==
<lang freebasic>Dim As Integer w, h, p, bpp, tasa
<syntaxhighlight lang="freebasic">Dim As Integer w, h, p, bpp, tasa
Dim driver_name As String
Dim driver_name As String
Screeninfo w, h, p, bpp, , tasa
Screeninfo w, h, p, bpp, , tasa
Line 416: Line 416:
Print " Tasa de refresco: "; tasa; " (Hz)"
Print " Tasa de refresco: "; tasa; " (Hz)"
Print " Nombre del driver: "; driver_name
Print " Nombre del driver: "; driver_name
Sleep</lang>
Sleep</syntaxhighlight>


=={{header|Go}}==
=={{header|Go}}==
===Sub-repository===
===Sub-repository===
{{libheader|Go sub-repositories}}
{{libheader|Go sub-repositories}}
<lang go>package main
<syntaxhighlight lang="go">package main


import (
import (
Line 437: Line 437:
}
}
fmt.Println(h, w)
fmt.Println(h, w)
}</lang>
}</syntaxhighlight>


===External command===
===External command===
<lang go>package main
<syntaxhighlight lang="go">package main


import (
import (
Line 455: Line 455:
fmt.Sscan(string(d), &h, &w)
fmt.Sscan(string(d), &h, &w)
fmt.Println(h, w)
fmt.Println(h, w)
}</lang>
}</syntaxhighlight>
===Ncurses===
===Ncurses===
{{libheader|curses}}
{{libheader|curses}}
<lang go>package main
<syntaxhighlight lang="go">package main


import (
import (
Line 475: Line 475:
height, width := s.MaxYX()
height, width := s.MaxYX()
fmt.Println(height, width)
fmt.Println(height, width)
}</lang>
}</syntaxhighlight>


=={{header|J}}==
=={{header|J}}==
Line 483: Line 483:
Nevertheless, assuming J version 6 in its usual environment, to determine its width and height, in pixels, you can use:
Nevertheless, assuming J version 6 in its usual environment, to determine its width and height, in pixels, you can use:


<lang j>_2 {.qsmsize_jijs_''</lang>
<syntaxhighlight lang="j">_2 {.qsmsize_jijs_''</syntaxhighlight>


Note also that this will typically include 37 extra pixels horizontally and 79 extra pixels vertically, which are not available to display text. In other words, if the result was 700 500 you would really have 663 pixels of width and 421 pixels of height.
Note also that this will typically include 37 extra pixels horizontally and 79 extra pixels vertically, which are not available to display text. In other words, if the result was 700 500 you would really have 663 pixels of width and 421 pixels of height.


=={{header|Julia}}==
=={{header|Julia}}==
<lang julia>
<syntaxhighlight lang="julia">
julia> using Gtk
julia> using Gtk


Line 495: Line 495:


julia>
julia>
</syntaxhighlight>
</lang>


=={{header|Kotlin}}==
=={{header|Kotlin}}==
{{Works with|Ubuntu|14.04}}
{{Works with|Ubuntu|14.04}}
<lang scala>// version 1.1.2
<syntaxhighlight lang="scala">// version 1.1.2


/*
/*
Line 511: Line 511:
println("Lines = $lines")
println("Lines = $lines")
println("Columns = $columns")
println("Columns = $columns")
}</lang>
}</syntaxhighlight>


{{out}}
{{out}}
Line 523: Line 523:
Locomotive BASIC has no built-in command to get window dimensions, but there is a firmware call to &bb69 (TXT_GET_WINDOW) for this. So we have to use a snippet of Z80 machine code to call the firmware and copy the results from the DE and HL registers to RAM. It looks like this when disassembled:
Locomotive BASIC has no built-in command to get window dimensions, but there is a firmware call to &bb69 (TXT_GET_WINDOW) for this. So we have to use a snippet of Z80 machine code to call the firmware and copy the results from the DE and HL registers to RAM. It looks like this when disassembled:


<lang z80>4000 d5 push de
<syntaxhighlight lang="z80">4000 d5 push de
4001 e5 push hl
4001 e5 push hl
4002 cd 69 bb call &bb69
4002 cd 69 bb call &bb69
Line 530: Line 530:
400c e1 pop hl
400c e1 pop hl
400d d1 pop de
400d d1 pop de
400e c9 ret</lang>
400e c9 ret</syntaxhighlight>


This routine gets POKEd into RAM (starting at address &4000) and CALLed from Locomotive BASIC, then the results are retrieved with PEEK:
This routine gets POKEd into RAM (starting at address &4000) and CALLed from Locomotive BASIC, then the results are retrieved with PEEK:


<lang locobasic>10 s=&4000:SYMBOL AFTER 256:MEMORY s-1
<syntaxhighlight lang="locobasic">10 s=&4000:SYMBOL AFTER 256:MEMORY s-1
20 FOR i=0 to 14:READ a:POKE s+i,a:NEXT
20 FOR i=0 to 14:READ a:POKE s+i,a:NEXT
30 DATA &d5,&e5,&cd,&69,&bb,&ed,&53,&20,&40,&22,&22,&40,&e1,&d1,&c9
30 DATA &d5,&e5,&cd,&69,&bb,&ed,&53,&20,&40,&22,&22,&40,&e1,&d1,&c9
Line 540: Line 540:
50 h=PEEK(&4020)-PEEK(&4022)+1
50 h=PEEK(&4020)-PEEK(&4022)+1
60 w=PEEK(&4021)-PEEK(&4023)+1
60 w=PEEK(&4021)-PEEK(&4023)+1
70 PRINT "window width:"; w; ", height:"; h</lang>
70 PRINT "window width:"; w; ", height:"; h</syntaxhighlight>


In practice, one would prefer to write the machine code routine as a slightly more elaborate RSX ('''r'''esident '''s'''ystem e'''x'''tension) which is a freely relocatable and therefore more reusable Locomotive BASIC extension. The RSX routine might be called "getwh" and accept pointers to integers, which would simplify the BASIC code to:
In practice, one would prefer to write the machine code routine as a slightly more elaborate RSX ('''r'''esident '''s'''ystem e'''x'''tension) which is a freely relocatable and therefore more reusable Locomotive BASIC extension. The RSX routine might be called "getwh" and accept pointers to integers, which would simplify the BASIC code to:


<lang locobasic>10 w%=0:h%=0 ' initialize and force integer type
<syntaxhighlight lang="locobasic">10 w%=0:h%=0 ' initialize and force integer type
20 |getwh,@w%,@h% ' call RSX and pass variables as pointers
20 |getwh,@w%,@h% ' call RSX and pass variables as pointers
30 PRINT "window width:"; w%; ", height:"; h%</lang>
30 PRINT "window width:"; w%; ", height:"; h%</syntaxhighlight>


=={{header|Mathematica}}/{{header|Wolfram Language}}==
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<lang Mathematica>WIDTH=RunThrough["tput cols", ""];
<syntaxhighlight lang="mathematica">WIDTH=RunThrough["tput cols", ""];
HEIGHT=RunThrough["tput lines", ""];</lang>
HEIGHT=RunThrough["tput lines", ""];</syntaxhighlight>


=={{header|Nim}}==
=={{header|Nim}}==


<lang nim>import terminal
<syntaxhighlight lang="nim">import terminal


let (width, height) = terminalSize()
let (width, height) = terminalSize()


echo "Terminal width: ", width
echo "Terminal width: ", width
echo "Terminal height: ", height</lang>
echo "Terminal height: ", height</syntaxhighlight>


{{out}}
{{out}}
Line 569: Line 569:
Using the library [http://forge.ocamlcore.org/projects/ansiterminal/ ANSITerminal] in the interactive loop:
Using the library [http://forge.ocamlcore.org/projects/ansiterminal/ ANSITerminal] in the interactive loop:


<lang ocaml>$ ocaml unix.cma -I +ANSITerminal ANSITerminal.cma
<syntaxhighlight lang="ocaml">$ ocaml unix.cma -I +ANSITerminal ANSITerminal.cma


# let width, height = ANSITerminal.size () ;;
# let width, height = ANSITerminal.size () ;;
val width : int = 126
val width : int = 126
val height : int = 47</lang>
val height : int = 47</syntaxhighlight>


=={{header|Perl}}==
=={{header|Perl}}==


<lang perl>use Term::Size;
<syntaxhighlight lang="perl">use Term::Size;


($cols, $rows) = Term::Size::chars;
($cols, $rows) = Term::Size::chars;
print "The terminal has $cols columns and $rows lines\n";</lang>
print "The terminal has $cols columns and $rows lines\n";</syntaxhighlight>


=={{header|Phix}}==
=={{header|Phix}}==
The buffer is usually somewhat larger (and never smaller) than the current physical screen size. I would guess that most applications are more interested in the latter.
The buffer is usually somewhat larger (and never smaller) than the current physical screen size. I would guess that most applications are more interested in the latter.
<!--<lang Phix>(notonline)-->
<!--<syntaxhighlight lang="phix">(notonline)-->
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- (video_config)</span>
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- (video_config)</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">vc</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">video_config</span><span style="color: #0000FF;">()</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">vc</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">video_config</span><span style="color: #0000FF;">()</span>
Line 591: Line 591:
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Terminal screen height is %d\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">vc</span><span style="color: #0000FF;">[</span><span style="color: #004600;">VC_SCRNLINES</span><span style="color: #0000FF;">])</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Terminal screen height is %d\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">vc</span><span style="color: #0000FF;">[</span><span style="color: #004600;">VC_SCRNLINES</span><span style="color: #0000FF;">])</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Terminal screen width is %d\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">vc</span><span style="color: #0000FF;">[</span><span style="color: #000000;">VC_SCRNCOLS</span><span style="color: #0000FF;">])</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Terminal screen width is %d\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">vc</span><span style="color: #0000FF;">[</span><span style="color: #000000;">VC_SCRNCOLS</span><span style="color: #0000FF;">])</span>
<!--</lang>-->
<!--</syntaxhighlight>-->
{{out}}
{{out}}
<pre>
<pre>
Line 601: Line 601:


=={{header|PicoLisp}}==
=={{header|PicoLisp}}==
<lang PicoLisp>(setq
<syntaxhighlight lang="picolisp">(setq
Width (in '(tput cols) (read))
Width (in '(tput cols) (read))
Height (in '(tput lines) (read)) )</lang>
Height (in '(tput lines) (read)) )</syntaxhighlight>


=={{header|PureBasic}}==
=={{header|PureBasic}}==
Line 609: Line 609:


This code is for Windows only.
This code is for Windows only.
<lang PureBasic>Macro ConsoleHandle()
<syntaxhighlight lang="purebasic">Macro ConsoleHandle()
GetStdHandle_( #STD_OUTPUT_HANDLE )
GetStdHandle_( #STD_OUTPUT_HANDLE )
EndMacro
EndMacro
Line 633: Line 633:
;
;
Print(#CRLF$+"Press ENTER to exit"):Input()
Print(#CRLF$+"Press ENTER to exit"):Input()
EndIf</lang>
EndIf</syntaxhighlight>


=={{header|Python}}==
=={{header|Python}}==
Line 641: Line 641:
This uses the [http://python.net/crew/theller/ctypes/ ctypes library] in order to get the console dimensions on Windows. This code is a slight refactoring of an [http://code.activestate.com/recipes/440694-determine-size-of-console-window-on-windows/ ActiveState Recipe]. For Linux, the tput utility is used.
This uses the [http://python.net/crew/theller/ctypes/ ctypes library] in order to get the console dimensions on Windows. This code is a slight refactoring of an [http://code.activestate.com/recipes/440694-determine-size-of-console-window-on-windows/ ActiveState Recipe]. For Linux, the tput utility is used.


<lang python>import os
<syntaxhighlight lang="python">import os


def get_windows_terminal():
def get_windows_terminal():
Line 667: Line 667:


print get_linux_terminal() if os.name == 'posix' else get_windows_terminal()
print get_linux_terminal() if os.name == 'posix' else get_windows_terminal()
</syntaxhighlight>
</lang>


=={{header|Racket}}==
=={{header|Racket}}==
<lang racket>
<syntaxhighlight lang="racket">
#lang racket
#lang racket
(require (planet neil/charterm:3:0))
(require (planet neil/charterm:3:0))
(with-charterm
(with-charterm
(charterm-screen-size))
(charterm-screen-size))
</syntaxhighlight>
</lang>


=={{header|Raku}}==
=={{header|Raku}}==
(formerly Perl 6)
(formerly Perl 6)
Using <i>stty</i> just for the heck of it.
Using <i>stty</i> just for the heck of it.
<lang perl6>my $stty = qx[stty -a];
<syntaxhighlight lang="raku" line>my $stty = qx[stty -a];
my $lines = $stty.match(/ 'rows ' <( \d+/);
my $lines = $stty.match(/ 'rows ' <( \d+/);
my $cols = $stty.match(/ 'columns ' <( \d+/);
my $cols = $stty.match(/ 'columns ' <( \d+/);
say "$lines $cols";</lang>
say "$lines $cols";</syntaxhighlight>


=={{header|Retro}}==
=={{header|Retro}}==
This information is provided by Retro in the '''ch''' (height) and '''cw''' (width) variables. You can manually obtain it using the io ports.
This information is provided by Retro in the '''ch''' (height) and '''cw''' (width) variables. You can manually obtain it using the io ports.


<lang Retro>-3 5 out wait 5 in !cw
<syntaxhighlight lang="retro">-3 5 out wait 5 in !cw
-4 5 out wait 5 in !ch</lang>
-4 5 out wait 5 in !ch</syntaxhighlight>


=={{header|REXX}}==
=={{header|REXX}}==
Line 698: Line 698:


Some REXX interpreters don't provide basic [[terminal control]] as part of the language. However, it's possible to determine the size of the terminal window by using external system commands:
Some REXX interpreters don't provide basic [[terminal control]] as part of the language. However, it's possible to determine the size of the terminal window by using external system commands:
<lang rexx>width = 'tput'( 'cols' )
<syntaxhighlight lang="rexx">width = 'tput'( 'cols' )
height = 'tput'( 'lines' )
height = 'tput'( 'lines' )


say 'The terminal is' width 'characters wide'
say 'The terminal is' width 'characters wide'
say 'and has' height 'lines'</lang>
say 'and has' height 'lines'</syntaxhighlight>


===LINESIZE===
===LINESIZE===
The <code>LINESIZE</code> built-in function returns the (terminal) screen's width. &nbsp; It is supported by most (classic) REXX interpreters (and some others) such as: CMS REXX, TSO REXX, VSE REXX, the IBM REXX compiler, PC/REXX, Personal REXX, REXX/imc, R4 and ROO. &nbsp; A sample usage of it is:
The <code>LINESIZE</code> built-in function returns the (terminal) screen's width. &nbsp; It is supported by most (classic) REXX interpreters (and some others) such as: CMS REXX, TSO REXX, VSE REXX, the IBM REXX compiler, PC/REXX, Personal REXX, REXX/imc, R4 and ROO. &nbsp; A sample usage of it is:
<lang rexx>width=linesize()</lang>
<syntaxhighlight lang="rexx">width=linesize()</syntaxhighlight>
The above example makes use of &nbsp; '''LINESIZE''' &nbsp; REXX program (or BIF) which is used to determine the screen width (or linesize) of the terminal (console).
The above example makes use of &nbsp; '''LINESIZE''' &nbsp; REXX program (or BIF) which is used to determine the screen width (or linesize) of the terminal (console).
<br>The &nbsp; '''LINESIZE.REX''' &nbsp; REXX program is included here ──► [[LINESIZE.REX]].
<br>The &nbsp; '''LINESIZE.REX''' &nbsp; REXX program is included here ──► [[LINESIZE.REX]].
Line 712: Line 712:
===SCRSIZE===
===SCRSIZE===
<code>SCRSIZE</code> is another built-in function, and returns two integers: the screen depth and the screen width. &nbsp; A few classic REXX interpreters support it: &nbsp; PC/REXX, Personal REXX, R4 and ROO.
<code>SCRSIZE</code> is another built-in function, and returns two integers: the screen depth and the screen width. &nbsp; A few classic REXX interpreters support it: &nbsp; PC/REXX, Personal REXX, R4 and ROO.
<lang rexx> parse value scrsize() with sd sw</lang>
<syntaxhighlight lang="rexx"> parse value scrsize() with sd sw</syntaxhighlight>
The above example makes use of &nbsp; '''SCRSIZE''' &nbsp; REXX program (of BIF) which is used to determine the screen size of the terminal (console).
The above example makes use of &nbsp; '''SCRSIZE''' &nbsp; REXX program (of BIF) which is used to determine the screen size of the terminal (console).
<br>The &nbsp; '''SCRSIZE.REX''' &nbsp; REXX program is included here ──► [[SCRSIZE.REX]].<br>
<br>The &nbsp; '''SCRSIZE.REX''' &nbsp; REXX program is included here ──► [[SCRSIZE.REX]].<br>


=={{header|Ring}}==
=={{header|Ring}}==
<lang ring>
<syntaxhighlight lang="ring">
system("mode 50,20")
system("mode 50,20")
</syntaxhighlight>
</lang>


=={{header|Ruby}}==
=={{header|Ruby}}==
<lang ruby>def winsize
<syntaxhighlight lang="ruby">def winsize
# Ruby 1.9.3 added 'io/console' to the standard library.
# Ruby 1.9.3 added 'io/console' to the standard library.
require 'io/console'
require 'io/console'
Line 733: Line 733:


rows, cols = winsize
rows, cols = winsize
printf "%d rows by %d columns\n", rows, cols</lang>
printf "%d rows by %d columns\n", rows, cols</syntaxhighlight>


==={{libheader|curses}}===
==={{libheader|curses}}===
<code>Curses.lines</code> and <code>Curses.cols</code> return the size of the terminal. The program ''must'' call <code>Curses.init_screen</code>, because without this call, Curses might report 0 lines and 0 columns. Beware that <code>Curses.init_screen</code> also switches the terminal to screen-oriented mode, and fails on those terminals that cannot support curses.
<code>Curses.lines</code> and <code>Curses.cols</code> return the size of the terminal. The program ''must'' call <code>Curses.init_screen</code>, because without this call, Curses might report 0 lines and 0 columns. Beware that <code>Curses.init_screen</code> also switches the terminal to screen-oriented mode, and fails on those terminals that cannot support curses.


<lang ruby>require 'curses'
<syntaxhighlight lang="ruby">require 'curses'


begin
begin
Line 750: Line 750:
ensure
ensure
Curses.close_screen
Curses.close_screen
end</lang>
end</syntaxhighlight>


=={{header|Scala}}==
=={{header|Scala}}==
{{Works with|Ubuntu|14.04}}
{{Works with|Ubuntu|14.04}}
<lang Scala> /*
<syntaxhighlight lang="scala"> /*
First execute the terminal command: 'export COLUMNS LINES'
First execute the terminal command: 'export COLUMNS LINES'
before running this program for it to work (returned 'null' sizes otherwise).
before running this program for it to work (returned 'null' sizes otherwise).
Line 760: Line 760:


val (lines, columns) = (System.getenv("LINES"), System.getenv("COLUMNS"))
val (lines, columns) = (System.getenv("LINES"), System.getenv("COLUMNS"))
println(s"Lines = $lines, Columns = $columns")</lang>
println(s"Lines = $lines, Columns = $columns")</syntaxhighlight>


=={{header|Seed7}}==
=={{header|Seed7}}==
Line 768: Line 768:
''Height'' and ''width'' are based on terminfo respectively the Windows console API.
''Height'' and ''width'' are based on terminfo respectively the Windows console API.


<lang seed7>$ include "seed7_05.s7i";
<syntaxhighlight lang="seed7">$ include "seed7_05.s7i";
include "console.s7i";
include "console.s7i";


Line 782: Line 782:
# the program waits until Return/Enter is pressed.
# the program waits until Return/Enter is pressed.
readln;
readln;
end func;</lang>
end func;</syntaxhighlight>


=={{header|Sidef}}==
=={{header|Sidef}}==
{{trans|Raku}}
{{trans|Raku}}
<lang ruby>var stty = `stty -a`;
<syntaxhighlight lang="ruby">var stty = `stty -a`;
var lines = stty.match(/\brows\h+(\d+)/);
var lines = stty.match(/\brows\h+(\d+)/);
var cols = stty.match(/\bcolumns\h+(\d+)/);
var cols = stty.match(/\bcolumns\h+(\d+)/);
say "#{lines} #{cols}";</lang>
say "#{lines} #{cols}";</syntaxhighlight>
{{out}}
{{out}}
<pre>
<pre>
Line 797: Line 797:
=={{header|Tcl}}==
=={{header|Tcl}}==
{{trans|UNIX Shell}}
{{trans|UNIX Shell}}
<lang tcl>set width [exec tput cols]
<syntaxhighlight lang="tcl">set width [exec tput cols]
set height [exec tput lines]
set height [exec tput lines]
puts "The terminal is $width characters wide and has $height lines"</lang>
puts "The terminal is $width characters wide and has $height lines"</syntaxhighlight>


=== Alternative ===
=== Alternative ===
'''Requires''': GNU coreutils
'''Requires''': GNU coreutils
<lang tcl>lassign [exec stty size] width height
<syntaxhighlight lang="tcl">lassign [exec stty size] width height
puts "The terminal is $width characters wide and has $height lines"</lang>
puts "The terminal is $width characters wide and has $height lines"</syntaxhighlight>


=={{header|UNIX Shell}}==
=={{header|UNIX Shell}}==
{{works with|Bourne Shell}}
{{works with|Bourne Shell}}
<lang bash>#!/bin/sh
<syntaxhighlight lang="bash">#!/bin/sh
WIDTH=`tput cols`
WIDTH=`tput cols`
HEIGHT=`tput lines`
HEIGHT=`tput lines`
echo "The terminal is $WIDTH characters wide and has $HEIGHT lines."</lang>
echo "The terminal is $WIDTH characters wide and has $HEIGHT lines."</syntaxhighlight>


==={{libheader|termcap}}===
==={{libheader|termcap}}===
<div style="background-color: #ffc;">termcap is obsolete.</div>
<div style="background-color: #ffc;">termcap is obsolete.</div>
<lang bash>#!/bin/sh
<syntaxhighlight lang="bash">#!/bin/sh
WIDTH=`tput co`
WIDTH=`tput co`
HEIGHT=`tput li`
HEIGHT=`tput li`
echo "The terminal is $WIDTH characters wide and has $HEIGHT lines."</lang>
echo "The terminal is $WIDTH characters wide and has $HEIGHT lines."</syntaxhighlight>


==={{header|C Shell}}===
==={{header|C Shell}}===
<lang csh>#!/bin/csh -f
<syntaxhighlight lang="csh">#!/bin/csh -f
set WIDTH=`tput cols`
set WIDTH=`tput cols`
set HEIGHT=`tput lines`
set HEIGHT=`tput lines`
echo "The terminal is $WIDTH characters wide and has $HEIGHT lines."</lang>
echo "The terminal is $WIDTH characters wide and has $HEIGHT lines."</syntaxhighlight>


=={{header|Visual Basic}}==
=={{header|Visual Basic}}==
{{trans|C#}}
{{trans|C#}}
<lang vb>Module Module1
<syntaxhighlight lang="vb">Module Module1


Sub Main()
Sub Main()
Line 846: Line 846:
End Sub
End Sub


End Module</lang>
End Module</syntaxhighlight>
{{Out}}
{{Out}}
I put the built application in Desktop:
I put the built application in Desktop:
Line 867: Line 867:
=={{header|Wren}}==
=={{header|Wren}}==
As there is currently no way to obtain this information via Wren CLI, we instead embed a Wren script in a C application and ask the host program to get it for us.
As there is currently no way to obtain this information via Wren CLI, we instead embed a Wren script in a C application and ask the host program to get it for us.
<lang ecmascript>/* terminal_control_dimensions.wren */
<syntaxhighlight lang="ecmascript">/* terminal_control_dimensions.wren */


class C {
class C {
Line 878: Line 878:
System.print("The dimensions of the terminal are:")
System.print("The dimensions of the terminal are:")
System.print(" Width = %(w)")
System.print(" Width = %(w)")
System.print(" Height = %(h)")</lang>
System.print(" Height = %(h)")</syntaxhighlight>
<br>
<br>
We now embed this Wren script in the following C program, compile and run it.
We now embed this Wren script in the following C program, compile and run it.
<lang c>#include <stdlib.h>
<syntaxhighlight lang="c">#include <stdlib.h>
#include <stdio.h>
#include <stdio.h>
#include <string.h>
#include <string.h>
Line 972: Line 972:
free(script);
free(script);
return 0;
return 0;
}</lang>
}</syntaxhighlight>


{{out}}
{{out}}
Line 982: Line 982:


=={{header|XPL0}}==
=={{header|XPL0}}==
<lang XPL0>include c:\cxpl\codes;
<syntaxhighlight lang="xpl0">include c:\cxpl\codes;
int W, H;
int W, H;
[W:= Peek($40, $4A); \IBM-PC BIOS data
[W:= Peek($40, $4A); \IBM-PC BIOS data
Line 988: Line 988:
Text(0, "Terminal width and height = ");
Text(0, "Terminal width and height = ");
IntOut(0, W); ChOut(0, ^x); IntOut(0, H);
IntOut(0, W); ChOut(0, ^x); IntOut(0, H);
]</lang>
]</syntaxhighlight>


Output:
Output:
Line 996: Line 996:


=={{header|Yabasic}}==
=={{header|Yabasic}}==
<lang yabasic>clear screen
<syntaxhighlight lang="yabasic">clear screen
w = peek("screenwidth")
w = peek("screenwidth")
h = peek("screenheight")
h = peek("screenheight")
Line 1,009: Line 1,009:
print " Ancho de la pantalla: ", w, " (pixel)"
print " Ancho de la pantalla: ", w, " (pixel)"
print "Altura de la pantalla: ", h, " (pixel)\n"
print "Altura de la pantalla: ", h, " (pixel)\n"
close window</lang>
close window</syntaxhighlight>




Line 1,015: Line 1,015:
Unix specific solution:
Unix specific solution:
{{trans|GO}}
{{trans|GO}}
<lang zkl>h,w:=System.popen("stty size","r").readln().split();
<syntaxhighlight lang="zkl">h,w:=System.popen("stty size","r").readln().split();
println(w," x ",h);</lang>
println(w," x ",h);</syntaxhighlight>
{{out}}<pre>91 x 24</pre>
{{out}}<pre>91 x 24</pre>