Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / reactos / dll / win32 / hhctrl.ocx / hhctrl.c
diff --git a/reactos/dll/win32/hhctrl.ocx/hhctrl.c b/reactos/dll/win32/hhctrl.ocx/hhctrl.c
deleted file mode 100644 (file)
index 89cda1f..0000000
+++ /dev/null
@@ -1,583 +0,0 @@
-/*
- * hhctrl implementation
- *
- * Copyright 2004 Krzysztof Foltman
- * Copyright 2007 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 "hhctrl.h"
-
-#include <rpcproxy.h>
-
-HINSTANCE hhctrl_hinstance;
-BOOL hh_process = FALSE;
-
-
-BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID lpvReserved)
-{
-    TRACE("(%p,%d,%p)\n", hInstance, fdwReason, lpvReserved);
-
-    switch (fdwReason)
-    {
-    case DLL_PROCESS_ATTACH:
-        hhctrl_hinstance = hInstance;
-        DisableThreadLibraryCalls(hInstance);
-        break;
-    }
-    return TRUE;
-}
-
-static const char *command_to_string(UINT command)
-{
-#define X(x) case x: return #x
-    switch (command)
-    {
-        X( HH_DISPLAY_TOPIC );
-        X( HH_DISPLAY_TOC );
-        X( HH_DISPLAY_INDEX );
-        X( HH_DISPLAY_SEARCH );
-        X( HH_SET_WIN_TYPE );
-        X( HH_GET_WIN_TYPE );
-        X( HH_GET_WIN_HANDLE );
-        X( HH_ENUM_INFO_TYPE );
-        X( HH_SET_INFO_TYPE );
-        X( HH_SYNC );
-        X( HH_RESERVED1 );
-        X( HH_RESERVED2 );
-        X( HH_RESERVED3 );
-        X( HH_KEYWORD_LOOKUP );
-        X( HH_DISPLAY_TEXT_POPUP );
-        X( HH_HELP_CONTEXT );
-        X( HH_TP_HELP_CONTEXTMENU );
-        X( HH_TP_HELP_WM_HELP );
-        X( HH_CLOSE_ALL );
-        X( HH_ALINK_LOOKUP );
-        X( HH_GET_LAST_ERROR );
-        X( HH_ENUM_CATEGORY );
-        X( HH_ENUM_CATEGORY_IT );
-        X( HH_RESET_IT_FILTER );
-        X( HH_SET_INCLUSIVE_FILTER );
-        X( HH_SET_EXCLUSIVE_FILTER );
-        X( HH_INITIALIZE );
-        X( HH_UNINITIALIZE );
-        X( HH_SAFE_DISPLAY_TOPIC );
-        X( HH_PRETRANSLATEMESSAGE );
-        X( HH_SET_GLOBAL_PROPERTY );
-    default: return "???";
-    }
-#undef X
-}
-
-static BOOL resolve_filename(const WCHAR *filename, WCHAR *fullname, DWORD buflen, WCHAR **index, WCHAR **window)
-{
-    const WCHAR *extra;
-    WCHAR chm_file[MAX_PATH];
-
-    static const WCHAR helpW[] = {'\\','h','e','l','p','\\',0};
-    static const WCHAR delimW[] = {':',':',0};
-    static const WCHAR delim2W[] = {'>',0};
-
-    filename = skip_schema(filename);
-
-    /* the format is "helpFile[::/index][>window]" */
-    if (index) *index = NULL;
-    if (window) *window = NULL;
-
-    extra = strstrW(filename, delim2W);
-    if (extra)
-    {
-        memcpy(chm_file, filename, (extra-filename)*sizeof(WCHAR));
-        chm_file[extra-filename] = 0;
-        filename = chm_file;
-        if (window)
-            *window = strdupW(extra+1);
-    }
-
-    extra = strstrW(filename, delimW);
-    if (extra)
-    {
-        if (filename != chm_file)
-            memcpy(chm_file, filename, (extra-filename)*sizeof(WCHAR));
-        chm_file[extra-filename] = 0;
-        filename = chm_file;
-        if (index)
-            *index = strdupW(extra+2);
-    }
-
-    GetFullPathNameW(filename, buflen, fullname, NULL);
-    if (GetFileAttributesW(fullname) == INVALID_FILE_ATTRIBUTES)
-    {
-        GetWindowsDirectoryW(fullname, buflen);
-        strcatW(fullname, helpW);
-        strcatW(fullname, filename);
-    }
-    return (GetFileAttributesW(fullname) != INVALID_FILE_ATTRIBUTES);
-}
-
-/******************************************************************
- *             HtmlHelpW (HHCTRL.OCX.15)
- */
-HWND WINAPI HtmlHelpW(HWND caller, LPCWSTR filename, UINT command, DWORD_PTR data)
-{
-    WCHAR fullname[MAX_PATH];
-
-    TRACE("(%p, %s, command=%s, data=%lx)\n",
-          caller, debugstr_w( filename ),
-          command_to_string( command ), data);
-
-    switch (command)
-    {
-    case HH_DISPLAY_TOPIC:
-    case HH_DISPLAY_TOC:
-    case HH_DISPLAY_INDEX:
-    case HH_DISPLAY_SEARCH:{
-        BOOL res;
-        NMHDR nmhdr;
-        HHInfo *info = NULL;
-        WCHAR *window = NULL;
-        const WCHAR *index = NULL;
-        WCHAR *default_index = NULL;
-        int tab_index = TAB_CONTENTS;
-
-        if (!filename)
-            return NULL;
-
-        if (!resolve_filename(filename, fullname, MAX_PATH, &default_index, &window))
-        {
-            WARN("can't find %s\n", debugstr_w(filename));
-            return 0;
-        }
-        index = default_index;
-
-        if (window)
-            info = find_window(window);
-
-        info = CreateHelpViewer(info, fullname, caller);
-        if(!info)
-        {
-            heap_free(default_index);
-            heap_free(window);
-            return NULL;
-        }
-
-        if(!index)
-            index = info->WinType.pszFile;
-        if(!info->WinType.pszType)
-            info->WinType.pszType = info->stringsW.pszType = window;
-        else
-            heap_free(window);
-
-        /* called to load a specified topic */
-        switch(command)
-        {
-        case HH_DISPLAY_TOPIC:
-        case HH_DISPLAY_TOC:
-            if (data)
-            {
-                static const WCHAR delimW[] = {':',':',0};
-                const WCHAR *i = (const WCHAR *)data;
-
-                index = strstrW(i, delimW);
-                if(index)
-                {
-                    if(memcmp(info->pCHMInfo->szFile, i, index-i))
-                        FIXME("Opening a CHM file in the context of another is not supported.\n");
-                    index += strlenW(delimW);
-                }
-                else
-                    index = i;
-            }
-            break;
-        }
-
-        res = NavigateToChm(info, info->pCHMInfo->szFile, index);
-        heap_free(default_index);
-
-        if(!res)
-        {
-            ReleaseHelpViewer(info);
-            return NULL;
-        }
-
-        switch(command)
-        {
-        case HH_DISPLAY_TOPIC:
-        case HH_DISPLAY_TOC:
-            tab_index = TAB_CONTENTS;
-            break;
-        case HH_DISPLAY_INDEX:
-            tab_index = TAB_INDEX;
-            if (data)
-                FIXME("Should select keyword '%s'.\n", debugstr_w((WCHAR *)data));
-            break;
-        case HH_DISPLAY_SEARCH:
-            tab_index = TAB_SEARCH;
-            if (data)
-                FIXME("Should display search specified by HH_FTS_QUERY structure.\n");
-            break;
-        }
-        /* open the requested tab */
-        memset(&nmhdr, 0, sizeof(nmhdr));
-        nmhdr.code = TCN_SELCHANGE;
-        SendMessageW(info->hwndTabCtrl, TCM_SETCURSEL, (WPARAM)info->tabs[tab_index].id, 0);
-        SendMessageW(info->WinType.hwndNavigation, WM_NOTIFY, 0, (LPARAM)&nmhdr);
-
-        return info->WinType.hwndHelp;
-    }
-    case HH_HELP_CONTEXT: {
-        WCHAR *window = NULL;
-        HHInfo *info = NULL;
-        LPWSTR url;
-
-        if (!filename)
-            return NULL;
-
-        if (!resolve_filename(filename, fullname, MAX_PATH, NULL, &window))
-        {
-            WARN("can't find %s\n", debugstr_w(filename));
-            return 0;
-        }
-
-        if (window)
-            info = find_window(window);
-
-        info = CreateHelpViewer(info, fullname, caller);
-        if(!info)
-        {
-            heap_free(window);
-            return NULL;
-        }
-
-        if(!info->WinType.pszType)
-            info->WinType.pszType = info->stringsW.pszType = window;
-        else
-            heap_free(window);
-
-        url = FindContextAlias(info->pCHMInfo, data);
-        if(!url)
-        {
-            if(!data) /* there may legitimately be no context alias for id 0 */
-                return info->WinType.hwndHelp;
-            ReleaseHelpViewer(info);
-            return NULL;
-        }
-
-        NavigateToUrl(info, url);
-        heap_free(url);
-        return info->WinType.hwndHelp;
-    }
-    case HH_PRETRANSLATEMESSAGE: {
-        static BOOL warned = FALSE;
-
-        if (!warned)
-        {
-            FIXME("HH_PRETRANSLATEMESSAGE unimplemented\n");
-            warned = TRUE;
-        }
-        return 0;
-    }
-    case HH_CLOSE_ALL: {
-        HHInfo *info, *next;
-
-        LIST_FOR_EACH_ENTRY_SAFE(info, next, &window_list, HHInfo, entry)
-        {
-            TRACE("Destroying window %s.\n", debugstr_w(info->WinType.pszType));
-            ReleaseHelpViewer(info);
-        }
-        return 0;
-    }
-    case HH_SET_WIN_TYPE: {
-        HH_WINTYPEW *wintype = (HH_WINTYPEW *)data;
-        WCHAR *window = NULL;
-        HHInfo *info = NULL;
-
-        if (!filename && wintype->pszType)
-            window = strdupW(wintype->pszType);
-        else if (!filename || !resolve_filename(filename, fullname, MAX_PATH, NULL, &window) || !window)
-        {
-            WARN("can't find window name: %s\n", debugstr_w(filename));
-            return 0;
-        }
-        info = find_window(window);
-        if (!info)
-        {
-            info = heap_alloc_zero(sizeof(HHInfo));
-            info->WinType.pszType = info->stringsW.pszType = window;
-            list_add_tail(&window_list, &info->entry);
-        }
-        else
-            heap_free(window);
-
-        TRACE("Changing WINTYPE, fsValidMembers=0x%x\n", wintype->fsValidMembers);
-
-        MergeChmProperties(wintype, info, TRUE);
-        UpdateHelpWindow(info);
-        return 0;
-    }
-    case HH_GET_WIN_TYPE: {
-        HH_WINTYPEW *wintype = (HH_WINTYPEW *)data;
-        WCHAR *window = NULL;
-        HHInfo *info = NULL;
-
-        if (!filename || !resolve_filename(filename, fullname, MAX_PATH, NULL, &window) || !window)
-        {
-            WARN("can't find window name: %s\n", debugstr_w(filename));
-            return 0;
-        }
-        info = find_window(window);
-        if (!info)
-        {
-            WARN("Could not find window named %s.\n", debugstr_w(window));
-            heap_free(window);
-            return (HWND)~0;
-        }
-
-        TRACE("Retrieving WINTYPE for %s.\n", debugstr_w(window));
-        *wintype = info->WinType;
-        heap_free(window);
-        return 0;
-    }
-    default:
-        FIXME("HH case %s not handled.\n", command_to_string( command ));
-    }
-
-    return 0;
-}
-
-static void wintypeAtoW(const HH_WINTYPEA *data, HH_WINTYPEW *wdata, struct wintype_stringsW *stringsW)
-{
-    memcpy(wdata, data, sizeof(*data));
-    /* convert all of the ANSI strings to Unicode */
-    wdata->pszType       = stringsW->pszType       = strdupAtoW(data->pszType);
-    wdata->pszCaption    = stringsW->pszCaption    = strdupAtoW(data->pszCaption);
-    wdata->pszToc        = stringsW->pszToc        = strdupAtoW(data->pszToc);
-    wdata->pszIndex      = stringsW->pszIndex      = strdupAtoW(data->pszIndex);
-    wdata->pszFile       = stringsW->pszFile       = strdupAtoW(data->pszFile);
-    wdata->pszHome       = stringsW->pszHome       = strdupAtoW(data->pszHome);
-    wdata->pszJump1      = stringsW->pszJump1      = strdupAtoW(data->pszJump1);
-    wdata->pszJump2      = stringsW->pszJump2      = strdupAtoW(data->pszJump2);
-    wdata->pszUrlJump1   = stringsW->pszUrlJump1   = strdupAtoW(data->pszUrlJump1);
-    wdata->pszUrlJump2   = stringsW->pszUrlJump2   = strdupAtoW(data->pszUrlJump2);
-    wdata->pszCustomTabs = stringsW->pszCustomTabs = strdupAtoW(data->pszCustomTabs);
-}
-
-static void wintypeWtoA(const HH_WINTYPEW *wdata, HH_WINTYPEA *data, struct wintype_stringsA *stringsA)
-{
-    memcpy(data, wdata, sizeof(*wdata));
-    /* convert all of the Unicode strings to ANSI */
-    data->pszType       = stringsA->pszType       = strdupWtoA(wdata->pszType);
-    data->pszCaption    = stringsA->pszCaption    = strdupWtoA(wdata->pszCaption);
-    data->pszToc        = stringsA->pszToc        = strdupWtoA(wdata->pszToc);
-    data->pszIndex      = stringsA->pszFile       = strdupWtoA(wdata->pszIndex);
-    data->pszFile       = stringsA->pszFile       = strdupWtoA(wdata->pszFile);
-    data->pszHome       = stringsA->pszHome       = strdupWtoA(wdata->pszHome);
-    data->pszJump1      = stringsA->pszJump1      = strdupWtoA(wdata->pszJump1);
-    data->pszJump2      = stringsA->pszJump2      = strdupWtoA(wdata->pszJump2);
-    data->pszUrlJump1   = stringsA->pszUrlJump1   = strdupWtoA(wdata->pszUrlJump1);
-    data->pszUrlJump2   = stringsA->pszUrlJump2   = strdupWtoA(wdata->pszUrlJump2);
-    data->pszCustomTabs = stringsA->pszCustomTabs = strdupWtoA(wdata->pszCustomTabs);
-}
-
-/******************************************************************
- *             HtmlHelpA (HHCTRL.OCX.14)
- */
-HWND WINAPI HtmlHelpA(HWND caller, LPCSTR filename, UINT command, DWORD_PTR data)
-{
-    WCHAR *wfile = strdupAtoW( filename );
-    HWND result = 0;
-
-    if (data)
-    {
-        switch(command)
-        {
-        case HH_ALINK_LOOKUP:
-        case HH_DISPLAY_SEARCH:
-        case HH_DISPLAY_TEXT_POPUP:
-        case HH_GET_LAST_ERROR:
-        case HH_KEYWORD_LOOKUP:
-        case HH_SYNC:
-            FIXME("structures not handled yet\n");
-            break;
-
-        case HH_SET_WIN_TYPE:
-        {
-            struct wintype_stringsW stringsW;
-            HH_WINTYPEW wdata;
-
-            wintypeAtoW((HH_WINTYPEA *)data, &wdata, &stringsW);
-            result = HtmlHelpW( caller, wfile, command, (DWORD_PTR)&wdata );
-            wintype_stringsW_free(&stringsW);
-            goto done;
-        }
-        case HH_GET_WIN_TYPE:
-        {
-            HH_WINTYPEW wdata;
-            HHInfo *info;
-
-            result = HtmlHelpW( caller, wfile, command, (DWORD_PTR)&wdata );
-            if (!wdata.pszType) break;
-            info = find_window(wdata.pszType);
-            if (!info) break;
-            wintype_stringsA_free(&info->stringsA);
-            wintypeWtoA(&wdata, (HH_WINTYPEA *)data, &info->stringsA);
-            goto done;
-        }
-
-        case HH_DISPLAY_INDEX:
-        case HH_DISPLAY_TOPIC:
-        case HH_DISPLAY_TOC:
-        case HH_GET_WIN_HANDLE:
-        case HH_SAFE_DISPLAY_TOPIC:
-        {
-            WCHAR *wdata = strdupAtoW( (const char *)data );
-            result = HtmlHelpW( caller, wfile, command, (DWORD_PTR)wdata );
-            heap_free(wdata);
-            goto done;
-        }
-
-        case HH_CLOSE_ALL:
-        case HH_HELP_CONTEXT:
-        case HH_INITIALIZE:
-        case HH_PRETRANSLATEMESSAGE:
-        case HH_TP_HELP_CONTEXTMENU:
-        case HH_TP_HELP_WM_HELP:
-        case HH_UNINITIALIZE:
-            /* either scalar or pointer to scalar - do nothing */
-            break;
-
-        default:
-            FIXME("Unknown command: %s (%d)\n", command_to_string(command), command);
-            break;
-        }
-    }
-
-    result = HtmlHelpW( caller, wfile, command, data );
-done:
-    heap_free(wfile);
-    return result;
-}
-
-/******************************************************************
- *             doWinMain (HHCTRL.OCX.13)
- */
-int WINAPI doWinMain(HINSTANCE hInstance, LPSTR szCmdLine)
-{
-    MSG msg;
-    int len, buflen, mapid = -1;
-    WCHAR *filename;
-    char *endq = NULL;
-    HWND hwnd;
-
-    hh_process = TRUE;
-
-    /* Parse command line option of the HTML Help command.
-     *
-     * Note: The only currently handled action is "mapid",
-     *  which corresponds to opening a specific page.
-     */
-    while(*szCmdLine == '-')
-    {
-        LPSTR space, ptr;
-
-        ptr = szCmdLine + 1;
-        space = strchr(ptr, ' ');
-        if(!strncmp(ptr, "mapid", space-ptr))
-        {
-            char idtxt[10];
-
-            ptr += strlen("mapid")+1;
-            space = strchr(ptr, ' ');
-            /* command line ends without number */
-            if (!space)
-                return 0;
-            memcpy(idtxt, ptr, space-ptr);
-            idtxt[space-ptr] = '\0';
-            mapid = atoi(idtxt);
-            szCmdLine = space+1;
-        }
-        else
-        {
-            FIXME("Unhandled HTML Help command line parameter! (%.*s)\n", (int)(space-szCmdLine), szCmdLine);
-            return 0;
-        }
-    }
-
-    /* FIXME: Check szCmdLine for bad arguments */
-    if (*szCmdLine == '\"')
-        endq = strchr(++szCmdLine, '\"');
-
-    if (endq)
-        len = endq - szCmdLine;
-    else
-        len = strlen(szCmdLine);
-
-    /* no filename given */
-    if (!len)
-        return 0;
-
-    buflen = MultiByteToWideChar(CP_ACP, 0, szCmdLine, len, NULL, 0) + 1;
-    filename = heap_alloc(buflen * sizeof(WCHAR));
-    MultiByteToWideChar(CP_ACP, 0, szCmdLine, len, filename, buflen);
-    filename[buflen-1] = 0;
-
-    /* Open a specific help topic */
-    if(mapid != -1)
-        hwnd = HtmlHelpW(GetDesktopWindow(), filename, HH_HELP_CONTEXT, mapid);
-    else
-        hwnd = HtmlHelpW(GetDesktopWindow(), filename, HH_DISPLAY_TOPIC, 0);
-
-    heap_free(filename);
-
-    if (!hwnd)
-    {
-        ERR("Failed to open HTML Help file '%s'.\n", szCmdLine);
-        return 0;
-    }
-
-    while (GetMessageW(&msg, 0, 0, 0))
-    {
-        TranslateMessage(&msg);
-        DispatchMessageW(&msg);
-    }
-
-    return 0;
-}
-
-/******************************************************************
- *             DllGetClassObject (HHCTRL.OCX.@)
- */
-HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
-{
-    FIXME("(%s %s %p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
-    return CLASS_E_CLASSNOTAVAILABLE;
-}
-
-/***********************************************************************
- *             DllRegisterServer (HHCTRL.OCX.@)
- */
-HRESULT WINAPI DllRegisterServer(void)
-{
-    return __wine_register_resources( hhctrl_hinstance );
-}
-
-/***********************************************************************
- *             DllUnregisterServer (HHCTRL.OCX.@)
- */
-HRESULT WINAPI DllUnregisterServer(void)
-{
-    return __wine_unregister_resources( hhctrl_hinstance );
-}