source: buchla-68k/ram/wdselbx.c@ 0580615

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

Point of no return.

  • Property mode set to 100644
File size: 4.9 KB
Line 
1/*
2 =============================================================================
3 wdselbx.c -- waveshape editor box selection functions
4 Version 27 -- 1988-09-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 "hwdefs.h"
15#include "fpu.h"
16
17#include "midas.h"
18#include "instdsp.h"
19#include "wsdsp.h"
20
21extern void enterit(void);
22extern void wdswin(short n);
23
24extern short curvce, curwdth, cursbox, hitbox, cxval, cyval, hitcx, hitcy;
25extern short curwave, curwfnl, curwpnt, curwoff, curwhrm, curwhrv, curwslt;
26extern short wdupdfl, wpntsv, wplast, wvlast, lstwoff, lstwpnt;
27
28extern short offsets[NUMWPCAL];
29extern short vmtab[NUMHARM];
30extern short wsbuf[NUMWPCAL];
31
32extern long vknm[NUMHARM][NUMWPCAL];
33
34extern short wdbox[][8];
35
36extern short wsnmod[12][2];
37
38extern short crate1[], crate2[], *cratex, *cratey;
39
40extern struct selbox *csbp, *curboxp;
41
42extern struct instdef vbufs[];
43
44extern struct wstbl wslib[];
45
46/* forward references */
47
48short bx_null(void);
49short wdfnbox(short n);
50
51/*
52
53*/
54
55struct selbox wdboxes[] = {
56
57 { 1, 1, 510, 307, 0, wdfnbox}, /* 0 */
58 { 1, 308, 510, 320, 1, wdfnbox}, /* 1 */
59 { 1, 322, 174, 348, 2, enterit}, /* 2 */
60 {176, 322, 230, 348, 3, wdfnbox}, /* 3 */
61 {232, 322, 398, 348, 4, enterit}, /* 4 */
62 {400, 322, 510, 348, 5, enterit}, /* 5 */
63
64 { 0, 0, 0, 0, 0, FN_NULL} /* end of table */
65};
66
67/*
68 =============================================================================
69 dsnewws() -- display a new waveshape
70 =============================================================================
71*/
72
73void dsnewws(void)
74{
75 wdswin(0);
76 wdswin(2);
77 wdswin(4);
78 wdswin(5);
79}
80
81/*
82
83*/
84
85/*
86 =============================================================================
87 newws() -- setup editing for a new waveshape
88 =============================================================================
89*/
90
91void newws(void)
92{
93 register short i;
94 register struct instdef *ip;
95
96 ip = &vbufs[curvce];
97
98 if (curwslt) {
99
100 for (i = 0; i < NUMWPNT; i++) {
101
102 offsets[i + 1] = ip->idhwvbo[i] >> 5;
103 wsbuf[i + 1] = ip->idhwvbf[i] >> 5;
104 }
105
106 memcpyw(vmtab, ip->idhwvbh, NUMHARM);
107
108 } else {
109
110 for (i = 0; i < NUMWPNT; i++) {
111
112 offsets[i + 1] = ip->idhwvao[i] >> 5;
113 wsbuf[i + 1] = ip->idhwvaf[i] >> 5;
114 }
115
116 memcpyw(vmtab, ip->idhwvah, NUMHARM);
117 }
118
119 offsets[0] = offsets[1];
120 wsbuf[0] = wsbuf[1];
121
122 curwhrv = vmtab[curwhrm];
123 lstwoff = wvlast = curwoff = offsets[1 + curwpnt];
124 curwfnl = wsbuf[curwpnt + 1];
125 lstwpnt = wplast = curwpnt;
126
127 memsetw(vknm, 0, (NUMHARM * NUMWPCAL) << 1);
128 wadj();
129}
130
131/*
132
133*/
134
135/*
136 =============================================================================
137 wdfnbox() -- waveshape display box hit processor
138 =============================================================================
139*/
140
141short wdfnbox(short n)
142{
143 register short wval;
144 register char wsgn;
145 register short *fpuws;
146
147 switch (n) { /* switch off of window ID */
148
149 case 0: /* process a hit in the main window */
150
151 switch (wpntsv) {
152
153 case 0: /* nothing selected so far: select a point */
154
155 wpntsv = 1;
156 curwpnt = (cxval - 2) / 2;
157
158 if (curwpnt GE NUMWPNT)
159 curwpnt = NUMWPNT - 1;
160 else if (curwpnt < 0)
161 curwpnt = 0;
162
163 cratex = crate2;
164 cratey = crate2;
165 newws();
166 cyval = WPOFF - ((curwoff * WPSF1) / WPSF2);
167 cxval = (curwpnt << 1) + 2;
168 arcurs(WS_GRAB);
169 gcurpos(cxval, cyval);
170 wplast = curwpnt;
171 wvlast = curwoff;
172 wdswin(4);
173 break;
174/*
175
176*/
177 case 1: /* point was selected: unselect it */
178
179 wpntsv = 0;
180 cratex = crate1;
181 cratey = crate1;
182
183 arcurs(WDCURS);
184 gcurpos(cxval, cyval);
185 break;
186
187 case 2: /* harmonic was selected: unselect it */
188
189 wpntsv = 0;
190 cratex = crate1;
191 cratey = crate1;
192
193 arcurs(WDCURS);
194 settc(22, 1 + (curwhrm << 1));
195 break;
196 }
197
198 return(TRUE);
199
200 case 1: /* process a hit in the harmonic legend */
201
202 wpntsv = 2;
203 cratex = crate1;
204 cratey = crate1;
205
206 curwhrm = cxval >> 4;
207 curwhrv = vmtab[curwhrm];
208
209 cxval = (curwhrm << 4) + 8;
210
211 if (curwhrv < 0) {
212
213 cyval = WBOFF - ((-curwhrv * WBSF1) / WBSF2);
214
215 } else {
216
217 cyval = WBOFF - ((curwhrv * WBSF1) / WBSF2);
218 }
219
220 arcurs(WS_GRAB);
221 gcurpos(cxval, cyval);
222 wdswin(5);
223 return(TRUE);
224/*
225
226*/
227 case 3: /* process a hit in the store & fetch window */
228
229 wsnmod[curvce][curwslt] = FALSE;
230
231 if (cyval < 336) { /* store ? */
232
233 memcpyw(&wslib[curwave],
234 curwslt ? vbufs[curvce].idhwvbf
235 : vbufs[curvce].idhwvaf,
236 NUMHARM + (2 * NUMWPNT));
237
238 wdswin(2);
239
240 } else { /* retrieve */
241
242 memcpyw(curwslt ? vbufs[curvce].idhwvbf
243 : vbufs[curvce].idhwvaf,
244 &wslib[curwave],
245 NUMHARM + (2 * NUMWPNT));
246
247 updfpu();
248 newws();
249 dsnewws();
250 }
251
252 cratex = crate1;
253 cratey = crate1;
254 return(TRUE);
255
256 default: /* anywhere else is an error */
257
258 cratex = crate1;
259 cratey = crate1;
260 return(FALSE);
261 }
262}
Note: See TracBrowser for help on using the repository browser.