1
/* $XFree86: xc/programs/Xserver/iplan2p4/iplpack.c,v 3.0 1996/08/18 01:54:56 dawes Exp $ */
2
/* Modified nov 94 by Martin Schaller (Martin_Schaller@maus.r.de) for use with
5
/* abcd abcd abcd abcd abcd abcd abcd abcd */
6
/* aaaa aaaa bbbb bbbb cccc cccc dddd dddd */
8
unsigned long tabi[256] = {
9
0x00000000,0x00001000,0x10000000,0x10001000,
10
0x00002000,0x00003000,0x10002000,0x10003000,
11
0x20000000,0x20001000,0x30000000,0x30001000,
12
0x20002000,0x20003000,0x30002000,0x30003000,
13
0x00004000,0x00005000,0x10004000,0x10005000,
14
0x00006000,0x00007000,0x10006000,0x10007000,
15
0x20004000,0x20005000,0x30004000,0x30005000,
16
0x20006000,0x20007000,0x30006000,0x30007000,
17
0x40000000,0x40001000,0x50000000,0x50001000,
18
0x40002000,0x40003000,0x50002000,0x50003000,
19
0x60000000,0x60001000,0x70000000,0x70001000,
20
0x60002000,0x60003000,0x70002000,0x70003000,
21
0x40004000,0x40005000,0x50004000,0x50005000,
22
0x40006000,0x40007000,0x50006000,0x50007000,
23
0x60004000,0x60005000,0x70004000,0x70005000,
24
0x60006000,0x60007000,0x70006000,0x70007000,
25
0x00008000,0x00009000,0x10008000,0x10009000,
26
0x0000a000,0x0000b000,0x1000a000,0x1000b000,
27
0x20008000,0x20009000,0x30008000,0x30009000,
28
0x2000a000,0x2000b000,0x3000a000,0x3000b000,
29
0x0000c000,0x0000d000,0x1000c000,0x1000d000,
30
0x0000e000,0x0000f000,0x1000e000,0x1000f000,
31
0x2000c000,0x2000d000,0x3000c000,0x3000d000,
32
0x2000e000,0x2000f000,0x3000e000,0x3000f000,
33
0x40008000,0x40009000,0x50008000,0x50009000,
34
0x4000a000,0x4000b000,0x5000a000,0x5000b000,
35
0x60008000,0x60009000,0x70008000,0x70009000,
36
0x6000a000,0x6000b000,0x7000a000,0x7000b000,
37
0x4000c000,0x4000d000,0x5000c000,0x5000d000,
38
0x4000e000,0x4000f000,0x5000e000,0x5000f000,
39
0x6000c000,0x6000d000,0x7000c000,0x7000d000,
40
0x6000e000,0x6000f000,0x7000e000,0x7000f000,
41
0x80000000,0x80001000,0x90000000,0x90001000,
42
0x80002000,0x80003000,0x90002000,0x90003000,
43
0xa0000000,0xa0001000,0xb0000000,0xb0001000,
44
0xa0002000,0xa0003000,0xb0002000,0xb0003000,
45
0x80004000,0x80005000,0x90004000,0x90005000,
46
0x80006000,0x80007000,0x90006000,0x90007000,
47
0xa0004000,0xa0005000,0xb0004000,0xb0005000,
48
0xa0006000,0xa0007000,0xb0006000,0xb0007000,
49
0xc0000000,0xc0001000,0xd0000000,0xd0001000,
50
0xc0002000,0xc0003000,0xd0002000,0xd0003000,
51
0xe0000000,0xe0001000,0xf0000000,0xf0001000,
52
0xe0002000,0xe0003000,0xf0002000,0xf0003000,
53
0xc0004000,0xc0005000,0xd0004000,0xd0005000,
54
0xc0006000,0xc0007000,0xd0006000,0xd0007000,
55
0xe0004000,0xe0005000,0xf0004000,0xf0005000,
56
0xe0006000,0xe0007000,0xf0006000,0xf0007000,
57
0x80008000,0x80009000,0x90008000,0x90009000,
58
0x8000a000,0x8000b000,0x9000a000,0x9000b000,
59
0xa0008000,0xa0009000,0xb0008000,0xb0009000,
60
0xa000a000,0xa000b000,0xb000a000,0xb000b000,
61
0x8000c000,0x8000d000,0x9000c000,0x9000d000,
62
0x8000e000,0x8000f000,0x9000e000,0x9000f000,
63
0xa000c000,0xa000d000,0xb000c000,0xb000d000,
64
0xa000e000,0xa000f000,0xb000e000,0xb000f000,
65
0xc0008000,0xc0009000,0xd0008000,0xd0009000,
66
0xc000a000,0xc000b000,0xd000a000,0xd000b000,
67
0xe0008000,0xe0009000,0xf0008000,0xf0009000,
68
0xe000a000,0xe000b000,0xf000a000,0xf000b000,
69
0xc000c000,0xc000d000,0xd000c000,0xd000d000,
70
0xc000e000,0xc000f000,0xd000e000,0xd000f000,
71
0xe000c000,0xe000d000,0xf000c000,0xf000d000,
72
0xe000e000,0xe000f000,0xf000e000,0xf000f000,
74
static unsigned long tabp[256] = {
75
0x00000000,0x00020000,0x00080000,0x000a0000,
76
0x00200000,0x00220000,0x00280000,0x002a0000,
77
0x00800000,0x00820000,0x00880000,0x008a0000,
78
0x00a00000,0x00a20000,0x00a80000,0x00aa0000,
79
0x02000000,0x02020000,0x02080000,0x020a0000,
80
0x02200000,0x02220000,0x02280000,0x022a0000,
81
0x02800000,0x02820000,0x02880000,0x028a0000,
82
0x02a00000,0x02a20000,0x02a80000,0x02aa0000,
83
0x08000000,0x08020000,0x08080000,0x080a0000,
84
0x08200000,0x08220000,0x08280000,0x082a0000,
85
0x08800000,0x08820000,0x08880000,0x088a0000,
86
0x08a00000,0x08a20000,0x08a80000,0x08aa0000,
87
0x0a000000,0x0a020000,0x0a080000,0x0a0a0000,
88
0x0a200000,0x0a220000,0x0a280000,0x0a2a0000,
89
0x0a800000,0x0a820000,0x0a880000,0x0a8a0000,
90
0x0aa00000,0x0aa20000,0x0aa80000,0x0aaa0000,
91
0x20000000,0x20020000,0x20080000,0x200a0000,
92
0x20200000,0x20220000,0x20280000,0x202a0000,
93
0x20800000,0x20820000,0x20880000,0x208a0000,
94
0x20a00000,0x20a20000,0x20a80000,0x20aa0000,
95
0x22000000,0x22020000,0x22080000,0x220a0000,
96
0x22200000,0x22220000,0x22280000,0x222a0000,
97
0x22800000,0x22820000,0x22880000,0x228a0000,
98
0x22a00000,0x22a20000,0x22a80000,0x22aa0000,
99
0x28000000,0x28020000,0x28080000,0x280a0000,
100
0x28200000,0x28220000,0x28280000,0x282a0000,
101
0x28800000,0x28820000,0x28880000,0x288a0000,
102
0x28a00000,0x28a20000,0x28a80000,0x28aa0000,
103
0x2a000000,0x2a020000,0x2a080000,0x2a0a0000,
104
0x2a200000,0x2a220000,0x2a280000,0x2a2a0000,
105
0x2a800000,0x2a820000,0x2a880000,0x2a8a0000,
106
0x2aa00000,0x2aa20000,0x2aa80000,0x2aaa0000,
107
0x80000000,0x80020000,0x80080000,0x800a0000,
108
0x80200000,0x80220000,0x80280000,0x802a0000,
109
0x80800000,0x80820000,0x80880000,0x808a0000,
110
0x80a00000,0x80a20000,0x80a80000,0x80aa0000,
111
0x82000000,0x82020000,0x82080000,0x820a0000,
112
0x82200000,0x82220000,0x82280000,0x822a0000,
113
0x82800000,0x82820000,0x82880000,0x828a0000,
114
0x82a00000,0x82a20000,0x82a80000,0x82aa0000,
115
0x88000000,0x88020000,0x88080000,0x880a0000,
116
0x88200000,0x88220000,0x88280000,0x882a0000,
117
0x88800000,0x88820000,0x88880000,0x888a0000,
118
0x88a00000,0x88a20000,0x88a80000,0x88aa0000,
119
0x8a000000,0x8a020000,0x8a080000,0x8a0a0000,
120
0x8a200000,0x8a220000,0x8a280000,0x8a2a0000,
121
0x8a800000,0x8a820000,0x8a880000,0x8a8a0000,
122
0x8aa00000,0x8aa20000,0x8aa80000,0x8aaa0000,
123
0xa0000000,0xa0020000,0xa0080000,0xa00a0000,
124
0xa0200000,0xa0220000,0xa0280000,0xa02a0000,
125
0xa0800000,0xa0820000,0xa0880000,0xa08a0000,
126
0xa0a00000,0xa0a20000,0xa0a80000,0xa0aa0000,
127
0xa2000000,0xa2020000,0xa2080000,0xa20a0000,
128
0xa2200000,0xa2220000,0xa2280000,0xa22a0000,
129
0xa2800000,0xa2820000,0xa2880000,0xa28a0000,
130
0xa2a00000,0xa2a20000,0xa2a80000,0xa2aa0000,
131
0xa8000000,0xa8020000,0xa8080000,0xa80a0000,
132
0xa8200000,0xa8220000,0xa8280000,0xa82a0000,
133
0xa8800000,0xa8820000,0xa8880000,0xa88a0000,
134
0xa8a00000,0xa8a20000,0xa8a80000,0xa8aa0000,
135
0xaa000000,0xaa020000,0xaa080000,0xaa0a0000,
136
0xaa200000,0xaa220000,0xaa280000,0xaa2a0000,
137
0xaa800000,0xaa820000,0xaa880000,0xaa8a0000,
138
0xaaa00000,0xaaa20000,0xaaa80000,0xaaaa0000,
142
iplUnpackLine(int planes, int longs, unsigned int *psrc, unsigned short *ipsrc)
144
unsigned long temp,m;
145
unsigned char *t=(unsigned char *) &temp;
146
unsigned char *i=(unsigned char *) ipsrc;
147
unsigned char *s=(unsigned char *) psrc;
151
for (j = 0 ; j < longs ; j++)
153
*((long *) ipsrc)++=(tabi[s[0]] >> 0) |
161
for (j = 0 ; j < longs ; j++)
163
temp= (tabi[s[0]] >> 0) |
167
temp= (tabi[t[0]] >> 0) |
188
for (j = 0 ; j < longs ; j++)
190
temp= (tabi[s[0]] >> 0) |
195
temp= (tabi[t[0]] >> 0) |
200
temp= (tabi[t[0]] >> 0) |
207
ipsrc[7]=(ipsrc[7] & ~m) | (((temp >> 28) << off) & m);
208
ipsrc[6]=(ipsrc[6] & ~m) | (((temp >> 24) << off) & m);
209
ipsrc[5]=(ipsrc[5] & ~m) | (((temp >> 20) << off) & m);
210
ipsrc[4]=(ipsrc[4] & ~m) | (((temp >> 16) << off) & m);
211
ipsrc[3]=(ipsrc[3] & ~m) | (((temp >> 12) << off) & m);
212
ipsrc[2]=(ipsrc[2] & ~m) | (((temp >> 8) << off) & m);
213
ipsrc[1]=(ipsrc[1] & ~m) | (((temp >> 4) << off) & m);
214
ipsrc[0]=(ipsrc[0] & ~m) | (((temp >> 0) << off) & m);
223
iplPackLine(int planes, int longs, unsigned short *ipdst, unsigned int *pdst)
225
unsigned long temp,m;
226
unsigned char *t=(unsigned char *) &temp;
227
unsigned char *i=(unsigned char *) ipdst;
231
for (j = 0 ; j < longs ; j++)
233
*pdst++=(tabp[i[2]] >> 0) |
241
for (j = 0 ; j < longs ; j++)
244
temp= (tabp[i[7]] >> 0) |
251
temp= (tabp[i[6]] >> 0) |
256
*pdst++=(tabp[t[0]] >> 0) |
263
for (j = 0 ; j < longs ; j++)
267
temp=(((ipdst[7] >> off) & m) << 28) |
268
(((ipdst[6] >> off) & m) << 24) |
269
(((ipdst[5] >> off) & m) << 20) |
270
(((ipdst[4] >> off) & m) << 16) |
271
(((ipdst[3] >> off) & m) << 12) |
272
(((ipdst[2] >> off) & m) << 8) |
273
(((ipdst[1] >> off) & m) << 4) |
274
(((ipdst[0] >> off) & m) << 0);
279
temp= (tabp[t[0]] >> 0) |
284
temp= (tabp[t[0]] >> 0) |
289
*pdst++=(tabp[t[0]] >> 0) |
298
iplpack(unsigned long ipl)
300
unsigned char *ic=(unsigned char *) &ipl;
301
return (tabp[ic[0]]) | /* a0a0a0a0a0a0a0a00000000000000000 */
302
(tabp[ic[2]] >> 1) | /* abababababababab0000000000000000 */
303
(tabp[ic[1]] >> 16) | /* ababababababababa0a0a0a0a0a0a0a0 */
304
(tabp[ic[3]] >> 17); /* abababababababababababababababab */
308
iplunpack(unsigned long pack)
310
unsigned char *ip=(unsigned char *) &pack;
311
return (tabi[ip[0]]) | /* aaaa000000000000bbbb000000000000 */
312
(tabi[ip[1]] >> 4) | /* aaaaaaaa00000000bbbbbbbb00000000 */
313
(tabi[ip[2]] >> 8) | /* aaaaaaaaaaaa0000bbbbbbbbbbbb0000 */
314
(tabi[ip[3]] >> 12); /* aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbb */