1 #include "xbmtools.h"
\r
3 /* these are here instead of the header file because they're not part
\r
4 of the library interface */
\r
7 #define ROL_AL 0xc0d0
\r
8 // mov [si + disp8], imm8
\r
9 #define SHORT_STORE_8 0x44c6
\r
10 // mov [si + disp16], imm8
\r
11 #define STORE_8 0x84c6
\r
12 // mov [si + disp8], imm16
\r
13 #define SHORT_STORE_16 0x44c7
\r
14 // mov [si + disp16], imm16
\r
15 #define STORE_16 0x84c7
\r
17 #define ADC_SI_IMMED 0xd683
\r
23 #define DWORD_PREFIX 0x66
\r
25 #define Emitb(x) *(output + output_used) = (x); output_used++
\r
27 #define Emitw(x) *(output + output_used) = (x) & 255; \
\r
28 *(output + output_used + 1) = (x) >> 8; \
\r
32 int x_compile_bitmap_32 (int logical_screen_width, char far * bitmap,
\r
35 int pix0, pix1, pix2, pix3, numpix, pos;
\r
36 int column = 0, set_column = 0;
\r
37 int scanx = 0, scany = 0;
\r
38 int output_used = 0;
\r
40 int height = LBMHeight(bitmap);
\r
41 int width = LBMWidth(bitmap);
\r
42 int margin = width - 1;
\r
43 int margin2 = margin - 4;
\r
44 int margin4 = margin - 12;
\r
46 while (column < 4) {
\r
48 pix0 = LBMGetPix(scanx, scany, bitmap);
\r
50 if (set_column != column) {
\r
53 Emitw (ADC_SI_IMMED);
\r
56 } while (set_column != column);
\r
59 if (scanx <= margin2) {
\r
60 pix1 = LBMGetPix(scanx + 4, scany, bitmap);
\r
62 &&(scanx <= margin4)) {
\r
64 pix2 = LBMGetPix(scanx + 8, scany, bitmap);
\r
65 pix3 = LBMGetPix(scanx + 12, scany, bitmap);
\r
66 if ((pix2 != 0) && (pix3 != 0)) {
\r
68 Emitb (DWORD_PREFIX);
\r
72 pos = (scany * logical_screen_width) + (scanx >> 2) - 128;
\r
73 if ((pos >= -128) && (pos <= 127)) {
\r
75 Emitw (SHORT_STORE_8);
\r
79 Emitw (SHORT_STORE_16);
\r
105 scanx += (numpix << 2);
\r
106 if (scanx > margin) {
\r
109 if (scany == height) {
\r
116 return(output_used);
\r
120 int x_sizeof_cbitmap_32 (int logical_screen_width, char far * bitmap)
\r
122 int pix0, pix1, pix2, pix3, numpix, pos;
\r
123 int column = 0, set_column = 0;
\r
124 int scanx = 0, scany = 0;
\r
125 int output_used = 1;
\r
127 int height = LBMHeight(bitmap);
\r
128 int width = LBMWidth(bitmap);
\r
129 int margin = width - 1;
\r
130 int margin2 = margin - 4;
\r
131 int margin4 = margin - 12;
\r
133 while (column < 4) {
\r
135 pix0 = LBMGetPix(scanx, scany, bitmap);
\r
137 if (set_column != column) {
\r
141 } while (set_column != column);
\r
144 if (scanx <= margin2) {
\r
145 pix1 = LBMGetPix(scanx + 4, scany, bitmap);
\r
147 &&(scanx <= margin4)) {
\r
149 pix2 = LBMGetPix(scanx + 8, scany, bitmap);
\r
150 pix3 = LBMGetPix(scanx + 12, scany, bitmap);
\r
151 if ((pix2 != 0) && (pix3 != 0)) {
\r
157 pos = (scany * logical_screen_width) + (scanx >> 2) - 128;
\r
158 if ((pos >= -128) && (pos <= 127)) {
\r
176 scanx += (numpix << 2);
\r
177 if (scanx > margin) {
\r
180 if (scany == height) {
\r
186 return(output_used);
\r