~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Wine Cross Reference
wine/dlls/infosoft/infosoft_main.c

Version: ~ [ wine-1.1.33 ] ~ [ wine-1.1.32 ] ~ [ wine-1.1.31 ] ~ [ wine-1.1.30 ] ~ [ wine-1.1.29 ] ~ [ wine-1.1.28 ] ~ [ wine-1.1.27 ] ~ [ wine-1.1.26 ] ~ [ wine-1.1.25 ] ~ [ wine-1.1.24 ] ~ [ wine-1.1.23 ] ~ [ wine-1.1.22 ] ~ [ wine-1.1.21 ] ~ [ wine-1.1.20 ] ~ [ wine-1.1.19 ] ~ [ wine-1.1.18 ] ~ [ wine-1.1.17 ] ~ [ wine-1.1.16 ] ~ [ wine-1.1.15 ] ~ [ wine-1.1.14 ] ~ [ wine-1.1.13 ] ~ [ wine-1.1.12 ] ~ [ wine-1.1.11 ] ~ [ wine-1.1.10 ] ~ [ wine-1.1.9 ] ~ [ wine-1.1.8 ] ~ [ wine-1.1.7 ] ~ [ wine-1.0.1 ] ~ [ wine-1.1.6 ] ~ [ wine-1.1.5 ] ~ [ wine-1.1.4 ] ~ [ wine-1.1.3 ] ~ [ wine-1.1.2 ] ~ [ wine-1.1.1 ] ~ [ wine-1.1.0 ] ~ [ wine-1.0 ] ~

  1 /*
  2  *    Word splitter Implementation
  3  *
  4  * Copyright 2006 Mike McCormack
  5  *
  6  * This library is free software; you can redistribute it and/or
  7  * modify it under the terms of the GNU Lesser General Public
  8  * License as published by the Free Software Foundation; either
  9  * version 2.1 of the License, or (at your option) any later version.
 10  *
 11  * This library is distributed in the hope that it will be useful,
 12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 14  * Lesser General Public License for more details.
 15  *
 16  * You should have received a copy of the GNU Lesser General Public
 17  * License along with this library; if not, write to the Free Software
 18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 19  */
 20 
 21 #define COBJMACROS
 22 
 23 #include "config.h"
 24 
 25 #include <stdarg.h>
 26 #include <stdio.h>
 27 
 28 #include "windef.h"
 29 #include "winbase.h"
 30 #include "winuser.h"
 31 #include "winreg.h"
 32 #include "ole2.h"
 33 #include "indexsrv.h"
 34 #include "initguid.h"
 35 
 36 #include "wine/debug.h"
 37 
 38 WINE_DEFAULT_DEBUG_CHANNEL(infosoft);
 39 
 40 DEFINE_GUID(CLSID_wb_Neutral,0x369647e0,0x17b0,0x11ce,0x99,0x50,0x00,0xaa,0x00,0x4b,0xbb,0x1f);
 41 
 42 BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
 43 {
 44     switch(fdwReason)
 45     {
 46     case DLL_WINE_PREATTACH:
 47         return FALSE;  /* prefer native version */
 48     case DLL_PROCESS_ATTACH:
 49         DisableThreadLibraryCalls(hInstDLL);
 50         break;
 51     case DLL_PROCESS_DETACH:
 52         break;
 53     }
 54     return TRUE;
 55 }
 56 
 57 extern HRESULT WINAPI wb_Constructor(IUnknown*, REFIID, LPVOID *);
 58 
 59 typedef HRESULT (CALLBACK *LPFNCREATEINSTANCE)(IUnknown*, REFIID, LPVOID*);
 60 
 61 typedef struct
 62 {
 63     const IClassFactoryVtbl *lpVtbl;
 64     LPFNCREATEINSTANCE      lpfnCI;
 65 } CFImpl;
 66 
 67 static HRESULT WINAPI infosoftcf_fnQueryInterface ( LPCLASSFACTORY iface,
 68         REFIID riid, LPVOID *ppvObj)
 69 {
 70     CFImpl *This = (CFImpl *)iface;
 71 
 72     TRACE("(%p)->(%s)\n",This,debugstr_guid(riid));
 73 
 74     *ppvObj = NULL;
 75 
 76     if (IsEqualIID(riid, &IID_IUnknown) ||
 77         IsEqualIID(riid, &IID_IClassFactory))
 78     {
 79         *ppvObj = This;
 80         return S_OK;
 81     }
 82 
 83     TRACE("-- E_NOINTERFACE\n");
 84     return E_NOINTERFACE;
 85 }
 86 
 87 static ULONG WINAPI infosoftcf_fnAddRef (LPCLASSFACTORY iface)
 88 {
 89     return 2;
 90 }
 91 
 92 static ULONG WINAPI infosoftcf_fnRelease(LPCLASSFACTORY iface)
 93 {
 94     return 1;
 95 }
 96 
 97 static HRESULT WINAPI infosoftcf_fnCreateInstance( LPCLASSFACTORY iface,
 98         LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject)
 99 {
100     CFImpl *This = (CFImpl *)iface;
101 
102     TRACE("%p->(%p,%s,%p)\n", This, pUnkOuter, debugstr_guid(riid), ppvObject);
103 
104     *ppvObject = NULL;
105 
106     return This->lpfnCI(pUnkOuter, riid, ppvObject);
107 }
108 
109 static HRESULT WINAPI infosoftcf_fnLockServer(LPCLASSFACTORY iface, BOOL fLock)
110 {
111     FIXME("%p %d\n", iface, fLock);
112     return E_NOTIMPL;
113 }
114 
115 static const IClassFactoryVtbl infosoft_cfvt =
116 {
117     infosoftcf_fnQueryInterface,
118     infosoftcf_fnAddRef,
119     infosoftcf_fnRelease,
120     infosoftcf_fnCreateInstance,
121     infosoftcf_fnLockServer
122 };
123 
124 static CFImpl wb_cf = { &infosoft_cfvt, wb_Constructor };
125 
126 /***********************************************************************
127  *             DllGetClassObject (INFOSOFT.@)
128  */
129 HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
130 {
131     IClassFactory   *pcf = NULL;
132 
133     TRACE("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv);
134 
135     if (!ppv)
136         return E_INVALIDARG;
137     *ppv = NULL;
138 
139     if (IsEqualIID(rclsid, &CLSID_wb_Neutral))
140         pcf = (IClassFactory*) &wb_cf;
141     else
142         return CLASS_E_CLASSNOTAVAILABLE;
143 
144     return IClassFactory_QueryInterface(pcf, iid, ppv);
145 }
146 
147 
148 HRESULT WINAPI DllCanUnloadNow(void)
149 {
150     FIXME("\n");
151     return S_FALSE;
152 }
153 
154 static HRESULT add_key_val( LPCSTR key, LPCSTR valname, LPCSTR value )
155 {
156     HKEY hkey;
157 
158     if (RegCreateKeyA( HKEY_CLASSES_ROOT, key, &hkey ) != ERROR_SUCCESS) return E_FAIL;
159     RegSetValueA( hkey, valname, REG_SZ, value, strlen( value ) + 1 );
160     RegCloseKey( hkey );
161     return S_OK;
162 }
163 
164 static HRESULT add_wordbreaker_clsid( LPCSTR lang, const CLSID *id)
165 {
166     CHAR key[100], val[50];
167 
168     strcpy(key, "CLSID\\");
169     sprintf(key+6, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
170             id->Data1, id->Data2, id->Data3,
171             id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3],
172             id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7]);
173     sprintf(val, "%s Word Breaker", lang);
174     add_key_val( key, NULL, val );
175     strcat(key, "\\InProcServer32");
176     add_key_val( key, NULL, "infosoft.dll" );
177     add_key_val( key, "ThreadingModel", "Both" );
178     return S_OK;
179 }
180 
181 #define ADD_BREAKER(name)  add_wordbreaker_clsid( #name, &CLSID_wb_##name )
182 
183 static HRESULT add_content_index_keys(void)
184 {
185     ADD_BREAKER(Neutral); /* in query.dll on Windows */
186     return S_OK;
187 }
188 
189 /***********************************************************************
190  *             DllRegisterServer (INFOSOFT.@)
191  */
192 HRESULT WINAPI DllRegisterServer(void)
193 {
194     add_content_index_keys();
195     return S_OK;
196 }
197 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.