Subversion Repositories Kolibri OS

Rev

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