From 667fc3af668178b5da6efa0b9cefd09db1021fe2 Mon Sep 17 00:00:00 2001
From: Ulrich Weigand <weigand@informatik.uni-erlangen.de>
Date: Sun, 31 Jan 1999 10:08:42 +0000
Subject: [PATCH] Implementation of VER.DLL. Thunks up to VERSION.DLL.

---
 dlls/ver/.cvsignore  |   1 +
 dlls/ver/Makefile.in |  15 +++++
 dlls/ver/ver16.c     | 138 +++++++++++++++++++++++++++++++++++++++++++
 if1632/ver.spec      |   4 +-
 include/ver.h        |  12 ++++
 5 files changed, 168 insertions(+), 2 deletions(-)
 create mode 100644 dlls/ver/.cvsignore
 create mode 100644 dlls/ver/Makefile.in
 create mode 100644 dlls/ver/ver16.c

diff --git a/dlls/ver/.cvsignore b/dlls/ver/.cvsignore
new file mode 100644
index 00000000000..f3c7a7c5da6
--- /dev/null
+++ b/dlls/ver/.cvsignore
@@ -0,0 +1 @@
+Makefile
diff --git a/dlls/ver/Makefile.in b/dlls/ver/Makefile.in
new file mode 100644
index 00000000000..c937e4267eb
--- /dev/null
+++ b/dlls/ver/Makefile.in
@@ -0,0 +1,15 @@
+DEFS      = @DLLFLAGS@ -D__WINE__
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR    = @srcdir@
+VPATH     = @srcdir@
+MODULE    = ver
+
+C_SRCS = \
+	ver16.c
+
+all: $(MODULE).o
+
+@MAKE_RULES@
+
+### Dependencies:
diff --git a/dlls/ver/ver16.c b/dlls/ver/ver16.c
new file mode 100644
index 00000000000..aa19df0d4fd
--- /dev/null
+++ b/dlls/ver/ver16.c
@@ -0,0 +1,138 @@
+/*
+ * Implementation of VER.DLL
+ *
+ * Copyright 1999 Ulrich Weigand
+ */
+
+#include "windows.h"
+#include "debug.h"
+#include "ver.h"
+#include "ldt.h"
+
+
+/*************************************************************************
+ * GetFileResourceSize16                     [VER.2]
+ */
+DWORD WINAPI GetFileResourceSize16( LPCSTR lpszFileName, 
+                                    SEGPTR spszResType, SEGPTR spszResId,
+                                    LPDWORD lpdwFileOffset )
+{
+    LPCSTR lpszResType = HIWORD( spszResType )? PTR_SEG_TO_LIN( spszResType )
+                                              : (LPCSTR)spszResType;
+    LPCSTR lpszResId = HIWORD( spszResId )? PTR_SEG_TO_LIN( spszResId )
+                                          : (LPCSTR)spszResId;
+
+    return GetFileResourceSize32( lpszFileName, 
+                                  lpszResType, lpszResId, lpdwFileOffset );
+}
+
+/*************************************************************************
+ * GetFileResource16                         [VER.3]
+ */
+DWORD WINAPI GetFileResource16( LPCSTR lpszFileName, 
+                                SEGPTR spszResType, SEGPTR spszResId,
+                                DWORD dwFileOffset, 
+                                DWORD dwResLen, LPVOID lpvData )
+{
+    LPCSTR lpszResType = HIWORD( spszResType )? PTR_SEG_TO_LIN( spszResType )
+                                              : (LPCSTR)spszResType;
+    LPCSTR lpszResId = HIWORD( spszResId )? PTR_SEG_TO_LIN( spszResId )
+                                          : (LPCSTR)spszResId;
+
+    return GetFileResource32( lpszFileName, lpszResType, lpszResId,
+                              dwFileOffset, dwResLen, lpvData );
+}
+
+/*************************************************************************
+ * GetFileVersionInfoSize16                  [VER.6]
+ */
+DWORD WINAPI GetFileVersionInfoSize16( LPCSTR lpszFileName, LPDWORD lpdwHandle )
+{
+    TRACE( ver, "(%s, %p)\n", debugstr_a(lpszFileName), lpdwHandle );
+    return GetFileVersionInfoSize32A( lpszFileName, lpdwHandle );
+}
+
+/*************************************************************************
+ * GetFileVersionInfo16                      [VER.7]
+ */
+DWORD WINAPI GetFileVersionInfo16( LPCSTR lpszFileName, DWORD handle,
+                                   DWORD cbBuf, LPVOID lpvData )
+{
+    TRACE( ver, "(%s, %08lx, %ld, %p)\n", 
+                debugstr_a(lpszFileName), handle, cbBuf, lpvData );
+
+    return GetFileVersionInfo32A( lpszFileName, handle, cbBuf, lpvData );
+}
+
+/*************************************************************************
+ * VerFindFile16                             [VER.8]
+ */
+DWORD WINAPI VerFindFile16( UINT16 flags, LPCSTR lpszFilename, 
+                            LPCSTR lpszWinDir, LPCSTR lpszAppDir,
+                            LPSTR lpszCurDir, UINT16 *lpuCurDirLen,
+                            LPSTR lpszDestDir, UINT16 *lpuDestDirLen )
+{
+    UINT32 curDirLen, destDirLen;
+    DWORD retv = VerFindFile32A( flags, lpszFilename, lpszWinDir, lpszAppDir,
+                                 lpszCurDir, &curDirLen, lpszDestDir, &destDirLen );
+
+    *lpuCurDirLen = (UINT16)curDirLen;
+    *lpuDestDirLen = (UINT16)destDirLen;
+    return retv;
+}
+
+/*************************************************************************
+ * VerInstallFile16                          [VER.9]
+ */
+DWORD WINAPI VerInstallFile16( UINT16 flags, 
+                               LPCSTR lpszSrcFilename, LPCSTR lpszDestFilename, 
+                               LPCSTR lpszSrcDir, LPCSTR lpszDestDir, LPCSTR lpszCurDir,
+                               LPSTR lpszTmpFile, UINT16 *lpwTmpFileLen )
+{
+    UINT32 filelen;
+    DWORD retv = VerInstallFile32A( flags, lpszSrcFilename, lpszDestFilename, 
+                                    lpszSrcDir, lpszDestDir, lpszCurDir, 
+                                    lpszTmpFile, &filelen);
+
+    *lpwTmpFileLen = (UINT16)filelen;
+    return retv;
+}
+
+/*************************************************************************
+ * VerLanguageName16                        [VER.10]
+ */
+DWORD WINAPI VerLanguageName16( UINT16 uLang, LPSTR lpszLang, UINT16 cbLang )
+{
+    return VerLanguageName32A( uLang, lpszLang, cbLang );
+}
+
+/*************************************************************************
+ * VerQueryValue16                          [VER.11]
+ */
+DWORD WINAPI VerQueryValue16( SEGPTR spvBlock, LPCSTR lpszSubBlock, 
+                              SEGPTR *lpspBuffer, UINT16 *lpcb )
+{
+    LPVOID lpvBlock = PTR_SEG_TO_LIN( spvBlock );
+    LPVOID buffer = lpvBlock;
+    UINT32 buflen;
+    DWORD retv;
+
+    TRACE( ver, "(%p, %s, %p, %p)\n", 
+                lpvBlock, debugstr_a(lpszSubBlock), lpspBuffer, lpcb );
+
+    retv = VerQueryValue32A( lpvBlock, lpszSubBlock, &buffer, &buflen );
+    if ( !retv ) return FALSE;
+
+    if ( OFFSETOF( spvBlock ) + (buffer - lpvBlock) >= 0x10000 )
+    {
+        FIXME( ver, "offset %08X too large relative to %04X:%04X\n",
+               buffer - lpvBlock, SELECTOROF( spvBlock ), OFFSETOF( spvBlock ) );
+        return FALSE;
+    }
+
+    *lpcb = buflen;
+    *lpspBuffer = spvBlock + (buffer - lpvBlock);
+
+    return retv;
+}
+
diff --git a/if1632/ver.spec b/if1632/ver.spec
index 759f1edd06f..8f4757e12cb 100644
--- a/if1632/ver.spec
+++ b/if1632/ver.spec
@@ -3,8 +3,8 @@ type	win16
 
 #1 DLLENTRYPOINT
 
