Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
442 lines (399 loc) · 14.2 KB

SDL_syscdrom.c

File metadata and controls

442 lines (399 loc) · 14.2 KB
 
Nov 23, 2005
Nov 23, 2005
1
2
/*
SDL - Simple DirectMedia Layer
Feb 1, 2006
Feb 1, 2006
3
Copyright (C) 1997-2006 Sam Lantinga
Nov 23, 2005
Nov 23, 2005
4
5
This library is free software; you can redistribute it and/or
Feb 1, 2006
Feb 1, 2006
6
modify it under the terms of the GNU Lesser General Public
Nov 23, 2005
Nov 23, 2005
7
License as published by the Free Software Foundation; either
Feb 1, 2006
Feb 1, 2006
8
version 2.1 of the License, or (at your option) any later version.
Nov 23, 2005
Nov 23, 2005
9
10
11
12
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Feb 1, 2006
Feb 1, 2006
13
Lesser General Public License for more details.
Nov 23, 2005
Nov 23, 2005
14
Feb 1, 2006
Feb 1, 2006
15
16
17
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Nov 23, 2005
Nov 23, 2005
18
19
20
21
Sam Lantinga
slouken@libsdl.org
*/
Feb 21, 2006
Feb 21, 2006
22
#include "SDL_config.h"
Nov 23, 2005
Nov 23, 2005
23
Apr 14, 2006
Apr 14, 2006
24
25
#ifdef SDL_CDROM_OS2
Nov 23, 2005
Nov 23, 2005
26
27
28
29
30
31
32
/* Functions for system-level CD-ROM audio control */
#define INCL_MCIOS2
#include <os2.h>
#include <os2me.h>
#include "SDL_cdrom.h"
Feb 16, 2006
Feb 16, 2006
33
#include "../SDL_syscdrom.h"
Nov 23, 2005
Nov 23, 2005
34
35
36
37
38
/* Size of MCI result buffer (in bytes) */
#define MCI_CMDRETBUFSIZE 128
/* The maximum number of CD-ROM drives we'll detect */
Jul 10, 2006
Jul 10, 2006
39
#define MAX_DRIVES 16
Nov 23, 2005
Nov 23, 2005
40
41
42
43
44
45
46
47
/* A list of available CD-ROM drives */
static char *SDL_cdlist[MAX_DRIVES];
//static dev_t SDL_cdmode[MAX_DRIVES];
/* The system-dependent CD control functions */
static const char *SDL_SYS_CDName(int drive);
static int SDL_SYS_CDOpen(int drive);
Jul 10, 2006
Jul 10, 2006
48
49
50
51
52
53
54
55
static int SDL_SYS_CDGetTOC(SDL_CD * cdrom);
static CDstatus SDL_SYS_CDStatus(SDL_CD * cdrom, int *position);
static int SDL_SYS_CDPlay(SDL_CD * cdrom, int start, int length);
static int SDL_SYS_CDPause(SDL_CD * cdrom);
static int SDL_SYS_CDResume(SDL_CD * cdrom);
static int SDL_SYS_CDStop(SDL_CD * cdrom);
static int SDL_SYS_CDEject(SDL_CD * cdrom);
static void SDL_SYS_CDClose(SDL_CD * cdrom);
Nov 23, 2005
Nov 23, 2005
56
57
58
59
60
61
62
/* MCI Timing Functions */
#define MCI_MMTIMEPERSECOND 3000
#define FRAMESFROMMM(mmtime) (((mmtime)*CD_FPS)/MCI_MMTIMEPERSECOND)
/* Ready for MCI CDAudio Devices */
Jul 10, 2006
Jul 10, 2006
63
64
int
SDL_SYS_CDInit(void)
Nov 23, 2005
Nov 23, 2005
65
{
Jul 10, 2006
Jul 10, 2006
66
67
68
int i; /* generig counter */
MCI_SYSINFO_PARMS msp; /* Structure to MCI SysInfo parameters */
CHAR SysInfoRet[MCI_CMDRETBUFSIZE]; /* Buffer for MCI Command result */
Nov 23, 2005
Nov 23, 2005
69
70
/* Fill in our driver capabilities */
Jul 10, 2006
Jul 10, 2006
71
72
73
74
75
76
77
78
79
80
SDL_CDcaps.Name = SDL_SYS_CDName;
SDL_CDcaps.Open = SDL_SYS_CDOpen;
SDL_CDcaps.GetTOC = SDL_SYS_CDGetTOC;
SDL_CDcaps.Status = SDL_SYS_CDStatus;
SDL_CDcaps.Play = SDL_SYS_CDPlay;
SDL_CDcaps.Pause = SDL_SYS_CDPause;
SDL_CDcaps.Resume = SDL_SYS_CDResume;
SDL_CDcaps.Stop = SDL_SYS_CDStop;
SDL_CDcaps.Eject = SDL_SYS_CDEject;
SDL_CDcaps.Close = SDL_SYS_CDClose;
Nov 23, 2005
Nov 23, 2005
81
82
83
/* Get the number of CD ROMs in the System */
/* Clean SysInfo structure */
Jul 10, 2006
Jul 10, 2006
84
SDL_memset(&msp, 0x00, sizeof(MCI_SYSINFO_PARMS));
Nov 23, 2005
Nov 23, 2005
85
/* Prepare structure to Ask Numer of Audio CDs */
Jul 10, 2006
Jul 10, 2006
86
87
88
89
90
91
92
93
94
95
96
msp.usDeviceType = MCI_DEVTYPE_CD_AUDIO; /* CD Audio Type */
msp.pszReturn = (PSZ) & SysInfoRet; /* Return Structure */
msp.ulRetSize = MCI_CMDRETBUFSIZE; /* Size of ret struct */
if (LOUSHORT
(mciSendCommand
(0, MCI_SYSINFO, MCI_SYSINFO_QUANTITY | MCI_WAIT, (PVOID) & msp,
0)) != MCIERR_SUCCESS)
return (CD_ERROR);
SDL_numcds = atoi(SysInfoRet);
if (SDL_numcds > MAX_DRIVES)
SDL_numcds = MAX_DRIVES; /* Limit maximum CD number */
Nov 23, 2005
Nov 23, 2005
97
98
/* Get and Add their system name to the SDL_cdlist */
Jul 10, 2006
Jul 10, 2006
99
100
101
102
103
104
105
106
107
108
109
110
111
msp.pszReturn = (PSZ) & SysInfoRet; /* Return Structure */
msp.ulRetSize = MCI_CMDRETBUFSIZE; /* Size of ret struct */
msp.usDeviceType = MCI_DEVTYPE_CD_AUDIO; /* CD Audio Type */
for (i = 0; i < SDL_numcds; i++) {
msp.ulNumber = i + 1;
mciSendCommand(0, MCI_SYSINFO, MCI_SYSINFO_NAME | MCI_WAIT, &msp, 0);
SDL_cdlist[i] = SDL_strdup(SysInfoRet);
if (SDL_cdlist[i] == NULL) {
SDL_OutOfMemory();
return (-1);
}
}
return (0);
Nov 23, 2005
Nov 23, 2005
112
113
114
}
/* Return CDAudio System Dependent Device Name - Ready for MCI*/
Jul 10, 2006
Jul 10, 2006
115
116
static const char *
SDL_SYS_CDName(int drive)
Nov 23, 2005
Nov 23, 2005
117
{
Jul 10, 2006
Jul 10, 2006
118
return (SDL_cdlist[drive]);
Nov 23, 2005
Nov 23, 2005
119
120
121
}
/* Open CDAudio Device - Ready for MCI */
Jul 10, 2006
Jul 10, 2006
122
123
static int
SDL_SYS_CDOpen(int drive)
Nov 23, 2005
Nov 23, 2005
124
{
Jul 10, 2006
Jul 10, 2006
125
126
127
MCI_OPEN_PARMS mop;
MCI_SET_PARMS msp;
MCI_GENERIC_PARMS mgp;
Nov 23, 2005
Nov 23, 2005
128
129
/* Open the device */
Jul 10, 2006
Jul 10, 2006
130
131
132
133
134
135
mop.hwndCallback = (HWND) NULL; // None
mop.usDeviceID = (USHORT) NULL; // Will be returned.
mop.pszDeviceType = (PSZ) SDL_cdlist[drive]; // CDAudio Device
if (LOUSHORT(mciSendCommand(0, MCI_OPEN, MCI_WAIT, &mop, 0)) !=
MCIERR_SUCCESS)
return (CD_ERROR);
Nov 23, 2005
Nov 23, 2005
136
/* Set time format */
Jul 10, 2006
Jul 10, 2006
137
138
139
140
141
142
143
144
145
146
147
148
149
msp.hwndCallback = (HWND) NULL; // None
msp.ulTimeFormat = MCI_FORMAT_MSF; // Minute : Second : Frame structure
msp.ulSpeedFormat = (ULONG) NULL; // No change
msp.ulAudio = (ULONG) NULL; // No Channel
msp.ulLevel = (ULONG) NULL; // No Volume
msp.ulOver = (ULONG) NULL; // No Delay
msp.ulItem = (ULONG) NULL; // No item
msp.ulValue = (ULONG) NULL; // No value for item flag
if (LOUSHORT
(mciSendCommand
(mop.usDeviceID, MCI_SET, MCI_WAIT | MCI_SET_TIME_FORMAT, &msp,
0)) == MCIERR_SUCCESS)
return (mop.usDeviceID);
Nov 23, 2005
Nov 23, 2005
150
/* Error setting time format? - Close opened device */
Jul 10, 2006
Jul 10, 2006
151
152
153
mgp.hwndCallback = (HWND) NULL; // None
mciSendCommand(mop.usDeviceID, MCI_CLOSE, MCI_WAIT, &mgp, 0);
return (CD_ERROR);
Nov 23, 2005
Nov 23, 2005
154
155
156
}
/* Get CD Table Of Contents - Ready for MCI */
Jul 10, 2006
Jul 10, 2006
157
158
static int
SDL_SYS_CDGetTOC(SDL_CD * cdrom)
Nov 23, 2005
Nov 23, 2005
159
{
Jul 10, 2006
Jul 10, 2006
160
161
162
163
MCI_TOC_PARMS mtp;
MCI_STATUS_PARMS msp;
MCI_TOC_REC *mtr;
INT i;
Nov 23, 2005
Nov 23, 2005
164
165
/* Correction because MCI cannot read TOC while CD is playing (it'll stop!) */
Jul 10, 2006
Jul 10, 2006
166
167
if (cdrom->status == CD_PLAYING || cdrom->status == CD_PAUSED)
return 0;
Nov 23, 2005
Nov 23, 2005
168
169
/* Get Number of Tracks */
Jul 10, 2006
Jul 10, 2006
170
171
172
173
174
175
176
177
178
179
180
181
182
msp.hwndCallback = (HWND) NULL; /* None */
msp.ulReturn = (ULONG) NULL; /* We want this information */
msp.ulItem = MCI_STATUS_NUMBER_OF_TRACKS;
msp.ulValue = (ULONG) NULL; /* No additional information */
if (LOUSHORT
(mciSendCommand
(cdrom->id, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, &msp,
0)) != MCIERR_SUCCESS)
return (CD_ERROR);
cdrom->numtracks = msp.ulReturn;
if (cdrom->numtracks > SDL_MAX_TRACKS) {
cdrom->numtracks = SDL_MAX_TRACKS;
}
Nov 23, 2005
Nov 23, 2005
183
/* Alocate space for TOC data */
Jul 10, 2006
Jul 10, 2006
184
185
186
187
188
mtr = (MCI_TOC_REC *) SDL_malloc(cdrom->numtracks * sizeof(MCI_TOC_REC));
if (mtr == NULL) {
SDL_OutOfMemory();
return (-1);
}
Nov 23, 2005
Nov 23, 2005
189
/* Get TOC from CD */
Jul 10, 2006
Jul 10, 2006
190
191
192
193
194
195
196
197
mtp.pBuf = mtr;
mtp.ulBufSize = cdrom->numtracks * sizeof(MCI_TOC_REC);
if (LOUSHORT(mciSendCommand(cdrom->id, MCI_GETTOC, MCI_WAIT, &mtp, 0))
!= MCIERR_SUCCESS) {
SDL_OutOfMemory();
SDL_free(mtr);
return (CD_ERROR);
}
Nov 23, 2005
Nov 23, 2005
198
/* Fill SDL Tracks Structure */
Jul 10, 2006
Jul 10, 2006
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
for (i = 0; i < cdrom->numtracks; i++) {
/* Set Track ID */
cdrom->track[i].id = (mtr + i)->TrackNum;
/* Set Track Type */
msp.hwndCallback = (HWND) NULL; /* None */
msp.ulReturn = (ULONG) NULL; /* We want this information */
msp.ulItem = MCI_CD_STATUS_TRACK_TYPE;
msp.ulValue = (ULONG) ((mtr + i)->TrackNum); /* Track Number? */
if (LOUSHORT
(mciSendCommand
(cdrom->id, MCI_STATUS, MCI_WAIT | MCI_TRACK | MCI_STATUS_ITEM,
&msp, 0)) != MCIERR_SUCCESS) {
SDL_free(mtr);
return (CD_ERROR);
}
if (msp.ulReturn == MCI_CD_TRACK_AUDIO)
cdrom->track[i].type = SDL_AUDIO_TRACK;
else
cdrom->track[i].type = SDL_DATA_TRACK;
/* Set Track Length - values from MCI are in MMTIMEs - 3000 MMTIME = 1 second */
cdrom->track[i].length =
FRAMESFROMMM((mtr + i)->ulEndAddr - (mtr + i)->ulStartAddr);
/* Set Track Offset */
cdrom->track[i].offset = FRAMESFROMMM((mtr + i)->ulStartAddr);
}
SDL_free(mtr);
return (0);
Nov 23, 2005
Nov 23, 2005
226
227
228
229
}
/* Get CD-ROM status - Ready for MCI */
Jul 10, 2006
Jul 10, 2006
230
231
static CDstatus
SDL_SYS_CDStatus(SDL_CD * cdrom, int *position)
Nov 23, 2005
Nov 23, 2005
232
{
Jul 10, 2006
Jul 10, 2006
233
234
CDstatus status;
MCI_STATUS_PARMS msp;
Nov 23, 2005
Nov 23, 2005
235
236
/* Get Status from MCI */
Jul 10, 2006
Jul 10, 2006
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
msp.hwndCallback = (HWND) NULL; /* None */
msp.ulReturn = (ULONG) NULL; /* We want this information */
msp.ulItem = MCI_STATUS_MODE;
msp.ulValue = (ULONG) NULL; /* No additional information */
if (LOUSHORT
(mciSendCommand
(cdrom->id, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, &msp,
0)) != MCIERR_SUCCESS)
status = CD_ERROR;
else {
switch (msp.ulReturn) {
case MCI_MODE_NOT_READY:
status = CD_TRAYEMPTY;
break;
case MCI_MODE_PAUSE:
status = CD_PAUSED;
break;
case MCI_MODE_PLAY:
status = CD_PLAYING;
break;
case MCI_MODE_STOP:
status = CD_STOPPED;
break;
/* These cases should not occour */
case MCI_MODE_RECORD:
case MCI_MODE_SEEK:
default:
status = CD_ERROR;
break;
}
}
Nov 23, 2005
Nov 23, 2005
268
269
/* Determine position */
Jul 10, 2006
Jul 10, 2006
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
if (position != NULL) { /* The SDL $&$&%# CDROM call sends NULL pointer here! */
if ((status == CD_PLAYING) || (status == CD_PAUSED)) {
/* Get Position */
msp.hwndCallback = (HWND) NULL; /* None */
msp.ulReturn = (ULONG) NULL; /* We want this information */
msp.ulItem = MCI_STATUS_POSITION;
msp.ulValue = (ULONG) NULL; /* No additiona info */
if (LOUSHORT
(mciSendCommand
(cdrom->id, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, &msp,
0)) != MCIERR_SUCCESS)
return (CD_ERROR);
/* Convert from MSF (format selected in the Open process) to Frames (format that will be returned) */
*position =
MSF_TO_FRAMES(MSF_MINUTE(msp.ulReturn),
MSF_SECOND(msp.ulReturn),
MSF_FRAME(msp.ulReturn));
} else
*position = 0;
}
return (status);
Nov 23, 2005
Nov 23, 2005
291
292
293
}
/* Start play - Ready for MCI */
Jul 10, 2006
Jul 10, 2006
294
295
static int
SDL_SYS_CDPlay(SDL_CD * cdrom, int start, int length)
Nov 23, 2005
Nov 23, 2005
296
{
Jul 10, 2006
Jul 10, 2006
297
298
299
300
MCI_GENERIC_PARMS mgp;
MCI_STATUS_PARMS msp;
MCI_PLAY_PARMS mpp;
ULONG min, sec, frm;
Nov 23, 2005
Nov 23, 2005
301
302
/* Start MSF */
Jul 10, 2006
Jul 10, 2006
303
304
305
306
FRAMES_TO_MSF(start, &min, &sec, &frm);
MSF_MINUTE(mpp.ulFrom) = min;
MSF_SECOND(mpp.ulFrom) = sec;
MSF_FRAME(mpp.ulFrom) = frm;
Nov 23, 2005
Nov 23, 2005
307
/* End MSF */
Jul 10, 2006
Jul 10, 2006
308
309
310
311
FRAMES_TO_MSF(start + length, &min, &sec, &frm);
MSF_MINUTE(mpp.ulTo) = min;
MSF_SECOND(mpp.ulTo) = sec;
MSF_FRAME(mpp.ulTo) = frm;
Nov 23, 2005
Nov 23, 2005
312
#ifdef DEBUG_CDROM
Jul 10, 2006
Jul 10, 2006
313
314
315
fprintf(stderr, "Trying to play from %d:%d:%d to %d:%d:%d\n",
playtime.cdmsf_min0, playtime.cdmsf_sec0, playtime.cdmsf_frame0,
playtime.cdmsf_min1, playtime.cdmsf_sec1, playtime.cdmsf_frame1);
Nov 23, 2005
Nov 23, 2005
316
317
#endif
/* Verifies if it is paused first... and if it is, unpause before stopping it. */
Jul 10, 2006
Jul 10, 2006
318
319
320
321
322
323
324
325
326
327
328
329
330
msp.hwndCallback = (HWND) NULL; /* None */
msp.ulReturn = (ULONG) NULL; /* We want this information */
msp.ulItem = MCI_STATUS_MODE;
msp.ulValue = (ULONG) NULL; /* No additional information */
if (LOUSHORT
(mciSendCommand
(cdrom->id, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, &msp,
0)) == MCIERR_SUCCESS) {
if (msp.ulReturn == MCI_MODE_PAUSE) {
mgp.hwndCallback = (HWND) NULL; // None
mciSendCommand(cdrom->id, MCI_RESUME, 0, &mgp, 0);
}
}
Nov 23, 2005
Nov 23, 2005
331
/* Now play it. */
Jul 10, 2006
Jul 10, 2006
332
333
334
335
336
337
mpp.hwndCallback = (HWND) NULL; // We do not want the info. temp
if (LOUSHORT
(mciSendCommand(cdrom->id, MCI_PLAY, MCI_FROM | MCI_TO, &mpp, 0)) ==
MCIERR_SUCCESS)
return 0;
return (CD_ERROR);
Nov 23, 2005
Nov 23, 2005
338
339
340
}
/* Pause play - Ready for MCI */
Jul 10, 2006
Jul 10, 2006
341
342
static int
SDL_SYS_CDPause(SDL_CD * cdrom)
Nov 23, 2005
Nov 23, 2005
343
{
Jul 10, 2006
Jul 10, 2006
344
MCI_GENERIC_PARMS mgp;
Nov 23, 2005
Nov 23, 2005
345
Jul 10, 2006
Jul 10, 2006
346
347
348
349
350
mgp.hwndCallback = (HWND) NULL; // None
if (LOUSHORT(mciSendCommand(cdrom->id, MCI_PAUSE, MCI_WAIT, &mgp, 0)) ==
MCIERR_SUCCESS)
return 0;
return (CD_ERROR);
Nov 23, 2005
Nov 23, 2005
351
352
353
}
/* Resume play - Ready for MCI */
Jul 10, 2006
Jul 10, 2006
354
355
static int
SDL_SYS_CDResume(SDL_CD * cdrom)
Nov 23, 2005
Nov 23, 2005
356
{
Jul 10, 2006
Jul 10, 2006
357
MCI_GENERIC_PARMS mgp;
Nov 23, 2005
Nov 23, 2005
358
Jul 10, 2006
Jul 10, 2006
359
360
361
362
363
mgp.hwndCallback = (HWND) NULL; // None
if (LOUSHORT(mciSendCommand(cdrom->id, MCI_RESUME, MCI_WAIT, &mgp, 0))
== MCIERR_SUCCESS)
return 0;
return (CD_ERROR);
Nov 23, 2005
Nov 23, 2005
364
365
366
}
/* Stop play - Ready for MCI */
Jul 10, 2006
Jul 10, 2006
367
368
static int
SDL_SYS_CDStop(SDL_CD * cdrom)
Nov 23, 2005
Nov 23, 2005
369
{
Jul 10, 2006
Jul 10, 2006
370
371
MCI_GENERIC_PARMS mgp;
MCI_STATUS_PARMS msp;
Nov 23, 2005
Nov 23, 2005
372
373
/* Verifies if it is paused first... and if it is, unpause before stopping it. */
Jul 10, 2006
Jul 10, 2006
374
375
376
377
378
379
380
381
382
383
384
385
386
msp.hwndCallback = (HWND) NULL; /* None */
msp.ulReturn = (ULONG) NULL; /* We want this information */
msp.ulItem = MCI_STATUS_MODE;
msp.ulValue = (ULONG) NULL; /* No additional information */
if (LOUSHORT
(mciSendCommand
(cdrom->id, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, &msp,
0)) == MCIERR_SUCCESS) {
if (msp.ulReturn == MCI_MODE_PAUSE) {
mgp.hwndCallback = (HWND) NULL; // None
mciSendCommand(cdrom->id, MCI_RESUME, 0, &mgp, 0);
}
}
Nov 23, 2005
Nov 23, 2005
387
/* Now stops the media */
Jul 10, 2006
Jul 10, 2006
388
389
390
391
392
mgp.hwndCallback = (HWND) NULL; // None
if (LOUSHORT(mciSendCommand(cdrom->id, MCI_STOP, MCI_WAIT, &mgp, 0)) ==
MCIERR_SUCCESS)
return 0;
return (CD_ERROR);
Nov 23, 2005
Nov 23, 2005
393
394
395
}
/* Eject the CD-ROM - Ready for MCI */
Jul 10, 2006
Jul 10, 2006
396
397
static int
SDL_SYS_CDEject(SDL_CD * cdrom)
Nov 23, 2005
Nov 23, 2005
398
{
Jul 10, 2006
Jul 10, 2006
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
MCI_SET_PARMS msp;
msp.hwndCallback = (HWND) NULL; // None
msp.ulTimeFormat = (ULONG) NULL; // No change
msp.ulSpeedFormat = (ULONG) NULL; // No change
msp.ulAudio = (ULONG) NULL; // No Channel
msp.ulLevel = (ULONG) NULL; // No Volume
msp.ulOver = (ULONG) NULL; // No Delay
msp.ulItem = (ULONG) NULL; // No item
msp.ulValue = (ULONG) NULL; // No value for item flag
if (LOUSHORT
(mciSendCommand
(cdrom->id, MCI_SET, MCI_WAIT | MCI_SET_DOOR_OPEN, &msp,
0)) == MCIERR_SUCCESS)
return 0;
return (CD_ERROR);
Nov 23, 2005
Nov 23, 2005
415
416
417
}
/* Close the CD-ROM handle - Ready for MCI */
Jul 10, 2006
Jul 10, 2006
418
419
static void
SDL_SYS_CDClose(SDL_CD * cdrom)
Nov 23, 2005
Nov 23, 2005
420
{
Jul 10, 2006
Jul 10, 2006
421
MCI_GENERIC_PARMS mgp;
Nov 23, 2005
Nov 23, 2005
422
Jul 10, 2006
Jul 10, 2006
423
424
mgp.hwndCallback = (HWND) NULL; // None
mciSendCommand(cdrom->id, MCI_CLOSE, MCI_WAIT, &mgp, 0);
Nov 23, 2005
Nov 23, 2005
425
426
427
}
/* Finalize CDROM Subsystem - Ready for MCI */
Jul 10, 2006
Jul 10, 2006
428
429
void
SDL_SYS_CDQuit(void)
Nov 23, 2005
Nov 23, 2005
430
{
Jul 10, 2006
Jul 10, 2006
431
432
433
434
435
436
437
438
int i;
if (SDL_numcds > 0) {
for (i = 0; i < SDL_numcds; ++i) {
SDL_free(SDL_cdlist[i]);
}
SDL_numcds = 0;
}
Nov 23, 2005
Nov 23, 2005
439
440
}
Apr 14, 2006
Apr 14, 2006
441
#endif /* SDL_CDROM_OS2 */
Jul 10, 2006
Jul 10, 2006
442
/* vi: set ts=4 sw=4 expandtab: */