Terminal control/Preserve screen: Difference between revisions

m
syntax highlighting fixup automation
(Terminal control/Preserve screen in FreeBASIC)
m (syntax highlighting fixup automation)
Line 12:
{{trans|Python}}
 
<langsyntaxhighlight lang="11l">print("\033[?1049h\033[H")
print(‘Alternate buffer!’)
 
Line 19:
sleep(1)
 
print("\033[?1049l")</langsyntaxhighlight>
 
=={{header|Action!}}==
<langsyntaxhighlight Actionlang="action!">PROC Wait(BYTE frames)
BYTE RTCLOK=$14
frames==+RTCLOK
Line 48:
Wait(200)
MoveBlock(ptr,buffer,size) ;restore screen content
RETURN</langsyntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Preserve_screen.png Screenshot from Atari 8-bit computer]
Line 54:
=={{header|Applesoft BASIC}}==
Restores 40 x 24 TEXT screen, cursor position, display mode, and speed. Adjusts HIMEM to make room to store 1024 bytes aligned to the 256 byte page boundary. POKEs a machine language "copy 4 pages of memory" routine into page 3.
<langsyntaxhighlight ApplesoftBasiclang="applesoftbasic"> 10 LET FF = 255:FE = FF - 1
11 LET FD = 253:FC = FD - 1
12 POKE FC, 0 : POKE FE, 0
Line 103:
61 CALL R : POKE 241, S
62 VTAB V + 1 : HTAB C + 1
63 POKE 50, M : POKE 243, F</langsyntaxhighlight>
 
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
The screen is saved as a bitmap:
<langsyntaxhighlight lang="bbcbasic"> PRINT "This is the original screen"
OSCLI "GSAVE """ + @tmp$ + "bbcsave"""
WAIT 200
Line 114:
PRINT "This is the new screen, following a CLS"
WAIT 200
OSCLI "DISPLAY """ + @tmp$ + "bbcsave"""</langsyntaxhighlight>
 
=={{header|Befunge}}==
Line 120:
Assuming a terminal with support for Xterm's [http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-The-Alternate-Screen-Buffer ''alternate screen buffer''] escape sequences (which I believe is fairly standard these days), this example will switch to the alternate screen buffer, output "Press <Enter> to restore..." in the top left corner, and then restore the original screen.
 
<langsyntaxhighlight lang="befunge">"h9401?["39*>:#,_"...erotser ot >retnE< sserPH["39*>:#,_~$"l9401?["39*>:#,_@</langsyntaxhighlight>
 
=={{header|C}}==
For Xterm. "Allow alternate screen buffer" must be enabled by the popup menu.<langsyntaxhighlight Clang="c">#include <stdio.h>
#include <unistd.h>
 
Line 139:
 
return 0;
}</langsyntaxhighlight>
 
=={{header|Common Lisp}}==
{{trans|C}}
<langsyntaxhighlight lang="lisp">
(format t "~C[?1049h~C[H" (code-char #O33) (code-char #O33))
(format t "Alternate screen buffer~%")
Line 151:
))
(format t "~C[?1049l" (code-char #O33))
</syntaxhighlight>
</lang>
 
==={{header|ncurses}}===
When the ncurses terminal library is used, characters are displayed on an alternate screen of the terminal. Leaving ncurses returns to the original screen buffer with the previous content preserved. To interface ncurses from Lisp, the ''croatoan'' library is used.
<langsyntaxhighlight lang="lisp">(defun clear-test ()
;; starting a ncurses screen enters the alternate screen buffer of the terminal
(with-screen (scr :input-echoing nil :input-blocking t)
Line 165:
(refresh scr)
(get-char scr)))
;; leaving ncurses returns the terminal to the main screen buffer</langsyntaxhighlight>
 
=={{header|Emacs Lisp}}==
 
<langsyntaxhighlight lang="lisp">#!/usr/local/bin/emacs --script
;; -*- lexical-binding: t; -*-
 
Line 185:
 
;; "ESC [ ? 1049 l" - Disable alternative screen buffer
(princ "\033[?1049l")</langsyntaxhighlight>
 
=={{header|Forth}}==
{{trans|C}}
{{works with|gforth|0.7.3}}
<langsyntaxhighlight lang="forth">.\" \033[?1049h\033[H" \ preserve screen
." Press any key to return" ekey drop
.\" \033[?1049l" \ restore screen</langsyntaxhighlight>
 
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang="freebasic">'' 640x480x8, with 3 pages
Screen 12,,3
Windowtitle "Terminal control/Preserve screen"
Line 223:
Next i
Screencopy 1, 0
Sleep</langsyntaxhighlight>
 
 
Line 229:
{{trans|C}}
{{works with|Ubuntu 16.04}}
<langsyntaxhighlight lang="go">package main
 
import (
Line 248:
}
fmt.Print("\033[?1049l")
}</langsyntaxhighlight>
 
=={{header|Java}}==
{{trans|C}}
{{works with|Ubuntu 16.04}}
<langsyntaxhighlight lang="java">public class PreserveScreen
{
public static void main(String[] args) throws InterruptedException {
Line 265:
System.out.print("\033[?1049l");
}
}</langsyntaxhighlight>
 
=={{header|JavaScript}}==
<langsyntaxhighlight lang="javascript">(function() {
var orig= document.body.innerHTML
document.body.innerHTML= '';
Line 277:
}, 1000);
}, 1000);
})();</langsyntaxhighlight>
 
