Jacek Caban : wscript.exe: Added parsing script file implmentation.

Alexandre Julliard julliard at winehq.org
Wed Jul 28 10:45:09 CDT 2010


Module: wine
Branch: master
Commit: 07f169a959b755f976034017c9b107a504f4503e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=07f169a959b755f976034017c9b107a504f4503e

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Jul 27 15:52:30 2010 +0200

wscript.exe: Added parsing script file implmentation.

---

 programs/wscript/Makefile.in |    2 +-
 programs/wscript/main.c      |   57 +++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 57 insertions(+), 2 deletions(-)

diff --git a/programs/wscript/Makefile.in b/programs/wscript/Makefile.in
index 64c9678..97b1054 100644
--- a/programs/wscript/Makefile.in
+++ b/programs/wscript/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = wscript.exe
 APPMODE   = -mwindows -municode
-IMPORTS   = uuid ole32 advapi32
+IMPORTS   = uuid oleaut32 ole32 advapi32
 EXTRADEFS = -DWINE_NO_UNICODE_MACROS
 
 C_SRCS = \
diff --git a/programs/wscript/main.c b/programs/wscript/main.c
index 674bcba..f94c3ae 100644
--- a/programs/wscript/main.c
+++ b/programs/wscript/main.c
@@ -225,6 +225,60 @@ static HRESULT init_engine(IActiveScript *script, IActiveScriptParse *parser)
     return SUCCEEDED(hres);
 }
 
+static BSTR get_script_str(const WCHAR *filename)
+{
+    const char *file_map;
+    HANDLE file, map;
+    DWORD size, len;
+    BSTR ret;
+
+    file = CreateFileW(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL);
+    if(file == INVALID_HANDLE_VALUE)
+        return NULL;
+
+    size = GetFileSize(file, NULL);
+    map = CreateFileMappingW(file, NULL, PAGE_READONLY, 0, 0, NULL);
+    CloseHandle(file);
+    if(map == INVALID_HANDLE_VALUE)
+        return NULL;
+
+    file_map = MapViewOfFile(map, FILE_MAP_READ, 0, 0, 0);
+    CloseHandle(map);
+    if(!file_map)
+        return NULL;
+
+    len = MultiByteToWideChar(CP_ACP, 0, file_map, size, NULL, 0);
+    ret = SysAllocStringLen(NULL, len);
+    MultiByteToWideChar(CP_ACP, 0, file_map, size, ret, len);
+
+    UnmapViewOfFile(file_map);
+    return ret;
+}
+
+static void run_script(const WCHAR *filename, IActiveScript *script, IActiveScriptParse *parser)
+{
+    BSTR text;
+    HRESULT hres;
+
+    text = get_script_str(filename);
+    if(!text) {
+        WINE_FIXME("Could not get script text\n");
+        return;
+    }
+
+    hres = IActiveScriptParse64_ParseScriptText(parser, text, NULL, NULL, NULL, 1, 1,
+            SCRIPTTEXT_HOSTMANAGESSOURCE|SCRIPTITEM_ISVISIBLE, NULL, NULL);
+    SysFreeString(text);
+    if(FAILED(hres)) {
+        WINE_FIXME("ParseScriptText failed: %08x\n", hres);
+        return;
+    }
+
+    hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_STARTED);
+    if(FAILED(hres))
+        WINE_FIXME("SetScriptState failed: %08x\n", hres);
+}
+
 int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR cmdline, int cmdshow)
 {
     IActiveScriptParse *parser;
@@ -232,7 +286,7 @@ int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR cmdline, int cm
     const WCHAR *ext;
     CLSID clsid;
 
-    WINE_FIXME("(%p %p %s %x)\n", hInst, hPrevInst, wine_dbgstr_w(cmdline), cmdshow);
+    WINE_TRACE("(%p %p %s %x)\n", hInst, hPrevInst, wine_dbgstr_w(cmdline), cmdshow);
 
     if(!*cmdline)
         return 1;
@@ -254,6 +308,7 @@ int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR cmdline, int cm
     }
 
     if(init_engine(script, parser)) {
+        run_script(cmdline, script, parser);
         IActiveScript_Close(script);
     }else {
         WINE_FIXME("Script initialization failed\n");




More information about the wine-cvs mailing list