1 | /*
|
---|
2 | ** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
|
---|
3 | **
|
---|
4 | ** This file is part of TACK.
|
---|
5 | **
|
---|
6 | ** TACK is free software; you can redistribute it and/or modify
|
---|
7 | ** it under the terms of the GNU General Public License as published by
|
---|
8 | ** the Free Software Foundation; either version 2, or (at your option)
|
---|
9 | ** any later version.
|
---|
10 | **
|
---|
11 | ** TACK is distributed in the hope that it will be useful,
|
---|
12 | ** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
13 | ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
14 | ** GNU General Public License for more details.
|
---|
15 | **
|
---|
16 | ** You should have received a copy of the GNU General Public License
|
---|
17 | ** along with TACK; see the file COPYING. If not, write to
|
---|
18 | ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
---|
19 | ** Boston, MA 02110-1301, USA
|
---|
20 | */
|
---|
21 |
|
---|
22 | #include <tack.h>
|
---|
23 |
|
---|
24 | MODULE_ID("$Id: modes.c,v 1.2 2005/09/17 19:49:16 tom Exp $")
|
---|
25 |
|
---|
26 | /*
|
---|
27 | * Tests boolean flags and terminal modes.
|
---|
28 | */
|
---|
29 | static void subtest_os(struct test_list *, int *, int *);
|
---|
30 | static void subtest_rmam(struct test_list *, int *, int *);
|
---|
31 | static void subtest_smam(struct test_list *, int *, int *);
|
---|
32 | static void subtest_am(struct test_list *, int *, int *);
|
---|
33 | static void subtest_ul(struct test_list *, int *, int *);
|
---|
34 | static void subtest_uc(struct test_list *, int *, int *);
|
---|
35 | static void subtest_bw(struct test_list *, int *, int *);
|
---|
36 | static void subtest_xenl(struct test_list *, int *, int *);
|
---|
37 | static void subtest_eo(struct test_list *, int *, int *);
|
---|
38 | static void subtest_xmc(struct test_list *, int *, int *);
|
---|
39 | static void subtest_xhp(struct test_list *, int *, int *);
|
---|
40 | static void subtest_mir(struct test_list *, int *, int *);
|
---|
41 | static void subtest_msgr(struct test_list *, int *, int *);
|
---|
42 | static void subtest_tbc(struct test_list *, int *, int *);
|
---|
43 | static void subtest_xt(struct test_list *, int *, int *);
|
---|
44 | static void subtest_hts(struct test_list *, int *, int *);
|
---|
45 | static void subtest_cbt(struct test_list *, int *, int *);
|
---|
46 | static void subtest_in(struct test_list *, int *, int *);
|
---|
47 | static void subtest_dadb(struct test_list *, int *, int *);
|
---|
48 |
|
---|
49 | struct test_list mode_test_list[] = {
|
---|
50 | {0, 0, 0, 0, "e) edit terminfo", 0, &edit_menu},
|
---|
51 | {MENU_NEXT, 3, "os", 0, 0, subtest_os, 0},
|
---|
52 | {MENU_NEXT, 1, "rmam", 0, 0, subtest_rmam, 0},
|
---|
53 | {MENU_NEXT, 1, "smam", 0, 0, subtest_smam, 0},
|
---|
54 | {MENU_NEXT, 1, "am", 0, 0, subtest_am, 0},
|
---|
55 | {MENU_NEXT, 3, "ul", 0, 0, subtest_ul, 0},
|
---|
56 | {MENU_NEXT, 3, "uc", 0, 0, subtest_uc, 0},
|
---|
57 | {MENU_NEXT, 3, "bw", 0, 0, subtest_bw, 0},
|
---|
58 | {MENU_NEXT, 4, "xenl", 0, 0, subtest_xenl, 0},
|
---|
59 | {MENU_NEXT, 3, "eo", 0, 0, subtest_eo, 0},
|
---|
60 | {MENU_NEXT, 3, "xmc", 0, 0, subtest_xmc, 0},
|
---|
61 | {MENU_NEXT, 3, "xhp", 0, 0, subtest_xhp, 0},
|
---|
62 | {MENU_NEXT, 6, "mir", 0, 0, subtest_mir, 0},
|
---|
63 | {MENU_NEXT, 6, "msgr", 0, 0, subtest_msgr, 0},
|
---|
64 | {MENU_NEXT | MENU_CLEAR, 0, "tbc", "it", 0, subtest_tbc, 0},
|
---|
65 | {MENU_NEXT | MENU_CLEAR, 0, "hts", "it", 0, subtest_hts, 0},
|
---|
66 | {MENU_NEXT, 4, "xt", "it", 0, subtest_xt, 0},
|
---|
67 | {MENU_NEXT, 1, "cbt", "it", 0, subtest_cbt, 0},
|
---|
68 | {MENU_NEXT, 6, "in", 0, 0, subtest_in, 0},
|
---|
69 | {MENU_NEXT, 1, "da) (db", 0, 0, subtest_dadb, 0},
|
---|
70 | {MENU_LAST, 0, 0, 0, 0, 0, 0}
|
---|
71 | };
|
---|
72 |
|
---|
73 | /*
|
---|
74 | ** subtest_os(test_list, status, ch)
|
---|
75 | **
|
---|
76 | ** test over strike mode (os)
|
---|
77 | */
|
---|
78 | static void
|
---|
79 | subtest_os(
|
---|
80 | struct test_list *t,
|
---|
81 | int *state,
|
---|
82 | int *ch)
|
---|
83 | {
|
---|
84 | ptext("(os) should be true, not false.");
|
---|
85 | put_cr();
|
---|
86 | ptextln("(os) should be false.");
|
---|
87 | sprintf(temp, "(os) over-strike is %s in the data base. ",
|
---|
88 | over_strike ? "true" : "false");
|
---|
89 | ptext(temp);
|
---|
90 | generic_done_message(t, state, ch);
|
---|
91 | }
|
---|
92 |
|
---|
93 | /*
|
---|
94 | ** subtest_rmam(test_list, status, ch)
|
---|
95 | **
|
---|
96 | ** test exit automatic margins mode (rmam)
|
---|
97 | */
|
---|
98 | static void
|
---|
99 | subtest_rmam(
|
---|
100 | struct test_list *t,
|
---|
101 | int *state,
|
---|
102 | int *ch)
|
---|
103 | {
|
---|
104 | int j;
|
---|
105 |
|
---|
106 | if (!exit_am_mode) {
|
---|
107 | ptext("(rmam) not present. ");
|
---|
108 | } else
|
---|
109 | if (!can_go_home) {
|
---|
110 | ptext("(rmam) not tested, no way to home cursor. ");
|
---|
111 | } else
|
---|
112 | if (over_strike) {
|
---|
113 | put_clear();
|
---|
114 | go_home();
|
---|
115 | tc_putp(exit_am_mode);
|
---|
116 | ptext("\n(rmam) will reset (am)");
|
---|
117 | go_home();
|
---|
118 | for (j = 0; j < columns; j++)
|
---|
119 | put_this(' ');
|
---|
120 | ptext("(rmam) will not reset (am)");
|
---|
121 | go_home();
|
---|
122 | put_newlines(2);
|
---|
123 | } else {
|
---|
124 | put_clear();
|
---|
125 | go_home();
|
---|
126 | tc_putp(exit_am_mode);
|
---|
127 | ptext("\n(rmam) will reset (am)");
|
---|
128 | go_home();
|
---|
129 | for (j = 0; j < columns; j++)
|
---|
130 | put_this(' ');
|
---|
131 | ptext("(rmam) will not reset (am) ");
|
---|
132 | go_home();
|
---|
133 | put_str(" ");
|
---|
134 | go_home();
|
---|
135 | put_newlines(2);
|
---|
136 | }
|
---|
137 | ptext("Exit-automatic-margins ");
|
---|
138 | generic_done_message(t, state, ch);
|
---|
139 | }
|
---|
140 |
|
---|
141 | /*
|
---|
142 | ** subtest_smam(test_list, status, ch)
|
---|
143 | **
|
---|
144 | ** test enter automatic margins mode (smam)
|
---|
145 | */
|
---|
146 | static void
|
---|
147 | subtest_smam(
|
---|
148 | struct test_list *t,
|
---|
149 | int *state,
|
---|
150 | int *ch)
|
---|
151 | {
|
---|
152 | int i, j;
|
---|
153 |
|
---|
154 | if (!enter_am_mode) {
|
---|
155 | ptext("(smam) not present. ");
|
---|
156 | } else
|
---|
157 | if (!can_go_home) {
|
---|
158 | ptext("(smam) not tested, no way to home cursor. ");
|
---|
159 | } else
|
---|
160 | if (over_strike) {
|
---|
161 | put_clear();
|
---|
162 | go_home();
|
---|
163 | tc_putp(enter_am_mode);
|
---|
164 | ptext("\n(smam) will ");
|
---|
165 | i = char_count;
|
---|
166 | ptext("not set (am)");
|
---|
167 | go_home();
|
---|
168 | for (j = -i; j < columns; j++)
|
---|
169 | put_this(' ');
|
---|
170 | put_str("@@@");
|
---|
171 | put_newlines(2);
|
---|
172 | } else {
|
---|
173 | put_clear();
|
---|
174 | go_home();
|
---|
175 | tc_putp(enter_am_mode);
|
---|
176 | ptext("\n(smam) will not set (am)");
|
---|
177 | go_home();
|
---|
178 | for (j = 0; j < columns; j++)
|
---|
179 | put_this(' ');
|
---|
180 | ptext("(smam) will set (am) ");
|
---|
181 | go_home();
|
---|
182 | put_str(" ");
|
---|
183 | put_newlines(2);
|
---|
184 | }
|
---|
185 | ptext("Enter-automatic-margins ");
|
---|
186 | generic_done_message(t, state, ch);
|
---|
187 | }
|
---|
188 |
|
---|
189 | /*
|
---|
190 | ** subtest_am(test_list, status, ch)
|
---|
191 | **
|
---|
192 | ** test automatic margins (am)
|
---|
193 | */
|
---|
194 | static void
|
---|
195 | subtest_am(
|
---|
196 | struct test_list *t,
|
---|
197 | int *state,
|
---|
198 | int *ch)
|
---|
199 | {
|
---|
200 | int i, j;
|
---|
201 |
|
---|
202 | if (!can_go_home) {
|
---|
203 | ptextln("(am) not tested, no way to home cursor. ");
|
---|
204 | } else
|
---|
205 | if (over_strike) {
|
---|
206 | put_clear();
|
---|
207 | go_home();
|
---|
208 | ptext("\n(am) should ");
|
---|
209 | i = char_count;
|
---|
210 | ptext("not be set");
|
---|
211 | go_home();
|
---|
212 | for (j = -i; j < columns; j++)
|
---|
213 | put_this(' ');
|
---|
214 | put_str("@@@");
|
---|
215 | go_home();
|
---|
216 | put_newlines(2);
|
---|
217 | sprintf(temp, "(am) is %s in the data base",
|
---|
218 | auto_right_margin ? "true" : "false");
|
---|
219 | ptextln(temp);
|
---|
220 | } else {
|
---|
221 | put_clear();
|
---|
222 | go_home();
|
---|
223 | ptext("\n(am) should not be set");
|
---|
224 | go_home();
|
---|
225 | for (j = 0; j < columns; j++)
|
---|
226 | put_this(' ');
|
---|
227 | ptext("(am) should be set ");
|
---|
228 | go_home();
|
---|
229 | put_str(" \n\n");
|
---|
230 | sprintf(temp, "(am) is %s in the data base",
|
---|
231 | auto_right_margin ? "true" : "false");
|
---|
232 | ptextln(temp);
|
---|
233 | }
|
---|
234 | ptext("Automatic-right-margin ");
|
---|
235 | generic_done_message(t, state, ch);
|
---|
236 | }
|
---|
237 |
|
---|
238 | /* Note: uprint() sends underscore back-space character, and
|
---|
239 | ucprint() sends character back-space underscore. */
|
---|
240 |
|
---|
241 | /*
|
---|
242 | ** uprint(string)
|
---|
243 | **
|
---|
244 | ** underline string for (ul) test
|
---|
245 | */
|
---|
246 | static void
|
---|
247 | uprint(const char *s)
|
---|
248 | {
|
---|
249 | if (s) {
|
---|
250 | while (*s) {
|
---|
251 | put_str("_\b");
|
---|
252 | putchp(*s++);
|
---|
253 | }
|
---|
254 | }
|
---|
255 | }
|
---|
256 |
|
---|
257 | /*
|
---|
258 | ** ucprint(string)
|
---|
259 | **
|
---|
260 | ** underline string for (uc) test
|
---|
261 | */
|
---|
262 | static void
|
---|
263 | ucprint(const char *s)
|
---|
264 | {
|
---|
265 | if (s) {
|
---|
266 | while (*s) {
|
---|
267 | putchp(*s++);
|
---|
268 | putchp('\b');
|
---|
269 | tc_putp(underline_char);
|
---|
270 | }
|
---|
271 | }
|
---|
272 | }
|
---|
273 |
|
---|
274 | /*
|
---|
275 | ** subtest_ul(test_list, status, ch)
|
---|
276 | **
|
---|
277 | ** test transparent underline (ul)
|
---|
278 | */
|
---|
279 | static void
|
---|
280 | subtest_ul(
|
---|
281 | struct test_list *t,
|
---|
282 | int *state,
|
---|
283 | int *ch)
|
---|
284 | {
|
---|
285 | if (!over_strike) {
|
---|
286 | /* (ul) is used only if (os) is reset */
|
---|
287 | put_crlf();
|
---|
288 | sprintf(temp, "This text should %sbe underlined.",
|
---|
289 | transparent_underline ? "" : "not ");
|
---|
290 | uprint(temp);
|
---|
291 | put_crlf();
|
---|
292 | ptextln("If the above line is not underlined the (ul) should be false.");
|
---|
293 | sprintf(temp, "(ul) Transparent-underline is %s in the data base",
|
---|
294 | transparent_underline ? "true" : "false");
|
---|
295 | ptextln(temp);
|
---|
296 | generic_done_message(t, state, ch);
|
---|
297 | }
|
---|
298 | }
|
---|
299 |
|
---|
300 | /*
|
---|
301 | ** subtest_uc(test_list, status, ch)
|
---|
302 | **
|
---|
303 | ** test underline character (uc)
|
---|
304 | */
|
---|
305 | static void
|
---|
306 | subtest_uc(
|
---|
307 | struct test_list *t,
|
---|
308 | int *state,
|
---|
309 | int *ch)
|
---|
310 | {
|
---|
311 | if (!over_strike) {
|
---|
312 | if (underline_char) {
|
---|
313 | ucprint("This text should be underlined.");
|
---|
314 | put_crlf();
|
---|
315 | ptextln("If the above text is not underlined the (uc) has failed.");
|
---|
316 | ptext("Underline-character ");
|
---|
317 | } else {
|
---|
318 | ptext("(uc) underline-character is not defined. ");
|
---|
319 | }
|
---|
320 | generic_done_message(t, state, ch);
|
---|
321 | }
|
---|
322 | }
|
---|
323 |
|
---|
324 | /*
|
---|
325 | ** subtest_bw(test_list, status, ch)
|
---|
326 | **
|
---|
327 | ** test auto left margin (bw)
|
---|
328 | */
|
---|
329 | static void
|
---|
330 | subtest_bw(
|
---|
331 | struct test_list *t,
|
---|
332 | int *state,
|
---|
333 | int *ch)
|
---|
334 | {
|
---|
335 | int i, j;
|
---|
336 |
|
---|
337 | if (over_strike) {
|
---|
338 | /* test (bw) */
|
---|
339 | ptext("\n(bw) should ");
|
---|
340 | i = char_count;
|
---|
341 | ptextln("not be set.");
|
---|
342 | for (j = i; j < columns; j++)
|
---|
343 | put_str("\b");
|
---|
344 | put_str("@@@");
|
---|
345 | put_crlf();
|
---|
346 | sprintf(temp, "(bw) Auto-left-margin is %s in the data base",
|
---|
347 | auto_left_margin ? "true" : "false");
|
---|
348 | ptextln(temp);
|
---|
349 | } else {
|
---|
350 | /* test (bw) */
|
---|
351 | ptextln("(bw) should not be set.");
|
---|
352 | for (i = 12; i < columns; i++)
|
---|
353 | put_str("\b");
|
---|
354 | if (delete_character) {
|
---|
355 | for (i = 0; i < 4; i++)
|
---|
356 | tc_putp(delete_character);
|
---|
357 | } else {
|
---|
358 | put_str(" ");
|
---|
359 | }
|
---|
360 | put_crlf();
|
---|
361 | sprintf(temp, "(bw) Auto-left-margin is %s in the data base",
|
---|
362 | auto_left_margin ? "true" : "false");
|
---|
363 | ptextln(temp);
|
---|
364 | }
|
---|
365 | generic_done_message(t, state, ch);
|
---|
366 | }
|
---|
367 |
|
---|
368 | /*
|
---|
369 | ** subtest_tbc(test_list, status, ch)
|
---|
370 | **
|
---|
371 | ** test clear tabs (tbc)
|
---|
372 | */
|
---|
373 | static void
|
---|
374 | subtest_tbc(
|
---|
375 | struct test_list *t,
|
---|
376 | int *state,
|
---|
377 | int *ch)
|
---|
378 | {
|
---|
379 | int tabat; /* the tab spacing we end up with */
|
---|
380 | int i;
|
---|
381 |
|
---|
382 | if (clear_all_tabs && !set_tab) {
|
---|
383 | ptext("(tbc) Clear-all-tabs is defined but (hts) set-tab is not. ");
|
---|
384 | ptext("Once the tabs are cleared there is no way to set them. ");
|
---|
385 | } else
|
---|
386 | if (clear_all_tabs) {
|
---|
387 | tabat = set_tab ? 8 : init_tabs;
|
---|
388 | tc_putp(clear_all_tabs);
|
---|
389 | ptext("Clear tabs (tbc)");
|
---|
390 | go_home();
|
---|
391 | put_crlf();
|
---|
392 | putchp('\t');
|
---|
393 | putchp('T');
|
---|
394 | go_home();
|
---|
395 | put_newlines(2);
|
---|
396 | for (i = 0; i < columns; i++) {
|
---|
397 | if (i == tabat) {
|
---|
398 | putchp('T');
|
---|
399 | } else {
|
---|
400 | putchp('.');
|
---|
401 | }
|
---|
402 | }
|
---|
403 | go_home();
|
---|
404 | ptext("\n\n\nIf the above two lines have T's in the same column then (tbc) has failed. ");
|
---|
405 | } else {
|
---|
406 | ptext("(tbc) Clear-all-tabs is not defined. ");
|
---|
407 | }
|
---|
408 | generic_done_message(t, state, ch);
|
---|
409 | }
|
---|
410 |
|
---|
411 | /*
|
---|
412 | ** subtest_hts(test_list, status, ch)
|
---|
413 | **
|
---|
414 | ** (ht) and set tabs with (hts)
|
---|
415 | */
|
---|
416 | static void
|
---|
417 | subtest_hts(
|
---|
418 | struct test_list *t,
|
---|
419 | int *state,
|
---|
420 | int *ch)
|
---|
421 | {
|
---|
422 | int tabat; /* the tab spacing we end up with */
|
---|
423 | int i;
|
---|
424 |
|
---|
425 | tabat = init_tabs;
|
---|
426 | if (set_tab) {
|
---|
427 | ptext("Tabs set with (hts)");
|
---|
428 | put_crlf();
|
---|
429 | for (i = 1; i < columns; i++) {
|
---|
430 | if (i % 8 == 1) {
|
---|
431 | tc_putp(set_tab);
|
---|
432 | }
|
---|
433 | putchp(' ');
|
---|
434 | }
|
---|
435 | tabat = 8;
|
---|
436 | } else {
|
---|
437 | sprintf(temp, "(hts) Set-tabs not defined. (it) Initial-tabs at %d", init_tabs);
|
---|
438 | ptext(temp);
|
---|
439 | }
|
---|
440 | go_home();
|
---|
441 | put_newlines(2);
|
---|
442 | if (tabat <= 0) {
|
---|
443 | tabat = 8;
|
---|
444 | }
|
---|
445 | for (i = tabat; i < columns; i += tabat) {
|
---|
446 | putchp('\t');
|
---|
447 | putchp('T');
|
---|
448 | }
|
---|
449 | go_home();
|
---|
450 | put_newlines(3);
|
---|
451 | for (i = 1; i < columns; i++) {
|
---|
452 | putchp('.');
|
---|
453 | }
|
---|
454 | go_home();
|
---|
455 | put_newlines(3);
|
---|
456 | for (i = tabat; i < columns; i += tabat) {
|
---|
457 | putchp('\t');
|
---|
458 | putchp('T');
|
---|
459 | }
|
---|
460 | go_home();
|
---|
461 | put_newlines(4);
|
---|
462 | putchp('.');
|
---|
463 | for (i = 2; i < columns; i++) {
|
---|
464 | if (i % tabat == 1) {
|
---|
465 | putchp('T');
|
---|
466 | } else {
|
---|
467 | putchp('.');
|
---|
468 | }
|
---|
469 | }
|
---|
470 | go_home();
|
---|
471 | put_newlines(5);
|
---|
472 | if (set_tab) {
|
---|
473 | ptextln("If the last two lines are not the same then (hts) has failed.");
|
---|
474 | } else
|
---|
475 | if (init_tabs > 0) {
|
---|
476 | ptextln("If the last two lines are not the same then (it) is wrong.");
|
---|
477 | } else {
|
---|
478 | ptextln("If the last two lines are the same then maybe you do have tabs and (it) should be changed.");
|
---|
479 | }
|
---|
480 | generic_done_message(t, state, ch);
|
---|
481 | }
|
---|
482 |
|
---|
483 | /*
|
---|
484 | ** subtest_xt(test_list, status, ch)
|
---|
485 | **
|
---|
486 | ** (xt) glitch
|
---|
487 | */
|
---|
488 | static void
|
---|
489 | subtest_xt(
|
---|
490 | struct test_list *t,
|
---|
491 | int *state,
|
---|
492 | int *ch)
|
---|
493 | {
|
---|
494 | int tabat; /* the tab spacing we end up with */
|
---|
495 | int cc;
|
---|
496 |
|
---|
497 | tabat = set_tab ? 8 : init_tabs;
|
---|
498 | if (!over_strike && (tabat > 0)) {
|
---|
499 | ptext("(xt) should not ");
|
---|
500 | put_cr();
|
---|
501 | ptext("(xt) should");
|
---|
502 | cc = char_count;
|
---|
503 | while (cc < 16) {
|
---|
504 | putchp('\t');
|
---|
505 | cc = ((cc / tabat) + 1) * tabat;
|
---|
506 | }
|
---|
507 | putln("be set.");
|
---|
508 | sprintf(temp, "(xt) Destructive-tab is %s in the data base.",
|
---|
509 | dest_tabs_magic_smso ? "true" : "false");
|
---|
510 | ptextln(temp);
|
---|
511 | generic_done_message(t, state, ch);
|
---|
512 | }
|
---|
513 | }
|
---|
514 |
|
---|
515 | /*
|
---|
516 | ** subtest_cbt(test_list, status, ch)
|
---|
517 | **
|
---|
518 | ** (cbt) back tab
|
---|
519 | */
|
---|
520 | static void
|
---|
521 | subtest_cbt(
|
---|
522 | struct test_list *t,
|
---|
523 | int *state,
|
---|
524 | int *ch)
|
---|
525 | {
|
---|
526 | int i;
|
---|
527 |
|
---|
528 | if (back_tab) {
|
---|
529 | put_clear();
|
---|
530 | ptext("Back-tab (cbt)");
|
---|
531 | go_home();
|
---|
532 | put_crlf();
|
---|
533 | for (i = 1; i < columns; i++) {
|
---|
534 | putchp(' ');
|
---|
535 | }
|
---|
536 | for (i = 0; i < columns; i += 8) {
|
---|
537 | tc_putp(back_tab);
|
---|
538 | putchp('T');
|
---|
539 | tc_putp(back_tab);
|
---|
540 | }
|
---|
541 | go_home();
|
---|
542 | put_newlines(2);
|
---|
543 | for (i = 1; i < columns; i++) {
|
---|
544 | if (i % 8 == 1) {
|
---|
545 | putchp('T');
|
---|
546 | } else {
|
---|
547 | putchp(' ');
|
---|
548 | }
|
---|
549 | }
|
---|
550 | go_home();
|
---|
551 | put_newlines(3);
|
---|
552 | ptextln("The preceding two lines should be the same.");
|
---|
553 | } else {
|
---|
554 | ptextln("(cbt) Back-tab not present");
|
---|
555 | }
|
---|
556 | generic_done_message(t, state, ch);
|
---|
557 | }
|
---|
558 |
|
---|
559 | /*
|
---|
560 | ** subtest_xenl(test_list, status, ch)
|
---|
561 | **
|
---|
562 | ** (xenl) eat newline glitch
|
---|
563 | */
|
---|
564 | static void
|
---|
565 | subtest_xenl(
|
---|
566 | struct test_list *t,
|
---|
567 | int *state,
|
---|
568 | int *ch)
|
---|
569 | {
|
---|
570 | int i, j, k;
|
---|
571 |
|
---|
572 | if (over_strike) {
|
---|
573 | /* test (xenl) on overstrike terminals */
|
---|
574 | if (!can_go_home || !can_clear_screen) {
|
---|
575 | ptextln("(xenl) Newline-glitch not tested, can't home cursor and clear.");
|
---|
576 | generic_done_message(t, state, ch);
|
---|
577 | return;
|
---|
578 | }
|
---|
579 | put_clear();
|
---|
580 | /*
|
---|
581 | this test must be done in raw mode. Otherwise UNIX will
|
---|
582 | translate CR to CRLF.
|
---|
583 | */
|
---|
584 | if (stty_query(TTY_OUT_TRANS))
|
---|
585 | tty_raw(1, char_mask);
|
---|
586 | ptext("\nreset (xenl). Does ");
|
---|
587 | i = char_count;
|
---|
588 | put_str("not ignore CR, does ");
|
---|
589 | k = char_count;
|
---|
590 | put_str("not ignore LF");
|
---|
591 | go_home();
|
---|
592 | for (j = 0; j < columns; j++)
|
---|
593 | put_this(' ');
|
---|
594 | put_cr();
|
---|
595 | for (j = 0; j < i; j++)
|
---|
596 | putchp(' ');
|
---|
597 | put_str("@@@\n@@");
|
---|
598 | go_home();
|
---|
599 | for (j = 0; j < columns; j++)
|
---|
600 | put_this(' ');
|
---|
601 | put_lf();
|
---|
602 | for (j = 0; j < k; j++)
|
---|
603 | putchp(' ');
|
---|
604 | put_str("@@@\r@@");
|
---|
605 | tty_set();
|
---|
606 | go_home();
|
---|
607 | put_newlines(4);
|
---|
608 | sprintf(temp, "(xenl) Newline-glitch is %s in the data base",
|
---|
609 | eat_newline_glitch ? "true" : "false");
|
---|
610 | ptextln(temp);
|
---|
611 | } else {
|
---|
612 | /* test (xenl) when (os) is reset */
|
---|
613 | if (!can_go_home) {
|
---|
614 | ptextln("(xenl) Newline-glitch not tested, can't home cursor");
|
---|
615 | generic_done_message(t, state, ch);
|
---|
616 | return;
|
---|
617 | }
|
---|
618 | /* (xenl) test */
|
---|
619 | put_clear();
|
---|
620 | /*
|
---|
621 | this test must be done in raw mode. Otherwise
|
---|
622 | UNIX will translate CR to CRLF.
|
---|
623 | */
|
---|
624 | if (stty_query(TTY_OUT_TRANS))
|
---|
625 | tty_raw(1, char_mask);
|
---|
626 | for (j = 0; j < columns; j++)
|
---|
627 | put_this(' ');
|
---|
628 | put_cr();
|
---|
629 | ptext("(xenl) should be set. Does not ignore CR");
|
---|
630 | go_home();
|
---|
631 | put_crlf();
|
---|
632 | for (j = 0; j < columns; j++)
|
---|
633 | put_this(' ');
|
---|
634 | put_lf(); /* test (cud1) */
|
---|
635 | ptext("(xenl) should be set. Ignores (cud1)");
|
---|
636 | go_home();
|
---|
637 | put_newlines(3);
|
---|
638 | if (scroll_forward && cursor_down &&
|
---|
639 | strcmp(scroll_forward, cursor_down)) {
|
---|
640 | for (j = 0; j < columns; j++)
|
---|
641 | put_this(' ');
|
---|
642 | put_ind(); /* test (ind) */
|
---|
643 | ptext("(xenl) should be set. Ignores (ind)");
|
---|
644 | go_home();
|
---|
645 | put_newlines(5);
|
---|
646 | }
|
---|
647 | tty_set();
|
---|
648 | ptextln("If you don't see text above telling you to set it, (xenl) should be false");
|
---|
649 | sprintf(temp, "(xenl) Newline-glitch is %s in the data base",
|
---|
650 | eat_newline_glitch ? "true" : "false");
|
---|
651 | ptextln(temp);
|
---|
652 | }
|
---|
653 | generic_done_message(t, state, ch);
|
---|
654 | }
|
---|
655 |
|
---|
656 | /*
|
---|
657 | ** subtest_eo(test_list, status, ch)
|
---|
658 | **
|
---|
659 | ** (eo) erase overstrike
|
---|
660 | */
|
---|
661 | static void
|
---|
662 | subtest_eo(
|
---|
663 | struct test_list *t,
|
---|
664 | int *state,
|
---|
665 | int *ch)
|
---|
666 | {
|
---|
667 | if (transparent_underline || over_strike || underline_char) {
|
---|
668 | ptext("(eo) should ");
|
---|
669 | if (underline_char) {
|
---|
670 | ucprint("not");
|
---|
671 | } else {
|
---|
672 | uprint("not");
|
---|
673 | }
|
---|
674 | put_cr();
|
---|
675 | ptextln("(eo) should be set");
|
---|
676 | sprintf(temp, "\n(eo) Erase-overstrike is %s in the data base",
|
---|
677 | erase_overstrike ? "true" : "false");
|
---|
678 | ptextln(temp);
|
---|
679 | generic_done_message(t, state, ch);
|
---|
680 | }
|
---|
681 | }
|
---|
682 |
|
---|
683 | /*
|
---|
684 | ** subtest_xmc(test_list, status, ch)
|
---|
685 | **
|
---|
686 | ** (xmc) magic cookie glitch
|
---|
687 | */
|
---|
688 | static void
|
---|
689 | subtest_xmc(
|
---|
690 | struct test_list *t,
|
---|
691 | int *state,
|
---|
692 | int *ch)
|
---|
693 | {
|
---|
694 | int i, j;
|
---|
695 |
|
---|
696 | if (enter_standout_mode) {
|
---|
697 | sprintf(temp, "\n(xmc) Magic-cookie-glitch is %d in the data base", magic_cookie_glitch);
|
---|
698 | ptextln(temp);
|
---|
699 | j = magic_cookie_glitch * 8;
|
---|
700 | for (i = 0; i < j; i++) {
|
---|
701 | put_str(" ");
|
---|
702 | }
|
---|
703 | ptextln(" These two lines should line up.");
|
---|
704 | if (j > 0) {
|
---|
705 | char_count += j;
|
---|
706 | }
|
---|
707 | for (i = 0; i < 4; i++) {
|
---|
708 | put_mode(enter_standout_mode);
|
---|
709 | putchp(' ');
|
---|
710 | put_mode(exit_standout_mode);
|
---|
711 | putchp(' ');
|
---|
712 | }
|
---|
713 | ptextln("These two lines should line up.");
|
---|
714 | ptext("If they don't line up then (xmc) magic-cookie-glitch should be greater than zero. ");
|
---|
715 | generic_done_message(t, state, ch);
|
---|
716 | }
|
---|
717 | }
|
---|
718 |
|
---|
719 | /*
|
---|
720 | ** subtest_xhp(test_list, status, ch)
|
---|
721 | **
|
---|
722 | ** (xhp) erase does not clear standout mode
|
---|
723 | */
|
---|
724 | static void
|
---|
725 | subtest_xhp(
|
---|
726 | struct test_list *t,
|
---|
727 | int *state,
|
---|
728 | int *ch)
|
---|
729 | {
|
---|
730 | if (enter_standout_mode) {
|
---|
731 | put_crlf();
|
---|
732 | put_mode(enter_standout_mode);
|
---|
733 | put_str("Stand out");
|
---|
734 | put_mode(exit_standout_mode);
|
---|
735 | put_cr();
|
---|
736 | ptextln("If any part of this line is standout then (xhp) should be set.");
|
---|
737 | sprintf(temp, "(xhp) Erase-standout-glitch is %s in the data base",
|
---|
738 | ceol_standout_glitch ? "true" : "false");
|
---|
739 | ptextln(temp);
|
---|
740 | generic_done_message(t, state, ch);
|
---|
741 | }
|
---|
742 | }
|
---|
743 |
|
---|
744 | /*
|
---|
745 | ** subtest_mir(test_list, status, ch)
|
---|
746 | **
|
---|
747 | ** (mir) move in insert mode
|
---|
748 | */
|
---|
749 | static void
|
---|
750 | subtest_mir(
|
---|
751 | struct test_list *t,
|
---|
752 | int *state,
|
---|
753 | int *ch)
|
---|
754 | {
|
---|
755 | int i;
|
---|
756 | char *s;
|
---|
757 |
|
---|
758 | if (enter_insert_mode && exit_insert_mode && cursor_address) {
|
---|
759 | put_clear();
|
---|
760 | i = line_count;
|
---|
761 | put_str("\nXXX\nXXX\nXXX\nXXX");
|
---|
762 | tc_putp(enter_insert_mode);
|
---|
763 | s = tparm(cursor_address, i + 1, 0);
|
---|
764 | tputs(s, lines, tc_putch);
|
---|
765 | putchp('X');
|
---|
766 | s = tparm(cursor_address, i + 2, 1);
|
---|
767 | tputs(s, lines, tc_putch);
|
---|
768 | putchp('X');
|
---|
769 | s = tparm(cursor_address, i + 3, 2);
|
---|
770 | tputs(s, lines, tc_putch);
|
---|
771 | putchp('X');
|
---|
772 | s = tparm(cursor_address, i + 4, 3);
|
---|
773 | tputs(s, lines, tc_putch);
|
---|
774 | putchp('X');
|
---|
775 | tc_putp(exit_insert_mode);
|
---|
776 | put_newlines(2);
|
---|
777 | ptextln("If you see a 4 by 4 block of X's then (mir) should be true.");
|
---|
778 | sprintf(temp, "(mir) Move-in-insert-mode is %s in the data base",
|
---|
779 | move_insert_mode ? "true" : "false");
|
---|
780 | ptextln(temp);
|
---|
781 | } else {
|
---|
782 | ptext("(mir) Move-in-insert-mode not tested, ");
|
---|
783 | if (!enter_insert_mode) {
|
---|
784 | ptext("(smir) ");
|
---|
785 | }
|
---|
786 | if (!exit_insert_mode) {
|
---|
787 | ptext("(rmir) ");
|
---|
788 | }
|
---|
789 | if (!cursor_address) {
|
---|
790 | ptext("(cup) ");
|
---|
791 | }
|
---|
792 | ptext("not present. ");
|
---|
793 | }
|
---|
794 | generic_done_message(t, state, ch);
|
---|
795 | }
|
---|
796 |
|
---|
797 | /*
|
---|
798 | ** subtest_msgr(test_list, status, ch)
|
---|
799 | **
|
---|
800 | ** (msgr) move in sgr mode
|
---|
801 | */
|
---|
802 | static void
|
---|
803 | subtest_msgr(
|
---|
804 | struct test_list *t,
|
---|
805 | int *state,
|
---|
806 | int *ch)
|
---|
807 | {
|
---|
808 | int i;
|
---|
809 |
|
---|
810 | if (cursor_address &&
|
---|
811 | ((enter_standout_mode && exit_standout_mode) ||
|
---|
812 | (enter_alt_charset_mode && exit_alt_charset_mode))) {
|
---|
813 | put_crlf();
|
---|
814 | i = line_count + 1;
|
---|
815 | tputs(tparm(cursor_address, i, 0), lines, tc_putch);
|
---|
816 | put_mode(enter_alt_charset_mode);
|
---|
817 | put_crlf();
|
---|
818 | /*
|
---|
819 | some versions of the wy-120 can not clear lines or
|
---|
820 | screen when in alt charset mode. If (el) and (ed)
|
---|
821 | are defined then I can test them. If they are not
|
---|
822 | defined then they can not break (msgr)
|
---|
823 | */
|
---|
824 | tc_putp(clr_eos);
|
---|
825 | tc_putp(clr_eol);
|
---|
826 | put_mode(exit_alt_charset_mode);
|
---|
827 | put_mode(enter_standout_mode);
|
---|
828 | putchp('X');
|
---|
829 | tputs(tparm(cursor_address, i + 2, 1), lines, tc_putch);
|
---|
830 | putchp('X');
|
---|
831 | tputs(tparm(cursor_address, i + 3, 2), lines, tc_putch);
|
---|
832 | putchp('X');
|
---|
833 | tputs(tparm(cursor_address, i + 4, 3), lines, tc_putch);
|
---|
834 | putchp('X');
|
---|
835 | put_mode(exit_standout_mode);
|
---|
836 | put_crlf();
|
---|
837 | tc_putp(clr_eos); /* OK if missing */
|
---|
838 | put_crlf();
|
---|
839 | ptextln("If you see a diagonal line of standout X's then (msgr) should be true. If any of the blanks are standout then (msgr) should be false.");
|
---|
840 | sprintf(temp, "(msgr) Move-in-SGR-mode is %s in the data base",
|
---|
841 | move_standout_mode ? "true" : "false");
|
---|
842 | ptextln(temp);
|
---|
843 | } else {
|
---|
844 | ptextln("(smso) (rmso) (smacs) (rmacs) missing; (msgr) Move-in-SGR-mode not tested.");
|
---|
845 | }
|
---|
846 | generic_done_message(t, state, ch);
|
---|
847 | }
|
---|
848 |
|
---|
849 | /*
|
---|
850 | ** subtest_in(test_list, status, ch)
|
---|
851 | **
|
---|
852 | ** (in) insert null glitch
|
---|
853 | */
|
---|
854 | static void
|
---|
855 | subtest_in(
|
---|
856 | struct test_list *t,
|
---|
857 | int *state,
|
---|
858 | int *ch)
|
---|
859 | {
|
---|
860 | if (enter_insert_mode && exit_insert_mode) {
|
---|
861 | ptextln("\nTesting (in) with (smir) and (rmir)");
|
---|
862 | putln("\tIf these two lines line up ...");
|
---|
863 | put_str("\tIf these two lines line up ...");
|
---|
864 | put_cr();
|
---|
865 | tc_putp(enter_insert_mode);
|
---|
866 | putchp(' ');
|
---|
867 | tc_putp(exit_insert_mode);
|
---|
868 | ptext("\nthen (in) should be set. ");
|
---|
869 | sprintf(temp,
|
---|
870 | "(in) Insert-null-glitch is %s in the data base.",
|
---|
871 | insert_null_glitch ? "true" : "false");
|
---|
872 | ptextln(temp);
|
---|
873 | generic_done_message(t, state, ch);
|
---|
874 | }
|
---|
875 | }
|
---|
876 |
|
---|
877 | /*
|
---|
878 | ** subtest_dadb(test_list, status, ch)
|
---|
879 | **
|
---|
880 | ** (da) (db) data above, (db) data below
|
---|
881 | */
|
---|
882 | static void
|
---|
883 | subtest_dadb(
|
---|
884 | struct test_list *t,
|
---|
885 | int *state,
|
---|
886 | int *ch)
|
---|
887 | {
|
---|
888 | if (can_clear_screen && scroll_reverse && scroll_forward) {
|
---|
889 | put_clear();
|
---|
890 | if (scroll_reverse)
|
---|
891 | ptext("(da) Data-above should be set\r");
|
---|
892 | home_down();
|
---|
893 | if (scroll_forward)
|
---|
894 | ptext("(db) Data-below should be set\r");
|
---|
895 | tc_putp(scroll_forward);
|
---|
896 | go_home();
|
---|
897 | tc_putp(scroll_reverse);
|
---|
898 | tc_putp(scroll_reverse);
|
---|
899 | home_down();
|
---|
900 | tc_putp(scroll_forward);
|
---|
901 | go_home();
|
---|
902 | ptextln("\n\n\n\n\nIf the top line is blank then (da) should be false.");
|
---|
903 | ptextln("If the bottom line is blank then (db) should be false.");
|
---|
904 | sprintf(temp, "\n(da) Data-above is %s, and (db) Data-below is %s, in the data base.",
|
---|
905 | memory_above ? "true" : "false",
|
---|
906 | memory_below ? "true" : "false");
|
---|
907 | ptextln(temp);
|
---|
908 | line_count = lines;
|
---|
909 | } else {
|
---|
910 | ptextln("(da) Data-above, (db) Data-below not tested, scrolls or (clear) is missing.");
|
---|
911 | }
|
---|
912 | generic_done_message(t, state, ch);
|
---|
913 | }
|
---|