Subversion Repositories NedoOS

Rev

Rev 122 | Rev 160 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1.         DEVICE ZXSPECTRUM128
  2.         include "../_sdk/sys_h.asm"
  3.  
  4. HEAPSORT_LH=1 ;byte order in poiters: LSB,HSB
  5.        
  6. NVOLUMES=8;5
  7.        
  8. MAXCMDSZ=COMMANDLINE_sz-1-4 ;not counting terminator (-4 for "cmd ")
  9. txtscrhgt=25
  10. txtscrwid=80
  11. CMDLINEY=23;24
  12.  
  13. COLOR=7
  14. PANELCOLOR=0x4f;0xf
  15. PANELSELECTCOLOR=0x17
  16. CURSORCOLOR=0x38
  17. FILECURSORCOLOR=0x38
  18. COLOR_RED=0x17
  19.  
  20. PROGRESBARWINXY=0x0e16 ;0x0919 + 051f ;de=yx
  21. PROGRESBARWINHGTWID=0x0324 ;0x051f ;bc=hgt,wid
  22.  
  23.  
  24. CONST_HGT_TABLE=21
  25.  
  26. ;8192fcbs*32bytes*2panels = 32 pages
  27. DIRPAGES=16
  28.  
  29. catbuf_left=0xc000
  30. catbuf_right=0xc000
  31. FILES_POINTERS_left=0xc000;0x3700
  32. FILES_POINTERS_right=0xc000;0x3b00
  33. left_panel_xy=0x0000
  34. right_panel_xy=0x0028
  35. firstfiley=left_panel_xy/256 + 1
  36.  
  37.         macro PGW2elpg0
  38.         ;LD A,(HS_elpg)
  39.         ld a,(ix+PANEL.poipg)
  40.         SETPG32KLOW
  41.         endm
  42.        
  43.         macro PGW2elpg
  44.                 ;LD      A,H
  45.                 ;RLCA
  46.                 ;RLCA
  47.                 ;AND     1
  48.         ;LD A,(HS_elpg)
  49.         ;jr z,$+5
  50.         ;LD A,(HS_elpg+1)
  51.         ld a,(ix+PANEL.poipg)
  52.         SETPG32KLOW
  53.         endm
  54.  
  55.         macro PGW2strpg
  56.         ld ($+4),a
  57.         LD A,(HS_strpg)
  58.         SETPG32KLOW
  59.         endm
  60.  
  61.         macro PGW3elpg
  62.                 ;LD      A,H
  63.                 ;RLCA
  64.                 ;RLCA
  65.                 ;AND     1
  66.         ;LD A,(HS_elpg)
  67.         ;jr z,$+5
  68.         ;LD A,(HS_elpg+1)
  69.         ld a,(ix+PANEL.poipg)
  70.         SETPG32KHIGH
  71.         endm
  72.  
  73.         macro PGW3strpg
  74.         ld ($+4),a
  75.         LD A,(HS_strpg)
  76.         SETPG32KHIGH
  77.         endm
  78.  
  79.         org PROGSTART
  80. cmd_begin
  81.         ld sp,0x4000
  82.  
  83.         ld e,6 ;textmode
  84.         OS_SETGFX
  85.        
  86.         GET_KEY ;ё·хфрхь key_redraw
  87.        
  88.         ld e,COLOR
  89.         OS_CLS
  90.        
  91.         ld de,nvpal
  92.         OS_SETPAL
  93.        
  94.         OS_GETSCREENPAGES
  95. ;de=pages of screen 0 (d=higher page), hl=pages of screen 1 (h=higher page)
  96.         ld a,e
  97.         ld (cmdpgscreen0_0),a
  98.  
  99.         OS_GETMAINPAGES
  100. ;dehl=эюьхЁр ёЄЁрэшЎ т 0000,4000(copybuf),8000,c000
  101.         push hl
  102.         ld e,h
  103.         OS_DELPAGE
  104.         pop hl
  105.         ld e,l
  106.         OS_DELPAGE
  107.  
  108.         OS_NEWPAGE ; ┬√фхы хь яю юфэющ ёЄЁрэшўъх фы  ърЄрыюуют
  109.         ld hl,HS_strpg
  110.         ld (hl),e
  111.         inc hl
  112.         xor a
  113.         ld (hl),a ;╠рЁъхЁ ъюэЎр ёяшёър ёЄЁрэшЎ
  114.  
  115.         OS_NEWPAGE
  116.         ld hl, HS_strpg+DIRPAGES+1
  117.         ld (hl),e
  118.         inc hl
  119.         xor a
  120.         ld (hl),a ;╠рЁъхЁ ъюэЎр ёяшёър ёЄЁрэшЎ
  121.        
  122.         ld hl,left_panel_xy
  123.         ld (leftpanel+PANEL.xy),hl
  124.         OS_NEWPAGE
  125.         ld a,e
  126.         ld (leftpanel+PANEL.poipg),a
  127.         ld hl,FILES_POINTERS_left
  128.         ld (leftpanel+PANEL.pointers),hl
  129.         ld hl,catbuf_left
  130.         ld (leftpanel+PANEL.catbuf),hl
  131.         xor a
  132.         ld (leftpanel+PANEL.pgadd),a
  133.  
  134.         ld hl,right_panel_xy
  135.         ld (rightpanel+PANEL.xy),hl
  136.         OS_NEWPAGE
  137.         ld a,e
  138.         ld (rightpanel+PANEL.poipg),a
  139.         ld hl,FILES_POINTERS_right
  140.         ld (rightpanel+PANEL.pointers),hl
  141.         ld hl,catbuf_right
  142.         ld (rightpanel+PANEL.catbuf),hl
  143.         ld a,DIRPAGES+1
  144.         ld (leftpanel+PANEL.pgadd),a
  145.  
  146.         ld hl,compareext
  147.         ld (leftpanel+PANEL.dirsortproc),hl
  148.         ld (rightpanel+PANEL.dirsortproc),hl
  149.  
  150.         ;ld a,0xc3
  151.         ;ld (leftpanel+PANEL.sorterjp),a
  152.         ;ld (rightpanel+PANEL.sorterjp),a
  153.         ;ld hl,sorter1
  154.         ;ld (leftpanel+PANEL.sorter),hl
  155.         ;ld hl,sorter2
  156.         ;ld (rightpanel+PANEL.sorter),hl
  157.        
  158.         ld hl,rightpanel
  159.         call editcmd_setpaneldirfromcurdir_panelhl
  160.         ld hl,leftpanel
  161.         call editcmd_setpaneldirfromcurdir_panelhl
  162.  
  163.         ;ld e,0
  164.         ;OS_SETDRV
  165. ;l=NVOLUMES
  166.        
  167.         call readpanels_reprint
  168.        
  169. mainloop
  170.         call editcmd_readprompt_setendcmdx
  171.         call controlloop
  172.         jp mainloop
  173.  
  174. strdelpages ;єфры хь str ёЄЁрэшЎ√. IX - ярэхы№. ╧хЁтє■ ёЄЁрэшўъє эх єфры хь
  175.         ld hl, HS_strpg
  176.         ld de, (ix+PANEL.pgadd)
  177.         adc hl, de
  178. strdelpages_next
  179.         inc hl
  180.         ld a, (hl)
  181.         or a
  182.         ret z
  183.         ld e, a
  184.         push hl
  185.         OS_DELPAGE
  186.         pop hl
  187.         xor a
  188.         ld (hl), a
  189.         jr strdelpages_next
  190.  
  191. strnewpage ;т√фхы хь эютє■ ёЄЁрэшўъє IX - ярэхы№, E эюьхЁ ёЄЁрэшўъш т HS_strpg
  192.         push hl
  193.         push de
  194.  
  195.         push de
  196.         OS_NEWPAGE
  197.         ld a, e
  198.         ld hl, HS_strpg
  199.         pop de
  200.         adc hl, de
  201.         ld de, (ix+PANEL.pgadd)
  202.         adc hl, de
  203.         ld (hl), a
  204.         xor a
  205.         inc hl
  206.         ld (hl),a ; ьрЁъхЁ ъюэЎр ёяшёър
  207.  
  208.         pop de
  209.         pop hl
  210.         ret
  211.  
  212. nvpal
  213.         dw 0xf3f3,0x1313,0xf1f1,0xf0f0,0xe3e3,0xe2e2,0xe1e1,0xe0e0 ;NB color 1
  214.         dw 0xf3f3,0xd2d2,0xb1b1,0x9090,0x6363,0x4242,0x2121,0x0000
  215.        
  216. printhint
  217.         ld de,24*256
  218.         call nv_setxy
  219.         ld hl,thint
  220. prhint0
  221.         ld a,(hl)
  222.         inc hl
  223.         or a
  224.         ret z
  225.         cp '{'
  226.         jr z,prhint_color0
  227.         cp '}'
  228.         jr z,prhint_color1
  229.         push hl
  230.         PRCHAR ;testing (351/352t) (was 986/987t)
  231.         pop hl
  232.         jr prhint0
  233. prhint_color0
  234.         ld e,7
  235.         jr prhint_color
  236. prhint_color1
  237.         ld e,5*8
  238. prhint_color
  239.         call nv_setcolor
  240.         jr prhint0
  241. thint
  242.         db "{1}LeftDrv { 2}RightDrv { 3}View { 4}Edit { 5}Copy { 6}Rename { 7}MkDir { 8}Del  { 9}     { 0}Quit ",0
  243.        
  244. readpanels_reprint
  245.         ld e,COLOR
  246.         OS_CLS
  247.         call printhint
  248.         ld ix,leftpanel
  249.         call readsortdrawpanel
  250.         ld ix,rightpanel
  251. readsortdrawpanel
  252.         call readdir
  253.         call sortfiles
  254.         jp drawpanel_with_files
  255.  
  256. readpanels_reprint_keepcursor
  257.         ld e,COLOR
  258.         OS_CLS
  259.         call printhint
  260.         ld ix,leftpanel
  261.         call readsortdrawpanel_keepcursor
  262.         ld ix,rightpanel
  263. readsortdrawpanel_keepcursor
  264.         call readdir_keepcursor
  265.         call sortfiles
  266.         jp drawpanel_with_files
  267.  
  268.        
  269. drawpanel_with_files
  270. ;ix=panel
  271.         call setpanelcolor
  272.         call nv_getpanelxy_de
  273.         call prtable ;keeps ix
  274.         call setpaneldir_makeprompt ;keeps ix
  275.         ld e,7
  276.         call nv_setcolor
  277.         call nv_getpanelxy_de
  278.         inc e
  279.         inc e
  280.         call nv_setxy
  281.         push ix
  282.         pop hl
  283.         ld de,PANEL.dir
  284.         add hl,de
  285.         ld c,0
  286.         call panelprtext
  287.  
  288.         call drawpanelfilesandsize
  289.        
  290. drawpanel_files
  291. ;ix=panel
  292.         ;ld a,(ix+PANEL.pg)
  293.         ;SETPG32KHIGH
  294.  
  295.         call setpanelcolor
  296.         ld l,(ix+PANEL.files)
  297.         ld h,(ix+PANEL.files+1)
  298.         call nv_getdirscroll_bc
  299.         push bc ;dirscroll
  300.         or a
  301.         sbc hl,bc ;hl=number of files in panel - scroll in panel
  302.         ld bc,CONST_HGT_TABLE
  303.         call minhl_bc_tobc ;bc = min(CONST_HGT_TABLE, number of files in panel - scroll in panel)
  304.         pop de ;dirscroll
  305.         ;ld l,(ix+PANEL.pointers)
  306.         ;ld h,(ix+PANEL.pointers+1)
  307.         ;add hl,de
  308.         ;add hl,de
  309.         call gotofilepointer_numberde
  310.  
  311.         call nv_getpanelxy_de
  312.         inc d
  313.         inc e
  314.         ld b,c ;files to show
  315.  
  316.         ld a,b
  317.         or a
  318.         ret z
  319. prNfiles       
  320.         push bc
  321.         push de
  322.         call nv_setxy ;keeps de,hl
  323.         ;ld e,(hl)
  324.         ;inc hl
  325.         ;ld d,(hl)
  326.         ;inc hl
  327.         call getfilepointer_de_fromhl
  328.         push hl
  329.         ex de,hl
  330.         push ix
  331.         call prdirfile
  332.         pop ix
  333.         pop hl
  334.         pop de 
  335.         pop bc
  336.         inc d
  337.         djnz prNfiles
  338.         ret    
  339.  
  340. prdirfile
  341. ;hl=fcb
  342.         ld a,(hl) ;mark
  343.         and 1
  344.         ld e,PANELCOLOR
  345.         jr z,$+4
  346.         ld e,PANELSELECTCOLOR
  347.         push hl
  348.         call nv_setcolor
  349.         pop hl
  350.         push hl
  351.         inc hl
  352.         ld b,8
  353.         call cmdprNchars
  354.         pop ix
  355.         push ix
  356.         ld a,(ix+FCB_FATTRIB)
  357.         and FATTRIB_DIR
  358.         xor '.'
  359.         call cmdprchar
  360.         ld b,3
  361.         call cmdprNchars
  362.         ld a,'│'
  363.         PRCHAR
  364.         pop ix
  365.         ld l,(ix+FCB_FSIZE+2)
  366.         ld h,(ix+FCB_FSIZE+3)
  367.         exx
  368.         ld l,(ix+FCB_FSIZE)
  369.         ld h,(ix+FCB_FSIZE+1)
  370.         push ix
  371.         call prdword
  372.         ld a,'│'
  373.         PRCHAR
  374.         pop ix
  375.         ld l,(ix+FCB_FDATE)
  376.         ld h,(ix+FCB_FDATE+1)
  377.         push ix
  378.         push hl
  379.         ld a,h
  380.         srl a
  381.         sub 20
  382.         jr nc,$+4
  383.         add a,100 ;XX century
  384.         call prNNcmd ;year
  385.         ld a,'-'       
  386.         PRCHAR
  387.         pop hl
  388.         ld a,l
  389.         push af
  390.         add hl,hl
  391.         add hl,hl
  392.         add hl,hl
  393.         ld a,h
  394.         and #0f
  395.         call prNNcmd ;month
  396.         ld a,'-'
  397.         PRCHAR
  398.         pop af
  399.         and #1f
  400.         call prNNcmd ;day
  401.         ld a,' '
  402.         PRCHAR
  403.         pop ix
  404.         ld l,(ix+FCB_FTIME)
  405.         ld h,(ix+FCB_FTIME+1)
  406.         push hl
  407.         ld a,h
  408.         rra
  409.         rra
  410.         rra
  411.         and #1f
  412.         call prNNcmd ;hour
  413.         ld a,':'
  414.         PRCHAR
  415.         pop hl
  416.         add hl,hl
  417.         add hl,hl
  418.         add hl,hl
  419.         ld a,h
  420.         and #3f
  421.         jp prNNcmd ;minute
  422.  
  423. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  424.  
  425. readdir
  426. ;ix=panel
  427.         call readdir_keepcursor
  428. nv_setcursor_zero
  429.         ld bc,0
  430.         call nv_setdirscroll_bc
  431.         jp nv_setdirpos_zero
  432.  
  433. readdir_keepcursor
  434. ;ix=panel
  435.         xor a
  436.         ld (ix+PANEL.totalsize),a
  437.         ld (ix+PANEL.totalsize+1),a
  438.         ld (ix+PANEL.totalsize+2),a
  439.         ld (ix+PANEL.totalsize+3),a
  440.         ld (ix+PANEL.markedsize),a
  441.         ld (ix+PANEL.markedsize+1),a
  442.         ld (ix+PANEL.markedsize+2),a
  443.         ld (ix+PANEL.markedsize+3),a
  444.         ld (ix+PANEL.markedfiles),a
  445.         ld (ix+PANEL.markedfiles+1),a
  446.  
  447.         push ix
  448.         call setpaneldir
  449.         call strdelpages
  450.         ld de,fcb
  451.         OS_SETDTA ;set disk transfer address = de
  452.         ;call makeemptymask
  453.         ld de,fcbmask
  454.         OS_FSEARCHFIRST
  455.         pop ix
  456.         or a
  457.  
  458.         ld e,(ix+PANEL.catbuf)     ;00
  459.         ld d,(ix+PANEL.catbuf+1)   ;c0
  460.         ld l,(ix+PANEL.pointers)   ;00  эюьхЁ ёЄЁрэшЎ√
  461.         ld h,(ix+PANEL.pointers+1) ;c0  эюьхЁ Їрщыр
  462.         ld bc,0 ;nfiles
  463.         jr nz,loaddir_error
  464. loaddir0
  465.         push bc
  466.  
  467.         push de
  468.         push hl
  469.         ld a,e
  470.         and 31
  471.         add a,(ix+PANEL.pgadd)
  472.         PGW3strpg
  473.         ld a,e
  474.         and 0xe0 ;юЄсЁрё√трхь ьырф°є■ ўрёЄ№ (<32) ё эюьхЁюь ёЄЁрэшЎ√, юёЄрхЄё  Єюы№ъю эюьхЁ Їрщыр
  475.         ld e,a
  476.         xor a
  477.         ld (de),a ;mark
  478.         inc de
  479.         ld hl,fcb+1
  480.         ld bc,31;FCB_sz
  481.         ldir ; ъюяшЁєхь fcb т catbuf
  482.         pop hl
  483.         pop de
  484.         call putfilepointer_de_tohl ; тючтЁр∙рхЄ т тхЁїэхх юъэю ёЄЁрэшЎє poipg ш т pointers чрэюёшЄ de
  485.         ex de,hl
  486.         ld bc,32
  487.         add hl,bc
  488.         ex hl,de ; єтхышўшыш эр 32 catbuf
  489.         jr nc,nonewpg ; тё╕ х∙╕ єсшЁрхьё  т ёЄЁрэшЎє
  490.         inc de ;next page de
  491.         call strnewpage
  492.         set 7,d
  493.         set 6,d ;de=c0pg
  494. nonewpg:
  495.         ;TODO ўхЁхч яЁюЎхфєЁє
  496.         push hl
  497.         ld l,(ix+PANEL.totalsize)
  498.         ld h,(ix+PANEL.totalsize+1)
  499.         ld bc,(fcb+FCB_FSIZE)
  500.         add hl,bc
  501.         ld (ix+PANEL.totalsize),l
  502.         ld (ix+PANEL.totalsize+1),h
  503.         ld l,(ix+PANEL.totalsize+2)
  504.         ld h,(ix+PANEL.totalsize+3)
  505.         ld bc,(fcb+FCB_FSIZE+2)
  506.         adc hl,bc
  507.         ld (ix+PANEL.totalsize+2),l
  508.         ld (ix+PANEL.totalsize+3),h
  509.         pop hl
  510.        
  511.         pop bc
  512.         inc bc ;nfiles
  513.         bit 5,b;1,b ;ёЄЁрэшўър pgtemp чръюэўшырё№? max 512 Їрщыют яю 32 срщЄр
  514.         jr nz,loaddirq
  515.         push bc
  516.         push de ;catbuf
  517.         push hl
  518.         push ix
  519.         ld de,fcb
  520.         OS_SETDTA ;set disk transfer address = de
  521.          ld de,fcbmask ;т CP/M эх эєцэю, эю юЄёєЄёЄтшх тЁхфшЄ ьэюуючрфрўэюёЄш
  522.         OS_FSEARCHNEXT
  523.         pop ix
  524.         pop hl
  525.         pop de ;catbuf
  526.         pop bc ;nfiles
  527.         or a
  528.         jr z,loaddir0
  529. loaddir_error
  530. loaddirq
  531. ;bc=nfiles
  532.         ld (ix+PANEL.files),c
  533.         ld (ix+PANEL.files+1),b
  534.  
  535.         if 1==0
  536.         ld l,(ix+PANEL.pointers)
  537.         ld h,(ix+PANEL.pointers+1)
  538.         ld e,(ix+PANEL.catbuf)
  539.         ld d,(ix+PANEL.catbuf+1)
  540. sortfiles_0
  541.         push bc
  542.         ;ld (hl),e     
  543.         ;inc hl
  544.         ;ld (hl),d
  545.         ;inc hl
  546.         call putfilepointer_de_tohl
  547.         ex hl,de
  548.         ld bc,32
  549.         add hl,bc
  550.         ex hl,de
  551.          jr nc,$+3
  552.          inc de ;next page
  553.         pop bc
  554.         dec bc 
  555.         ld a,b
  556.         or c
  557.         jr nz,sortfiles_0
  558.         endif
  559.  
  560.         call countfiles
  561.         ld (ix+PANEL.filesdirs),l
  562.         ld (ix+PANEL.filesdirs+1),h
  563.        
  564.         ex de,hl
  565.         call nv_getdirpos_hl
  566.         or a
  567.         sbc hl,de ;dirpos<files?
  568.         ret c ;OK
  569.         jp nv_setcursor_zero
  570.  
  571. controlloop
  572.         call fixscroll_prcmd
  573. controlloop_noprline
  574.         ld hl,controlloop
  575.         push hl
  576.         ld ix,(curpanel)
  577.         ld a,(ix+PANEL.files)
  578.         or (ix+PANEL.files+1)
  579.         call z,nv_setdirpos_zero ;can't move cursor if 0 files
  580.         call cmdcalccurxy
  581.         call nv_setxy
  582.         ld e,CURSORCOLOR;#38
  583.         OS_PRATTR ;draw cursor
  584.         ld a,FILECURSORCOLOR
  585.         call prfilecursor
  586.          push af ;color under file cursor
  587.         YIELDGETKEYLOOP
  588.          pop de ;d=color under file cursor
  589.         push af
  590.         ld a,d
  591.         call prfilecursor ;remove file cursor
  592.         call cmdcalccurxy
  593.         call nv_setxy
  594.         ld e,COLOR;7
  595.         OS_PRATTR ;remove cursor
  596.          ld e,COLOR
  597.          call nv_setcolor ;even if we didn't reprint command line, draw windows with its color
  598.         pop af
  599.         ld hl,tnvcmds
  600.         ld bc,nnvcmds
  601.         cpir
  602.         jp nz,editcmd_keyfail
  603. ;bc=nnvcmds-(#ъюьрэф√+1) = 0..(nnvcmds-1)
  604.         add hl,bc
  605. ;hl=tnvcmds+nnvcmds
  606.         add hl,bc
  607.         add hl,bc
  608. ;hl=tnvcmds+nnvcmds+ 2*(nnvcmds-(#ъюьрэф√+1))
  609.         ld c,(hl)
  610.         inc hl
  611.         ld h,(hl)
  612.         ld l,c
  613.         push hl ;jump addr
  614.         ld hl,cmdbuf
  615.         ld ix,(curpanel)
  616.         ret
  617. editcmd_keyfail
  618.         cp 0x20
  619.         ret c ;яЁюўшх ёшёЄхьэ√х ъэюяъш эх эєцэ√
  620. editcmd_typein
  621. ;keeps ix
  622.         ld e,a
  623.         ld hl,cmdbuf
  624.         call strlen ;hl=length
  625.         ld bc,MAXCMDSZ
  626.         or a
  627.         sbc hl,bc
  628.         ret nc ;эхъєфр ттюфшЄ№
  629.         call cmdcalctextaddr ;hl=addr, a=curcmdx
  630.         inc a
  631.         ld (curcmdx),a
  632.         jp strinsch
  633.  
  634. editcmd_space
  635.         ld a,(cmdbuf)
  636.         or a
  637.         ld a,' '
  638.         jr nz,editcmd_typein
  639.         call getfcbaddrundercursor;hl=addr fcb ;ix=curpanel
  640.         call isthisdotdir_hl
  641.         call nz,changemark_hl
  642.         push hl
  643.         call setfilecursorxy
  644.         pop hl
  645.         call prdirfile
  646.         ld ix,(curpanel)
  647.         call drawpanelfilesandsize
  648.         jp editcmd_down
  649.        
  650. editcmd_backspace
  651.         call cmdcalctextaddr ;hl=addr, a=curcmdx
  652.         or a
  653.         jr z,editcmddirback;editcmdok ;эхўхую єфры Є№
  654.         dec a
  655.         ld (curcmdx),a
  656.         jp strdelch
  657.        
  658. editcmddirback
  659.         call setpaneldir
  660.         ld de,tdotdot
  661.         OS_CHDIR
  662.         jp editcmd_setpaneldirfromcurdir
  663.  
  664. editcmd_left
  665.         ld a,(curcmdx)
  666.         or a
  667.         ret z ;эхъєфр тыхтю
  668.         dec a
  669.         ld (curcmdx),a
  670.         ret
  671.      
  672. editcmd_right
  673.         call cmdcalctextaddr ;hl=addr, a=curcmdx
  674.         inc (hl)
  675.         dec (hl)
  676.         ret z ;эхъєфр яЁртю, ёЄюшь эр ЄхЁьшэрЄюЁх
  677.         inc a
  678.         ld (curcmdx),a
  679.         ret
  680.      
  681. editcmd_pageDown
  682.         call count_filecursor_y
  683.         cp CONST_HGT_TABLE-1+firstfiley -1 ;???
  684.         jr c,editcmd_pageDown_nolastvisible ;not last visible file
  685.         call nv_getdirpos_hl
  686.         ld bc,CONST_HGT_TABLE
  687.         add hl,bc
  688. editcmd_pageDown_end_q        
  689.         call cpfiles_setdirpos ;hl=dirpos
  690.         ld bc,CONST_HGT_TABLE-1
  691.         xor a
  692.         sbc hl,bc
  693.         jr nc,$+4
  694.         ld h,a
  695.         ld l,a;0
  696.         jr editcmd_pageUpq
  697. editcmd_pageDown_nolastvisible
  698.         call nv_getdirscroll_bc
  699.         ld hl,CONST_HGT_TABLE-1
  700.         add hl,bc ;last visible file
  701.         call cpfiles_setdirpos
  702.         jp drawpanel_files      
  703.  
  704. editcmd_pageUp
  705.         call count_filecursor_y
  706.         cp firstfiley
  707.         jr nc,editcmd_pageDown_nofirstvisible ;not first visible file
  708.         call nv_getdirpos_hl
  709.         ld bc,CONST_HGT_TABLE-1
  710.         xor a
  711.         sbc hl,bc
  712.         jr nc,$+4
  713.         ld h,a
  714.         ld l,a;0
  715.         call nv_setdirpos_hl
  716. editcmd_pageUpq
  717.         ld b,h
  718.         ld c,l
  719.         call nv_setdirscroll_bc
  720.         jp drawpanel_files      
  721. editcmd_pageDown_nofirstvisible
  722.         call nv_getdirscroll_bc
  723.         ld h,b
  724.         ld l,c
  725.         call nv_setdirpos_hl
  726.         jp drawpanel_files    
  727.  
  728. editcmd_End
  729.         ld hl,-1 ;>=files
  730.         jp editcmd_pageDown_end_q
  731.  
  732. editcmd_Home
  733.         xor a
  734.         ld h,a
  735.         ld l,a;0
  736.         call nv_setdirpos_hl
  737.         ld b,h
  738.         ld c,l
  739.         call nv_setdirscroll_bc
  740.         jp drawpanel_files    
  741.  
  742.        
  743. editcmd_up
  744.          ld hl,controlloop_noprline
  745.          ex (sp),hl
  746.         call nv_getdirpos_hl
  747.         ld a,h
  748.         or l
  749.         ret z ;first file
  750.         dec hl
  751.         call nv_setdirpos_hl
  752.         call count_filecursor_y
  753.         cp firstfiley-2;or a
  754.         ret nz ;not above first visible file
  755.         call nv_getdirscroll_bc
  756.         dec bc
  757.         call nv_setdirscroll_bc
  758.          push bc
  759.         call nv_getpanelxy_de
  760.         inc d
  761.         push de
  762.         ld hl,CONST_HGT_TABLE*256 + 40
  763.         OS_SCROLLDOWN
  764.         pop de
  765.         inc e
  766.         call nv_setxy
  767.          pop hl ;file number
  768.         call getfcbaddrunderhl
  769.         jp prdirfile
  770.  
  771. editcmd_down
  772.          ld hl,controlloop_noprline
  773.          ex (sp),hl
  774.         call nv_getdirpos_hl
  775.         call nv_getpanelfiles_bc
  776.         inc hl
  777.         or a
  778.         sbc hl,bc
  779.         add hl,bc
  780.         ret z ;last file
  781.         call nv_setdirpos_hl
  782.         call count_filecursor_y
  783.         cp CONST_HGT_TABLE-1+firstfiley
  784.         ret c ;not last visible file
  785.         call nv_getdirscroll_bc
  786.         inc bc
  787.         call nv_setdirscroll_bc
  788.         ld hl,CONST_HGT_TABLE-1
  789.         add hl,bc
  790.          push hl
  791.         call nv_getpanelxy_de
  792.         inc d
  793.         push de
  794.         ld hl,CONST_HGT_TABLE*256 + 40
  795.         OS_SCROLLUP
  796.         pop de
  797.         ld a,d
  798.         add a,CONST_HGT_TABLE-1
  799.         ld d,a
  800.         inc e
  801.         call nv_setxy
  802.          pop hl ;file number
  803.         call getfcbaddrunderhl
  804.         jp prdirfile
  805.  
  806. editcmd_ss1
  807.         ld hl,comparefilename
  808.         jr editcmd_setsortmodehl
  809. editcmd_ss2
  810.         ld hl,compareext
  811.         jr editcmd_setsortmodehl
  812. editcmd_ss3
  813.         ld hl,comparesize
  814.         jr editcmd_setsortmodehl
  815. editcmd_ss4
  816.         ld hl,comparedate
  817.         jr editcmd_setsortmodehl
  818. editcmd_ss5
  819.         ld hl,compareempty
  820. editcmd_setsortmodehl
  821.         call ifcmdnonempty_typedigit
  822.         ld c,(ix+PANEL.dirsortproc)
  823.         ld b,(ix+PANEL.dirsortproc+1)
  824.         xor a
  825.         sbc hl,bc
  826.         add hl,bc
  827.         jr nz,editcmd_setsortmodehl_noold
  828.         ld a,(ix+PANEL.dirsortmode)
  829.         cpl
  830. editcmd_setsortmodehl_noold
  831.         ld (ix+PANEL.dirsortmode),a
  832.         ld (ix+PANEL.dirsortproc),l
  833.         ld (ix+PANEL.dirsortproc+1),h
  834.         jp editcmd_reprintcurpanel
  835.  
  836. editcmd_tab
  837.         call getanotherpanel_ix
  838.         ld (curpanel),ix
  839.         jp editcmd_readprompt_setendcmdx
  840.  
  841. editcmd_enter
  842.         ld a,(cmdbuf)
  843.         or a
  844.         jr nz,editcmd_enter_runcmd
  845.         call getfcbundercursor ;->fcb
  846.         ld a,(fcb+FCB_FATTRIB)
  847.         and FATTRIB_DIR;#10
  848.         jp z,editcmd_enter_run
  849.         call changedir_fromfcb
  850. editcmd_setpaneldirfromcurdir
  851.         ld hl,editcmd_reprintcurpanel
  852.         push hl
  853.         ld hl,(curpanel)
  854. editcmd_setpaneldirfromcurdir_panelhl
  855.         ld de,PANEL.dir
  856.         add hl,de
  857.         ex de,hl ;de=pointer to 64 byte (MAXPATH_sz!) buf
  858.         OS_GETPATH
  859.         ret
  860.  
  861. editcmd_enter_runcmd
  862. ;run "cmd <command to run>"
  863.         OS_SETSYSDRV ;TODO ърЄрыюу cmd
  864.         ld hl,cmd_filename
  865.         call copy_to_fcb_filename
  866.         ;---
  867.         ld de,#1800
  868.         call nv_setxy
  869.         ld a,#0d
  870.         PRCHAR
  871.         ld a,#0a
  872.         PRCHAR
  873.         ;---
  874.         ld hl,cmdbuf
  875.          ;jr $
  876.          ;call setcurpaneldir
  877.         call loadandrun ;nz=error, e=id
  878.         jp nz,execcmd_error
  879. ;ъюьрэфр scratch - Ёхры№эю cmd scratch, чряєёърхЄ scratch яю Їюэє ш т√їюфшЄ
  880.         ;YIELD ;фрЄ№ тЁхь  чрфрўх cmd чрїтрЄшЄ№ Їюъєё
  881.         ;ld e,-1
  882.         ;OS_SETGFX ;disable gfx, give focus
  883.         WAITPID
  884. execcmd_runfocusq
  885.         ;YIELD ;фрЄ№ тЁхь  ёшёЄхьх яхЁхфрЄ№ Їюъєё Ёрэфюьэющ чрфрўх
  886.         ;ld b,25
  887. ;execcmd_waitchildredraw0
  888.         ;push bc
  889.         ;YIELD ;фрЄ№ тЁхь  чрфрўх scratch чрїтрЄшЄ№ Їюъєё ш яхЁхЁшёютрЄ№ (эю чруЁєчшЄ№ ърЁЄшэъє ш яхЁхЁшёютрЄ№ эх єёяххЄ)
  890.         ;pop bc
  891.         ;djnz execcmd_waitchildredraw0
  892.         ;ld e,6 ;textmode
  893.         ;OS_SETGFX ;take focus (can be random after closing cmd)
  894.         ld hl,cmdbuf
  895.         ld (hl),0
  896.         jp editcmd_reprintall
  897.  
  898. editcmd_enter_run
  899.         call setpaneldir
  900.         ld hl,fcb_filename+8
  901.         ld a,(hl)
  902.         inc hl
  903.         ld c,(hl)
  904.         inc hl
  905.         ld b,(hl)
  906.         cp '$'
  907.         jp z,editcmd_enter_runfile_hobeta
  908.         or #20
  909.         cp 'c'
  910.         jr nz,editcmd_enter_runfile_nocom
  911.         ld a,c
  912.         or #20
  913.         cp 'o'
  914.         jr nz,editcmd_enter_runfile_nocom
  915.         ld a,b
  916.         or #20
  917.         cp 'm'
  918.         jr nz,editcmd_enter_runfile_nocom
  919. editcmd_enter_runfile_com
  920.         ld hl,cmdbuf
  921.         ld (hl),0
  922. ;hl=rest of command line
  923.         jp loadandrun ;nz=error, e=id
  924.  
  925. execcmd_error
  926.         jp execcmd_runfocusq;editcmd_reprintall
  927.        
  928. editcmd_enter_runfile_nocom
  929.         ld hl,runfile_nocomq
  930.         push hl
  931.         call makeprompt_filename
  932.        
  933.         call runfile_findhandler ;find fcb_filename ext (spoiled) in "nv.ext"
  934.         ret nz ;jp nz,execcmd_error
  935.  
  936.         ld de,cmdbuf
  937.         ld hl,fcb_filename
  938.         OS_PARSEFNAME ;de->hl
  939.        
  940.         OS_SETSYSDRV ;TODO фшЁхъЄюЁш  cmd
  941.         ld hl,cmdprompt
  942.         jp loadandrun ;nz=error, e=id
  943.  
  944. makeprompt_filename
  945.         call setpaneldir_makeprompt ;keeps ix
  946.         call getfcbundercursor ;->fcb
  947.         ld hl,cmdprompt
  948.         xor a
  949.         cpir
  950.         dec hl ;hl=рфЁхё ЄхЁьшэрЄюЁр
  951.         ld a,'/'
  952.         dec hl
  953.         cp (hl)
  954.         inc hl
  955.         jr z,$+4
  956.          ld (hl),a
  957.          inc hl
  958.         ex de,hl ;de=prompt = "d:/path/" схч ЄхЁьшэрЄюЁр
  959.         ld hl,fcb_filename
  960.         call cpmname_to_dotname ;prompt = "d:/path/filename"
  961.         ret
  962.        
  963. runfile_findhandler
  964. ;find fcb_filename ext (spoiled) in "nv.ext"
  965. ;out: nz=error, cmdbuf=handler
  966.         ld hl,fcb_filename+8
  967.         ld de,ext
  968.         ld b,3
  969. runfile_nocom_recodeext0
  970.         ld a,(hl)
  971.         or #20
  972.         ld (de),a
  973.         inc hl
  974.         inc de
  975.         djnz runfile_nocom_recodeext0
  976.         OS_SETSYSDRV ;TODO фшЁхъЄюЁш  nv
  977.         ld hl,ext_filename
  978.         call copy_to_fcb_filename
  979.         call nv_openfcb ;autopush nv_closefcb
  980.         ret nz ;error
  981.         ld iy,file_buf_end
  982. runfile_nocom_extloop
  983.         call checkoneext ;c=ю°шсъш, z=эхЄ ю°шсюъ
  984.         jr c,runfile_nocom_readerror
  985.         jr z,runfile_nocom_extok
  986.         call checkcomma
  987.         jr c,runfile_nocom_readerror
  988.         jr z,runfile_nocom_extloop
  989.         call skiptonextline
  990.         jr nz,runfile_nocom_extloop ;no EOF
  991. runfile_nocom_readerror
  992.         xor a
  993.         dec a
  994.         ret ;nz
  995. runfile_nocom_extok
  996.         call skiptocolon ;яЁющЄш яюёых ':'
  997.         ld hl,cmdbuf
  998.         call loadtoendline
  999.         xor a
  1000.         ret ;z
  1001.        
  1002. runfile_nocomq
  1003.         ld hl,cmdbuf
  1004.         ld (hl),0
  1005.         ld ix,(curpanel)
  1006. setpaneldir_makeprompt
  1007.         call setpaneldir ;keeps ix
  1008.         jp makeprompt ;-> prompt ;keeps ix
  1009.  
  1010.         macro READBYTE_A
  1011. ;out: z=EOF
  1012.         inc ly
  1013.         call m,readbyte_readbuf
  1014.         ld a,(iy)
  1015.         endm
  1016.  
  1017. checkoneext
  1018.         ld hl,ext
  1019.         ld bc,3*256
  1020. checkoneext0
  1021.         READBYTE_A
  1022.         ret z ;EOF
  1023.         cp #0a
  1024.         jr z,checkoneext0 ;skip LF
  1025.         or #20
  1026.         xor (hl)
  1027.         inc hl
  1028.         or c
  1029.         ld c,a
  1030.         djnz checkoneext0
  1031. ;c=ю°шсъш, z=эхЄ ю°шсюъ
  1032.         ret
  1033.  
  1034. skiptocolon
  1035.         READBYTE_A
  1036.         ret z ;EOF
  1037.         cp ':'
  1038.         jr nz,skiptocolon
  1039.         ret
  1040.  
  1041. checkcomma
  1042.         READBYTE_A
  1043.         cp ','
  1044.         ret ;TODO яЁютхЁшЄ№ EOF
  1045.        
  1046. loadtoendline
  1047. ;hl=buf
  1048.         READBYTE_A
  1049.         jr z,loadtoendlineq
  1050.         cp #0d
  1051.         jr z,loadtoendlineq
  1052.         ld (hl),a
  1053.         inc hl
  1054.         jr loadtoendline
  1055. loadtoendlineq
  1056.         ld (hl),0
  1057.         ret
  1058.  
  1059. skiptonextline
  1060.         READBYTE_A
  1061.         ret z ;EOF
  1062.         cp #0d
  1063.         jr nz,skiptonextline
  1064.         or a
  1065.         ret ;nz
  1066.  
  1067. readbyte_readbuf
  1068. ;out: z=EOF
  1069.         push bc
  1070.         push de
  1071.         push hl
  1072.         push ix
  1073.         ld de,file_buf
  1074.         push de
  1075.         OS_SETDTA ;set disk transfer address = de
  1076.         ld de,fcb
  1077.         OS_FREAD
  1078.         cp 128 ;128=no bytes read
  1079.         pop iy
  1080.         pop ix
  1081.         pop hl
  1082.         pop de
  1083.         pop bc
  1084.         ret
  1085.        
  1086.  
  1087. editcmd_enter_runfile_hobeta
  1088. hobetarunner=#4100
  1089.         ld a,(cmdpgscreen0_0)
  1090.         sub 4-1 ;ld a,#ff-4 ;pgkillable
  1091.         SETPG16K
  1092.  
  1093.         ld hl,washobetarunner
  1094.         ld de,hobetarunner
  1095.         ld bc,hobetarunner_sz
  1096.         ldir
  1097. cmdpgscreen0_0=$+1
  1098.         ld a,#ff-1
  1099.         SETPG32KLOW
  1100.         inc a ;ld a,#ff-0
  1101.         SETPG32KHIGH
  1102.  
  1103.         call loadhobeta
  1104.         ret nz ;error
  1105.         ld hl,#6000
  1106.         ld bc,(#6000-17+11) ;len
  1107.         add hl,bc
  1108.         dec hl ;hl=load end
  1109.         ex de,hl
  1110.         ld hl,(#6000-17+9) ;start
  1111.         ld (hobetarunner_jp),hl
  1112.         add hl,bc
  1113.         dec hl
  1114.         ex de,hl ;de=destination end
  1115.         lddr
  1116.         jp hobetarunner
  1117.  
  1118. loadhobeta        
  1119.         call nv_openfcb ;autopush nv_closefcb
  1120.         ret nz ;error
  1121.         ld de,#6000-17
  1122.         OS_SETDTA
  1123. editcmd_enter_runfile_hobeta_fcb0      
  1124.         ld de,fcb
  1125.         OS_FREAD
  1126.         or a
  1127.         jr z,editcmd_enter_runfile_hobeta_fcb0
  1128. ;editcmd_enter_runfile_hobeta_fcbq
  1129.         ret ;call nv_closefcb
  1130.  
  1131. loadandrun
  1132. ;hl=rest of command line
  1133. ;out: nz=error, e=id
  1134. ;load file in fcb from system current dir with parameters in tcmd, then set curpaneldir and run
  1135.         ld (loadandrun_restcmd),hl
  1136.         call nv_openfcb ;autopush nv_closefcb
  1137.         ret nz ;error
  1138.         ;set current drive and dir (will be copied into new app)
  1139.         call setcurpaneldir
  1140.        
  1141.         OS_NEWAPP
  1142.         or a
  1143.         ret nz ;error
  1144. ;dehl=эюьхЁр ёЄЁрэшЎ т 0000,4000,8000,c000 эютюую яЁшыюцхэш , b=id, a=error
  1145.         push bc ;b=id
  1146.         ld a,d
  1147.         SETPG32KHIGH
  1148.         push de
  1149.         push hl
  1150.         ld hl,fcb_filename
  1151.         ld de,#c000+COMMANDLINE
  1152.         call cpmname_to_dotname ;de єърч√трхЄ эр ЄхЁьшэрЄюЁ
  1153. loadandrun_restcmd=$+1
  1154.         ld hl,0
  1155.          ld a,(hl)
  1156.          or a
  1157.          jr z,loadandrun_noparams
  1158.         ld a,' '
  1159.         ld (de),a
  1160.         inc de
  1161. loadandrun_noparams
  1162.         ld bc,COMMANDLINE_sz;-tcmd_sz
  1163.         ldir ;copy command line ;ьюцхь чрыхчЄ№ чр #0100!
  1164.         xor a
  1165.         ld (#c000+COMMANDLINE+COMMANDLINE_sz-1),a
  1166.         pop hl
  1167.         pop de
  1168.  
  1169.         call readfile_pages_dehl
  1170.  
  1171.         pop de
  1172.         ld e,d ;e=id
  1173. ;run "cmd <commandline>"
  1174.         push de
  1175.         OS_RUNAPP
  1176.         pop de
  1177.         xor a
  1178.         ret ;z
  1179.  
  1180. editcmd_1
  1181.         call ifcmdnonempty_typedigit
  1182.         ld hl,leftpanel
  1183.         ld a,10
  1184.         jr editcmd_drvselector
  1185. editcmd_2
  1186.         call ifcmdnonempty_typedigit
  1187.         ld hl,rightpanel
  1188.         ld a,50
  1189. editcmd_drvselector
  1190.         ld (windrv),a ;x
  1191.         ld (curpanel),hl
  1192.         ld hl,editcmd_reprintcurpanel;editcmd_reprintall_onlyreadcurdir
  1193.         push hl
  1194.  
  1195. seldrv_redraw_mainloop
  1196.         ld hl,windrv
  1197. ;hl=window
  1198.         call prwindow_text ;de=YX of last line
  1199. seldrv_mainloop
  1200.         ld de,(windrv)
  1201. seldrv_cury=$+1
  1202.         ld a,0
  1203.         add a,d
  1204.         add a,2
  1205.         ld d,a
  1206.         inc e
  1207.         inc e
  1208.         inc e
  1209.         push de
  1210.         ld a,CURSORCOLOR;#38
  1211.         ld b,4
  1212.         call drawfilecursor_sizeb ;draw cursor
  1213.         YIELDGETKEYLOOP
  1214.         pop de
  1215.         push af
  1216.         ld a,COLOR
  1217.         ld b,4
  1218.         call drawfilecursor_sizeb ;remove cursor
  1219.         pop af
  1220.         cp key_redraw
  1221.         jr z,seldrv_redraw_mainloop
  1222.         ld hl,seldrv_cury
  1223.         cp key_enter
  1224.         jr z,seldrv_ok
  1225.         cp key_esc
  1226.         ret z
  1227.         ld bc,seldrv_mainloop
  1228.         push bc
  1229.         cp key_down
  1230.         jr z,seldrv_down
  1231.         cp key_up
  1232.         jr z,seldrv_up
  1233.         ret
  1234. seldrv_ok
  1235.         ld a,(hl);(seldrv_cury)
  1236.         add a,'A'
  1237.         ld ix,(curpanel)
  1238.         ld (ix+PANEL.dir),a
  1239.         ld (ix+PANEL.dir+1),':'
  1240.         ld (ix+PANEL.dir+2),'/'
  1241.         ld (ix+PANEL.dir+3),0
  1242.         ret
  1243. seldrv_down
  1244.         ld a,(hl)
  1245.         inc a
  1246.         cp 20;5 ;drives
  1247.         ret z
  1248.         ld (hl),a
  1249.         ret
  1250. seldrv_up
  1251.         ld a,(hl)
  1252.         or a
  1253.         ret z
  1254.         dec (hl)
  1255.         ret
  1256.  
  1257. editcmd_4
  1258.         call ifcmdnonempty_typedigit
  1259.         call getfcbundercursor ;->fcb
  1260.         ld a,(fcb+FCB_FATTRIB)
  1261.         and FATTRIB_DIR;#10
  1262.         ret nz
  1263.  
  1264.         ld hl,editcmd_reprintall_noreaddir
  1265.         push hl
  1266.  
  1267.         call makeprompt_filename
  1268.        
  1269.         ;call runfile_findhandler ;find fcb_filename ext (spoiled) in "nv.ext"
  1270.         ;ret nz ;jp nz,execcmd_error
  1271.  
  1272.         ;ld de,cmdbuf
  1273.         ;ld hl,fcb_filename
  1274.         ;OS_PARSEFNAME ;de->hl
  1275.        
  1276.         OS_SETSYSDRV ;TODO фшЁхъЄюЁш  texted
  1277.        
  1278.         ld hl,texted_filename
  1279.         call copy_to_fcb_filename
  1280.        
  1281.         ;ld hl,cmdbuf
  1282.         ;ld (hl),0
  1283.         ld hl,cmdprompt
  1284. ;load file in fcb from system current dir with parameters in tcmd, then set curpaneldir and run
  1285.         jp loadandrun ;nz=error, e=id
  1286.        
  1287. editcmd_9
  1288.         call ifcmdnonempty_typedigit
  1289.         ret
  1290.  
  1291. editcmd_reprintall_keepcursor
  1292.         call readpanels_reprint_keepcursor
  1293.         jp editcmd_readprompt_setendcmdx
  1294.  
  1295. editcmd_reprintcurdir
  1296.         ld hl,leftpanel+PANEL.dir
  1297.         ld de,rightpanel+PANEL.dir
  1298.         call strcp
  1299.         jr nz,editcmd_reprintcurpanel
  1300. editcmd_reprintall
  1301.         call readpanels_reprint
  1302.         jp editcmd_readprompt_setendcmdx
  1303. editcmd_reprintcurpanel
  1304.         ld ix,(curpanel)
  1305.         call readdir
  1306.         call sortfiles
  1307.         call drawpanel_with_files
  1308.         jp editcmd_readprompt_setendcmdx
  1309. editcmd_reprintall_noreaddir
  1310.         ld e,COLOR
  1311.         OS_CLS
  1312.         call printhint
  1313.         ld ix,leftpanel
  1314.         call drawpanel_with_files
  1315.         ld ix,rightpanel
  1316.         jp drawpanel_with_files
  1317. ;editcmd_reprintall_onlyreadcurdir
  1318. ;       ld e,COLOR
  1319. ;       OS_CLS
  1320. ;       call printhint
  1321. ;       call getanotherpanel_ix
  1322. ;       call drawpanel_with_files
  1323. ;       jp editcmd_reprintcurpanel
  1324.        
  1325. editcmd_invfiles
  1326. ;ix=curpanel
  1327.         ld hl,changemark_hl
  1328.         call processfiles
  1329.         jp drawpanel_with_files
  1330.  
  1331. editcmd_6 ;ren
  1332.         call ifcmdnonempty_typedigit
  1333.         ld hl,editcmd_reprintall
  1334.         push hl
  1335.         call setpaneldir
  1336.         call getfcbundercursor
  1337.         ld hl,fcb_filename
  1338.         ld de,tnewfilename
  1339.         push de
  1340.         call cpmname_to_dotname
  1341.         pop hl
  1342.         ld de,filenametext
  1343.         ld bc,12
  1344.         ldir
  1345.  
  1346.         ld hl,winrename
  1347.         call prwindow_edit ;CY=OK
  1348.         ret nc ;cancel
  1349. ;хёыш т шьхэш хёЄ№ ёшьтюы√ :,/,\, Єю т√щЄш ё ю°шсъющ
  1350.         ld hl,tnewfilename
  1351. editcmd_ren_checkname0
  1352.         ld a,(hl)
  1353.         or a
  1354.         jr z,editcmd_ren_checknameq
  1355.         inc hl
  1356.         cp ':'
  1357.         ret z ;error
  1358.         cp '/'
  1359.         ret z ;error
  1360.         cp 0x5c;'\\'
  1361.         ret z ;error
  1362.         jr editcmd_ren_checkname0
  1363. editcmd_ren_checknameq
  1364.         ld de,filenametext
  1365.         ld hl,tnewfilename
  1366.         OS_RENAME
  1367.         ;todo error
  1368.         ret
  1369.  
  1370. editcmd_7 ;mkdir
  1371.         call ifcmdnonempty_typedigit
  1372.         ld hl,editcmd_reprintall
  1373.         push hl
  1374.         call setpaneldir
  1375.  
  1376.         ld hl,winmkdir
  1377.         call prwindow_edit ;CY=OK, de=filename
  1378.         ret nc ;cancel
  1379.         OS_MKDIR
  1380.         ;TODO error
  1381.         ret
  1382.  
  1383. editcmd_8 ;del
  1384.         call ifcmdnonempty_typedigit
  1385.         ;ld ix,(curpanel)
  1386.         call getmarkedfiles;countmarkedfiles
  1387.         ld a,h
  1388.         or l
  1389.         jr nz,editcmd_8_0      
  1390.         call getfcbaddrundercursor;hl=fcb
  1391.         call isthisdotdir_hl
  1392.         ret z ;"." or ".."
  1393.         call changemark_hl ;ld (hl),1
  1394. editcmd_8_0  
  1395.         ld e,COLOR_RED
  1396.         call nv_setcolor
  1397.         ld hl,windel
  1398.         call prwindow_waitkey ;CY=OK
  1399.         jp nc,editcmd_reprintall_noreaddir
  1400.         ld hl,editcmd_reprintall
  1401.         push hl
  1402.         ld hl,proc_del_file
  1403.         ld ix,(curpanel)
  1404.         jp processfiles
  1405.        
  1406. proc_del_file
  1407.         bit 0,(hl)
  1408.         ret z
  1409.         call getfcbfromhl
  1410.         call setcurpaneldir
  1411.         ld a,(fcb+FCB_FATTRIB)
  1412.         and FATTRIB_DIR;#10 ;dir?
  1413.         jr nz,editcmd_deldir
  1414.         ld de,fcb
  1415.         OS_FDEL
  1416.         ret
  1417. editcmd_deldir
  1418.         call changedir_fromfcb
  1419. ;check if dir is empty (contains only "." and "..")
  1420.         ld de,fcb2
  1421.         OS_SETDTA ;set disk transfer address = de
  1422.         ;call makeemptymask
  1423.         ld de,fcbmask
  1424.         OS_FSEARCHFIRST
  1425.         or a
  1426.         ret nz
  1427.         ld de,fcb2
  1428.         OS_SETDTA ;set disk transfer address = de
  1429.         ld de,fcbmask
  1430.         OS_FSEARCHNEXT
  1431.         or a
  1432.         ret nz
  1433.         ld de,fcb2
  1434.         OS_SETDTA ;set disk transfer address = de
  1435.         ld de,fcbmask
  1436.         OS_FSEARCHNEXT
  1437.         or a
  1438.         ret z ;at least 3 files = there is a real file
  1439.         call setcurpaneldir
  1440.         ld de,fcb
  1441.         OS_FDEL
  1442.         ret
  1443.  
  1444. editcmd_5 ;copy
  1445.         call ifcmdnonempty_typedigit
  1446.         ;ld ix,(curpanel)
  1447.         call getmarkedfiles;countmarkedfiles
  1448.         ld a,h
  1449.         or l
  1450.         jr nz,editcmd_5_0      
  1451.         call getfcbaddrundercursor;hl=fcb
  1452.         call isthisdotdir_hl
  1453.         ret z ;"." or ".."
  1454.         call changemark_hl ;ld (hl),1
  1455. editcmd_5_0        
  1456.         ld hl,wincopy
  1457.         call prwindow_waitkey ;CY=OK
  1458.         jp nc,editcmd_reprintall_noreaddir
  1459.  
  1460.         ld hl,editcmd_reprintall
  1461.         push hl;═┼ ╥╨╬├└╥▄ !!
  1462.  
  1463.         ld hl,0
  1464.         ld (filescopied),hl
  1465.        
  1466.         ld de,PROGRESBARWINXY
  1467.         ld bc,PROGRESBARWINHGTWID
  1468.         call prwin
  1469.         ld hl,proceditcmd_copy
  1470.         ld ix,(curpanel)
  1471.         jp processfiles
  1472.  
  1473. proceditcmd_copy
  1474.         bit 0,(hl)
  1475.         ret z
  1476.         call getfcbfromhl
  1477.         call setcurpaneldir
  1478.  
  1479.         if 1==1
  1480.  
  1481.         ld hl,proceditcmd_copy_q
  1482.         push hl
  1483.  
  1484.         ld de,filenametext;wordbuf ;de=drive/path/file
  1485.          push de
  1486.          ld hl,fcb_filename
  1487.          call cpmname_to_dotname
  1488.          pop de
  1489.         OS_OPENHANDLE
  1490.         or a
  1491.         ret nz ;jp nz,cmd_error_wrongfile
  1492.         ld a,b
  1493.         ld (cmd_copy_close_file1_handle),a
  1494.         ld hl,cmd_copy_close_file1
  1495.         push hl
  1496.  
  1497.         ld de,filenametext
  1498.         OS_GETFILETIME ;ix=date, hl=time
  1499.         ld (proceditcmd_copy_time),hl
  1500.         ld (proceditcmd_copy_date),ix
  1501.  
  1502.         call setanotherpaneldir
  1503.        
  1504.         ld de,filenametext;swordbuf2 ;de=drive/path/file
  1505.         OS_CREATEHANDLE
  1506.         or a
  1507.         ret nz ;jp nz,cmd_error_cant_copy
  1508.         ld a,b
  1509.         ld (cmd_copy_close_file2_handle),a
  1510.         ld hl,cmd_copy_close_file2
  1511.         push hl
  1512. cmd_copy0
  1513.         ld hl,copybuf_sz
  1514.         ld de,copybuf
  1515.         ld a,(cmd_copy_close_file1_handle)
  1516.         ld b,a
  1517. ;B = file handle, DE = Buffer address, HL = Number of bytes to read
  1518.         push de
  1519.         OS_READHANDLE
  1520. ;HL = Number of bytes actually read, A=error
  1521.         pop de
  1522.         ld a,h
  1523.         or l
  1524.         ret z ;0 bytes remain
  1525.         ld a,(cmd_copy_close_file2_handle)
  1526.         ld b,a
  1527. ;B = file handle, DE = Buffer address, HL = Number of bytes to write
  1528.         OS_WRITEHANDLE
  1529.         jr cmd_copy0
  1530.        
  1531. cmd_copy_close_file1
  1532. cmd_copy_close_file1_handle=$+1
  1533.         ld b,0
  1534.         OS_CLOSEHANDLE
  1535.         ret
  1536.        
  1537. cmd_copy_close_file2
  1538. cmd_copy_close_file2_handle=$+1
  1539.         ld b,0
  1540.         OS_CLOSEHANDLE
  1541. proceditcmd_copy_time=$+1
  1542.         ld hl,0
  1543. proceditcmd_copy_date=$+2
  1544.         ld ix,0
  1545.         ld de,filenametext
  1546.         OS_SETFILETIME
  1547.         ret
  1548.        
  1549.         else ;CP/M-like functions
  1550.        
  1551.         ld hl,fcb_filename
  1552.         ld de,fcb2_filename
  1553.         call copy_to_defcb_filename
  1554.         call nv_openfcb ;autopush nv_closefcb
  1555.         ret nz ;jp nz,editcmd_copy_error_wrongfile
  1556.         call setanotherpaneldir
  1557.         call nv_createfcb2 ;autopush nv_closefcb2
  1558.         ret nz ;jp nz,editcmd_copy_error_cant_copy
  1559. editcmd_copy0
  1560.         ld de,copybuf
  1561.         OS_SETDTA
  1562.         ld de,fcb
  1563.         OS_FREAD
  1564.         xor 128
  1565.         jp z,proceditcmd_copy_q ;яЁюўшЄрыш 0 срщЄ - єёях°э√щ т√їюф
  1566.          ld l,a
  1567.          ld h,0
  1568.          push hl
  1569.         ld de,copybuf
  1570.         OS_SETDTA
  1571.          pop hl
  1572.         ld de,fcb2
  1573.         OS_FWRITE_NBYTES
  1574.         or a
  1575.         jr z,editcmd_copy0
  1576. ;can't write
  1577.         ;ret
  1578.        
  1579.         endif
  1580.        
  1581. proceditcmd_copy_q
  1582. filescopied=$+1
  1583.         ld hl,0
  1584.         inc hl
  1585.         ld (filescopied),hl
  1586.         ;ld bc,32
  1587.         ;ex de,hl ;ld de,(percentcopyfile)
  1588.         ;call mulbcde_ahl
  1589.         add hl,hl
  1590.         add hl,hl
  1591.         add hl,hl
  1592.         add hl,hl
  1593.         add hl,hl
  1594.         push hl
  1595.         ld ix,(curpanel)
  1596. ;ix = panel
  1597.         call getmarkedfiles ;out: hl'hl = files
  1598.         ex de,hl ;de=files
  1599.         pop hl ;filescopied*32
  1600.         call divhlde
  1601.         ld a,l
  1602.         or a
  1603.         ret z
  1604.         ld b,a
  1605.         ld de,PROGRESBARWINXY+#0102
  1606. proceditcmd_copy_q_progress0      
  1607.         push de
  1608.         push bc
  1609.         OS_SETXY
  1610.         ld e,#ff
  1611.         OS_PRATTR
  1612.         pop bc
  1613.         pop de
  1614.         inc e
  1615.         djnz proceditcmd_copy_q_progress0
  1616.         ret
  1617.        
  1618. mulbcde_ahl
  1619. ;bc * de Ёхчєы№ЄрЄ т ahl
  1620.         xor a
  1621.         ld h,a
  1622.         ld l,a
  1623.         dup 8
  1624.         rlc b
  1625.         jr nc,$+5 ; c - с√ы яхЁхэюё, nc - эх с√ыю яхЁхэюёр    
  1626.         add hl,de
  1627.         adc a,0
  1628.         add hl,hl
  1629.         rla
  1630.         edup
  1631.         dup 7
  1632.         rlc c
  1633.         jr nc,$+5 ; c - с√ы яхЁхэюё, nc - эх с√ыю яхЁхэюёр    
  1634.         add hl,de
  1635.         adc a,0
  1636.         add hl,hl
  1637.         rla
  1638.         edup
  1639.         rlc c
  1640.         ret nc
  1641.         add hl,de
  1642.         adc a,0
  1643.         ret
  1644.        
  1645. ;hl / de Ёхчєы№ЄрЄ т hl
  1646. divhlde
  1647.         ld c,h
  1648.         ld a,l
  1649.         ld hl,0
  1650.         ld b,16
  1651. ;don't mind carry
  1652. _DIV0.
  1653. ;shift left hlca
  1654.         rla
  1655.         rl c
  1656.         adc hl,hl
  1657. ;no carry
  1658. ;try sub
  1659.         sbc hl,de
  1660.         jr nc,$+3
  1661.         add hl,de
  1662. ;carry = inverted bit of result
  1663.         djnz _DIV0.
  1664.         rla
  1665.         cpl
  1666.         ld l,a
  1667.         ld a,c
  1668.         rla
  1669.         cpl
  1670.         ld h,a
  1671.         ret
  1672.        
  1673. editcmd_0
  1674. editcmd_quit
  1675.         ld e,COLOR_RED
  1676.         call nv_setcolor
  1677.         ld hl,winquit
  1678.         call prwindow_waitkey ;CY=OK
  1679.         jp nc,editcmd_reprintall
  1680.         QUIT
  1681.  
  1682. ifcmdnonempty_typedigit
  1683. ;keeps ix
  1684.         ld c,a
  1685.         ld a,(cmdbuf)
  1686.         or a
  1687.         ld a,c
  1688.         ret z ;cmd is empty
  1689.          pop bc ;skip return to editcmdN
  1690.         jp editcmd_typein
  1691.  
  1692. windrv
  1693.         dw 0x0103 ;de=yx
  1694.         dw 256*(3+20)+9;0x0809 ;bc=hgt,wid
  1695.         db "Drive",0
  1696.         db 3 ;next line
  1697.         db "  A:",0,3
  1698.         db "  B:",0,3
  1699.         db "  C:",0,3
  1700.         db "  D:",0,3
  1701.         db "  E:",0,3
  1702.         db "  F:",0,3
  1703.         db "  G:",0,3
  1704.         db "  H:",0,3
  1705.         db "  I:",0,3
  1706.         db "  J:",0,3
  1707.         db "  K:",0,3
  1708.         db "  L:",0,3
  1709.         db "  M:",0,3
  1710.         db "  N:",0,3
  1711.         db "  O:",0,3
  1712.         db "  P:",0,3
  1713.         db "  Q:",0,3
  1714.         db "  R:",0,3
  1715.         db "  S:",0,3
  1716.         db "  T:",0,3
  1717.         db 0 ;end of window
  1718.        
  1719. winmkdir
  1720.         dw 0x0a0f ;de=yx
  1721.         dw 0x0520 ;bc=hgt,wid
  1722.         db "Create new directory:",0
  1723.         db 3 ;next line
  1724.         db 2 ;print outer text
  1725.         dw tnewfilename
  1726.         db 0 ;end of window
  1727.  
  1728. winrename
  1729.         dw 0x0a0f ;de=yx
  1730.         dw 0x0520 ;bc=hgt,wid
  1731.         db "Rename file:",0
  1732.         db 3 ;next line
  1733.         db 2 ;print outer text
  1734.         dw tnewfilename
  1735.         db 0 ;end of window
  1736.        
  1737. tnewfilename
  1738.         db "12345678.123",0
  1739. tnewfilename_sz=12
  1740.  
  1741. winquit
  1742.         dw 0x0a1f ;de=yx
  1743.         dw 0x0515 ;bc=hgt,wid
  1744.         db 3 ;next line
  1745.         db "Quit Nedovigator?",0
  1746.         db 0 ;end of window
  1747.  
  1748. windel
  1749.         dw 0x0919 ;de=yx
  1750.         dw 0x051f ;bc=hgt,wid
  1751.         db 3 ;next line
  1752.         db "Delete ",0
  1753.         db 1 ;nfiles
  1754.         db " file(s)?",0
  1755.         db 0 ;end of window
  1756.  
  1757. wincopy
  1758.         dw 0x0919 ;de=yx
  1759.         dw 0x051f ;bc=hgt,wid
  1760.         db 3 ;next line
  1761.         db "Copy ",0
  1762.         db 1 ;nfiles
  1763.         db " file(s)?",0
  1764.         db 0 ;end of window
  1765.        
  1766.        
  1767. tdotdot
  1768.         dw "..",0
  1769.  
  1770.  
  1771.         STRUCT PANEL
  1772. ;sorterjp       BYTE ;TODO remove
  1773. ;sorter         WORD ;TODO remove
  1774. xy              WORD
  1775. ;pg             BYTE ;TODO remove
  1776. pgadd           BYTE ;0/DIRPAGES
  1777. catbuf          WORD ;TODO remove
  1778. poipg           BYTE
  1779. pointers        WORD ;TODO remove
  1780. totalsize       DWORD
  1781. files           WORD ;visible files
  1782. filesdirs       WORD ;files+dirs (no ".", "..")
  1783. markedfiles     WORD
  1784. markedsize      DWORD
  1785. dirpos          WORD
  1786. dirscroll       WORD
  1787. dirviewmode     BYTE
  1788. dirsortproc     WORD
  1789. dirsortmode     BYTE
  1790. dir             BLOCK MAXPATH_sz
  1791.         ENDS
  1792. ;PANEL_sz=13+MAXPATH_sz
  1793.  
  1794. leftpanel PANEL
  1795. rightpanel PANEL
  1796.  
  1797. oldtimer
  1798.         dw 0
  1799.        
  1800. ;<0x4000 for hobeta
  1801. fcb
  1802.         ds FCB_sz
  1803. fcb_filename=fcb+FCB_FNAME        
  1804.  
  1805. fcbmask
  1806.         db 0
  1807.         db "???????????"
  1808.         ds FCB_sz-11-1
  1809. fcbmask_filename=fcbmask+FCB_FNAME        
  1810.  
  1811. fcb2
  1812.         ds FCB_sz
  1813. fcb2_filename=fcb2+FCB_FNAME        
  1814.  
  1815. cmd_filename
  1816.         db "cmd     com"
  1817. ext_filename
  1818.         db "nv      ext"
  1819. texted_filename
  1820.         db "texted  com"
  1821.  
  1822. filenametext ;for change dir, rename
  1823.         db "prince  .   ",0 ;ds 64
  1824.  
  1825. ext
  1826.         ds 3 ;TODO юс·хфшэшЄ№ ё filenametext
  1827.        
  1828. copybuf=0x4000 ;эхы№ч  0xc000 - яютхЁї ъръющ-эшсєф№ фшЁхъЄюЁшш (р юэр шёяюы№чєхЄё  яЁш ъюяшЁютрэшш) ;0x8000 ьюцэю Єюы№ъю яюёых т√ёЄртыхэш  ёЄЁрэшЎ√ Єрь
  1829.         ;ds 4096;128
  1830. copybuf_sz=0x4000;$-copybuf
  1831.  
  1832.         align 256
  1833. file_buf
  1834.         ds 128
  1835. file_buf_end=$-1
  1836.  
  1837. washobetarunner
  1838. ;pgsys=pagexor-10
  1839. ;pgfatfs=pagexor-9
  1840. ;pgtrdosfs=pagexor-8
  1841. ;pgkillable=pagexor-4 ;т 128K ярь Єш, Є.ъ. ьюцэю яюЁЄшЄ№
  1842.         disp hobetarunner ;in pgkillable
  1843. ;$c loaded in pages 4,1,0
  1844. ;only ATM2 ports here!
  1845.         di
  1846.         ld a,#7f-5
  1847.         ld bc,#bff7
  1848.         out (c),a
  1849.         ld a,#7f-4
  1850.         ld bc,#fff7
  1851.         out (c),a
  1852.         ld hl,#c000
  1853.         ld de,#8000
  1854.         ld bc,#4000
  1855.         ldir ;pg4 -> pg5
  1856.         ld a,#7f-8;pgtrdosfs
  1857.         ld bc,#fff7
  1858.         out (c),a
  1859.         ld hl,#1c00+#c000
  1860.         ld de,#1c00+#8000
  1861.         ld bc,#400
  1862.         ldir ;restore sysvars
  1863.         ld a,#7f-2
  1864.         ld bc,#bff7
  1865.         out (c),a
  1866.         ld a,#7f-1
  1867.         ld bc,#fff7
  1868.         out (c),a
  1869.         ld hl,#c000
  1870.         ld de,#8000
  1871.         ld bc,#4000
  1872.         ldir ;pg1 -> pg2
  1873.         ld a,#7f-0+#80
  1874.         ld bc,#fff7
  1875.         out (c),a
  1876.         ld a,#00
  1877.         ld bc,#7ffd
  1878.         out (c),a
  1879.         ld a,#81 ;128 basic (with 7ffd)
  1880.         ld bc,#3ff7
  1881.         out (c),a
  1882.         ld a,#7f-5
  1883.         ld bc,#7ff7
  1884.         out (c),a
  1885. ;128: pages DOS,5,2,0(7ffd)
  1886.         ld a,#10
  1887.         ld bc,#7ffd
  1888.         out (c),a
  1889. ;48: pages 2,4,4,4
  1890.         ld a,#7f-5
  1891.         ld bc,#7ff7
  1892.         out (c),a
  1893.         ld a,#7f-2
  1894.         ld bc,#bff7
  1895.         out (c),a
  1896.         ld a,#7f-0+#80
  1897.         ld bc,#fff7
  1898.         out (c),a
  1899.         ld a,#83 ;48 basic switchable to DOS
  1900.         ld bc,#3ff7
  1901.         out (c),a
  1902. ;48: pages DOS,5,2,0(7ffd)
  1903.        
  1904.         LD A,%10101011 ;6912
  1905.         ld bc,#ff77 ;shadow ports off, palette off
  1906.         out (c),a
  1907.         ld sp,#6000
  1908.         ei
  1909. hobetarunner_jp=$+1
  1910.         jp #6000
  1911.         ent
  1912. hobetarunner_sz=$-washobetarunner
  1913.  
  1914. wordfiles
  1915.         db " files",0
  1916. wordbytes
  1917.         db " bytes",0
  1918.  
  1919. ;HS_elpg ;2 pages
  1920. ;        ds 2
  1921.         align 256
  1922. HS_strpg
  1923.         ds DIRPAGES*2+2 ; яю 1 срщЄє эр ьрЁъхЁ√ "0"
  1924.        
  1925.         include "nvsort.asm"
  1926.         include "heapsort.asm"
  1927.  
  1928.         include "nvjptbl.asm"
  1929.         include "nvunit.asm"
  1930.         include "nveditln.asm"
  1931.         include "nvview.asm"
  1932.         include "nvhexed.asm"
  1933.  
  1934.         include "../_sdk/prdword.asm"
  1935.         include "../_sdk/loadpage.asm"
  1936.         include "../_sdk/cmdpr.asm"
  1937.        
  1938. cmd_end
  1939.  
  1940.         display "nv size ",/d,cmd_end-cmd_begin," bytes"
  1941.  
  1942.         savebin "nv.com",cmd_begin,cmd_end-cmd_begin
  1943.        
  1944.         ;LABELSLIST "..\us\user.l"
  1945.