Subversion Repositories Kolibri OS

Rev

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