all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Juanma Barranquero <jmbarranquero@wke.es>
Cc: emacs-devel@gnu.org, Jason Rumney <jasonr@gnu.org>
Subject: Re: display word wrapping
Date: Wed, 02 Jun 2004 17:04:45 +0200	[thread overview]
Message-ID: <20040602163704.AADE.JMBARRANQUERO@wke.es> (raw)
In-Reply-To: <m3wu2suz8g.fsf@kfs-l.imdomain.dk>


On 31 May 2004 22:18:39 +0200
storm@cua.dk (Kim F. Storm) wrote:

> Both term/w32-win.el and .emacs are read before loading the
> splash screen.  In addition, IIRC, PBM support is built-in
> even on w32.  So it should work.

There's a first cut of implementing that.  The patch seems bigger than
it is, because I've had to extract functionality from init_image and
move it to a new function.

With this patch term/w32-win.el sets the new variable
`w32-image-libraries-alist'.

There's a new `init-image-libraries' which can be called to load all
image libraries. This is called from `init_image' on non-Windows environments,
and does not depend on the alist (so nothing changes). On Windows it
uses the variable, and can be called... where? This is my biggest doubt. If
I call `init-image-libraries' from my .emacs, for example, the splash
screen is shown correctly. But there's no way the user must be
responsible for calling it. So, where should it be called so it is done
automatically on Windows, but *after* loading .emacs?

Another question: currently, I'm not checking whether the func is called
several times. Should it check it and refuse, or allow it (and, in this
case, get sure that image-types is checked before adding image-type
symbols to it)?

I've used the same machinery to load zlib, because libpng12 and libtiff3
need it, and it also can appear under several names (at least zlib1.dll
and zlib.dll are common).

                                                                Juanma



--- image.c.orig	2004-06-02 10:50:59.000000000 +0200
+++ image.c	2004-06-02 16:45:23.000000000 +0200
@@ -63,4 +63,6 @@
 #include "w32term.h"
 
+Lisp_Object Vw32_image_libraries_alist;
+
 /* W32_TODO : Color tables on W32.  */
 #undef COLOR_TABLE_SUPPORT
@@ -1789,4 +1791,31 @@
   }
 
+/* Load a DLL implementing an image type.
+   The `w32-image-libraries-alist' variable associates a symbol,
+   identifying  an image type, to a list of possible filenames.
+   The function returns NULL if no library could be loaded for
+   the given image type, else the handle of the DLL.  */
+static HMODULE
+w32_dynaload (Lisp_Object library_id)
+{
+  HMODULE library = NULL;
+  Lisp_Object dll_list;
+
+  dll_list = Fassq (library_id, Vw32_image_libraries_alist);
+
+  if (CONSP (dll_list))
+    for (dll_list = XCDR (dll_list); !NILP (dll_list); dll_list = XCDR (dll_list))
+      {
+        Lisp_Object lib = XCAR (dll_list);
+
+        if (!STRINGP (lib))
+          error ("Library name is not a string");
+        else if (library = LoadLibrary (SDATA (lib)))
+          break;
+      }
+
+  return library;
+}
+
 #endif /* HAVE_NTGUI */
 
@@ -3495,5 +3522,5 @@
   HMODULE library;
 
-  if (!(library = LoadLibrary ("libXpm.dll")))
+  if (!(library = w32_dynaload (Qxpm)))
     return 0;
 
@@ -5490,4 +5517,9 @@
 Lisp_Object Qpng;
 
+#ifndef NEED_ZLIB
+Lisp_Object Qzlib;
+#define NEED_ZLIB
+#endif
+
 /* Indices of image specification fields in png_format, below.  */
 
@@ -5593,15 +5625,10 @@
   HMODULE library;
 
-  /* Ensure zlib is loaded.  Try debug version first.  */
-  if (!LoadLibrary ("zlibd.dll")
-      && !LoadLibrary ("zlib.dll"))
+  /* Ensure zlib is loaded.  */
+  if (!w32_dynaload (Qzlib))
     return 0;
 
   /* Try loading libpng under probable names.  */
-  if (!(library = LoadLibrary ("libpng13d.dll"))
-      && !(library = LoadLibrary ("libpng13.dll"))
-      && !(library = LoadLibrary ("libpng12d.dll"))
-      && !(library = LoadLibrary ("libpng12.dll"))
-      && !(library = LoadLibrary ("libpng.dll")))
+  if (!(library = w32_dynaload (Qpng)))
     return 0;
 
@@ -6251,7 +6278,5 @@
   HMODULE library;
 
