Subject: Re: bug#8562: Emacs 23.1 and later don't work in windows 98

From: oslsachem <[email-masked]>
Date: Wed, 8 Jun 2011 20:11:37 +0200

>> Well, it has a glitch: when the window is maximized, clicking on the
>> help menu item "about Emacs" brings out an alternative version of this
>> buffer which doesn't have the Emacs logotype, has a slightly different
>> phrasing and its links are no longer coloured.
>>
>> http://www.speedyshare.com/files/28854883/EmacsWithoutLogo.png
>
> This is not a bug: the usual "fancy" splash screen is only shown if
> Emacs can display XPM or PBM images.  Otherwise, Emacs shows the
> "normal" splash screen, which is what you see.  I'm guessing that you
> don't have XPM or PBM libraries installed on the Windows 9X machine,
> or you didn't have the necessary headers when you built Emacs (the
> configure.bat script should announce what image libraries it builds
> with).  See the function use-fancy-splash-screens-p in startup.el.
> The file nt/INSTALL explains where to get the image libraries if you
> want to build Emacs with full image support.

For simplicity (for me) I have been building Emacs without image
libraries (i.e --without-xpm --without-png --without-jpeg
--without-gif --without-tiff ).

After more fiddling, I can now describe the issue more accurately, and
it seems to be a design decision:

In any version of windows, if the window apparently does not have at
least a certain height and I type c-h c-a, I get the *about GNU Emacs*
buffer version of text terminal Emacs (i.e. emacs -nw) which does not
show a logotype:

http://www.speedyshare.com/files/28873451/EmacsNotHighEnough.png

On the contrary, if the window has at least a certain height and I
type c-h c-a, I get the expected *about GNU Emacs* buffer version of
graphical Emacs which, in this case, shows the black and white,
coarser logotype:

http://www.speedyshare.com/files/28873452/EmacsHighEnough.png

However, I still have one more question left:
In any version of Emacs for windows, if you start Emacs without the -Q
option and then type c-h c-a you end up with two differently named and
sized buffers (*GNU Emacs*, *About GNU Emacs*) which have the same
contents and so, presumably, the same functionality. Is there a reason
for this?

http://www.speedyshare.com/files/28873453/TwoGNUEmacsBuffers.png

> Btw, could you please enumerate those functions you replaced?  I'm not
> sure my notes about that are accurate.

In the end, only 3 functions seem to need to be imported from
unicows.dll in windows 98:

GetOutlineTextMetricsW

GetTextMetricsW

GetGlyphOutlineW

These seem to be the functions signatures ( by consulting MSDN ):

typedef UINT ( * GetOutlineTextMetricsW_Proc)(
   HDC hdc,
   UINT cbData,
   LPOUTLINETEXTMETRICW lpotmw
);
typedef BOOL ( * GetTextMetricsW_Proc)(
   HDC hdc,
   LPTEXTMETRICW lptmw
);
typedef DWORD ( * GetGlyphOutlineW_Proc)(
   HDC hdc,
   UINT uChar,
   UINT uFormat,
   LPGLYPHMETRICS lpgm,
   DWORD cbBuffer,
   LPVOID lpvBuffer,
   const MAT2 *lpmat2
);

I have changed two parameter types to avoid these compiler warnings:

warning: passing argument 3 of 'Get_Outline_Text_Metrics_W' from
incompatible pointer type
note: expected 'LPOUTLINETEXTMETRIC' but argument is of type 'struct
OUTLINETEXTMETRICW *'

warning: passing argument 2 of 'Get_Text_Metrics_W' from incompatible
pointer type
note: expected 'LPTEXTMETRIC' but argument is of type 'struct TEXTMETRICW *'

Greetings,
                 Osl