Subversion Repositories Kolibri OS

Rev

Rev 180 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 180 Rev 6327
1
;**************************************************************************
1
;**************************************************************************
2
;**********************DECODING BMP FILE(1,4,8,24 bits)*********************
2
;**********************DECODING BMP FILE(1,4,8,24 bits)*********************
3
;***************************************************************************
3
;***************************************************************************
4
; BMPTOIMG -Convert BMP format TO IMG format
4
; BMPTOIMG -Convert BMP format TO IMG format
5
;***************************************************************************
5
;***************************************************************************
6
bmptoimg:
6
bmptoimg:
7
 
7
 
8
    mov [bmp_load_area],esi
8
    mov [bmp_load_area],esi
9
    mov [img_dest_area],edi
9
    mov [img_dest_area],edi
10
    xor eax,eax
10
    xor eax,eax
11
    mov ax,word[esi+28]
11
    mov ax,word[esi+28]
12
    mov ebx,[esi+14]
12
    mov ebx,[esi+14]
13
    mov ecx,[esi+18]
13
    mov ecx,[esi+18]
14
    mov edx,[esi+22]
14
    mov edx,[esi+22]
15
    mov [bmp_bits_per_pixel],ax
15
    mov [bmp_bits_per_pixel],ax
16
    mov [bmp_first_structure_size],ebx
16
    mov [bmp_first_structure_size],ebx
17
    mov [Bmp_SizeY],edx
17
    mov [Bmp_SizeY],edx
18
    mov [Bmp_SizeX],ecx
18
    mov [Bmp_SizeX],ecx
19
 
19
 
20
    xor eax,eax
20
    xor eax,eax
21
    mov ax,[esi+28]
21
    mov ax,[esi+28]
22
    mul  dword [esi+18]
22
    mul  dword [esi+18]
23
    add  eax,31
23
    add  eax,31
24
    shr  eax,5
24
    shr  eax,5
25
    mov  dword [bmptoimg_data_area_dwps],eax  ;dwps-doublewords per string
25
    mov  dword [bmptoimg_data_area_dwps],eax  ;dwps-doublewords per string
26
    shl  eax,2
26
    shl  eax,2
27
    mov  dword [bmptoimg_data_area_bps],eax   ;bps-bytes per string
27
    mov  dword [bmptoimg_data_area_bps],eax   ;bps-bytes per string
28
 
28
 
29
    cmp dword [esi+34],0
29
    cmp dword [esi+34],0
30
    jne  yespicsize  ;if picture size is defined
30
    jne  yespicsize  ;if picture size is defined
31
    mul dword [esi+22]
31
    mul dword [esi+22]
32
    mov dword [esi+34],eax
32
    mov dword [esi+34],eax
33
 
33
 
34
  yespicsize:
34
  yespicsize:
35
 
35
 
36
    mov  eax,[bmp_load_area]
36
    mov  eax,[bmp_load_area]
37
    add  eax, [esi+10]	 ;how mach bytes to begin bitmap
37
    add  eax, [esi+10]	 ;how mach bytes to begin bitmap
38
    add  eax, [esi+34]	 ;size of bitmap in BMP file
38
    add  eax, [esi+34]	 ;size of bitmap in BMP file
39
    mov  dword [bmptoimg_data_area_eop],eax   ;eop-end of picture in file
39
    mov  dword [bmptoimg_data_area_eop],eax   ;eop-end of picture in file
40
    ;calculate bytes per string
40
    ;calculate bytes per string
41
    mov  eax, [esi+18]
41
    mov  eax, [esi+18]
42
    lea  eax,[eax+2*eax]   ;3x pixels in eax
42
    lea  eax,[eax+2*eax]   ;3x pixels in eax
43
    mov [bmp_bytes_per_string],eax
43
    mov [bmp_bytes_per_string],eax
44
 
44
 
45
    mov esi,dword [bmptoimg_data_area_eop]
45
    mov esi,dword [bmptoimg_data_area_eop]
46
    sub esi,dword [bmptoimg_data_area_bps]
46
    sub esi,dword [bmptoimg_data_area_bps]
47
 
47
 
48
    mov ebp,[img_dest_area]
48
    mov ebp,[img_dest_area]
49
    mov edi,[img_dest_area]
49
    mov edi,[img_dest_area]
50
    mov ebx,[bmp_load_area]
50
    mov ebx,[bmp_load_area]
51
    add ebx, [bmp_first_structure_size]
51
    add ebx, [bmp_first_structure_size]
52
    add ebx,14		;in ebx start of color table
52
    add ebx,14		;in ebx start of color table
53
 
53
 
54
 
54
 
55
    cmp [bmp_bits_per_pixel],24
55
    cmp [bmp_bits_per_pixel],24
56
    je	convert_to_24bpp
56
    je	convert_to_24bpp
57
 
57
 
58
    cmp [bmp_bits_per_pixel],8
58
    cmp [bmp_bits_per_pixel],8
59
    je convert_to_8bpp
59
    je convert_to_8bpp
60
 
60
 
61
    cmp [bmp_bits_per_pixel],4
61
    cmp [bmp_bits_per_pixel],4
62
    je convert_to_4bpp
62
    je convert_to_4bpp
63
 
63
 
64
    cmp [bmp_bits_per_pixel],1
64
    cmp [bmp_bits_per_pixel],1
65
    je convert_to_1bpp
65
    je convert_to_1bpp
66
 
66
 
67
    jmp end_bmp
67
    jmp end_bmp
68
 
68
 
69
;--------------------------------------------------
69
;--------------------------------------------------
70
;-----------Decoding 24 bit BMP file---------------
70
;-----------Decoding 24 bit BMP file---------------
71
;--------------------------------------------------
71
;--------------------------------------------------
72
convert_to_24bpp:
72
convert_to_24bpp:
73
 
73
 
74
  mov ebx,[Bmp_SizeY]
74
  mov ebx,[Bmp_SizeY]
75
  loop_convert_to_24bpp_y:
75
  loop_convert_to_24bpp_y:
76
 
76
 
77
    mov edi,ebp
77
    mov edi,ebp
78
    mov  ecx,[bmptoimg_data_area_dwps]
78
    mov  ecx,[bmptoimg_data_area_dwps]
79
 
-
 
80
     loop_convert_to_24bpp_x:
-
 
81
 
-
 
82
       mov edx,[esi]
-
 
83
       mov [edi],edx
-
 
84
       add esi,4
79
 
