~ubuntu-branches/ubuntu/feisty/basilisk2/feisty

« back to all changes in this revision

Viewing changes to src/Windows/util_windows.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jonas Smedegaard
  • Date: 2005-07-30 20:42:20 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20050730204220-1nl1cg2jkjvy63ry
Tags: 0.9.20050730-1
* New upstream CVS snapshot.
* Build-depend on virtual libsdl-dev (not libsdl1.2-dev).
* Invoke init rules also on clean (to separate better from official
  builds).
* Update URL of upstream source in debian/copyright.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *  util_windows.cpp - Miscellaneous utilities for Win32
 
3
 *
 
4
 *  Basilisk II (C) 1997-2005 Christian Bauer
 
5
 *
 
6
 *  Windows platform specific code copyright (C) Lauri Pesonen
 
7
 *
 
8
 *  This program is free software; you can redistribute it and/or modify
 
9
 *  it under the terms of the GNU General Public License as published by
 
10
 *  the Free Software Foundation; either version 2 of the License, or
 
11
 *  (at your option) any later version.
 
12
 *
 
13
 *  This program is distributed in the hope that it will be useful,
 
14
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
15
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
16
 *  GNU General Public License for more details.
 
17
 *
 
18
 *  You should have received a copy of the GNU General Public License
 
19
 *  along with this program; if not, write to the Free Software
 
20
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
21
 */
 
22
 
 
23
#include "sysdeps.h"
 
24
#include "util_windows.h"
 
25
#include "main.h"
 
26
 
 
27
BOOL exists( const char *path )
 
28
{
 
29
        HFILE h;
 
30
        bool ret = false;
 
31
 
 
32
        h = _lopen( path, OF_READ );
 
33
        if(h != HFILE_ERROR) {
 
34
                ret = true;
 
35
                _lclose(h);
 
36
        }
 
37
        return(ret);
 
38
}
 
39
 
 
40
BOOL create_file( const char *path, DWORD size )
 
41
{
 
42
        HANDLE h;
 
43
        bool ok = false;
 
44
 
 
45
        h = CreateFile( path,
 
46
                GENERIC_READ | GENERIC_WRITE,
 
47
                0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL
 
48
        );
 
49
        if(h != INVALID_HANDLE_VALUE) {
 
50
                if(size == 0) {
 
51
                        ok = true;
 
52
                } else if(SetFilePointer( h, size, NULL, FILE_BEGIN) != 0xFFFFFFFF) {
 
53
                        if(SetEndOfFile(h)) {
 
54
                                ok = true;
 
55
                                if(SetFilePointer( h, 0, NULL, FILE_BEGIN) != 0xFFFFFFFF) {
 
56
                                        DWORD written, zeroed_size = min(1024*1024,size);
 
57
                                        char *b = (char *)malloc(zeroed_size);
 
58
                                        if(b) {
 
59
                                                memset( b, 0, zeroed_size );
 
60
                                                WriteFile( h, b, zeroed_size, &written, NULL );
 
61
                                                free(b);
 
62
                                        }
 
63
                                }
 
64
                        }
 
65
                }
 
66
                CloseHandle(h);
 
67
        }
 
68
        if(!ok) DeleteFile(path);
 
69
        return(ok);
 
70
}
 
71
 
 
72
int32 get_file_size( const char *path )
 
73
{
 
74
        HANDLE h;
 
75
        DWORD size = 0;
 
76
 
 
77
        h = CreateFile( path,
 
78
                GENERIC_READ,
 
79
                0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
 
80
        );
 
81
        if(h != INVALID_HANDLE_VALUE) {
 
82
                size = GetFileSize( h, NULL );
 
83
                CloseHandle(h);
 
84
        }
 
85
        return(size);
 
86
}
 
87
 
 
88
 
 
89
/*
 
90
 *  Thread wrappers
 
91
 */
 
92
 
 
93
HANDLE create_thread(LPTHREAD_START_ROUTINE start_routine, void *arg)
 
94
{
 
95
        DWORD dwThreadId;
 
96
        return CreateThread(NULL, 0, start_routine, arg, 0, &dwThreadId);
 
97
}
 
98
 
 
99
void wait_thread(HANDLE thread)
 
100
{
 
101
        WaitForSingleObject(thread, INFINITE);
 
102
        CloseHandle(thread);
 
103
}
 
104
 
 
105
void kill_thread(HANDLE thread)
 
106
{
 
107
        TerminateThread(thread, 0);
 
108
}
 
109
 
 
110
 
 
111
/*
 
112
 *  Check that drivers are installed
 
113
 */
 
114
 
 
115
bool check_drivers(void)
 
116
{
 
117
        char path[_MAX_PATH];
 
118
        GetSystemDirectory(path, sizeof(path));
 
119
        strcat(path, "\\drivers\\cdenable.sys");
 
120
 
 
121
        if (exists(path)) {
 
122
                int32 size = get_file_size(path);
 
123
                if (size != 6112) {
 
124
                        char str[256];
 
125
                        sprintf(str, "The CD-ROM driver file \"%s\" is too old or corrupted.", path);
 
126
                        ErrorAlert(str);
 
127
                        return false;
 
128
                }
 
129
        }
 
130
        else {
 
131
                char str[256];
 
132
                sprintf(str, "The CD-ROM driver file \"%s\" is missing.", path);
 
133
                WarningAlert(str);
 
134
        }
 
135
 
 
136
        return true;
 
137
}