Deleted Added
full compact
dump_entry.c (97049) dump_entry.c (98503)
1/****************************************************************************
1/****************************************************************************
2 * Copyright (c) 1998-2000 Free Software Foundation, Inc. *
2 * Copyright (c) 1998-2001,2002 Free Software Foundation, Inc. *
3 * *
4 * Permission is hereby granted, free of charge, to any person obtaining a *
5 * copy of this software and associated documentation files (the *
6 * "Software"), to deal in the Software without restriction, including *
7 * without limitation the rights to use, copy, modify, merge, publish, *
8 * distribute, distribute with modifications, sublicense, and/or sell *
9 * copies of the Software, and to permit persons to whom the Software is *
10 * furnished to do so, subject to the following conditions: *

--- 13 unchanged lines hidden (view full) ---

24 * holders shall not be used in advertising or otherwise to promote the *
25 * sale, use or other dealings in this Software without prior written *
26 * authorization. *
27 ****************************************************************************/
28
29/****************************************************************************
30 * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
31 * and: Eric S. Raymond <esr@snark.thyrsus.com> *
3 * *
4 * Permission is hereby granted, free of charge, to any person obtaining a *
5 * copy of this software and associated documentation files (the *
6 * "Software"), to deal in the Software without restriction, including *
7 * without limitation the rights to use, copy, modify, merge, publish, *
8 * distribute, distribute with modifications, sublicense, and/or sell *
9 * copies of the Software, and to permit persons to whom the Software is *
10 * furnished to do so, subject to the following conditions: *

--- 13 unchanged lines hidden (view full) ---

24 * holders shall not be used in advertising or otherwise to promote the *
25 * sale, use or other dealings in this Software without prior written *
26 * authorization. *
27 ****************************************************************************/
28
29/****************************************************************************
30 * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
31 * and: Eric S. Raymond <esr@snark.thyrsus.com> *
32 * and: Thomas E. Dickey 1996 on *
32 ****************************************************************************/
33
34#define __INTERNAL_CAPS_VISIBLE
35#include <progs.priv.h>
36
37#include "dump_entry.h"
38#include "termsort.c" /* this C file is generated */
39#include <parametrized.h> /* so is this */
40
33 ****************************************************************************/
34
35#define __INTERNAL_CAPS_VISIBLE
36#include <progs.priv.h>
37
38#include "dump_entry.h"
39#include "termsort.c" /* this C file is generated */
40#include <parametrized.h> /* so is this */
41
41MODULE_ID("$Id: dump_entry.c,v 1.56 2001/08/12 00:21:22 tom Exp $")
42MODULE_ID("$Id: dump_entry.c,v 1.58 2002/06/01 22:58:11 tom Exp $")
42
43#define INDENT 8
44#define DISCARD(string) string = ABSENT_STRING
45#define PRINTF (void) printf
46
47typedef struct {
48 char *text;
49 size_t used;

--- 111 unchanged lines hidden (view full) ---

161 break;
162 }
163
164 return (0);
165}
166
167void
168dump_init(const char *version, int mode, int sort, int twidth, int traceval,
43
44#define INDENT 8
45#define DISCARD(string) string = ABSENT_STRING
46#define PRINTF (void) printf
47
48typedef struct {
49 char *text;
50 size_t used;

--- 111 unchanged lines hidden (view full) ---

162 break;
163 }
164
165 return (0);
166}
167
168void
169dump_init(const char *version, int mode, int sort, int twidth, int traceval,
169 bool formatted)
170 bool formatted)
170/* set up for entry display */
171{
172 width = twidth;
173 pretty = formatted;
174
175 /* versions */
176 if (version == 0)
177 tversion = V_ALLCAPS;
178 else if (!strcmp(version, "SVr1") || !strcmp(version, "SVR1")
171/* set up for entry display */
172{
173 width = twidth;
174 pretty = formatted;
175
176 /* versions */
177 if (version == 0)
178 tversion = V_ALLCAPS;
179 else if (!strcmp(version, "SVr1") || !strcmp(version, "SVR1")
179 || !strcmp(version, "Ultrix"))
180 || !strcmp(version, "Ultrix"))
180 tversion = V_SVR1;
181 else if (!strcmp(version, "HP"))
182 tversion = V_HPUX;
183 else if (!strcmp(version, "AIX"))
184 tversion = V_AIX;
185 else if (!strcmp(version, "BSD"))
186 tversion = V_BSD;
187 else

--- 28 unchanged lines hidden (view full) ---

216 break;
217 }
218
219 /* implement sort modes */
220 switch (sortmode = sort) {
221 case S_NOSORT:
222 if (traceval)
223 (void) fprintf(stderr,
181 tversion = V_SVR1;
182 else if (!strcmp(version, "HP"))
183 tversion = V_HPUX;
184 else if (!strcmp(version, "AIX"))
185 tversion = V_AIX;
186 else if (!strcmp(version, "BSD"))
187 tversion = V_BSD;
188 else

--- 28 unchanged lines hidden (view full) ---

217 break;
218 }
219
220 /* implement sort modes */
221 switch (sortmode = sort) {
222 case S_NOSORT:
223 if (traceval)
224 (void) fprintf(stderr,
224 "%s: sorting by term structure order\n", _nc_progname);
225 "%s: sorting by term structure order\n", _nc_progname);
225 break;
226
227 case S_TERMINFO:
228 if (traceval)
229 (void) fprintf(stderr,
226 break;
227
228 case S_TERMINFO:
229 if (traceval)
230 (void) fprintf(stderr,
230 "%s: sorting by terminfo name order\n", _nc_progname);
231 "%s: sorting by terminfo name order\n", _nc_progname);
231 bool_indirect = bool_terminfo_sort;
232 num_indirect = num_terminfo_sort;
233 str_indirect = str_terminfo_sort;
234 break;
235
236 case S_VARIABLE:
237 if (traceval)
238 (void) fprintf(stderr,
232 bool_indirect = bool_terminfo_sort;
233 num_indirect = num_terminfo_sort;
234 str_indirect = str_terminfo_sort;
235 break;
236
237 case S_VARIABLE:
238 if (traceval)
239 (void) fprintf(stderr,
239 "%s: sorting by C variable order\n", _nc_progname);
240 "%s: sorting by C variable order\n", _nc_progname);
240 bool_indirect = bool_variable_sort;
241 num_indirect = num_variable_sort;
242 str_indirect = str_variable_sort;
243 break;
244
245 case S_TERMCAP:
246 if (traceval)
247 (void) fprintf(stderr,
241 bool_indirect = bool_variable_sort;
242 num_indirect = num_variable_sort;
243 str_indirect = str_variable_sort;
244 break;
245
246 case S_TERMCAP:
247 if (traceval)
248 (void) fprintf(stderr,
248 "%s: sorting by termcap name order\n", _nc_progname);
249 "%s: sorting by termcap name order\n", _nc_progname);
249 bool_indirect = bool_termcap_sort;
250 num_indirect = num_termcap_sort;
251 str_indirect = str_termcap_sort;
252 break;
253 }
254
255 if (traceval)
256 (void) fprintf(stderr,
250 bool_indirect = bool_termcap_sort;
251 num_indirect = num_termcap_sort;
252 str_indirect = str_termcap_sort;
253 break;
254 }
255
256 if (traceval)
257 (void) fprintf(stderr,
257 "%s: width = %d, tversion = %d, outform = %d\n",
258 _nc_progname, width, tversion, outform);
258 "%s: width = %d, tversion = %d, outform = %d\n",
259 _nc_progname, width, tversion, outform);
259}
260
261static TERMTYPE *cur_type;
262
263static int
264dump_predicate(int type, int idx)
265/* predicate function to use for ordinary decompilation */
266{

--- 224 unchanged lines hidden (view full) ---

491 }
492 strncpy_DYN(&tmpbuf, src++, 1);
493 }
494 return src;
495}
496
497int
498fmt_entry(TERMTYPE * tterm,
260}
261
262static TERMTYPE *cur_type;
263
264static int
265dump_predicate(int type, int idx)
266/* predicate function to use for ordinary decompilation */
267{

--- 224 unchanged lines hidden (view full) ---

492 }
493 strncpy_DYN(&tmpbuf, src++, 1);
494 }
495 return src;
496}
497
498int
499fmt_entry(TERMTYPE * tterm,
499 int (*pred) (int type, int idx),
500 bool suppress_untranslatable,
501 bool infodump,
502 int numbers)
500 int (*pred) (int type, int idx),
501 bool suppress_untranslatable,
502 bool infodump,
503 int numbers)
503{
504 int i, j;
505 char buffer[MAX_TERMINFO_LENGTH];
506 NCURSES_CONST char *name;
507 int predval, len;
508 int num_bools = 0;
509 int num_values = 0;
510 int num_strings = 0;

--- 123 unchanged lines hidden (view full) ---

634 if (tterm->Strings[i] != ABSENT_STRING
635 && i + 1 > num_strings)
636 num_strings = i + 1;
637
638 if (!VALID_STRING(tterm->Strings[i])) {
639 sprintf(buffer, "%s@", name);
640 WRAP_CONCAT;
641 } else if (outform == F_TERMCAP || outform == F_TCONVERR) {
504{
505 int i, j;
506 char buffer[MAX_TERMINFO_LENGTH];
507 NCURSES_CONST char *name;
508 int predval, len;
509 int num_bools = 0;
510 int num_values = 0;
511 int num_strings = 0;

--- 123 unchanged lines hidden (view full) ---

635 if (tterm->Strings[i] != ABSENT_STRING
636 && i + 1 > num_strings)
637 num_strings = i + 1;
638
639 if (!VALID_STRING(tterm->Strings[i])) {
640 sprintf(buffer, "%s@", name);
641 WRAP_CONCAT;
642 } else if (outform == F_TERMCAP || outform == F_TCONVERR) {
642 int params = (i < (int) SIZEOF(parametrized)) ? parametrized[i] : 0;
643 int params = ((i < (int) SIZEOF(parametrized))
644 ? parametrized[i]
645 : 0);
643 char *srccap = _nc_tic_expand(tterm->Strings[i], TRUE, numbers);
644 char *cv = _nc_infotocap(name, srccap, params);
645
646 if (cv == 0) {
647 if (outform == F_TCONVERR) {
648 sprintf(buffer, "%s=!!! %s WILL NOT CONVERT !!!",
646 char *srccap = _nc_tic_expand(tterm->Strings[i], TRUE, numbers);
647 char *cv = _nc_infotocap(name, srccap, params);
648
649 if (cv == 0) {
650 if (outform == F_TCONVERR) {
651 sprintf(buffer, "%s=!!! %s WILL NOT CONVERT !!!",
649 name, srccap);
652 name, srccap);
650 } else if (suppress_untranslatable) {
651 continue;
652 } else {
653 char *s = srccap, *d = buffer;
654 sprintf(d, "..%s=", name);
655 d += strlen(d);
656 while ((*d = *s++) != 0) {
657 if (*d == ':') {

--- 7 unchanged lines hidden (view full) ---

665 }
666 } else {
667 sprintf(buffer, "%s=%s", name, cv);
668 }
669 len += strlen(tterm->Strings[i]) + 1;
670 WRAP_CONCAT;
671 } else {
672 char *src = _nc_tic_expand(tterm->Strings[i],
653 } else if (suppress_untranslatable) {
654 continue;
655 } else {
656 char *s = srccap, *d = buffer;
657 sprintf(d, "..%s=", name);
658 d += strlen(d);
659 while ((*d = *s++) != 0) {
660 if (*d == ':') {

--- 7 unchanged lines hidden (view full) ---

668 }
669 } else {
670 sprintf(buffer, "%s=%s", name, cv);
671 }
672 len += strlen(tterm->Strings[i]) + 1;
673 WRAP_CONCAT;
674 } else {
675 char *src = _nc_tic_expand(tterm->Strings[i],
673 outform == F_TERMINFO, numbers);
676 outform == F_TERMINFO, numbers);
674
675 strcpy_DYN(&tmpbuf, 0);
676 strcpy_DYN(&tmpbuf, name);
677 strcpy_DYN(&tmpbuf, "=");
678 if (pretty
679 && (outform == F_TERMINFO
680 || outform == F_VARIABLE)) {
681 fmt_complex(src, 1);

--- 39 unchanged lines hidden (view full) ---

721 break;
722 }
723 }
724 tp[0] = '\0';
725
726 if (box_ok) {
727 (void) strcpy(buffer, "box1=");
728 (void) strcat(buffer, _nc_tic_expand(boxchars,
677
678 strcpy_DYN(&tmpbuf, 0);
679 strcpy_DYN(&tmpbuf, name);
680 strcpy_DYN(&tmpbuf, "=");
681 if (pretty
682 && (outform == F_TERMINFO
683 || outform == F_VARIABLE)) {
684 fmt_complex(src, 1);

--- 39 unchanged lines hidden (view full) ---

724 break;
725 }
726 }
727 tp[0] = '\0';
728
729 if (box_ok) {
730 (void) strcpy(buffer, "box1=");
731 (void) strcat(buffer, _nc_tic_expand(boxchars,
729 outform == F_TERMINFO, numbers));
732 outform == F_TERMINFO, numbers));
730 WRAP_CONCAT;
731 }
732 }
733 }
734
735 /*
736 * kludge: trim off trailer to avoid an extra blank line
737 * in infocmp -u output when there are no string differences
738 */
739 if (outcount) {
740 bool trimmed = FALSE;
741 j = outbuf.used;
742 if (j >= 2
743 && outbuf.text[j - 1] == '\t'
744 && outbuf.text[j - 2] == '\n') {
745 outbuf.used -= 2;
746 trimmed = TRUE;
747 } else if (j >= 4
733 WRAP_CONCAT;
734 }
735 }
736 }
737
738 /*
739 * kludge: trim off trailer to avoid an extra blank line
740 * in infocmp -u output when there are no string differences
741 */
742 if (outcount) {
743 bool trimmed = FALSE;
744 j = outbuf.used;
745 if (j >= 2
746 && outbuf.text[j - 1] == '\t'
747 && outbuf.text[j - 2] == '\n') {
748 outbuf.used -= 2;
749 trimmed = TRUE;
750 } else if (j >= 4
748 && outbuf.text[j - 1] == ':'
749 && outbuf.text[j - 2] == '\t'
750 && outbuf.text[j - 3] == '\n'
751 && outbuf.text[j - 4] == '\\') {
751 && outbuf.text[j - 1] == ':'
752 && outbuf.text[j - 2] == '\t'
753 && outbuf.text[j - 3] == '\n'
754 && outbuf.text[j - 4] == '\\') {
752 outbuf.used -= 4;
753 trimmed = TRUE;
754 }
755 if (trimmed) {
756 outbuf.text[outbuf.used] = '\0';
757 column = oldcol;
758 }
759 }
760#if 0
761 fprintf(stderr, "num_bools = %d\n", num_bools);
762 fprintf(stderr, "num_values = %d\n", num_values);
763 fprintf(stderr, "num_strings = %d\n", num_strings);
764 fprintf(stderr, "term_names=%s, len=%d, strlen(outbuf)=%d, outbuf=%s\n",
755 outbuf.used -= 4;
756 trimmed = TRUE;
757 }
758 if (trimmed) {
759 outbuf.text[outbuf.used] = '\0';
760 column = oldcol;
761 }
762 }
763#if 0
764 fprintf(stderr, "num_bools = %d\n", num_bools);
765 fprintf(stderr, "num_values = %d\n", num_values);
766 fprintf(stderr, "num_strings = %d\n", num_strings);
767 fprintf(stderr, "term_names=%s, len=%d, strlen(outbuf)=%d, outbuf=%s\n",
765 tterm->term_names, len, outbuf.used, outbuf.text);
768 tterm->term_names, len, outbuf.used, outbuf.text);
766#endif
767 /*
768 * Here's where we use infodump to trigger a more stringent length check
769 * for termcap-translation purposes.
770 * Return the length of the raw entry, without tc= expansions,
771 * It gives an idea of which entries are deadly to even *scan past*,
772 * as opposed to *use*.
773 */
774 return (infodump ? len : (int) termcap_length(outbuf.text));
775}
776
769#endif
770 /*
771 * Here's where we use infodump to trigger a more stringent length check
772 * for termcap-translation purposes.
773 * Return the length of the raw entry, without tc= expansions,
774 * It gives an idea of which entries are deadly to even *scan past*,
775 * as opposed to *use*.
776 */
777 return (infodump ? len : (int) termcap_length(outbuf.text));
778}
779
780static bool
781kill_string(TERMTYPE * tterm, char *cap)
782{
783 int n;
784 for (n = 0; n < tterm->num_Strings; ++n) {
785 if (cap == tterm->Strings[n]) {
786 tterm->Strings[n] = ABSENT_STRING;
787 return TRUE;
788 }
789 }
790 return FALSE;
791}
792
793static char *
794find_string(TERMTYPE * tterm, char *name)
795{
796 int n;
797 for (n = 0; n < tterm->num_Strings; ++n) {
798 if (version_filter(STRING, n)
799 && !strcmp(name, strnames[n])) {
800 char *cap = tterm->Strings[n];
801 if (VALID_STRING(cap)) {
802 return cap;
803 }
804 break;
805 }
806 }
807 return ABSENT_STRING;
808}
809
810/*
811 * This is used to remove function-key labels from a termcap entry to
812 * make it smaller.
813 */
814static int
815kill_labels(TERMTYPE * tterm, int target)
816{
817 int n;
818 int result = 0;
819 char *cap;
820 char name[10];
821
822 for (n = 0; n <= 10; ++n) {
823 sprintf(name, "lf%d", n);
824 if ((cap = find_string(tterm, name)) != ABSENT_STRING
825 && kill_string(tterm, cap)) {
826 target -= (strlen(cap) + 5);
827 ++result;
828 if (target < 0)
829 break;
830 }
831 }
832 return result;
833}
834
835/*
836 * This is used to remove function-key definitions from a termcap entry to
837 * make it smaller.
838 */
839static int
840kill_fkeys(TERMTYPE * tterm, int target)
841{
842 int n;
843 int result = 0;
844 char *cap;
845 char name[10];
846
847 for (n = 60; n >= 0; --n) {
848 sprintf(name, "kf%d", n);
849 if ((cap = find_string(tterm, name)) != ABSENT_STRING
850 && kill_string(tterm, cap)) {
851 target -= (strlen(cap) + 5);
852 ++result;
853 if (target < 0)
854 break;
855 }
856 }
857 return result;
858}
859
777int
860int
778dump_entry(TERMTYPE * tterm, bool limited, int numbers, int (*pred) (int
779 type, int idx))
861dump_entry(TERMTYPE * tterm,
862 bool limited,
863 int numbers,
864 int (*pred) (int type, int idx))
780/* dump a single entry */
781{
782 int len, critlen;
783 const char *legend;
784 bool infodump;
785
786 if (outform == F_TERMCAP || outform == F_TCONVERR) {
787 critlen = MAX_TERMCAP_LENGTH;

--- 4 unchanged lines hidden (view full) ---

792 critlen = MAX_TERMINFO_LENGTH;
793 legend = "terminfo";
794 infodump = TRUE;
795 }
796
797 if (((len = fmt_entry(tterm, pred, FALSE, infodump, numbers)) > critlen)
798 && limited) {
799 PRINTF("# (untranslatable capabilities removed to fit entry within %d bytes)\n",
865/* dump a single entry */
866{
867 int len, critlen;
868 const char *legend;
869 bool infodump;
870
871 if (outform == F_TERMCAP || outform == F_TCONVERR) {
872 critlen = MAX_TERMCAP_LENGTH;

--- 4 unchanged lines hidden (view full) ---

877 critlen = MAX_TERMINFO_LENGTH;
878 legend = "terminfo";
879 infodump = TRUE;
880 }
881
882 if (((len = fmt_entry(tterm, pred, FALSE, infodump, numbers)) > critlen)
883 && limited) {
884 PRINTF("# (untranslatable capabilities removed to fit entry within %d bytes)\n",
800 critlen);
885 critlen);
801 if ((len = fmt_entry(tterm, pred, TRUE, infodump, numbers)) > critlen) {
802 /*
803 * We pick on sgr because it's a nice long string capability that
804 * is really just an optimization hack. Another good candidate is
805 * acsc since it is both long and unused by BSD termcap.
806 */
807 char *oldsgr = set_attributes;
808 char *oldacsc = acs_chars;
809 set_attributes = ABSENT_STRING;
810 PRINTF("# (sgr removed to fit entry within %d bytes)\n",
886 if ((len = fmt_entry(tterm, pred, TRUE, infodump, numbers)) > critlen) {
887 /*
888 * We pick on sgr because it's a nice long string capability that
889 * is really just an optimization hack. Another good candidate is
890 * acsc since it is both long and unused by BSD termcap.
891 */
892 char *oldsgr = set_attributes;
893 char *oldacsc = acs_chars;
894 set_attributes = ABSENT_STRING;
895 PRINTF("# (sgr removed to fit entry within %d bytes)\n",
811 critlen);
896 critlen);
812 if ((len = fmt_entry(tterm, pred, TRUE, infodump, numbers)) > critlen) {
813 acs_chars = ABSENT_STRING;
814 PRINTF("# (acsc removed to fit entry within %d bytes)\n",
897 if ((len = fmt_entry(tterm, pred, TRUE, infodump, numbers)) > critlen) {
898 acs_chars = ABSENT_STRING;
899 PRINTF("# (acsc removed to fit entry within %d bytes)\n",
815 critlen);
900 critlen);
816 }
817 if ((len = fmt_entry(tterm, pred, TRUE, infodump, numbers)) > critlen) {
818 int oldversion = tversion;
819
820 tversion = V_BSD;
821 PRINTF("# (terminfo-only capabilities suppressed to fit entry within %d bytes)\n",
901 }
902 if ((len = fmt_entry(tterm, pred, TRUE, infodump, numbers)) > critlen) {
903 int oldversion = tversion;
904
905 tversion = V_BSD;
906 PRINTF("# (terminfo-only capabilities suppressed to fit entry within %d bytes)\n",
822 critlen);
907 critlen);
823
908
824 if ((len = fmt_entry(tterm, pred, TRUE, infodump, numbers))
825 > critlen) {
909 len = fmt_entry(tterm, pred, TRUE, infodump, numbers);
910 if (len > critlen
911 && kill_labels(tterm, len - critlen)) {
912 PRINTF("# (some labels capabilities suppressed to fit entry within %d bytes)\n",
913 critlen);
914 len = fmt_entry(tterm, pred, TRUE, infodump, numbers);
915 }
916 if (len > critlen
917 && kill_fkeys(tterm, len - critlen)) {
918 PRINTF("# (some function-key capabilities suppressed to fit entry within %d bytes)\n",
919 critlen);
920 len = fmt_entry(tterm, pred, TRUE, infodump, numbers);
921 }
922 if (len > critlen) {
826 (void) fprintf(stderr,
923 (void) fprintf(stderr,
827 "warning: %s entry is %d bytes long\n",
828 _nc_first_name(tterm->term_names),
829 len);
924 "warning: %s entry is %d bytes long\n",
925 _nc_first_name(tterm->term_names),
926 len);
830 PRINTF(
927 PRINTF(
831 "# WARNING: this entry, %d bytes long, may core-dump %s libraries!\n",
832 len, legend);
928 "# WARNING: this entry, %d bytes long, may core-dump %s libraries!\n",
929 len, legend);
833 }
834 tversion = oldversion;
835 }
836 set_attributes = oldsgr;
837 acs_chars = oldacsc;
838 }
839 }
840

--- 11 unchanged lines hidden (view full) ---

852 (void) sprintf(buffer, "%s%s", infodump ? "use=" : "tc=", name);
853 wrap_concat(buffer);
854 (void) fputs(outbuf.text, stdout);
855 return outbuf.used;
856}
857
858void
859compare_entry(void (*hook) (int t, int i, const char *name), TERMTYPE * tp
930 }
931 tversion = oldversion;
932 }
933 set_attributes = oldsgr;
934 acs_chars = oldacsc;
935 }
936 }
937

--- 11 unchanged lines hidden (view full) ---

949 (void) sprintf(buffer, "%s%s", infodump ? "use=" : "tc=", name);
950 wrap_concat(buffer);
951 (void) fputs(outbuf.text, stdout);
952 return outbuf.used;
953}
954
955void
956compare_entry(void (*hook) (int t, int i, const char *name), TERMTYPE * tp
860 GCC_UNUSED, bool quiet)
957 GCC_UNUSED, bool quiet)
861/* compare two entries */
862{
863 int i, j;
864 NCURSES_CONST char *name;
865
866 if (!quiet)
867 fputs(" comparing booleans.\n", stdout);
868 for_each_boolean(j, tp) {

--- 102 unchanged lines hidden ---
958/* compare two entries */
959{
960 int i, j;
961 NCURSES_CONST char *name;
962
963 if (!quiet)
964 fputs(" comparing booleans.\n", stdout);
965 for_each_boolean(j, tp) {

--- 102 unchanged lines hidden ---