started backporting the eradicate code
[dosdemo] / src / music.c
1 #include <stdlib.h>
2 #include "music.h"
3
4 #ifdef __WATCOMC__
5 #define NO_MUSIC
6 #endif
7
8 #ifndef NO_MUSIC
9 #include "mikmod.h"
10
11 static MODULE *mod;
12 static int initialized;
13
14 static int init(void)
15 {
16         MikMod_RegisterAllDrivers();
17         MikMod_RegisterAllLoaders();
18
19         md_mode |= DMODE_SOFT_MUSIC | DMODE_16BITS | DMODE_STEREO | DMODE_INTERP;
20         if(MikMod_Init("") != 0) {
21                 fprintf(stderr, "mikmod init failed: %s\n",
22                                 MikMod_strerror(MikMod_errno));
23                 return -1;
24         }
25
26         return 0;
27 }
28
29 int music_open(const char *fname)
30 {
31         if(!initialized) {
32                 if(init() == -1) {
33                         return -1;
34                 }
35                 initialized = 1;
36         }
37
38         if(!(mod = Player_Load(fname, 64, 0))) {
39                 fprintf(stderr, "failed to load music: %s: %s\n", fname,
40                                 MikMod_strerror(MikMod_errno));
41                 return -1;
42         }
43         return 0;
44 }
45
46 void music_close(void)
47 {
48         if(mod) {
49                 printf("shutting down music playback\n");
50                 music_stop();
51                 Player_Free(mod);
52                 mod = 0;
53         }
54 }
55
56 void music_play(void)
57 {
58         Player_Start(mod);
59 }
60
61 void music_stop(void)
62 {
63         Player_Stop();
64 }
65
66 void music_update(void)
67 {
68         if(Player_Active()) {
69                 MikMod_Update();
70         }
71 }
72
73 #else   /* NO_MUSIC */
74
75 int music_open(const char *fname)
76 {
77         return 0;
78 }
79
80 void music_close(void)
81 {
82 }
83
84 void music_play(void)
85 {
86 }
87
88 void music_stop(void)
89 {
90 }
91
92 void music_update(void)
93 {
94 }
95
96 #endif