85
       add edi,4
-
 
86
 
80
     cld
87
     dec ecx
-
 
88
     jnz loop_convert_to_24bpp_x
81
     rep movsd
89
 
82
 
90
    sub  esi,[bmptoimg_data_area_bps]
83
    sub  esi,[bmptoimg_data_area_bps]
91
    sub  esi,[bmptoimg_data_area_bps]
84
    sub  esi,[bmptoimg_data_area_bps]
92
 
85
 
93
    add  ebp,eax
86
    add  ebp,eax
94
    dec ebx
87
    dec ebx
95
    jnz loop_convert_to_24bpp_y
88
    jnz loop_convert_to_24bpp_y
96
 
89
 
97
    jmp  end_bmp
90
    jmp  end_bmp
98
;-----------------------------------------------------
91
;-----------------------------------------------------
99
;--------------Decoding 8 bits BMP file---------------
92
;--------------Decoding 8 bits BMP file---------------
100
;-----------------------------------------------------
93
;-----------------------------------------------------
101
 convert_to_8bpp:
94
 convert_to_8bpp:
102
 
95
 
103
    mov ebp,[Bmp_SizeY]
96
    mov ebp,[Bmp_SizeY]
104
    loop_convert_8bpp_y:
97
    loop_convert_8bpp_y:
105
 
98
 
106
      mov ecx,[bmptoimg_data_area_bps]
99
      mov ecx,[bmptoimg_data_area_bps]
107
      push edi
100
      push edi
108
 
101
 
109
      loop_convert_8bpp_x:
102
      loop_convert_8bpp_x:
110
 
103
 
111
	 xor eax,eax
104
	 xor eax,eax
112
	 mov al,byte [esi]
105
	 mov al,byte [esi]
113
	 call converttable
106
	 call converttable
114
	 inc esi
107
	 inc esi
115
	 add edi,3
108
	 add edi,3
116
 
109
 
117
      dec ecx
110
      dec ecx
118
      jnz loop_convert_8bpp_x
111
      jnz loop_convert_8bpp_x
119
 
112
 
120
      pop edi
113
      pop edi
121
 
114
 
122
    add edi,[bmp_bytes_per_string]
115
    add edi,[bmp_bytes_per_string]
123
    sub esi,[bmptoimg_data_area_bps]
116
    sub esi,[bmptoimg_data_area_bps]
124
    sub esi,[bmptoimg_data_area_bps]
117
    sub esi,[bmptoimg_data_area_bps]
125
 
118
 
126
    dec ebp
119
    dec ebp
127
    jnz loop_convert_8bpp_y
120
    jnz loop_convert_8bpp_y
128
 
121
 
129
    jmp end_bmp
122
    jmp end_bmp
130
;-----------------------------------------------------
123
;-----------------------------------------------------
131
;--------------Decoding 4 bits BMP file---------------
124
;--------------Decoding 4 bits BMP file---------------
132
;-----------------------------------------------------
125
;-----------------------------------------------------
133
 convert_to_4bpp:
126
 convert_to_4bpp:
134
 
127
 
135
    mov ebp,[Bmp_SizeY]
128
    mov ebp,[Bmp_SizeY]
136
    loop_convert_4bpp_y:
129
    loop_convert_4bpp_y:
137
 
130
 
138
      mov ecx,[bmptoimg_data_area_bps]
131
      mov ecx,[bmptoimg_data_area_bps]
139
      push edi
132
      push edi
140
 
133
 
141
      loop_convert_4bpp_x:
134
      loop_convert_4bpp_x:
142
 
135
 
143
	 mov [Bmp_save1],ecx
136
	 mov [Bmp_save1],ecx
144
	 xor eax,eax
137
	 xor eax,eax
145
	 mov al,byte [esi]
138
	 mov al,byte [esi]
146
	 xor ecx,ecx
139
	 xor ecx,ecx
147
	 mov cl,al
140
	 mov cl,al
148
	 shr al,4   ;first pixel in byte
141
	 shr al,4   ;first pixel in byte
149
	 and cl,0xf ;second pixel in byte
142
	 and cl,0xf ;second pixel in byte
150
	 call converttable   ;draw first pixel of byte
143
	 call converttable   ;draw first pixel of byte
151
	 mov eax,ecx	       ;move second pixel to register al and draw
144
	 mov eax,ecx	       ;move second pixel to register al and draw
152
	 add edi,3
145
	 add edi,3
153
	 call converttable   ;draw second pixel of byte
146
	 call converttable   ;draw second pixel of byte
154
	 add edi,3
147
	 add edi,3
155
	 mov ecx,[Bmp_save1]
148
	 mov ecx,[Bmp_save1]
156
	 inc esi
149
	 inc esi
157
 
150
 
158
      dec ecx
151
      dec ecx
159
      jnz loop_convert_4bpp_x
152
      jnz loop_convert_4bpp_x
160
 
153
 
161
      pop edi
154
      pop edi
162
 
155
 
163
    add edi,[bmp_bytes_per_string]
156
    add edi,[bmp_bytes_per_string]
164
    sub esi,[bmptoimg_data_area_bps]
157
    sub esi,[bmptoimg_data_area_bps]
165
    sub esi,[bmptoimg_data_area_bps]
158
    sub esi,[bmptoimg_data_area_bps]
166
 
159
 
167
    dec ebp
160
    dec ebp
168
    jnz loop_convert_4bpp_y
161
    jnz loop_convert_4bpp_y
169
 
162
 
170
    jmp end_bmp
163
    jmp end_bmp
171
;-----------------------------------------------------
164
;-----------------------------------------------------
172
;---------------Decoding 1 bit BMP file---------------
165
;---------------Decoding 1 bit BMP file---------------
173
;-----------------------------------------------------
166
;-----------------------------------------------------
174
 convert_to_1bpp:
167
 convert_to_1bpp:
175
 
168
 
176
    mov ebp,[Bmp_SizeY]
169
    mov ebp,[Bmp_SizeY]
177
    loop_convert_1bpp_y:
170
    loop_convert_1bpp_y:
178
 
171
 
179
      mov ecx,[bmptoimg_data_area_bps]
172
      mov ecx,[bmptoimg_data_area_bps]
180
      push edi
173
      push edi
181
 
174
 
182
      loop_convert_1bpp_x:
175
      loop_convert_1bpp_x:
183
 
176
 
184
	 xor eax,eax
177
	 xor eax,eax
185
	 mov al,byte [esi]
