|
|
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.