Subversion Repositories Kolibri OS

Rev

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