Subversion Repositories Kolibri OS

Rev

Rev 825 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

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