source: buchla-68k/ram/ldfield.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: 11.3 KB
Line 
1/*
2 =============================================================================
3 ldfield.c -- librarian display field processing and cursor motion
4 Version 47 -- 1989-11-15 -- D.N. Lynx Crowe
5 =============================================================================
6*/
7
8#define DEBUGIT 0
9
10#include "stddefs.h"
11#include "fields.h"
12#include "vsdd.h"
13#include "graphdef.h"
14#include "charset.h"
15#include "panel.h"
16#include "hwdefs.h"
17#include "fpu.h"
18#include "curpak.h"
19
20#include "midas.h"
21#include "instdsp.h"
22#include "libdsp.h"
23#include "score.h"
24
25#include "vsddsw.h"
26
27extern void select(void);
28extern int16_t whatbox(void);
29extern void nokey(void);
30extern int16_t nonf(int16_t k);
31extern void cxkstd(void);
32extern void cykstd(void);
33extern void stdmkey(void);
34extern int16_t et_null(int16_t n);
35extern int16_t ef_null(int16_t n);
36extern int16_t rd_null(int16_t n);
37extern int16_t nd_null(int16_t n, int16_t k);
38extern void lmwclr(void);
39extern void vcputsv(int16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str, int16_t pitch);
40extern int16_t ftkind(int16_t ns);
41extern void _clsvol(void);
42extern int16_t lcancel(int16_t lct);
43extern int16_t stdctp0(void);
44extern int16_t ldline(int16_t cy);
45extern int16_t lin2slt(int16_t line);
46extern void dslslot(int16_t slot, uint16_t fg, int16_t row);
47extern int16_t putcat(void);
48extern int16_t showcat(void);
49extern int16_t showsiz(void);
50
51extern uint16_t exp_c(uint16_t c);
52
53extern void *memset(void *vp, int8_t c, int16_t n);
54extern int8_t *slotnam(uint16_t slot, uint16_t kind);
55
56/*
57
58*/
59
60#if DEBUGIT
61extern short debugsw;
62#endif
63
64extern int16_t astat;
65extern int16_t catin;
66extern int16_t cmfirst;
67extern int16_t cxrate;
68extern int16_t cxval;
69extern int16_t cyrate;
70extern int16_t cyval;
71extern int16_t ldelsw;
72extern int16_t lderrsw;
73extern int16_t ldkind;
74extern int16_t ldpass;
75extern int16_t ldrow;
76extern int16_t ldslot;
77extern int16_t lmwtype;
78extern int16_t loadrow;
79extern int16_t loadsw;
80extern int16_t lorchl;
81extern int16_t lrasw;
82extern int16_t lselsw;
83extern int16_t ltagged;
84extern int16_t ndisp;
85extern int16_t oldltag;
86extern int16_t oldpk;
87extern int16_t oldsl;
88extern int16_t pkctrl;
89extern int16_t sliders;
90extern int16_t stcrow;
91extern int16_t stccol;
92extern int16_t submenu;
93extern int16_t tagslot;
94extern int16_t thcwval;
95extern int16_t tvcwval;
96
97extern uint16_t *librob;
98
99extern int8_t bfs[];
100extern int8_t ldfile[];
101extern int8_t ldcmnt[];
102
103extern int16_t crate1[];
104extern int16_t ldmap[];
105
106extern LPF (*swpt)[];
107extern LPF (*oldsw)[];
108
109extern struct selbox *csbp;
110extern struct selbox ldboxes[];
111
112/* forward reference */
113
114void ld_prmv(void);
115void ldxkey(void);
116void ldmkey(void);
117void ldkey(int16_t k);
118void ldcxupd(void);
119void ldcyupd(void);
120
121extern int16_t getcat(int16_t msgsw);
122extern int16_t getit(void);
123extern int16_t ocslot(int16_t slot);
124extern int16_t unlink(int8_t *name);
125extern void clrerms(void);
126extern void curset(struct curpak *s);
127extern void dpy_scr(uint16_t color, int16_t ns);
128extern void lcdlbls(void);
129extern void ldswin(int16_t n);
130extern void m7menu(void);
131extern void setleds(void);
132extern void vtcxupd(void);
133extern void vtcyupd(void);
134
135/*
136
137*/
138
139struct fet ld_fet1[] = {
140
141 {21, 10, 17, 0x0000, et_null, ef_null, rd_null, nd_null}, /* name */
142 {21, 27, 63, 0x0000, et_null, ef_null, rd_null, nd_null}, /* comment */
143
144 { 0, 0, 0, 0x0000, FN_NULL, FN_NULL, FN_NULL, FN_NULL}
145};
146
147int16_t ldbox[][8] = { /* display box parameters */
148
149 { 1, 1, 510, 13, LCFBX00, LCBBX00, 0, 1}, /* 0 - index area label */
150 { 1, 14, 510, 292, LCFBX01, LCBBX01, 1, 1}, /* 1 - index area */
151 { 1, 294, 78, 307, LCFBX02, LCBBX02, 21, 1}, /* 2 - file name label */
152 { 80, 294, 143, 307, LCFBX03, LCBBX03, 21, 10}, /* 3 - file name */
153 {145, 294, 214, 307, LCFBX04, LCBBX04, 21, 19}, /* 4 - comment label */
154 {216, 294, 510, 307, LCFBX05, LCBBX05, 21, 27}, /* 5 - comment */
155 { 1, 309, 70, 321, LCFBX06, LCBBX06, 22, 1}, /* 6 - fetch */
156 { 1, 322, 70, 335, LCFBX07, LCBBX07, 23, 1}, /* 7 - replace / append */
157 { 1, 336, 70, 348, LCFBX08, LCBBX08, 24, 1}, /* 8 - lo orch / hi orch */
158 { 72, 309, 255, 348, LCFBX09, LCBBX09, 22, 10}, /* 9 - store */
159 {257, 309, 510, 348, LCFBX10, LCBBX10, 22, 33} /* 10 - message window */
160};
161
162int8_t *ldbxlb0[] = { /* display box labels */
163
164 "RecrdType L FileName Comment Mem", /* 0 */
165 "", /* 1 */
166 "FileName", /* 2 */
167 "", /* 3 */
168 "Comment", /* 4 */
169 "", /* 5 */
170 "Index", /* 6 */
171 "", /* 7 */
172 "", /* 8 */
173 "", /* 9 */
174 "" /* 10 */
175};
176
177/*
178
179*/
180
181struct curpak ld_flds = {
182
183 stdctp0, /* curtype */
184 ld_prmv, /* premove */
185 nokey, /* pstmove */
186 cxkstd, /* cx_key */
187 cykstd, /* cy_key */
188 ldcxupd, /* cx_upd */
189 ldcyupd, /* cy_upd */
190 nokey, /* xy_up */
191 nokey, /* xy_dn */
192 ldxkey, /* x_key */
193 select, /* e_key */
194 ldmkey, /* m_key */
195 ldkey, /* d_key */
196 nonf, /* not_fld */
197 ld_fet1, /* curfet */
198 ldboxes, /* csbp */
199 crate1, /* cratex */
200 crate1, /* cratey */
201 CT_TEXT, /* cmtype */
202 LCURX, /* cxval */
203 LCURY /* cyval */
204};
205
206/*
207
208*/
209
210/*
211 =============================================================================
212 ldxkey() -- handle the 'X' (delete) key
213 =============================================================================
214*/
215
216void ldxkey(void)
217{
218 register int8_t *fn;
219 register int16_t slot;
220 int8_t buf[4];
221
222 if (NOT astat) /* only on key closure */
223 return; /* FAILURE */
224
225 clrerms();
226 stcrow = cyval / 14;
227 stccol = cxval >> 3;
228
229 if (lselsw AND lrasw) {
230
231 if (0 NE (slot = ldline(cyval))) {
232
233 slot -= 1;
234 ldmap[slot] = -1;
235 dpy_scr(ldbox[1][4], slot);
236 return; /* SUCCESS */
237
238 } else
239 return; /* FAILURE */
240 }
241
242 if (lcancel(2))
243 return; /* SUCCESS */
244
245 if (NOT ldelsw) { /* deletion not yet selected ? */
246
247 if (0 NE (ldrow = ldline(cyval))) { /* index area ? */
248
249 if (stccol EQ 11) { /* load tag ? */
250
251 if (-1 EQ (slot = lin2slt(stcrow)))
252 return; /* FAILURE */
253
254 if (ltagged) {
255
256 if (slot NE tagslot) {
257
258 filecat[tagslot].fcp0 = oldltag;
259 ltagged = FALSE;
260 showcat();
261 return; /* FAILURE */
262 }
263
264 putcat();
265 ltagged = FALSE;
266 showcat();
267
268 } else {
269
270 oldltag = filecat[slot].fcp0;
271 filecat[slot].fcp0 = ' ';
272 ltagged = TRUE;
273 tagslot = slot;
274
275 buf[0] = oldltag;
276 buf[1] = '\0';
277
278 if (v_regs[5] & 0x0180)
279 vbank(0);
280
281 vcputsv(librob, 64, exp_c(LD_DELC), ldbox[1][5],
282 stcrow, 11, buf, 14);
283 }
284
285 return; /* SUCCESS */
286 }
287
288 if ((stccol < 13) OR (stccol > 20)) /* name ? */
289 return; /* FAILURE */
290
291 if (-1 NE (ldslot = lin2slt(ldrow))) {
292
293 /* select file to delete */
294
295 dslslot(ldslot, exp_c(LD_DELC), ldrow);
296 ldelsw = TRUE;
297 return; /* SUCCESS */
298 }
299/*
300
301*/
302 } else { /* not in the index area */
303
304 if (21 EQ stcrow) { /* filename or comment ? */
305
306 if ((stccol GE 10) AND (stccol LE 17)) {
307
308 /* clear filename field */
309
310 memset(ldfile, ' ', 8);
311 ldswin(3);
312 return; /* SUCCESS */
313
314 } else if (stccol GE 27) {
315
316 /* clear comment field */
317
318 memset(ldcmnt, ' ', 37);
319 ldswin(5);
320 return; /* SUCCESS */
321 }
322 }
323
324 return; /* FAILURE */
325 }
326
327/*
328
329*/
330
331 } else { /* file selected for deletion */
332
333 /* delete the file if cursor hasn't moved */
334
335 if (ldrow EQ ldline(cyval)) {
336
337 filecat[ldslot].fcsize[0] = 0;
338 fn = slotnam(ldslot, ftkind(ldslot));
339
340 unlink(fn);
341
342 ldelsw = FALSE;
343 putcat();
344
345 _clsvol();
346 showcat();
347 showsiz();
348
349 return; /* SUCCESS */
350 }
351
352 ldelsw = FALSE;
353 showcat();
354 return; /* SUCCESS */
355 }
356}
357
358/*
359
360*/
361
362/*
363 =============================================================================
364 ld_prmv() -- librarian cursor pre-move function
365 =============================================================================
366*/
367
368void ld_prmv(void)
369{
370 if (lderrsw) /* clear any error messages in the window */
371 clrerms();
372
373 if (ltagged) { /* clear any non-stored load tag */
374
375 filecat[tagslot].fcp0 = oldltag;
376 ltagged = FALSE;
377 showcat();
378 }
379}
380
381/*
382
383*/
384
385/*
386 =============================================================================
387 ldcyupd() -- update cursor y location
388 =============================================================================
389*/
390
391void ldcyupd(void)
392{
393 if (lmwtype EQ 1) {
394
395 vtcyupd(); /* update virtual typewriter cursor y */
396
397 } else {
398
399 cyval += cyrate;
400
401 if (cyval GT (CYMAX - 1))
402 cyval = CYMAX - 1;
403 else if (cyval LT 1)
404 cyval = 1;
405 }
406}
407
408/*
409
410*/
411
412/*
413 =============================================================================
414 ldcxupd() -- update cursor x location
415 =============================================================================
416*/
417
418void ldcxupd(void)
419{
420 if (lmwtype EQ 1 ) {
421
422 vtcxupd(); /* update virtual typewriter cursor x */
423
424 } else {
425
426 cxval += cxrate;
427
428 if (cxval GT (CXMAX - 1))
429 cxval = CXMAX - 1;
430 else if (cxval LT 1)
431 cxval = 1;
432 }
433}
434
435/*
436
437*/
438
439/*
440 =============================================================================
441 ldmkey() -- librarian menu key processor
442 =============================================================================
443*/
444
445void ldmkey(void)
446{
447 if (astat) {
448
449 ltagged = FALSE;
450
451 if ((sliders EQ LS_LIBR) OR (pkctrl EQ PK_LIBR)) {
452
453 sliders = oldsl;
454 swpt = oldsw;
455 pkctrl = oldpk;
456 lcdlbls();
457 setleds();
458 }
459 }
460
461 stdmkey();
462}
463
464/*
465
466*/
467
468/*
469 =============================================================================
470 loadem() -- load multiple files
471 =============================================================================
472*/
473
474void loadem(int16_t key)
475{
476 register int16_t c, i, rc, slot;
477
478 rc = FALSE;
479
480 if (getcat(0)) /* get the file catalog */
481 return;
482
483 for (ldslot = 0; ldslot < 20; ldslot++) { /* check each slot */
484
485 if (ocslot(ldslot) AND
486 ((c = filecat[ldslot].fcp0) & 0x007F) EQ (key & 0x007F)) {
487
488 ldkind = ftkind(ldslot);
489
490 if ((ldkind EQ FT_ORC) OR
491 (ldkind EQ FT_ORL) OR
492 (ldkind EQ FT_ORH))
493 lorchl = (c & 0x0080) ? 1 : 0;
494
495 if (ldkind EQ FT_SCR)
496 for (i = 0; i < N_SCORES; i++)
497 ldmap[i] = i;
498
499 if(getit())
500 return;
501
502 rc = TRUE;
503 }
504 }
505
506 if (rc AND (ndisp EQ -1))
507 m7menu();
508}
509
510/*
511
512*/
513
514/*
515 =============================================================================
516 ldkey() -- process data key entry
517 =============================================================================
518*/
519
520void ldkey(int16_t k)
521{
522 register int16_t c, col, row, slot;
523 int8_t buf[4];
524
525 if (NOT astat) /* only on key closure */
526 return;
527
528 if (NOT catin) /* catalog must be valid */
529 return;
530
531 row = cyval / 14; /* determine cursor position */
532 col = cxval >> 3;
533
534 if (col NE 11) /* must be column 11 */
535 return;
536
537 if (-1 EQ (slot = lin2slt(row))) /* ... and a valid slot */
538 return;
539
540 if (NOT ltagged) {
541
542 oldltag = filecat[slot].fcp0; /* save old tag */
543 lcancel(3); /* cancel other selections */
544 }
545
546/*
547
548*/
549 /* process the key */
550
551 if (k < 7)
552 filecat[slot].fcp0 = (c = k + 'A');
553 else if (k EQ 7)
554 return;
555 else if (k EQ 8)
556 filecat[slot].fcp0 = (c = filecat[slot].fcp0 & 0x007F);
557 else /* k EQ 9 */
558 filecat[slot].fcp0 = (c = filecat[slot].fcp0 | 0x0080);
559
560 loadrow = row;
561 tagslot = slot;
562 ltagged = TRUE;
563
564 dslslot(slot, exp_c(LD_SELC), row);
565 return;
566}
567
568/*
569
570*/
571
572/*
573 =============================================================================
574 ldfield() -- setup field routines for the librarian
575 =============================================================================
576*/
577
578void ldfield(void)
579{
580 lmwtype = 0;
581 ltagged = FALSE;
582 submenu = FALSE;
583
584 curset(&ld_flds);
585}
Note: See TracBrowser for help on using the repository browser.