π² β mikrobloggeriet luke β luke-8 Β· luke-9 Β· luke-10
I en tid fΓΈr grafiske brukergrensesnitt pleide IT-folk Γ₯ sende slike julehilsener til hverandre:
β β
β½β½β½β½β½β½β½β½βββ½β½ / \
β / ββ \ / β \
β¬βββββββββββββ¬ / Β° Β°\
βββββββββββββ€ βΌβΌ ββββ βΌβΌ ββββββββββββββ/ β~ Β° \
β β-.β β /β½βΌββ¬ββ¬ββΌβ½\
ββββββ΄βββ΄βββββ βββ΄ββ΄ββ
βββββββ
Denne kommer fra et arkiv av βVT100-animasjonerβ, mange stammer fra 1980-tallet.
Disse er jo hyggelige og fine, menβ¦ π€ ASCII-standarden fra 1963+
inneholder bare 128 symboler og β
, β΄
og
β
er ikke blant dem β Unicode og UTF ble jo ikke oppfunnet
fΓΈr pΓ₯ 1990-tallet! Jeg leste filene direkte, sΓ₯ hvordan virker dette
egentlig?
VT100 er en dataterminal som ble utgitt i 1978 (fysisk maskin, produsert av Digital Equipment Corporation, DEC) og manualen sier:
The VT100 has many control commands which cause it to take action other than displaying a character on the screen. In this way, the host can command the terminal to move the cursor, change modes, ring the bell, etc. [β¦]
Character set | G0 designator |
---|---|
United States (USASCII) | ESC ( B |
Special graphics characters and line drawing set | ESC ( 0 |
SΓ₯ hvis terminalen mottar tegnene ESC
(
0
bytter den tegnsett til Special graphics and line
drawing.
Mange av disse kontrollkodene er standardisert i ANSI X3.64 og
X3.41/ECMA-35(1980),
men hvilke tegnsett (B
, 0
) som
implementeres er ikke spesifisert.
Uansett kan vi lese i Linux-dokumentasjonen om Console Controls:
ESC ( | Start sequence defining G0 character set (followed by one of B, 0, U, K, as below) |
ESC ( B | Select default (ISO 8859-1 mapping). |
ESC ( 0 | Select VT100 graphics mapping. |
Jeg liker at plattformer har bakoverkompatibilitet, og dette er et heftig eksempel. Jeg kan her nyte, rett ut av boksen, innhold og kontrollkoder produsert for 40 Γ₯r siden, pΓ₯ min moderne Mac eller Linux-maskin.
La oss i denne adventstiden sette pris pΓ₯ all kode og innhold skapt i 2023 og tidligere, som fortsatt virker som det skal π
Min gave til dere i denne kalenderluken er julehilsen fra fortiden:
printf '\033[?25l' # skjul markΓΈr
curl -s http://artscene.textfiles.com/vt100/xmas2.vt \
| node -e 'require("fs").readFileSync(0).forEach((b,i)=>
setTimeout(()=>process.stdout.write(Buffer.from([b]).toString()),i))'
βRichard Tingstad