/****************************************************************************
- * Copyright (c) 2018 Free Software Foundation, Inc. *
+ * Copyright (c) 2018,2019 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* authorization. *
****************************************************************************/
/*
- * $Id: pair_content.c,v 1.2 2018/12/30 00:54:48 tom Exp $
+ * $Id: pair_content.c,v 1.12 2019/01/21 01:05:22 tom Exp $
*/
#define NEED_TIME_H
#include <test.priv.h>
+#if USE_EXTENDED_COLOR
+typedef int my_color_t;
+#else
+typedef NCURSES_COLOR_T my_color_t;
+#endif
+
typedef struct {
- NCURSES_COLOR_T fg;
- NCURSES_COLOR_T bg;
+ my_color_t fg;
+ my_color_t bg;
} MYPAIR;
+static int f_opt;
static int i_opt;
static int l_opt;
static int n_opt;
+static int p_opt;
static int r_opt;
static int s_opt;
+#if USE_EXTENDED_COLOR
+static int x_opt;
+#endif
+
static MYPAIR *expected;
#if HAVE_GETTIMEOFDAY
ExitProgram(EXIT_FAILURE);
}
-static NCURSES_COLOR_T
+#if USE_EXTENDED_COLOR
+static int
+InitPair(int pair, int fg, int bg)
+{
+ int rc;
+ if (x_opt) {
+ rc = init_extended_pair(pair, fg, bg);
+ } else {
+ rc = init_pair((NCURSES_PAIRS_T) pair,
+ (NCURSES_COLOR_T) fg,
+ (NCURSES_COLOR_T) bg);
+ }
+ return rc;
+}
+
+static int
+PairContent(int pair, int *fgp, int *bgp)
+{
+ int rc;
+ if (x_opt) {
+ rc = extended_pair_content(pair, fgp, bgp);
+ } else {
+ short fg, bg;
+ if ((rc = pair_content((short) pair, &fg, &bg)) == OK) {
+ *fgp = fg;
+ *bgp = bg;
+ }
+ }
+ return rc;
+}
+#else
+#define InitPair(pair,fg,bg) init_pair((NCURSES_COLOR_T)pair,(NCURSES_COLOR_T)fg,(NCURSES_COLOR_T)bg)
+#define PairContent(pair,fgp,bgp) pair_content((NCURSES_PAIRS_T)pair,fgp,bgp)
+#endif
+
+static my_color_t
random_color(void)
{
- return (NCURSES_COLOR_T) (rand() % COLORS);
+ return (my_color_t) (rand() % COLORS);
}
static void
if (has_colors()) {
start_color();
+ if (!f_opt)
+ f_opt = 1;
if (!l_opt)
l_opt = COLOR_PAIRS;
if (l_opt <= 1)
failed("color-pair limit must be greater than one");
if (!n_opt) {
- NCURSES_PAIRS_T pair;
+ int pair;
+ size_t need = (size_t) ((l_opt > COLOR_PAIRS)
+ ? l_opt
+ : COLOR_PAIRS) + 1;
- expected = typeCalloc(MYPAIR, l_opt);
+ expected = typeCalloc(MYPAIR, need);
if (s_opt) {
- NCURSES_COLOR_T fg;
- NCURSES_COLOR_T bg;
- pair = 1;
+ my_color_t fg;
+ my_color_t bg;
+ pair = f_opt;
for (fg = 0; fg < COLORS; ++fg) {
for (bg = 0; bg < COLORS; ++bg) {
if (pair < l_opt) {
- init_pair(pair, fg, bg);
- expected[pair].fg = fg;
- expected[pair].bg = bg;
+ InitPair(pair, fg, bg);
+ expected[pair].fg = (my_color_t) fg;
+ expected[pair].bg = (my_color_t) bg;
++pair;
} else {
break;
}
}
} else {
- for (pair = 1; (int) pair < l_opt; ++pair) {
+ for (pair = f_opt; pair < l_opt; ++pair) {
expected[pair].fg = random_color();
expected[pair].bg = random_color();
- init_pair(pair, expected[pair].fg, expected[pair].bg);
+ InitPair(pair, expected[pair].fg, expected[pair].bg);
}
}
}
static void
run_test(void)
{
- NCURSES_PAIRS_T pair;
+ int pair;
bool success = TRUE;
- for (pair = 1; (int) pair < l_opt; ++pair) {
- NCURSES_COLOR_T fg;
- NCURSES_COLOR_T bg;
- if (pair_content(pair, &fg, &bg) == OK) {
+ for (pair = 1; pair < l_opt; ++pair) {
+ my_color_t fg;
+ my_color_t bg;
+ if (PairContent(pair, &fg, &bg) == OK) {
if (expected != 0) {
if (fg != expected[pair].fg)
success = FALSE;
"Usage: pair_content [options]"
,""
,"Options:"
+ ," -f PAIR first color pair to test (default: 1)"
," -i interactive, showing test-progress"
- ," -l NUM test NUM color pairs, rather than terminal description"
+ ," -l PAIR last color pair to test (default: max_pairs-1)"
," -n do not initialize color pairs"
+ ," -p print data for color pairs instead of testing"
," -r COUNT repeat for given count"
," -s initialize pairs sequentially rather than random"
+#if USE_EXTENDED_COLOR
+ ," -x use extended color pairs/values"
+#endif
};
size_t n;
for (n = 0; n < SIZEOF(msg); n++)
int i;
int repeat;
- while ((i = getopt(argc, argv, "il:nr:s")) != -1) {
+ while ((i = getopt(argc, argv, "f:il:npr:sx")) != -1) {
switch (i) {
+ case 'f':
+ if ((f_opt = atoi(optarg)) <= 0)
+ usage();
+ break;
case 'i':
i_opt = 1;
break;
case 'n':
n_opt = 1;
break;
+ case 'p':
+ p_opt = 1;
+ break;
case 'r':
if ((r_opt = atoi(optarg)) <= 0)
usage();
case 's':
s_opt = 1;
break;
+#if USE_EXTENDED_COLOR
+ case 'x':
+ x_opt = 1;
+ break;
+#endif
default:
usage();
}
r_opt = 1;
setup_test();
+ if (p_opt) {
+ endwin();
+ for (i = f_opt; i < l_opt; ++i) {
+ my_color_t fg, bg;
+ if (PairContent(i, &fg, &bg) == OK) {
+ printf("%d: %d %d\n", i, fg, bg);
+ } else {
+ printf("%d: ? ?\n", i);
+ }
+ }
+ } else {
- for (repeat = 0; repeat < r_opt; ++repeat) {
- run_test();
- if (i_opt) {
- addch('.');
- refresh();
+ for (repeat = 0; repeat < r_opt; ++repeat) {
+ run_test();
+ if (i_opt) {
+ addch('.');
+ refresh();
+ }
}
- }
- if (i_opt) {
- addch('\n');
- }
- printw("DONE: ");
+ if (i_opt) {
+ addch('\n');
+ }
+ printw("DONE: ");
#if HAVE_GETTIMEOFDAY
- gettimeofday(&finish_time, 0);
- printw("%.03f seconds",
- seconds(&finish_time)
- - seconds(&initial_time));
+ gettimeofday(&finish_time, 0);
+ printw("%.03f seconds",
+ seconds(&finish_time)
+ - seconds(&initial_time));
#endif
- finish_test();
+ finish_test();
+ }
ExitProgram(EXIT_SUCCESS);
}