Optimized debugging API to reduce code size.
[wine] / dlls / shell32 / classes.c
1 /*
2  *      file type mapping 
3  *      (HKEY_CLASSES_ROOT - Stuff)
4  *
5  *
6  */
7 #include <stdlib.h>
8 #include <string.h>
9 #include <stdio.h>
10 #include "debugtools.h"
11 #include "winerror.h"
12 #include "winreg.h"
13
14 #include "shlobj.h"
15 #include "shell32_main.h"
16 #include "shlguid.h"
17 #include "shresdef.h"
18
19 DEFAULT_DEBUG_CHANNEL(shell);
20
21 #define MAX_EXTENSION_LENGTH 20
22
23 BOOL HCR_MapTypeToValue ( LPCSTR szExtension, LPSTR szFileType, DWORD len, BOOL bPrependDot)
24 {       HKEY    hkey;
25         char    szTemp[MAX_EXTENSION_LENGTH + 2];
26
27         TRACE("%s %p\n",szExtension, szFileType );
28
29         if (bPrependDot)
30           strcpy(szTemp, ".");
31
32         lstrcpynA(szTemp+((bPrependDot)?1:0), szExtension, MAX_EXTENSION_LENGTH);
33         
34         if (RegOpenKeyExA(HKEY_CLASSES_ROOT,szTemp,0,0x02000000,&hkey))
35         { return FALSE;
36         }
37
38         if (RegQueryValueA(hkey,NULL,szFileType,&len))
39         { RegCloseKey(hkey);
40           return FALSE;
41         }       
42
43         RegCloseKey(hkey);
44
45         TRACE("-- %s\n", szFileType );
46
47         return TRUE;
48 }
49 BOOL HCR_GetExecuteCommand ( LPCSTR szClass, LPCSTR szVerb, LPSTR szDest, DWORD len )
50 {       HKEY    hkey;
51         char    sTemp[256];
52         
53         TRACE("%s %s\n",szClass, szVerb );
54
55         sprintf(sTemp, "%s\\shell\\%s\\command",szClass, szVerb);
56
57         if (RegOpenKeyExA(HKEY_CLASSES_ROOT,sTemp,0,0x02000000,&hkey))
58         { return FALSE;
59         }
60
61         if (RegQueryValueA(hkey,NULL,szDest,&len))
62         { RegCloseKey(hkey);
63           return FALSE;
64         }       
65         RegCloseKey(hkey);
66
67         TRACE("-- %s\n", szDest );
68
69         return TRUE;
70
71 }
72 /***************************************************************************************
73 *       HCR_GetDefaultIcon      [internal]
74 *
75 * Gets the icon for a filetype
76 */
77 BOOL HCR_GetDefaultIcon (LPCSTR szClass, LPSTR szDest, DWORD len, LPDWORD dwNr)
78 {       HKEY    hkey;
79         char    sTemp[256];
80         char    sNum[5];
81
82         TRACE("%s\n",szClass );
83
84         sprintf(sTemp, "%s\\DefaultIcon",szClass);
85
86         if (RegOpenKeyExA(HKEY_CLASSES_ROOT,sTemp,0,0x02000000,&hkey))
87         { return FALSE;
88         }
89
90         if (RegQueryValueA(hkey,NULL,szDest,&len))
91         { RegCloseKey(hkey);
92           return FALSE;
93         }       
94
95         RegCloseKey(hkey);
96
97         if (ParseFieldA (szDest, 2, sNum, 5))
98         { *dwNr=atoi(sNum);
99         }
100         
101         ParseFieldA (szDest, 1, szDest, len);
102         
103         TRACE("-- %s %li\n", szDest, *dwNr );
104
105         return TRUE;
106 }
107
108 /***************************************************************************************
109 *       HCR_GetClassName        [internal]
110 *
111 * Gets the name of a registred class
112 */
113 BOOL HCR_GetClassName (REFIID riid, LPSTR szDest, DWORD len)
114 {       HKEY    hkey;
115         char    xriid[50];
116         BOOL ret = FALSE;
117         DWORD buflen = len;
118
119         strcpy(xriid,"CLSID\\");
120         WINE_StringFromCLSID(riid,&xriid[strlen(xriid)]);
121
122         TRACE("%s\n",xriid );
123
124         if (!RegOpenKeyExA(HKEY_CLASSES_ROOT,xriid,0,KEY_READ,&hkey))
125         {
126           if (!RegQueryValueExA(hkey,"",0,NULL,szDest,&len))
127           {
128             ret = TRUE;
129           }
130           RegCloseKey(hkey);
131         }
132
133         if (!ret || !szDest[0])
134         { 
135           if(IsEqualIID(riid, &CLSID_ShellDesktop))
136           {
137             LoadStringA(shell32_hInstance, IDS_DESKTOP, szDest, buflen);
138             ret = TRUE;
139           }
140           else if (IsEqualIID(riid, &CLSID_MyComputer))
141           {
142             LoadStringA(shell32_hInstance, IDS_MYCOMPUTER, szDest, buflen);
143             ret = TRUE;
144           }     
145         }
146
147         TRACE("-- %s\n", szDest);
148
149         return ret;
150 }
151
152 /***************************************************************************************
153 *       HCR_GetFolderAttributes [internal]
154 *
155 * gets the folder attributes of a class
156 *
157 * FIXME
158 *       verify the defaultvalue for *szDest
159 */
160 BOOL HCR_GetFolderAttributes (REFIID riid, LPDWORD szDest)
161 {       HKEY    hkey;
162         char    xriid[60];
163         DWORD   attributes;
164         DWORD   len = 4;
165
166         strcpy(xriid,"CLSID\\");
167         WINE_StringFromCLSID(riid,&xriid[strlen(xriid)]);
168         TRACE("%s\n",xriid );
169
170         if (!szDest) return FALSE;
171         *szDest = SFGAO_FOLDER|SFGAO_FILESYSTEM;
172         
173         strcat (xriid, "\\ShellFolder");
174
175         if (RegOpenKeyExA(HKEY_CLASSES_ROOT,xriid,0,KEY_READ,&hkey))
176         {
177           return FALSE;
178         }
179
180         if (RegQueryValueExA(hkey,"Attributes",0,NULL,(LPBYTE)&attributes,&len))
181         {
182           RegCloseKey(hkey);
183           return FALSE;
184         }
185
186         RegCloseKey(hkey);
187
188         TRACE("-- 0x%08lx\n", attributes);
189
190         *szDest = attributes;
191
192         return TRUE;
193 }
194