comparison src/cdrom/macosx/SDL_syscdrom.c @ 1895:c121d94672cb

SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
author Sam Lantinga <slouken@libsdl.org>
date Mon, 10 Jul 2006 21:04:37 +0000
parents 4d66375c2012
children 99210400e8b9
comparison
equal deleted inserted replaced
1894:c69cee13dd76 1895:c121d94672cb
25 25
26 #include "SDL_syscdrom_c.h" 26 #include "SDL_syscdrom_c.h"
27 27
28 #pragma mark -- Globals -- 28 #pragma mark -- Globals --
29 29
30 static FSRef** tracks; 30 static FSRef **tracks;
31 static FSVolumeRefNum* volumes; 31 static FSVolumeRefNum *volumes;
32 static CDstatus status; 32 static CDstatus status;
33 static int nextTrackFrame; 33 static int nextTrackFrame;
34 static int nextTrackFramesRemaining; 34 static int nextTrackFramesRemaining;
35 static int fakeCD; 35 static int fakeCD;
36 static int currentTrack; 36 static int currentTrack;
37 static int didReadTOC; 37 static int didReadTOC;
38 static int cacheTOCNumTracks; 38 static int cacheTOCNumTracks;
39 static int currentDrive; /* Only allow 1 drive in use at a time */ 39 static int currentDrive; /* Only allow 1 drive in use at a time */
40 40
41 #pragma mark -- Prototypes -- 41 #pragma mark -- Prototypes --
42 42
43 static const char *SDL_SYS_CDName (int drive); 43 static const char *SDL_SYS_CDName(int drive);
44 static int SDL_SYS_CDOpen (int drive); 44 static int SDL_SYS_CDOpen(int drive);
45 static int SDL_SYS_CDGetTOC (SDL_CD *cdrom); 45 static int SDL_SYS_CDGetTOC(SDL_CD * cdrom);
46 static CDstatus SDL_SYS_CDStatus (SDL_CD *cdrom, int *position); 46 static CDstatus SDL_SYS_CDStatus(SDL_CD * cdrom, int *position);
47 static int SDL_SYS_CDPlay (SDL_CD *cdrom, int start, int length); 47 static int SDL_SYS_CDPlay(SDL_CD * cdrom, int start, int length);
48 static int SDL_SYS_CDPause (SDL_CD *cdrom); 48 static int SDL_SYS_CDPause(SDL_CD * cdrom);
49 static int SDL_SYS_CDResume (SDL_CD *cdrom); 49 static int SDL_SYS_CDResume(SDL_CD * cdrom);
50 static int SDL_SYS_CDStop (SDL_CD *cdrom); 50 static int SDL_SYS_CDStop(SDL_CD * cdrom);
51 static int SDL_SYS_CDEject (SDL_CD *cdrom); 51 static int SDL_SYS_CDEject(SDL_CD * cdrom);
52 static void SDL_SYS_CDClose (SDL_CD *cdrom); 52 static void SDL_SYS_CDClose(SDL_CD * cdrom);
53 53
54 #pragma mark -- Helper Functions -- 54 #pragma mark -- Helper Functions --
55 55
56 /* Read a list of tracks from the volume */ 56 /* Read a list of tracks from the volume */
57 static int LoadTracks (SDL_CD *cdrom) 57 static int
58 LoadTracks(SDL_CD * cdrom)
58 { 59 {
59 /* Check if tracks are already loaded */ 60 /* Check if tracks are already loaded */
60 if ( tracks[cdrom->id] != NULL ) 61 if (tracks[cdrom->id] != NULL)
61 return 0; 62 return 0;
62 63
63 /* Allocate memory for tracks */ 64 /* Allocate memory for tracks */
64 tracks[cdrom->id] = (FSRef*) SDL_calloc (1, sizeof(**tracks) * cdrom->numtracks); 65 tracks[cdrom->id] =
66 (FSRef *) SDL_calloc(1, sizeof(**tracks) * cdrom->numtracks);
65 if (tracks[cdrom->id] == NULL) { 67 if (tracks[cdrom->id] == NULL) {
66 SDL_OutOfMemory (); 68 SDL_OutOfMemory();
67 return -1; 69 return -1;
68 } 70 }
69 71
70 /* Load tracks */ 72 /* Load tracks */
71 if (ListTrackFiles (volumes[cdrom->id], tracks[cdrom->id], cdrom->numtracks) < 0) 73 if (ListTrackFiles
74 (volumes[cdrom->id], tracks[cdrom->id], cdrom->numtracks) < 0)
72 return -1; 75 return -1;
73 76
74 return 0; 77 return 0;
75 } 78 }
76 79
77 /* Find a file for a given start frame and length */ 80 /* Find a file for a given start frame and length */
78 static FSRef* GetFileForOffset (SDL_CD *cdrom, int start, int length, int *outStartFrame, int *outStopFrame) 81 static FSRef *
82 GetFileForOffset(SDL_CD * cdrom, int start, int length, int *outStartFrame,
83 int *outStopFrame)
79 { 84 {
80 int i; 85 int i;
81 86
82 for (i = 0; i < cdrom->numtracks; i++) { 87 for (i = 0; i < cdrom->numtracks; i++) {
83 88
84 if (cdrom->track[i].offset <= start && 89 if (cdrom->track[i].offset <= start &&
85 start < (cdrom->track[i].offset + cdrom->track[i].length)) 90 start < (cdrom->track[i].offset + cdrom->track[i].length))
86 break; 91 break;
87 } 92 }
88 93
89 if (i == cdrom->numtracks) 94 if (i == cdrom->numtracks)
90 return NULL; 95 return NULL;
91 96
92 currentTrack = i; 97 currentTrack = i;
93 98
94 *outStartFrame = start - cdrom->track[i].offset; 99 *outStartFrame = start - cdrom->track[i].offset;
95 100
96 if ((*outStartFrame + length) < cdrom->track[i].length) { 101 if ((*outStartFrame + length) < cdrom->track[i].length) {
97 *outStopFrame = *outStartFrame + length; 102 *outStopFrame = *outStartFrame + length;
98 length = 0; 103 length = 0;
99 nextTrackFrame = -1; 104 nextTrackFrame = -1;
100 nextTrackFramesRemaining = -1; 105 nextTrackFramesRemaining = -1;
101 } 106 } else {
102 else {
103 *outStopFrame = -1; 107 *outStopFrame = -1;
104 length -= cdrom->track[i].length - *outStartFrame; 108 length -= cdrom->track[i].length - *outStartFrame;
105 nextTrackFrame = cdrom->track[i+1].offset; 109 nextTrackFrame = cdrom->track[i + 1].offset;
106 nextTrackFramesRemaining = length; 110 nextTrackFramesRemaining = length;
107 } 111 }
108 112
109 return &tracks[cdrom->id][i]; 113 return &tracks[cdrom->id][i];
110 } 114 }
111 115
112 /* Setup another file for playback, or stop playback (called from another thread) */ 116 /* Setup another file for playback, or stop playback (called from another thread) */
113 static void CompletionProc (SDL_CD *cdrom) 117 static void
114 { 118 CompletionProc(SDL_CD * cdrom)
115 119 {
116 Lock (); 120
117 121 Lock();
122
118 if (nextTrackFrame > 0 && nextTrackFramesRemaining > 0) { 123 if (nextTrackFrame > 0 && nextTrackFramesRemaining > 0) {
119 124
120 /* Load the next file to play */ 125 /* Load the next file to play */
121 int startFrame, stopFrame; 126 int startFrame, stopFrame;
122 FSRef *file; 127 FSRef *file;
123 128
124 PauseFile (); 129 PauseFile();
125 ReleaseFile (); 130 ReleaseFile();
126 131
127 file = GetFileForOffset (cdrom, nextTrackFrame, 132 file = GetFileForOffset(cdrom, nextTrackFrame,
128 nextTrackFramesRemaining, &startFrame, &stopFrame); 133 nextTrackFramesRemaining, &startFrame,
129 134 &stopFrame);
135
130 if (file == NULL) { 136 if (file == NULL) {
131 status = CD_STOPPED; 137 status = CD_STOPPED;
132 Unlock (); 138 Unlock();
133 return; 139 return;
134 } 140 }
135 141
136 LoadFile (file, startFrame, stopFrame); 142 LoadFile(file, startFrame, stopFrame);
137 143
138 SetCompletionProc (CompletionProc, cdrom); 144 SetCompletionProc(CompletionProc, cdrom);
139 145
140 PlayFile (); 146 PlayFile();
141 } 147 } else {
142 else { 148
143
144 /* Release the current file */ 149 /* Release the current file */
145 PauseFile (); 150 PauseFile();
146 ReleaseFile (); 151 ReleaseFile();
147 status = CD_STOPPED; 152 status = CD_STOPPED;
148 } 153 }
149 154
150 Unlock (); 155 Unlock();
151 } 156 }
152 157
153 158
154 #pragma mark -- Driver Functions -- 159 #pragma mark -- Driver Functions --
155 160
156 /* Initialize */ 161 /* Initialize */
157 int SDL_SYS_CDInit (void) 162 int
163 SDL_SYS_CDInit(void)
158 { 164 {
159 /* Initialize globals */ 165 /* Initialize globals */
160 volumes = NULL; 166 volumes = NULL;
161 tracks = NULL; 167 tracks = NULL;
162 status = CD_STOPPED; 168 status = CD_STOPPED;
163 nextTrackFrame = -1; 169 nextTrackFrame = -1;
164 nextTrackFramesRemaining = -1; 170 nextTrackFramesRemaining = -1;
165 fakeCD = SDL_FALSE; 171 fakeCD = SDL_FALSE;
166 currentTrack = -1; 172 currentTrack = -1;
167 didReadTOC = SDL_FALSE; 173 didReadTOC = SDL_FALSE;
168 cacheTOCNumTracks = -1; 174 cacheTOCNumTracks = -1;
169 currentDrive = -1; 175 currentDrive = -1;
170 176
171 /* Fill in function pointers */ 177 /* Fill in function pointers */
172 SDL_CDcaps.Name = SDL_SYS_CDName; 178 SDL_CDcaps.Name = SDL_SYS_CDName;
173 SDL_CDcaps.Open = SDL_SYS_CDOpen; 179 SDL_CDcaps.Open = SDL_SYS_CDOpen;
174 SDL_CDcaps.GetTOC = SDL_SYS_CDGetTOC; 180 SDL_CDcaps.GetTOC = SDL_SYS_CDGetTOC;
175 SDL_CDcaps.Status = SDL_SYS_CDStatus; 181 SDL_CDcaps.Status = SDL_SYS_CDStatus;
176 SDL_CDcaps.Play = SDL_SYS_CDPlay; 182 SDL_CDcaps.Play = SDL_SYS_CDPlay;
177 SDL_CDcaps.Pause = SDL_SYS_CDPause; 183 SDL_CDcaps.Pause = SDL_SYS_CDPause;
178 SDL_CDcaps.Resume = SDL_SYS_CDResume; 184 SDL_CDcaps.Resume = SDL_SYS_CDResume;
179 SDL_CDcaps.Stop = SDL_SYS_CDStop; 185 SDL_CDcaps.Stop = SDL_SYS_CDStop;
180 SDL_CDcaps.Eject = SDL_SYS_CDEject; 186 SDL_CDcaps.Eject = SDL_SYS_CDEject;
181 SDL_CDcaps.Close = SDL_SYS_CDClose; 187 SDL_CDcaps.Close = SDL_SYS_CDClose;
182 188
183 /* 189 /*
184 Read the list of "drives" 190 Read the list of "drives"
185 191
186 This is currently a hack that infers drives from 192 This is currently a hack that infers drives from
187 mounted audio CD volumes, rather than 193 mounted audio CD volumes, rather than
188 actual CD-ROM devices - which means it may not 194 actual CD-ROM devices - which means it may not
189 act as expected sometimes. 195 act as expected sometimes.
190 */ 196 */
191 197
192 /* Find out how many cd volumes are mounted */ 198 /* Find out how many cd volumes are mounted */
193 SDL_numcds = DetectAudioCDVolumes (NULL, 0); 199 SDL_numcds = DetectAudioCDVolumes(NULL, 0);
194 200
195 /* 201 /*
196 If there are no volumes, fake a cd device 202 If there are no volumes, fake a cd device
197 so tray empty can be reported. 203 so tray empty can be reported.
198 */ 204 */
199 if (SDL_numcds == 0) { 205 if (SDL_numcds == 0) {
200 206
201 fakeCD = SDL_TRUE; 207 fakeCD = SDL_TRUE;
202 SDL_numcds = 1; 208 SDL_numcds = 1;
203 status = CD_TRAYEMPTY; 209 status = CD_TRAYEMPTY;
204 210
205 return 0; 211 return 0;
206 } 212 }
207 213
208 /* Allocate space for volumes */ 214 /* Allocate space for volumes */
209 volumes = (FSVolumeRefNum*) SDL_calloc (1, sizeof(*volumes) * SDL_numcds); 215 volumes = (FSVolumeRefNum *) SDL_calloc(1, sizeof(*volumes) * SDL_numcds);
210 if (volumes == NULL) { 216 if (volumes == NULL) {
211 SDL_OutOfMemory (); 217 SDL_OutOfMemory();
212 return -1; 218 return -1;
213 } 219 }
214 220
215 /* Allocate space for tracks */ 221 /* Allocate space for tracks */
216 tracks = (FSRef**) SDL_calloc (1, sizeof(*tracks) * (SDL_numcds + 1)); 222 tracks = (FSRef **) SDL_calloc(1, sizeof(*tracks) * (SDL_numcds + 1));
217 if (tracks == NULL) { 223 if (tracks == NULL) {
218 SDL_OutOfMemory (); 224 SDL_OutOfMemory();
219 return -1; 225 return -1;
220 } 226 }
221 227
222 /* Mark the end of the tracks array */ 228 /* Mark the end of the tracks array */
223 tracks[ SDL_numcds ] = (FSRef*)-1; 229 tracks[SDL_numcds] = (FSRef *) - 1;
224 230
225 /* 231 /*
226 Redetect, now save all volumes for later 232 Redetect, now save all volumes for later
227 Update SDL_numcds just in case it changed 233 Update SDL_numcds just in case it changed
228 */ 234 */
229 { 235 {
230 int numVolumes = SDL_numcds; 236 int numVolumes = SDL_numcds;
231 237
232 SDL_numcds = DetectAudioCDVolumes (volumes, numVolumes); 238 SDL_numcds = DetectAudioCDVolumes(volumes, numVolumes);
233 239
234 /* If more cds suddenly show up, ignore them */ 240 /* If more cds suddenly show up, ignore them */
235 if (SDL_numcds > numVolumes) { 241 if (SDL_numcds > numVolumes) {
236 SDL_SetError ("Some CD's were added but they will be ignored"); 242 SDL_SetError("Some CD's were added but they will be ignored");
237 SDL_numcds = numVolumes; 243 SDL_numcds = numVolumes;
238 } 244 }
239 } 245 }
240 246
241 return 0; 247 return 0;
242 } 248 }
243 249
244 /* Shutdown and cleanup */ 250 /* Shutdown and cleanup */
245 void SDL_SYS_CDQuit(void) 251 void
252 SDL_SYS_CDQuit(void)
246 { 253 {
247 ReleaseFile(); 254 ReleaseFile();
248 255
249 if (volumes != NULL) 256 if (volumes != NULL)
250 free (volumes); 257 free(volumes);
251 258
252 if (tracks != NULL) { 259 if (tracks != NULL) {
253 260
254 FSRef **ptr; 261 FSRef **ptr;
255 for (ptr = tracks; *ptr != (FSRef*)-1; ptr++) 262 for (ptr = tracks; *ptr != (FSRef *) - 1; ptr++)
256 if (*ptr != NULL) 263 if (*ptr != NULL)
257 free (*ptr); 264 free(*ptr);
258 265
259 free (tracks); 266 free(tracks);
260 } 267 }
261 } 268 }
262 269
263 /* Get the Unix disk name of the volume */ 270 /* Get the Unix disk name of the volume */
264 static const char *SDL_SYS_CDName (int drive) 271 static const char *
265 { 272 SDL_SYS_CDName(int drive)
266 OSStatus err = noErr; 273 {
267 HParamBlockRec pb; 274 OSStatus err = noErr;
268 GetVolParmsInfoBuffer volParmsInfo; 275 HParamBlockRec pb;
269 276 GetVolParmsInfoBuffer volParmsInfo;
277
270 if (fakeCD) 278 if (fakeCD)
271 return "Fake CD-ROM Device"; 279 return "Fake CD-ROM Device";
272 280
273 pb.ioParam.ioNamePtr = NULL; 281 pb.ioParam.ioNamePtr = NULL;
274 pb.ioParam.ioVRefNum = volumes[drive]; 282 pb.ioParam.ioVRefNum = volumes[drive];
275 pb.ioParam.ioBuffer = (Ptr)&volParmsInfo; 283 pb.ioParam.ioBuffer = (Ptr) & volParmsInfo;
276 pb.ioParam.ioReqCount = (SInt32)sizeof(volParmsInfo); 284 pb.ioParam.ioReqCount = (SInt32) sizeof(volParmsInfo);
277 err = PBHGetVolParmsSync(&pb); 285 err = PBHGetVolParmsSync(&pb);
278 286
279 if (err != noErr) { 287 if (err != noErr) {
280 SDL_SetError ("PBHGetVolParmsSync returned %d", err); 288 SDL_SetError("PBHGetVolParmsSync returned %d", err);
281 return NULL; 289 return NULL;
282 } 290 }
283 291
284 return volParmsInfo.vMDeviceID; 292 return volParmsInfo.vMDeviceID;
285 } 293 }
286 294
287 /* Open the "device" */ 295 /* Open the "device" */
288 static int SDL_SYS_CDOpen (int drive) 296 static int
297 SDL_SYS_CDOpen(int drive)
289 { 298 {
290 /* Only allow 1 device to be open */ 299 /* Only allow 1 device to be open */
291 if (currentDrive >= 0) { 300 if (currentDrive >= 0) {
292 SDL_SetError ("Only one cdrom is supported"); 301 SDL_SetError("Only one cdrom is supported");
293 return -1; 302 return -1;
294 } 303 } else
295 else
296 currentDrive = drive; 304 currentDrive = drive;
297 305
298 return drive; 306 return drive;
299 } 307 }
300 308
301 /* Get the table of contents */ 309 /* Get the table of contents */
302 static int SDL_SYS_CDGetTOC (SDL_CD *cdrom) 310 static int
311 SDL_SYS_CDGetTOC(SDL_CD * cdrom)
303 { 312 {
304 if (fakeCD) { 313 if (fakeCD) {
305 SDL_SetError (kErrorFakeDevice); 314 SDL_SetError(kErrorFakeDevice);
306 return -1; 315 return -1;
307 } 316 }
308 317
309 if (didReadTOC) { 318 if (didReadTOC) {
310 cdrom->numtracks = cacheTOCNumTracks; 319 cdrom->numtracks = cacheTOCNumTracks;
311 return 0; 320 return 0;
312 } 321 }
313 322
314 323
315 ReadTOCData (volumes[cdrom->id], cdrom); 324 ReadTOCData(volumes[cdrom->id], cdrom);
316 didReadTOC = SDL_TRUE; 325 didReadTOC = SDL_TRUE;
317 cacheTOCNumTracks = cdrom->numtracks; 326 cacheTOCNumTracks = cdrom->numtracks;
318 327
319 return 0; 328 return 0;
320 } 329 }
321 330
322 /* Get CD-ROM status */ 331 /* Get CD-ROM status */
323 static CDstatus SDL_SYS_CDStatus (SDL_CD *cdrom, int *position) 332 static CDstatus
333 SDL_SYS_CDStatus(SDL_CD * cdrom, int *position)
324 { 334 {
325 if (position) { 335 if (position) {
326 int trackFrame; 336 int trackFrame;
327 337
328 Lock (); 338 Lock();
329 trackFrame = GetCurrentFrame (); 339 trackFrame = GetCurrentFrame();
330 Unlock (); 340 Unlock();
331 341
332 *position = cdrom->track[currentTrack].offset + trackFrame; 342 *position = cdrom->track[currentTrack].offset + trackFrame;
333 } 343 }
334 344
335 return status; 345 return status;
336 } 346 }
337 347
338 /* Start playback */ 348 /* Start playback */
339 static int SDL_SYS_CDPlay(SDL_CD *cdrom, int start, int length) 349 static int
350 SDL_SYS_CDPlay(SDL_CD * cdrom, int start, int length)
340 { 351 {
341 int startFrame, stopFrame; 352 int startFrame, stopFrame;
342 FSRef *ref; 353 FSRef *ref;
343 354
344 if (fakeCD) { 355 if (fakeCD) {
345 SDL_SetError (kErrorFakeDevice); 356 SDL_SetError(kErrorFakeDevice);
346 return -1; 357 return -1;
347 } 358 }
348 359
349 Lock(); 360 Lock();
350 361
351 if (LoadTracks (cdrom) < 0) 362 if (LoadTracks(cdrom) < 0)
352 return -2; 363 return -2;
353 364
354 if (PauseFile () < 0) 365 if (PauseFile() < 0)
355 return -3; 366 return -3;
356 367
357 if (ReleaseFile () < 0) 368 if (ReleaseFile() < 0)
358 return -4; 369 return -4;
359 370
360 ref = GetFileForOffset (cdrom, start, length, &startFrame, &stopFrame); 371 ref = GetFileForOffset(cdrom, start, length, &startFrame, &stopFrame);
361 if (ref == NULL) { 372 if (ref == NULL) {
362 SDL_SetError ("SDL_SYS_CDPlay: No file for start=%d, length=%d", start, length); 373 SDL_SetError("SDL_SYS_CDPlay: No file for start=%d, length=%d",
374 start, length);
363 return -5; 375 return -5;
364 } 376 }
365 377
366 if (LoadFile (ref, startFrame, stopFrame) < 0) 378 if (LoadFile(ref, startFrame, stopFrame) < 0)
367 return -6; 379 return -6;
368 380
369 SetCompletionProc (CompletionProc, cdrom); 381 SetCompletionProc(CompletionProc, cdrom);
370 382
371 if (PlayFile () < 0) 383 if (PlayFile() < 0)
372 return -7; 384 return -7;
373 385
374 status = CD_PLAYING; 386 status = CD_PLAYING;
375 387
376 Unlock(); 388 Unlock();
377 389
378 return 0; 390 return 0;
379 } 391 }
380 392
381 /* Pause playback */ 393 /* Pause playback */
382 static int SDL_SYS_CDPause(SDL_CD *cdrom) 394 static int
395 SDL_SYS_CDPause(SDL_CD * cdrom)
383 { 396 {
384 if (fakeCD) { 397 if (fakeCD) {
385 SDL_SetError (kErrorFakeDevice); 398 SDL_SetError(kErrorFakeDevice);
386 return -1; 399 return -1;
387 } 400 }
388 401
389 Lock (); 402 Lock();
390 403
391 if (PauseFile () < 0) { 404 if (PauseFile() < 0) {
392 Unlock (); 405 Unlock();
393 return -2; 406 return -2;
394 } 407 }
395 408
396 status = CD_PAUSED; 409 status = CD_PAUSED;
397 410
398 Unlock (); 411 Unlock();
399 412
400 return 0; 413 return 0;
401 } 414 }
402 415
403 /* Resume playback */ 416 /* Resume playback */
404 static int SDL_SYS_CDResume(SDL_CD *cdrom) 417 static int
418 SDL_SYS_CDResume(SDL_CD * cdrom)
405 { 419 {
406 if (fakeCD) { 420 if (fakeCD) {
407 SDL_SetError (kErrorFakeDevice); 421 SDL_SetError(kErrorFakeDevice);
408 return -1; 422 return -1;
409 } 423 }
410 424
411 Lock (); 425 Lock();
412 426
413 if (PlayFile () < 0) { 427 if (PlayFile() < 0) {
414 Unlock (); 428 Unlock();
415 return -2; 429 return -2;
416 } 430 }
417 431
418 status = CD_PLAYING; 432 status = CD_PLAYING;
419 433
420 Unlock (); 434 Unlock();
421 435
422 return 0; 436 return 0;
423 } 437 }
424 438
425 /* Stop playback */ 439 /* Stop playback */
426 static int SDL_SYS_CDStop(SDL_CD *cdrom) 440 static int
441 SDL_SYS_CDStop(SDL_CD * cdrom)
427 { 442 {
428 if (fakeCD) { 443 if (fakeCD) {
429 SDL_SetError (kErrorFakeDevice); 444 SDL_SetError(kErrorFakeDevice);
430 return -1; 445 return -1;
431 } 446 }
432 447
433 Lock (); 448 Lock();
434 449
435 if (PauseFile () < 0) { 450 if (PauseFile() < 0) {
436 Unlock (); 451 Unlock();
437 return -2; 452 return -2;
438 } 453 }
439 454
440 if (ReleaseFile () < 0) { 455 if (ReleaseFile() < 0) {
441 Unlock (); 456 Unlock();
442 return -3; 457 return -3;
443 } 458 }
444 459
445 status = CD_STOPPED; 460 status = CD_STOPPED;
446 461
447 Unlock (); 462 Unlock();
448 463
449 return 0; 464 return 0;
450 } 465 }
451 466
452 /* Eject the CD-ROM (Unmount the volume) */ 467 /* Eject the CD-ROM (Unmount the volume) */
453 static int SDL_SYS_CDEject(SDL_CD *cdrom) 468 static int
469 SDL_SYS_CDEject(SDL_CD * cdrom)
454 { 470 {
455 OSStatus err; 471 OSStatus err;
456 pid_t dissenter; 472 pid_t dissenter;
457 473
458 if (fakeCD) { 474 if (fakeCD) {
459 SDL_SetError (kErrorFakeDevice); 475 SDL_SetError(kErrorFakeDevice);
460 return -1; 476 return -1;
461 } 477 }
462 478
463 Lock (); 479 Lock();
464 480
465 if (PauseFile () < 0) { 481 if (PauseFile() < 0) {
466 Unlock (); 482 Unlock();
467 return -2; 483 return -2;
468 } 484 }
469 485
470 if (ReleaseFile () < 0) { 486 if (ReleaseFile() < 0) {
471 Unlock (); 487 Unlock();
472 return -3; 488 return -3;
473 } 489 }
474 490
475 status = CD_STOPPED; 491 status = CD_STOPPED;
476 492
477 /* Eject the volume */ 493 /* Eject the volume */
478 err = FSEjectVolumeSync(volumes[cdrom->id], kNilOptions, &dissenter); 494 err = FSEjectVolumeSync(volumes[cdrom->id], kNilOptions, &dissenter);
479 495
480 if (err != noErr) { 496 if (err != noErr) {
481 Unlock (); 497 Unlock();
482 SDL_SetError ("PBUnmountVol returned %d", err); 498 SDL_SetError("PBUnmountVol returned %d", err);
483 return -4; 499 return -4;
484 } 500 }
485 501
486 status = CD_TRAYEMPTY; 502 status = CD_TRAYEMPTY;
487 503
488 /* Invalidate volume and track info */ 504 /* Invalidate volume and track info */
489 volumes[cdrom->id] = 0; 505 volumes[cdrom->id] = 0;
490 free (tracks[cdrom->id]); 506 free(tracks[cdrom->id]);
491 tracks[cdrom->id] = NULL; 507 tracks[cdrom->id] = NULL;
492 508
493 Unlock (); 509 Unlock();
494 510
495 return 0; 511 return 0;
496 } 512 }
497 513
498 /* Close the CD-ROM */ 514 /* Close the CD-ROM */
499 static void SDL_SYS_CDClose(SDL_CD *cdrom) 515 static void
516 SDL_SYS_CDClose(SDL_CD * cdrom)
500 { 517 {
501 currentDrive = -1; 518 currentDrive = -1;
502 return; 519 return;
503 } 520 }
504 521
505 #endif /* SDL_CDROM_MACOSX */ 522 #endif /* SDL_CDROM_MACOSX */
523 /* vi: set ts=4 sw=4 expandtab: */