.TH "SDL_CDOpen" "3" "Tue 11 Sep 2001, 22:58" "SDL" "SDL API Reference" 
.SH "NAME"
SDL_CDOpen \- Opens a CD-ROM drive for access\&.
.SH "SYNOPSIS"
.PP
\fB#include "SDL\&.h"
.sp
\fBSDL_CD *\fBSDL_CDOpen\fP\fR(\fBint drive\fR);
.SH "DESCRIPTION"
.PP
Opens a CD-ROM drive for access\&. It returns a \fI\fBSDL_CD\fR\fR structure on success, or \fBNULL\fP if the drive was invalid or busy\&. This newly opened CD-ROM becomes the default CD used when other CD functions are passed a \fBNULL\fP CD-ROM handle\&. 
.PP
Drives are numbered starting with 0\&. Drive 0 is the system default CD-ROM\&.
.SH "EXAMPLES"
.PP
.nf
\f(CWSDL_CD *cdrom;
int cur_track;
int min, sec, frame;
SDL_Init(SDL_INIT_CDROM);
atexit(SDL_Quit);

/* Check for CD drives */
if(!SDL_CDNumDrives()){
  /* None found */
  fprintf(stderr, "No CDROM devices available
");
  exit(-1);
}

/* Open the default drive */
cdrom=SDL_CDOpen(0);

/* Did if open? Check if cdrom is NULL */
if(!cdrom){
  fprintf(stderr, "Couldn\&'t open drive: %s
", SDL_GetError());
  exit(-1);
}

/* Print Volume info */
printf("Name: %s
", SDL_CDName(0));
printf("Tracks: %d
", cdrom->numtracks);
for(cur_track=0;cur_track < cdrom->numtracks; cur_track++){
  FRAMES_TO_MSF(cdrom->track[cur_track]\&.length, &min, &sec, &frame);
  printf("	Track %d: Length %d:%d
", cur_track, min, sec);
}

SDL_CDClose(cdrom);\fR
.fi
.PP
.SH "SEE ALSO"
.PP
\fI\fBSDL_CD\fR\fR, \fI\fBSDL_CDtrack\fR\fR, \fI\fBSDL_CDClose\fP\fR
.\" created by instant / docbook-to-man, Tue 11 Sep 2001, 22:58
