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

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

Added include files for global functions and variables.

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