* 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.34 2005/04/16 16:19:12 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 = (char *) malloc(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;
#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
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);
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();
wclear(win);
curs_set(0);
mvwaddstr(win, 1, 1,
- "The cursor should have disappeared (invisible)");
+ "The cursor should have disappeared (invisible)");
Continue(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();
}