source: buchla-68k/ram/vtyper.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.6 KB
Line 
1/*
2 =============================================================================
3 vtyper.c -- virtual typewriter support functions
4 Version 8 -- 1989-11-14 -- D.N. Lynx Crowe
5 =============================================================================
6*/
7
8#include "stddefs.h"
9#include "fields.h"
10#include "hwdefs.h"
11#include "vsdd.h"
12#include "graphdef.h"
13
14#include "midas.h"
15
16extern uint16_t exp_c(uint16_t c);
17
18extern int16_t cxrate; /* data entry cursor x (col) update increment */
19extern int16_t cyrate; /* data entry cursor y (row) update increment */
20extern int16_t stccol; /* data entry text cursor column */
21extern int16_t stcrow; /* data entry text cursor row */
22extern int16_t vtccol; /* vtyper cursor column */
23extern int16_t vtcrow; /* vtyper cursor row */
24extern int16_t vtdecol; /* vtyper data entry column */
25extern int16_t vtxval; /* vtyper cursor x value */
26extern int16_t vtyval; /* vtyper cursor y value */
27
28extern int8_t *vtdeptr; /* vtyper data entry pointer */
29
30extern int8_t vtdechr; /* vtyper data entry character */
31
32extern int8_t bfs[]; /* display string buffer */
33
34extern int16_t vtwrow; /* vtyper window top row */
35extern int16_t vtwcol; /* vtyper window left column */
36
37extern void (*vt_adv)(void);
38 /* vtyper data cursor advance function */
39extern void (*vt_bsp)(void);
40 /* vtyper data cursor backspace function */
41extern void (*vt_cdn)(void);
42 /* vtyper data cursor down function */
43extern void (*vt_cup)(void);
44 /* vtyper data cursor up function */
45extern void (*vt_stop)(void);
46 /* vtyper exit function */
47extern void (*vt_dsp)(uint16_t *obj, uint16_t fg, uint16_t bg, int16_t row, int16_t col, int8_t *buf);
48 /* vtyper display function */
49
50extern uint16_t *vtobj; /* vtyper display object pointer */
51extern uint16_t vtfgval; /* vtyper data foreground color */
52extern uint16_t vtbgval; /* vtyper data background color */
53
54/* virtual typewriter display line constants */
55
56/* "123456789012345678901234567890" */
57int8_t vtlin1[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ | "; /* top */
58int8_t vtlin2[] = "abcdefghijklmnopqrstuvwxyz -*-"; /* center */
59int8_t vtlin3[] = " 0123456789+-/#().,:;!?&<> | "; /* bottom */
60
61/*
62
63*/
64
65/*
66 =============================================================================
67 vtsetup() -- setup the virtual typewriter for data entry
68
69 This sets up the parameters for the virtual typewriter:
70
71 obj VSDD display object pointer
72 dsp character display function
73 col data entry area -- leftmost column on the screen
74 ptr data string base pointer
75 tr typewriter window topmost row
76 tc typewriter window leftmost column
77 adv data entry cursor advance function
78 bsp data entry cursor backspace function
79 cup data entry cursor up function
80 cdn data entry cursor down function
81 stop virtual typewriter end function
82 fg data entry text foreground color
83 bg data entry text background color
84 =============================================================================
85*/
86
87void vtsetup(uint16_t *obj, int16_t (*dsp)(), int16_t col, int8_t *ptr, int16_t tr, int16_t tc, int16_t (*adv)(), int16_t (*bsp)(), int16_t (*cup)(), int16_t (*cdn)(), int16_t (*stop)(), uint16_t fg, uint16_t bg)
88{
89 vtobj = obj; /* setup object pointer */
90 vt_adv = adv; /* setup cursor advance function pointer */
91 vt_bsp = bsp; /* setup cursor backspace function pointer */
92 vt_cup = cup; /* setup cursor up function pointer */
93 vt_cdn = cdn; /* setup cursor down function pointer */
94 vt_dsp = dsp; /* setup display function pointer */
95 vt_stop = stop; /* setup exit typewriter function pointer */
96 vtwrow = tr; /* setup typewriter window row */
97 vtwcol = tc; /* setup typewriter window column */
98 vtdecol = col; /* setup data entry base column */
99 vtdeptr = ptr; /* setup data entry area base address */
100 vtfgval = exp_c(fg); /* setup foreground color value */
101 vtbgval = exp_c(bg); /* setup background color value */
102 SetPri(TTCURS, TTCPRI); /* turn on the typewriter cursor */
103 vtxval = CTOX(tc); /* setup vt x value */
104 vtyval = YTOR(tr); /* setup vt y value */
105 ttcpos(tr, tc); /* position the typewriter cusor */
106}
107
108/*
109
110*/
111
112/*
113 =============================================================================
114 vtcxupd() -- update virtual typewriter cursor x value
115
116 Standard cursor x update for use when the typewriter is displayed.
117
118 Reference this in the cursor x update for the particular display
119 when the virtual typewriter is displayed.
120 =============================================================================
121*/
122
123void vtcxupd(void)
124{
125 vtccol = XTOC(vtxval += cxrate);
126
127 if (vtccol > (vtwcol + 29))
128 vtxval = CTOX(vtccol = vtwcol + 29);
129 else if (vtccol < vtwcol)
130 vtxval = CTOX(vtccol = vtwcol);
131}
132
133/*
134 =============================================================================
135 vtcyupd() -- update virtual typewriter cursor y value
136
137 Standard cursor y update for use when the typewriter is displayed.
138
139 Reference this in the cursor y update for the particular display
140 when the virtual typewriter is displayed.
141 =============================================================================
142*/
143
144void vtcyupd(void)
145{
146 vtcrow = YTOR(vtyval += cyrate);
147
148 if (vtcrow > (vtwrow + 2))
149 vtyval = RTOY(vtcrow = vtwrow + 2);
150 else if (vtcrow < vtwrow)
151 vtyval = RTOY(vtcrow = vtwrow);
152}
153
154/*
155
156*/
157
158/*
159 =============================================================================
160 vtdisp() -- virtual typewriter data entry display (4 bit graphics)
161
162 Standard function for virtual typewriter output to a graphic screen.
163 Assumes that the graphic object is a 4 bit per pixel object in bank 0.
164 =============================================================================
165*/
166
167void vtdisp(uint16_t *obj, uint16_t fg, uint16_t bg, int16_t row, int16_t col, int8_t *buf)
168{
169
170 if (v_regs[5] & 0x0180)
171 vbank(0);
172
173 vcputsv(obj, 64, fg, bg, row, col, buf, 14);
174}
175
176/*
177
178*/
179
180/*
181 =============================================================================
182 vtyper() -- do data entry with the virtual typewriter
183
184 Called when enter is hit to do data entry from the select function
185 for the display. Returns TRUE if data entry occurred, FALSE otherwise.
186 =============================================================================
187*/
188
189int16_t vtyper(void)
190{
191 /* check for data entry */
192
193 if (vtccol < (vtwcol + 26)) { /* enter data */
194
195 /* convert (vtcrow, vtccol) to data entry character */
196
197 if (vtcrow EQ vtwrow)
198 vtdechr = vtlin1[vtccol - vtwcol];
199 else if (vtcrow EQ (vtwrow + 1))
200 vtdechr = vtlin2[vtccol - vtwcol];
201 else if (vtcrow EQ (vtwrow + 2))
202 vtdechr = vtlin3[vtccol - vtwcol];
203 else {
204
205 vtdechr = '*'; /* error -- bad row */
206 return(FALSE);
207 }
208
209 vtdeptr[stccol - vtdecol] = vtdechr; /* update data area */
210
211 /* update the screen */
212
213 bfs[0] = vtdechr;
214 bfs[1] = '\0';
215
216 (*vt_dsp)(vtobj, vtfgval, vtbgval, stcrow, stccol, bfs);
217
218 (*vt_adv)(); /* advance cursor */
219 return(TRUE);
220/*
221
222*/
223 /* check for exit or cursor controls */
224
225 } else if ((vtcrow EQ (vtwrow + 1))
226 AND (vtccol EQ (vtwcol + 28))) { /* exit */
227
228 objclr(TTCPRI); /* turn off typewriter cursor */
229 (*vt_stop)(); /* refresh typewriter window */
230 return(FALSE);
231
232 } else if ((vtcrow EQ vtwrow)
233 AND (vtccol EQ (vtwcol + 28))) { /* cursor up */
234
235 (*vt_cup)(); /* move cursor up a row */
236 return(FALSE);
237
238 } else if ((vtcrow EQ (vtwrow + 2))
239 AND (vtccol EQ (vtwcol + 28))) { /* cursor down */
240
241 (*vt_cdn)(); /* move cursor down a row */
242 return(FALSE);
243
244 } else if ((vtcrow EQ (vtwrow + 1))
245 AND (vtccol EQ (vtwcol + 27))) { /* cursor lft */
246
247 (*vt_bsp)(); /* move cursor left a column */
248 return(FALSE);
249
250 } else if ((vtcrow EQ (vtwrow + 1))
251 AND (vtccol EQ (vtwcol + 29))) { /* cursor rgt */
252
253 (*vt_adv)(); /* move cursor right a column */
254 return(FALSE);
255 } else
256 return(FALSE);
257}
258
Note: See TracBrowser for help on using the repository browser.