?login_element?

Subversion Repositories NedoOS

Rev

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

  1. prwindow_edit
  2. ;hl=window DE=texteditaddr c=texteditsize
  3. ;out: CY=OK, de=filename
  4.         push de
  5.         push bc
  6.         call prwindow_text ;de=YX of last line
  7.         pop bc
  8.         pop hl
  9.         push hl
  10.         ld a,c ;a=maxsz
  11.         call editline
  12.         pop de ;de=filename
  13.         cp key_esc
  14.         ret z ;cancel
  15.         scf
  16.         ret
  17.  
  18. prwindow_waitkey
  19. ;hl=window
  20. ;out: CY=OK
  21. ;        ld (prwindow_waitkey_addr),hl; commented by demige 190511
  22.         call prwindow_text; insert by demige 190511
  23. ; comment by demige 190511: for why reprinting window after each keypress? On second print getmarkedfiles returns wrong value.
  24. prwindow_waitkey0
  25. ;prwindow_waitkey_addr=$+1 ; comment by demige 190511
  26. ;        ld hl,0 ; comment by demige 190511
  27. ;        call prwindow_text ; comment by demige 190511
  28.        if PRSTDIO
  29.         call yieldgetkeyloop
  30.        else
  31.         YIELDGETKEYLOOP
  32.        endif
  33.         ld a,c
  34.         cp key_esc
  35.         ret z
  36.         cp 'n'
  37.         ret z
  38.         ;cp 'N'
  39.         ;ret z
  40.         cp key_redraw
  41.         ret z
  42.         cp 'y'
  43.         jr z, prwindow_waitkey_keyyes
  44.         ;cp 'Y'
  45.         ;jr z, prwindow_waitkey_keyyes
  46.         cp key_enter
  47.         jr nz,prwindow_waitkey0
  48. prwindow_waitkey_keyyes
  49.         scf
  50.         ret
  51.  
  52. upwindow_text
  53.         ld a,0
  54.         jr prwindow_text0
  55.  
  56. prwindow_text
  57.         ld a,1
  58. prwindow_text0
  59. ;hl = window text
  60. ;out: ;de=YX of last line
  61.         ld e,(hl) ;x
  62.         inc hl
  63.         ld d,(hl) ;y
  64.         inc hl
  65.         ld c,(hl) ;wid
  66.         inc hl
  67.         ld b,(hl) ;hgt
  68.         inc hl
  69.  
  70.         push hl ;text
  71.  
  72.         push de
  73.         or a
  74.         call nz,prwin
  75.         pop de
  76.         inc d
  77.         inc e
  78.         inc e
  79.         call nv_setxy ;keeps de,hl,ix
  80.        
  81.         pop hl ;text
  82. prwindow_waitkey_text0
  83.         ld a,(hl)
  84.         or a
  85.         ret z
  86.         dec a;cp 1
  87.         jr z,prwindow_waitkey_textnfiles
  88.         dec a;cp 2
  89.         jr z,prwindow_waitkey_textoutertext
  90.         dec a;cp 3
  91.         jr z,prwindow_waitkey_textnextline
  92.         push de
  93.          ld c,0
  94.         call prtext
  95.         pop de
  96.         jr prwindow_waitkey_text0
  97. prwindow_waitkey_textnfiles
  98.         inc hl
  99.         push de
  100.         push hl
  101.         call getmarkedfiles;countmarkedfiles
  102.         call prdword
  103.         pop hl
  104.         pop de
  105.         jr prwindow_waitkey_text0
  106. prwindow_waitkey_textoutertext
  107.         inc hl
  108.         push de
  109.         ld e,(hl)
  110.         inc hl
  111.         ld d,(hl)
  112.         inc hl
  113.         push hl
  114.         ex de,hl
  115.          ld c,0
  116.         call prtext
  117.         pop hl
  118.         pop de
  119.         jr prwindow_waitkey_text0
  120. prwindow_waitkey_textnextline
  121.         inc hl
  122.         inc d
  123.         call nv_setxy ;keeps de,hl,ix
  124.         jr prwindow_waitkey_text0
  125.  
  126. getmarkedfiles
  127. ;ix = panel
  128. ;out: hl'hl = files
  129.         ld hl,0
  130.         exx
  131.         ld l,(ix+PANEL.markedfiles)
  132.         ld h,(ix+PANEL.markedfiles+1)
  133.         ret
  134.  
  135. changemark_hl
  136.         push hl
  137.         ld a,(hl)
  138.         xor 1
  139.         ld (hl),a
  140.         ld bc,FCB_FSIZE
  141.         add hl,bc
  142.         ld e,(hl)
  143.         inc hl
  144.         ld d,(hl)
  145.         inc hl
  146.         ld c,(hl)
  147.         inc hl
  148.         ld b,(hl)
  149. ;bcde = file size
  150.         ld l,(ix+PANEL.markedfiles)
  151.         ld h,(ix+PANEL.markedfiles+1)
  152.         inc hl
  153.         jr nz,changemark_hlq ;set mark
  154. ;remove mark
  155.         dec hl
  156.         dec hl
  157.         xor a
  158.         sub e
  159.         ld e,a
  160.         ld a,0
  161.         sbc a,d
  162.         ld d,a
  163.         ld a,0
  164.         sbc a,c
  165.         ld c,a
  166.         sbc a,b
  167.         sub c
  168.         ld b,a ;bcde= -bcde
  169. changemark_hlq
  170.         ld a,(ix+PANEL.markedsize)
  171.         add a,e
  172.         ld (ix+PANEL.markedsize),a
  173.         ld a,(ix+PANEL.markedsize+1)
  174.         adc a,d
  175.         ld (ix+PANEL.markedsize+1),a
  176.         ld a,(ix+PANEL.markedsize+2)
  177.         adc a,c
  178.         ld (ix+PANEL.markedsize+2),a
  179.         ld a,(ix+PANEL.markedsize+3)
  180.         adc a,b
  181.         ld (ix+PANEL.markedsize+3),a
  182.         ld (ix+PANEL.markedfiles),l
  183.         ld (ix+PANEL.markedfiles+1),h
  184.         pop hl
  185.         ret
  186.  
  187. getmarkedfilessize
  188. ;ix = panel
  189. ;out: hl'hl = files
  190.         ld l,(ix+PANEL.markedsize+2)
  191.         ld h,(ix+PANEL.markedsize+3)
  192.         exx
  193.         ld l,(ix+PANEL.markedsize)
  194.         ld h,(ix+PANEL.markedsize+1)
  195.         ret
  196.        
  197. getfiles
  198. ;ix = panel
  199. ;out: hl'hl=files (without ".", "..")
  200.         ld hl,0
  201.         exx
  202.         ld l,(ix+PANEL.filesdirs)
  203.         ld h,(ix+PANEL.filesdirs+1)
  204.         ret
  205.  
  206. countfiles
  207.         ld hl,proc_count
  208.         jp processfiles ;hl'hl=files (without ".", "..")
  209. proc_count
  210.         inc iy
  211.         ret
  212.  
  213. getfilessize
  214. ;ix = panel
  215.         ;exx
  216.         ld l,(ix+PANEL.totalsize+2)
  217.         ld h,(ix+PANEL.totalsize+3)
  218.         exx
  219.         ld l,(ix+PANEL.totalsize)
  220.         ld h,(ix+PANEL.totalsize+1)
  221.         ret ;hl'hl=size
  222.  
  223. processfiles
  224. ;ix = panel address (kept)
  225. ;hl = procedure address (uses hl=fcb, hl'iy = accumulator)
  226. ;out: hl'hl = result
  227.         ld (processfiles_proc),hl
  228.  
  229.         call nv_getpanelfiles_bc
  230.  
  231.         ld l,(ix+PANEL.pointers)
  232.         ld h,(ix+PANEL.pointers+1)
  233.         exx
  234.         ld hl,0
  235.         exx
  236.         ld iy,0
  237. processfiles0
  238.         ld a,b
  239.         or c
  240.         jr z,processfilesq
  241.         push bc
  242.         call getfilepointer_de_fromhl
  243.         push hl
  244.         push ix
  245.         ex de,hl
  246.         call isthisdotdir_hl
  247.         display "processfiles_proc ",$
  248. processfiles_proc=$+1
  249.         call nz,0 ;copy может переключать страницу (сейчас не переключает)
  250.         pop ix
  251.         pop hl
  252.         pop bc
  253.         dec bc
  254.         jp processfiles0
  255. processfilesq
  256.         push iy
  257.        push ix
  258.         call nv_batch ;исполнить всё, что запомнили в nv_batch_pushrecord?
  259.        pop ix
  260.         pop hl
  261.         ret
  262.  
  263. gotofilepointer_numberde
  264.         ld l,(ix+PANEL.pointers)
  265.         ld h,(ix+PANEL.pointers+1)
  266.         add hl,de
  267.         add hl,de
  268.         ret
  269.  
  270. getfilepointer_de_fromhl
  271. ;out: hl=next pointer
  272.         ld a,(ix+PANEL.poipg)
  273.         SETPGC000
  274.         ld a,(hl)
  275.         and 0xe0
  276.         ld e,a
  277.         xor (hl)
  278.         inc hl
  279.         ld d,(hl)
  280.         inc hl
  281.         ;ld a,e
  282.         ;and 31
  283.         add a,(ix+PANEL.pgadd)
  284.         PGW3strpg
  285.         ;push af
  286.         ;ld a,e
  287.         ;and 0xe0
  288.         ;ld e,a
  289.         ;pop af
  290.         ret
  291.  
  292. putfilepointer_de_tohl
  293. ;out: hl=next pointer
  294.         ld a,(ix+PANEL.poipg)
  295.         SETPGC000
  296.         ld (hl),e
  297.         inc hl
  298.         ld (hl),d
  299.         inc hl
  300.         ret
  301.  
  302. swapfilepointers_hl_de
  303. ;out: hl=next pointer
  304.         ld a,(ix+PANEL.poipg)
  305.         SETPGC000
  306.         ld a,(de)
  307.         ldi
  308.         dec hl
  309.         ld (hl),a
  310.         inc hl
  311.         ld a,(de)
  312.         ldi
  313.         dec hl
  314.         ld (hl),a
  315.         inc hl
  316.         ret
  317.  
  318. isthisdotdir_hl
  319. ;out: z="." or ".."
  320.         inc hl
  321.         ld a,(hl)
  322.         cp '.'
  323.         dec hl
  324.         ret
  325.  
  326. drawpanelfilesandsize
  327. ;ix=panel
  328.         call nv_getpanelxy_de
  329.         ;ld a,CONST_HGT_TABLE+1
  330.         ld a,(filesperpanel)
  331.         inc a
  332.         add a,d
  333.         ld d,a
  334.         inc e
  335.         inc e
  336.         call nv_setxy ;keeps de,hl,ix
  337.         ld de,_PANELDIRCOLOR;_PANELFILECOLOR
  338.         call nv_setcolor
  339.         call getmarkedfiles
  340.         ld a,h
  341.         or l
  342.         push af ;z = no marked
  343.         call z,getfiles
  344.         pop af
  345.         push af
  346.         ld de,_PANELSELECTCOLOR
  347.         call nz,nv_setcolor
  348.         ;push ix
  349.         ld de,wordfiles
  350.         call prdword_de_withspaces
  351.         ;ld hl,wordfiles
  352.         ; ld c,0
  353.         ;call prtext
  354.         ;pop ix
  355.         pop af ;z = no marked
  356.         jr nz,drawpanelfilesandsize_markedsize
  357.         call getfilessize
  358.         jr drawpanelfilesandsize_markedsizeq
  359. drawpanelfilesandsize_markedsize
  360.         call getmarkedfilessize
  361. drawpanelfilesandsize_markedsizeq
  362.         ld de,wordbytes
  363.         call prdword_de_withspaces
  364.         push ix
  365.         ld hl,wordfiles;bytes
  366.          ld c,0
  367.         call prtext
  368.         pop ix
  369.         ret
  370.  
  371. nv_setxy
  372. ;de=yx (kept)
  373. ;keeps de,hl,ix
  374.         push de
  375.         push hl
  376.         push ix
  377.         MYSETXY
  378.         pop ix
  379.         pop hl
  380.         pop de
  381.         ret
  382.  
  383. setpanelcolor
  384.         ld de,_PANELCOLOR
  385. nv_setcolor
  386. ;d=paper, e=ink
  387.         push hl
  388.         push ix
  389.        if PRSTDIO
  390.         SETCOLOR_
  391.        else
  392.         ;ld a,d
  393.         ;add a,a
  394.         ;add a,a
  395.         ;add a,a
  396.         ;add a,e
  397.         ;ld e,a
  398.         OS_SETCOLOR
  399.        endif
  400.         pop ix
  401.         pop hl
  402.         ret
  403.  
  404. getfcbaddrundercursor
  405.         call nv_getdirpos_hl
  406. getfcbaddrunderhl
  407.         ld ix,(curpanel)
  408.         ;ld a,(ix+PANEL.pg)
  409.         ;SETPGC000
  410.         ex de,hl
  411.         call gotofilepointer_numberde ;hl=file pointer
  412.         ;ld a,(hl)
  413.         ;inc hl
  414.         ;ld h,(hl)
  415.         ;ld l,a ;hl=FCB
  416.         call getfilepointer_de_fromhl
  417.         ex de,hl ;hl=FCB
  418.         ret
  419.  
  420. getfcbundercursor
  421.         call getfcbaddrundercursor
  422. getfcbfromhl
  423.         ld de,fcb
  424.         ld bc,FCB_sz
  425.         ldir
  426.         ret
  427.  
  428. panelprtext
  429. ;print max 37 chars (dir)
  430. ;hl = text
  431. ;keeps ix
  432.         push ix
  433. panelprtext0
  434.         ld a,(hl)
  435.         or a
  436.         jr z,panelprtextq
  437.         push bc
  438.         push hl
  439.         MYPRCHAR
  440.         pop hl
  441.         pop bc
  442.         inc c
  443.         inc hl
  444.         ld a,c
  445.         cp PANELDIRCHARS37
  446.         jp nz,panelprtext0
  447. panelprtextq
  448.         pop ix
  449.         ret
  450.  
  451. changedir_fromfcb
  452.         call setcurpaneldir
  453.         ld hl,fcb_filename
  454.         ld de,filenametext
  455.         push de
  456.         call cpmname_to_dotname
  457.         pop de
  458.         OS_CHDIR
  459.         ret
  460.  
  461.         if 1==0
  462. readfile_pages_dehl
  463.         ld a,d
  464.         SETPGC000
  465.         ld a,+(0xc000+PROGSTART)/256
  466.         call cmd_loadpage
  467.         or a
  468.         ret nz
  469.        
  470.         ld a,e
  471.         SETPGC000
  472.         ld a,0xc000/256
  473.         call cmd_loadpage
  474.         or a
  475.         ret nz
  476.        
  477.         ld a,h
  478.         SETPGC000
  479.         ld a,0xc000/256
  480.         call cmd_loadpage
  481.         or a
  482.         ret nz
  483.        
  484.         ld a,l
  485.         SETPGC000
  486.         ld a,0xc000/256
  487.         jp cmd_loadpage
  488.         endif
  489.  
  490. readfile_pages_dehl
  491.         ld a,d
  492.         SETPGC000
  493.         ld a,0xc100/256
  494.         call cmd_loadpage
  495.         ret nz
  496.         ld a,e
  497.         call cmd_loadfullpage
  498.         ret nz
  499.         ld a,h
  500.         call cmd_loadfullpage
  501.         ret nz
  502.         ld a,l
  503. cmd_loadfullpage
  504.         SETPGC000
  505.         ld a,0xc000/256
  506. cmd_loadpage
  507. ;out: a=error, bc=bytes read
  508. ;keeps hl,de
  509.         push de
  510.         push hl
  511.         ld d,a
  512.         xor a
  513.         ld l,a
  514.         ld e,a
  515.         sub d
  516.         ld h,a ;de=buffer, hl=size
  517.         call readcurhandle
  518.         ld b,h
  519.         ld c,l
  520.         pop hl
  521.         pop de
  522.         or a
  523.         ret
  524.  
  525. readcurhandle
  526. curhandle=$+1
  527.         ld b,0
  528.         OS_READHANDLE
  529.         ret
  530.  
  531. cmd_savepage
  532. ;hl=size
  533. ;out: a=error
  534.         ;push hl
  535.         ld de,0x8000
  536.         ;OS_SETDTA
  537.         ;pop hl
  538.         ;ld de,fcb2
  539.         ;OS_FWRITE_NBYTES
  540.         ld a,(curhandle)
  541.         ld b,a
  542.         OS_WRITEHANDLE
  543.         ret
  544.  
  545. setdrawtablesneeded
  546.         ld ix,leftpanel
  547.         res 0,(ix+PANEL.drawtableunneeded)
  548.         ld ix,rightpanel
  549.         res 0,(ix+PANEL.drawtableunneeded)
  550.         ret
  551.  
  552. prwin
  553. ;de=yx
  554. ;bc=hgt,wid
  555.         call setdrawtablesneeded
  556.         ld a,c
  557.         sub 2
  558.         ld (winbeginstroka_wid),a
  559.         ld (winmidstroka_wid),a
  560.         ld (winendstroka_wid),a
  561.         ld hl,winbeginstroka
  562.         call prtableline
  563.         dec b
  564.         dec b
  565. winlineN_0
  566.         inc d
  567.         ld hl,winmidstroka
  568.         call prtableline
  569.         djnz winlineN_0
  570.         inc d
  571.         ld hl,winendstroka
  572.         jr prtableline
  573.  
  574. prtable
  575. ;de=yx
  576.         ld hl,prbeginstroka
  577.         call prtableline
  578.         push ix
  579.         ;ld b,CONST_HGT_TABLE
  580.         ld bc,(filesperpanel-1) ;b
  581. prtable0
  582.         inc d
  583.         ;ld hl,prmidstroka
  584.         ;call prtableline
  585.         push bc
  586.         push de
  587.         call nv_setxy ;keeps de,hl,ix
  588.         ld de,tmidstroka
  589.         ld hl,tmidstroka_sz
  590.         call sendchars
  591.         pop de
  592.         pop bc
  593.         djnz prtable0
  594.         pop ix
  595.         inc d
  596.         ld hl,prendstroka
  597. prtableline
  598. ;hl=tableline data
  599. ;de=yx
  600. ;b=hgt
  601. ;keeps bc,de,ix
  602.         push bc
  603.         call nv_setxy ;keeps de,hl
  604. prtableline0
  605.         ld a,(hl)
  606.         or a
  607.         jr z,prtablelineq
  608.         inc hl
  609.         ld b,(hl)
  610.         inc hl
  611.         call prNsymbol
  612.         jr prtableline0
  613. prtablelineq
  614.         pop bc
  615.         ret
  616.  
  617. prNsymbol
  618. ;a=symbol
  619. ;b=count
  620.         push de
  621.         push hl
  622.         push ix
  623.         ld c,a
  624. prNsymbol0
  625.         push bc
  626.         ld a,c
  627.         MYPRCHAR
  628.         pop bc
  629.         djnz prNsymbol0
  630.         pop ix
  631.         pop hl
  632.         pop de
  633.         ret
  634.  
  635. ;;;;;;;;;;;;;;;;;;
  636.  
  637. cmdprchar
  638.         push hl
  639.         push ix
  640.         MYPRCHAR
  641.         pop ix
  642.         pop hl
  643.         ret
  644.  
  645. nv_getpanelxy_de
  646.         ld e,(ix+PANEL.xy)
  647.         ld d,(ix+PANEL.xy+1)
  648.         ret
  649.  
  650. nv_getdirscroll_bc
  651.         ld c,(ix+PANEL.dirscroll)
  652.         ld b,(ix+PANEL.dirscroll+1)
  653.         ret
  654. nv_setdirscroll_bc
  655.         ld (ix+PANEL.dirscroll),c
  656.         ld (ix+PANEL.dirscroll+1),b
  657.         ret
  658.  
  659. nv_getpanelfiles_bc
  660.         ld c,(ix+PANEL.files)
  661.         ld b,(ix+PANEL.files+1)
  662.         ret
  663. nv_getdirpos_hl
  664.         ld l,(ix+PANEL.dirpos)
  665.         ld h,(ix+PANEL.dirpos+1)
  666.         ret
  667.  
  668. cpfiles_setdirpos
  669. ;hl=suggested dirpos (might be >= files)
  670. ;out: hl=dirpos
  671.         call nv_getpanelfiles_bc
  672.         dec bc
  673.         call minhl_bc_tobc
  674.         ld h,b
  675.         ld l,c
  676. nv_setdirpos_hl
  677.         ld (ix+PANEL.dirpos),l
  678.         ld (ix+PANEL.dirpos+1),h
  679.         ret
  680. nv_setdirpos_zero
  681.         ld hl,0
  682.         jr nv_setdirpos_hl
  683.  
  684. count_filecursor_logy
  685. ;out: a=y, de=PANEL.xy
  686.         ;call nv_getpanelxy_de
  687.         ld a,(ix+PANEL.dirpos)
  688.         sub (ix+PANEL.dirscroll)
  689.         ;add a,d;(ix+PANEL.xy+1) ;y
  690.         ret
  691.  
  692. setfilecursorxy
  693.         ;push af
  694.         ld ix,(curpanel)
  695.         call nv_getpanelxy_de
  696.         call count_filecursor_logy
  697.         add a,d
  698.         ld d,a
  699.         ;ld e,(ix+PANEL.xy)
  700.         inc d
  701.         inc e
  702.         ;pop af
  703.         ;push af
  704.         jp nv_setxy
  705.         ;pop af ;color
  706.         ;ret
  707.  
  708. prfilecursor_reprintfile
  709. ;hl=color
  710.         push hl
  711.         ;ex de,hl
  712.         ;SETCOLOR_
  713.         call setfilecursorxy
  714.         ld ix,(curpanel)
  715.         ;call getfcbaddrundercursor
  716.         ;jp prdirfile
  717.         call getfcbundercursor
  718.         ld ix,fcb
  719.         pop de
  720.         jp prdirfile_ix_decolor
  721.         ;push hl
  722.         ;pop ix
  723.         ;call prdirfile_copyfilename
  724.         ;;ld ix,(curpanel)
  725.         ;ld de,filelinebuf
  726.         ;ld hl,8+1+3
  727.         ;jp sendchars
  728.  
  729. prfilecursor
  730. ;hl=color
  731.         push hl
  732.         call setfilecursorxy
  733.         pop hl
  734.         ld b,12
  735.         call drawfilecursor_sizeb_colorhl ;hl=old color
  736.         ld ix,(curpanel)
  737.         ret
  738.  
  739. editcmd_readprompt_setendcmdx
  740.         ld ix,(curpanel)
  741.         call setpaneldir_makeprompt ;->prompt
  742.         ld hl,cmdbuf
  743.         call strlen
  744.         ld a,l
  745.         ld (curcmdx),a
  746.         ret
  747.  
  748. getanotherpanel_hl
  749. getanotherpanel_ix
  750. curpanel=$+1
  751.         ld bc,leftpanel
  752.         ld hl,0xffff&(leftpanel+rightpanel)
  753.         or a
  754.         sbc hl,bc
  755.         push hl
  756.         pop ix
  757.         ret
  758.  
  759. setanotherpaneldir
  760.         call getanotherpanel_ix
  761.         jr setpaneldir
  762.  
  763. setcurpaneldir
  764.         ld ix,(curpanel)
  765. setpaneldir
  766. ;ix=panel
  767.         push ix
  768.         pop hl
  769.         ld de,PANEL.dir
  770.         add hl,de
  771.         ex de,hl ;de=path
  772.         OS_CHDIR
  773.         ret
  774.  
  775. getcurpaneldir_hl
  776.         ld hl,(curpanel)
  777.         ld de,PANEL.dir
  778.         add hl,de
  779.         ret
  780.  
  781. drawfilecursor_sizeb_colorhl
  782. ;de=yx
  783. ;hl=color
  784. ;b=size
  785.        if PRSTDIO
  786.         push bc
  787.         push hl
  788.         call nv_setxy
  789.         pop de
  790.         SETCOLOR_
  791.         call setcolor_invisible
  792.         pop bc
  793.         ld de,tspaces
  794.         ld h,0
  795.         ld l,b
  796.         call sendchars
  797.         jp setcolor_visible
  798.        else
  799.         ;ld a,d
  800.         ;add a,a
  801.         ;add a,a
  802.         ;add a,a
  803.         ;add a,e
  804.         ;ld e,a
  805.         ;OS_SETCOLOR
  806. drawfilecursor_sizeb0
  807.         push bc
  808.         push de
  809.         push hl ;color
  810.         MYSETXY
  811.         pop de ;color
  812.         push de ;color
  813.         OS_PRATTR
  814.         pop hl ;color
  815.         pop de
  816.         pop bc
  817.         inc e ;x
  818.         djnz drawfilecursor_sizeb0
  819.         ret
  820.        endif
  821.  
  822.         if 1==0
  823. nv_openfcb
  824. ;if success, autopush nv_closefcb
  825. ;out: nz=error
  826.         push ix
  827.         ld de,fcb
  828.         OS_FOPEN
  829.         pop ix
  830.         or a
  831.         ret nz ;error
  832.         ld hl,nv_closefcb
  833.         ex (sp),hl
  834.         jp (hl)
  835.  
  836. nv_createfcb2
  837. ;if success, autopush nv_closefcb2
  838. ;out: nz=error
  839.         ld de,fcb2
  840.         push ix
  841.         OS_FCREATE
  842.         pop ix
  843.         or a
  844.         ret nz ;error
  845.         ld hl,nv_closefcb2
  846.         ex (sp),hl
  847.         jp (hl)
  848.  
  849. nv_closefcb2
  850. ;keep de and flags!!!
  851.         push de
  852.         ld de,fcb2
  853.         jr nv_closefcb_de_
  854. nv_closefcb
  855. ;keep de and flags!!!
  856.         push de
  857.         ld de,fcb
  858. nv_closefcb_de_
  859. ;out: keep flags!!!
  860.         push af
  861.         push ix
  862.         OS_FCLOSE
  863.         pop ix
  864.         pop af
  865.         pop de
  866.         ;or a
  867.         ret
  868.         endif
  869.  
  870. copy_to_fcb_filename
  871.         ld de,fcb_filename
  872. ;copy_to_defcb_filename
  873.         ld bc,11
  874.         ldir
  875.         ret
  876.  
  877. nv_closehandle
  878. ;keep de and flags!!!
  879.         push af
  880.         push de
  881.         ld a,(curhandle)
  882.         ld b,a
  883.         OS_CLOSEHANDLE
  884.         pop de
  885.         pop af
  886.         ret
  887.  
  888. tdoublehoriz
  889.         ds PANELDIRCHARS37,0xcd
  890.  
  891. winbeginstroka
  892.         db 0xc9;'г'
  893.         db 1
  894.         db 0xcd;'='
  895. winbeginstroka_wid=$
  896.         db 12;wdtcolumn1
  897.         db 0xbb;'┐'
  898.         db 1
  899.         db 0
  900.  
  901. winmidstroka
  902.         db 0xba;'│'
  903.         db 1
  904.         db ' '
  905. winmidstroka_wid=$
  906.         db 12;wdtcolumn1
  907.         db 0xba;'│'
  908.         db 1
  909.         db 0
  910.  
  911. winendstroka
  912.         db 0xc8;'L'
  913.         db 1
  914.         db 0xcd;'='
  915. winendstroka_wid=$
  916.         db 12;wdtcolumn1
  917.         db 0xbc;'-'
  918.         db 1
  919.         db 0
  920.  
  921. prbeginstroka
  922.         db 0xc9;'г'
  923.         db 1
  924.         db 0xcd;'='
  925.         db 14;wdtcolumn1
  926.         db 0xcd;0xd1;'T'
  927.         db 1
  928.         db 0xcd;'='
  929.         db 10;wdtcolumn2
  930.         db 0xd1;'T'
  931.         db 1
  932.         db 0xcd;'='
  933.         db 12;wdtcolumn3
  934.         db 0xbb;'┐'
  935.         db 1
  936.         db 0
  937.  
  938. tmidstroka
  939.         db 0xba;'│'
  940.        if PRSTDIO
  941.         db 0x1b,"[25C"
  942.         db 0xb3;'│'
  943.         db 0x1b,"[12C"
  944.        else
  945.         ds 25,' '
  946.         db 0xb3;'│'
  947.         ds 12,' '
  948.        endif
  949.         db 0xba;'│'
  950. tmidstroka_sz=$-tmidstroka
  951.         if 1==0
  952. prmidstroka
  953.         db 0xba;'│'
  954.         db 1
  955.         db ' '
  956.         db 14;wdtcolumn1
  957.         db ' ';0xb3;'│'
  958.         db 1
  959.         db ' '
  960.         db 10;wdtcolumn2
  961.         db 0xb3;'│'
  962.         db 1
  963.         db ' '
  964.         db 12;wdtcolumn3
  965.         db 0xba;'│'
  966.         db 1
  967.         db 0
  968.         endif
  969.  
  970. prendstroka
  971.         db 0xc8;'L'
  972.         db 1
  973.         db 0xcd;;'='
  974.         db 14;wdtcolumn1
  975.         db 0xcd;0xcf;'│'
  976.         db 1
  977.         db 0xcd;'='
  978.         db 10;wdtcolumn2
  979.         db 0xcf;'│'
  980.         db 1
  981.         db 0xcd;'='
  982.         db 12;wdtcolumn3
  983.         db 0xbc;'-'
  984.         db 1
  985.         db 0
  986.        
  987. prcrlf
  988.         ld de,tcrlf
  989.         ld hl,2
  990.         jp sendchars
  991. tcrlf
  992.         db 0x0d,0x0a
  993.  
  994.         if PRSTDIO==0
  995. nv_copyscreen0to1
  996.         OS_GETMAINPAGES
  997.         push hl
  998.         ;OS_GETSCREENPAGES
  999.         ld a,(user_scr1_low) ;ok
  1000.         ld l,a
  1001.         ld a,(user_scr1_high) ;ok
  1002.         ld h,a
  1003.         ld a,(user_scr0_low) ;ok
  1004.         ld e,a
  1005.         ld a,(user_scr0_high) ;ok
  1006.         ld d,a
  1007.         push hl ;1 screen
  1008.         push de ;0 screen
  1009.         ld a,l
  1010.         SETPGC000
  1011.         pop de
  1012.         push de
  1013.         ld a,e
  1014.         SETPG8000
  1015.         ld bc,0x4000
  1016.         ld hl,0x8000
  1017.         ld de,0xC000
  1018.         ldir
  1019.         pop de
  1020.         pop hl
  1021.         push de
  1022.         ld a,h
  1023.         SETPGC000
  1024.         pop de
  1025.         ld a,d
  1026.         SETPG8000
  1027.         ld bc,0x4000
  1028.         ld hl,0x8000
  1029.         ld de,0xC000
  1030.         ldir
  1031.         pop hl
  1032.         push hl
  1033.         ld a,l
  1034.         SETPGC000
  1035.         pop hl
  1036.         ld a,h
  1037.         SETPG8000
  1038.         ret
  1039.  
  1040. nv_copyscreen1to0
  1041.         OS_GETMAINPAGES
  1042.         push hl
  1043.         ;OS_GETSCREENPAGES
  1044.         ld a,(user_scr1_low) ;ok
  1045.         ld l,a
  1046.         ld a,(user_scr1_high) ;ok
  1047.         ld h,a
  1048.         ld a,(user_scr0_low) ;ok
  1049.         ld e,a
  1050.         ld a,(user_scr0_high) ;ok
  1051.         ld d,a
  1052.         push hl ;1 screen
  1053.         push de ;0 screen
  1054.         ld a,l
  1055.         SETPGC000
  1056.         pop de
  1057.         push de
  1058.         ld a,e
  1059.         SETPG8000
  1060.         ld bc,0x4000
  1061.         ld hl,0xc000
  1062.         ld de,0x8000
  1063.         ldir
  1064.         pop de
  1065.         pop hl
  1066.         push de
  1067.         ld a,h
  1068.         SETPGC000
  1069.         pop de
  1070.         ld a,d
  1071.         SETPG8000
  1072.         ld bc,0x4000
  1073.         ld hl,0xc000
  1074.         ld de,0x8000
  1075.         ldir
  1076.         pop hl
  1077.         push hl
  1078.         ld a,l
  1079.         SETPGC000
  1080.         pop hl
  1081.         ld a,h
  1082.         SETPG8000
  1083.         ret
  1084.        
  1085. ;sendchar
  1086. ;        PRCHAR
  1087. ;        ret
  1088.        
  1089. sendchars
  1090. ;de=buf, hl=size, c=x
  1091. ;out: A=error, c=x
  1092. sendchars0
  1093.         push bc
  1094.         push de
  1095.         push hl
  1096.         ld a,(de)
  1097.         PRCHAR
  1098.         pop hl
  1099.         pop de
  1100.         pop bc
  1101.         inc de
  1102.         inc c ;x
  1103.         dec l
  1104.         jr nz,sendchars0
  1105.         xor a ;no error
  1106.         ret
  1107.        
  1108. clearrestofline_crlf
  1109.         ;call clearrestofline
  1110.         ;ld a,0x0d
  1111.         ;PRCHAR
  1112.         ;ld a,0x0a
  1113.         ;PRCHAR
  1114.         ;ret
  1115. clearrestofline
  1116. ;c=x
  1117. clearrestofline0
  1118.         push bc
  1119.         ld a,' '
  1120.         PRCHAR
  1121.         pop bc
  1122.         inc c
  1123.         ld a,c
  1124.         cp 80
  1125.         jr nz,clearrestofline0
  1126.         ret
  1127.        
  1128.         endif