Subversion Repositories Kolibri OS

Rev

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

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;                                              ;
  3. ;   SYSTEM X-TREE BROWSER                      ;
  4. ;                                              ;
  5. ;   Author: Pavlushin Evgeni waptap@mail.ru    ;
  6. ;                   site: www.deck4.narod.ru   ;
  7. ;                                              ;
  8. ;   Compile with FASM for MenuetOS             ;
  9. ;                                              ;
  10. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  11.  
  12. ;Bug report +bug deleted  -bug not deleted
  13. ;show/fade del notwork+
  14. ;64Ver Run file from HD bug deleted.
  15. ;65Ver The bad scroll realization
  16. ;66Ver The good scroll realization, url line anti-flick
  17. ;67Ver Url line monolith procedure
  18. ;68Ver Mini icon on left of file name
  19. ;69Ver Getimg proc size minus 900 bytes
  20. ;70Ver Del data area ramsize minus 140000 bytes
  21. ;72Ver Quick sort, ramsize minus 200000 bytes
  22. ;73Ver Url flick and out bugs delete
  23. ;74Ver scroll bug deleted
  24. ;75Ver hd partition fast change button. Add bmp,txt,exec,asm and inc icons.
  25. ; sort type in headmenu bug del
  26. ;78Ver directory extension bug fix by Asko Vuori
  27. ;79Ver Asko Vuori volume label add and "put in command line" bug fix
  28. ;80Ver prompt edit fatal bug deleted, antiflick when move list up/down
  29. ;81Ver Save Dialog bug deleted
  30. ;82Ver Rewritten to function 70. Corrected work with scrollbar.
  31. ;83Ver CD-ROM support
  32. ;84Ver URL line editor corrected
  33. ;1560000 bytes memory!
  34.  
  35. ;******************************************************************************
  36.   use32
  37.   org      0x0
  38.   db     'MENUET01'   ; 8 byte id
  39.   dd     0x01           ; header version
  40.   dd     START        ; program start
  41.   dd     I_END        ; program image size
  42.   dd     RAM_END      ; memory
  43.   dd     RAM_END      ; stack
  44.   dd     param_area ,0x0   ; param,icon
  45. ;  dd 0,0
  46.  
  47. ;******************************************************************************
  48. include '..\..\..\macros.inc'
  49. include 'ascl.inc'
  50. include 'ascgl.inc'
  51.  
  52.     gif_hash_offset = gif_hash
  53.  
  54. START:              ; start of execution
  55. ; //// Willow
  56. ;    mov eax,58
  57. ;    mov ebx,MRUfile
  58. ;    mcall
  59. ; //// Willow
  60.     mcall 18,11,1,table_area
  61.     cmp [edx+2],byte 0
  62.     je    no_hdpartition_on_hd0
  63.     mov [hdimg1], aHD0
  64.  no_hdpartition_on_hd0:
  65.     cmp [edx+3],byte 0
  66.     je    no_hdpartition_on_hd1
  67.     mov [hdimg2], aHD1
  68.  no_hdpartition_on_hd1:
  69.     cmp [edx+4],byte 0
  70.     je    no_hdpartition_on_hd2
  71.     mov [hdimg3], aHD2
  72.  no_hdpartition_on_hd2:
  73.     cmp [edx+5],byte 0
  74.     je    no_hdpartition_on_hd3
  75.     mov [hdimg4], aHD3
  76.  no_hdpartition_on_hd3:
  77.         test    byte [edx+1], 80h
  78.         jz      @f
  79.         mov     [hdimg1], aCD0
  80.         mov     [hdimg1+4], 'CD-R'
  81.         mov     [hdimg1+8], 'OM  '
  82. @@:
  83.         test    byte [edx+1], 20h
  84.         jz      @f
  85.         mov     [hdimg2], aCD1
  86.         mov     [hdimg2+4], 'CD-R'
  87.         mov     [hdimg2+8], 'OM  '
  88. @@:
  89.         test    byte [edx+1], 8
  90.         jz      @f
  91.         mov     [hdimg3], aCD2
  92.         mov     [hdimg3+4], 'CD-R'
  93.         mov     [hdimg3+8], 'OM  '
  94. @@:
  95.         test    byte [edx+1], 2
  96.         jz      @f
  97.         mov     [hdimg4], aCD3
  98.         mov     [hdimg4+4], 'CD-R'
  99.         mov     [hdimg4+8], 'OM  '
  100. @@:
  101.  
  102.     mov eax,40
  103.     mov ebx,0100111b
  104.     mcall
  105.  
  106.     cmp byte [param_area],0 ;test parameters line
  107.     jne no_brow     ;it's dialog
  108.     mov [browser], 1   ;it's browser
  109.     jmp no_dlg
  110. no_brow:
  111.  
  112.     mov al,byte [param_area+5]
  113.     mov [dlg_type],al
  114.  
  115.     mov eax,9
  116.     mov ebx,procinfo
  117.     mov ecx,-1
  118.     mcall
  119.  
  120.     mov eax,dword [procinfo+30]
  121.     mov edi,MYPID+4-1
  122.     mov ecx,4
  123.     mov ebx,10
  124.     cld
  125.  
  126. new_d:
  127.     xor edx,edx
  128.     div ebx
  129.     add dl,'0'
  130.     mov [edi],dl
  131.     dec edi
  132.     loop new_d
  133.  
  134.     movzx eax,byte [param_area]
  135.     sub eax,48
  136.     imul eax,10
  137.     movzx ebx,byte [param_area+1]
  138.     add eax,ebx
  139.     sub eax,48
  140.     imul eax,10
  141.     movzx ebx,byte [param_area+2]
  142.     add eax,ebx
  143.     sub eax,48
  144.     imul eax,10
  145.     movzx ebx,byte [param_area+3]
  146.     add eax,ebx
  147.     sub eax,48
  148.  
  149.     mov ecx,eax ;pid to ecx
  150.     mov eax,60
  151.     mov ebx,2
  152.     mov edx,MYPID
  153.     mov esi,4
  154.     mcall
  155. no_dlg:
  156.  
  157.     giftoimg but_file,tempimg
  158.  
  159. ;************************
  160. ;      Get images
  161. ;************************
  162.  
  163.     mov eax,0  ;x
  164.     mov ebx,0       ;y
  165.     mov esi,286     ;xs
  166.     mov edi,16          ;ys
  167.     mov ecx,tempimg ;src
  168.     mov edx,butimg   ;dest
  169.     call getimgproc
  170.     mov eax,288
  171.     mov esi,60
  172.     mov edx,logoimg  ;dest
  173.     call getimgproc
  174.     mov eax,0  ;x
  175.     mov ebx,16         ;y
  176.     mov esi,51         ;xs
  177.     mov edi,esi      ;ys
  178.     mov edx,logoinfimg       ;dest
  179.     call getimgproc
  180.     mov eax,51      ;x
  181.     mov esi,8       ;xs
  182.     mov edi,9        ;ys
  183.     mov edx,upsb   ;dest
  184.     call getimgproc
  185.     mov eax,51+8  ;x
  186.     mov edx,dnsb   ;dest
  187.     call getimgproc
  188.  
  189.     mov eax,51+16  ;x
  190.     mov ebx,16         ;y
  191.     mov esi,12         ;xs
  192.     mov edi,9        ;ys
  193.  
  194.     mov ecx,tempimg ;src
  195.     mov edx,hdico   ;dest
  196.     mov ebp,10
  197. loogetimg:
  198.     call getimgproc
  199.     add edx,9*12*3+8
  200.     add eax,12
  201.     dec ebp
  202.     jnz loogetimg
  203.  
  204.     call read_directory
  205. ;    call convertation
  206. red:
  207.     call draw_window        ; at first, draw the window
  208.  
  209. still:
  210.     mov eax,9
  211.     mov ebx,procinfo
  212.     mov ecx,-1
  213.     mcall
  214.  
  215.     wtevent red,key,button
  216.  
  217. scrolltest:
  218.     mov eax,37
  219.     mov ebx,2
  220.     mcall
  221.     dec eax
  222.     jne still
  223.  
  224. scrl:
  225.     mov eax,37
  226.     mov ebx,1
  227.     mcall
  228.         movzx   ebx, ax         ; y
  229.         shr     eax, 16         ; x
  230.     mov ebp,eax
  231.     sub ebp,[listx] ;[procinfo.box.width]
  232.     sub ebp,[listxsize]
  233.     add ebp,[scrollsize]
  234.     cmp ebp,dword [scrollsize] ;8
  235.     jae menu_test ; still
  236.  
  237.         lea     ebp, [ebx-scrollbutsize]
  238.         sub     ebp, [listy]    ; up scroll
  239.         jl      menu_test
  240.         mov     ecx, [listysize]
  241.         sub     ecx, 2*scrollbutsize
  242.         mov     eax, [scroll_height]
  243.         cmp     ebp, ecx
  244.         jge     menu_test
  245.         sub     ecx, eax
  246.         shr     eax, 1
  247.         sub     ebp, eax
  248.         jge     @f
  249.         xor     ebp, ebp
  250. @@:
  251.         cmp     ebp, ecx
  252.         jl      @f
  253.         mov     ebp, ecx
  254. @@:
  255.         xor     edx, edx
  256.         mov     eax, [listysize]
  257.         sub     eax, 2
  258.         mov     ebx, 10
  259.         div     ebx
  260.         mov     ebx, eax
  261.         cmp     ebx, [listsize]
  262.         jae     notusescrl
  263.         mov     eax, [listsize]
  264.         sub     eax, ebx
  265.         mul     ebp
  266.         div     ecx
  267.         cmp     eax, [filecursor]
  268.         jz      still
  269.         mov     [filecursor], eax
  270.         jmp     usescrl
  271. notusescrl:
  272.         cmp     [filecursor], 0
  273.         jz      still
  274.     mov [filecursor],0 ;ebp
  275. usescrl:
  276.  
  277.     mov [flick],1
  278.     jmp anti_flick ;red
  279.  
  280. menu_test:
  281.     cmp [pmenu_draw],1 ;if menu is show, update all
  282.     jne still
  283.     mov [pmenu_draw],0
  284.     jmp red          ;update all window
  285.  
  286. ;this function not use in dialog when poup menu's is not used
  287. ;in dialog's
  288.  
  289. ;===================
  290. ; Test keyboard
  291. ;===================
  292. key:              ; key
  293.     mov  eax,2
  294.     mcall
  295.     cmp dword [focus],0
  296.     jne con_edit
  297.     cmp  ah,key_Up
  298.     jne  no_upk
  299.     mov  ebx,1
  300.     jmp  up
  301. no_upk:
  302.     cmp  ah,key_Down
  303.     jne  no_downk
  304.     mov  ebx,1
  305.     jmp  down
  306. no_downk:
  307.     cmp  ah,key_PgUp
  308.     jne  no_pgup
  309.     mov  ebx,10
  310.     jmp  up
  311. no_pgup:
  312.     cmp  ah,key_PgDown
  313.     jne  no_pgdown
  314.     mov  ebx,10
  315.     jmp  down
  316. no_pgdown:
  317.     cmp  ah,key_Enter
  318.     je   kfad
  319.     cmp  ah,key_Bspace
  320.     je       back
  321.     cmp  ah,key_F2
  322.     je       viewset
  323.     cmp  ah,key_F3
  324.     je       textopen
  325.     cmp  ah,key_F5
  326.     je       copy_to_clip
  327.     cmp  ah,key_F6
  328.     je       paste_from_clip
  329.     cmp  ah,key_F11
  330.     je       edit_prompt
  331.     cmp  ah,key_F12
  332.     je       update
  333.     jmp  still
  334.  
  335. ; test input string
  336. con_edit:
  337.     cmp  ah,key_Enter
  338.     jne  no_con_ent
  339.     not  [focus]
  340.     jmp  savetest
  341. ;    jmp  update
  342. no_con_ent:
  343.     cmp  ah,key_Left
  344.     jne  no_con_left
  345.         cmp     [cursor], 0
  346.         jz      still
  347.     dec  [cursor]
  348.     mov  [flick],2
  349.     jmp  anti_flick ;red
  350. no_con_left:
  351.     cmp  ah,key_Right
  352.     jne  no_con_right
  353.         mov     eax, [cursor]
  354.         cmp     byte [path+eax], 0
  355.         jz      still
  356.     inc  [cursor]
  357.     mov  [flick],2
  358.     jmp  anti_flick ;red
  359. no_con_right:
  360.     cmp  ah,key_Bspace
  361.     jne  no_con_bspace
  362.  
  363.         mov     ebp, [cursor]
  364.         test    ebp, ebp
  365.         jz      still
  366. lobsp:
  367.     mov  bl,byte [path+ebp]
  368.     mov  byte [path+ebp-1],bl
  369.     inc  ebp
  370.     cmp  ebp,1024
  371.     jne  lobsp
  372.     dec  [cursor]
  373.     mov  [flick],2
  374.     jmp  anti_flick ;red
  375. no_con_bspace:
  376.  
  377.     mov  ecx,[cursor]
  378.     mov  ebp,1022
  379.         cmp     byte [path+ebp], 0
  380.         jnz     still
  381. losx:
  382.         cmp     ebp, ecx
  383.         jbe     @f
  384.     mov  bl,byte [path+ebp]
  385.     mov  byte [path+ebp+1],bl
  386.     dec  ebp
  387.     jmp  losx
  388. @@:
  389.  
  390.     mov  byte [path+ebp],ah
  391.     inc  dword [cursor]
  392.  
  393.     mov  [flick],2
  394.     jmp  anti_flick
  395.  
  396.  
  397. ;----------------------------
  398. ;Test on mouse button
  399. ;-----------------------------
  400.  
  401.   button:         ; button
  402.     mov eax,17
  403.     mcall
  404.  
  405.     cmp ah,2           ;Edit prompt line?
  406.     je      edit_prompt
  407.  
  408.     cmp ah,4
  409.     jne no_filelist
  410.  
  411. mousetest:
  412.     mov eax,37
  413.     mov ebx,1
  414.     mcall
  415.     mov ebx,eax
  416.     shr eax,16           ;x
  417.     and ebx,0xffff   ;y
  418.  
  419.     sub ebx,[listy] ;80
  420.     mov [mousey],ebx
  421.  
  422.     mov ecx,[listx]
  423.     cmp eax,ecx
  424.     jl      still
  425.     add ecx,[listxsize]
  426.     cmp eax,ecx
  427.     jg      still
  428.  
  429. filexadd:
  430.  
  431. ; Enter in directory
  432. file_add:
  433.     mov edx,0  ;for div correct work div
  434.     mov eax,dword [mousey]
  435.     mov ebx,10
  436.     div ebx
  437.  
  438.     add eax,[filecursor]
  439.     jmp no_kfad
  440. kfad:
  441.     mov eax,[filecursor]
  442. no_kfad:
  443.     mov ebx,27
  444.     mul ebx
  445.     lea ebp,[convinfo+eax]
  446.     mov esi,[ebp]
  447.     cmp esi,-1
  448.     jz  still
  449.  
  450.     mov edi,paramtest ;clear param string
  451.     mov ecx,1024/4
  452.     xor eax,eax
  453.     rep stosd
  454.  
  455.         mov     edi, path
  456.         mov     ecx, 1024
  457.         repnz   scasb
  458.         dec     edi
  459.         cmp     [ebp+15], dword 'FOL '
  460.         jnz     openf
  461. ; open directory - append its name to path
  462.         cmp     ecx, 2
  463.         jb      still
  464.         push    edi
  465.         mov     al, '/'
  466.         stosb
  467.         dec     ecx
  468. @@:
  469.         lodsb
  470.         stosb
  471.         test    al, al
  472.         jz      @f
  473.         dec     ecx
  474.         jnz     @b
  475. ; name is too long - do not do anything
  476.         pop     edi
  477.         xor     eax, eax
  478.         mov     ecx, path+1024
  479.         sub     ecx, edi
  480.         rep     stosb
  481.         jmp     still
  482. @@:
  483.         sub     edi, path+1
  484.         mov     [cursor], edi
  485.         pop     edi
  486. ; name appended, now read new directory
  487.     mov [filecursor],0
  488.  
  489.     call read_directory
  490. ;;    call convertation
  491.     call draw_window
  492.     jmp still
  493.  
  494. ;Savetest
  495. savetest:
  496.     cmp byte [dlg_type],'S'
  497.     jne still
  498. ; always force open file - this is better
  499. ; because there exists files without extension and folders with extension
  500.         jmp     openf
  501. ;    mov ecx,100
  502. ;savetestloop:
  503. ;    cmp [path+ecx],byte 0
  504. ;    je     next_byte
  505. ;    cmp [path+ecx],byte 32
  506. ;    je     next_byte
  507. ;    cmp [path+ecx],byte '.'
  508. ;    je     openf  ;it's file
  509. ;;    cmp [path+ecx],byte '/'
  510. ;;    je  no_save  ;it's dir
  511. ;next_byte:
  512. ;    dec ecx
  513. ;    jnz savetestloop
  514. ;    jmp still
  515.  
  516. ;Open/Run file
  517.  
  518. openf:
  519.         push    esi edi
  520.         mov     esi, path
  521.         mov     edi, paramtest
  522.         mov     ecx, 1024/4
  523.         rep     movsd
  524.         pop     edi esi
  525.         add     edi, paramtest-path
  526.  
  527.     cmp dword [focus],0 ;if prompt line with focus no add file name from frame
  528.     jne file_set
  529.  
  530.         cmp     edi, paramtest+1022
  531.         jae     still
  532.         mov     al, '/'
  533.         stosb
  534. @@:
  535.         lodsb
  536.         stosb
  537.         test    al, al
  538.         jz      file_set
  539.         cmp     edi, paramtest+1024
  540.         jb      @b
  541.         jmp     still
  542.  
  543. file_set:
  544.  
  545.     cmp [browser],0
  546.     jne is_brow
  547.  
  548.     movzx eax,byte [param_area]
  549.     sub eax,48
  550.     imul eax,10
  551.     movzx ebx,byte [param_area+1]
  552.     add eax,ebx
  553.     sub eax,48
  554.     imul eax,10
  555.     movzx ebx,byte [param_area+2]
  556.     add eax,ebx
  557.     sub eax,48
  558.     imul eax,10
  559.     movzx ebx,byte [param_area+3]
  560.     add eax,ebx
  561.     sub eax,48
  562.  
  563.     mov ecx,eax ;pid to ecx
  564.     mov eax,60
  565.     mov ebx,2
  566.     mov edx,paramtest
  567.     mov esi,1024
  568.     mcall
  569.  
  570.     jmp exit
  571.  
  572. is_brow:
  573.  
  574. ;    cmp [convinfo+edi+26],dword 'Fvol'
  575. ;    je  edit
  576.  
  577. ; find extension
  578.         mov     eax, paramtest+1023
  579. @@:
  580.         dec     eax
  581.         cmp     byte [eax+1], 0
  582.         jz      @b
  583. @@:
  584.         cmp     byte [eax], '/'
  585.         jz      .noext
  586.         cmp     byte [eax], '.'
  587.         jz      .ext
  588.         dec     eax
  589.         cmp     eax, paramtest
  590.         jae     @b
  591. .noext:
  592. ; file has no extension
  593. ;        xor     ebx, ebx
  594.         jmp     execute
  595. .ext:
  596.         inc     eax
  597. ; eax points to extension
  598.         cmp     byte [eax], 0
  599.         jz      .noext
  600.         mov     ecx, dword [eax]
  601.         and     ecx, not 0x20202020
  602.         mov     ebx, jpgview
  603.         cmp     ecx, 'JPG'
  604.         jz      run
  605.         cmp     ecx, 'JPEG'     ; note that it will select also *.JPEG*
  606.         jz      run
  607.         mov     ebx, gifview
  608.         cmp     ecx, 'GIF'
  609.         jz      run
  610.         mov     ebx, ac97
  611.         cmp     ecx, 'WAV'
  612.         jz      run
  613.         cmp     ecx, 'MP3'
  614.         jz      run
  615.         mov     ebx, midamp
  616.         cmp     ecx, 'MID'
  617.         jz      run
  618.         mov     ebx, bmpview
  619.         cmp     ecx, 'BMP'
  620.         jz      run
  621. ; //// Willow
  622.         mov     ebx, pngview
  623.         cmp     ecx, 'PNG'
  624.         jz      run
  625. ; //// Willow
  626.         mov     ebx, rtfread
  627.         cmp     ecx, 'RTF'
  628.         jz      run
  629.         mov     ebx, editor
  630.         cmp     ecx, 'ASM'
  631.         jz      run
  632.         cmp     ecx, 'TXT'
  633.         jz      run
  634.         cmp     ecx, 'INC'
  635.         jz      run
  636.         mov     ebx, life2
  637.         cmp     ecx, 'LIF'
  638.         jz      run
  639.         mov     ebx, view3ds
  640.         cmp     ecx, '3DS' and not 0x20202020
  641.         jz      run
  642.         jmp     still
  643.  
  644. execute:
  645.         mov     ebx, fileinfo_start
  646.         and     dword [ebx+8], 0                ; no parameters
  647.         mov     dword [ebx+21], paramtest       ; program name
  648. .do:
  649.         mov     eax, 70
  650.         mcall
  651.         jmp     still
  652.  
  653. run:
  654.         mov     [fileinfo_name], ebx            ; program name
  655.         mov     ebx, fileinfo_start
  656.         mov     dword [ebx+8], paramtest        ; parameters
  657.         jmp     execute.do
  658.  
  659. no_filelist:
  660.  
  661.     cmp ah,5    ;OPEN/SAVE button
  662.     je      kfad
  663.  
  664.     cmp ah,6    ;Scroll up
  665.     jne no_scrlup
  666.     mov ebx,1
  667.     jmp up
  668. no_scrlup:
  669.  
  670.     cmp ah,7    ;Scroll down
  671.     jne no_scrldown
  672.     mov ebx,1
  673.     jmp down
  674. no_scrldown:
  675.  
  676.     cmp ah,8
  677.     jne no_update
  678. update:
  679.     call read_directory
  680. ;    call convertation
  681. ;    mov [filecursor],0
  682.     call draw_window
  683. no_update:
  684.  
  685.     cmp ah,9
  686.     jne no_textopen
  687. textopen:
  688.         mov     eax, 27
  689.         mul     [filecursor]
  690.         cmp     dword [eax+convinfo+15], 'FOL '
  691.         jz      still
  692.         push    eax
  693.         mov     esi, path
  694.         mov     edi, paramtest
  695. @@:
  696.         lodsb
  697.         test    al, al
  698.         jz      @f
  699.         stosb
  700.         jmp     @b
  701. @@:
  702.         mov     al, '/'
  703.         stosb
  704.         pop     eax
  705.         mov     esi, [eax+convinfo]
  706.         cmp     esi, -1
  707.         jz      still
  708. @@:
  709.         lodsb
  710.         stosb
  711.         test    al, al
  712.         jz      @f
  713.         cmp     edi, paramtest+1024
  714.         jb      @b
  715.         jmp     still
  716. @@:
  717.         mov     ebx, editor
  718.         jmp     run
  719.  
  720. no_textopen:
  721.  
  722.     cmp  ah,11
  723.     jne  no_view
  724. viewset:
  725.         inc     [viewmode]
  726.         cmp     [viewmode], 4
  727.         jb      @f
  728.         mov     [viewmode], 0
  729. @@:
  730.     call read_directory
  731. ;    call convertation
  732.     mov [filecursor],0
  733.     call draw_window
  734.     jmp still
  735. no_view:
  736.  
  737.     cmp  ah,12        ;move back
  738.     jne  no_back
  739. back:
  740.         mov     edi, path+1024
  741.         mov     ecx, edi
  742. @@:
  743.         dec     edi
  744.         cmp     byte [edi], '/'
  745.         jz      @f
  746.         cmp     edi, path
  747.         ja      @b
  748.         jmp     still
  749. @@:
  750.         sub     ecx, edi
  751.         lea     eax, [edi-path]
  752.         mov     [cursor], eax
  753.         xor     eax, eax
  754.         rep     stosb
  755.     mov [filecursor],0
  756.     call read_directory
  757. ;    call convertation
  758.     call draw_window
  759.     jmp still
  760.  
  761. no_back:
  762.     cmp  ah,13        ;string up?
  763.     jne  no_up
  764.     mov  ebx,1        ;step
  765. up:
  766.     mov  [downstop],0
  767.     sub  [filecursor],ebx
  768.     cmp  [filecursor],0
  769.     jnl  cr_ok
  770.     mov  [filecursor],0
  771. cr_ok:
  772.     jmp  draw_wd
  773. no_up:
  774.     cmp  ah,14           ;string down?
  775.     jne  no_dn
  776.     mov  ebx,1           ;step
  777. down:
  778.     cmp  [downstop],1
  779.     je       no_dn
  780.     add  [filecursor],ebx
  781.     jmp  draw_wd
  782. no_dn:
  783.  
  784.     cmp  ah,15
  785.     jne  no_copyclip    ;copy to clipboard
  786. copy_to_clip:
  787.         mov     eax, 27
  788.         mul     [filecursor]
  789.         cmp     dword [convinfo+eax+15], 'FOL '
  790.         jz      still
  791.         push    eax
  792.         mov     esi, path
  793.         mov     edi, paramtest
  794. @@:
  795.         lodsb
  796.         test    al, al
  797.         jz      @f
  798.         stosb
  799.         jmp     @b
  800. @@:
  801.         pop     eax
  802.         mov     esi, [convinfo+eax]
  803.         cmp     esi, -1
  804.         jz      still
  805.         mov     al, '/'
  806.         stosb
  807. @@:
  808.         lodsb
  809.         stosb
  810.         test    al, al
  811.         jz      @f
  812.         cmp     edi, paramtest+1024
  813.         jb      @b
  814.         jmp     still
  815. @@:
  816.         sub     edi, paramtest+1
  817.         mov     ebx, clipfile_info
  818.         mov     byte [ebx], 2
  819.         mov     [ebx+12], edi
  820.         mov     eax, 70
  821.         mcall
  822.         jmp     still
  823. no_copyclip:
  824.  
  825.     cmp ah,16
  826.     jne no_clippaste
  827. paste_from_clip:
  828.         mov     ebx, clipfile_info
  829.         mov     byte [ebx], 0
  830.         mov     dword [ebx+12], 1023
  831.         mov     eax, 70
  832.         mcall
  833.         cmp     ebx, 0
  834.         jle     still
  835.         mov     byte [paramtest+ebx], 0
  836. ; OS allows only 256 symbols in command line
  837.         cmp     ebx, 250
  838.         jae     still
  839. ; we use Pascal-style strings for /RD/1/COPYR
  840. ; source file
  841.         mov     edi, copyr_param
  842.         mov     al, bl
  843.         stosb
  844.         mov     ecx, ebx
  845.         mov     esi, paramtest
  846.         rep     movsb
  847. ; destination path
  848.         inc     edi
  849.         mov     ebp, edi
  850.         mov     esi, path
  851. @@:
  852.         cmp     edi, copyr_param+255
  853.         jae     still
  854.         lodsb
  855.         test    al, al
  856.         jz      @f
  857.         stosb
  858.         jmp     @b
  859. ; destination file name
  860. @@:
  861.         dec     ebx
  862.         jz      still
  863.         cmp     byte [paramtest+ebx], '/'
  864.         jnz     @b
  865.         lea     esi, [paramtest+ebx]
  866. @@:
  867.         lodsb
  868.         test    al, al
  869.         jz      @f
  870.         stosb
  871.         cmp     edi, copyr_param+255
  872.         jae     still
  873.         jmp     @b
  874. @@:
  875.         mov     byte [edi], 0
  876.         sub     edi, ebp
  877.         mov     eax, edi
  878.         mov     [ebp-1], al
  879. ; display
  880.     cmp [browser], 1
  881.     jne no_outpath
  882.     mov  eax,4             ; function 4 : write text to window
  883.     mov  ebx,10*65536+67     ; [x start] *65536 + [y start]
  884.     mov  ecx,0x00000000 ;[sc.grab_text] ; color of text RRGGBB
  885.         mov     edx, copyr_param+1
  886.         movzx   esi, byte [edx-1]
  887.     mcall
  888.     mov  ebx,250*65536+67       ; [x start] *65536 + [y start]
  889.     mov  ecx,0x00000000 ;[sc.grab_text] ; color of text RRGGBB
  890.         mov     edx, ebp
  891.         mov     esi, edi
  892.     mcall
  893. no_outpath:
  894.  
  895. ; run COPYR
  896.         mov     eax, 70
  897.         mov     ebx, copyr_run
  898.         mcall
  899.     delay 50   ;wait recoed file
  900.     jmp update ;still
  901. no_clippaste:
  902.  
  903.     cmp ah,19           ;Delete from floppy
  904.     jne no_delt
  905. delete_file:
  906. ; OS now do not support file delete
  907.         jmp     still
  908. no_delt:
  909.  
  910.     cmp ah,20           ;I - Help
  911.     je      help_scr
  912.  
  913.     cmp ah,22
  914.     jne no_headfile
  915.     mov [drawhf],1
  916.     call draw_window
  917.     mov [drawhf],0
  918.     mov [pmenu_draw],1
  919.     jmp still
  920. no_headfile:
  921.  
  922.     cmp ah,23
  923.     jne no_headview
  924.     mov [drawhv],1
  925.     call draw_window
  926.     mov [drawhv],0
  927.     mov [pmenu_draw],1
  928.     jmp still
  929. no_headview:
  930.  
  931.     cmp ah,24
  932.     jne no_headinfo
  933.     mov [drawhi],1
  934.     call draw_window
  935.     mov [drawhi],0
  936.     mov [pmenu_draw],1
  937.     jmp still
  938. no_headinfo:
  939.  
  940. ;FILE MENU
  941.     cmp ah,30
  942.     je kfad
  943.  
  944.     cmp ah,31
  945.     je      copy_to_clip      ;Copy
  946.  
  947.     cmp ah,32
  948.     je      paste_from_clip ;Paste
  949.  
  950.     cmp ah,33
  951.     je      delete_file     ;Delte
  952.  
  953.     cmp ah,34
  954.     je      textopen    ;Edit in Tinypad
  955.  
  956.     cmp ah,37
  957.     je      exit
  958.  
  959. ;VIEW MENU
  960.     cmp ah,40           ;Sort by name
  961.     jne no_sn
  962.         mov     [viewmode], 0
  963.     jmp update
  964. no_sn:
  965.  
  966.     cmp ah,41           ;Sort by extension
  967.     jne no_se
  968.         mov     [viewmode], 1
  969.     jmp update
  970. no_se:
  971.  
  972.     cmp ah,42           ;Sort by size
  973.     jne no_ss
  974.         mov     [viewmode], 2
  975.     jmp update
  976. no_ss:
  977.  
  978.     cmp ah,43           ;Sort by date
  979.     jne no_sd
  980.         mov     [viewmode], 3
  981.     jmp update
  982. no_sd:
  983.  
  984. ;HELP MENU
  985.     cmp ah,50           ;Help?
  986.     je      help_scr
  987.  
  988.     cmp ah,51           ;Info?
  989.     je      info_scr
  990.  
  991.     cmp ah,1           ; test on exit button
  992.     je      exit
  993.  
  994.     jmp still
  995.  
  996. exit:
  997. ; //// Willow
  998. ;    mov eax,58
  999. ;    mov ebx,MRUfile
  1000. ;    mov dword[ebx+8],255
  1001. ;    inc dword[ebx]
  1002. ;    mcall
  1003. ; //// Willow
  1004.     mov eax,-1
  1005.     mcall
  1006.  
  1007. draw_wd:
  1008. ;    call draw_window
  1009. ;    jmp still
  1010.     mov [flick],1
  1011.     jmp anti_flick
  1012.  
  1013. edit_prompt:
  1014.     not  [focus]
  1015.     jmp  red
  1016.  
  1017. help_scr:
  1018.     mov esi,14
  1019.     mov ebp,help_text
  1020.     jmp screen
  1021.  
  1022. info_scr:
  1023.     mov esi,6
  1024.     mov ebp,info_text
  1025.     jmp screen
  1026.  
  1027. screen:
  1028.     cmp [browser], 1 ;it's browser?
  1029.     jne dialogscr
  1030.  
  1031.     mov eax,[procinfo.box.height]
  1032.     sub eax,90
  1033.     drawfbox 40,76,300,eax,0x00000000
  1034.     mov eax,[procinfo.box.height]
  1035.     sub eax,92
  1036.     drawfbox 41,77,298,eax,0x00ffffff
  1037.     mov edi,esi ;14
  1038.     mov ebx,(41+26)*65536+(77+20)
  1039.     mov ecx,cl_Black
  1040.     mov edx,ebp ;help_text
  1041.     jmp outlab
  1042.  
  1043. dialogscr:
  1044.     mov eax,[procinfo.box.height]
  1045.     sub eax,84
  1046.     drawfbox 16,54,270,eax,0x00000000
  1047.     mov eax,[procinfo.box.height]
  1048.     sub eax,86
  1049.     drawfbox 17,55,268,eax,0x00ffffff
  1050.     mov edi,esi ;14
  1051.     mov ebx,(17+10)*65536+(55+1)
  1052.     mov ecx,cl_Black
  1053.     mov edx,ebp ;help_text
  1054.  
  1055. outlab:     ;out labels
  1056.     mov eax,4
  1057.     mov esi,40
  1058. helploo:
  1059.     mcall
  1060.     add ebx,11
  1061.     add edx,40
  1062.     dec edi
  1063.     jnz helploo
  1064.  
  1065.     setimg 48,84,logoinfimg
  1066.  
  1067.     jmp still
  1068.  
  1069. getimgproc:
  1070.     pushad
  1071.     mov dword [edx],esi ;xs
  1072.     mov dword [edx+4],edi ;ys
  1073.  
  1074.     mov ebp,eax
  1075.     mov eax,dword [ecx] ;getx size
  1076.     push edx
  1077.     push ecx
  1078.     lea ecx,[eax+2*eax]
  1079.  
  1080.     mul ebx
  1081.     add eax,ebp ;x
  1082.     mov edx,ecx
  1083.     lea eax,[eax+2*eax]  ;eax=offset on imsrc
  1084.  
  1085.     mov ebp,esi ;xs
  1086.     mov ebx,edi ;ys
  1087.  
  1088.     pop edi
  1089.     lea esi,[eax+8+edi]
  1090.  
  1091.     pop edi
  1092.     add edi,8
  1093.  
  1094.     cld
  1095. cyc:
  1096.         push    esi
  1097.         lea     ecx, [ebp+ebp*2]
  1098.         rep     movsb
  1099.         pop     esi
  1100.     add esi,edx
  1101.     dec ebx
  1102.     jne cyc
  1103.  
  1104.     popad
  1105.     ret
  1106.  
  1107. ;HELP TEXT
  1108. help_text:
  1109.        ;0123456789012345678901234567890123456789
  1110.     db '        ~~~~~ SYSTEM X-TREE ~~~~~       '
  1111.     db '                   HELP                 '
  1112.     db '                                        '
  1113.     db '                                        '
  1114.     db 'F2 - CHANGE SORTMODE (name,ext,size,dat)'
  1115.     db 'F3 - VIEW file in tinypad               '
  1116.  
  1117.     db 'F5 - COPY FILE to clipboard             '
  1118.     db 'F6 - PASTE FILE from clipboard          '
  1119.     db 'F11- EDIT PROMPT string                 '
  1120.     db 'F12- UPDATE directory sources           '
  1121.     db '                                        '
  1122.  
  1123.     db 'Enter - input to directory              '
  1124.     db 'Backspace - back to previos directory   '
  1125.     db 'PageDn/PageUp, Up/Down - move cursor    '
  1126.  
  1127. info_text:
  1128.     db '        ~~~~~ SYSTEM X-TREE ~~~~~       '
  1129.     db '               INFO 84 Ver              '
  1130.     db '                                        '
  1131.     db '        Create by Pavlushin Evgeni      '
  1132.     db 'with ASCL library special for Kolibri OS'
  1133.     db ' www.deck4.narod.ru      waptap@mail.ru '
  1134.  
  1135.  
  1136. ;   *********************************************
  1137. ;   *******  WINDOW DEFINITIONS AND DRAW ********
  1138. ;   ********    FILE BROWSER / DIALOG   *********
  1139.  
  1140. ;draw_browser_window:
  1141.  
  1142. draw_window:
  1143.  
  1144. ;    mov eax,9
  1145. ;    mov ebx,procinfo
  1146. ;    mov ecx,-1
  1147. ;    mcall
  1148. ;    mov  eax,[procinfo.box.width]
  1149. ;    cmp  eax,66
  1150. ;    jg  temp12345
  1151. ;    ret
  1152. ; temp12345:
  1153.     mov  eax,48
  1154.     mov  ebx,3
  1155.     mov  ecx,sc
  1156.     mov  edx,sizeof.system_colors
  1157.     mcall
  1158.  
  1159.     mov  eax,[sc.work_button]
  1160.     mov  [b_color],eax
  1161.  
  1162.     mov  eax,12        ; function 12:tell os about windowdraw
  1163.     mov  ebx,1             ; 1, start of draw
  1164.     mcall
  1165.  
  1166. ;Window
  1167.  
  1168.     xor  eax,eax       ; function 0 : define and draw window
  1169.  
  1170.     cmp  [browser], 1 ;it's browser
  1171.     jne  nob1
  1172.     mov  ebx,140*65536+400     ; [x start] *65536 + [x size]
  1173.     mov  ecx,160*65536+280     ; [y start] *65536 + [y size]
  1174.     jmp  isb1
  1175. nob1:
  1176.     mov  ebx,140*65536+320     ; [x start] *65536 + [x size]
  1177.     mov  ecx,260*65536+240     ; [y start] *65536 + [y size]
  1178. isb1:
  1179. ;    mov  edx,[sc.work]             ; color of work area RRGGBB
  1180.     or       edx,0x03ffffff;000000
  1181.     mcall
  1182.  
  1183. ;Get proc info
  1184.     mov eax,9
  1185.     mov ebx,procinfo
  1186.     mov ecx,-1
  1187.     mcall
  1188.  
  1189.     mov  eax,[procinfo.box.width]
  1190.     cmp  eax,66
  1191.     jg   @f
  1192. .ret:
  1193.     ret
  1194.  @@:
  1195.     cmp  [procinfo.box.height], 0x70
  1196.     jl  .ret
  1197.  
  1198.     cmp  [browser], 1 ;it's browser
  1199.     jne  nob9
  1200.     mov  [listx],120
  1201. ;    mov  eax,[procinfo.box.width]
  1202.     sub  eax,127;[listx]+7
  1203.     cmp  eax,10
  1204.     jl   .ret
  1205.     mov  [listxsize],eax
  1206.     mov  [listy],73
  1207.     mov  eax,[procinfo.box.height]
  1208.     sub  eax,73+7;[listy]+7
  1209.     mov  [listysize],eax
  1210.     jmp isb9
  1211. nob9:
  1212.     mov  [listx],10
  1213. ;    mov  eax,[procinfo.box.width]
  1214.     sub  eax,17 ;[listx]+7
  1215.     mov  [listxsize],eax
  1216.     mov  [listy],54
  1217.     mov  eax,[procinfo.box.height]
  1218.     sub  eax,54+34;[listy]+34
  1219.     mov  [listysize],eax
  1220. isb9:
  1221.  
  1222.  
  1223. ;Draw only browser components
  1224.     cmp  [browser], 1 ;it's browser
  1225.     jne  nob2
  1226.  
  1227.     mov  eax,[sc.grab_text]      ; color of text RRGGBB
  1228.     or       eax,0x10000000
  1229.     glabel 8,8,'SYSTEM X-TREE FILE BROWSER',eax
  1230.  
  1231. ;Draw buttons headers
  1232.     mov  eax,8
  1233.     mov  ebx,8*65536+(6*8-1) ;start pos x
  1234.     mov  ecx,23*65536+10      ;start pos y
  1235.     mov  edx,22;+1000000000000000000000000000000b  ;spoke butt
  1236.     mov  edi,3            ;draw 13 button's
  1237.     mov  esi,0x00339933
  1238.     mcall
  1239.     dec edi
  1240. nexthbut:
  1241.     add  ebx,(6*8)*65536
  1242.     inc  edx
  1243.     mcall
  1244.     dec  edi
  1245.     jnz  nexthbut
  1246.  
  1247. ;File STRING
  1248.     glabel 8,25,'  FILE    VIEW    INFO  ',  cl_White ;Black
  1249.  
  1250. ;BlackLine
  1251.     mov eax,[procinfo.box.width]
  1252.     sub eax,10
  1253.     drawfbox 5,35, eax, 1, cl_Black
  1254.  
  1255. ;BlackLine2
  1256.     mov eax,[procinfo.box.width]
  1257.     sub eax,10
  1258.     drawfbox 5,68, eax, 1, cl_Black
  1259.  
  1260. ;BlackLine2 vertical
  1261. ;    mov eax,[procinfo.box.height]
  1262. ;    sub eax,69+4
  1263. ;    drawfbox 115, 69, 1, eax, cl_Black
  1264.  
  1265. ;Set logo img
  1266.     setimg 34,88,logoinfimg
  1267.     glabel 20,165,'SYSTEM X-TREE',cl_Black
  1268.     add  ebx,10
  1269.     glabel ,,'FOR KolibriOS',
  1270.  
  1271.     add  ebx,9*65536+20
  1272.     glabel ,,'welcome to',cl_Green
  1273.     add  ebx,-15*65536+10
  1274.     glabel ,,'www.kolibrios.org',cl_Green
  1275.  
  1276. ;    glabel ,,'Create by',cl_Green
  1277. ;    add  ebx,10
  1278. ;    glabel ,,'   Pavlushin',
  1279. ;    add  ebx,10
  1280. ;    glabel ,,'       Evgeni',
  1281.  
  1282.  
  1283. ;Draw head->file buttons
  1284.     cmp [drawhf],1
  1285.     jne  no_drawhf
  1286.     mov  ebx,8*65536+6*12 ;start pos x
  1287.     mov  ecx,35*65536+10      ;start pos y
  1288.     mov  edx,30  ;spoke butt
  1289.     mov  edi,8            ;draw 4 button's
  1290.     mov  esi,cl_Grey
  1291.     call menubutton
  1292. no_drawhf:
  1293.  
  1294. ;Draw head->view buttons
  1295.     cmp [drawhv],1
  1296.     jne  no_drawhv
  1297.     mov  ebx,(8+6*8)*65536+6*12 ;start pos x
  1298.     mov  ecx,35*65536+10      ;start pos y
  1299.     mov  edx,40  ;spoke butt
  1300.     mov  edi,4            ;draw 4 button's
  1301.     mov  esi,cl_Grey
  1302.     call menubutton
  1303. no_drawhv:
  1304.  
  1305. ;Draw head->info buttons
  1306.     cmp [drawhi],1
  1307.     jne  no_drawhi
  1308.     mov  ebx,(8+12*8)*65536+6*12 ;start pos x
  1309.     mov  ecx,35*65536+10      ;start pos y
  1310.     mov  edx,50  ;spoke butt
  1311.     mov  edi,2            ;draw 2 button's
  1312.     mov  esi,cl_Grey
  1313.     call menubutton
  1314. no_drawhi:
  1315.  
  1316. nob2:
  1317.  
  1318. ;Draw buttons instruments
  1319.     mov  eax,8
  1320.     cmp  [browser], 1 ;it's browser
  1321.     jne  nob3
  1322.     mov  ebx,10*65536+16+5 ;start pos x
  1323.     mov  ecx,37*65536+15      ;start pos y
  1324.     jmp isb3
  1325. nob3:
  1326.     mov  ebx,16*65536+16+5 ;start pos x
  1327.     mov  ecx,29*65536+15      ;start pos y
  1328. isb3:
  1329.     mov  edx,8;+1000000000000000000000000000000b  ;spoke butt
  1330.     mov  edi,13        ;draw 13 button's
  1331.     mov  esi,cl_Grey
  1332.     mcall
  1333.     dec edi
  1334. nextbut:
  1335.     add  ebx,(16+6)*65536
  1336.     inc  edx
  1337.     mcall
  1338.     dec  edi
  1339.     jnz  nextbut
  1340.  
  1341.  
  1342.     cmp  [browser], 1 ;it's browser
  1343.     jne  nob4
  1344. ;But img browser
  1345.     setimg 10,37,butimg
  1346. ;left logo
  1347.     add eax,[procinfo.box.width]
  1348.     sub eax,80
  1349.     mov [temp],eax
  1350.     setimg [temp],37,logoimg
  1351.     jmp isb4
  1352. nob4:
  1353. ;But img dialog
  1354.     setimg 16,29,butimg
  1355. isb4:
  1356.  
  1357.     cmp  [browser], 1 ;it's browser
  1358.     jne  nob5
  1359.  
  1360.     mov [urlx],48
  1361.     mov [urly],55
  1362.     mov eax,[procinfo.box.width]
  1363.     sub eax,48+10
  1364.     mov [urlxsize],eax
  1365.     mov [urlysize],12
  1366.  
  1367.     glabel 20,57,"URL:",cl_Black
  1368.  
  1369. ;Out view mode info
  1370.         movzx   edx, [viewmode]
  1371.         shl     edx, 4
  1372.     mov eax,4
  1373.     mov ebx,180*65536+25
  1374.     mov ecx,cl_Black
  1375.     add edx,modetext
  1376.     mov esi,16
  1377.     mcall
  1378.  
  1379. ;List size
  1380.     outcount [listsize],294,25,cl_Black,4*65536
  1381.     jmp isb5
  1382.  
  1383. head_dlg: db 'OPEN FILE'
  1384.       db 'SAVE FILE'
  1385. but_dlg:  db 'OPEN'
  1386.       db 'SAVE'
  1387.  
  1388. nob5:
  1389.  
  1390.     mov [urlx],10
  1391.     mov eax,[procinfo.box.height]
  1392.     sub eax,24
  1393.     mov [urly],eax
  1394.     mov eax,[procinfo.box.width]
  1395.     sub eax,80
  1396.     mov [urlxsize],eax
  1397.     mov [urlysize],12
  1398.  
  1399.     cmp byte [dlg_type],'O'    ;if byte O - is Open dialog
  1400.     jne no_openh
  1401.     mov edx,head_dlg          ;draw in head OPEN FILE
  1402.     jmp out_laby
  1403. no_openh:
  1404.     cmp byte [dlg_type],'S'    ;if byte S - is Save dialog
  1405.     jne no_saveh
  1406.     mov edx,head_dlg+9        ;draw in head SAVE FILE
  1407. out_laby:
  1408.     mov ebx,8*65536+8
  1409.     mov ecx,[sc.grab_text]    ; color of text RRGGBB
  1410.     or      ecx,0x10000000
  1411.     mov esi,9
  1412.     mov eax,4
  1413.     mcall
  1414. no_saveh:
  1415.  
  1416.  
  1417. ;Draw OPEN\SAVE button
  1418.     mov ebx,0*65536+50
  1419.     mov ecx,0*65536+12
  1420.     mov eax,[procinfo.box.width]
  1421.     sub eax,63
  1422.     shl eax,16
  1423.     add ebx,eax
  1424.     mov eax,[procinfo.box.height]
  1425.     sub eax,25
  1426.     shl eax,16
  1427.     add ecx,eax
  1428.     mov  eax,8
  1429.     mov  edx,5 ;button ID
  1430.     mov  esi,0x006699aa  ;gradient!!!
  1431.     mcall
  1432.  
  1433. ; label OPEN or SAVE
  1434.     mov ebx,[procinfo.box.width]
  1435.     sub ebx,48
  1436.     mov eax,[procinfo.box.height]
  1437.     sub eax,22
  1438.     shl ebx,16
  1439.     add ebx,eax
  1440.  
  1441.     cmp byte [dlg_type],'O'    ;if byte O - is Open dialog
  1442.     jne no_openb
  1443.     mov edx,but_dlg        ;draw in head OPEN FILE
  1444.     jmp out_labx
  1445. no_openb:
  1446.     cmp byte [dlg_type],'S'    ;if byte S - is Save dialog
  1447.     jne no_saveb
  1448.     mov edx,but_dlg+4          ;draw in head SAVE FILE
  1449. out_labx:
  1450.     mov ecx,cl_White
  1451.     mov esi,4
  1452.     mov eax,4
  1453.     mcall
  1454. no_saveb:
  1455.  
  1456. isb5:
  1457.  
  1458. anti_flick:
  1459.  
  1460.     cmp [flick],2
  1461.     je draw_url
  1462.     cmp [flick],0
  1463.     jne no_flick_url
  1464.  
  1465. ;***************************
  1466. ;    DRAW URL LINE
  1467. ;***************************
  1468. draw_url:
  1469.  
  1470. ;Draw URL focus button
  1471.     mov ebx,[urlx]
  1472.     shl ebx,16
  1473.     add ebx,[urlxsize]
  1474.     mov ecx,[urly]
  1475.     shl ecx,16
  1476.     add ecx,[urlysize]
  1477.     dec ebx
  1478.     dec ecx
  1479.     mov  eax,8
  1480.     mov  edx,2 ;button ID
  1481.     mov  esi,0x00aaaaaa  ;gradient!!!
  1482.     mcall
  1483.  
  1484. ;Draw URL String
  1485.     mov eax,13
  1486.     mov edx,cl_Black
  1487.     mcall
  1488.     add ebx,1*65536-2+1
  1489.     add ecx,1*65536-2+1
  1490.     mov edx,cl_White
  1491.     mcall
  1492.  
  1493. ;Draw URL Cursor
  1494.     mov eax,6
  1495.     mul [cursor]
  1496.     mov ebx,[urlx]
  1497.     add ebx,eax
  1498.     shl ebx,16
  1499.     add ebx,2*65536+1
  1500.     mov ecx,[urly]
  1501.     shl ecx,16
  1502.     add ecx,[urlysize]
  1503.     add ecx,2*65536-4
  1504.     mov eax,13
  1505.     mov edx,cl_Black
  1506.     mcall
  1507.  
  1508. ; OUT TEXT
  1509.     mov eax,[urlxsize]      ;calculating text leight
  1510.     sub eax,8
  1511.     mov ebx,6
  1512.     div ebx
  1513.     mov esi,eax
  1514.  
  1515.     mov  ebx,[urlx]
  1516.     shl  ebx,16
  1517.     add  ebx,[urly]
  1518.     add  ebx,3*65536+2
  1519.     mov  eax,4             ; function 4 : write text to window
  1520.     mov  ecx,0x00000000 ;[sc.grab_text] ; color of text RRGGBB
  1521.     mov  edx,path        ; pointer to text beginning
  1522.     mcall
  1523.  
  1524.     cmp  [flick],2
  1525.     jne  no_flick_url
  1526.     mov  [flick],0
  1527.     jmp  still
  1528. no_flick_url:
  1529.  
  1530.  
  1531. ;***************************
  1532. ;    DRAW FILE LIST
  1533. ;***************************
  1534.  
  1535. ;Draw Scroll Line
  1536.     mov eax,13
  1537.  
  1538.     mov ebx,[listx]
  1539.     add ebx,[listxsize]
  1540.     sub ebx,[scrollsize]
  1541.     shl ebx,16
  1542.     add ebx,dword [scrollsize]
  1543.     mov ecx,[listy]
  1544.     add ecx,scrollbutsize
  1545.     shl ecx,16
  1546.     add ecx,[listysize]
  1547.     sub ecx,scrollbutsize*2
  1548.     mov edx,[scrollcolor] ;0x00006600
  1549.     mcall
  1550.  
  1551. ;Draw Scroll Box
  1552.     mov  edx,0
  1553.     mov  eax,[listysize]
  1554.     sub  eax,2
  1555.     mov  ebx,dword 10
  1556.     div  ebx
  1557.  
  1558.     mov ebx,eax
  1559.     cmp ebx,[listsize]      ;filelistsize in ebx
  1560.     jae    notusescroll
  1561. ;usescroll
  1562. ; calculate scroll size
  1563.         mov     eax, [listysize]
  1564.         sub     eax, 2*scrollbutsize
  1565.         push    eax
  1566.         mul     ebx
  1567.         div     [listsize]
  1568.         cmp     eax, 5
  1569.         jae     @f
  1570.         mov     al, 5
  1571. @@:
  1572.         mov     [scroll_height], eax
  1573. ; calculate scroll pos
  1574.         sub     [esp], eax
  1575.         mov     eax, [listsize]
  1576.         sub     eax, ebx
  1577.         mov     ecx, eax
  1578.         cmp     eax, [filecursor]
  1579.         jb      @f
  1580.         mov     eax, [filecursor]
  1581. @@:
  1582.         mul     dword [esp]
  1583.         div     ecx
  1584.         mov     [scroll_pos], eax
  1585.         pop     ecx
  1586. ; draw
  1587.         lea     ecx, [eax+scrollbutsize]
  1588.         add     ecx, [listy]
  1589.         shl     ecx, 16
  1590.         mov     cx, word [scroll_height]
  1591.         mov     eax, 13
  1592.         mov     ebx, [listx]
  1593.         add     ebx, [listxsize]
  1594.         sub     ebx, [scrollsize]
  1595.         shl     ebx, 16
  1596.         mov     bx, word [scrollsize]
  1597.         mov     edx, [scrollboxcol]
  1598.         mcall
  1599. notusescroll:
  1600.  
  1601.  
  1602. ;Draw list button for get file name
  1603.     mov  ebx,[listx]
  1604.     shl  ebx,16
  1605.     add  ebx,[listxsize]
  1606.     sub  ebx,15      ;right free zone
  1607.     sub  ebx,[scrollsize]
  1608.     mov  ecx,[listy]
  1609.     shl  ecx,16
  1610.     add  ecx,[listysize]
  1611.  
  1612.     mov  eax,8
  1613.     mov  edx,4+1000000000000000000000000000000b  ;spoke butt
  1614.     mcall
  1615.  
  1616.     add  ebx,15
  1617.     mov  eax,13
  1618.     mov  edx,[listcolor] ;ffffff
  1619.     mcall
  1620.  
  1621. ;Draw up/down buttons
  1622.     mov  ebx,[listx]
  1623.     add  ebx,[listxsize]
  1624.     sub  ebx,[scrollsize]
  1625.     shl  ebx,16
  1626.     add  ebx,[scrollsize]
  1627.     mov  ecx,[listy]
  1628.     shl  ecx,16
  1629.     add  ecx,scrollbutsize-1
  1630.     mov  eax,8
  1631.     mov  edx,6+1000000000000000000000000000000b  ;spoke butt
  1632.     mcall
  1633.  
  1634.     inc  ecx
  1635.     mov  eax,13
  1636.     mov  edx,[scrollbutcol] ;ffffff
  1637.     mcall
  1638.  
  1639. ; Draw image on up button
  1640.     pushad
  1641.     shr  ebx,16
  1642.     mov  edx,ebx
  1643.     shl  edx,16
  1644.     shr  ecx,16
  1645.     add  edx,ecx
  1646.     mov  ecx,8*65536+9
  1647.     mov  ebx,upsb+8
  1648.     mov  eax,7
  1649.     mcall
  1650.     popad
  1651.  
  1652.  
  1653.     dec  ecx     ;correction
  1654.     mov  edx,7+1000000000000000000000000000000b  ;spoke butt
  1655.     mov  eax,[listysize]
  1656.     sub  eax,scrollbutsize
  1657.     shl  eax,16
  1658.     add  ecx,eax
  1659.  
  1660.     mov  eax,8
  1661.     mcall
  1662.  
  1663.     inc  ecx
  1664.     mov  eax,13
  1665.     mov  edx,[scrollbutcol] ;ffffff
  1666.     mcall
  1667.  
  1668. ; Draw image on down button
  1669.     pushad
  1670.     shr  ebx,16
  1671.     mov  edx,ebx
  1672.     shl  edx,16
  1673.     shr  ecx,16
  1674.     add  edx,ecx
  1675.     mov  ecx,8*65536+9
  1676.     mov  ebx,dnsb+8
  1677.     mov  eax,7
  1678.     mcall
  1679.     popad
  1680.  
  1681.  
  1682. ; Draw text in file list
  1683.  
  1684. ;    mov  eax,[listxsize]
  1685. ;    sub  eax,40*6  ;leight of string
  1686. ;    shr  eax,1
  1687. ;    add  eax,[listx]
  1688.         mov     eax, [listx]
  1689.         add     eax, 12+4 ; for icons
  1690.     shl  eax,16
  1691.     add  eax,[listy]
  1692.     add  eax,2
  1693.  
  1694.     mov  [filelistxy],eax ;dword 19*65536+58
  1695.  
  1696.     mov  edx,0
  1697.     mov  eax,[listysize]
  1698.     sub  eax,2
  1699.     mov  ebx,dword 10
  1700.     div  ebx
  1701.     mov  [filelistsize],eax  ;dword 40
  1702.  
  1703. ; OUT FILE DATA
  1704.     mov  eax,[filecursor]     ;calc cursor position
  1705.     mov  ebx,27
  1706.     mul  ebx
  1707.  
  1708. ;OUT TEXT
  1709.     mov  ebp,4096 ; 16             ;out strings process
  1710.     sub  ebp,[filecursor]
  1711.     mov  edx,convinfo ;fileinfo+11
  1712.     add  edx,eax
  1713.     mov  ebx,dword [filelistxy]
  1714. loo:
  1715.         cmp     dword [edx], -1
  1716.         jz      noout
  1717.     mov  ecx,0x00888888        ;for another file's color white
  1718.     cmp  [edx+15],dword 'FOL ' ;folder yellow
  1719.     jne  nb
  1720.     mov  ecx,0x00006666
  1721.     jmp cset1
  1722. nb:
  1723.         mov     eax, [edx]
  1724.         xor     edi, edi
  1725. ; find extension and set color
  1726. @@:
  1727.         inc     eax
  1728.         cmp     byte [eax-1], 0
  1729.         jz      @f
  1730.         cmp     byte [eax-1], '.'
  1731.         jnz     @b
  1732.         mov     edi, eax
  1733.         jmp     @b
  1734. @@:
  1735.         test    edi, edi
  1736.         jz      @f
  1737.         mov     edi, [edi]
  1738.         and     edi, not 0x20202020     ; toupper
  1739. @@:
  1740. ;Color set
  1741. ; text's blue
  1742.         mov     ecx, 0x00446666
  1743.         cmp     edi, 'TXT'
  1744.         jz      cset
  1745.         cmp     edi, 'INC'
  1746.         jz      cset
  1747.         cmp     edi, 'ASM'
  1748.         jz      cset
  1749.         cmp     edi, 'RTF'
  1750.         jz      cset
  1751. ; picture's pure
  1752.         mov     ecx, 0x00226688
  1753.         cmp     edi, 'BMP'
  1754.         jz      cset
  1755.         cmp     edi, 'JPG'
  1756.         jz      cset
  1757.         cmp     edi, 'JPEG'
  1758.         jz      cset
  1759.         cmp     edi, 'GIF'
  1760.         jz      cset
  1761.         cmp     edi, 'PNG'
  1762.         jz      cset
  1763.         cmp     edi, 'WAV'
  1764.         jz      cset
  1765.         cmp     edi, 'MID'
  1766.         jz      cset
  1767. ; execute's green
  1768.         mov     ecx, 0x00008866
  1769.         test    edi, edi
  1770.         jz      cset
  1771. ; for another file's color white
  1772.         mov     ecx, 0x00888888
  1773. cset:
  1774.  
  1775. cset1:
  1776.     push edx
  1777.     mov  edx,[edx]
  1778.         push    ebx edx
  1779.         mov     eax, [listxsize]
  1780.         sub     eax, [scrollsize]
  1781.         sub     eax, 12+4
  1782.         xor     edx, edx
  1783.         mov     ebx, 6
  1784.         div     ebx
  1785.         pop     edx ebx
  1786.         sub     eax, 25
  1787.         xor     esi, esi
  1788. @@:
  1789.         cmp     byte [edx+esi], 0
  1790.         jz      @f
  1791.         inc     esi
  1792.         cmp     esi, eax
  1793.         jbe     @b
  1794.         dec     esi
  1795. @@:
  1796.         push    eax
  1797.     mov  eax,4
  1798.     mcall
  1799.         cmp     byte [edx+esi], 0
  1800.         jz      @f
  1801.         pushad
  1802.         mov     edx, more_char
  1803.         mov     eax, esi
  1804.         imul    eax, 6*65536
  1805.         add     ebx, eax
  1806.         mov     esi, 1
  1807.         mov     eax, 4
  1808.         mcall
  1809.         popad
  1810. @@:
  1811.         pop     eax
  1812.     pop  edx
  1813.     push ebx edx
  1814.         inc     eax
  1815.         imul    eax, 6*65536
  1816.         add     ebx, eax
  1817.     add  edx,4
  1818.     mov  esi,23
  1819.     mov  eax,4
  1820.     mcall
  1821.     pop  edx ebx
  1822.  
  1823.     pushad
  1824.     cmp  [edx+15],dword 'Fvol' ;volume label
  1825.     jne  no_volico
  1826.     push hdico+8
  1827.     jmp out_ico
  1828. no_volico:
  1829.     cmp  [edx+15],dword 'FOL '
  1830.     jne  no_folico
  1831.     cmp  [edx+4],dword 'HARD'
  1832.     jne  no_hdico
  1833.     push hdico+8
  1834.     jmp out_ico
  1835. no_hdico:
  1836.     cmp  [edx+4],dword 'RAMD'
  1837.     jne  no_rdico
  1838.     push rdico+8
  1839.     jmp out_ico
  1840. no_rdico:
  1841.     cmp  [edx+4],dword 'FLOP'
  1842.     jne  no_fdico
  1843.     push rdico+8
  1844.     jmp out_ico
  1845. no_fdico:
  1846.     cmp  [edx+4],dword 'CD-R'
  1847.     jne  no_cdico
  1848.     push cdico+8
  1849.     jmp out_ico
  1850. no_cdico:
  1851.     push folico+8
  1852.     jmp out_ico
  1853. no_folico:
  1854.     cmp  edi,dword 'BMP'
  1855.     je       is_imgico
  1856.     cmp  edi,dword 'JPG'
  1857.     je       is_imgico
  1858.     cmp  edi,dword 'JPEG'
  1859.     je       is_imgico
  1860.     cmp  edi,dword 'GIF'
  1861.     je       is_imgico
  1862. ; //// Willow
  1863.     cmp  edi,dword 'PNG'
  1864.     je   is_imgico
  1865. ; //// Willow
  1866.     cmp  edi,dword 'WAV'
  1867.     je       is_imgico
  1868.     cmp  edi,dword 'MID'
  1869.     je       is_imgico
  1870.     jmp  no_imgico
  1871. is_imgico:
  1872.     push imgico+8
  1873.     jmp out_ico
  1874. no_imgico:
  1875.     cmp  edi,dword 'ASM'
  1876.     je       is_asmincico
  1877.     cmp  edi,dword 'INC'
  1878.     je       is_asmincico
  1879.     jmp  no_asmincico
  1880. is_asmincico:
  1881.     push asmincico+8
  1882.     jmp out_ico
  1883. no_asmincico:
  1884.     cmp  edi,dword 'RTF'
  1885.     je   @f
  1886.     cmp  edi,dword 'TXT'
  1887.     jne  no_txtico
  1888.  @@:
  1889.     push txtico+8
  1890.     jmp out_ico
  1891. no_txtico:
  1892.     test edi,edi
  1893.     jne  no_execico
  1894.     push execico+8
  1895.     jmp out_ico
  1896. no_execico:
  1897.     cmp  [edx+15],dword 'DAT '
  1898.     jne  no_datico
  1899.     push datico+8
  1900.     jmp out_ico
  1901. no_datico:
  1902.     cmp  [edx+15],dword 'DEL '
  1903.     jne  no_out_ico
  1904.     push delico+8
  1905.     jmp out_ico
  1906. out_ico:
  1907.  
  1908.     mov  edx,ebx
  1909.     sub  edx,14*65536+1
  1910.     mov  ecx,12*65536+9
  1911. ;    mov  ebx,upsb+8
  1912.     pop  ebx
  1913.     mov  eax,7
  1914.     mcall
  1915. no_out_ico:
  1916.     popad
  1917.  
  1918.  
  1919.     add  ebx,10
  1920. noout:
  1921.     add  edx,27
  1922.  
  1923.     dec  [filelistsize]
  1924.     jz       extloo
  1925.  
  1926.     dec  ebp
  1927.     jnz  loo
  1928. dext:
  1929.     mov [downstop],1
  1930.  
  1931. extloo:
  1932.  
  1933.     cmp  [browser], 1 ;it's browser
  1934.     jne  nob8
  1935.  
  1936. ;Draw text for head->file buttons
  1937.     cmp [drawhf],1
  1938.     jne  no_drawhftext
  1939.     drawfbox 8,35,(6*12)+1,11*8,0x00000000
  1940.     drawfbox 9,36,(6*12)-1,(11*8)-2,0x00ffffff
  1941.  
  1942.     mov edi,8
  1943.     mov ebx,9*65536+37
  1944.     mov ecx,cl_Black
  1945.     mov edx,file_text_label
  1946.     call drawmenu
  1947.     jmp no_drawhftext
  1948.  
  1949. file_text_label:
  1950.     db       '    Open    '
  1951.     db       '    Copy    '
  1952.     db       '    Paste   '
  1953.     db       '   Delete   '
  1954.     db       '   Tinypad  '
  1955.     db       '    Edit    '
  1956.     db       '            '
  1957.     db       '    Exit    '
  1958.  
  1959. no_drawhftext:
  1960.  
  1961. ;Draw text for head->view buttons
  1962.     cmp [drawhv],1
  1963.     jne  no_drawhvtext
  1964.     drawfbox (8+6*8),35,(6*12)+1,(11*4),0x00000000
  1965.     drawfbox (9+6*8),36,(6*12)-1,(11*4)-2,0x00ffffff
  1966.  
  1967.     mov edi,4
  1968.     mov ebx,(9+6*8)*65536+37
  1969.     mov ecx,cl_Black
  1970.     mov edx,view_text_label
  1971.     call drawmenu
  1972.     jmp no_drawhvtext
  1973.  
  1974. view_text_label:
  1975.     db       '  Name sort '
  1976.     db       '  Ext. sort '
  1977.     db       '  Size sort '
  1978.     db       '  Date sort '
  1979.  
  1980. no_drawhvtext:
  1981.  
  1982. ;Draw text for head->info buttons
  1983.     cmp [drawhi],1
  1984.     jne  no_drawhitext
  1985.     drawfbox (8+12*8),35,(6*12)+1,(11*2),0x00000000
  1986.     drawfbox (9+12*8),36,(6*12)-1,(11*2)-2,0x00ffffff
  1987.  
  1988.     mov edi,2
  1989.     mov eax,4
  1990.     mov ebx,(9+12*8)*65536+37
  1991.     mov ecx,cl_Black
  1992.     mov edx,info_text_label
  1993.     call drawmenu
  1994.     jmp no_drawhitext
  1995.  
  1996. info_text_label:
  1997.     db       '   Help     '
  1998.     db       '   About    '
  1999.  
  2000. no_drawhitext:
  2001.  
  2002. nob8:
  2003.     cmp  [flick],1
  2004.     jne  no_flick
  2005.     mov  [flick],0
  2006.     jmp  still
  2007. no_flick:
  2008.  
  2009.     mov  eax,12        ; function 12:tell os about windowdraw
  2010.     mov  ebx,2             ; 2, end of draw
  2011.     mcall
  2012.  
  2013.     ret
  2014.  
  2015. ;FILE LIST PARAMETRS
  2016.  
  2017. listx       dd 15
  2018. listy       dd 72
  2019. listxsize dd 350
  2020. listysize dd 41
  2021.  
  2022. filelistxy    dd 0
  2023. filelistsize  dd 0
  2024. scrollsize    dd 8
  2025. listcolor     dd 0xffffff ;0xeeeeee
  2026. scrollcolor   dd 0x778877
  2027. scrollboxcol  dd 0x335533
  2028. scrollbutcol  dd 0x224422
  2029. scrollbutsize = 9
  2030.  
  2031. ;URL LINE PARAMETRS
  2032.  
  2033. urlx     dd 10
  2034. urly     dd 20
  2035. urlxsize dd 350
  2036. urlysize dd 12
  2037.  
  2038.  
  2039. drawmenu:
  2040.     mov eax,4
  2041.     mov esi,12
  2042. menuloo:
  2043.     mcall
  2044.     add ebx,11
  2045.     add edx,12
  2046.     dec edi
  2047.     jnz menuloo
  2048.     ret
  2049.  
  2050. menubutton:
  2051.     mov  eax,8
  2052. nextmenubut:
  2053.     mcall
  2054.     add  ecx,11*65536
  2055.     inc  edx
  2056.     dec  edi
  2057.     jnz  nextmenubut
  2058.     ret
  2059.  
  2060. ;*****************************
  2061. ; READ FILE STRUCTURE PROC
  2062. ;*****************************
  2063.  
  2064. read_directory:
  2065.  
  2066. ;STEP 1 CLEAR CONVINFO
  2067.     mov  edi,convinfo
  2068.     mov  al,255
  2069.     mov  ecx,4096*27
  2070.     cld
  2071.     push edi
  2072.     rep  stosb
  2073.     pop  edi
  2074.  
  2075. ;STEP 2 TEST ON HD OR PARTITION
  2076.     cmp [path],byte '/'
  2077.     je nstep
  2078. ; copy info on RD and FD
  2079.         mov     esi, hdimg
  2080.         mov     ecx, 2*27
  2081.         rep     movsb
  2082. ; hard disks
  2083.         mov     eax, 4
  2084. .1:
  2085.         mov     ecx, 27
  2086.         cmp     dword [esi], 0
  2087.         jz      .2
  2088.         rep     movsb
  2089.         jmp     .3
  2090. .2:
  2091.         add     esi, ecx
  2092. .3:
  2093.         dec     eax
  2094.         jnz     .1
  2095.         mov     [listsize], 0
  2096.         ret
  2097. nstep:
  2098.     cmp [path+3],byte '/'
  2099.     je nstep2
  2100.     cmp [path+4],byte '/'
  2101.     je nstep2
  2102.     mov ecx,1
  2103.     cmp [path+1],word 'RD'
  2104.     jz  loxpt
  2105.     cmp [path+1],word 'CD'
  2106.     jz  loxpt
  2107.     mov ecx,2
  2108.     cmp [path+1],word 'FD'
  2109.     jz  loxpt
  2110.     cmp [path+1],dword 'HD0'
  2111.     jne nostep_HD0
  2112.     movzx ecx,byte [table_area+2]
  2113.     jmp loxpt
  2114. nostep_HD0:
  2115.     cmp [path+1],dword 'HD1'
  2116.     jne nostep_HD1
  2117.     movzx ecx,byte [table_area+3]
  2118.     jmp loxpt
  2119. nostep_HD1:
  2120.     cmp [path+1],dword 'HD2'
  2121.     jne nostep_HD2
  2122.     movzx ecx,byte [table_area+4]
  2123.     jmp loxpt
  2124. nostep_HD2:
  2125.     cmp [path+1],dword 'HD3'
  2126.     jne nostep_HD3
  2127.     movzx ecx,byte [table_area+5]
  2128.     jmp loxpt
  2129. nostep_HD3:
  2130.  
  2131.     mov ecx,2
  2132.  
  2133. loxpt:
  2134.         cmp     ecx, 20
  2135.         jbe     @f
  2136.         mov     ecx, 20
  2137. @@:
  2138.         mov     eax, a1
  2139.         mov     esi, ptimg
  2140. @@:
  2141.         stosd
  2142.         add     eax, 3
  2143.         push    ecx esi
  2144.         mov     ecx, 23
  2145.         rep     movsb
  2146.         pop     esi ecx
  2147.         loop    @b
  2148.     mov [listsize],0
  2149.     ret
  2150. nstep2:
  2151.  
  2152. ;STEP 3 was deleted
  2153.  
  2154. ;STEP 4 READ DATA FROM HD
  2155.  
  2156. loorhd:
  2157.     mov  eax,70
  2158.     mov  ebx,fileinfoblock
  2159.     mcall
  2160.  
  2161.     cmp eax,6
  2162.     je      end_of_dir
  2163.  
  2164. ;  It's erorr's test is poor code
  2165.  
  2166.     cmp eax,1
  2167.     jne no_inv_part
  2168.     glabel 10,10,'Invalid partition or hd base',cl_Red+font_Big
  2169.     jmp end_of_dir
  2170. no_inv_part:
  2171.     cmp eax,3
  2172.     jne no_unk_fs
  2173.     glabel 10,10,'Unknown file system',cl_Red+font_Big
  2174.     jmp end_of_dir
  2175. no_unk_fs:
  2176.  
  2177. end_of_dir:
  2178. ; -1 -> 0
  2179.         cmp     ebx, -1
  2180.         sbb     ebx, -1
  2181.     mov  [dirlen],ebx
  2182.  
  2183.     ; command successful
  2184.  
  2185.         mov     esi, outinfo+32
  2186.         and     [listsize], 0
  2187.         test    ebx, ebx
  2188.         jz      nofiles
  2189.  
  2190.   newlineb:
  2191.         push    ebx
  2192.  
  2193.         mov     edi, fileinfo
  2194.         push    edi
  2195.         mov     al, ' '
  2196.         mov     ecx, 27
  2197.         rep     stosb
  2198.         pop     edi
  2199.         push    esi
  2200.         add     esi, 40
  2201.         mov     [edi], esi
  2202.         pop     esi
  2203.  
  2204.         mov     eax, 'DAT '     ; data or ... ?
  2205.         mov     cl, [esi]
  2206.         test    cl, 0x10
  2207.         jz      @f
  2208.         mov     eax, 'FOL '
  2209.         mov     [edi+15], eax
  2210.         jmp     nosize
  2211. @@:
  2212.         test    cl, 8
  2213.         jz      novol
  2214.         mov     eax, 'Fvol'
  2215.         mov     [edi+15], eax
  2216.         jmp     nosize
  2217. novol:
  2218.         mov     [edi+15], eax
  2219.  
  2220. ; size
  2221.         mov     eax, [esi+32]
  2222.         push    esi
  2223.         lea     esi, [edi+26]
  2224.         mov     ebx, 10
  2225.         mov     ecx, 8
  2226. newnum:
  2227.         xor     edx, edx
  2228.         div     ebx
  2229.         add     dl, '0'
  2230.         mov     [esi], dl
  2231.         test    eax, eax
  2232.         jz      zernum
  2233.         dec     esi
  2234.         loop    newnum
  2235. zernum:
  2236.         pop     esi
  2237. nosize:
  2238.  
  2239. ; date
  2240.         mov     dword [edi+6], '.  .'
  2241. ; year
  2242.         movzx   eax, word [esi+28+2]
  2243.         mov     ecx, 4
  2244. newdel1:
  2245.         xor     edx, edx
  2246.         mov     ebx, 10
  2247.         div     ebx
  2248.         add     edx, '0'
  2249.         mov     [edi+ecx+9], dl
  2250.         loop    newdel1
  2251. ; month
  2252.         movzx   eax, byte [esi+28+1]
  2253.         xor     edx, edx
  2254.         div     ebx
  2255.         add     al, '0'
  2256.         add     dl, '0'
  2257.         mov     [edi+7], al
  2258.         mov     [edi+8], dl
  2259. ; day
  2260.         movzx   eax, byte [esi+28]
  2261.         xor     edx, edx
  2262.         div     ebx
  2263.         add     al, '0'
  2264.         add     dl, '0'
  2265.         mov     [edi+4], al
  2266.         mov     [edi+5], dl
  2267.  
  2268. ;STEP 5 Test on WRITE OR NOTWRITE
  2269.         cmp     word [esi+40], '.'
  2270.         jz      nextfl
  2271.         cmp     word [esi+40], '..'
  2272.         jnz     @f
  2273.         cmp     byte [esi+42], 0
  2274.         jz      nextfl
  2275. @@:
  2276.  
  2277. ; STEP 6 SORT ALGORYTHM
  2278.  
  2279.         push    esi
  2280.         xor     esi, esi
  2281.  
  2282. ; At first Fold after Dat
  2283.  
  2284. ftestname:
  2285.         cmp     dword [convinfo+esi], -1
  2286.         jz      writefile
  2287.     cmp byte [fileinfo+15],'F'
  2288.     je      F
  2289.     cmp byte [fileinfo+15],'D'
  2290.     jne add_element
  2291. D:  cmp byte [convinfo+esi+15],'D'
  2292.     je      add_element
  2293.     cmp byte [convinfo+esi+15],'F'
  2294.     je      skipfile
  2295.     jmp add_element
  2296. F:  cmp byte [convinfo+esi+15],'D'
  2297.     je writenow
  2298. ;    cmp byte [convinfo+esi+15],'F'
  2299. ;    je  add_element
  2300. ;    jmp add_element
  2301.  
  2302. add_element:
  2303. ; compare items
  2304.         movzx   eax, [viewmode]
  2305.         call    [compare+eax*4]
  2306.         jb      writenow
  2307. skipfile:
  2308.     add esi,27
  2309.     jmp ftestname
  2310.  
  2311. writenow:
  2312.     mov ecx,4096*27-1
  2313.     sub ecx,esi
  2314. ldloop:
  2315.     mov al,[convinfo+ecx+esi]
  2316.     mov [convinfo+ecx+esi+27],al
  2317.     dec ecx
  2318.     jns ldloop
  2319.  
  2320. writefile:
  2321.     mov ecx,26
  2322. wfloop:
  2323.     mov al,[fileinfo+ecx]
  2324.     mov [convinfo+ecx+esi],al
  2325.     dec ecx
  2326.     jns wfloop
  2327.         inc     [listsize]
  2328.         pop     esi
  2329.  
  2330. nextfl:
  2331.         add     esi, 304
  2332.         pop     ebx
  2333.         dec     ebx
  2334.         jnz     newlineb
  2335.  
  2336. nofiles:
  2337.         ret
  2338.  
  2339. toupper:
  2340.         cmp     al, 'a'
  2341.         jb      .ret
  2342.         cmp     al, 'z'
  2343.         ja      @f
  2344. .sub20:
  2345.         sub     al, 0x20
  2346. .ret:
  2347.         ret
  2348. @@:
  2349.         cmp     al, 0xA0
  2350.         jb      .ret
  2351.         cmp     al, 0xB0
  2352.         jb      .sub20
  2353.         cmp     al, 0xE0
  2354.         jb      .ret
  2355.         cmp     al, 0xF0
  2356.         jae     @f
  2357.         sub     al, 0xE0-0x90
  2358.         ret
  2359. @@:
  2360.         cmp     al, 0xF1
  2361.         jnz     .ret
  2362.         dec     eax
  2363.         ret
  2364.  
  2365. compare_date:
  2366.         pushad
  2367.         mov     al, [fileinfo+10]
  2368.         cmp     al, [convinfo+esi+10]
  2369.         jnz     .ret
  2370.         mov     al, [fileinfo+11]
  2371.         cmp     al, [convinfo+esi+11]
  2372.         jnz     .ret
  2373.         mov     al, [fileinfo+12]
  2374.         cmp     al, [convinfo+esi+12]
  2375.         jnz     .ret
  2376.         mov     al, [fileinfo+13]
  2377.         cmp     al, [convinfo+esi+13]
  2378.         jnz     .ret
  2379.         mov     al, [fileinfo+7]
  2380.         cmp     al, [convinfo+esi+7]
  2381.         jnz     .ret
  2382.         mov     al, [fileinfo+8]
  2383.         cmp     al, [convinfo+esi+8]
  2384.         jnz     .ret
  2385.         mov     al, [fileinfo+4]
  2386.         cmp     al, [convinfo+esi+4]
  2387.         jnz     .ret
  2388.         mov     al, [fileinfo+5]
  2389.         cmp     al, [convinfo+esi+5]
  2390.         jz      compare_name.1
  2391. .ret:
  2392.         popad
  2393.         ret
  2394. compare_name:
  2395.         pushad
  2396. .1:
  2397.         mov     edi, dword [convinfo+esi]
  2398.         mov     esi, dword [fileinfo]
  2399.         call    strcmpi
  2400.         popad
  2401.         ret
  2402. compare_ext:
  2403.         pushad
  2404.         mov     esi, dword [convinfo+esi]
  2405.         mov     edi, dword [fileinfo]
  2406.         call    find_ext
  2407.         xchg    esi, edi
  2408.         call    find_ext
  2409.         call    strcmpi
  2410.         popad
  2411.         jz      compare_name
  2412.         ret
  2413. compare_size:
  2414.         pushad
  2415.         lea     edi, [convinfo+esi+19]
  2416.         lea     esi, [fileinfo+19]
  2417.         mov     ecx, 8
  2418.         repz    cmpsb
  2419.         popad
  2420.         jz      compare_name
  2421.         ret
  2422.  
  2423. strcmpi:
  2424.         lodsb
  2425.         call    toupper
  2426.         push    eax
  2427.         mov     al, [edi]
  2428.         inc     edi
  2429.         call    toupper
  2430.         cmp     [esp], al
  2431.         pop     eax
  2432.         jnz     @f
  2433.         test    al, al
  2434.         jnz     strcmpi
  2435. @@:
  2436.         ret
  2437.  
  2438. find_ext:
  2439.         lodsb
  2440.         test    al, al
  2441.         jz      .noext
  2442.         cmp     al, '.'
  2443.         jnz     find_ext
  2444.         ret
  2445. .noext:
  2446.         dec     esi
  2447.         ret
  2448.  
  2449. ;******************************************************************************
  2450.  
  2451. ; DATA AREA
  2452. pmenu_draw dd 0  ;if poup menu is draw,update all window
  2453. flick        dd 0  ;anti flick on ?
  2454. drawhf         dd 0  ;draw file menu?
  2455. drawhv         dd 0  ;draw view menu?
  2456. drawhi         dd 0  ;draw info menu?
  2457. cursor         dd 0  ;cursor in prompt line
  2458. focus        dd 0  ;prompt edit or window?
  2459. downstop   dd 0
  2460. filecursor dd 0
  2461. mousex         dd 0
  2462. mousey         dd 0
  2463. blocksread dd 0
  2464. listsize   dd 0  ;num of files in directory
  2465. temp       dd 0
  2466. readblock  dd 1
  2467. dlg_type   db 0 ;S-save O-open
  2468. browser    db 0  ;0-dialog, 1-browser
  2469. viewmode   db 0  ;folder sort
  2470.  
  2471. compare dd      compare_name
  2472.         dd      compare_ext
  2473.         dd      compare_size
  2474.         dd      compare_date
  2475.  
  2476. aRD     db      'RD',0
  2477. aFD     db      'FD',0
  2478. aHD0    db      'HD0',0
  2479. aHD1    db      'HD1',0
  2480. aHD2    db      'HD2',0
  2481. aHD3    db      'HD3',0
  2482. aCD0    db      'CD0',0
  2483. aCD1    db      'CD1',0
  2484. aCD2    db      'CD2',0
  2485. aCD3    db      'CD3',0
  2486. a1      db      '1',0,0
  2487. a2      db      '2',0,0
  2488. a3      db      '3',0,0
  2489. a4      db      '4',0,0
  2490. a5      db      '5',0,0
  2491. a6      db      '6',0,0
  2492. a7      db      '7',0,0
  2493. a8      db      '8',0,0
  2494. a9      db      '9',0,0
  2495. a10     db      '10',0
  2496. a11     db      '11',0
  2497. a12     db      '12',0
  2498. a13     db      '13',0
  2499. a14     db      '14',0
  2500. a15     db      '15',0
  2501. a16     db      '16',0
  2502. a17     db      '17',0
  2503. a18     db      '18',0
  2504. a19     db      '19',0
  2505. a20     db      '20',0
  2506.  
  2507. hdimg:
  2508.         dd      aRD
  2509.         db      'RAMDISK    FOL         '
  2510.         dd      aFD
  2511.         db      'FLOPPYDISK FOL         '
  2512. hdimg1  dd      0
  2513.         db      'HARDDISK   FOL         '
  2514. hdimg2  dd      0
  2515.         db      'HARDDISK   FOL         '
  2516. hdimg3  dd      0
  2517.         db      'HARDDISK   FOL         '
  2518. hdimg4  dd      0
  2519.         db      'HARDDISK   FOL         '
  2520. ptimg   db      'PARTITION  FOL         '
  2521.  
  2522. modetext:
  2523.       ;0123456789012345
  2524.    db 'SORT BY NAME   0'
  2525.    db 'SORT BY EXT.   1'
  2526.    db 'SORT BY SIZE   2' ;type sort
  2527.    db 'SORT BY DATE   3'
  2528.    db 'DEL SORT NAME  4'
  2529.    db 'DEL SORT EXT.  5'
  2530.    db 'DEL SORT SIZE  6' ;type sort
  2531.    db 'DEL SORT DATE  7'
  2532.  
  2533. dirlen        dd     0x1
  2534. b_color   dd   0x6677cc
  2535.  
  2536. ; //// Willow
  2537. ;MRUfile:
  2538. ;   dd 0x0
  2539. ;   dd 0x0
  2540. ;   dd 0x1
  2541. ;   dd path
  2542. ;   dd tempzone
  2543. ;   db '/RD/1/MRU.LST',0
  2544. ; //// Willow
  2545.  
  2546. ;Name of programs
  2547. editor        db '/RD/1/TINYPAD',0
  2548. bmpview   db '/RD/1/MV',0
  2549. jpgview   db '/RD/1/JPEGVIEW',0
  2550. gifview   db '/RD/1/GIFVIEW',0
  2551. ac97      db '/RD/1/AC97SND',0
  2552. rtfread   db '/RD/1/RTFREAD',0
  2553. ; //// Willow
  2554. pngview   db '/RD/1/@RCHER',0
  2555. ; //// Willow
  2556. midamp    db '/RD/1/MIDAMP',0
  2557. view3ds   db '/RD/1/3D/VIEW3DS',0
  2558. life2     db '/RD/1/DEMOS/LIFE2',0
  2559.  
  2560. more_char db 10h
  2561.  
  2562. fileinfo_start:
  2563.         dd      7
  2564.         dd      0
  2565. fileinfo_params:
  2566.         dd      0
  2567.         dd      0
  2568.         dd      0
  2569.         db      0
  2570. fileinfo_name:
  2571.         dd      0
  2572.  
  2573. clipfile_info:
  2574.         dd      ?
  2575.         dd      0
  2576.         dd      0
  2577.         dd      ?
  2578.         dd      paramtest
  2579.         db      '/RD/1/CLIPFILE.TXT',0
  2580. copyr_run:
  2581.         dd      7
  2582.         dd      0
  2583.         dd      copyr_param
  2584.         dd      0
  2585.         dd      0
  2586.         db      '/RD/1/COPYR',0
  2587.  
  2588. fileinfoblock:
  2589.    dd 0x1    ; read folder
  2590.    dd 0x0    ; first block
  2591.    dd 0x0    ; flags (ANSI names)
  2592.    dd 4095   ; number of blocks to read
  2593.    dd outinfo     ; ret offset
  2594. path:
  2595. times 1024 db 0     ;path
  2596.  
  2597. table_area:
  2598. rb 10
  2599.  
  2600. ;rb 256
  2601. but_file:
  2602. file 'systr12.GIF'
  2603.  
  2604. I_END:
  2605.  
  2606. scroll_height dd ?
  2607. scroll_pos dd ?
  2608.  
  2609. butimg:
  2610. rb 400*16*3+8     ;buttons (left pice of picture)
  2611. logoimg:
  2612. rb 70*16*3+8    ;logo (right pice of picture)
  2613. logoinfimg:
  2614. rb 60*60*3+8    ;logoinfo (right pice of picture)
  2615. upsb:
  2616. rb 8*9*3+8    ;up scroll button
  2617. dnsb:
  2618. rb 8*9*3+8    ;down scroll button
  2619.  
  2620. ;ICONS RESERVE AREA
  2621. hdico:
  2622. rb 12*9*3+8
  2623. rdico:
  2624. rb 12*9*3+8
  2625. folico:
  2626. rb 12*9*3+8
  2627. datico:
  2628. rb 12*9*3+8
  2629. delico:
  2630. rb 12*9*3+8
  2631. imgico:
  2632. rb 12*9*3+8
  2633. txtico:
  2634. rb 12*9*3+8
  2635. asmincico:
  2636. rb 12*9*3+8
  2637. execico:
  2638. rb 12*9*3+8
  2639. cdico:
  2640. rb 12*9*3+8
  2641.  
  2642. tempimg:    ;reserve ram for images
  2643. rb 400*100*3+8       ;for picture
  2644. rb 8000
  2645.  
  2646. gif_hash:
  2647. rd 4096
  2648.  
  2649. MYPID:
  2650. rd 8
  2651.  
  2652. param_area:
  2653. rb 256
  2654. paramtest:
  2655. rb 1024
  2656. filedir:
  2657. rb 1024
  2658.  
  2659. procinfo process_information
  2660. sc system_colors
  2661.  
  2662. fileinfo:
  2663. rb 200 ;4096*62+1024
  2664.  
  2665. copyr_param     rb      256
  2666.  
  2667. outinfo:
  2668. rb 32+4096*304
  2669.  
  2670. convinfo:
  2671. rb 4096*27
  2672. ; stack
  2673.         align 4
  2674.         rb      1024
  2675. RAM_END:
  2676.