]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - test/picsmap.c
ncurses 6.0 - patch 20171118
[ncurses.git] / test / picsmap.c
index 196cf44692156c7ddf44637e137bb9021bb78b2b..be8903ab3bf55b0a174ba2eb9c33227851940f32 100644 (file)
@@ -26,7 +26,7 @@
  * authorization.                                                           *
  ****************************************************************************/
 /*
- * $Id: picsmap.c,v 1.100 2017/08/19 23:42:27 tom Exp $
+ * $Id: picsmap.c,v 1.108 2017/11/19 02:56:12 tom Exp $
  *
  * Author: Thomas E. Dickey
  *
@@ -49,7 +49,6 @@
  */
 #include <test.priv.h>
 
-#include <stdarg.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 
 
 #define RGB_PATH "/etc/X11/rgb.txt"
 
-typedef int NUM_COLOR;
-typedef unsigned short NUM_COUNT;
-
-typedef struct {
-    char ch;                   /* nominal character to display */
-    NUM_COLOR fg;              /* foreground color */
-} PICS_CELL;
-
-typedef struct {
-    NUM_COLOR fgcol;
-    NUM_COUNT count;
-} FG_NODE;
-
-typedef struct {
-    char *name;
-    short high;
-    short wide;
-    int colors;
-    FG_NODE *fgcol;
-    PICS_CELL *cells;
-} PICS_HEAD;
-
-typedef struct {
-    const char *name;
-    int value;
-} RGB_NAME;
-
-typedef struct {
-    short red;
-    short green;
-    short blue;
-} RGB_DATA;
+#include <picsmap.h>
 
 typedef struct {
     size_t file;
@@ -529,7 +497,10 @@ usage(void)
        ,"Read/display one or more xbm/xpm files (possibly use \"convert\")"
        ,""
        ,"Options:"
-       ,"  -d           add debugging information to logfile"
+#if HAVE_USE_DEFAULT_COLORS
+       ,"  -d           invoke use_default_colors"
+#endif
+       ,"  -L           add debugging information to logfile"
        ,"  -l logfile   write informational messages to logfile"
        ,"  -p palette   color-palette file (default \"$TERM.dat\")"
        ,"  -q           less verbose"
@@ -654,17 +625,23 @@ init_palette(const char *palette_file)
 {
     if (palette_file != 0) {
        char **data = read_palette(palette_file);
-       int cp;
 
        all_colors = typeMalloc(RGB_DATA, (unsigned) COLORS);
        how_much.data += (sizeof(RGB_DATA) * (unsigned) COLORS);
 
-       for (cp = 0; cp < COLORS; ++cp) {
-           color_content((short) cp,
-                         &all_colors[cp].red,
-                         &all_colors[cp].green,
-                         &all_colors[cp].blue);
+#if HAVE_COLOR_CONTENT
+       {
+           int cp;
+           for (cp = 0; cp < COLORS; ++cp) {
+               color_content((short) cp,
+                             &all_colors[cp].red,
+                             &all_colors[cp].green,
+                             &all_colors[cp].blue);
+           }
        }
+#else
+       memset(all_colors, 0, sizeof(RGB_DATA) * (size_t) COLORS);
+#endif
        if (data != 0) {
            int n;
            int red, green, blue;
@@ -1460,6 +1437,29 @@ dump_picture(PICS_HEAD * pics)
     }
 }
 
+#ifndef USE_DISPLAY_DRIVER
+static void
+init_display(const char *palette_path, int opt_d)
+{
+    if (isatty(fileno(stdout))) {
+       in_curses = TRUE;
+       initscr();
+       cbreak();
+       noecho();
+       curs_set(0);
+       if (has_colors()) {
+           start_color();
+#if HAVE_USE_DEFAULT_COLORS
+           if (opt_d)
+               use_default_colors();
+#endif
+           init_palette(palette_path);
+       }
+       scrollok(stdscr, FALSE);
+       exit_curses();
+    }
+}
+
 static void
 show_picture(PICS_HEAD * pics)
 {
@@ -1470,7 +1470,7 @@ show_picture(PICS_HEAD * pics)
     debugmsg("called show_picture");
 #if USE_EXTENDED_COLORS
     reset_color_pairs();
-#else
+#elif HAVE_CURSCR
     wclear(curscr);
     clear();
 #endif
@@ -1528,11 +1528,13 @@ show_picture(PICS_HEAD * pics)
 #endif
        }
     } else {
-       mvgetch(0, 0);
+       wmove(stdscr, 0, 0);
+       getch();
     }
     if (!quiet)
        endwin();
 }
+#endif
 
 static int
 compare_fg_counts(const void *a, const void *b)
@@ -1631,12 +1633,18 @@ int
 main(int argc, char *argv[])
 {
     int n;
+    int opt_d = FALSE;
     const char *palette_path = 0;
     const char *rgb_path = "/etc/X11/rgb.txt";
 
-    while ((n = getopt(argc, argv, "dl:p:qr:s:x:")) != -1) {
+    while ((n = getopt(argc, argv, "dLl:p:qr:s:x:")) != -1) {
        switch (n) {
+#if HAVE_USE_DEFAULT_COLORS
        case 'd':
+           opt_d = TRUE;
+           break;
+#endif
+       case 'L':
            debugging = TRUE;
            break;
        case 'l':
@@ -1687,19 +1695,7 @@ main(int argc, char *argv[])
        if (rgb_data)
            rgb_table = parse_rgb(rgb_data);
 
-       if (isatty(fileno(stdout))) {
-           in_curses = TRUE;
-           initscr();
-           cbreak();
-           noecho();
-           curs_set(0);
-           if (has_colors()) {
-               start_color();
-               init_palette(palette_path);
-           }
-           scrollok(stdscr, FALSE);
-           endwin();
-       }
+       init_display(palette_path, opt_d);
        if (optind >= argc)
            giveup("expected at least one image filename");