summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2005-07-21 16:40:40 +0000
committerphk <phk@FreeBSD.org>2005-07-21 16:40:40 +0000
commit64b47851159b469193df993eabe2cd3fab7d9f73 (patch)
treea8aa2de0d3652584a45e32732011996bee5944be /usr.sbin
parent5825347531c0674a75366d1022c325242713bf59 (diff)
downloadFreeBSD-src-64b47851159b469193df993eabe2cd3fab7d9f73.zip
FreeBSD-src-64b47851159b469193df993eabe2cd3fab7d9f73.tar.gz
Remove the vttest program. It lives in ports/sysutils/vttest now.
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/pcvt/vttest/Makefile8
-rw-r--r--usr.sbin/pcvt/vttest/README59
-rw-r--r--usr.sbin/pcvt/vttest/esc.c403
-rw-r--r--usr.sbin/pcvt/vttest/header.h45
-rw-r--r--usr.sbin/pcvt/vttest/main.c2018
-rw-r--r--usr.sbin/pcvt/vttest/vttest.121
6 files changed, 0 insertions, 2554 deletions
diff --git a/usr.sbin/pcvt/vttest/Makefile b/usr.sbin/pcvt/vttest/Makefile
deleted file mode 100644
index f5d6e7b..0000000
--- a/usr.sbin/pcvt/vttest/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-# $FreeBSD$
-
-PROG= vttest
-SRCS= main.c esc.c
-
-CFLAGS+= -DUSEMYSTTY
-
-.include <bsd.prog.mk>
diff --git a/usr.sbin/pcvt/vttest/README b/usr.sbin/pcvt/vttest/README
deleted file mode 100644
index ffc2e8b..0000000
--- a/usr.sbin/pcvt/vttest/README
+++ /dev/null
@@ -1,59 +0,0 @@
-$FreeBSD$
-
-NOTES FROM THE MOD.SOURCES MODERATOR:
-I split the source up into the three separate pieces it now is.
-In doing this, I put lines like "int reading;" in a header file
-that both C modules include. If your Unix requires one of these
-to be "extern int reading;" then you will have some editing to do.
-Also note that this program uses FIONREAD, which must be implemented
-differently in SystemV, etc., and check out the setjmp() call...
- /Rich $alz
-Oh, yeah: I also wrote the Makefile and manpage, such as they are.
--------------------------------------------------------------------
-
-This is a program to test the compatibility (or to demonstrate the
-non-compatibility) of so-called "VT100-compatible" terminals. In
-conformance of the good old hacker traditions, the only documentation
-of this program is the source code itself. To understand it, you also
-need a copy of the original VT100 manual from DEC.
-
-Comments and bug reports: Since this is a release (via USENET) to the
-whole world, a lot of people are going to have opinions and fresh
-ideas about it. (What -- bugs in MY program? Aww...) I can't deal
-with everyone sending me a hacked version, but if you have found a
-serious bug, or ported it to VMS, do tell me. I can't promise any new
-version release, though. From this version on (1.7b) VTTEST will have
-to live its own life without its father holding its hand.
-
-My address is:
-
-Network-mail address: (mcvax,seismo)!enea!suadb!lindberg
-
-Real-world-mail address: Per Lindberg
- QZ, Stockholm University Computing Center
- Box 27322
- S - 102 54 Stockholm
- SWEDEN
-
-The original version of this program is written for the Sargasso C
-compiler for the DECsystem-10. Many thanks to all sales persons with
-quote VT100-compatible unquote terminals, who prompted me to write
-this program, and also to:
-
--- Bo Kleve, LIDAC, Linkoping University, Sweden
- for the portation to DECSYSTEM-20 with the Sargasso C compiler
-
--- Johan Widen, TTDS, Royal Institute of Technology, Stockholm, Sweden
- for the portation to various UNIX systems (incl. System III and Xenix)
-
--- Russ Herman, AES Data Inc., Missisauga, Ont. Canada
- for fixes and code for the VT102 test
-
-Thanx also to JMR "Gremlin" at KTH, and Goran Wallberg at QZ
-for suggestions, bug fixes, etc.
-
-This program does not have support for all the different variations
-of VT100, like VT125, VT131 nor the new VT200 series. Feel free to
-add that yourself. Happy Hacking!
-
- /TMP
diff --git a/usr.sbin/pcvt/vttest/esc.c b/usr.sbin/pcvt/vttest/esc.c
deleted file mode 100644
index 21baa97..0000000
--- a/usr.sbin/pcvt/vttest/esc.c
+++ /dev/null
@@ -1,403 +0,0 @@
-#include "header.h"
-
-#ifndef lint
-static const char rcsid[] =
- "$FreeBSD$";
-#endif
-
-println(s) char *s; {
- printf("%s\n", s);
-}
-
-esc(s) char *s; {
- printf("%c%s", 27, s);
-}
-
-esc2(s1, s2) char s1, s2; {
- printf("%c%s%s", 27, s1, s2);
-}
-
-brcstr(ps, c) char *ps, c; {
- printf("%c[%s%c", 27, ps, c);
-}
-
-brc(pn,c) int pn; char c; {
- printf("%c[%d%c", 27, pn, c);
-}
-
-brc2(pn1, pn2 ,c) int pn1, pn2; char c; {
- printf("%c[%d;%d%c", 27, pn1, pn2, c);
-}
-
-cub(pn) int pn; { /* Cursor Backward */
- brc(pn,'D');
-}
-cud(pn) int pn; { /* Cursor Down */
- brc(pn,'B');
-}
-cuf(pn) int pn; { /* Cursor Forward */
- brc(pn,'C');
-}
-cup(pn1, pn2) int pn1, pn2; { /* Cursor Position */
- brc2(pn1, pn2, 'H');
-}
-cuu(pn) int pn; { /* Cursor Up */
- brc(pn,'A');
-}
-da() { /* Device Attributes */
- brc(0,'c');
-}
-decaln() { /* Screen Alignment Display */
- esc("#8");
-}
-decdhl(lower) int lower; { /* Double Height Line (also double width) */
- if (lower) esc("#4");
- else esc("#3");
-}
-decdwl() { /* Double Wide Line */
- esc("#6");
-}
-deckpam() { /* Keypad Application Mode */
- esc("=");
-}
-deckpnm() { /* Keypad Numeric Mode */
- esc(">");
-}
-decll(ps) char *ps; { /* Load LEDs */
- brcstr(ps, 'q');
-}
-decrc() { /* Restore Cursor */
- esc("8");
-}
-decreqtparm(pn) int pn; { /* Request Terminal Parameters */
- brc(pn,'x');
-}
-decsc() { /* Save Cursor */
- esc("7");
-}
-decstbm(pn1, pn2) int pn1, pn2; { /* Set Top and Bottom Margins */
- if (pn1 || pn2) brc2(pn1, pn2, 'r');
- else esc("[r");
- /* Good for >24-line terminals */
-}
-decswl() { /* Single With Line */
- esc("#5");
-}
-dectst(pn) int pn; { /* Invoke Confidence Test */
- brc2(2, pn, 'y');
-}
-dsr(pn) int pn; { /* Device Status Report */
- brc(pn, 'n');
-}
-ed(pn) int pn; { /* Erase in Display */
- brc(pn, 'J');
-}
-el(pn) int pn; { /* Erase in Line */
- brc(pn,'K');
-}
-hts() { /* Horizontal Tabulation Set */
- esc("H");
-}
-hvp(pn1, pn2) int pn1, pn2; { /* Horizontal and Vertical Position */
- brc2(pn1, pn2, 'f');
-}
-ind() { /* Index */
- esc("D");
-}
-nel() { /* Next Line */
- esc("E");
-}
-ri() { /* Reverse Index */
- esc("M");
-}
-ris() { /* Reset to Initial State */
- esc("c");
-}
-rm(ps) char *ps; { /* Reset Mode */
- brcstr(ps, 'l');
-}
-scs(g,c) int g; char c; { /* Select character Set */
- printf("%c%c%c%c%c%c%c", 27, g ? ')' : '(', c,
- 27, g ? '(' : ')', 'B',
- g ? 14 : 15);
-}
-sgr(ps) char *ps; { /* Select Graphic Rendition */
- brcstr(ps, 'm');
-}
-sm(ps) char *ps; { /* Set Mode */
- brcstr(ps, 'h');
-}
-tbc(pn) int pn; { /* Tabulation Clear */
- brc(pn, 'g');
-}
-
-vt52cup(l,c) int l,c; {
- printf("%cY%c%c", 27, l + 31, c + 31);
-}
-
-char inchar() {
-
- /*
- * Wait until a character is typed on the terminal
- * then read it, without waiting for CR.
- */
-
-#ifdef UNIX
- int lval, waittime, getpid(); static int val; char ch;
-
- fflush(stdout);
- lval = val;
- brkrd = 0;
- reading = 1;
- read(STDIN_FILENO,&ch,1);
- reading = 0;
- if (brkrd)
- val = 0177;
- else
- val = ch;
- if ((val==0177) && (val==lval))
- kill(getpid(), (int) SIGTERM);
-#endif
-#ifdef SARG10
- int val, waittime;
-
- waittime = 0;
- while(!uuo(051,2,&val)) { /* TTCALL 2, (INCHRS) */
- zleep(100); /* Wait 0.1 seconds */
- if ((waittime += ttymode) > 600) /* Time-out, in case */
- return('\177'); /* of hung in ttybin(1) */
- }
-#endif
-#ifdef SARG20 /* try to fix a time-out function */
- int val, waittime;
-
- waittime = 0;
- while(jsys(SIBE,2,_PRIIN) == 0) { /* Is input empty? */
- zleep(100);
- if ((waittime += ttymode) > 600)
- return('\177');
- }
- ejsys(BIN,_PRIIN);
- val = jsac[2];
-#endif
- return(val);
-}
-
-char *instr() {
-
- /*
- * Get an unfinished string from the terminal:
- * wait until a character is typed on the terminal,
- * then read it, and all other available characters.
- * Return a pointer to that string.
- */
-
-
- int i, val, crflag; long l1; char ch;
- static char result[80];
-
- i = 0;
- result[i++] = inchar();
-/* Wait 0.1 seconds (1 second in vanilla UNIX) */
-#ifdef SARG10
- if (trmop(01031,0) < 5) zleep(500); /* wait longer if low speed */
- else zleep(100);
-#else
- zleep(100);
-#endif
-#ifdef UNIX
- fflush(stdout);
-#ifdef XENIX
- while(rdchk(0)) {
- read(STDIN_FILENO,result+i,1);
- if (i++ == 78) break;
- }
-#else
-#ifdef SIII
- while(read(STDERR_FILENO,result+i,1) == 1)
- if (i++ == 78) break;
-#else
- while(ioctl(0,FIONREAD,&l1), l1 > 0L) {
- while(l1-- > 0L) {
- read(STDIN_FILENO,result+i,1);
- if (i++ == 78) goto out1;
- }
- }
-out1:
-#endif
-#endif
-#endif
-#ifdef SARG10
- while(uuo(051,2,&val)) { /* TTCALL 2, (INCHRS) */
- if (!(val == '\012' && crflag)) /* TOPS-10 adds LF to CR */
- result[i++] = val;
- crflag = val == '\015';
- if (i == 79) break;
- zleep(50); /* Wait 0.05 seconds */
- }
-#endif
-#ifdef SARG20
- while(jsys(SIBE,2,_PRIIN) != 0) { /* read input until buffer is empty */
- ejsys(BIN,_PRIIN);
- result[i++] = jsac[2];
- if (i == 79) break;
- zleep(50); /* Wait 0.05 seconds */
- }
-#endif
- result[i] = '\0';
- return(result);
-}
-
-ttybin(bin) int bin; {
-#ifdef SARG10
- #define OPEN 050
- #define IO_MOD 0000017
- #define _IOPIM 2
- #define _IOASC 0
- #define _TOPAG 01021
- #define _TOSET 01000
-
- int v;
- static int arglst[] = {
- _IOPIM,
- `TTY`,
- 0
- };
- arglst[0] = bin ? _IOPIM : _IOASC;
- v = uuo(OPEN, 1, &arglst[0]);
- if (!v) { printf("OPEN failed"); exit(); }
- trmop(_TOPAG + _TOSET, bin ? 0 : 1);
- ttymode = bin;
-#endif
-#ifdef SARG20
- /* TTYBIN will set the line in BINARY/ASCII mode
- * BINARY mode is needed to send control characters
- * Bit 28 must be 0 (we don't flip it).
- * Bit 29 is used for the mode change.
- */
-
- #define _TTASC 0000100
- #define _MOXOF 0000043
-
- int v;
-
- ejsys(RFMOD,_CTTRM);
- v = ejsys(SFMOD,_CTTRM, bin ? (~_TTASC & jsac[2]) : (_TTASC | jsac[2]));
- if (v) { printf("SFMOD failed"); exit(); }
- v = ejsys(MTOPR,_CTTRM,_MOXOF,0);
- if (v) { printf("MTOPR failed"); exit(); }
-#endif
-}
-
-#ifdef SARG20
-/*
- * SUPERBIN turns off/on all input character interrupts
- * This affects ^C, ^O, ^T
- * Beware where and how you use it !!!!!!!
- */
-
-superbin(bin) int bin; {
- int v;
-
- v = ejsys(STIW,(0//-5), bin ? 0 : -1);
- if (v) { printf("STIW superbinary setting failed"); exit(); }
- ttymode = bin;
-}
-
-/*
- * PAGE affects the ^S/^Q handshake.
- * Set bit 34 to turn it on. Clear it for off.
- */
-
-page(bin) int bin; {
- int v;
-
- #define TT_PGM 0000002
-
- ejsys(RFMOD,_CTTRM); /* Get the current terminal status */
- v = ejsys(STPAR,_CTTRM, bin ? (TT_PGM | jsac[2]) : (~TT_PGM & jsac[2]));
- if (v) { printf("STPAR failed"); exit(); }
-}
-#endif
-
-trmop(fc,arg) int fc, arg; {
-#ifdef SARG10
- int retvalp;
- int arglst[3];
-
- /* TRMOP is a TOPS-10 monitor call that does things to the terminal. */
-
- /* Find out TTY nbr (PA1050 barfs if TRMOP get -1 instead of udx) */
- /* A TRMNO monitor call returns the udx (Universal Device Index) */
-
- arglst[0] = fc; /* function code */
- arglst[1] = calli(0115, -1); /* udx, TRMNO. UUO */
- arglst[2] = arg; /* Optional argument */
-
- if (calli(0116, 3 // &arglst[0], &retvalp)) /* TRMOP. UUO */
- return (retvalp);
- else {
- printf("?Error return in TRMOP.");
- exit();
- }
-#endif
-}
-
-inputline(s) char *s; {
- scanf("%s",s);
-#ifdef SARG10
- readnl();
-#endif
-#ifdef SARG20
- readnl();
-#endif
-}
-
-inflush() {
-
- /*
- * Flush input buffer, make sure no pending input character
- */
-
- int val;
-
-#ifdef UNIX
-#ifdef XENIX
- while(rdchk(0)) read(STDIN_FILENO,&val,1);
-#else
-#ifdef SIII
- while(read(STDERR_FILENO,&val,1));
-#else
- long l1;
- ioctl (0, FIONREAD, &l1);
- while(l1-- > 0L) read(STDIN_FILENO,&val,1);
-#endif
-#endif
-#endif
-#ifdef SARG10
- while(uuo(051,2,&val)) /* TTCALL 2, (INCHRS) */
- ;
-#endif
-#ifdef SARG20
- ejsys(CFIBF,_PRIIN); /* Clear input buffer */
-#endif
-}
-
-zleep(t) int t; {
-
-/*
- * Sleep and do nothing (don't waste CPU) for t milliseconds
- */
-
-#ifdef SARG10
- calli(072,t); /* (HIBER) t milliseconds */
-#endif
-#ifdef SARG20
- ejsys(DISMS,t); /* DISMISS for t milliseconds */
-#endif
-#ifdef UNIX
- t = t / 1000;
- if (t == 0) t = 1;
- sleep(t); /* UNIX can only sleep whole seconds */
-#endif
-}
diff --git a/usr.sbin/pcvt/vttest/header.h b/usr.sbin/pcvt/vttest/header.h
deleted file mode 100644
index ae1ccaf..0000000
--- a/usr.sbin/pcvt/vttest/header.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* $FreeBSD$ */
-#define VERSION "1.7b 1985-04-19"
-
-/* Choose one of these */
-
-/* #define XENIX */ /* XENIX implies UNIX */
-/* #define SIII */ /* SIII implies UNIX, (NDELAY a la System III) */
-#define UNIX /* UNIX */
-/* #define VMS */ /* VMS not done yet -- send me your version!!!! */
-/* #define SARG20 */ /* Sargasso C for TOPS-20 */
-/* #define SARG10 */ /* Sargasso C for TOPS-10 */
-
-/* These #ifdef:s are implementation dependent stuff for the Sargasso C */
-/* Unix C barfs on directives like "#strings", so we keep them */
-/* indented. Then unix c can't find them, but Sargasso C *can*. */
-/* Admittedly kludgey, but it works...) */
-#ifdef SARG10
- #define _UNIXCON /* Make UNIX-flavored I/O on TOPS */
- #strings low /* put strings in lowseg mem so we can modify them. */
-#endif
-#ifdef SARG20
- #define _UNIXCON /* Make UNIX-flavored I/O on TOPS */
- #strings low /* put strings in lowseg mem so we can modify them. */
- #include <TOPS20.HDR>
-#endif
-
-#include <stdio.h>
-
-
-#ifdef UNIX
-#include <ctype.h>
-#include <sgtty.h>
-#include <signal.h>
-#include <setjmp.h>
-#include <unistd.h>
-jmp_buf intrenv;
-struct sgttyb sgttyOrg, sgttyNew;
-char stdioBuf[BUFSIZ];
-int brkrd, reading;
-extern onterm(), onbrk();
-#ifdef SIII
-#include <fcntl.h>
-#endif
-#endif
-int ttymode;
diff --git a/usr.sbin/pcvt/vttest/main.c b/usr.sbin/pcvt/vttest/main.c
deleted file mode 100644
index 0a6aa83..0000000
--- a/usr.sbin/pcvt/vttest/main.c
+++ /dev/null
@@ -1,2018 +0,0 @@
-/*
- VTTEST.C
-
- Written Novemeber 1983 - July 1984 by Per Lindberg,
- Stockholm University Computer Center (QZ), Sweden.
-
- THE MAD PROGRAMMER STRIKES AGAIN!
-
- This software is (c) 1984 by QZ
- Non-commercial use and copying allowed.
-
-If you are developing a commercial product, and use this program to do
-it, and that product is successful, please send a sum of money of your
-choice to the address below.
-
-*/
-
-/* $FreeBSD$ */
-
-#include "header.h"
-
-char inchar(), *instr(), *lookup();
-
-struct table {
- int key;
- char *msg;
-} paritytable[] = {
- { 1, "NONE" },
- { 4, "ODD" },
- { 5, "EVEN" },
- { -1, "" }
-},nbitstable[] = {
- { 1, "8" },
- { 2, "7" },
- { -1,"" }
-},speedtable[] = {
- { 0, "50" },
- { 8, "75" },
- { 16, "110" },
- { 24, "132.5"},
- { 32, "150" },
- { 40, "200" },
- { 48, "300" },
- { 56, "600" },
- { 64, "1200" },
- { 72, "1800" },
- { 80, "2000" },
- { 88, "2400" },
- { 96, "3600" },
- { 104, "4800" },
- { 112, "9600" },
- { 120, "19200" },
- { -1, "" }
-};
-
-#ifdef USEMYSTTY
-#ifndef stty
-int stty(fd,ptr)
-int fd;
-struct sgttyb *ptr;
-{
- return(ioctl(fd, TIOCSETP, ptr));
-}
-#endif
-#ifndef gtty
-int gtty(fd,ptr)
-int fd;
-struct sgttyb *ptr;
-{
- return(ioctl(fd, TIOCGETP, ptr));
-}
-#endif
-#endif
-
-main() {
-
- int menuchoice;
-
- static char *mainmenu[] = {
- "Exit",
- "Test of cursor movements",
- "Test of screen features",
- "Test of character sets",
- "Test of double-sized characters",
- "Test of keyboard",
- "Test of terminal reports",
- "Test of VT52 mode",
- "Test of VT102 features (Insert/Delete Char/Line)",
- "Test of known bugs",
- "Test of reset and self-test",
- ""
- };
-
-#ifdef UNIX
- initterminal(setjmp(intrenv));
- signal(SIGINT, (void *)onbrk);
- signal(SIGTERM, (void *)onterm);
- reading = 0;
-#else
- initterminal(0);
-#endif
- do {
-#ifdef SARG20
- ttybin(1); /* set line to binary mode again. It's reset somehow!! */
-#endif
- ed(2);
- cup(5,10); printf("VT100 test program, version %s", VERSION);
- cup(7,10); println("Choose test type:");
- menuchoice = menu(mainmenu);
- switch (menuchoice) {
- case 1: tst_movements(); break;
- case 2: tst_screen(); break;
- case 3: tst_characters(); break;
- case 4: tst_doublesize(); break;
- case 5: tst_keyboard(); break;
- case 6: tst_reports(); break;
- case 7: tst_vt52(); break;
- case 8: tst_insdel(); break;
- case 9: tst_bugs(); break;
- case 10: tst_rst(); break;
- }
- } while (menuchoice);
- bye();
-}
-
-tst_movements() {
-
- /* Test of:
- CUF (Cursor Forward)
- CUB (Cursor Backward)
- CUD (Cursor Down) IND (Index) NEL (Next Line)
- CUU (Cursor Up) RI (Reverse Index)
- CUP (Cursor Position) HVP (Horizontal and Vertical Position)
- ED (Erase in Display)
- EL (Erase in Line)
- DECALN (Screen Alignment Display)
- <CR> <BS>
- Cursor control characters inside CSI sequences
- */
-
- int i, row, col, pass, width, hlfxtra;
- char c, *ctext = "This is a correct sentence";
-
- for (pass = 0; pass <= 1; pass++) {
- if (pass == 0) { rm("?3"); width = 80; hlfxtra = 0; }
- else { sm("?3"); width = 132; hlfxtra = 26; }
-
- decaln();
- cup( 9,10+hlfxtra); ed(1);
- cup(18,60+hlfxtra); ed(0); el(1);
- cup( 9,71+hlfxtra); el(0);
- for (row = 10; row <= 16; row++) {
- cup(row, 10+hlfxtra); el(1);
- cup(row, 71+hlfxtra); el(0);
- }
- cup(17,30); el(2);
- for (col = 1; col <= width; col++) {
- hvp(24, col); printf("*");
- hvp( 1, col); printf("*");
- }
- cup(2,2);
- for (row = 2; row <= 23; row++) {
- printf("+");
- cub(1);
- ind();
- }
- cup(23,width-1);
- for (row = 23; row >=2; row--) {
- printf("+");
- cub(1); ri();
- }
- cup(2,1);
- for (row = 2; row <= 23; row++) {
- printf("*");
- cup(row, width);
- printf("*");
- cub(10);
- if(row < 10)
- nel();
- else
- printf("\n");
- }
- cup(2,10);
- cub(42+hlfxtra); cuf(2);
- for (col = 3; col <= width-2; col++) {
- printf("+");
- cuf(0); cub(2); cuf(1);
- }
- cup(23,70+hlfxtra);
- cuf(42+hlfxtra); cub(2);
- for (col = width-2; col >= 3; col--) {
- printf("+");
- cub(1); cuf(1); cub(0); printf("%c", 8);
- }
- cup( 1, 1); cuu(10); cuu(1); cuu(0);
- cup(24,width); cud(10); cud(1); cud(0);
-
- cup(10,12+hlfxtra);
- for (row = 10; row <= 15; row++) {
- for (col = 12+hlfxtra; col <= 69+hlfxtra; col++) printf(" ");
- cud(1); cub(58);
- }
- cuu(5); cuf(1);
- printf("The screen should be cleared, and have an unbroken bor-");
- cup(12,13+hlfxtra);
- printf("der of *'s and +'s around the edge, and exactly in the");
- cup(13,13+hlfxtra);
- printf("middle there should be a frame of E's around this text");
- cup(14,13+hlfxtra);
- printf("with one (1) free position around it. ");
- holdit();
- }
- rm("?3");
-
- ed(2);
- cup(1,1);
- println("Test of cursor-control characters inside ESC sequences.");
- println("Below should be two identical lines:");
- println("");
- println("A B C D E F G H I J K L M N O P Q R S");
- for (i = 1; i < 20; i++) {
- printf("%c", 64 + i);
- brcstr("2\010", 'C'); /* Two forward, one backspace */
- }
- println("");
- println("");
- holdit();
-
- ed(2);
- cup(1,1);
- println("Test of leading zeros in ESC sequences.");
- printf("Two lines below you should see the sentence \"%s\".",ctext);
- for (col = 1; *ctext; col++)
- printf("\033[00000000004;00000000%dH%c",col,*ctext++);
- cup(20,1);
- holdit();
-}
-
-tst_screen() {
-
- /* Test of:
- - DECSTBM (Set Top and Bottom Margins)
- - TBC (Tabulation Clear)
- - HTS (Horizontal Tabulation Set)
- - SM RM (Set/Reset mode): - 80/132 chars
- - Origin: Realtive/absolute
- - Scroll: Smooth/jump
- - Wraparound
- - SGR (Select Graphic Rendition)
- - SM RM (Set/Reset Mode) - Inverse
- - DECSC (Save Cursor)
- - DECRC (Restore Cursor)
- */
-
- int i, j, cset, row, col, down, soft, background;
-
- static char *tststr = "*qx`";
- static char *attr[5] = { ";0", ";1", ";4", ";5", ";7" };
-
- cup(1,1);
- sm("?7"); /* Wrap Around ON */
- for (col = 1; col <= 160; col++) printf("*");
- rm("?7"); /* Wrap Around OFF */
- cup(3,1);
- for (col = 1; col <= 160; col++) printf("*");
- sm("?7"); /* Wrap Around ON */
- cup(5,1);
- println("This should be three identical lines of *'s completely filling");
- println("the top of the screen without any empty lines between.");
- println("(Test of WRAP AROUND mode setting.)");
- holdit();
-
- ed(2);
- tbc(3);
- cup(1,1);
- for (col = 1; col <= 78; col += 3) {
- cuf(3); hts();
- }
- cup(1,4);
- for (col = 4; col <= 78; col += 6) {
- tbc(0); cuf(6);
- }
- cup(1,7); tbc(1); tbc(2); /* no-op */
- cup(1,1); for (col = 1; col <= 78; col += 6) printf("\t*");
- cup(2,2); for (col = 2; col <= 78; col += 6) printf(" *");
- cup(4,1);
- println("Test of TAB setting/resetting. These two lines");
- printf("should look the same. ");
- holdit();
- for (background = 0; background <= 1; background++) {
- if (background) rm("?5");
- else sm("?5");
- sm("?3"); /* 132 cols */
- ed(2); /* VT100 clears screen on SM3/RM3, but not obviously, so... */
- cup(1,1); tbc(3);
- for (col = 1; col <= 132; col += 8) {
- cuf(8); hts();
- }
- cup(1,1); for (col = 1; col <= 130; col += 10) printf("1234567890");
- printf("12");
- for (row = 3; row <= 20; row++) {
- cup(row,row);
- printf("This is 132 column mode, %s background.",
- background ? "dark" : "light");
- }
- holdit();
- rm("?3"); /* 80 cols */
- ed(2); /* VT100 clears screen on SM3/RM3, but not obviously, so... */
- cup(1,1); for (col = 1; col <= 80; col += 10) printf("1234567890");
- for (row = 3; row <= 20; row++) {
- cup(row,row);
- printf("This is 80 column mode, %s background.",
- background ? "dark" : "light");
- }
- holdit();
- }
-
- ed(2);
- sm("?6"); /* Origin mode (relative) */
- for (soft = -1; soft <= 0; soft++) {
- if (soft) sm("?4");
- else rm("?4");
- for (row = 12; row >= 1; row -= 11) {
- decstbm(row, 24-row+1);
- ed(2);
- for (down = 0; down >= -1; down--) {
- if (down) cuu(24);
- else cud(24);
- for (i = 1; i <= 30; i++) {
- printf("%s scroll %s region %d Line %d\n",
- soft ? "Soft" : "Jump",
- down ? "down" : "up",
- 2*(13-row), i);
- if (down) { ri(); ri(); }
- }
- }
- holdit();
- }
- }
- ed(2);
- decstbm(23,24);
- printf(
- "\nOrigin mode test. This line should be at the bottom of the screen.");
- cup(1,1);
- printf("%s",
- "This line should be the one above the bottom of the screeen. ");
- holdit();
- ed(2);
- rm("?6"); /* Origin mode (absolute) */
- cup(24,1);
- printf(
- "Origin mode test. This line should be at the bottom of the screen.");
- cup(1,1);
- printf("%s", "This line should be at the top if the screen. ");
- holdit();
- decstbm(1,24);
-
- ed(2);
- cup( 1,20); printf("Graphic rendition test pattern:");
- cup( 4, 1); sgr("0"); printf("vanilla");
- cup( 4,40); sgr("0;1"); printf("bold");
- cup( 6, 6); sgr(";4"); printf("underline");
- cup( 6,45);sgr(";1");sgr("4");printf("bold underline");
- cup( 8, 1); sgr("0;5"); printf("blink");
- cup( 8,40); sgr("0;5;1"); printf("bold blink");
- cup(10, 6); sgr("0;4;5"); printf("underline blink");
- cup(10,45); sgr("0;1;4;5"); printf("bold underline blink");
- cup(12, 1); sgr("1;4;5;0;7"); printf("negative");
- cup(12,40); sgr("0;1;7"); printf("bold negative");
- cup(14, 6); sgr("0;4;7"); printf("underline negative");
- cup(14,45); sgr("0;1;4;7"); printf("bold underline negative");
- cup(16, 1); sgr("1;4;;5;7"); printf("blink negative");
- cup(16,40); sgr("0;1;5;7"); printf("bold blink negative");
- cup(18, 6); sgr("0;4;5;7"); printf("underline blink negative");
- cup(18,45); sgr("0;1;4;5;7"); printf("bold underline blink negative");
- sgr("");
-
- rm("?5"); /* Inverse video off */
- cup(23,1); el(0); printf("Dark background. "); holdit();
- sm("?5"); /* Inverse video */
- cup(23,1); el(0); printf("Light background. "); holdit();
- rm("?5");
- ed(2);
- cup(8,12); printf("normal");
- cup(8,24); printf("bold");
- cup(8,36); printf("underscored");
- cup(8,48); printf("blinking");
- cup(8,60); printf("reversed");
- cup(10,1); printf("stars:");
- cup(12,1); printf("line:");
- cup(14,1); printf("x'es:");
- cup(16,1); printf("diamonds:");
- for (cset = 0; cset <= 3; cset++) {
- for (i = 0; i <= 4; i++) {
- cup(10 + 2 * cset, 12 + 12 * i);
- sgr(attr[i]);
- if (cset == 0 || cset == 2) scs(0,'B');
- else scs(0,'0');
- for (j = 0; j <= 4; j++) {
- printf("%c", tststr[cset]);
- }
- decsc();
- cup(cset + 1, i + 1); sgr(""); scs(0,'B'); printf("A");
- decrc();
- for (j = 0; j <= 4; j++) {
- printf("%c", tststr[cset]);
- }
- }
- }
- sgr("0"); scs(0,'B'); cup(21,1);
- println("Test of the SAVE/RESTORE CURSOR feature. There should");
- println("be ten characters of each flavour, and a rectangle");
- println("of 5 x 4 A's filling the top left of the screen.");
- holdit();
-}
-
-tst_characters() {
- /* Test of:
- SCS (Select character Set)
- */
-
- int i, j, g, cset;
- char chcode[5], *setmsg[5];
-
- chcode[0] = 'A';
- chcode[1] = 'B';
- chcode[2] = '0';
- chcode[3] = '1';
- chcode[4] = '2';
- setmsg[0] = "UK / national";
- setmsg[1] = "US ASCII";
- setmsg[2] = "Special graphics and line drawing";
- setmsg[3] = "Alternate character ROM standard characters";
- setmsg[4] = "Alternate character ROM special graphics";
-
- cup(1,10); printf("Selected as G0 (with SI)");
- cup(1,48); printf("Selected as G1 (with SO)");
- for (cset = 0; cset <= 4; cset++) {
- scs(1,'B');
- cup(3 + 4 * cset, 1);
- sgr("1");
- printf("Character set %c (%s)",chcode[cset], setmsg[cset]);
- sgr("0");
- for (g = 0; g <= 1; g++) {
- scs(g,chcode[cset]);
- for (i = 1; i <= 3; i++) {
- cup(3 + 4 * cset + i, 10 + 38 * g);
- for (j = 0; j <= 31; j++) {
- printf("%c", i * 32 + j);
- }
- }
- }
- }
- scs(1,'B');
- cup(24,1); printf("These are the installed character sets. ");
- holdit();
-}
-
-tst_doublesize() {
- /* Test of:
- DECSWL (Single Width Line)
- DECDWL (Double Width Line)
- DECDHL (Double Height Line) (also implicit double width)
- */
-
- int col, i, w, w1;
-
- /* Print the test pattern in both 80 and 132 character width */
-
- for(w = 0; w <= 1; w++) {
- w1 = 13 * w;
-
- ed(2);
- cup(1, 1);
- if (w) { sm("?3"); printf("132 column mode"); }
- else { rm("?3"); printf(" 80 column mode"); }
-
- cup( 5, 3 + 2 * w1);
- printf("v------- left margin");
-
- cup( 7, 3 + 2 * w1);
- printf("This is a normal-sized line");
- decdhl(0); decdhl(1); decdwl(); decswl();
-
- cup( 9, 2 + w1);
- printf("This is a Double-width line");
- decswl(); decdhl(0); decdhl(1); decdwl();
-
- cup(11, 2 + w1);
- decdwl(); decswl(); decdhl(1); decdhl(0);
- printf("This is a Double-width-and-height line");
- cup(12, 2 + w1);
- decdwl(); decswl(); decdhl(0); decdhl(1);
- printf("This is a Double-width-and-height line");
-
- cup(14, 2 + w1);
- decdwl(); decswl(); decdhl(1); decdhl(0); el(2);
- printf("This is another such line");
- cup(15, 2 + w1);
- decdwl(); decswl(); decdhl(0); decdhl(1);
- printf("This is another such line");
-
- cup(17, 3 + 2 * w1);
- printf("^------- left margin");
-
- cup(21, 1);
- printf("This is not a double-width line");
- for (i = 0; i <= 1; i++) {
- cup(21,6);
- if (i) { printf("**is**"); decdwl(); }
- else { printf("is not"); decswl(); }
- cup(23,1); holdit();
- }
- }
- /* Set vanilla tabs for next test */
- cup(1,1); tbc(3); for (col = 1; col <= 132; col += 8) { cuf(8); hts(); }
- rm("?3");
- ed(2);
- scs(0,'0');
-
- cup( 8,1); decdhl(0); printf("lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk");
- cup( 9,1); decdhl(1); printf("lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk");
- cup(10,1); decdhl(0); printf("x%c%c%c%c%cx",9,9,9,9,9);
- cup(11,1); decdhl(1); printf("x%c%c%c%c%cx",9,9,9,9,9);
- cup(12,1); decdhl(0); printf("x%c%c%c%c%cx",9,9,9,9,9);
- cup(13,1); decdhl(1); printf("x%c%c%c%c%cx",9,9,9,9,9);
- cup(14,1); decdhl(0); printf("x x");
- cup(15,1); decdhl(1); printf("x x");
- cup(16,1); decdhl(0); printf("mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj");
- cup(17,1); decdhl(1); printf("mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj");
- scs(0,'B'); sgr("1;5");
- cup(12,3);
- printf("* The mad programmer strikes again * ");
- cup(13,3); printf("%c",9); cub(6);
- printf("* The mad programmer strikes again *");
- sgr("0");
- cup(22,1);
- println("Another test pattern... a frame with blinking bold text,");
- printf("all in double-height double-width size. ");
- holdit();
-
- decstbm(8,24); /* Absolute origin mode, so cursor is set at (1,1) */
- cup(8,1);
- for (i = 1; i <= 12; i++)
- ri();
- decstbm(0,0); /* No scroll region */
- cup(1,1);
- printf("%s", "Exactly half of the box should remain. ");
- holdit();
-}
-
-tst_keyboard() {
-
-/* Test of:
- - DECLL (Load LEDs)
- - Keyboard return messages
- - SM RM (Set/Reset Mode) - Cursor Keys
- - Auto repeat
- - DECKPAM (Keypad Application Mode)
- - DECKPNM (Keypad Numeric Mode)
-
-The standard VT100 keayboard layout:
-
- UP DN LE RI
-
-ESC 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 0) -_ =+ `~ BS
-
-TAB* qQ wW eE rR tT yY uU iI oO pP [{ ]} DEL
-
-** ** aA sS dD fF gG hH jJ kK lL ;: ," RETN \|
-
-** **** zZ xX cC vV bB nN mM ,< .> /? **** LF
-
- ****************SPACE BAR****************
-
- PF1 PF2 PF3 PF4
-
- *7* *8* *9* *-*
-
- *4* *5* *6* *,*
-
- *1* *2* *3*
-
- ***0*** *.* ENT
-*/
-
- char *ledmsg[6], *ledseq[6];
-
- int i, j, okflag;
- int kblayout;
- int ckeymode;
- int fkeymode;
- char kbdc;
- char *kbds = " ";
- char *curkeystr, *fnkeystr, *abmstr;
- char arptstring[500];
-
- static struct key {
- char c;
- int row;
- int col;
- char *symbol;
- } keytab [] = {
- { 27, 1, 0, "ESC" },
- { '1', 1, 6, "1" }, { '!', 1, 7, "!" },
- { '2', 1, 11, "2" }, { '@', 1, 12, "@" },
- { '3', 1, 16, "3" }, { '#', 1, 17, "#" },
- { '4', 1, 21, "4" }, { '$', 1, 22, "$" },
- { '5', 1, 26, "5" }, { '%', 1, 27, "%" },
- { '6', 1, 31, "6" }, { '^', 1, 32, "^" },
- { '7', 1, 36, "7" }, { '&', 1, 37, "&" },
- { '8', 1, 41, "8" }, { '*', 1, 42, "*" },
- { '9', 1, 46, "9" }, { '(', 1, 47, "(" },
- { '0', 1, 51, "0" }, { ')', 1, 52, ")" },
- { '-', 1, 56, "-" }, { '_', 1, 57, "_" },
- { '=', 1, 61, "=" }, { '+', 1, 62, "+" },
- { '`', 1, 66, "`" }, { '~', 1, 67, "~" },
- { 8, 1, 70, "BS" },
- { 9, 2, 0, " TAB " },
- { 'q', 2, 8, "q" }, { 'Q', 2, 9, "Q" },
- { 'w', 2, 13, "w" }, { 'W', 2, 14, "W" },
- { 'e', 2, 18, "e" }, { 'E', 2, 19, "E" },
- { 'r', 2, 23, "r" }, { 'R', 2, 24, "R" },
- { 't', 2, 28, "t" }, { 'T', 2, 29, "T" },
- { 'y', 2, 33, "y" }, { 'Y', 2, 34, "Y" },
- { 'u', 2, 38, "u" }, { 'U', 2, 39, "U" },
- { 'i', 2, 43, "i" }, { 'I', 2, 44, "I" },
- { 'o', 2, 48, "o" }, { 'O', 2, 49, "O" },
- { 'p', 2, 53, "p" }, { 'P', 2, 54, "P" },
- { '[', 2, 58, "[" }, { '{', 2, 59, "{" },
- { ']', 2, 63, "]" }, { '}', 2, 64, "}" },
- { 127, 2, 71, "DEL" },
- { 'a', 3, 10, "a" }, { 'A', 3, 11, "A" },
- { 's', 3, 15, "s" }, { 'S', 3, 16, "S" },
- { 'd', 3, 20, "d" }, { 'D', 3, 21, "D" },
- { 'f', 3, 25, "f" }, { 'F', 3, 26, "F" },
- { 'g', 3, 30, "g" }, { 'G', 3, 31, "G" },
- { 'h', 3, 35, "h" }, { 'H', 3, 36, "H" },
- { 'j', 3, 40, "j" }, { 'J', 3, 41, "J" },
- { 'k', 3, 45, "k" }, { 'K', 3, 46, "K" },
- { 'l', 3, 50, "l" }, { 'L', 3, 51, "L" },
- { ';', 3, 55, ";" }, { ':', 3, 56, ":" },
- {'\'', 3, 60, "'" }, { '"', 3, 61,"\"" },
- { 13, 3, 65, "RETN"},
- {'\\', 3, 71,"\\" }, { '|', 3, 72, "|" },
- { 'z', 4, 12, "z" }, { 'Z', 4, 13, "Z" },
- { 'x', 4, 17, "x" }, { 'X', 4, 18, "X" },
- { 'c', 4, 22, "c" }, { 'C', 4, 23, "C" },
- { 'v', 4, 27, "v" }, { 'V', 4, 28, "V" },
- { 'b', 4, 32, "b" }, { 'B', 4, 33, "B" },
- { 'n', 4, 37, "n" }, { 'N', 4, 38, "N" },
- { 'm', 4, 42, "m" }, { 'M', 4, 43, "M" },
- { ',', 4, 47, "," }, { '<', 4, 48, "<" },
- { '.', 4, 52, "." }, { '>', 4, 53, ">" },
- { '/', 4, 57, "/" }, { '?', 4, 58, "?" },
- { 10, 4, 69, "LF" },
- { ' ', 5, 13, " SPACE BAR "},
- {'\0', 0, 0, "" }
- };
-
- static struct natkey {
- char natc;
- int natrow;
- int natcol;
- char *natsymbol;
- } natkeytab [][29] = {
- {
- { '"', 1, 12, "\""},
- { '&', 1, 32, "&" },
- { '/', 1, 37, "/" },
- { '(', 1, 42, "(" },
- { ')', 1, 47, ")" },
- { '=', 1, 52, "=" },
- { '+', 1, 56, "+" }, { '?', 1, 57, "?" },
- { '`', 1, 61, "`" }, { '@', 1, 62, "@" },
- { '<', 1, 66, "<" }, { '>', 1, 67, ">" },
- { '}', 2, 58, "}" }, { ']', 2, 59, "]" },
- { '^', 2, 63, "^" }, { '~', 2, 64, "~" },
- { '|', 3, 55, "|" }, {'\\', 3, 56,"\\" },
- { '{', 3, 60, "{" }, { '[', 3, 61, "[" },
- {'\'', 3, 71, "'" }, { '*', 3, 72, "*" },
- { ',', 4, 47, "," }, { ';', 4, 48, ";" },
- { '.', 4, 52, "." }, { ':', 4, 53, ":" },
- { '-', 4, 57, "-" }, { '_', 4, 58, "_" },
- {'\0', 0, 0, "" }
- },
- {
- { '"', 1, 12, "\""},
- { '&', 1, 32, "&" },
- { '/', 1, 37, "/" },
- { '(', 1, 42, "(" },
- { ')', 1, 47, ")" },
- { '=', 1, 52, "=" },
- { '+', 1, 56, "+" }, { '?', 1, 57, "?" },
- { '`', 1, 61, "`" }, { '@', 1, 62, "@" },
- { '<', 1, 66, "<" }, { '>', 1, 67, ">" },
- { '}', 2, 58, "}" }, { ']', 2, 59, "]" },
- { '~', 2, 63, "~" }, { '^', 2, 64, "^" },
- { '|', 3, 55, "|" }, {'\\', 3, 56,"\\" },
- { '{', 3, 60, "{" }, { '[', 3, 61, "[" },
- {'\'', 3, 71, "'" }, { '*', 3, 72, "*" },
- { ',', 4, 47, "," }, { ';', 4, 48, ";" },
- { '.', 4, 52, "." }, { ':', 4, 53, ":" },
- { '-', 4, 57, "-" }, { '_', 4, 58, "_" },
- {'\0', 0, 0, "" }
- }
- };
-
- static struct curkey {
- char *curkeymsg[3];
- int curkeyrow;
- int curkeycol;
- char *curkeysymbol;
- char *curkeyname;
- } curkeytab [] = {
-
- /* A Reset, A Set, VT52 */
-
- {{"\033[A","\033OA","\033A"}, 0, 56, "UP", "Up arrow" },
- {{"\033[B","\033OB","\033B"}, 0, 61, "DN", "Down arrow" },
- {{"\033[D","\033OD","\033D"}, 0, 66, "LT", "Left arrow" },
- {{"\033[C","\033OC","\033C"}, 0, 71, "RT", "Right arrow"},
- {{"", "", "" }, 0, 0, "", "" }
- };
-
- static struct fnkey {
- char *fnkeymsg[4];
- int fnkeyrow;
- int fnkeycol;
- char *fnkeysymbol;
- char *fnkeyname;
- } fnkeytab [] = {
-
- /* ANSI-num,ANSI-app,VT52-nu,VT52-ap, r, c, symb name */
-
- {{"\033OP","\033OP","\033P","\033P" }, 6, 59, "PF1", "PF1" },
- {{"\033OQ","\033OQ","\033Q","\033Q" }, 6, 63, "PF2", "PF2" },
- {{"\033OR","\033OR","\033R","\033R" }, 6, 67, "PF3", "PF3" },
- {{"\033OS","\033OS","\033S","\033S" }, 6, 71, "PF4", "PF4" },
- {{"7", "\033Ow","7", "\033?w"}, 7, 59, " 7 ", "Numeric 7" },
- {{"8", "\033Ox","8", "\033?x"}, 7, 63, " 8 ", "Numeric 8" },
- {{"9", "\033Oy","9", "\033?y"}, 7, 67, " 9 ", "Numeric 9" },
- {{"-", "\033Om","-", "\033?m"}, 7, 71, " - ", "Minus" },
- {{"4", "\033Ot","4", "\033?t"}, 8, 59, " 4 ", "Numeric 4" },
- {{"5", "\033Ou","5", "\033?u"}, 8, 63, " 5 ", "Numeric 5" },
- {{"6", "\033Ov","6", "\033?v"}, 8, 67, " 6 ", "Numeric 6" },
- {{",", "\033Ol",",", "\033?l"}, 8, 71, " , ", "Comma" },
- {{"1", "\033Oq","1", "\033?q"}, 9, 59, " 1 ", "Numeric 1" },
- {{"2", "\033Or","2", "\033?r"}, 9, 63, " 2 ", "Numeric 2" },
- {{"3", "\033Os","3", "\033?s"}, 9, 67, " 3 ", "Numeric 3" },
- {{"0", "\033Op","0", "\033?p"},10, 59," O ","Numeric 0"},
- {{".", "\033On",".", "\033?n"},10, 67, " . ", "Point" },
- {{"\015", "\033OM","\015", "\033?M"},10, 71, "ENT", "ENTER" },
- {{"","","",""}, 0, 0, "", "" }
- };
-
- static struct ckey {
- int ccount;
- char *csymbol;
- } ckeytab [] = {
- { 0, "NUL (CTRL-@ or CTRL-Space)" },
- { 0, "SOH (CTRL-A)" },
- { 0, "STX (CTRL-B)" },
- { 0, "ETX (CTRL-C)" },
- { 0, "EOT (CTRL-D)" },
- { 0, "ENQ (CTRL-E)" },
- { 0, "ACK (CTRL-F)" },
- { 0, "BEL (CTRL-G)" },
- { 0, "BS (CTRL-H) (BACK SPACE)" },
- { 0, "HT (CTRL-I) (TAB)" },
- { 0, "LF (CTRL-J) (LINE FEED)" },
- { 0, "VT (CTRL-K)" },
- { 0, "FF (CTRL-L)" },
- { 0, "CR (CTRL-M) (RETURN)" },
- { 0, "SO (CTRL-N)" },
- { 0, "SI (CTRL-O)" },
- { 0, "DLE (CTRL-P)" },
- { 0, "DC1 (CTRL-Q) (X-On)" },
- { 0, "DC2 (CTRL-R)" },
- { 0, "DC3 (CTRL-S) (X-Off)" },
- { 0, "DC4 (CTRL-T)" },
- { 0, "NAK (CTRL-U)" },
- { 0, "SYN (CTRL-V)" },
- { 0, "ETB (CTRL-W)" },
- { 0, "CAN (CTRL-X)" },
- { 0, "EM (CTRL-Y)" },
- { 0, "SUB (CTRL-Z)" },
- { 0, "ESC (CTRL-[) (ESCAPE)" },
- { 0, "FS (CTRL-\\ or CTRL-? or CTRL-_)" },
- { 0, "GS (CTRL-])" },
- { 0, "RS (CTRL-^ or CTRL-~ or CTRL-`)" },
- { 0, "US (CTRL-_ or CTRL-?)" }
- };
-
- static char *keyboardmenu[] = {
- "Standard American ASCII layout",
- "Swedish national layout D47",
- "Swedish national layout E47",
- /* add new keyboard layouts here */
- ""
- };
-
- static char *curkeymodes[3] = {
- "ANSI / Cursor key mode RESET",
- "ANSI / Cursor key mode SET",
- "VT52 Mode"
- };
-
- static char *fnkeymodes[4] = {
- "ANSI Numeric mode",
- "ANSI Application mode",
- "VT52 Numeric mode",
- "VT52 Application mode"
- };
-
- ledmsg[0] = "L1 L2 L3 L4"; ledseq[0] = "1;2;3;4";
- ledmsg[1] = " L2 L3 L4"; ledseq[1] = "1;0;4;3;2";
- ledmsg[2] = " L2 L3"; ledseq[2] = "1;4;;2;3";
- ledmsg[3] = "L1 L2"; ledseq[3] = ";;2;1";
- ledmsg[4] = "L1"; ledseq[4] = "1";
- ledmsg[5] = ""; ledseq[5] = "";
-
-#ifdef UNIX
- fflush(stdout);
-#endif
- ed(2);
- cup(10,1);
- println("These LEDs (\"lamps\") on the keyboard should be on:");
- for (i = 0; i <= 5; i++) {
- cup(10,52); el(0); printf("%s", ledmsg[i]);
- decll("0");
- decll(ledseq[i]);
- cup(12,1); holdit();
- }
-
- ed(2);
- cup(10,1);
- println("Test of the AUTO REPEAT feature");
- println("");
- println("Hold down an alphanumeric key for a while, then push RETURN.");
- printf("%s", "Auto Repeat OFF: ");
- rm("?8");
- inputline(arptstring);
- if (strlen(arptstring) == 0) println("No characters read!??");
- else if (strlen(arptstring) == 1) println("OK.");
- else println("Too many characters read.");
- println("");
- println("Hold down an alphanumeric key for a while, then push RETURN.");
- printf("%s", "Auto Repeat ON: ");
- sm("?8");
- inputline(arptstring);
- if (strlen(arptstring) == 0) println("No characters read!??");
- else if (strlen(arptstring) == 1) println("Not enough characters read.");
- else println("OK.");
- println("");
- holdit();
-
- ed(2);
- cup(5,10);
- println("Choose keyboard layout:");
- kblayout = menu(keyboardmenu);
- if (kblayout) {
- kblayout--;
- for (j = 0; natkeytab[kblayout][j].natc != '\0'; j++) {
- for (i = 0; keytab[i].c != '\0'; i++) {
- if (keytab[i].row == natkeytab[kblayout][j].natrow &&
- keytab[i].col == natkeytab[kblayout][j].natcol) {
- keytab[i].c = natkeytab[kblayout][j].natc;
- keytab[i].symbol = natkeytab[kblayout][j].natsymbol;
- break;
- }
- }
- }
- }
-
- ed(2);
- for (i = 0; keytab[i].c != '\0'; i++) {
- cup(1 + 2 * keytab[i].row, 1 + keytab[i].col);
- sgr("7");
- printf("%s", keytab[i].symbol);
- sgr("");
- }
- cup(22,1);
-#ifdef UNIX
- sgttyNew.sg_flags &= ~CRMOD;
- sgttyNew.sg_flags &= ~ECHO;
- stty(0, &sgttyNew);
-#endif
- inflush();
- printf("Press each key, both shifted and unshifted. Finish with RETURN:");
- do { /* while (kbdc != 13) */
- cup(23,1); kbdc = inchar();
- cup(23,1); el(0);
- sprintf(kbds, "%c", kbdc);
- chrprint(kbds);
- for (i = 0; keytab[i].c != '\0'; i++) {
- if (keytab[i].c == kbdc) {
- cup(1 + 2 * keytab[i].row, 1 + keytab[i].col);
- printf("%s", keytab[i].symbol);
- break;
- }
- }
- } while (kbdc != 13);
-#ifdef SARG10
- inchar(); /* Local hack: Read LF that TOPS-10 adds to CR */
-#endif
- cup(23,1); el(0);
-
- for (ckeymode = 0; ckeymode <= 2; ckeymode++) {
- if (ckeymode) sm("?1");
- else rm("?1");
- for (i = 0; curkeytab[i].curkeysymbol[0] != '\0'; i++) {
- cup(1 + 2 * curkeytab[i].curkeyrow, 1 + curkeytab[i].curkeycol);
- sgr("7");
- printf("%s", curkeytab[i].curkeysymbol);
- sgr("");
- }
- cup(20,1); printf("<%s>%20s", curkeymodes[ckeymode], "");
- cup(22,1); el(0);
- cup(22,1); printf("%s", "Press each cursor key. Finish with TAB.");
- for(;;) {
- cup(23,1);
- if (ckeymode == 2) rm("?2"); /* VT52 mode */
- curkeystr = instr();
- esc("<"); /* ANSI mode */
- cup(23,1); el(0);
- cup(23,1); chrprint(curkeystr);
- if (!strcmp(curkeystr,"\t")) break;
- for (i = 0; curkeytab[i].curkeysymbol[0] != '\0'; i++) {
- if (!strcmp(curkeystr,curkeytab[i].curkeymsg[ckeymode])) {
- sgr("7");
- printf(" (%s key) ", curkeytab[i].curkeyname);
- sgr("");
- cup(1 + 2 * curkeytab[i].curkeyrow,
- 1 + curkeytab[i].curkeycol);
- printf("%s", curkeytab[i].curkeysymbol);
- break;
- }
- }
- if (i == sizeof(curkeytab) / sizeof(struct curkey) - 1) {
- sgr("7");
- printf("%s", " (Unknown cursor key) ");
- sgr("");
- }
- }
- }
-
- for (fkeymode = 0; fkeymode <= 3; fkeymode++) {
- for (i = 0; fnkeytab[i].fnkeysymbol[0] != '\0'; i++) {
- cup(1 + 2 * fnkeytab[i].fnkeyrow, 1 + fnkeytab[i].fnkeycol);
- sgr("7");
- printf("%s", fnkeytab[i].fnkeysymbol);
- sgr("");
- }
- cup(20,1); printf("<%s>%20s", fnkeymodes[fkeymode], "");
- cup(22,1); el(0);
- cup(22,1); printf("%s", "Press each function key. Finish with TAB.");
- for(;;) {
- cup(23,1);
- if (fkeymode >= 2) rm("?2"); /* VT52 mode */
- if (fkeymode % 2) deckpam(); /* Application mode */
- else deckpnm(); /* Numeric mode */
- fnkeystr = instr();
- esc("<"); /* ANSI mode */
- cup(23,1); el(0);
- cup(23,1); chrprint(fnkeystr);
- if (!strcmp(fnkeystr,"\t")) break;
- for (i = 0; fnkeytab[i].fnkeysymbol[0] != '\0'; i++) {
- if (!strcmp(fnkeystr,fnkeytab[i].fnkeymsg[fkeymode])) {
- sgr("7");
- printf(" (%s key) ", fnkeytab[i].fnkeyname);
- sgr("");
- cup(1 + 2 * fnkeytab[i].fnkeyrow, 1 + fnkeytab[i].fnkeycol);
- printf("%s", fnkeytab[i].fnkeysymbol);
- break;
- }
- }
- if (i == sizeof(fnkeytab) / sizeof(struct fnkey) - 1) {
- sgr("7");
- printf("%s", " (Unknown function key) ");
- sgr("");
- }
- }
- }
-
-#ifdef UNIX
- sgttyNew.sg_flags |= CRMOD;
- stty(0, &sgttyNew);
-#endif
- ed(2);
- cup(5,1);
- println("Finally, a check of the ANSWERBACK MESSAGE, which can be sent");
- println("by pressing CTRL-BREAK. The answerback message can be loaded");
- println("in SET-UP B by pressing SHIFT-A and typing e.g.");
- println("");
- println(" \" H e l l o , w o r l d Return \"");
- println("");
- println("(the double-quote characters included). Do that, and then try");
- println("to send an answerback message with CTRL-BREAK. If it works,");
- println("the answerback message should be displayed in reverse mode.");
- println("Finish with a single RETURN.");
-
-#ifdef UNIX
- sgttyNew.sg_flags &= ~CRMOD;
- stty(0, &sgttyNew);
-#endif
- do {
- cup(17,1);
- inflush();
- abmstr = instr();
- cup(17,1);
- el(0);
- chrprint(abmstr);
- } while (strcmp(abmstr,"\r"));
-
- ed(2);
- for (i = 0; i < 32; i++) {
- cup(1 + (i % 16), 1 + 40 * (i / 16));
- sgr("7");
- printf("%s", ckeytab[i].csymbol);
- sgr("0");
- }
- cup(19,1);
-#ifdef UNIX
- sgttyNew.sg_flags |= CRMOD;
- stty(0, &sgttyNew);
-#endif
- println(
- "Push each CTRL-key TWICE. Note that you should be able to send *all*");
- println(
- "CTRL-codes twice, including CTRL-S (X-Off) and CTRL-Q (X-Off)!");
- println(
- "Finish with DEL (also called DELETE or RUB OUT), or wait 1 minute.");
-#ifdef UNIX
-#ifdef SIII
- sgttyNew.sg_flags &= ~CBREAK;
- stty(0, &sgttyNew);
-#endif
- sgttyNew.sg_flags |= RAW;
- stty(0, &sgttyNew);
-#endif
- ttybin(1);
-#ifdef SARG20
- page(0); /* Turn off all character processing at input */
- superbin(1); /* Turn off ^C (among others). Keep your fingers crossed!! */
-#endif
- do {
- cup(23,1); kbdc = inchar();
- cup(23,1); el(0);
- if (kbdc < 32) printf(" %s", ckeytab[kbdc].csymbol);
- else {
- sprintf(kbds, "%c", kbdc);
- chrprint(kbds);
- printf("%s", " -- not a CTRL key");
- }
- if (kbdc < 32) ckeytab[kbdc].ccount++;
- if (ckeytab[kbdc].ccount == 2) {
- cup(1 + (kbdc % 16), 1 + 40 * (kbdc / 16));
- printf("%s", ckeytab[kbdc].csymbol);
- }
- } while (kbdc != '\177');
-#ifdef UNIX
- sgttyNew.sg_flags &= ~RAW;
- sgttyNew.sg_flags |= ECHO;
- stty(0, &sgttyNew);
-#ifdef SIII
- sgttyNew.sg_flags |= CBREAK;
- stty(0, &sgttyNew);
-#endif
-#endif
- ttybin(0);
-#ifdef SARG20
- superbin(0); /* Puuuh! We made it!? */
- page(1); /* Back to normal input processing */
- ttybin(1); /* This must be the mode for DEC20 */
-#endif
- cup(24,1);
- okflag = 1;
- for (i = 0; i < 32; i++) if (ckeytab[i].ccount < 2) okflag = 0;
- if (okflag) printf("%s", "OK. ");
- else printf("%s", "You have not been able to send all CTRL keys! ");
- holdit();
-}
-
-tst_reports() {
- /* Test of:
- <ENQ> (AnswerBack Message)
- SM RM (Set/Reset Mode) - LineFeed / Newline
- DSR (Device Status Report)
- DA (Device Attributes)
- DECREQTPARM (Request Terminal Parameters)
- */
-
- int parity, nbits, xspeed, rspeed, clkmul, flags;
- int i, reportpos;
- char *report, *report2;
- static char *attributes[][2] = {
- { "\033[?1;0c", "No options (vanilla VT100)" },
- { "\033[?1;1c", "VT100 with STP" },
- { "\033[?1;2c", "VT100 with AVO (could be a VT102)" },
- { "\033[?1;3c", "VT100 with STP and AVO" },
- { "\033[?1;4c", "VT100 with GPO" },
- { "\033[?1;5c", "VT100 with STP and GPO" },
- { "\033[?1;6c", "VT100 with AVO and GPO" },
- { "\033[?1;7c", "VT100 with STP, AVO and GPO" },
- { "\033[?1;11c", "VT100 with PP and AVO" },
- { "\033[?1;15c", "VT100 with PP, GPO and AVO" },
- { "\033[?4;2c", "VT132 with AVO" },
- { "\033[?4;3c", "VT132 with AVO and STP" },
- { "\033[?4;6c", "VT132 with GPO and AVO" },
- { "\033[?4;7c", "VT132 with GPO, AVO, and STP" },
- { "\033[?4;11c", "VT132 with PP and AVO" },
- { "\033[?4;15c", "VT132 with PP, GPO and AVO" },
- { "\033[?7c", "VT131" },
- { "\033[?12;5c", "VT125" }, /* VT125 also has ROM version */
- { "\033[?12;7c", "VT125 with AVO" }, /* number, so this won't work */
- { "\033[?5;0c", "VK100 (GIGI)" },
- { "\033[?5c", "VK100 (GIGI)" },
- { "", "" }
- };
-
-#ifdef UNIX
- sgttyNew.sg_flags &= ~ECHO;
- stty(0, &sgttyNew);
-#endif
- cup(5,1);
- println("This is a test of the ANSWERBACK MESSAGE. (To load the A.B.M.");
- println("see the TEST KEYBOARD part of this program). Below here, the");
- println("current answerback message in your terminal should be");
- println("displayed. Finish this test with RETURN.");
- cup(10,1);
- inflush();
- printf("%c", 5); /* ENQ */
- report = instr();
- cup(10,1);
- chrprint(report);
- cup(12,1);
- holdit();
-
- ed(2);
- cup(1,1);
- println("Test of LineFeed/NewLine mode.");
- cup(3,1);
- sm("20");
-#ifdef UNIX
- sgttyNew.sg_flags &= ~CRMOD;
- stty(0, &sgttyNew);
-#endif
- printf("NewLine mode set. Push the RETURN key: ");
- report = instr();
- cup(4,1);
- el(0);
- chrprint(report);
- if (!strcmp(report, "\015\012")) printf(" -- OK");
- else printf(" -- Not expected");
- cup(6,1);
- rm("20");
- printf("NewLine mode reset. Push the RETURN key: ");
- report = instr();
- cup(7,1);
- el(0);
- chrprint(report);
- if (!strcmp(report, "\015")) printf(" -- OK");
- else printf(" -- Not expected");
- cup(9,1);
-#ifdef UNIX
- sgttyNew.sg_flags |= CRMOD;
- stty(0, &sgttyNew);
-#endif
- holdit();
-
- ed(2);
- cup(1,1);
- printf("Test of Device Status Report 5 (report terminal status).");
- cup(2,1);
- dsr(5);
- report = instr();
- cup(2,1);
- el(0);
- printf("Report is: ");
- chrprint(report);
- if (!strcmp(report,"\033[0n")) printf(" -- means \"TERMINAL OK\"");
- else if (!strcmp(report,"\033[3n")) printf(" -- means \"TERMINAL OK\"");
- else printf(" -- Unknown response!");
-
- cup(4,1);
- println("Test of Device Status Report 6 (report cursor position).");
- cup(5,1);
- dsr(6);
- report = instr();
- cup(5,1);
- el(0);
- printf("Report is: ");
- chrprint(report);
- if (!strcmp(report,"\033[5;1R")) printf(" -- OK");
- else printf(" -- Unknown response!");
-
- cup(7,1);
- println("Test of Device Attributes report (what are you)");
- cup(8,1);
- da(0);
- report = instr();
- cup(8,1);
- el(0);
- printf("Report is: ");
- chrprint(report);
- for (i = 0; *attributes[i][0] != '\0'; i++) {
- if (!strcmp(report,attributes[i][0])) break;
- }
- if (*attributes[i][0] == '\0')
- printf(" -- Unknown response, refer to the manual");
- else {
- printf(" -- means %s", attributes[i][1]);
- if (i) {
- cup(9,1);
- println("Legend: STP = Processor Option");
- println(" AVO = Advanced Video Option");
- println(" GPO = Graphics Processor Option");
- println(" PP = Printer Port");
- }
- }
-
- cup(14,1);
- println("Test of the \"Request Terminal Parameters\" feature, argument 0.");
- cup(15,1);
- decreqtparm(0);
- report = instr();
- cup(15,1);
- el(0);
- printf("Report is: ");
- chrprint(report);
- if (strlen(report) < 16
- || report[0] != '\033'
- || report[1] != '['
- || report[2] != '2'
- || report[3] != ';')
- println(" -- Bad format");
- else {
- reportpos = 4;
- parity = scanto(report, &reportpos, ';');
- nbits = scanto(report, &reportpos, ';');
- xspeed = scanto(report, &reportpos, ';');
- rspeed = scanto(report, &reportpos, ';');
- clkmul = scanto(report, &reportpos, ';');
- flags = scanto(report, &reportpos, 'x');
- if (parity == 0 || nbits == 0 || clkmul == 0) println(" -- Bad format");
- else println(" -- OK");
- printf(
- "This means: Parity %s, %s bits, xmitspeed %s, recvspeed %s.\n",
- lookup(paritytable, parity),
- lookup(nbitstable, nbits),
- lookup(speedtable, xspeed),
- lookup(speedtable, rspeed));
- printf("(CLoCk MULtiplier = %d, STP option flags = %d)\n", clkmul, flags);
- }
-
- cup(19,1);
- println("Test of the \"Request Terminal Parameters\" feature, argument 1.");
- cup(20,1);
- decreqtparm(1); /* Does the same as decreqtparm(0), reports "3" */
- report2 = instr();
- cup(20,1);
- el(0);
- printf("Report is: ");
- chrprint(report2);
- if (strlen(report2) < 3
- || report2[2] != '3')
- println(" -- Bad format");
- else {
- report2[2] = '2';
- if (!strcmp(report,report2)) println(" -- OK");
- else println(" -- Bad format");
- }
- cup(24,1);
- holdit();
-#ifdef UNIX
- sgttyNew.sg_flags |= ECHO;
- stty(0, &sgttyNew);
-#endif
-}
-
-tst_vt52() {
-
- static struct rtabl {
- char *rcode;
- char *rmsg;
- } resptable[] = {
- { "\033/K", " -- OK (means Standard VT52)" },
- { "\033/Z", " -- OK (means VT100 emulating VT52)" },
- { "", " -- Unknown response"}
- };
-
- int i,j;
- char *response;
-
- rm("?2"); /* Reset ANSI (VT100) mode, Set VT52 mode */
- esc("H"); /* Cursor home */
- esc("J"); /* Erase to end of screen */
- esc("H"); /* Cursor home */
- for (i = 0; i <= 23; i++) {
- for (j = 0; j <= 9; j++)
- printf("%s", "FooBar ");
- println("Bletch");
- }
- esc("H"); /* Cursor home */
- esc("J"); /* Erase to end of screen */
-
- vt52cup(7,47);
- printf("nothing more.");
- for (i = 1; i <= 10; i++) printf("THIS SHOULD GO AWAY! ");
- for (i = 1; i <= 5; i++) {
- vt52cup(1,1);
- printf("%s", "Back scroll (this should go away)");
- esc("I"); /* Reverse LineFeed (with backscroll!) */
- }
- vt52cup(12,60);
- esc("J"); /* Erase to end of screen */
- for (i = 2; i <= 6; i++) {
- vt52cup(i,1);
- esc("K"); /* Erase to end of line */
- }
-
- for (i = 2; i <= 23; i++) {
- vt52cup(i,70); printf("%s", "**Foobar");
- }
- vt52cup(23,10);
- for (i = 23; i >= 2; i--) {
- printf("%s", "*");
- printf("%c", 8); /* BS */
- esc("I"); /* Reverse LineFeed (LineStarve) */
- }
- vt52cup(1,70);
- for (i = 70; i >= 10; i--) {
- printf("%s", "*");
- esc("D"); esc("D"); /* Cursor Left */
- }
- vt52cup(24,10);
- for (i = 10; i <= 70; i++) {
- printf("%s", "*");
- printf("%c", 8); /* BS */
- esc("C"); /* Cursor Right */
- }
- vt52cup(2,11);
- for (i = 2; i <= 23; i++) {
- printf("%s", "!");
- printf("%c", 8); /* BS */
- esc("B"); /* Cursor Down */
- }
- vt52cup(23,69);
- for (i = 23; i >= 2; i--) {
- printf("%s", "!");
- printf("%c", 8); /* BS */
- esc("A"); /* Cursor Up */
- }
- for (i = 2; i <= 23; i++) {
- vt52cup(i,71);
- esc("K"); /* Erase to end of line */
- }
-
- vt52cup(10,16);
- printf("%s", "The screen should be cleared, and have a centered");
- vt52cup(11,16);
- printf("%s", "rectangle of \"*\"s with \"!\"s on the inside to the");
- vt52cup(12,16);
- printf("%s", "left and right. Only this, and");
- vt52cup(13,16);
- holdit();
-
- esc("H"); /* Cursor home */
- esc("J"); /* Erase to end of screen */
- printf("%s", "This is the normal character set:");
- for (j = 0; j <= 1; j++) {
- vt52cup(3 + j, 16);
- for (i = 0; i <= 47; i++)
- printf("%c", 32 + i + 48 * j);
- }
- vt52cup(6,1);
- printf("%s", "This is the special graphics character set:");
- esc("F"); /* Select Special Graphics character set */
- for (j = 0; j <= 1; j++) {
- vt52cup(8 + j, 16);
- for (i = 0; i <= 47; i++)
- printf("%c", 32 + i + 48 * j);
- }
- esc("G"); /* Select ASCII character set */
- vt52cup(12,1);
- holdit();
-
- esc("H"); /* Cursor home */
- esc("J"); /* Erase to end of screen */
- println("Test of terminal response to IDENTIFY command");
- esc("Z"); /* Identify */
- response = instr();
- println("");
- printf("Response was");
- esc("<"); /* Enter ANSI mode (VT100 mode) */
- chrprint(response);
- for(i = 0; resptable[i].rcode[0] != '\0'; i++)
- if (!strcmp(response, resptable[i].rcode))
- break;
- printf("%s", resptable[i].rmsg);
- println("");
- println("");
- holdit();
-}
-
-tst_insdel() {
-
- /* Test of:
- SM/RM(4) (= IRM (Insertion/replacement mode))
- ICH (Insert Character)
- DCH (Delete character)
- IL (Insert line)
- DL (Delete line)
- */
-
- int i, row, col, sw, dblchr, scr132;
-
- for(scr132 = 0; scr132 <= 1; scr132++) {
- if (scr132) { sm("?3"); sw = 132; }
- else { rm("?3"); sw = 80; }
- ed(2);
- cup(1,1);
- for (row=1; row<=24; row++) {
- cup(row,1);
- for (col=1; col<=sw; col++)
- printf("%c", 'A'-1+row);
- }
- cup(4,1);
- printf("Screen accordion test (Insert & Delete Line). "); holdit();
- ri(); el(2);
- decstbm( 2,23);
- sm("?6");
- cup(1,1);
- for (row=1; row<=24; row++) {
- il(row);
- dl(row);
- }
- rm("?6");
- decstbm( 0, 0);
- cup(2,1);
- printf(
- "Top line: A's, bottom line: X's, this line, nothing more. ");
- holdit();
- cup(2,1); ed(0);
- cup(1,2);
- printf("B");
- cub(1);
- sm("4");
- for (col=2; col<=sw-1; col++)
- printf("*");
- rm("4");
- cup(4,1);
- printf("Test of 'Insert Mode'. The top line should be 'A*** ... ***B'. ");
- holdit(); ri(); el(2);
- cup(1,2);
- dch(sw-2);
- cup(4,1);
- printf("Test of 'Delete Character'. The top line should be 'AB'. ");
- holdit();
-
- for(dblchr = 1; dblchr <= 2; dblchr++) {
- ed(2);
- for (row=1; row<=24; row++) {
- cup(row,1);
- if (dblchr == 2) decdwl();
- for (col=1; col<=sw/dblchr; col++)
- printf("%c", 'A'-1+row);
- cup(row,sw/dblchr-row);
- dch(row);
- }
- cup(4,1);
- println("The right column should be staggered ");
- printf("by one. ");
- holdit();
- }
- ed(2);
- cup(1,1);
- println("If your terminal has the ANSI 'Insert Character' function");
- println("(the VT102 does not), then you should see a line like this");
- println(" A B C D E F G H I J K L M N O P Q R S T U V W X Y Z");
- println("below:");
- println("");
- for (i = 'Z'; i >= 'A'; i--) {
- printf("%c\010",i);
- ich(2);
- }
- cup(10,1);
- holdit();
-
- if (sw == 132) rm("?3");
- }
-}
-
-dch(pn) int pn; { brc(pn, 'P'); } /* Delete character */
-ich(pn) int pn; { brc(pn, '@'); } /* Insert character -- not in VT102 */
-dl(pn) int pn; { brc(pn, 'M'); } /* Delete line */
-il(pn) int pn; { brc(pn, 'L'); } /* Insert line */
-
-/* Test of some known VT100 bugs and misfeatures */
-
-tst_bugs() {
-
- int i, menuchoice;
-
- static char *menutable[] = {
- "Exit to main menu",
- "Bug A: Smooth scroll to jump scroll",
- "Bug B: Scrolling region",
- "Bug C: Wide to narrow screen",
- "Bug D: Narrow to wide screen",
- "Bug E: Cursor move from double- to single-wide line",
- "Bug F: Column mode escape sequence",
- "Wrap around with cursor addressing",
- "Erase right half of double width lines",
- "Funny scroll regions",
- /* Add more here */
- ""
- };
-
- static char *hmsg[] = {
- "Test of known bugs in the DEC VT100 series. The numbering of some of",
- "the bugs (A-F) refers to the article 'VT100 MAGIC' by Sami Tabih in",
- "the 'Proceedings of the DEC Users Society' at St. Louis, Missouri, May",
- "1983. To understand some of the tests, you have to look at the source",
- "code or the article. Of course, a good VT100-compatible terminal",
- "should not have these bugs (or have some means of disabling them)! If",
- "a bug appears, you might want to RESET the terminal before continuing",
- "the test. There is a test of the RESET function in the main menu.",
- "" };
-
- do {
- ed(2); cup(1,1);
- for (i = 0; *hmsg[i]; i++) println(hmsg[i]);
- println("");
- println(" Choose bug test number:");
- menuchoice = menu(menutable);
- switch (menuchoice) {
- case 1: bug_a(); break;
- case 2: bug_b(); break;
- case 3: bug_c(); break;
- case 4: bug_d(); break;
- case 5: bug_e(); break;
- case 6: bug_f(); break;
- case 7: bug_w(); break;
- case 8: bug_l(); break;
- case 9: bug_s(); break;
- }
- } while (menuchoice);
-}
-
-/* Bug A: Smooth scroll to jump scroll */
-
-bug_a() {
- int i;
-
- cup (10, 1);
- println("This is a test of the VT100 'Scroll while toggle softscroll'");
- println("bug. The cursor may disappear, or move UP the screen, or");
- println("multiple copies of some lines may appear.");
- holdit();
-
- /* Invoke the bug */
-
- esc ("[24H"); /* Simplified cursor movement */
- rm("?4"); for (i = 1; i <= 20; i++) printf("\n");
- sm("?4"); for (i = 1; i <= 10; i++) printf("\n");
- rm("?4"); for (i = 1; i <= 5; i++) printf("\n");
-
- /* That should be enough to show the bug. But we'll try another way: */
- sm ("?4"); /* Set soft scroll */
- nel (); /* "NextLine", move down */
- rm ("?4"); /* Reset soft scroll */
- nel (); /* "NextLine", move down */
- for (i = 1; i <= 10; i++) { /* Show the bug */
- printf ("Softscroll bug test, line %d. ", i);
- holdit();
- }
- println("That should have been enough to show the bug, if present.");
- holdit();
-}
-
-/* Bug B: Scrolling region */
-
-bug_b() {
- char c;
-
- decaln();
- cup( 1,1); el(0);
- printf("Line 11 should be double-wide, line 12 should be cleared.");
- cup( 2,1); el(0);
- printf("Then, the letters A-P should be written at the beginning");
- cup( 3,1); el(0);
- printf("of lines 12-24, and the empty line and A-E are scrolled away.");
- cup( 4,1); el(0);
- printf("If the bug is present, some lines are confused, look at K-P.");
- cup(11,1); decdwl();
- decstbm(12,24);
- cup(12,1); el(0); printf("Here we go... "); holdit();
- cup(12,1); ri(); /* Bug comes here */
- for (c = 'A'; c <= 'P'; c++) printf("%c\n",c); /* Bug shows here */
- holdit();
- decstbm(0,0); /* No scr. region */
-}
-
-/* Bug C: Wide to narrow screen */
-
-bug_c() {
- sm("?3"); /* 132 column mode */
- cup(1,81);
- rm("?3"); /* 80 column mode */
- cup(12,5);
- printf("Except for this line, the screen should be blank. ");
- holdit();
-}
-
-/* Bug D: Narrow to wide screen */
-
-bug_d() {
- int i;
- char result;
- /* Make the bug appear */
- do {
- cup(14,1);
-
- /* The original code in the article says
- * PRINT ESC$; "[13;1H"; CHR$(10%);
- * but I guess a cup(14,1); would do.
- * (To output a pure LF might be tricky).
- */
-
- sm("?3"); /* Make the bug visible */
- cup(1,9); decdwl();
- println("You should see blinking text at the bottom line.");
- cup(3,9); decdwl();
- println("Enter 0 to exit, 1 to try to invoke the bug again.");
- cup(24,9); decdwl(); sgr("1;5;7");
- printf("If you can see this then the bug did not appear."); sgr("");
- cup(4,9); decdwl();
- result = inchar(); readnl();
- rm("?3");
- } while (result == '1');
- sm("?4"); /* Syrup scroll */
- cup(23,1);
- for (i = 1; i <= 5; i++)
- println("If the bug is present, this should make things much worse!");
- holdit();
- rm("?4"); /* Jump scroll */
-}
-
-/* Bug E: Cursor move from double- to single-wide line */
-
-bug_e() {
- int i;
- static char *rend[2] = { "\033[m", "\033[7m" };
- sm("?3");
- cup(1,1); decdwl();
- println("This test should put an 'X' at line 3 column 100.");
- for (i = 1; i <= 12; i++) printf("1234567890%s",rend[i & 1]);
- cup(1,1); /* The bug appears when we jump from a dobule-wide line */
- cup(3,100); /* to a single-wide line, column > 66. */
- printf("X");
- cup(4, 66); printf("! !");
- cup(5,1);
- printf("--------------------------- The 'X' should NOT be above here -");
- printf("---+------------ but above here -----+");
- cup(10,1); decdwl(); holdit();
- rm("?3");
-}
-
-/* Bug F: Column mode escape sequence */
-
-bug_f() {
- int i, row, col;
-
- /*
- * VT100 "toggle origin mode, forget rest" bug. If you try to set
- * (or clear) parameters and one of them is the "origin mode"
- * ("?6") parameter, parameters that appear after the "?6"
- * remain unaffected. This is also true on CIT-101 terminals.
- */
- sm ("?5"); /* Set reverse mode */
- sm ("?3"); /* Set 132 column mode */
- println("Test VT100 'Toggle origin mode, forget rest' bug, part 1.");
- println("The screen should be in reverse, 132 column mode.");
- holdit();
- ed (2);
- rm ("?6;5;3"); /* Reset (origin, reverse, 132 col) */
- println("Test VT100 'Toggle origin mode, forget rest' bug, part 2.\n");
- println("The screen should be in non-reverse, 80 column mode.");
- holdit();
-}
-
- /* Bug W:
- * The dreaded "wraparound" bug! You CUP to col 80, write a char,
- * CUP to another line in col 80, write a char. And the brain-damaged
- * terminal thinks that "Hokay, so he's written a char in col 80, so
- * I stay in col 80 and wait for next character. Let's see now, here
- * comes another character, and I'm still in col 80, so I must make
- * a NewLine first." -- It doesn't clear that "still in col 80" flag
- * on a CUP. Argh!
- */
-
-bug_w() {
- int row, col;
-
- cup (16,1);
- println(" This illustrates the \"wrap around bug\" which exists on a");
- println(" standard VT100. At the top of the screen there should be");
- println(" a row of +'s, and the rightmost column should be filled");
- println(" with *'s. But if the bug is present, some of the *'s may");
- println(" be placed in other places, e.g. in the leftmost column,");
- println(" and the top line of +'s may be scrolled away.");
-
- cup(1,1);
- for (col = 1; col <= 79; col++)
- printf ("+");
- for (row = 1; row <= 24; row++) {
- hvp (row, 80);
- printf ("*");
- }
- cup(24,1);
- holdit();
-}
-
- /* Bug L:
- * Check if the right half of double-width lines comes back
- * when a line is first set to single-width, filled with stuff,
- * set to double-width, and finally reset to single-width.
- *
- * A VT100 has this misfeature, and many others. Foo!
- */
-
-bug_l() {
- cup(15, 1);
- printf("This-is-a-long-line-This-is-a-long-line-");
- printf("This-is-a-long-line-This-is-a-long-line-");
- cup(1, 1);
- printf("This is a test of what happens to the right half of double-width");
- println(" lines.");
- printf("A common misfeature is that the right half does not come back");
- println(" when a long");
- printf("single-width line is set to double-width and then reset to");
- println(" single-width.");
-
- cup(5, 1);
- println("Now the line below should contain 80 characters in single width.");
- holdit();
- cup(15, 1); decdwl();
- cup(8, 1);
- println("Now the line below should contain 40 characters in double width.");
- holdit();
- cup(15, 1); decswl();
- cup(11, 1);
- println("Now the line below should contain 80 characters in single width.");
- holdit();
-
- /* ...and in 132 column mode */
-
- sm("?3");
- ed(2);
- cup(15, 1);
- printf("This-is-a-long-line-This-is-a-long-line-");
- printf("This-is-a-long-line-This-is-a-long-line-");
- printf("This-is-a-long-line-This-is-a-long-line-");
- printf("ending-here-");
-
- cup(1, 1);
- printf("This is the same test in 132 column mode.");
-
- cup(5, 1);
- println("Now the line below should contain 132 characters in single width.");
- holdit();
- cup(15, 1); decdwl();
- cup(8, 1);
- println("Now the line below should contain 66 characters in double width.");
- holdit();
- cup(15, 1); decswl();
- cup(11, 1);
- println("Now the line below should contain 132 characters in single width.");
- holdit();
- rm("?3");
-}
-
-bug_s() {
- int i;
- decstbm(20,10); /* 20-10=-10, < 2, so no scroll region. */
- cup(1,1);
- for (i=1; i<=20; i++)
- printf("This is 20 lines of text (line %d), no scroll region.\n", i);
- holdit();
- ed(2);
- decstbm(0,1); /* Should be interpreted as decstbm(1,1) = none */
- cup(1,1);
- for (i=1; i<=20; i++)
- printf("This is 20 lines of text (line %d), no scroll region.\n", i);
- holdit();
- decstbm(0,0); /* No scroll region (just in case...) */
-}
-
-tst_rst() {
-
- /*
- * Test of
- * - RIS (Reset to Initial State)
- * - DECTST (invoke terminal test)
- */
-
- cup(10,1);
- printf ("The terminal will now be RESET. ");
- holdit();
- ris();
-#ifdef UNIX
- fflush(stdout);
-#endif
- zleep(5000); /* Wait 5.0 seconds */
- cup(10,1);
- println("The terminal is now RESET. Next, the built-in confidence test");
- printf("%s", "will be invoked. ");
- holdit();
- ed(2);
- dectst(1);
-#ifdef UNIX
- fflush(stdout);
-#endif
- zleep(5000); /* Wait 5.0 seconds */
- cup(10,1);
- println("If the built-in confidence test found any errors, a code");
- printf("%s", "is visible above. ");
- holdit();
-}
-
-initterminal(pn) int pn; {
-
-#ifdef UNIX
- if (pn==0) {
- fflush(stdout);
- gtty(0,&sgttyOrg);
- gtty(0,&sgttyNew);
- sgttyNew.sg_flags |= CBREAK;
- }
- else {
- fflush(stdout);
- inflush();
- sleep(2);
- sgttyNew.sg_flags = sgttyOrg.sg_flags | CBREAK;
- }
- stty(0,&sgttyNew);
-#ifdef SIII
- close(2);
- open(_PATH_TTY,O_RDWR|O_NDELAY);
-#endif
-#endif
-#ifdef SARG10
- /* Set up neccesary TOPS-10 terminal parameters */
-
- trmop(02041, `VT100`); /* tty type vt100 */
- trmop(02002, 0); /* tty no tape */
- trmop(02003, 0); /* tty lc */
- trmop(02005, 1); /* tty tab */
- trmop(02010, 1); /* tty no crlf */
- trmop(02020, 0); /* tty no tape */
- trmop(02021, 1); /* tty page */
- trmop(02025, 0); /* tty blanks */
- trmop(02026, 1); /* tty no alt */
- trmop(02040, 1); /* tty defer */
-#endif
-#ifdef SARG20
- ttybin(1); /* set line to binary mode */
-#endif
- /* Set up my personal prejudices */
-
- esc("<"); /* Enter ANSI mode (if in VT52 mode) */
- rm("?1"); /* cursor keys normal */
- rm("?3"); /* 80 col mode */
- rm("?4"); /* Jump scroll */
- rm("?5"); /* Normal screen */
- rm("?6"); /* Absolute origin mode */
- sm("?7"); /* Wrap around on */
- rm("?8"); /* Auto repeat off */
- decstbm(0,0); /* No scroll region */
- sgr("0"); /* Normal character attributes */
-
-}
-
-bye () {
- /* Force my personal prejudices upon the poor luser */
-
- esc("<"); /* Enter ANSI mode (if in VT52 mode) */
- rm("?1"); /* cursor keys normal */
- rm("?3"); /* 80 col mode */
- rm("?5"); /* Normal screen */
- rm("?6"); /* Absolute origin mode */
- sm("?7"); /* Wrap around on */
- sm("?8"); /* Auto repeat on */
- decstbm(0,0); /* No scroll region */
- sgr("0"); /* Normal character attributes */
-
- /* Say goodbye */
-
- ed(2);
- cup(12,30);
- printf("That's all, folks!\n");
- printf("\n\n\n");
- inflush();
-#ifdef SARG20
- ttybin(0); /* reset line to normal mode */
-#endif
-#ifdef UNIX
- stty(0,&sgttyOrg);
-#endif
- exit(0);
-}
-
-#ifdef UNIX
-onbrk() {
- signal(SIGINT, (void *)onbrk);
- if (reading)
- brkrd = 1;
- else
- longjmp(intrenv, 1);
-}
-
-onterm() {
- signal(SIGTERM, (void *)onterm);
- longjmp(intrenv, 1);
-}
-#endif
-
-holdit() {
- inflush();
- printf("Push <RETURN>");
- readnl();
-}
-
-readnl() {
-#ifdef UNIX
- char ch;
- fflush(stdout);
- brkrd = 0;
- reading = 1;
- do { read(STDIN_FILENO,&ch,1); } while(ch != '\n' && !brkrd);
- if (brkrd)
- kill(getpid(), SIGTERM);
- reading = 0;
-#endif
-#ifdef SARG10
- while (getchar() != '\n')
- ;
-#endif
-#ifdef SARG20
- while (getchar() != '\n')
- ;
-#endif
-}
-
-scanto(str, pos, toc) char *str; int *pos; char toc; {
- char c;
- int result = 0;
-
- while (toc != (c = str[(*pos)++])) {
- if (isdigit(c)) result = result * 10 + c - '0';
- else break;
- }
- if (c == toc) return(result);
- else return(0);
-}
-
-char *lookup(t, k) struct table t[]; int k; {
-
- int i;
- for (i = 0; t[i].key != -1; i++) {
- if (t[i].key == k) return(t[i].msg);
- }
- return("BAD VALUE");
-}
-
-menu(table) char *table[]; {
-
- int i, tablesize, choice;
- char c;
- char storage[80];
- char *s = storage;
- println("");
- tablesize = 0;
- for (i = 0; *table[i] != '\0'; i++) {
- printf(" %d. %s\n", i, table[i]);
- tablesize++;
- }
- tablesize--;
-
- printf("\n Enter choice number (0 - %d): ", tablesize);
- for(;;) {
- inputline(s);
- choice = 0;
- while (c = *s++) choice = 10 * choice + c - '0';
- if (choice >= 0 && choice <= tablesize) {
- ed(2);
- return (choice);
- }
- printf(" Bad choice, try again: ");
- }
-}
-
-chrprint (s) char *s; {
-
- int i;
-
- printf(" ");
- sgr("7");
- printf(" ");
- for (i = 0; s[i] != '\0'; i++) {
- if (s[i] <= ' ' || s[i] == '\177')
- printf("<%d> ", s[i]);
- else printf("%c ", s[i]);
- }
- sgr("");
-}
diff --git a/usr.sbin/pcvt/vttest/vttest.1 b/usr.sbin/pcvt/vttest/vttest.1
deleted file mode 100644
index 31f73f5..0000000
--- a/usr.sbin/pcvt/vttest/vttest.1
+++ /dev/null
@@ -1,21 +0,0 @@
-.\" $FreeBSD$
-.\"
-.Dd January 16, 2001
-.Dt VTTEST 1
-.Os
-.Sh NAME
-.Nm vttest
-.Nd "test VT100-type terminal"
-.Sh SYNOPSIS
-.Nm
-.Sh DESCRIPTION
-The
-.Nm
-utility is a program designed to test the functionality of a
-.Tn VT100
-terminal
-(or emulator thereof).
-It tests both display (escape sequence handling) and keyboard.
-.Pp
-The program is menu\-driven and contains full on\-line operating
-instructions.
OpenPOWER on IntegriCloud