178
	 mov al,byte [esi]
186
	 mov [Bmp_save1],ecx
179
	 mov [Bmp_save1],ecx
187
	 mov  ecx,eax
180
	 mov  ecx,eax
188
	 mov  edx,7
181
	 mov  edx,7
189
	 nextbit:
182
	 nextbit:
190
	    xor  eax,eax
183
	    xor  eax,eax
191
	    bt	 ecx,edx
184
	    bt	 ecx,edx
192
	    jnc  noaddelem
185
	    jnc  noaddelem
193
	    inc  eax
186
	    inc  eax
194
	    noaddelem:
187
	    noaddelem:
195
 
188
 
196
	    push edx
189
	    push edx
197
	    call converttable
190
	    call converttable
198
	    pop  edx
191
	    pop  edx
199
 
192
 
200
	    add  edi,3
193
	    add  edi,3
201
	    dec  edx
194
	    dec  edx
202
	 jns nextbit
195
	 jns nextbit
203
	 mov ecx,[Bmp_save1]
196
	 mov ecx,[Bmp_save1]
204
	 inc esi
197
	 inc esi
205
      dec ecx
198
      dec ecx
206
      jnz loop_convert_1bpp_x
199
      jnz loop_convert_1bpp_x
207
 
200
 
208
      pop edi
201
      pop edi
209
 
202
 
210
    add edi,[bmp_bytes_per_string]
203
    add edi,[bmp_bytes_per_string]
211
    sub esi,[bmptoimg_data_area_bps]
204
    sub esi,[bmptoimg_data_area_bps]
212
    sub esi,[bmptoimg_data_area_bps]
205
    sub esi,[bmptoimg_data_area_bps]
213
 
206
 
214
    dec ebp
207
    dec ebp
215
    jnz loop_convert_1bpp_y
208
    jnz loop_convert_1bpp_y
216
 
209
 
217
    jmp end_bmp
210
    jmp end_bmp
218
;-----------------------------------------------------
211
;-----------------------------------------------------
219
  converttable:
212
  converttable:
220
    shl  eax,2
213
    shl  eax,2
221
    add  eax,ebx
214
    add  eax,ebx
222
    mov  edx, dword [eax]
215
    mov  edx, dword [eax]
223
    mov [edi],edx
216
    mov [edi],edx
224
    ret
217
    ret
225
;-----------------------------------------------------
218
;-----------------------------------------------------
226
; DATA AREA
219
; DATA AREA
227
bmptoimg_data_area_bps	    dd 0
220
bmptoimg_data_area_bps	    dd 0
228
bmptoimg_data_area_dwps     dd 0
221
bmptoimg_data_area_dwps     dd 0
229
bmptoimg_data_area_eop	    dd 0
222
bmptoimg_data_area_eop	    dd 0
230
bmp_load_area		    dd 0
223
bmp_load_area		    dd 0
231
img_dest_area		    dd 0
224
img_dest_area		    dd 0
232
bmp_bits_per_pixel	    dw 0
225
bmp_bits_per_pixel	    dw 0
233
bmp_first_structure_size    dd 0
226
bmp_first_structure_size    dd 0
234
bmp_bytes_per_string	    dd 0
227
bmp_bytes_per_string	    dd 0
235
 
228
 
236
end_bmp:
229
end_bmp:
237
 
230
 
238
ret
231
ret
239
 
232
 
240
;***************************************************************************
233
;***************************************************************************
241
;*******************CODING BMP FILE(1,4,8,24 bits)**************************
234
;*******************CODING BMP FILE(1,4,8,24 bits)**************************
242
;***************************************************************************
235
;***************************************************************************
243
 
236
 
244
;-------------------------autor andrew_programmer---------------------------
237
;-------------------------autor andrew_programmer---------------------------
245
 
238
 
246
coding_bmp:
239
coding_bmp:
247
 
240
 
248
	 mov [PointerToImage],ebx
241
	 mov [PointerToImage],ebx
249
	 mov [WhereCodingBMP],ecx
242
	 mov [WhereCodingBMP],ecx
250
	 mov [BmpPalette],edx
243
	 mov [BmpPalette],edx
251
	 mov [Bmp_SizeX],esi
244
	 mov [Bmp_SizeX],esi
252
	 mov [Bmp_SizeY],edi
245
	 mov [Bmp_SizeY],edi
253
	 ;**********************************************
246
	 ;**********************************************
254
	 ;******************1 bit BMP*******************
247
	 ;******************1 bit BMP*******************
255
	 ;**********************************************
248
	 ;**********************************************
256
	 cmp eax,2
249
	 cmp eax,2
257
	 ja no_monohrom_colors
250
	 ja no_monohrom_colors
258
	 mov esi,[BmpPalette]
251
	 mov esi,[BmpPalette]
259
	 mov edi,[WhereCodingBMP]
252
	 mov edi,[WhereCodingBMP]
260
	 add edi,54
253
	 add edi,54
261
	 mov eax,[esi]	 ;first color
254
	 mov eax,[esi]	 ;first color
262
	 mov ebx,[esi+4] ;second color
255
	 mov ebx,[esi+4] ;second color
263
	 mov [edi],eax
256
	 mov [edi],eax
264
	 mov [edi+4],ebx
257
	 mov [edi+4],ebx
265
 
258
 
266
	 ;coding image to bmp 1 bit format
259
	 ;coding image to bmp 1 bit format
267
	 mov esi,[PointerToImage]
260
	 mov esi,[PointerToImage]
268
	 mov edx,[WhereCodingBMP]
261
	 mov edx,[WhereCodingBMP]
269
	 mov ebx,[Bmp_SizeX]
262
	 mov ebx,[Bmp_SizeX]
270
	 add ebx,31		   ;picture_size_x+31
263
	 add ebx,31		   ;picture_size_x+31
271
	 shr ebx,5		   ;((picture_size_x)+31)/32
264
	 shr ebx,5		   ;((picture_size_x)+31)/32
272
	 mov [Bmp_doublewords],ebx ;double words in string
265
	 mov [Bmp_doublewords],ebx ;double words in string
273
	 shl ebx,2
266
	 shl ebx,2
274
	 mov [Bmp_bytes_per_string],ebx ;bytes per string
267
	 mov [Bmp_bytes_per_string],ebx ;bytes per string
275
	 mov ecx,[Bmp_SizeY]
268
	 mov ecx,[Bmp_SizeY]
276
	 dec ecx
269
	 dec ecx
