source: buchla-68k/ram/m7menu.c@ 9519422

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

Strip trailing tabs and spaces.

  • Property mode set to 100644
File size: 14.2 KB
Line 
1/*
2 =============================================================================
3 m7menu.c -- MIDAS main menu functions
4 Version 42 -- 1989-12-19 -- D.N. Lynx Crowe
5 =============================================================================
6*/
7
8#define DEBUGIT 0
9
10#include "stddefs.h"
11#include "hwdefs.h"
12#include "memory.h"
13#include "vsdd.h"
14#include "vsddsw.h"
15#include "vsddvars.h"
16#include "fields.h"
17#include "graphdef.h"
18#include "curpak.h"
19
20#include "midas.h"
21#include "menu.h"
22#include "libdsp.h"
23
24#define DENSITY 1 /* double density */
25
26#define M_COPY 8 /* "copy" text index in mtexts[] */
27#define M_FORM 10 /* "format" text index in mtexts[] */
28
29#define VER_ROW 2 /* version message row */
30#define VER_COL 51 /* version message column */
31
32#if DEBUGIT
33extern short debugsw;
34
35short debugm7 = 1;
36#endif
37
38extern int8_t m7verms[], bfs[], loadedf[][8];
39
40extern struct selbox *csbp, *curboxp;
41
42extern void (*point)(int16_t x, int16_t y, int16_t pen);
43
44extern void nokey(void);
45extern void nodkey(int16_t k);
46extern int16_t nonf(int16_t k);
47extern void select(void);
48extern void cxkstd(void);
49extern void cykstd(void);
50extern void cxgen(void);
51extern void cygen(void);
52extern int16_t stdctp2(void);
53
54extern uint16_t exp_c(uint16_t c);
55
56extern int16_t ndisp, runit, curslim, sgcsw, cxval, cyval, stcrow, stccol;
57extern int16_t crate1[], defect, dsp_ok;
58
59extern struct octent *mdoct;
60
61extern uint16_t *menuob, *obj0, vi_ctl;
62
63static int8_t ml01[61], ml02[61], ml03[61], ml04[61], ml05[61];
64
65int16_t mdselbx(int16_t n);
66
67/*
68
69*/
70
71static int8_t mlc01[] = {1, 0xBA, 58, 0xB1, 1, 0xBB, -1};
72static int8_t mlc02[] = {1, 0xB6, 29, 0xB1, 1, 0xB7, 28, 0xB1, 1, 0xB4, -1};
73static int8_t mlc03[] = {1, 0xB6, 29, 0xB1, 1, 0xB2, 28, 0xB1, 1, 0xB4, -1};
74static int8_t mlc04[] = {1, 0xB6, 29, 0xB1, 1, 0xB5, 28, 0xB1, 1, 0xB4, -1};
75static int8_t mlc05[] = {1, 0xB9, 58, 0xB1, 1, 0xB8, -1};
76
77static int8_t *mtexts[] = {
78
79 /* 0 */ "MIDAS VII for the Buchla 700 Version",
80 /* 1 */ "Librarian",
81 /* 2 */ "Patch Editor",
82 /* 3 */ "Score editor",
83 /* 4 */ "Sequence Editor",
84 /* 5 */ "Instrument designer",
85 /* 6 */ "Initialize system",
86 /* 7 */ "Waveshape editor",
87 /* 8 */ "Write program to disk",
88 /* 9 */ "Tuning tables",
89 /* 10 */ "Format disk",
90 /* 11 */ "Assignment tables",
91 /* 12 */ "Diagnostics",
92 /* 13 */ "created by Buchla and Associates of Berkeley, California",
93};
94
95/*
96
97*/
98
99static int16_t mlintab[][4] = {
100
101 { 18, 26, 18, 322},
102
103 { 21, 26, 21, 42},
104 { 21, 54, 21, 84},
105 { 21, 96, 21, 126},
106 { 21, 138, 21, 168},
107 { 21, 180, 21, 210},
108 { 21, 222, 21, 252},
109 { 21, 264, 21, 294},
110 { 21, 306, 21, 322},
111
112 {258, 54, 258, 84},
113 {258, 96, 258, 126},
114 {258, 138, 258, 168},
115 {258, 180, 258, 210},
116 {258, 222, 258, 252},
117 {258, 264, 258, 294},
118
119 {261, 54, 261, 84},
120 {261, 96, 261, 126},
121 {261, 138, 261, 168},
122 {261, 180, 261, 210},
123 {261, 222, 261, 252},
124 {261, 264, 261, 294},
125
126 {490, 26, 490, 42},
127 {490, 54, 490, 84},
128 {490, 96, 490, 126},
129 {490, 138, 490, 168},
130 {490, 180, 490, 210},
131 {490, 222, 490, 252},
132 {490, 264, 490, 294},
133 {490, 306, 490, 322},
134
135 {493, 26, 493, 322},
136
137 { -1, -1, -1, -1}
138};
139
140/*
141
142*/
143
144static int16_t mrowcol[][2] = {
145
146 { 2, 4}, /* 0 */
147 { 4, 4}, /* 1 */
148 { 4, 34}, /* 2 */
149 { 7, 4}, /* 3 */
150 { 7, 34}, /* 4 */
151 {10, 4}, /* 5 */
152 {10, 34}, /* 6 */
153 {13, 4}, /* 7 */
154 {13, 34}, /* 8 */
155 {16, 4}, /* 9 */
156 {16, 34}, /* 10 */
157 {19, 4}, /* 11 */
158 {19, 34}, /* 12 */
159 {22, 4} /* 13 */
160};
161
162struct selbox mdboxes[] = { /* main menu box definitions */
163
164 { 22, 53, 257, 87, 0, mdselbx}, /* 0 */
165 {262, 53, 489, 87, 1, mdselbx}, /* 1 */
166 { 22, 95, 257, 129, 2, mdselbx}, /* 2 */
167 {262, 95, 489, 129, 3, mdselbx}, /* 3 */
168 { 22, 137, 257, 171, 4, mdselbx}, /* 4 */
169 {262, 137, 489, 171, 5, mdselbx}, /* 5 */
170 { 22, 179, 257, 213, 6, mdselbx}, /* 6 */
171 {262, 179, 489, 213, 7, mdselbx}, /* 7 */
172 { 22, 221, 257, 255, 8, mdselbx}, /* 8 */
173 {262, 221, 489, 255, 9, mdselbx}, /* 9 */
174 { 22, 263, 257, 297, 10, mdselbx}, /* 10 */
175 {262, 263, 489, 297, 11, mdselbx}, /* 11 */
176 { 0, 0, 0, 0, 0, FN_NULL} /* end of table */
177};
178
179/*
180
181*/
182
183int16_t menupal[16][3] = { /* menu display color palette */
184
185 {0, 0, 0}, /* 0 */
186 {2, 1, 0}, /* 1 MCURSOR cursor color */
187 {0, 0, 0}, /* 2 MBKGRND background color */
188 {3, 0, 2}, /* 3 */
189 {2, 1, 0}, /* 4 MBUCHLA "Created by ..." color */
190 {2, 1, 0}, /* 5 MTITLE title color */
191 {0, 1, 0}, /* 6 */
192 {2, 0, 0}, /* 7 MHILITE hilite color */
193 {2, 2, 2}, /* 8 MLFILES file name color */
194 {0, 0, 0}, /* 9 */
195 {1, 1, 2}, /* 10 MLINES outline color */
196 {2, 3, 3}, /* 11 MBUTTON button legend color */
197 {3, 1, 1}, /* 12 */
198 {3, 3, 0}, /* 13 */
199 {0, 3, 3}, /* 14 */
200 {0, 0, 3} /* 15 */
201};
202
203int16_t blakpal[16][3] = { /* black palette */
204
205 {0, 0, 0}, /* 0 */
206 {0, 0, 0}, /* 1 */
207 {0, 0, 0}, /* 2 */
208 {0, 0, 0}, /* 3 */
209 {0, 0, 0}, /* 4 */
210 {0, 0, 0}, /* 5 */
211 {0, 0, 0}, /* 6 */
212 {0, 0, 0}, /* 7 */
213 {0, 0, 0}, /* 8 */
214 {0, 0, 0}, /* 9 */
215 {0, 0, 0}, /* 10 */
216 {0, 0, 0}, /* 11 */
217 {0, 0, 0}, /* 12 */
218 {0, 0, 0}, /* 13 */
219 {0, 0, 0}, /* 14 */
220 {0, 0, 0} /* 15 */
221};
222
223/*
224
225*/
226
227int16_t mfrc[][2] = { /* file name row and column by load type LT_??? */
228
229 {20, 6}, /* assignments */
230 {11, 6}, /* lo orchestra */
231 {11, 20}, /* hi orchestra */
232 { 8, 6}, /* score */
233 {17, 6}, /* tunings */
234 {14, 6}, /* waveshapes */
235 { 5, 36}, /* patches */
236 { 8, 36} /* sequences */
237};
238
239/*
240
241*/
242
243struct curpak m7_flds = { /* main menu cursor package definitions */
244
245 stdctp2, /* curtype */
246 nokey, /* premove */
247 nokey, /* pstmove */
248 cxkstd, /* cx_key */
249 cykstd, /* cy_key */
250 cxgen, /* cx_upd */
251 cygen, /* cy_upd */
252 nokey, /* xy_up */
253 nokey, /* xy_dn */
254 nokey, /* x_key */
255 select, /* e_key */
256 nokey, /* m_key */
257 nodkey, /* d_key */
258 nonf, /* not_fld */
259 (struct fet *)NULL, /* curfet */
260 mdboxes, /* csbp */
261 crate1, /* cratex */
262 crate1, /* cratey */
263 CT_GRAF, /* cmtype */
264 MCURX, /* cxval */
265 MCURY /* cyval */
266};
267
268/*
269
270*/
271
272/*
273 =============================================================================
274 dswap() -- clear the screen for display switching
275 =============================================================================
276*/
277
278void dswap(void)
279{
280 register int16_t i;
281
282 vsndpal(blakpal); /* blackout the palette */
283
284 if (v_regs[5] & 0x0180)
285 vbank(0); /* select bank 0 */
286
287 setipl(VID_DI); /* disable the un-blanker */
288 vi_ctl = 0; /* reset un-blank control */
289
290 for (i = 0; i < 16; i++) /* blank the objects */
291 v_odtab[i][0] |= V_BLA;
292
293 VHinit(); /* init VSDD hardware */
294 VSinit(); /* init VSDD software */
295}
296
297/*
298
299*/
300
301/*
302 =============================================================================
303 mlbld() -- build a menu line
304 =============================================================================
305*/
306
307void mlbld(int8_t *where, int8_t *from)
308{
309 register int16_t i, j;
310 register int8_t c;
311
312 while (-1 NE (i = *from++)) {
313
314 c = *from++;
315
316 for (j = 0; j < i; j++)
317 *where++ = c;
318 }
319
320 *where = '\0';
321}
322
323/*
324 =============================================================================
325 mlpoint() -- draw a point for the MIDAS 700 main menu
326 =============================================================================
327*/
328
329void mlpoint(int16_t x, int16_t y, int16_t pen)
330{
331 if (v_regs[5] & 0x0180)
332 vbank(0);
333
334 vputp(mdoct, x, y, pen);
335}
336
337/*
338
339*/
340
341/*
342 =============================================================================
343 mdselbx() -- process a hit in a window for the MIDAS 700 main menu
344 =============================================================================
345*/
346
347int16_t mdselbx(int16_t n)
348{
349 register uint16_t mlcv, mbcv, mbak;
350 register int16_t rc;
351
352#if DEBUGIT
353 if (debugsw AND debugm7)
354 printf("mdselbx(%d): ENTRY old ndisp = %d\n", n, ndisp);
355#endif
356
357 mlcv = exp_c(MLINES);
358 mbcv = exp_c(MBUTTON);
359 mbak = exp_c(MBKGRND);
360
361 rc = SUCCESS;
362
363 if (ndisp EQ 7) { /* "Write program to disk" selected */
364
365 if (n EQ 7) { /* verified, time to do it */
366
367 if (dcopy()) {
368
369 sprintf(bfs, " FAILED -- Error %d", defect);
370
371 vcputsv(menuob, 64, MHILITE, mbak,
372 mrowcol[M_COPY][0] + 1,
373 mrowcol[M_COPY][1],
374 bfs, 14);
375
376 rc = FAILURE;
377 }
378
379 ndisp = -1;
380
381 } else { /* not verified, cancel it */
382
383 ndisp = n; /* display number = box number */
384 runit = FALSE; /* cue msl() to setup the new display */
385 dsp_ok = FALSE; /* disallow display updates */
386 }
387
388 vcputsv(menuob, 64, mbcv, mbak,
389 mrowcol[M_COPY][0], mrowcol[M_COPY][1],
390 mtexts[M_COPY], 14);
391
392/*
393
394*/
395
396 } else if (ndisp EQ 9) { /* "Format disk" selected */
397
398 if (n EQ 9) { /* verified, time to do it */
399
400 if (dformat(DENSITY)) {
401
402 sprintf(bfs, " FAILED -- Error %d", defect);
403
404 vcputsv(menuob, 64, MHILITE, mbak,
405 mrowcol[M_FORM][0] + 1,
406 mrowcol[M_FORM][1],
407 bfs, 14);
408
409 rc = FAILURE;
410 }
411
412 ndisp = -1;
413
414 } else { /* not verified, cancel it */
415
416 ndisp = n; /* display number = box number */
417 runit = FALSE; /* cue msl() to setup the new display */
418 dsp_ok = FALSE; /* disallow display updates */
419 }
420
421 vcputsv(menuob, 64, mbcv, mbak,
422 mrowcol[M_FORM][0], mrowcol[M_FORM][1],
423 mtexts[M_FORM], 14);
424
425/*
426
427*/
428 } else { /* select a new menu item */
429
430 ndisp = n; /* display number = box number */
431
432 if (n EQ 7) { /* select "Write program to disk" */
433
434 vcputsv(menuob, 64, MHILITE, mbak,
435 mrowcol[M_COPY][0], mrowcol[M_COPY][1],
436 mtexts[M_COPY], 14);
437
438 } else if (n EQ 9) { /* select "Format disk" */
439
440 vcputsv(menuob, 64, MHILITE, mbak,
441 mrowcol[M_FORM][0], mrowcol[M_FORM][1],
442 mtexts[M_FORM], 14);
443
444 } else {
445
446 runit = FALSE; /* cue msl() to setup the new display */
447 dsp_ok = FALSE; /* disallow display updates */
448 }
449 }
450
451#if DEBUGIT
452 if (debugsw AND debugm7)
453 printf("mdselbx(%d): EXIT ndisp = %d rc = %d runit = %d\n",
454 n, ndisp, rc, runit);
455#endif
456
457 return(rc);
458}
459
460/*
461
462*/
463
464/*
465 =============================================================================
466 drawm() -- draw the MIDAS 700 main menu
467 =============================================================================
468*/
469
470void drawm(void)
471{
472 register int16_t *mlp;
473 register int16_t i;
474 register uint16_t mlcv, mbcv, mbak;
475 int8_t buf[16];
476
477 mlcv = exp_c(MLINES);
478 mbcv = exp_c(MBUTTON);
479 mbak = exp_c(MBKGRND);
480
481 if (ml01[0] EQ 0) {
482
483 mlbld(ml01, mlc01);
484 mlbld(ml02, mlc02);
485 mlbld(ml03, mlc03);
486 mlbld(ml04, mlc04);
487 mlbld(ml05, mlc05);
488 }
489
490 if (v_regs[5] & 0x0180)
491 vbank(0);
492
493 vbfill4(menuob, 128, 0, 0, 511, 349, mbak);
494
495 vcputsv(menuob, 64, mlcv, mbak, 1, 2, ml01, 14);
496 vcputsv(menuob, 64, mlcv, mbak, 2, 2, "\260", 14);
497 vcputsv(menuob, 64, mlcv, mbak, 2, 61, "\260", 14);
498
499 vcputsv(menuob, 64, mlcv, mbak, 3, 2, ml02, 14);
500 vcputsv(menuob, 64, mlcv, mbak, 4, 2, "\260", 14);
501 vcputsv(menuob, 64, mlcv, mbak, 4, 32, "\260", 14);
502 vcputsv(menuob, 64, mlcv, mbak, 4, 61, "\260", 14);
503 vcputsv(menuob, 64, mlcv, mbak, 5, 2, "\260", 14);
504 vcputsv(menuob, 64, mlcv, mbak, 5, 32, "\260", 14);
505 vcputsv(menuob, 64, mlcv, mbak, 5, 61, "\260", 14);
506
507 vcputsv(menuob, 64, mlcv, mbak, 6, 2, ml03, 14);
508 vcputsv(menuob, 64, mlcv, mbak, 7, 2, "\260", 14);
509 vcputsv(menuob, 64, mlcv, mbak, 7, 32, "\260", 14);
510 vcputsv(menuob, 64, mlcv, mbak, 7, 61, "\260", 14);
511 vcputsv(menuob, 64, mlcv, mbak, 8, 2, "\260", 14);
512 vcputsv(menuob, 64, mlcv, mbak, 8, 32, "\260", 14);
513 vcputsv(menuob, 64, mlcv, mbak, 8, 61, "\260", 14);
514/*
515
516*/
517 vcputsv(menuob, 64, mlcv, mbak, 9, 2, ml03, 14);
518 vcputsv(menuob, 64, mlcv, mbak, 10, 2, "\260", 14);
519 vcputsv(menuob, 64, mlcv, mbak, 10, 32, "\260", 14);
520 vcputsv(menuob, 64, mlcv, mbak, 10, 61, "\260", 14);
521 vcputsv(menuob, 64, mlcv, mbak, 11, 2, "\260", 14);
522 vcputsv(menuob, 64, mlcv, mbak, 11, 32, "\260", 14);
523 vcputsv(menuob, 64, mlcv, mbak, 11, 61, "\260", 14);
524
525 vcputsv(menuob, 64, mlcv, mbak, 12, 2, ml03, 14);
526 vcputsv(menuob, 64, mlcv, mbak, 13, 2, "\260", 14);
527 vcputsv(menuob, 64, mlcv, mbak, 13, 32, "\260", 14);
528 vcputsv(menuob, 64, mlcv, mbak, 13, 61, "\260", 14);
529 vcputsv(menuob, 64, mlcv, mbak, 14, 2, "\260", 14);
530 vcputsv(menuob, 64, mlcv, mbak, 14, 32, "\260", 14);
531 vcputsv(menuob, 64, mlcv, mbak, 14, 61, "\260", 14);
532
533 vcputsv(menuob, 64, mlcv, mbak, 15, 2, ml03, 14);
534 vcputsv(menuob, 64, mlcv, mbak, 16, 2, "\260", 14);
535 vcputsv(menuob, 64, mlcv, mbak, 16, 32, "\260", 14);
536 vcputsv(menuob, 64, mlcv, mbak, 16, 61, "\260", 14);
537 vcputsv(menuob, 64, mlcv, mbak, 17, 2, "\260", 14);
538 vcputsv(menuob, 64, mlcv, mbak, 17, 32, "\260", 14);
539 vcputsv(menuob, 64, mlcv, mbak, 17, 61, "\260", 14);
540
541 vcputsv(menuob, 64, mlcv, mbak, 18, 2, ml03, 14);
542 vcputsv(menuob, 64, mlcv, mbak, 19, 2, "\260", 14);
543 vcputsv(menuob, 64, mlcv, mbak, 19, 32, "\260", 14);
544 vcputsv(menuob, 64, mlcv, mbak, 19, 61, "\260", 14);
545 vcputsv(menuob, 64, mlcv, mbak, 20, 2, "\260", 14);
546 vcputsv(menuob, 64, mlcv, mbak, 20, 32, "\260", 14);
547 vcputsv(menuob, 64, mlcv, mbak, 20, 61, "\260", 14);
548
549 vcputsv(menuob, 64, mlcv, mbak, 21, 2, ml04, 14);
550 vcputsv(menuob, 64, mlcv, mbak, 22, 2, "\260", 14);
551 vcputsv(menuob, 64, mlcv, mbak, 22, 61, "\260", 14);
552 vcputsv(menuob, 64, mlcv, mbak, 23, 2, ml05, 14);
553/*
554
555*/
556 mlp = &mlintab[0][0];
557 point = mlpoint;
558
559 while (-1 NE mlp[0]) {
560
561 lseg(mlp[0], mlp[1], mlp[2], mlp[3], mlcv);
562 mlp += 4;
563 }
564
565 vcputsv(menuob, 64, MTITLE, mbak, mrowcol[0][0], mrowcol[0][1],
566 mtexts[0], 14);
567
568 vcputsv(menuob, 64, MTITLE, mbak, VER_ROW, VER_COL, m7verms, 14);
569
570 for (i = 1; i < 13; i++)
571 vcputsv(menuob, 64, mbcv, mbak, mrowcol[i][0], mrowcol[i][1],
572 mtexts[i], 14);
573
574 vcputsv(menuob, 64, MBUCHLA, mbak, mrowcol[13][0], mrowcol[13][1],
575 mtexts[13], 14);
576
577 for (i = 0; i < NLTYPES; i++) {
578
579 memcpy(buf, loadedf[i], 8);
580 buf[8] = '\0';
581
582 vcputsv(menuob, 64, MLFILES, mbak, mfrc[i][0], mfrc[i][1],
583 buf, 14);
584 }
585}
586
587/*
588
589*/
590
591/*
592 =============================================================================
593 m7menu() -- setup the MIDAS 700 main menu display
594 =============================================================================
595*/
596
597void m7menu(void)
598{
599 menuob = &v_score[0];
600 obj0 = &v_curs0[0];
601 mdoct = &v_obtab[MENUOBJ];
602
603 curslim = 350;
604
605 curset(&m7_flds);
606
607 ndisp = -1;
608 dswap();
609
610 vbank(0);
611 memsetw(menuob, 0, 32767);
612 memsetw(menuob+32767L, 0, 12033);
613
614 SetObj(MENUOBJ, 0, 0, menuob, 512, 350, 0, 0, MENUFL, -1);
615 SetObj(0, 0, 1, obj0, 16, 16, MCURX, MCURY, OBFL_00, -1);
616
617 arcurs(MCURSOR);
618
619 drawm();
620
621 vsndpal(menupal);
622
623 SetPri(MENUOBJ, MENUPRI);
624 SetPri(0, GCPRI);
625
626 setgc(MCURX, MCURY);
627}
Note: See TracBrowser for help on using the repository browser.