* wrs(5/28/93) -- modified to be consistent (perform identically) with either
* PDCurses or under Unix System V, R4
*
- * $Id: testcurs.c,v 1.22 2000/06/17 23:23:34 tom Exp $
+ * $Id: testcurs.c,v 1.38 2008/04/12 22:00:27 tom Exp $
*/
#include <test.priv.h>
-#include <ctype.h>
#if defined(XCURSES)
char *XCursesProgramName = "testcurs";
};
typedef struct commands COMMAND;
-const COMMAND command[] =
+static const COMMAND command[] =
{
- {"Intro Test", introTest},
+ {"General Test", introTest},
{"Pad Test", padTest},
#if defined(PDCURSES) && !defined(XCURSES)
{"Resize Test", resizeTest},
{"Input Test", inputTest},
{"Output Test", outputTest}
};
-#define MAX_OPTIONS ((sizeof(command)/sizeof(command[0])))
+#define MAX_OPTIONS SIZEOF(command)
-int width, height;
+#if !HAVE_STRDUP
+#define strdup my_strdup
+static char *
+strdup(char *s)
+{
+ char *p = typeMalloc(char, strlen(s) + 1);
+ if (p)
+ strcpy(p, s);
+ return (p);
+}
+#endif /* not HAVE_STRDUP */
+
+static int width, height;
int
main(
- int argc GCC_UNUSED,
- char *argv[]GCC_UNUSED)
+ int argc GCC_UNUSED,
+ char *argv[]GCC_UNUSED)
{
WINDOW *win;
- int key, old_option = (-1), new_option = 0;
+ int key;
+ int old_option = (-1);
+ int new_option = 0;
bool quit = FALSE;
+ unsigned n;
+
+ setlocale(LC_ALL, "");
#ifdef PDCDEBUG
PDC_debug("testcurs started\n");
#endif
if (!initTest(&win))
- return EXIT_FAILURE;
+ ExitProgram(EXIT_FAILURE);
erase();
display_menu(old_option, new_option);
- while (1) {
+ for (;;) {
#ifdef A_COLOR
if (has_colors()) {
init_pair(1, COLOR_WHITE, COLOR_BLUE);
keypad(stdscr, TRUE);
raw();
key = getch();
+ if (key < KEY_MIN && key > 0 && isalpha(key)) {
+ if (islower(key))
+ key = toupper(key);
+ for (n = 0; n < MAX_OPTIONS; ++n) {
+ if (key == command[n].text[0]) {
+ display_menu(old_option, new_option = n);
+ key = ' ';
+ break;
+ }
+ }
+ }
switch (key) {
case 10:
case 13:
quit = TRUE;
break;
default:
+ beep();
+ break;
+ case ' ':
break;
}
if (quit == TRUE)
#ifdef XCURSES
XCursesExit();
#endif
- return EXIT_SUCCESS;
+ ExitProgram(EXIT_SUCCESS);
}
static void
int x1 = getmaxx(win);
int y0 = y1 < 10 ? y1 : 10;
int x0 = 1;
- long save;
+ chtype save;
save = mvwinch(win, y0, x1 - 1);
wrefresh(win);
cbreak();
mvwaddstr(win, 1, 1,
- "You should have rectangle in the middle of the screen");
+ "You should have rectangle in the middle of the screen");
mvwaddstr(win, 2, 1, "You should have heard a beep");
Continue(win);
return;
{
int i;
int half;
- int OldX, OldY;
+ int OldY;
NCURSES_CONST char *Message = "The window will now scroll slowly";
wclear(win);
- getmaxyx(win, OldY, OldX);
+ OldY = getmaxy(win);
half = OldY / 2;
mvwprintw(win, OldY - 2, 1, Message);
wrefresh(win);
static void
inputTest(WINDOW *win)
{
+ int answered;
+ int repeat;
int w, h, bx, by, sw, sh, i, c, num;
char buffer[80];
WINDOW *subWin;
mvwaddstr(win, 1, 1, "Press keys (or mouse buttons) to show their names");
mvwaddstr(win, 2, 1, "Press spacebar to finish");
wrefresh(win);
+
keypad(win, TRUE);
raw();
noecho();
+
+#if HAVE_TYPEAHEAD
typeahead(-1);
+#endif
+
#if defined(PDCURSES)
mouse_set(ALL_MOUSE_EVENTS);
#endif
- while (1) {
+
+ for (;;) {
wmove(win, 3, 5);
c = wgetch(win);
wclrtobot(win);
else if (isprint(c))
wprintw(win, "Key Pressed: %c", c);
else
- wprintw(win, "Key Pressed: %s", unctrl(c));
+ wprintw(win, "Key Pressed: %s", unctrl(UChar(c)));
#if defined(PDCURSES)
if (c == KEY_MOUSE) {
int button = 0;
mouse_set(0L);
#endif
refresh();
- wclear(win);
- mvwaddstr(win, 3, 2, "The window should have moved");
- mvwaddstr(win, 4, 2,
- "This text should have appeared without you pressing a key");
- mvwaddstr(win, 6, 2, "Enter a number then a string separated by space");
- mvwin(win, 2, 1);
- wrefresh(win);
- echo();
- noraw();
- num = 0;
- *buffer = 0;
- mvwscanw(win, 7, 6, "%d %s", &num, buffer);
- mvwprintw(win, 8, 6, "String: %s Number: %d", buffer, num);
- Continue(win);
+
+ repeat = 0;
+ do {
+ static const char *fmt[] =
+ {
+ "%d %10s",
+ "%d %[a-zA-Z]s",
+ "%d %[][a-zA-Z]s",
+ "%d %[^0-9]"
+ };
+ const char *format = fmt[repeat % SIZEOF(fmt)];
+
+ wclear(win);
+ mvwaddstr(win, 3, 2, "The window should have moved");
+ mvwaddstr(win, 4, 2,
+ "This text should have appeared without you pressing a key");
+ mvwprintw(win, 6, 2,
+ "Scanning with format \"%s\"", format);
+ mvwin(win, 2 + 2 * (repeat % 4), 1 + 2 * (repeat % 4));
+ erase();
+ refresh();
+ wrefresh(win);
+ echo();
+ noraw();
+ num = 0;
+ *buffer = 0;
+ answered = mvwscanw(win, 7, 6, strdup(format), &num, buffer);
+ mvwprintw(win, 8, 6,
+ "String: %s Number: %d (%d values read)",
+ buffer, num, answered);
+ Continue(win);
+ ++repeat;
+ } while (answered > 0);
}
static void
chtype ch;
int by, bx;
+#if !HAVE_TIGETSTR
+#if HAVE_TGETENT
+ char tc_buffer[4096];
+ char tc_parsed[4096];
+ char *area_pointer = tc_parsed;
+ tgetent(tc_buffer, getenv("TERM"));
+#else
+#define tgetstr(a,b) 0
+#endif
+#endif /* !HAVE_TIGETSTR */
+
nl();
wclear(win);
mvwaddstr(win, 1, 1,
- "You should now have a screen in the upper left corner, and this text should have wrapped");
+ "You should now have a screen in the upper left corner, and this text should have wrapped");
mvwin(win, 2, 1);
waddstr(win, "\nThis text should be down\n");
waddstr(win, "and broken into two here ^");
if (LINES < 24 || COLS < 75) {
mvwaddstr(win, 5, 1,
- "Some tests have been skipped as they require a");
+ "Some tests have been skipped as they require a");
mvwaddstr(win, 6, 1, "display of at least 24 LINES by 75 COLUMNS");
Continue(win);
} else {
#endif
wclear(win1);
mvwaddstr(win1, 5, 1,
- "This text should appear; using overlay option");
+ "This text should appear; using overlay option");
copywin(win, win1, 0, 0, 0, 0, 9, 49, TRUE);
#if defined(PDCURSES) && !defined(XCURSES)
wclear(win1);
wattron(win1, A_BLINK);
mvwaddstr(win1, 4, 1,
- "This blinking text should appear in only the second window");
+ "This blinking text should appear in only the second window");
wattroff(win1, A_BLINK);
mvwin(win1, by, bx);
overlay(win, win1);
winsch(win, ch);
Continue(win);
+#if HAVE_WINSSTR
mvwinsstr(win, 6, 2, "A1B2C3D4E5");
Continue(win);
+#endif
wmove(win, 5, 1);
winsertln(win);
wclear(win);
wmove(win, 2, 2);
wprintw(win, "This is a formatted string in a window: %d %s\n", 42,
- "is it");
+ "is it");
mvwaddstr(win, 10, 1, "Enter a string: ");
wrefresh(win);
noraw();
*Buffer = 0;
scanw("%s", Buffer);
- if (tigetstr("cvvis") != 0) {
+ if (TIGETSTR("cvvis", "vs") != 0) {
wclear(win);
curs_set(2);
mvwaddstr(win, 1, 1, "The cursor should appear as a block (visible)");
Continue(win);
}
- if (tigetstr("civis") != 0) {
+ if (TIGETSTR("civis", "vi") != 0) {
wclear(win);
curs_set(0);
mvwaddstr(win, 1, 1,
- "The cursor should have disappeared (invisible)");
+ "The cursor should have disappeared (invisible)");
Continue(win);
}
- if (tigetstr("cnorm") != 0) {
+ if (TIGETSTR("cnorm", "ve") != 0) {
wclear(win);
curs_set(1);
mvwaddstr(win, 1, 1, "The cursor should be an underline (normal)");
#endif
werase(win);
+
+#if HAVE_TERMNAME
mvwaddstr(win, 1, 1, "Information About Your Terminal");
mvwaddstr(win, 3, 1, termname());
mvwaddstr(win, 4, 1, longname());
mvwaddstr(win, 5, 1, "This terminal supports blinking.");
else
mvwaddstr(win, 5, 1, "This terminal does NOT support blinking.");
+#endif
mvwaddnstr(win, 7, 5, "Have a nice day!ok", 16);
wrefresh(win);
mvwaddstr(pad, 5, 2, "This is a new pad");
wattrset(pad, A_NORMAL);
mvwaddstr(pad, 8, 0,
- "The end of this line should be truncated here:except now");
+ "The end of this line should be truncated here:except now");
mvwaddstr(pad, 11, 1, "This line should not appear.It will now");
wmove(pad, 10, 1);
wclrtoeol(pad);
static void
display_menu(int old_option, int new_option)
{
- register size_t i;
+ int i;
attrset(A_NORMAL);
mvaddstr(3, 20, "PDCurses Test Program");
- for (i = 0; i < MAX_OPTIONS; i++)
+ for (i = 0; i < (int) MAX_OPTIONS; i++)
mvaddstr(5 + i, 25, command[i].text);
if (old_option != (-1))
mvaddstr(5 + old_option, 25, command[old_option].text);
mvaddstr(5 + new_option, 25, command[new_option].text);
attrset(A_NORMAL);
mvaddstr(13, 3,
- "Use Up and Down Arrows to select - Enter to run - Q to quit");
+ "Use Up and Down Arrows to select - Enter to run - Q to quit");
refresh();
}