annotate netinstall/root.cc @ 589:37fe04af1590

[xemacs-hg @ 2001-05-31 02:00:29 by wmperry] Regenerated some .c files from their lisp equivalents for GTK bindings. Fix buttons as modifiers code so that text selection works in GTK event loop.
author wmperry
date Thu, 31 May 2001 02:00:31 +0000
parents 3d3049ae1304
children ce0b3f2eff35
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
1 /*
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
2 * Copyright (c) 2000, Red Hat, Inc.
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
3 *
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
4 * This program is free software; you can redistribute it and/or modify
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published by
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
7 * (at your option) any later version.
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
8 *
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
9 * A copy of the GNU General Public License can be found at
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
10 * http://www.gnu.org/
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
11 *
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
12 * Written by DJ Delorie <dj@cygnus.com>
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
13 *
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
14 */
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
15
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
16 /* The purpose of this file is to ask the user where they want the
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
17 root of the installation to be, and to ask whether the user prefers
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
18 text or binary mounts. */
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
19
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
20 #include "win32.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
21 #include <shlobj.h>
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
22 #include <stdio.h>
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
23 #include <stdlib.h>
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
24 #include <ctype.h>
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
25
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
26 #include "dialog.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
27 #include "resource.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
28 #include "state.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
29 #include "msg.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
30 #include "regedit.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
31 #include "reginfo.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
32 #include "concat.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
33 #include "log.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
34
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
35 static int rb[] = { IDC_INSTALL_CYGWIN, IDC_INSTALL_NATIVE, 0 };
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
36 static int su[] = { IDC_ROOT_SYSTEM, IDC_ROOT_USER, 0 };
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
37
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
38 static void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
39 check_if_enable_next (HWND h)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
40 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
41 EnableWindow (GetDlgItem (h, IDOK), install_type && root_dir && root_scope);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
42 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
43
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
44 static void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
45 load_dialog (HWND h)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
46 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
47 rbset (h, rb, install_type);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
48 rbset (h, su, root_scope);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
49 eset (h, IDC_ROOT_DIR, root_dir);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
50 check_if_enable_next (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
51 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
52
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
53 static void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
54 save_dialog (HWND h)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
55 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
56 install_type = rbget (h, rb);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
57 root_scope = rbget (h, su);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
58 char* new_root_dir = eget (h, IDC_ROOT_DIR, root_dir);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
59
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
60 if (!root_dir || strcmp (new_root_dir, root_dir) != 0)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
61 root_dir_default = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
62
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
63 root_dir = new_root_dir;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
64 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
65
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
66 /*
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
67 * is_admin () determines whether or not the current user is a member of the
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
68 * Administrators group. On Windows 9X, the current user is considered an
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
69 * Administrator by definition.
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
70 */
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
71
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
72 static int
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
73 is_admin ()
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
74 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
75 // Windows 9X users are considered Administrators by definition
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
76 OSVERSIONINFO verinfo;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
77 verinfo.dwOSVersionInfoSize = sizeof (verinfo);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
78 GetVersionEx (&verinfo);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
79 if (verinfo.dwPlatformId != VER_PLATFORM_WIN32_NT)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
80 return 1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
81
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
82 // Get the process token for the current process
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
83 HANDLE token;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
84 BOOL status = OpenProcessToken (GetCurrentProcess(), TOKEN_QUERY, &token);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
85 if (!status)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
86 return 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
87
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
88 // Get the group token information
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
89 UCHAR token_info[1024];
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
90 PTOKEN_GROUPS groups = (PTOKEN_GROUPS) token_info;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
91 DWORD token_info_len = sizeof (token_info);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
92 status = GetTokenInformation (token, TokenGroups, token_info, token_info_len, &token_info_len);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
93 CloseHandle(token);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
94 if (!status)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
95 return 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
96
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
97 // Create the Administrators group SID
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
98 PSID admin_sid;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
99 SID_IDENTIFIER_AUTHORITY authority = SECURITY_NT_AUTHORITY;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
100 status = AllocateAndInitializeSid (&authority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &admin_sid);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
101 if (!status)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
102 return 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
103
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
104 // Check to see if the user is a member of the Administrators group
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
105 status = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
106 for (UINT i=0; i<groups->GroupCount; i++) {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
107 if (EqualSid(groups->Groups[i].Sid, admin_sid)) {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
108 status = 1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
109 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
110 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
111 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
112
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
113 // Destroy the Administrators group SID
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
114 FreeSid (admin_sid);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
115
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
116 // Return whether or not the user is a member of the Administrators group
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
117 return status;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
118 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
119
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
120 static void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
121 change_default_root (int id)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
122 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
123 int issystem;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
124 char* cygroot = find_cygwin_root (&issystem);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
125 if (id == IDC_INSTALL_CYGWIN && cygroot)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
126 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
127 root_dir = concat (cygroot, XEMACS_CYGWIN_DEFAULT_ROOT, 0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
128 install_type = IDC_INSTALL_CYGWIN;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
129 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
130 else if (id == IDC_INSTALL_NATIVE)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
131 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
132 char windir[_MAX_PATH];
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
133 GetWindowsDirectory (windir, sizeof (windir));
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
134 windir[2] = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
135 root_dir = concat (windir, XEMACS_DEFAULT_ROOT, 0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
136 install_type = IDC_INSTALL_NATIVE;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
137 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
138 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
139
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
140 static void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
141 read_mount_table ()
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
142 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
143 int isnative, issystem;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
144 root_dir = find_root_location (&issystem, &isnative);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
145 if (root_dir)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
146 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
147 if (isnative)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
148 install_type = IDC_INSTALL_NATIVE;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
149 else
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
150 install_type = IDC_INSTALL_CYGWIN;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
151
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
152 if (issystem)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
153 root_scope = IDC_ROOT_SYSTEM;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
154 else
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
155 root_scope = IDC_ROOT_USER;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
156 root_dir_default = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
157 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
158 else
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
159 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
160 change_default_root (IDC_INSTALL_NATIVE);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
161 root_scope = (is_admin()) ? IDC_ROOT_SYSTEM : IDC_ROOT_USER;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
162 root_dir_default = 1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
163 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
164 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
165
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
166 static int CALLBACK
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
167 browse_cb (HWND h, UINT m, LPARAM lp, LPARAM data)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
168 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
169 switch (m)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
170 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
171 case BFFM_INITIALIZED:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
172 if (root_dir)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
173 SendMessage (h, BFFM_SETSELECTION, TRUE, (LPARAM)root_dir);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
174 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
175 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
176 return 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
177 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
178
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
179 static void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
180 browse (HWND h)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
181 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
182 BROWSEINFO bi;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
183 CHAR name[MAX_PATH];
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
184 LPITEMIDLIST pidl;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
185 memset (&bi, 0, sizeof (bi));
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
186 bi.hwndOwner = h;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
187 bi.pszDisplayName = name;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
188 bi.lpszTitle = "Select an installation root directory";
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
189 bi.ulFlags = BIF_RETURNONLYFSDIRS;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
190 bi.lpfn = browse_cb;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
191 pidl = SHBrowseForFolder (&bi);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
192 if (pidl)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
193 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
194 if (SHGetPathFromIDList (pidl, name))
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
195 eset (h, IDC_ROOT_DIR, name);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
196 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
197 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
198
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
199 #define isslash(c) ((c) == '\\' || (c) == '/')
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
200
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
201 static int
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
202 directory_is_absolute ()
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
203 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
204 if (isalpha (root_dir[0])
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
205 && root_dir[1] == ':'
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
206 && (root_dir[2] == '\\' || root_dir[2] == '/'))
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
207 return 1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
208 return 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
209 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
210
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
211 static int
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
212 directory_is_rootdir ()
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
213 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
214 char *c;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
215 for (c = root_dir; *c; c++)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
216 if (isslash (c[0]) && c[1] && !isslash (c[1]))
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
217 return 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
218 return 1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
219 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
220
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
221 static int
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
222 cygwin_without_cygwin ()
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
223 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
224 int issystem;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
225 if (install_type == IDC_INSTALL_CYGWIN
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
226 && !find_cygwin_root (&issystem))
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
227 return 1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
228 return 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
229 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
230
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
231 static BOOL
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
232 dialog_cmd (HWND h, int id, HWND hwndctl, UINT code)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
233 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
234 switch (id)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
235 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
236
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
237 case IDC_ROOT_DIR:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
238 case IDC_ROOT_SYSTEM:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
239 case IDC_ROOT_USER:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
240 save_dialog (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
241 check_if_enable_next (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
242 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
243
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
244 case IDC_INSTALL_NATIVE:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
245 case IDC_INSTALL_CYGWIN:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
246 if (root_dir_default)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
247 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
248 change_default_root (id);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
249 eset (h, IDC_ROOT_DIR, root_dir);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
250 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
251 save_dialog (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
252 check_if_enable_next (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
253 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
254
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
255 case IDC_ROOT_BROWSE:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
256 browse (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
257 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
258
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
259 case IDOK:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
260 save_dialog (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
261
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
262 if (! directory_is_absolute ())
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
263 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
264 note (IDS_ROOT_ABSOLUTE);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
265 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
266 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
267
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
268 if (directory_is_rootdir ())
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
269 if (IDNO == yesno (IDS_ROOT_SLASH))
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
270 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
271
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
272 if (cygwin_without_cygwin ())
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
273 if (IDNO == yesno (IDS_ROOT_NOCYGWIN))
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
274 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
275
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 448
diff changeset
276 create_xemacs_root (backslash (root_dir),
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
277 root_scope == IDC_ROOT_SYSTEM ? 1 : 0,
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
278 install_type == IDC_INSTALL_NATIVE ? 1 : 0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
279
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
280 switch (source)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
281 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
282 case IDC_SOURCE_NETINST:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
283 NEXT (IDD_NET);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
284 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
285 case IDC_SOURCE_CWD:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
286 NEXT (IDD_S_FROM_CWD);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
287 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
288 default:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
289 msg ("source is default? %d\n", source);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
290 NEXT (0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
291 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
292 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
293
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
294 case IDC_BACK:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
295 save_dialog (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
296 NEXT (IDD_LOCAL_DIR);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
297 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
298
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
299 case IDCANCEL:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
300 NEXT (0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
301 break;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
302 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
303 return FALSE;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
304 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
305
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
306 static BOOL CALLBACK
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
307 dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
308 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
309 switch (message)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
310 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
311 case WM_INITDIALOG:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
312 load_dialog (h);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
313 return FALSE;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
314 case WM_COMMAND:
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
315 return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
316 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
317 return FALSE;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
318 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
319
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
320 void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
321 do_root (HINSTANCE h)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
322 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
323 int rv = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
324 read_mount_table ();
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
325
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
326 rv = DialogBox (h, MAKEINTRESOURCE (IDD_ROOT), 0, dialog_proc);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
327 if (rv == -1)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
328 fatal (IDS_DIALOG_FAILED);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
329
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
330 log (0, "root: %s %s %s", root_dir,
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
331 (install_type == IDC_INSTALL_NATIVE) ? "native" : "cygwin",
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
332 (root_scope == IDC_ROOT_USER) ? "user" : "system");
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
333 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
334