-  if (!(library = LoadLibrary ("libjpeg.dll"))
-      && !(library = LoadLibrary ("jpeg-62.dll"))
-      && !(library = LoadLibrary ("jpeg.dll")))
+  if (!(library = w32_dynaload (Qjpeg)))
     return 0;
 
@@ -6605,4 +6630,9 @@
 Lisp_Object Qtiff;
 
+#ifndef NEED_ZLIB
+Lisp_Object Qzlib;
+#define NEED_ZLIB
+#endif
+
 /* Indices of image specification fields in tiff_format, below.  */
 
@@ -6688,5 +6718,9 @@
   HMODULE library;
 
-  if (!(library = LoadLibrary ("libtiff.dll")))
+  /* Ensure zlib is loaded.  */
+  if (!w32_dynaload (Qzlib))
+    return 0;
+
+  if (!(library = w32_dynaload (Qtiff)))
     return 0;
 
@@ -7108,5 +7142,5 @@
   HMODULE library;
 
-  if (!(library = LoadLibrary ("libungif.dll")))
+  if (!(library = w32_dynaload (Qgif)))
     return 0;
 
@@ -7881,4 +7915,58 @@
  ***********************************************************************/
 
+#ifdef HAVE_NTGUI
+/* Image types that rely on external libraries are loaded dynamically
+   if the library is available.  */
+#define IF_LIB_AVAILABLE(init_lib_fn)  if (init_lib_fn())
+#else
+#define IF_LIB_AVAILABLE(init_func)    /* Load unconditionally */
+#endif /* HAVE_NTGUI */
+
+DEFUN ("init-image-libraries", Finit_image_libraries, Sinit_image_libraries, 0, 0, 0,
+       doc: /* Initialize image libraries.
+Image types pbm and xbm are prebuilt; other types are loaded here.
+On Windows, what gets loaded depends on the value of the variable
+`w32-image-libraries-alist'.  */)
+     ()
+{
+
+#if defined (HAVE_XPM) || defined (MAC_OS)
+  IF_LIB_AVAILABLE(init_xpm_functions)
+    define_image_type (&xpm_type);
+#endif
+
+#if defined (HAVE_JPEG) || defined (MAC_OS)
+  IF_LIB_AVAILABLE(init_jpeg_functions)
+    define_image_type (&jpeg_type);
+#endif
+
+#if defined (HAVE_TIFF) || defined (MAC_OS)
+  IF_LIB_AVAILABLE(init_tiff_functions)
+    define_image_type (&tiff_type);
+#endif
+
+#if defined (HAVE_GIF) || defined (MAC_OS)
+  IF_LIB_AVAILABLE(init_gif_functions)
+    define_image_type (&gif_type);
+#endif
+
+#if defined (HAVE_PNG) || defined (MAC_OS)
+  IF_LIB_AVAILABLE(init_png_functions)
+    define_image_type (&png_type);
+#endif
+
+#ifdef HAVE_GHOSTSCRIPT
+  define_image_type (&gs_type);
+#endif
+
+#ifdef MAC_OS
+  /* Animated gifs use QuickTime Movie Toolbox.  So initialize it here. */
+  EnterMovies ();
+#ifdef MAC_OSX
+  init_image_func_pointer ();
+#endif
+#endif
+}
+
 void
 syms_of_image ()
@@ -7958,4 +8046,10 @@
 #endif
 
+#if defined (NEED_ZLIB)
+  Qzlib = intern ("zlib");
+  staticpro (&Qzlib);
+#endif
+
+  defsubr (&Sinit_image_libraries);
   defsubr (&Sclear_image_cache);
   defsubr (&Simage_size);
@@ -7983,14 +8077,17 @@
 meaning don't clear the cache.  */);
   Vimage_cache_eviction_delay = make_number (30 * 60);
-}
-
 
 #ifdef HAVE_NTGUI
-/* Image types that rely on external libraries are loaded dynamically
-   if the library is available.  */
-#define IF_LIB_AVAILABLE(init_lib_fn)  if (init_lib_fn())
-#else
-#define IF_LIB_AVAILABLE(init_func)    /* Load unconditionally */
-#endif /* HAVE_NTGUI */
+  DEFVAR_LISP ("w32-image-libraries-alist", &Vw32_image_libraries_alist,
+   doc: /* Alist of image-types vs external libraries needed to display them.
+Each element is a list (IMAGE-TYPE LIBRARY...), where the car is a symbol
+representing a supported image type, and the rest are strings giving
+alternate filenames for the corresponding external libraries to load.
+They are tried in the order they appear on the list; if none of them can
+be loaded, the running session of Emacs won't display the image type.
+No entries are needed for pbm and xbm images; they're always supported.  */);
+  Vw32_image_libraries_alist = Qnil;
+#endif
+}
 
 void
