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