summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cdplayer.c125
-rw-r--r--src/stubs.c57
-rw-r--r--src/win95/cd_player.h7
3 files changed, 131 insertions, 58 deletions
diff --git a/src/cdplayer.c b/src/cdplayer.c
new file mode 100644
index 0000000..5bd3a78
--- /dev/null
+++ b/src/cdplayer.c
@@ -0,0 +1,125 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <SDL/SDL.h>
+
+#include "fixer.h"
+#include "win95/cd_player.h"
+
+static int HaveCDROM = 0;
+static SDL_CD *cdrom = NULL;
+
+void CDDA_Start()
+{
+/*
+ fprintf(stderr, "CDDA_Start()\n");
+*/
+
+ int numdrives;
+
+ if (!HaveCDROM) {
+ HaveCDROM = 1;
+ SDL_Init(SDL_INIT_CDROM);
+ }
+
+ if (cdrom != NULL)
+ CDDA_End();
+
+ numdrives = SDL_CDNumDrives();
+
+ if (numdrives == 0)
+ return;
+
+ cdrom = SDL_CDOpen(0);
+}
+
+void CDDA_End()
+{
+/*
+ fprintf(stderr, "CDDA_End()\n");
+*/
+
+ if (cdrom != NULL) {
+ CDDA_Stop();
+
+ SDL_CDClose(cdrom);
+ }
+
+ cdrom = NULL;
+}
+
+void CDDA_ChangeVolume(int volume)
+{
+ fprintf(stderr, "CDDA_ChangeVolume(%d)\n", volume);
+}
+
+int CDDA_CheckNumberOfTracks()
+{
+/*
+ fprintf(stderr, "CDDA_CheckNumberOfTracks()\n");
+*/
+
+ if (cdrom == NULL)
+ return 0;
+
+ return cdrom->numtracks;
+}
+
+int CDDA_IsOn()
+{
+/*
+ fprintf(stderr, "CDDA_IsOn()\n");
+*/
+ return (cdrom != NULL);
+}
+
+int CDDA_IsPlaying()
+{
+/*
+ fprintf(stderr, "CDDA_IsPlaying()\n");
+*/
+ if (cdrom == NULL)
+ return 0;
+
+ return (SDL_CDStatus(cdrom) == CD_PLAYING);
+}
+
+void CDDA_Play(int CDDATrack)
+{
+/*
+ fprintf(stderr, "CDDA_Play(%d)\n", CDDATrack);
+*/
+ if (cdrom == NULL)
+ return;
+
+ if (CD_INDRIVE(SDL_CDStatus(cdrom)))
+ SDL_CDPlayTracks(cdrom, CDDATrack-1, 0, 1, 0);
+}
+
+void CDDA_PlayLoop(int CDDATrack)
+{
+ fprintf(stderr, "CDDA_PlayLoop(%d)\n", CDDATrack);
+
+ /* can't loop with SDL without a thread, so just play the track */
+ CDDA_Play(CDDATrack);
+}
+
+void CDDA_Stop()
+{
+/*
+ fprintf(stderr, "CDDA_Stop()\n");
+*/
+ if (cdrom == NULL)
+ return;
+
+ if (CD_INDRIVE(SDL_CDStatus(cdrom)))
+ SDL_CDStop(cdrom);
+}
+
+void CDDA_SwitchOn()
+{
+/*
+ fprintf(stderr, "CDDA_SwitchOn()\n");
+*/
+}
diff --git a/src/stubs.c b/src/stubs.c
index 341c5f6..d1f2097 100644
--- a/src/stubs.c
+++ b/src/stubs.c
@@ -308,63 +308,6 @@ void GenerateDirectDrawSurface()
int use_mmx_math = 0;
-/* cd_player.c */
-void CDDA_Start()
-{
- fprintf(stderr, "CDDA_Start()\n");
-}
-
-void CDDA_End()
-{
- fprintf(stderr, "CDDA_End()\n");
-}
-
-void CDDA_ChangeVolume(int volume)
-{
- fprintf(stderr, "CDDA_ChangeVolume(%d)\n", volume);
-}
-
-int CDDA_CheckNumberOfTracks()
-{
- fprintf(stderr, "CDDA_CheckNumberOfTracks()\n");
-
- return 0;
-}
-
-int CDDA_IsOn()
-{
- fprintf(stderr, "CDDA_IsOn()\n");
-
- return 0;
-}
-
-int CDDA_IsPlaying()
-{
- fprintf(stderr, "CDDA_IsPlaying()\n");
-
- return 0;
-}
-
-void CDDA_Play(int CDDATrack)
-{
- fprintf(stderr, "CDDA_Play(%d)\n", CDDATrack);
-}
-
-void CDDA_PlayLoop(int CDDATrack)
-{
- fprintf(stderr, "CDDA_PlayLoop(%d)\n", CDDATrack);
-}
-
-void CDDA_Stop()
-{
- fprintf(stderr, "CDDA_Stop()\n");
-}
-
-void CDDA_SwitchOn()
-{
- fprintf(stderr, "CDDA_SwitchOn()\n");
-}
-
/* dxlog.c */
void dx_str_log(char const * str, int line, char const * file)
diff --git a/src/win95/cd_player.h b/src/win95/cd_player.h
index 70e8a2e..9180f06 100644
--- a/src/win95/cd_player.h
+++ b/src/win95/cd_player.h
@@ -1,3 +1,6 @@
+#ifndef __WIN95_CDPLAYER_H__
+#define __WIN95_CDPLAYER_H__
+
/* KJL 12:40:35 07/05/98 - This is code derived from Patrick's original stuff &
moved into it's own file. */
@@ -107,4 +110,6 @@ extern void PlatCDDAManagementCallBack(WPARAM flags, LONG deviceId);
-extern int CDPlayerVolume; \ No newline at end of file
+extern int CDPlayerVolume;
+
+#endif