Rev 832 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 832 | Rev 7649 | ||
---|---|---|---|
1 | ; Picture browser by lisovin@26.ru |
1 | ; Picture browser by lisovin@26.ru |
2 | ; Modified by Ivan Poddubny - v.0.3 |
2 | ; Modified by Ivan Poddubny - v.0.3 |
3 | ; Modified by Diamond - v.0.4 |
3 | ; Modified by Diamond - v.0.4 |
4 | ; Modified by Mario79: |
4 | ; Modified by Mario79: |
5 | ; v.0.5 18.07.08 Dinamic Allocation Memory |
5 | ; v.0.5 18.07.08 Dinamic Allocation Memory |
6 | ; v.0.6 20.07.08 |
6 | ; v.0.6 20.07.08 |
7 | ; 1) Use Editbox (Author |
7 | ; 1) Use Editbox (Author |
8 | ; 2) Draw window without fill working area (C = 1) |
8 | ; 2) Draw window without fill working area (C = 1) |
9 | ; 3) Open file with parameter in patch: |
9 | ; 3) Open file with parameter in patch: |
10 | ; Size of parameter - 4 bytes. Parameter starts with the |
10 | ; Size of parameter - 4 bytes. Parameter starts with the |
11 | ; character "\", the unused characters are filled |
11 | ; character "\", the unused characters are filled |
12 | ; by a blank (ASCII 20h). |
12 | ; by a blank (ASCII 20h). |
13 | ; '\T /hd0/1/1.bmp' - set background, mode: tile |
13 | ; '\T /hd0/1/1.bmp' - set background, mode: tile |
14 | ; '\S /hd0/1/1.bmp' - set background, mode: stretch |
14 | ; '\S /hd0/1/1.bmp' - set background, mode: stretch |
15 | ; v.0.65 23.07.08 |
15 | ; v.0.65 23.07.08 |
16 | ; 1) Use new version Editbox (Thanks |
16 | ; 1) Use new version Editbox (Thanks |
17 | ; (mouse correctly works in secondary thread) |
17 | ; (mouse correctly works in secondary thread) |
18 | ; 2) The memory used for storage of the file BMP |
18 | ; 2) The memory used for storage of the file BMP |
19 | ; after conversion in RAW comes back to OS. |
19 | ; after conversion in RAW comes back to OS. |
20 | ; 3) Usage of keys 1,2,3,4 for call of buttons of the application |
20 | ; 3) Usage of keys 1,2,3,4 for call of buttons of the application |
21 | ; without the mouse, before the key were defined incorrectly. |
21 | ; without the mouse, before the key were defined incorrectly. |
22 | ; 4) Deleting of the unnecessary procedure of clearing of |
22 | ; 4) Deleting of the unnecessary procedure of clearing of |
23 | ; a background of a picture at pressing the button "Open". |
23 | ; a background of a picture at pressing the button "Open". |
24 | ; Compile with FASM for Menuet |
24 | ; Compile with FASM for Menuet |
25 | 25 | ||
26 | ;****************************************************************************** |
26 | ;****************************************************************************** |
27 | use32 |
27 | use32 |
28 | org 0x0 |
28 | org 0x0 |
29 | db 'MENUET01' ; 8 byte id |
29 | db 'MENUET01' ; 8 byte id |
30 | dd 0x01 ; header version |
30 | dd 0x01 ; header version |
31 | dd START ; start of code |
31 | dd START ; start of code |
32 | dd IM_END ; size of image |
32 | dd IM_END ; size of image |
33 | dd I_END ; memory for app |
33 | dd I_END ; memory for app |
34 | dd I_END ; esp |
34 | dd I_END ; esp |
35 | dd temp_area , 0x0 ; I_Param , I_Icon |
35 | dd temp_area , 0x0 ; I_Param , I_Icon |
36 | 36 | ||
37 | include 'lang.inc' |
37 | include 'lang.inc' |
38 | include '..\..\..\macros.inc' |
38 | include '..\..\..\..\macros.inc' |
39 | include '..\..\..\develop\examples\editbox\trunk\editbox.inc' |
39 | include '..\..\..\..\develop\examples\editbox\trunk\editbox.inc' |
40 | ;include 'macros.inc' |
40 | ;include 'macros.inc' |
41 | ;include 'EDITBOX.INC' |
41 | ;include 'EDITBOX.INC' |
42 | use_edit_box |
42 | use_edit_box |
43 | ;****************************************************************************** |
43 | ;****************************************************************************** |
44 | 44 | ||
45 | START: ; start of execution |
45 | START: ; start of execution |
46 | mcall 68, 11 |
46 | mcall 68, 11 |
47 | mcall 66, 1,1 |
47 | mcall 66, 1,1 |
48 | ; check for parameters |
48 | ; check for parameters |
49 | cmp dword [temp_area],'BOOT' |
49 | cmp dword [temp_area],'BOOT' |
50 | jne .no_boot |
50 | jne .no_boot |
51 | .background: |
51 | .background: |
52 | call load_image |
52 | call load_image |
53 | call convert |
53 | call convert |
54 | 54 | ||
55 | call background |
55 | call background |
56 | .exit: |
56 | .exit: |
57 | or eax,-1 |
57 | or eax,-1 |
58 | mcall |
58 | mcall |
59 | .no_boot: |
59 | .no_boot: |
60 | 60 | ||
61 | cmp byte [temp_area],0 |
61 | cmp byte [temp_area],0 |
62 | jz .no_param |
62 | jz .no_param |
63 | 63 | ||
64 | 64 | ||
65 | mov edi,string ; clear string |
65 | mov edi,string ; clear string |
66 | mov ecx,256/4 ; length of a string |
66 | mov ecx,256/4 ; length of a string |
67 | xor eax,eax ; symbol <0> |
67 | xor eax,eax ; symbol <0> |
68 | rep stosd |
68 | rep stosd |
69 | 69 | ||
70 | 70 | ||
71 | mov edi,temp_area ; look for <0> in temp_area |
71 | mov edi,temp_area ; look for <0> in temp_area |
72 | 72 | ||
73 | cmp [edi],byte "\" |
73 | cmp [edi],byte "\" |
74 | jne .continue |
74 | jne .continue |
75 | cmp [edi+1],byte "T" |
75 | cmp [edi+1],byte "T" |
76 | jne @f |
76 | jne @f |
77 | mov [bgrmode],dword 1 |
77 | mov [bgrmode],dword 1 |
78 | jmp .continue_1 |
78 | jmp .continue_1 |
79 | @@: |
79 | @@: |
80 | cmp [edi+1],byte "S" |
80 | cmp [edi+1],byte "S" |
81 | jne START.exit |
81 | jne START.exit |
82 | mov [bgrmode],dword 2 |
82 | mov [bgrmode],dword 2 |
83 | .continue_1: |
83 | .continue_1: |
84 | add edi,4 |
84 | add edi,4 |
85 | .continue: |
85 | .continue: |
86 | mov esi,edi |
86 | mov esi,edi |
87 | mov ecx,257 ; strlen |
87 | mov ecx,257 ; strlen |
88 | repne scasb |
88 | repne scasb |
89 | lea ecx, [edi-temp_area] |
89 | lea ecx, [edi-temp_area] |
90 | 90 | ||
91 | mov edi,string |
91 | mov edi,string |
92 | rep movsb ; copy string from temp_area to "string" (filename) |
92 | rep movsb ; copy string from temp_area to "string" (filename) |
93 | cmp [temp_area],byte "\" |
93 | cmp [temp_area],byte "\" |
94 | je START.background |
94 | je START.background |
95 | call load_image |
95 | call load_image |
96 | call convert |
96 | call convert |
97 | 97 | ||
98 | .no_param: |
98 | .no_param: |
99 | 99 | ||
100 | 100 | ||
101 | or ecx,-1 ; get information about me |
101 | or ecx,-1 ; get information about me |
102 | call getappinfo |
102 | call getappinfo |
103 | 103 | ||
104 | mov edx,[process_info+30] ; ⥯¥àì ¢ edx è ¨¤¥â¨ä¨ª â®à |
104 | mov edx,[process_info+30] ; ⥯¥àì ¢ edx è ¨¤¥â¨ä¨ª â®à |
105 | mov ecx,eax |
105 | mov ecx,eax |
106 | 106 | ||
107 | @@: |
107 | @@: |
108 | call getappinfo |
108 | call getappinfo |
109 | cmp edx,[process_info+30] |
109 | cmp edx,[process_info+30] |
110 | je @f ; ¥á«¨ è PID ᮢ¯ « á PID à áᬠâਢ ¥¬®£® ¯à®æ¥áá , ¬ë 諨 ᥡï |
110 | je @f ; ¥á«¨ è PID ᮢ¯ « á PID à áᬠâਢ ¥¬®£® ¯à®æ¥áá , ¬ë 諨 ᥡï |
111 | dec ecx ; ¨ ç¥ á¬®âਬ á«¥¤ãî騩 ¯à®æ¥áá |
111 | dec ecx ; ¨ ç¥ á¬®âਬ á«¥¤ãî騩 ¯à®æ¥áá |
112 | jne @b ; ¢®§¢à é ¥¬áï, ¥á«¨ ¥ ¢á¥ ¯à®æ¥ááë à áᬮâà¥ë |
112 | jne @b ; ¢®§¢à é ¥¬áï, ¥á«¨ ¥ ¢á¥ ¯à®æ¥ááë à áᬮâà¥ë |
113 | @@: |
113 | @@: |
114 | 114 | ||
115 | ; ⥯¥àì ¢ ecx ®¬¥à ¯à®æ¥áá |
115 | ; ⥯¥àì ¢ ecx ®¬¥à ¯à®æ¥áá |
116 | mov [process],ecx |
116 | mov [process],ecx |
117 | 117 | ||
118 | draw_still: |
118 | draw_still: |
119 | call draw_window |
119 | call draw_window |
120 | 120 | ||
121 | still: |
121 | still: |
122 | 122 | ||
123 | mov eax,10 ; wait here for event |
123 | mov eax,10 ; wait here for event |
124 | mcall |
124 | mcall |
125 | 125 | ||
126 | dec eax |
126 | dec eax |
127 | jz red |
127 | jz red |
128 | dec eax |
128 | dec eax |
129 | jnz button |
129 | jnz button |
130 | 130 | ||
131 | key: ; key |
131 | key: ; key |
132 | mov al,2 |
132 | mov al,2 |
133 | mcall |
133 | mcall |
134 | mov al,ah |
134 | mov al,ah |
135 | cmp al,130 ; 1 |
135 | cmp al,130 ; 1 |
136 | je kfile |
136 | je kfile |
137 | cmp al,131 ; 2 |
137 | cmp al,131 ; 2 |
138 | je kopen |
138 | je kopen |
139 | cmp al,132 ; 3 |
139 | cmp al,132 ; 3 |
140 | je kinfo |
140 | je kinfo |
141 | cmp al,133 ; 4 |
141 | cmp al,133 ; 4 |
142 | je kbgrd |
142 | je kbgrd |
143 | jmp still |
143 | jmp still |
144 | 144 | ||
145 | red: |
145 | red: |
146 | test byte [status], 4 |
146 | test byte [status], 4 |
147 | jz draw_still |
147 | jz draw_still |
148 | mov al, 18 |
148 | mov al, 18 |
149 | mov ebx, 3 |
149 | mov ebx, 3 |
150 | mov ecx, [process] |
150 | mov ecx, [process] |
151 | mcall |
151 | mcall |
152 | and byte [status], not 4 |
152 | and byte [status], not 4 |
153 | jmp still |
153 | jmp still |
154 | 154 | ||
155 | button: ; button |
155 | button: ; button |
156 | mov eax,17 ; get id |
156 | mov eax,17 ; get id |
157 | mcall |
157 | mcall |
158 | 158 | ||
159 | cmp ah,1 ; button id=1 ? |
159 | cmp ah,1 ; button id=1 ? |
160 | jne noclose |
160 | jne noclose |
161 | 161 | ||
162 | mov eax,-1 ; close this program |
162 | mov eax,-1 ; close this program |
163 | mcall |
163 | mcall |
164 | noclose: |
164 | noclose: |
165 | cmp ah,2 |
165 | cmp ah,2 |
166 | jne nofile |
166 | jne nofile |
167 | kfile: |
167 | kfile: |
168 | test byte [status], 1 |
168 | test byte [status], 1 |
169 | jnz still |
169 | jnz still |
170 | or byte [status], 1 |
170 | or byte [status], 1 |
171 | mov eax,51 |
171 | mov eax,51 |
172 | mov ebx,1 |
172 | mov ebx,1 |
173 | mov ecx,thread1 |
173 | mov ecx,thread1 |
174 | mov edx,thread ;0x29fff0 |
174 | mov edx,thread ;0x29fff0 |
175 | mcall |
175 | mcall |
176 | jmp still |
176 | jmp still |
177 | nofile: |
177 | nofile: |
178 | cmp ah,3 |
178 | cmp ah,3 |
179 | jne noopen |
179 | jne noopen |
180 | 180 | ||
181 | kopen: |
181 | kopen: |
182 | mov ecx,-1 |
182 | mov ecx,-1 |
183 | call getappinfo |
183 | call getappinfo |
184 | 184 | ||
185 | call load_image |
185 | call load_image |
186 | 186 | ||
187 | open1: |
187 | open1: |
188 | mov eax,[image_file] |
188 | mov eax,[image_file] |
189 | cmp [eax],word 'BM' |
189 | cmp [eax],word 'BM' |
190 | jne still |
190 | jne still |
191 | call convert |
191 | call convert |
192 | jmp draw_still |
192 | jmp draw_still |
193 | noopen: |
193 | noopen: |
194 | 194 | ||
195 | cmp ah,4 |
195 | cmp ah,4 |
196 | jne noinfo |
196 | jne noinfo |
197 | kinfo: |
197 | kinfo: |
198 | test byte [status], 2 |
198 | test byte [status], 2 |
199 | jnz still |
199 | jnz still |
200 | or byte [status], 2 |
200 | or byte [status], 2 |
201 | mov eax,51 |
201 | mov eax,51 |
202 | mov ebx,1 |
202 | mov ebx,1 |
203 | mov ecx,thread2 |
203 | mov ecx,thread2 |
204 | mov edx,thread-512 |
204 | mov edx,thread-512 |
205 | mcall |
205 | mcall |
206 | jmp still |
206 | jmp still |
207 | noinfo: |
207 | noinfo: |
208 | 208 | ||
209 | ; |
209 | ; |
210 | cmp ah,5 |
210 | cmp ah,5 |
211 | jne still |
211 | jne still |
212 | kbgrd: |
212 | kbgrd: |
213 | test byte [status], 8 |
213 | test byte [status], 8 |
214 | jnz still |
214 | jnz still |
215 | or byte [status], 8 |
215 | or byte [status], 8 |
216 | mov eax,51 |
216 | mov eax,51 |
217 | mov ebx,1 |
217 | mov ebx,1 |
218 | mov ecx,thread3 |
218 | mov ecx,thread3 |
219 | mov edx,thread-512*2 |
219 | mov edx,thread-512*2 |
220 | mcall |
220 | mcall |
221 | jmp still |
221 | jmp still |
222 | ;call background |
222 | ;call background |
223 | 223 | ||
224 | getappinfo: |
224 | getappinfo: |
225 | mov eax,9 |
225 | mov eax,9 |
226 | mov ebx,process_info |
226 | mov ebx,process_info |
227 | mcall |
227 | mcall |
228 | ret |
228 | ret |
229 | 229 | ||
230 | 230 | ||
231 | load_image: |
231 | load_image: |
232 | 232 | ||
233 | mov [fileinfo+0],dword 5 |
233 | mov [fileinfo+0],dword 5 |
234 | mov [fileinfo+12],dword 0 |
234 | mov [fileinfo+12],dword 0 |
235 | mov [fileinfo+16],dword process_info |
235 | mov [fileinfo+16],dword process_info |
236 | 236 | ||
237 | cmp [image_file],0 |
237 | cmp [image_file],0 |
238 | je @f |
238 | je @f |
239 | mov ecx,[image_file] |
239 | mov ecx,[image_file] |
240 | mcall 68, 13, |
240 | mcall 68, 13, |
241 | 241 | ||
242 | @@: |
242 | @@: |
243 | mcall 70, fileinfo |
243 | mcall 70, fileinfo |
244 | 244 | ||
245 | mov [fileinfo+0],dword 0 |
245 | mov [fileinfo+0],dword 0 |
246 | mov [fileinfo+12],dword 512 |
246 | mov [fileinfo+12],dword 512 |
247 | mov [fileinfo+16],dword process_info+40 |
247 | mov [fileinfo+16],dword process_info+40 |
248 | 248 | ||
249 | mcall 70, fileinfo |
249 | mcall 70, fileinfo |
250 | 250 | ||
251 | mov ecx,[process_info+32] |
251 | mov ecx,[process_info+32] |
252 | mov [fileinfo+12],ecx |
252 | mov [fileinfo+12],ecx |
253 | 253 | ||
254 | mcall 68, 12 |
254 | mcall 68, 12 |
255 | 255 | ||
256 | 256 | ||
257 | mov [fileinfo+16],eax |
257 | mov [fileinfo+16],eax |
258 | mov [image_file_1],eax |
258 | mov [image_file_1],eax |
259 | 259 | ||
260 | mov eax,[process_info+40+28] |
260 | mov eax,[process_info+40+28] |
261 | 261 | ||
262 | cmp eax, 24 |
262 | cmp eax, 24 |
263 | jz .convert24 |
263 | jz .convert24 |
264 | cmp eax, 8 |
264 | cmp eax, 8 |
265 | jz .convert8 |
265 | jz .convert8 |
266 | cmp eax, 4 |
266 | cmp eax, 4 |
267 | jz .convert4 |
267 | jz .convert4 |
268 | shl ecx,2 |
268 | shl ecx,2 |
269 | .convert4: |
269 | .convert4: |
270 | shl ecx,1 |
270 | shl ecx,1 |
271 | .convert8: |
271 | .convert8: |
272 | lea ecx,[ecx*3] |
272 | lea ecx,[ecx*3] |
273 | .convert24: |
273 | .convert24: |
274 | 274 | ||
275 | ;@@: |
275 | ;@@: |
276 | 276 | ||
277 | add ecx,512 |
277 | add ecx,512 |
278 | mcall 68, 12 |
278 | mcall 68, 12 |
279 | 279 | ||
280 | mov [image_file],eax |
280 | mov [image_file],eax |
281 | 281 | ||
282 | mcall 70, fileinfo |
282 | mcall 70, fileinfo |
283 | 283 | ||
284 | mov esi,[image_file_1] |
284 | mov esi,[image_file_1] |
285 | mov edi,[image_file] |
285 | mov edi,[image_file] |
286 | mov ecx,512/4 |
286 | mov ecx,512/4 |
287 | cld |
287 | cld |
288 | rep movsd |
288 | rep movsd |
289 | 289 | ||
290 | mov eax,[image_file] |
290 | mov eax,[image_file] |
291 | mov ebx,[eax+22] |
291 | mov ebx,[eax+22] |
292 | mov eax,[eax+18] |
292 | mov eax,[eax+18] |
293 | test ebx, ebx |
293 | test ebx, ebx |
294 | jns @f |
294 | jns @f |
295 | neg ebx |
295 | neg ebx |
296 | @@: |
296 | @@: |
297 | add eax,9 |
297 | add eax,9 |
298 | cmp eax,210 |
298 | cmp eax,210 |
299 | jae @f |
299 | jae @f |
300 | mov eax,210 |
300 | mov eax,210 |
301 | @@: |
301 | @@: |
302 | add ebx,54 |
302 | add ebx,54 |
303 | cmp ebx,56 |
303 | cmp ebx,56 |
304 | jae @f |
304 | jae @f |
305 | mov ebx,56 |
305 | mov ebx,56 |
306 | @@: |
306 | @@: |
307 | mov [wnd_width],eax |
307 | mov [wnd_width],eax |
308 | mov [wnd_height],ebx |
308 | mov [wnd_height],ebx |
309 | test [bWasDraw],1 |
309 | test [bWasDraw],1 |
310 | jz @f |
310 | jz @f |
311 | mov esi,ebx |
311 | mov esi,ebx |
312 | mov edx,eax |
312 | mov edx,eax |
313 | mcall 67,-1,-1 |
313 | mcall 67,-1,-1 |
314 | @@: |
314 | @@: |
315 | ret |
315 | ret |
316 | 316 | ||
317 | 317 | ||
318 | drawimage: |
318 | drawimage: |
319 | mov eax,[image_file] |
319 | mov eax,[image_file] |
320 | cmp [eax],word 'BM' |
320 | cmp [eax],word 'BM' |
321 | jne nodrawimage |
321 | jne nodrawimage |
322 | mov ecx, dword [eax+18-2] |
322 | mov ecx, dword [eax+18-2] |
323 | mov cx, [eax+22] |
323 | mov cx, [eax+22] |
324 | test cx, cx |
324 | test cx, cx |
325 | jns @f |
325 | jns @f |
326 | neg cx |
326 | neg cx |
327 | @@: |
327 | @@: |
328 | mov edx,5*65536+50 |
328 | mov edx,5*65536+50 |
329 | mcall 7,[soi] |
329 | mcall 7,[soi] |
330 | nodrawimage: |
330 | nodrawimage: |
331 | ret |
331 | ret |
332 | 332 | ||
333 | ; |
333 | ; |
334 | background: |
334 | background: |
335 | mov eax,[image_file] |
335 | mov eax,[image_file] |
336 | cmp [eax],word 'BM' |
336 | cmp [eax],word 'BM' |
337 | jne @f |
337 | jne @f |
338 | mov ecx,[eax+18] ; è¨à¨ |
338 | mov ecx,[eax+18] ; è¨à¨ |
339 | mov edx,[eax+22] ; ¢ëá®â |
339 | mov edx,[eax+22] ; ¢ëá®â |
340 | mcall 15,1 |
340 | mcall 15,1 |
341 | 341 | ||
342 | mov esi, ecx |
342 | mov esi, ecx |
343 | imul esi, edx |
343 | imul esi, edx |
344 | lea esi, [esi+esi*2] |
344 | lea esi, [esi+esi*2] |
345 | mov ebx,5 |
345 | mov ebx,5 |
346 | mov ecx,[soi] |
346 | mov ecx,[soi] |
347 | xor edx,edx |
347 | xor edx,edx |
348 | ;;; mov esi, ;640*480*3 |
348 | ;;; mov esi, ;640*480*3 |
349 | mcall |
349 | mcall |
350 | 350 | ||
351 | dec ebx ;tile/stretch |
351 | dec ebx ;tile/stretch |
352 | mov ecx,dword [bgrmode] |
352 | mov ecx,dword [bgrmode] |
353 | mcall |
353 | mcall |
354 | 354 | ||
355 | dec ebx |
355 | dec ebx |
356 | mcall |
356 | mcall |
357 | @@: |
357 | @@: |
358 | ret |
358 | ret |
359 | 359 | ||
360 | convert: |
360 | convert: |
361 | call convert_1 |
361 | call convert_1 |
362 | mov ecx,[image_file_1] |
362 | mov ecx,[image_file_1] |
363 | mcall 68, 13, |
363 | mcall 68, 13, |
364 | ret |
364 | ret |
365 | convert_1: |
365 | convert_1: |
366 | mov ecx, [image_file] |
366 | mov ecx, [image_file] |
367 | add ecx,512 |
367 | add ecx,512 |
368 | mov [soi], ecx |
368 | mov [soi], ecx |
369 | mov eax,[image_file_1] |
369 | mov eax,[image_file_1] |
370 | mov ebp, [eax+18] |
370 | mov ebp, [eax+18] |
371 | lea ebp, [ebp*3] ; ebp = size of output scanline |
371 | lea ebp, [ebp*3] ; ebp = size of output scanline |
372 | mov eax, [eax+22] |
372 | mov eax, [eax+22] |
373 | dec eax |
373 | dec eax |
374 | mul ebp |
374 | mul ebp |
375 | add eax, ecx |
375 | add eax, ecx |
376 | mov edi, eax ; edi points to last scanline |
376 | mov edi, eax ; edi points to last scanline |
377 | mov esi, [image_file_1] |
377 | mov esi, [image_file_1] |
378 | add esi, [esi+10] |
378 | add esi, [esi+10] |
379 | mov ebx,[image_file_1] |
379 | mov ebx,[image_file_1] |
380 | mov edx, [ebx+22] |
380 | mov edx, [ebx+22] |
381 | add ebx,54 |
381 | add ebx,54 |
382 | lea eax, [ebp*2] |
382 | lea eax, [ebp*2] |
383 | mov [delta], eax |
383 | mov [delta], eax |
384 | test edx, edx |
384 | test edx, edx |
385 | jz .ret |
385 | jz .ret |
386 | jns @f |
386 | jns @f |
387 | neg edx |
387 | neg edx |
388 | and [delta], 0 |
388 | and [delta], 0 |
389 | mov edi, ecx |
389 | mov edi, ecx |
390 | @@: |
390 | @@: |
391 | mov eax,[image_file_1] |
391 | mov eax,[image_file_1] |
392 | movzx eax,word [eax+28] |
392 | movzx eax,word [eax+28] |
393 | cmp eax, 24 |
393 | cmp eax, 24 |
394 | jz convert24 |
394 | jz convert24 |
395 | cmp eax, 8 |
395 | cmp eax, 8 |
396 | jz convert8 |
396 | jz convert8 |
397 | cmp eax, 4 |
397 | cmp eax, 4 |
398 | jz convert4 |
398 | jz convert4 |
399 | dec eax |
399 | dec eax |
400 | jz convert1 |
400 | jz convert1 |
401 | .ret: |
401 | .ret: |
402 | ret |
402 | ret |
403 | convert24: |
403 | convert24: |
404 | mov ecx, ebp |
404 | mov ecx, ebp |
405 | rep movsb |
405 | rep movsb |
406 | sub edi, [delta] |
406 | sub edi, [delta] |
407 | mov eax, ebp |
407 | mov eax, ebp |
408 | neg eax |
408 | neg eax |
409 | and eax, 3 |
409 | and eax, 3 |
410 | add esi, eax |
410 | add esi, eax |
411 | dec edx |
411 | dec edx |
412 | jnz convert24 |
412 | jnz convert24 |
413 | ret |
413 | ret |
414 | convert8: |
414 | convert8: |
415 | push edi |
415 | push edi |
416 | add [esp], ebp |
416 | add [esp], ebp |
417 | .loopi: |
417 | .loopi: |
418 | xor eax, eax |
418 | xor eax, eax |
419 | lodsb |
419 | lodsb |
420 | push eax |
420 | push eax |
421 | mov eax,[image_file_1] |
421 | mov eax,[image_file_1] |
422 | cmp dword [eax+30],1 |
422 | cmp dword [eax+30],1 |
423 | pop eax |
423 | pop eax |
424 | jnz .nocompressed |
424 | jnz .nocompressed |
425 | .compressed: |
425 | .compressed: |
426 | mov ecx, eax |
426 | mov ecx, eax |
427 | jecxz .special |
427 | jecxz .special |
428 | lodsb |
428 | lodsb |
429 | mov eax, [ebx+eax*4] |
429 | mov eax, [ebx+eax*4] |
430 | @@: |
430 | @@: |
431 | call putpixel |
431 | call putpixel |
432 | loop @b |
432 | loop @b |
433 | jmp .loopi |
433 | jmp .loopi |
434 | .nocompressed: |
434 | .nocompressed: |
435 | mov eax, [ebx+eax*4] |
435 | mov eax, [ebx+eax*4] |
436 | call putpixel |
436 | call putpixel |
437 | .loopicont: |
437 | .loopicont: |
438 | cmp edi, [esp] |
438 | cmp edi, [esp] |
439 | jnz .loopi |
439 | jnz .loopi |
440 | .next: |
440 | .next: |
441 | pop edi |
441 | pop edi |
442 | sub edi, [delta] |
442 | sub edi, [delta] |
443 | mov eax, ebp |
443 | mov eax, ebp |
444 | and eax, 3 |
444 | and eax, 3 |
445 | add esi, eax |
445 | add esi, eax |
446 | dec edx |
446 | dec edx |
447 | jnz convert8 |
447 | jnz convert8 |
448 | ret |
448 | ret |
449 | .special: |
449 | .special: |
450 | lodsb |
450 | lodsb |
451 | test al, al |
451 | test al, al |
452 | jz .next |
452 | jz .next |
453 | cmp al, 2 |
453 | cmp al, 2 |
454 | jbe .end |
454 | jbe .end |
455 | mov ecx, eax |
455 | mov ecx, eax |
456 | push ecx |
456 | push ecx |
457 | @@: |
457 | @@: |
458 | xor eax, eax |
458 | xor eax, eax |
459 | lodsb |
459 | lodsb |
460 | mov eax, [ebx+eax*4] |
460 | mov eax, [ebx+eax*4] |
461 | call putpixel |
461 | call putpixel |
462 | loop @b |
462 | loop @b |
463 | pop ecx |
463 | pop ecx |
464 | and ecx, 1 |
464 | and ecx, 1 |
465 | add esi, ecx |
465 | add esi, ecx |
466 | jmp .loopi |
466 | jmp .loopi |
467 | .end: |
467 | .end: |
468 | pop edi |
468 | pop edi |
469 | ret |
469 | ret |
470 | convert4: |
470 | convert4: |
471 | push edi |
471 | push edi |
472 | add [esp], ebp |
472 | add [esp], ebp |
473 | .loopi: |
473 | .loopi: |
474 | xor eax, eax |
474 | xor eax, eax |
475 | lodsb |
475 | lodsb |
476 | shr eax, 4 |
476 | shr eax, 4 |
477 | mov eax, [ebx+eax*4] |
477 | mov eax, [ebx+eax*4] |
478 | call putpixel |
478 | call putpixel |
479 | cmp edi, [esp] |
479 | cmp edi, [esp] |
480 | jz .loopidone |
480 | jz .loopidone |
481 | mov al, [esi-1] |
481 | mov al, [esi-1] |
482 | and eax, 0xF |
482 | and eax, 0xF |
483 | mov eax, [ebx+eax*4] |
483 | mov eax, [ebx+eax*4] |
484 | stosd |
484 | stosd |
485 | dec edi |
485 | dec edi |
486 | cmp edi, [esp] |
486 | cmp edi, [esp] |
487 | jnz .loopi |
487 | jnz .loopi |
488 | .loopidone: |
488 | .loopidone: |
489 | pop edi |
489 | pop edi |
490 | sub edi, [delta] |
490 | sub edi, [delta] |
491 | call align_input |
491 | call align_input |
492 | dec edx |
492 | dec edx |
493 | jnz convert4 |
493 | jnz convert4 |
494 | ret |
494 | ret |
495 | convert1: |
495 | convert1: |
496 | push edi |
496 | push edi |
497 | add [esp], ebp |
497 | add [esp], ebp |
498 | .loopi: |
498 | .loopi: |
499 | lodsb |
499 | lodsb |
500 | mov ecx, 8 |
500 | mov ecx, 8 |
501 | .loopii: |
501 | .loopii: |
502 | add al, al |
502 | add al, al |
503 | push eax |
503 | push eax |
504 | setc al |
504 | setc al |
505 | movzx eax, al |
505 | movzx eax, al |
506 | mov eax, [ebx+eax*4] |
506 | mov eax, [ebx+eax*4] |
507 | call putpixel |
507 | call putpixel |
508 | pop eax |
508 | pop eax |
509 | cmp edi, [esp] |
509 | cmp edi, [esp] |
510 | loopnz .loopii |
510 | loopnz .loopii |
511 | jnz .loopi |
511 | jnz .loopi |
512 | pop edi |
512 | pop edi |
513 | sub edi, [delta] |
513 | sub edi, [delta] |
514 | call align_input |
514 | call align_input |
515 | dec edx |
515 | dec edx |
516 | jnz convert1 |
516 | jnz convert1 |
517 | ret |
517 | ret |
518 | 518 | ||
519 | align_input: |
519 | align_input: |
520 | push esi |
520 | push esi |
521 | push eax |
521 | push eax |
522 | mov eax,[image_file_1] |
522 | mov eax,[image_file_1] |
523 | sub esi,eax |
523 | sub esi,eax |
524 | sub esi,[eax+10] |
524 | sub esi,[eax+10] |
525 | pop eax |
525 | pop eax |
526 | neg esi |
526 | neg esi |
527 | and esi, 3 |
527 | and esi, 3 |
528 | add [esp], esi |
528 | add [esp], esi |
529 | pop esi |
529 | pop esi |
530 | ret |
530 | ret |
531 | 531 | ||
532 | putpixel: |
532 | putpixel: |
533 | push eax |
533 | push eax |
534 | stosw |
534 | stosw |
535 | shr eax, 16 |
535 | shr eax, 16 |
536 | stosb |
536 | stosb |
537 | pop eax |
537 | pop eax |
538 | ret |
538 | ret |
539 | 539 | ||
540 | ;--------------------------------------------------------------------- |
540 | ;--------------------------------------------------------------------- |
541 | get_window_param: |
541 | get_window_param: |
542 | mcall 9, procinfo, -1 |
542 | mcall 9, procinfo, -1 |
543 | mov eax,[ebx+46] |
543 | mov eax,[ebx+46] |
544 | mov [window_high],eax |
544 | mov [window_high],eax |
545 | mov eax,[ebx+42] |
545 | mov eax,[ebx+42] |
546 | mov [window_width],eax |
546 | mov [window_width],eax |
547 | mcall 48,4 |
547 | mcall 48,4 |
548 | mov [skin_high],eax |
548 | mov [skin_high],eax |
549 | ret |
549 | ret |
550 | ;--------------------------------------------------------------------- |
550 | ;--------------------------------------------------------------------- |
551 | 551 | ||
552 | ; ********************************************* |
552 | ; ********************************************* |
553 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
553 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
554 | ; ********************************************* |
554 | ; ********************************************* |
555 | 555 | ||
556 | 556 | ||
557 | draw_window: |
557 | draw_window: |
558 | or [bWasDraw],1 |
558 | or [bWasDraw],1 |
559 | 559 | ||
560 | mov eax,12 ; function 12:tell os about windowdraw |
560 | mov eax,12 ; function 12:tell os about windowdraw |
561 | mov ebx,1 ; 1, start of draw |
561 | mov ebx,1 ; 1, start of draw |
562 | mcall |
562 | mcall |
563 | 563 | ||
564 | ; DRAW WINDOW |
564 | ; DRAW WINDOW |
565 | xor eax,eax ; function 0 : define and draw window |
565 | xor eax,eax ; function 0 : define and draw window |
566 | ; mov ebx,350 ; [x start] *65536 + [x size] |
566 | ; mov ebx,350 ; [x start] *65536 + [x size] |
567 | ; mov ecx,400 ; [y start] *65536 + [y size] |
567 | ; mov ecx,400 ; [y start] *65536 + [y size] |
568 | mov ebx,0*65536 |
568 | mov ebx,0*65536 |
569 | mov ecx,0*65536 |
569 | mov ecx,0*65536 |
570 | add ebx,[wnd_width] |
570 | add ebx,[wnd_width] |
571 | add ecx,[wnd_height] |
571 | add ecx,[wnd_height] |
572 | cmp cx,55 |
572 | cmp cx,55 |
573 | ja @f |
573 | ja @f |
574 | mov cx,55 |
574 | mov cx,55 |
575 | @@: |
575 | @@: |
576 | mov edx,0x43ffffff ; color of work area RRGGBB,8->color gl |
576 | mov edx,0x43ffffff ; color of work area RRGGBB,8->color gl |
577 | mcall |
577 | mcall |
578 | 578 | ||
579 | call get_window_param |
579 | call get_window_param |
580 | 580 | ||
581 | mov ebx,5 |
581 | mov ebx,5 |
582 | shl ebx,16 |
582 | shl ebx,16 |
583 | add ebx,[window_width] |
583 | add ebx,[window_width] |
584 | sub ebx,9 |
584 | sub ebx,9 |
585 | push ebx |
585 | push ebx |
586 | mov ecx,[skin_high] |
586 | mov ecx,[skin_high] |
587 | shl ecx,16 |
587 | shl ecx,16 |
588 | add ecx,50 |
588 | add ecx,50 |
589 | sub ecx,[skin_high] |
589 | sub ecx,[skin_high] |
590 | mcall 13, , ,0xffffff |
590 | mcall 13, , ,0xffffff |
591 | mov eax,[image_file] |
591 | mov eax,[image_file] |
592 | mov ecx,[eax+22] |
592 | mov ecx,[eax+22] |
593 | mov ebx,[eax+18] |
593 | mov ebx,[eax+18] |
594 | push ecx |
594 | push ecx |
595 | add ebx,5 |
595 | add ebx,5 |
596 | mov ax,bx |
596 | mov ax,bx |
597 | shl ebx,16 |
597 | shl ebx,16 |
598 | add ebx,[window_width] |
598 | add ebx,[window_width] |
599 | sub ebx,4 |
599 | sub ebx,4 |
600 | sub bx,ax |
600 | sub bx,ax |
601 | cmp bx,0 |
601 | cmp bx,0 |
602 | jbe @f |
602 | jbe @f |
603 | add ecx,50 shl 16 |
603 | add ecx,50 shl 16 |
604 | mcall 13, , ,0xffffff |
604 | mcall 13, , ,0xffffff |
605 | @@: |
605 | @@: |
606 | pop ecx |
606 | pop ecx |
607 | pop ebx |
607 | pop ebx |
608 | add ecx,50 |
608 | add ecx,50 |
609 | mov ax,cx |
609 | mov ax,cx |
610 | shl ecx,16 |
610 | shl ecx,16 |
611 | add ecx,[window_high] |
611 | add ecx,[window_high] |
612 | sub cx,ax |
612 | sub cx,ax |
613 | sub ecx,4 |
613 | sub ecx,4 |
614 | cmp cx,0 |
614 | cmp cx,0 |
615 | jbe @f |
615 | jbe @f |
616 | mcall 13, , ,0xffffff |
616 | mcall 13, , ,0xffffff |
617 | @@: |
617 | @@: |
618 | mov eax,8 |
618 | mov eax,8 |
619 | mov ebx,10*65536+46 |
619 | mov ebx,10*65536+46 |
620 | mov ecx,25*65536+20 |
620 | mov ecx,25*65536+20 |
621 | mov edx,2 |
621 | mov edx,2 |
622 | mov esi,0x780078 |
622 | mov esi,0x780078 |
623 | newbutton: |
623 | newbutton: |
624 | mcall |
624 | mcall |
625 | add ebx,48*65536 |
625 | add ebx,48*65536 |
626 | inc edx |
626 | inc edx |
627 | cmp edx,6 |
627 | cmp edx,6 |
628 | jb newbutton |
628 | jb newbutton |
629 | 629 | ||
630 | ; WINDOW LABEL |
630 | ; WINDOW LABEL |
631 | mov eax,4 ; function 4 : write text to window |
631 | mov eax,4 ; function 4 : write text to window |
632 | mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
632 | mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
633 | mov ecx,0x10ddeeff ; font 1 & color ( 0xF0RRGGBB ) |
633 | mov ecx,0x10ddeeff ; font 1 & color ( 0xF0RRGGBB ) |
634 | mov edx,labelt ; pointer to text beginning |
634 | mov edx,labelt ; pointer to text beginning |
635 | mov esi,12 ; text length |
635 | mov esi,12 ; text length |
636 | mcall |
636 | mcall |
637 | 637 | ||
638 | mov ebx,14*65536+32 |
638 | mov ebx,14*65536+32 |
639 | mov edx,buttext |
639 | mov edx,buttext |
640 | mov esi,26 |
640 | mov esi,26 |
641 | mcall |
641 | mcall |
642 | 642 | ||
643 | call drawimage |
643 | call drawimage |
644 | 644 | ||
645 | mov eax,12 ; function 12:tell os about windowdraw |
645 | mov eax,12 ; function 12:tell os about windowdraw |
646 | mov ebx,2 ; 2, end of draw |
646 | mov ebx,2 ; 2, end of draw |
647 | mcall |
647 | mcall |
648 | 648 | ||
649 | ret |
649 | ret |
650 | 650 | ||
651 | 651 | ||
652 | ; DATA AREA |
652 | ; DATA AREA |
653 | 653 | ||
654 | labelt: |
654 | labelt: |
655 | db 'MeView v.0.4' |
655 | db 'MeView v.0.4' |
656 | 656 | ||
657 | lsz buttext,\ |
657 | lsz buttext,\ |
658 | en, ' FILE OPEN INFO BGRD',\ |
658 | en, ' FILE OPEN INFO BGRD',\ |
659 | ru, ' ',\ |
659 | ru, ' ',\ |
660 | de, 'DATEI OEFNEN INFO HGRD' |
660 | de, 'DATEI OEFNEN INFO HGRD' |
661 | 661 | ||
662 | thread1: ; start of thread1 |
662 | thread1: ; start of thread1 |
663 | 663 | ||
664 | mcall 40, 0x27 |
664 | mcall 40, 0x27 |
665 | 665 | ||
666 | or ecx,-1 ; get information about me |
666 | or ecx,-1 ; get information about me |
667 | call getappinfo |
667 | call getappinfo |
668 | 668 | ||
669 | mov esi,string |
669 | mov esi,string |
670 | @@: |
670 | @@: |
671 | cld |
671 | cld |
672 | lodsb |
672 | lodsb |
673 | test al,al |
673 | test al,al |
674 | jne @r |
674 | jne @r |
675 | sub esi,string |
675 | sub esi,string |
676 | mov eax,esi |
676 | mov eax,esi |
677 | dec eax |
677 | dec eax |
678 | mov edi, edit1 |
678 | mov edi, edit1 |
679 | mov ed_size, eax |
679 | mov ed_size, eax |
680 | mov ed_pos, eax |
680 | mov ed_pos, eax |
681 | red1: |
681 | red1: |
682 | call draw_window1 |
682 | call draw_window1 |
683 | 683 | ||
684 | still1: |
684 | still1: |
685 | 685 | ||
686 | mcall 10 ; wait here for event |
686 | mcall 10 ; wait here for event |
687 | 687 | ||
688 | cmp eax,1 ; redraw request ? |
688 | cmp eax,1 ; redraw request ? |
689 | je red1 |
689 | je red1 |
690 | cmp eax,2 ; key in buffer ? |
690 | cmp eax,2 ; key in buffer ? |
691 | je key1 |
691 | je key1 |
692 | cmp eax,3 ; button in buffer ? |
692 | cmp eax,3 ; button in buffer ? |
693 | je button1 |
693 | je button1 |
694 | 694 | ||
695 | mouse_edit_box name_editboxes |
695 | mouse_edit_box name_editboxes |
696 | jmp still1 |
696 | jmp still1 |
697 | 697 | ||
698 | key1: ; key |
698 | key1: ; key |
699 | mcall 2 |
699 | mcall 2 |
700 | cmp ah,13 |
700 | cmp ah,13 |
701 | je close1 |
701 | je close1 |
702 | cmp ah,27 |
702 | cmp ah,27 |
703 | je close1 |
703 | je close1 |
704 | 704 | ||
705 | key_edit_box name_editboxes |
705 | key_edit_box name_editboxes |
706 | jmp still1 |
706 | jmp still1 |
707 | 707 | ||
708 | button1: ; button |
708 | button1: ; button |
709 | mov eax,17 ; get id |
709 | mov eax,17 ; get id |
710 | mcall |
710 | mcall |
711 | 711 | ||
712 | cmp ah,1 ; button id=1 ? |
712 | cmp ah,1 ; button id=1 ? |
713 | jne still1 |
713 | jne still1 |
714 | close1: |
714 | close1: |
715 | bts dword [status],2 |
715 | bts dword [status],2 |
716 | btr dword [status],0 |
716 | btr dword [status],0 |
717 | mov eax,-1 ; close this program |
717 | mov eax,-1 ; close this program |
718 | mcall |
718 | mcall |
719 | 719 | ||
720 | jmp still1 |
720 | jmp still1 |
721 | 721 | ||
722 | ; ********************************************* |
722 | ; ********************************************* |
723 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
723 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
724 | ; ********************************************* |
724 | ; ********************************************* |
725 | 725 | ||
726 | 726 | ||
727 | draw_window1: |
727 | draw_window1: |
728 | 728 | ||
729 | 729 | ||
730 | mov eax,12 ; function 12:tell os about windowdraw |
730 | mov eax,12 ; function 12:tell os about windowdraw |
731 | mov ebx,1 ; 1, start of draw |
731 | mov ebx,1 ; 1, start of draw |
732 | mcall |
732 | mcall |
733 | 733 | ||
734 | ; DRAW WINDOW |
734 | ; DRAW WINDOW |
735 | xor eax,eax ; function 0 : define and draw window |
735 | xor eax,eax ; function 0 : define and draw window |
736 | mov ebx,100*65536+300 ; [x start] *65536 + [x size] |
736 | mov ebx,100*65536+300 ; [x start] *65536 + [x size] |
737 | mov ecx,100*65536+80 ; [y start] *65536 + [y size] |
737 | mov ecx,100*65536+80 ; [y start] *65536 + [y size] |
738 | mov edx,0x03780078 ; color of work area RRGGBB,8->color gl |
738 | mov edx,0x03780078 ; color of work area RRGGBB,8->color gl |
739 | mcall |
739 | mcall |
740 | 740 | ||
741 | ; WINDOW LABEL |
741 | ; WINDOW LABEL |
742 | mov eax,4 ; function 4 : write text to window |
742 | mov eax,4 ; function 4 : write text to window |
743 | mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
743 | mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
744 | mov ecx,0x10ddeeff ; font 1 & color ( 0xF0RRGGBB ) |
744 | mov ecx,0x10ddeeff ; font 1 & color ( 0xF0RRGGBB ) |
745 | mov edx,labelt1 ; pointer to text beginning |
745 | mov edx,labelt1 ; pointer to text beginning |
746 | mov esi,labelt1.size ; text length |
746 | mov esi,labelt1.size ; text length |
747 | mcall |
747 | mcall |
748 | 748 | ||
749 | ; call drawstring |
749 | ; call drawstring |
750 | draw_edit_box name_editboxes |
750 | draw_edit_box name_editboxes |
751 | 751 | ||
752 | mov eax,12 ; function 12:tell os about windowdraw |
752 | mov eax,12 ; function 12:tell os about windowdraw |
753 | mov ebx,2 ; 2, end of draw |
753 | mov ebx,2 ; 2, end of draw |
754 | mcall |
754 | mcall |
755 | 755 | ||
756 | ret |
756 | ret |
757 | 757 | ||
758 | drawstring: |
758 | drawstring: |
759 | pusha |
759 | pusha |
760 | mov eax,8 ;invisible button |
760 | mov eax,8 ;invisible button |
761 | mov ebx,21*65536+258 |
761 | mov ebx,21*65536+258 |
762 | mov ecx,40*65536+15 |
762 | mov ecx,40*65536+15 |
763 | mov edx,0x60000002 |
763 | mov edx,0x60000002 |
764 | mcall |
764 | mcall |
765 | 765 | ||
766 | mov eax,13 ;bar |
766 | mov eax,13 ;bar |
767 | mov edx,0xe0e0e0 |
767 | mov edx,0xe0e0e0 |
768 | mcall |
768 | mcall |
769 | push eax ;cursor |
769 | push eax ;cursor |
770 | mov eax,6*65536 |
770 | mov eax,6*65536 |
771 | mul dword [pos] |
771 | mul dword [pos] |
772 | add eax,21*65536+6 |
772 | add eax,21*65536+6 |
773 | mov ebx,eax |
773 | mov ebx,eax |
774 | pop eax |
774 | pop eax |
775 | mov edx,0x6a73d0 |
775 | mov edx,0x6a73d0 |
776 | mcall |
776 | mcall |
777 | mov eax,4 ;path |
777 | mov eax,4 ;path |
778 | mov ebx,21*65536+44 |
778 | mov ebx,21*65536+44 |
779 | xor ecx,ecx |
779 | xor ecx,ecx |
780 | mov edx,string |
780 | mov edx,string |
781 | mov esi,43 |
781 | mov esi,43 |
782 | mcall |
782 | mcall |
783 | 783 | ||
784 | 784 | ||
785 | popa |
785 | popa |
786 | ret |
786 | ret |
787 | 787 | ||
788 | ; DATA AREA |
788 | ; DATA AREA |
789 | 789 | ||
790 | lsz labelt1,\ |
790 | lsz labelt1,\ |
791 | en, 'File',\ |
791 | en, 'File',\ |
792 | ru, ' ©«',\ |
792 | ru, ' ©«',\ |
793 | de, 'Datei' |
793 | de, 'Datei' |
794 | 794 | ||
795 | thread2: ; start of info thread |
795 | thread2: ; start of info thread |
796 | 796 | ||
797 | call draw_window2 |
797 | call draw_window2 |
798 | 798 | ||
799 | still2: |
799 | still2: |
800 | 800 | ||
801 | mov eax,10 ; wait here for event |
801 | mov eax,10 ; wait here for event |
802 | mcall |
802 | mcall |
803 | 803 | ||
804 | cmp eax,1 ; redraw request ? |
804 | cmp eax,1 ; redraw request ? |
805 | je thread2 |
805 | je thread2 |
806 | cmp eax,2 ; key in buffer ? |
806 | cmp eax,2 ; key in buffer ? |
807 | je close2 |
807 | je close2 |
808 | cmp eax,3 ; button in buffer ? |
808 | cmp eax,3 ; button in buffer ? |
809 | je button2 |
809 | je button2 |
810 | 810 | ||
811 | jmp still2 |
811 | jmp still2 |
812 | 812 | ||
813 | button2: ; button |
813 | button2: ; button |
814 | mov eax,17 ; get id |
814 | mov eax,17 ; get id |
815 | mcall |
815 | mcall |
816 | 816 | ||
817 | cmp ah,1 ; button id=1 ? |
817 | cmp ah,1 ; button id=1 ? |
818 | jne noclose2 |
818 | jne noclose2 |
819 | close2: |
819 | close2: |
820 | btr dword [status],1 |
820 | btr dword [status],1 |
821 | bts dword [status],2 |
821 | bts dword [status],2 |
822 | mov eax,-1 ; close this program |
822 | mov eax,-1 ; close this program |
823 | mcall |
823 | mcall |
824 | noclose2: |
824 | noclose2: |
825 | 825 | ||
826 | jmp still2 |
826 | jmp still2 |
827 | 827 | ||
828 | 828 | ||
829 | 829 | ||
830 | 830 | ||
831 | ; ********************************************* |
831 | ; ********************************************* |
832 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
832 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
833 | ; ********************************************* |
833 | ; ********************************************* |
834 | 834 | ||
835 | 835 | ||
836 | draw_window2: |
836 | draw_window2: |
837 | 837 | ||
838 | 838 | ||
839 | mov eax,12 ; function 12:tell os about windowdraw |
839 | mov eax,12 ; function 12:tell os about windowdraw |
840 | mov ebx,1 ; 1, start of draw |
840 | mov ebx,1 ; 1, start of draw |
841 | mcall |
841 | mcall |
842 | 842 | ||
843 | ; DRAW WINDOW |
843 | ; DRAW WINDOW |
844 | xor eax,eax ; function 0 : define and draw window |
844 | xor eax,eax ; function 0 : define and draw window |
845 | mov ebx,100*65536+330 ; [x start] *65536 + [x size] |
845 | mov ebx,100*65536+330 ; [x start] *65536 + [x size] |
846 | mov ecx,100*65536+90 ; [y start] *65536 + [y size] |
846 | mov ecx,100*65536+90 ; [y start] *65536 + [y size] |
847 | mov edx,0x03780078 ; color of work area RRGGBB,8->color gl |
847 | mov edx,0x03780078 ; color of work area RRGGBB,8->color gl |
848 | mcall |
848 | mcall |
849 | 849 | ||
850 | ; WINDOW LABEL |
850 | ; WINDOW LABEL |
851 | mov eax,4 ; function 4 : write text to window |
851 | mov eax,4 ; function 4 : write text to window |
852 | mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
852 | mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
853 | mov ecx,0x10ddeeff ; font 1 & color ( 0xF0RRGGBB ) |
853 | mov ecx,0x10ddeeff ; font 1 & color ( 0xF0RRGGBB ) |
854 | mov edx,labelt2 ; pointer to text beginning |
854 | mov edx,labelt2 ; pointer to text beginning |
855 | mov esi,labelt2.size ; text length |
855 | mov esi,labelt2.size ; text length |
856 | mcall |
856 | mcall |
857 | 857 | ||
858 | mov ebx,10*65536+30 |
858 | mov ebx,10*65536+30 |
859 | mov edx,string |
859 | mov edx,string |
860 | mov esi,43 |
860 | mov esi,43 |
861 | mcall |
861 | mcall |
862 | mov edx,fitext |
862 | mov edx,fitext |
863 | mov esi,14 |
863 | mov esi,14 |
864 | add ebx,70*65536+10 |
864 | add ebx,70*65536+10 |
865 | followstring: |
865 | followstring: |
866 | mcall |
866 | mcall |
867 | add ebx,10 |
867 | add ebx,10 |
868 | add edx,esi |
868 | add edx,esi |
869 | cmp ebx,80*65536+70 |
869 | cmp ebx,80*65536+70 |
870 | jbe followstring |
870 | jbe followstring |
871 | mov eax,47 |
871 | mov eax,47 |
872 | mov edx,200*65536+40 |
872 | mov edx,200*65536+40 |
873 | mov esi,ecx |
873 | mov esi,ecx |
874 | mov ecx,[image_file] |
874 | mov ecx,[image_file] |
875 | push ecx |
875 | push ecx |
876 | mov ecx, [ecx+2] |
876 | mov ecx, [ecx+2] |
877 | call digitcorrect |
877 | call digitcorrect |
878 | mcall |
878 | mcall |
879 | add edx,10 |
879 | add edx,10 |
880 | pop ecx |
880 | pop ecx |
881 | push ecx |
881 | push ecx |
882 | mov ecx, [ecx+18] |
882 | mov ecx, [ecx+18] |
883 | call digitcorrect |
883 | call digitcorrect |
884 | mcall |
884 | mcall |
885 | add edx,10 |
885 | add edx,10 |
886 | pop ecx |
886 | pop ecx |
887 | push ecx |
887 | push ecx |
888 | mov ecx, [ecx+22] |
888 | mov ecx, [ecx+22] |
889 | call digitcorrect |
889 | call digitcorrect |
890 | mcall |
890 | mcall |
891 | add edx,10 |
891 | add edx,10 |
892 | pop ecx |
892 | pop ecx |
893 | movzx ecx,word [ecx+28] |
893 | movzx ecx,word [ecx+28] |
894 | call digitcorrect |
894 | call digitcorrect |
895 | mcall |
895 | mcall |
896 | 896 | ||
897 | mov eax,12 ; function 12:tell os about windowdraw |
897 | mov eax,12 ; function 12:tell os about windowdraw |
898 | mov ebx,2 ; 2, end of draw |
898 | mov ebx,2 ; 2, end of draw |
899 | mcall |
899 | mcall |
900 | 900 | ||
901 | ret |
901 | ret |
902 | 902 | ||
903 | digitcorrect: |
903 | digitcorrect: |
904 | xor ebx,ebx |
904 | xor ebx,ebx |
905 | mov bh,6 |
905 | mov bh,6 |
906 | cmp ecx,99999 |
906 | cmp ecx,99999 |
907 | ja c_end |
907 | ja c_end |
908 | dec bh |
908 | dec bh |
909 | cmp ecx,9999 |
909 | cmp ecx,9999 |
910 | ja c_end |
910 | ja c_end |
911 | dec bh |
911 | dec bh |
912 | cmp ecx,999 |
912 | cmp ecx,999 |
913 | ja c_end |
913 | ja c_end |
914 | dec bh |
914 | dec bh |
915 | cmp ecx,99 |
915 | cmp ecx,99 |
916 | ja c_end |
916 | ja c_end |
917 | dec bh |
917 | dec bh |
918 | cmp ecx,9 |
918 | cmp ecx,9 |
919 | ja c_end |
919 | ja c_end |
920 | dec bh |
920 | dec bh |
921 | c_end: |
921 | c_end: |
922 | bswap ebx |
922 | bswap ebx |
923 | ret |
923 | ret |
924 | 924 | ||
925 | 925 | ||
926 | ; DATA AREA |
926 | ; DATA AREA |
927 | 927 | ||
928 | lsz labelt2,\ |
928 | lsz labelt2,\ |
929 | en, 'File info',\ |
929 | en, 'File info',\ |
930 | ru, 'ä®à¬ æ¨ï ® ä ©«¥',\ |
930 | ru, 'ä®à¬ æ¨ï ® ä ©«¥',\ |
931 | de, 'Dateiinfo' |
931 | de, 'Dateiinfo' |
932 | 932 | ||
933 | lsz fitext,\ |
933 | lsz fitext,\ |
934 | en, 'FILE SIZE ',\ |
934 | en, 'FILE SIZE ',\ |
935 | en, 'X SIZE ',\ |
935 | en, 'X SIZE ',\ |
936 | en, 'Y SIZE ',\ |
936 | en, 'Y SIZE ',\ |
937 | en, 'BITS PER PIXEL',\ |
937 | en, 'BITS PER PIXEL',\ |
938 | \ |
938 | \ |
939 | ru, ' §¬¥à ä ©« ',\ |
939 | ru, ' §¬¥à ä ©« ',\ |
940 | ru, '¨à¨ ',\ |
940 | ru, '¨à¨ ',\ |
941 | ru, 'ëá®â ',\ |
941 | ru, 'ëá®â ',\ |
942 | ru, '¨â ¯¨ªá¥« ',\ |
942 | ru, '¨â ¯¨ªá¥« ',\ |
943 | \ |
943 | \ |
944 | de, 'FATEIGROESSE ',\ |
944 | de, 'FATEIGROESSE ',\ |
945 | de, 'X GROESSE ',\ |
945 | de, 'X GROESSE ',\ |
946 | de, 'Y GROESSE ',\ |
946 | de, 'Y GROESSE ',\ |
947 | de, 'BITS PER PIXEL' |
947 | de, 'BITS PER PIXEL' |
948 | 948 | ||
949 | thread3: ; start of bgrd thread |
949 | thread3: ; start of bgrd thread |
950 | 950 | ||
951 | call draw_window3 |
951 | call draw_window3 |
952 | 952 | ||
953 | still3: |
953 | still3: |
954 | 954 | ||
955 | mov eax,10 ; wait here for event |
955 | mov eax,10 ; wait here for event |
956 | mcall |
956 | mcall |
957 | 957 | ||
958 | cmp eax,1 ; redraw request ? |
958 | cmp eax,1 ; redraw request ? |
959 | je thread3 |
959 | je thread3 |
960 | cmp eax,2 ; key in buffer ? |
960 | cmp eax,2 ; key in buffer ? |
961 | je key3 |
961 | je key3 |
962 | cmp eax,3 ; button in buffer ? |
962 | cmp eax,3 ; button in buffer ? |
963 | je button3 |
963 | je button3 |
964 | 964 | ||
965 | jmp still3 |
965 | jmp still3 |
966 | 966 | ||
967 | key3: |
967 | key3: |
968 | mcall |
968 | mcall |
969 | cmp ah,27 |
969 | cmp ah,27 |
970 | je close3 |
970 | je close3 |
971 | cmp ah,13 |
971 | cmp ah,13 |
972 | je kok |
972 | je kok |
973 | cmp ah,178 ;up |
973 | cmp ah,178 ;up |
974 | jne nofup |
974 | jne nofup |
975 | cmp dword [bgrmode],1 |
975 | cmp dword [bgrmode],1 |
976 | je fdn |
976 | je fdn |
977 | fup: |
977 | fup: |
978 | dec dword [bgrmode] |
978 | dec dword [bgrmode] |
979 | jmp flagcont |
979 | jmp flagcont |
980 | nofup: |
980 | nofup: |
981 | cmp ah,177 ;down |
981 | cmp ah,177 ;down |
982 | jne still3 |
982 | jne still3 |
983 | cmp dword [bgrmode],2 |
983 | cmp dword [bgrmode],2 |
984 | je fup |
984 | je fup |
985 | fdn: |
985 | fdn: |
986 | inc dword [bgrmode] |
986 | inc dword [bgrmode] |
987 | jmp flagcont |
987 | jmp flagcont |
988 | 988 | ||
989 | 989 | ||
990 | button3: ; button |
990 | button3: ; button |
991 | mov eax,17 ; get id |
991 | mov eax,17 ; get id |
992 | mcall |
992 | mcall |
993 | 993 | ||
994 | cmp ah,1 ; button id=1 ? |
994 | cmp ah,1 ; button id=1 ? |
995 | jne noclose3 |
995 | jne noclose3 |
996 | close3: |
996 | close3: |
997 | btr dword [status],3 |
997 | btr dword [status],3 |
998 | bts dword [status],2 |
998 | bts dword [status],2 |
999 | mov eax,-1 ; close this program |
999 | mov eax,-1 ; close this program |
1000 | mcall |
1000 | mcall |
1001 | noclose3: |
1001 | noclose3: |
1002 | cmp ah,4 |
1002 | cmp ah,4 |
1003 | jne nook |
1003 | jne nook |
1004 | kok: |
1004 | kok: |
1005 | call background |
1005 | call background |
1006 | jmp close3 |
1006 | jmp close3 |
1007 | nook: |
1007 | nook: |
1008 | cmp ah,2 |
1008 | cmp ah,2 |
1009 | jb still3 |
1009 | jb still3 |
1010 | cmp ah,3 |
1010 | cmp ah,3 |
1011 | ja still3 |
1011 | ja still3 |
1012 | dec ah |
1012 | dec ah |
1013 | mov byte [bgrmode],ah |
1013 | mov byte [bgrmode],ah |
1014 | flagcont: |
1014 | flagcont: |
1015 | call drawflags |
1015 | call drawflags |
1016 | jmp still3 |
1016 | jmp still3 |
1017 | 1017 | ||
1018 | 1018 | ||
1019 | 1019 | ||
1020 | 1020 | ||
1021 | ; ********************************************* |
1021 | ; ********************************************* |
1022 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
1022 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
1023 | ; ********************************************* |
1023 | ; ********************************************* |
1024 | 1024 | ||
1025 | 1025 | ||
1026 | draw_window3: |
1026 | draw_window3: |
1027 | 1027 | ||
1028 | 1028 | ||
1029 | mov eax,12 ; function 12:tell os about windowdraw |
1029 | mov eax,12 ; function 12:tell os about windowdraw |
1030 | mov ebx,1 ; 1, start of draw |
1030 | mov ebx,1 ; 1, start of draw |
1031 | mcall |
1031 | mcall |
1032 | 1032 | ||
1033 | ; DRAW WINDOW |
1033 | ; DRAW WINDOW |
1034 | xor eax,eax ; function 0 : define and draw window |
1034 | xor eax,eax ; function 0 : define and draw window |
1035 | mov ebx,100*65536+200 ; [x start] *65536 + [x size] |
1035 | mov ebx,100*65536+200 ; [x start] *65536 + [x size] |
1036 | mov ecx,100*65536+100 ; [y start] *65536 + [y size] |
1036 | mov ecx,100*65536+100 ; [y start] *65536 + [y size] |
1037 | mov edx,0x03780078 ; color of work area RRGGBB,8->color gl |
1037 | mov edx,0x03780078 ; color of work area RRGGBB,8->color gl |
1038 | mcall |
1038 | mcall |
1039 | 1039 | ||
1040 | mov eax,8 |
1040 | mov eax,8 |
1041 | mov ebx,70*65536+40 |
1041 | mov ebx,70*65536+40 |
1042 | mov ecx,70*65536+20 |
1042 | mov ecx,70*65536+20 |
1043 | mov edx,4 |
1043 | mov edx,4 |
1044 | mov esi,0xac0000 |
1044 | mov esi,0xac0000 |
1045 | mcall |
1045 | mcall |
1046 | 1046 | ||
1047 | ; WINDOW LABEL |
1047 | ; WINDOW LABEL |
1048 | mov eax,4 ; function 4 : write text to window |
1048 | mov eax,4 ; function 4 : write text to window |
1049 | mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
1049 | mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
1050 | mov ecx,0x10ddeeff ; font 1 & color ( 0xF0RRGGBB ) |
1050 | mov ecx,0x10ddeeff ; font 1 & color ( 0xF0RRGGBB ) |
1051 | mov edx,labelt3 ; pointer to text beginning |
1051 | mov edx,labelt3 ; pointer to text beginning |
1052 | mov esi,labelt3.size ; text length |
1052 | mov esi,labelt3.size ; text length |
1053 | mcall |
1053 | mcall |
1054 | add ebx,38*65536+20 |
1054 | add ebx,38*65536+20 |
1055 | mov ecx,0xddeeff |
1055 | mov ecx,0xddeeff |
1056 | mov edx, bgrdtext |
1056 | mov edx, bgrdtext |
1057 | mov esi, bgrdtext.size |
1057 | mov esi, bgrdtext.size |
1058 | mcall |
1058 | mcall |
1059 | add ebx,40*65536+15 |
1059 | add ebx,40*65536+15 |
1060 | mov edx, tiled |
1060 | mov edx, tiled |
1061 | mov esi, tiled.size |
1061 | mov esi, tiled.size |
1062 | mcall |
1062 | mcall |
1063 | add ebx,15 |
1063 | add ebx,15 |
1064 | mov edx, stretch |
1064 | mov edx, stretch |
1065 | mov esi, stretch.size ;7 |
1065 | mov esi, stretch.size ;7 |
1066 | mcall |
1066 | mcall |
1067 | add ebx,18 |
1067 | add ebx,18 |
1068 | mov edx, ok_btn |
1068 | mov edx, ok_btn |
1069 | mov esi, ok_btn.size ;2 |
1069 | mov esi, ok_btn.size ;2 |
1070 | mcall |
1070 | mcall |
1071 | 1071 | ||
1072 | call drawflags |
1072 | call drawflags |
1073 | 1073 | ||
1074 | mov eax,12 ; function 12:tell os about windowdraw |
1074 | mov eax,12 ; function 12:tell os about windowdraw |
1075 | mov ebx,2 ; 2, end of draw |
1075 | mov ebx,2 ; 2, end of draw |
1076 | mcall |
1076 | mcall |
1077 | 1077 | ||
1078 | ret |
1078 | ret |
1079 | 1079 | ||
1080 | drawflags: |
1080 | drawflags: |
1081 | mov eax,8 |
1081 | mov eax,8 |
1082 | mov ebx,70*65536+10 |
1082 | mov ebx,70*65536+10 |
1083 | mov ecx,40*65536+10 |
1083 | mov ecx,40*65536+10 |
1084 | mov edx,2 |
1084 | mov edx,2 |
1085 | mov esi,0xe0e0e0 |
1085 | mov esi,0xe0e0e0 |
1086 | mcall |
1086 | mcall |
1087 | add ecx,15*65536 |
1087 | add ecx,15*65536 |
1088 | inc edx |
1088 | inc edx |
1089 | mcall |
1089 | mcall |
1090 | mov eax,4 |
1090 | mov eax,4 |
1091 | mov ebx,73*65536+42 |
1091 | mov ebx,73*65536+42 |
1092 | xor ecx,ecx |
1092 | xor ecx,ecx |
1093 | mov edx,vflag |
1093 | mov edx,vflag |
1094 | mov esi,1 |
1094 | mov esi,1 |
1095 | cmp dword [bgrmode],1 |
1095 | cmp dword [bgrmode],1 |
1096 | je nodownflag |
1096 | je nodownflag |
1097 | add ebx,15 |
1097 | add ebx,15 |
1098 | nodownflag: |
1098 | nodownflag: |
1099 | mcall |
1099 | mcall |
1100 | ret |
1100 | ret |
1101 | 1101 | ||
1102 | 1102 | ||
1103 | ; DATA AREA |
1103 | ; DATA AREA |
1104 | status dd 0 ;bit0=1 if file thread is created |
1104 | status dd 0 ;bit0=1 if file thread is created |
1105 | soi dd 0 |
1105 | soi dd 0 |
1106 | delta dd 0 |
1106 | delta dd 0 |
1107 | process dd 0 |
1107 | process dd 0 |
1108 | 1108 | ||
1109 | bWasDraw db 0 |
1109 | bWasDraw db 0 |
1110 | vflag: db 'x' |
1110 | vflag: db 'x' |
1111 | bgrmode: dd 1 |
1111 | bgrmode: dd 1 |
1112 | 1112 | ||
1113 | wnd_width dd 210 |
1113 | wnd_width dd 210 |
1114 | wnd_height dd 53 |
1114 | wnd_height dd 53 |
1115 | 1115 | ||
1116 | lsz labelt3,\ |
1116 | lsz labelt3,\ |
1117 | en, 'Background set',\ |
1117 | en, 'Background set',\ |
1118 | ru, "áâ ®¢ª ä® ",\ |
1118 | ru, "áâ ®¢ª ä® ",\ |
1119 | de, 'Hintergrund gesetzt' |
1119 | de, 'Hintergrund gesetzt' |
1120 | 1120 | ||
1121 | lsz bgrdtext,\ |
1121 | lsz bgrdtext,\ |
1122 | en, 'SET AS BACKGROUND:',\ |
1122 | en, 'SET AS BACKGROUND:',\ |
1123 | ru, '¨¯ ®¡®¥¢:',\ |
1123 | ru, '¨¯ ®¡®¥¢:',\ |
1124 | de, 'ALS HINTERGRUND' |
1124 | de, 'ALS HINTERGRUND' |
1125 | 1125 | ||
1126 | lsz tiled,\ |
1126 | lsz tiled,\ |
1127 | en, 'TILED',\ |
1127 | en, 'TILED',\ |
1128 | ru, '§ ¬®áâ¨âì',\ |
1128 | ru, '§ ¬®áâ¨âì',\ |
1129 | de, 'GEKACHELT' |
1129 | de, 'GEKACHELT' |
1130 | 1130 | ||
1131 | lsz stretch,\ |
1131 | lsz stretch,\ |
1132 | en, 'STRETCH',\ |
1132 | en, 'STRETCH',\ |
1133 | ru, 'à áâïãâì',\ |
1133 | ru, 'à áâïãâì',\ |
1134 | de, 'GESTRECKT' |
1134 | de, 'GESTRECKT' |
1135 | 1135 | ||
1136 | lsz ok_btn,\ |
1136 | lsz ok_btn,\ |
1137 | en, 'Ok',\ |
1137 | en, 'Ok',\ |
1138 | ru, 'Ok',\ |
1138 | ru, 'Ok',\ |
1139 | de, 'Ok' |
1139 | de, 'Ok' |
1140 | 1140 | ||
1141 | image_file dd 0 |
1141 | image_file dd 0 |
1142 | image_file_1 dd 0 |
1142 | image_file_1 dd 0 |
1143 | 1143 | ||
1144 | pos: dd 6 |
1144 | pos: dd 6 |
1145 | 1145 | ||
1146 | window_high dd 0 |
1146 | window_high dd 0 |
1147 | window_width dd 0 |
1147 | window_width dd 0 |
1148 | skin_high dd 0 |
1148 | skin_high dd 0 |
1149 | ;--------------------------------------------------------------------- |
1149 | ;--------------------------------------------------------------------- |
1150 | ; for EDITBOX |
1150 | ; for EDITBOX |
1151 | name_editboxes: |
1151 | name_editboxes: |
1152 | edit1 edit_box 200,10,30,0xffffff,0xbbddff,0,0,0,255,string,ed_focus+ed_always_focus,0 |
1152 | edit1 edit_box 200,10,30,0xffffff,0xbbddff,0,0,0,255,string,ed_focus+ed_always_focus,0 |
1153 | name_editboxes_end: |
1153 | name_editboxes_end: |
1154 | 1154 | ||
1155 | mouse_flag: dd 0x0 |
1155 | mouse_flag: dd 0x0 |
1156 | ;--------------------------------------------------------------------- |
1156 | ;--------------------------------------------------------------------- |
1157 | fileinfo: |
1157 | fileinfo: |
1158 | dd 5 |
1158 | dd 5 |
1159 | dd 0 |
1159 | dd 0 |
1160 | dd 0 |
1160 | dd 0 |
1161 | dd 0 |
1161 | dd 0 |
1162 | dd process_info |
1162 | dd process_info |
1163 | string: |
1163 | string: |
1164 | db '/sys/bgr.bmp',0 |
1164 | db '/sys/bgr.bmp',0 |
1165 | 1165 | ||
1166 | IM_END: |
1166 | IM_END: |
1167 | rb string+257-$ |
1167 | rb string+257-$ |
1168 | 1168 | ||
1169 | temp_area: |
1169 | temp_area: |
1170 | procinfo: |
1170 | procinfo: |
1171 | process_info: |
1171 | process_info: |
1172 | rb 1024*4 |
1172 | rb 1024*4 |
1173 | rb 1024*2 |
1173 | rb 1024*2 |
1174 | thread: |
1174 | thread: |
1175 | rb 512 |
1175 | rb 512 |
1176 | I_END:0>0> |
1176 | I_END:0>0> |