1 /*  _______         ____    __         ___    ___
2  * \    _  \       \    /  \  /       \   \  /   /       '   '  '
3  *  |  | \  \       |  |    ||         |   \/   |         .      .
4  *  |  |  |  |      |  |    ||         ||\  /|  |
5  *  |  |  |  |      |  |    ||         || \/ |  |         '  '  '
6  *  |  |  |  |      |  |    ||         ||    |  |         .      .
7  *  |  |_/  /        \  \__//          ||    |  |
8  * /_______/ynamic    \____/niversal  /__\  /____\usic   /|  .  . ibliotheque
9  *                                                      /  \
10  *                                                     / .  \
11  * itmisc.c - Miscellaneous functions relating        / / \  \
12  *            to module files.                       | <  /   \_
13  *                                                   |  \/ /\   /
14  * By entheh.                                         \_  /  > /
15  *                                                      | \ / /
16  *                                                      |  ' /
17  *                                                       \__/
18  */
19 
20 #include "dumb.h"
21 #include "internal/it.h"
22 
23 
24 int dumb_it_default_panning_separation = 25;
25 
26 
duh_get_it_sigdata(DUH * duh)27 DUMB_IT_SIGDATA *DUMBEXPORT duh_get_it_sigdata(DUH *duh)
28 {
29 	return duh_get_raw_sigdata(duh, -1, SIGTYPE_IT);
30 }
31 
32 
33 
dumb_it_sd_get_song_message(DUMB_IT_SIGDATA * sd)34 const unsigned char *DUMBEXPORT dumb_it_sd_get_song_message(DUMB_IT_SIGDATA *sd)
35 {
36 	return sd ? sd->song_message : NULL;
37 }
38 
39 
40 
dumb_it_sd_get_n_orders(DUMB_IT_SIGDATA * sd)41 int DUMBEXPORT dumb_it_sd_get_n_orders(DUMB_IT_SIGDATA *sd)
42 {
43 	return sd ? sd->n_orders : 0;
44 }
45 
46 
47 
dumb_it_sd_get_n_samples(DUMB_IT_SIGDATA * sd)48 int DUMBEXPORT dumb_it_sd_get_n_samples(DUMB_IT_SIGDATA *sd)
49 {
50 	return sd ? sd->n_samples : 0;
51 }
52 
53 
54 
dumb_it_sd_get_n_instruments(DUMB_IT_SIGDATA * sd)55 int DUMBEXPORT dumb_it_sd_get_n_instruments(DUMB_IT_SIGDATA *sd)
56 {
57 	return sd ? sd->n_instruments : 0;
58 }
59 
60 
61 
dumb_it_sd_get_sample_name(DUMB_IT_SIGDATA * sd,int i)62 const unsigned char *DUMBEXPORT dumb_it_sd_get_sample_name(DUMB_IT_SIGDATA *sd, int i)
63 {
64 	ASSERT(sd && sd->sample && i >= 0 && i < sd->n_samples);
65 	return sd->sample[i].name;
66 }
67 
68 
69 
dumb_it_sd_get_sample_filename(DUMB_IT_SIGDATA * sd,int i)70 const unsigned char *DUMBEXPORT dumb_it_sd_get_sample_filename(DUMB_IT_SIGDATA *sd, int i)
71 {
72 	ASSERT(sd && sd->sample && i >= 0 && i < sd->n_samples);
73 	return sd->sample[i].filename;
74 }
75 
76 
77 
dumb_it_sd_get_instrument_name(DUMB_IT_SIGDATA * sd,int i)78 const unsigned char *DUMBEXPORT dumb_it_sd_get_instrument_name(DUMB_IT_SIGDATA *sd, int i)
79 {
80 	ASSERT(sd && sd->instrument && i >= 0 && i < sd->n_instruments);
81 	return sd->instrument[i].name;
82 }
83 
84 
85 
dumb_it_sd_get_instrument_filename(DUMB_IT_SIGDATA * sd,int i)86 const unsigned char *DUMBEXPORT dumb_it_sd_get_instrument_filename(DUMB_IT_SIGDATA *sd, int i)
87 {
88 	ASSERT(sd && sd->instrument && i >= 0 && i < sd->n_instruments);
89 	return sd->instrument[i].filename;
90 }
91 
92 
93 
dumb_it_sd_get_initial_global_volume(DUMB_IT_SIGDATA * sd)94 int DUMBEXPORT dumb_it_sd_get_initial_global_volume(DUMB_IT_SIGDATA *sd)
95 {
96 	return sd ? sd->global_volume : 0;
97 }
98 
99 
100 
dumb_it_sd_set_initial_global_volume(DUMB_IT_SIGDATA * sd,int gv)101 void DUMBEXPORT dumb_it_sd_set_initial_global_volume(DUMB_IT_SIGDATA *sd, int gv)
102 {
103 	if (sd) sd->global_volume = gv;
104 }
105 
106 
107 
dumb_it_sd_get_mixing_volume(DUMB_IT_SIGDATA * sd)108 int DUMBEXPORT dumb_it_sd_get_mixing_volume(DUMB_IT_SIGDATA *sd)
109 {
110 	return sd ? sd->mixing_volume : 0;
111 }
112 
113 
114 
dumb_it_sd_set_mixing_volume(DUMB_IT_SIGDATA * sd,int mv)115 void DUMBEXPORT dumb_it_sd_set_mixing_volume(DUMB_IT_SIGDATA *sd, int mv)
116 {
117 	if (sd) sd->mixing_volume = mv;
118 }
119 
120 
121 
dumb_it_sd_get_initial_speed(DUMB_IT_SIGDATA * sd)122 int DUMBEXPORT dumb_it_sd_get_initial_speed(DUMB_IT_SIGDATA *sd)
123 {
124 	return sd ? sd->speed : 0;
125 }
126 
127 
128 
dumb_it_sd_set_initial_speed(DUMB_IT_SIGDATA * sd,int speed)129 void DUMBEXPORT dumb_it_sd_set_initial_speed(DUMB_IT_SIGDATA *sd, int speed)
130 {
131 	if (sd) sd->speed = speed;
132 }
133 
134 
135 
dumb_it_sd_get_initial_tempo(DUMB_IT_SIGDATA * sd)136 int DUMBEXPORT dumb_it_sd_get_initial_tempo(DUMB_IT_SIGDATA *sd)
137 {
138 	return sd ? sd->tempo : 0;
139 }
140 
141 
142 
dumb_it_sd_set_initial_tempo(DUMB_IT_SIGDATA * sd,int tempo)143 void DUMBEXPORT dumb_it_sd_set_initial_tempo(DUMB_IT_SIGDATA *sd, int tempo)
144 {
145 	if (sd) sd->tempo = tempo;
146 }
147 
148 
149 
dumb_it_sd_get_initial_channel_volume(DUMB_IT_SIGDATA * sd,int channel)150 int DUMBEXPORT dumb_it_sd_get_initial_channel_volume(DUMB_IT_SIGDATA *sd, int channel)
151 {
152 	ASSERT(channel >= 0 && channel < DUMB_IT_N_CHANNELS);
153 	return sd ? sd->channel_volume[channel] : 0;
154 }
155 
dumb_it_sd_set_initial_channel_volume(DUMB_IT_SIGDATA * sd,int channel,int volume)156 void DUMBEXPORT dumb_it_sd_set_initial_channel_volume(DUMB_IT_SIGDATA *sd, int channel, int volume)
157 {
158 	ASSERT(channel >= 0 && channel < DUMB_IT_N_CHANNELS);
159 	if (sd) sd->channel_volume[channel] = volume;
160 }
161 
162 
163 
dumb_it_sr_get_current_order(DUMB_IT_SIGRENDERER * sr)164 int DUMBEXPORT dumb_it_sr_get_current_order(DUMB_IT_SIGRENDERER *sr)
165 {
166 	return sr ? sr->order : -1;
167 }
168 
169 
170 
dumb_it_sr_get_current_row(DUMB_IT_SIGRENDERER * sr)171 int DUMBEXPORT dumb_it_sr_get_current_row(DUMB_IT_SIGRENDERER *sr)
172 {
173 	return sr ? sr->row : -1;
174 }
175 
176 
177 
dumb_it_sr_get_global_volume(DUMB_IT_SIGRENDERER * sr)178 int DUMBEXPORT dumb_it_sr_get_global_volume(DUMB_IT_SIGRENDERER *sr)
179 {
180 	return sr ? sr->globalvolume : 0;
181 }
182 
183 
184 
dumb_it_sr_set_global_volume(DUMB_IT_SIGRENDERER * sr,int gv)185 void DUMBEXPORT dumb_it_sr_set_global_volume(DUMB_IT_SIGRENDERER *sr, int gv)
186 {
187 	if (sr) sr->globalvolume = gv;
188 }
189 
190 
191 
dumb_it_sr_get_tempo(DUMB_IT_SIGRENDERER * sr)192 int DUMBEXPORT dumb_it_sr_get_tempo(DUMB_IT_SIGRENDERER *sr)
193 {
194 	return sr ? sr->tempo : 0;
195 }
196 
197 
198 
dumb_it_sr_set_tempo(DUMB_IT_SIGRENDERER * sr,int tempo)199 void DUMBEXPORT dumb_it_sr_set_tempo(DUMB_IT_SIGRENDERER *sr, int tempo)
200 {
201 	if (sr) sr->tempo = tempo;
202 }
203 
204 
205 
dumb_it_sr_get_speed(DUMB_IT_SIGRENDERER * sr)206 int DUMBEXPORT dumb_it_sr_get_speed(DUMB_IT_SIGRENDERER *sr)
207 {
208 	return sr ? sr->speed : 0;
209 }
210 
211 
212 
dumb_it_sr_set_speed(DUMB_IT_SIGRENDERER * sr,int speed)213 void DUMBEXPORT dumb_it_sr_set_speed(DUMB_IT_SIGRENDERER *sr, int speed)
214 {
215 	if (sr) sr->speed = speed;
216 }
217 
218 
219 
dumb_it_sr_get_channel_volume(DUMB_IT_SIGRENDERER * sr,int channel)220 int DUMBEXPORT dumb_it_sr_get_channel_volume(DUMB_IT_SIGRENDERER *sr, int channel)
221 {
222 	return sr ? sr->channel[channel].channelvolume : 0;
223 }
224 
225 
226 
dumb_it_sr_set_channel_volume(DUMB_IT_SIGRENDERER * sr,int channel,int volume)227 void DUMBEXPORT dumb_it_sr_set_channel_volume(DUMB_IT_SIGRENDERER *sr, int channel, int volume)
228 {
229 	if (sr) sr->channel[channel].channelvolume = volume;
230 }
231 
232 
233 
dumb_it_sr_set_channel_muted(DUMB_IT_SIGRENDERER * sr,int channel,int muted)234 void DUMBEXPORT dumb_it_sr_set_channel_muted(DUMB_IT_SIGRENDERER *sr, int channel, int muted)
235 {
236 	if (sr) {
237 		if (muted)
238 			sr->channel[channel].flags |= IT_CHANNEL_MUTED;
239 		else
240 			sr->channel[channel].flags &= ~IT_CHANNEL_MUTED;
241 	}
242 }
243 
244 
245 
dumb_it_sr_get_channel_muted(DUMB_IT_SIGRENDERER * sr,int channel)246 int DUMBEXPORT dumb_it_sr_get_channel_muted(DUMB_IT_SIGRENDERER *sr, int channel)
247 {
248 	return sr ? (sr->channel[channel].flags & IT_CHANNEL_MUTED) != 0 : 0;
249 }
250