@@ -8003,39 +8100,8 @@
   define_image_type (&pbm_type);
 
-#if defined (HAVE_XPM) || defined (MAC_OS)
-  IF_LIB_AVAILABLE(init_xpm_functions)
-    define_image_type (&xpm_type);
-#endif
-
-#if defined (HAVE_JPEG) || defined (MAC_OS)
-  IF_LIB_AVAILABLE(init_jpeg_functions)
-    define_image_type (&jpeg_type);
-#endif
-
-#if defined (HAVE_TIFF) || defined (MAC_OS)
-  IF_LIB_AVAILABLE(init_tiff_functions)
-    define_image_type (&tiff_type);
-#endif
-
-#if defined (HAVE_GIF) || defined (MAC_OS)
-  IF_LIB_AVAILABLE(init_gif_functions)
-    define_image_type (&gif_type);
-#endif
-
-#if defined (HAVE_PNG) || defined (MAC_OS)
-  IF_LIB_AVAILABLE(init_png_functions)
-    define_image_type (&png_type);
-#endif
-
-#ifdef HAVE_GHOSTSCRIPT
-  define_image_type (&gs_type);
-#endif
-
-#ifdef MAC_OS
-  /* Animated gifs use QuickTime Movie Toolbox.  So initialize it here. */
-  EnterMovies ();
-#ifdef MAC_OSX
-  init_image_func_pointer ();
-#endif
+#ifndef HAVE_NTGUI
+  /* For now, delayed loading of image libraries is only needed
+     or useful on Windows.  */
+  Finit_image_libraries ();
 #endif
 }
--- term/w32-win.el.orig	2004-06-02 16:34:20.000000000 +0200
+++ term/w32-win.el	2004-06-02 16:48:08.000000000 +0200
@@ -1262,4 +1262,16 @@
 	    (error "Font not found")))))
 
+;;; Set default known names for image libraries
+(setq w32-image-libraries-alist
+      '((xpm "libXpm-nox4.dll" "libxpm.dll")
+        (png "libpng13d.dll" "libpng13.dll" "libpng12d.dll" "libpng12.dll" "libpng.dll")
+        (jpeg "jpeg62.dll" "libjpeg.dll" "jpeg-62.dll" "jpeg.dll")
+        (tiff "libtiff3.dll" "libtiff.dll")
+        (gif "libungif.dll")
+        ;; A trick: some libraries need to preload zlib, which can appear under several
+        ;; names, so we reuse the machinery
+        (zlib "zlib1.dll" "zlibd.dll" "zlib.dll")))
+(put 'w32-image-libraries-alist 'risky-local-variable t)
+
 ;;; arch-tag: 69fb1701-28c2-4890-b351-3d1fe4b4f166
 ;;; w32-win.el ends here

  reply	other threads:[~2004-06-02 15:04 UTC|newest]

