summaryrefslogtreecommitdiffstats
path: root/terminfo
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--terminfo/8bits17
-rw-r--r--terminfo/README20
-rw-r--r--terminfo/checktc.c204
-rw-r--r--terminfo/screencap23
-rw-r--r--terminfo/screeninfo.src80
-rw-r--r--terminfo/test.txt603
-rw-r--r--terminfo/tetris.c20
7 files changed, 967 insertions, 0 deletions
diff --git a/terminfo/8bits b/terminfo/8bits
new file mode 100644
index 0000000..b616622
--- /dev/null
+++ b/terminfo/8bits
@@ -0,0 +1,17 @@
+
+We test some umlauts and other characters coded in
+the ISO 8859-1 (Latin 1) standard:
+
+umlaut A Ä umlaut a ä
+umlaut O Ö umlaut o ö
+umlaut U Ü umlaut u ü
+sharp s ß paragraph §
+e + / é e + \ è
+e + ^ ê a + \ à
+u + \ ù degree °
+log. not ¬ + over - ±
+<< « >> »
+fraction 1/2 ½ fraction 1/4 ¼
+power of 2 ² middle dot ·
+
+---
diff --git a/terminfo/README b/terminfo/README
new file mode 100644
index 0000000..45b39e6
--- /dev/null
+++ b/terminfo/README
@@ -0,0 +1,20 @@
+
+This directory contains various file for termcap/terminfo installation
+and testing:
+
+screencap Termcap entry for screen. Add it to /etc/termcap.
+ On NetBSD, you should run /usr/bin/cap_mkdb afterwards.
+
+screeninfo.src Terminfo entry. Use 'tic screeninfo.src'
+ to install (Sun: /usr/5bin/tic).
+
+checktc.c Termcap/info test program. Checks margin
+ handling and other things.
+
+8bits Some chars from the ISO 8859-1 charset.
+
+test.txt Test file for alternate charset.
+
+tetris.c The popular game, by John Tromp. This is one of
+ the winners of the 1989 IOCCC contest.
+
diff --git a/terminfo/checktc.c b/terminfo/checktc.c
new file mode 100644
index 0000000..ccc9485
--- /dev/null
+++ b/terminfo/checktc.c
@@ -0,0 +1,204 @@
+#include <stdio.h>
+
+char *CL, *CM, *CS, *SR;
+int CO, LI, AM, XN;
+
+char *tgetstr(), *getenv();
+void PutStr(), CPutStr(), CCPutStr(), GotoPos(), RETURN();
+
+main()
+{
+ char *term, *s;
+ char tcbuf[1024];
+ char tcstr[1024], *tp;
+
+ if ((term = getenv("TERM")) == 0)
+ {
+ fprintf(stderr, "No $TERM set\n");
+ exit(1);
+ }
+ switch (tgetent(tcbuf, term))
+ {
+ case -1:
+ fprintf(stderr, "Could not open termcap file\n");
+ exit(1);
+ case 0:
+ fprintf(stderr, "I don't know what a '%s' terminal is.\n", term);
+ exit(1);
+ }
+ tp = tcstr;
+ if ((CL = tgetstr("cl", &tp)) == 0)
+ {
+ fprintf(stderr, "cl capability required\n");
+ exit(1);
+ }
+ if ((CM = tgetstr("cm", &tp)) == 0)
+ {
+ fprintf(stderr, "cm capability required\n");
+ exit(1);
+ }
+
+ if ((s = getenv("COLUMNS")))
+ CO = atoi(s);
+ if ((s = getenv("LINES")))
+ LI = atoi(s);
+ if (CO == 0)
+ CO = tgetnum("co");
+ if (LI == 0)
+ LI = tgetnum("li");
+ if (CO == 0)
+ CO = 80;
+ if (LI == 0)
+ LI = 24;
+ GotoPos(5, 1);
+ printf("******* cl capability does not work !!! *******");
+ GotoPos(5, 2);
+ PutStr(CL);
+ printf("******* cl capability does not home cursor *******");
+ GotoPos(0, 0);
+ printf(" ");
+ GotoPos(5, 4);
+ printf("******* cm capability does not work !!! *******");
+ GotoPos(5, 4);
+ printf(" ");
+ GotoPos(CO/2-12, LI/2);
+ printf("Your terminal size is");
+ GotoPos(CO/2-3, LI/2+1);
+ printf("%dx%d", CO, LI);
+ GotoPos(CO/2-2, 0);
+ printf("top");
+ GotoPos(CO/2-3, LI-1);
+ printf("bottom");
+ GotoPos(0, LI/2-2);printf("l");
+ GotoPos(0, LI/2-1);printf("e");
+ GotoPos(0, LI/2+0);printf("f");
+ GotoPos(0, LI/2+1);printf("t");
+ GotoPos(CO-1, LI/2-2);printf("r");
+ GotoPos(CO-1, LI/2-1);printf("i");
+ GotoPos(CO-1, LI/2+0);printf("g");
+ GotoPos(CO-1, LI/2+1);printf("h");
+ GotoPos(CO-1, LI/2+2);printf("t");
+ GotoPos(CO/2-15, LI/2+3);
+ RETURN();
+ AM = tgetflag("am");
+ printf("Termcap: terminal does %sauto-wrap", AM ? "" : "not ");
+ GotoPos(0, 5);
+ if (AM)
+ {
+ printf(" am capability set, but terminal does not wrap");
+ GotoPos(CO-1, 3);
+ }
+ else
+ {
+ printf(" am capability not set, but terminal does wrap");
+ GotoPos(CO-1, 4);
+ }
+ printf(" \n ");
+ GotoPos(0, 10);
+ RETURN();
+ if (AM)
+ {
+ XN = tgetflag("xn");
+ printf("Termcap: terminal has %smagic margins", XN ? "" : "no ");
+ GotoPos(0, 5);
+ if ((XN = tgetflag("xn")))
+ {
+ printf(" xn capability set, but terminal has no magic-margins");
+ GotoPos(CO-1, 4);
+ }
+ else
+ {
+ printf(" xn capability not set, but terminal has magic-margins");
+ GotoPos(CO-1, 3);
+ }
+ printf(" \n");
+ printf(" ");
+ GotoPos(0, 10);
+ RETURN();
+ if (XN)
+ {
+ GotoPos(0, 6);
+ printf(" last col in last row is not usable");
+ GotoPos(CO-1, LI-1);
+ printf(" ");
+ GotoPos(0, 6);
+ printf(" ");
+ GotoPos(0, 0);
+ printf("testing magic margins in last row");
+ GotoPos(0, 10);
+ RETURN();
+ }
+ }
+ if ((CS = tgetstr("cs", &tp)))
+ {
+ printf("Termcap: terminal has scrollregions");
+ GotoPos(0, 5);
+ printf(" cs capability set, but doesn't work");
+ CCPutStr(CS, 4, 5);
+ GotoPos(0, 5);
+ printf("\n\n");
+ CCPutStr(CS, 0, LI-1);
+ GotoPos(0, 10);
+ RETURN();
+ }
+ if ((SR = tgetstr("sr", &tp)))
+ {
+ GotoPos(0, 5);
+ printf(" sr capability set, but doesn't work");
+ GotoPos(0, 0);
+ PutStr(SR);
+ GotoPos(0, 6);
+ printf(" ");
+ GotoPos(0, 0);
+ printf("Termcap: terminal can scroll backwards");
+ GotoPos(0, 10);
+ RETURN();
+ }
+}
+
+void
+putcha(c)
+char c;
+{
+ putchar(c);
+}
+
+void
+PutStr(s)
+char *s;
+{
+ tputs(s, 1, putcha);
+ fflush(stdout);
+}
+
+void CPutStr(s, c)
+char *s;
+int c;
+{
+ tputs(tgoto(s, 0, c), 1, putcha);
+ fflush(stdout);
+}
+
+void CCPutStr(s, x, y)
+char *s;
+int x, y;
+{
+ tputs(tgoto(s, y, x), 1, putcha);
+ fflush(stdout);
+}
+
+void GotoPos(x,y)
+int x,y;
+{
+ tputs(tgoto(CM, x, y), 1, putcha);
+ fflush(stdout);
+}
+
+void
+RETURN()
+{
+ printf("Press <RETURN> to continue");
+ fflush(stdout);
+ while(getchar() != '\n');
+ PutStr(CL);
+}
diff --git a/terminfo/screencap b/terminfo/screencap
new file mode 100644
index 0000000..4820d92
--- /dev/null
+++ b/terminfo/screencap
@@ -0,0 +1,23 @@
+SC|screen|VT 100/ANSI X3.64 virtual terminal:\
+ :am:xn:ms:mi:G0:km:\
+ :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:bs:bt=\E[Z:\
+ :cb=\E[1K:cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:ct=\E[3g:\
+ :do=^J:nd=\E[C:pt:rc=\E8:rs=\Ec:sc=\E7:st=\EH:up=\EM:\
+ :le=^H:bl=^G:cr=^M:it#8:ho=\E[H:nw=\EE:ta=^I:is=\E)0:\
+ :li#24:co#80:us=\E[4m:ue=\E[24m:so=\E[3m:se=\E[23m:\
+ :mb=\E[5m:md=\E[1m:mr=\E[7m:me=\E[m:sr=\EM:al=\E[L:\
+ :AL=\E[%dL:dl=\E[M:DL=\E[%dM:cs=\E[%i%d;%dr:dc=\E[P:\
+ :DC=\E[%dP:im=\E[4h:ei=\E[4l:IC=\E[%d@:\
+ :ks=\E[?1h\E=:ke=\E[?1l\E>:vb=\Eg:\
+ :ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:\
+ :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:\
+ :k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:F1=\E[23~:F2=\E[24~:\
+ :kh=\E[1~:kI=\E[2~:kD=\E[3~:kH=\E[4~:@7=\E[4~:kP=\E[5~:\
+ :kN=\E[6~:eA=\E(B\E)0:as=^N:ae=^O:ti=\E[?1049h:te=\E[?1049l:\
+ :vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l:\
+ :Co#8:pa#64:AF=\E[3%dm:AB=\E[4%dm:op=\E[39;49m:AX:\
+ :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++,,hhII00:
+SB|screen-bce|VT 100/ANSI X3.64 virtual terminal with bce:\
+ :ut:tc=screen:
+SH|screen-s|VT 100/ANSI X3.64 virtual terminal with hardstatus line:\
+ :ts=\E_:fs=\E\\:ds=\E_\E\\:tc=screen:
diff --git a/terminfo/screeninfo.src b/terminfo/screeninfo.src
new file mode 100644
index 0000000..c5f254a
--- /dev/null
+++ b/terminfo/screeninfo.src
@@ -0,0 +1,80 @@
+screen|VT 100/ANSI X3.64 virtual terminal,
+ am, km, mir, msgr, xenl,
+ cols#80, it#8, lines#24, colors#8, pairs#64,
+ bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z,
+ clear=\E[H\E[J, cr=\r, csr=\E[%i%p1%d;%p2%dr,
+ cub=\E[%p1%dD, cub1=\b, cud=\E[%p1%dB, cud1=\n,
+ cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
+ cuu=\E[%p1%dA, cuu1=\EM, dch=\E[%p1%dP, dch1=\E[P,
+ dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
+ enacs=\E(B\E)0, home=\E[H,
+ ht=\t, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L,
+ ind=\n, is2=\E)0, kcub1=\EOD, kcud1=\EOB,
+ kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kf1=\EOP,
+ kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\EOQ,
+ kf3=\EOR, kf4=\EOS, kf5=\E[15~, kf6=\E[17~,
+ kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kend=\E[4~,
+ kich1=\E[2~, knp=\E[6~, kpp=\E[5~, nel=\EE,
+ rc=\E8, rev=\E[7m, ri=\EM, rmcup=\E[?1049l, rmir=\E[4l,
+ rmkx=\E[?1l\E>, rmso=\E[23m, rmul=\E[24m, rs2=\Ec, sc=\E7,
+ sgr0=\E[m, smcup=\E[?1049h, smir=\E[4h, smkx=\E[?1h\E=,
+ smso=\E[3m, smul=\E[4m, tbc=\E[3g, smacs=^N, rmacs=^O, flash=\Eg,
+ civis=\E[?25l, cnorm=\E[34h\E[?25h, cvvis=\E[34l,
+ op=\E[39;49m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
+ acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++\054\054hhII00,
+screen-bce|VT 100/ANSI X3.64 virtual terminal with bce,
+ am, bce, km, mir, msgr, xenl,
+ cols#80, it#8, lines#24, colors#8, pairs#64,
+ bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z,
+ clear=\E[H\E[J, cr=\r, csr=\E[%i%p1%d;%p2%dr,
+ cub=\E[%p1%dD, cub1=\b, cud=\E[%p1%dB, cud1=\n,
+ cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
+ cuu=\E[%p1%dA, cuu1=\EM, dch=\E[%p1%dP, dch1=\E[P,
+ dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
+ enacs=\E(B\E)0, home=\E[H,
+ ht=\t, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L,
+ ind=\n, is2=\E)0, kcub1=\EOD, kcud1=\EOB,
+ kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kf1=\EOP,
+ kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\EOQ,
+ kf3=\EOR, kf4=\EOS, kf5=\E[15~, kf6=\E[17~,
+ kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kend=\E[4~,
+ kich1=\E[2~, knp=\E[6~, kpp=\E[5~, nel=\EE,
+ rc=\E8, rev=\E[7m, ri=\EM, rmcup=\E[?1049l, rmir=\E[4l,
+ rmkx=\E[?1l\E>, rmso=\E[23m, rmul=\E[24m, rs2=\Ec, sc=\E7,
+ sgr0=\E[m, smcup=\E[?1049h, smir=\E[4h, smkx=\E[?1h\E=,
+ smso=\E[3m, smul=\E[4m, tbc=\E[3g, smacs=^N, rmacs=^O, flash=\Eg,
+ civis=\E[?25l, cnorm=\E[34h\E[?25h, cvvis=\E[34l,
+ op=\E[39;49m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
+ acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++\054\054hhII00,
+screen-s|VT 100/ANSI X3.64 virtual terminal with hardstatus line,
+ am, bce, hs, km, mir, msgr, xenl,
+ cols#80, it#8, lines#24, colors#8, pairs#64,
+ bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z,
+ clear=\E[H\E[J, cr=\r, csr=\E[%i%p1%d;%p2%dr,
+ cub=\E[%p1%dD, cub1=\b, cud=\E[%p1%dB, cud1=\n,
+ cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
+ cuu=\E[%p1%dA, cuu1=\EM, dch=\E[%p1%dP, dch1=\E[P,
+ dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
+ enacs=\E(B\E)0, home=\E[H,
+ ht=\t, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L,
+ ind=\n, is2=\E)0, kcub1=\EOD, kcud1=\EOB,
+ kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kf1=\EOP,
+ kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\EOQ,
+ kf3=\EOR, kf4=\EOS, kf5=\E[15~, kf6=\E[17~,
+ kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kend=\E[4~,
+ kich1=\E[2~, knp=\E[6~, kpp=\E[5~, nel=\EE,
+ rc=\E8, rev=\E[7m, ri=\EM, rmcup=\E[?1049l, rmir=\E[4l,
+ rmkx=\E[?1l\E>, rmso=\E[23m, rmul=\E[24m, rs2=\Ec, sc=\E7,
+ sgr0=\E[m, smcup=\E[?1049h, smir=\E[4h, smkx=\E[?1h\E=,
+ smso=\E[3m, smul=\E[4m, tbc=\E[3g, smacs=^N, rmacs=^O, flash=\Eg,
+ tsl=\E_, fsl=\E\\, dsl=\E_\E\\,
+ civis=\E[?25l, cnorm=\E[34h\E[?25h, cvvis=\E[34l,
+ op=\E[39;49m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
+ acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++\054\054hhII00,
+screen-256color|VT 100/ANSI X3.64 virtual terminal,
+ ccc,
+ colors#256, pairs#32767,
+ initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
+ setab=\E[48;5;%p1%dm, setaf=\E[38;5;%p1%dm,
+ setb=\E[48;5;%p1%dm, setf=\E[38;5;%p1%dm,
+ use=screen,
diff --git a/terminfo/test.txt b/terminfo/test.txt
new file mode 100644
index 0000000..2da65e5
--- /dev/null
+++ b/terminfo/test.txt
@@ -0,0 +1,603 @@
+
+ <(A)0[?4h[?5l
+
+
+
+
+
+
+
+
+
+ lqqqqqqqqqwwwqqqqqqqqqk sssssssssssssssssssssssssssss
+ xMerry Chrxxxmas * Merx \ /
+ xry Christxxx * Merry x pr rp
+ xChristmasxxxMerry Chrx oqrs srqo
+ xistmas * xxxry Christx ooppqqwqwqqppoo
+ tqqqqqqqqqjxmqqqqqqqqqu x x
+ tqqqqqqqqqq`qqqqqqqqqqu x x
+ tqqqqqqqqqkxlqqqqqqqqqu x x
+ xry Christxxx * Merry x x x
+ xChristmasxxxMerry Chrx x x
+ xistmas * xxxry Christx x x
+ xmas * MerxxxChristmasx srqqj mqqrs
+ mqqqqqqqqqvvvqqqqqqqqqj  rqpo opqr 
+lmxx
+lqmqx x
+lqwmqvx xx x
+lqwqmqvqx x x x
+lqwqmqvqx x x x
+lqwqmqvqx x x x
+lqwqmqvqx x x x
+lqwqmqvqx x x x
+lqwqmqvqx x x x
+lqwqmqvqx x x x
+//
+//
+//  / /
+//  / ///
+//  ////
+//  //// //
+/  //// / /
+ // / //
+// / // /
+//s/ // 
+sssssssssss
+/ / //  // /
+ss
+ / //  //  //
+rrrrrrrrrrr
+/ /s //  //
+qqqqqqqqq
+//  //  //
+srqqqqqqqqqrs
+  //  ///
+srrs
+//  //// //
+rrqqqqrr
+/  //// / /
+ppppppp
+ // / //
+rrqqrr
+// / // /
+rqppppqr
+//s/ // 
+
+rqpppooooooopppqr
+/ / //  // /
+qppoooooooooooppq
+ / //  //  //
+
+
+
+sssssssooo ooo. o f
+
+/ /s //  //.f
+
+ssss .f
+
+//  //  // f
+
+ssssrrrrqqqqqrrrrsssss s
+
+  //  ///. . .
+
+sssrrrrqqqqqqqqqrrrrsssf f . f
+
+//  //// / f .
+
+rrrqqqqpppppppppqqqqrss. . o f
+
+/  //// / /f .f
+
+qqqppppooooooooopppqrss .f .
+
+s// / // f f
+
+sssssssssqppoooo oopqrss.o .
+
+// / // /f f. .
+
+ssrrrrrrrrrsqpooo opqrssf f f . f
+
+//s/ // f o o f .
+
+ssssssrrrrssssss   f o o .. . o f
+
+s/ //  /  . o o ff .f
+
+srrrrrrqqqqqqqqqqqqqqrrssrqf o o .  .f .
+
+/ //  / mqvqqqqqq lqwqqqqqq x x x x . o f
+
+rqqqqqqppppppppppppppq mqvqqqqq lqwqqqqq x x x xf .o . o
+
+/s /  mqvqqqq lqwqqqq x x x x f f [14;51
+
+qppppppoooooooooooooo mqvqqq lqwqqq x x x xf  .f f . f
+
+s /  mqvqq lqwqq x x x x. o f o o f f
+
+poooooo  mqvq lqwq x x x x o o of o o .
+
+rrrrrrrrrrrrrrrrrrrrrrrrrrrrr   mqv lqw x x x xo
+ mq lq x  x  . o o of o o .  .f .
+ m l x x. o o f o . . . o ff f
+    f o o f . ff .o . o
+#3 Cheers!
+#4 Cheers! 
+
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+
+ . o o . o f  f f . . .
+#5
+#5
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ /ooooooooooooooo\
+ o o of o o .. . o f
+ / sss sss \
+o o o . o o ff .f
+ x (sOs) (sOs) x
+ . o o of o o .  .f .
+ x ` x
+. o o f o . . . o ff f
+ \ \sssssssss/ /
+f o o f . ff .o . o
+ \ /
+ . o o . o f  f f . . .
+ \sssssssssss/
+f . o . f o ff  .f f . f
+ ooppqqrrsss
+ f f f . o f o o f f .
+ ooppqqrrsss
+ o o of o o .. . o f
+ ooppqqrrsss
+o o o . o o ff .f
+ ooppqqrrsss
+ . o o of o o .  .f .
+ ooppqqrrsss
+. o o f o . . . o ff f
+ ooppqqrrsss
+f o o f . ff .o . o
+ ooppqqrrsss . o o . o f  f f . . .
+M x ` x
+f . o . f o ff  .f f . f
+M x (sOs) (sOs) x
+ f f f . o f o o f f .
+M / sss sss \
+ o o of o o .. . o f
+M /ooooooooooooooo\
+o o o . o o ff .f
+M
+ . o o of o o .  .f .
+M
+. o o f o . . . o ff f
+M
+f o o f . ff .o . o
+M
+ . o o . o f  f f . . .
+ \ /
+f . o . f o ff  .f f . f
+ \sssssssssss/
+ f f f . o f o o f f .
+ ooppqqrrsss
+ o o of o o .. . o f
+ ooppqqrrsss
+o o o . o o ff .f
+ ooppqqrrsss
+ . o o of o o .  .f .
+ ooppqqrrsss
+. o o f o . . . o ff f
+ ooppqqrrsssf o o f . ff .o . o
+M / sss sss \
+ . o o . o f  f f . . .
+M /ooooooooooooooo\
+f . o . f o ff  .f f . f
+M
+ f f f . o f o o f f .
+M
+ o o of o o .. . o f
+ ooppqqrrsss
+o o o . o o ff .f
+ ooppqqrrsss
+ . o o of o o .  .f .
+ ooppqqrrsss
+. o o f o . . . o ff f
+ ooppqqrrsssf o o f . ff .o . o
+M /ooooooooooooooo\
+ . o o . o f  f f . . .
+M
+f . o . f o ff  .f f . f
+M
+ f f f . o f o o f f .
+M
+ o o of o o .. . o f
+ \sssssssssss/
+o o o . o o ff .f
+ ooppqqrrsss
+ . o o of o o .  .f .
+ ooppqqrrsss
+. o o f o . . . o ff f
+f o o f . ff .o . o
+
+Jin
+ . o o . o f  f f . . .
+gle
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+Bells,
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+Jin
+ . o o of o o .  .f .
+gle
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+Bells,
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+Jin
+ f f f . o f o o f f .
+gle
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+all
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+the
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+way,
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+Oh!
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+What
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+fun
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+it
+ o o of o o .. . o f
+is
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+to
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+ride,
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+On
+o o o . o o ff .f
+a
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+one-
+f . o . f o ff  .f f . f
+horse
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+op
+ f f f . o f o o f f .
+en
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+sleigh.
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff f
+
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff f
+
+ o o of o o 
+. o o o  
+f o o   
+
+o o o . o o ff f
+
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff f
+
+ o o of o o 
+. o o o  
+f o o   
+
+
+Merry Christmas
+
+-
+
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff f
+
+ o o of o o 
+. o o o  
+f o o   
+
+o o o . o o ff f
+
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff .f
+ . o o of o o .  .f .
+. o o f o . . . o ff f
+f o o f . ff .o . o
+ . o o . o f  f f . . .
+f . o . f o ff  .f f . f
+ f f f . o f o o f f .
+ o o of o o .. . o f
+o o o . o o ff f
+
+ o o of o o 
+. o o o  
+f o o   
+
+[?4l
+
diff --git a/terminfo/tetris.c b/terminfo/tetris.c
new file mode 100644
index 0000000..e230373
--- /dev/null
+++ b/terminfo/tetris.c
@@ -0,0 +1,20 @@
+long h[4];t(){h[3]-=h[3]/3000;setitimer(0,h,0);}c,d,l,v[]={(int)t,0,2},w,s,I,K
+=0,i=276,j,k,q[276],Q[276],*n=q,*m,x=17,f[]={7,-13,-12,1,8,-11,-12,-1,9,-1,1,
+12,3,-13,-12,-1,12,-1,11,1,15,-1,13,1,18,-1,1,2,0,-12,-1,11,1,-12,1,13,10,-12,
+1,12,11,-12,-1,1,2,-12,-1,12,13,-12,12,13,14,-11,-1,1,4,-13,-12,12,16,-11,-12,
+12,17,-13,1,-1,5,-12,12,11,6,-12,12,24};u(){for(i=11;++i<264;)if((k=q[i])-Q[i]
+){Q[i]=k;if(i-++I||i%12<1)printf("\033[%d;%dH",(I=i)/12,i%12*2+28);printf(
+"\033[%dm "+(K-k?0:5),k);K=k;}Q[263]=c=getchar();}G(b){for(i=4;i--;)if(q[i?b+
+n[i]:b])return 0;return 1;}g(b){for(i=4;i--;q[i?x+n[i]:x]=b);}main(C,V,a)char*
+*V,*a;{h[3]=1000000/(l=C>1?atoi(V[1]):2);for(a=C>2?V[2]:"jkl pq";i;i--)*n++=i<
+25||i%12<2?7:0;srand(getpid());system("stty cbreak -echo stop u");sigvec(14,v,
+0);t();puts("\033[H\033[J");for(n=f+rand()%7*4;;g(7),u(),g(0)){if(c<0){if(G(x+
+12))x+=12;else{g(7);++w;for(j=0;j<252;j=12*(j/12+1))for(;q[++j];)if(j%12==10){
+for(;j%12;q[j--]=0);u();for(;--j;q[j+12]=q[j]);u();}n=f+rand()%7*4;G(x=17)||(c
+=a[5]);}}if(c==*a)G(--x)||++x;if(c==a[1])n=f+4**(m=n),G(x)||(n=m);if(c==a[2])G
+(++x)||--x;if(c==a[3])for(;G(x+12);++w)x+=12;if(c==a[4]||c==a[5]){s=sigblock(
+8192);printf("\033[H\033[J\033[0m%d\n",w);if(c==a[5])break;for(j=264;j--;Q[j]=
+0);while(getchar()-a[4]);puts("\033[H\033[J\033[7m");sigsetmask(s);}}d=popen(
+"stty -cbreak echo stop \023;sort -mnr -o HI - HI;cat HI","w");fprintf(d,
+"%4d from level %1d by %s\n",w,l,getlogin());pclose(d);}
+