No, I tell a lie: GTK 1 _does_ support icons, at least partially. Ooh.
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 6 Jan 2007 18:27:00 +0000 (18:27 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 6 Jan 2007 18:27:00 +0000 (18:27 +0000)
git-svn-id: svn://svn.tartarus.org/sgt/putty@7064 cda61777-01e9-0310-a592-d414129be87e

unix/gtkdlg.c
unix/gtkwin.c
unix/xpmptcfg.c [new file with mode: 0644]
unix/xpmpterm.c [new file with mode: 0644]
unix/xpmpucfg.c [new file with mode: 0644]
unix/xpmputty.c [new file with mode: 0644]

index ba24e9c..875512a 100644 (file)
@@ -2216,6 +2216,16 @@ int do_config_box(const char *title, Config *cfg, int midsession,
     dp.retval = 0;
     dp.window = window;
 
+    {
+       /* in gtkwin.c */
+       extern void set_window_icon(GtkWidget *window,
+                                   const char *const *const *icon,
+                                   int n_icon);
+       extern const char *const *const cfg_icon[];
+       extern const int n_cfg_icon;
+       set_window_icon(window, cfg_icon, n_cfg_icon);
+    }
+
     gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
     gtk_widget_show(window);
 
index c4c255a..11c9c21 100644 (file)
@@ -3301,6 +3301,35 @@ static void update_savedsess_menu(GtkMenuItem *menuitem, gpointer data)
     get_sesslist(&sesslist, FALSE); /* free up */
 }
 
+void set_window_icon(GtkWidget *window, const char *const *const *icon,
+                    int n_icon)
+{
+    GdkPixmap *iconpm;
+#if GTK_CHECK_VERSION(2,0,0)
+    GList *iconlist;
+    int n;
+#endif
+
+    if (!n_icon)
+       return;
+
+    gtk_widget_realize(window);
+    iconpm = gdk_pixmap_create_from_xpm_d(window->window, NULL,
+                                         NULL, (gchar **)icon[0]);
+    gdk_window_set_icon(window->window, NULL, iconpm, NULL);
+
+#if GTK_CHECK_VERSION(2,0,0)
+    iconlist = NULL;
+    for (n = 0; n < n_icon; n++) {
+       iconlist =
+           g_list_append(iconlist,
+                         gdk_pixbuf_new_from_xpm_data((const gchar **)
+                                                      icon[n]));
+    }
+    gdk_window_set_icon_list(window->window, iconlist);
+#endif
+}
+
 void update_specials_menu(void *frontend)
 {
     struct gui_data *inst = (struct gui_data *)frontend;
@@ -3552,6 +3581,12 @@ int pt_main(int argc, char **argv)
                          GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
                          GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK);
 
+    {
+       extern const char *const *const main_icon[];
+       extern const int n_main_icon;
+       set_window_icon(inst->window, main_icon, n_main_icon);
+    }
+
     gtk_widget_show(inst->window);
 
     set_window_background(inst);
diff --git a/unix/xpmptcfg.c b/unix/xpmptcfg.c
new file mode 100644 (file)
index 0000000..e020a49
--- /dev/null
@@ -0,0 +1,150 @@
+/* XPM */
+static const char *const cfg_icon_0[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 9 1",
+"  c black",
+". c navy",
+"X c blue",
+"o c #808000",
+"O c yellow",
+"+ c #808080",
+"@ c #C0C0C0",
+"# c gray100",
+"$ c None",
+/* pixels */
+"$$$  $$$$$$$$$$$",
+"$$ OO $$$$$$$$$$",
+"$ $ oO      $$$$",
+" o #+oO+##@+ $$$",
+" oO+.OO.XX@+ $$$",
+"$ oOOOO.XX@+ $$$",
+"$$ oooOO.X@+ $$$",
+"$$ +..oOO.@+ $$$",
+"$$ #XX.oOO++ $$$",
+"$$ @@@@+oOO   $$",
+"$ ++++++ oOO++ $",
+" ########+oOO  $",
+" #@@@@@+++ oOO $",
+"$           oOO ",
+"$$$$$$$$$$$$ oO ",
+"$$$$$$$$$$$$$  $"
+};
+
+/* XPM */
+static const char *const cfg_icon_1[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 9 1",
+"  c black",
+". c navy",
+"X c blue",
+"o c #808000",
+"O c yellow",
+"+ c #808080",
+"@ c #C0C0C0",
+"# c gray100",
+"$ c None",
+/* pixels */
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$  $$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$ OO  $$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$ ooOO $$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$ ooOO             $$$$$$$$",
+"$$  $$$ oOO @@@@@@@@@@@+ $$$$$$$",
+"$ oO $  oOOO @@@@@@@@@++ $$$$$$$",
+"$ oOO  oOOOO #######@+++ $$$$$$$",
+"$$ oOOOOOOO ........@+++ $$$$$$$",
+"$$ ooOOOOOOO XXXXXXX@+++ $$$$$$$",
+"$$$ ooooooOOO XXXXXX@+++ $$$$$$$",
+"$$$$  oo ooOOO XXXXX@+++ $$$$$$$",
+"$$$$$   X ooOOO XXXX@+++ $$$$$$$",
+"$$$$$ #.XX ooOOO XXX@+++ $$$$$$$",
+"$$$$$ #.XXX ooOOO XX@+++ $$$$$$$",
+"$$$$$ #.XXXX ooOOO X@+++ $$$$$$$",
+"$$$$$ #.XXXXX ooOOO @+++ $$$$$$$",
+"$$$$$ ######## ooOOO +++ $$$$$$$",
+"$$$$$ #@@@@@@@@ ooOOO +      $$$",
+"$$$$  @+++++++++ ooOOO @@@@#+ $$",
+"$$$ @             ooOOO @@#++ $$",
+"$$ @@@@@@@@@@@@@@@ ooOOO #+++ $$",
+"$ ################# ooOOO +++ $$",
+"$ #@@@@@@@@@@@@@@@@@ ooOOO ++ $$",
+"$ #@@@@@@@@@@@@+      ooOOO  $$$",
+"$ @+++++++++++++++++++ ooOOO $$$",
+"$$                      ooOOO $$",
+"$$$$$$$$$$$$$$$$$$$$$$$$ ooO $$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$ o $$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"
+};
+
+/* XPM */
+static const char *const cfg_icon_2[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 9 1",
+"  c black",
+". c navy",
+"X c blue",
+"o c #808000",
+"O c yellow",
+"+ c #808080",
+"@ c #C0C0C0",
+"# c gray100",
+"$ c None",
+/* pixels */
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$ OO   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$ oOOOO $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$ ooOOO $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$ ooOOO $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$ oOOO                     $$$$$$$$$$$",
+"$$$  $$$$$$ oOOO @@@@@@@@@@@@@@@@@@@+ $$$$$$$$$$",
+"$$ oO $$$$$ oOOOO @@@@@@@@@@@@@@@@@++ $$$$$$$$$$",
+"$$ ooO $$$  oOOOO @@@@@@@@@@@@@@@@+++ $$$$$$$$$$",
+"$$$ oOO    OOOOO ###############@++++ $$$$$$$$$$",
+"$$$ ooOOOOOOOOOOO +++++++++++++@+++++ $$$$$$$$$$",
+"$$$ ooOOOOOOOOOOOO ............#+++++ $$$$$$$$$$",
+"$$$$ oooOOOOoOOOOOO XXXXXXXXXXX#+++++ $$$$$$$$$$",
+"$$$$$ oooooooOOOOOOO XXXXXXXXXX#+++++ $$$$$$$$$$",
+"$$$$$$   oo ooOOOOOOO XXXXXXXXX#+++++ $$$$$$$$$$",
+"$$$$$$$$$  + ooOOOOOOO XXXXXXXX#+++++ $$$$$$$$$$",
+"$$$$$$$$$ #+. ooOOOOOOO XXXXXXX#+++++ $$$$$$$$$$",
+"$$$$$$$$$ #+.X ooOOOOOOO XXXXXX#+++++ $$$$$$$$$$",
+"$$$$$$$$$ #+.XX ooOOOOOOO XXXXX#+++++ $$$$$$$$$$",
+"$$$$$$$$$ #+.XXX ooOOOOOOO XXXX#+++++ $$$$$$$$$$",
+"$$$$$$$$$ #+.XXXX ooOOOOOOO XXX#+++++ $$$$$$$$$$",
+"$$$$$$$$$ #+.XXXXX ooOOOOOOO XX#+++++ $$$$$$$$$$",
+"$$$$$$$$$ #+.XXXXXX ooOOOOOOO X#+++++ $$$$$$$$$$",
+"$$$$$$$$$ #+.XXXXXXX ooOOOOOOO #+++++ $$$$$$$$$$",
+"$$$$$$$$$ #+.XXXXXXXX ooOOOOOOO +++++ $$$$$$$$$$",
+"$$$$$$$$$ #@########## ooOOOOOOO ++++ $$$$$$$$$$",
+"$$$$$$$$  #@@@@@@@@@@@@ ooOOOOOOO ++        $$$$",
+"$$$$$$$ @ #@@@@@@@@@@@@@ ooOOOOOOO  @@@@@##+ $$$",
+"$$$$$$ @@ @++++++++++++++ ooOOOOOOO @@@@##++ $$$",
+"$$$$$ @@@                  ooOOOOOOO @@##+++ $$$",
+"$$$$ @@@@@@@@@@@@@@@@@@@@@@ ooOOOOOOO ##++++ $$$",
+"$$$ ######################## ooOOOOOOO @++++ $$$",
+"$$$ ######################### ooOOOOOOO ++++ $$$",
+"$$$ ##@@@@@@@@@@@@@@@@@@@@@@@@ ooOOOOOOO +++ $$$",
+"$$$ ##@@@@@@@@@@@@@@@@@@@@@@@@@ ooOOOOOOO + $$$$",
+"$$$ ##@@@@@@@@@@@@@@@@@@         ooOOOOOOO $$$$$",
+"$$$ @@+++++++++++++++++++++++++++ ooOOOOOOO $$$$",
+"$$$$                               ooOOOOOOO $$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ooOOOOO $$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ooOOO $$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ooO $$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ o $$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"
+};
+
+const char *const *const cfg_icon[] = {
+    cfg_icon_0,
+    cfg_icon_1,
+    cfg_icon_2,
+};
+const int n_cfg_icon = 3;
diff --git a/unix/xpmpterm.c b/unix/xpmpterm.c
new file mode 100644 (file)
index 0000000..677aaf6
--- /dev/null
@@ -0,0 +1,143 @@
+/* XPM */
+static const char *const main_icon_0[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 6 1",
+"  c black",
+". c blue",
+"X c #808080",
+"o c #C0C0C0",
+"O c gray100",
+"+ c None",
+/* pixels */
+"++++++++++++++++",
+"++++++++++++++++",
+"+++         ++++",
+"++ OOOOOOOoX +++",
+"++ O......oX +++",
+"++ O......oX +++",
+"++ O......oX +++",
+"++ O......oX +++",
+"++ O......oX +++",
+"++ ooooooooX  ++",
+"+ XXXXXXXXXXOX +",
+" OOOOOOOOOOOoX +",
+" OoooooXXXXoXX +",
+"+             ++",
+"++++++++++++++++",
+"++++++++++++++++"
+};
+
+/* XPM */
+static const char *const main_icon_1[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 7 1",
+"  c black",
+". c navy",
+"X c blue",
+"o c #808080",
+"O c #C0C0C0",
+"+ c gray100",
+"@ c None",
+/* pixels */
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@                @@@@@@@@",
+"@@@@@@@ OOOOOOOOOOOOOOOo @@@@@@@",
+"@@@@@@ OOOOOOOOOOOOOOOoo @@@@@@@",
+"@@@@@ ++++++++++++++Oooo @@@@@@@",
+"@@@@@ +.............Oooo @@@@@@@",
+"@@@@@ +.XXXXXXXXXXXXOooo @@@@@@@",
+"@@@@@ +.XXXXXXXXXXXXOooo @@@@@@@",
+"@@@@@ +.XXXXXXXXXXXXOooo @@@@@@@",
+"@@@@@ +.XXXXXXXXXXXXOooo @@@@@@@",
+"@@@@@ +.XXXXXXXXXXXXOooo @@@@@@@",
+"@@@@@ +.XXXXXXXXXXXXOooo @@@@@@@",
+"@@@@@ +.XXXXXXXXXXXXOooo @@@@@@@",
+"@@@@@ +.XXXXXXXXXXXXOooo @@@@@@@",
+"@@@@@ ++++++++++++++Oooo @@@@@@@",
+"@@@@@ +OOOOOOOOOOOOOooo      @@@",
+"@@@@  Oooooooooooooooo OOOO+o @@",
+"@@@ O                 OOOO+oo @@",
+"@@ OOOOOOOOOOOOOOOOOOOOOO+ooo @@",
+"@ +++++++++++++++++++++++Oooo @@",
+"@ +OOOOOOOOOOOOOOOOOOOOOOoooo @@",
+"@ +OOOOOOOOOOOOo      oOOooo @@@",
+"@ Ooooooooooooooooooooooooo @@@@",
+"@@                         @@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
+};
+
+/* XPM */
+static const char *const main_icon_2[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 7 1",
+"  c black",
+". c navy",
+"X c blue",
+"o c #808080",
+"O c #C0C0C0",
+"+ c gray100",
+"@ c None",
+/* pixels */
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@                        @@@@@@@@@@@",
+"@@@@@@@@@@@@ OOOOOOOOOOOOOOOOOOOOOOOo @@@@@@@@@@",
+"@@@@@@@@@@@ OOOOOOOOOOOOOOOOOOOOOOOoo @@@@@@@@@@",
+"@@@@@@@@@@ OOOOOOOOOOOOOOOOOOOOOOOooo @@@@@@@@@@",
+"@@@@@@@@@ ++++++++++++++++++++++Ooooo @@@@@@@@@@",
+"@@@@@@@@@ +ooooooooooooooooooooOooooo @@@@@@@@@@",
+"@@@@@@@@@ +o...................+ooooo @@@@@@@@@@",
+"@@@@@@@@@ +o.XXXXXXXXXXXXXXXXXX+ooooo @@@@@@@@@@",
+"@@@@@@@@@ +o.XXXXXXXXXXXXXXXXXX+ooooo @@@@@@@@@@",
+"@@@@@@@@@ +o.XXXXXXXXXXXXXXXXXX+ooooo @@@@@@@@@@",
+"@@@@@@@@@ +o.XXXXXXXXXXXXXXXXXX+ooooo @@@@@@@@@@",
+"@@@@@@@@@ +o.XXXXXXXXXXXXXXXXXX+ooooo @@@@@@@@@@",
+"@@@@@@@@@ +o.XXXXXXXXXXXXXXXXXX+ooooo @@@@@@@@@@",
+"@@@@@@@@@ +o.XXXXXXXXXXXXXXXXXX+ooooo @@@@@@@@@@",
+"@@@@@@@@@ +o.XXXXXXXXXXXXXXXXXX+ooooo @@@@@@@@@@",
+"@@@@@@@@@ +o.XXXXXXXXXXXXXXXXXX+ooooo @@@@@@@@@@",
+"@@@@@@@@@ +o.XXXXXXXXXXXXXXXXXX+ooooo @@@@@@@@@@",
+"@@@@@@@@@ +o.XXXXXXXXXXXXXXXXXX+ooooo @@@@@@@@@@",
+"@@@@@@@@@ +o.XXXXXXXXXXXXXXXXXX+ooooo @@@@@@@@@@",
+"@@@@@@@@@ +o.XXXXXXXXXXXXXXXXXX+ooooo @@@@@@@@@@",
+"@@@@@@@@@ +O++++++++++++++++++++ooooo @@@@@@@@@@",
+"@@@@@@@@  +OOOOOOOOOOOOOOOOOOOOOoooo        @@@@",
+"@@@@@@@ O +OOOOOOOOOOOOOOOOOOOOOooo OOOOO++o @@@",
+"@@@@@@ OO Oooooooooooooooooooooooo OOOOO++oo @@@",
+"@@@@@ OOO                         OOOOO++ooo @@@",
+"@@@@ OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO++oooo @@@",
+"@@@ +++++++++++++++++++++++++++++++++++Ooooo @@@",
+"@@@ ++++++++++++++++++++++++++++++++++Oooooo @@@",
+"@@@ ++OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooo @@@",
+"@@@ ++OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooo @@@@",
+"@@@ ++OOOOOOOOOOOOOOOOOO          oOOOoooo @@@@@",
+"@@@ OOooooooooooooooooooooooooooooooooooo @@@@@@",
+"@@@@                                     @@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
+};
+
+const char *const *const main_icon[] = {
+    main_icon_0,
+    main_icon_1,
+    main_icon_2,
+};
+const int n_main_icon = 3;
diff --git a/unix/xpmpucfg.c b/unix/xpmpucfg.c
new file mode 100644 (file)
index 0000000..c3f2ace
--- /dev/null
@@ -0,0 +1,150 @@
+/* XPM */
+static const char *const cfg_icon_0[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 9 1",
+"  c black",
+". c navy",
+"X c blue",
+"o c #808000",
+"O c yellow",
+"+ c #808080",
+"@ c #C0C0C0",
+"# c gray100",
+"$ c None",
+/* pixels */
+"$$$  $       $$$",
+"$$ OO #####@+ $$",
+"$ $ oO+XXX.++ $$",
+" o $ oO.X.O++ $$",
+" oO  OO .O.@+  $",
+"$ oOOOOoO+@@+++ ",
+"$$ oooOOoO ++@+ ",
+"$$  oooOO +++++ ",
+"$ ##+OooOO     $",
+"$ #.O..+oOO $$$$",
+"$ +O.XX@ oOO $$$",
+"$ +.XXX@+ oOO $$",
+"$ @@@@@@++ oOO $",
+" ++++++++@+ oOO ",
+" #@@@@+++++  oO ",
+"$          $$  $"
+};
+
+/* XPM */
+static const char *const cfg_icon_1[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 9 1",
+"  c black",
+". c navy",
+"X c blue",
+"o c #808000",
+"O c yellow",
+"+ c #808080",
+"@ c #C0C0C0",
+"# c gray100",
+"$ c None",
+/* pixels */
+"$$$$$$$$$$$$$$$$            $$$$",
+"$$$$$$  $$$$$$$ @@@@@@@@@@@+ $$$",
+"$$$$$ OO  $$$$ ##########@++ $$$",
+"$$$$$ ooOO $$$ #.........@++ $$$",
+"$$$$$$ ooOO $$ #.XXXXXXXX@++ $$$",
+"$$  $$$ oOO $$ #.XXXX  XX@++ $$$",
+"$ oO $$ oOOO $ #.XXX O XX@++ $$$",
+"$ oOO  oOOOO $ #.X  O XXX@++ $$$",
+"$$ oOOOOOOO $$ #. OO XXXX@++ $$$",
+"$$ ooOOOOOOO $ # OO XXXXX@++ $$$",
+"$$$ ooooooOOO   OO ######@++   $",
+"$$$$  oo ooOOO OO +++++++++ @#+ ",
+"$$$$$$  $ ooOOO            @#++ ",
+"$$$$$$$$$$ ooOOO OOO #######@++ ",
+"$$$$$$$$$ O ooOOO   @@@@@@@@+++ ",
+"$$$$$        ooOOO @@+    +@++ $",
+"$$$$ @@@@@@@  ooOOO           $$",
+"$$$ ####### OO ooOOO $$$$$$$$$$$",
+"$$$ #..... OO @ ooOOO $$$$$$$$$$",
+"$$$ #.XXX OO X@+ ooOOO $$$$$$$$$",
+"$$$ #.XX O  XX@++ ooOOO $$$$$$$$",
+"$$$ #.X O XXXX@++  ooOOO $$$$$$$",
+"$$$ #.X  XXXXX@++ $ ooOOO $$$$$$",
+"$$$ #.XXXXXXXX@++ $$ ooOOO $$$$$",
+"$$$ #.XXXXXXXX@++ $$$ ooOOO $$$$",
+"$$$ ##########@++   $$ ooOOO $$$",
+"$$  @+++++++++++ @#+ $$ ooOOO $$",
+"$ @             @#++ $$$ ooO $$$",
+" ################@++ $$$$ o $$$$",
+" #@@@@@@@@@@@@@@@+++ $$$$$ $$$$$",
+" #@@@@@@@@+    +@++ $$$$$$$$$$$$",
+"$                  $$$$$$$$$$$$$"
+};
+
+/* XPM */
+static const char *const cfg_icon_2[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 9 1",
+"  c black",
+". c navy",
+"X c blue",
+"o c #808000",
+"O c yellow",
+"+ c #808080",
+"@ c #C0C0C0",
+"# c gray100",
+"$ c None",
+/* pixels */
+"$$$$$$$$$$$$$$$$$$$$$$$$                  $$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$ @@@@@@@@@@@@@@@@@+ $$$$$",
+"$$$$$$$$$  $$$$$$$$$$$ @@@@@@@@@@@@@@@@@++ $$$$$",
+"$$$$$$$$ OO   $$$$$$$ ################@+++ $$$$$",
+"$$$$$$$$ oOOOO $$$$$$ #++++++++++++++@++++ $$$$$",
+"$$$$$$$$$ ooOOO $$$$$ #+.............#++++ $$$$$",
+"$$$$$$$$$$ ooOOO $$$$ #+.XXXXXXXXXXXX#++++ $$$$$",
+"$$$$$$$$$$$ oOOO $$$$ #+.XXXXXXXXXXXX#++++ $$$$$",
+"$$$  $$$$$$ oOOO $$$$ #+.XXXXXXX  XXX#++++ $$$$$",
+"$$ oO $$$$$ oOOOO $$$ #+.XXXXXX O XXX#++++ $$$$$",
+"$$ ooO $$$$ oOOOO $$$ #+.XXXXX O XXXX#++++ $$$$$",
+"$$$ oOO    OOOOO $$$$ #+.XXX  O XXXXX#++++ $$$$$",
+"$$$ ooOOOOOOOOOOO $$$ #+.XX OO XXXXXX#++++ $$$$$",
+"$$$ ooOOOOOOOOOOOO $$ #+.X OO XXXXXXX#++++ $$$$$",
+"$$$$ oooOOOOoOOOOOO $ #@  OO #########++++     $",
+"$$$$$ oooooooOOOOOOO  # OOO @@@@@@@@@@+++ @@##+ ",
+"$$$$$$   oo ooOOOOOOO  OO  +++++++++++++ @@##++ ",
+"$$$$$$$$$  $ ooOOOOOOO O                @@##+++ ",
+"$$$$$$$$$$$$$ ooOOOOOOO      ##############@+++ ",
+"$$$$$$$$$$$$$$ ooOOOOOOO OOOO ############@++++ ",
+"$$$$$$$$$$$$$$$ ooOOOOOOO O  @@@@@@@@@@@@@+++++ ",
+"$$$$$$$$$$$$$$$  ooOOOOOOO @@@@@+       @@++++ $",
+"$$$$$$$$$$$$$$ OO ooOOOOOOO +++++++++++++++++ $$",
+"$$$$$$$$$$$$$$$    ooOOOOOOO                 $$$",
+"$$$$$$$             ooOOOOOOO $$$$$$$$$$$$$$$$$$",
+"$$$$$$ @@@@@@@@@@  O ooOOOOOOO $$$$$$$$$$$$$$$$$",
+"$$$$$ @@@@@@@@@@ OOO  ooOOOOOOO $$$$$$$$$$$$$$$$",
+"$$$$ ########## OO  #@ ooOOOOOOO $$$$$$$$$$$$$$$",
+"$$$$ #++++++++ OO ++@++ ooOOOOOOO $$$$$$$$$$$$$$",
+"$$$$ #+...... OO ...#+++ ooOOOOOOO $$$$$$$$$$$$$",
+"$$$$ #+.XXXX O  XXXX#++++ ooOOOOOOO $$$$$$$$$$$$",
+"$$$$ #+.XXX O XXXXXX#++++  ooOOOOOOO $$$$$$$$$$$",
+"$$$$ #+.XX O XXXXXXX#++++ $ ooOOOOOOO $$$$$$$$$$",
+"$$$$ #+.XX  XXXXXXXX#++++ $$ ooOOOOOOO $$$$$$$$$",
+"$$$$ #+.XXXXXXXXXXXX#++++ $$$ ooOOOOOOO $$$$$$$$",
+"$$$$ #+.XXXXXXXXXXXX#++++ $$$$ ooOOOOOOO $$$$$$$",
+"$$$$ #+.XXXXXXXXXXXX#++++ $$$$$ ooOOOOOOO $$$$$$",
+"$$$$ #+.XXXXXXXXXXXX#++++ $$$$$$ ooOOOOOOO $$$$$",
+"$$$$ #@##############++++     $$$ ooOOOOOOO $$$$",
+"$$$  #@@@@@@@@@@@@@@@+++ @@##+ $$$ ooOOOOOOO $$$",
+"$$ @ @+++++++++++++++++ @@##++ $$$$ ooOOOOO $$$$",
+"$ @@                   @@##+++ $$$$$ ooOOO $$$$$",
+" #########################@+++ $$$$$$ ooO $$$$$$",
+" ########################@++++ $$$$$$$ o $$$$$$$",
+" ##@@@@@@@@@@@@@@@@@@@@@@+++++ $$$$$$$$ $$$$$$$$",
+" ##@@@@@@@@@@@@+       @@++++ $$$$$$$$$$$$$$$$$$",
+" @@+++++++++++++++++++++++++ $$$$$$$$$$$$$$$$$$$",
+"$                           $$$$$$$$$$$$$$$$$$$$"
+};
+
+const char *const *const cfg_icon[] = {
+    cfg_icon_0,
+    cfg_icon_1,
+    cfg_icon_2,
+};
+const int n_cfg_icon = 3;
diff --git a/unix/xpmputty.c b/unix/xpmputty.c
new file mode 100644 (file)
index 0000000..3809b35
--- /dev/null
@@ -0,0 +1,147 @@
+/* XPM */
+static const char *const main_icon_0[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 8 1",
+"  c black",
+". c navy",
+"X c blue",
+"o c yellow",
+"O c #808080",
+"+ c #C0C0C0",
+"@ c gray100",
+"# c None",
+/* pixels */
+"######       ###",
+"##### @@@@@+O ##",
+"##### @XXX.OO ##",
+"##### @XX.oOO ##",
+"##### @..o.+O  #",
+"##### OooO++OOO ",
+"####  oooo OO+O ",
+"##  oooo OOOOOO ",
+"# @@OooOO      #",
+"# @.o..+O ######",
+"# Oo.XX+O ######",
+"# O.XXX+O  #####",
+"# ++++++OOO ####",
+" OOOOOOOO+O ####",
+" @++++OOOOO ####",
+"#          #####"
+};
+
+/* XPM */
+static const char *const main_icon_1[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 8 1",
+"  c black",
+". c navy",
+"X c blue",
+"o c yellow",
+"O c #808080",
+"+ c #C0C0C0",
+"@ c gray100",
+"# c None",
+/* pixels */
+"################            ####",
+"############### +++++++++++O ###",
+"############## @@@@@@@@@@+OO ###",
+"############## @.........+OO ###",
+"############## @.XXXXXXXX+OO ###",
+"############## @.XXXX  XX+OO ###",
+"############## @.XXX o XX+OO ###",
+"############## @.X  o XXX+OO ###",
+"############## @. oo XXXX+OO ###",
+"############## @ oo XXXXX+OO ###",
+"##############  oo @@@@@@+OO   #",
+"############# ooo OOOOOOOOO +@O ",
+"############ ooo           +@OO ",
+"##########  oooooooo @@@@@@@+OO ",
+"######### oooooooo  ++++++++OOO ",
+"#####         ooo +++O    O+OO #",
+"#### +++++++ ooo              ##",
+"### @@@@@@@ oo  O ##############",
+"### @..... oo +OO ##############",
+"### @.XXX oo X+OO ##############",
+"### @.XX o  XX+OO ##############",
+"### @.X o XXXX+OO ##############",
+"### @.X  XXXXX+OO ##############",
+"### @.XXXXXXXX+OO ##############",
+"### @.XXXXXXXX+OO ##############",
+"### @@@@@@@@@@+OO   ############",
+"##  +OOOOOOOOOOO +@O ###########",
+"# +             +@OO ###########",
+" @@@@@@@@@@@@@@@@+OO ###########",
+" @+++++++++++++++OOO ###########",
+" @++++++++O    O+OO ############",
+"#                  #############"
+};
+
+/* XPM */
+static const char *const main_icon_2[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 8 1",
+"  c black",
+". c navy",
+"X c blue",
+"o c yellow",
+"O c #808080",
+"+ c #C0C0C0",
+"@ c gray100",
+"# c None",
+/* pixels */
+"########################                  ######",
+"####################### +++++++++++++++++O #####",
+"###################### +++++++++++++++++OO #####",
+"##################### @@@@@@@@@@@@@@@@+OOO #####",
+"##################### @OOOOOOOOOOOOOO+OOOO #####",
+"##################### @O.............@OOOO #####",
+"##################### @O.XXXXXXXXXXXX@OOOO #####",
+"##################### @O.XXXXXXXXXXXX@OOOO #####",
+"##################### @O.XXXXXXX  XXX@OOOO #####",
+"##################### @O.XXXXXX o XXX@OOOO #####",
+"##################### @O.XXXXX o XXXX@OOOO #####",
+"##################### @O.XXX  o XXXXX@OOOO #####",
+"##################### @O.XX oo XXXXXX@OOOO #####",
+"##################### @O.X oo XXXXXXX@OOOO #####",
+"##################### @+  oo @@@@@@@@@OOOO     #",
+"####################  @ ooo ++++++++++OOO ++@@O ",
+"################### +  oo  OOOOOOOOOOOOO ++@@OO ",
+"################## +  oo                ++@@OOO ",
+"################# @ ooo      @@@@@@@@@@@@@@+OOO ",
+"#################  oooooooooo @@@@@@@@@@@@+OOOO ",
+"################# ooooooooo  +++++++++++++OOOOO ",
+"###############  ooooooooo +++++O       ++OOOO #",
+"############## oooooooooo OOOOOOOOOOOOOOOOOOO ##",
+"###############      ooo                     ###",
+"#######             oo   #######################",
+"###### ++++++++++  oo ++O ######################",
+"##### ++++++++++ ooo ++OO ######################",
+"#### @@@@@@@@@@ oo  @+OOO ######################",
+"#### @OOOOOOOO oo OO+OOOO ######################",
+"#### @O...... oo ...@OOOO ######################",
+"#### @O.XXXX o  XXXX@OOOO ######################",
+"#### @O.XXX o XXXXXX@OOOO ######################",
+"#### @O.XX o XXXXXXX@OOOO ######################",
+"#### @O.XX  XXXXXXXX@OOOO ######################",
+"#### @O.XXXXXXXXXXXX@OOOO ######################",
+"#### @O.XXXXXXXXXXXX@OOOO ######################",
+"#### @O.XXXXXXXXXXXX@OOOO ######################",
+"#### @O.XXXXXXXXXXXX@OOOO ######################",
+"#### @+@@@@@@@@@@@@@@OOOO     ##################",
+"###  @+++++++++++++++OOO ++@@O #################",
+"## + +OOOOOOOOOOOOOOOOO ++@@OO #################",
+"# ++                   ++@@OOO #################",
+" @@@@@@@@@@@@@@@@@@@@@@@@@+OOO #################",
+" @@@@@@@@@@@@@@@@@@@@@@@@+OOOO #################",
+" @@++++++++++++++++++++++OOOOO #################",
+" @@++++++++++++O       ++OOOO ##################",
+" ++OOOOOOOOOOOOOOOOOOOOOOOOO ###################",
+"#                           ####################"
+};
+
+const char *const *const main_icon[] = {
+    main_icon_0,
+    main_icon_1,
+    main_icon_2,
+};
+const int n_main_icon = 3;