277
	 imul ebx,ecx
270
	 imul ebx,ecx
278
	 add edx,54+8
271
	 add edx,54+8
279
	 add edx,ebx		    ;in edx pointer to area for coding
272
	 add edx,ebx		    ;in edx pointer to area for coding
280
 
273
 
281
	 mov ebp,[Bmp_bytes_per_string]
274
	 mov ebp,[Bmp_bytes_per_string]
282
 
275
 
283
	 mov ebx,[Bmp_SizeY]
276
	 mov ebx,[Bmp_SizeY]
284
	 mov esi,[PointerToImage]
277
	 mov esi,[PointerToImage]
285
	 mov edi,edx
278
	 mov edi,edx
286
 
279
 
287
	 mov edx,[Bmp_SizeX]
280
	 mov edx,[Bmp_SizeX]
288
	 lea edx,[edx+edx*2]
281
	 lea edx,[edx+edx*2]
289
 
282
 
290
	 mov [Bmp_Counter],7
283
	 mov [Bmp_Counter],7
291
	 and [Bmp_Counter2],0
284
	 and [Bmp_Counter2],0
292
	 copy_lines_1:
285
	 copy_lines_1:
293
 
286
 
294
	   push esi
287
	   push esi
295
	   mov ecx,[Bmp_bytes_per_string]
288
	   mov ecx,[Bmp_bytes_per_string]
296
	   shl ecx,3	      ;(Bmp_bytes_per_string)*8
289
	   shl ecx,3	      ;(Bmp_bytes_per_string)*8
297
 
290
 
298
	   rep_movsb_1:
291
	   rep_movsb_1:
299
 
292
 
300
	      mov eax,[esi]
293
	      mov eax,[esi]
301
	      and eax,0xffffff
294
	      and eax,0xffffff
302
	      push esi
295
	      push esi
303
	      push ecx
296
	      push ecx
304
	      push ebx
297
	      push ebx
305
	      mov esi,[BmpPalette]
298
	      mov esi,[BmpPalette]
306
	      xor ecx,ecx
299
	      xor ecx,ecx
307
		find_color_in_palette_1:
300
		find_color_in_palette_1:
308
		   mov ebx,[esi]
301
		   mov ebx,[esi]
309
		   and ebx,0xffffff
302
		   and ebx,0xffffff
310
		   cmp eax,ebx		 ;color fined ?
303
		   cmp eax,ebx		 ;color fined ?
311
		   je color_fined_1
304
		   je color_fined_1
312
		   add esi,4
305
		   add esi,4
313
		   inc ecx
306
		   inc ecx
314
		   cmp ecx,256
307
		   cmp ecx,256
315
		   jl find_color_in_palette_1
308
		   jl find_color_in_palette_1
316
		   color_fined_1:
309
		   color_fined_1:
317
	      mov [Bmp_Counter3],ecx	 ;number color in palette
310
	      mov [Bmp_Counter3],ecx	 ;number color in palette
318
	      pop ebx
311
	      pop ebx
319
	      pop ecx
312
	      pop ecx
320
	      pop esi
313
	      pop esi
321
	      mov eax,[Bmp_Counter3]
314
	      mov eax,[Bmp_Counter3]
322
 
315
 
323
	      test eax,eax
316
	      test eax,eax
324
	      jz no_change_bit_in_byte
317
	      jz no_change_bit_in_byte
325
 
318
 
326
	      push ecx
319
	      push ecx
327
	      mov ecx,[Bmp_Counter]
320
	      mov ecx,[Bmp_Counter]
328
	      bts [Bmp_Counter2],ecx
321
	      bts [Bmp_Counter2],ecx
329
	      pop ecx
322
	      pop ecx
330
 
323
 
331
	      no_change_bit_in_byte:
324
	      no_change_bit_in_byte:
332
 
325
 
333
	      dec [Bmp_Counter]
326
	      dec [Bmp_Counter]
334
	      jns no_minus_in_counter
327
	      jns no_minus_in_counter
335
 
328
 
336
	      push eax
329
	      push eax
337
	      mov eax,[Bmp_Counter2]
330
	      mov eax,[Bmp_Counter2]
338
	      mov [edi],al
331
	      mov [edi],al
339
	      inc edi
332
	      inc edi
340
	      mov [Bmp_Counter],7
333
	      mov [Bmp_Counter],7
341
	      and [Bmp_Counter2],0     ;obnulyaem byte
334
	      and [Bmp_Counter2],0     ;obnulyaem byte
342
	      pop eax
335
	      pop eax
343
 
336
 
344
	      no_minus_in_counter:
337
	      no_minus_in_counter:
345
 
338
 
346
	      add esi,3
339
	      add esi,3
347
	   dec ecx
340
	   dec ecx
348
	   jnz rep_movsb_1
341
	   jnz rep_movsb_1
349
	   pop esi
342
	   pop esi
350
 
343
 
351
	 add esi,edx
344
	 add esi,edx
352
	 sub edi,ebp
345
	 sub edi,ebp
353
	 sub edi,ebp
346
	 sub edi,ebp
354
 
347
 
355
	 dec ebx
348
	 dec ebx
356
	 jnz copy_lines_1
349
	 jnz copy_lines_1
357
 
350
 
358
	 mov edi,[WhereCodingBMP]
351
	 mov edi,[WhereCodingBMP]
359
	 mov ebx,[Bmp_bytes_per_string]
352
	 mov ebx,[Bmp_bytes_per_string]
360
	 imul ebx,[Bmp_SizeY]
353
	 imul ebx,[Bmp_SizeY]
361
	 add ebx,(54+8)
354
	 add ebx,(54+8)
362
 
355
 
363
	 ;crate list of bmp description
356
	 ;crate list of bmp description
364
	 mov [edi],word 'BM'
357
	 mov [edi],word 'BM'
365
	 mov [edi+2],ebx
358
	 mov [edi+2],ebx
366
	 mov [edi+10],dword 54+8 ;where bigin bmp imige
359
	 mov [edi+10],dword 54+8 ;where bigin bmp imige
367
	 mov [edi+14],dword 40
360
	 mov [edi+14],dword 40
368
	 mov edx,[Bmp_SizeX]
361
	 mov edx,[Bmp_SizeX]
369
	 mov ecx,[Bmp_SizeY]
362
	 mov ecx,[Bmp_SizeY]
370
	 mov [edi+18],edx    ;picture size x
363
	 mov [edi+18],edx    ;picture size x
