Subversion Repositories Kolibri OS

Rev

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