source: buchla-68k/ram/vtyper.c@ 6262b5c

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

Added include files for global functions and variables.

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