371
	 mov [edi+22],ecx    ;picture size y
364
	 mov [edi+22],ecx    ;picture size y
372
	 mov [edi+26],word 1
365
	 mov [edi+26],word 1
373
	 mov [edi+28],word 1 ;bits per pixel
366
	 mov [edi+28],word 1 ;bits per pixel
374
	 mov [edi+30],dword 0
367
	 mov [edi+30],dword 0
375
	 mov edx,[Bmp_bytes_per_string]
368
	 mov edx,[Bmp_bytes_per_string]
376
	 imul edx,ecx
369
	 imul edx,ecx
377
	 mov [edi+34],edx
370
	 mov [edi+34],edx
378
	 mov [edi+38],dword 0
371
	 mov [edi+38],dword 0
379
	 mov [edi+42],dword 0
372
	 mov [edi+42],dword 0
380
	 mov [edi+46],dword 0
373
	 mov [edi+46],dword 0
381
 
374
 
382
	 ret
375
	 ret
383
 
376
 
384
	 no_monohrom_colors:
377
	 no_monohrom_colors:
385
 
378
 
386
	 ;**********************************************
379
	 ;**********************************************
387
	 ;*****************4 bits BMP*******************
380
	 ;*****************4 bits BMP*******************
388
	 ;**********************************************
381
	 ;**********************************************
389
	 cmp eax,16
382
	 cmp eax,16
390
	 ja no_16_colors
383
	 ja no_16_colors
391
	 ;copy 16 colors palette
384
	 ;copy 16 colors palette
392
	 mov esi,[BmpPalette]
385
	 mov esi,[BmpPalette]
393
	 mov edi,[WhereCodingBMP]
386
	 mov edi,[WhereCodingBMP]
394
	 add edi,54
387
	 add edi,54
395
	 mov ecx,16
388
	 mov ecx,16
396
	 rep movsd
389
	 rep movsd
397
 
390
 
398
	 ;coding image to bmp 4 bits format
391
	 ;coding image to bmp 4 bits format
399
	 mov esi,[PointerToImage]
392
	 mov esi,[PointerToImage]
400
	 mov edx,[WhereCodingBMP]
393
	 mov edx,[WhereCodingBMP]
401
	 mov ebx,[Bmp_SizeX]
394
	 mov ebx,[Bmp_SizeX]
402
	 shl ebx,2	       ;4*(picture_size_x)
395
	 shl ebx,2	       ;4*(picture_size_x)
403
	 add ebx,31	       ;4*(picture_size_x)+31
396
	 add ebx,31	       ;4*(picture_size_x)+31
404
	 shr ebx,5	       ;(4*(picture_size_x)+31)/32
397
	 shr ebx,5	       ;(4*(picture_size_x)+31)/32
405
	 mov [Bmp_doublewords],ebx ;double words in string
398
	 mov [Bmp_doublewords],ebx ;double words in string
406
	 shl ebx,2
399
	 shl ebx,2
407
	 mov [Bmp_bytes_per_string],ebx ;bytes per string
400
	 mov [Bmp_bytes_per_string],ebx ;bytes per string
408
	 mov ecx,[Bmp_SizeY]
401
	 mov ecx,[Bmp_SizeY]
409
	 dec ecx
402
	 dec ecx
410
	 imul ebx,ecx
403
	 imul ebx,ecx
411
	 add edx,54+64
404
	 add edx,54+64
412
	 add edx,ebx
405
	 add edx,ebx
413
 
406
 
414
	 mov ebp,[Bmp_bytes_per_string]
407
	 mov ebp,[Bmp_bytes_per_string]
415
 
408
 
416
	 mov ebx,[Bmp_SizeY]
409
	 mov ebx,[Bmp_SizeY]
417
	 mov [Bmp_Counter2],ebx
410
	 mov [Bmp_Counter2],ebx
418
 
411
 
419
	 mov edi,edx
412
	 mov edi,edx
420
 
413
 
421
	 xor ebx,ebx
414
	 xor ebx,ebx
422
	 copy_lines_4:
415
	 copy_lines_4:
423
 
416
 
424
	 mov ecx,[Bmp_bytes_per_string]
417
	 mov ecx,[Bmp_bytes_per_string]
425
	 shl ecx,1
418
	 shl ecx,1
426
 
419
 
427
	 and [Bmp_Counter3],0
420
	 and [Bmp_Counter3],0
428
	 push esi
421
	 push esi
429
 
422
 
430
	  rep_movsb_4:
423
	  rep_movsb_4:
431
	  mov eax,[esi]
424
	  mov eax,[esi]
432
	  and eax,0xffffff
425
	  and eax,0xffffff
433
 
426
 
434
	    mov [Bmp_save1],esi
427
	    mov [Bmp_save1],esi
435
	    mov [Bmp_save2],ecx
428
	    mov [Bmp_save2],ecx
436
	    mov [Bmp_save3],ebx
429
	    mov [Bmp_save3],ebx
437
	    mov esi,[BmpPalette]
430
	    mov esi,[BmpPalette]
438
	    xor ecx,ecx
431
	    xor ecx,ecx
439
	     find_color_in_palette_:
432
	     find_color_in_palette_:
440
	       mov ebx,[esi]
433
	       mov ebx,[esi]
441
	       and ebx,0xffffff
434
	       and ebx,0xffffff
442
	       cmp eax,ebx	     ;color fined ?
435
	       cmp eax,ebx	     ;color fined ?
443
	       je color_fined_
436
	       je color_fined_
444
		 add esi,4
437
		 add esi,4
445
		 inc ecx
438
		 inc ecx
446
	       cmp ecx,16
439
	       cmp ecx,16
447
	       jl find_color_in_palette_
440
	       jl find_color_in_palette_
448
	       color_fined_:
441
	       color_fined_:
449
	      mov [Bmp_Counter],ecx	;number color in palette
442
	      mov [Bmp_Counter],ecx	;number color in palette
450
	    mov esi,[Bmp_save1]
443
	    mov esi,[Bmp_save1]
451
	    mov ecx,[Bmp_save2]
444
	    mov ecx,[Bmp_save2]
452
	    mov ebx,[Bmp_save3]
445
	    mov ebx,[Bmp_save3]
453
 
446
 
454
	  xor eax,eax
447
	  xor eax,eax
455
	  mov eax,[Bmp_Counter]
448
	  mov eax,[Bmp_Counter]
456
	  shl bl,4
449
	  shl bl,4
