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

From: oslsachem <[email-masked]>
Date: Fri, 3 Jun 2011 22:10:05 +0200

> It could be that more Unicode functions have similar problems, because
> they reside inside unicows.dll on Windows 9X.  Could you please look
> up all the functions in w32font.c and w32uniscribe.c whose names end
> with a `W', and see which ones of them are in unicows.dll?

C:\emacs-23.3\src>grep -E -o -h "\<\w+[a-z0-9]+W\>" w32font.c w32uniscribe.c | s
ort | uniq

DrawTextW
ExtTextOutW
GetGlyphOutlineW
GetOutlineTextMetricsW
GetTextExtentPoint32W
GetTextMetricsW

And in a wider search:

C:\emacs-23.3\src>grep -E -o -h "\<\w+[a-z0-9]+W\>" *.c | grep -v
"Elf\|MingW" | sort | uniq

AppendMenuW
DrawTextW
ExtTextOutW
GetFileSecurityW
GetGlyphOutlineW
GetOutlineTextMetricsW
GetTextExtentPoint32W
GetTextMetricsW
ImmGetCompositionStringW
LookupAccountSidW
lstrlenW

Note: The words that begin with Elf are macros, not functions.

I was going to report that the rest of these functions are already
implemented in core system libraries:

==================================================
Function Name     : AppendMenuW
Address           : 0xbfc010eb
Relative Address  : 0x000010eb
Ordinal           : 8 (0x8)
Filename          : USER32.DLL
Full Path         : C:\WINDOWS\SYSTEM\USER32.DLL
Type              : Exported Function
==================================================

==================================================
Function Name     : DrawTextW
Address           : 0xbfc010f4
Relative Address  : 0x000010f4
Ordinal           : 176 (0xb0)
Filename          : USER32.DLL
Full Path         : C:\WINDOWS\SYSTEM\USER32.DLL
Type              : Exported Function
==================================================

==================================================
Function Name     : ExtTextOutW
Address           : 0xbff21cb2
Relative Address  : 0x00001cb2
Ordinal           : 207 (0xcf)
Filename          : GDI32.DLL
Full Path         : C:\WINDOWS\SYSTEM\GDI32.DLL
Type              : Exported Function
==================================================

==================================================
Function Name     : GetFileSecurityW
Address           : 0xbfe8216d
Relative Address  : 0x0000216d
Ordinal           : 116 (0x74)
Filename          : ADVAPI32.DLL
Full Path         : C:\WINDOWS\SYSTEM\ADVAPI32.DLL
Type              : Exported Function
==================================================

==================================================
Function Name     : GetGlyphOutlineW
Address           : 0xbff2797f
Relative Address  : 0x0000797f
Ordinal           : 264 (0x108)
Filename          : GDI32.DLL
Full Path         : C:\WINDOWS\SYSTEM\GDI32.DLL
Type              : Exported Function
==================================================

==================================================
Function Name     : GetTextExtentPoint32W
Address           : 0xbff21ed0
Relative Address  : 0x00001ed0
Ordinal           : 309 (0x135)
Filename          : GDI32.DLL
Full Path         : C:\WINDOWS\SYSTEM\GDI32.DLL
Type              : Exported Function
==================================================

==================================================
Function Name     : ImmGetCompositionStringW
Address           : 0xbfe210a7
Relative Address  : 0x000010a7
Ordinal           : 25 (0x19)
Filename          : IMM32.DLL
Full Path         : C:\WINDOWS\SYSTEM\IMM32.DLL
Type              : Exported Function
==================================================

==================================================
Function Name     : LookupAccountSidW
Address           : 0xbfe8217f
Relative Address  : 0x0000217f
Ordinal           : 173 (0xad)
Filename          : ADVAPI32.DLL
Full Path         : C:\WINDOWS\SYSTEM\ADVAPI32.DLL
Type              : Exported Function
==================================================

==================================================
Function Name     : lstrlenW
Address           : 0xbff77454
Relative Address  : 0x00007454
Ordinal           : 865 (0x361)
Filename          : KERNEL32.DLL
Full Path         : C:\WINDOWS\SYSTEM\KERNEL32.DLL
Type              : Exported Function
==================================================

But I have stumbled across this comment:

w32menu.c:1505
	  /* On W9x/ME, unicode menus are not supported, though AppendMenuW
	     apparently does exist at least in some cases and appears to be
	     stubbed out to do nothing.[...] */

And then I have checked that both GetTextMetricsW and
GetOutlineTextMetricsW, which caused the system error #120 ("This
function is not supported on this system."), are actually
"implemented" in a core system library along with other of the
previous functions:

==================================================
Function Name     : GetOutlineTextMetricsW
Address           : 0xbff2795b
Relative Address  : 0x0000795b
Ordinal           : 286 (0x11e)
Filename          : GDI32.DLL
Full Path         : C:\WINDOWS\SYSTEM\GDI32.DLL
Type              : Exported Function
==================================================

==================================================
Function Name     : GetTextMetricsW
Address           : 0xbff27952
Relative Address  : 0x00007952
Ordinal           : 315 (0x13b)
Filename          : GDI32.DLL
Full Path         : C:\WINDOWS\SYSTEM\GDI32.DLL
Type              : Exported Function
==================================================

So, your idea of trying the unicode functions which have been
reimplemented in unicows.dll and seeing if they make a difference
looks very promising.

Greetings,
           Osl