annotate libmlk-core/mlk/core/sys.c @ 578:f271681ce015

mlk-map: follow conventions
author David Demelier <markand@malikania.fr>
date Sat, 11 Mar 2023 11:20:46 +0100
parents 8cf895e51fb6
children 4349b591c3ac
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * sys.c -- system routines
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
445
773a082f0b91 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 443
diff changeset
4 * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr>
23
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
19 #include <mlk/util/util.h>
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
20
320
8f9937403749 misc: improve loading of data
David Demelier <markand@malikania.fr>
parents: 316
diff changeset
21 #include <sys/stat.h>
32
91bc2329ab0c core: implement data directory access, closes #2454 @1h
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
22 #include <assert.h>
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
23 #include <errno.h>
56
43d1102a367e core: disable buffering on MinGW
David Demelier <markand@malikania.fr>
parents: 52
diff changeset
24 #include <stdio.h>
43d1102a367e core: disable buffering on MinGW
David Demelier <markand@malikania.fr>
parents: 52
diff changeset
25 #include <stdlib.h>
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
26 #include <string.h>
84
a6c2067709ce core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
27 #include <limits.h>
32
91bc2329ab0c core: implement data directory access, closes #2454 @1h
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
28
571
cba66f7d8a53 misc: various windows fixes
David Demelier <markand@malikania.fr>
parents: 547
diff changeset
29 #if defined(_WIN32)
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
30 # include <shlwapi.h>
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
31 # include <windows.h>
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
32 #else
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
33 # include <errno.h>
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
34 # include <string.h>
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
35 #endif
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
36
23
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 #include <SDL.h>
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 #include <SDL_image.h>
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 #include <SDL_ttf.h>
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
40
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
41 #include <sndfile.h>
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
42
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
43 #include "alloc.h"
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
44 #include "err.h"
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
45 #include "panic.h"
204
c9fbb822d269 core: allocate sound channels at startup
David Demelier <markand@malikania.fr>
parents: 169
diff changeset
46 #include "sound.h"
23
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 #include "sys.h"
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
48 #include "sys_p.h"
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
49
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
50 ALCdevice *mlk__audio_dev = NULL;
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
51 ALCcontext *mlk__audio_ctx = NULL;
23
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
52
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
53 static struct {
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
54 char organization[128];
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
55 char name[128];
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
56 } info = {
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
57 .organization = "fr.malikania",
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
58 .name = "molko"
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
59 };
36
798baf7f3ec0 core: implement sys_data* functions for Windows
David Demelier <markand@malikania.fr>
parents: 32
diff changeset
60
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
61 struct viodata {
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
62 const unsigned char *data;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
63 const size_t datasz;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
64 sf_count_t offset;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
65 };
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
66
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
67 static inline char *
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
68 normalize(char *str)
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
69 {
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
70 for (char *p = str; *p; ++p)
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
71 if (*p == '\\')
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
72 *p = '/';
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
73
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
74 return str;
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
75 }
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
76
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
77 static const char *
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
78 user_directory(enum mlk_sys_dir kind)
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
79 {
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
80 /* Kept for future use. */
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
81 (void)kind;
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
82
571
cba66f7d8a53 misc: various windows fixes
David Demelier <markand@malikania.fr>
parents: 547
diff changeset
83 static MLK_THREAD_LOCAL char path[MLK_PATH_MAX];
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
84 char *pref;
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
85
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
86 if ((pref = SDL_GetPrefPath(info.organization, info.name))) {
446
4607eea0eabc util: prefix with mlk_
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
87 mlk_util_strlcpy(path, pref, sizeof (path));
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
88 SDL_free(pref);
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
89 } else
446
4607eea0eabc util: prefix with mlk_
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
90 mlk_util_strlcpy(path, "./", sizeof (path));
241
76afe639fd72 misc: add support for NLS, closes #22510 @4h
David Demelier <markand@malikania.fr>
parents: 204
diff changeset
91
279
5217c195c5b9 core: forgot to return the path
David Demelier <markand@malikania.fr>
parents: 259
diff changeset
92 return path;
32
91bc2329ab0c core: implement data directory access, closes #2454 @1h
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
93 }
91bc2329ab0c core: implement data directory access, closes #2454 @1h
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
94
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
95 static inline int
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
96 mkpath(const char *path)
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
97 {
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
98 #ifdef _WIN32
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
99 /* TODO: add error using the convenient FormatMessage function. */
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
100 if (!CreateDirectoryA(path, NULL) && GetLastError() != ERROR_ALREADY_EXISTS)
547
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
101 return -1;
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
102 #else
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
103 if (mkdir(path, 0755) < 0 && errno != EEXIST)
547
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
104 return mlk_errf("%s", strerror(errno));
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
105 #endif
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
106
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
107 return 0;
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
108 }
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
109
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
110 static sf_count_t
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
111 vio_get_filelen(void *data)
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
112 {
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
113 const struct viodata *vio = data;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
114
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
115 return (sf_count_t)vio->datasz;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
116 }
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
117
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
118 static sf_count_t
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
119 vio_seek(sf_count_t offset, int whence, void *data)
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
120 {
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
121 struct viodata *vio = data;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
122
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
123 switch (whence) {
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
124 case SEEK_SET:
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
125 vio->offset = offset;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
126 break;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
127 case SEEK_CUR:
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
128 vio->offset += offset;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
129 break;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
130 case SEEK_END:
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
131 vio->offset = vio->datasz - offset;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
132 break;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
133 default:
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
134 break;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
135 }
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
136
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
137 return vio->offset;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
138 }
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
139
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
140 static sf_count_t
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
141 vio_read(void *ptr, sf_count_t count, void *data)
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
142 {
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
143 struct viodata *vio = data;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
144
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
145 memcpy(ptr, vio->data + vio->offset, count);
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
146 vio->offset += count;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
147
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
148 return count;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
149 }
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
150
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
151 static sf_count_t
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
152 vio_tell(void *data)
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
153 {
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
154 const struct viodata *vio = data;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
155
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
156 return vio->offset;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
157 }
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
158
547
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
159 static void
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
160 audio_finish(void)
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
161 {
547
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
162 if (mlk__audio_ctx) {
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
163 alcMakeContextCurrent(NULL);
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
164 alcDestroyContext(mlk__audio_ctx);
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
165 mlk__audio_ctx = NULL;
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
166 }
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
167 if (mlk__audio_dev) {
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
168 alcCloseDevice(mlk__audio_dev);
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
169 mlk__audio_dev = NULL;
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
170 }
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
171 }
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
172
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
173 int
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
174 mlk_sys_init(const char *organization, const char *name)
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
175 {
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
176 #if defined(__MINGW64__)
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
177 /* On MinGW buffering leads to painful debugging. */
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
178 setbuf(stderr, NULL);
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
179 setbuf(stdout, NULL);
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
180 #endif
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
181
411
d74f53299252 make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
182 /* Kept for future use. */
d74f53299252 make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
183 (void)organization;
d74f53299252 make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
184 (void)name;
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
185
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
186 /* SDL2. */
443
dfc65293d984 core: initial gamepad support
David Demelier <markand@malikania.fr>
parents: 442
diff changeset
187 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER) < 0)
547
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
188 return mlk_errf("%s", SDL_GetError());
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
189 if (IMG_Init(IMG_INIT_PNG) != IMG_INIT_PNG)
547
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
190 return mlk_errf("%s", SDL_GetError());
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
191 if (TTF_Init() < 0)
547
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
192 return mlk_errf("%s", SDL_GetError());
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
193
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
194 /* OpenAL. */
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
195 #if defined(MLK_OS_WINDOW)
394
8273c40a5691 core: disable openal-soft logs
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
196 SetEnvironmentVariable("ALSOFT_LOGLEVEL", "0");
8273c40a5691 core: disable openal-soft logs
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
197 #else
8273c40a5691 core: disable openal-soft logs
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
198 putenv("ALSOFT_LOGLEVEL=0");
8273c40a5691 core: disable openal-soft logs
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
199 #endif
8273c40a5691 core: disable openal-soft logs
David Demelier <markand@malikania.fr>
parents: 380
diff changeset
200
547
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
201 if (!(mlk__audio_dev = alcOpenDevice(NULL))) {
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
202 mlk_errf("unable to open audio device");
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
203 goto err;
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
204 }
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
205 if (!(mlk__audio_ctx = alcCreateContext(mlk__audio_dev, NULL))) {
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
206 mlk_errf("%s", alcGetError(mlk__audio_dev));
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
207 goto err;
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
208 }
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
209 if (alcMakeContextCurrent(mlk__audio_ctx) != ALC_TRUE) {
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
210 mlk_errf("%s", alcGetError(mlk__audio_dev));
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
211 goto err;
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
212 }
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
213
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
214 return 0;
547
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
215
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
216 err:
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
217 audio_finish();
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
218
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
219 return -1;
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
220 }
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
221
32
91bc2329ab0c core: implement data directory access, closes #2454 @1h
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
222 const char *
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
223 mlk_sys_dir(enum mlk_sys_dir kind)
32
91bc2329ab0c core: implement data directory access, closes #2454 @1h
David Demelier <markand@malikania.fr>
parents: 31
diff changeset
224 {
411
d74f53299252 make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
225 return user_directory(kind);
84
a6c2067709ce core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
226 }
a6c2067709ce core: implement basic save routines, closes #2476 @2h
David Demelier <markand@malikania.fr>
parents: 59
diff changeset
227
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
228 int
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
229 mlk_sys_mkdir(const char *directory)
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
230 {
524
c2124ecb2423 util: prefix PATH_MAX to MLK_PATH_MAX
David Demelier <markand@malikania.fr>
parents: 486
diff changeset
231 char path[MLK_PATH_MAX], *p;
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
232
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
233 /* Copy the directory to normalize and iterate over '/'. */
446
4607eea0eabc util: prefix with mlk_
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
234 mlk_util_strlcpy(path, directory, sizeof (path));
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
235 normalize(path);
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
236
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
237 #if defined(_WIN32)
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
238 /* Remove drive letter that we don't need. */
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
239 if ((p = strchr(path, ':')))
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
240 ++p;
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
241 else
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
242 p = path;
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
243 #else
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
244 p = path;
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
245 #endif
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
246
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
247 for (p = p + 1; *p; ++p) {
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
248 if (*p == '/') {
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
249 *p = 0;
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
250
298
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
251 if (mkpath(path) < 0)
196264679079 misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents: 279
diff changeset
252 return -1;
255
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
253
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
254 *p = '/';
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
255 }
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
256 }
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
257
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
258 return mkpath(path);
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
259 }
d987a5fc4a3e core: add sys_mkdir function
David Demelier <markand@malikania.fr>
parents: 243
diff changeset
260
23
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
261 void
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
262 mlk_sys_finish(void)
23
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
263 {
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
264 TTF_Quit();
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
265 IMG_Quit();
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 SDL_Quit();
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
267
574
8cf895e51fb6 win: various improvements
David Demelier <markand@malikania.fr>
parents: 571
diff changeset
268 audio_finish();
23
bc9637a2601b core: add basic system routines
David Demelier <markand@malikania.fr>
parents:
diff changeset
269 }
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
270
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
271 static int
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
272 create_audiostream(struct mlk__audiostream **ptr, SNDFILE *file, const SF_INFO *info)
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
273 {
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
274 struct mlk__audiostream *stream;
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
275 int ret = 0;
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
276
442
9c3b3935f0aa core: rework allocations
David Demelier <markand@malikania.fr>
parents: 438
diff changeset
277 stream = mlk_alloc_new(1, sizeof (*stream));
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
278 stream->samplerate = info->samplerate;
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
279 stream->samplesz = info->frames * info->channels;
442
9c3b3935f0aa core: rework allocations
David Demelier <markand@malikania.fr>
parents: 438
diff changeset
280 stream->samples = mlk_alloc_new(stream->samplesz, sizeof (*stream->samples));
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
281 stream->format = info->channels == 1 ? AL_FORMAT_MONO16 : AL_FORMAT_STEREO16;
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
282
380
31e2f6d35c34 core: fix sndfile distortion issue
David Demelier <markand@malikania.fr>
parents: 379
diff changeset
283 sf_command(file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE);
31e2f6d35c34 core: fix sndfile distortion issue
David Demelier <markand@malikania.fr>
parents: 379
diff changeset
284
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
285 if (sf_read_short(file, stream->samples, stream->samplesz) != stream->samplesz) {
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
286 free(stream->samples);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
287 free(stream);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
288 stream = NULL;
547
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
289 ret = mlk_errf("%s", sf_error(file));
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
290 }
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
291
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
292 alGenBuffers(1, &stream->buffer);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
293 alBufferData(stream->buffer, stream->format, stream->samples,
380
31e2f6d35c34 core: fix sndfile distortion issue
David Demelier <markand@malikania.fr>
parents: 379
diff changeset
294 stream->samplesz * sizeof (*stream->samples), stream->samplerate);
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
295 alGenSources(1, &stream->source);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
296 alSourcei(stream->source, AL_BUFFER, stream->buffer);
411
d74f53299252 make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
297
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
298 sf_close(file);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
299
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
300 *ptr = stream;
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
301
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
302 return ret;
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
303 }
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
304
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
305 int
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
306 mlk__audiostream_open(struct mlk__audiostream **stream, const char *path)
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
307 {
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
308 assert(path);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
309
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
310 SF_INFO info;
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
311 SNDFILE *file;
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
312
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
313 if (!(file = sf_open(path, SFM_READ, &info)))
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
314 return sf_error(NULL);
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
315
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
316 return create_audiostream(stream, file, &info);
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
317 }
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
318
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
319 int
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
320 mlk__audiostream_openmem(struct mlk__audiostream **stream, const void *data, size_t datasz)
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
321 {
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
322 assert(data);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
323
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
324 SF_VIRTUAL_IO io = {
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
325 .get_filelen = vio_get_filelen,
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
326 .seek = vio_seek,
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
327 .read = vio_read,
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
328 .tell = vio_tell
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
329 };
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
330 SF_INFO info;
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
331 SNDFILE *file;
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
332 struct viodata viodata = {
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
333 .data = data,
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
334 .datasz = datasz,
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
335 };
411
d74f53299252 make: add basic GNU make support
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
336
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
337 if (!(file = sf_open_virtual(&io, SFM_READ, &info, &viodata)))
547
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 540
diff changeset
338 return mlk_errf("%s", sf_strerror(NULL));
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
339
436
df92d5b056ce core: use err.h in sound|music
David Demelier <markand@malikania.fr>
parents: 432
diff changeset
340 return create_audiostream(stream, file, &info);
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
341 }
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
342
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
343 void
471
3761e33d429e core: sys -> mlk_sys
David Demelier <markand@malikania.fr>
parents: 446
diff changeset
344 mlk__audiostream_finish(struct mlk__audiostream *s)
379
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
345 {
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
346 assert(s);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
347
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
348 alDeleteBuffers(1, &s->buffer);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
349 alSourcei(s->source, AL_BUFFER, 0);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
350 alDeleteSources(1, &s->source);
67c1c46af2c8 core: replace SDL2_mixer with OpenAL, closes #2528 @3h
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
351 }