457
	  add bl,al
450
	  add bl,al
458
 
451
 
459
	   mov eax,[Bmp_Counter3]
452
	   mov eax,[Bmp_Counter3]
460
	   and eax,1b
453
	   and eax,1b
461
	   test eax,eax 	     ;next block ready ?
454
	   test eax,eax 	     ;next block ready ?
462
	   jz no_ready
455
	   jz no_ready
463
	    mov [edi],bl	      ;4 bit color
456
	    mov [edi],bl	      ;4 bit color
464
	    inc edi
457
	    inc edi
465
	   no_ready:
458
	   no_ready:
466
 
459
 
467
	  add esi,3
460
	  add esi,3
468
	  inc [Bmp_Counter3]
461
	  inc [Bmp_Counter3]
469
 
462
 
470
	  dec ecx
463
	  dec ecx
471
	  jnz rep_movsb_4
464
	  jnz rep_movsb_4
472
 
465
 
473
	 pop esi
466
	 pop esi
474
 
467
 
475
	 add esi,[Bmp_SizeX]
468
	 add esi,[Bmp_SizeX]
476
	 add esi,[Bmp_SizeX]
469
	 add esi,[Bmp_SizeX]
477
	 add esi,[Bmp_SizeX]
470
	 add esi,[Bmp_SizeX]
478
 
471
 
479
	 sub edi,ebp
472
	 sub edi,ebp
480
	 sub edi,ebp
473
	 sub edi,ebp
481
 
474
 
482
	 dec [Bmp_Counter2]
475
	 dec [Bmp_Counter2]
483
	 jnz copy_lines_4
476
	 jnz copy_lines_4
484
 
477
 
485
	 ;total size of bmp file
478
	 ;total size of bmp file
486
	 mov edi,[WhereCodingBMP]
479
	 mov edi,[WhereCodingBMP]
487
	 mov ebx,[Bmp_bytes_per_string]
480
	 mov ebx,[Bmp_bytes_per_string]
488
	 imul ebx,[Bmp_SizeY]
481
	 imul ebx,[Bmp_SizeY]
489
	 add ebx,(54+64)
482
	 add ebx,(54+64)
490
 
483
 
491
	 ;crate list of bmp description
484
	 ;crate list of bmp description
492
	 mov [edi],word 'BM'
485
	 mov [edi],word 'BM'
493
	 mov [edi+2],ebx
486
	 mov [edi+2],ebx
494
	 mov [edi+10],dword 54+64
487
	 mov [edi+10],dword 54+64
495
	 mov [edi+14],dword 40
488
	 mov [edi+14],dword 40
496
	 mov edx,[Bmp_SizeX]
489
	 mov edx,[Bmp_SizeX]
497
	 mov ecx,[Bmp_SizeY]
490
	 mov ecx,[Bmp_SizeY]
498
	 mov [edi+18],edx
491
	 mov [edi+18],edx
499
	 mov [edi+22],ecx
492
	 mov [edi+22],ecx
500
	 mov [edi+26],word 1
493
	 mov [edi+26],word 1
501
	 mov [edi+28],word 4
494
	 mov [edi+28],word 4
502
	 mov [edi+30],dword 0
495
	 mov [edi+30],dword 0
503
	 mov edx,[Bmp_bytes_per_string]
496
	 mov edx,[Bmp_bytes_per_string]
504
	 imul edx,ecx
497
	 imul edx,ecx
505
	 mov [edi+34],edx
498
	 mov [edi+34],edx
506
	 mov [edi+38],dword 0
499
	 mov [edi+38],dword 0
507
	 mov [edi+42],dword 0
500
	 mov [edi+42],dword 0
508
	 mov [edi+46],dword 0
501
	 mov [edi+46],dword 0
509
 
502
 
510
	 ret
503
	 ret
511
	 no_16_colors:
504
	 no_16_colors:
512
 
505
 
513
	 ;**********************************************
506
	 ;**********************************************
514
	 ;******************8 bits BMP******************
507
	 ;******************8 bits BMP******************
515
	 ;**********************************************
508
	 ;**********************************************
516
 
509
 
517
	 cmp eax,256
510
	 cmp eax,256
518
	 ja no_8_bits_per_pixel
511
	 ja no_8_bits_per_pixel
519
	 ;copy palette
512
	 ;copy palette
520
	 mov esi,[BmpPalette]
513
	 mov esi,[BmpPalette]
521
	 mov edi,[WhereCodingBMP]
514
	 mov edi,[WhereCodingBMP]
522
	 add edi,54
515
	 add edi,54
523
	 mov ecx,256
516
	 mov ecx,256
524
	 rep movsd
517
	 rep movsd
525
 
518
 
526
	 ;coding image to bmp 8 bits format
519
	 ;coding image to bmp 8 bits format
527
	 mov esi,[PointerToImage]
520
	 mov esi,[PointerToImage]
528
	 mov edx,[WhereCodingBMP]
521
	 mov edx,[WhereCodingBMP]
529
	 mov ebx,[Bmp_SizeX]
522
	 mov ebx,[Bmp_SizeX]
530
	 shl ebx,3	       ;8*(picture_size_x)
523
	 shl ebx,3	       ;8*(picture_size_x)
531
	 add ebx,31	       ;8*(picture_size_x)+31
524
	 add ebx,31	       ;8*(picture_size_x)+31
532
	 shr ebx,5	       ;(8*(picture_size_x)+31)/32
525
	 shr ebx,5	       ;(8*(picture_size_x)+31)/32
533
	 mov [Bmp_doublewords],ebx ;double words in string
526
	 mov [Bmp_doublewords],ebx ;double words in string
534
	 shl ebx,2
527
	 shl ebx,2
535
	 mov [Bmp_bytes_per_string],ebx ;bytes per string
528
	 mov [Bmp_bytes_per_string],ebx ;bytes per string
536
 
529
 
537
	 mov ecx,[Bmp_SizeY]
530
	 mov ecx,[Bmp_SizeY]
538
	 dec ecx
531
	 dec ecx
539
	 imul ebx,ecx
532
	 imul ebx,ecx
540
	 add edx,(1024+54)
533
	 add edx,(1024+54)
541
	 add edx,ebx	       ;in edx pointer to copy bitmap arrea
534
	 add edx,ebx	       ;in edx pointer to copy bitmap arrea
542
 
535
 
543
	 mov ebp,[Bmp_bytes_per_string]
536
	 mov ebp,[Bmp_bytes_per_string]
544
	 shl ebp,1
537
	 shl ebp,1
545
 
538
 
546
	 mov ebx,[Bmp_SizeY]
539
	 mov ebx,[Bmp_SizeY]
547
	 mov edi,edx
540
	 mov edi,edx
548
 
541
 
549
	 copy_lines_8:
542
	 copy_lines_8:
550
 
543
 
551
	 mov ecx,[Bmp_bytes_per_string]
544
	 mov ecx,[Bmp_bytes_per_string]
552
	 mov [Bmp_save1],esi
545
	 mov [Bmp_save1],esi
553
	  rep_movsb_8:
546
	  rep_movsb_8:
554
	  mov eax,[esi]
547
	  mov eax,[esi]
555
	  and eax,0xffffff
548
	  and eax,0xffffff
556
	  push esi
549
	  push esi
557
	  push ecx
550
	  push ecx
558
	  push ebx
551
	  push ebx
559
	   mov esi,[BmpPalette]
552
	   mov esi,[BmpPalette]
560
	   xor ecx,ecx
553
	   xor ecx,ecx
561
	    find_color_in_palette:
554
	    find_color_in_palette:
562
	    mov ebx,[esi]
555
	    mov ebx,[esi]
563
	    and ebx,0xffffff
556
	    and ebx,0xffffff
564
	    cmp eax,ebx 	  ;color fined ?
557
	    cmp eax,ebx 	  ;color fined ?
565
	    je color_fined
558
	    je color_fined
566
	    add esi,4
559
	    add esi,4
567
	    inc ecx
560
	    inc ecx
568
	    cmp ecx,256
561
	    cmp ecx,256
569
	    jl find_color_in_palette
562
	    jl find_color_in_palette
570
	    color_fined:
563
	    color_fined:
571
	    mov [Bmp_Counter],ecx     ;number color in palette
564
	    mov [Bmp_Counter],ecx     ;number color in palette
572
	  pop ebx
565
	  pop ebx
573
	  pop ecx
566
	  pop ecx
574
	  pop esi
567
	  pop esi
575
	  mov eax,[Bmp_Counter]
568
	  mov eax,[Bmp_Counter]
576
	  mov [edi],al		  ;8 bit color
569
	  mov [edi],al		  ;8 bit color
577
	  add esi,3
570
	  add esi,3
578
	  inc edi
571
	  inc edi
579
 
572
 
580
	  dec ecx
573
	  dec ecx
581
	  jnz rep_movsb_8
574
	  jnz rep_movsb_8
582
 
575
 
583
	 mov esi,[Bmp_save1]
576
	 mov esi,[Bmp_save1]
584
 
577
 
585
	 add esi,[Bmp_SizeX]
578
	 add esi,[Bmp_SizeX]
586
	 add esi,[Bmp_SizeX]
579
	 add esi,[Bmp_SizeX]
587
	 add esi,[Bmp_SizeX]
580
	 add esi,[Bmp_SizeX]
588
 
581
 
589
	 sub edi,ebp
582
	 sub edi,ebp
590
	 dec ebx
583
	 dec ebx
591
	 jnz copy_lines_8
584
	 jnz copy_lines_8
592
 
585
 
593
	 ;total size of bmp file
586
	 ;total size of bmp file
594
	 mov edi,[WhereCodingBMP]
587
	 mov edi,[WhereCodingBMP]
595
	 mov ebx,[Bmp_bytes_per_string]
588
	 mov ebx,[Bmp_bytes_per_string]
596
	 imul ebx,[Bmp_SizeY]
589
	 imul ebx,[Bmp_SizeY]
597
	 add ebx,54+1024
590
	 add ebx,54+1024
598
 
591
 
599
	 ;crate list of bmp description
592
	 ;crate list of bmp description
600
	 mov [edi],word 'BM'
593
	 mov [edi],word 'BM'
601
	 mov [edi+2],ebx
594
	 mov [edi+2],ebx
602
	 mov [edi+10],dword 54+1024
595
	 mov [edi+10],dword 54+1024
603
	 mov [edi+14],dword 40
596
	 mov [edi+14],dword 40
604
	 mov edx,[Bmp_SizeX]
597
	 mov edx,[Bmp_SizeX]
605
	 mov ecx,[Bmp_SizeY]
598
	 mov ecx,[Bmp_SizeY]
606
	 mov [edi+18],edx
599
	 mov [edi+18],edx
607
	 mov [edi+22],ecx
600
	 mov [edi+22],ecx
608
	 mov [edi+26],word 1
601
	 mov [edi+26],word 1
609
	 mov [edi+28],word 8
602
	 mov [edi+28],word 8
610
	 mov [edi+30],dword 0
603
	 mov [edi+30],dword 0
611
	 mov edx,[Bmp_bytes_per_string]
604
	 mov edx,[Bmp_bytes_per_string]
612
	 imul edx,ecx
605
	 imul edx,ecx
613
	 mov [edi+34],edx
606
	 mov [edi+34],edx
614
	 mov [edi+38],dword 0
607
	 mov [edi+38],dword 0
615
	 mov [edi+42],dword 0
608
	 mov [edi+42],dword 0
616
	 mov [edi+46],dword 0
609
	 mov [edi+46],dword 0
617
 
610
 
618
	 ret
611
	 ret
619
	 no_8_bits_per_pixel:
612
	 no_8_bits_per_pixel:
620
 
613
 
621
	 ;**********************************************
614
	 ;**********************************************
622
	 ;*******************24 bit BMP*****************
615
	 ;*******************24 bit BMP*****************
623
	 ;**********************************************
616
	 ;**********************************************
624
 
617
 
625
	 cmp eax,256
618
	 cmp eax,256
626
	 jle no_32_bits_per_pixel
619
	 jle no_32_bits_per_pixel
627
	 ;copy picture
620
	 ;copy picture
628
	 mov esi,[PointerToImage]
621
	 mov esi,[PointerToImage]
629
	 mov edx,[WhereCodingBMP]
622
	 mov edx,[WhereCodingBMP]
630
	 mov ebx,[Bmp_SizeX]
623
	 mov ebx,[Bmp_SizeX]
631
	 shl ebx,3	       ;8*(picture_size_x)
624
	 shl ebx,3	       ;8*(picture_size_x)
632
	 lea ebx,[ebx+ebx*2]   ;3*8*(picture_size_x)
625
	 lea ebx,[ebx+ebx*2]   ;3*8*(picture_size_x)
