source: buchla-68k/ram/etres1.c@ 7258c6a

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

Use standard integer types.

  • Property mode set to 100644
File size: 7.4 KB
Line 
1/*
2 =============================================================================
3 etres1.c -- analog variable field handlers
4 Version 16 -- 1988-06-28 -- D.N. Lynx Crowe
5 =============================================================================
6*/
7
8#include "stddefs.h"
9#include "fields.h"
10#include "smdefs.h"
11#include "hwdefs.h"
12#include "graphdef.h"
13#include "vsdd.h"
14#include "vsddsw.h"
15#include "score.h"
16#include "scfns.h"
17#include "macros.h"
18
19#include "midas.h"
20#include "scdsp.h"
21
22extern int16_t ancmsw;
23extern int16_t angroup;
24extern int16_t ctrsw;
25extern int16_t recsw;
26extern int16_t stccol;
27
28extern uint16_t *obj8;
29
30extern int16_t anrs[8][16];
31extern int16_t grpmode[12];
32extern int16_t grpstat[12];
33extern int16_t var2src[6];
34extern int16_t varmode[8][16];
35
36extern struct gdsel *gdstbc[];
37extern struct valent valents[];
38
39/*
40 =============================================================================
41 et_res1() -- load edit buffer
42 =============================================================================
43*/
44
45int16_t et_res1(int16_t n)
46{
47 ebuf[0] = anrs[n][abs(angroup)-1];
48 ebflag = TRUE;
49 return(SUCCESS);
50}
51
52/*
53
54*/
55
56/*
57 =============================================================================
58 ef_res1() -- parse edit buffer
59 =============================================================================
60*/
61
62int16_t ef_res1(int16_t n)
63{
64 register int16_t ival, grp, vg;
65 register struct s_entry *ep;
66
67 ebflag = FALSE;
68 grp = abs(angroup)-1;
69 ival = ebuf[0] & 0x00FF;
70
71 if ((ival < 3) OR (ival > 8))
72 return(FAILURE);
73
74 anrs[n][grp] = ival;
75
76 if (recsw AND grpstat[grp] AND
77 (2 EQ (ancmsw ? varmode[n][grp] : grpmode[grp]))) {
78
79 vg = ((n << 4) | grp);
80
81 if (E_NULL NE (ep = findev(p_cur, t_cur, EV_ANRS, vg, -1))) {
82
83 ep->e_data2 = ival;
84
85 } else if (E_NULL NE (ep = e_alc(E_SIZE2))) {
86
87 ep->e_type = EV_ANRS;
88 ep->e_data1 = vg;
89 ep->e_data2 = ival;
90 ep->e_time = t_cur;
91 p_cur = e_ins(ep, ep_adj(p_cur, 0, t_cur))->e_fwd;
92 eh_ins(ep, EH_ANRS);
93 ctrsw = TRUE;
94 se_disp(ep, D_FWD, gdstbc, 1);
95 scupd();
96 }
97 }
98
99 return(SUCCESS);
100}
101
102/*
103
104*/
105
106/*
107 =============================================================================
108 rd_res1() -- (re)display the field
109 =============================================================================
110*/
111
112int16_t rd_res1(int16_t n)
113{
114 register int16_t grp, chr;
115
116 grp = abs(angroup) - 1;
117
118 chr = anrs[n][grp] + '0';
119
120 if (v_regs[5] & 0x0180)
121 vbank(0);
122
123 vputc(obj8, 7, 6 + (n * 9), chr, SDW12ATR);
124
125 return(SUCCESS);
126}
127
128/*
129
130*/
131
132/*
133 =============================================================================
134 nd_res1() -- data entry function
135 =============================================================================
136*/
137
138int16_t nd_res1(int16_t n, int16_t k)
139{
140 ebuf[0] = k;
141
142 if (v_regs[5] & 0x0180)
143 vbank(0);
144
145 vputc(obj8, 7, stccol, k + '0', SDW12DEA);
146
147 return(SUCCESS);
148}
149
150/*
151
152*/
153
154/*
155 =============================================================================
156 et_aval() -- load edit buffer
157 =============================================================================
158*/
159
160int16_t et_aval(int16_t n)
161{
162 register int16_t val, grp, gs;
163 int16_t val1, val2, val3;
164
165 grp = abs(angroup) - 1;
166 gs = (grp << 4) | var2src[n];
167 val = (valents[gs].val) >> 5;
168
169 if (val < 0 ) {
170
171 ebuf[0] = 8;
172 val = -val;
173
174 } else {
175
176 ebuf[0] = 9;
177 }
178
179 val1 = val / 100;
180 ebuf[4] = (val - (val1 * 100)) / 10;
181 val2 = val1 / 10;
182 ebuf[2] = val1 - (val2 * 10);
183 ebuf[1] = val2;
184
185 ebflag = TRUE;
186
187 return(SUCCESS);
188}
189
190/*
191
192*/
193
194/*
195 =============================================================================
196 ef_res1() -- parse edit buffer
197 =============================================================================
198*/
199
200int16_t ef_aval(int16_t n)
201{
202 register int16_t val, grp, src, vg;
203 register struct s_entry *ep;
204
205 ebflag = FALSE;
206 grp = abs(angroup) - 1;
207 src = var2src[n];
208 val = ((ebuf[1] * 100) + (ebuf[2] * 10) + ebuf[4]) * 10;
209
210 if (val > 1000)
211 return(FAILURE);
212
213 if (ebuf[0] EQ 8)
214 val = -val;
215
216 val = val << 5;
217
218 setsv(grp, src, val);
219
220 if (recsw AND grpstat[grp] AND
221 (2 EQ (ancmsw ? varmode[n][grp] : grpmode[grp]))) {
222
223 vg = (n << 4) | grp;
224
225 if (E_NULL NE (ep = findev(p_cur, t_cur, EV_ANVL, vg, -1))) {
226
227 ep->e_dn = (struct s_entry *)((int32_t)val << 16);
228
229 } else if (E_NULL NE (ep = e_alc(E_SIZE2))) {
230
231 ep->e_type = EV_ANVL;
232 ep->e_data1 = vg;
233 ep->e_dn = (struct s_entry *)((int32_t)val << 16);
234 ep->e_time = t_cur;
235 p_cur = e_ins(ep, ep_adj(p_cur, 0, t_cur))->e_fwd;
236 ctrsw = TRUE;
237 se_disp(ep, D_FWD, gdstbc, 1);
238 scupd();
239 }
240 }
241
242 return(SUCCESS);
243}
244
245/*
246
247*/
248
249/*
250 =============================================================================
251 rd_aval() -- (re)display the field
252 =============================================================================
253*/
254
255int16_t rd_aval(int16_t n)
256{
257 register int16_t grp, val, gs;
258 int16_t val1, val2;
259 int8_t buf[6];
260
261 grp = abs(angroup) - 1;
262 gs = (grp << 4) | var2src[n];
263 val = (valents[gs].val) >> 5;
264
265 if (val < 0) {
266
267 buf[0] = '-';
268 val = -val;
269
270 } else {
271
272 buf[0] = '+';
273 }
274
275 val1 = val / 100;
276 buf[4] = '0' + ((val - (val1 * 100)) / 10);
277 val2 = val1 / 10;
278 buf[2] = '0' + (val1 - (val2 * 10));
279 buf[1] = '0' + val2;
280 buf[3] = '.';
281 buf[5] = '\0';
282
283 if (v_regs[5] & 0x0180)
284 vbank(0);
285
286 vputs(obj8, 7, 8 + (n * 9), buf, SDW12ATR);
287
288 return(SUCCESS);
289}
290
291/*
292
293*/
294
295/*
296 =============================================================================
297 nd_aval() -- data entry function
298 =============================================================================
299*/
300
301int16_t nd_aval(int16_t n, int16_t k)
302{
303 register int16_t ec;
304
305 ec = stccol - cfetp->flcol;
306
307 if (ec EQ 3)
308 return(FAILURE);
309
310 ebuf[ec] = k;
311
312 if (ec EQ 0)
313 k = (k EQ 8) ? '-' : '+';
314 else
315 k += '0';
316
317 if (v_regs[5] & 0x0180)
318 vbank(0);
319
320 vputc(obj8, 7, stccol, k, SDW12DEA);
321
322 if (ec EQ 4)
323 return(SUCCESS);
324
325 advscur();
326
327 if (ec EQ 2)
328 advscur();
329
330 return(SUCCESS);
331}
332
333/*
334
335*/
336
337/*
338 =============================================================================
339 et_agrp() -- load edit buffer
340 =============================================================================
341*/
342
343int16_t et_agrp(int16_t n)
344{
345 sprintf(ebuf, "%02.2d", abs(angroup));
346 ebflag = TRUE;
347 return(SUCCESS);
348}
349
350/*
351
352*/
353
354/*
355 =============================================================================
356 ef_agrp() -- parse edit buffer
357 =============================================================================
358*/
359
360int16_t ef_agrp(int16_t n)
361{
362 register int16_t ival;
363
364 ebflag = FALSE;
365 ival = (10 * (ebuf[0] - '0')) + (ebuf[1] - '0');
366
367 if ((ival >12) OR (ival < 1))
368 return(FAILURE);
369
370 angroup = sign(angroup, ival);
371
372 ds_anmd();
373 ds_anrs();
374 ds_anvl();
375 return(SUCCESS);
376}
377
378/*
379
380*/
381
382/*
383 =============================================================================
384 rd_agrp() -- (re)display the field
385 =============================================================================
386*/
387
388int16_t rd_agrp(int16_t n)
389{
390 int8_t buf[4];
391
392 sprintf(buf, "%02.2d", abs(angroup));
393
394 if (v_regs[5] & 0x0180)
395 vbank(0);
396
397 vputs(obj8, 7, 61, buf, SDW12ATR);
398
399 return(SUCCESS);
400}
401
402/*
403
404*/
405
406/*
407 =============================================================================
408 nd_agrp() -- data entry function
409 =============================================================================
410*/
411
412int16_t nd_agrp(int16_t n, int16_t k)
413{
414 register int16_t ec;
415
416 ec = stccol - cfetp->flcol;
417
418 ebuf[ec] = k + '0';
419
420 if (v_regs[5] & 0x0180)
421 vbank(0);
422
423 vputc(obj8, 7, stccol, k + '0', SDW12DEA);
424 advscur();
425
426 return(SUCCESS);
427}
Note: See TracBrowser for help on using the repository browser.