|
|
1.1 root 1: /******************************Module*Header*******************************\
2: * Module Name: gdiinfo.c
3: *
4: * This contains the static data structures in the VGA driver.
5: *
6: * Copyright (c) 1992 Microsoft Corporation
7: \**************************************************************************/
8:
9:
10: #include "driver.h"
11:
12:
13: /******************************Public*Data*Struct*************************\
14: * This contains the GDIINFO structure that contains the device capabilities
15: * which are passed to the NT GDI engine during dhpdevEnablePDEV.
16: *
17: \**************************************************************************/
18:
19: GDIINFO gaulCap = {
20:
21: 0x1000, // ulVersion (our driver is version 1.000)
22: DT_RASDISPLAY, // ulTechnology
23: 240, // ulHorzSize
24: 180, // ulVertSize
25: 0, // ulHorzRes (filled in at initialization)
26: 0, // ulVertRes (filled in at initialization)
27: 4, // cBitsPixel
28: 1, // cPlanes
29: 16, // ulNumColors
30: 0, // flRaster (DDI reserved field)
31:
32: 0, // ulLogPixelsX (filled in at initialization)
33: 0, // ulLogPixelsY (filled in at initialization)
34:
35: TC_RA_ABLE | TC_SCROLLBLT, // flTextCaps
36:
37: 6, // ulDACRed
38: 6, // ulDACGree
39: 6, // ulDACBlue
40:
41: 0x0024, // ulAspectX (one-to-one aspect ratio)
42: 0x0024, // ulAspectY
43: 0x0033, // ulAspectXY
44:
45: 1, // xStyleStep
46: 1, // yStyleSte;
47: 3, // denStyleStep
48:
49: { 0, 0 }, // ptlPhysOffset
50: { 0, 0 }, // szlPhysSize
51:
52: 0, // ulNumPalReg (win3.1 16 color drivers say 0 too)
53:
54: // These fields are for halftone initialization.
55:
56: { // ciDevice, ColorInfo
57: { 6700, 3300, 0 }, // Red
58: { 2100, 7100, 0 }, // Green
59: { 1400, 800, 0 }, // Blue
60: { 1750, 3950, 0 }, // Cyan
61: { 4050, 2050, 0 }, // Magenta
62: { 4400, 5200, 0 }, // Yellow
63: { 3127, 3290, 0 }, // AlignmentWhite
64: 20000, // RedGamma
65: 20000, // GreenGamma
66: 20000, // BlueGamma
67: 0, 0, 0, 0, 0, 0
68: },
69:
70: 0, // ulDevicePelsDPI (filled in at initialization)
71: PRIMARY_ORDER_CBA, // ulPrimaryOrder
72: HT_PATSIZE_4x4_M, // ulHTPatternSize
73: HT_FORMAT_4BPP_IRGB, // ulHTOutputFormat
74: HT_FLAG_ADDITIVE_PRIMS // flHTFlags
75:
76: };
77:
78: /******************************Public*Data*Struct*************************\
79: * LOGPALETTE
80: *
81: * This is the palette for the VGA.
82: *
83: \**************************************************************************/
84:
85: // Little bit of hacking to get this to compile happily.
86:
87: typedef struct _VGALOGPALETTE
88: {
89: USHORT ident;
90: USHORT NumEntries;
91: PALETTEENTRY palPalEntry[16];
92: } VGALOGPALETTE;
93:
94: const VGALOGPALETTE logPalVGA =
95: {
96:
97: 0x400, // driver version
98: 16, // num entries
99: {
100: { 0, 0, 0, 0 }, // 0
101: { 0x80,0, 0, 0 }, // 1
102: { 0, 0x80,0, 0 }, // 2
103: { 0x80,0x80,0, 0 }, // 3
104: { 0, 0, 0x80,0 }, // 4
105: { 0x80,0, 0x80,0 }, // 5
106: { 0, 0x80,0x80,0 }, // 6
107: { 0x80,0x80,0x80,0 }, // 7
108:
109: { 0xC0,0xC0,0xC0,0 }, // 8
110: { 0xFF,0, 0, 0 }, // 9
111: { 0, 0xFF,0, 0 }, // 10
112: { 0xFF,0xFF,0, 0 }, // 11
113: { 0, 0, 0xFF,0 }, // 12
114: { 0xFF,0, 0xFF,0 }, // 13
115: { 0, 0xFF,0xFF,0 }, // 14
116: { 0xFF,0xFF,0xFF,0 } // 15
117: }
118: };
119:
120:
121: /******************************Public*Routine******************************\
122: * DEVINFO
123: *
124: * This is the devinfo structure passed back to the engine in DrvEnablePDEV
125: *
126: \**************************************************************************/
127:
128: #define SYSTM_LOGFONT {16,7,0,0,700,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,VARIABLE_PITCH | FF_DONTCARE,L"System"}
129: #define HELVE_LOGFONT {12,9,0,0,400,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_STROKE_PRECIS,PROOF_QUALITY,VARIABLE_PITCH | FF_DONTCARE, L"MS Sans Serif"}
130: #define COURI_LOGFONT {12,9,0,0,400,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_STROKE_PRECIS,PROOF_QUALITY,FIXED_PITCH | FF_DONTCARE, L"Courier"}
131:
132: DEVINFO devinfoVGA =
133: {
134: (GCAPS_OPAQUERECT | GCAPS_HORIZSTRIKE | GCAPS_ALTERNATEFILL | GCAPS_MONO_DITHER | GCAPS_COLOR_DITHER |
135: GCAPS_WINDINGFILL | GCAPS_TRAPPAINT), // Graphics capabilities
136: SYSTM_LOGFONT, // Default font description
137: HELVE_LOGFONT, // ANSI variable font description
138: COURI_LOGFONT, // ANSI fixed font description
139: 0, // Count of device fonts
140: BMF_4BPP, // preferred DIB format
141: 8, // Width of color dither
142: 8, // Height of color dither
143: 0 // Default palette to use for this device
144: };
145:
146: /******************************Public*Data*Struct*************************\
147: * gaajPat
148: *
149: * These are the standard patterns defined Windows, they are used to produce
150: * hatch brushes, grey brushes etc.
151: *
152: \**************************************************************************/
153:
154: BYTE gaajPat[HS_DDI_MAX][32] = {
155:
156: { 0x00,0x00,0x00,0x00, // ........ HS_HORIZONTAL 0
157: 0x00,0x00,0x00,0x00, // ........
158: 0x00,0x00,0x00,0x00, // ........
159: 0xff,0x00,0x00,0x00, // ********
160: 0x00,0x00,0x00,0x00, // ........
161: 0x00,0x00,0x00,0x00, // ........
162: 0x00,0x00,0x00,0x00, // ........
163: 0x00,0x00,0x00,0x00 }, // ........
164:
165: { 0x08,0x00,0x00,0x00, // ....*... HS_VERTICAL 1
166: 0x08,0x00,0x00,0x00, // ....*...
167: 0x08,0x00,0x00,0x00, // ....*...
168: 0x08,0x00,0x00,0x00, // ....*...
169: 0x08,0x00,0x00,0x00, // ....*...
170: 0x08,0x00,0x00,0x00, // ....*...
171: 0x08,0x00,0x00,0x00, // ....*...
172: 0x08,0x00,0x00,0x00 }, // ....*...
173:
174: { 0x80,0x00,0x00,0x00, // *....... HS_FDIAGONAL 2
175: 0x40,0x00,0x00,0x00, // .*......
176: 0x20,0x00,0x00,0x00, // ..*.....
177: 0x10,0x00,0x00,0x00, // ...*....
178: 0x08,0x00,0x00,0x00, // ....*...
179: 0x04,0x00,0x00,0x00, // .....*..
180: 0x02,0x00,0x00,0x00, // ......*.
181: 0x01,0x00,0x00,0x00 }, // .......*
182:
183: { 0x01,0x00,0x00,0x00, // .......* HS_BDIAGONAL 3
184: 0x02,0x00,0x00,0x00, // ......*.
185: 0x04,0x00,0x00,0x00, // .....*..
186: 0x08,0x00,0x00,0x00, // ....*...
187: 0x10,0x00,0x00,0x00, // ...*....
188: 0x20,0x00,0x00,0x00, // ..*.....
189: 0x40,0x00,0x00,0x00, // .*......
190: 0x80,0x00,0x00,0x00 }, // *.......
191:
192: { 0x08,0x00,0x00,0x00, // ....*... HS_CROSS 4
193: 0x08,0x00,0x00,0x00, // ....*...
194: 0x08,0x00,0x00,0x00, // ....*...
195: 0xff,0x00,0x00,0x00, // ********
196: 0x08,0x00,0x00,0x00, // ....*...
197: 0x08,0x00,0x00,0x00, // ....*...
198: 0x08,0x00,0x00,0x00, // ....*...
199: 0x08,0x00,0x00,0x00 }, // ....*...
200:
201: { 0x81,0x00,0x00,0x00, // *......* HS_DIAGCROSS 5
202: 0x42,0x00,0x00,0x00, // .*....*.
203: 0x24,0x00,0x00,0x00, // ..*..*..
204: 0x18,0x00,0x00,0x00, // ...**...
205: 0x18,0x00,0x00,0x00, // ...**...
206: 0x24,0x00,0x00,0x00, // ..*..*..
207: 0x42,0x00,0x00,0x00, // .*....*.
208: 0x81,0x00,0x00,0x00 }, // *......*
209:
210: { 0x81,0x00,0x00,0x00, // *......* HS_FDIAGONAL1 6
211: 0x60,0x00,0x00,0x00, // .**.....
212: 0x18,0x00,0x00,0x00, // ...**...
213: 0x06,0x00,0x00,0x00, // .....**.
214: 0x81,0x00,0x00,0x00, // *......*
215: 0x60,0x00,0x00,0x00, // .**.....
216: 0x18,0x00,0x00,0x00, // ...**...
217: 0x06,0x00,0x00,0x00 }, // .....**.
218:
219: { 0x81,0x00,0x00,0x00, // *......* HS_BDIAGONAL1 7
220: 0x06,0x00,0x00,0x00, // .....**.
221: 0x18,0x00,0x00,0x00, // ...**...
222: 0x60,0x00,0x00,0x00, // .**.....
223: 0x81,0x00,0x00,0x00, // *......*
224: 0x06,0x00,0x00,0x00, // .....**.
225: 0x18,0x00,0x00,0x00, // ...**...
226: 0x60,0x00,0x00,0x00 }, // .**.....
227:
228: { 0xFF,0x00,0x00,0x00, // ******** HS_SOLID 8
229: 0xFF,0x00,0x00,0x00, // ********
230: 0xFF,0x00,0x00,0x00, // ********
231: 0xFF,0x00,0x00,0x00, // ********
232: 0xFF,0x00,0x00,0x00, // ********
233: 0xFF,0x00,0x00,0x00, // ********
234: 0xFF,0x00,0x00,0x00, // ********
235: 0xFF,0x00,0x00,0x00 }, // ********
236:
237: { 0x38,0x00,0x00,0x00, // ..***... HS_DENSE1 9
238: 0x7c,0x00,0x00,0x00, // .*****..
239: 0x7c,0x00,0x00,0x00, // .*****..
240: 0x38,0x00,0x00,0x00, // ..***...
241: 0x83,0x00,0x00,0x00, // *.....**
242: 0xc7,0x00,0x00,0x00, // **...***
243: 0xc7,0x00,0x00,0x00, // **...***
244: 0x83,0x00,0x00,0x00 }, // *.....**
245:
246: { 0x38,0x00,0x00,0x00, // ..***... HS_DENSE2 10
247: 0x6c,0x00,0x00,0x00, // .**.**..
248: 0x54,0x00,0x00,0x00, // .*.*.*..
249: 0x38,0x00,0x00,0x00, // ..***...
250: 0x83,0x00,0x00,0x00, // *.....**
251: 0xc6,0x00,0x00,0x00, // **...**.
252: 0x45,0x00,0x00,0x00, // .*...*.*
253: 0x83,0x00,0x00,0x00 }, // *.....**
254:
255: { 0x18,0x00,0x00,0x00, // ...**... HS_DENSE3 11
256: 0x3c,0x00,0x00,0x00, // ..****..
257: 0x34,0x00,0x00,0x00, // ..**.*..
258: 0x18,0x00,0x00,0x00, // ...**...
259: 0x81,0x00,0x00,0x00, // *......*
260: 0xc3,0x00,0x00,0x00, // **....**
261: 0x43,0x00,0x00,0x00, // .*....**
262: 0x81,0x00,0x00,0x00 }, // *......*
263:
264: { 0x18,0x00,0x00,0x00, // ...**... HS_DENSE4 12
265: 0x2c,0x00,0x00,0x00, // ..*.**..
266: 0x24,0x00,0x00,0x00, // ..*..*..
267: 0x18,0x00,0x00,0x00, // ...**...
268: 0x81,0x00,0x00,0x00, // *......*
269: 0xc1,0x00,0x00,0x00, // **....*.
270: 0x42,0x00,0x00,0x00, // .*....*.
271: 0x81,0x00,0x00,0x00 }, // *......*
272:
273: { 0x10,0x00,0x00,0x00, // ...*.... HS_DENSE5 13
274: 0x38,0x00,0x00,0x00, // ..***...
275: 0x28,0x00,0x00,0x00, // ..*.*...
276: 0x10,0x00,0x00,0x00, // ...*....
277: 0x01,0x00,0x00,0x00, // .......*
278: 0x83,0x00,0x00,0x00, // *.....**
279: 0x82,0x00,0x00,0x00, // *.....*.
280: 0x01,0x00,0x00,0x00 }, // .......*
281:
282: { 0x00,0x00,0x00,0x00, // ........ HS_DENSE6 14
283: 0x10,0x00,0x00,0x00, // ...*....
284: 0x38,0x00,0x00,0x00, // ..***...
285: 0x10,0x00,0x00,0x00, // ...*....
286: 0x00,0x00,0x00,0x00, // ........
287: 0x01,0x00,0x00,0x00, // .......*
288: 0x83,0x00,0x00,0x00, // *.....**
289: 0x01,0x00,0x00,0x00 }, // .......*
290:
291: { 0x00,0x00,0x00,0x00, // ........ HS_DENSE7 15
292: 0x10,0x00,0x00,0x00, // ...*....
293: 0x30,0x00,0x00,0x00, // ..**....
294: 0x00,0x00,0x00,0x00, // ........
295: 0x00,0x00,0x00,0x00, // ........
296: 0x01,0x00,0x00,0x00, // .......*
297: 0x03,0x00,0x00,0x00, // ......**
298: 0x00,0x00,0x00,0x00 }, // ........
299:
300: { 0x00,0x00,0x00,0x00, // ........ HS_DENSE8 16
301: 0x00,0x00,0x00,0x00, // ........
302: 0x20,0x00,0x00,0x00, // ..*.....
303: 0x00,0x00,0x00,0x00, // ........
304: 0x00,0x00,0x00,0x00, // ........
305: 0x00,0x00,0x00,0x00, // ........
306: 0x02,0x00,0x00,0x00, // ......*.
307: 0x00,0x00,0x00,0x00 }, // ........
308:
309: { 0x00,0x00,0x00,0x00, // ........ HS_NOSHADE 17
310: 0x00,0x00,0x00,0x00, // ........
311: 0x00,0x00,0x00,0x00, // ........
312: 0x00,0x00,0x00,0x00, // ........
313: 0x00,0x00,0x00,0x00, // ........
314: 0x00,0x00,0x00,0x00, // ........
315: 0x00,0x00,0x00,0x00, // ........
316: 0x00,0x00,0x00,0x00 }, // ........
317:
318: { 0xAA,0x00,0x00,0x00, // *.*.*.*. HS_HALFTONE 18
319: 0x55,0x00,0x00,0x00, // .*.*.*.*
320: 0xAA,0x00,0x00,0x00, // *.*.*.*.
321: 0x55,0x00,0x00,0x00, // .*.*.*.*
322: 0xAA,0x00,0x00,0x00, // *.*.*.*.
323: 0x55,0x00,0x00,0x00, // .*.*.*.*
324: 0xAA,0x00,0x00,0x00, // *.*.*.*.
325: 0x55,0x00,0x00,0x00 } // .*.*.*.*
326: };
327:
328: // We pre-realize all of our hatch brushes here.
329:
330: BYTE gaajRealizedPat[HS_DDI_MAX][32] = {
331:
332: { 0x00,0x00, // ........ HS_HORIZONTAL 0
333: 0x00,0x00, // ........
334: 0x00,0x00, // ........
335: 0xff,0xff, // ********
336: 0x00,0x00, // ........
337: 0x00,0x00, // ........
338: 0x00,0x00, // ........
339: 0x00,0x00}, // ........
340:
341: { 0x08,0x08, // ....*... HS_VERTICAL 1
342: 0x08,0x08, // ....*...
343: 0x08,0x08, // ....*...
344: 0x08,0x08, // ....*...
345: 0x08,0x08, // ....*...
346: 0x08,0x08, // ....*...
347: 0x08,0x08, // ....*...
348: 0x08,0x08}, // ....*...
349:
350: { 0x80,0x80, // *....... HS_FDIAGONAL 2
351: 0x40,0x40, // .*......
352: 0x20,0x20, // ..*.....
353: 0x10,0x10, // ...*....
354: 0x08,0x08, // ....*...
355: 0x04,0x04, // .....*..
356: 0x02,0x02, // ......*.
357: 0x01,0x01}, // .......*
358:
359: { 0x01,0x01, // .......* HS_BDIAGONAL 3
360: 0x02,0x02, // ......*.
361: 0x04,0x04, // .....*..
362: 0x08,0x08, // ....*...
363: 0x10,0x10, // ...*....
364: 0x20,0x20, // ..*.....
365: 0x40,0x40, // .*......
366: 0x80,0x80}, // *.......
367:
368: { 0x08,0x08, // ....*... HS_CROSS 4
369: 0x08,0x08, // ....*...
370: 0x08,0x08, // ....*...
371: 0xff,0xff, // ********
372: 0x08,0x08, // ....*...
373: 0x08,0x08, // ....*...
374: 0x08,0x08, // ....*...
375: 0x08,0x08}, // ....*...
376:
377: { 0x81,0x81, // *......* HS_DIAGCROSS 5
378: 0x42,0x42, // .*....*.
379: 0x24,0x24, // ..*..*..
380: 0x18,0x18, // ...**...
381: 0x18,0x18, // ...**...
382: 0x24,0x24, // ..*..*..
383: 0x42,0x42, // .*....*.
384: 0x81,0x81}, // *......*
385:
386: { 0x81,0x81, // *......* HS_FDIAGONAL1 6
387: 0x60,0x60, // .**.....
388: 0x18,0x18, // ...**...
389: 0x06,0x06, // .....**.
390: 0x81,0x81, // *......*
391: 0x60,0x60, // .**.....
392: 0x18,0x18, // ...**...
393: 0x06,0x06}, // .....**.
394:
395: { 0x81,0x81, // *......* HS_BDIAGONAL1 7
396: 0x06,0x06, // .....**.
397: 0x18,0x18, // ...**...
398: 0x60,0x60, // .**.....
399: 0x81,0x81, // *......*
400: 0x06,0x06, // .....**.
401: 0x18,0x18, // ...**...
402: 0x60,0x60}, // .**.....
403:
404: { 0xFF,0xFF, // ******** HS_SOLID 8
405: 0xFF,0xFF, // ********
406: 0xFF,0xFF, // ********
407: 0xFF,0xFF, // ********
408: 0xFF,0xFF, // ********
409: 0xFF,0xFF, // ********
410: 0xFF,0xFF, // ********
411: 0xFF,0xFF}, // ********
412:
413: { 0x38,0x38, // ..***... HS_DENSE1 9
414: 0x7c,0x7c, // .*****..
415: 0x7c,0x7c, // .*****..
416: 0x38,0x38, // ..***...
417: 0x83,0x83, // *.....**
418: 0xc7,0xc7, // **...***
419: 0xc7,0xc7, // **...***
420: 0x83,0x83}, // *.....**
421:
422: { 0x38,0x38, // ..***... HS_DENSE2 10
423: 0x6c,0x6c, // .**.**..
424: 0x54,0x54, // .*.*.*..
425: 0x38,0x38, // ..***...
426: 0x83,0x83, // *.....**
427: 0xc6,0xc6, // **...**.
428: 0x45,0x45, // .*...*.*
429: 0x83,0x83}, // *.....**
430:
431: { 0x18,0x18, // ...**... HS_DENSE3 11
432: 0x3c,0x3c, // ..****..
433: 0x34,0x34, // ..**.*..
434: 0x18,0x18, // ...**...
435: 0x81,0x81, // *......*
436: 0xc3,0xc3, // **....**
437: 0x43,0x43, // .*....**
438: 0x81,0x81}, // *......*
439:
440: { 0x18,0x18, // ...**... HS_DENSE4 12
441: 0x2c,0x2c, // ..*.**..
442: 0x24,0x24, // ..*..*..
443: 0x18,0x18, // ...**...
444: 0x81,0x81, // *......*
445: 0xc1,0xc1, // **....*.
446: 0x42,0x42, // .*....*.
447: 0x81,0x81}, // *......*
448:
449: { 0x10,0x10, // ...*.... HS_DENSE5 13
450: 0x38,0x38, // ..***...
451: 0x28,0x28, // ..*.*...
452: 0x10,0x10, // ...*....
453: 0x01,0x01, // .......*
454: 0x83,0x83, // *.....**
455: 0x82,0x82, // *.....*.
456: 0x01,0x01}, // .......*
457:
458: { 0x00,0x00, // ........ HS_DENSE6 14
459: 0x10,0x10, // ...*....
460: 0x38,0x38, // ..***...
461: 0x10,0x10, // ...*....
462: 0x00,0x00, // ........
463: 0x01,0x01, // .......*
464: 0x83,0x83, // *.....**
465: 0x01,0x01}, // .......*
466:
467: { 0x00,0x00, // ........ HS_DENSE7 15
468: 0x10,0x10, // ...*....
469: 0x30,0x30, // ..**....
470: 0x00,0x00, // ........
471: 0x00,0x00, // ........
472: 0x01,0x01, // .......*
473: 0x03,0x03, // ......**
474: 0x00,0x00}, // ........
475:
476: { 0x00,0x00, // ........ HS_DENSE8 16
477: 0x00,0x00, // ........
478: 0x20,0x20, // ..*.....
479: 0x00,0x00, // ........
480: 0x00,0x00, // ........
481: 0x00,0x00, // ........
482: 0x02,0x02, // ......*.
483: 0x00,0x00}, // ........
484:
485: { 0x00,0x00, // ........ HS_NOSHADE 17
486: 0x00,0x00, // ........
487: 0x00,0x00, // ........
488: 0x00,0x00, // ........
489: 0x00,0x00, // ........
490: 0x00,0x00, // ........
491: 0x00,0x00, // ........
492: 0x00,0x00}, // ........
493:
494: { 0xAA,0xAA, // *.*.*.*. HS_HALFTONE 18
495: 0x55,0x55, // .*.*.*.*
496: 0xAA,0xAA, // *.*.*.*.
497: 0x55,0x55, // .*.*.*.*
498: 0xAA,0xAA, // *.*.*.*.
499: 0x55,0x55, // .*.*.*.*
500: 0xAA,0xAA, // *.*.*.*.
501: 0x55,0x55} // .*.*.*.*
502: };
503:
504: // DrvRealizeBrush uses this table to get to the pre-realized version of
505: // The hatched brush. The first number is the "real" width. The second
506: // number is the number of bits one must shift right to divide a y coord
507: // by the height of this brush (power of 2 divisor). This allows us to quickly
508: // figure out how many passes are in our venetian blind. For example, the
509: // HS_VERTICAL brush is really one scan line (0x8) repeated 8 times. We
510: // view this as a 1 high pattern. This will result in a one pass blt. The
511: // HS_HALFTONE brush is really a repeating 2 high pattern. So we can do this
512: // in two passes. Most of the other hatches are 8 high so we will have to
513: // venetian blind our pattern to the screen with 8 passes.
514:
515: ULONG gRealizedBrushHeight[] = {
516: 8, 3,//HS_HORIZONTAL 0
517: 1, 0,//HS_VERTICAL 1
518: 8, 3,//HS_FDIAGONAL 2
519: 8, 3,//HS_BDIAGONAL 3
520: 8, 3,//HS_CROSS 4
521: 8, 3,//HS_DIAGCROSS 5
522: 8, 3,//HS_FDIAGONAL1 6
523: 8, 3,//HS_BDIAGONAL1 7
524: 1, 0,//HS_SOLID 8
525: 8, 3,//HS_DENSE1 9
526: 8, 3,//HS_DENSE2 10
527: 8, 3,//HS_DENSE3 11
528: 8, 3,//HS_DENSE4 12
529: 8, 3,//HS_DENSE5 13
530: 8, 3,//HS_DENSE6 14
531: 8, 3,//HS_DENSE7 15
532: 8, 3,//HS_DENSE8 16
533: 1, 0,//HS_NOSHADE 17
534: 2, 1,//HS_HALFTONE 18
535: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.