Mercurial > hg > xemacs-beta
comparison netinstall/regedit.cc @ 448:3078fd1074e8 r21-2-39
Import from CVS: tag r21-2-39
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:38:25 +0200 |
parents | |
children | 3d3049ae1304 |
comparison
equal
deleted
inserted
replaced
447:4fc5f13f3bd3 | 448:3078fd1074e8 |
---|---|
1 /* | |
2 * Copyright (c) 2000, Red Hat, Inc. | |
3 * | |
4 * This program is free software; you can redistribute it and/or modify | |
5 * it under the terms of the GNU General Public License as published by | |
6 * the Free Software Foundation; either version 2 of the License, or | |
7 * (at your option) any later version. | |
8 * | |
9 * A copy of the GNU General Public License can be found at | |
10 * http://www.gnu.org/ | |
11 * | |
12 * Written by DJ Delorie <dj@cygnus.com> | |
13 * | |
14 */ | |
15 | |
16 /* Manipulate the registry for XEmacs. */ | |
17 | |
18 #include "win32.h" | |
19 | |
20 #include <stdio.h> | |
21 #if defined(CYGWIN) || defined(MINGW) | |
22 #include <cygwin/version.h> | |
23 #include <sys/mount.h> | |
24 #endif | |
25 | |
26 #include "reginfo.h" | |
27 #include "regedit.h" | |
28 #include "msg.h" | |
29 #include "resource.h" | |
30 #include "dialog.h" | |
31 | |
32 static char * | |
33 find_cygwin_mount (HKEY rkey, int *istext) | |
34 { | |
35 char buf[1000]; | |
36 char *retval = 0; | |
37 HKEY key; | |
38 DWORD retvallen = 0; | |
39 DWORD flags = 0; | |
40 DWORD type; | |
41 | |
42 #if defined(CYGWIN) || defined(MINGW) | |
43 sprintf (buf, "Software\\%s\\%s\\%s\\/", | |
44 CYGWIN_INFO_CYGNUS_REGISTRY_NAME, | |
45 CYGWIN_INFO_CYGWIN_REGISTRY_NAME, | |
46 CYGWIN_INFO_CYGWIN_MOUNT_REGISTRY_NAME); | |
47 | |
48 if (RegOpenKeyEx (rkey, buf, 0, KEY_READ, &key) != ERROR_SUCCESS) | |
49 return 0; | |
50 | |
51 if (RegQueryValueEx (key, "native", 0, &type, 0, &retvallen) | |
52 == ERROR_SUCCESS) | |
53 { | |
54 retval = new char[retvallen+1]; | |
55 if (RegQueryValueEx (key, "native", 0, &type, (BYTE *)retval, &retvallen) | |
56 != ERROR_SUCCESS) | |
57 { | |
58 delete retval; | |
59 retval = 0; | |
60 } | |
61 } | |
62 | |
63 retvallen = sizeof (flags); | |
64 RegQueryValueEx (key, "flags", 0, &type, (BYTE *)&flags, &retvallen); | |
65 | |
66 RegCloseKey (key); | |
67 | |
68 if (retval) | |
69 *istext = (flags & MOUNT_BINARY) ? 0 : 1; | |
70 return retval; | |
71 #else | |
72 return 0; | |
73 #endif | |
74 } | |
75 | |
76 static char * | |
77 find_xemacs_root (HKEY rkey, int* isnative) | |
78 { | |
79 char buf[1000]; | |
80 char *retval = 0; | |
81 HKEY key; | |
82 DWORD retvallen = 0; | |
83 DWORD type; | |
84 DWORD itype; | |
85 | |
86 sprintf (buf, "Software\\%s\\%s", | |
87 XEMACS_INFO_XEMACS_ORG_REGISTRY_NAME, | |
88 XEMACS_INFO_XEMACS_REGISTRY_NAME); | |
89 | |
90 if (RegOpenKeyEx (rkey, buf, 0, KEY_READ, &key) != ERROR_SUCCESS) | |
91 return 0; | |
92 | |
93 if (RegQueryValueEx (key, XEMACS_INFO_XEMACS_ROOT_KEY, | |
94 0, &type, 0, &retvallen) == ERROR_SUCCESS) | |
95 { | |
96 retval = new char[retvallen+1]; | |
97 if (RegQueryValueEx (key, XEMACS_INFO_XEMACS_ROOT_KEY, | |
98 0, &type, (BYTE *)retval, &retvallen) | |
99 != ERROR_SUCCESS) | |
100 { | |
101 delete retval; | |
102 retval = 0; | |
103 } | |
104 } | |
105 | |
106 retvallen = sizeof (itype); | |
107 RegQueryValueEx (key, XEMACS_INFO_XEMACS_ROOT_TYPE, | |
108 0, &type, (BYTE *)&itype, &retvallen); | |
109 | |
110 if (itype == 1) | |
111 *isnative = 1; | |
112 else | |
113 *isnative = 0; | |
114 | |
115 RegCloseKey (key); | |
116 | |
117 return retval; | |
118 } | |
119 | |
120 char * | |
121 find_root_location (int *issystem, int *isnative) | |
122 { | |
123 char *rv; | |
124 if ((rv = find_xemacs_root (HKEY_CURRENT_USER, isnative))) | |
125 { | |
126 *issystem = 0; | |
127 return rv; | |
128 } | |
129 else if ((rv = find_xemacs_root (HKEY_LOCAL_MACHINE, isnative))) | |
130 { | |
131 *issystem = 1; | |
132 return rv; | |
133 } | |
134 return 0; | |
135 } | |
136 | |
137 char * | |
138 find_cygwin_root (int *issystem) | |
139 { | |
140 char *rv; | |
141 int istext; | |
142 if ((rv = find_cygwin_mount (HKEY_CURRENT_USER, &istext))) | |
143 { | |
144 *issystem = 0; | |
145 return rv; | |
146 } | |
147 else if ((rv = find_cygwin_mount (HKEY_LOCAL_MACHINE, &istext))) | |
148 { | |
149 *issystem = 1; | |
150 return rv; | |
151 } | |
152 return 0; | |
153 } | |
154 | |
155 void | |
156 create_xemacs_root (char *path, int issystem, int isnative) | |
157 { | |
158 char buf[1000]; | |
159 HKEY key; | |
160 DWORD disposition; | |
161 DWORD itype = isnative ? 1 : 0; | |
162 | |
163 remove_xemacs_root (); | |
164 | |
165 sprintf (buf, "Software\\%s\\%s", | |
166 XEMACS_INFO_XEMACS_ORG_REGISTRY_NAME, | |
167 XEMACS_INFO_XEMACS_REGISTRY_NAME); | |
168 | |
169 HKEY kr = issystem ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; | |
170 if (RegCreateKeyEx (kr, buf, 0, "XEmacs", 0, KEY_ALL_ACCESS, | |
171 0, &key, &disposition) != ERROR_SUCCESS) | |
172 fatal ("create_xemacs_root"); | |
173 | |
174 RegSetValueEx (key, XEMACS_INFO_XEMACS_ROOT_KEY, | |
175 0, REG_SZ, (BYTE *)path, strlen (path)+1); | |
176 RegSetValueEx (key, XEMACS_INFO_XEMACS_ROOT_TYPE, | |
177 0, REG_DWORD, (BYTE *)&itype, sizeof (itype)); | |
178 } | |
179 | |
180 void | |
181 set_app_path (char *exe, char* path, int issystem) | |
182 { | |
183 char buf[1000]; | |
184 HKEY key; | |
185 DWORD disposition; | |
186 | |
187 sprintf (buf, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\%s", | |
188 exe); | |
189 | |
190 HKEY kr = issystem ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; | |
191 RegDeleteKey (kr, buf); | |
192 | |
193 if (RegCreateKeyEx (kr, buf, 0, "XEmacs", 0, KEY_ALL_ACCESS, | |
194 0, &key, &disposition) != ERROR_SUCCESS) | |
195 fatal ("set_app_path"); | |
196 | |
197 RegSetValueEx (key, "Path", | |
198 0, REG_SZ, (BYTE *)path, strlen (path)+1); | |
199 } | |
200 | |
201 static void | |
202 remove1 (HKEY rkey) | |
203 { | |
204 char buf[1000]; | |
205 | |
206 sprintf (buf, "Software\\%s\\%s", | |
207 XEMACS_INFO_XEMACS_ORG_REGISTRY_NAME, | |
208 XEMACS_INFO_XEMACS_REGISTRY_NAME); | |
209 | |
210 RegDeleteKey (rkey, buf); | |
211 } | |
212 | |
213 void | |
214 remove_xemacs_root () | |
215 { | |
216 remove1 (HKEY_LOCAL_MACHINE); | |
217 remove1 (HKEY_CURRENT_USER); | |
218 } | |
219 |