ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Windows/util_windows.cpp
(Generate patch)

Comparing BasiliskII/src/Windows/util_windows.cpp (file contents):
Revision 1.1 by gbeauche, 2004-12-03T22:01:47Z vs.
Revision 1.5 by gbeauche, 2006-04-23T15:20:31Z

# Line 1 | Line 1
1   /*
2   *  util_windows.cpp - Miscellaneous utilities for Win32
3   *
4 < *  Basilisk II (C) 1997-2004 Christian Bauer
4 > *  Basilisk II (C) 1997-2005 Christian Bauer
5   *
6   *  Windows platform specific code copyright (C) Lauri Pesonen
7   *
# Line 22 | Line 22
22  
23   #include "sysdeps.h"
24   #include "util_windows.h"
25 + #include "main.h"
26 +
27 + #include <list>
28 + using std::list;
29 +
30 + #include <string>
31 + using std::string;
32  
33   BOOL exists( const char *path )
34   {
# Line 52 | Line 59 | BOOL create_file( const char *path, DWOR
59                          if(SetEndOfFile(h)) {
60                                  ok = true;
61                                  if(SetFilePointer( h, 0, NULL, FILE_BEGIN) != 0xFFFFFFFF) {
62 <                                        DWORD written, zeroed_size = min(1024*1024,size);
62 >                                        DWORD written;
63 >                                        DWORD zeroed_size = size;
64 >                                        if (zeroed_size > 1024*1024)
65 >                                                zeroed_size = 1024*1024;
66                                          char *b = (char *)malloc(zeroed_size);
67                                          if(b) {
68                                                  memset( b, 0, zeroed_size );
# Line 83 | Line 93 | int32 get_file_size( const char *path )
93          }
94          return(size);
95   }
96 +
97 +
98 + /*
99 + *  Thread wrappers
100 + */
101 +
102 + HANDLE create_thread(LPTHREAD_START_ROUTINE start_routine, void *arg)
103 + {
104 +        DWORD dwThreadId;
105 +        return CreateThread(NULL, 0, start_routine, arg, 0, &dwThreadId);
106 + }
107 +
108 + void wait_thread(HANDLE thread)
109 + {
110 +        WaitForSingleObject(thread, INFINITE);
111 +        CloseHandle(thread);
112 + }
113 +
114 + void kill_thread(HANDLE thread)
115 + {
116 +        TerminateThread(thread, 0);
117 + }
118 +
119 +
120 + /*
121 + *  Check that drivers are installed
122 + */
123 +
124 + bool check_drivers(void)
125 + {
126 +        char path[_MAX_PATH];
127 +        GetSystemDirectory(path, sizeof(path));
128 +        strcat(path, "\\drivers\\cdenable.sys");
129 +
130 +        if (exists(path)) {
131 +                int32 size = get_file_size(path);
132 +                if (size != 6112) {
133 +                        char str[256];
134 +                        sprintf(str, "The CD-ROM driver file \"%s\" is too old or corrupted.", path);
135 +                        ErrorAlert(str);
136 +                        return false;
137 +                }
138 +        }
139 +        else {
140 +                char str[256];
141 +                sprintf(str, "The CD-ROM driver file \"%s\" is missing.", path);
142 +                WarningAlert(str);
143 +        }
144 +
145 +        return true;
146 + }
147 +
148 +
149 + /*
150 + *  Network control panel helpers
151 + */
152 +
153 + struct panel_reg {
154 +        string name;
155 +        string guid;
156 + };
157 +
158 + static list<panel_reg> network_registry;
159 + typedef list<panel_reg>::const_iterator network_registry_iterator;
160 +
161 + #define NETWORK_CONNECTIONS_KEY \
162 +                "SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}"
163 +
164 + static void get_network_registry(void)
165 + {
166 +        LONG status;
167 +        HKEY network_connections_key;
168 +        DWORD len;
169 +        int i = 0;
170 +
171 +        if (network_registry.size() > 0)
172 +                return;
173 +
174 +        status = RegOpenKeyEx(
175 +                HKEY_LOCAL_MACHINE,
176 +                NETWORK_CONNECTIONS_KEY,
177 +                0,
178 +                KEY_READ,
179 +                &network_connections_key);
180 +
181 +        if (status != ERROR_SUCCESS)
182 +                return;
183 +
184 +        while (true) {
185 +                char enum_name[256];
186 +                char connection_string[256];
187 +                HKEY connection_key;
188 +                char name_data[256];
189 +                DWORD name_type;
190 +                const char name_string[] = "Name";
191 +
192 +                len = sizeof (enum_name);
193 +                status = RegEnumKeyEx(
194 +                        network_connections_key,
195 +                        i,
196 +                        enum_name,
197 +                        &len,
198 +                        NULL,
199 +                        NULL,
200 +                        NULL,
201 +                        NULL);
202 +                if (status != ERROR_SUCCESS)
203 +                        break;
204 +
205 +                snprintf (connection_string, sizeof(connection_string),
206 +                                  "%s\\%s\\Connection",
207 +                                  NETWORK_CONNECTIONS_KEY, enum_name);
208 +
209 +                status = RegOpenKeyEx(
210 +                        HKEY_LOCAL_MACHINE,
211 +                        connection_string,
212 +                        0,
213 +                        KEY_READ,
214 +                        &connection_key);
215 +
216 +                if (status == ERROR_SUCCESS) {
217 +                        len = sizeof (name_data);
218 +                        status = RegQueryValueEx(
219 +                                connection_key,
220 +                                name_string,
221 +                                NULL,
222 +                                &name_type,
223 +                                (BYTE *)name_data,
224 +                                &len);
225 +
226 +                        if (status == ERROR_SUCCESS && name_type == REG_SZ) {
227 +                                panel_reg pr;
228 +                                pr.name = name_data;
229 +                                pr.guid = enum_name;
230 +                                network_registry.push_back(pr);
231 +                        }
232 +                        RegCloseKey (connection_key);
233 +                }
234 +                ++i;
235 +    }
236 +
237 +        RegCloseKey (network_connections_key);
238 + }
239 +
240 + const char *ether_name_to_guid(const char *name)
241 + {
242 +        get_network_registry();
243 +
244 +        for (network_registry_iterator it = network_registry.begin(); it != network_registry.end(); it++) {
245 +                if (strcmp((*it).name.c_str(), name) == 0)
246 +                        return (*it).guid.c_str();
247 +        }
248 +
249 +        return NULL;
250 + }
251 +
252 + const char *ether_guid_to_name(const char *guid)
253 + {
254 +        get_network_registry();
255 +
256 +        for (network_registry_iterator it = network_registry.begin(); it != network_registry.end(); it++) {
257 +                if (strcmp((*it).guid.c_str(), guid) == 0)
258 +                        return (*it).name.c_str();
259 +        }
260 +
261 +        return NULL;
262 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines