1 
2 /*
3  *  Diverse Bristol audio routines.
4  *  Copyright (c) by Nick Copeland <nickycopeland@hotmail.com> 1996,2012
5  *
6  *
7  *   This program is free software; you can redistribute it and/or modify
8  *   it under the terms of the GNU General Public License as published by
9  *   the Free Software Foundation; either version 3 of the License, or
10  *   (at your option) any later version.
11  *
12  *   This program is distributed in the hope that it will be useful,
13  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *   GNU General Public License for more details.
16  *
17  *   You should have received a copy of the GNU General Public License
18  *   along with this program; if not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 /*
23  * This file is just the visible presentation code for the trilogy. The stratus
24  * was already architected to support the extra parameterisation for the trilogy
25  * so this just now needed a different layout of a few of the parameters.
26  *
27  * Check String options.
28  *
29  *	P12 String pan
30  *	P13 String harmonics
31  *	P14 String spacialisation
32  *	P15 String mod level
33  *	P16 String TBD
34  */
35 
36 #include "brighton.h"
37 #include "brightonMini.h"
38 
39 extern int stratusInit();
40 extern int stratusConfigure();
41 extern int stratusCallback(brightonWindow *, int, int, float);
42 extern int stratusModCallback(brightonWindow *, int, int, float);
43 extern int stratusMidiCallback(brightonWindow *, int, int, float);
44 
45 #include "brightonKeys.h"
46 #include "brightoninternals.h"
47 
48 #define DEVICE_COUNT 87
49 
50 /*
51  * This structure is for device definition. The structure is defined in
52  * include/brighton.h, further definitions in brighton/brightonDevtable.h and
53  * include/brightoninternals.h
54  *
55  *	typedef int (*brightonCallback)(int, float);
56  *	typedef struct BrightonLocations {
57  *		int device; 0=rotary, 1=scale, etc.
58  *		float relx, rely; relative position with regards to 1000 by 1000 window
59  *		float relw, relh; relative height.
60  *		int from, to;
61  *		brightonCallback callback; specific to this dev
62  *		char *image; bitmap. If zero take a device default.
63  *		int flags;
64  *	} brightonLocations;
65  *
66  * This example is for a trilogyBristol type synth interface.
67  */
68 #define S1 35
69 #define S2 110
70 #define S2b 15
71 #define S2c 80
72 #define S3 70
73 #define S4 600
74 
75 #define BO 10
76 #define B2 6
77 
78 #define R1 190
79 #define R2 560
80 #define R2a 545
81 #define R2b 685
82 
83 #define D1 51
84 #define D2 43
85 #define D3 30
86 
87 #define C1 26
88 #define C2 (C1 + D1)
89 #define C3 (C2 + D1)
90 #define C4 (C3 + D1)
91 #define C5 (C4 + D1)
92 #define C6 (C5 + D1)
93 #define C7 (C6 + D1)
94 #define C8 (C7 + D1)
95 #define C9 (C8 + D1)
96 #define C10 (C9 + D1)
97 #define C11 (C10 + D1)
98 #define C12 (C11 + D1)
99 #define C13 (C12 + D1)
100 #define C14 (C13 + D1)
101 #define C15 (C14 + D1)
102 #define C16 (C15 + D1)
103 #define C17 (C16 + D1)
104 #define C18 (C17 + D1)
105 #define C19 (C18 + D1)
106 #define C20 (C19 + D1)
107 
108 static brightonLocations trilogyLocations[DEVICE_COUNT] = {
109 	/* Organ */
110 	{"Organ-2'", 1, C1-10, 110, 90, 40, 0, 1, 0, "bitmaps/knobs/sliderblack.xpm", 0,
111         BRIGHTON_REVERSE|BRIGHTON_VERTICAL|BRIGHTON_NOSHADOW},
112 	{"Organ-4'", 1, C1-10, 180, 90, 40, 0, 1, 0, "bitmaps/knobs/sliderblack.xpm", 0,
113         BRIGHTON_REVERSE|BRIGHTON_VERTICAL|BRIGHTON_NOSHADOW},
114 	{"Organ-8'", 1, C1-10, 250, 90, 40, 0, 1, 0, "bitmaps/knobs/sliderblack.xpm", 0,
115         BRIGHTON_REVERSE|BRIGHTON_VERTICAL|BRIGHTON_NOSHADOW},
116 	{"Organ-15'", 1, C1-10, 320, 90, 40, 0, 1, 0, "bitmaps/knobs/sliderblack.xpm", 0,
117         BRIGHTON_REVERSE|BRIGHTON_VERTICAL|BRIGHTON_NOSHADOW},
118 
119 	/* Filter - 4 */
120 	{"Filter-Env", 0, C3, R1, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
121 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_NOTCH},
122 	{"Filter-Cutoff", 0, C4, R1, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
123 		"bitmaps/knobs/alpharotary.xpm", 0},
124 	{"Filter-Res", 0, C5, R1, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
125 		"bitmaps/knobs/alpharotary.xpm", 0},
126 	{"Filter-Pedal", 0, C6, R1, S1, S2, 0, 1.01, 0, "bitmaps/knobs/knob4.xpm",
127 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_STEPPED},
128 
129 	/* - 8 */
130 	{"Glide-Amout", 0, C7, R1, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
131 		"bitmaps/knobs/alpharotary.xpm", 0},
132 	{"Glide-Speed", 0, C8, R1, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
133 		"bitmaps/knobs/alpharotary.xpm", 0},
134 	{"Glide-Multi", 0, C9, R1, S1, S2, 0, 1.01, 0, "bitmaps/knobs/knob4.xpm",
135 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_STEPPED},
136 	{"Glide-Dir", 0, C10, R1, S1, S2, 0, 3, 0, "bitmaps/knobs/knob4.xpm",
137 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_STEPPED},
138 
139 	/* - 12 */
140 	{"Osc1-Tuning", 0, C11, R1, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
141 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_NOTCH},
142 	{"Osc1-Sync", 2, C11 + (D2*1), R1, S2b+4, S2-10, 0, 1, 0,
143 		"bitmaps/buttons/pressoff.xpm", "bitmaps/buttons/presson.xpm", 0},
144 	{"Osc1-Octave", 2, C11 + (D2*2), R1, S2b+4, S2-10, 0, 12, 0,
145 		"bitmaps/buttons/pressoff.xpm", "bitmaps/buttons/presson.xpm", 0},
146 
147 	/* - 15 */
148 	{"Osc2-Trill", 2, C11 + (D2*4) - 5, R1, S2b+4, S2-10, 0, 1, 0,
149 		"bitmaps/buttons/pressoff.xpm", "bitmaps/buttons/presson.xpm", 0},
150 	{"Osc2-Octave", 2, C11 + (D2*3) - 3, R1, S2b+4, S2-10, 0, 12, 0,
151 		"bitmaps/buttons/pressoff.xpm", "bitmaps/buttons/presson.xpm", 0},
152 	{"Osc2-Tuning", 0, C15, R1, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
153 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_NOTCH},
154 
155 	/* - 18 */
156 	{"LFO-Routing", 0, C16+5, R1, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
157 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_STEPPED|BRIGHTON_NOTCH},
158 	{"LFO-Muli", 0, C17 + D1 / 2, R1, S1, S2, 0, 1.01, 0, "bitmaps/knobs/knob4.xpm",
159 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_STEPPED},
160 	{"LFO-Waveform", 0, C19-5, R1, S1, S2, 0, 3, 0, "bitmaps/knobs/knob4.xpm",
161 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_STEPPED},
162 
163 	/* - 21 */
164 	{"Mix-Synth", 0, C1-5, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
165 		"bitmaps/knobs/alpharotary.xpm", 0},
166 	{"Mix-Organ", 0, C2-5, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
167 		"bitmaps/knobs/alpharotary.xpm", 0},
168 	{"Mix-String", 0, C3-5, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
169 		"bitmaps/knobs/alpharotary.xpm", 0},
170 
171 	/* - 24 String section */
172 	{"String-footage", 0, C4, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
173 		"bitmaps/knobs/alpharotary.xpm", 0},
174 	{"String-Timbre", 0, C5, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
175 		"bitmaps/knobs/alpharotary.xpm", 0},
176 	{"String-Attack", 0, C6, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
177 		"bitmaps/knobs/alpharotary.xpm", 0},
178 	{"String-Decay", 0, C7, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
179 		"bitmaps/knobs/alpharotary.xpm", 0},
180 
181 	/* - 28 */
182 	{"Osc-Waveform", 0, C8, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
183 		"bitmaps/knobs/alpharotary.xpm", 0},
184 	{"Osc-WaveAlt", 0, C9, R2, S1, S2, 0, 1.01, 0, "bitmaps/knobs/knob4.xpm",
185 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_STEPPED},
186 	{"Osc-WaveLegato", 0, C10, R2, S1, S2, 0, 1.01, 0, "bitmaps/knobs/knob4.xpm",
187 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_STEPPED},
188 
189 	/* - 31 */
190 	{"LFO-Rate", 0, C16, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
191 		"bitmaps/knobs/alpharotary.xpm", 0},
192 	{"LFO-Attack", 0, C17, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
193 		"bitmaps/knobs/alpharotary.xpm", 0},
194 	{"LFO-Delay", 0, C18, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
195 		"bitmaps/knobs/alpharotary.xpm", 0},
196 	{"LFO-Depth", 0, C19, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knobblue.xpm",
197 		"bitmaps/knobs/alpharotary.xpm", 0},
198 
199 	/* Dummies 12 - 35 */
200 	{"", 0, 0, 0, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
201 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
202 	{"", 0, 0, 0, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
203 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
204 	{"", 0, 0, 0, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
205 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
206 	{"", 0, 0, 0, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
207 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
208 	{"", 0, 0, 0, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
209 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
210 	{"", 0, 0, 0, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
211 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
212 	{"", 0, 0, 0, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
213 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
214 	{"", 0, 0, 0, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
215 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
216 	{"", 0, 0, 0, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
217 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
218 	{"", 0, 0, 0, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
219 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
220 	{"", 0, 0, 0, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
221 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
222 	{"", 0, 0, 0, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
223 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
224 
225 	/* These are shadows for the opts parameters - 47 */
226 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
227 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
228 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
229 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
230 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
231 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
232 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
233 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
234 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
235 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
236 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
237 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
238 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
239 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
240 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
241 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
242 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
243 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
244 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
245 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
246 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
247 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
248 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
249 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
250 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
251 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
252 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
253 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
254 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
255 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
256 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
257 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
258 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
259 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
260 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
261 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
262 	{"", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
263 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
264 
265 	/* These are shadows for the envelope parameters from the mod panel - 66 */
266 	{"Attack", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
267 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
268 	{"Decay", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
269 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
270 	{"Sustain", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
271 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
272 	{"Release", 0, 0, R2, S1, S2, 0, 1, 0, "bitmaps/knobs/knob4.xpm",
273 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
274 
275 	/* Memory - 40 */
276 	{"", 2, C11+(D3*1), R2a, S2b, S2c, 0, 1, 0, "bitmaps/buttons/pressoff.xpm",
277 		"bitmaps/buttons/presson.xpm", BRIGHTON_RADIOBUTTON},
278 	{"", 2, C11+(D3*2), R2a, S2b, S2c, 0, 1, 0, "bitmaps/buttons/pressoff.xpm",
279 		"bitmaps/buttons/presson.xpm", BRIGHTON_RADIOBUTTON},
280 	{"", 2, C11+(D3*3), R2a, S2b, S2c, 0, 1, 0, "bitmaps/buttons/pressoff.xpm",
281 		"bitmaps/buttons/presson.xpm", BRIGHTON_RADIOBUTTON},
282 	{"", 2, C11+(D3*4), R2a, S2b, S2c, 0, 1, 0, "bitmaps/buttons/pressoff.xpm",
283 		"bitmaps/buttons/presson.xpm", BRIGHTON_RADIOBUTTON},
284 
285 	{"", 2, C11+(D3*1), R2b, S2b, S2c, 0, 1, 0, "bitmaps/buttons/pressoff.xpm",
286 		"bitmaps/buttons/presson.xpm", BRIGHTON_RADIOBUTTON},
287 	{"", 2, C11+(D3*2), R2b, S2b, S2c, 0, 1, 0, "bitmaps/buttons/pressoff.xpm",
288 		"bitmaps/buttons/presson.xpm", BRIGHTON_RADIOBUTTON},
289 	{"", 2, C11+(D3*3), R2b, S2b, S2c, 0, 1, 0, "bitmaps/buttons/pressoff.xpm",
290 		"bitmaps/buttons/presson.xpm", BRIGHTON_RADIOBUTTON},
291 	{"", 2, C11+(D3*4), R2b, S2b, S2c, 0, 1, 0, "bitmaps/buttons/pressoff.xpm",
292 		"bitmaps/buttons/presson.xpm", BRIGHTON_RADIOBUTTON},
293 	/* Load and Save */
294 	{"", 2, C11+(D3*5), R2a, S2b, S2c, 0, 1, 0, "bitmaps/buttons/pressoffg.xpm",
295 		"bitmaps/buttons/pressong.xpm", BRIGHTON_CHECKBUTTON},
296 	{"", 2, C11+(D3*5), R2b, S2b, S2c, 0, 1, 0, "bitmaps/buttons/pressoffo.xpm",
297 		"bitmaps/buttons/pressono.xpm", BRIGHTON_CHECKBUTTON},
298 	/* Bank Sel */
299 	{"", 2, C11+(D3*0), R2a, S2b, S2c, 0, 1, 0, "bitmaps/buttons/pressoffg.xpm",
300 		"bitmaps/buttons/pressong.xpm", BRIGHTON_CHECKBUTTON},
301 	/* Mem search buttons Down then Up */
302 	{"", 2, C11+(D3*6), R2b, S2b, S2c, 0, 1, 0, "bitmaps/buttons/pressoff.xpm",
303 		"bitmaps/buttons/presson.xpm", BRIGHTON_CHECKBUTTON},
304 	{"", 2, C11+(D3*6), R2a, S2b, S2c, 0, 1, 0, "bitmaps/buttons/pressoff.xpm",
305 		"bitmaps/buttons/presson.xpm", BRIGHTON_CHECKBUTTON},
306 	/* Search Free */
307 	{"", 2, C11+(D3*0), R2b, S2b, S2c, 0, 1, 0, "bitmaps/buttons/pressoffg.xpm",
308 		"bitmaps/buttons/pressong.xpm", BRIGHTON_CHECKBUTTON},
309 
310 /* Midi, perhaps eventually file import/export buttons */
311 	{"", 2, C11+(D3*7), R2b, S2b, S2c, 0, 1, 0, "bitmaps/buttons/pressoffg.xpm",
312 		"bitmaps/buttons/pressong.xpm", BRIGHTON_CHECKBUTTON},
313 	{"", 2, C11+(D3*7), R2a, S2b, S2c, 0, 1, 0, "bitmaps/buttons/pressoffg.xpm",
314 		"bitmaps/buttons/pressong.xpm", BRIGHTON_CHECKBUTTON},
315 
316 	{"", 3, C11 + 30, R2a - 90, 165, 70, 0, 1, 0, 0,
317 		"bitmaps/images/alphadisplay3.xpm", 0}
318 };
319 
320 static brightonLocations trilogyOpts[19] = {
321 	/* First one is index 47 */
322 	{"", 0, C1, 100, 100, 100, 0, 1, 0, "bitmaps/knobs/smp.xpm",// Master vol
323 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_NOTCH},
324 	{"", 0, C1, 380, 100, 100, 0, 1, 0, "bitmaps/knobs/smp.xpm", // organ pan
325 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_NOTCH},
326 	{"", 0, C2 - 12, 380, 100, 100, 0, 1, 0, "bitmaps/knobs/smp.xpm", // o wave
327 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_NOTCH},
328 	{"", 0, C3, 380, 100, 100, 0, 1, 0, "bitmaps/knobs/smp.xpm", // o space
329 		"bitmaps/knobs/alpharotary.xpm", 0},
330 	{"", 0, C4 - 25, 470, 100, 100, 0, 1, 0, "bitmaps/knobs/smp.xpm", // o mod
331 		"bitmaps/knobs/alpharotary.xpm", 0},
332 
333 	{"", 0, 285, 32, 100, 100, 0, 1, 0, "bitmaps/knobs/smp.xpm", // SynHarm
334 		"bitmaps/knobs/alpharotary.xpm", 0},
335 
336 	/* 53 */
337 	{"", 2, C1 - 15, 500, 20, 110, 0, 1, 0, // clicky
338 		"bitmaps/buttons/touchoff.xpm",
339 		"bitmaps/buttons/touch.xpm", BRIGHTON_NOSHADOW},
340 
341 	{"", 0, C1 - 18, 650, 100, 100, 0, 1, 0, "bitmaps/knobs/smp.xpm", // O tune
342 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_NOTCH},
343 
344 	{"", 0, C7, 380, 100, 100, 0, 1, 0, "bitmaps/knobs/smp.xpm", // syn pan
345 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_NOTCH},
346 	{"", 0, C7+10, 670, 100, 100, 0, 1, 0, "bitmaps/knobs/smp.xpm", // syn tune
347 		"bitmaps/knobs/alpharotary.xpm", BRIGHTON_NOTCH},
348 	{"", 0, 285, 606, 100, 100, 0, 1, 0, "bitmaps/knobs/smp.xpm", // not used
349 		"bitmaps/knobs/alpharotary.xpm", 0},
350 	/* 58 */
351 	{"", 2, C8, 380, 20, 110, 0, 1, 0,
352 		"bitmaps/buttons/touchoff.xpm",
353 		"bitmaps/buttons/touch.xpm", BRIGHTON_NOSHADOW}, // Env touch
354 	{"", 2, C9 + 10, 380, 20, 110, 0, 4, 0,
355 		"bitmaps/buttons/touchoff.xpm",
356 		"bitmaps/buttons/touch.xpm", BRIGHTON_NOSHADOW}, // filter type
357 	{"", 0, C10, 475, 100, 100, 0, 1, 0, "bitmaps/knobs/smp.xpm",
358 		"bitmaps/knobs/alpharotary.xpm", 0},
359 
360 	/* 61 - string options */
361 	{"", 0, C13+8, 190, 100, 100, 0, 1, 0, "bitmaps/knobs/smp.xpm",
362 		"bitmaps/knobs/alpharotary.xpm", 0},
363 	{"", 0, C13+8, 490, 100, 100, 0, 1, 0, "bitmaps/knobs/smp.xpm",
364 		"bitmaps/knobs/alpharotary.xpm", 0},
365 	{"", 0, C13+20, 790, 100, 100, 0, 1, 0, "bitmaps/knobs/smp.xpm",
366 		"bitmaps/knobs/alpharotary.xpm", 0},
367 
368 	{"", 0, C14+18, 380, 100, 100, 0, 1, 0, "bitmaps/knobs/smp.xpm",
369 		"bitmaps/knobs/alpharotary.xpm", 0},
370 	{"", 0, C16-20, 450, S1, 100, 0, 1, 0, "bitmaps/knobs/smp.xpm",
371 		"bitmaps/knobs/alpharotary.xpm", 0},
372 };
373 
374 #define TRILOGY_MODCOUNT 7
375 static brightonLocations trilogyMods[TRILOGY_MODCOUNT] = {
376 	{"Attack", 1, 440, 180, 80, 700, 0, 1, 0,
377 		"bitmaps/knobs/sliderblack.xpm", 0, 0},
378 	{"Decay", 1, 580, 180, 80, 700, 0, 1, 0,
379 		"bitmaps/knobs/sliderblack.xpm", 0, 0},
380 	{"Sustain", 1, 720, 180, 80, 700, 0, 1, 0,
381 		"bitmaps/knobs/sliderblack.xpm", 0, 0},
382 	{"Release", 1, 860, 180, 80, 700, 0, 1, 0,
383 		"bitmaps/knobs/sliderblack.xpm", 0, 0},
384 
385 	/* View Opts button */
386 	{"", 2, 150, 800, 98, 170, 0, 1, 0, "bitmaps/buttons/pressoff.xpm",
387 		"bitmaps/buttons/presson.xpm", 0},
388 
389 	/* Joystick */
390 	{"", 5, 40, 160, 310, 500, 0, 1, 0, "bitmaps/images/sphere.xpm",
391 		0, BRIGHTON_WIDE},
392 	/* Joystick dummy */
393 	{"", 0, 0, 0, 10, 10, 0, 1, 0, "bitmaps/knobs/sliderblack.xpm",
394 		0, BRIGHTON_WITHDRAWN|BRIGHTON_NOSHADOW},
395 };
396 
397 /*
398  * This is a set of globals for the main window rendering. Again taken from
399  * include/brighton.h
400  */
401 brightonApp trilogyApp = {
402 	"trilogy",
403 	0, /* no blueprint on wood background. */
404 	"bitmaps/textures/metal6.xpm",
405 	BRIGHTON_STRETCH, /*flags */
406 	stratusInit,
407 	stratusConfigure, /* 3 callbacks, unused? */
408 	stratusMidiCallback,
409 	destroySynth,
410 	{5, 100, 1, 2, 5, 520, 0, 0},
411 	900, 385, 0, 0,
412 	7, /* Panel count */
413 	{
414 		{
415 			"TRILOGY",
416 			"bitmaps/blueprints/trilogy.xpm",
417 			"bitmaps/textures/metal6.xpm",
418 			BRIGHTON_STRETCH|BRIGHTON_REVERSE, /* flags */
419 			0,
420 			0,
421 			stratusCallback,
422 			20, 100, 960, 550,
423 			DEVICE_COUNT,
424 			trilogyLocations
425 		},
426 		{
427 			"Keyboard",
428 			0,
429 			"bitmaps/newkeys/kbg.xpm", /* flags */
430 			0x020|BRIGHTON_STRETCH,
431 			0,
432 			0,
433 			keyCallback,
434 			200, 690, 785, 290,
435 			KEY_COUNT,
436 			keys
437 		},
438 		{
439 			"Mods",
440 			"bitmaps/blueprints/trilogymods.xpm",
441 			"bitmaps/blueprints/trilogymods.xpm",
442 			BRIGHTON_STRETCH,
443 			0,
444 			0,
445 			stratusModCallback,
446 			30, 710, 160, 250,
447 			TRILOGY_MODCOUNT,
448 			trilogyMods
449 		},
450 		{
451 			"Options",
452 			"bitmaps/blueprints/trilogyopts.xpm",
453 			"bitmaps/images/pcb.xpm",
454 			BRIGHTON_WITHDRAWN,
455 			0,
456 			0,
457 			stratusModCallback,
458 			25, 105, 950, 540,
459 			19,
460 			trilogyOpts
461 		},
462 		{
463 			"Logo",
464 			"bitmaps/blueprints/trilogylogo.xpm",
465 			0,
466 			BRIGHTON_STRETCH, /*flags */
467 			0,
468 			0,
469 			0,
470 			20, 0, 960, 100,
471 			0,
472 			0
473 		},
474 		{
475 			"Edge",
476 			0,
477 			"bitmaps/textures/wood.xpm",
478 			BRIGHTON_STRETCH|BRIGHTON_VERTICAL, /* flags */
479 			0,
480 			0,
481 			0,
482 			0, 0, 20, 1000,
483 			0,
484 			0
485 		},
486 		{
487 			"Edge",
488 			0,
489 			"bitmaps/textures/wood.xpm",
490 			BRIGHTON_STRETCH|BRIGHTON_VERTICAL, /*flags */
491 			0,
492 			0,
493 			0,
494 			980, 0, 20, 1000,
495 			0,
496 			0
497 		},
498 	}
499 };
500 
501