From: Jacek Caban <jacek@codeweavers.com>
Subject: [PATCH try2] atl100: Added new DLL.
Message-Id: <5225AB42.1070905@codeweavers.com>
Date: Tue, 03 Sep 2013 11:26:26 +0200

---
 dlls/atl110/Makefile.in |  7 ++++
 dlls/atl110/atl110.c    | 94
+++++++++++++++++++++++++++++++++++++++++++++++++
 dlls/atl110/atl110.spec | 52 +++++++++++++++++++++++++++
 include/atlbase.h       |  1 +
 tools/make_specfiles    |  1 +
 5 files changed, 155 insertions(+)
 create mode 100644 dlls/atl110/Makefile.in
 create mode 100644 dlls/atl110/atl110.c
 create mode 100644 dlls/atl110/atl110.spec

diff --git a/dlls/atl110/Makefile.in b/dlls/atl110/Makefile.in
new file mode 100644
index 0000000..f9d98d3
--- /dev/null
+++ b/dlls/atl110/Makefile.in
@@ -0,0 +1,7 @@
+MODULE    = atl110.dll
+IMPORTS   = atl100 ole32 user32
+EXTRADEFS = -D_ATL_VER=_ATL_VER_110
+
+C_SRCS = atl110.c
+
+@MAKE_DLL_RULES@
diff --git a/dlls/atl110/atl110.c b/dlls/atl110/atl110.c
new file mode 100644
index 0000000..f704bd9
--- /dev/null
+++ b/dlls/atl110/atl110.c
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2013 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#define COBJMACROS
+
+#include "windef.h"
+#include "winbase.h"
+#include "winerror.h"
+#include "winuser.h"
+#include "atlbase.h"
+
+#include "wine/debug.h"
+#include "wine/unicode.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(atl);
+
+/***********************************************************************
+ *           AtlGetVersion              [atl110.@]
+ */
+DWORD WINAPI AtlGetVersion(void *pReserved)
+{
+   return _ATL_VER;
+}
+
+/**********************************************************************
+ * AtlAxWin class window procedure
+ */
+static LRESULT CALLBACK AtlAxWin_wndproc( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam )
+{
+    if ( wMsg == WM_CREATE )
+    {
+            DWORD len = GetWindowTextLengthW( hWnd ) + 1;
+            WCHAR *ptr = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) );
+            if (!ptr)
+                return 1;
+            GetWindowTextW( hWnd, ptr, len );
+            AtlAxCreateControlEx( ptr, hWnd, NULL, NULL, NULL, NULL, NULL );
+            HeapFree( GetProcessHeap(), 0, ptr );
+            return 0;
+    }
+    return DefWindowProcW( hWnd, wMsg, wParam, lParam );
+}
+
+BOOL WINAPI AtlAxWinInit(void)
+{
+    WNDCLASSEXW wcex;
+    const WCHAR AtlAxWin110[] = {'A','t','l','A','x','W','i','n','1','1','0',0};
+    const WCHAR AtlAxWinLic110[] = {'A','t','l','A','x','W','i','n','L','i','c','1','1','0',0};
+
+    FIXME("semi-stub\n");
+
+    if ( FAILED( OleInitialize(NULL) ) )
+        return FALSE;
+
+    wcex.cbSize        = sizeof(wcex);
+    wcex.style         = CS_GLOBALCLASS | CS_DBLCLKS;
+    wcex.cbClsExtra    = 0;
+    wcex.cbWndExtra    = 0;
+    wcex.hInstance     = GetModuleHandleW( NULL );
+    wcex.hIcon         = NULL;
+    wcex.hCursor       = NULL;
+    wcex.hbrBackground = NULL;
+    wcex.lpszMenuName  = NULL;
+    wcex.hIconSm       = 0;
+
+    wcex.lpfnWndProc   = AtlAxWin_wndproc;
+    wcex.lpszClassName = AtlAxWin110;
+    if ( !RegisterClassExW( &wcex ) )
+        return FALSE;
+
+    wcex.lpszClassName = AtlAxWinLic110;
+    if ( !RegisterClassExW( &wcex ) )
+        return FALSE;
+
+    return TRUE;
+}
diff --git a/dlls/atl110/atl110.spec b/dlls/atl110/atl110.spec
new file mode 100644
index 0000000..74ee84e
--- /dev/null
+++ b/dlls/atl110/atl110.spec
@@ -0,0 +1,52 @@
+10 stdcall AtlAdvise(ptr ptr ptr ptr) atl100.AtlAdvise
+11 stdcall AtlUnadvise(ptr ptr long) atl100.AtlUnadvise
+12 stdcall AtlFreeMarshalStream(ptr) atl100.AtlFreeMarshalStream
+13 stdcall AtlMarshalPtrInProc(ptr ptr ptr) atl100.AtlMarshalPtrInProc
+14 stdcall AtlUnmarshalPtr(ptr ptr ptr) atl100.AtlUnmarshalPtr
+15 stdcall AtlComModuleGetClassObject(ptr ptr ptr ptr) atl100.AtlComModuleGetClassObject
+17 stdcall AtlComModuleRegisterClassObjects(ptr long long) atl100.AtlComModuleRegisterClassObjects
+20 stub AtlComModuleRevokeClassObjects
+22 stdcall AtlComModuleUnregisterServer(ptr long ptr) atl100.AtlComModuleUnregisterServer
+23 stdcall AtlUpdateRegistryFromResourceD(long wstr long ptr ptr) atl100.AtlUpdateRegistryFromResourceD
+24 stdcall AtlWaitWithMessageLoop(long) atl100.AtlWaitWithMessageLoop
+25 stub AtlSetErrorInfo
+26 stdcall AtlCreateTargetDC(long ptr) atl100.AtlCreateTargetDC
+27 stdcall AtlHiMetricToPixel(ptr ptr) atl100.AtlHiMetricToPixel
+28 stdcall AtlPixelToHiMetric(ptr ptr) atl100.AtlPixelToHiMetric
+29 stub AtlDevModeW2A
+30 stdcall AtlComPtrAssign(ptr ptr) atl100.AtlComPtrAssign
+31 stdcall AtlComQIPtrAssign(ptr ptr ptr) atl100.AtlComQIPtrAssign
+32 stdcall AtlInternalQueryInterface(ptr ptr ptr ptr) atl100.AtlInternalQueryInterface
+34 stdcall AtlGetVersion(ptr)
+35 stdcall AtlAxDialogBoxW(long wstr long ptr long) atl100.AtlAxDialogBoxW
+36 stdcall AtlAxDialogBoxA(long str long ptr long) atl100.AtlAxDialogBoxA
+37 stdcall AtlAxCreateDialogW(long wstr long ptr long) atl100.AtlAxCreateDialogW
+38 stdcall AtlAxCreateDialogA(long str long ptr long) atl100.AtlAxCreateDialogA
+39 stdcall AtlAxCreateControl(ptr ptr ptr ptr) atl100.AtlAxCreateControl
+40 stdcall AtlAxCreateControlEx(ptr ptr ptr ptr ptr ptr ptr) atl100.AtlAxCreateControlEx
+41 stdcall AtlAxAttachControl(ptr ptr ptr) atl100.AtlAxAttachControl
+42 stdcall AtlAxWinInit() atl100.AtlAxWinInit
+43 stdcall AtlWinModuleAddCreateWndData(ptr ptr ptr) atl100.AtlWinModuleAddCreateWndData
+44 stdcall AtlWinModuleExtractCreateWndData(ptr) atl100.AtlWinModuleExtractCreateWndData
+45 stub AtlWinModuleRegisterWndClassInfoW
+46 stub AtlWinModuleRegisterWndClassInfoA
+47 stdcall AtlAxGetControl(long ptr) atl100.AtlAxGetControl
+48 stdcall AtlAxGetHost(long ptr) atl100.AtlAxGetHost
+49 stdcall AtlRegisterClassCategoriesHelper(ptr ptr long) atl100.AtlRegisterClassCategoriesHelper
+50 stdcall AtlIPersistStreamInit_Load(ptr ptr ptr ptr) atl100.AtlIPersistStreamInit_Load
+51 stdcall AtlIPersistStreamInit_Save(ptr long ptr ptr ptr) atl100.AtlIPersistStreamInit_Save
+52 stdcall AtlIPersistPropertyBag_Load(ptr ptr ptr ptr ptr) atl100.AtlIPersistPropertyBag_Load
+53 stub AtlIPersistPropertyBag_Save
+54 stdcall AtlGetObjectSourceInterface(ptr ptr ptr ptr ptr) atl100.AtlGetObjectSourceInterface
+56 stdcall AtlLoadTypeLib(long wstr ptr ptr) atl100.AtlLoadTypeLib
+58 stdcall AtlModuleAddTermFunc(ptr ptr long) atl100.AtlModuleAddTermFunc
+59 stub AtlAxCreateControlLic
+60 stub AtlAxCreateControlLicEx
+61 stdcall AtlCreateRegistrar(ptr) atl100.AtlCreateRegistrar
+62 stub AtlWinModuleRegisterClassExW
+63 stub AtlWinModuleRegisterClassExA
+64 stdcall AtlCallTermFunc(ptr) atl100.AtlCallTermFunc
+65 stdcall AtlWinModuleInit(ptr) atl100.AtlWinModuleInit
+66 stub AtlWinModuleTerm
+67 stdcall AtlSetPerUserRegistration(long) atl100.AtlSetPerUserRegistration
+68 stdcall AtlGetPerUserRegistration(ptr) atl100.AtlGetPerUserRegistration
diff --git a/include/atlbase.h b/include/atlbase.h
index 1f91f55..660fbf5 100644
--- a/include/atlbase.h
+++ b/include/atlbase.h
@@ -29,6 +29,7 @@
 #define _ATL_VER_70  0x0700
 #define _ATL_VER_80  0x0800
 #define _ATL_VER_100 0x0a00
+#define _ATL_VER_110 0x0b00
 
 #ifndef _ATL_VER
 #define _ATL_VER _ATL_VER_100
diff --git a/tools/make_specfiles b/tools/make_specfiles
index 1a57692..c0de805 100755
--- a/tools/make_specfiles
+++ b/tools/make_specfiles
@@ -115,6 +115,7 @@ my @dll_groups =
  ],
  [
   "atl100",
+  "atl110",
   "atl",
   "atl80",
  ],