Terminal control/Cursor positioning: Difference between revisions

From Rosetta Code
Content added Content deleted
(Added Wren)
m (Moved Wren entry into correct alphabetical order.)
 
(26 intermediate revisions by 14 users not shown)
Line 1: Line 1:
{{task|Terminal control}}
{{task|Terminal control}}

Move the cursor to column 3, row 6 and display the word "Hello", so that the letter H is in column 3 on row 6.
[[Terminal Control::task| ]]
[[Terminal Control::task| ]]

;Task:
Move the cursor to column   '''3''',   row   '''6''',   and display the word   "Hello"   (without the quotes),   so that the letter   '''H'''   is in column   '''3'''   on row   '''6'''.
<br><br>

=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits}}
<syntaxhighlight lang="aarch64 assembly">
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program cursorPos64.s */
/*******************************************/
/* Constantes file */
/*******************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeConstantesARM64.inc"
/*******************************************/
/* Initialized data */
/*******************************************/
.data
szMessStartPgm: .asciz "Program start \n"
szMessEndPgm: .asciz "Program normal end.\n"
szMessMovePos: .asciz "\033[6;3HHello\n"
szCarriageReturn: .asciz "\n"
szCleax1: .byte 0x1B
.byte 'c' // other console clear
.byte 0
/*******************************************/
/* UnInitialized data */
/*******************************************/
.bss
/*******************************************/
/* code section */
/*******************************************/
.text
.global main
main:
ldr x0,qAdrszMessStartPgm // display start message
bl affichageMess
ldr x0,qAdrszCleax1
bl affichageMess
ldr x0,qAdrszMessMovePos
bl affichageMess
ldr x0,qAdrszMessEndPgm // display end message
bl affichageMess
100: // standard end of the program
mov x0,0 // return code
mov x8,EXIT // request to exit program
svc 0 // perform system call
qAdrszMessStartPgm: .quad szMessStartPgm
qAdrszMessEndPgm: .quad szMessEndPgm
qAdrszCarriageReturn: .quad szCarriageReturn
qAdrszCleax1: .quad szCleax1
qAdrszMessMovePos: .quad szMessMovePos
/********************************************************/
/* File Include fonctions */
/********************************************************/
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"
</syntaxhighlight>
=={{header|Action!}}==
<syntaxhighlight lang="action!">PROC Main()
Position(3,6)
Print("Hello")
RETURN</syntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Cursor_positioning.png Screenshot from Atari 8-bit computer]


=={{header|Ada}}==
=={{header|Ada}}==


<lang Ada>with Ada.Text_IO;
<syntaxhighlight lang="ada">with Ada.Text_IO;


procedure Cursor_Pos is
procedure Cursor_Pos is
Line 14: Line 83:
Ada.Text_IO.Set_Col(3);
Ada.Text_IO.Set_Col(3);
Ada.Text_IO.Put("Hello");
Ada.Text_IO.Put("Hello");
end Cursor_Pos;</lang>
end Cursor_Pos;</syntaxhighlight>


=={{header|ARM Assembly}}==
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi}}
{{works with|as|Raspberry Pi}}
<syntaxhighlight lang="arm assembly">
<lang ARM Assembly>


/* ARM assembly Raspberry PI */
/* ARM assembly Raspberry PI */
Line 86: Line 155:
bx lr @ return
bx lr @ return


</syntaxhighlight>
</lang>

=={{header|Arturo}}==

<syntaxhighlight lang="rebol">goto 3 6
print "Hello"</syntaxhighlight>


=={{header|AutoHotkey}}==
=={{header|AutoHotkey}}==
{{works with|AutoHotkey_L}}
{{works with|AutoHotkey_L}}
Remember that AHK is not built for the console, so we must call the WinAPI directly.
Remember that AHK is not built for the console, 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 105: Line 179:
return out
return out
return 0
return 0
}</lang>
}</syntaxhighlight>


=={{header|Axe}}==
=={{header|Axe}}==
Since the rows and columns are zero-indexed, we must subtract 1 from both.
Since the rows and columns are zero-indexed, we must subtract 1 from both.
<lang axe>Output(2,5,"HELLO")</lang>
<syntaxhighlight lang="axe">Output(2,5,"HELLO")</syntaxhighlight>


=={{header|BaCon}}==
=={{header|BASIC}}==
==={{header|Applesoft BASIC}}===
<lang freebasic>' Cursor positioning, requires ANSI compliant terminal
<syntaxhighlight lang="applesoft basic"> 10 VTAB 6: HTAB 3
20 PRINT "HELLO"</syntaxhighlight>

==={{header|ASIC}}===
Rows have the range 0-24, columns have the range 0-79.
<syntaxhighlight lang="basic">
LOCATE 5, 2
PRINT "Hello"
</syntaxhighlight>

==={{header|BaCon}}===
<syntaxhighlight lang="freebasic">' Cursor positioning, requires ANSI compliant terminal
GOTOXY 3,6
GOTOXY 3,6
PRINT "Hello"</lang>
PRINT "Hello"</syntaxhighlight>
The X Y in <code>GOTOXY</code> is Column Row order.
The X Y in <code>GOTOXY</code> is Column Row order.


=={{header|BASIC}}==
==={{header|BBC BASIC}}===
<syntaxhighlight lang="bbcbasic">PRINT TAB(2,5);"Hello"</syntaxhighlight>


=== {{header|Applesoft BASIC}} ===
==={{header|Commodore BASIC}}===
{{works with|Commodore BASIC|3.5}}
<lang Applesoft BASIC> 10 VTAB 6: HTAB 3
<syntaxhighlight lang="basic">
20 PRINT "HELLO"</lang>
10 CHAR ,2,5,"HELLO"
</syntaxhighlight>

{{works with|Commodore BASIC|2.0}}
<syntaxhighlight lang="basic"> 100 print chr$(19) :rem change to lowercase set
110 print chr$(14) :rem go to position 1,1
120 print:print:print:print
130 print tab(2) "Hello" </syntaxhighlight>

==={{header|FreeBASIC}}===
<syntaxhighlight lang="freebasic">Locate 6, 3 : Print "Hello"
Sleep</syntaxhighlight>

==={{header|GW-BASIC}}===
{{works with|BASICA}}
<syntaxhighlight lang="gwbasic">
10 LOCATE 6, 3
20 PRINT "Hello"
</syntaxhighlight>


==={{header|IS-BASIC}}===
==={{header|IS-BASIC}}===
<lang IS-BASIC>100 PRINT AT 6,3:"Hello"</lang>
<syntaxhighlight lang="is-basic">100 PRINT AT 6,3:"Hello"</syntaxhighlight>


=== {{header|Locomotive Basic}} ===
==={{header|Liberty BASIC}}===
<lang locobasic> 10 LOCATE 3,6
<syntaxhighlight lang="lb">locate 3, 6
20 PRINT "Hello"</lang>
print "Hello"
</syntaxhighlight>


=== {{header|ZX Spectrum Basic}} ===
==={{header|Locomotive Basic}}===
<syntaxhighlight lang="locobasic"> 10 LOCATE 3,6
<lang zxbasic> 10 REM The top left corner is at position 0,0
20 PRINT "Hello"</syntaxhighlight>
20 REM So we subtract one from the coordinates
30 PRINT AT 5,2 "Hello"</lang>


