From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Juanma Barranquero Newsgroups: gmane.emacs.devel Subject: Re: display word wrapping Date: Sat, 05 Jun 2004 03:20:15 +0200 Sender: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Message-ID: <20040605031558.5711.LEKTU@mi.madritel.es> References: <20040604151557.743D.JMBARRANQUERO@wke.es> NNTP-Posting-Host: deer.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Trace: sea.gmane.org 1086398444 27217 80.91.224.253 (5 Jun 2004 01:20:44 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Sat, 5 Jun 2004 01:20:44 +0000 (UTC) Cc: "Kim F. Storm" Original-X-From: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Sat Jun 05 03:20:36 2004 Return-path: Original-Received: from quimby.gnus.org ([80.91.224.244]) by deer.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1BWPrQ-0008WA-00 for ; Sat, 05 Jun 2004 03:20:36 +0200 Original-Received: from lists.gnu.org ([199.232.76.165]) by quimby.gnus.org with esmtp (Exim 3.35 #1 (Debian)) id 1BWPrP-0003jn-00 for ; Sat, 05 Jun 2004 03:20:35 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1BWPro-0000KB-Mk for emacs-devel@quimby.gnus.org; Fri, 04 Jun 2004 21:21:00 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.33) id 1BWPrl-0000Jv-Gr for emacs-devel@gnu.org; Fri, 04 Jun 2004 21:20:57 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.33) id 1BWPrk-0000Ji-Nt for emacs-devel@gnu.org; Fri, 04 Jun 2004 21:20:57 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1BWPrk-0000Jf-LF for emacs-devel@gnu.org; Fri, 04 Jun 2004 21:20:56 -0400 Original-Received: from [62.81.186.16] (helo=smtp06.retemail.es) by monty-python.gnu.org with esmtp (Exim 4.34) id 1BWPr7-0001pv-Cc for emacs-devel@gnu.org; Fri, 04 Jun 2004 21:20:17 -0400 Original-Received: from [127.0.0.1] ([213.37.34.98]) by smtp06.retemail.es (InterMail vM.5.01.05.32 201-253-122-126-132-20030307) with ESMTP id <20040605012016.CBXM1219.smtp06.retemail.es@[127.0.0.1]>; Sat, 5 Jun 2004 03:20:16 +0200 Original-To: emacs-devel@gnu.org In-Reply-To: X-Mailer: Becky! ver. 2.09.01 [en] X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.4 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Xref: main.gmane.org gmane.emacs.devel:24554 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:24554 On 04 Jun 2004 16:16:32 +0200, storm@cua.dk (Kim F. Storm) wrote: > Problem is that image.c is not compiled in this env. so the > init-image-libraries function does not exist! Ah, OK. I thought it was compiled, but mostly to no-ops. > This will fix it: > > (defun image-type-available-p > ... > (and (fboundp 'init-image-libraries) > (prog1 ...))) OK, added. > Using > CHECK_STRING (dlls); > is cleaner then. I should've put more attention while perusing lisp.h. BTW, this is turning into a great learning experience. Thanks! (And sorry for taking so much of your time.) > I don't have time right now, but maybe during the weekend. Patch attached with newest mods (but still no docs). /L/e/k/t/u Index: lisp/image.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/image.el,v retrieving revision 1.40 diff -u -2 -r1.40 image.el --- lisp/image.el 26 Apr 2004 22:11:36 -0000 1.40 +++ lisp/image.el 5 Jun 2004 00:47:31 -0000 @@ -49,4 +49,17 @@ a non-nil value, TYPE is the image's type.") +;;;###autoload +(defvar image-library-alist t + "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. + +This variable is reset to nil each time its entries are processed.") +;;;###autoload (put 'image-library-alist 'risky-local-variable t) (defun image-jpeg-p (data) @@ -112,6 +125,8 @@ "Value is non-nil if image type TYPE is available. Image types are symbols like `xbm' or `jpeg'." - (and (boundp 'image-types) (not (null (memq type image-types))))) - + (and (fboundp 'init-image-libraries) + (prog1 + (memq type (init-image-libraries image-library-alist)) + (setq image-library-alist nil)))) ;;;###autoload Index: lisp/term/w32-win.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/term/w32-win.el,v retrieving revision 1.62 diff -u -2 -r1.62 w32-win.el --- lisp/term/w32-win.el 9 May 2004 15:01:17 -0000 1.62 +++ lisp/term/w32-win.el 4 Jun 2004 00:15:48 -0000 @@ -1261,4 +1261,12 @@ (if (null font) (error "Font not found"))))) + +;;; Set default known names for image libraries +(setq image-library-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"))) ;;; arch-tag: 69fb1701-28c2-4890-b351-3d1fe4b4f166 Index: src/image.c =================================================================== RCS file: /cvsroot/emacs/emacs/src/image.c,v retrieving revision 1.12 diff -u -2 -r1.12 image.c --- src/image.c 2 Jun 2004 00:50:09 -0000 1.12 +++ src/image.c 5 Jun 2004 01:10:44 -0000 @@ -646,11 +646,15 @@ struct image_type *type; { - /* Make a copy of TYPE to avoid a bus error in a dumped Emacs. - The initialized data segment is read-only. */ - struct image_type *p = (struct image_type *) xmalloc (sizeof *p); - bcopy (type, p, sizeof *p); - p->next = image_types; - image_types = p; - Vimage_types = Fcons (*p->type, Vimage_types); + /* Protect against accidental redefinion. */ + if (NILP (Fmemq (*type->type, Vimage_types))) + { + /* Make a copy of TYPE to avoid a bus error in a dumped Emacs. + The initialized data segment is read-only. */ + struct image_type *p = (struct image_type *) xmalloc (sizeof *p); + bcopy (type, p, sizeof *p); + p->next = image_types; + image_types = p; + Vimage_types = Fcons (*p->type, Vimage_types); + } } @@ -1789,4 +1793,31 @@ } +/* Load a DLL implementing an image type. + The `image-library-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, or if the library was previously loaded; + else the handle of the DLL. */ +static HMODULE +w32_dynaload (Lisp_Object libraries, Lisp_Object library_id) +{ + HMODULE library = NULL; + + if (CONSP (libraries) && NILP (Fmemq (library_id, Vimage_types))) + { + Lisp_Object dlls = Fassq (library_id, libraries); + + if (CONSP (dlls)) + for (dlls = XCDR (dlls); CONSP (dlls); dlls = XCDR (dlls)) + { + CHECK_STRING_CAR (dlls); + if (library = LoadLibrary (SDATA (XCAR (dlls)))) + break; + } + } + + return library; +} + #endif /* HAVE_NTGUI */ @@ -3489,11 +3519,10 @@ DEF_IMGLIB_FN (XImageFree); - static int -init_xpm_functions (void) +init_xpm_functions (Lisp_Object libraries) { HMODULE library; - if (!(library = LoadLibrary ("libXpm.dll"))) + if (!(library = w32_dynaload (libraries, Qxpm))) return 0; @@ -5589,19 +5618,10 @@ static int -init_png_functions (void) +init_png_functions (Lisp_Object libraries) { HMODULE library; - /* Ensure zlib is loaded. Try debug version first. */ - if (!LoadLibrary ("zlibd.dll") - && !LoadLibrary ("zlib.dll")) - 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 (libraries, Qpng))) return 0; @@ -6247,11 +6267,9 @@ static int -init_jpeg_functions (void) +init_jpeg_functions (Lisp_Object libraries) { HMODULE library; - if (!(library = LoadLibrary ("libjpeg.dll")) - && !(library = LoadLibrary ("jpeg-62.dll")) - && !(library = LoadLibrary ("jpeg.dll"))) + if (!(library = w32_dynaload (libraries, Qjpeg))) return 0; @@ -6684,9 +6702,9 @@ static int -init_tiff_functions (void) +init_tiff_functions (Lisp_Object libraries) { HMODULE library; - if (!(library = LoadLibrary ("libtiff.dll"))) + if (!(library = w32_dynaload (libraries, Qtiff))) return 0; @@ -7104,9 +7122,9 @@ static int -init_gif_functions (void) +init_gif_functions (Lisp_Object libraries) { HMODULE library; - if (!(library = LoadLibrary ("libungif.dll"))) + if (!(library = w32_dynaload (libraries, Qgif))) return 0; @@ -7881,4 +7899,63 @@ ***********************************************************************/ +#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 (libraries)) +#else +#define IF_LIB_AVAILABLE(init_func) /* Load unconditionally */ +#endif /* HAVE_NTGUI */ + +DEFUN ("init-image-libraries", Finit_image_libraries, Sinit_image_libraries, 1, 1, 0, + doc: /* Initialize image libraries. +Image types pbm and xbm are prebuilt; other types are loaded here. +Which libraries are loaded depends on LIBRARIES (usually, the value +of `image-library-alist'. */) + (libraries) +{ + if (EQ (libraries, Qt) || !NILP (libraries)) + { + +#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 + } + + return Vimage_types; +} + void syms_of_image () @@ -7958,4 +8035,5 @@ #endif + defsubr (&Sinit_image_libraries); defsubr (&Sclear_image_cache); defsubr (&Simage_size); @@ -7985,13 +8063,4 @@ } - -#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 */ - void init_image () @@ -8002,41 +8071,4 @@ define_image_type (&xbm_type); 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 -#endif }