*** empty log message ***
[dana/urxvt.git] / src / genlinedraw
1 #!/usr/bin/perl
2
3 open TABLE, ">", "table/linedraw.h";
4 select TABLE;
5
6 my $ch = 0x2500;
7
8 # coordinate system:
9
10 # 0..8 (equally spaced) 9,11 mid-1,mid+1, makes 4 bit
11 # one point = 8 bit, two points = 16 bit
12
13 # 8 bit opcode 0 line, 1 rect, 2 arc
14 # 8 bit opcode arg
15
16 # OOOOOOOO AAAABBBB X1X1Y1Y1 X2X2Y2Y2
17
18 my $offs = 0;
19 my @offs;
20
21 sub emit {
22    my ($code, $x1, $y1, $x2, $y2, $a, $b) = @_;
23    $offs++;
24    printf " 0x%08lx,", ($code << 24)
25              | ($x1 << 12)
26              | ($y1 <<  8)
27              | ($x2 <<  4)
28              | ($y2 <<  0)
29              | ($a  << 20)
30              | ($b  << 16);
31 }
32
33 print "static uint32_t linedraw_command[] = {\n";
34
35 while (<DATA>) {
36    next if /^\//;
37    next unless /\S/;
38
39    push @offs, $offs;
40
41    my ($v, $V, $h, $H, $s);
42
43    for (;;) {
44       /\G-/gc and last;
45       /\G$/gc and last;
46
47       /\G([123])/gc and $w = $1;
48
49       /\Gh/gc and $h = $w;
50       /\GH/gc and $H = $w;
51       /\Gv/gc and $v = $w;
52       /\GV/gc and $V = $w;
53
54       /\G\//gc and emit 0, 0, 8, 8, 0;
55       /\G\\/gc and emit 0, 0, 0, 8, 8;
56
57       /\GA/gc and emit 2, 8, 8, 0, 0, 2, 2;
58       /\GB/gc and emit 2, 0, 8, 0, 0, 1, 2;
59       /\GC/gc and emit 2, 0, 0, 0, 0, 1, 0;
60       /\GD/gc and emit 2, 8, 0, 0, 0, 0, 0;
61
62       /\Gi/gc and emit 1, 0, 0, 4, 4;
63       /\Gj/gc and emit 1, 4, 0, 8, 4;
64       /\Gk/gc and emit 1, 0, 4, 4, 8;
65       /\Gl/gc and emit 1, 4, 4, 8, 8;
66
67       /\Gs(\d)/gc and $s = $1;
68
69       /\Gr(\d+),(\d+),(\d+),(\d+)/gc and emit 1, $1, $2, $3, $4, $s;
70
71       /\G\s/gc;
72    }
73
74    if ($h) {
75       emit 0, 0,  9,10,  9 if $h > 1;
76       emit 0, 0, 10,10, 10 if $h & 1;
77       emit 0, 0, 11,10, 11 if $h > 1;
78    }
79    
80    if ($H) {
81       emit 0,10,  9, 8,  9 if $H > 1;
82       emit 0,10, 10, 8, 10 if $H & 1;
83       emit 0,10, 11, 8, 11 if $H > 1;
84    }
85    
86    if ($v) {
87       emit 0, 9,  0, 9, 10 if $v > 1;
88       emit 0,10,  0,10, 10 if $v & 1;
89       emit 0,11,  0,11, 10 if $v > 1;
90    }
91    
92    if ($V) {
93       emit 0, 9, 10, 9,  8 if $V > 1;
94       emit 0,10, 10,10,  8 if $V & 1;
95       emit 0,11, 10,11,  8 if $V > 1;
96    }
97
98    $offs[-1] = ($offs[-1] << 4) | ($offs - $offs[-1]);
99    
100    printf " // %04x\n", $ch;
101    $ch++;
102 }
103
104 print <<EOF;
105 };
106
107 static uint16_t linedraw_offs[] = {
108 EOF
109
110 for (@offs) {
111    printf " 0x%04x,", $_;
112    print "\n" if ++$cnt % 5 == 0;
113 }
114
115 print <<EOF;
116 };
117
118 EOF
119
120 __END__
121 // 2500
122
123 1hH
124 3hH
125 1vV
126 3vV
127
128 r0,10,1,10 r3,10,5,10 r7,10,8,10
129 r0,9,1,11 r3,9,5,11 r7,9,8,11
130 r10,0,10,1 r10,3,10,5 r10,7,10,8
131 r9,0,11,1 r9,3,11,5 r9,7,11,8
132
133 r0,10,1,10 r2,10,3,10 r4,10,5,10 r6,10,7,10
134 r0,9,1,11 r2,9,3,11 r4,9,5,11 r6,9,7,11
135 r10,0,10,1 r10,2,10,3 r10,4,10,5 r10,6,10,7
136 r9,0,11,1 r9,2,11,3 r9,4,11,5 r9,6,11,7
137
138 1HV
139 3H1V
140 1H3V
141 3HV
142
143
144 // 2510
145
146 1hV
147 3h1V
148 1h3V
149 3hV
150
151 1Hv
152 3H1v
153 1H3v
154 3Hv
155
156 1hv
157 3h1v
158 1h3v
159 3hv
160
161 1HvV
162 3H1vV
163 1HV3v
164 1Hv3V
165
166
167 // 2530
168
169 1H3vV
170 3Hv1V
171 3HV1v
172 3HvV
173
174 1hvV
175 3h1vV
176 1hV3v
177 1hv3V
178
179 1h3vV
180 3hv1V
181 1v3hV
182 3hvV
183
184 1hHV
185 3h1HV
186 3H1hV
187 3hH1V
188
189
190 // 2530
191
192 1hH3V
193 3hV1H
194 1h3HV
195 3hHV
196
197 1hHv
198 1vH3h
199 1hv3H
200 1v3hH
201
202 1hH3v
203 1H3hv
204 1h3Hv
205 3hHv
206
207 1hHvV
208 1vVH3h
209 1hvV3H
210 1vV3hH
211
212
213 // 2540
214
215 1hHV3v
216 1hHv3V
217 1hH3vV
218 1HV3hv
219
220 1hV3Hv
221 1Hv3hV
222 1hv3HV
223 1V3hHv
224
225 1v3hHV
226 1H3hvV
227 1h3HvV
228 3hHvV
229
230 r0,10,3,10 r5,10,8,10
231 r0,9,3,11 r5,9,8,11
232 r10,0,10,3 r10,5,10,8
233 r9,0,11,3 r9,5,11,8
234
235
236 // 2550
237
238 2hH
239 2vV
240 1V2H
241 2V1H
242
243 2VH
244 2h1V
245 1h2V
246 2hV
247
248 1v2H
249 2v1H
250 2vH
251 2h1v
252
253 1h2v
254 2hv
255 1vV2H
256 2vV1H
257
258
259 // 2560
260
261 2vVH
262 2h1vV
263 1h2vV
264 2hvV
265
266 2hH1V
267 2V1hH
268 2hHV
269 1v2hH
270
271 2v1hH
272 2vhH
273 1vV2hH
274 1hH2vV
275
276 2hHvV
277 A
278 B
279 C
280
281
282 // 2570
283
284 D
285 1/
286 1\
287 1/\
288
289 1h
290 1v
291 1H
292 1V
293
294 3h
295 3v
296 3H
297 3V
298
299 1h3H
300 1v3V
301 1H3h
302 1V3v
303
304
305 // 2580
306
307 r0,0,8,4
308 r0,7,8,8
309 r0,6,8,8
310 r0,5,8,8
311
312 r0,4,8,8
313 r0,3,8,8
314 r0,2,8,8
315 r0,1,8,8
316
317 r0,0,8,8
318 r0,0,7,8
319 r0,0,6,8
320 r0,0,5,8
321
322 r0,0,4,8
323 r0,0,3,8
324 r0,0,2,8
325 r0,0,1,8
326
327
328 // 2590
329
330 r4,0,8,8
331 s3r0,0,8,8
332 s2r0,0,8,8
333 s1r0,0,8,8
334
335 r0,0,8,1
336 r7,0,8,8
337 k
338 l
339
340 i
341 ikl
342 il
343 ijk
344
345 ijl
346 j
347 jk
348 jkl
349
350