source: buchla-68k/ram/scfield.c@ e225e77

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

Added missing includes and declarations.

  • Property mode set to 100644
File size: 24.1 KB
Line 
1/*
2 =============================================================================
3 scfield.c -- score editor field setup
4 Version 62 -- 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 "hwdefs.h"
13#include "panel.h"
14#include "macros.h"
15#include "score.h"
16#include "scfns.h"
17#include "curpak.h"
18
19#include "midas.h"
20#include "scdsp.h"
21
22#define PCENTER 256L
23
24/* functions defined elsewhere */
25
26extern void *memset(void *vp, int8_t c, int16_t n);
27
28extern void cxkstd(void);
29extern void cykstd(void);
30extern void select(void);
31extern int16_t oktode(struct s_entry *ep);
32extern int16_t stdctp3(void);
33extern void stddkey(int16_t k);
34extern void nokey(void);
35extern void stdmkey(void);
36
37extern int16_t et_strn(int16_t n);
38extern int16_t ef_strn(int16_t n);
39extern int16_t rd_strn(int16_t n);
40extern int16_t nd_strn(int16_t n, int16_t k);
41extern int16_t et_snbt(int16_t n);
42extern int16_t ef_snbt(int16_t n);
43extern int16_t rd_snbt(int16_t n);
44extern int16_t nd_snbt(int16_t n, int16_t k);
45
46extern int16_t et_ioas(int16_t n);
47extern int16_t ef_ioas(int16_t n);
48extern int16_t rd_ioas(int16_t n);
49extern int16_t nd_ioas(int16_t n, int16_t k);
50extern int16_t et_tune(int16_t n);
51extern int16_t ef_tune(int16_t n);
52extern int16_t rd_tune(int16_t n);
53extern int16_t nd_tune(int16_t n, int16_t k);
54extern int16_t et_tmpo(int16_t n);
55extern int16_t ef_tmpo(int16_t n);
56extern int16_t rd_tmpo(int16_t n);
57extern int16_t nd_tmpo(int16_t n, int16_t k);
58extern int16_t et_intp(int16_t n);
59extern int16_t ef_intp(int16_t n);
60extern int16_t rd_intp(int16_t n);
61extern int16_t nd_intp(int16_t n, int16_t k);
62
63extern int16_t et_inst(int16_t n);
64extern int16_t ef_inst(int16_t n);
65extern int16_t rd_inst(int16_t n);
66extern int16_t nd_inst(int16_t n, int16_t k);
67extern int16_t et_trns(int16_t n);
68extern int16_t ef_trns(int16_t n);
69extern int16_t rd_trns(int16_t n);
70extern int16_t nd_trns(int16_t n, int16_t k);
71extern int16_t et_dyn(int16_t n);
72extern int16_t ef_dyn(int16_t n);
73extern int16_t rd_dyn(int16_t n);
74extern int16_t nd_dyn(int16_t n, int16_t k);
75extern int16_t et_loc(int16_t n);
76extern int16_t ef_loc(int16_t n);
77extern int16_t rd_loc(int16_t n);
78extern int16_t nd_loc(int16_t n, int16_t k);
79extern int16_t et_vel(int16_t n);
80extern int16_t ef_vel(int16_t n);
81extern int16_t rd_vel(int16_t n);
82extern int16_t nd_vel(int16_t n, int16_t k);
83
84extern int16_t et_res1(int16_t n);
85extern int16_t ef_res1(int16_t n);
86extern int16_t rd_res1(int16_t n);
87extern int16_t nd_res1(int16_t n, int16_t k);
88extern int16_t et_aval(int16_t n);
89extern int16_t ef_aval(int16_t n);
90extern int16_t rd_aval(int16_t n);
91extern int16_t nd_aval(int16_t n, int16_t k);
92extern int16_t et_agrp(int16_t n);
93extern int16_t ef_agrp(int16_t n);
94extern int16_t rd_agrp(int16_t n);
95extern int16_t nd_agrp(int16_t n, int16_t k);
96
97extern int16_t et_scor(int16_t n);
98extern int16_t ef_scor(int16_t n);
99extern int16_t rd_scor(int16_t n);
100extern int16_t nd_scor(int16_t n, int16_t k);
101
102/* forward references */
103
104int16_t et_null(int16_t n);
105int16_t ef_null(int16_t n);
106int16_t rd_null(int16_t n);
107int16_t nd_null(int16_t n, int16_t k);
108void sdcxu(void);
109void sdcyu(void);
110void sdxkey(void);
111void sdmkey(void);
112int16_t scntfld(int16_t k);
113
114extern int16_t delnote(void);
115extern int16_t sc_refr(int32_t t);
116extern void curset(struct curpak *s);
117extern void ds_anrs(void);
118extern void ds_anvl(void);
119extern void dsgmode(int16_t n);
120extern void dsgstat(int16_t n);
121extern void dsgtme(int16_t n);
122extern void dsvmode(int16_t n);
123extern void dswin(int16_t n);
124extern void sdmenu(int16_t n);
125extern void vtcxupd(void);
126extern void vtcyupd(void);
127
128/*
129
130*/
131
132/* variables defined elsewhere */
133
134extern int16_t ancmsw;
135extern int16_t angroup;
136extern int16_t astat;
137extern int16_t clkrun;
138extern int16_t cmfirst;
139extern int16_t cmtype;
140extern int16_t curhold;
141extern int16_t curscor;
142extern int16_t cxrate;
143extern int16_t cxval;
144extern int16_t cyrate;
145extern int16_t cyval;
146extern int16_t ebflag;
147extern int16_t hcwval;
148extern int16_t insmode;
149extern int16_t oldpk;
150extern int16_t oldsl;
151extern int16_t pkctrl;
152extern int16_t recsw;
153extern int16_t scmctl;
154extern int16_t sdmctl;
155extern int16_t sliders;
156extern int16_t stccol;
157extern int16_t stcrow;
158extern int16_t thcwval;
159extern int16_t tvcwval;
160extern int16_t vcwval;
161extern int16_t vtccol;
162extern int16_t vtcrow;
163extern int16_t vtxval;
164extern int16_t vtyval;
165
166extern int32_t ctime;
167extern int32_t t_ins;
168
169extern int8_t ebuf[MAXEBUF+1];
170
171extern int16_t crate1[];
172extern int16_t ehdlist[];
173extern int16_t grpmode[];
174extern int16_t grpstat[];
175extern int16_t grptmap[];
176extern int16_t sdmlim[][4];
177extern int16_t varmode[8][16];
178
179extern LPF (*swpt)[];
180extern LPF (*oldsw)[];
181
182extern struct fet *cfetp;
183extern struct fet *curfet;
184extern struct fet *infetp;
185
186extern struct selbox *csbp;
187
188extern struct selbox sdboxes[];
189
190extern struct s_entry *peg;
191
192/*
193
194*/
195
196struct fet sc_fet1[] = {
197
198 { 0, 2, 4, 0x0000, et_strn, ef_strn, rd_strn, nd_strn},
199 { 0, 11, 15, 0x0000, et_snbt, ef_snbt, rd_snbt, nd_snbt},
200
201 {17, 11, 12, 0x0000, et_ioas, ef_ioas, rd_ioas, nd_ioas},
202 {17, 19, 19, 0x0000, et_tune, ef_tune, rd_tune, nd_tune},
203 {17, 27, 29, 0x0000, et_tmpo, ef_tmpo, rd_tmpo, nd_tmpo},
204 {17, 35, 38, 0x0000, et_intp, ef_intp, rd_intp, nd_intp},
205
206 {18, 7, 8, 0, et_inst, ef_inst, rd_inst, nd_inst},
207 {18, 12, 13, 1, et_inst, ef_inst, rd_inst, nd_inst},
208 {18, 17, 18, 2, et_inst, ef_inst, rd_inst, nd_inst},
209 {18, 22, 23, 3, et_inst, ef_inst, rd_inst, nd_inst},
210 {18, 27, 28, 4, et_inst, ef_inst, rd_inst, nd_inst},
211 {18, 32, 33, 5, et_inst, ef_inst, rd_inst, nd_inst},
212 {18, 37, 38, 6, et_inst, ef_inst, rd_inst, nd_inst},
213 {18, 42, 43, 7, et_inst, ef_inst, rd_inst, nd_inst},
214 {18, 47, 48, 8, et_inst, ef_inst, rd_inst, nd_inst},
215 {18, 52, 53, 9, et_inst, ef_inst, rd_inst, nd_inst},
216 {18, 57, 58, 10, et_inst, ef_inst, rd_inst, nd_inst},
217 {18, 62, 63, 11, et_inst, ef_inst, rd_inst, nd_inst},
218
219 {19, 5, 8, 0, et_trns, ef_trns, rd_trns, nd_trns},
220 {19, 10, 13, 1, et_trns, ef_trns, rd_trns, nd_trns},
221 {19, 15, 18, 2, et_trns, ef_trns, rd_trns, nd_trns},
222 {19, 20, 23, 3, et_trns, ef_trns, rd_trns, nd_trns},
223 {19, 25, 28, 4, et_trns, ef_trns, rd_trns, nd_trns},
224 {19, 30, 33, 5, et_trns, ef_trns, rd_trns, nd_trns},
225 {19, 35, 38, 6, et_trns, ef_trns, rd_trns, nd_trns},
226 {19, 40, 43, 7, et_trns, ef_trns, rd_trns, nd_trns},
227 {19, 45, 48, 8, et_trns, ef_trns, rd_trns, nd_trns},
228 {19, 50, 53, 9, et_trns, ef_trns, rd_trns, nd_trns},
229 {19, 55, 58, 10, et_trns, ef_trns, rd_trns, nd_trns},
230 {19, 60, 63, 11, et_trns, ef_trns, rd_trns, nd_trns},
231
232/*
233
234*/
235
236 {20, 6, 6, 0, et_dyn, ef_dyn, rd_dyn, nd_dyn},
237 {20, 8, 8, 0, et_loc, ef_loc, rd_loc, nd_loc},
238
239 {20, 11, 11, 1, et_dyn, ef_dyn, rd_dyn, nd_dyn},
240 {20, 13, 13, 1, et_loc, ef_loc, rd_loc, nd_loc},
241
242 {20, 16, 16, 2, et_dyn, ef_dyn, rd_dyn, nd_dyn},
243 {20, 18, 18, 2, et_loc, ef_loc, rd_loc, nd_loc},
244
245 {20, 21, 21, 3, et_dyn, ef_dyn, rd_dyn, nd_dyn},
246 {20, 23, 23, 3, et_loc, ef_loc, rd_loc, nd_loc},
247
248 {20, 26, 26, 4, et_dyn, ef_dyn, rd_dyn, nd_dyn},
249 {20, 28, 28, 4, et_loc, ef_loc, rd_loc, nd_loc},
250
251 {20, 31, 31, 5, et_dyn, ef_dyn, rd_dyn, nd_dyn},
252 {20, 33, 33, 5, et_loc, ef_loc, rd_loc, nd_loc},
253
254 {20, 36, 36, 6, et_dyn, ef_dyn, rd_dyn, nd_dyn},
255 {20, 38, 38, 6, et_loc, ef_loc, rd_loc, nd_loc},
256
257 {20, 41, 41, 7, et_dyn, ef_dyn, rd_dyn, nd_dyn},
258 {20, 43, 43, 7, et_loc, ef_loc, rd_loc, nd_loc},
259
260 {20, 46, 46, 8, et_dyn, ef_dyn, rd_dyn, nd_dyn},
261 {20, 48, 48, 8, et_loc, ef_loc, rd_loc, nd_loc},
262
263 {20, 51, 51, 9, et_dyn, ef_dyn, rd_dyn, nd_dyn},
264 {20, 53, 53, 9, et_loc, ef_loc, rd_loc, nd_loc},
265
266 {20, 56, 56, 10, et_dyn, ef_dyn, rd_dyn, nd_dyn},
267 {20, 58, 58, 10, et_loc, ef_loc, rd_loc, nd_loc},
268
269 {20, 61, 61, 11, et_dyn, ef_dyn, rd_dyn, nd_dyn},
270 {20, 63, 63, 11, et_loc, ef_loc, rd_loc, nd_loc},
271
272/*
273
274*/
275
276 {21, 6, 8, 0, et_vel, ef_vel, rd_vel, nd_vel},
277 {21, 11, 13, 1, et_vel, ef_vel, rd_vel, nd_vel},
278 {21, 16, 18, 2, et_vel, ef_vel, rd_vel, nd_vel},
279 {21, 21, 23, 3, et_vel, ef_vel, rd_vel, nd_vel},
280 {21, 26, 28, 4, et_vel, ef_vel, rd_vel, nd_vel},
281 {21, 31, 33, 5, et_vel, ef_vel, rd_vel, nd_vel},
282 {21, 36, 38, 6, et_vel, ef_vel, rd_vel, nd_vel},
283 {21, 41, 43, 7, et_vel, ef_vel, rd_vel, nd_vel},
284 {21, 46, 48, 8, et_vel, ef_vel, rd_vel, nd_vel},
285 {21, 51, 53, 9, et_vel, ef_vel, rd_vel, nd_vel},
286 {21, 56, 58, 10, et_vel, ef_vel, rd_vel, nd_vel},
287 {21, 61, 63, 11, et_vel, ef_vel, rd_vel, nd_vel},
288
289
290 {23, 6, 6, 0, et_res1, ef_res1, rd_res1, nd_res1},
291 {23, 8, 12, 0, et_aval, ef_aval, rd_aval, nd_aval},
292
293 {23, 15, 15, 1, et_res1, ef_res1, rd_res1, nd_res1},
294 {23, 17, 21, 1, et_aval, ef_aval, rd_aval, nd_aval},
295
296 {23, 24, 24, 2, et_res1, ef_res1, rd_res1, nd_res1},
297 {23, 26, 30, 2, et_aval, ef_aval, rd_aval, nd_aval},
298
299 {23, 33, 33, 3, et_res1, ef_res1, rd_res1, nd_res1},
300 {23, 35, 39, 3, et_aval, ef_aval, rd_aval, nd_aval},
301
302 {23, 42, 42, 4, et_res1, ef_res1, rd_res1, nd_res1},
303 {23, 44, 48, 4, et_aval, ef_aval, rd_aval, nd_aval},
304
305 {23, 51, 51, 5, et_res1, ef_res1, rd_res1, nd_res1},
306 {23, 53, 57, 5, et_aval, ef_aval, rd_aval, nd_aval},
307
308 {23, 61, 62, 0, et_agrp, ef_agrp, rd_agrp, nd_agrp},
309
310 {24, 7, 8, 0x0000, et_scor, ef_scor, rd_scor, nd_scor},
311 {24, 10, 25, 0x0000, et_null, ef_null, rd_null, nd_null},
312
313
314 { 0, 0, 0, 0x0000, FN_NULL, FN_NULL, FN_NULL, FN_NULL}
315};
316
317/*
318
319*/
320
321struct curpak sc_flds = {
322
323 stdctp3, /* curtype */
324 nokey, /* premove */
325 nokey, /* pstmove */
326 cxkstd, /* cx_key */
327 cykstd, /* cy_key */
328 sdcxu, /* cx_upd */
329 sdcyu, /* cy_upd */
330 nokey, /* xy_up */
331 nokey, /* xy_dn */
332 sdxkey, /* x_key */
333 select, /* e_key */
334 sdmkey, /* m_key */
335 stddkey, /* d_key */
336 scntfld, /* not_fld */
337 sc_fet1, /* curfet */
338 sdboxes, /* csbp */
339 crate1, /* cratex */
340 crate1, /* cratey */
341 CT_GRAF, /* cmtype */
342 C1X, /* cxval */
343 C1Y /* cyval */
344};
345
346/*
347
348*/
349
350/*
351 =============================================================================
352 et_null() .. nd_null() -- null data entry key processors
353 =============================================================================
354*/
355
356int16_t et_null(int16_t n)
357{
358 return(SUCCESS);
359}
360
361int16_t ef_null(int16_t n)
362{
363 return(SUCCESS);
364}
365
366int16_t rd_null(int16_t n)
367{
368 return(SUCCESS);
369}
370
371int16_t nd_null(int16_t n, int16_t k)
372{
373 return(SUCCESS);
374}
375
376/*
377
378*/
379
380/*
381 =============================================================================
382 istart() -- start insert mode
383 =============================================================================
384*/
385
386void istart(void)
387{
388 register struct s_entry *ep, *pp, *tp;
389
390 if (insmode) /* can't already be inserting */
391 return;
392
393 ep = ep_adj(p_cur, 1, t_cur); /* locate tail */
394
395 if (EV_SCORE EQ (0x007F & ep->e_type)) /* skip begin score event */
396 ep = ep->e_fwd;
397
398 if (EV_FINI EQ (0x007F & ep->e_type)) /* null if at end of score */
399 return;
400
401 tp = scores[curscor]->e_bak; /* locate end of score */
402 pp = ep->e_bak; /* locate end of head */
403
404 ep->e_bak = E_NULL; /* unhook tail from head */
405 pp->e_fwd = tp; /* unhook head from tail */
406 (tp->e_bak)->e_fwd = E_NULL; /* unhook tail from end */
407
408 tp->e_bak = pp; /* connect end to head */
409
410 t_ins = t_cur; /* record tail time */
411 peg = ep; /* hang tail on peg */
412
413 p_cur = ep_adj(pp, 0, t_cur); /* adjust p_cur */
414 p_ctr = p_cur; /* adjust p_ctr */
415 p_bak = ep_adj(p_cur, 0, t_bak); /* adjust p_bak */
416 p_fwd = ep_adj(p_cur, 0, t_fwd); /* adjust p_fwd */
417
418 insmode = TRUE;
419}
420
421/*
422
423*/
424
425/*
426 =============================================================================
427 icancel() -- cancel insert mode
428 =============================================================================
429*/
430
431void icancel(void)
432{
433 register struct s_entry *ep, *tp, *rp;
434 struct s_entry *pp;
435 int32_t endtime;
436
437 if (NOT insmode)
438 return;
439
440 tp = scores[curscor]->e_bak; /* locate end of score */
441 pp = tp->e_bak; /* locate end of head */
442
443 endtime = pp->e_time; /* find last time in score */
444
445 if (t_cur > endtime) /* use max of t_cur, endtime */
446 endtime = t_cur;
447
448 rp = peg; /* point at start of tail */
449
450 while (E_NULL NE rp) { /* scan each event in the tail */
451
452 ep = rp; /* update pointers */
453 rp = ep->e_fwd;
454
455 ep->e_time = (ep->e_time - t_ins) + endtime; /* adjust time */
456 }
457
458 ep->e_fwd = tp; /* connect tail to end */
459 tp->e_bak = ep; /* connect end to tail */
460
461 pp->e_fwd = peg; /* connect head to tail */
462 peg->e_bak = pp; /* connect tail to head */
463
464 p_cur = ep_adj(pp, 0, t_cur); /* adjust p_cur */
465 p_ctr = p_cur; /* adjust p_ctr */
466 p_bak = ep_adj(p_cur, 0, t_bak); /* adjust p_bak */
467 p_fwd = ep_adj(p_cur, 0, t_fwd); /* adjust p_fwd */
468
469 insmode = FALSE;
470}
471
472/*
473
474*/
475
476/*
477 =============================================================================
478 sdcxu() -- score cursor x update processing
479 =============================================================================
480*/
481
482void sdcxu(void)
483{
484 if (sdmctl EQ 0) { /* typewriter up */
485
486 vtcxupd();
487
488 } else if (sdmctl > 0) { /* menu up */
489
490 vtccol = XTOC(vtxval += cxrate);
491
492 if (vtccol > sdmlim[sdmctl][3])
493 vtxval = CTOX(vtccol = sdmlim[sdmctl][3]);
494 else if (vtccol < sdmlim[sdmctl][1])
495 vtxval = CTOX(vtccol = sdmlim[sdmctl][1]);
496
497 } else { /* no menu showing */
498
499 cxval += cxrate;
500
501 if (cxval > CXMAX)
502 cxval = CXMAX;
503 else if (cxval < 0)
504 cxval = 0;
505 }
506
507 return;
508}
509
510/*
511
512*/
513
514/*
515 =============================================================================
516 sdcyu() -- score cursor y update processing
517 =============================================================================
518*/
519
520void sdcyu(void)
521{
522 if (sdmctl EQ 0) {
523
524 vtcyupd();
525
526 } else if (sdmctl > 0) { /* menu up */
527
528 vtcrow = YTOR(vtyval += cyrate);
529
530 if (vtcrow < sdmlim[sdmctl][0])
531 vtyval = RTOY(vtcrow = sdmlim[sdmctl][0]);
532 else if (vtcrow > sdmlim[sdmctl][2])
533 vtyval = RTOY(vtcrow = sdmlim[sdmctl][2]);
534
535 } else { /* no menu showing */
536
537 cyval += cyrate;
538
539 if (cyval > CYMAX)
540 cyval = CYMAX;
541 else if (cyval < 0)
542 cyval = 0;
543
544 }
545
546 return;
547}
548
549/*
550
551*/
552
553/*
554 =============================================================================
555 scntfld() -- not-in-field data entry key processing
556 =============================================================================
557*/
558
559int16_t scntfld(int16_t k)
560{
561 register int16_t grp, fnc, var;
562
563 if (NOT astat)
564 return(FAILURE);
565
566 if (stcrow EQ 18) { /* group status or mode */
567
568 if (stccol LT 5)
569 return(FAILURE);
570
571 grp = (stccol - 5) / 5; /* group */
572 fnc = (stccol - 5) % 5; /* status or mode */
573
574 if (fnc EQ 0) { /* status */
575
576 if (k EQ 8) { /* '-' */
577
578 grpstat[grp] = FALSE;
579 dsgstat(grp);
580 return(SUCCESS);
581
582 } else if (k EQ 9) { /* '+' */
583
584 grpstat[grp] = TRUE;
585 dsgstat(grp);
586 return(SUCCESS);
587
588 } else
589 return(FAILURE);
590/*
591
592*/
593 } else if (fnc EQ 1) { /* mode */
594
595 if (k EQ 8) { /* '-' */
596
597 grpmode[grp] = 0;
598 dsgmode(grp);
599 return(SUCCESS);
600
601 } else if (k EQ 9) { /* '+' */
602
603 if (++grpmode[grp] GT 1)
604 grpmode[grp] = 2;
605
606 dsgmode(grp);
607 return(SUCCESS);
608
609 } else
610 return(FAILURE);
611
612 } else
613 return(FAILURE);
614/*
615
616*/
617 } else if (stcrow EQ 22) { /* analog variables */
618
619 if (stccol < 5)
620 return(FAILURE);
621
622 var = (stccol - 5) / 9; /* variable */
623 fnc = (stccol - 5) % 9; /* field column */
624 grp = abs(angroup) - 1; /* group */
625
626 if (fnc EQ 0) { /* mode column */
627
628 if (k EQ 8) { /* '-' */
629
630 varmode[var][grp] = 0;
631 dsvmode(var);
632 return(SUCCESS);
633
634 } else if (k EQ 9) { /* '+' */
635
636 if (++varmode[var][grp] GT 1)
637 varmode[var][grp] = 2;
638
639 dsvmode(var);
640 return(SUCCESS);
641 }
642 }
643 }
644
645 return(FAILURE);
646}
647
648/*
649
650*/
651
652/*
653 =============================================================================
654 cp2time() -- check cursor position and convert it to time
655
656 Sets 'ctime' if the cursor x argument, 'cx', is within the score.
657 =============================================================================
658*/
659
660int16_t cp2time(int16_t cx)
661{
662 register int32_t ct;
663
664 ct = t_cur + ((int32_t)cx - PCENTER);
665
666 if (ct < 0L) /* if out of score time range */
667 return(FALSE); /* ... return FALSE */
668
669 ctime = ct; /* set ctime */
670 return(TRUE); /* ... and return TRUE */
671}
672
673/*
674
675*/
676
677/*
678 =============================================================================
679 delevts() -- delete record enabled non-note events at current time
680 =============================================================================
681*/
682
683int16_t delevts(int16_t etp, int32_t thetime)
684{
685 register struct s_entry *ep, *np;
686 register int16_t et;
687 register int16_t rc;
688 register int16_t dsw;
689
690 rc = FALSE; /* intialize return code */
691
692 ep = ep_adj(p_cur, 1, thetime); /* start at left end of chain */
693
694/*
695
696*/
697 while (ep->e_time EQ thetime) { /* for each event at ctime ... */
698
699 np = ep->e_fwd; /* get next event pointer */
700 et = 0x007F & ep->e_type; /* get type */
701 dsw = oktode(ep); /* get deletion status */
702
703 if (dsw AND /* delete event if it's deletable ... */
704 ((etp EQ -1) OR (et EQ etp))) { /* ... and the right kind */
705
706 rc = TRUE;
707
708 if (-1 NE ehdlist[et]) /* if this is a header event ... */
709 eh_rmv(ep, ehdlist[et]); /* remove from hdr list */
710
711 /* fix up any effected pointers */
712
713 if (p_bak EQ ep)
714 p_bak = np;
715
716 if (p_cur EQ ep)
717 p_cur = np;
718
719 if (p_ctr EQ ep)
720 p_ctr = np;
721
722 if (p_fwd EQ ep)
723 p_fwd = np;
724
725 e_del(e_rmv(ep)); /* delete the event */
726 }
727
728 ep = np;
729 }
730
731 if (rc) /* if anything was deleted ... */
732 sc_refr(t_cur); /* ... update the display */
733
734 return(rc);
735}
736
737/*
738
739*/
740
741/*
742 =============================================================================
743 deladat() -- delete analog varaible data
744 =============================================================================
745*/
746
747int16_t deladat(void)
748{
749 register struct s_entry *ep, *rp;
750 register int16_t grp, rc, var, vc, vn;
751
752 rc = FALSE;
753
754 if (stccol < 6) /* pointing at var ? */
755 return(rc);
756
757 vn = (stccol - 6) / 9; /* variable number */
758 vc = (stccol - 6) % 9; /* variable column */
759
760 ep = ep_adj(p_cur, 1, t_cur); /* start at left end of chain */
761
762 if (vc EQ 0) { /* resolution */
763
764 while (t_cur EQ ep->e_time) {
765
766 rp = ep->e_fwd;
767
768 if (EV_ANRS EQ (0x007F & ep->e_type)) {
769
770 grp = 0x000F & ep->e_data1;
771 var = 0x000F & (ep->e_data1 >> 4);
772
773 if ((var EQ vn) AND grpstat[grp] AND
774 (2 EQ (ancmsw ? varmode[var][grp] :
775 grpmode[grp]))) {
776
777 /* fix pointers */
778
779 if (p_bak EQ ep)
780 p_bak = rp;
781
782 if (p_cur EQ ep)
783 p_cur = rp;
784
785 if (p_ctr EQ ep)
786 p_ctr = rp;
787
788 if (p_fwd EQ ep)
789 p_fwd = rp;
790
791 /* delete event */
792
793 eh_rmv(ep, EH_ANRS);
794 e_del(e_rmv(ep));
795 rc = TRUE;
796 }
797 }
798
799 ep = rp; /* next event */
800 }
801/*
802
803*/
804 } else if ((vc GE 2) AND (vc LE 6)) { /* value */
805
806 while (t_cur EQ ep->e_time) {
807
808 rp = ep->e_fwd;
809
810 if (EV_ANVL EQ (0x007F & ep->e_type)) {
811
812 grp = 0x000F & ep->e_data1;
813 var = 0x000F & (ep->e_data1 >> 4);
814
815 if ((var EQ vn) AND grpstat[grp] AND
816 (2 EQ (ancmsw ? varmode[var][grp] :
817 grpmode[grp]))) {
818
819 /* fix pointers */
820
821 if (p_bak EQ ep)
822 p_bak = rp;
823
824 if (p_cur EQ ep)
825 p_cur = rp;
826
827 if (p_ctr EQ ep)
828 p_ctr = rp;
829
830 if (p_fwd EQ ep)
831 p_fwd = rp;
832
833 e_del(e_rmv(ep)); /* delete */
834 rc = TRUE;
835 }
836 }
837
838 ep = rp; /* next event */
839 }
840 }
841
842 if (rc) { /* refresh the screen if it changed */
843
844 sc_refr(fc_val);
845 ds_anrs();
846 ds_anvl();
847 }
848
849 return(rc);
850}
851
852/*
853
854*/
855
856/*
857 =============================================================================
858 sdxkey() -- score delete key processing
859 =============================================================================
860*/
861
862void sdxkey(void)
863{
864 register int16_t col, grp, sect;
865 register struct s_entry *ep, *rp;
866
867 if (NOT astat) /* only do when key goes down */
868 return;
869
870 if (clkrun) /* ... and not while clock is running */
871 return;
872
873 if (scmctl NE -1) /* ... and area 1 menu is down */
874 return;
875/*
876
877*/
878 if (sdmctl EQ 4) { /* section menu is up */
879
880 if (((vtcrow EQ 19) OR (vtcrow EQ 20)) AND
881 (vtccol GE 24)) {
882
883 if (NOT recsw)
884 return;
885
886 /* set up to delete a section marker */
887
888 sect = ((vtccol - 24) >> 2) + ((vtcrow EQ 20) ? 10 : 0);
889 col = (vtccol - 24) & 3;
890
891 switch (col) {
892
893 case 0: /* delete begin section */
894
895
896 if (E_NULL NE (ep = seclist[curscor][sect])) {
897
898 /* fix pointers */
899
900 rp = ep->e_fwd;
901
902 if (p_bak EQ ep)
903 p_bak = rp;
904
905 if (p_cur EQ ep)
906 p_cur = rp;
907
908 if (p_ctr EQ ep)
909 p_ctr = rp;
910
911 if (p_fwd EQ ep)
912 p_fwd = rp;
913
914 eh_rmv(ep, EH_SBGN); /* delete */
915 e_del(e_rmv(ep));
916 seclist[curscor][sect] = E_NULL;
917 sdmenu(-1); /* take down menu */
918 sc_refr(fc_val); /* refresh screen */
919 }
920
921 break;
922/*
923
924*/
925 case 1: /* section number */
926 case 2:
927 break;
928
929 case 3: /* delete end section */
930
931 if (E_NULL NE
932 (ep = ehfind(EV_SEND, -1L, sect, -1))) {
933
934 /* fix pointers */
935
936 rp = ep->e_fwd;
937
938 if (p_bak EQ ep)
939 p_bak = rp;
940
941 if (p_cur EQ ep)
942 p_cur = rp;
943
944 if (p_ctr EQ ep)
945 p_ctr = rp;
946
947 if (p_fwd EQ ep)
948 p_fwd = rp;
949
950 eh_rmv(ep, EH_SEND); /* delete */
951 e_del(e_rmv(ep));
952 sdmenu(-1); /* take down menu */
953 sc_refr(fc_val); /* refresh screen */
954 }
955
956 break;
957 }
958
959 return;
960
961/*
962
963*/
964 } else if ((vtcrow EQ 23) AND
965 (vtccol GE 28) AND (vtccol LE 62)) {
966
967 /* group map entry */
968
969 col = vtccol - 28;
970
971 if (2 EQ (col % 3))
972 return;
973
974 grp = col / 3;
975 grptmap[grp] = -1;
976 dsgtme(grp);
977 return;
978 }
979 }
980
981 if (NOT recsw) /* do only if recording */
982 return;
983
984 if ((cyval GE 14) AND (cyval LE 223)) { /* notes */
985
986 delnote(); /* delete a note */
987
988 } else if ((cyval GE 224) AND (cyval LE 237)) { /* new data */
989
990 if (cp2time(cxval))
991 delevts(-1, ctime); /* delete all events at cursor */
992
993/*
994
995*/
996
997 } else if (stcrow EQ 17) {
998
999 if ((stccol GE 11) AND (stccol LE 12))
1000 delevts(EV_ASGN, t_cur); /* assignment */
1001 else if (stccol EQ 19)
1002 delevts(EV_TUNE, t_cur); /* tuning */
1003 else if ((stccol GE 27) AND (stccol LE 29))
1004 delevts(EV_TMPO, t_cur); /* tempo */
1005 else if ((stccol GE 36) AND (stccol LE 38))
1006 delevts(EV_INTP, t_cur); /* interpolation */
1007 else if ((stccol GE 40) AND (stccol LE 43))
1008 delevts(EV_STOP, t_cur); /* stop */
1009 else if ((stccol GE 45) AND (stccol LE 48))
1010 delevts(EV_NEXT, t_cur); /* next */
1011 else if ((stccol GE 50) AND (stccol LE 55))
1012 delevts(EV_PNCH, t_cur); /* punch in/out */
1013
1014 } else if ((stcrow EQ 18) AND
1015 (0 EQ ((stccol - 5) % 5))) { /* group status */
1016
1017 delevts(EV_GRP, t_cur);
1018
1019 } else if ((stcrow EQ 18) AND
1020 ((2 EQ ((stccol - 5) % 5)) OR
1021 (3 EQ ((stccol - 5) % 5)))) { /* instrument */
1022
1023 delevts(EV_INST, t_cur);
1024
1025 } else if (stcrow EQ 19) { /* transposition */
1026
1027 delevts(EV_TRNS, t_cur);
1028
1029 } else if ((stcrow EQ 20) AND (stccol GE 6) AND
1030 (0 EQ ((stccol - 6) % 5))) { /* dynamics */
1031
1032 delevts(EV_DYN, t_cur);
1033
1034 } else if ((stcrow EQ 20) AND (stccol GE 6) AND
1035 (2 EQ ((stccol - 6) % 5))) { /* location */
1036
1037 delevts(EV_LOCN, t_cur);
1038
1039 } else if (stcrow EQ 23) { /* analog */
1040
1041 deladat();
1042/*
1043
1044*/
1045 } else if (stcrow EQ 24) { /* score */
1046
1047 if (stccol LE 4) {
1048
1049 /* clear score */
1050
1051 if (insmode) /* cancel insert mode */
1052 icancel();
1053
1054 sc_clr(curscor); /* clear score itself */
1055 selscor(curscor); /* refresh the display */
1056
1057 } else if ((stccol GE 10) AND (stccol LE 25)) {
1058
1059 /* clear score name */
1060
1061 memset(scname[curscor], ' ', 16);
1062 dswin(13);
1063 }
1064 }
1065}
1066
1067/*
1068
1069*/
1070
1071/*
1072 =============================================================================
1073 sdmkey() -- score display menu key processor
1074 =============================================================================
1075*/
1076
1077void sdmkey(void)
1078{
1079 if (astat) {
1080
1081 if (insmode)
1082 icancel();
1083 }
1084
1085 stdmkey();
1086}
1087
1088/*
1089
1090*/
1091
1092/*
1093 =============================================================================
1094 scfield() -- setup field routines for the score display
1095 =============================================================================
1096*/
1097
1098void scfield(void)
1099{
1100 curset(&sc_flds);
1101}
Note: See TracBrowser for help on using the repository browser.