Module: wine Branch: master Commit: 66c728dec1a37f10c6e039f0a63558c05590ab9d URL: http://source.winehq.org/git/wine.git/?a=commit;h=66c728dec1a37f10c6e039f0a6...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Mar 12 18:41:11 2008 +0100
jscript: Added Dll[Un]RegisterServer implementation.
---
dlls/jscript/Makefile.in | 2 + dlls/jscript/jscript.inf | 97 +++++++++++++++++++++++++++++++++++++++++++ dlls/jscript/jscript_main.c | 86 ++++++++++++++++++++++++++++++++++++-- dlls/jscript/rsrc.rc | 20 +++++++++ 4 files changed, 200 insertions(+), 5 deletions(-)
diff --git a/dlls/jscript/Makefile.in b/dlls/jscript/Makefile.in index c1ce428..f314abb 100644 --- a/dlls/jscript/Makefile.in +++ b/dlls/jscript/Makefile.in @@ -6,6 +6,8 @@ MODULE = jscript.dll IMPORTS = kernel32 EXTRALIBS = -luuid
+RC_SRCS = rsrc.rc + C_SRCS = \ jscript_main.c
diff --git a/dlls/jscript/jscript.inf b/dlls/jscript/jscript.inf new file mode 100644 index 0000000..bdec721 --- /dev/null +++ b/dlls/jscript/jscript.inf @@ -0,0 +1,97 @@ +[version] +Signature="$CHICAGO$" + + +[RegisterDll] +AddReg=Classes.Reg + + +[UnregisterDll] +DelReg=Classes.Reg + + +[Classes.Reg] +HKCR,"CLSID%CLSID_JScript%",,,"JScript Language" +HKCR,"CLSID%CLSID_JScript%\Implemented Categories%CATID_ActiveScript%",,, +HKCR,"CLSID%CLSID_JScript%\Implemented Categories%CATID_ActiveScriptParse%",,, +HKCR,"CLSID%CLSID_JScript%\InprocServer32",,,"%MODULE%" +HKCR,"CLSID%CLSID_JScript%\InprocServer32","ThreadingModel",,"Both" +HKCR,"CLSID%CLSID_JScript%\OLEScript",,, +HKCR,"CLSID%CLSID_JScript%\ProgID",,,"JScript" + +HKCR,"CLSID%CLSID_JScriptAuthor%",,,"JScript Language Authoring" +HKCR,"CLSID%CLSID_JScriptAuthor%\Implemented Categories%CATID_ActiveScriptAuthor%",,, +HKCR,"CLSID%CLSID_JScriptAuthor%\InprocServer32",,,"%MODULE%" +HKCR,"CLSID%CLSID_JScriptAuthor%\InprocServer32","ThreadingModel",,"Both" +HKCR,"CLSID%CLSID_JScriptAuthor%\OLEScript",,, +HKCR,"CLSID%CLSID_JScriptAuthor%\ProgID",,,"JScript Author" + +HKCR,"CLSID%CLSID_JScriptEncode%",,,"JScript Language Encoding" +HKCR,"CLSID%CLSID_JScriptEncode%\Implemented Categories%CATID_ActiveScript%",,, +HKCR,"CLSID%CLSID_JScriptEncode%\Implemented Categories%CATID_ActiveScriptParse%",,, +HKCR,"CLSID%CLSID_JScriptEncode%\Implemented Categories%CATID_ActiveScriptEncode%",,, +HKCR,"CLSID%CLSID_JScriptEncode%\InprocServer32",,,"%MODULE%" +HKCR,"CLSID%CLSID_JScriptEncode%\InprocServer32","ThreadingModel",,"Both" +HKCR,"CLSID%CLSID_JScriptEncode%\OLEScript",,, +HKCR,"CLSID%CLSID_JScriptEncode%\ProgID",,,"JScript.Encode" + +HKCR,"Component Categories%CATID_ActiveScriptAuthor%","409",,"Active Scripting Engine with Authoring" +HKCR,"Component Categories%CATID_ActiveScript%","409",,"Active Scripting Engine" +HKCR,"Component Categories%CATID_ActiveScriptParse%","409",,"Active Scripting Engine with Parsing" +HKCR,"Component Categories%CATID_ActiveScriptEncode%","409",,"Active Scripting Engine with Encoding" + +HKCR,"ECMAScript",,,"JScript Language" +HKCR,"ECMAScript\CLSID",,,"%CLSID_JScript%" +HKCR,"ECMAScript\OLEScript",,, + +HKCR,"JavaScript",,,"JScript Language" +HKCR,"JavaScript\CLSID",,,"%CLSID_JScript%" +HKCR,"JavaScript\OLEScript",,, + +HKCR,"JavaScript Author",,,"JScript Language Authoring" +HKCR,"JavaScript Author\CLSID",,,"%CLSID_JScriptAuthor%" +HKCR,"JavaScript Author\OLEScript",,, + +HKCR,"JavaScript1.1",,,"JScript Language" +HKCR,"JavaScript1.1\CLSID",,,"%CLSID_JScript%" +HKCR,"JavaScript1.1\OLEScript",,, + +HKCR,"JavaScript1.1 Author",,,"JScript Language Authoring" +HKCR,"JavaScript1.1 Author\CLSID",,,"%CLSID_JScriptAuthor%" +HKCR,"JavaScript1.1 Author\OLEScript",,, + +HKCR,"JavaScript1.2",,,"JScript Language" +HKCR,"JavaScript1.2\CLSID",,,"%CLSID_JScript%" +HKCR,"JavaScript1.2\OLEScript",,, + +HKCR,"JavaScript1.2 Author",,,"JScript Language Authoring" +HKCR,"JavaScript1.2 Author\CLSID",,,"%CLSID_JScriptAuthor%" +HKCR,"JavaScript1.2 Author\OLEScript",,, + +HKCR,"JavaScript1.3",,,"JScript Language" +HKCR,"JavaScript1.3\CLSID",,,"%CLSID_JScript%" +HKCR,"JavaScript1.3\OLEScript",,, + +HKCR,"JScript",,,"JScript Language" +HKCR,"JScript\CLSID",,,"%CLSID_JScript%" +HKCR,"JScript\OLEScript",,, + +HKCR,"JScript Author",,,"JScript Language Authoring" +HKCR,"JScript Author\CLSID",,,"%CLSID_JScriptAuthor%" +HKCR,"JScript Author\OLEScript",,, + +HKCR,"JScript.Encode",,,"JScript Language Encoding" +HKCR,"JScript.Encode\CLSID",,,"%CLSID_JScriptEncode%" +HKCR,"JScript.Encode\OLEScript",,, + +HKCR,"LiveScript",,,"JScript Language" +HKCR,"LiveScript\CLSID",,,"%CLSID_JScript%" +HKCR,"LiveScript\OLEScript",,, + +HKCR,"LiveScript Author",,,"JScript Language Authoring" +HKCR,"LiveScript Author\CLSID",,,"%CLSID_JScriptAuthor%" +HKCR,"LiveScript Author\OLEScript",,, + + +[Strings] +MODULE="jscript.dll" diff --git a/dlls/jscript/jscript_main.c b/dlls/jscript/jscript_main.c index 807a821..dea26ca 100644 --- a/dlls/jscript/jscript_main.c +++ b/dlls/jscript/jscript_main.c @@ -19,16 +19,34 @@ #include "config.h"
#include <stdarg.h> +#include <stdio.h>
#define COBJMACROS
#include "windef.h" #include "winbase.h" +#include "winuser.h" +#include "winreg.h" +#include "ole2.h" +#include "advpub.h" + +#include "initguid.h" +#include "activscp.h" +#include "activaut.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
+static const CLSID CLSID_JScript = + {0xf414c260,0x6ac0,0x11cf,{0xb6,0xd1,0x00,0xaa,0x00,0xbb,0xbb,0x58}}; +static const CLSID CLSID_JScriptAuthor = + {0xf414c261,0x6ac0,0x11cf,{0xb6,0xd1,0x00,0xaa,0x00,0xbb,0xbb,0x58}}; +static const CLSID CLSID_JScriptEncode = + {0xf414c262,0x6ac0,0x11cf,{0xb6,0xd1,0x00,0xaa,0x00,0xbb,0xbb,0x58}}; + +static HINSTANCE jscript_hinstance; + /****************************************************************** * DllMain (jscript.@) */ @@ -41,7 +59,8 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv) case DLL_WINE_PREATTACH: return FALSE; /* prefer native version */ case DLL_PROCESS_ATTACH: - DisableThreadLibraryCalls(hInstDLL); + DisableThreadLibraryCalls(hInstDLL); + jscript_hinstance = hInstDLL; break; }
@@ -67,12 +86,69 @@ HRESULT WINAPI DllCanUnloadNow(void) }
/*********************************************************************** + * register_inf + */ + +#define INF_SET_ID(id) \ + do \ + { \ + static CHAR name[] = #id; \ + \ + pse[i].pszName = name; \ + clsids[i++] = &id; \ + } while (0) + +static HRESULT register_inf(BOOL doregister) +{ + HRESULT hres; + HMODULE hAdvpack; + HRESULT (WINAPI *pRegInstall)(HMODULE hm, LPCSTR pszSection, const STRTABLEA* pstTable); + STRTABLEA strtable; + STRENTRYA pse[7]; + static CLSID const *clsids[7]; + int i = 0; + + static const WCHAR advpackW[] = {'a','d','v','p','a','c','k','.','d','l','l',0}; + + INF_SET_ID(CLSID_JScript); + INF_SET_ID(CLSID_JScriptAuthor); + INF_SET_ID(CLSID_JScriptEncode); + INF_SET_ID(CATID_ActiveScript); + INF_SET_ID(CATID_ActiveScriptParse); + INF_SET_ID(CATID_ActiveScriptEncode); + INF_SET_ID(CATID_ActiveScriptAuthor); + + for(i = 0; i < sizeof(pse)/sizeof(pse[0]); i++) { + pse[i].pszValue = HeapAlloc(GetProcessHeap(), 0, 39); + sprintf(pse[i].pszValue, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", + clsids[i]->Data1, clsids[i]->Data2, clsids[i]->Data3, clsids[i]->Data4[0], + clsids[i]->Data4[1], clsids[i]->Data4[2], clsids[i]->Data4[3], clsids[i]->Data4[4], + clsids[i]->Data4[5], clsids[i]->Data4[6], clsids[i]->Data4[7]); + } + + strtable.cEntries = sizeof(pse)/sizeof(pse[0]); + strtable.pse = pse; + + hAdvpack = LoadLibraryW(advpackW); + pRegInstall = (void *)GetProcAddress(hAdvpack, "RegInstall"); + + hres = pRegInstall(jscript_hinstance, doregister ? "RegisterDll" : "UnregisterDll", &strtable); + + for(i=0; i < sizeof(pse)/sizeof(pse[0]); i++) + HeapFree(GetProcessHeap(), 0, pse[i].pszValue); + + return hres; +} + +#undef INF_SET_CLSID + +/*********************************************************************** * DllRegisterServer (jscript.@) */ HRESULT WINAPI DllRegisterServer(void) { - FIXME("()\n"); - return S_OK; + TRACE("()\n"); + return register_inf(TRUE); }
/*********************************************************************** @@ -80,6 +156,6 @@ HRESULT WINAPI DllRegisterServer(void) */ HRESULT WINAPI DllUnregisterServer(void) { - FIXME("()\n"); - return S_OK; + TRACE("()\n"); + return register_inf(FALSE); } diff --git a/dlls/jscript/rsrc.rc b/dlls/jscript/rsrc.rc new file mode 100644 index 0000000..7a08b79 --- /dev/null +++ b/dlls/jscript/rsrc.rc @@ -0,0 +1,20 @@ +/* + * Copyright 2008 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 + */ + +/* @makedep: jscript.inf */ +REGINST REGINST jscript.inf