Terminal control/Inverse video

From Rosetta Code
Task
Terminal control/Inverse video
You are encouraged to solve this task according to the task description, using any language you may know.

The task is to display a word in inverse video (or reverse video) followed by a word in normal video.

AutoHotkey

Call SetConsoleTextAttribute() to change foreground and background colors. <lang AHK>DllCall( "AllocConsole" ) ; create a console if not launched from one hConsole := DllCall( "GetStdHandle", int, STDOUT := -11 )

SetConsoleTextAttribute(hConsole, 0x70) ; gray background, black foreground FileAppend, Reversed`n, CONOUT$ ; print to stdout

SetConsoleTextAttribute(hConsole, 0x07) ; black background, gray foreground FileAppend, Normal, CONOUT$

MsgBox

SetConsoleTextAttribute(hConsole, Attributes){ return DllCall( "SetConsoleTextAttribute", UPtr, hConsole, UShort, Attributes) }</lang>

AWK

<lang awk>BEGIN { system ("tput rev") print "foo" system ("tput sgr0") print "bar" }</lang>

BASIC

Locomotive Basic

The firmware routine at &bb9c (TXT INVERSE) swaps the current Locomotive BASIC PEN and PAPER colors:

<lang locobasic>10 CALL &bb9c:PRINT "inverse"; 20 CALL &bb9c:PRINT "normal"</lang>

ZX Spectrum Basic

<lang basic>10 INVERSE 1 20 PRINT "FOO"; 30 INVERSE 0 40 PRINT "BAR"</lang>

C

<lang C>#include <stdio.h>

int main() { printf("\033[7mReversed\033[m Normal\n");

return 0; }</lang>

Mathematica

<lang Mathematica>Run["tput mr"] Run["echo foo"] (* is displayed in reverse mode *) Run["tput me"] Run["echo bar"]</lang>

OCaml

Using the library ANSITerminal in the interactive loop:

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

  1. open ANSITerminal ;;
  2. print_string [Inverse] "Hello\n" ;;

Hello - : unit = ()</lang>

PicoLisp

<lang PicoLisp>(prin "abc") (call "tput" "rev") (prin "def") # These three chars are displayed in reverse video (call "tput" "sgr0") (prinl "ghi")</lang>

PureBasic

<lang PureBasic>If OpenConsole()

 ConsoleColor(0, 15) ;use the colors black (background) and white (forground)
 PrintN("Inverse Video")
 ConsoleColor(15, 0) ;use the colors white (background) and black (forground)
 PrintN("Normal Video")
 
 Print(#CRLF$ + #CRLF$ + "Press ENTER to exit"): Input()
 CloseConsole()

EndIf</lang>

Python

<lang Python>#!/usr/bin/env python

print "\033[7mReversed\033[m Normal"</lang>


Run BASIC

<lang runbasic>' ---------- foo is reverse -------------- x$ = shell$("tput mr echo 'foo'")

' ---------- bar is normal -------------- x$ = shell$("tput me echo 'bar'") wait</lang>

Tcl

This only works on Unix terminals. <lang tcl># Get how the terminal wants to do things... set videoSeq(reverse) [exec tput rev] set videoSeq(normal) [exec tput rmso] proc reverseVideo str {

   global videoSeq
   return "$videoSeq(reverse)${str}$videoSeq(normal)"

}

  1. The things to print

set inReverse "foo" set inNormal "bar"

  1. Print those words

puts "[reverseVideo $inReverse] $inNormal"</lang>

UNIX Shell

Use the tput(1) utility to write the escape sequences that enable or disable reverse video.

Works with: Bourne Shell

<lang bash>#!/bin/sh tput mr # foo is reversed echo 'foo' tput me # bar is normal video echo 'bar'</lang>

If the system supports terminfo, then tput rev and tput sgr0 also work. (All recent systems have terminfo, except NetBSD, but NetBSD 6 will have terminfo.) The shorter names mr and me are the backward-compatible names from termcap.

If the terminal cannot do reverse video, then tput will fail with a message to standard error.

<lang bash>$ TERM=dumb tput mr tput: Unknown terminfo capability `mr'</lang>

Some programs use the standout mode, which might look exactly like reverse video. (The escape sequences might be identical!)

<lang bash>tput so # enter standout mode echo 'foo' tput se # exit standout mode echo 'bar'</lang>

If the system supports terminfo, then tput smso and tput rmso also work.

C Shell

<lang csh>tput mr echo 'foo' tput me echo 'bar'</lang>

XPL0

Output device 6 is similar to the normal console screen (device 0), but it provides many combinations of foreground and background colors.

<lang XPL0>include c:\cxpl\codes; [Attrib($70); Text(6, "Inverse"); Attrib($07); Text(6, " Video"); CrLf(6); ]</lang>