=== {{header|BBC BASIC}} ===
==={{header|MSX Basic}}===
<syntaxhighlight lang="basic"> 10 LOCATE 2,5
<lang bbcbasic>PRINT TAB(2,5);"Hello"</lang>
20 PRINT "Hello"</syntaxhighlight>


=== {{header|Commodore BASIC}} ===
==={{header|Nascom BASIC}}===
Line 16 is at the top of the screen and is not scrolled. Line 1 is the next line down, and line 15 is at the bottom.
<lang basic> 100 print chr$(19) :rem change to lowercase set
{{works with|Nascom ROM BASIC|4.7}}
110 print chr$(14) :rem go to position 1,1
<syntaxhighlight lang="basic">
120 print:print:print:print
130 print tab(2) "Hello" </lang>
10 SCREEN 3,5:PRINT "Hello"
</syntaxhighlight>

==={{header|NS-HUBASIC}}===
<syntaxhighlight lang="basic">10 LOCATE 3,6
20 PRINT "HELLO"</syntaxhighlight>

==={{header|PureBasic}}===
<syntaxhighlight lang="purebasic">EnableGraphicalConsole(#True)
ConsoleLocate(3,6)
Print("Hello")</syntaxhighlight>

==={{header|QuickBASIC}}===
{{works with|QBasic}}
{{works with|RapidQ}}
<syntaxhighlight lang="qbasic">
LOCATE 6, 3
PRINT "Hello"
</syntaxhighlight>

==={{header|RapidQ}}===
See [[#QuickBASIC|QuickBASIC]].

==={{header|ZX Spectrum Basic}}===
<syntaxhighlight lang="zxbasic"> 10 REM The top left corner is at position 0,0
20 REM So we subtract one from the coordinates
30 PRINT AT 5,2 "Hello"</syntaxhighlight>


=={{header|Befunge}}==
=={{header|Befunge}}==
Assuming a terminal with support for ANSI escape sequences.
Assuming a terminal with support for ANSI escape sequences.
<lang befunge>0"olleHH3;6["39*>:#,_$@</lang>
<syntaxhighlight lang="befunge">0"olleHH3;6["39*>:#,_$@</syntaxhighlight>


=={{header|Blast}}==
=={{header|Blast}}==
<lang blast># This will display a message at a specific position on the terminal screen
<syntaxhighlight lang="blast"># This will display a message at a specific position on the terminal screen
.begin
.begin
cursor 6,3
cursor 6,3
display "Hello!"
display "Hello!"
return
return
# This is the end of the script</lang>
# This is the end of the script</syntaxhighlight>


=={{header|C}}/{{header|C++}}==
=={{header|C}}/{{header|C++}}==
Using ANSI escape sequence, where ESC[y;xH moves curser to row y, col x:<lang c>#include <stdio.h>
Using ANSI escape sequence, where ESC[y;xH moves curser to row y, col x:<syntaxhighlight lang="c">#include <stdio.h>
int main()
int main()
{
{
printf("\033[6;3HHello\n");
printf("\033[6;3HHello\n");
return 0;
return 0;
}</lang>
}</syntaxhighlight>


The C version of the minesweeper game uses curses.
The C version of the minesweeper game uses curses.
Line 168: Line 301:


On Windows, using console API:
On Windows, using console API:
<lang c>#include <windows.h>
<syntaxhighlight lang="c">#include <windows.h>


int main() {
int main() {
Line 176: Line 309:
WriteConsole(hConsole, "Hello", 5, NULL, NULL);
WriteConsole(hConsole, "Hello", 5, NULL, NULL);
return 0;
return 0;
}</lang>
}</syntaxhighlight>


=={{header|C sharp|C#}}==
=={{header|C sharp|C#}}==
{{works with|Mono|1.2}}
{{works with|Mono|1.2}}
{{works with|Visual C sharp|Visual C#|2003}}
{{works with|Visual C sharp|Visual C#|2003}}
<lang csharp>static void Main(string[] args)
<syntaxhighlight lang="csharp">static void Main(string[] args)
{
{
Console.SetCursorPosition(3, 6);
Console.SetCursorPosition(3, 6);
Console.Write("Hello");
Console.Write("Hello");
}</lang>
}</syntaxhighlight>


=={{header|COBOL}}==
=={{header|COBOL}}==
<lang cobol> IDENTIFICATION DIVISION.
<syntaxhighlight lang="cobol"> IDENTIFICATION DIVISION.
PROGRAM-ID. cursor-positioning.
PROGRAM-ID. cursor-positioning.


Line 195: Line 328:


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 cursor-positioning ()
<syntaxhighlight lang="lisp">(defun cursor-positioning ()
(with-screen (scr :input-blocking t :input-echoing nil :cursor-visible nil)
(with-screen (scr :input-blocking t :input-echoing nil :cursor-visible nil)
(move scr 5 2)
(move scr 5 2)
Line 206: Line 339:
(refresh scr)
(refresh scr)
;; wait for keypress
;; wait for keypress
(get-char scr)))</lang>
(get-char scr)))</syntaxhighlight>


=={{header|D}}==
=={{header|D}}==
Line 217: Line 350:
puts the cursor at line L and column C.
puts the cursor at line L and column C.


<syntaxhighlight lang="d">
<lang D>
import std.stdio;
import std.stdio;


Line 224: Line 357:
writef("\033[6;3fHello");
writef("\033[6;3fHello");
}
}
</syntaxhighlight>
</lang>


'''Output:'''
'''Output:'''
Line 240: Line 373:
=={{header|Elena}}==
=={{header|Elena}}==
ELENA 4.x :
ELENA 4.x :
<lang elena>public program()
<syntaxhighlight lang="elena">public program()
{
{
console.setCursorPosition(3,6).write("Hello")
console.setCursorPosition(3,6).write("Hello")
}</lang>
}</syntaxhighlight>


=={{header|Euphoria}}==
=={{header|Euphoria}}==
<lang Euphoria>position(6,3)
<syntaxhighlight lang="euphoria">position(6,3)
puts(1,"Hello")</lang>
puts(1,"Hello")</syntaxhighlight>


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


Console.SetCursorPosition(3, 6)
Console.SetCursorPosition(3, 6)
Console.Write("Hello")</lang>
Console.Write("Hello")</syntaxhighlight>


=={{header|Forth}}==
=={{header|Forth}}==
<lang forth>2 5 at-xy ." Hello"</lang>
<syntaxhighlight lang="forth">2 5 at-xy ." Hello"</syntaxhighlight>


=={{header|Fortran}}==
=={{header|Fortran}}==
===Intel Fortran on Windows===
===Intel Fortran on Windows===
<lang fortran>program textposition
<syntaxhighlight lang="fortran">program textposition
use kernel32
use kernel32
implicit none
implicit none
Line 269: Line 402:
q = SetConsoleCursorPosition(hConsole, T_COORD(3, 6))
q = SetConsoleCursorPosition(hConsole, T_COORD(3, 6))
q = WriteConsole(hConsole, loc("Hello"), 5, NULL, NULL)
q = WriteConsole(hConsole, loc("Hello"), 5, NULL, NULL)
end program</lang>
end program</syntaxhighlight>


=={{header|Go}}==
=={{header|Go}}==
===External command===
===External command===
<lang go>package main
<syntaxhighlight lang="go">package main


import (
import (
Line 288: Line 421:
cmd.Run()
cmd.Run()
fmt.Println("Hello")
fmt.Println("Hello")
}</lang>
}</syntaxhighlight>
===ANSI escape codes===
===ANSI escape codes===
<lang go>package main
<syntaxhighlight lang="go">package main


import "fmt"
import "fmt"
Line 296: Line 429:
func main() {
func main() {
fmt.Println("\033[2J\033[6;3HHello")
fmt.Println("\033[2J\033[6;3HHello")
}</lang>
}</syntaxhighlight>
===Ncurses===
===Ncurses===
{{libheader|curses}}
{{libheader|curses}}
<lang go>package main
<syntaxhighlight lang="go">package main


import (
import (
Line 316: Line 449:
s.Println("Hello")
s.Println("Hello")
s.GetChar()
s.GetChar()
}</lang>
}</syntaxhighlight>


=={{header|Icon}} and {{header|Unicon}}==
=={{header|Icon}} and {{header|Unicon}}==
If the OS has older termcap files, CUP is included with <tt>link ansi</tt>
If the OS has older termcap files, CUP is included with <tt>link ansi</tt>
<lang unicon>procedure main()
<syntaxhighlight lang="unicon">procedure main()
writes(CUP(6,3), "Hello")
writes(CUP(6,3), "Hello")
end
end
Line 327: Line 460:
writes("\^[[",i,";",j,"H")
writes("\^[[",i,";",j,"H")
return
return
end</lang>
end</syntaxhighlight>


=={{header|J}}==
=={{header|J}}==
Using terminal positioning verbs of [[Terminal_control/Coloured_text#J]]
Using terminal positioning verbs of [[Terminal_control/Coloured_text#J]]
<lang J>'Hello',~move 6 3</lang>
<syntaxhighlight lang="j">'Hello',~move 6 3</syntaxhighlight>

=={{header|jq}}==
{{works with|jq}}
''Also works with gojq and jaq.
<syntaxhighlight lang="bash">
jq -nr '"\u001b[2J", # clear the terminal
"\u001b[6;3HHello" # move to (6,3) and print Hello
'
</syntaxhighlight>


=={{header|Julia}}==
=={{header|Julia}}==
<lang julia>const ESC = "\u001B"
<syntaxhighlight lang="julia">const ESC = "\u001B"


gotoANSI(x, y) = print("$ESC[$(y);$(x)H")
gotoANSI(x, y) = print("$ESC[$(y);$(x)H")
Line 340: Line 482:
gotoANSI(3, 6)
gotoANSI(3, 6)
println("Hello")
println("Hello")
</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


fun main(args: Array<String>) {
fun main(args: Array<String>) {
print("\u001Bc") // clear screen first
print("\u001Bc") // clear screen first
println("\u001B[6;3HHello")
println("\u001B[6;3HHello")
}</lang>
}</syntaxhighlight>


=={{header|Lasso}}==
=={{header|Lasso}}==
<lang Lasso>local(esc = decode_base64('Gw=='))
<syntaxhighlight lang="lasso">local(esc = decode_base64('Gw=='))


stdout( #esc + '[6;3HHello')</lang>
stdout( #esc + '[6;3HHello')</syntaxhighlight>

=={{header|Liberty BASIC}}==
<lang lb>locate 3, 6
print "Hello"
</lang>


=={{header|Logo}}==
=={{header|Logo}}==
<lang logo>setcursor [2 5]
<syntaxhighlight lang="logo">setcursor [2 5]
type "Hello</lang>
type "Hello</syntaxhighlight>
You can also draw positioned text on the turtle graphics window.
You can also draw positioned text on the turtle graphics window.
<lang logo>setpos [20 50]
<syntaxhighlight lang="logo">setpos [20 50]
setxy 20 30 ; alternate way to set position
setxy 20 30 ; alternate way to set position
label "Hello</lang>
label "Hello</syntaxhighlight>
=={{header|M2000 Interpreter}}==
M2000 has own console from M2000 Environment. Here we use a windows console, using Win32 Api.
[[File:Consol63.png|thumb|alt=Console Example]]



=={{header|Mathematica}}==

<lang Mathematica>Run["tput cup 6 3"]

Print["Hello"]</lang>








<syntaxhighlight lang="m2000 interpreter">
Module Fix_Console_Window {
// This Module:
// a) move console window
// b) disable console close window. Without it, a close console terminates the M2000 environment
declare GetConsoleWindow Lib "Kernel32.GetConsoleWindow"
declare SetWindowPos Lib "User32.SetWindowPos" {Long hwnd, Long hWnd, Long x, Long y , Long nWidth, Long nHeight, Long uFlags}
declare GetSystemMenu Lib "User32.GetSystemMenu" {Long hWnd, Long bRevert}
const SC_CLOSE = 0xF060
const MF_BYCOMMAND = 0
declare DeleteMenu Lib "User32.DeleteMenu" {Long hMenu, Long uPosition, Long uFlags}
call Void DeleteMenu(GetSystemMenu(GetConsoleWindow(), 0), SC_CLOSE, MF_BYCOMMAND)
// if we dont move the M2000 console window (which is full screen),
// we can get the position and dimension of the current monitor
// current monitor return the read only variable Window
back {
gradient 0 ' set black preserving cursors
x=motion.x div twipsx ' make x,y,w, h PIXELS
y=motion.y div twipsy
w=scale.x div twipsx
h=scale.y div twipsy
}
// set console window 50px smaller form all sides from full screen
call void SetWindowPos(GetConsoleWindow(), -1, x+50, y+50, w-100, h-100, 0x0040)
}
declare SetCosnoleDispMode lib "Kernel32.SetConsoleDisplayMode" { Long cons, Long b, Long &opt}
declare GetMode lib "Kernel32.GetConsoleMode" {Long cons, long &a}
declare SetMode lib "kernel32.SetConsoleMode" {Long cons, long a}
declare GetConsole lib "Kernel32.AllocConsole"
declare FreeConsole lib "Kernel32.FreeConsole"
declare ConsoleCaption lib "Kernel32.SetConsoleTitleW" {a$}
declare GetHandle lib "Kernel32.GetStdHandle" {Long a}
declare CloseHandle lib "Kernel32.CloseHandle" {Long a}
// we use the W version (always M2000 need the W version for strings)
declare global WriteCons Lib "Kernel32.WriteConsoleW" {Long cons, a$, Long n, Long &p, Long u}
const CONSOLE_FULLSCREEN_MODE=1&, CONSOLE_WINDOWED_MODE=0&
const ENABLE_VIRTUAL_TERMINAL_PROCESSING=0x0004
// These are special sequences
const StopBlinking$=chr$(27)+"[?25l"
Def EscXY$(x,y)=chr$(27)+"["+str$(y,0)+";"+str$(x,0)+"H"

// Using Windows Console
// void make the call to drop return value, without this the call use non zero values as error number
// using R=GetConsole() we can get the return value.
call void GetConsole()
call void ConsoleCaption("M2000 Windows Console")
// -11 for output
Long m=-11, RetLong
m=GetHandle(m)
Call Fix_Console_Window
// you can skip SetCosnoleDispModet,
// it seems this mode CONSOLE_WINDOWED_MODE is by default.
// call void SetCosnoleDispMode(m, CONSOLE_WINDOWED_MODE, &RetLong) ' 1 for fullscreen
wait 10 ' give 10ms time to OS
// Now we set the Virtual Terminal Processing (so we can send ESC codes)
Call Void GetMode(m, &RetLong)
Call Void SetMode(M,binary.or(Retlong, ENABLE_VIRTUAL_TERMINAL_PROCESSING))
// Stop Blinking and set cursor (we can't see) to 3rd column and 6th row
// window's console origin is at 1,1
PrintConsole(StopBlinking$+EscXY$(3, 6))
// Print RetLong
wait 1000
PrintConsole("Hello")
// Print RetLong
wait 12000
call void CloseHandle(m)
call void FreeConsole()
// Using M2000 console (not the window one)
cls 0, 0
// M2000 layer origin is 0,0
// Cursor 3-1, 6-1 ' statement to set cursor
Print @(3-1, 6-1), "Hello"

Sub PrintConsole(a$)
RetLong=0&
call Void WriteCons(m, a$, Len(a$), &RetLong, 0)
End Sub
</syntaxhighlight>

=={{header|Mathematica}}/{{header|Wolfram Language}}==
<syntaxhighlight lang="mathematica">Run["tput cup 6 3"]
Print["Hello"]</syntaxhighlight>


=={{header|Nim}}==
=={{header|Nim}}==
<lang nim>import terminal
<syntaxhighlight lang="nim">import terminal
setCursorPos(3, 6)
setCursorPos(3, 6)
echo "Hello"</lang>
echo "Hello"</syntaxhighlight>

=={{header|NS-HUBASIC}}==
<lang NS-HUBASIC>10 LOCATE 3,6
20 PRINT "HELLO"</lang>


=={{header|OCaml}}==
=={{header|OCaml}}==

Using the library [http://forge.ocamlcore.org/projects/ansiterminal/ ANSITerminal]:
Using the library [http://forge.ocamlcore.org/projects/ansiterminal/ ANSITerminal]:
<syntaxhighlight lang="ocaml">#load "unix.cma"

<lang ocaml>#load "unix.cma"
#directory "+ANSITerminal"
#directory "+ANSITerminal"
#load "ANSITerminal.cma"
#load "ANSITerminal.cma"
Line 396: Line 620:
Trm.set_cursor 3 6;
Trm.set_cursor 3 6;
Trm.print_string [] "Hello";
Trm.print_string [] "Hello";
;;</lang>
;;</syntaxhighlight>


=={{header|Pascal}}==
=={{header|Pascal}}==
<syntaxhighlight lang="pascal">
<lang Pascal>
program cursor_pos;
program cursor_pos;
uses crt;
uses crt;
Line 406: Line 630:
write('Hello');
write('Hello');
end.
end.
</syntaxhighlight>
</lang>


=={{header|Perl}}==
=={{header|Perl}}==
Using the Term::Cap module:
Using the Term::Cap module:
<lang perl>
<syntaxhighlight lang="perl">
use Term::Cap;
use Term::Cap;


Line 416: Line 640:
print $t->Tgoto("cm", 2, 5); # 0-based
print $t->Tgoto("cm", 2, 5); # 0-based
print "Hello";
print "Hello";
</syntaxhighlight>
</lang>


=={{header|Phix}}==
=={{header|Phix}}==
<!--<syntaxhighlight lang="phix">(notonline)-->
<lang Phix>position(6,3)
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- position</span>
puts(1,"Hello")</lang>
<span style="color: #7060A8;">position</span><span style="color: #0000FF;">(</span><span style="color: #000000;">6</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Hello"</span><span style="color: #0000FF;">)</span>
<!--</syntaxhighlight>-->


=={{header|PHP}}==
=={{header|PHP}}==
<syntaxhighlight lang="php">
<lang PHP>
echo "\033[".$x.",".$y."H"; // Position line $y and column $x.
echo "\033[".$x.",".$y."H"; // Position line $y and column $x.
echo "\033[".$n."A"; // Up $n lines.
echo "\033[".$n."A"; // Up $n lines.
Line 430: Line 657:
echo "\033[".$n."D"; // Backward $n columns.
echo "\033[".$n."D"; // Backward $n columns.
echo "\033[2J"; // Clear the screen, move to (0,0).
echo "\033[2J"; // Clear the screen, move to (0,0).
</syntaxhighlight>
</lang>


=={{header|PicoLisp}}==
=={{header|PicoLisp}}==
<lang PicoLisp>(call 'tput "cup" 6 3)
<syntaxhighlight lang="picolisp">(call 'tput "cup" 6 3)
(prin "Hello")</lang>
(prin "Hello")</syntaxhighlight>


=={{header|PowerShell}}==
=={{header|PowerShell}}==
The following will only work in the PowerShell console host. Most notably it will not work in the PowerShell ISE.
The following will only work in the PowerShell console host. Most notably it will not work in the PowerShell ISE.
<lang powershell>$Host.UI.RawUI.CursorPosition = New-Object System.Management.Automation.Host.Coordinates 2,5
<syntaxhighlight lang="powershell">$Host.UI.RawUI.CursorPosition = New-Object System.Management.Automation.Host.Coordinates 2,5
$Host.UI.Write('Hello')</lang>
$Host.UI.Write('Hello')</syntaxhighlight>
Alternatively, in any PowerShell host that uses the Windows console, one can directly use the .NET <code>Console</code> class:
Alternatively, in any PowerShell host that uses the Windows console, one can directly use the .NET <code>Console</code> class:
<lang powershell>[Console]::SetCursorPosition(2,5)
<syntaxhighlight lang="powershell">[Console]::SetCursorPosition(2,5)
[Console]::Write('Hello')</lang>
[Console]::Write('Hello')</syntaxhighlight>

=={{header|PureBasic}}==
<lang PureBasic>EnableGraphicalConsole(#True)
ConsoleLocate(3,6)
Print("Hello")</lang>


=={{header|Python}}==
=={{header|Python}}==
Using ANSI escape sequence, where ESC[y;xH moves curser to row y, col x:<lang Python>print("\033[6;3HHello")</lang>
Using ANSI escape sequence, where ESC[y;xH moves curser to row y, col x:<syntaxhighlight lang="python">print("\033[6;3HHello")</syntaxhighlight>
On Windows it needs to import and init the [http://code.google.com/p/colorama/ colorama] module first.
On Windows it needs to import and init the [http://code.google.com/p/colorama/ colorama] module first.


ANSI sequences are not recognized in Windows console, here is a program using Windows API:
ANSI sequences are not recognized in Windows console, here is a program using Windows API:


<lang python>from ctypes import *
<syntaxhighlight lang="python">from ctypes import *


STD_OUTPUT_HANDLE = -11
STD_OUTPUT_HANDLE = -11
Line 471: Line 693:
windll.kernel32.WriteConsoleA(h, c_char_p(c), len(c), None, None)
windll.kernel32.WriteConsoleA(h, c_char_p(c), len(c), None, None)


print_at(6, 3, "Hello")</lang>
print_at(6, 3, "Hello")</syntaxhighlight>

=={{header|Quackery}}==

<syntaxhighlight lang="quackery"> [ number$ swap number$
$ 'print("\033[' rot join
char ; join
swap join
$ 'H", end="")' join
python ] is cursor-at ( x y --> )

3 6 cursor-at say "Hello"</syntaxhighlight>


=={{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))
Line 481: Line 714:
(charterm-cursor 3 6)
(charterm-cursor 3 6)
(displayln "Hello World"))
(displayln "Hello World"))
</syntaxhighlight>
</lang>


=={{header|Raku}}==
=={{header|Raku}}==
(formerly Perl 6)
(formerly Perl 6)
Assuming an ANSI terminal:
Assuming an ANSI terminal:
<lang perl6>print "\e[6;3H";
<syntaxhighlight lang="raku" line>print "\e[6;3H";
print 'Hello';</lang>
print 'Hello';</syntaxhighlight>


=={{header|Retro}}==
=={{header|Retro}}==
<lang Retro>with console'
<syntaxhighlight lang="retro">with console'
: hello 3 6 at-xy "Hello" puts ;</lang>
: hello 3 6 at-xy "Hello" puts ;</syntaxhighlight>


=={{header|REXX}}==
=={{header|REXX}}==
The REXX language doesn't have any cursor or screen management tools, but some REXX interpreters have added the functionality via different methods.
The REXX language doesn't have any cursor or screen management tools, &nbsp; but some REXX interpreters have
<br>added the functionality via different methods &nbsp; (such as functions and/or subroutines).
{{works with|PC/REXX, Personal REXX}}
{{works with|PC/REXX, Personal REXX}}
<lang rexx>/*REXX program demonstrates cursor position and writing of text to same.*/
<syntaxhighlight lang="rexx">/*REXX program demonstrates moving the cursor position and writing of text to same place*/


call cursor 3,6 /*move the cursor to row 3, col 6*/
call cursor 3,6 /*move the cursor to row 3, column 6. */
say 'Hello' /*write the text at that location*/
say 'Hello' /*write the text at that location. */


call scrwrite 30,50,'Hello.' /*another method. */



call scrwrite 40,60,'Hello.',,,14 /*another ... in yellow.*/</lang>
call scrwrite 30,50,'Hello.' /*another method, different location. */

call scrwrite 40,60,'Hello.',,,14 /*another method ... in yellow. */
exit 0 /*stick a fork in it, we're all done. */</syntaxhighlight>


=={{header|Ring}}==
=={{header|Ring}}==
<lang ring>
<syntaxhighlight lang="ring">
# Project : Terminal control/Cursor positioning
# Project : Terminal control/Cursor positioning


Line 513: Line 750:
next
next
see " Hello"
see " Hello"
</syntaxhighlight>
</lang>
Output:
Output:
<pre>
<pre>
Line 526: Line 763:
=={{header|Ruby}}==
=={{header|Ruby}}==
{{libheader|curses}}
{{libheader|curses}}
<lang ruby>require 'curses'
<syntaxhighlight lang="ruby">require 'curses'


Curses.init_screen
Curses.init_screen
Line 536: Line 773:
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>object Main extends App {
<syntaxhighlight lang="scala">object Main extends App {
print("\u001Bc") // clear screen first
print("\u001Bc") // clear screen first
println("\u001B[6;3HHello")
println("\u001B[6;3HHello")
}</lang>
}</syntaxhighlight>


=={{header|Seed7}}==
=={{header|Seed7}}==
Line 550: Line 787:
''SetPos'' is based on terminfo respectively the Windows console API.
''SetPos'' is 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 564: Line 801:
# 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|Tcl}}==
=={{header|Tcl}}==
<lang tcl>exec tput cup 5 2 >/dev/tty
<syntaxhighlight lang="tcl">exec tput cup 5 2 >/dev/tty
puts "Hello"</lang>
puts "Hello"</syntaxhighlight>


=={{header|UNIX Shell}}==
=={{header|UNIX Shell}}==


<lang sh># The tput utility numbers from zero, so we have subtracted 1 from row and column
<syntaxhighlight lang="sh"># The tput utility numbers from zero, so we have subtracted 1 from row and column
# number to obtain correct positioning.
# number to obtain correct positioning.
tput cup 5 2</lang>
tput cup 5 2</syntaxhighlight>


=={{header|Whitespace}}==
=={{header|Whitespace}}==
Using ANSI escape sequence, where ESC[y;xH moves curser to row y, col x (see below):
Using ANSI escape sequence, where ESC[y;xH moves curser to row y, col x (see below):
<lang whitespace>
<syntaxhighlight lang="whitespace">
Line 612: Line 849:


</syntaxhighlight>
</lang>


This solution was generated from the following pseudo-Assembly.
This solution was generated from the following pseudo-Assembly.
<lang asm>push "Hello" ;The characters are pushed onto the stack in reverse order
<syntaxhighlight lang="asm">push "Hello" ;The characters are pushed onto the stack in reverse order
push "[6;3H"
push "[6;3H"
push 27 ;ESC
push 27 ;ESC
Line 630: Line 867:


1:
1:
pop ret ;Pop counter and return</lang>
pop ret ;Pop counter and return</syntaxhighlight>

=={{header|Wren}}==
<syntaxhighlight lang="wren">System.write("\e[2J") // clear the terminal
System.print("\e[6;3HHello") // move to (6, 3) and print 'Hello'</syntaxhighlight>


=={{header|XPL0}}==
=={{header|XPL0}}==
<lang XPL0>include c:\cxpl\codes; \intrinsic 'code' declarations
<syntaxhighlight lang="xpl0">include c:\cxpl\codes; \intrinsic 'code' declarations


[Cursor(2, 5); \3rd column, 6th row
[Cursor(2, 5); \3rd column, 6th row
Text(0, "Hello"); \upper-left corner is coordinate 0, 0
Text(0, "Hello"); \upper-left corner is coordinate 0, 0
]</lang>
]</syntaxhighlight>


=={{header|Wren}}==
=={{header|Z80 Assembly}}==
Uses Amstrad CPC, but other machines with similar terminal functions can do the job. (The BIOS calls will be different however.)
<lang ecmascript>System.write("\x1b[2J") // clear the terminal
<syntaxhighlight lang="z80">ld hl,&0603 ;6 = ROW, 3 = COLUMN
System.print("\x1b[6;3HHello") // move to (6, 3) and print 'Hello'</lang>
call &BB75 ;set text cursor according to HL

ld hl,Message
call PrintString

ret ;return to basic

Message:
byte "Hello",0

PrintString:
ld a,(hl) ;read a byte from the string
or a ;check equality to zero
ret z ;if equal to zero, we're done
call &BB5A ;print accumulator as an ascii char to screen
inc hl ;next char
jr PrintString</syntaxhighlight>


=={{header|zkl}}==
=={{header|zkl}}==
{{trans|C/C++}}
{{trans|C/C++}}
Using ANSI escape sequence, where ESC[y;xH moves curser to row y, col x:
Using ANSI escape sequence, where ESC[y;xH moves curser to row y, col x:
<lang zkl>print("\e[6;3H" "Hello");</lang>
<syntaxhighlight lang="zkl">print("\e[6;3H" "Hello");</syntaxhighlight>


{{omit from|ACL2}}
{{omit from|ACL2}}

Latest revision as of 11:50, 13 February 2024

Task
Terminal control/Cursor positioning
You are encouraged to solve this task according to the task description, using any language you may know.


Task

Move the cursor to column   3,   row   6,   and display the word   "Hello"   (without the quotes),   so that the letter   H   is in column   3   on row   6.

AArch64 Assembly

Works with: as version Raspberry Pi 3B version Buster 64 bits
/* ARM assembly AARCH64 Raspberry PI 3B */
/*  program cursorPos64.s   */
 
/*******************************************/
/* Constantes file                         */
/*******************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeConstantesARM64.inc"
 
 /*******************************************/
/* Initialized data                         */
/*******************************************/
.data
szMessStartPgm:            .asciz "Program start \n"
szMessEndPgm:              .asciz "Program normal end.\n"
szMessMovePos:             .asciz "\033[6;3HHello\n"
szCarriageReturn:          .asciz "\n"
szCleax1:                  .byte 0x1B 
                           .byte 'c'           // other console clear
                           .byte 0
/*******************************************/
/* UnInitialized data                      */
/*******************************************/
.bss 
/*******************************************/
/*  code section                           */
/*******************************************/
.text
.global main 
main: 
 
    ldr x0,qAdrszMessStartPgm                   // display start message
    bl affichageMess
    ldr x0,qAdrszCleax1
    bl affichageMess
    ldr x0,qAdrszMessMovePos
    bl affichageMess
 
    ldr x0,qAdrszMessEndPgm                     // display end message
    bl affichageMess
 
100:                                            // standard end of the program
    mov x0,0                                    // return code
    mov x8,EXIT                                 // request to exit program
    svc 0                                       // perform system call
qAdrszMessStartPgm:        .quad szMessStartPgm
qAdrszMessEndPgm:          .quad szMessEndPgm
qAdrszCarriageReturn:      .quad szCarriageReturn
qAdrszCleax1:              .quad szCleax1
qAdrszMessMovePos:         .quad szMessMovePos
/********************************************************/
/*        File Include fonctions                        */
/********************************************************/
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"

Action!

PROC Main()
  Position(3,6)
  Print("Hello")
RETURN
Output:

Screenshot from Atari 8-bit computer

Ada

with Ada.Text_IO;

procedure Cursor_Pos is

begin
   Ada.Text_IO.Set_Line(6);
   Ada.Text_IO.Set_Col(3);
   Ada.Text_IO.Put("Hello");
end Cursor_Pos;

ARM Assembly

Works with: as version Raspberry Pi
/* ARM assembly Raspberry PI  */
/*  program cursorPos.s   */

/* Constantes    */
.equ STDOUT, 1                           @ Linux output console
.equ EXIT,   1                           @ Linux syscall
.equ WRITE,  4                           @ Linux syscall


/* Initialized data */
.data
szMessStartPgm:            .asciz "Program start \n"
szMessEndPgm:              .asciz "Program normal end.\n"
szMessMovePos:             .asciz "\033[6;3HHello\n"
szCarriageReturn:          .asciz "\n"
szClear1:                  .byte 0x1B 
                           .byte 'c'           @ other console clear
                           .byte 0
/* UnInitialized data */
.bss 

/*  code section */
.text
.global main 
main: 

    ldr r0,iAdrszMessStartPgm                   @ display start message
    bl affichageMess
    ldr r0,iAdrszClear1
    bl affichageMess
    ldr r0,iAdrszMessMovePos
    bl affichageMess

    ldr r0,iAdrszMessEndPgm                     @ display end message
    bl affichageMess

100:                                            @ standard end of the program
    mov r0, #0                                  @ return code
    mov r7, #EXIT                               @ request to exit program
    svc 0                                       @ perform system call
iAdrszMessStartPgm:        .int szMessStartPgm
iAdrszMessEndPgm:          .int szMessEndPgm
iAdrszCarriageReturn:      .int szCarriageReturn
iAdrszClear1:              .int szClear1
iAdrszMessMovePos:         .int szMessMovePos

/******************************************************************/
/*     display text with size calculation                         */ 
/******************************************************************/
/* r0 contains the address of the message */
affichageMess:
    push {r0,r1,r2,r7,lr}                       @ save  registers 
    mov r2,#0                                   @ counter length */
1:                                              @ loop length calculation
    ldrb r1,[r0,r2]                             @ read octet start position + index 
    cmp r1,#0                                   @ if 0 its over
    addne r2,r2,#1                              @ else add 1 in the length
    bne 1b                                      @ and loop 
                                                @ so here r2 contains the length of the message 
    mov r1,r0                                   @ address message in r1 
    mov r0,#STDOUT                              @ code to write to the standard output Linux
    mov r7, #WRITE                              @ code call system "write" 
    svc #0                                      @ call system
    pop {r0,r1,r2,r7,lr}                        @ restaur registers
    bx lr                                       @ return

Arturo

goto 3 6
print "Hello"

AutoHotkey

Works with: AutoHotkey_L

Remember that AHK is not built for the console, so we must call the WinAPI directly.

DllCall( "AllocConsole" ) ; create a console if not launched from one
hConsole := DllCall( "GetStdHandle", int, STDOUT := -11 )

DllCall("SetConsoleCursorPosition", UPtr, hConsole, UInt, (6 << 16) | 3)
WriteConsole(hConsole, "Hello")

MsgBox

WriteConsole(hConsole, text){
	VarSetCapacity(out, 16)
	If DllCall( "WriteConsole", UPtr, hConsole, Str, text, UInt, StrLen(text)
				  , UPtrP, out, uint, 0 )
		return out
	return 0
}

Axe

Since the rows and columns are zero-indexed, we must subtract 1 from both.

Output(2,5,"HELLO")

BASIC

Applesoft BASIC

 10  VTAB 6: HTAB 3
 20  PRINT "HELLO"

ASIC

Rows have the range 0-24, columns have the range 0-79.

LOCATE 5, 2
PRINT "Hello"

BaCon

' Cursor positioning, requires ANSI compliant terminal
GOTOXY 3,6
PRINT "Hello"

The X Y in GOTOXY is Column Row order.

BBC BASIC

PRINT TAB(2,5);"Hello"

Commodore BASIC

Works with: Commodore BASIC version 3.5
10 CHAR ,2,5,"HELLO"
Works with: Commodore BASIC version 2.0
 100 print chr$(19) :rem change to lowercase set
 110 print chr$(14) :rem go to position 1,1
 120 print:print:print:print
 130 print tab(2) "Hello"

FreeBASIC

Locate 6, 3 : Print "Hello"
Sleep

GW-BASIC

Works with: BASICA
10 LOCATE 6, 3
20 PRINT "Hello"

IS-BASIC

100 PRINT AT 6,3:"Hello"

Liberty BASIC

locate 3, 6
print "Hello"

Locomotive Basic

 10 LOCATE 3,6
 20 PRINT "Hello"

MSX Basic

 10 LOCATE 2,5
 20 PRINT "Hello"

Nascom BASIC

Line 16 is at the top of the screen and is not scrolled. Line 1 is the next line down, and line 15 is at the bottom.

Works with: Nascom ROM BASIC version 4.7
10 SCREEN 3,5:PRINT "Hello"

NS-HUBASIC

10 LOCATE 3,6
20 PRINT "HELLO"

PureBasic

EnableGraphicalConsole(#True)
ConsoleLocate(3,6)
Print("Hello")

QuickBASIC

Works with: QBasic
Works with: RapidQ
LOCATE 6, 3
PRINT "Hello"

RapidQ

See QuickBASIC.

ZX Spectrum Basic

 10 REM The top left corner is at position 0,0
 20 REM So we subtract one from the coordinates
 30 PRINT AT 5,2 "Hello"

Befunge

Assuming a terminal with support for ANSI escape sequences.

0"olleHH3;6["39*>:#,_$@

Blast

# This will display a message at a specific position on the terminal screen
.begin
cursor 6,3
display "Hello!"
return
# This is the end of the script

C/C++

Using ANSI escape sequence, where ESC[y;xH moves curser to row y, col x:

#include <stdio.h>
int main()
{
	printf("\033[6;3HHello\n");
	return 0;
}

The C version of the minesweeper game uses curses. Minesweeper_game#C

On Windows, using console API:

#include <windows.h>

int main() {
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos = {3, 6};
    SetConsoleCursorPosition(hConsole, pos);
    WriteConsole(hConsole, "Hello", 5, NULL, NULL);
    return 0;
}

C#

Works with: Mono version 1.2
Works with: Visual C# version 2003
static void Main(string[] args)
{
    Console.SetCursorPosition(3, 6);
    Console.Write("Hello");
}

COBOL

       IDENTIFICATION DIVISION.
       PROGRAM-ID. cursor-positioning.

       PROCEDURE DIVISION.
           DISPLAY "Hello" AT LINE 6, COL 3

           GOBACK
           .

Common Lisp

ncurses

To interface the ncurses C library from Lisp, the croatoan library is used.

(defun cursor-positioning ()
  (with-screen (scr :input-blocking t :input-echoing nil :cursor-visible nil)
      (move scr 5 2)
      (princ "Hello" scr)
      (refresh scr)
      ;; wait for keypress
      (get-char scr)))

D

ANSI escape sequences allow you to move the cursor anywhere on the screen. See more at: Bash Prompt HowTo - Chapter 6. ANSI Escape Sequences: Colours and Cursor Movement

Position the Cursor:
 \033[<L>;<C>H
    or
 \033[<L>;<C>f
puts the cursor at line L and column C.
import std.stdio;

void main()
{
  writef("\033[6;3fHello");
}

Output:

0123456789
1     
2
3
4
5
6  Hello
9
8
9

Elena

ELENA 4.x :

public program()
{
    console.setCursorPosition(3,6).write("Hello")
}

Euphoria

position(6,3)
puts(1,"Hello")

F#

open System

Console.SetCursorPosition(3, 6)
Console.Write("Hello")

Forth

2 5 at-xy ." Hello"

Fortran

Intel Fortran on Windows

program textposition
    use kernel32
    implicit none
    integer(HANDLE) :: hConsole
    integer(BOOL) :: q
    
    hConsole = GetStdHandle(STD_OUTPUT_HANDLE)
    q = SetConsoleCursorPosition(hConsole, T_COORD(3, 6))
    q = WriteConsole(hConsole, loc("Hello"), 5, NULL, NULL)
end program

Go

External command

package main

import (
    "bytes"
    "fmt"
    "os"
    "os/exec"
)

func main() {
    cmd := exec.Command("tput", "-S")
    cmd.Stdin = bytes.NewBufferString("clear\ncup 5 2")
    cmd.Stdout = os.Stdout
    cmd.Run()
    fmt.Println("Hello")
}

ANSI escape codes

package main

import "fmt"

func main() {
    fmt.Println("\033[2J\033[6;3HHello")
}

Ncurses

Library: curses
package main

import (
    "log"

    gc "code.google.com/p/goncurses"
)

func main() {
    s, err := gc.Init()
    if err != nil {
        log.Fatal("init:", err)
    }
    defer gc.End()
    s.Move(5, 2)
    s.Println("Hello")
    s.GetChar()
}

Icon and Unicon

If the OS has older termcap files, CUP is included with link ansi

procedure main()
    writes(CUP(6,3), "Hello")
end

procedure CUP(i,j)
    writes("\^[[",i,";",j,"H")
    return
end

J

Using terminal positioning verbs of Terminal_control/Coloured_text#J

'Hello',~move 6 3

jq

Works with: jq

Also works with gojq and jaq.

jq -nr '"\u001b[2J",         # clear the terminal
        "\u001b[6;3HHello"   # move to (6,3) and print Hello
'

Julia

const ESC = "\u001B"

gotoANSI(x, y) = print("$ESC[$(y);$(x)H")

gotoANSI(3, 6)
println("Hello")

Kotlin

Works with: Ubuntu version 14.04
// version 1.1.2

fun main(args: Array<String>) {
    print("\u001Bc") // clear screen first
    println("\u001B[6;3HHello")
}

Lasso

local(esc = decode_base64('Gw=='))

stdout( #esc + '[6;3HHello')

setcursor [2 5]
type "Hello

You can also draw positioned text on the turtle graphics window.

setpos [20 50]
setxy 20 30   ; alternate way to set position
label "Hello

M2000 Interpreter

M2000 has own console from M2000 Environment. Here we use a windows console, using Win32 Api.

Console Example







Module Fix_Console_Window {
	// This Module:
	// a) move console window
	// b) disable console close window. Without it, a close console terminates the M2000 environment
	declare GetConsoleWindow Lib "Kernel32.GetConsoleWindow"
	declare SetWindowPos Lib "User32.SetWindowPos" {Long hwnd, Long hWnd, Long x, Long y , Long nWidth, Long nHeight, Long uFlags}
	declare GetSystemMenu  Lib "User32.GetSystemMenu" {Long hWnd, Long bRevert}
	const SC_CLOSE = 0xF060
	const MF_BYCOMMAND = 0
	declare DeleteMenu Lib "User32.DeleteMenu"  {Long hMenu, Long  uPosition, Long  uFlags}
	call Void DeleteMenu(GetSystemMenu(GetConsoleWindow(), 0), SC_CLOSE, MF_BYCOMMAND)
	// if we dont move the M2000 console window (which is full screen),
	// we can get the position and dimension of the current monitor
	// current monitor return the read only variable Window
	back {
		gradient 0  ' set black preserving cursors
		x=motion.x div twipsx  ' make x,y,w, h PIXELS
		y=motion.y div twipsy
		w=scale.x div twipsx
		h=scale.y div twipsy
	}
	// set console window 50px smaller form all sides from full screen
	call void  SetWindowPos(GetConsoleWindow(), -1, x+50, y+50, w-100, h-100, 0x0040)
}
declare SetCosnoleDispMode lib "Kernel32.SetConsoleDisplayMode" { Long cons, Long b, Long &opt}
declare GetMode lib "Kernel32.GetConsoleMode" {Long cons, long &a}
declare SetMode lib "kernel32.SetConsoleMode" {Long cons, long a}
declare GetConsole lib "Kernel32.AllocConsole"
declare FreeConsole lib "Kernel32.FreeConsole"
declare ConsoleCaption lib "Kernel32.SetConsoleTitleW" {a$}
declare GetHandle lib "Kernel32.GetStdHandle" {Long a}
declare CloseHandle lib "Kernel32.CloseHandle" {Long a}
// we use the W version (always M2000 need the W version for strings)
declare global WriteCons Lib "Kernel32.WriteConsoleW" {Long cons, a$,  Long n, Long  &p, Long u}
const CONSOLE_FULLSCREEN_MODE=1&, CONSOLE_WINDOWED_MODE=0&
const ENABLE_VIRTUAL_TERMINAL_PROCESSING=0x0004
// These are special sequences
const StopBlinking$=chr$(27)+"[?25l"
Def EscXY$(x,y)=chr$(27)+"["+str$(y,0)+";"+str$(x,0)+"H"

// Using Windows Console
// void make the call to drop return value, without this the call use non zero values as error number
// using R=GetConsole() we can get the return value. 
call void GetConsole()
call void ConsoleCaption("M2000 Windows Console")
// -11 for output
Long  m=-11, RetLong
m=GetHandle(m)
Call Fix_Console_Window
// you can skip SetCosnoleDispModet,
// it seems this mode CONSOLE_WINDOWED_MODE is by default.
// call void SetCosnoleDispMode(m, CONSOLE_WINDOWED_MODE, &RetLong)  ' 1 for fullscreen
wait 10 ' give 10ms time to OS
// Now we set the Virtual Terminal Processing (so we can send ESC codes)
Call Void GetMode(m, &RetLong)
Call Void SetMode(M,binary.or(Retlong, ENABLE_VIRTUAL_TERMINAL_PROCESSING))
// Stop Blinking and set cursor (we can't see) to  3rd column and 6th row
// window's console origin is at 1,1
PrintConsole(StopBlinking$+EscXY$(3, 6))
// Print RetLong
wait 1000
PrintConsole("Hello")
// Print RetLong
wait 12000
call void CloseHandle(m)
call void FreeConsole()
// Using M2000 console (not the window one)
cls 0, 0
// M2000 layer origin is 0,0
// Cursor 3-1, 6-1 ' statement to set cursor
Print @(3-1, 6-1), "Hello"

Sub PrintConsole(a$)
      RetLong=0&
      call Void WriteCons(m, a$, Len(a$), &RetLong, 0)
End Sub

Mathematica/Wolfram Language

Run["tput cup 6 3"]
Print["Hello"]

Nim

import terminal
setCursorPos(3, 6)
echo "Hello"

OCaml

Using the library ANSITerminal:

#load "unix.cma"
#directory "+ANSITerminal"
#load "ANSITerminal.cma"

module Trm = ANSITerminal

let () =
  Trm.erase Trm.Screen;
  Trm.set_cursor 3 6;
  Trm.print_string [] "Hello";
;;

Pascal

program cursor_pos;
uses crt;
begin
  gotoxy(6,3);
  write('Hello');
end.

Perl

Using the Term::Cap module:

use Term::Cap;

my $t = Term::Cap->Tgetent;
print $t->Tgoto("cm", 2, 5); # 0-based
print "Hello";

Phix

without js -- position
position(6,3)
puts(1,"Hello")

PHP

echo "\033[".$x.",".$y."H"; // Position line $y and column $x.
echo "\033[".$n."A"; // Up $n lines.
echo "\033[".$n."B"; // Down $n lines.
echo "\033[".$n."C"; // Forward $n columns.
echo "\033[".$n."D"; // Backward $n columns.
echo "\033[2J"; // Clear the screen, move to (0,0).

PicoLisp

(call 'tput "cup" 6 3)
(prin "Hello")

PowerShell

The following will only work in the PowerShell console host. Most notably it will not work in the PowerShell ISE.

$Host.UI.RawUI.CursorPosition = New-Object System.Management.Automation.Host.Coordinates 2,5
$Host.UI.Write('Hello')

Alternatively, in any PowerShell host that uses the Windows console, one can directly use the .NET Console class:

[Console]::SetCursorPosition(2,5)
[Console]::Write('Hello')

Python

Using ANSI escape sequence, where ESC[y;xH moves curser to row y, col x:

print("\033[6;3HHello")

On Windows it needs to import and init the colorama module first.

ANSI sequences are not recognized in Windows console, here is a program using Windows API:

from ctypes import *

STD_OUTPUT_HANDLE = -11

class COORD(Structure):
    pass
    
COORD._fields_ = [("X", c_short), ("Y", c_short)]

def print_at(r, c, s):
    h = windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
    windll.kernel32.SetConsoleCursorPosition(h, COORD(c, r))
    
    c = s.encode("windows-1252")
    windll.kernel32.WriteConsoleA(h, c_char_p(c), len(c), None, None)

print_at(6, 3, "Hello")

Quackery

  [ number$ swap number$ 
    $ 'print("\033[' rot join
    char ; join
    swap join
    $ 'H", end="")' join
    python ]                   is cursor-at ( x y --> )

  3 6 cursor-at say "Hello"

Racket

#lang racket
(require (planet neil/charterm:3:0))
(with-charterm
 (charterm-clear-screen)
 (charterm-cursor 3 6)
 (displayln "Hello World"))

Raku

(formerly Perl 6) Assuming an ANSI terminal:

print "\e[6;3H";
print 'Hello';

Retro

with console'
: hello 3 6 at-xy "Hello" puts ;

REXX

The REXX language doesn't have any cursor or screen management tools,   but some REXX interpreters have
added the functionality via different methods   (such as functions and/or subroutines).

/*REXX program demonstrates moving the cursor position and writing of text to same place*/

call cursor  3,6                                 /*move the cursor to  row 3, column 6. */
say 'Hello'                                      /*write the text at that location.     */



call scrwrite 30,50,'Hello.'                     /*another method,  different location. */

call scrwrite 40,60,'Hello.',,,14                /*another method  ...  in yellow.      */
exit 0                                           /*stick a fork in it,  we're all done. */

Ring

# Project : Terminal control/Cursor positioning

for n = 1 to 5
     see nl
next
see "  Hello"

Output:






   Hello

Ruby

Library: curses
require 'curses'

Curses.init_screen
begin
  Curses.setpos(6, 3)  # column 6, row 3
  Curses.addstr("Hello")

  Curses.getch  # Wait until user presses some key.
ensure
  Curses.close_screen
end

Scala

Works with: Ubuntu version 14.04
object Main extends App {
    print("\u001Bc") // clear screen first
    println("\u001B[6;3HHello")
}

Seed7

The function setPos is portable and positions the cursor on the console window. SetPos is based on terminfo respectively the Windows console API.

$ include "seed7_05.s7i";
  include "console.s7i";

const proc: main is func
  local
    var text: console is STD_NULL;
  begin
    console := open(CONSOLE);
    setPos(console, 6, 3);
    write(console, "Hello");
    # Terminal windows often restore the previous
    # content, when a program is terminated. Therefore
    # the program waits until Return/Enter is pressed.
    readln;
  end func;

Tcl

exec tput cup 5 2 >/dev/tty
puts "Hello"

UNIX Shell

# The tput utility numbers from zero, so we have subtracted 1 from row and column
# number to obtain correct positioning.
tput cup 5 2

Whitespace

Using ANSI escape sequence, where ESC[y;xH moves curser to row y, col x (see below):

This solution was generated from the following pseudo-Assembly.

push "Hello"	;The characters are pushed onto the stack in reverse order
push "[6;3H"
push 27		;ESC

push 11		;Number of characters to print
call 0		;Calls print-string function
exit

0:
  dup jumpz 1	;Return if counter is zero
  exch prtc	;Swap counter with the next character and print it
  push 1 sub	;Subtract one from counter
  jump 0	;Loop back to print next character

1:
  pop ret	;Pop counter and return

Wren

System.write("\e[2J")        // clear the terminal
System.print("\e[6;3HHello") // move to (6, 3) and print 'Hello'

XPL0

include c:\cxpl\codes;  \intrinsic 'code' declarations

[Cursor(2, 5);          \3rd column, 6th row
Text(0, "Hello");       \upper-left corner is coordinate 0, 0
]

Z80 Assembly

Uses Amstrad CPC, but other machines with similar terminal functions can do the job. (The BIOS calls will be different however.)

ld hl,&0603   ;6 = ROW, 3 = COLUMN
call &BB75              ;set text cursor according to HL

ld hl,Message
call PrintString

ret  ;return to basic

Message:
byte "Hello",0

PrintString:
ld a,(hl)   ;read a byte from the string
or a        ;check equality to zero
ret z       ;if equal to zero, we're done
call &BB5A  ;print accumulator as an ascii char to screen
inc hl      ;next char
jr PrintString

zkl

Translation of: C/C++

Using ANSI escape sequence, where ESC[y;xH moves curser to row y, col x:

print("\e[6;3H" "Hello");