This implementation assumes that Javascript is running in the browser.
Line 285:
=={{header|Julia}}==
{{trans|C}}
<langsyntaxhighlight lang="julia">const ESC = "\u001B" # escape code
 
print("$ESC[?1049h$ESC[H")
Line 292:
print("$ESC[?1049l\n\n\n")
 
</syntaxhighlight>
</lang>
 
=={{header|Kotlin}}==
{{trans|C}}
{{Works with|Ubuntu|14.04}}
<langsyntaxhighlight lang="scala">// version 1.1.2
 
const val ESC = "\u001B"
Line 309:
}
print("$ESC[?1049l")
}</langsyntaxhighlight>
 
=={{header|M2000 Interpreter}}==
Line 317:
If we change Mode (size of font), or Window size (console witdh/height), or use a Form statement to set character resolution (number characters in a row by row number) which automatic calculate size and line spacing, then saved consoled bitmap erased. To preserve screen from this situation we have to preserve last form's arguments, or window's arguments or mode's argument.
 
<syntaxhighlight lang="m2000 interpreter">
<lang M2000 Interpreter>
Module PreserveScreen {
Bold 1
Line 365:
PreserveScreen
 
</syntaxhighlight>
</lang>
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">Run["tput smcup"] (* Save the display *)
Run["echo Hello"]
Pause[5] (* Wait five seconds *)
Run["tput rmcup"] </langsyntaxhighlight>
 
=={{header|Nim}}==
{{trans|Python}}
<langsyntaxhighlight lang="nim">import os
 
echo "\e[?1049h\e[H"
Line 384:
sleep 1000
 
echo "\e[?1049l"</langsyntaxhighlight>
 
=={{header|Perl}}==
{{trans|C}}
<langsyntaxhighlight lang="perl">print "\033[?1049h\033[H";
print "Alternate screen buffer\n";
 
Line 396:
}
 
print "\033[?1049l";</langsyntaxhighlight>
 
