Skip to content

Latest commit

 

History

History
202 lines (170 loc) · 5.91 KB

SDL_cdrom.h

File metadata and controls

202 lines (170 loc) · 5.91 KB
 
Apr 26, 2001
Apr 26, 2001
1
2
/*
SDL - Simple DirectMedia Layer
Dec 31, 2011
Dec 31, 2011
3
Copyright (C) 1997-2012 Sam Lantinga
Apr 26, 2001
Apr 26, 2001
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
Apr 26, 2001
Apr 26, 2001
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.
Apr 26, 2001
Apr 26, 2001
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.
Apr 26, 2001
Apr 26, 2001
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
Apr 26, 2001
Apr 26, 2001
18
19
Sam Lantinga
Dec 14, 2001
Dec 14, 2001
20
slouken@libsdl.org
Apr 26, 2001
Apr 26, 2001
21
22
*/
Sep 21, 2009
Sep 21, 2009
23
24
25
26
/**
* @file SDL_cdrom.h
* This is the CD-audio control API for Simple DirectMedia Layer
*/
Apr 26, 2001
Apr 26, 2001
27
28
29
30
#ifndef _SDL_cdrom_h
#define _SDL_cdrom_h
Feb 9, 2006
Feb 9, 2006
31
#include "SDL_stdinc.h"
Feb 10, 2006
Feb 10, 2006
32
#include "SDL_error.h"
Apr 26, 2001
Apr 26, 2001
33
34
35
36
37
38
39
#include "begin_code.h"
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
extern "C" {
#endif
Sep 21, 2009
Sep 21, 2009
40
41
42
43
44
45
/**
* @file SDL_cdrom.h
* In order to use these functions, SDL_Init() must have been called
* with the SDL_INIT_CDROM flag. This causes SDL to scan the system
* for CD-ROM drives, and load appropriate drivers.
*/
Apr 26, 2001
Apr 26, 2001
46
Sep 21, 2009
Sep 21, 2009
47
/** The maximum number of CD-ROM tracks on a disk */
Apr 26, 2001
Apr 26, 2001
48
49
#define SDL_MAX_TRACKS 99
Sep 21, 2009
Sep 21, 2009
50
51
52
53
/** @name Track Types
* The types of CD-ROM track possible
*/
/*@{*/
Apr 26, 2001
Apr 26, 2001
54
55
#define SDL_AUDIO_TRACK 0x00
#define SDL_DATA_TRACK 0x04
Sep 21, 2009
Sep 21, 2009
56
/*@}*/
Apr 26, 2001
Apr 26, 2001
57
Sep 21, 2009
Sep 21, 2009
58
/** The possible states which a CD-ROM drive can be in. */
Apr 26, 2001
Apr 26, 2001
59
60
61
62
63
64
65
66
typedef enum {
CD_TRAYEMPTY,
CD_STOPPED,
CD_PLAYING,
CD_PAUSED,
CD_ERROR = -1
} CDstatus;
Sep 21, 2009
Sep 21, 2009
67
/** Given a status, returns true if there's a disk in the drive */
Apr 17, 2005
Apr 17, 2005
68
#define CD_INDRIVE(status) ((int)(status) > 0)
Apr 26, 2001
Apr 26, 2001
69
Jul 18, 2004
Jul 18, 2004
70
typedef struct SDL_CDtrack {
Sep 21, 2009
Sep 21, 2009
71
72
Uint8 id; /**< Track number */
Uint8 type; /**< Data or audio track */
Apr 26, 2001
Apr 26, 2001
73
Uint16 unused;
Sep 21, 2009
Sep 21, 2009
74
75
Uint32 length; /**< Length, in frames, of this track */
Uint32 offset; /**< Offset, in frames, from start of disk */
Apr 26, 2001
Apr 26, 2001
76
77
} SDL_CDtrack;
Sep 21, 2009
Sep 21, 2009
78
/** This structure is only current as of the last call to SDL_CDStatus() */
Apr 26, 2001
Apr 26, 2001
79
typedef struct SDL_CD {
Sep 21, 2009
Sep 21, 2009
80
81
82
83
84
85
86
87
int id; /**< Private drive identifier */
CDstatus status; /**< Current drive status */
/** The rest of this structure is only valid if there's a CD in drive */
/*@{*/
int numtracks; /**< Number of tracks on disk */
int cur_track; /**< Current track position */
int cur_frame; /**< Current frame offset within current track */
Apr 26, 2001
Apr 26, 2001
88
SDL_CDtrack track[SDL_MAX_TRACKS+1];
Sep 21, 2009
Sep 21, 2009
89
/*@}*/
Apr 26, 2001
Apr 26, 2001
90
91
} SDL_CD;
Sep 21, 2009
Sep 21, 2009
92
93
94
95
/** @name Frames / MSF Conversion Functions
* Conversion functions from frames to Minute/Second/Frames and vice versa
*/
/*@{*/
Apr 26, 2001
Apr 26, 2001
96
97
98
99
100
101
102
103
104
105
#define CD_FPS 75
#define FRAMES_TO_MSF(f, M,S,F) { \
int value = f; \
*(F) = value%CD_FPS; \
value /= CD_FPS; \
*(S) = value%60; \
value /= 60; \
*(M) = value; \
}
#define MSF_TO_FRAMES(M, S, F) ((M)*60*CD_FPS+(S)*CD_FPS+(F))
Sep 21, 2009
Sep 21, 2009
106
/*@}*/
Apr 26, 2001
Apr 26, 2001
107
108
109
/* CD-audio API functions: */
Sep 21, 2009
Sep 21, 2009
110
111
112
/**
* Returns the number of CD-ROM drives on the system, or -1 if
* SDL_Init() has not been called with the SDL_INIT_CDROM flag.
Apr 26, 2001
Apr 26, 2001
113
*/
Apr 11, 2002
Apr 11, 2002
114
extern DECLSPEC int SDLCALL SDL_CDNumDrives(void);
Apr 26, 2001
Apr 26, 2001
115
Sep 21, 2009
Sep 21, 2009
116
117
118
119
120
121
122
/**
* Returns a human-readable, system-dependent identifier for the CD-ROM.
* Example:
* - "/dev/cdrom"
* - "E:"
* - "/dev/disk/ide/1/master"
*/
Apr 11, 2002
Apr 11, 2002
123
extern DECLSPEC const char * SDLCALL SDL_CDName(int drive);
Apr 26, 2001
Apr 26, 2001
124
Sep 21, 2009
Sep 21, 2009
125
126
127
128
129
130
131
/**
* Opens a CD-ROM drive for access. It returns a drive handle on success,
* or NULL if the drive was invalid or busy. This newly opened CD-ROM
* becomes the default CD used when other CD functions are passed a NULL
* CD-ROM handle.
* Drives are numbered starting with 0. Drive 0 is the system default CD-ROM.
*/
Apr 11, 2002
Apr 11, 2002
132
extern DECLSPEC SDL_CD * SDLCALL SDL_CDOpen(int drive);
Apr 26, 2001
Apr 26, 2001
133
Sep 21, 2009
Sep 21, 2009
134
135
136
137
138
/**
* This function returns the current status of the given drive.
* If the drive has a CD in it, the table of contents of the CD and current
* play position of the CD will be stored in the SDL_CD structure.
*/
Apr 11, 2002
Apr 11, 2002
139
extern DECLSPEC CDstatus SDLCALL SDL_CDStatus(SDL_CD *cdrom);
Apr 26, 2001
Apr 26, 2001
140
Sep 21, 2009
Sep 21, 2009
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/**
* Play the given CD starting at 'start_track' and 'start_frame' for 'ntracks'
* tracks and 'nframes' frames. If both 'ntrack' and 'nframe' are 0, play
* until the end of the CD. This function will skip data tracks.
* This function should only be called after calling SDL_CDStatus() to
* get track information about the CD.
* For example:
* @code
* // Play entire CD:
* if ( CD_INDRIVE(SDL_CDStatus(cdrom)) )
* SDL_CDPlayTracks(cdrom, 0, 0, 0, 0);
* // Play last track:
* if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) {
* SDL_CDPlayTracks(cdrom, cdrom->numtracks-1, 0, 0, 0);
* }
* // Play first and second track and 10 seconds of third track:
* if ( CD_INDRIVE(SDL_CDStatus(cdrom)) )
* SDL_CDPlayTracks(cdrom, 0, 0, 2, 10);
* @endcode
*
* @return This function returns 0, or -1 if there was an error.
*/
Apr 11, 2002
Apr 11, 2002
163
extern DECLSPEC int SDLCALL SDL_CDPlayTracks(SDL_CD *cdrom,
Apr 26, 2001
Apr 26, 2001
164
165
int start_track, int start_frame, int ntracks, int nframes);
Sep 21, 2009
Sep 21, 2009
166
167
168
169
/**
* Play the given CD starting at 'start' frame for 'length' frames.
* @return It returns 0, or -1 if there was an error.
*/
Apr 11, 2002
Apr 11, 2002
170
extern DECLSPEC int SDLCALL SDL_CDPlay(SDL_CD *cdrom, int start, int length);
Apr 26, 2001
Apr 26, 2001
171
Sep 21, 2009
Sep 21, 2009
172
173
174
/** Pause play
* @return returns 0, or -1 on error
*/
Apr 11, 2002
Apr 11, 2002
175
extern DECLSPEC int SDLCALL SDL_CDPause(SDL_CD *cdrom);
Apr 26, 2001
Apr 26, 2001
176
Sep 21, 2009
Sep 21, 2009
177
178
179
/** Resume play
* @return returns 0, or -1 on error
*/
Apr 11, 2002
Apr 11, 2002
180
extern DECLSPEC int SDLCALL SDL_CDResume(SDL_CD *cdrom);
Apr 26, 2001
Apr 26, 2001
181
Sep 21, 2009
Sep 21, 2009
182
183
184
/** Stop play
* @return returns 0, or -1 on error
*/
Apr 11, 2002
Apr 11, 2002
185
extern DECLSPEC int SDLCALL SDL_CDStop(SDL_CD *cdrom);
Apr 26, 2001
Apr 26, 2001
186
Sep 21, 2009
Sep 21, 2009
187
188
189
/** Eject CD-ROM
* @return returns 0, or -1 on error
*/
Apr 11, 2002
Apr 11, 2002
190
extern DECLSPEC int SDLCALL SDL_CDEject(SDL_CD *cdrom);
Apr 26, 2001
Apr 26, 2001
191
Sep 21, 2009
Sep 21, 2009
192
/** Closes the handle for the CD-ROM drive */
Apr 11, 2002
Apr 11, 2002
193
extern DECLSPEC void SDLCALL SDL_CDClose(SDL_CD *cdrom);
Apr 26, 2001
Apr 26, 2001
194
195
196
197
198
199
200
201
202
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
}
#endif
#include "close_code.h"
#endif /* _SDL_video_h */