Crossover Error with new expansion

Options
24

Comments

  • SerenityMare - Dreamweaver
    SerenityMare - Dreamweaver Posts: 2,211 Arc User
    edited February 2012
    Options
    Changed Engine to 1.2.3; Launcher opens. Then patcher.exe encounters a problem.

    EDIT: Changed Engine to 1.3.37; Launcher updates successfully. Patcher refuses to open.

    What are your Screen Settings? Mine are set to Automatic - not emulating a Virtual Desktop with rootless, normal windows.

    My screen settings are like yours. Tried to use 1.3.37, gave me the same error code for the launcher as I've posted previously.


    EDIT: With 1.3.35 and 1.3.37, when I try to open elementclient.exe right away, the client opens but crashes shortly afterwards...
    [SIGPIC][/SIGPIC]
  • Xi Lien - Sanctuary
    Xi Lien - Sanctuary Posts: 22 Arc User
    edited February 2012
    Options
    Elementclient.exe works again, but it's useless since it's still at the Genesis version. Patcher still not working; I'm going to try the more recent wine engines again.

    When I tried the manual patch, a small window appeared and disappeared, as I mentioned before, in the upper left corner again - I'm now assuming this is the Patcher. If somehow I get the message that the client has updated despite being unable to see what's going on (the wrapper stays open on my dock; it doesn't close) I'll try to open elementclient.exe and see if it works.

    EDIT: Frustration slowly taking over. xD
  • SerenityMare - Dreamweaver
    SerenityMare - Dreamweaver Posts: 2,211 Arc User
    edited February 2012
    Options
    Lmao @ the frustration. I'm going to break my laptop soon. b:surrender

    I'm going to try different engines as well because my launcher works but elementclient.exe doesn't. b:cry


    EDIT: Most of the new engines do the same thing, the elementclient opens but then it's a black screen and crashes shortly afterwards..
    [SIGPIC][/SIGPIC]
  • Christianlej - Sanctuary
    Christianlej - Sanctuary Posts: 131 Arc User
    edited February 2012
    Options
    My screen settings are like yours. Tried to use 1.3.37, gave me the same error code for the launcher as I've posted previously.


    EDIT: With 1.3.35 and 1.3.37, when I try to open elementclient.exe right away, the client opens but crashes shortly afterwards...

    I just must to say to you that i just fixed the icons in 1.4_rc3 and it go very good and fast b:dirty But unluckyly you need and virtual machine (windows xp) if you have for update the game. You also need to install directx9c, IE8,Wininit, c++ 2005 for the icons and vcrun6 for run PWI. When all those things are done you need to update directx9c to directx9c jun 2010 you can find it in winetricks named "d3dx10". when you get into the game and you still can`t see the NPC and people just download manually this: To update Directx9c

    I will see how to fix the launcher... is more dificult like icons lol.

    Hope you have good luck :D b:thanks
  • Xi Lien - Sanctuary
    Xi Lien - Sanctuary Posts: 22 Arc User
    edited February 2012
    Options
    What Winetricks packages do you have installed other than the following?

    DirectDrawRenderer "opengl"
    Nonpower2Mode "repack"
    OffscreenRenderingMode "fbo"
    PixelShaderMode "enabled"
    RenderTargetLockMode "auto"
    UseGLSL "disabled"

    In addition to these, I also have CJKFonts and vcrun (the 2010) and DirectX 9 Redistributable, which includes the version that PWI says is required for the expansion client to work. Trying to see why your Patcher opens but mine doesn't.
  • SerenityMare - Dreamweaver
    SerenityMare - Dreamweaver Posts: 2,211 Arc User
    edited February 2012
    Options
    I just must to say to you that i just fixed the icons in 1.4_rc3 and it go very good and fast b:dirty But unluckyly you need and virtual machine (windows xp) if you have for update the game. You also need to install directx9c, IE8,Wininit, c++ 2005 for the icons and vcrun6 for run PWI. When all those things are done you need to update directx9c to directx9c jun 2010 you can find it in winetricks named "d3dx10". when you get into the game and you still can`t see the NPC and people just download manually this: To update Directx9c

    I will see how to fix the launcher... is more dificult like icons lol.

    Hope you have good luck :D b:thanks

    My launcher works and is already updated. My problem is when I click on the start button, nothing loads and the wrapper closes after that...

    What Winetricks packages do you have installed other than the following?

    DirectDrawRenderer "opengl"
    Nonpower2Mode "repack"
    OffscreenRenderingMode "fbo"
    PixelShaderMode "enabled"
    RenderTargetLockMode "auto"
    UseGLSL "disabled"

    In addition to these, I also have CJKFonts and vcrun (the 2010) and DirectX 9 Redistributable, which includes the version that PWI says is required for the expansion client to work. Trying to see why your Patcher opens but mine doesn't.

    I have those and ie8...
    [SIGPIC][/SIGPIC]
  • Christianlej - Sanctuary
    Christianlej - Sanctuary Posts: 131 Arc User
    edited February 2012
    Options
    What Winetricks packages do you have installed other than the following?

    DirectDrawRenderer "opengl"
    Nonpower2Mode "repack"
    OffscreenRenderingMode "fbo"
    PixelShaderMode "enabled"
    RenderTargetLockMode "auto"
    UseGLSL "disabled"

    In addition to these, I also have CJKFonts and vcrun (the 2010) and DirectX 9 Redistributable, which includes the version that PWI says is required for the expansion client to work. Trying to see why your Patcher opens but mine doesn't.

    Just set it to Opengl

    Audio to Alsa

    and system in winxp
  • Christianlej - Sanctuary
    Christianlej - Sanctuary Posts: 131 Arc User
    edited February 2012
    Options
    My launcher works and is already updated. My problem is when I click on the start button, nothing loads and the wrapper closes after that...




    I have those and ie8...

    Try this:

    ~$cd Perfect\ World\ International/Perfect\ World\ International/element

    ~$wine elementclient.exe

    I`m trying to fix the patcher.b:shocked
  • Xi Lien - Sanctuary
    Xi Lien - Sanctuary Posts: 22 Arc User
    edited February 2012
    Options
    ie 8 is installed on both engines...and still no progress. I even tried making a new wrapper and putting PWi on it with engine 1.4_r3 and ie 8 installed it but not DirectX and neither does the launcher nor the elementclient.exe work.. In my original wrapper that I always use, the 1.2.3 will open the launcher but not the game, and if I change the engine to 1.4_r3, the game cursor will appear on a black screen but crash shortly afterwards..


    EDIT: There honestly must be some small thing missing with my 1.2.3 engine because the launcher loads fine, it's just when I click start...nothing happens and it just crashes...
    My screen settings are like yours. Tried to use 1.3.37, gave me the same error code for the launcher as I've posted previously.


    EDIT: With 1.3.35 and 1.3.37, when I try to open elementclient.exe right away, the client opens but crashes shortly afterwards...
    Just set it to Opengl

    Audio to Alsa

    and system in winxp


    I installed those packages and changed my Wine engine back to 1.4_r3 - NOTHING opens now. The small window pops up and disappears for all three alike: launcher.exe, patcher.exe, and elementclient.exe.

    Why, PWI, why?
  • SerenityMare - Dreamweaver
    SerenityMare - Dreamweaver Posts: 2,211 Arc User
    edited February 2012
    Options
    Try this:

    ~$cd Perfect\ World\ International/Perfect\ World\ International/element

    ~$wine elementclient.exe

    I`m trying to fix the patcher.b:shocked

    Where do I enter these codes exactly?
    [SIGPIC][/SIGPIC]
  • SerenityMare - Dreamweaver
    SerenityMare - Dreamweaver Posts: 2,211 Arc User
    edited February 2012
    Options
    I installed those packages and changed my Wine engine back to 1.4_r3 - NOTHING opens now. The small window pops up and disappears for all three alike: launcher.exe, patcher.exe, and elementclient.exe.

    Why, PWI, why?

    Sorry for the double post but after I've entered the codes for d3dx10 and wininet, when I try to open the launcher, I get this:

    Screenshot2012-02-15at113601PM.png
    [SIGPIC][/SIGPIC]
  • Christianlej - Sanctuary
    Christianlej - Sanctuary Posts: 131 Arc User
    edited February 2012
    Options
    Where do I enter these codes exactly?

    Ohh yes you use MAC.

    Well i just fixed the patcher.exe (aparently) lol

    1- Go to winecfg

    2- In libraries (librerias in spanish) lol

    3- change the *msvcrt (native.internal) to (internal.native) so you can click on "start" botton and your patcher can crash sometimes but you can load the game if you just "JUST" click on "start" lol b:cute
  • Christianlej - Sanctuary
    Christianlej - Sanctuary Posts: 131 Arc User
    edited February 2012
    Options
    I installed those packages and changed my Wine engine back to 1.4_r3 - NOTHING opens now. The small window pops up and disappears for all three alike: launcher.exe, patcher.exe, and elementclient.exe.

    Why, PWI, why?

    Well lol.

    Just take it easy :D

    a Huge :D b:cute

    Well... just tell me your trouble. If you using "terminal" "console" in Linux paste the err: something.

    Things.


    Thanks.
  • Xi Lien - Sanctuary
    Xi Lien - Sanctuary Posts: 22 Arc User
    edited February 2012
    Options
    I play on a MacBook as well. I have the necessary Winetricks packages. I have reinstalled the game today, so I'm at version 580. I downloaded the manual patch.

    I can't open the Launcher, Patcher, or Element Client at this point. I'm using the most recent wrapper and Wine Engine 1.4_r3.

    What do I do? xD
  • SerenityMare - Dreamweaver
    SerenityMare - Dreamweaver Posts: 2,211 Arc User
    edited February 2012
    Options
    Ohh yes you use MAC.

    Well i just fixed the patcher.exe (aparently) lol

    1- Go to winecfg

    2- In libraries (librerias in spanish) lol

    3- change the *msvcrt (native.internal) to (internal.native) so you can click on "start" botton and your patcher can crash sometimes but you can load the game if you just "JUST" click on "start" lol b:cute

    Ugh, can't find the *msvcrt (native.internal)
    [SIGPIC][/SIGPIC]
  • Xi Lien - Sanctuary
    Xi Lien - Sanctuary Posts: 22 Arc User
    edited February 2012
    Options
    Ugh, can't find the *msvcrt (native.internal)

    I checked mine as well and changed it. I have all the drivers in my library, including that one. I think if you just installed the one that PWI said was necessary, you'd have the dsomething_42. I could be wrong.
  • Christianlej - Sanctuary
    Christianlej - Sanctuary Posts: 131 Arc User
    edited February 2012
    Options
    I play on a MacBook as well. I have the necessary Winetricks packages. I have reinstalled the game today, so I'm at version 580. I downloaded the manual patch.

    I can't open the Launcher, Patcher, or Element Client at this point. I'm using the most recent wrapper and Wine Engine 1.4_r3.

    What do I do? xD

    Could you tell me the things you have installed in Winetricks?.

    Also change in winecfg this:

    1- Go to winecfg

    2- In libraries (librerias in spanish) lol

    3- change the *msvcrt (native.internal) to (internal.native) so you can click on "start" botton and your patcher can crash sometimes but you can load the game if you just "JUST" click on "start"

    So now you can run the patcher.exe. Remember to set the execute permisions on those files: Launcher.exe, patcher.exe and elementclient.exe.

    b:thanks
  • Christianlej - Sanctuary
    Christianlej - Sanctuary Posts: 131 Arc User
    edited February 2012
    Options
    Ugh, can't find the *msvcrt (native.internal)

    You can install it in winetricks. find this name: vcrun6
  • SerenityMare - Dreamweaver
    SerenityMare - Dreamweaver Posts: 2,211 Arc User
    edited February 2012
    Options
    I checked mine as well and changed it. I have all the drivers in my library, including that one. I think if you just installed the one that PWI said was necessary, you'd have the dsomething_42. I could be wrong.

    Which one did PWi say was necessary? @_@ I'm confused...
    [SIGPIC][/SIGPIC]
  • Christianlej - Sanctuary
    Christianlej - Sanctuary Posts: 131 Arc User
    edited February 2012
    Options
    I checked mine as well and changed it. I have all the drivers in my library, including that one. I think if you just installed the one that PWI said was necessary, you'd have the dsomething_42. I could be wrong.

    You wrong sorry, when you install PWI with wine this "game" don`t install any libraries... "YOU" need to add them with winetricks and do tricks in winecfg for do this run / work.
  • Xi Lien - Sanctuary
    Xi Lien - Sanctuary Posts: 22 Arc User
    edited February 2012
    Options
    Could you tell me the things you have installed in Winetricks?.

    Also change in winecfg this:

    1- Go to winecfg

    2- In libraries (librerias in spanish) lol

    3- change the *msvcrt (native.internal) to (internal.native) so you can click on "start" botton and your patcher can crash sometimes but you can load the game if you just "JUST" click on "start"

    So now you can run the patcher.exe. Remember to set the execute permisions on those files: Launcher.exe, patcher.exe and elementclient.exe.

    b:thanks

    In Winetricks I have installed (copied and pasted from the sites I learned to Wine from):

    Windows -> "Windows XP"
    Allow Pixel Shader "enable"
    Audio only ALSA

    DirectDrawRenderer "opengl"
    Nonpower2Mode "repack"
    OffscreenRenderingMode "fbo"
    PixelShaderMode "enabled"
    RenderTargetLockMode "auto"
    UseGLSL "disabled"

    CJKFonts
    vcrun (2005, 2010)
    DirectX Redistributable

    And like I said, I changed that in my library and patcher still refuses to even open for me.
  • Xi Lien - Sanctuary
    Xi Lien - Sanctuary Posts: 22 Arc User
    edited February 2012
    Options
    You wrong sorry, when you install PWI with wine this "game" don`t install any libraries... "YOU" need to add them with winetricks and do tricks in winecfg for do this run / work.

    They're all in my library because I have the DirectX Redistributable which downloads ALL of them. The "I could be wrong" referred to the possibility of her only having dsomething_42 in hers.
  • Christianlej - Sanctuary
    Christianlej - Sanctuary Posts: 131 Arc User
    edited February 2012
    Options
    Which one did PWi say was necessary? @_@ I'm confused...

    Is necesary: directx9c jun2010 here

    Is necesary also: IE8 / Internet Explorer 8 / 7.

    If you use wine1.4_rc3 you will need c++2005 that can be installed too in winetricks.

    PWI don`t say anything that you need vcrun6, but you MUST install it and change like this (internal.native)
  • Christianlej - Sanctuary
    Christianlej - Sanctuary Posts: 131 Arc User
    edited February 2012
    Options
    In Winetricks I have installed (copied and pasted from the sites I learned to Wine from):

    Windows -> "Windows XP"
    Allow Pixel Shader "enable"
    Audio only ALSA

    DirectDrawRenderer "opengl"
    Nonpower2Mode "repack"
    OffscreenRenderingMode "fbo"
    PixelShaderMode "enabled"
    RenderTargetLockMode "auto"
    UseGLSL "disabled"

    CJKFonts
    vcrun (2005, 2010)
    DirectX Redistributable

    And like I said, I changed that in my library and patcher still refuses to even open for me.


    The other way is removing ".wine" that is hidded in your /home/name/.wine

    and install every *.dll pas by pas-
  • SerenityMare - Dreamweaver
    SerenityMare - Dreamweaver Posts: 2,211 Arc User
    edited February 2012
    Options
    You can install it in winetricks. find this name: vcrun6

    Hmmm, I already have that installed in winetricks along with vcrun6sp6 and mfc42 but can't find the (native.internal) in libraries.

    This is the code in the libraries:
    /*
     * WineCfg libraries tabsheet
     *
     * Copyright 2004 Robert van Herk
     * Copyright 2004 Mike Hearn
     *
     * 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 "config.h"
    #include "wine/port.h"
    
    #define NONAMELESSUNION
    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #include <commdlg.h>
    #include <wine/library.h>
    #include <wine/debug.h>
    #include <stdio.h>
    #include <dirent.h>
    #include <assert.h>
    #include <stdlib.h>
    #ifdef HAVE_SYS_STAT_H
    #include <sys/stat.h>
    #endif
    #ifdef HAVE_UNISTD_H
    #include <unistd.h>
    #endif
    
    #include "winecfg.h"
    #include "resource.h"
    
    WINE_DEFAULT_DEBUG_CHANNEL(winecfg);
    
    /* dlls that shouldn't be configured anything other than builtin; list must be sorted*/
    static const char * const builtin_only[] =
    {
        "advapi32",
        "capi2032",
        "dbghelp",
        "ddraw",
        "gdi32",
        "glu32",
        "gphoto2.ds",
        "icmp",
        "iphlpapi",
        "kernel32",
        "mountmgr.sys",
        "mswsock",
        "ntdll",
        "ntoskrnl.exe",
        "opengl32",
        "sane.ds",
        "twain_32",
        "unicows",
        "user32",
        "vdmdbg",
        "w32skrnl",
        "wined3d",
        "winedos",
        "winemp3.acm",
        "wineps",
        "winmm",
        "wintab32",
        "wnaspi32",
        "wow32",
        "ws2_32",
        "wsock32",
    };
    
    enum dllmode
    {
    	BUILTIN_NATIVE,
    	NATIVE_BUILTIN,
    	BUILTIN,
    	NATIVE,
    	DISABLE,
    	UNKNOWN /* Special value indicating an erroneous DLL override mode */
    };
    
    struct dll
    {
            char *name;
            enum dllmode mode;
    };
    
    /* Convert a registry string to a dllmode */
    static enum dllmode string_to_mode(char *in)
    {
        int i, j, len;
        char *out;
        enum dllmode res;
    
        len = strlen(in);
        out = HeapAlloc(GetProcessHeap(), 0, len);
    
        /* remove the spaces */
        for (i = j = 0; i <= len; ++i) {
            if (in[i] != ' ') {
                out[j++] = in[i];
            }
        }
    
        /* parse the string */
        res = UNKNOWN;
        if (strcmp(out, "builtin,native") == 0) res = BUILTIN_NATIVE;
        if (strcmp(out, "native,builtin") == 0) res = NATIVE_BUILTIN;
        if (strcmp(out, "builtin") == 0) res = BUILTIN;
        if (strcmp(out, "native") == 0) res = NATIVE;
        if (strcmp(out, "") == 0) res = DISABLE;
    
        HeapFree(GetProcessHeap(), 0, out);
        return res;
    }
    
    /* Convert a dllmode to a registry string. */
    static const char* mode_to_string(enum dllmode mode)
    {
        switch( mode )
        {
            case NATIVE: return "native";
            case BUILTIN: return "builtin";
            case NATIVE_BUILTIN: return "native,builtin";
            case BUILTIN_NATIVE: return "builtin,native";
            case DISABLE: return "";
            default: return "";
        }
    }
    
    /* Convert a dllmode to a pretty string for display. TODO: use translations. */
    static const char* mode_to_label(enum dllmode mode)
    {
        static char buffer[256];
        UINT id = 0;
    
        switch( mode )
        {
        case NATIVE: id = IDS_DLL_NATIVE; break;
        case BUILTIN: id = IDS_DLL_BUILTIN; break;
        case NATIVE_BUILTIN: id = IDS_DLL_NATIVE_BUILTIN; break;
        case BUILTIN_NATIVE: id = IDS_DLL_BUILTIN_NATIVE; break;
        case DISABLE: id = IDS_DLL_DISABLED; break;
        default: return "??";
        }
        if (!LoadStringA( GetModuleHandleA(NULL), id, buffer, sizeof(buffer) )) buffer[0] = 0;
        return buffer;
    }
    
    /* Convert a control id (IDC_ constant) to a dllmode */
    static enum dllmode id_to_mode(DWORD id)
    {
        switch( id )
        {
            case IDC_RAD_BUILTIN: return BUILTIN;
            case IDC_RAD_NATIVE: return NATIVE;
            case IDC_RAD_NATIVE_BUILTIN: return NATIVE_BUILTIN;
            case IDC_RAD_BUILTIN_NATIVE: return BUILTIN_NATIVE;
            case IDC_RAD_DISABLE: return DISABLE;
            default: assert( FALSE ); return 0; /* should not be reached  */
        }
    }
    
    /* Convert a dllmode to a control id (IDC_ constant) */
    static DWORD mode_to_id(enum dllmode mode)
    {
        switch( mode )
        {
            case BUILTIN: return IDC_RAD_BUILTIN;
            case NATIVE: return IDC_RAD_NATIVE;
            case NATIVE_BUILTIN: return IDC_RAD_NATIVE_BUILTIN;
            case BUILTIN_NATIVE: return IDC_RAD_BUILTIN_NATIVE;
            case DISABLE: return IDC_RAD_DISABLE;
            default: return IDC_RAD_BUILTIN_NATIVE;
        }
    }
    
    /* helper for is_builtin_only */
    static int compare_dll( const void *ptr1, const void *ptr2 )
    {
        const char * const *name1 = ptr1;
        const char * const *name2 = ptr2;
        return strcmp( *name1, *name2 );
    }
    
    /* check if dll is recommended as builtin only */
    static inline int is_builtin_only( const char *name )
    {
        const char *ext = strrchr( name, '.' );
    
        if (ext)
        {
            if (!strcmp( ext, ".vxd" ) ||
                !strcmp( ext, ".drv" ) ||
                !strcmp( ext, ".tlb" ))
                return TRUE;
        }
        return bsearch( &name, builtin_only, sizeof(builtin_only)/sizeof(builtin_only[0]),
                        sizeof(builtin_only[0]), compare_dll ) != NULL;
    }
    
    /* check if dll should be offered in the drop-down list */
    static int show_dll_in_list( const char *name )
    {
        const char *ext = strrchr( name, '.' );
    
        if (ext)
        {
            /* skip 16-bit dlls */
            if (strlen(ext) > 2 && !strcmp( ext + strlen(ext) - 2, "16" )) return FALSE;
            /* skip exes */
            if (!strcmp( ext, ".exe" )) return FALSE;
        }
        /* skip dlls that should always be builtin */
        return !is_builtin_only( name );
    }
    
    static void set_controls_from_selection(HWND dialog)
    {
        /* FIXME: display/update some information about the selected dll (purpose, recommended load order) maybe? */
    }
    
    static void clear_settings(HWND dialog)
    {
        int count = SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_GETCOUNT, 0, 0);
        int i;
    
        WINE_TRACE("count=%d\n", count);
        
        for (i = 0; i < count; i++)
        {
            struct dll *dll = (struct dll *) SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_GETITEMDATA, 0, 0);
            
            SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_DELETESTRING, 0, 0);
            
            HeapFree(GetProcessHeap(), 0, dll->name);
            HeapFree(GetProcessHeap(), 0, dll);
        }
    }
    
    /* load the list of available libraries from a given dir */
    static void load_library_list_from_dir( HWND dialog, const char *dir_path, int check_subdirs )
    {
        char *buffer = NULL, name[256];
        struct dirent *de;
        DIR *dir = opendir( dir_path );
    
        if (!dir) return;
    
        if (check_subdirs)
            buffer = HeapAlloc( GetProcessHeap(), 0, strlen(dir_path) + 2 * sizeof(name) + 10 );
    
        while ((de = readdir( dir )))
        {
            size_t len = strlen(de->d_name);
            if (len > sizeof(name)) continue;
            if (len > 3 && !strcmp( de->d_name + len - 3, ".so"))
            {
                len -= 3;
                if (len > 4 && !strcmp( de->d_name + len - 4, ".dll.so")) len -= 4;
                memcpy( name, de->d_name, len );
                name[len] = 0;
                if (!show_dll_in_list( name )) continue;
                SendDlgItemMessageA( dialog, IDC_DLLCOMBO, CB_ADDSTRING, 0, (LPARAM)name );
            }
            else if (check_subdirs)
            {
                struct stat st;
                if (!show_dll_in_list( de->d_name )) continue;
                sprintf( buffer, "%s/%s/%s.dll.so", dir_path, de->d_name, de->d_name );
                if (!stat( buffer, &st ))
                {
                    SendDlgItemMessageA( dialog, IDC_DLLCOMBO, CB_ADDSTRING, 0, (LPARAM)de->d_name );
                    continue;
                }
                sprintf( buffer, "%s/%s/%s.so", dir_path, de->d_name, de->d_name );
                if (!stat( buffer, &st ))
                {
                    SendDlgItemMessageA( dialog, IDC_DLLCOMBO, CB_ADDSTRING, 0, (LPARAM)de->d_name );
                    continue;
                }
            }
        }
        closedir( dir );
        HeapFree( GetProcessHeap(), 0, buffer );
    }
    
    /* load the list of available libraries */
    static void load_library_list( HWND dialog )
    {
        unsigned int i = 0;
        const char *path, *build_dir = wine_get_build_dir();
        char item1[256], item2[256];
        HCURSOR old_cursor = SetCursor( LoadCursor(0, IDC_WAIT) );
    
        if (build_dir)
        {
            char *dir = HeapAlloc( GetProcessHeap(), 0, strlen(build_dir) + sizeof("/dlls") );
            strcpy( dir, build_dir );
            strcat( dir, "/dlls" );
            load_library_list_from_dir( dialog, dir, TRUE );
            HeapFree( GetProcessHeap(), 0, dir );
        }
    
        while ((path = wine_dll_enum_load_path( i++ )))
            load_library_list_from_dir( dialog, path, FALSE );
    
        /* get rid of duplicate entries */
    
        SendDlgItemMessageA( dialog, IDC_DLLCOMBO, CB_GETLBTEXT, 0, (LPARAM)item1 );
        i = 1;
        while (SendDlgItemMessageA( dialog, IDC_DLLCOMBO, CB_GETLBTEXT, i, (LPARAM)item2 ) >= 0)
        {
            if (!strcmp( item1, item2 ))
            {
                SendDlgItemMessageA( dialog, IDC_DLLCOMBO, CB_DELETESTRING, i, 0 );
            }
            else
            {
                strcpy( item1, item2 );
                i++;
            }
        }
        SetCursor( old_cursor );
    }
    
    static void load_library_settings(HWND dialog)
    {
        char **overrides = enumerate_values(config_key, keypath("DllOverrides"));
        char **p;
        int sel, count = 0;
    
        sel = SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_GETCURSEL, 0, 0);
    
        WINE_TRACE("sel=%d\n", sel);
    
        clear_settings(dialog);
        
        if (!overrides || *overrides == NULL)
        {
            set_controls_from_selection(dialog);
            disable(IDC_DLLS_EDITDLL);
            disable(IDC_DLLS_REMOVEDLL);
            HeapFree(GetProcessHeap(), 0, overrides);
            return;
        }
    
        enable(IDC_DLLS_EDITDLL);
        enable(IDC_DLLS_REMOVEDLL);
        
        for (p = overrides; *p != NULL; p++)
        {
            int index;
            char *str, *value;
            const char *label;
            struct dll *dll;
    
            value = get_reg_key(config_key, keypath("DllOverrides"), *p, NULL);
    
            label = mode_to_label(string_to_mode(value));
            
            str = HeapAlloc(GetProcessHeap(), 0, strlen(*p) + 2 + strlen(label) + 2);
            strcpy(str, *p);
            strcat(str, " (");
            strcat(str, label);
            strcat(str, ")");
    
            dll = HeapAlloc(GetProcessHeap(), 0, sizeof(struct dll));
            dll->name = *p;
            dll->mode = string_to_mode(value);
    
            index = SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_ADDSTRING, (WPARAM) -1, (LPARAM) str);
            SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_SETITEMDATA, index, (LPARAM) dll);
    
            HeapFree(GetProcessHeap(), 0, str);
    
            count++;
        }
    
        HeapFree(GetProcessHeap(), 0, overrides);
    
        /* restore the previous selection, if possible  */
        if (sel >= count - 1) sel = count - 1;
        else if (sel == -1) sel = 0;
        
        SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_SETCURSEL, sel, 0);
    
        set_controls_from_selection(dialog);
    }
    
    /* Called when the application is initialized (cannot reinit!)  */
    static void init_libsheet(HWND dialog)
    {
        /* clear the add dll controls  */
        SendDlgItemMessage(dialog, IDC_DLLCOMBO, WM_SETTEXT, 1, (LPARAM) "");
        load_library_list( dialog );
        disable(IDC_DLLS_ADDDLL);
    }
    
    static void on_add_combo_change(HWND dialog)
    {
        char buffer[1024];
        int sel, len;
    
        SendDlgItemMessage(dialog, IDC_DLLCOMBO, WM_GETTEXT, sizeof(buffer), (LPARAM) buffer);
        /* if lib was chosen from combobox, we receive an empty buffer, check manually */
        sel=SendDlgItemMessage(dialog, IDC_DLLCOMBO, CB_GETCURSEL, 0, 0);
        len=SendDlgItemMessage(dialog, IDC_DLLCOMBO, CB_GETLBTEXTLEN, sel, 0);
    
        if (strlen(buffer)>0 || len>0)
            enable(IDC_DLLS_ADDDLL)
        else
            disable(IDC_DLLS_ADDDLL);
    }
    
    static void set_dllmode(HWND dialog, DWORD id)
    {
        enum dllmode mode;
        struct dll *dll;
        int sel;
        const char *str;
    
        mode = id_to_mode(id);
    
        sel = SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_GETCURSEL, 0, 0);
        if (sel == -1) return;
        
        dll = (struct dll *) SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_GETITEMDATA, sel, 0);
    
        str = mode_to_string(mode);
        WINE_TRACE("Setting %s to %s\n", dll->name, str);
        
        SendMessage(GetParent(dialog), PSM_CHANGED, 0, 0);
        set_reg_key(config_key, keypath("DllOverrides"), dll->name, str);
    
        load_library_settings(dialog);  /* ... and refresh  */
    }
    
    static void on_add_click(HWND dialog)
    {
        static const char dotDll[] = ".dll";
        char buffer[1024], *ptr;
    
        ZeroMemory(buffer, sizeof(buffer));
    
        SendDlgItemMessage(dialog, IDC_DLLCOMBO, WM_GETTEXT, sizeof(buffer), (LPARAM) buffer);
        if (lstrlenA(buffer) >= sizeof(dotDll))
        {
            ptr = buffer + lstrlenA(buffer) - sizeof(dotDll) + 1;
            if (!lstrcmpiA(ptr, dotDll))
            {
                WINE_TRACE("Stripping dll extension\n");
                *ptr = '\0';
            }
        }
    
        /* check if dll is in the builtin-only list */
        if (!(ptr = strrchr( buffer, '\\' )))
        {
            ptr = buffer;
            if (*ptr == '*') ptr++;
        }
        else ptr++;
        if (is_builtin_only( ptr ))
        {
            MSGBOXPARAMSA params;
            params.cbSize = sizeof(params);
            params.hwndOwner = dialog;
            params.hInstance = GetModuleHandleA( NULL );
            params.lpszText = MAKEINTRESOURCEA( IDS_DLL_WARNING );
            params.lpszCaption = MAKEINTRESOURCEA( IDS_DLL_WARNING_CAPTION );
            params.dwStyle = MB_ICONWARNING | MB_YESNO;
            params.lpszIcon = NULL;
            params.dwContextHelpId = 0;
            params.lpfnMsgBoxCallback = NULL;
            params.dwLanguageId = 0;
            if (MessageBoxIndirectA( &params ) != IDYES) return;
        }
    
        SendDlgItemMessage(dialog, IDC_DLLCOMBO, WM_SETTEXT, 0, (LPARAM) "");
        disable(IDC_DLLS_ADDDLL);
        
        WINE_TRACE("Adding %s as native, builtin\n", buffer);
        
        SendMessage(GetParent(dialog), PSM_CHANGED, 0, 0);
        set_reg_key(config_key, keypath("DllOverrides"), buffer, "native,builtin");
    
        load_library_settings(dialog);
    
        SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_SELECTSTRING, 0, (LPARAM) buffer);
    
        set_controls_from_selection(dialog);
    }
    
    static INT_PTR CALLBACK loadorder_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        static WORD sel;
    
        switch(uMsg) 
        {
        case WM_INITDIALOG:
            CheckRadioButton(hwndDlg, IDC_RAD_BUILTIN, IDC_RAD_DISABLE, lParam);
            sel = lParam;
            return TRUE;
    
        case WM_COMMAND:
            if(HIWORD(wParam) != BN_CLICKED) break;
            switch (LOWORD(wParam))
            {
            case IDC_RAD_BUILTIN:
            case IDC_RAD_NATIVE:
            case IDC_RAD_BUILTIN_NATIVE:
            case IDC_RAD_NATIVE_BUILTIN:
            case IDC_RAD_DISABLE:
                sel = LOWORD(wParam);
                return TRUE;
            case IDOK:
                EndDialog(hwndDlg, sel);
                return TRUE;
            case IDCANCEL:
                EndDialog(hwndDlg, wParam);
                return TRUE;
            }
        }
        return FALSE;
    }
    
    static void on_edit_click(HWND hwnd)
    {
        INT_PTR ret; 
        int index = SendDlgItemMessage(hwnd, IDC_DLLS_LIST, LB_GETCURSEL, 0, 0);
        struct dll *dll;
        DWORD id;
    
        /* if no override is selected the edit button should be disabled... */
        assert(index != -1);
    
        dll = (struct dll *) SendDlgItemMessage(hwnd, IDC_DLLS_LIST, LB_GETITEMDATA, index, 0);
        id = mode_to_id(dll->mode);
        
        ret = DialogBoxParam(0, MAKEINTRESOURCE(IDD_LOADORDER), hwnd, loadorder_dlgproc, id);
        
        if(ret != IDCANCEL)
            set_dllmode(hwnd, ret);
    }
    
    static void on_remove_click(HWND dialog)
    {
        int sel = SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_GETCURSEL, 0, 0);
        struct dll *dll;
    
        if (sel == LB_ERR) return;
        
        dll = (struct dll *) SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_GETITEMDATA, sel, 0);
        
        SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_DELETESTRING, sel, 0);
    
        SendMessage(GetParent(dialog), PSM_CHANGED, 0, 0);
        set_reg_key(config_key, keypath("DllOverrides"), dll->name, NULL);
    
        HeapFree(GetProcessHeap(), 0, dll->name);
        HeapFree(GetProcessHeap(), 0, dll);
    
        if (SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_GETCOUNT, 0, 0) > 0)
            SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_SETCURSEL, max(sel - 1, 0), 0);
        else
        {
            disable(IDC_DLLS_EDITDLL);
            disable(IDC_DLLS_REMOVEDLL);
        }
    
        set_controls_from_selection(dialog);
    }
    
    INT_PTR CALLBACK
    LibrariesDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	switch (uMsg)
    	{
    	case WM_INITDIALOG:
    		init_libsheet(hDlg);
    		break;
            case WM_SHOWWINDOW:
                    set_window_title(hDlg);
                    break;
    	case WM_NOTIFY:
    		switch (((LPNMHDR)lParam)->code) {
                    case PSN_SETACTIVE:
                        load_library_settings(hDlg);
                        break;
    		}
    		break;
    	case WM_COMMAND:
    		switch(HIWORD(wParam)) {
    
                        /* FIXME: when the user hits enter in the DLL combo box we should invoke the add
                         * add button, rather than the propsheet OK button. But I don't know how to do that!
                         */
                        
                    case CBN_EDITCHANGE:
                            if(LOWORD(wParam) == IDC_DLLCOMBO)
                            {
                                on_add_combo_change(hDlg);
                                break;
                            }
    
    		case BN_CLICKED:
    			switch(LOWORD(wParam)) {
    			case IDC_DLLS_ADDDLL:
                                on_add_click(hDlg);
                                break;
    			case IDC_DLLS_EDITDLL:
    			    on_edit_click(hDlg);
    			    break;
    			case IDC_DLLS_REMOVEDLL:
                                on_remove_click(hDlg);
                                break;
    			}
    			break;
                    case LBN_SELCHANGE:
                            if(LOWORD(wParam) == IDC_DLLCOMBO)
                                on_add_combo_change(hDlg);
                            else
                                set_controls_from_selection(hDlg);
                            break;
    		}
    		break;
    	}
    
    	return 0;
    }
    
    [SIGPIC][/SIGPIC]
  • Christianlej - Sanctuary
    Christianlej - Sanctuary Posts: 131 Arc User
    edited February 2012
    Options
    Hmmm, I already have that installed in winetricks along with vcrun6sp6 and mfc42 but can't find the (native.internal) in libraries.

    This is the code in the libraries:
    /*
     * WineCfg libraries tabsheet
     *
     * Copyright 2004 Robert van Herk
     * Copyright 2004 Mike Hearn
     *
     * 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 "config.h"
    #include "wine/port.h"
    
    #define NONAMELESSUNION
    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #include <commdlg.h>
    #include <wine/library.h>
    #include <wine/debug.h>
    #include <stdio.h>
    #include <dirent.h>
    #include <assert.h>
    #include <stdlib.h>
    #ifdef HAVE_SYS_STAT_H
    #include <sys/stat.h>
    #endif
    #ifdef HAVE_UNISTD_H
    #include <unistd.h>
    #endif
    
    #include "winecfg.h"
    #include "resource.h"
    
    WINE_DEFAULT_DEBUG_CHANNEL(winecfg);
    
    /* dlls that shouldn't be configured anything other than builtin; list must be sorted*/
    static const char * const builtin_only[] =
    {
        "advapi32",
        "capi2032",
        "dbghelp",
        "ddraw",
        "gdi32",
        "glu32",
        "gphoto2.ds",
        "icmp",
        "iphlpapi",
        "kernel32",
        "mountmgr.sys",
        "mswsock",
        "ntdll",
        "ntoskrnl.exe",
        "opengl32",
        "sane.ds",
        "twain_32",
        "unicows",
        "user32",
        "vdmdbg",
        "w32skrnl",
        "wined3d",
        "winedos",
        "winemp3.acm",
        "wineps",
        "winmm",
        "wintab32",
        "wnaspi32",
        "wow32",
        "ws2_32",
        "wsock32",
    };
    
    enum dllmode
    {
    	BUILTIN_NATIVE,
    	NATIVE_BUILTIN,
    	BUILTIN,
    	NATIVE,
    	DISABLE,
    	UNKNOWN /* Special value indicating an erroneous DLL override mode */
    };
    
    struct dll
    {
            char *name;
            enum dllmode mode;
    };
    
    /* Convert a registry string to a dllmode */
    static enum dllmode string_to_mode(char *in)
    {
        int i, j, len;
        char *out;
        enum dllmode res;
    
        len = strlen(in);
        out = HeapAlloc(GetProcessHeap(), 0, len);
    
        /* remove the spaces */
        for (i = j = 0; i <= len; ++i) {
            if (in[i] != ' ') {
                out[j++] = in[i];
            }
        }
    
        /* parse the string */
        res = UNKNOWN;
        if (strcmp(out, "builtin,native") == 0) res = BUILTIN_NATIVE;
        if (strcmp(out, "native,builtin") == 0) res = NATIVE_BUILTIN;
        if (strcmp(out, "builtin") == 0) res = BUILTIN;
        if (strcmp(out, "native") == 0) res = NATIVE;
        if (strcmp(out, "") == 0) res = DISABLE;
    
        HeapFree(GetProcessHeap(), 0, out);
        return res;
    }
    
    /* Convert a dllmode to a registry string. */
    static const char* mode_to_string(enum dllmode mode)
    {
        switch( mode )
        {
            case NATIVE: return "native";
            case BUILTIN: return "builtin";
            case NATIVE_BUILTIN: return "native,builtin";
            case BUILTIN_NATIVE: return "builtin,native";
            case DISABLE: return "";
            default: return "";
        }
    }
    
    /* Convert a dllmode to a pretty string for display. TODO: use translations. */
    static const char* mode_to_label(enum dllmode mode)
    {
        static char buffer[256];
        UINT id = 0;
    
        switch( mode )
        {
        case NATIVE: id = IDS_DLL_NATIVE; break;
        case BUILTIN: id = IDS_DLL_BUILTIN; break;
        case NATIVE_BUILTIN: id = IDS_DLL_NATIVE_BUILTIN; break;
        case BUILTIN_NATIVE: id = IDS_DLL_BUILTIN_NATIVE; break;
        case DISABLE: id = IDS_DLL_DISABLED; break;
        default: return "??";
        }
        if (!LoadStringA( GetModuleHandleA(NULL), id, buffer, sizeof(buffer) )) buffer[0] = 0;
        return buffer;
    }
    
    /* Convert a control id (IDC_ constant) to a dllmode */
    static enum dllmode id_to_mode(DWORD id)
    {
        switch( id )
        {
            case IDC_RAD_BUILTIN: return BUILTIN;
            case IDC_RAD_NATIVE: return NATIVE;
            case IDC_RAD_NATIVE_BUILTIN: return NATIVE_BUILTIN;
            case IDC_RAD_BUILTIN_NATIVE: return BUILTIN_NATIVE;
            case IDC_RAD_DISABLE: return DISABLE;
            default: assert( FALSE ); return 0; /* should not be reached  */
        }
    }
    
    /* Convert a dllmode to a control id (IDC_ constant) */
    static DWORD mode_to_id(enum dllmode mode)
    {
        switch( mode )
        {
            case BUILTIN: return IDC_RAD_BUILTIN;
            case NATIVE: return IDC_RAD_NATIVE;
            case NATIVE_BUILTIN: return IDC_RAD_NATIVE_BUILTIN;
            case BUILTIN_NATIVE: return IDC_RAD_BUILTIN_NATIVE;
            case DISABLE: return IDC_RAD_DISABLE;
            default: return IDC_RAD_BUILTIN_NATIVE;
        }
    }
    
    /* helper for is_builtin_only */
    static int compare_dll( const void *ptr1, const void *ptr2 )
    {
        const char * const *name1 = ptr1;
        const char * const *name2 = ptr2;
        return strcmp( *name1, *name2 );
    }
    
    /* check if dll is recommended as builtin only */
    static inline int is_builtin_only( const char *name )
    {
        const char *ext = strrchr( name, '.' );
    
        if (ext)
        {
            if (!strcmp( ext, ".vxd" ) ||
                !strcmp( ext, ".drv" ) ||
                !strcmp( ext, ".tlb" ))
                return TRUE;
        }
        return bsearch( &name, builtin_only, sizeof(builtin_only)/sizeof(builtin_only[0]),
                        sizeof(builtin_only[0]), compare_dll ) != NULL;
    }
    
    /* check if dll should be offered in the drop-down list */
    static int show_dll_in_list( const char *name )
    {
        const char *ext = strrchr( name, '.' );
    
        if (ext)
        {
            /* skip 16-bit dlls */
            if (strlen(ext) > 2 && !strcmp( ext + strlen(ext) - 2, "16" )) return FALSE;
            /* skip exes */
            if (!strcmp( ext, ".exe" )) return FALSE;
        }
        /* skip dlls that should always be builtin */
        return !is_builtin_only( name );
    }
    
    static void set_controls_from_selection(HWND dialog)
    {
        /* FIXME: display/update some information about the selected dll (purpose, recommended load order) maybe? */
    }
    
    static void clear_settings(HWND dialog)
    {
        int count = SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_GETCOUNT, 0, 0);
        int i;
    
        WINE_TRACE("count=%d\n", count);
        
        for (i = 0; i < count; i++)
        {
            struct dll *dll = (struct dll *) SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_GETITEMDATA, 0, 0);
            
            SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_DELETESTRING, 0, 0);
            
            HeapFree(GetProcessHeap(), 0, dll->name);
            HeapFree(GetProcessHeap(), 0, dll);
        }
    }
    
    /* load the list of available libraries from a given dir */
    static void load_library_list_from_dir( HWND dialog, const char *dir_path, int check_subdirs )
    {
        char *buffer = NULL, name[256];
        struct dirent *de;
        DIR *dir = opendir( dir_path );
    
        if (!dir) return;
    
        if (check_subdirs)
            buffer = HeapAlloc( GetProcessHeap(), 0, strlen(dir_path) + 2 * sizeof(name) + 10 );
    
        while ((de = readdir( dir )))
        {
            size_t len = strlen(de->d_name);
            if (len > sizeof(name)) continue;
            if (len > 3 && !strcmp( de->d_name + len - 3, ".so"))
            {
                len -= 3;
                if (len > 4 && !strcmp( de->d_name + len - 4, ".dll.so")) len -= 4;
                memcpy( name, de->d_name, len );
                name[len] = 0;
                if (!show_dll_in_list( name )) continue;
                SendDlgItemMessageA( dialog, IDC_DLLCOMBO, CB_ADDSTRING, 0, (LPARAM)name );
            }
            else if (check_subdirs)
            {
                struct stat st;
                if (!show_dll_in_list( de->d_name )) continue;
                sprintf( buffer, "%s/%s/%s.dll.so", dir_path, de->d_name, de->d_name );
                if (!stat( buffer, &st ))
                {
                    SendDlgItemMessageA( dialog, IDC_DLLCOMBO, CB_ADDSTRING, 0, (LPARAM)de->d_name );
                    continue;
                }
                sprintf( buffer, "%s/%s/%s.so", dir_path, de->d_name, de->d_name );
                if (!stat( buffer, &st ))
                {
                    SendDlgItemMessageA( dialog, IDC_DLLCOMBO, CB_ADDSTRING, 0, (LPARAM)de->d_name );
                    continue;
                }
            }
        }
        closedir( dir );
        HeapFree( GetProcessHeap(), 0, buffer );
    }
    
    /* load the list of available libraries */
    static void load_library_list( HWND dialog )
    {
        unsigned int i = 0;
        const char *path, *build_dir = wine_get_build_dir();
        char item1[256], item2[256];
        HCURSOR old_cursor = SetCursor( LoadCursor(0, IDC_WAIT) );
    
        if (build_dir)
        {
            char *dir = HeapAlloc( GetProcessHeap(), 0, strlen(build_dir) + sizeof("/dlls") );
            strcpy( dir, build_dir );
            strcat( dir, "/dlls" );
            load_library_list_from_dir( dialog, dir, TRUE );
            HeapFree( GetProcessHeap(), 0, dir );
        }
    
        while ((path = wine_dll_enum_load_path( i++ )))
            load_library_list_from_dir( dialog, path, FALSE );
    
        /* get rid of duplicate entries */
    
        SendDlgItemMessageA( dialog, IDC_DLLCOMBO, CB_GETLBTEXT, 0, (LPARAM)item1 );
        i = 1;
        while (SendDlgItemMessageA( dialog, IDC_DLLCOMBO, CB_GETLBTEXT, i, (LPARAM)item2 ) >= 0)
        {
            if (!strcmp( item1, item2 ))
            {
                SendDlgItemMessageA( dialog, IDC_DLLCOMBO, CB_DELETESTRING, i, 0 );
            }
            else
            {
                strcpy( item1, item2 );
                i++;
            }
        }
        SetCursor( old_cursor );
    }
    
    static void load_library_settings(HWND dialog)
    {
        char **overrides = enumerate_values(config_key, keypath("DllOverrides"));
        char **p;
        int sel, count = 0;
    
        sel = SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_GETCURSEL, 0, 0);
    
        WINE_TRACE("sel=%d\n", sel);
    
        clear_settings(dialog);
        
        if (!overrides || *overrides == NULL)
        {
            set_controls_from_selection(dialog);
            disable(IDC_DLLS_EDITDLL);
            disable(IDC_DLLS_REMOVEDLL);
            HeapFree(GetProcessHeap(), 0, overrides);
            return;
        }
    
        enable(IDC_DLLS_EDITDLL);
        enable(IDC_DLLS_REMOVEDLL);
        
        for (p = overrides; *p != NULL; p++)
        {
            int index;
            char *str, *value;
            const char *label;
            struct dll *dll;
    
            value = get_reg_key(config_key, keypath("DllOverrides"), *p, NULL);
    
            label = mode_to_label(string_to_mode(value));
            
            str = HeapAlloc(GetProcessHeap(), 0, strlen(*p) + 2 + strlen(label) + 2);
            strcpy(str, *p);
            strcat(str, " (");
            strcat(str, label);
            strcat(str, ")");
    
            dll = HeapAlloc(GetProcessHeap(), 0, sizeof(struct dll));
            dll->name = *p;
            dll->mode = string_to_mode(value);
    
            index = SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_ADDSTRING, (WPARAM) -1, (LPARAM) str);
            SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_SETITEMDATA, index, (LPARAM) dll);
    
            HeapFree(GetProcessHeap(), 0, str);
    
            count++;
        }
    
        HeapFree(GetProcessHeap(), 0, overrides);
    
        /* restore the previous selection, if possible  */
        if (sel >= count - 1) sel = count - 1;
        else if (sel == -1) sel = 0;
        
        SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_SETCURSEL, sel, 0);
    
        set_controls_from_selection(dialog);
    }
    
    /* Called when the application is initialized (cannot reinit!)  */
    static void init_libsheet(HWND dialog)
    {
        /* clear the add dll controls  */
        SendDlgItemMessage(dialog, IDC_DLLCOMBO, WM_SETTEXT, 1, (LPARAM) "");
        load_library_list( dialog );
        disable(IDC_DLLS_ADDDLL);
    }
    
    static void on_add_combo_change(HWND dialog)
    {
        char buffer[1024];
        int sel, len;
    
        SendDlgItemMessage(dialog, IDC_DLLCOMBO, WM_GETTEXT, sizeof(buffer), (LPARAM) buffer);
        /* if lib was chosen from combobox, we receive an empty buffer, check manually */
        sel=SendDlgItemMessage(dialog, IDC_DLLCOMBO, CB_GETCURSEL, 0, 0);
        len=SendDlgItemMessage(dialog, IDC_DLLCOMBO, CB_GETLBTEXTLEN, sel, 0);
    
        if (strlen(buffer)>0 || len>0)
            enable(IDC_DLLS_ADDDLL)
        else
            disable(IDC_DLLS_ADDDLL);
    }
    
    static void set_dllmode(HWND dialog, DWORD id)
    {
        enum dllmode mode;
        struct dll *dll;
        int sel;
        const char *str;
    
        mode = id_to_mode(id);
    
        sel = SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_GETCURSEL, 0, 0);
        if (sel == -1) return;
        
        dll = (struct dll *) SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_GETITEMDATA, sel, 0);
    
        str = mode_to_string(mode);
        WINE_TRACE("Setting %s to %s\n", dll->name, str);
        
        SendMessage(GetParent(dialog), PSM_CHANGED, 0, 0);
        set_reg_key(config_key, keypath("DllOverrides"), dll->name, str);
    
        load_library_settings(dialog);  /* ... and refresh  */
    }
    
    static void on_add_click(HWND dialog)
    {
        static const char dotDll[] = ".dll";
        char buffer[1024], *ptr;
    
        ZeroMemory(buffer, sizeof(buffer));
    
        SendDlgItemMessage(dialog, IDC_DLLCOMBO, WM_GETTEXT, sizeof(buffer), (LPARAM) buffer);
        if (lstrlenA(buffer) >= sizeof(dotDll))
        {
            ptr = buffer + lstrlenA(buffer) - sizeof(dotDll) + 1;
            if (!lstrcmpiA(ptr, dotDll))
            {
                WINE_TRACE("Stripping dll extension\n");
                *ptr = '\0';
            }
        }
    
        /* check if dll is in the builtin-only list */
        if (!(ptr = strrchr( buffer, '\\' )))
        {
            ptr = buffer;
            if (*ptr == '*') ptr++;
        }
        else ptr++;
        if (is_builtin_only( ptr ))
        {
            MSGBOXPARAMSA params;
            params.cbSize = sizeof(params);
            params.hwndOwner = dialog;
            params.hInstance = GetModuleHandleA( NULL );
            params.lpszText = MAKEINTRESOURCEA( IDS_DLL_WARNING );
            params.lpszCaption = MAKEINTRESOURCEA( IDS_DLL_WARNING_CAPTION );
            params.dwStyle = MB_ICONWARNING | MB_YESNO;
            params.lpszIcon = NULL;
            params.dwContextHelpId = 0;
            params.lpfnMsgBoxCallback = NULL;
            params.dwLanguageId = 0;
            if (MessageBoxIndirectA( &params ) != IDYES) return;
        }
    
        SendDlgItemMessage(dialog, IDC_DLLCOMBO, WM_SETTEXT, 0, (LPARAM) "");
        disable(IDC_DLLS_ADDDLL);
        
        WINE_TRACE("Adding %s as native, builtin\n", buffer);
        
        SendMessage(GetParent(dialog), PSM_CHANGED, 0, 0);
        set_reg_key(config_key, keypath("DllOverrides"), buffer, "native,builtin");
    
        load_library_settings(dialog);
    
        SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_SELECTSTRING, 0, (LPARAM) buffer);
    
        set_controls_from_selection(dialog);
    }
    
    static INT_PTR CALLBACK loadorder_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        static WORD sel;
    
        switch(uMsg) 
        {
        case WM_INITDIALOG:
            CheckRadioButton(hwndDlg, IDC_RAD_BUILTIN, IDC_RAD_DISABLE, lParam);
            sel = lParam;
            return TRUE;
    
        case WM_COMMAND:
            if(HIWORD(wParam) != BN_CLICKED) break;
            switch (LOWORD(wParam))
            {
            case IDC_RAD_BUILTIN:
            case IDC_RAD_NATIVE:
            case IDC_RAD_BUILTIN_NATIVE:
            case IDC_RAD_NATIVE_BUILTIN:
            case IDC_RAD_DISABLE:
                sel = LOWORD(wParam);
                return TRUE;
            case IDOK:
                EndDialog(hwndDlg, sel);
                return TRUE;
            case IDCANCEL:
                EndDialog(hwndDlg, wParam);
                return TRUE;
            }
        }
        return FALSE;
    }
    
    static void on_edit_click(HWND hwnd)
    {
        INT_PTR ret; 
        int index = SendDlgItemMessage(hwnd, IDC_DLLS_LIST, LB_GETCURSEL, 0, 0);
        struct dll *dll;
        DWORD id;
    
        /* if no override is selected the edit button should be disabled... */
        assert(index != -1);
    
        dll = (struct dll *) SendDlgItemMessage(hwnd, IDC_DLLS_LIST, LB_GETITEMDATA, index, 0);
        id = mode_to_id(dll->mode);
        
        ret = DialogBoxParam(0, MAKEINTRESOURCE(IDD_LOADORDER), hwnd, loadorder_dlgproc, id);
        
        if(ret != IDCANCEL)
            set_dllmode(hwnd, ret);
    }
    
    static void on_remove_click(HWND dialog)
    {
        int sel = SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_GETCURSEL, 0, 0);
        struct dll *dll;
    
        if (sel == LB_ERR) return;
        
        dll = (struct dll *) SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_GETITEMDATA, sel, 0);
        
        SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_DELETESTRING, sel, 0);
    
        SendMessage(GetParent(dialog), PSM_CHANGED, 0, 0);
        set_reg_key(config_key, keypath("DllOverrides"), dll->name, NULL);
    
        HeapFree(GetProcessHeap(), 0, dll->name);
        HeapFree(GetProcessHeap(), 0, dll);
    
        if (SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_GETCOUNT, 0, 0) > 0)
            SendDlgItemMessage(dialog, IDC_DLLS_LIST, LB_SETCURSEL, max(sel - 1, 0), 0);
        else
        {
            disable(IDC_DLLS_EDITDLL);
            disable(IDC_DLLS_REMOVEDLL);
        }
    
        set_controls_from_selection(dialog);
    }
    
    INT_PTR CALLBACK
    LibrariesDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	switch (uMsg)
    	{
    	case WM_INITDIALOG:
    		init_libsheet(hDlg);
    		break;
            case WM_SHOWWINDOW:
                    set_window_title(hDlg);
                    break;
    	case WM_NOTIFY:
    		switch (((LPNMHDR)lParam)->code) {
                    case PSN_SETACTIVE:
                        load_library_settings(hDlg);
                        break;
    		}
    		break;
    	case WM_COMMAND:
    		switch(HIWORD(wParam)) {
    
                        /* FIXME: when the user hits enter in the DLL combo box we should invoke the add
                         * add button, rather than the propsheet OK button. But I don't know how to do that!
                         */
                        
                    case CBN_EDITCHANGE:
                            if(LOWORD(wParam) == IDC_DLLCOMBO)
                            {
                                on_add_combo_change(hDlg);
                                break;
                            }
    
    		case BN_CLICKED:
    			switch(LOWORD(wParam)) {
    			case IDC_DLLS_ADDDLL:
                                on_add_click(hDlg);
                                break;
    			case IDC_DLLS_EDITDLL:
    			    on_edit_click(hDlg);
    			    break;
    			case IDC_DLLS_REMOVEDLL:
                                on_remove_click(hDlg);
                                break;
    			}
    			break;
                    case LBN_SELCHANGE:
                            if(LOWORD(wParam) == IDC_DLLCOMBO)
                                on_add_combo_change(hDlg);
                            else
                                set_controls_from_selection(hDlg);
                            break;
    		}
    		break;
    	}
    
    	return 0;
    }
    

    LOL this is an language programing in "c".

    and in winetricks up to vcrun6sp6 is vcrun6
  • SerenityMare - Dreamweaver
    SerenityMare - Dreamweaver Posts: 2,211 Arc User
    edited February 2012
    Options
    LOL this is an language programing in "c".

    and in winetricks up to vcrun6sp6 is vcrun6

    So what do I do? b:cry


    I have vcrun6 and vcrun6sp downloaded. I can't seem to download c++ 2005 in 1.4_rc3 because I get this in the log:

    "Executing w_do_call vc2005trial
    Executing load_vc2005trial
    /Users/Norhan/Applications/Wineskin/p.app/Wineskin.app/Contents/Resources/winetricks: line 1582: test: wine-1.4-rc3: integer expression expected
    /Users/Norhan/Applications/Wineskin/p.app/Wineskin.app/Contents/Resources/winetricks: line 1582: test: wine-1.4-rc3: integer expression expected
    Working around wine bug 26162 -- Install fails with spurious error about custom action

    Please upgrade to wine-1.3.15 or later to install this app



    Winetricks Commands Finished!!"
    [SIGPIC][/SIGPIC]
  • akiragx
    akiragx Posts: 0 Arc User
    edited February 2012
    Options
    i installed direct X9 and 10 and another one called direct X 9.0c ( like written in launcher)

    -what happen is ... one of two things
    1- when i open element client exe it say >
    the application has failed to start cuz of application configuration is incorrect
    2- when i open launcher after am done updating it say >
    this game need direct X9.0c to start please update it your self b:angry

    okay tell me what to do now .

    i guess your problems were in opening patcher or launcher right ?b:bye
  • Christianlej - Sanctuary
    Christianlej - Sanctuary Posts: 131 Arc User
    edited February 2012
    Options
    So what do I do? b:cry


    I have vcrun6 and vcrun6sp downloaded. I can't seem to download c++ 2005 in 1.4_rc3 because I get this in the log:

    "Executing w_do_call vc2005trial
    Executing load_vc2005trial
    /Users/Norhan/Applications/Wineskin/p.app/Wineskin.app/Contents/Resources/winetricks: line 1582: test: wine-1.4-rc3: integer expression expected
    /Users/Norhan/Applications/Wineskin/p.app/Wineskin.app/Contents/Resources/winetricks: line 1582: test: wine-1.4-rc3: integer expression expected
    Working around wine bug 26162 -- Install fails with spurious error about custom action

    Please upgrade to wine-1.3.15 or later to install this app



    Winetricks Commands Finished!!"

    Well... i don`t know what to do there... you aparently have wine1.4_rc3 but the program tell you that your wine is under 1.3.15...

    Please upgrade to wine-1.3.15 or later to install this app

    wierd...
  • Christianlej - Sanctuary
    Christianlej - Sanctuary Posts: 131 Arc User
    edited February 2012
    Options
    They're all in my library because I have the DirectX Redistributable which downloads ALL of them. The "I could be wrong" referred to the possibility of her only having dsomething_42 in hers.

    I just noticed that the filesystem in mac is diferent of Linux... Pm me if you really need help.

    Edit 1: Well... i can remote control if you desesperate... lol.

    Edit 2: It`s 05:21 morning here lol.