This source file includes following definitions.
- rasops32_init
- rasops32_putchar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 #include <sys/param.h>
41 #include <sys/systm.h>
42 #include <sys/time.h>
43
44 #include <dev/wscons/wsdisplayvar.h>
45 #include <dev/wscons/wsconsio.h>
46 #include <dev/rasops/rasops.h>
47
48 void rasops32_putchar(void *, int, int, u_int, long);
49
50
51
52
53 void
54 rasops32_init(ri)
55 struct rasops_info *ri;
56 {
57
58 if (ri->ri_rnum == 0) {
59 ri->ri_rnum = 8;
60 ri->ri_rpos = 0;
61 ri->ri_gnum = 8;
62 ri->ri_gpos = 8;
63 ri->ri_bnum = 8;
64 ri->ri_bpos = 16;
65 }
66
67 ri->ri_ops.putchar = rasops32_putchar;
68 }
69
70
71
72
73 void
74 rasops32_putchar(cookie, row, col, uc, attr)
75 void *cookie;
76 int row, col;
77 u_int uc;
78 long attr;
79 {
80 int width, height, cnt, fs, fb, clr[2];
81 struct rasops_info *ri;
82 int32_t *dp, *rp;
83 u_char *fr;
84
85 ri = (struct rasops_info *)cookie;
86
87 #ifdef RASOPS_CLIPPING
88
89 if ((unsigned)row >= (unsigned)ri->ri_rows)
90 return;
91
92 if ((unsigned)col >= (unsigned)ri->ri_cols)
93 return;
94 #endif
95
96 rp = (int32_t *)(ri->ri_bits + row*ri->ri_yscale + col*ri->ri_xscale);
97
98 height = ri->ri_font->fontheight;
99 width = ri->ri_font->fontwidth;
100
101 clr[0] = ri->ri_devcmap[(attr >> 16) & 0xf];
102 clr[1] = ri->ri_devcmap[(attr >> 24) & 0xf];
103
104 if (uc == ' ') {
105 while (height--) {
106 dp = rp;
107 DELTA(rp, ri->ri_stride, int32_t *);
108
109 for (cnt = width; cnt; cnt--)
110 *dp++ = clr[0];
111 }
112 } else {
113 uc -= ri->ri_font->firstchar;
114 fr = (u_char *)ri->ri_font->data + uc * ri->ri_fontscale;
115 fs = ri->ri_font->stride;
116
117 while (height--) {
118 dp = rp;
119 fb = fr[3] | (fr[2] << 8) | (fr[1] << 16) |
120 (fr[0] << 24);
121 fr += fs;
122 DELTA(rp, ri->ri_stride, int32_t *);
123
124 for (cnt = width; cnt; cnt--) {
125 *dp++ = clr[(fb >> 31) & 1];
126 fb <<= 1;
127 }
128 }
129 }
130
131
132 if ((attr & 1) != 0) {
133 DELTA(rp, -(ri->ri_stride << 1), int32_t *);
134
135 while (width--)
136 *rp++ = clr[1];
137 }
138 }