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

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

Fixed etres1.c.

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