Subversion Repositories Kolibri OS

Rev

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