source: buchla-68k/ram/adfield.c@ 7258c6a

Last change on this file since 7258c6a was 7258c6a, checked in by Thomas Lopatic <thomas@…>, 7 years ago

Use standard integer types.

  • Property mode set to 100644
File size: 13.4 KB
Line 
1/*
2 =============================================================================
3 adfield.c -- assignment display field processing and cursor motion
4 Version 24 -- 1989-11-15 -- D.N. Lynx Crowe
5 =============================================================================
6*/
7
8#include "stddefs.h"
9#include "fields.h"
10#include "vsdd.h"
11#include "graphdef.h"
12#include "charset.h"
13#include "hwdefs.h"
14#include "curpak.h"
15
16#include "midas.h"
17#include "asgdsp.h"
18
19extern void select(void);
20extern int16_t whatbox(void);
21extern void nokey(void);
22extern int16_t nonf(int16_t k);
23extern int16_t stdctp4(void);
24extern void cxkstd(void);
25extern void cykstd(void);
26extern void stdmkey(void);
27extern void stddkey(int16_t k);
28
29extern int16_t et_null(int16_t n);
30extern int16_t ef_null(int16_t n);
31extern int16_t rd_null(int16_t n);
32extern int16_t nd_null(int16_t n, int16_t k);
33extern int16_t et_atab(int16_t n);
34extern int16_t ef_atab(int16_t n);
35extern int16_t rd_atab(int16_t nn);
36extern int16_t nd_atab(int16_t nn, int16_t k);
37extern int16_t et_aopt(int16_t n);
38extern int16_t ef_aopt(int16_t n);
39extern int16_t rd_aopt(int16_t nn);
40extern int16_t nd_aopt(int16_t nn, int16_t k);
41extern int16_t et_avgr(int16_t nn);
42extern int16_t ef_avgr(int16_t nn);
43extern int16_t rd_avgr(int16_t nn);
44extern int16_t nd_avgr(int16_t nn, int16_t k);
45extern int16_t et_accn(int16_t n);
46extern int16_t ef_accn(int16_t n);
47extern int16_t rd_accn(int16_t nn);
48extern int16_t nd_accn(int16_t nn, int16_t k);
49extern int16_t et_agpt(int16_t n);
50extern int16_t ef_agpt(int16_t n);
51extern int16_t rd_agpt(int16_t nn);
52extern int16_t nd_agpt(int16_t nn, int16_t k);
53extern int16_t et_agch(int16_t n);
54extern int16_t ef_agch(int16_t n);
55extern int16_t rd_agch(int16_t nn);
56extern int16_t nd_agch(int16_t nn, int16_t k);
57extern int16_t et_ains(int16_t n);
58extern int16_t ef_ains(int16_t n);
59extern int16_t rd_ains(int16_t nn);
60extern int16_t nd_ains(int16_t nn, int16_t k);
61extern int16_t et_adyn(int16_t n);
62extern int16_t ef_adyn(int16_t n);
63extern int16_t rd_adyn(int16_t nn);
64extern int16_t nd_adyn(int16_t nn, int16_t k);
65extern int16_t et_atun(int16_t n);
66extern int16_t ef_atun(int16_t n);
67extern int16_t rd_atun(int16_t nn);
68extern int16_t nd_atun(int16_t nn, int16_t k);
69extern int16_t et_aprg(int16_t n);
70extern int16_t ef_aprg(int16_t n);
71extern int16_t rd_aprg(int16_t nn);
72extern int16_t nd_aprg(int16_t nn, int16_t k);
73extern int16_t et_aint(int16_t n);
74extern int16_t ef_aint(int16_t n);
75extern int16_t rd_aint(int16_t nn);
76extern int16_t nd_aint(int16_t nn, int16_t k);
77extern int16_t et_arat(int16_t n);
78extern int16_t ef_arat(int16_t n);
79extern int16_t rd_arat(int16_t nn);
80extern int16_t nd_arat(int16_t nn, int16_t k);
81extern int16_t et_adep(int16_t n);
82extern int16_t ef_adep(int16_t n);
83extern int16_t rd_adep(int16_t nn);
84extern int16_t nd_adep(int16_t nn, int16_t k);
85
86extern void vcputsv(int16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str, int16_t pitch);
87
88extern void *memset(void *vp, int8_t c, int16_t n);
89
90extern int16_t adnamsw;
91extern int16_t asgmod;
92extern int16_t astat;
93extern int16_t cmtype;
94extern int16_t cmfirst;
95extern int16_t curasg;
96extern int16_t curhold;
97extern int16_t curmop;
98extern int16_t curslim;
99extern int16_t cxval;
100extern int16_t cyval;
101extern int16_t cxrate;
102extern int16_t cyrate;
103extern int16_t hcwval;
104extern int16_t hitbox;
105extern int16_t hitcx;
106extern int16_t hitcy;
107extern int16_t stccol;
108extern int16_t stcrow;
109extern int16_t thcwval;
110extern int16_t tvcwval;
111extern int16_t vcwval;
112extern int16_t vtccol;
113extern int16_t vtcrow;
114extern int16_t vtwcol;
115extern int16_t vtwrow;
116extern int16_t vtxval;
117extern int16_t vtyval;
118
119extern int16_t crate1[];
120
121extern uint16_t *asgob;
122
123extern struct asgent asgtab[];
124
125extern struct selbox adboxes[];
126extern struct selbox *csbp;
127
128extern int16_t grp2prt[12][2];
129extern int16_t key2grp[];
130extern int16_t mctlnum[];
131extern int16_t vce2grp[];
132
133/* forward references */
134
135void adcxupd(void);
136void adcyupd(void);
137void ad_xkey(void);
138
139/*
140
141*/
142
143struct fet ad_fet1[] = { /* field definitions */
144
145 { 0, 9, 10, 0x0000, et_atab, ef_atab, rd_atab, nd_atab},
146
147 { 1, 1, 10, 0x0000, et_null, ef_null, rd_null, nd_null},
148
149 { 4, 10, 10, 0x0002, et_aopt, ef_aopt, rd_aopt, nd_aopt},
150
151 { 3, 9, 10, 0x0003, et_aprg, ef_aprg, rd_aprg, nd_aprg},
152
153 { 4, 15, 16, 0x0004, et_avgr, ef_avgr, rd_avgr, nd_avgr},
154 { 5, 15, 16, 0x0104, et_avgr, ef_avgr, rd_avgr, nd_avgr},
155 { 6, 15, 16, 0x0204, et_avgr, ef_avgr, rd_avgr, nd_avgr},
156 { 7, 15, 16, 0x0304, et_avgr, ef_avgr, rd_avgr, nd_avgr},
157 { 8, 15, 16, 0x0404, et_avgr, ef_avgr, rd_avgr, nd_avgr},
158 { 9, 15, 16, 0x0504, et_avgr, ef_avgr, rd_avgr, nd_avgr},
159 { 4, 21, 22, 0x0604, et_avgr, ef_avgr, rd_avgr, nd_avgr},
160 { 5, 21, 22, 0x0704, et_avgr, ef_avgr, rd_avgr, nd_avgr},
161 { 6, 21, 22, 0x0804, et_avgr, ef_avgr, rd_avgr, nd_avgr},
162 { 7, 21, 22, 0x0904, et_avgr, ef_avgr, rd_avgr, nd_avgr},
163 { 8, 21, 22, 0x0A04, et_avgr, ef_avgr, rd_avgr, nd_avgr},
164 { 9, 21, 22, 0x0B04, et_avgr, ef_avgr, rd_avgr, nd_avgr},
165
166 { 5, 35, 36, 0x0005, et_accn, ef_accn, rd_accn, nd_accn},
167 { 6, 35, 36, 0x0105, et_accn, ef_accn, rd_accn, nd_accn},
168 { 7, 35, 36, 0x0205, et_accn, ef_accn, rd_accn, nd_accn},
169 { 8, 35, 36, 0x0305, et_accn, ef_accn, rd_accn, nd_accn},
170
171 { 4, 46, 46, 0x0006, et_agpt, ef_agpt, rd_agpt, nd_agpt},
172 { 5, 46, 46, 0x0106, et_agpt, ef_agpt, rd_agpt, nd_agpt},
173 { 6, 46, 46, 0x0206, et_agpt, ef_agpt, rd_agpt, nd_agpt},
174 { 7, 46, 46, 0x0306, et_agpt, ef_agpt, rd_agpt, nd_agpt},
175 { 8, 46, 46, 0x0406, et_agpt, ef_agpt, rd_agpt, nd_agpt},
176 { 9, 46, 46, 0x0506, et_agpt, ef_agpt, rd_agpt, nd_agpt},
177 { 4, 59, 59, 0x0606, et_agpt, ef_agpt, rd_agpt, nd_agpt},
178 { 5, 59, 59, 0x0706, et_agpt, ef_agpt, rd_agpt, nd_agpt},
179 { 6, 59, 59, 0x0806, et_agpt, ef_agpt, rd_agpt, nd_agpt},
180 { 7, 59, 59, 0x0906, et_agpt, ef_agpt, rd_agpt, nd_agpt},
181 { 8, 59, 59, 0x0A06, et_agpt, ef_agpt, rd_agpt, nd_agpt},
182 { 9, 59, 59, 0x0B06, et_agpt, ef_agpt, rd_agpt, nd_agpt},
183
184 { 4, 48, 49, 0x0006, et_agch, ef_agch, rd_agch, nd_agch},
185 { 5, 48, 49, 0x0106, et_agch, ef_agch, rd_agch, nd_agch},
186 { 6, 48, 49, 0x0206, et_agch, ef_agch, rd_agch, nd_agch},
187 { 7, 48, 49, 0x0306, et_agch, ef_agch, rd_agch, nd_agch},
188 { 8, 48, 49, 0x0406, et_agch, ef_agch, rd_agch, nd_agch},
189 { 9, 48, 49, 0x0506, et_agch, ef_agch, rd_agch, nd_agch},
190 { 4, 61, 62, 0x0606, et_agch, ef_agch, rd_agch, nd_agch},
191 { 5, 61, 62, 0x0706, et_agch, ef_agch, rd_agch, nd_agch},
192 { 6, 61, 62, 0x0806, et_agch, ef_agch, rd_agch, nd_agch},
193 { 7, 61, 62, 0x0906, et_agch, ef_agch, rd_agch, nd_agch},
194 { 8, 61, 62, 0x0A06, et_agch, ef_agch, rd_agch, nd_agch},
195 { 9, 61, 62, 0x0B06, et_agch, ef_agch, rd_agch, nd_agch},
196
197 { 4, 41, 42, 0x0006, et_ains, ef_ains, rd_ains, nd_ains},
198 { 5, 41, 42, 0x0106, et_ains, ef_ains, rd_ains, nd_ains},
199 { 6, 41, 42, 0x0206, et_ains, ef_ains, rd_ains, nd_ains},
200 { 7, 41, 42, 0x0306, et_ains, ef_ains, rd_ains, nd_ains},
201 { 8, 41, 42, 0x0406, et_ains, ef_ains, rd_ains, nd_ains},
202 { 9, 41, 42, 0x0506, et_ains, ef_ains, rd_ains, nd_ains},
203 { 4, 54, 55, 0x0606, et_ains, ef_ains, rd_ains, nd_ains},
204 { 5, 54, 55, 0x0706, et_ains, ef_ains, rd_ains, nd_ains},
205 { 6, 54, 55, 0x0806, et_ains, ef_ains, rd_ains, nd_ains},
206 { 7, 54, 55, 0x0906, et_ains, ef_ains, rd_ains, nd_ains},
207 { 8, 54, 55, 0x0A06, et_ains, ef_ains, rd_ains, nd_ains},
208 { 9, 54, 55, 0x0B06, et_ains, ef_ains, rd_ains, nd_ains},
209
210 { 4, 44, 44, 0x0006, et_adyn, ef_adyn, rd_adyn, nd_adyn},
211 { 5, 44, 44, 0x0106, et_adyn, ef_adyn, rd_adyn, nd_adyn},
212 { 6, 44, 44, 0x0206, et_adyn, ef_adyn, rd_adyn, nd_adyn},
213 { 7, 44, 44, 0x0306, et_adyn, ef_adyn, rd_adyn, nd_adyn},
214 { 8, 44, 44, 0x0406, et_adyn, ef_adyn, rd_adyn, nd_adyn},
215 { 9, 44, 44, 0x0506, et_adyn, ef_adyn, rd_adyn, nd_adyn},
216 { 4, 57, 57, 0x0606, et_adyn, ef_adyn, rd_adyn, nd_adyn},
217 { 5, 57, 57, 0x0706, et_adyn, ef_adyn, rd_adyn, nd_adyn},
218 { 6, 57, 57, 0x0806, et_adyn, ef_adyn, rd_adyn, nd_adyn},
219 { 7, 57, 57, 0x0906, et_adyn, ef_adyn, rd_adyn, nd_adyn},
220 { 8, 57, 57, 0x0A06, et_adyn, ef_adyn, rd_adyn, nd_adyn},
221 { 9, 57, 57, 0x0B06, et_adyn, ef_adyn, rd_adyn, nd_adyn},
222
223 { 5, 10, 10, 0x0009, et_atun, ef_atun, rd_atun, nd_atun},
224
225 { 7, 9, 10, 0x000A, et_aint, ef_aint, rd_aint, nd_aint},
226 { 8, 9, 10, 0x000A, et_arat, ef_arat, rd_arat, nd_arat},
227 { 9, 9, 10, 0x000A, et_adep, ef_adep, rd_adep, nd_adep},
228
229 { 0, 0, 0, 0x0000, FN_NULL, FN_NULL, FN_NULL, FN_NULL}
230};
231
232/*
233
234*/
235
236int16_t adbox[][8] = { /* display box parameters */
237
238 { 1, 1, 94, 27, ACFBX00, ACBBX00, 0, 1}, /* 0 */
239 { 1, 28, 94, 40, ACFBX01, ACBBX01, 2, 1}, /* 1 */
240 { 1, 56, 94, 68, ACFBX02, ACBBX02, 4, 1}, /* 2 */
241 { 1, 42, 94, 54, ACFBX03, ACBBX03, 3, 1}, /* 3 */
242 { 96, 1, 190, 138, ACFBX04, ACBBX04, 0, 13}, /* 4 */
243 {192, 1, 302, 138, ACFBX05, ACBBX05, 0, 25}, /* 5 */
244 {304, 1, 510, 138, ACFBX06, ACBBX06, 0, 39}, /* 6 */
245 { 1, 140, 510, 348, ACFBX07, ACBBX07, 10, 1}, /* 7 */
246 { 1, 70, 38, 82, ACFBX08, ACBBX08, 5, 1}, /* 8 */
247 { 40, 70, 94, 82, ACFBX09, ACBBX09, 5, 6}, /* 9 */
248 { 1, 84, 94, 138, ACFBX10, ACBBX10, 6, 1} /* 10 */
249};
250
251int8_t *adbxlb[] = { /* display box labels */
252
253 "Asgnmnt", /* 0 */
254 "Stor/Fetch", /* 1 */
255 "MIDI out", /* 2 */
256 "PrgChng", /* 3 */
257 "Assignment", /* 4 */
258 "Assignmnt of" , /* 5 */
259 "Assignmnt of Instruments,", /* 6 */
260 "G Assignment of Keys to Groups for MIDI Port 1 G", /* 7 */
261 "", /* 8 */
262 "Tun", /* 9 */
263 "PhaseShift" /* 10 */
264};
265
266/*
267
268*/
269
270struct curpak ad_flds = {
271
272 stdctp4, /* curtype */
273 nokey, /* premove */
274 nokey, /* pstmove */
275 cxkstd, /* cx_key */
276 cykstd, /* cy_key */
277 adcxupd, /* cx_upd */
278 adcyupd, /* cy_upd */
279 nokey, /* xy_up */
280 nokey, /* xy_dn */
281 ad_xkey, /* x_key */
282 select, /* e_key */
283 stdmkey, /* m_key */
284 stddkey, /* d_key */
285 nonf, /* not_fld */
286 ad_fet1, /* curfet */
287 adboxes, /* csbp */
288 crate1, /* cratex */
289 crate1, /* cratey */
290 CT_GRAF, /* cmtype */
291 CTOX(0), /* cxval */
292 RTOY(9) /* cyval */
293};
294
295/*
296
297*/
298
299/*
300 =============================================================================
301 adcyupd() -- update cursor y location
302 =============================================================================
303*/
304
305void adcyupd(void)
306{
307 if (adnamsw) {
308
309 vtcrow = YTOR(vtyval += cyrate);
310
311 if (vtcrow > (vtwrow + 2))
312 vtyval = RTOY(vtcrow = vtwrow + 2);
313 else if (vtcrow < vtwrow)
314 vtyval = RTOY(vtcrow = vtwrow);
315
316 } else {
317
318 cyval += cyrate;
319
320 if (cyval GT (CYMAX - 1))
321 cyval = CYMAX - 1;
322 else if (cyval LT 1)
323 cyval = 1;
324 }
325}
326
327/*
328 =============================================================================
329 adcxupd() -- update cursor x location
330 =============================================================================
331*/
332
333void adcxupd(void)
334{
335 if (adnamsw) {
336
337 vtccol = XTOC(vtxval += cxrate);
338
339 if (vtccol > (vtwcol + 29))
340 vtxval = CTOX(vtccol = vtwcol + 29);
341 else if (vtccol < vtwcol)
342 vtxval = CTOX(vtccol = vtwcol);
343
344 } else {
345
346 cxval += cxrate;
347
348 if (cxval GT (CXMAX - 1))
349 cxval = CXMAX - 1;
350 else if (cxval LT 1)
351 cxval = 1;
352 }
353}
354
355/*
356
357*/
358
359/*
360 =============================================================================
361 ad_xkey() -- process the X key
362 =============================================================================
363*/
364
365void ad_xkey(void)
366{
367 register int16_t row, col, grp, i;
368
369 if (astat) {
370
371 if (whatbox()) {
372
373 row = hitcy / 14;
374 col = hitcx >> 3;
375
376 switch (hitbox) {
377
378 case 0: /* name */
379
380 if (row EQ 1) {
381
382 memset(asgtab[curasg].a_name, ' ', 16);
383 asgmod = TRUE;
384 adswin(0);
385 return; /* SUCCESS */
386
387 } else
388 return; /* FAILURE */
389 case 2: /* MIDI output port */
390
391 if ((col GE 1) AND (col LE 10)) {
392
393 curmop = 0;
394 adswin(hitbox);
395 modasg();
396 return; /* SUCCESS */
397 }
398
399 break;
400/*
401
402*/
403 case 4: /* voice to group */
404
405 if (row LT 4)
406 break;
407
408 if ((col GE 13) AND (col LE 16)) {
409
410 grp = row - 4;
411 vce2grp[grp] = -1;
412 adswin(hitbox);
413 modasg();
414 return; /* SUCCESS */
415
416 } else if ((col GE 19) AND (col LE 22)) {
417
418 grp = row + 2;
419 vce2grp[grp] = -1;
420 adswin(hitbox);
421 modasg();
422 return; /* SUCCESS */
423 }
424
425 break;
426
427 case 5: /* controller number */
428
429 if ((row LT 5) OR (row GT 8))
430 break;
431
432 if ((col EQ 35) OR (col EQ 36)) {
433
434 mctlnum[row - 5] = -1;
435 adswin(hitbox);
436 modasg();
437 return; /* SUCCESS */
438 }
439
440 break;
441/*
442
443*/
444 case 6: /* port or channel */
445
446 if (row LT 4)
447 break;
448
449 if (col EQ 46 ) {
450
451 /* port */
452
453 grp = row - 4;
454 grp2prt[grp][0] = 0;
455
456 for (i = 0; i < 88; i++)
457 key2grp[i] &= ~(0x0001 << grp);
458
459 adswin(hitbox);
460 drawk2g(grp);
461 modasg();
462 return; /* SUCCESS */
463
464 } else if ((col EQ 48) OR (col EQ 49)) {
465
466 /* channel */
467
468 grp = row - 4;
469 grp2prt[grp][1] = -1;
470 adswin(hitbox);
471 modasg();
472 return; /* SUCCESS */
473/*
474
475*/
476 } else if (col EQ 59) {
477
478 /* port */
479
480 grp = row + 2;
481 grp2prt[grp][0] = 0;
482
483 for (i = 0; i < 88; i++)
484 key2grp[i] &= ~(0x0001 << grp);
485
486 adswin(hitbox);
487 drawk2g(grp);
488 modasg();
489 return; /* SUCCESS */
490
491 } else if ((col EQ 61) OR (col EQ 62)) {
492
493 /* channel */
494
495 grp = row + 2;
496 grp2prt[grp][1] = -1;
497 adswin(hitbox);
498 modasg();
499 return; /* SUCCESS */
500 }
501
502 break;
503 }
504 }
505 }
506
507 return; /* FAILURE */
508}
509
510/*
511
512*/
513
514/*
515 =============================================================================
516 adfield() -- setup field routines for the assignment editor
517 =============================================================================
518*/
519
520void adfield(void)
521{
522 curslim = 140;
523
524 curset(&ad_flds);
525}
Note: See TracBrowser for help on using the repository browser.