Subversion Repositories NedoOS

Rev

Rev 668 | Rev 702 | 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. MAXCMDSZ=COMMANDLINE_sz-1-4 ;not counting terminator (-4 for "cmd ")
  7.  
  8. _COLOR=0x0007;0x07
  9. _PANELCOLOR=0x040f;0x4f
  10. _PANELDIRCOLOR=0x040f;0x4f
  11. _PANELEXECOLOR=0x040a;0x4c
  12. _PANELFILECOLOR=0x0407;0b00001111;0xf
  13. _PANELSELECTCOLOR=0x040b;0x4e
  14. _CURSORCOLOR=0x0600;0x28
  15. _FILECURSORCOLOR=0x0600;0x28
  16. _COLOR_RED=0x0107;0x17
  17. _COLOR_DIALOG=0x0300;0700 не видно курсор;0x38
  18. _HINTCOLOR1=0x0007;7
  19. _HINTCOLOR0=0x0600;5*8
  20.  
  21. ;8192fcbs*32bytes*2panels = 32 pages
  22. DIRPAGES=16
  23. FIRSTDIRPAGEFORRIGHTPANEL=128
  24.  
  25. catbuf_left=0xc000
  26. catbuf_right=0xc000
  27. FILES_POINTERS_left=0xc000;0x3700
  28. FILES_POINTERS_right=0xc000;0x3b00
  29.  
  30. txtscrhgt=25
  31. txtscrwid=80
  32. CMDLINEY=23;24
  33. CONST_HGT_TABLE=21
  34. PANELDIRCHARS37=37
  35. left_panel_xy=0x0000
  36. right_panel_xy=0x0028
  37. firstfiley=left_panel_xy/256 + 1
  38. PROGRESBARWINXY=0x0f16 ;0x0919 + 051f ;de=yx
  39. PROGRESBARWINHGTWID=0x0324 ;0x051f ;bc=hgt,wid
  40.  
  41.         macro PGW2elpg0
  42.         ;LD A,(HS_elpg)
  43.         ld a,(ix+PANEL.poipg)
  44.         SETPG32KLOW
  45.         endm
  46.        
  47.         macro PGW2elpg
  48.                 ;LD      A,H
  49.                 ;RLCA
  50.                 ;RLCA
  51.                 ;AND     1
  52.         ;LD A,(HS_elpg)
  53.         ;jr z,$+5
  54.         ;LD A,(HS_elpg+1)
  55.         ld a,(ix+PANEL.poipg)
  56.         SETPG32KLOW
  57.         endm
  58.  
  59.         macro PGW2strpg
  60.         ld ($+4),a
  61.         LD A,(HS_strpg)
  62.         SETPG32KLOW
  63.         endm
  64.  
  65.         macro PGW3elpg
  66.                 ;LD      A,H
  67.                 ;RLCA
  68.                 ;RLCA
  69.                 ;AND     1
  70.         ;LD A,(HS_elpg)
  71.         ;jr z,$+5
  72.         ;LD A,(HS_elpg+1)
  73.         ld a,(ix+PANEL.poipg)
  74.         SETPG32KHIGH
  75.         endm
  76.  
  77.         macro PGW3strpg
  78.         ld ($+4),a
  79.         LD A,(HS_strpg)
  80.         SETPG32KHIGH
  81.         endm
  82.  
  83.         org PROGSTART
  84. cmd_begin
  85.         ld sp,0x4000
  86.         call initstdio
  87.  
  88.         ;ld e,6 ;textmode
  89.         ;OS_SETGFX
  90.        
  91.         ;call nv_copyscreen0to1
  92.         ;GET_KEY ;съедаем key_redraw
  93.  
  94.         CLS_ ;print 25 lines of spaces except one
  95.        
  96. ;        ld de,nvpal
  97. ;        OS_SETPAL
  98.        
  99.         OS_GETMAINPAGES
  100. ;dehl=номера страниц в 0000,4000(copybuf),8000,c000*(dirbuf)
  101.         push hl
  102.         ld e,h
  103.         OS_DELPAGE
  104.         pop hl
  105.         ld e,l
  106.         OS_DELPAGE
  107.  
  108.         OS_NEWPAGE ; for dircopy batch
  109.         ld hl,dirpg
  110.         ld (hl),e
  111.  
  112.         OS_NEWPAGE ;выделяем по одной страничке для каталогов
  113.         ld hl,HS_strpg
  114.         ld (hl),e
  115.         inc hl
  116.         ld (hl),0 ;маркер конца списка страниц
  117.         OS_NEWPAGE ;выделяем по одной страничке для длинных имён
  118.         ld hl,HS_strpg+DIRPAGES+1
  119.         ld (hl),e
  120.         inc hl
  121.         ld (hl),0 ;маркер конца списка страниц        
  122.  
  123.         OS_NEWPAGE
  124.         ld hl,HS_strpg+FIRSTDIRPAGEFORRIGHTPANEL;DIRPAGES+1
  125.         ld (hl),e
  126.         inc hl
  127.         ld (hl),0 ;маркер конца списка страниц
  128.         OS_NEWPAGE ;выделяем по одной страничке для длинных имён
  129.         ld hl,HS_strpg+FIRSTDIRPAGEFORRIGHTPANEL+DIRPAGES+1
  130.         ld (hl),e
  131.         inc hl
  132.         ld (hl),0 ;маркер конца списка страниц        
  133.        
  134.         ld hl,left_panel_xy
  135.         ld (leftpanel+PANEL.xy),hl
  136.         OS_NEWPAGE
  137.         ld a,e
  138.         ld (leftpanel+PANEL.poipg),a
  139.         ld hl,FILES_POINTERS_left
  140.         ld (leftpanel+PANEL.pointers),hl
  141.         ld hl,catbuf_left
  142.         ld (leftpanel+PANEL.catbuf),hl
  143.         xor a
  144.         ld (leftpanel+PANEL.pgadd),a
  145.  
  146.         ld hl,right_panel_xy
  147.         ld (rightpanel+PANEL.xy),hl
  148.         OS_NEWPAGE
  149.         ld a,e
  150.         ld (rightpanel+PANEL.poipg),a
  151.         ld hl,FILES_POINTERS_right
  152.         ld (rightpanel+PANEL.pointers),hl
  153.         ld hl,catbuf_right
  154.         ld (rightpanel+PANEL.catbuf),hl
  155.         ld a,FIRSTDIRPAGEFORRIGHTPANEL;DIRPAGES+1
  156.         ld (leftpanel+PANEL.pgadd),a
  157.  
  158.         ld hl,compareext
  159.         ld (leftpanel+PANEL.dirsortproc),hl
  160.         ld (rightpanel+PANEL.dirsortproc),hl
  161.  
  162.         ;ld a,0xc3
  163.         ;ld (leftpanel+PANEL.sorterjp),a
  164.         ;ld (rightpanel+PANEL.sorterjp),a
  165.         ;ld hl,sorter1
  166.         ;ld (leftpanel+PANEL.sorter),hl
  167.         ;ld hl,sorter2
  168.         ;ld (rightpanel+PANEL.sorter),hl
  169.        
  170.         ld hl,rightpanel
  171.         call editcmd_setpaneldirfromcurdir_panelhl
  172.         ld hl,leftpanel
  173.         call editcmd_setpaneldirfromcurdir_panelhl
  174.  
  175.         call readpanels_reprint
  176.  
  177. mainloop
  178.         call editcmd_readprompt_setendcmdx
  179.         call controlloop
  180.         jp mainloop
  181.  
  182. strdelpages ;удаляем str страницы. IX - панель. первую страничку не удаляем
  183.         ld hl, HS_strpg
  184.         ld e, (ix+PANEL.pgadd)
  185.         ld d,0; (ix+PANEL.pgadd+1)
  186.         add hl,de
  187.         ld (ix+PANEL.curpgfcbpoi),l
  188.         ld (ix+PANEL.curpgfcbpoi+1),h
  189.         call strdelpages_next
  190. strdelpages_lname
  191.         ld hl, HS_strpg+DIRPAGES+1 ;HS_lnamepg
  192.         ld e, (ix+PANEL.pgadd)
  193.         ld d,0; (ix+PANEL.pgadd+1)
  194.         add hl,de
  195.         ld (ix+PANEL.curpglnamepoi),l
  196.         ld (ix+PANEL.curpglnamepoi+1),h
  197.         ;jp strdelpages_next
  198.  
  199. strdelpages_next
  200.         inc hl
  201.         ld a, (hl)
  202.         or a
  203.         ret z
  204.         ld e, a
  205.         push hl
  206.         push ix
  207.         OS_DELPAGE
  208.         pop ix
  209.         pop hl
  210.         xor a
  211.         ld (hl), a
  212.         jr strdelpages_next
  213.  
  214. lnamenewpage ;выделяем новую страничку IX - панель, [E номер странички в HS_strpg]
  215.         push hl
  216.         push de
  217.         push ix
  218.         OS_NEWPAGE
  219.         pop ix
  220.         ld l,(ix+PANEL.curpglnamepoi)
  221.         ld h,(ix+PANEL.curpglnamepoi+1)
  222.         ld (hl),e
  223.         inc hl
  224.         ld (hl),0 ; маркер конца списка
  225.         ld (ix+PANEL.curpglnamepoi),l
  226.         ld (ix+PANEL.curpglnamepoi+1),h
  227.         pop de
  228.         pop hl
  229.         ret
  230.        
  231. strnewpage ;выделяем новую страничку IX - панель, [E номер странички в HS_strpg]
  232.         push hl
  233.         push de
  234.         push ix
  235.         OS_NEWPAGE
  236.         pop ix
  237.         ld l,(ix+PANEL.curpgfcbpoi)
  238.         ld h,(ix+PANEL.curpgfcbpoi+1)
  239.         ld (hl),e
  240.         inc hl
  241.         ld (hl),0 ; маркер конца списка
  242.         ld (ix+PANEL.curpgfcbpoi),l
  243.         ld (ix+PANEL.curpgfcbpoi+1),h
  244.         pop de
  245.         pop hl
  246.         ret
  247.  
  248. printhint
  249.         ld de,24*256
  250.         call nv_setxy
  251.         ld hl,thint
  252. prhint0
  253.         ld a,(hl)
  254.         inc hl
  255.         or a
  256.         ret z
  257.         cp '{'
  258.         jr z,prhint_color0
  259.         cp '}'
  260.         jr z,prhint_color1
  261.         push hl
  262.         PRCHAR_
  263.         pop hl
  264.         jr prhint0
  265. prhint_color0
  266.         ld de,_HINTCOLOR1;7
  267.         jr prhint_color
  268. prhint_color1
  269.         ld de,_HINTCOLOR0;5*8
  270. prhint_color
  271.         call nv_setcolor
  272.         jr prhint0
  273. thint
  274.         db "{1}Drive { 2}Find  { 3}View  { 4}Edit  { 5}Copy  { 6}Rename{ 7}MkDir { 8}Delete{ 9}InsNam{ 0}Quit  ",0
  275.  
  276. readpanels_reprint
  277.         call printhint
  278.         ld ix,leftpanel
  279.         call readsortdrawpanel
  280.         ld ix,rightpanel
  281. readsortdrawpanel
  282.         call readdir
  283.         call sortfiles
  284.         jp drawpanel_with_files
  285.  
  286. readpanels_reprint_keepcursor
  287.         call printhint
  288.         ld ix,leftpanel
  289.         call readsortdrawpanel_keepcursor
  290.         ld ix,rightpanel
  291. readsortdrawpanel_keepcursor
  292.         call readdir_keepcursor
  293.         call sortfiles
  294.         jp drawpanel_with_files
  295.  
  296. drawpanel_head ;ix=panel
  297.         call nv_getpanelxy_de
  298.         inc e
  299.         inc e
  300.         call nv_setxy
  301.         push ix
  302.         or a
  303.         ld de,(curpanel)
  304.         pop hl
  305.         push hl
  306.         sbc hl,de
  307.         pop hl
  308.         jr nz,drawpanel_dir
  309.         ld de,_FILECURSORCOLOR
  310.         jr drawpanel_dir0
  311. drawpanel_dir
  312.         ld de,_PANELCOLOR
  313. drawpanel_dir0
  314.         call nv_setcolor
  315.         ld de,PANEL.dir
  316.         add hl,de
  317.         push hl
  318.         ld c,0
  319.         call panelprtext
  320.         call setpanelcolor
  321.         pop hl
  322.         call strlen ;hl=len
  323.         ex de,hl
  324.         ld hl,PANELDIRCHARS37
  325.         or a
  326.         sbc hl,de
  327.         ret c
  328.         ret z
  329.         ld de,tdoublehoriz
  330.         jp sendchars
  331.  
  332. drawpanel_with_files
  333. ;ix=panel
  334.         call setpanelcolor
  335.         call nv_getpanelxy_de
  336.         bit 0,(ix+PANEL.drawtableunneeded)
  337.         set 0,(ix+PANEL.drawtableunneeded)
  338.         call z,prtable ;keeps ix
  339.  
  340.         call setpaneldir_makeprompt ;keeps ix
  341.         ld de,_COLOR
  342.         call nv_setcolor
  343.  
  344.         call drawpanel_head
  345.         call drawpanelfilesandsize
  346.  
  347. drawpanel_files
  348. ;ix=panel
  349.         call setpanelcolor
  350.         ld l,(ix+PANEL.files)
  351.         ld h,(ix+PANEL.files+1)
  352.         call nv_getdirscroll_bc
  353.         push bc ;dirscroll
  354.         or a
  355.         sbc hl,bc ;hl=number of files in panel - scroll in panel
  356.         ld bc,CONST_HGT_TABLE
  357.         call minhl_bc_tobc ;bc = min(CONST_HGT_TABLE, number of files in panel - scroll in panel)
  358.         pop de ;dirscroll
  359.         call gotofilepointer_numberde ;hl=file pointer
  360.         call nv_getpanelxy_de
  361.         inc d
  362.         inc e
  363.         ld b,c ;files to show
  364.         ld a,b
  365.         or a
  366.         jr z,premptyfiles
  367. prNfiles0
  368.         push bc
  369.         push de
  370.         call nv_setxy ;keeps de,hl
  371.         ;ld e,(hl)
  372.         ;inc hl
  373.         ;ld d,(hl)
  374.         ;inc hl
  375.         call getfilepointer_de_fromhl ;uses ix
  376.         push hl
  377.         ex de,hl
  378.         push ix
  379.         call prdirfile
  380.         pop ix
  381.         pop hl
  382.         pop de
  383.         pop bc
  384.         inc d
  385.         djnz prNfiles0
  386. premptyfiles
  387. ;c=files to show
  388.         ld a,CONST_HGT_TABLE
  389.         sub c
  390.         ret z
  391.         push ix
  392.         ld b,a
  393. premptyfiles0
  394.         push bc
  395.         push de
  396.         call nv_setxy ;keeps de,hl
  397.         ;ld e,(hl)
  398.         ;inc hl
  399.         ;ld d,(hl)
  400.         ;inc hl
  401.         ;call getfilepointer_de_fromhl
  402.         ;push hl
  403.         ;ex de,hl
  404.         ;push ix
  405.         ld de,emptyfilelinebuf
  406.         ld hl,emptyfilelinebuf_sz
  407.         call sendchars
  408.         ;pop ix
  409.         ;pop hl
  410.         pop de
  411.         pop bc
  412.         inc d
  413.         djnz premptyfiles0
  414.         pop ix
  415.         ret
  416.  
  417. fileiscom ;fcb ;output: z=com
  418.         ld a,(fcb+9);(ix+9)
  419.          or 0x20
  420.          cp 'c'
  421.         jr nz,fileiscom_ix_nocom_a
  422.         ld a,(fcb+10);(ix+10)
  423.          or 0x20
  424.          cp 'o'
  425.         jr nz,fileiscom_ix_nocom
  426.         ld a,(fcb+11);(ix+11)
  427.          or 0x20
  428.          cp 'm'
  429.         ret z
  430. fileiscom_ix_nocom
  431.         ld a,(fcb+9);(ix+9)
  432. fileiscom_ix_nocom_a
  433.         cp '$'
  434.         ret nz ;jr nz,fileiscom_ix_nohobeta
  435.         ld a,(fcb+10);(ix+10)
  436.          or 0x20
  437.          cp 'c'
  438.         ret
  439.  
  440. colorfile
  441. ;ix=fcb
  442. ;out: de=color
  443.         ld a,(fcb);(ix) ;mark
  444.         rra
  445.         ld de,_PANELSELECTCOLOR
  446.         ret c
  447.         ld a,(fcb+FCB_FATTRIB);(ix+FCB_FATTRIB)
  448.         and FATTRIB_DIR
  449.         ld de,_PANELDIRCOLOR
  450.         ret nz
  451.         call fileiscom
  452.         ld de,_PANELEXECOLOR
  453.         ret z
  454.         ld de,_PANELFILECOLOR
  455.         ret
  456.  
  457. prdirfile
  458. ;hl=fcb
  459.         call getfcbfromhl
  460.         call colorfile ;de=color
  461. prdirfile_ix_decolor
  462.         call nv_setcolor
  463.         ld a,(fcb+FCB_EXTENTNUMBERLO)
  464.         SETPG32KHIGH
  465.         ld hl,(fcb+FCB_EXTENTNUMBERHI)
  466.         ld de,filelinebuf
  467.         ld b,25
  468. prdirfile_fn0
  469.         ld a,(hl)
  470.         or a
  471.         jr z,prdirfile_fn0q
  472.         ld (de),a
  473.         inc hl
  474.         inc de
  475.         djnz prdirfile_fn0
  476.         jr prdirfile_fn0qq
  477. prdirfile_fn0q
  478.         ld a,' '
  479. prdirfile_fn1
  480.         ld (de),a
  481.         inc de
  482.         djnz prdirfile_fn1        
  483. prdirfile_fn0qq
  484.         ld de,filelinebuf+15
  485.         exx
  486.         ld hl,(fcb+FCB_FSIZE+2)
  487.         exx
  488.         ld hl,(fcb+FCB_FSIZE)
  489.         ld a,(fcb+FCB_FATTRIB)
  490.         and FATTRIB_DIR
  491.         call z,prdword_de
  492.          ld de,filelinebuf+28 ;skip "cursor right" over | (which has different color)
  493.         ld hl,(fcb+FCB_FDATE)
  494.         push hl
  495.         ld a,l
  496.         and 0x1f
  497.         call prNNcmd ;day
  498.         pop hl
  499.         push hl
  500.         add hl,hl
  501.         add hl,hl
  502.         add hl,hl
  503.         ld a,h
  504.         and 0x0f
  505.         add a,a
  506.         ld l,a
  507.         ld h,0
  508.         ld bc,tmonth-2
  509.         add hl,bc
  510.         ldi
  511.         ldi
  512.         pop hl
  513.         ld a,h
  514.         srl a
  515.         sub 20
  516.         jr nc,$+4
  517.         add a,100 ;XX century
  518.         call prNNcmd ;year        
  519.          inc de
  520.         ld hl,(fcb+FCB_FTIME)
  521.         push hl
  522.         ld a,h
  523.         rra
  524.         rra
  525.         rra
  526.         and 0x1f
  527.         call prNNcmd ;hour
  528.          inc de ;skip ':'
  529.         pop hl
  530.         add hl,hl
  531.         add hl,hl
  532.         add hl,hl
  533.         ld a,h
  534.         and 0x3f
  535.         call prNNcmd ;minute
  536.         ld de,filelinebuf
  537.         ld hl,filelinebuf_sz
  538.         jp sendchars
  539. prNNcmd
  540. ;a=NN
  541. ;de=buf
  542.         ld bc,10+(256*('0'-1))
  543.         sub c
  544.         inc b
  545.         jr nc,$-2
  546.          ex de,hl
  547.          ld (hl),b
  548.          ex de,hl
  549.          inc de
  550.         add a,'0'+10
  551.          ld (de),a
  552.          inc de
  553.         ret
  554.  
  555. filelinebuf
  556.         db "filename.ext   1234567890",0x1b,"[CDDmmYY hh:mm"
  557. filelinebuf_sz=$-filelinebuf
  558. emptyfilelinebuf
  559.         db "                         ",0x1b,"[C            "
  560. emptyfilelinebuf_sz=$-emptyfilelinebuf
  561. tmonth ;month=0 is at tmonth-2 (spaces)
  562.         ;db "jan"
  563.         ;db "feb"
  564.         ;db "mar"
  565.         ;db "apr"
  566.         ;db "may"
  567.         ;db "jun"
  568.         ;db "jul"
  569.         ;db "aug"
  570.         ;db "sep"
  571.         ;db "oct"
  572.         ;db "nov"
  573.         ;db "dec"
  574.         db "ja","fe","mr","ap","my","jn","jl","au","se","oc","no","de"
  575.        
  576. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  577.  
  578. readdir
  579. ;ix=panel
  580.         call readdir_keepcursor
  581. nv_setcursor_zero
  582.         ld bc,0
  583.         call nv_setdirscroll_bc
  584.         jp nv_setdirpos_zero
  585.  
  586. nv_setcursor_hl
  587.         call nv_setdirpos_hl
  588.         ld bc,CONST_HGT_TABLE*2/3;CONST_HGT_TABLE-1
  589.         xor a
  590.         sbc hl,bc
  591.         jr nc,$+4
  592.          ld h,a
  593.          ld l,a
  594.         ld b,h
  595.         ld c,l
  596.         jp nv_setdirscroll_bc
  597.  
  598. readdir_keepcursor
  599. ;ix=panel
  600.         xor a
  601.         ld (ix+PANEL.totalsize),a
  602.         ld (ix+PANEL.totalsize+1),a
  603.         ld (ix+PANEL.totalsize+2),a
  604.         ld (ix+PANEL.totalsize+3),a
  605.         ld (ix+PANEL.markedsize),a
  606.         ld (ix+PANEL.markedsize+1),a
  607.         ld (ix+PANEL.markedsize+2),a
  608.         ld (ix+PANEL.markedsize+3),a
  609.         ld (ix+PANEL.markedfiles),a
  610.         ld (ix+PANEL.markedfiles+1),a
  611.  
  612.         push ix
  613.         ;call setpaneldir
  614.         call strdelpages
  615.         ;ld de,fcb
  616.         ;OS_SETDTA ;set disk transfer address = de
  617.         ;call makeemptymask
  618.         ;ld de,fcbmask
  619.         ;OS_FSEARCHFIRST
  620.         pop hl ;get IX
  621.         push hl
  622.         ld de,PANEL.dir
  623.         add hl,de
  624.         ex de,hl ;de=path
  625.         OS_CHDIR
  626.         ld de,emptypath
  627.         OS_OPENDIR
  628.         pop ix
  629.         or a
  630.  
  631.         ld hl,0xc000
  632.         ld (loaddir_curlnameaddr),hl
  633.  
  634.         ld e,(ix+PANEL.catbuf)     ;00
  635.         ld d,(ix+PANEL.catbuf+1)   ;c0
  636.         ld l,(ix+PANEL.pointers)   ;00  номер страницы
  637.         ld h,(ix+PANEL.pointers+1) ;c0  номер файла
  638.         ld bc,0 ;nfiles
  639.         jp nz,loaddir_error
  640.                 ;ld a,(fcb+1)
  641.                 ;cp '.'
  642.                 ;jp z,loaddir_onedot
  643. loaddir0
  644.         call loaddir_filinfo
  645.         jp c,loaddirq
  646.         jr z,loaddir0
  647.        
  648.         push bc
  649.  
  650.         push de
  651.         push hl
  652.        
  653.         ;ld l,(ix+PANEL.curpgfcbpoi)
  654.         ;ld h,(ix+PANEL.curpgfcbpoi+1)
  655.         ;ld a,(hl)
  656.         ;SETPG32KHIGH
  657.         ld a,e
  658.         and 31
  659.         add a,(ix+PANEL.pgadd)
  660.         PGW3strpg
  661.         ld a,e
  662.         and 0xe0 ;отбрасываем младшую часть (<32) с номером страницы, остается только номер файла
  663.         ld e,a
  664.         xor a
  665.         ld (de),a ;mark
  666.         inc de
  667.         ;ld hl,fcb+1
  668.         ;ld bc,31;FCB_sz
  669.         ;ldir ; копируем fcb в catbuf
  670.         ld hl,filinfo+FILINFO_FNAME
  671.         ;ld bc,8
  672.         ;ldir
  673.         ;inc hl
  674.         ;ld c,3
  675.         ;ldir
  676.         ex de,hl
  677.         push hl
  678.         call dotname_to_cpmname ;de -> hl
  679.         pop hl
  680.         ld bc,11
  681.         add hl,bc
  682.         ex de,hl
  683.         ld (loaddir_fcb_lnamepgpoi),de
  684.         inc de ;extent number - NU
  685.         ld hl,filinfo+FILINFO_FATTRIB
  686.         ldi
  687.         ld (loaddir_fcb_lnameaddrpoi),de
  688.         inc de ;record count - NU
  689.         inc de ;extent number hi - NU
  690.         ld hl,filinfo+FILINFO_FSIZE
  691.         ;TODO через процедуру
  692.         push hl
  693.         push ix
  694.         ld a,(hl)
  695.         add a,(ix+PANEL.totalsize)
  696.         ld (ix+PANEL.totalsize),a
  697.         inc hl
  698.         ld a,(hl)
  699.         adc a,(ix+PANEL.totalsize+1)
  700.         ld (ix+PANEL.totalsize+1),a
  701.         inc hl
  702.         ld a,(hl)
  703.         adc a,(ix+PANEL.totalsize+2)
  704.         ld (ix+PANEL.totalsize+2),a
  705.         inc hl
  706.         ld a,(hl)
  707.         adc a,(ix+PANEL.totalsize+3)
  708.         ld (ix+PANEL.totalsize+3),a
  709.         pop ix
  710.         pop hl
  711.         ld bc,4
  712.         ldir
  713.         ld hl,filinfo+FILINFO_FTIME
  714.         ld c,2
  715.         ldir
  716.         ex de,hl
  717.         ld c,8
  718.         add hl,bc
  719.         ex de,hl
  720.         ld hl,filinfo+FILINFO_FDATE
  721.         ld c,2
  722.         ldir
  723.  
  724. loaddir_curlnameaddr=$+1
  725.         ld de,0
  726. ;если нету места под длинное имя в текущей странице, заказать новую и сдвинуть указатель
  727.         ld a,d
  728.         inc a
  729.         jr nz,loaddirlname_nonewpg
  730.         ld a,e
  731.         cp -DIRMAXFILENAME64
  732.         jr c,loaddirlname_nonewpg
  733.         call lnamenewpage
  734.         ld de,0xc000        
  735. loaddirlname_nonewpg
  736. ;записать текущий указатель на длинное имя в fcb
  737. ;записать длинное имя по указателю
  738.         ld l,(ix+PANEL.curpglnamepoi)
  739.         ld h,(ix+PANEL.curpglnamepoi+1)
  740.         ld a,(hl)
  741. loaddir_fcb_lnamepgpoi=$+1
  742.         ld (0),a
  743. loaddir_fcb_lnameaddrpoi=$+2
  744.         ld (0),de
  745.         SETPG32KHIGH
  746.         ld hl,filinfo+FILINFO_LNAME
  747.         ld a,(hl)
  748.         or a
  749.         jr nz,$+5
  750.         ld hl,filinfo+FILINFO_FNAME
  751.         call strcopy ;out: hl,de after terminator
  752.         ld (loaddir_curlnameaddr),de
  753.        
  754.         pop hl
  755.         pop de
  756.         call putfilepointer_de_tohl ; возвращает в верхнее окно страницу poipg и в pointers заносит de
  757.         ex de,hl
  758.         ld bc,32
  759.         add hl,bc
  760.         ex hl,de ; увеличили на 32 catbuf
  761.         jr nc,nonewpg ; всё ещё умещаемся в страницу
  762.         inc de ;next page de
  763.         call strnewpage
  764.         set 7,d
  765.         set 6,d
  766. nonewpg:
  767.        
  768.         pop bc
  769.         inc bc ;nfiles
  770.         bit 5,b;1,b ;страничка pgtemp закончилась? max 512 файлов по 32 байта
  771.         jp z,loaddir0
  772. loaddir_error
  773. loaddirq
  774. ;bc=nfiles
  775.         ld (ix+PANEL.files),c
  776.         ld (ix+PANEL.files+1),b
  777.  
  778.         call countfiles
  779.         ld (ix+PANEL.filesdirs),l
  780.         ld (ix+PANEL.filesdirs+1),h
  781.        
  782.         ex de,hl
  783.         call nv_getdirpos_hl
  784.         or a
  785.         sbc hl,de ;dirpos<files?
  786.         ret c ;OK
  787.         jp nv_setcursor_zero
  788.  
  789. loaddir_filinfo
  790.         push bc
  791.         push de
  792.         push hl        
  793.         ld de,filinfo
  794.         OS_READDIR
  795.         pop hl
  796.         pop de
  797.         pop bc
  798.         or a
  799.          scf
  800.         ret nz ;CY
  801.         ld a,(filinfo+FILINFO_FNAME)
  802.         or a
  803.          scf
  804.         ret z ;CY
  805.         ld a,(filinfo+FILINFO_FNAME+1)
  806.         or a
  807.         ret nz ;not one dot ;NC
  808.         ld a,(filinfo+FILINFO_FNAME)
  809.         cp '.'
  810.         ret z ;Z,NC ;one dot
  811.         or a ;NZ,NC
  812.         ret
  813.  
  814. controlloop
  815.         call fixscroll_prcmd
  816. controlloop_noprline
  817.         ld hl,controlloop
  818.         push hl
  819.         ld ix,(curpanel)
  820.         ld a,(ix+PANEL.files)
  821.         or (ix+PANEL.files+1)
  822.         call z,nv_setdirpos_zero ;can't move cursor if 0 files
  823.         ;ld e,CURSORCOLOR;#38
  824.         ;OS_PRATTR ;draw cursor
  825.         ld hl,_FILECURSORCOLOR
  826.         call prfilecursor_reprintfile
  827.         call cmdcalccurxy
  828.         call nv_setxy
  829.         ;SETX_ ;force reprint cursor
  830. controlloop_nokey
  831.         call yieldgetkeyloop ;YIELDGETKEYLOOP
  832.          or a
  833.          jr z,controlloop_nokey ;TODO handle mouse events
  834.         push af
  835.         ld ix,(curpanel)
  836.         call getfcbaddrundercursor
  837.         push hl
  838.         pop ix
  839.         call colorfile
  840.         ex de,hl ;hl=color
  841.         call prfilecursor_reprintfile ;remove file cursor
  842.         ;call cmdcalccurxy
  843.         ;call nv_setxy
  844.         ;ld e,COLOR;7
  845.         ;OS_PRATTR ;remove cursor
  846.          ld de,_COLOR
  847.          call nv_setcolor ;even if we didn't reprint command line, draw windows with its color
  848.         pop af
  849.         ld hl,tnvcmds
  850.         ld bc,nnvcmds
  851.         cpir
  852.         jp nz,editcmd_keyfail
  853. ;bc=nnvcmds-(#команды+1) = 0..(nnvcmds-1)
  854.         add hl,bc
  855. ;hl=tnvcmds+nnvcmds
  856.         add hl,bc
  857.         add hl,bc
  858. ;hl=tnvcmds+nnvcmds+ 2*(nnvcmds-(#команды+1))
  859.         ld c,(hl)
  860.         inc hl
  861.         ld h,(hl)
  862.         ld l,c
  863.         push hl ;jump addr
  864.         ld hl,cmdbuf
  865.         ld ix,(curpanel)
  866.         ret
  867. editcmd_keyfail
  868.         cp 0x20
  869.         ret c ;прочие системные кнопки не нужны
  870. editcmd_typein
  871. ;keeps ix
  872.         ld e,a
  873.         ld hl,cmdbuf
  874.         call strlen ;hl=length
  875.         ld bc,MAXCMDSZ
  876.         or a
  877.         sbc hl,bc
  878.         ret nc ;некуда вводить
  879.         call cmdcalctextaddr ;hl=addr, a=curcmdx
  880.         inc a
  881.         ld (curcmdx),a
  882.         jp strinsch
  883.  
  884. editcmd_space
  885.         ld a,(cmdbuf)
  886.         or a
  887.         ld a,' '
  888.         jr nz,editcmd_typein
  889.         call getfcbaddrundercursor;hl=addr fcb ;ix=curpanel
  890.         call isthisdotdir_hl
  891.         call nz,changemark_hl
  892.         push hl
  893.         call setfilecursorxy
  894.         pop hl
  895.         call prdirfile
  896.         ld ix,(curpanel)
  897.         call drawpanelfilesandsize
  898.         jp editcmd_down
  899.        
  900. editcmd_backspace
  901.         call cmdcalctextaddr ;hl=addr, a=curcmdx
  902.         or a
  903.         jr z,editcmddirback;editcmdok ;нечего удалять
  904.         dec a
  905.         ld (curcmdx),a
  906.         jp strdelch
  907. editcmd_del
  908.         call cmdcalctextaddr ;hl=addr, a=curcmdx
  909.         or a
  910.         ret z ;нечего удалять вправо
  911.         inc hl
  912.         jp strdelch
  913.  
  914. ;hl = poi to filename in string
  915. ;out: de = after last slash
  916. findlastslash.
  917. nfopenfnslash.
  918.         ld d,h
  919.         ld e,l ;de = after last slash
  920. nfopenfnslash0.
  921.         ld a,[hl]
  922.         inc hl
  923.         or a
  924.         ret z
  925.         cp '/'
  926.         jr nz,nfopenfnslash0.
  927.         jr nfopenfnslash.
  928.        
  929. editcmddirback
  930. editcmddirback_go
  931.         call setpaneldir
  932.         ld de,tdotdot
  933.         OS_CHDIR
  934. ;взять имя директории из последнего элемента paneldir
  935.         ld hl,(curpanel)
  936.         push hl
  937.         ld de,PANEL.dir
  938.         add hl,de
  939.         call findlastslash. ;out: de = after last slash
  940.         ex de,hl
  941.         ld de,filenametext
  942.         call strcopy
  943.         pop hl ;ld hl,(curpanel)
  944.         push hl
  945.         call editcmd_setpaneldirfromcurdir_panelhl
  946.         pop ix ;ld ix,(curpanel)
  947.         call readdir
  948.         call sortfiles
  949. ;найти имя директории
  950.         ;ld ix,(curpanel)
  951.         call getfiles
  952.         ld b,h
  953.         ld c,l
  954.         ld hl,0
  955. editcmddirbackfind0
  956.         push bc
  957.         push hl
  958.         call getfcbaddrunderhl
  959.         ld de,FCB_EXTENTNUMBERLO
  960.         add hl,de
  961.         ld a,(hl)
  962.         inc hl
  963.         inc hl
  964.         ld e,(hl)
  965.         inc hl
  966.         ld d,(hl)
  967.         SETPG32KHIGH
  968.         ld hl,filenametext
  969.         call strcp
  970.         pop hl
  971.         pop bc
  972.         jr z,editcmddirback_ok
  973.         cpi
  974.         jp pe,editcmddirbackfind0
  975.         ld h,b
  976.         ld l,c ;error!!! not found!!!
  977. editcmddirback_ok
  978. ;hl=номер элемента директории
  979.         call nv_setcursor_hl ;установить на него курсор
  980.        
  981.         call drawpanel_with_files
  982.         jp editcmd_readprompt_setendcmdx
  983.  
  984. editcmd_left
  985.         ld a,(curcmdx)
  986.         or a
  987.         ret z ;некуда влево
  988.         dec a
  989.         ld (curcmdx),a
  990.         ret
  991.      
  992. editcmd_right
  993.         call cmdcalctextaddr ;hl=addr, a=curcmdx
  994.         inc (hl)
  995.         dec (hl)
  996.         ret z ;некуда вправо, стоим на терминаторе
  997.         inc a
  998.         ld (curcmdx),a
  999.         ret
  1000.      
  1001. editcmd_pageDown
  1002.         call count_filecursor_y
  1003.         cp CONST_HGT_TABLE-1+firstfiley -1 ;???
  1004.         jr c,editcmd_pageDown_nolastvisible ;not last visible file
  1005.         call nv_getdirpos_hl
  1006.         ld bc,CONST_HGT_TABLE
  1007.         add hl,bc
  1008. editcmd_pageDown_end_q        
  1009.         call cpfiles_setdirpos ;hl=dirpos
  1010.         ld bc,CONST_HGT_TABLE-1
  1011.         xor a
  1012.         sbc hl,bc
  1013.         jr nc,$+4
  1014.         ld h,a
  1015.         ld l,a;0
  1016.         jr editcmd_pageUpq
  1017. editcmd_pageDown_nolastvisible
  1018.         call nv_getdirscroll_bc
  1019.         ld hl,CONST_HGT_TABLE-1
  1020.         add hl,bc ;last visible file
  1021.         call cpfiles_setdirpos
  1022. editcmd_clearkbddrawpanel
  1023.         call drawpanel_files
  1024.         jp clear_keyboardbuffer ;TODO почему не работает?
  1025.  
  1026. editcmd_pageUp
  1027.         call count_filecursor_y
  1028.         cp firstfiley
  1029.         jr nc,editcmd_pageDown_nofirstvisible ;not first visible file
  1030.         call nv_getdirpos_hl
  1031.         ld bc,CONST_HGT_TABLE-1
  1032.         xor a
  1033.         sbc hl,bc
  1034.         jr nc,$+4
  1035.         ld h,a
  1036.         ld l,a;0
  1037.         call nv_setdirpos_hl
  1038. editcmd_pageUpq
  1039.         ld b,h
  1040.         ld c,l
  1041.         call nv_setdirscroll_bc
  1042.         jr editcmd_clearkbddrawpanel ;jp drawpanel_files      
  1043. editcmd_pageDown_nofirstvisible
  1044.         call nv_getdirscroll_bc
  1045.         ld h,b
  1046.         ld l,c
  1047.         call nv_setdirpos_hl
  1048.         jr editcmd_clearkbddrawpanel ;jp drawpanel_files      
  1049.  
  1050. editcmd_End
  1051.         ld hl,-1 ;>=files
  1052.         jp editcmd_pageDown_end_q
  1053.  
  1054. editcmd_Home
  1055.         xor a
  1056.         ld h,a
  1057.         ld l,a;0
  1058.         call nv_setdirpos_hl
  1059.         jr editcmd_pageUpq
  1060.  
  1061. editcmd_up
  1062.          ld hl,controlloop_noprline
  1063.          ex (sp),hl
  1064.         call nv_getdirpos_hl
  1065.         ld a,h
  1066.         or l
  1067.         ret z ;first file
  1068.         dec hl
  1069.         call nv_setdirpos_hl
  1070.         call count_filecursor_y
  1071.         cp firstfiley-2;or a
  1072.         ret nz ;not above first visible file
  1073.         call nv_getdirscroll_bc
  1074.         dec bc
  1075.         call nv_setdirscroll_bc
  1076.          push bc
  1077.         call nv_getpanelxy_de
  1078.         inc d
  1079.         push de
  1080.         ld hl,CONST_HGT_TABLE*256 + 40
  1081.         call scrolldown ;OS_SCROLLDOWN
  1082.         pop de
  1083.         inc e
  1084.         call nv_setxy
  1085.          pop hl ;file number
  1086.         call getfcbaddrunderhl
  1087.         jp prdirfile
  1088.  
  1089. editcmd_down
  1090.          ld hl,controlloop_noprline
  1091.          ex (sp),hl
  1092.         call nv_getdirpos_hl
  1093.         call nv_getpanelfiles_bc
  1094.         inc hl
  1095.         or a
  1096.         sbc hl,bc
  1097.         add hl,bc
  1098.         ret z ;last file
  1099.         call nv_setdirpos_hl
  1100.         call count_filecursor_y
  1101.         cp CONST_HGT_TABLE-1+firstfiley
  1102.         ret c ;not last visible file
  1103.         call nv_getdirscroll_bc
  1104.         inc bc
  1105.         call nv_setdirscroll_bc
  1106.         ld hl,CONST_HGT_TABLE-1
  1107.         add hl,bc
  1108.         push hl
  1109.         call nv_getpanelxy_de
  1110.         inc d
  1111.         push de
  1112.         ld hl,CONST_HGT_TABLE*256 + 40
  1113.         call scrollup ;OS_SCROLLUP
  1114.         pop de
  1115.         ld a,d
  1116.         add a,CONST_HGT_TABLE-1
  1117.         ld d,a
  1118.         inc e
  1119.         call nv_setxy
  1120.          pop hl ;file number
  1121.         call getfcbaddrunderhl
  1122.         jp prdirfile
  1123.  
  1124. editcmd_ss1
  1125.         ld hl,comparefilename
  1126.         jr editcmd_setsortmodehl
  1127. editcmd_ss2
  1128.         ld hl,compareext
  1129.         jr editcmd_setsortmodehl
  1130. editcmd_ss3
  1131.         ld hl,comparesize
  1132.         jr editcmd_setsortmodehl
  1133. editcmd_ss4
  1134.         ld hl,comparedate
  1135.         jr editcmd_setsortmodehl
  1136. editcmd_ss5
  1137.         ld hl,compareempty
  1138. editcmd_setsortmodehl
  1139.         call ifcmdnonempty_typedigit
  1140.         ld c,(ix+PANEL.dirsortproc)
  1141.         ld b,(ix+PANEL.dirsortproc+1)
  1142.         xor a
  1143.         sbc hl,bc
  1144.         add hl,bc
  1145.         jr nz,editcmd_setsortmodehl_noold
  1146.         ld a,(ix+PANEL.dirsortmode)
  1147.         cpl
  1148. editcmd_setsortmodehl_noold
  1149.         ld (ix+PANEL.dirsortmode),a
  1150.         ld (ix+PANEL.dirsortproc),l
  1151.         ld (ix+PANEL.dirsortproc+1),h
  1152.         jp editcmd_reprintcurpanel
  1153.  
  1154. editcmd_tab
  1155.         push ix
  1156.         call getanotherpanel_ix
  1157.         ld (curpanel),ix
  1158.         call drawpanel_head
  1159.         pop ix
  1160.         call drawpanel_head ;inactive panel
  1161.         jp editcmd_readprompt_setendcmdx
  1162.  
  1163. editcmd_enter
  1164.         ld a,(cmdbuf)
  1165.         or a
  1166.         jr nz,editcmd_enter_runcmd
  1167.         call getfcbundercursor ;->fcb
  1168.         ld a,(fcb+FCB_FATTRIB)
  1169.         and FATTRIB_DIR;#10
  1170.         jp z,editcmd_enter_run
  1171.          ld hl,fcb+FCB_FNAME
  1172.          ld a,(hl)
  1173.          cp '.'
  1174.          jr nz,editcmd_enter_nodotdot
  1175.          inc hl
  1176.          ld a,(hl)
  1177.          cp '.'
  1178.          jp z,editcmddirback_go
  1179. editcmd_enter_nodotdot
  1180.         call changedir_fromfcb
  1181. ;editcmd_setpaneldirfromcurdir
  1182.         ld hl,editcmd_reprintcurpanel
  1183.         push hl
  1184.         ld hl,(curpanel)
  1185. editcmd_setpaneldirfromcurdir_panelhl
  1186.         ld de,PANEL.dir
  1187.         add hl,de
  1188.         ex de,hl ;de=pointer to 64 byte (MAXPATH_sz!) buf
  1189.         OS_GETPATH
  1190.          jp clear_keyboardbuffer
  1191.         ;ret
  1192.  
  1193. editcmd_enter_runcmd
  1194. ;run "cmd <command to run>"
  1195.         OS_SETSYSDRV ;TODO каталог cmd
  1196.         ld hl,cmd_filename
  1197.         call copy_to_fcb_filename
  1198.        
  1199.         ld hl,cmdbuf
  1200. loadandrun_waitpid
  1201. ;hl=cmdbuf или cmdprompt (для loadandrun_restcmd)
  1202.         push hl
  1203.         call setdrawtablesneeded
  1204.         ld de,0
  1205.         SETXY_
  1206.         ld de,_COLOR
  1207.         SETCOLOR_
  1208.         CLS_
  1209.         ld de,0
  1210.         SETXY_
  1211.         pop hl ;hl=cmdbuf или cmdprompt
  1212.          ;call setcurpaneldir
  1213.         call loadandrun ;nz=error, e=id
  1214.         jp nz,execcmd_error
  1215. ;команда scratch - реально cmd scratch в текущем терминале
  1216.         WAITPID
  1217.         CLS_ ;scroll what was printed
  1218. execcmd_error
  1219.         ld hl,cmdbuf
  1220.         ld (hl),0
  1221.         jp editcmd_reprintall_keepcursor
  1222.  
  1223. editcmd_enter_run
  1224.         call setpaneldir
  1225.         ld hl,fcb_filename+8
  1226.         ld a,(hl)
  1227.         inc hl
  1228.         ld c,(hl)
  1229.         inc hl
  1230.         ld b,(hl)
  1231.         cp '$'
  1232.         jp z,editcmd_enter_runfile_hobeta
  1233.         or 0x20
  1234.         cp 'c'
  1235.         jr nz,editcmd_enter_runfile_nocom
  1236.         ld a,c
  1237.         or 0x20
  1238.         cp 'o'
  1239.         jr nz,editcmd_enter_runfile_nocom
  1240.         ld a,b
  1241.         or 0x20
  1242.         cp 'm'
  1243.         jr nz,editcmd_enter_runfile_nocom
  1244. editcmd_enter_runfile_com
  1245.         ld hl,cmdbuf
  1246.         ld (hl),0
  1247. ;hl=rest of command line
  1248.         jp loadandrun_waitpid
  1249.  
  1250.         ;display "editcmd_enter_runfile_nocom",editcmd_enter_runfile_nocom
  1251. editcmd_enter_runfile_nocom
  1252.         ld hl,runfile_nocomq
  1253.         push hl
  1254.         call makeprompt_filename
  1255.        
  1256.         call runfile_findhandler ;find fcb_filename ext (spoiled) in "nv.ext"
  1257.         ret nz ;jp nz,execcmd_error
  1258.  
  1259.         ld de,cmdbuf
  1260.         ld hl,fcb_filename
  1261.         OS_PARSEFNAME ;de->hl
  1262.        
  1263.         OS_SETSYSDRV ;TODO директория cmd
  1264.         ld hl,cmdprompt
  1265.         jp loadandrun_waitpid
  1266.  
  1267. makeprompt_filename
  1268.         call setpaneldir_makeprompt ;keeps ix
  1269.         call getfcbundercursor ;->fcb
  1270.         ld hl,cmdprompt
  1271.         xor a
  1272.         cpir
  1273.         dec hl ;hl=адрес терминатора
  1274.         ld a,'/'
  1275.         dec hl
  1276.         cp (hl)
  1277.         inc hl
  1278.         jr z,$+4
  1279.          ld (hl),a
  1280.          inc hl
  1281.         ex de,hl ;de=prompt = "d:/path/" без терминатора
  1282.         ld hl,fcb_filename
  1283.         jp cpmname_to_dotname ;prompt = "d:/path/filename"
  1284.        
  1285. runfile_findhandler
  1286. ;find fcb_filename ext (spoiled) in "nv.ext"
  1287. ;out: nz=error, cmdbuf=handler
  1288.         ld hl,fcb_filename+8
  1289.         ld de,ext
  1290.         ld b,3
  1291. runfile_nocom_recodeext0
  1292.         ld a,(hl)
  1293.         or 0x20
  1294.         ld (de),a
  1295.         inc hl
  1296.         inc de
  1297.         djnz runfile_nocom_recodeext0
  1298.         OS_SETSYSDRV ;TODO директория nv
  1299.         ld hl,ext_filename
  1300.         ld de,filenametext
  1301.         push de
  1302.         call cpmname_to_dotname
  1303.         pop de
  1304.         OS_OPENHANDLE
  1305.         or a
  1306.         ret nz ;error
  1307.         ld a,b
  1308.         ld (curhandle),a
  1309.         ;call copy_to_fcb_filename
  1310.         ;call nv_openfcb ;autopush nv_closefcb
  1311.         ;ret nz ;error
  1312.         ld iy,file_buf_end
  1313. runfile_nocom_extloop
  1314.         call checkoneext ;c=ошибки, z=нет ошибок
  1315.         jr c,runfile_nocom_readerror
  1316.         jr z,runfile_nocom_extok
  1317.         call checkcomma
  1318.         jr c,runfile_nocom_readerror
  1319.         jr z,runfile_nocom_extloop
  1320.         call skiptonextline
  1321.         jr nz,runfile_nocom_extloop ;no EOF
  1322. runfile_nocom_readerror
  1323.         call nv_closehandle
  1324.         xor a
  1325.         dec a
  1326.         ret ;nz
  1327. runfile_nocom_extok
  1328.         call skiptocolon ;пройти к ':'
  1329.         ld hl,cmdbuf
  1330.         call loadtoendline
  1331.         call nv_closehandle
  1332.         xor a
  1333.         ret ;z
  1334.        
  1335. runfile_nocomq
  1336.         ld hl,cmdbuf
  1337.         ld (hl),0
  1338.         ld ix,(curpanel)
  1339. setpaneldir_makeprompt
  1340.         call setpaneldir ;keeps ix
  1341.         jp makeprompt ;-> prompt ;keeps ix
  1342.  
  1343.         macro READBYTE_A
  1344. ;out: z=EOF
  1345.         inc ly
  1346.         call m,readbyte_readbuf
  1347.         ld a,(iy)
  1348.         endm
  1349.  
  1350. checkoneext
  1351.         ld hl,ext
  1352.         ld bc,3*256
  1353. checkoneext0
  1354.         READBYTE_A
  1355.         ret z ;EOF
  1356.         cp 0x0a
  1357.         jr z,checkoneext0 ;skip LF
  1358.         or 0x20
  1359.         xor (hl)
  1360.         inc hl
  1361.         or c
  1362.         ld c,a
  1363.         djnz checkoneext0
  1364. ;c=ошибки, z=нет ошибок
  1365.         ret
  1366.  
  1367. skiptocolon
  1368.         READBYTE_A
  1369.         ret z ;EOF
  1370.         cp ':'
  1371.         jr nz,skiptocolon
  1372.         ret
  1373.  
  1374. checkcomma
  1375.         READBYTE_A
  1376.         cp ','
  1377.         ret ;TODO проверить EOF
  1378.        
  1379. loadtoendline
  1380. ;hl=buf
  1381.         READBYTE_A
  1382.         jr z,loadtoendlineq
  1383.         cp 0x0d
  1384.         jr z,loadtoendlineq
  1385.         ld (hl),a
  1386.         inc hl
  1387.         jr loadtoendline
  1388. loadtoendlineq
  1389.         ld (hl),0
  1390.         ret
  1391.  
  1392. skiptonextline
  1393.         READBYTE_A
  1394.         ret z ;EOF
  1395.         cp 0x0d
  1396.         jr nz,skiptonextline
  1397.         or a
  1398.         ret ;nz
  1399.  
  1400. readbyte_readbuf
  1401. ;out: z=EOF
  1402.         push bc
  1403.         push de
  1404.         push hl
  1405.         push ix
  1406.         ld de,file_buf
  1407.         push de
  1408.         ;OS_SETDTA ;set disk transfer address = de
  1409.         ;ld de,fcb
  1410.         ;OS_FREAD
  1411.         ;cp 128 ;128=no bytes read
  1412.         ld hl,128
  1413.         call readcurhandle
  1414.         ld a,h
  1415.         or l ;z=no bytes read
  1416.         pop iy
  1417.         pop ix
  1418.         pop hl
  1419.         pop de
  1420.         pop bc
  1421.         ret
  1422.  
  1423. editcmd_enter_runfile_hobeta
  1424. hobetarunner=0x4100
  1425.         ld e,6 ;textmode
  1426.         OS_SETGFX
  1427.         ld a,(user_scr0_low) ;ok
  1428.         sub 4-1 ;ld a,#ff-4 ;pgkillable
  1429.         SETPG16K
  1430.  
  1431.         ld hl,washobetarunner
  1432.         ld de,hobetarunner
  1433.         ld bc,hobetarunner_sz
  1434.         ldir
  1435.        
  1436. ;cmdpgscreen0_0=$+1
  1437. ;       ld a,#ff-1
  1438.         ld a,(user_scr0_low) ;ok
  1439.         SETPG32KLOW
  1440.         inc a ;ld a,#ff-0
  1441.         SETPG32KHIGH
  1442. ;0x4000 : pg4
  1443. ;0x8000 : pg1
  1444. ;0xc000 : pg0
  1445.  
  1446.         call loadhobeta
  1447.         ret nz ;error
  1448.         ld hl,0x6000
  1449.         ld bc,(0x6000-17+11) ;len
  1450.         add hl,bc
  1451.         dec hl ;hl=load end
  1452.         ex de,hl
  1453.         ld hl,(0x6000-17+9) ;start
  1454.         ld (hobetarunner_jp),hl
  1455.         add hl,bc
  1456.         dec hl
  1457.         ex de,hl ;de=destination end
  1458.         lddr
  1459.         jp hobetarunner
  1460.  
  1461. loadhobeta        
  1462.         ;call nv_openfcb ;autopush nv_closefcb
  1463.         ;ret nz ;error
  1464.         ld hl,fcb_filename
  1465.         ld de,filenametext
  1466.         push de
  1467.         call cpmname_to_dotname
  1468.         pop de
  1469.         OS_OPENHANDLE
  1470.         or a
  1471.         ret nz ;error
  1472.         ld a,b
  1473.         ld (curhandle),a
  1474.         ld de,0x6000-17
  1475.         ld hl,-(0x6000-17)
  1476.         OS_READHANDLE
  1477.         ;OS_SETDTA
  1478. ;editcmd_enter_runfile_hobeta_fcb0      
  1479.         ;ld de,fcb
  1480.         ;OS_FREAD
  1481.         ;or a
  1482.         ;jr z,editcmd_enter_runfile_hobeta_fcb0
  1483. ;editcmd_enter_runfile_hobeta_fcbq
  1484.         call nv_closehandle
  1485.         xor a ;no error
  1486.         ret ;call nv_closefcb
  1487.  
  1488. loadandrun
  1489. ;hl=rest of command line
  1490. ;out: nz=error, e=id
  1491. ;load file in fcb from system current dir with parameters in tcmd, then set curpaneldir and run
  1492.         ld (loadandrun_restcmd),hl
  1493.         ;call nv_openfcb ;autopush nv_closefcb
  1494.         ;ret nz ;error
  1495.         ld hl,fcb_filename
  1496.         ld de,filenametext
  1497.         push de
  1498.         call cpmname_to_dotname
  1499.         pop de
  1500.         OS_OPENHANDLE
  1501.         or a
  1502.         ret nz ;error
  1503.         ld a,b
  1504.         ld (curhandle),a
  1505.         ld hl,nv_closehandle
  1506.         push hl
  1507.         ;set current drive and dir (will be copied into new app)
  1508.         call setcurpaneldir
  1509.  
  1510.         OS_NEWAPP
  1511.         or a
  1512.         ret nz ;error
  1513. ;dehl=номера страниц в 0000,4000,8000,c000 нового приложения, b=id, a=error
  1514.         push bc ;b=id
  1515.         ld a,d
  1516.         SETPG32KHIGH
  1517.         push de
  1518.         push hl
  1519.         ld hl,fcb_filename
  1520.         ld de,0xc000+COMMANDLINE
  1521.         call cpmname_to_dotname ;de указывает на терминатор
  1522. loadandrun_restcmd=$+1
  1523.         ld hl,0
  1524.          ld a,(hl)
  1525.          or a
  1526.          jr z,loadandrun_noparams
  1527.         ld a,' '
  1528.         ld (de),a
  1529.         inc de
  1530. loadandrun_noparams
  1531.         ld bc,COMMANDLINE_sz;-tcmd_sz
  1532.         ldir ;copy command line ;можем залезть за 0x0100!
  1533.         xor a
  1534.         ld (0xc000+COMMANDLINE+COMMANDLINE_sz-1),a
  1535.         pop hl
  1536.         pop de
  1537.  
  1538.         call readfile_pages_dehl
  1539.  
  1540.         pop de
  1541.         ld e,d ;e=id
  1542. ;run "cmd <commandline>"
  1543.         push de
  1544.         OS_RUNAPP
  1545.         pop de
  1546.         xor a
  1547.         ret ;z
  1548.  
  1549. editcmd_1
  1550.         call ifcmdnonempty_typedigit
  1551. editcmd_F1
  1552.         ld ix,(curpanel)
  1553.         ld a,(ix+PANEL.xy)
  1554.         add a,10
  1555.         ld (windrv),a ;x
  1556.         add a,5
  1557.         ld (windrverr),a
  1558.         ld hl,editcmd_reprintcurpanel;editcmd_reprintall_onlyreadcurdir
  1559.         push hl
  1560.  
  1561. seldrv_redraw_mainloop
  1562.         ld hl,windrv
  1563. ;hl=window
  1564.         ld de,_COLOR_DIALOG
  1565.         call nv_setcolor
  1566.  
  1567.         call prwindow_text ;de=YX of last line
  1568. seldrv_mainloop
  1569.         ld de,(windrv)
  1570. seldrv_cury=$+1
  1571.         ld a,0
  1572.         add a,d
  1573.         add a,2
  1574.         ld d,a
  1575.         inc e
  1576.         inc e
  1577.         inc e
  1578.         push de
  1579.         ld hl,_CURSORCOLOR
  1580.         ld b,22
  1581.         call drawfilecursor_sizeb_colorhl ;draw cursor
  1582. seldrv_mainloop_nokey
  1583.         call yieldgetkeyloop ;YIELDGETKEYLOOP
  1584.          or a
  1585.          jr z,seldrv_mainloop_nokey ;TODO handle mouse events
  1586.         ld a,c
  1587.         pop de
  1588.         push af
  1589.         ld hl,_COLOR_DIALOG
  1590.         ld b,22
  1591.         call drawfilecursor_sizeb_colorhl ;remove cursor
  1592.         pop af
  1593.         cp key_redraw
  1594.         jr z,seldrv_redraw_mainloop
  1595.         ld hl,seldrv_cury
  1596.         cp key_enter
  1597.         jr z,seldrv_selcursor
  1598.         cp key_esc
  1599.         ret z
  1600.         cp 'a'
  1601.         jr c,seldrv_cursor
  1602.         cp 'p'
  1603.         ;jr nc,seldrv_cursor
  1604.         jr c,seldrv_selletter
  1605. seldrv_cursor
  1606.         ld bc,seldrv_mainloop
  1607.         push bc
  1608.         cp key_down
  1609.         jr z,seldrv_down
  1610.         cp key_up
  1611.         jr z,seldrv_up
  1612.         ret
  1613. seldrv_selletter
  1614.         sub 'a'
  1615.         jr seldrv_ok
  1616. seldrv_selcursor
  1617.         ld a,(hl)
  1618. seldrv_ok
  1619.         ld e,a
  1620.         push de
  1621.         OS_SETDRV
  1622.         pop de
  1623.         or a
  1624.         jr z,seldrv_ok0
  1625.         ld de,_COLOR_RED
  1626.         call nv_setcolor
  1627.         ld hl,windrverr
  1628.         call prwindow_waitkey
  1629.         ld de,_COLOR
  1630.         call nv_setcolor
  1631.         jp seldrv_redraw_mainloop
  1632. seldrv_ok0
  1633.         ld a,e
  1634.         add 'a'
  1635.         ld ix,(curpanel)
  1636.         ld (ix+PANEL.dir),a
  1637.         ld (ix+PANEL.dir+1),':'
  1638.         ld (ix+PANEL.dir+2),'/'
  1639.         ld (ix+PANEL.dir+3),0
  1640. ;       ld hl,ix
  1641. ;       ld de,PANEL.dir
  1642. ;       add hl,de
  1643. ;       ex hl,de
  1644. ;       OS_CHDIR
  1645. ;       or a
  1646. ;        ret z
  1647. ;       ld de,_COLOR_RED
  1648. ;       call nv_setcolor
  1649. ;       ld hl,windrverr
  1650. ;       call prwindow_waitkey
  1651. ;       ld de,_COLOR
  1652. ;       call nv_setcolor
  1653. ;       jp seldrv_redraw_mainloop
  1654.         ret
  1655.  
  1656. seldrv_down
  1657.         ld a,(hl)
  1658.         inc a
  1659.         cp 15; drives
  1660.         ret z
  1661.         ld (hl),a
  1662.         ret
  1663. seldrv_up
  1664.         ld a,(hl)
  1665.         or a
  1666.         ret z
  1667.         dec (hl)
  1668.         ret
  1669.  
  1670. editcmd_4
  1671.         call ifcmdnonempty_typedigit
  1672. editcmd_F4
  1673.         call getfcbundercursor ;->fcb
  1674.         ld a,(fcb+FCB_FATTRIB)
  1675.         and FATTRIB_DIR;#10
  1676.         ret nz
  1677.  
  1678.         ld hl,editcmd_reprintall_noreaddir
  1679.         push hl
  1680.  
  1681.         call makeprompt_filename
  1682.  
  1683.         ;call runfile_findhandler ;find fcb_filename ext (spoiled) in "nv.ext"
  1684.         ;ret nz ;jp nz,execcmd_error
  1685.  
  1686.         ;ld de,cmdbuf
  1687.         ;ld hl,fcb_filename
  1688.         ;OS_PARSEFNAME ;de->hl
  1689.        
  1690.         OS_SETSYSDRV ;TODO директория texted
  1691.        
  1692.         ld hl,texted_filename
  1693.         call copy_to_fcb_filename
  1694.  
  1695.         ;ld hl,cmdbuf
  1696.         ;ld (hl),0
  1697.         ld hl,cmdprompt
  1698. ;load file in fcb from system current dir with parameters in tcmd, then set curpaneldir and run
  1699.         jp loadandrun_waitpid
  1700.        
  1701. editcmd_9
  1702.         call ifcmdnonempty_typedigit
  1703.         ;ld e,1
  1704.         ;OS_SETSCREEN
  1705.         ;YIELDGETKEYLOOP
  1706.         ;ld e,0
  1707.         ;OS_SETSCREEN
  1708.         ret
  1709.  
  1710. editcmd_reprintall_keepcursor
  1711.         call readpanels_reprint_keepcursor
  1712.         jp editcmd_readprompt_setendcmdx
  1713.  
  1714. editcmd_reprintcurdir
  1715.         ld hl,leftpanel+PANEL.dir
  1716.         ld de,rightpanel+PANEL.dir
  1717.         call strcp
  1718.         jr nz,editcmd_reprintcurpanel
  1719. editcmd_reprintall
  1720.         call readpanels_reprint
  1721.         jp editcmd_readprompt_setendcmdx
  1722. editcmd_reprintcurpanel
  1723.         ld ix,(curpanel)
  1724.         call readdir
  1725.         call sortfiles
  1726.         call drawpanel_with_files
  1727.         jp editcmd_readprompt_setendcmdx
  1728. editcmd_reprintall_noreaddir
  1729.         ;ld e,COLOR
  1730.         ;OS_CLS
  1731.         call printhint
  1732.         ld ix,leftpanel
  1733.         call drawpanel_with_files
  1734.         ld ix,rightpanel
  1735.         jp drawpanel_with_files
  1736. ;editcmd_reprintall_onlyreadcurdir
  1737. ;       ld e,COLOR
  1738. ;       OS_CLS
  1739. ;       call printhint
  1740. ;       call getanotherpanel_ix
  1741. ;       call drawpanel_with_files
  1742. ;       jp editcmd_reprintcurpanel
  1743.  
  1744. editcmd_invfiles
  1745. ;ix=curpanel
  1746.         ld hl,changemark_hl
  1747.         call processfiles
  1748.         jp drawpanel_with_files
  1749.  
  1750. editcmd_6 ;ren
  1751.         call ifcmdnonempty_typedigit
  1752. editcmd_F6
  1753.         ld hl,editcmd_reprintall_keepcursor;editcmd_reprintall
  1754.         push hl
  1755.         call setpaneldir
  1756.         call getfcbundercursor
  1757.  
  1758.         if 1==1
  1759.         ld a,(fcb+FCB_EXTENTNUMBERLO)
  1760.         SETPG32KHIGH
  1761.         ld hl,(fcb+FCB_EXTENTNUMBERHI)
  1762.         ld de,filenametext
  1763.         push hl
  1764.         call strcopy
  1765.         pop hl
  1766.         ld de,tnewfilename
  1767.         call strcopy
  1768.         ;ld bc,64 ;max filename size+terminator
  1769.         ;ldir
  1770.         else
  1771.         ld hl,fcb_filename
  1772.         ld de,tnewfilename
  1773.         push de
  1774.         call cpmname_to_dotname
  1775.         pop hl
  1776.         ld de,filenametext
  1777.         ld bc,12
  1778.         ldir
  1779.         endif
  1780.  
  1781.         ld de,_COLOR_DIALOG
  1782.         call nv_setcolor
  1783.  
  1784.         ld hl,winrename
  1785.         ld de,tnewfilename
  1786.         ld c,63;13 ;max filename size
  1787.         call prwindow_edit ;CY=OK
  1788.         ret nc ;cancel
  1789. ;если в имени есть символы :,/,\, то выйти с ошибкой
  1790.         ld hl,tnewfilename
  1791. editcmd_ren_checkname0
  1792.         ld a,(hl)
  1793.         or a
  1794.         jr z,editcmd_ren_checknameq
  1795.         inc hl
  1796.         cp ':'
  1797.         ret z ;error
  1798.         cp '/'
  1799.         ret z ;error
  1800.         cp 0x5c;'\\'
  1801.         ret z ;error
  1802.         jr editcmd_ren_checkname0
  1803. editcmd_ren_checknameq
  1804.         ld de,filenametext
  1805.         ld hl,tnewfilename
  1806.         OS_RENAME
  1807.         ;todo error
  1808.         ret
  1809.  
  1810. editcmd_7 ;mkdir
  1811.         call ifcmdnonempty_typedigit
  1812. editcmd_F7
  1813.         ld hl,editcmd_reprintall_keepcursor;editcmd_reprintall
  1814.         push hl
  1815.         call setpaneldir
  1816.  
  1817.         ld de,_COLOR_DIALOG
  1818.         call nv_setcolor
  1819.         xor a
  1820.         ld hl,winmkdir
  1821.         ld de,tnewfilename
  1822.         ld (de),a
  1823.         ld c,63;13 ;max filename size
  1824.         call prwindow_edit ;CY=OK, de=filename
  1825.         ret nc ;cancel
  1826.         OS_MKDIR
  1827.         ;TODO error
  1828.         ret
  1829.  
  1830. editcmd_8 ;del
  1831.         call ifcmdnonempty_typedigit
  1832. editcmd_F8
  1833.         ;ld ix,(curpanel)
  1834.         call getmarkedfiles;countmarkedfiles
  1835.         ld a,h
  1836.         or l
  1837.         jr nz,editcmd_8_0      
  1838.         call getfcbaddrundercursor;hl=fcb
  1839.         call isthisdotdir_hl
  1840.         ret z ;"." or ".."
  1841.         call changemark_hl ;ld (hl),1
  1842. editcmd_8_0  
  1843.         ld de,_COLOR_RED
  1844.         call nv_setcolor
  1845.         ld hl,windel
  1846.         call prwindow_waitkey ;CY=OK
  1847.         jp nc,editcmd_reprintall_noreaddir
  1848.         ld hl,editcmd_reprintall_keepcursor;editcmd_reprintall
  1849.         push hl
  1850.         ld hl,windel2
  1851.         call prwindow_text
  1852.         ld hl,proc_del_file
  1853.         ld ix,(curpanel)
  1854.         jp processfiles
  1855.        
  1856. proc_del_file
  1857.         bit 0,(hl) ;marked?
  1858.         ret z
  1859.         call getfcbfromhl
  1860.  
  1861.         ld ix,(curpanel)
  1862.         ld de,PANEL.dir
  1863.         add ix,de
  1864.         push ix
  1865.         pop hl
  1866.         ld de,dir_buf
  1867.         call strcopy;nv_strcopy_hltode
  1868.  
  1869.         ld hl,proc_del_file_batch
  1870.         ld (nv_batch_proc),hl
  1871.  
  1872. proc_del_file_batch
  1873.         ld de,dir_buf
  1874.         OS_CHDIR
  1875.  
  1876.         ld hl,fcb_filename
  1877.         ld de,filenametext ;needed for batch
  1878.         call cpmname_to_dotname
  1879.  
  1880.         ld de,windel2_file ;dest
  1881.         ld bc,filenametext ;add
  1882.         ld hl,dir_buf ;src
  1883.         call nv_makefilepath_hltode ;result :  de=hl'/'bc
  1884.         ld hl,windel2_file
  1885.         call nv_fillpathspaces_hl ;fill to 64bytes spaces
  1886.         ld hl,windel2
  1887.         call upwindow_text ;update window
  1888.  
  1889.         ld de,filenametext
  1890.         OS_DELETE
  1891.         or a
  1892.         ret z ;if success return
  1893.  
  1894.         ld a,(fcb_attrib)
  1895.         and FATTRIB_DIR
  1896.         push af
  1897.         call nz,nv_copydir_add
  1898.         pop af
  1899.         jp nz,nv_copydir_add ;twice to remove empty dirs
  1900.  
  1901.         ret
  1902.  
  1903. editcmd_5 ;copy
  1904.         call ifcmdnonempty_typedigit
  1905. editcmd_F5
  1906.         ;ld ix,(curpanel)
  1907.         call getmarkedfiles ;countmarkedfiles
  1908.         ld a,h
  1909.         or l
  1910.         jr nz,editcmd_5_0      
  1911.         call getfcbaddrundercursor ;hl=fcb
  1912.         call isthisdotdir_hl
  1913.         ret z ;"." or ".."
  1914.         call changemark_hl ;ld (hl),1
  1915. editcmd_5_0
  1916.  
  1917.         call getanotherpanel_ix
  1918.         ld de,PANEL.dir
  1919.         add ix,de
  1920.         push ix
  1921.         pop hl
  1922.         ld de,dir2_buf
  1923.         call strcopy;nv_strcopy_hltode
  1924.  
  1925.         ld ix,(curpanel)
  1926.         ld de,PANEL.dir
  1927.         add ix,de
  1928.         push ix
  1929.         pop hl
  1930.         ld de,dir_buf
  1931.         call strcopy;nv_strcopy_hltode
  1932.  
  1933.         ld de,_COLOR_DIALOG
  1934.         call nv_setcolor
  1935.         ld ix,(curpanel)
  1936.  
  1937.         ld hl,wincopy
  1938.         ld de,dir2_buf
  1939.         ld c,60
  1940.         call prwindow_edit ;CY=OK
  1941.         jp nc,editcmd_reprintall_noreaddir
  1942.  
  1943.         ld hl,editcmd_reprintall
  1944.         push hl ;don't change!
  1945.  
  1946.         ld hl,0
  1947.         ld (filescopied),hl
  1948.        
  1949. ;        ld de,PROGRESBARWINXY
  1950. ;        ld bc,PROGRESBARWINHGTWID
  1951. ;        call prwin
  1952.         ld hl,wincopy2
  1953.         call prwindow_text
  1954.         ld hl,proceditcmd_copy
  1955.         ld ix,(curpanel)
  1956.         jp processfiles
  1957.  
  1958.         if 1==0
  1959. nv_addslashtopath_hl ; out=terminator
  1960.         push hl
  1961.         call skipword_hl
  1962.         dec hl
  1963.         ld a,(hl)
  1964.         cp '/'
  1965.         jr z,nv_addslashtopath_hl0
  1966.         inc hl
  1967.         ld a,'/'
  1968.         ld (hl),a
  1969. nv_addslashtopath_hl0
  1970.         inc hl
  1971.         xor a
  1972.         ld (hl),a
  1973.         pop hl
  1974.         ret
  1975.  
  1976. nv_adddirtopath_detohl ; hl=path de=dirname; out - last component of path
  1977.         push hl
  1978.         call skipword_hl
  1979.         ex hl,de
  1980.         push hl
  1981.         call strlen
  1982.         ld b,h
  1983.         ld c,l
  1984.         pop hl
  1985.         ldir
  1986.         xor a
  1987.         ld (de),a
  1988.         pop hl
  1989.         ret
  1990.         endif
  1991.  
  1992.         if 1==0
  1993. nv_strcopy_hltode
  1994. ;out: hl,de at terminator
  1995.         ld a,(hl)
  1996.         ld (de),a
  1997.         or a
  1998.         ret z
  1999.         inc hl
  2000.         inc de
  2001.         jr nv_strcopy_hltode
  2002.         endif
  2003. strcopy
  2004. ;hl->de
  2005. ;out: hl,de after terminator
  2006.         xor a
  2007. strcopy0
  2008.         cp (hl)
  2009.         ldi
  2010.         jp nz,strcopy0
  2011.         ret
  2012.  
  2013. nv_makefilepath_hltode ;DE=dest HL=src BC=filename
  2014.         push bc
  2015.         call strcopy;nv_strcopy_hltode
  2016.         pop bc
  2017. ;assumed that DE is after terminator
  2018.         dec de
  2019.         dec de
  2020.         ld a,(de)
  2021.         cp '/'
  2022.         jr z,nv_addslash0
  2023.         inc de
  2024.         ld a,'/'
  2025.         ld (de),a
  2026. nv_addslash0
  2027.         inc de
  2028.         xor a
  2029.         ld (de),a
  2030.         ld h,b
  2031.         ld l,c
  2032.         jp strcopy;nv_strcopy_hltode
  2033.  
  2034. nv_fillpathspaces_hl
  2035.         ld b,0
  2036. nv_fillpathspaces_hl0
  2037.         ld a,(hl)
  2038.         inc b
  2039.         inc hl
  2040.         or a
  2041.         jr nz,nv_fillpathspaces_hl0
  2042.         dec hl
  2043.         dec b
  2044.         ld c,' '
  2045.         ld a,b
  2046. nv_fillpathspaces_hl1
  2047.         ld (hl),c
  2048.         inc hl
  2049.         inc a
  2050.         cp 64
  2051.         jr c,nv_fillpathspaces_hl1
  2052.         ret
  2053.  
  2054. nv_batch_pushrecord
  2055.         OS_GETMAINPAGES
  2056.         ld a,h
  2057.         ld (savepg),a
  2058.         ld a,(dirpg)
  2059.         SETPG32KLOW
  2060.  
  2061.         ld hl,0x8000
  2062.         ld bc,(dir_batch_pointer)
  2063.         ld de,256
  2064. nv_batch_pushsrecord
  2065.         ld a,b
  2066.         or c
  2067.         jr z,nv_batch_pushsrecordend
  2068.         add hl,de
  2069.         dec bc
  2070.         jr nv_batch_pushsrecord
  2071. nv_batch_pushsrecordend
  2072.         push hl
  2073. ;dir 1
  2074.         ld de,dir_buf
  2075.         ex hl,de
  2076.         ld bc,filenametext
  2077.         call nv_makefilepath_hltode
  2078.         pop hl
  2079.         ld de,128
  2080.         add hl,de
  2081. ;dir2
  2082.         ld de,dir2_buf
  2083.         ex hl,de
  2084.         ld bc,filenametext
  2085.         call nv_makefilepath_hltode
  2086.  
  2087.         ld bc,(dir_batch_pointer)
  2088.         inc bc
  2089.         ld (dir_batch_pointer),bc
  2090.         ld a,(savepg)
  2091.         SETPG32KLOW
  2092.         ret
  2093.  
  2094. nv_batch_poprecord ;z=empty
  2095.         OS_GETMAINPAGES
  2096.         ld a,h
  2097.         ld (savepg),a
  2098.         ld a,(dirpg)
  2099.         SETPG32KLOW
  2100.  
  2101.         ld hl,0x8000
  2102.         ld bc,(dir_batch_pointer)
  2103.         ld a,b
  2104.         or c
  2105.         jr z,nv_batch_popsrecordq ;empty :(
  2106.         dec bc
  2107.         ld de,256
  2108. nv_batch_popsrecord
  2109.         ld a,b
  2110.         or c
  2111.         jr z,nv_batch_popsrecordend
  2112.         add hl,de
  2113.         dec bc
  2114.         jr nv_batch_popsrecord
  2115. nv_batch_popsrecordend
  2116.         ld de,dir_buf
  2117.         ld bc,128
  2118.         ldir
  2119.         ld de,dir2_buf
  2120.         ld  c,128
  2121.         ldir
  2122.         ld bc,(dir_batch_pointer)
  2123.         dec bc
  2124.         ld (dir_batch_pointer),bc
  2125.         ld a,1
  2126.         or a ;NZ
  2127. nv_batch_popsrecordq
  2128.         ld a,(savepg)
  2129.         SETPG32KLOW
  2130.         ret
  2131.  
  2132. nv_copydir_add
  2133.         jp nv_batch_pushrecord
  2134.  
  2135. nv_batch
  2136.         call nv_batch_poprecord
  2137.         ret z;empty
  2138. nv_label
  2139.         or a
  2140.         ld hl,(processfiles_proc)
  2141.         ld de,proceditcmd_copy
  2142.         sbc hl,de
  2143.         jr nz,nv_batch_nocopydir ;if it's not copy
  2144.  
  2145.         ld de,dir2_buf
  2146.         OS_MKDIR
  2147.         ld de,dir2_buf
  2148.         OS_CHDIR ;de
  2149.         or a
  2150.         jr nz,nv_batch ;can't open dest dir
  2151. nv_batch_nocopydir
  2152.         ld de,dir_buf
  2153.         OS_CHDIR ;;
  2154.         or a
  2155.         jr nz,nv_batch ;can't open src dir
  2156.  
  2157.         ld de,fcb
  2158.         OS_SETDTA
  2159.         ld de,fcbmask
  2160.         OS_FSEARCHFIRST
  2161.         or a
  2162.         jr nz,nv_batch
  2163.         ld de,fcb
  2164.         OS_SETDTA
  2165.         ld de,fcbmask
  2166.         OS_FSEARCHNEXT
  2167.         or a
  2168.         jr nz,nv_batch ;skip . and ..
  2169. nv_batch1
  2170.         ld de,fcb
  2171.         OS_SETDTA
  2172.         ld de,fcbmask
  2173.         OS_FSEARCHNEXT
  2174.         or a
  2175.         jr nz,nv_batch_nofiles
  2176. nv_batch_proc=$+1
  2177.         call 0
  2178.         jr nv_batch1
  2179. nv_batch_nofiles
  2180.         or a
  2181.         ld hl,(processfiles_proc)
  2182.         ld de,proc_del_file
  2183.         sbc hl,de
  2184.         jr nz,nv_batch ;if not del
  2185.         ld a,'/'
  2186.         ld (dir2_buf),a
  2187.         xor a
  2188.         ld (dir2_buf+1),a
  2189.         ld de,dir2_buf
  2190.         OS_CHDIR
  2191.         ld de,dir_buf
  2192.         OS_DELETE
  2193.         jp nv_batch
  2194.  
  2195. skipword_hl
  2196.         ld a,(hl)
  2197.         or a
  2198.         ret z
  2199.         cp ' '
  2200.         ret z
  2201.         inc hl
  2202.         jr skipword_hl
  2203.  
  2204. proceditcmd_copy
  2205.         bit 0,(hl)
  2206.         ret z
  2207.         call getfcbfromhl
  2208.  
  2209.         ld hl,proceditcmd_copy_fcb
  2210.         ld (nv_batch_proc),hl
  2211.  
  2212. proceditcmd_copy_fcb
  2213.         ld hl,proceditcmd_copy_q
  2214.         push hl
  2215.         ld de,dir_buf
  2216.         OS_CHDIR
  2217.  
  2218.         ld de,filenametext ;wordbuf ;de=drive/path/file
  2219.         ld hl,fcb_filename
  2220.         call cpmname_to_dotname
  2221.  
  2222.         ld a,(fcb_attrib)
  2223.         and FATTRIB_DIR
  2224.         jp nz,nv_copydir_add
  2225.  
  2226.         ld de,wincopy_src ;update copy window
  2227.         ld bc,filenametext
  2228.         ld hl,dir_buf
  2229.         call nv_makefilepath_hltode
  2230.         ld hl,wincopy_src
  2231.         call nv_fillpathspaces_hl
  2232.         ld de,wincopy_dest
  2233.         ld bc,filenametext
  2234.         ld hl,dir2_buf
  2235.         call nv_makefilepath_hltode
  2236.         ld hl,wincopy_dest
  2237.         call nv_fillpathspaces_hl
  2238.         ld hl,wincopy2
  2239.         call upwindow_text
  2240.  
  2241.         ld de,filenametext
  2242.         OS_OPENHANDLE
  2243.         or a
  2244.         ret nz ;jp nz,cmd_error_wrongfile
  2245.         ld a,b
  2246.         ld (cmd_copy_close_file1_handle),a
  2247.         ld hl,cmd_copy_close_file1
  2248.         push hl
  2249.  
  2250.         ld de,filenametext
  2251.         OS_GETFILETIME ;ix=date, hl=time
  2252.         ld (proceditcmd_copy_time),hl
  2253.         ld (proceditcmd_copy_date),ix
  2254.  
  2255.         ld de,dir2_buf
  2256.         OS_CHDIR
  2257.  
  2258.         ld de,filenametext;swordbuf2 ;de=drive/path/file
  2259.         OS_CREATEHANDLE
  2260.         or a
  2261.         ret nz ;jp nz,cmd_error_cant_copy
  2262.         ld a,b
  2263.         ld (cmd_copy_close_file2_handle),a
  2264.         ld hl,cmd_copy_close_file2
  2265.         push hl
  2266. cmd_copy0
  2267.         ld hl,copybuf_sz
  2268.         ld de,copybuf
  2269.         ld a,(cmd_copy_close_file1_handle)
  2270.         ld b,a
  2271. ;B = file handle, DE = Buffer address, HL = Number of bytes to read
  2272.         push de
  2273.         OS_READHANDLE
  2274. ;HL = Number of bytes actually read, A=error
  2275.         pop de
  2276.         ld a,h
  2277.         or l
  2278.         ret z ;0 bytes remain
  2279.         ld a,(cmd_copy_close_file2_handle)
  2280.         ld b,a
  2281. ;B = file handle, DE = Buffer address, HL = Number of bytes to write
  2282.         OS_WRITEHANDLE
  2283.         jr cmd_copy0
  2284.        
  2285. cmd_copy_close_file1
  2286. cmd_copy_close_file1_handle=$+1
  2287.         ld b,0
  2288.         OS_CLOSEHANDLE
  2289.         ret
  2290.  
  2291. cmd_copy_close_file2
  2292. cmd_copy_close_file2_handle=$+1
  2293.         ld b,0
  2294.         OS_CLOSEHANDLE
  2295. proceditcmd_copy_time=$+1
  2296.         ld hl,0
  2297. proceditcmd_copy_date=$+2
  2298.         ld ix,0
  2299.         ld de,filenametext
  2300.         OS_SETFILETIME
  2301.         ret
  2302.  
  2303. proceditcmd_copy_q
  2304. filescopied=$+1
  2305.         ld hl,0
  2306.          if 1==0
  2307.         inc hl
  2308.         ld (filescopied),hl
  2309.         ;ld bc,32
  2310.         ;ex de,hl ;ld de,(percentcopyfile)
  2311.         ;call mulbcde_ahl
  2312.         add hl,hl
  2313.         add hl,hl
  2314.         add hl,hl
  2315.         add hl,hl
  2316.         add hl,hl
  2317.         push hl
  2318.         ld ix,(curpanel)
  2319. ;ix = panel
  2320.         call getmarkedfiles ;out: hl'hl = files
  2321.         ex de,hl ;de=files
  2322.         pop hl ;filescopied*32
  2323.         call divhlde
  2324.         ld a,l
  2325.         or a
  2326.         ret z
  2327.         ld b,a
  2328.         ld de,PROGRESBARWINXY+#0102
  2329. proceditcmd_copy_q_progress0      
  2330.         push de
  2331.         push bc
  2332.         SETXY_
  2333.         ;ld e,#ff
  2334.         ;OS_PRATTR
  2335.         ld a,'*'
  2336.         PRCHAR_
  2337.         pop bc
  2338.         pop de
  2339.         inc e
  2340.         djnz proceditcmd_copy_q_progress0
  2341.          endif
  2342.         ret
  2343.  
  2344. mulbcde_ahl
  2345. ;bc * de результат в ahl
  2346.         xor a
  2347.         ld h,a
  2348.         ld l,a
  2349.         dup 8
  2350.         rlc b
  2351.         jr nc,$+5 ; c - был перенос, nc - не было переноса    
  2352.         add hl,de
  2353.         adc a,0
  2354.         add hl,hl
  2355.         rla
  2356.         edup
  2357.         dup 7
  2358.         rlc c
  2359.         jr nc,$+5 ; c - был перенос, nc - не было переноса    
  2360.         add hl,de
  2361.         adc a,0
  2362.         add hl,hl
  2363.         rla
  2364.         edup
  2365.         rlc c
  2366.         ret nc
  2367.         add hl,de
  2368.         adc a,0
  2369.         ret
  2370.  
  2371. ;hl / de результат в hl
  2372. divhlde
  2373.         ld c,h
  2374.         ld a,l
  2375.         ld hl,0
  2376.         ld b,16
  2377. ;don't mind carry
  2378. _DIV0.
  2379. ;shift left hlca
  2380.         rla
  2381.         rl c
  2382.         adc hl,hl
  2383. ;no carry
  2384. ;try sub
  2385.         sbc hl,de
  2386.         jr nc,$+3
  2387.         add hl,de
  2388. ;carry = inverted bit of result
  2389.         djnz _DIV0.
  2390.         rla
  2391.         cpl
  2392.         ld l,a
  2393.         ld a,c
  2394.         rla
  2395.         cpl
  2396.         ld h,a
  2397.         ret
  2398.        
  2399. editcmd_0
  2400.         call ifcmdnonempty_typedigit
  2401. editcmd_quit
  2402.         ld de,_COLOR_RED
  2403.         call nv_setcolor
  2404.         ld hl,winquit
  2405.         call prwindow_waitkey ;CY=OK
  2406.         jp nc,editcmd_reprintall_keepcursor;editcmd_reprintall
  2407.         QUIT
  2408.  
  2409. ifcmdnonempty_typedigit
  2410. ;keeps ix
  2411.         ld c,a
  2412.         ld a,(cmdbuf)
  2413.         or a
  2414.         ld a,c
  2415.         ret z ;cmd is empty
  2416.          pop bc ;skip return to editcmdN
  2417.         jp editcmd_typein
  2418.  
  2419. editcmd_typeword
  2420.         call getfcbundercursor
  2421.         ld hl,fcb_filename
  2422.         ld de,tnewfilename
  2423.         call cpmname_to_dotname ;de указывает на терминатор
  2424.         ld hl,cmdbuf
  2425.         call strlen ;hl=length
  2426.         ld bc,MAXCMDSZ-11
  2427.         or a
  2428.         sbc hl,bc
  2429.         ret nc ;некуда вводить
  2430.         add hl,bc
  2431.         ld bc,cmdbuf
  2432.         add hl,bc
  2433.         ex de,hl ;de=end of cmdbuf
  2434.         ld a,(cmdbuf)
  2435.         or a
  2436.         ld hl,tnewfilename
  2437.         jr z,editcmd_typeword_empty
  2438.         dec hl ;с пробелом
  2439. editcmd_typeword_empty
  2440.         call strcopy;nv_strcopy_hltode ;out: hl,de at terminator
  2441.         ld hl,cmdbuf
  2442.         call strlen ;hl=length
  2443.         ld a,l
  2444.         ld (curcmdx),a
  2445.         ret
  2446.  
  2447. windrv
  2448.         dw 0x0003 ;de=yx
  2449.         dw 256*(3+15)+28 ;0x0809 ;bc=hgt,wid
  2450.         db "Drive",0
  2451.         db 3 ;next line
  2452.         db "  A: - 1st Floppy",0,3
  2453.         db "  B: - 2nd Floppy",0,3
  2454.         db "  C: - 3rd Floppy",0,3
  2455.         db "  D: - 4th Floppy",0,3
  2456.         db "  E: - IDE Master p.1",0,3
  2457.         db "  F: - IDE Master p.2",0,3
  2458.         db "  G: - IDE Master p.3",0,3
  2459.         db "  H: - IDE Master p.4",0,3
  2460.         db "  I: - IDE Slave p.1",0,3
  2461.         db "  J: - IDE Slave p.2",0,3
  2462.         db "  K: - IDE Slave p.3",0,3
  2463.         db "  L: - IDE Slave p.4",0,3
  2464.         db "  M: - SD Z-controller",0,3
  2465.         db "  N: - SD NeoGS",0,3
  2466.         db "  O: - USB flash zx-net",0,3
  2467.         db 0 ;end of window
  2468.  
  2469. winmkdir
  2470.         dw 0x0a07 ;de=yx
  2471.         dw 0x0544 ;bc=hgt,wid
  2472.         db "Create new directory:",0
  2473.         db 3 ;next line
  2474.         db 2 ;print outer text
  2475.         dw tnewfilename
  2476.         db 0 ;end of window
  2477.  
  2478. winrename
  2479.         dw 0x0a07 ;de=yx
  2480.         dw 0x0544 ;bc=hgt,wid
  2481.         db "Rename file:",0
  2482.         db 3 ;next line
  2483.         db 2 ;print outer text
  2484.         dw tnewfilename
  2485.         db 0 ;end of window
  2486.  
  2487. wincopy
  2488.         dw 0x0a07 ;de=yx
  2489.         dw 0x0544 ;bc=hgt,wid
  2490.         db "Copy ",0
  2491.         db 1
  2492.         db " file(s)/dir(s) to:",0
  2493.         db 3 ;next line
  2494.         db 2 ;print outer text
  2495.         dw dir2_buf
  2496.         db 0 ;end of window
  2497.  
  2498.         db ' ' ;для typeword - перед tnewfilename
  2499. tnewfilename
  2500.         ds 64 ;max filename size+terminator
  2501. ;        ds 12
  2502. ;        db 0
  2503. ;tnewfilename_sz=12
  2504.  
  2505. winquit
  2506.         dw 0x0a1f ;de=yx
  2507.         dw 0x0515 ;bc=hgt,wid
  2508.         db 3 ;next line
  2509.         db "Quit Nedovigator?",0
  2510.         db 0 ;end of window
  2511.  
  2512. windel
  2513.         dw 0x0919 ;de=yx
  2514.         dw 0x051f ;bc=hgt,wid
  2515.         db 3 ;next line
  2516.         db "Delete ",0
  2517.         db 1 ;nfiles
  2518.         db " file(s)?",0
  2519.         db 0 ;end of window
  2520.  
  2521. wincopy2
  2522.         dw 0x0706 ;de=yx
  2523.         db 68,8 ;wid,hgt
  2524.         db 3 ;next line
  2525.         db " Copying",0,3
  2526. wincopy_src
  2527.         db "                                                                ",0,3
  2528.         db " to",0,3
  2529. wincopy_dest
  2530.         db "                                                                ",0
  2531.         db 0 ;end of window
  2532.  
  2533. windel2
  2534.         dw 0x0706 ;de=yx
  2535.         db 68,6 ;bc=wid,hgt
  2536.         db " Deleting",0,3
  2537.         db 3 ;next line
  2538. windel2_file
  2539.         db "                                                                ",0
  2540.         db 0 ;end of window
  2541.  
  2542. windrverr
  2543.         dw 0x040f ;de=yx
  2544.         dw 0x0510 ;bc=hgt,wid
  2545.         db 3 ;next line
  2546.         db "Drive error!",0
  2547.         db 0 ;end of window
  2548.  
  2549. tdotdot
  2550.         dw "..",0
  2551.  
  2552.         STRUCT PANEL
  2553. xy              WORD
  2554. catbuf          WORD ;TODO remove
  2555. poipg           BYTE
  2556. pointers        WORD ;TODO remove
  2557. pgadd           BYTE ;0/DIRPAGES
  2558. curpgfcbpoi     WORD
  2559. curpglnamepoi   WORD
  2560. drawtableunneeded BYTE
  2561. totalsize       DWORD
  2562. files           WORD ;visible files
  2563. filesdirs       WORD ;files+dirs (no ".", "..")
  2564. markedfiles     WORD
  2565. markedsize      DWORD
  2566. dirpos          WORD
  2567. dirscroll       WORD
  2568. dirviewmode     BYTE
  2569. dirsortproc     WORD
  2570. dirsortmode     BYTE
  2571. dir             BLOCK MAXPATH_sz
  2572.         ENDS
  2573. ;PANEL_sz=13+MAXPATH_sz
  2574.  
  2575. leftpanel PANEL
  2576. rightpanel PANEL
  2577.  
  2578. ;<0x4000 for hobeta
  2579. fcb
  2580.         ds FCB_sz
  2581. fcb_filename=fcb+FCB_FNAME        
  2582. fcb_attrib=fcb+FCB_FATTRIB
  2583.  
  2584. ;TODO kill (used in batch)
  2585. fcbmask
  2586.         db 0
  2587.         db "???????????"
  2588.         ds FCB_sz-11-1
  2589. fcbmask_filename=fcbmask+FCB_FNAME        
  2590.  
  2591. fcb2
  2592.         ds FCB_sz
  2593. fcb2_filename=fcb2+FCB_FNAME        
  2594.  
  2595. cmd_filename
  2596.         db "cmd     com"
  2597. ext_filename
  2598.         db "nv      ext"
  2599. texted_filename
  2600.         db "texted  com"
  2601.  
  2602. filenametext ;for change dir, rename
  2603.         ds 64 ;max filename size+terminator
  2604.  
  2605. ext
  2606.         ds 3 ;TODO объединить с filenametext
  2607.  
  2608. copybuf=0x4000 ;нельзя 0xc000 - поверх какой-нибудь директории (а она используется при копировании) ;0x8000 можно только после выставления страницы там
  2609. copybuf_sz=0x4000 ;$-copybuf
  2610.  
  2611. dir_batch_pointer db 0,0
  2612. savepg db 0,0
  2613. dirpg db 0,0
  2614.  
  2615. washobetarunner
  2616. ;pgsys=pagexor-10
  2617. ;pgfatfs=pagexor-9
  2618. ;pgtrdosfs=pagexor-8
  2619. ;pgkillable=pagexor-4 ;в 128K памяти, т.к. можно портить
  2620.         disp hobetarunner ;in pgkillable
  2621. ;$c loaded in pages 4,1,0
  2622. ;only ATM2 ports here!
  2623.         di
  2624.         ld a,0x7f-5
  2625.         ld bc,0xbff7
  2626.         out (c),a ;4,5,0
  2627.         ld a,0x7f-4
  2628.         ld bc,0xfff7
  2629.         out (c),a ;4,5,4
  2630.         ld hl,0xc000
  2631.         ld de,0x8000
  2632.         ld bc,0x4000
  2633.         ldir ;pg4 -> pg5
  2634.         ld a,0x7f-8;pgtrdosfs ;нельзя TOPDOWNMEM!!!
  2635.         ld bc,0xfff7
  2636.         out (c),a ;4,5,8
  2637.         ld hl,0x1c00+0xc000
  2638.         ld de,0x1c00+0x8000
  2639.         ld bc,0x400
  2640.         ldir ;restore sysvars
  2641.         ld a,0x7f-2
  2642.         ld bc,0xbff7
  2643.         out (c),a
  2644.         ld a,0x7f-1
  2645.         ld bc,0xfff7
  2646.         out (c),a
  2647.         ld hl,0xc000
  2648.         ld de,0x8000
  2649.         ld bc,0x4000
  2650.         ldir ;pg1 -> pg2
  2651.         ld a,0x7f-0+0x80
  2652.         ld bc,0xfff7
  2653.         out (c),a
  2654.         ld a,0x00
  2655.         ld bc,0x7ffd
  2656.         out (c),a
  2657.         ld a,0x81 ;128 basic (with 7ffd)
  2658.         ld bc,0x3ff7
  2659.         out (c),a
  2660.         ld a,0x7f-5
  2661.         ld bc,0x7ff7
  2662.         out (c),a
  2663. ;128: pages DOS,5,2,0(7ffd)
  2664.         ld a,0x10
  2665.         ld bc,0x7ffd
  2666.         out (c),a
  2667. ;48: pages 2,4,4,4
  2668.         ld a,0x7f-5
  2669.         ld bc,0x7ff7
  2670.         out (c),a
  2671.         ld a,0x7f-2
  2672.         ld bc,0xbff7
  2673.         out (c),a
  2674.         ld a,0x7f-0+0x80
  2675.         ld bc,0xfff7
  2676.         out (c),a
  2677.         ld a,0x83 ;48 basic switchable to DOS
  2678.         ld bc,0x3ff7
  2679.         out (c),a
  2680. ;48: pages DOS,5,2,0(7ffd)
  2681.        
  2682.         LD A,0b10101011 ;6912
  2683.         ld bc,0xff77 ;shadow ports off, palette off
  2684.         out (c),a
  2685.         ld sp,0x6000
  2686.         ei
  2687. hobetarunner_jp=$+1
  2688.         jp 0x6000
  2689.         ent
  2690. hobetarunner_sz=$-washobetarunner
  2691.  
  2692. wordfiles
  2693.         db "1234567890 files ";,0
  2694. wordbytes
  2695.         db "1234567890 bytes ",0
  2696. emptypath=$-1
  2697.         ;db 0
  2698.  
  2699. filinfo
  2700.         ds FILINFO_sz
  2701.        
  2702.         include "nvsort.asm"
  2703.         include "heapsort.asm"
  2704.  
  2705.         include "nvjptbl.asm"
  2706.         include "nvunit.asm"
  2707.         include "nveditln.asm"
  2708.         include "nvview.asm"
  2709.         include "nvhexed.asm"
  2710.         include "nvfind.asm"
  2711.  
  2712.         include "prdword.asm"
  2713.         include "cmdpr.asm"
  2714.         include "../_sdk/stdio.asm"
  2715.  
  2716.         align 256
  2717. searchbuf
  2718. SEARCHBUF_SZ=128 ;2 таких
  2719. file_buf
  2720. dir_buf
  2721.         ds 128
  2722. file_buf_end=$-1
  2723. dir2_buf
  2724.         ds 128        
  2725.  
  2726.         align 256
  2727. HS_strpg
  2728.         ds 256;DIRPAGES*2+2 ;по 1 байту на маркеры "0"
  2729.         align 256
  2730. textpages
  2731.         ds 256
  2732. twinto866
  2733.         incbin "../_sdk/codepage/winto866"
  2734. cmd_end
  2735.  
  2736.         display "nv size ",/d,cmd_end-cmd_begin," bytes"
  2737.  
  2738.         savebin "nv.com",cmd_begin,cmd_end-cmd_begin
  2739.  
  2740.         LABELSLIST "../../us/user.l"
  2741.