Thread overview: 174+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-05-26 10:02 display word wrapping Miles Bader
2004-05-26 10:53 ` Kai Grossjohann
2004-05-26 11:29 ` Kim F. Storm
2004-05-26 12:54   ` Miles Bader
2004-05-26 14:50     ` David Kastrup
2004-05-26 15:06       ` Kim F. Storm
2004-05-26 19:16         ` David Kastrup
2004-05-26 19:50           ` Miles Bader
2004-05-26 21:43             ` i-search face-cache crash [was Re: display word wrapping] Kim F. Storm
2004-05-27  0:12               ` Miles Bader
2004-05-27  8:33                 ` Kim F. Storm
2004-05-27  4:48               ` i-search face-cache crash Miles Bader
2004-05-27 23:54                 ` Richard Stallman
2004-05-26 20:58           ` display word wrapping Kim F. Storm
2004-05-27  7:31             ` Jason Rumney
2004-05-26 22:21           ` Luc Teirlinck
2004-05-27  5:59           ` Miles Bader
2004-05-26 19:45         ` Miles Bader
2004-05-26 21:01           ` Kim F. Storm
2004-05-26 21:33             ` Miles Bader
2004-05-26 21:55               ` Kim F. Storm
2004-05-27  0:38                 ` Miles Bader
2004-05-26 21:52           ` Stefan Monnier
2004-05-27 23:53           ` Richard Stallman
2004-05-27  9:08         ` Juanma Barranquero
2004-05-27 10:41           ` Kim F. Storm
2004-05-27 11:15             ` Juanma Barranquero
2004-05-28  7:57               ` Jason Rumney
2004-05-28  8:24                 ` Kim F. Storm
2004-05-28  9:36                 ` Juanma Barranquero
2004-05-29 20:54                 ` Juanma Barranquero
2004-05-30  1:38                   ` Juanma Barranquero
2004-05-30  6:12                     ` Eli Zaretskii
2004-05-30 16:50                       ` Juanma Barranquero
2004-05-30 18:27                         ` Eli Zaretskii
2004-05-31  0:40                           ` Juanma Barranquero
2004-05-31  7:34                             ` Eli Zaretskii
2004-05-31 14:40                               ` Juanma Barranquero
2004-05-31 15:28                                 ` Andreas Schwab
2004-05-31 17:41                                   ` Eli Zaretskii
2004-06-01  7:14                                     ` Juanma Barranquero
2004-06-01 20:32                                       ` Eli Zaretskii
2004-06-01 20:53                                         ` Andreas Schwab
2004-06-01 23:50                                           ` Juanma Barranquero
2004-06-02  7:58                                             ` Kim F. Storm
2004-06-02  8:25                                               ` Juanma Barranquero
2004-06-02  4:55                                           ` Eli Zaretskii
2004-06-02  7:27                                             ` Juanma Barranquero
2004-05-31 17:55                                 ` Eli Zaretskii
2004-05-31 18:39                                   ` Juanma Barranquero
2004-05-31 19:03                                   ` Juanma Barranquero
2004-05-31 20:19                                     ` Andreas Schwab
2004-05-31 21:36                                       ` Juanma Barranquero
2004-05-31 19:18                                   ` Miles Bader
2004-05-31 20:02                                     ` Juanma Barranquero
2004-05-31 19:09                                 ` Jason Rumney
2004-05-31 15:27                               ` Andreas Schwab
2004-05-31 18:33                                 ` Juanma Barranquero
2004-05-31 19:05                           ` Jason Rumney
2004-05-31 22:19                             ` Juanma Barranquero
2004-06-01  4:43                               ` Eli Zaretskii
2004-06-01  7:16                                 ` Juanma Barranquero
2004-05-28  9:15               ` Benjamin Riefenstahl
2004-05-28  9:48                 ` Juanma Barranquero
2004-05-28  9:24               ` Eli Zaretskii
2004-05-28  9:46                 ` Juanma Barranquero
2004-05-29  1:43                 ` Richard Stallman
2004-05-29 11:37                   ` Eli Zaretskii
2004-05-29 15:07                   ` Juanma Barranquero
2004-05-30 14:30                     ` Richard Stallman
2004-05-30 16:58                       ` Juanma Barranquero
2004-05-31 18:39                         ` Richard Stallman
2004-05-31 18:55                       ` Jason Rumney
2004-06-02 17:36                         ` Richard Stallman
2004-05-31 21:05                 ` David Kastrup
2004-05-27 21:32             ` W32 image support (was Re: display word wrapping) Jason Rumney
2004-05-28 15:54           ` display word wrapping Peter Lee
2004-05-28 21:48             ` Jason Rumney
2004-05-29  3:19             ` Juanma Barranquero
2004-05-29 23:10               ` Kim F. Storm
2004-05-29 23:23                 ` Juanma Barranquero
2004-05-30 19:41                   ` Richard Stallman
2004-05-31 19:12                 ` Jason Rumney
2004-05-31 20:18                   ` Kim F. Storm
2004-06-02 15:04                     ` Juanma Barranquero [this message]
2004-06-02 22:17                       ` Jason Rumney
2004-06-02 22:43                         ` Juanma Barranquero
2004-06-03  7:49                           ` Jason Rumney
2004-06-03  8:40                             ` Juanma Barranquero
2004-06-03  9:00                               ` David Kastrup
2004-06-03  9:16                                 ` Juanma Barranquero
2004-06-03  9:26                                   ` David Kastrup
2004-06-03 10:02                                     ` Juanma Barranquero
2004-06-03 12:04                               ` Kim F. Storm
2004-06-03 13:52                                 ` Juanma Barranquero
2004-06-03 20:43                                   ` Kim F. Storm
2004-06-04  1:39                                     ` Juanma Barranquero
2004-06-04  8:07                                       ` Kim F. Storm
2004-06-04  9:09                                         ` Juanma Barranquero
2004-06-04  9:29                                           ` Juanma Barranquero
2004-06-04 12:40                                             ` Kim F. Storm
2004-06-04 12:45                                           ` Kim F. Storm
2004-06-04 13:42                                             ` Juanma Barranquero
2004-06-04 14:16                                               ` Kim F. Storm
2004-06-05  1:20                                                 ` Juanma Barranquero
2004-06-07 12:55                                                   ` Juanma Barranquero
2004-06-07 13:34                                                     ` Kim F. Storm
2004-06-07 16:00                                                       ` Juanma Barranquero
2004-06-07 23:11                                                         ` Kim F. Storm
2004-06-08  0:33                                                           ` Juanma Barranquero
2004-06-08  6:38                                                             ` David Kastrup
2004-06-08  8:06                                                               ` Kim F. Storm
2004-06-08  8:23                                                                 ` David Kastrup
2004-06-08  9:33                                                                   ` Kim F. Storm
2004-06-08  9:54                                                                     ` David Kastrup
2004-06-08 10:02                                                                       ` Juanma Barranquero
2004-06-08 10:10                                                                         ` David Kastrup
2004-06-08 10:24                                                                           ` Juanma Barranquero
2004-06-08 10:43                                                                             ` David Kastrup
2004-06-08 11:17                                                                               ` Juanma Barranquero
2004-06-08 12:08                                                                                 ` Kim F. Storm
2004-06-08 12:22                                                                                   ` Miles Bader
2004-06-08 12:31                                                                                     ` David Kastrup
2004-06-08 11:31                                                                               ` Juanma Barranquero
2004-06-08 11:39                                                                                 ` David Kastrup
2004-06-08 12:11                                                                                   ` Juanma Barranquero
2004-06-08 12:05                                                                                 ` Kim F. Storm
2004-06-08 12:13                                                                                   ` Juanma Barranquero
2004-06-08 10:00                                                                     ` Juanma Barranquero
2004-06-08  8:14                                                               ` Juanma Barranquero
2004-06-02 23:47                         ` Juanma Barranquero
2004-06-03  7:43                           ` Jason Rumney
2004-06-03  7:54                             ` Juanma Barranquero
2004-06-03  9:37                           ` Benjamin Riefenstahl
2004-06-03  9:54                             ` Juanma Barranquero
2004-06-07 11:13                               ` Benjamin Riefenstahl
2004-06-07 13:29                                 ` Juanma Barranquero
2004-06-07 16:37                                   ` Benjamin Riefenstahl
2004-06-01 16:34               ` Peter Lee
2004-06-01 20:43                 ` Eli Zaretskii
2004-06-02  0:05                 ` Juanma Barranquero
2004-05-29 17:02             ` Richard Stallman
2004-05-29 18:19               ` Juanma Barranquero
2004-05-30 19:41                 ` Richard Stallman
2004-05-31 18:42               ` Jason Rumney
2004-06-01  4:51                 ` Eli Zaretskii
2004-06-01  7:18                   ` Juanma Barranquero
2004-06-01 20:40                     ` Eli Zaretskii
2004-06-03  0:19                       ` Juanma Barranquero
2004-06-02  3:44                   ` Richard Stallman
2004-05-27 12:28         ` Kai Grossjohann
2004-05-27 23:53           ` Luc Teirlinck
2004-05-28 14:21             ` Richard Stallman
2004-05-29  1:43               ` Luc Teirlinck
2004-05-26 17:51       ` Eli Zaretskii
2004-05-26 19:39         ` David Kastrup
2004-05-27  8:14           ` Eli Zaretskii
2004-05-26 12:57 ` Henrik Enberg
2004-05-26 16:15   ` David Kastrup
2004-05-27 23:54 ` Richard Stallman
2004-05-28  8:37   ` Kim F. Storm
2004-05-28  9:52     ` Miles Bader
2004-05-29 10:33       ` Kai Grossjohann
2004-05-29  1:44     ` Richard Stallman
2004-05-29  8:28       ` Karl Eichwalder
2004-05-30 14:30         ` Richard Stallman
2004-05-30 16:50           ` Kai Grossjohann
2004-05-31 18:39             ` Richard Stallman
2004-05-29  9:46       ` Jason Rumney
2004-05-30  3:11         ` Stefan Monnier
2004-05-30  6:08           ` Eli Zaretskii
2004-05-30 14:30         ` Richard Stallman
2004-05-28  9:07   ` Eli Zaretskii
2004-05-29  1:43     ` Richard Stallman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040602163704.AADE.JMBARRANQUERO@wke.es \
    --to=jmbarranquero@wke.es \
    --cc=emacs-devel@gnu.org \
    --cc=jasonr@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.