ncurses 6.0 - patch 20151017
[ncurses.git] / test / clip_printw.c
index 7af637cc9597a593d2fcf154580aff20ca1a2e78..d40bf014202f472203d27528ad05d486a341f6c1 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 2008 Free Software Foundation, Inc.                        *
+ * Copyright (c) 2008-2012,2014 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: clip_printw.c,v 1.1 2008/12/20 21:03:06 tom Exp $
+ * $Id: clip_printw.c,v 1.10 2014/08/02 23:13:29 tom Exp $
  *
  * demonstrate how to use printw without wrapping.
  */
 
 #include <test.priv.h>
 
+#ifdef HAVE_VW_PRINTW
+
 #define SHOW(n) ((n) == ERR ? "ERR" : "OK")
 #define COLOR_DEFAULT (-1)
 
@@ -41,7 +43,7 @@ typedef struct {
     unsigned v;
     int status;
     int pair;
-    unsigned attr;
+    attr_t attr;
     int count;
     int ch;
     const char *c_msg;
@@ -53,7 +55,7 @@ typedef struct {
 } STATUS;
 
 static int
-clip_wprintw(WINDOW *win, const char *fmt,...)
+clip_wprintw(WINDOW *win, NCURSES_CONST char *fmt,...)
 {
     int y0, x0, y1, x1, width;
     WINDOW *sub;
@@ -109,7 +111,9 @@ color_params(unsigned state, int *pair)
 
            start_color();
            for (n = 0; n < SIZEOF(table); ++n) {
-               init_pair(table[n].pair, table[n].fg, table[n].bg);
+               init_pair((short) table[n].pair,
+                         (short) table[n].fg,
+                         (short) table[n].bg);
            }
        }
        if (state < SIZEOF(table)) {
@@ -121,11 +125,11 @@ color_params(unsigned state, int *pair)
 }
 
 static const char *
-video_params(unsigned state, unsigned *attr)
+video_params(unsigned state, attr_t *attr)
 {
     /* *INDENT-OFF* */
     static struct {
-       unsigned attr;
+       attr_t attr;
        const char *msg;
     } table[] = {
        { A_NORMAL,     "normal" },
@@ -150,10 +154,17 @@ static void
 fill_window(WINDOW *win)
 {
     int y, x;
+    int y0 = -1, x0 = -1;
 
     getyx(win, y, x);
     wmove(win, 0, 0);
     while (waddstr(win, "0123456789 abcdefghijklmnopqrstuvwxyz ") != ERR) {
+       int y1, x1;
+       getyx(win, y1, x1);
+       if (y1 == y0 && x1 == x0)
+           break;
+       x0 = x1;
+       y0 = y1;
     }
     wmove(win, y, x);
 }
@@ -196,6 +207,8 @@ do_subwindow(WINDOW *win, STATUS * sp, void func(WINDOW *))
        delwin(win1);
        touchwin(win);
     } else {
+       if (win1)
+           delwin(win1);
        beep();
     }
 }
@@ -238,7 +251,7 @@ show_help(WINDOW *win)
 
     getmaxyx(win, y_max, x_max);
     for (row = 0; row < (int) SIZEOF(table) && row < y_max; ++row) {
-       mvwprintw(win, row, 0, "%.*s", x_max, table[row]);
+       MvWPrintw(win, row, 0, "%.*s", x_max, table[row]);
     }
     while (wgetch(win) != 'q')
        beep();
@@ -318,20 +331,21 @@ test_clipping(WINDOW *win)
     do {
        switch (st.ch) {
        case '.':               /* change from current position */
-           wattrset(win, st.attr | COLOR_PAIR(st.pair));
+           (void) wattrset(win, AttrArg(COLOR_PAIR(st.pair), st.attr));
            if (st.count > 0) {
-               need = st.count + 1;
+               need = (unsigned) st.count + 1;
                sprintf(fmt, "%%c%%%ds%%c", st.count);
            } else {
-               need = getmaxx(win) - 1;
+               need = (unsigned) getmaxx(win) - 1;
                strcpy(fmt, "%c%s%c");
            }
-           if ((buffer = typeMalloc(char, need)) != 0) {
+           if ((buffer = typeMalloc(char, need + 1)) != 0) {
                for (j = 0; j < need; ++j) {
-                   buffer[j] = 'A' + (j % 26);
+                   buffer[j] = (char) ('A' + (j % 26));
                }
                buffer[need - 1] = '\0';
                st.status = clip_wprintw(win, fmt, '[', buffer, ']');
+               free(buffer);
            }
            break;
        case 'w':
@@ -358,3 +372,12 @@ main(int argc GCC_UNUSED, char *argv[]GCC_UNUSED)
 
     ExitProgram(EXIT_SUCCESS);
 }
+
+#else
+int
+main(void)
+{
+    printf("This program requires the curses vw_printw function\n");
+    ExitProgram(EXIT_FAILURE);
+}
+#endif