diff options
Diffstat (limited to 'terminfo/checktc.c')
-rw-r--r-- | terminfo/checktc.c | 204 |
1 files changed, 204 insertions, 0 deletions
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); +} |