31 0xf, 0x1f, 0x3f, 0x7f,
35 0xfff, 0x1fff, 0x3fff, 0x7fff,
38 0x1ffff, 0x3ffff, 0x7ffff,
39 0xfffff, 0x1fffff, 0x3fffff, 0x7fffff,
40 0xffffff, 0x1ffffff, 0x3ffffff, 0x7ffffff,
41 0xfffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff,
48 #define SHOW_OP_DATA (DEBUGGING(BITMAP_OPS) && DEBUGGING(BITMAP_DATA))
57 #ifdef WORD_BIG_ENDIAN
58 #define SEGMENT(m,n) (bit_masks[m] << (BITMAP_BITS - (m) - (n)))
60 #define SEGMENT(m,n) (bit_masks[m] << (n))
66 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
67 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
68 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
69 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
70 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
71 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
72 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
73 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
74 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
75 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
76 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
77 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
78 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
79 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
80 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
81 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
86 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
87 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
88 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
89 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
90 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
91 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
92 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
93 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
94 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
95 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
96 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
97 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
98 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
99 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
100 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
101 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
102 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
103 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
104 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
105 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
106 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
107 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
108 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
109 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
110 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
111 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
112 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
113 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
114 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
115 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
116 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
117 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
133 register Uchar *curr;
145 for(i = 0; i < h; i++) {
146 #ifdef WORD_LITTLE_ENDIAN
147 memcpy(unit, curr, bytes);
152 for(j = 0; j < bytes; curr++, j++)
154 cur += stride - bytes;
176 for(i = 0; i < h; i++) {
177 #ifdef WORD_LITTLE_ENDIAN
180 for(j = 0; j < bytes; curr++, j++)
182 curr += stride - bytes;
184 memcpy(unit, curr, bytes);
248 static const char labels[] = {
249 '1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'0'
258 for(j = 2; j <= bm->
width; j++)
264 fprintf(out,
"%d", (j - sub)/10);
269 for(j = 0; j < bm->
width; j++)
270 putc(labels[j % 10], out);
272 for(i = 0; i < bm->
height; i++) {
275 fprintf(out,
"%3d ", i+1);
276 for(j = 0; j < bm->
width; j++) {
394 for(h = 0; h < bm->
height; h++) {
401 for(w = 0; w < bm->
width; w++) {
440 for(h = 0; h < bm->
height; h++) {
446 for(w = 0; w < bm->
width; w++) {
481 for(h = 0; h < bm->
height; h++) {
488 for(w = 0; w < bm->
width; w++) {
529 for(h = 0; h < bm->
height; h++) {
535 for(w = 0; w < bm->
width; w++) {
581 for(h = 0; h < bm->
height; h++) {
587 for(w = 0; w < bm->
width; w++) {
633 for(h = 0; h < bm->
height; h++) {
639 for(w = 0; w < bm->
width; w++) {
684 for(h = 0; h < bm->
height; h++) {
690 for(w = 0; w < bm->
width; w++) {
770 #ifndef WORD_BIG_ENDIAN
779 #ifdef WORD_BIG_ENDIAN
782 for(cp = ptr; cp < end; cp =
bm_offset(cp, stride))
784 #ifndef WORD_BIG_ENDIAN
787 #ifdef WORD_BIG_ENDIAN
814 x = (int)glyph->
x / hs;
815 if((
int)glyph->
x - x * hs > 0)
817 dest->
w = x +
ROUND((
int)glyph->
w - glyph->
x, hs);
819 z = (int)glyph->
y + 1;
823 dest->
h = y +
ROUND((
int)glyph->
h - z, vs) + 1;
825 dest->
y = glyph->
y / vs;
828 glyph->
w, glyph->
h, glyph->
x, glyph->
y,
829 dest->
w, dest->
h, dest->
x, dest->
y));
835 int rows_left, rows, init_cols;
837 BmUnit *old_ptr, *new_ptr;
841 int sample, min_sample;
856 x = (
int)glyph->
x / hs;
857 init_cols = (int)glyph->
x - x * hs;
862 w = x +
ROUND((
int)glyph->
w - glyph->
x, hs);
864 cols = (int)glyph->
y + 1;
866 rows = cols - y * vs;
871 h = y +
ROUND((
int)glyph->
h - cols, vs) + 1;
877 dest->
y = glyph->
y / vs;
881 old_ptr = oldmap->
data;
882 old_stride = oldmap->
stride;
883 new_ptr = newmap->
data;
884 new_stride = newmap->
stride;
885 rows_left = glyph->
h;
890 cols_left = glyph->
w;
894 while(cols_left > 0) {
898 glyph->
w - cols_left, cols, rows);
899 if(sample >= min_sample)
909 new_ptr =
bm_offset(new_ptr, new_stride);
910 old_ptr =
bm_offset(old_ptr, rows * old_stride);
914 DEBUG((
DBG_BITMAPS,
"shrink_glyph: (%dw,%dh,%dx,%dy) -> (%dw,%dh,%dx,%dy)\n",
915 glyph->
w, glyph->
h, glyph->
x, glyph->
y,
916 dest->
w, dest->
h, dest->
x, dest->
y));
925 int cols_left, cols, init_cols;
926 long sampleval, samplemax;
946 x = (
int)glyph->
x / hs;
947 init_cols = (int)glyph->
x - x * hs;
952 w = x +
ROUND((
int)glyph->
w - glyph->
x, hs);
954 cols = (int)glyph->
y + 1;
956 rows = cols - y * vs;
961 h = y +
ROUND((
int)glyph->
h - cols, vs) + 1;
976 npixels = samplemax + 1;
981 colortab[0] = pk->
fg;
982 colortab[1] = pk->
bg;
983 pixels = &colortab[0];
989 dest->
y = glyph->
y / vs;
995 rows_left = glyph->
h;
997 while(rows_left && y < h) {
1001 cols_left = glyph->
w;
1003 while(cols_left && x < w) {
1004 if(cols > cols_left)
1007 glyph->
w - cols_left, cols, rows);
1009 if(npixels - 1 != samplemax)
1010 sampleval = ((npixels-1) * sampleval) / samplemax;
1011 ASSERT(sampleval < npixels);
1012 dev->
put_pixel(image, x, y, pixels[sampleval]);
1026 for(x = 0; x < w; x++)
1031 DEBUG((
DBG_BITMAPS,
"shrink_glyph_grey: (%dw,%dh,%dx,%dy) -> (%dw,%dh,%dx,%dy)\n",
1032 glyph->
w, glyph->
h, glyph->
x, glyph->
y,
1033 dest->
w, dest->
h, dest->
x, dest->
y));