|
|
1.1 ! root 1: /* ! 2: SDL - Simple DirectMedia Layer ! 3: Copyright (C) 1997-2004 Sam Lantinga ! 4: ! 5: This library is free software; you can redistribute it and/or ! 6: modify it under the terms of the GNU Library General Public ! 7: License as published by the Free Software Foundation; either ! 8: version 2 of the License, or (at your option) any later version. ! 9: ! 10: This library is distributed in the hope that it will be useful, ! 11: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ! 13: Library General Public License for more details. ! 14: ! 15: You should have received a copy of the GNU Library General Public ! 16: License along with this library; if not, write to the Free ! 17: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ! 18: ! 19: Sam Lantinga ! 20: [email protected] ! 21: */ ! 22: ! 23: #ifdef SAVE_RCSID ! 24: static char rcsid = ! 25: "@(#) $Id: SDL_cdrom.h,v 1.1.1.1 2005/11/18 23:23:29 rswindell Exp $"; ! 26: #endif ! 27: ! 28: /* This is the CD-audio control API for Simple DirectMedia Layer */ ! 29: ! 30: #ifndef _SDL_cdrom_h ! 31: #define _SDL_cdrom_h ! 32: ! 33: #include "SDL_types.h" ! 34: ! 35: #include "begin_code.h" ! 36: /* Set up for C function definitions, even when using C++ */ ! 37: #ifdef __cplusplus ! 38: extern "C" { ! 39: #endif ! 40: ! 41: /* In order to use these functions, SDL_Init() must have been called ! 42: with the SDL_INIT_CDROM flag. This causes SDL to scan the system ! 43: for CD-ROM drives, and load appropriate drivers. ! 44: */ ! 45: ! 46: /* The maximum number of CD-ROM tracks on a disk */ ! 47: #define SDL_MAX_TRACKS 99 ! 48: ! 49: /* The types of CD-ROM track possible */ ! 50: #define SDL_AUDIO_TRACK 0x00 ! 51: #define SDL_DATA_TRACK 0x04 ! 52: ! 53: /* The possible states which a CD-ROM drive can be in. */ ! 54: typedef enum { ! 55: CD_TRAYEMPTY, ! 56: CD_STOPPED, ! 57: CD_PLAYING, ! 58: CD_PAUSED, ! 59: CD_ERROR = -1 ! 60: } CDstatus; ! 61: ! 62: /* Given a status, returns true if there's a disk in the drive */ ! 63: #define CD_INDRIVE(status) ((int)(status) > 0) ! 64: ! 65: typedef struct SDL_CDtrack { ! 66: Uint8 id; /* Track number */ ! 67: Uint8 type; /* Data or audio track */ ! 68: Uint16 unused; ! 69: Uint32 length; /* Length, in frames, of this track */ ! 70: Uint32 offset; /* Offset, in frames, from start of disk */ ! 71: } SDL_CDtrack; ! 72: ! 73: /* This structure is only current as of the last call to SDL_CDStatus() */ ! 74: typedef struct SDL_CD { ! 75: int id; /* Private drive identifier */ ! 76: CDstatus status; /* Current drive status */ ! 77: ! 78: /* The rest of this structure is only valid if there's a CD in drive */ ! 79: int numtracks; /* Number of tracks on disk */ ! 80: int cur_track; /* Current track position */ ! 81: int cur_frame; /* Current frame offset within current track */ ! 82: SDL_CDtrack track[SDL_MAX_TRACKS+1]; ! 83: } SDL_CD; ! 84: ! 85: /* Conversion functions from frames to Minute/Second/Frames and vice versa */ ! 86: #define CD_FPS 75 ! 87: #define FRAMES_TO_MSF(f, M,S,F) { \ ! 88: int value = f; \ ! 89: *(F) = value%CD_FPS; \ ! 90: value /= CD_FPS; \ ! 91: *(S) = value%60; \ ! 92: value /= 60; \ ! 93: *(M) = value; \ ! 94: } ! 95: #define MSF_TO_FRAMES(M, S, F) ((M)*60*CD_FPS+(S)*CD_FPS+(F)) ! 96: ! 97: /* CD-audio API functions: */ ! 98: ! 99: /* Returns the number of CD-ROM drives on the system, or -1 if ! 100: SDL_Init() has not been called with the SDL_INIT_CDROM flag. ! 101: */ ! 102: extern DECLSPEC int SDLCALL SDL_CDNumDrives(void); ! 103: ! 104: /* Returns a human-readable, system-dependent identifier for the CD-ROM. ! 105: Example: ! 106: "/dev/cdrom" ! 107: "E:" ! 108: "/dev/disk/ide/1/master" ! 109: */ ! 110: extern DECLSPEC const char * SDLCALL SDL_CDName(int drive); ! 111: ! 112: /* Opens a CD-ROM drive for access. It returns a drive handle on success, ! 113: or NULL if the drive was invalid or busy. This newly opened CD-ROM ! 114: becomes the default CD used when other CD functions are passed a NULL ! 115: CD-ROM handle. ! 116: Drives are numbered starting with 0. Drive 0 is the system default CD-ROM. ! 117: */ ! 118: extern DECLSPEC SDL_CD * SDLCALL SDL_CDOpen(int drive); ! 119: ! 120: /* This function returns the current status of the given drive. ! 121: If the drive has a CD in it, the table of contents of the CD and current ! 122: play position of the CD will be stored in the SDL_CD structure. ! 123: */ ! 124: extern DECLSPEC CDstatus SDLCALL SDL_CDStatus(SDL_CD *cdrom); ! 125: ! 126: /* Play the given CD starting at 'start_track' and 'start_frame' for 'ntracks' ! 127: tracks and 'nframes' frames. If both 'ntrack' and 'nframe' are 0, play ! 128: until the end of the CD. This function will skip data tracks. ! 129: This function should only be called after calling SDL_CDStatus() to ! 130: get track information about the CD. ! 131: For example: ! 132: // Play entire CD: ! 133: if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) ! 134: SDL_CDPlayTracks(cdrom, 0, 0, 0, 0); ! 135: // Play last track: ! 136: if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) { ! 137: SDL_CDPlayTracks(cdrom, cdrom->numtracks-1, 0, 0, 0); ! 138: } ! 139: // Play first and second track and 10 seconds of third track: ! 140: if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) ! 141: SDL_CDPlayTracks(cdrom, 0, 0, 2, 10); ! 142: ! 143: This function returns 0, or -1 if there was an error. ! 144: */ ! 145: extern DECLSPEC int SDLCALL SDL_CDPlayTracks(SDL_CD *cdrom, ! 146: int start_track, int start_frame, int ntracks, int nframes); ! 147: ! 148: /* Play the given CD starting at 'start' frame for 'length' frames. ! 149: It returns 0, or -1 if there was an error. ! 150: */ ! 151: extern DECLSPEC int SDLCALL SDL_CDPlay(SDL_CD *cdrom, int start, int length); ! 152: ! 153: /* Pause play -- returns 0, or -1 on error */ ! 154: extern DECLSPEC int SDLCALL SDL_CDPause(SDL_CD *cdrom); ! 155: ! 156: /* Resume play -- returns 0, or -1 on error */ ! 157: extern DECLSPEC int SDLCALL SDL_CDResume(SDL_CD *cdrom); ! 158: ! 159: /* Stop play -- returns 0, or -1 on error */ ! 160: extern DECLSPEC int SDLCALL SDL_CDStop(SDL_CD *cdrom); ! 161: ! 162: /* Eject CD-ROM -- returns 0, or -1 on error */ ! 163: extern DECLSPEC int SDLCALL SDL_CDEject(SDL_CD *cdrom); ! 164: ! 165: /* Closes the handle for the CD-ROM drive */ ! 166: extern DECLSPEC void SDLCALL SDL_CDClose(SDL_CD *cdrom); ! 167: ! 168: ! 169: /* Ends C function definitions when using C++ */ ! 170: #ifdef __cplusplus ! 171: } ! 172: #endif ! 173: #include "close_code.h" ! 174: ! 175: #endif /* _SDL_video_h */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.