Rev 135 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 135 | Rev 190 | ||
---|---|---|---|
Line 1... | Line 1... | ||
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 | ; Compile with FASM for Menuet |
4 | ; Compile with FASM for Menuet |
Line 4... | Line 5... | ||
4 | 5 | ||
5 | ;****************************************************************************** |
6 | ;****************************************************************************** |
6 | use32 |
7 | use32 |
Line 192... | Line 193... | ||
192 | mov eax, 70 |
193 | mov eax, 70 |
193 | mov ebx, fileinfo |
194 | mov ebx, fileinfo |
194 | int 0x40 |
195 | int 0x40 |
195 | mov eax,[I_END+18] |
196 | mov eax,[I_END+18] |
196 | mov ebx,[I_END+22] |
197 | mov ebx,[I_END+22] |
- | 198 | test ebx, ebx |
|
- | 199 | jns @f |
|
- | 200 | neg ebx |
|
- | 201 | @@: |
|
197 | add eax,20 |
202 | add eax,20 |
198 | cmp eax,210 |
203 | cmp eax,210 |
199 | jae @f |
204 | jae @f |
200 | mov eax,210 |
205 | mov eax,210 |
201 | @@: |
206 | @@: |
Line 221... | Line 226... | ||
221 | drawimage: |
226 | drawimage: |
222 | cmp word [I_END],word 'BM' |
227 | cmp word [I_END],word 'BM' |
223 | jne nodrawimage |
228 | jne nodrawimage |
224 | mov eax,7 |
229 | mov eax,7 |
225 | mov ebx,[soi] |
230 | mov ebx,[soi] |
- | 231 | mov ecx, dword [I_END+18-2] |
|
226 | mov ecx,[I_END+18] |
232 | mov cx, [I_END+22] |
227 | shl ecx,16 |
233 | test cx, cx |
228 | add ecx,[I_END+22] |
234 | jns @f |
- | 235 | neg cx |
|
- | 236 | @@: |
|
229 | mov edx,10*65536+50 |
237 | mov edx,10*65536+50 |
230 | int 0x40 |
238 | int 0x40 |
231 | nodrawimage: |
239 | nodrawimage: |
232 | ret |
240 | ret |
Line 258... | Line 266... | ||
258 | int 0x40 |
266 | int 0x40 |
259 | @@: |
267 | @@: |
260 | ret |
268 | ret |
Line 261... | Line 269... | ||
261 | 269 | ||
- | 270 | convert: |
|
- | 271 | mov ecx, I_END |
|
- | 272 | add ecx, [ecx+2] |
|
- | 273 | mov [soi], ecx |
|
- | 274 | mov ebp, [I_END+18] |
|
- | 275 | lea ebp, [ebp*3] ; ebp = size of output scanline |
|
- | 276 | mov eax, [I_END+22] |
|
- | 277 | dec eax |
|
- | 278 | mul ebp |
|
- | 279 | add eax, ecx |
|
- | 280 | mov edi, eax ; edi points to last scanline |
|
- | 281 | mov esi, I_END |
|
- | 282 | add esi, [esi+10] |
|
- | 283 | mov ebx, I_END+54 |
|
- | 284 | mov edx, [I_END+22] |
|
- | 285 | lea eax, [ebp*2] |
|
- | 286 | mov [delta], eax |
|
- | 287 | test edx, edx |
|
- | 288 | jz .ret |
|
- | 289 | jns @f |
|
- | 290 | neg edx |
|
- | 291 | and [delta], 0 |
|
- | 292 | mov edi, ecx |
|
262 | convert: |
293 | @@: |
263 | movzx eax,word [I_END+28] |
- | |
264 | mul dword [I_END+18] |
294 | movzx eax, word [I_END+28] |
265 | ; mov ebx,32 |
- | |
266 | ; div ebx |
- | |
267 | ; test edx,edx |
295 | cmp eax, 24 |
268 | ; je noaddword |
296 | jz convert24 |
269 | ; inc eax |
- | |
270 | ; noaddword: |
297 | cmp eax, 8 |
271 | add eax, 31 |
298 | jz convert8 |
272 | shr eax, 5 |
- | |
273 | mov [dwps],eax ;dwps-doublewords per string |
- | |
274 | shl eax,2 |
- | |
275 | mov [bps],eax ;bps-bytes per string |
- | |
276 | 299 | cmp eax, 4 |
|
277 | cmp dword [I_END+34],0 |
- | |
278 | jne yespicsize ;if picture size is defined |
300 | jz convert4 |
279 | mul dword [I_END+22] |
301 | dec eax |
280 | mov dword [I_END+34],eax |
- | |
281 | 302 | jz convert1 |
|
282 | yespicsize: |
- | |
283 | mov eax,I_END |
303 | .ret: |
284 | push eax |
- | |
285 | add eax, [I_END+2];file size |
304 | ret |
286 | inc eax |
- | |
287 | mov [soi],eax ;soi-start of image area for drawing |
305 | convert24: |
288 | pop eax |
306 | mov ecx, ebp |
289 | add eax, [I_END+10] |
307 | rep movsb |
290 | mov [sop],eax ;sop-start of picture in file |
308 | sub edi, [delta] |
291 | add eax, [I_END+34] |
- | |
292 | mov [eop],eax ;eop-end of picture in file |
309 | mov eax, ebp |
293 | mov eax, [I_END+18] |
310 | neg eax |
294 | mov ebx,3 |
311 | and eax, 3 |
295 | mul ebx ;3x pixels in eax |
- | |
296 | 312 | add esi, eax |
|
297 | mov edi,[soi] ;initializing |
313 | dec edx |
298 | mov esi,[eop] |
314 | jnz convert24 |
299 | sub esi,[bps] |
- | |
300 | - | ||
301 | 315 | ret |
|
302 | nextstring: |
316 | convert8: |
- | 317 | push edi |
|
- | 318 | add [esp], ebp |
|
- | 319 | .loopi: |
|
- | 320 | xor eax, eax |
|
303 | push edi |
321 | lodsb |
- | 322 | cmp dword [I_END+30], 1 |
|
- | 323 | jnz .nocompressed |
|
- | 324 | .compressed: |
|
- | 325 | mov ecx, eax |
|
- | 326 | jecxz .special |
|
- | 327 | lodsb |
|
- | 328 | mov eax, [ebx+eax*4] |
|
- | 329 | @@: |
|
- | 330 | call putpixel |
|
- | 331 | loop @b |
|
- | 332 | jmp .loopi |
|
- | 333 | .nocompressed: |
|
- | 334 | mov eax, [ebx+eax*4] |
|
- | 335 | call putpixel |
|
- | 336 | .loopicont: |
|
- | 337 | cmp edi, [esp] |
|
- | 338 | jnz .loopi |
|
- | 339 | .next: |
|
- | 340 | pop edi |
|
- | 341 | sub edi, [delta] |
|
- | 342 | mov eax, ebp |
|
- | 343 | and eax, 3 |
|
- | 344 | add esi, eax |
|
304 | cmp word [I_END+28],24 |
345 | dec edx |
- | 346 | jnz convert8 |
|
- | 347 | ret |
|
- | 348 | .special: |
|
- | 349 | lodsb |
|
- | 350 | test al, al |
|
- | 351 | jz .next |
|
- | 352 | cmp al, 2 |
|
- | 353 | jbe .end |
|
- | 354 | mov ecx, eax |
|
305 | jne convertno32 |
355 | push ecx |
- | 356 | @@: |
|
306 | 357 | xor eax, eax |
|
- | 358 | lodsb |
|
- | 359 | mov eax, [ebx+eax*4] |
|
- | 360 | call putpixel |
|
- | 361 | loop @b |
|
- | 362 | pop ecx |
|
- | 363 | and ecx, 1 |
|
- | 364 | add esi, ecx |
|
- | 365 | jmp .loopi |
|
- | 366 | .end: |
|
- | 367 | pop edi |
|
- | 368 | ret |
|
- | 369 | convert4: |
|
- | 370 | push edi |
|
- | 371 | add [esp], ebp |
|
- | 372 | .loopi: |
|
307 | mov ecx,[dwps] |
373 | xor eax, eax |
- | 374 | lodsb |
|
- | 375 | shr eax, 4 |
|
- | 376 | mov eax, [ebx+eax*4] |
|
- | 377 | call putpixel |
|
- | 378 | cmp edi, [esp] |
|
- | 379 | jz .loopidone |
|
- | 380 | mov al, [esi-1] |
|
- | 381 | and eax, 0xF |
|
308 | cld |
382 | mov eax, [ebx+eax*4] |
- | 383 | stosd |
|
- | 384 | dec edi |
|
- | 385 | cmp edi, [esp] |
|
- | 386 | jnz .loopi |
|
- | 387 | .loopidone: |
|
- | 388 | pop edi |
|
- | 389 | sub edi, [delta] |
|
- | 390 | call align_input |
|
- | 391 | dec edx |
|
- | 392 | jnz convert4 |
|
309 | rep movsd |
393 | ret |
- | 394 | convert1: |
|
- | 395 | push edi |
|
- | 396 | add [esp], ebp |
|
- | 397 | .loopi: |
|
- | 398 | lodsb |
|
- | 399 | mov ecx, 8 |
|
- | 400 | .loopii: |
|
- | 401 | add al, al |
|
- | 402 | push eax |
|
- | 403 | setc al |
|
- | 404 | movzx eax, al |
|
- | 405 | mov eax, [ebx+eax*4] |
|
- | 406 | call putpixel |
|
- | 407 | pop eax |
|
- | 408 | cmp edi, [esp] |
|
- | 409 | loopnz .loopii |
|
310 | convert1: |
410 | jnz .loopi |
311 | pop edi |
- | |
312 | sub esi,[bps] |
411 | pop edi |
313 | sub esi,[bps] |
- | |
314 | cmp esi,[sop] |
412 | sub edi, [delta] |
315 | jb nomorestring |
413 | call align_input |
316 | add edi,eax |
414 | dec edx |
317 | jmp nextstring |
- | |
318 | - | ||
319 | nomorestring: |
415 | jnz convert1 |
Line 320... | Line 416... | ||
320 | ret |
416 | ret |
321 | - | ||
322 | convertno32: |
- | |
323 | mov ebx,I_END |
- | |
324 | add ebx, [I_END+14] |
417 | |
- | 418 | align_input: |
|
- | 419 | push esi |
|
325 | add ebx,14 ;start of color table |
420 | sub esi, I_END |
- | 421 | sub esi, [I_END+10] |
|
326 | push esi |
422 | neg esi |
327 | add esi,[bps] |
423 | and esi, 3 |
- | 424 | add [esp], esi |
|
- | 425 | pop esi |
|
328 | mov [eos],esi |
426 | ret |
329 | pop esi |
427 | |
330 | nextelem: |
- | |
331 | push eax |
- | |
332 | movzx eax,byte [esi] |
428 | putpixel: |
333 | cmp word [I_END+28],4 |
429 | push eax |
334 | je convert4bpp |
430 | stosw |
335 | cmp word [I_END+28],1 |
- | |
336 | je convert1bpp |
- | |
337 | call converttable |
431 | shr eax, 16 |
338 | convert2: |
- | |
339 | pop eax |
- | |
340 | inc esi |
- | |
341 | cmp esi,[eos] |
- | |
342 | jae convert1 |
- | |
343 | add edi,3 |
- | |
344 | jmp nextelem |
- | |
345 | - | ||
346 | convert4bpp: |
- | |
347 | shl ax,4 |
- | |
348 | shr al,4 |
- | |
349 | push ax |
- | |
350 | movzx eax,ah |
- | |
351 | call converttable |
- | |
352 | add edi,3 |
- | |
353 | pop ax |
- | |
354 | movzx eax,al |
- | |
355 | call converttable |
- | |
356 | jmp convert2 |
- | |
357 | - | ||
358 | convert1bpp: |
- | |
359 | mov ecx,eax |
- | |
360 | mov edx,7 |
- | |
361 | nextbit: |
- | |
362 | xor eax,eax |
- | |
363 | bt ecx,edx |
- | |
364 | jnc noaddelem |
- | |
365 | inc eax |
- | |
366 | noaddelem: |
- | |
367 | push edx |
- | |
368 | call converttable |
- | |
369 | pop edx |
- | |
370 | dec edx |
- | |
371 | cmp edx,0xffffffff |
- | |
372 | je convert2 |
- | |
373 | add edi,3 |
- | |
374 | jmp nextbit |
- | |
375 | - | ||
376 | converttable: |
- | |
377 | shl eax,2 |
- | |
378 | add eax,ebx |
- | |
379 | mov edx, [eax] |
432 | stosb |
Line 380... | Line 433... | ||
380 | mov dword [edi],edx |
433 | pop eax |
381 | ret |
434 | ret |
382 | 435 | ||
Line 438... | Line 491... | ||
438 | 491 | ||
Line 439... | Line 492... | ||
439 | 492 | ||
440 | ; DATA AREA |
493 | ; DATA AREA |
Line 441... | Line 494... | ||
441 | 494 | ||
442 | labelt: |
495 | labelt: |
443 | db 'MeView v.0.3' |
496 | db 'MeView v.0.4' |
444 | 497 | ||
Line 445... | Line -... | ||
445 | lsz buttext,\ |
- | |
446 | en, ' FILE OPEN INFO BGRD',\ |
- | |
447 | ru, ' ',\ |
- | |
448 | de, 'DATEI OEFNEN INFO HGRD' |
- | |
449 | - | ||
450 | status dd 0 ;bit0=1 if file thread is created |
- | |
451 | bps dd 0 |
- | |
452 | dwps dd 0 |
- | |
453 | soi dd 0 |
- | |
454 | sop dd 0 |
- | |
455 | eop dd 0 |
- | |
456 | eos dd 0 |
498 | lsz buttext,\ |
Line 457... | Line 499... | ||
457 | process dd 0 |
499 | en, ' FILE OPEN INFO BGRD',\ |
Line 458... | Line 500... | ||
458 | 500 | ru, ' ',\ |
|
Line 965... | Line 1007... | ||
965 | int 0x40 |
1007 | int 0x40 |
966 | ret |
1008 | ret |
Line 967... | Line 1009... | ||
967 | 1009 | ||
- | 1010 | ||
- | 1011 | ; DATA AREA |
|
- | 1012 | status dd 0 ;bit0=1 if file thread is created |
|
- | 1013 | soi dd 0 |
|
- | 1014 | delta dd 0 |
|
- | 1015 | process dd 0 |
|
968 | 1016 | ||
969 | ; DATA AREA |
1017 | bWasDraw db 0 |
Line 970... | Line 1018... | ||
970 | vflag: db 'x' |
1018 | vflag: db 'x' |
971 | bgrmode: dd 1 |
1019 | bgrmode: dd 1 |