633
	 add ebx,31	       ;3*8*(picture_size_x)+31
626
	 add ebx,31	       ;3*8*(picture_size_x)+31
634
	 shr ebx,5	       ;(3*8*(picture_size_x)+31)/32
627
	 shr ebx,5	       ;(3*8*(picture_size_x)+31)/32
635
	 mov [Bmp_doublewords],ebx ;double words in string
628
	 mov [Bmp_doublewords],ebx ;double words in string
636
	 shl ebx,2
629
	 shl ebx,2
637
	 mov [Bmp_bytes_per_string],ebx ;bytes per string
630
	 mov [Bmp_bytes_per_string],ebx ;bytes per string
638
	 mov ecx,[Bmp_SizeY]
631
	 mov ecx,[Bmp_SizeY]
639
	 dec ecx
632
	 dec ecx
640
	 imul ebx,ecx
633
	 imul ebx,ecx
641
	 add edx,54
634
	 add edx,54
642
	 add edx,ebx	     ;in edx pointer to start of copy bit map
635
	 add edx,ebx	     ;in edx pointer to start of copy bit map
643
 
636
 
644
	 mov ebp,[Bmp_bytes_per_string]
637
	 mov ebp,[Bmp_bytes_per_string]
645
	 shl ebp,1
638
	 shl ebp,1
646
 
639
 
647
	 mov ebx,[Bmp_SizeY]
640
	 mov ebx,[Bmp_SizeY]
648
 
641
 
649
	 mov esi,[PointerToImage]
642
	 mov esi,[PointerToImage]
650
	 mov edi,edx
643
	 mov edi,edx
651
 
644
 
652
	 mov edx,[Bmp_SizeX]
645
	 mov edx,[Bmp_SizeX]
653
	 lea edx,[edx+edx*2]
646
	 lea edx,[edx+edx*2]
654
 
647
 
655
	 copy_lines_24:
648
	 copy_lines_24:
656
 
649
 
657
	   push esi
650
	   push esi
658
	   mov ecx,[Bmp_doublewords]
651
	   mov ecx,[Bmp_doublewords]
659
	   rep_movsb_24:
652
	   rep_movsb_24:
660
	      mov eax,[esi]
653
	      mov eax,[esi]
661
	      mov [edi],eax
654
	      mov [edi],eax
662
	   add esi,4
655
	   add esi,4
663
	   add edi,4
656
	   add edi,4
664
	   dec ecx
657
	   dec ecx
665
	   jnz rep_movsb_24
658
	   jnz rep_movsb_24
666
	   pop esi
659
	   pop esi
667
 
660
 
668
	 add esi,edx
661
	 add esi,edx
669
	 sub edi,ebp
662
	 sub edi,ebp
670
	 dec ebx
663
	 dec ebx
671
	 jnz copy_lines_24
664
	 jnz copy_lines_24
672
 
665
 
673
	 ;total size of bmp fille
666
	 ;total size of bmp fille
674
	 mov edi,[WhereCodingBMP]
667
	 mov edi,[WhereCodingBMP]
675
	 mov ebx,[Bmp_bytes_per_string]
668
	 mov ebx,[Bmp_bytes_per_string]
676
	 imul ebx,[Bmp_SizeY]
669
	 imul ebx,[Bmp_SizeY]
677
	 add ebx,54
670
	 add ebx,54
678
 
671
 
679
	 ;write info to structure of bmp file
672
	 ;write info to structure of bmp file
680
	 mov [edi],word 'BM'
673
	 mov [edi],word 'BM'
681
	 mov [edi+2],ebx
674
	 mov [edi+2],ebx
682
	 mov [edi+10],dword 54	  ;where begin bmp imige
675
	 mov [edi+10],dword 54	  ;where begin bmp imige
683
	 mov [edi+14],dword 40	  ;total size of structure number two
676
	 mov [edi+14],dword 40	  ;total size of structure number two
684
	 mov edx,[Bmp_SizeX]
677
	 mov edx,[Bmp_SizeX]
685
	 mov ecx,[Bmp_SizeY]
678
	 mov ecx,[Bmp_SizeY]
686
	 mov [edi+18],edx
679
	 mov [edi+18],edx
687
	 mov [edi+22],ecx
680
	 mov [edi+22],ecx
688
	 mov [edi+26],word 1
681
	 mov [edi+26],word 1
689
	 mov [edi+28],word 24	  ;bytes per pixel
682
	 mov [edi+28],word 24	  ;bytes per pixel
690
	 mov [edi+30],dword 0
683
	 mov [edi+30],dword 0
691
	 mov edx,[Bmp_bytes_per_string]
684
	 mov edx,[Bmp_bytes_per_string]
692
	 imul edx,ecx
685
	 imul edx,ecx
693
	 mov [edi+34],edx	  ;size of bmp image
686
	 mov [edi+34],edx	  ;size of bmp image
694
	 mov [edi+38],dword 0
687
	 mov [edi+38],dword 0
695
	 mov [edi+42],dword 0
688
	 mov [edi+42],dword 0
696
	 mov [edi+46],dword 0
689
	 mov [edi+46],dword 0
697
	 ret
690
	 ret
698
	 no_32_bits_per_pixel:
691
	 no_32_bits_per_pixel:
699
 
692
 
700
 
693
 
701
	 ret
694
	 ret
702
 
695
 
703
PointerToImage	     dd 0
696
PointerToImage	     dd 0
704
WhereCodingBMP	     dd 0
697
WhereCodingBMP	     dd 0
705
BmpPalette	     dd 0
698
BmpPalette	     dd 0
706
Bmp_SizeX	     dd 0
699
Bmp_SizeX	     dd 0
707
Bmp_SizeY	     dd 0
700
Bmp_SizeY	     dd 0
708
Bmp_Counter	     dd 0
701
Bmp_Counter	     dd 0
709
Bmp_Counter2	     dd 0
702
Bmp_Counter2	     dd 0
710
Bmp_Counter3	     dd 0
703
Bmp_Counter3	     dd 0
711
Bmp_save1	     dd 0
704
Bmp_save1	     dd 0
712
Bmp_save2	     dd 0
705
Bmp_save2	     dd 0
713
Bmp_save3	     dd 0
706
Bmp_save3	     dd 0
714
Bmp_bytes_per_string dd 0
707
Bmp_bytes_per_string dd 0
715
Bmp_doublewords      dd 0
708
Bmp_doublewords      dd 0