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

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

Zero redundant declarations.

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