-2 pascal GetFileResourceSize(str segptr segptr ptr) GetFileResourceSize
-3 pascal GetFileResource(str segptr segptr long long ptr) GetFileResource
+2 pascal GetFileResourceSize(str segptr segptr ptr) GetFileResourceSize16
+3 pascal GetFileResource(str segptr segptr long long ptr) GetFileResource16
 6 pascal GetFileVersionInfoSize(str ptr) GetFileVersionInfoSize16
 7 pascal GetFileVersionInfo(str long long ptr) GetFileVersionInfo16
 8 pascal VerFindFile(word str str str ptr ptr ptr ptr) VerFindFile16
diff --git a/include/ver.h b/include/ver.h
index 93433b8cfcf..04802c54aef 100644
--- a/include/ver.h
+++ b/include/ver.h
@@ -130,4 +130,16 @@ typedef struct tagVS_FIXEDFILEINFO {
 
 /* 20 GETFILEVERSIONINFORAW */
 
+#ifdef __WINE__
+
+DWORD WINAPI GetFileResourceSize32( LPCSTR lpszFileName,
+                                    LPCSTR lpszResType, LPCSTR lpszResId,
+                                    LPDWORD lpdwFileOffset );
+DWORD WINAPI GetFileResource32( LPCSTR lpszFileName,
+                                LPCSTR lpszResType, LPCSTR lpszResId,
+                                DWORD dwFileOffset,
+                                DWORD dwResLen, LPVOID lpvData );
+
+#endif /* __WINE__ */
+
 #endif	/* __WINE_VER_H */
-- 
GitLab