summaryrefslogtreecommitdiff
path: root/ncurses-5.3/tack/pad.c
diff options
context:
space:
mode:
Diffstat (limited to 'ncurses-5.3/tack/pad.c')
-rw-r--r--ncurses-5.3/tack/pad.c1957
1 files changed, 0 insertions, 1957 deletions
diff --git a/ncurses-5.3/tack/pad.c b/ncurses-5.3/tack/pad.c
deleted file mode 100644
index 32357be..0000000
--- a/ncurses-5.3/tack/pad.c
+++ /dev/null
@@ -1,1957 +0,0 @@
-/*
-** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
-**
-** This file is part of TACK.
-**
-** TACK is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2, or (at your option)
-** any later version.
-**
-** TACK is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with TACK; see the file COPYING. If not, write to
-** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-** Boston, MA 02111-1307, USA.
-*/
-
-#include <tack.h>
-
-MODULE_ID("$Id$")
-
-/* test the pad counts on the terminal */
-
-static void pad_standard(struct test_list *, int *, int *);
-static void init_xon_xoff(struct test_list *, int *, int *);
-static void init_cup(struct test_list *, int *, int *);
-static void pad_rmxon(struct test_list *, int *, int *);
-static void pad_home1(struct test_list *, int *, int *);
-static void pad_home2(struct test_list *, int *, int *);
-static void pad_clear(struct test_list *, int *, int *);
-static void pad_ech(struct test_list *, int *, int *);
-static void pad_el1(struct test_list *, int *, int *);
-static void pad_el(struct test_list *, int *, int *);
-static void pad_smdc(struct test_list *, int *, int *);
-static void pad_dch(struct test_list *, int *, int *);
-static void pad_dch1(struct test_list *, int *, int *);
-static void pad_smir(struct test_list *, int *, int *);
-static void pad_ich(struct test_list *, int *, int *);
-static void pad_ich1(struct test_list *, int *, int *);
-static void pad_xch1(struct test_list *, int *, int *);
-static void pad_rep(struct test_list *, int *, int *);
-static void pad_cup(struct test_list *, int *, int *);
-static void pad_hd(struct test_list *, int *, int *);
-static void pad_hu(struct test_list *, int *, int *);
-static void pad_rin(struct test_list *, int *, int *);
-static void pad_il(struct test_list *, int *, int *);
-static void pad_indn(struct test_list *, int *, int *);
-static void pad_dl(struct test_list *, int *, int *);
-static void pad_xl(struct test_list *, int *, int *);
-static void pad_scrc(struct test_list *, int *, int *);
-static void pad_csrind(struct test_list *, int *, int *);
-static void pad_sccsrrc(struct test_list *, int *, int *);
-static void pad_csr_nel(struct test_list *, int *, int *);
-static void pad_csr_cup(struct test_list *, int *, int *);
-static void pad_ht(struct test_list *, int *, int *);
-static void pad_smso(struct test_list *, int *, int *);
-static void pad_smacs(struct test_list *, int *, int *);
-static void pad_crash(struct test_list *, int *, int *);
-
-extern struct test_menu change_pad_menu;
-
-/*
- Any command found in this list, executed from a "Done" prompt
- will force the default action to repeat rather than next.
-*/
-const char *pad_repeat_test = {"ep-+<>"};
-
-struct test_list pad_test_list[] = {
- {0, 0, 0, 0, "e) edit terminfo", 0, &edit_menu},
- {0, 0, 0, 0, "p) change padding", 0, &change_pad_menu},
- {0, 0, 0, 0, "@) display statistics about the last test", dump_test_stats, 0},
- {0, 0, 0, 0, "c) clear screen", menu_clear_screen, 0},
- {0, 0, 0, 0, "i) send reset and init", menu_reset_init, 0},
- {0, 0, 0, 0, txt_longer_test_time, longer_test_time, 0},
- {0, 0, 0, 0, txt_shorter_test_time, shorter_test_time, 0},
- {0, 0, 0, 0, txt_longer_augment, longer_augment, 0},
- {0, 0, 0, 0, txt_shorter_augment, shorter_augment, 0},
- /***
- Phase 1: Test initialization and reset strings.
-
- (rs1) (rs2) (rs3) (is1) (is2) (is3) are very difficult to test.
- They have no defined output. To make matters worse, the cap
- builder could partition (rs1) (rs2) (rs3) by length, leaving the
- terminal in some unknown state between (rs1) and (rs2) or between
- (r2) and (rs3). Some reset strings clear the screen when done.
-
- We have no control over this. The only thing we can do for
- certain is to test the pad times by checking for overruns.
- ***/
- {MENU_NEXT, 3, "rs1", 0, 0, pad_standard, 0},
- {MENU_NEXT, 3, "rs2", 0, 0, pad_standard, 0},
- {MENU_NEXT, 3, "rs3", 0, 0, pad_standard, 0},
- {MENU_NEXT | MENU_INIT, 0, 0, 0, 0, init_xon_xoff, 0},
- {MENU_NEXT, 3, "is1", 0, 0, pad_standard, 0},
- {MENU_NEXT, 3, "is2", 0, 0, pad_standard, 0},
- {MENU_NEXT, 3, "is3", 0, 0, pad_standard, 0},
- {MENU_NEXT, 3, "rmxon", "smxon", 0, pad_rmxon, 0},
- {MENU_NEXT | MENU_INIT, 0, 0, 0, 0, init_cup, 0},
- /*
- Phase 2: Test home, screen clears and erases.
- */
- {MENU_NEXT, 0, "home", 0, 0, pad_home1, 0},
- {MENU_NEXT, 0, "home) (nel", 0, 0, pad_home2, 0},
- {MENU_NEXT | 1, 0, "clear", 0, 0, pad_clear, 0},
- {MENU_NEXT | MENU_LM1, 0, "ed", 0, 0, pad_clear, 0},
- {MENU_NEXT | MENU_80c, 0, "ech", 0, 0, pad_ech, 0},
- {MENU_NEXT | MENU_80c, 0, "el1", "cub1 nel", 0, pad_el1, 0},
- {MENU_NEXT | MENU_10c, 0, "el", "nel", 0, pad_el, 0},
- /*
- Phase 3: Character deletions and insertions
- */
- {MENU_NEXT, 0, "smdc) (rmdc", 0, 0, pad_smdc, 0},
- {MENU_NEXT | MENU_80c, 0, "dch", "smdc rmdc", 0, pad_dch, 0},
- {MENU_NEXT | MENU_80c, 0, "dch1", "smdc rmdc", 0, pad_dch1, 0},
- {MENU_NEXT, 0, "smir) (rmir", 0, 0, pad_smir, 0},
- {MENU_NEXT | MENU_90c, 0, "ich) (ip", "smir rmir", 0, pad_ich, 0},
- {MENU_NEXT | MENU_90c, 0, "ich1) (ip", "smir rmir", 0, pad_ich1, 0},
- {MENU_NEXT, 4, "ich1) (dch1", "smir rmir", 0, pad_xch1, 0},
- {MENU_NEXT | MENU_90c, 0, "rep", 0, 0, pad_rep, 0},
- /*
- Phase 4: Test cursor addressing pads.
- */
- {MENU_NEXT, 0, "cup", 0, 0, pad_cup, 0},
- /*
- Phase 5: Test scrolling and cursor save/restore.
- */
- {MENU_NEXT, 0, "hd", 0, 0, pad_hd, 0},
- {MENU_NEXT, 0, "hu", 0, 0, pad_hu, 0},
- {MENU_NEXT | MENU_LM1 | 1, 0, "rin", 0, 0, pad_rin, 0},
- {MENU_NEXT, 0, "ri", 0, 0, pad_rin, 0},
- {MENU_NEXT | MENU_LM1 | 1, 0, "il", 0, 0, pad_il, 0},
- {MENU_NEXT, 0, "il1", 0, 0, pad_il, 0},
- {MENU_NEXT | MENU_LM1 | 1, 0, "indn", 0, 0, pad_indn, 0},
- {MENU_NEXT, 0, "ind", 0, 0, pad_indn, 0},
- {MENU_NEXT | MENU_LM1 | 1, 0, "dl", 0, 0, pad_dl, 0},
- {MENU_NEXT, 0, "dl1", 0, 0, pad_dl, 0},
- {MENU_NEXT, 0, "il1) (dl1", 0, 0, pad_xl, 0},
- {MENU_NEXT, 0, "sc) (rc", 0, 0, pad_scrc, 0},
- {MENU_NEXT | MENU_50l, 0, "csr) (ind", 0, 0, pad_csrind, 0},
- {MENU_NEXT, 0, "sc) (csr) (rc", 0, 0, pad_sccsrrc, 0},
- {MENU_NEXT, 0, "csr) (nel", "sc rc", 0, pad_csr_nel, 0},
- {MENU_NEXT, 0, "csr) (cup", 0, 0, pad_csr_cup, 0},
- /*
- Phase 6: Test tabs.
- */
- {MENU_NEXT, 0, "ht", 0, 0, pad_ht, 0},
- /*
- Phase 7: Test character-set-switch pads.
- */
- {MENU_NEXT, 0, "smso) (rmso", 0, 0, pad_smso, 0},
- {MENU_NEXT, 0, "smacs) (rmacs", 0, 0, pad_smacs, 0},
- /*
- Phase 8: Tests for miscellaneous mode-switch pads.
- */
- {MENU_NEXT, 3, "flash", 0, 0, pad_standard, 0},
- {MENU_NEXT, 3, "smkx", 0, 0, pad_standard, 0},
- {MENU_NEXT, 3, "rmkx", 0, 0, pad_standard, 0},
- {MENU_NEXT, 3, "smm", 0, 0, pad_standard, 0},
- {MENU_NEXT, 3, "rmm", 0, 0, pad_standard, 0},
- /*
- Phase 9: Test crash-and-burn properties of unpadded (clear).
- */
- {0, 0, "clear", "xon", "k) run clear test with no padding", pad_crash, 0},
- {MENU_LAST, 0, 0, 0, 0, 0, 0}
-};
-
-extern int test_complete; /* counts number of tests completed */
-
-/* globals */
-int hzcc; /* horizontal character count */
-char letter; /* current character being displayed */
-int letter_number; /* points into letters[] */
-int augment, repeats; /* number of characters (or lines) effected */
-char letters[] = "AbCdefghiJklmNopQrStuVwXyZ";
-
-static char every_line[] = "This text should be on every line.";
-static char all_lines[] = "Each char on any line should be the same. ";
-static char above_line[] = "The above lines should be all Xs. ";
-static char no_visual[] = "This loop test has no visual failure indicator. ";
-
-/*
-** pad_standard(test_list, status, ch)
-**
-** Run a single cap pad test.
-*/
-static void
-pad_standard(
- struct test_list *t,
- int *state,
- int *ch)
-{
- const char *long_name;
- char *cap;
- int l = 2, i;
- char tbuf[128];
-
- if ((cap = get_string_cap_byname(t->caps_done, &long_name))) {
- sprintf(tbuf, "(%s) %s, start testing", t->caps_done,
- long_name);
- if (skip_pad_test(t, state, ch, tbuf)) {
- return;
- }
- i = 1;
- pad_test_startup(1);
- do {
- if (i >= columns) {
- page_loop();
- l++;
- i = 1;
- }
- tt_putp(cap);
- putchp(letter);
- i++;
- } while(still_testing());
- pad_test_shutdown(t, 0);
- if (l >= lines) {
- home_down();
- } else {
- put_crlf();
- }
- ptextln(no_visual);
- } else {
- CAP_NOT_FOUND;
- /* Note: get_string_cap_byname() always sets long_name */
- sprintf(temp, "(%s) %s, not present. ", t->caps_done,
- long_name);
- ptext(temp);
- }
- pad_done_message(t, state, ch);
-}
-
-/*
-** init_xon_xoff(test_list, status, ch)
-**
-** Initialize the xon_xoff values
-*/
-static void
-init_xon_xoff(
- struct test_list *t GCC_UNUSED,
- int *state GCC_UNUSED,
- int *ch GCC_UNUSED)
-{
- /* the reset strings may dink with the XON/XOFF modes */
- if (select_xon_xoff == 0 && exit_xon_mode) {
- tc_putp(exit_xon_mode);
- }
- if (select_xon_xoff == 1 && enter_xon_mode) {
- tc_putp(enter_xon_mode);
- }
-}
-
-/*
-** pad_rmxon(test_list, status, ch)
-**
-** Test (rmxon) exit XON/XOFF mode
-*/
-static void
-pad_rmxon(
- struct test_list *t,
- int *state,
- int *ch)
-{
- if (select_xon_xoff == 0 && exit_xon_mode) {
- pad_standard(t, state, ch);
- }
-}
-
-/*
-** init_cup(test_list, status, ch)
-**
-** Send the initialization strings for XON/XOFF and (smcup)
-** Stop pad testing if clear screen is missing.
-*/
-static void
-init_cup(
- struct test_list *t,
- int *state,
- int *ch)
-{
- init_xon_xoff(t, state, ch);
- if (enter_ca_mode) {
- tc_putp(enter_ca_mode);
- }
- if (!can_clear_screen) {
- ptext("(clear) clear screen not present,");
- ptext(" pad processing terminated. ");
- pad_done_message(t, state, ch);
- if (*ch == 0 || *ch == 'n' || *ch == 's' || *ch == 'r') {
- *ch = '?';
- }
- return;
- }
-}
-
-/*
-** pad_home1(test_list, status, ch)
-**
-** Test (home) when (am) is set.
-*/
-static void
-pad_home1(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int j, k;
-
- if (can_go_home && auto_right_margin) {
- /*
- truly brain damaged terminals will fail this test because
- they cannot accept data at full rate
- */
- if (skip_pad_test(t, state, ch, "(home) Home start testing")) {
- return;
- }
- pad_test_startup(1);
- do {
- go_home();
- for (j = 1; j < lines; j++) {
- for (k = 0; k < columns; k++) {
- if (k & 0xF) {
- put_this(letter);
- } else {
- put_this('.');
- }
- }
- SLOW_TERMINAL_EXIT;
- }
- NEXT_LETTER;
- } while(still_testing());
- pad_test_shutdown(t, 0);
- ptext("All the dots should line up. ");
- pad_done_message(t, state, ch);
- put_clear();
- }
-}
-
-/*
-** pad_home2(test_list, status, ch)
-**
-** Test (home) and (nel). (am) is reset.
-*/
-static void
-pad_home2(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int j, k;
-
- if (can_go_home) {
- if (skip_pad_test(t, state, ch,
- "(home) Home, (nel) newline start testing")) {
- return;
- }
- pad_test_startup(1);
- do {
- go_home();
- for (j = 1; j < lines; j++) {
- for (k = 2; k < columns; k++) {
- if (k & 0xF) {
- put_this(letter);
- } else {
- put_this('.');
- }
- }
- put_crlf(); /* this does the (nel) */
- SLOW_TERMINAL_EXIT;
- }
- NEXT_LETTER;
- } while(still_testing());
- pad_test_shutdown(t, 0);
- ptext("All the dots should line up. ");
- pad_done_message(t, state, ch);
- put_clear();
- }
-}
-
-/*
-** pad_clear(test_list, status, ch)
-**
-** Test (clear) and (ed)
-** run the clear screen tests (also clear-to-end-of-screen)
-**
-** 0) full page
-** 1) sparse page
-** 2) short lines
-** 3) one full line
-** 4) one short line
-*/
-static void
-pad_clear(
- struct test_list *t,
- int *state,
- int *ch)
-{
- const char *end_message = 0;
- const char *txt;
- int j, k, is_clear;
- int clear_select; /* select the test number */
-
- is_clear = t->flags & 1;
- clear_select = auto_right_margin ? 0 : 1;
- if (is_clear) {
- txt = "(clear) clear-screen start testing";
- } else {
- if (!clr_eos) {
- CAP_NOT_FOUND;
- ptext("(ed) erase-to-end-of-display, not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- txt = "(ed) erase-to-end-of-display start testing";
- }
- if (skip_pad_test(t, state, ch, txt)) {
- return;
- }
- if (enter_am_mode) {
- tc_putp(enter_am_mode);
- clear_select = 0;
- }
- for (; clear_select < 5; clear_select++) {
- if (augment > lines || is_clear || !cursor_address) {
- augment = lines;
- } else {
- if (augment <= 1) {
- augment = 2;
- }
- if (augment < lines) {
- put_clear();
- tt_putparm(cursor_address, 1,
- lines - augment - 1, 0);
- ptextln("This line should not be erased (ed)");
- }
- }
- repeats = augment;
- switch (clear_select) {
- case 0:
- end_message = "Clear full screen. ";
- break;
- case 1:
- end_message = "Clear sparse screen. ";
- if (cursor_down) {
- break;
- }
- clear_select++;
- /* FALLTHRU */
- case 2:
- end_message = "Clear one character per line. ";
- if (newline) {
- break;
- }
- clear_select++;
- /* FALLTHRU */
- case 3:
- end_message = "Clear one full line. ";
- break;
- case 4:
- end_message = "Clear single short line. ";
- break;
- }
- pad_test_startup(0);
- do {
- switch (clear_select) {
- case 0: /* full screen test */
- for (j = 1; j < repeats; j++) {
- for (k = 0; k < columns; k++) {
- if (k & 0xF) {
- put_this(letter);
- } else {
- put_this('.');
- }
- }
- SLOW_TERMINAL_EXIT;
- }
- break;
- case 1: /* sparse screen test */
- for (j = columns - repeats; j > 2; j--) {
- put_this(letter);
- }
- for (j = 2; j < repeats; j++) {
- tt_putp(cursor_down);
- put_this(letter);
- }
- break;
- case 2: /* short lines */
- for (j = 2; j < repeats; j++) {
- put_this(letter);
- tt_putp(newline);
- }
- put_this(letter);
- break;
- case 3: /* one full line */
- for (j = columns - 5; j > 1; j--) {
- put_this(letter);
- }
- break;
- case 4: /* one short line */
- put_str("Erase this!");
- break;
- }
- if (is_clear) {
- put_clear();
- } else {
- if (augment == lines) {
- go_home();
- } else {
- tt_putparm(cursor_address, 1,
- lines - repeats, 0);
- }
- tt_tputs(clr_eos, repeats);
- }
- NEXT_LETTER;
- } while(still_testing());
- pad_test_shutdown(t, 1);
- ptext(end_message);
-
- pad_done_message(t, state, ch);
-
- if (*ch != 0 && *ch != 'n') {
- return;
- }
- }
-}
-
-/*
-** pad_ech(test_list, status, ch)
-**
-** Test (ech) erase characters
-*/
-static void
-pad_ech(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i, j;
-
- if (!erase_chars) {
- CAP_NOT_FOUND;
- ptext("(ech) Erase-characters, not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(ech) Erase-characters start testing")) {
- return;
- }
- if (augment > columns - 2) {
- augment = columns - 2;
- }
- pad_test_startup(1);
- do {
- go_home();
- for (i = 2; i < lines; i++) {
- for (j = 0; j <= repeats; j++) {
- putchp(letter);
- }
- put_cr();
- tt_putparm(erase_chars, repeats, repeats, 0);
- put_crlf();
- SLOW_TERMINAL_EXIT;
- }
- for (i = 1; i <= repeats; i++) {
- putchp(' ');
- }
- putchp(letter);
- put_crlf();
- NEXT_LETTER;
- } while(still_testing());
- pad_test_shutdown(t, 0);
- ptext(all_lines);
- pad_done_message(t, state, ch);
- put_clear();
-}
-
-/*
-** pad_el1(test_list, status, ch)
-**
-** Test (el1) erase to start of line also (cub1) and (nel)
-*/
-static void
-pad_el1(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i, j;
-
- if (!clr_bol) {
- CAP_NOT_FOUND;
- ptext("(el1) Erase-to-beginning-of-line, not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(el1) Erase-to-beginning-of-line start testing")) {
- return;
- }
- if (augment > columns - 2) {
- augment = columns - 2;
- }
- pad_test_startup(1);
- do {
- go_home();
- for (i = 2; i < lines; i++) {
- for (j = 0; j <= repeats; j++) {
- putchp(letter);
- }
- tt_putp(cursor_left);
- tt_putp(cursor_left);
- tt_tputs(clr_bol, repeats);
- put_crlf();
- SLOW_TERMINAL_EXIT;
- }
- for (i = 1; i <= repeats; i++) {
- putchp(' ');
- }
- putchp(letter);
- put_crlf();
- NEXT_LETTER;
- } while(still_testing());
- pad_test_shutdown(t, 0);
- ptext(all_lines);
- pad_done_message(t, state, ch);
- put_clear();
-}
-
-/*
-** pad_el(test_list, status, ch)
-**
-** Test (el) clear to end of line also (nel)
-*/
-static void
-pad_el(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i, j;
-
- if (!clr_eol) {
- CAP_NOT_FOUND;
- ptext("(el) Clear-to-end-of-line, not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(el) Clear-to-end-of-line start testing")) {
- return;
- }
- hzcc = columns * 8 / 10; /* horizontal character count */
- if (augment > hzcc) {
- augment = hzcc;
- }
- pad_test_startup(1);
- do {
- go_home();
- for (i = 2; i < lines; i++) {
- for (j = -1; j < augment; j++) {
- putchp(letter);
- }
- put_cr();
- putchp(letter);
- tt_putp(clr_eol);
- put_crlf();
- SLOW_TERMINAL_EXIT;
- }
- putchp(letter);
- put_crlf();
- NEXT_LETTER;
- } while(still_testing());
- pad_test_shutdown(t, 0);
- ptext(all_lines);
- pad_done_message(t, state, ch);
- put_clear();
-}
-
-/*
-** pad_smdc(test_list, status, ch)
-**
-** Test (smdc) (rmdc) Delete mode
-*/
-static void
-pad_smdc(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i;
-
- if (!enter_delete_mode) {
- CAP_NOT_FOUND;
- ptext("(smdc) Enter-delete-mode");
- if (!exit_delete_mode) {
- ptext(", (rmdc) Exit-delete-mode");
- }
- ptext(", not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(smdc) (rmdc) Enter/Exit-delete-mode start testing")) {
- return;
- }
- pad_test_startup(1);
- do {
- page_loop();
- for (i = 1; i < columns; i++) {
- tt_putp(enter_delete_mode);
- tt_putp(exit_delete_mode);
- putchp(letter);
- }
- } while(still_testing());
- pad_test_shutdown(t, 0);
- home_down();
- ptext(no_visual);
- pad_done_message(t, state, ch);
- put_clear();
-}
-
-/*
-** pad_dch(test_list, status, ch)
-**
-** Test (smdc) (rmdc) Delete mode and (dch)
-*/
-static void
-pad_dch(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i, j;
-
- if (!parm_dch) {
- CAP_NOT_FOUND;
- ptext("(dch) Delete-characters, not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(dch) Delete-characters start testing")) {
- return;
- }
- hzcc = columns * 8 / 10; /* horizontal character count */
- if (augment > hzcc) {
- augment = hzcc;
- }
- pad_test_startup(1);
- do {
- go_home();
- for (i = 2; i < lines; i++) {
- for (j = 0; j <= repeats; j++) {
- putchp(letter);
- }
- put_cr();
- tt_putp(enter_delete_mode);
- tt_putparm(parm_dch, repeats, repeats, 0);
- tt_putp(exit_delete_mode);
- put_crlf();
- SLOW_TERMINAL_EXIT;
- }
- putchp(letter);
- put_crlf();
- NEXT_LETTER;
- } while(still_testing());
- pad_test_shutdown(t, 0);
- home_down();
- ptext(all_lines);
- pad_done_message(t, state, ch);
- put_clear();
-}
-
-/*
-** pad_dch1(test_list, status, ch)
-**
-** Test (smdc) (rmdc) Delete mode and (dch1)
-*/
-static void
-pad_dch1(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i, j;
-
- if (!delete_character) {
- if (parm_dch) {
- /* if the other one is defined then its OK */
- return;
- }
- CAP_NOT_FOUND;
- ptext("(dch1) Delete-character, not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(dch1) Delete-character start testing")) {
- return;
- }
- hzcc = columns * 8 / 10; /* horizontal character count */
- if (augment > hzcc) {
- augment = hzcc;
- }
- pad_test_startup(1);
- do {
- go_home();
- for (i = 2; i < lines; i++) {
- for (j = -1; j < augment; j++) {
- putchp(letter);
- }
- put_cr();
- tt_putp(enter_delete_mode);
- for (j = 0; j < augment; j++) {
- tt_putp(delete_character);
- }
- tt_putp(exit_delete_mode);
- put_crlf();
- SLOW_TERMINAL_EXIT;
- }
- putchp(letter);
- put_crlf();
- NEXT_LETTER;
- } while(still_testing());
- pad_test_shutdown(t, 0);
- ptext(all_lines);
- pad_done_message(t, state, ch);
- put_clear();
-}
-
-/*
-** pad_smir(test_list, status, ch)
-**
-** Test (smir) (rmir) Insert mode
-*/
-static void
-pad_smir(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i;
-
- if (!enter_insert_mode) {
- CAP_NOT_FOUND;
- ptext("(smir) Enter-insert-mode");
- if (!exit_insert_mode) {
- ptext(", (rmir) Exit-insert-mode");
- }
- ptext(", not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(smir) (rmir) Enter/Exit-insert-mode start testing")) {
- return;
- }
- pad_test_startup(1);
- do {
- page_loop();
- for (i = 1; i < columns; i++) {
- tt_putp(enter_insert_mode);
- tt_putp(exit_insert_mode);
- putchp(letter);
- }
- } while(still_testing());
- pad_test_shutdown(t, 0);
- home_down();
- ptext(no_visual);
- pad_done_message(t, state, ch);
- put_clear();
-}
-
-/*
-** pad_ich(test_list, status, ch)
-**
-** Test (smir) (rmir) Insert mode and (ich) and (ip)
-*/
-static void
-pad_ich(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i, j;
-
- if (!parm_ich) {
- CAP_NOT_FOUND;
- ptext("(ich) Insert-characters, not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(ich) Insert-characters, (ip) Insert-padding start testing")) {
- return;
- }
- j = columns * 9 / 10;
- if (augment > j) {
- augment = j;
- }
- pad_test_startup(1);
- do {
- go_home();
- for (i = 2; i < lines; i++) {
- putchp(letter);
- put_cr();
- tt_putp(enter_insert_mode);
- replace_mode = 0;
- tt_putparm(parm_ich, repeats, repeats, 0);
- tt_putp(exit_insert_mode);
- replace_mode = 1;
- put_crlf();
- SLOW_TERMINAL_EXIT;
- }
- for (i = 0; i < repeats; i++) {
- putchp(' ');
- }
- putchp(letter);
- NEXT_LETTER;
- put_crlf();
- } while(still_testing());
- pad_test_shutdown(t, 0);
- ptext(all_lines);
- pad_done_message(t, state, ch);
- tc_putp(exit_insert_mode);
-}
-
-/*
-** pad_ich1(test_list, status, ch)
-**
-** Test (smir) (rmir) Insert mode and (ich1) and (ip)
-*/
-static void
-pad_ich1(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i, j;
-
- if (!insert_character) {
- CAP_NOT_FOUND;
- ptext("(ich1) Insert-character, not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(ich1) Insert-character, (ip) Insert-padding start testing")) {
- return;
- }
- if (augment > columns - 2) {
- augment = columns - 2;
- }
- pad_test_startup(1);
- do {
- put_clear();
- for (i = 2; i < lines; i++) {
- putchp(letter);
- put_cr();
- tt_putp(enter_insert_mode);
- replace_mode = 0;
- if (!insert_padding && !insert_character) {
- /* only enter/exit is needed */
- for (j = 0; j < augment; j++) {
- putchp('.');
- }
- } else {
- for (j = 0; j < augment; j++) {
- tt_putp(insert_character);
- putchp('.');
- tt_putp(insert_padding);
- }
- }
- tt_putp(exit_insert_mode);
- replace_mode = 1;
- put_crlf();
- SLOW_TERMINAL_EXIT;
- }
- for (j = 0; j < augment; j++) {
- putchp('.');
- }
- putchp(letter);
- NEXT_LETTER;
- put_crlf();
- } while(still_testing());
- pad_test_shutdown(t, 0);
- ptext(all_lines);
- pad_done_message(t, state, ch);
- tc_putp(exit_insert_mode);
-}
-
-/*
-** pad_xch1(test_list, status, ch)
-**
-** Test (ich1) (ip) (dch1)
-*/
-static void
-pad_xch1(
- struct test_list *t,
- int *state,
- int *ch)
-{
- static char xch1[] =
- "This line should not be garbled. It should be left justified.";
-
- if (enter_insert_mode || exit_insert_mode ||
- enter_delete_mode || exit_delete_mode ||
- !insert_character || !delete_character) {
- /* this test is quietly ignored */
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(ich1) Insert-character, (dch1) Delete-character start testing")) {
- return;
- }
- put_crlf();
- ptext(xch1);
- put_cr();
- pad_test_startup(0);
- do {
- tt_putp(insert_character);
- tt_putp(delete_character);
- } while(still_testing());
- pad_test_shutdown(t, 1);
- ptextln(xch1);
- ptext("The preceding two lines should be the same. ");
- pad_done_message(t, state, ch);
-}
-
-/*
-** pad_rep(test_list, status, ch)
-**
-** Test (rep) repeat character
-*/
-static void
-pad_rep(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i, j;
-
- if (!repeat_char) {
- CAP_NOT_FOUND;
- ptext("(rep) Repeat-character, not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(rep) Repeat-character start testing")) {
- return;
- }
- if (augment > columns - 2) {
- augment = columns - 2;
- }
- if (augment < 2) {
- augment = 2;
- }
- pad_test_startup(1);
- do {
- go_home();
- for (i = 2; i < lines; i++) {
- tt_putparm(repeat_char, repeats, letter, repeats);
- put_crlf();
- }
- for (j = 0; j < repeats; j++) {
- putchp(letter);
- }
- put_crlf();
- NEXT_LETTER;
- } while(still_testing());
- pad_test_shutdown(t, 0);
- ptextln(all_lines);
- pad_done_message(t, state, ch);
-}
-
-/*
-** pad_cup(test_list, status, ch)
-**
-** Test (cup) Cursor address
-*/
-static void
-pad_cup(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i, j, l, r, c;
-
- if (!cursor_address) {
- CAP_NOT_FOUND;
- ptext("(cup) Cursor-address not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(cup) Cursor-address start testing")) {
- return;
- }
- put_clear();
- ptext("Each line should be filled with the same letter. There should");
- ptext(" be no gaps, or single letters scattered over the screen. ");
- if (char_count + 15 > columns) {
- put_crlf();
- }
- if (((lines - line_count) & 1) == 0) {
- /* this removes the gap in the middle of the test when the
- number of lines is odd. */
- put_crlf();
- }
- r = line_count;
- c = char_count;
- l = (columns - 4) >> 1;
- pad_test_startup(0);
- do {
- for (i = 1; i + i + r < lines; i++) {
- for (j = 0; j <= l; j++) {
- tt_putparm(cursor_address, 1, r + i, j);
- putchp(letter);
- tt_putparm(cursor_address, 1, r + i, l + l + 1 - j);
- putchp(letter);
- tt_putparm(cursor_address, 1, lines - i, j);
- putchp(letter);
- tt_putparm(cursor_address, 1, lines - i, l + l + 1 - j);
- putchp(letter);
- }
- SLOW_TERMINAL_EXIT;
- }
- NEXT_LETTER;
- } while(still_testing());
- pad_test_shutdown(t, 0);
- tt_putparm(cursor_address, 1, line_count = r, char_count = c);
- pad_done_message(t, state, ch);
- put_clear();
-}
-
-/*
-** pad_hd(test_list, status, ch)
-**
-** Test (hd) Half down
-*/
-static void
-pad_hd(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i, j, k;
-
- if (!down_half_line) {
- CAP_NOT_FOUND;
- ptext("(hd) Half-line-down not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(hd) Half-line-down start testing")) {
- return;
- }
- pad_test_startup(1);
- do {
- for (i = 1; i < columns; i += 2) {
- for (j = 1; j < i; ++j) {
- putchp(' ');
- }
- tt_putp(down_half_line);
- for (k = lines + lines; k > 4; k--) {
- if (j++ >= columns) {
- break;
- }
- tt_putp(down_half_line);
- putchp(letter);
- }
- go_home();
- SLOW_TERMINAL_EXIT;
- }
- NEXT_LETTER;
- } while(still_testing());
- pad_test_shutdown(t, 0);
- pad_done_message(t, state, ch);
- put_clear();
-}
-
-/*
-** pad_hu(test_list, status, ch)
-**
-** Test (hu) Half line up
-*/
-static void
-pad_hu(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i, j, k;
-
- if (!up_half_line) {
- CAP_NOT_FOUND;
- ptext("(hu) Half-line-up not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(hu) Half-line-up start testing")) {
- return;
- }
- pad_test_startup(1);
- do {
- for (i = 1; i < columns; i += 2) {
- home_down();
- for (j = 1; j < i; ++j) {
- putchp(' ');
- }
- tt_putp(up_half_line);
- for (k = lines + lines; k > 4; k--) {
- if (j++ >= columns) {
- break;
- }
- tt_putp(up_half_line);
- putchp(letter);
- }
- SLOW_TERMINAL_EXIT;
- }
- go_home();
- NEXT_LETTER;
- } while(still_testing());
- pad_test_shutdown(t, 0);
- pad_done_message(t, state, ch);
- put_clear();
-}
-
-/*
-** pad_rin(test_list, status, ch)
-**
-** Test (rin) and (ri) Reverse index
-*/
-static void
-pad_rin(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i;
- const char *start_message;
-
- if (t->flags & 1) {
- /* rin */
- if (!parm_rindex) {
- CAP_NOT_FOUND;
- ptext("(rin) Scroll-reverse-n-lines not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- start_message = "(rin) Scroll-reverse-n-lines start testing";
- } else {
- /* ri */
- if (!scroll_reverse) {
- CAP_NOT_FOUND;
- ptext("(ri) Scroll-reverse not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- start_message = "(ri) Scroll-reverse start testing";
- augment = 1;
- }
- if (skip_pad_test(t, state, ch, start_message)) {
- return;
- }
- pad_test_startup(1);
- do {
- sprintf(temp, "%d\r", test_complete);
- put_str(temp);
- if (scroll_reverse && augment == 1) {
- tt_putp(scroll_reverse);
- } else {
- tt_putparm(parm_rindex, repeats, repeats, 0);
- }
- } while(still_testing());
- put_str("This line should be on the bottom.\r");
- if (scroll_reverse && augment == 1) {
- for (i = 1; i < lines; i++) {
- tt_putp(scroll_reverse);
- }
- } else {
- tt_putparm(parm_rindex, lines - 1, lines - 1, 0);
- }
- putln("The screen should have text on the bottom line.");
- sprintf(temp, "Scroll reverse %d line%s. ", augment,
- augment == 1 ? "" : "s");
- put_str(temp);
- pad_test_shutdown(t, 0);
- pad_done_message(t, state, ch);
- put_clear();
-}
-
-/*
-** pad_il(test_list, status, ch)
-**
-** Test (il) and (il1) Insert line
-*/
-static void
-pad_il(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i;
- const char *start_message;
-
- if (t->flags & 1) {
- /* il */
- if (!parm_insert_line) {
- CAP_NOT_FOUND;
- ptext("(il) Insert-lines not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- start_message = "(il) Insert-lines start testing";
- } else {
- /* il1 */
- if (!insert_line) {
- CAP_NOT_FOUND;
- ptext("(il1) Insert-line not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- start_message = "(il1) Insert-line start testing";
- augment = 1;
- }
- if (skip_pad_test(t, state, ch, start_message)) {
- return;
- }
- pad_test_startup(1);
- do {
- sprintf(temp, "%d\r", test_complete);
- put_str(temp);
- if (insert_line && repeats == 1) {
- tt_putp(insert_line);
- } else {
- tt_putparm(parm_insert_line, repeats, repeats, 0);
- }
- } while(still_testing());
- put_str("This line should be on the bottom.\r");
- if (scroll_reverse && augment == 1) {
- for (i = 1; i < lines; i++) {
- tt_putp(insert_line);
- }
- } else {
- tt_putparm(parm_insert_line, lines - 1, lines - 1, 0);
- }
- putln("The screen should have text on the bottom line.");
- sprintf(temp, "Insert %d line%s. ", augment,
- augment == 1 ? "" : "s");
- put_str(temp);
- pad_test_shutdown(t, 0);
- pad_done_message(t, state, ch);
- put_clear();
-}
-
-/*
-** pad_indn(test_list, status, ch)
-**
-** Test (indn) and (ind) Scroll forward
-*/
-static void
-pad_indn(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i;
- const char *start_message;
-
- if (t->flags & 1) {
- /* indn */
- if (!parm_index) {
- CAP_NOT_FOUND;
- ptext("(indn) Scroll-forward-n-lines not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- start_message = "(indn) Scroll-forward-n-lines start testing";
- } else {
- /* ind */
- if (!scroll_forward && over_strike) {
- CAP_NOT_FOUND;
- ptext("(ind) Scroll-forward not tested on overstrike terminals. ");
- pad_done_message(t, state, ch);
- return;
- }
- start_message = "(ind) Scroll-forward start testing";
- augment = 1;
- }
- if (skip_pad_test(t, state, ch, start_message)) {
- return;
- }
- pad_test_startup(1);
- /* go to the bottom of the screen */
- home_down();
- do {
- sprintf(temp, "%d\r", test_complete);
- put_str(temp);
- if (augment > 1) {
- tt_putparm(parm_index, repeats, repeats, 0);
- } else {
- put_ind();
- }
- } while(still_testing());
- put_str("This line should be on the top.\r");
- if (augment == 1) {
- for (i = 1; i < lines; i++) {
- put_ind();
- }
- } else {
- tt_putparm(parm_index, lines - 1, lines - 1, 0);
- }
- go_home();
- sprintf(temp, "\nScroll forward %d line%s. ", augment,
- augment == 1 ? "" : "s");
- put_str(temp);
- pad_test_shutdown(t, 0);
- pad_done_message(t, state, ch);
-}
-
-/*
-** pad_dl(test_list, status, ch)
-**
-** Test (dl) and (dl1) Delete lines
-*/
-static void
-pad_dl(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i = 0;
- const char *start_message;
-
- if (t->flags & 1) {
- /* dl */
- if (!parm_delete_line) {
- CAP_NOT_FOUND;
- ptext("(dl) Delete-lines not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- start_message = "(dl) Delete-lines start testing";
- } else {
- /* dl1 */
- if (!delete_line) {
- CAP_NOT_FOUND;
- ptext("(dl1) Delete-line not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- start_message = "(dl1) Delete-line start testing";
- augment = 1;
- }
- if (skip_pad_test(t, state, ch, start_message)) {
- return;
- }
- pad_test_startup(1);
- do {
- sprintf(temp, "%d\r", test_complete);
- if ((i & 0x7f) == 0 && augment < lines - 1) {
- go_home();
- putln(temp);
- }
- put_str(temp);
- if (repeats || !delete_line) {
- tt_putparm(parm_delete_line, repeats, repeats, 0);
- } else {
- tt_putp(delete_line);
- }
- } while(still_testing());
- home_down();
- put_str("This line should be on the top.");
- go_home();
- if (repeats || !delete_line) {
- tt_putparm(parm_delete_line, lines - 1, lines - 1, 0);
- } else {
- for (i = 1; i < lines; i++) {
- tt_putp(delete_line);
- }
- }
- sprintf(temp, "\nDelete %d line%s. ", augment,
- augment == 1 ? "" : "s");
- put_str(temp);
- pad_test_shutdown(t, 0);
- pad_done_message(t, state, ch);
-}
-
-/*
-** pad_xl(test_list, status, ch)
-**
-** Test (il1) Insert and (dl1) Delete lines
-*/
-static void
-pad_xl(
- struct test_list *t,
- int *state,
- int *ch)
-{
- if (!insert_line && !delete_line) {
- /* quietly skip this test */
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(il1) Insert-line, (dl1) Delete-line start testing")) {
- return;
- }
- put_clear();
- putln("\rThis text is written on the first line.");
- ptext("This sentence begins on the second line. As this");
- ptext(" test runs the bottom part of this paragraph will");
- ptext(" jump up and down. Don't worry, that's normal. When");
- ptext(" the jumping stops, the entire paragraph should");
- ptext(" still be on the screen and in the same place as when");
- ptext(" the test started. If this paragraph has scrolled");
- ptext(" off the top or bottom of the screen then the test");
- ptext(" has failed. Scrolling off the top of the screen");
- ptext(" usually means that the delete line capability is");
- ptext(" working better than the insert line capability. If");
- ptext(" the text scrolls off the bottom then delete line may");
- ptext(" be broken. If parts of the text are missing then");
- ptext(" you should get professional help.");
- put_crlf();
- go_home();
- put_newlines(2);
- pad_test_startup(0);
- do {
- tt_putp(insert_line);
- put_cr();
- tt_putp(delete_line);
- } while(still_testing());
- pad_test_shutdown(t, 0);
- home_down();
- ptext("The top of the screen should have a paragraph of text. ");
- pad_done_message(t, state, ch);
-}
-
-/*
-** pad_scrc(test_list, status, ch)
-**
-** Test (sc) (rc) Save/restore cursor
-*/
-static void
-pad_scrc(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i;
-
- if (!save_cursor || !restore_cursor) {
- CAP_NOT_FOUND;
- if (save_cursor) {
- ptext("(rc) Restore-cursor");
- } else
- if (restore_cursor) {
- ptext("(sc) Save-cursor");
- } else {
- ptext("(sc) Save-cursor, (rc) Restore-cursor");
- }
- ptext(" not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(sc) (rc) Save/Restore-cursor start testing")) {
- return;
- }
- pad_test_startup(1);
- do {
- page_loop();
- for (i = 1; i < columns; i++) {
- tt_putp(save_cursor);
- putchp(letter);
- tt_putp(restore_cursor);
- putchp('X');
- }
- } while(still_testing());
- pad_test_shutdown(t, 0);
- home_down();
- ptext(above_line);
- pad_done_message(t, state, ch);
-}
-
-/*
-** pad_csrind(test_list, status, ch)
-**
-** Test (csr) and (ind) Change scroll region and index.
-*/
-static void
-pad_csrind(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i;
-
- if (!change_scroll_region) {
- CAP_NOT_FOUND;
- ptext("(csr) Change-scroll-region not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(csr) Save/Restore-cursor, (ind) index start testing")) {
- return;
- }
- if (augment < 2) {
- augment = 2;
- }
- if (augment > lines - 1) {
- augment = lines - 1;
- }
- put_clear();
- ptext("This text is on the top line.");
- tt_putparm(change_scroll_region, 1, lines - augment, lines - 1);
- /* go to the bottom of the screen */
- home_down();
- pad_test_startup(0);
- do {
- sprintf(temp, "%d\r", test_complete);
- put_str(temp);
- put_ind();
- } while(still_testing());
- ptextln("(csr) is broken.");
- for (i = augment; i > 1; i--) {
- put_ind();
- }
- pad_test_shutdown(t, 0);
- ptext("All but top and bottom lines should be blank. ");
- pad_done_message(t, state, ch);
- tt_putparm(change_scroll_region, 1, 0, lines - 1);
- put_clear();
-}
-
-/*
-** pad_sccsrrc(test_list, status, ch)
-**
-** Test (sc) (csr) and (rc) Save/Change/Restore scroll region
-*/
-static void
-pad_sccsrrc(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i;
-
- if (!save_cursor || !change_scroll_region || !restore_cursor) {
- /* quietly ignore this test */
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(sc) (csr) (rc) Save/Change/Restore-cursor, start testing")) {
- return;
- }
- pad_test_startup(1);
- do {
- page_loop();
- for (i = 1; i < columns; i++) {
- tt_putp(save_cursor);
- putchp(letter);
- tt_putparm(change_scroll_region, 1, 0, lines - 1);
- tt_putp(restore_cursor);
- putchp('X');
- }
- } while(still_testing());
- pad_test_shutdown(t, 0);
- home_down();
- ptext(above_line);
- pad_done_message(t, state, ch);
- tt_putparm(change_scroll_region, 1, 0, lines - 1);
-}
-
-/*
-** pad_csr_nel(test_list, status, ch)
-**
-** Test (sc) (csr) (nel) and (rc) Save/Change/Restore scroll region
-*/
-static void
-pad_csr_nel(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i, j;
-
- if (!save_cursor || !change_scroll_region || !restore_cursor) {
- /* quietly ignore this test */
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(csr) Change-scroll-region, (nel) newline start testing")) {
- return;
- }
- pad_test_startup(1);
- do {
- for (i = 0; i < lines; i++) {
- for (j = lines - i; j > 0; j--) {
- put_crlf();
- }
- tt_putp(save_cursor);
- tt_putparm(change_scroll_region, 1, i, lines - 1);
- tt_putp(restore_cursor);
- put_str(every_line);
- }
- tt_putp(save_cursor);
- tt_putparm(change_scroll_region, 1, 0, lines - 1);
- tt_putp(restore_cursor);
- } while(still_testing());
- pad_test_shutdown(t, 0);
- put_str(" ");
- pad_done_message(t, state, ch);
- tt_putparm(change_scroll_region, 1, 0, lines - 1);
-}
-
-/*
-** pad_csr_cup(test_list, status, ch)
-**
-** Test (csr) (cup) Change scroll region and cursor address
-*/
-static void
-pad_csr_cup(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i, j;
-
- if (!change_scroll_region || !cursor_address) {
- /* quietly ignore this test */
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(csr) Change-scroll-region, (cup) cursor-address start testing")) {
- return;
- }
- pad_test_startup(1);
- do {
- for (i = 0; i < lines; i++) {
- for (j = lines - i; j > 0; j--) {
- put_crlf();
- }
- tt_putparm(change_scroll_region, 1, i, lines - 1);
- tt_putparm(cursor_address, 1, lines - 1, 0);
- put_str(every_line);
- }
- tt_putparm(change_scroll_region, 1, 0, lines - 1);
- tt_putparm(cursor_address, 1, lines - 1, strlen(every_line));
- } while(still_testing());
- pad_test_shutdown(t, 0);
- put_str(" ");
- pad_done_message(t, state, ch);
- tt_putparm(change_scroll_region, 1, 0, lines - 1);
-}
-
-/*
-** pad_ht(test_list, status, ch)
-**
-** Test (ht) Tabs
-*/
-static void
-pad_ht(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i, j;
-
- if (!set_tab && init_tabs <= 0) {
- CAP_NOT_FOUND;
- ptext("(ht) Tab not tested. (hts) Set-tabs and (it) initial-tabs not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch, "(ht) Tab start testing")) {
- return;
- }
- pad_test_startup(1);
- do {
- /*
- it is not always possible to test tabs with caps
- that do not already have padding. The following
- test uses a mixed bag of tests in order to avoid
- this problem. Note: I do not scroll
- */
- if (auto_right_margin && can_go_home)
- for (i = 1, go_home(); i < lines - 2; i++) {
- for (j = 8; j < columns; j += 8) {
- putchp('\t');
- }
- put_str("A ");
- }
- if (cursor_down && can_go_home)
- for (i = 1, go_home(); i < lines - 2; i++) {
- for (j = 8; j < columns; j += 8) {
- putchp('\t');
- }
- put_str("D\r");
- tt_putp(cursor_down);
- }
- if (cursor_address)
- for (i = 1; i < lines - 2; i++) {
- tt_putparm(cursor_address, 1, i - 1, 0);
- for (j = 8; j < columns; j += 8) {
- putchp('\t');
- }
- put_str("C");
- }
- go_home();
- for (i = 1; i < lines - 2; i++) {
- for (j = 8; j < columns; j += 8) {
- putchp('\t');
- }
- putln("N");
- }
- } while(still_testing());
- pad_test_shutdown(t, 0);
- ptextln("Letters on the screen other than Ns at the right margin indicate failure.");
- ptext("A-(am) D-(cud1) C-(cup) N-(nel) ");
- pad_done_message(t, state, ch);
-}
-
-/*
-** pad_smso(test_list, status, ch)
-**
-** Test (smso) (rmso) Enter/exit mode
-*/
-static void
-pad_smso(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i, j;
-
- if (!enter_standout_mode || !exit_standout_mode) {
- CAP_NOT_FOUND;
- ptext("(smso) (rmso) Enter/Exit-standout-mode not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(smso) (rmso) Enter/Exit-standout-mode start testing")) {
- return;
- }
- /*
- In terminals that emulate non-hidden attributes with hidden
- attributes, the amount of time that it takes to fill the screen
- with an attribute is nontrivial. The following test is designed to
- catch those delays
- */
- pad_test_startup(1);
- do {
- page_loop();
- j = magic_cookie_glitch > 0 ? magic_cookie_glitch : 0;
- for (i = 2 + j + j; i < columns;) {
- put_mode(enter_standout_mode);
- i += j + j + 2;
- putchp('X');
- put_mode(exit_standout_mode);
- putchp('X');
- }
- } while(still_testing());
- pad_test_shutdown(t, 0);
- home_down();
- ptext(above_line);
- pad_done_message(t, state, ch);
- put_mode(exit_standout_mode);
-}
-
-/*
-** pad_smacs(test_list, status, ch)
-**
-** Test (smacs) (rmacs) Enter/exit altcharset mode
-*/
-static void
-pad_smacs(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int i, j;
-
- /* test enter even if exit is missing */
- if (!enter_alt_charset_mode) {
- CAP_NOT_FOUND;
- ptext("(smacs) Enter-altcharset-mode not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- if (skip_pad_test(t, state, ch,
- "(smacs) (rmacs) Enter/Exit-altcharset-mode start testing")) {
- return;
- }
- pad_test_startup(1);
- do {
- page_loop();
- j = magic_cookie_glitch > 0 ? magic_cookie_glitch : 0;
- for (i = 2 + j + j; i < columns;) {
- put_mode(enter_alt_charset_mode);
- i += j + j + 2;
- putchp(letter);
- put_mode(exit_alt_charset_mode);
- putchp(letter);
- }
- } while(still_testing());
- pad_test_shutdown(t, 0);
- home_down();
- ptext("Every other character is from the alternate character set. ");
- pad_done_message(t, state, ch);
- put_mode(exit_alt_charset_mode);
-}
-
-/*
-** pad_crash(test_list, status, ch)
-**
-** Test (clear) without padding
-*/
-static void
-pad_crash(
- struct test_list *t,
- int *state,
- int *ch)
-{
- int save_xon_xoff;
-
- if (!clear_screen) {
- ptext("(clear) Clear-screen not present. ");
- pad_done_message(t, state, ch);
- return;
- }
- ptext("If you would like to see if the terminal will really lock up.");
- ptextln(" I will send the clear screen sequence without the pads.");
- if (skip_pad_test(t, state, ch,
- "(clear) Clear-screen start crash testing")) {
- return;
- }
- save_xon_xoff = xon_xoff;
- xon_xoff = 1;
- pad_test_startup(0);
- do {
- put_str("Erase this!");
- tt_putp(clear_screen);
- } while(still_testing());
- xon_xoff = save_xon_xoff;
- pad_test_shutdown(t, 1);
- pad_done_message(t, state, ch);
-}