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

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

Prototypes for global function pointers. Consistent global types.

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