=={{header|Phix}}==
<!--<langsyntaxhighlight Phixlang="phix">(notonline)-->
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- (save_text_image, sleep, display_text_image)</span>
<span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">save_text_image</span><span style="color: #0000FF;">({</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">},</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">25</span><span style="color: #0000FF;">,</span><span style="color: #000000;">80</span><span style="color: #0000FF;">})</span>
Line 407:
<span style="color: #000000;">display_text_image</span><span style="color: #0000FF;">({</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">},</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">sleep</span><span style="color: #0000FF;">(</span><span style="color: #000000;">3</span><span style="color: #0000FF;">)</span>
<!--</langsyntaxhighlight>-->
The following also works fine on linux (but not windows, or under p2js)
<!--<langsyntaxhighlight Phixlang="phix">(notonline)-->
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- (escape sequences, sleep)</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;">"\e[?1049h\e[H"</span><span style="color: #0000FF;">)</span>
Line 419:
<span style="color: #008080;">end</span> <span style="color: #008080;">for</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;">"\e[?1049l"</span><span style="color: #0000FF;">)</span>
<!--</langsyntaxhighlight>-->
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">#!/usr/bin/picolisp /usr/lib/picolisp/lib.l
 
(call 'tput "smcup")
Line 429:
(call 'tput "rmcup")
 
(bye)</langsyntaxhighlight>
 
=={{header|Python}}==
Similar to the C example above:
 
<langsyntaxhighlight Pythonlang="python">#!/usr/bin/env python
 
import time
Line 445:
time.sleep(1)
 
print "\033[?1049l"</langsyntaxhighlight>
 
=={{header|R}}==
{{trans|C}}
<langsyntaxhighlight Rlang="r">cat("\033[?1049h\033[H")
cat("Alternate screen buffer\n")
for (i in 5:1) {
Line 456:
cat("\33[2J")
}
cat("\033[?1049l")</langsyntaxhighlight>
 
=={{header|Racket}}==
<syntaxhighlight lang="racket">
<lang Racket>
#lang racket
 
Line 471:
 
(flash "Hello world.")
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
(formerly Perl 6)
<syntaxhighlight lang="raku" perl6line>print "\e[?1049h\e[H";
say "Alternate buffer!";
 
Line 483:
}
 
print "\e[?1049l";</langsyntaxhighlight>
 
=={{header|REXX}}==
Line 489:
 
The &nbsp; '''CLS''' &nbsp; (DOS) command is used to clear the terminal screen.
<langsyntaxhighlight lang="rexx">/*REXX program saves the screen contents and also the cursor location, then clears the */
/*──── screen, writes a half screen of ~~~ lines, and then restores the original screen.*/
 
Line 507:
end /*restore*/ /* [↑] writes (restores) SD lines. */
/*stick a fork in it, we're all done. */
call cursor curRow, curCol /*restore the original cursor position.*/</langsyntaxhighlight>
This REXX program makes use of &nbsp; '''scrsize''' &nbsp; BIF which is used to determine the screen size of the terminal (console).
 
Line 514:
{{trans|C}}
Uses xterm escape codes.
<langsyntaxhighlight lang="rust">use std::io::{stdout, Write};
use std::time::Duration;
 
Line 530:
 
print!("\x1b[?1049l");
}</langsyntaxhighlight>
The Rust [https://doc.rust-lang.org/std/ops/struct.RangeInclusive.html inclusive range operator] is used as an iterator from 1 to 5 (inclusive). It is then reversed to count down.
 
Line 538:
Similar to the C example above:
 
<langsyntaxhighlight Scalalang="scala">print("\033[?1049h\033[H")
println("Alternate buffer!")
 
Line 546:
}
 
print("\033[?1049l")</langsyntaxhighlight>
 
=={{header|Sidef}}==
{{trans|Raku}}
<langsyntaxhighlight lang="ruby">print "\e[?1049h\e[H";
say "Alternate buffer!";
 
Line 558:
}
 
print "\e[?1049l";</langsyntaxhighlight>
 
=={{header|Swift}}==
{{trans|C}}
<langsyntaxhighlight lang="swift">
public let CSI = ESC+"[" // Control Sequence Introducer
func write(_ text: String...) {
Line 574:
}
write(CSI,"?1049l") // close alternate screen
</syntaxhighlight>
</lang>
 
=={{header|Tcl}}==
On Unix terminals only, with the help of <tt>tput</tt>:
<langsyntaxhighlight lang="tcl"># A helper to make code more readable
proc terminal {args} {
exec /usr/bin/tput {*}$args >/dev/tty
Line 589:
gets stdin
# Restore the screen with the "exit_ca_mode" capability, a.k.a. 'rmcup'
terminal rmcup</langsyntaxhighlight>
 
=={{header|UNIX Shell}}==
Line 595:
{{works with|Bourne Shell}} {{works with|bash}}
 
<langsyntaxhighlight lang="sh">#!/bin/sh
tput smcup # Save the display
echo 'Hello'
sleep 5 # Wait five seconds
tput rmcup # Restore the display</langsyntaxhighlight>
 
=={{header|Wren}}==
{{trans|C}}
<langsyntaxhighlight lang="ecmascript">import "io" for Stdout
import "timer" for Timer
 
Line 614:
Timer.sleep(1000)
}
System.write("\e[?1049l")</langsyntaxhighlight>
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">include c:\cxpl\codes; \intrinsic 'code' declarations
 
proc SetPage(P); \Select active display page for video screen
Line 632:
if ChIn(1) then []; \wait for keystroke
SetPage(0); \restore original, default text screen, page 0
]</langsyntaxhighlight>
 
=={{header|Z80 Assembly}}==
Line 638:
Using the Amstrad CPC firmware:
 
<langsyntaxhighlight lang="z80"> org $3000
 
txt_output: equ $bb5a
Line 682:
ret
 
text: defm "This is some text. Please press a key.\0"</langsyntaxhighlight>
 
=={{header|zkl}}==
{{trans|C}}
Works in a Mint Linux terminal, switching to the alternate screen buffer, printing a count down message and then switching back.
<langsyntaxhighlight lang="zkl">print("\e[?1049h\e[H");
println("Alternate screen buffer");
foreach i in ([5..1,-1]){
Line 693:
Atomic.sleep(1);
}
print("\e[?1049l");</langsyntaxhighlight>
 
 
10,333

edits