The message I posted on Sunday was a bit oversize and it has not
appeared on the list yet. So here it comes in two parts.
Let's start with the results. I analyzed the functions exported by
each Windows Dll for Win95, Win98 and Win2000 and compared them with
what is found the the spec files. Here's the executive summary:
Set 1 | Set 2 | Removed / | Added/Extra
| | Missing in 2 | in 2
---------+--------+---------------+------------
95 | 98 | 8 | 982
98 | 2000 | 509 | 2813
---------+--------+---------------+------------
95 | wine | 847 | 1805
98 | wine | 1326 | 1397
2000 | wine | 2835 | 517
all | wine | 3000 | 266
So it seems that there are quite a few differences. The last line
tells us that there seems to be 3000 functions missing in our spec files
but that we export 266 functions that are not present in any of the
Windows versions (or it could be that we are missing 2734 functions and
have 266 that differ, or something in between).
(I'll try to collect WinME and NT4 soon, I'll post an updated diff
and executive summary if there is interest or it turns very different
results)
Now the above is nice as an executive summary but it's the details
that are interesting: the attached file, apidiff.txt, should tell us
exactly what APIs are missing in Wine's spec files, whether there are
any differences WRT exporting by ordinal/name, and where the extra APIs
come from (I know some come from NT 3.51). I can also provide the diffs
against specific versions of Windows upon demand.
Here's a typical extract of the diffs against Win95:
comdlg32:
-{20} WEP
+<0> ArrowBtnWndProc
+<14> LoadAlterBitmap
+@ PrintDlgExA
+@ PrintDlgExW
+<21> WantArrows
+<22> dwLBSubclass
+<23> dwOKSubclass
Here's what it means:
* Win95 has an extra API called WEP which is exported by name. The
braces indicate that the ordinal is not relevant.
* Wine has 5 extra APIs that have both a name and an ordinal. In theory
both the ordinal and the name are significant but in practice this is
not the case. That's why the ordinal is in '<>': specdiff does not know
if the ordinal is significant and will not hold it against you if it
does not match (unless you specified the strict option '-s').
Investigation reveals that all except ArrowBtnWndProc were actually
introduced in later version of Windows.
* Finally two APIs are exported only by name in Wine so the ordinal is
indicated as '@'. Investigation also shows they were later introduced in
Windows.
The all Windows vs. Wine diff shows for the same file:
comdlg32:
-100
-{123} Ssync_ANSI_UNICODE_Struct_For_WOW
-{20} WEP
+<0> ArrowBtnWndProc
So it seems we are missing three APIs but we still have that
extra ArrowBtnWndProc (not listed by the MSDN either).
There's still a big job lying ahead:
* checking each difference, see what's up with it, and try to resolve
it if appropriate.
* try to check which APIs are supposed to be exported by ordinal and
which are not. And try to remove the ordinals fro the Wine spec files
where they are not relevant. Note that one must be extra careful when
doing that
* remove the dummy names from the Wine spec files when the API
obviously is exported by ordinal and does not have a name. This is much
less error prone.
I will try to check it out but I'm already busy so if someone wants
to step forward it will certainly be done faster.
And in part two: all you need to do this at home!
(yes kids, it's safe, you can do it at home :-)
--
Francois Gouget [EMAIL PROTECTED] http://fgouget.free.fr/
"Only wimps use tape backup: _real_ men just upload their important stuff on
ftp, and let the rest of the world mirror it ;)" -- Linus Torvalds
apidiff.txt.gz