Subversion Repositories NedoOS

Rev

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

  1. NVVIEW_XYTOP=0x0000
  2. NVVIEW_HGT=24
  3. NVVIEW_WID=80
  4. _NVVIEW_PANELCOLOR=0x0700;0x38
  5.  
  6. editcmd_3
  7.         call ifcmdnonempty_typedigit
  8. editcmd_F3
  9.         ;jr $
  10.         call getfcbundercursor ;->fcb
  11.         ld a,(fcb+FCB_FATTRIB)
  12.         and FATTRIB_DIR;#10
  13.         ret nz
  14.  
  15.         ;call nv_openfcb ;autopush nv_closefcb
  16.         ;ret nz ;error
  17.         ld hl,fcb_filename
  18.         ld de,filenametext
  19.         call cpmname_to_dotname
  20.  
  21.         call setcurpaneldir
  22.  
  23.         call setdrawtablesneeded
  24.         ld hl,editcmd_reprintall_noreaddir
  25.         push hl
  26.         ld de,filenametext
  27. nvview
  28. ;de=filename
  29.         OS_OPENHANDLE
  30.         or a
  31.         ret nz ;error
  32.         ld a,b
  33.         ld (curhandle),a
  34.         ;ld hl,nv_closehandle
  35.         ;push hl
  36.  
  37.         ;ld e,COLOR
  38.         ;OS_CLS
  39.         ld de,0
  40.         SETXY_
  41.         CLS_
  42.  
  43.         ld hl,unreservepages
  44.         push hl
  45.        
  46.         ld hl,0
  47.         ld de,0
  48. nvview_load0
  49.         push de
  50.         push hl
  51.         call reservepage
  52.         pop hl
  53.         pop de
  54.         ret nz ;no memory
  55. ;nvview_load0nonewpg        
  56.         ld a,0xc000/256
  57.         call cmd_loadpage
  58.         jr nz,nvview_load0q
  59.         ex de,hl
  60.         add hl,bc
  61.         ex de,hl
  62.         jr nc,$+3
  63.         inc hl
  64.          ;TODO nvview_load0nonewpg with new pointer if no new page
  65.         ld a,b
  66.         or c
  67.         jr nz,nvview_load0
  68. nvview_load0q
  69. ;hlde=true file size (for TRDOSFS)
  70.         ld (filesize),de
  71.         ld (filesizeHSW),hl
  72.         call nv_closehandle
  73.  
  74.         xor a
  75.         ld h,a
  76.         ld l,a
  77.         call nvview_settop
  78.        
  79.         ;call nvview_panel        
  80.        
  81.         call nvview_calclines
  82.         ld hl,1;0
  83.         ld (nvview_ncurline),hl
  84.  
  85. nvview_redrawloop
  86.         ;jp nvview_hexeditor
  87.  
  88.         call nvview_prcurpage
  89. nvview_mainloop
  90.         ld a,2
  91. nvview_yieldkeep
  92.         ld (nvview_wasnokey),a
  93.         YIELDKEEP
  94.         ld a,55+128 ;"or a"
  95.         ld (nvview_wasyield),a
  96. nvview_mainloop_nokey
  97.         GETKEY_ ;OS_GETKEYNOLANG
  98.         ld a,c ;keynolang
  99.         ;cp NOKEY
  100.         jr nz,nvview_mainloop_keyq
  101. ;если два раза подряд нет события, то делаем YIELD, иначе YIELDKEEP
  102. nvview_wasnokey=$+1
  103.         ld a,1
  104.         dec a
  105.         jr nz,nvview_yieldkeep
  106. ;рисовать панельку только при отсутствии события после YIELD
  107. nvview_wasyield=$
  108.         scf
  109.         call c,nvview_panel ;97359 t
  110.         YIELD
  111.         ld a,55 ;"scf"
  112.         ld (nvview_wasyield),a
  113.         jr nvview_mainloop_nokey
  114. nvview_mainloop_keyq
  115.         cp key_redraw
  116.         jr z,nvview_redrawloop
  117.         cp key_esc
  118.         ret z
  119.         cp key_tab
  120.         jp z,nvview_hexeditor
  121.         ld hl,nvview_mainloop
  122.         push hl
  123.         cp key_up
  124.         jp z,nvview_up
  125.         cp key_down
  126.         jp z,nvview_down
  127.         cp key_pgup
  128.         jp z,nvview_pgup
  129.         cp key_pgdown
  130.         jp z,nvview_pgdown
  131.         cp 's';csss
  132.         jp z,nvview_changeencoding
  133.         cp key_home
  134.         jp z,nvview_home
  135.         cp key_sspgup;ext3
  136.         jp z,nvview_home
  137.         cp key_end
  138.         jp z,nvview_end
  139.         cp key_sspgdown;ext4
  140.         jp z,nvview_end
  141.         cp key_left
  142.         jp z,nvview_left
  143.         cp key_right
  144.         jp z,nvview_right
  145.         cp 'w'
  146.         jp z,nvview_wrap
  147.         ret
  148.  
  149. nvview_hexeditor
  150.         ;pop af ;снимаем адрес возврата
  151.         ld de,0x0000
  152.         call nv_setxy
  153.         ld hl,(curtoptextaddr)
  154.         ld a,(curtoptextHSB)
  155.         ld (hexaddrlineHSB),a
  156.         ld a,l
  157.         and 0xf0
  158.         ld l,a
  159.         ld (hexaddrline),hl
  160.         ld hl,0
  161.         ld (hexcuraddrxy),hl
  162.         jp hexeditor_redrawloop
  163. nvview_hexeditorq
  164.         call nvview_calclines
  165.         ld hl,(hexaddrline)
  166.         ld a,(hexaddrlineHSB)
  167.         call nvview_nextline
  168.         call nvview_prevline ;line beginning (TODO fix uneven sizes in wrap mode)
  169.        
  170.         call nvview_settop
  171.         call nvview_calccurline
  172.        
  173.         jp nvview_redrawloop
  174.  
  175. nvview_wrap
  176.         ld a,(wrapflag)
  177.         xor 128
  178.         ld (wrapflag),a
  179.         ld hl,0
  180.         ld (nvview_prline_shift),hl
  181.         ld hl,(curtoptextaddr)
  182.         ld a,(curtoptextHSB)
  183.         call nvview_pgdown_pgup_ahl;nvview_prcurpage
  184.         call nvview_calclines
  185.         ld hl,(curtoptextaddr)
  186.         ld a,(curtoptextHSB)
  187.         call nvview_calccurline
  188.         ret
  189.        
  190. nvview_right
  191.         ld a,(nvview_prline_shift)
  192.         add a,8
  193.         ret c
  194.         ld (nvview_prline_shift),a
  195.         call nvview_prcurpage
  196.         jp clear_keyboardbuffer
  197.        
  198. nvview_left
  199.         ld a,(nvview_prline_shift)
  200.         sub 8
  201.         ret c
  202.         ld (nvview_prline_shift),a
  203.         call nvview_prcurpage
  204.         jp clear_keyboardbuffer
  205.        
  206. nvview_prcurpage
  207.         ld hl,(curtoptextaddr)
  208.         ld a,(curtoptextHSB)
  209.         jp nvview_prpage
  210.        
  211. nvview_home
  212.         ld hl,1;0
  213.         ld (nvview_ncurline),hl
  214.         xor a
  215.         ld h,a
  216.         ld l,a
  217.         call nvview_settop
  218.         jp nvview_prpage
  219.        
  220. nvview_end
  221.         ld hl,(filesize)
  222.         ld a,(filesizeHSW)
  223.         ld b,NVVIEW_HGT
  224. nvview_end0
  225.         push bc
  226.         call nvview_prevline
  227.         pop bc
  228.         djnz nvview_end0
  229.         call nvview_calccurline
  230.         jp nvview_prpage
  231.  
  232. deccurline
  233.         push hl
  234.         ld hl,(nvview_ncurline)
  235.         dec hl
  236.         ld (nvview_ncurline),hl
  237.         pop hl
  238.         ret
  239.        
  240. inccurline
  241.         push hl
  242.         ld hl,(nvview_ncurline)
  243.         inc hl
  244.         ld (nvview_ncurline),hl
  245.         pop hl
  246.         ret
  247.  
  248. nvview_up
  249.         ld hl,(curtoptextaddr)
  250.         ld a,(curtoptextHSB)
  251.         call isbof
  252.         ret z
  253.         call nvview_prevline
  254.         call nvview_settop
  255.         push af
  256.         push hl
  257.         ld de,NVVIEW_XYTOP
  258.         ld hl,256*NVVIEW_HGT + NVVIEW_WID
  259.         call scrolldown ;OS_SCROLLDOWN
  260.         ld de,NVVIEW_XYTOP
  261.         call nv_setxy
  262.         pop hl
  263.         pop af
  264.         call nvview_prline
  265.          ld de,24*256+79
  266.          call nv_setxy ;avoid cursor at 0x0100
  267.         call deccurline
  268.         ld hl,(curbottomtextaddr)
  269.         ld a,(curbottomtextHSB)
  270.         call nvview_prevline
  271.         jp nvview_setbottom
  272.  
  273. nvview_down
  274. curbottomtextaddr=$+1
  275.         ld hl,0
  276. curbottomtextHSB=$+1
  277.         ld a,0
  278.         call iseof
  279.         ret z
  280.         push af
  281.         push hl
  282.         ld de,NVVIEW_XYTOP
  283.         ld hl,256*NVVIEW_HGT + NVVIEW_WID
  284.         call scrollup ;OS_SCROLLUP
  285.         ld de,NVVIEW_XYTOP+((NVVIEW_HGT-1)*256)
  286.         call nv_setxy
  287.         pop hl
  288.         pop af
  289.         call nvview_prline_nextline
  290.         call nvview_setbottom
  291.         call inccurline
  292. curtoptextaddr=$+1
  293.         ld hl,0
  294. curtoptextHSB=$+1
  295.         ld a,0
  296.         call nvview_nextline
  297. nvview_settop        
  298.         ld (curtoptextaddr),hl
  299.         ld (curtoptextHSB),a
  300.         ret
  301.  
  302. nvview_pgup
  303.         ld hl,(curtoptextaddr)
  304.         ld a,(curtoptextHSB)
  305. nvview_pgup_go
  306.         ld b,NVVIEW_HGT
  307. nvview_pgup0
  308.         push bc
  309.         call nvview_prevline
  310.          call nc,deccurline
  311.         pop bc
  312.         djnz nvview_pgup0
  313.         call nvview_prpage
  314.         jp clear_keyboardbuffer
  315.        
  316. nvview_pgdown
  317.          ld hl,(nvview_ncurline)
  318.          ld bc,NVVIEW_HGT
  319.          add hl,bc
  320.          ld (nvview_ncurline),hl
  321.         ld hl,(curbottomtextaddr)
  322.         ld a,(curbottomtextHSB)
  323. nvview_pgdown_pgup_ahl
  324.         ld b,NVVIEW_HGT
  325. nvview_pgdown0
  326.         push bc
  327.         call nvview_nextline
  328.          call nc,inccurline
  329.         pop bc
  330.         djnz nvview_pgdown0
  331.         jr nvview_pgup_go
  332.         if 1==0
  333.         ld b,NVVIEW_HGT
  334. nvview_pgdown1
  335.         push bc
  336.         call nvview_prevline
  337.          call nc,deccurline
  338.         pop bc
  339.         djnz nvview_pgdown1
  340.         call nvview_prpage
  341.         jp clear_keyboardbuffer
  342.         endif
  343.        
  344. nvview_calccurline
  345.         ;ld hl,(curtoptextaddr)
  346.         ;ld a,(curtoptextHSB)
  347. ;ahl=curtextline (kept)
  348.         push af
  349.         push hl
  350.         ld (nvview_calccurline_old),hl
  351.         ld (nvview_calccurline_oldHSB),a
  352.         ld ix,1;0
  353.          or h
  354.          or l
  355.          jr z,nvview_calccurline_countq
  356.         xor a
  357.         ld h,a
  358.         ld l,a
  359. nvview_calccurline_count0
  360.         call nvview_nextline;nvview_pseudoprline
  361.         push hl
  362. nvview_calccurline_old=$+1
  363.         ld bc,0
  364.         or a
  365.         sbc hl,bc ;nc: hl>=old
  366.         ld l,a
  367. nvview_calccurline_oldHSB=$+1
  368.         sbc a,0
  369.         ld a,l
  370.         pop hl
  371.         inc ix
  372.         jr c,nvview_calccurline_count0 ;cy: ahl<old
  373. nvview_calccurline_countq
  374.         ;push ix
  375.         ;pop hl
  376.         ld (nvview_ncurline),ix;hl
  377.         pop hl
  378.         pop af
  379.         ret
  380.        
  381. nvview_calclines
  382. ;out ix = lines
  383.         ld ix,0
  384.         xor a
  385.         ld h,a
  386.         ld l,a
  387. nvview_calclines0
  388.         inc ix
  389.         call nvview_nextline
  390.         call iseof
  391.         jp nz,nvview_calclines0
  392.         ld (nlines),ix
  393.         ret
  394.        
  395. clear_keyboardbuffer
  396.         push bc
  397.         ld b,50;5
  398. clear_keyboardbuffer0
  399.         push bc
  400.         GETKEY_
  401.         pop bc
  402.         djnz clear_keyboardbuffer0
  403.         pop bc
  404.         ret
  405.        
  406. nvview_changeencoding
  407.         ld hl,nvview_prline_recodepatch
  408.         ld a,(hl)
  409.         xor 0x7e ;"ld a,(hl)"
  410.         ld (hl),a
  411.         call nvview_prcurpage
  412.         ;ret
  413. nvview_panel
  414.         ld de,0x1800
  415.         call nv_setxy
  416.         ld de,_NVVIEW_PANELCOLOR;#38
  417.         SETCOLOR_
  418.        
  419.         ld a,(nvview_prline_recodepatch)
  420.         or a
  421.         ld hl,t866
  422.         jr z,$+5
  423.         ld hl,twin
  424.          ld c,0
  425.         call prtext
  426.        
  427.         ld a,' '
  428.         PRCHAR_
  429. nvview_ncurline=$+1
  430.         ld hl,0
  431.         exx
  432.         ld hl,0
  433.         exx
  434.         call prdword
  435.         ;ix
  436.         ld a,'/'
  437.         PRCHAR_
  438.         ld hl,(nlines)
  439.         exx
  440.         ld hl,0
  441.         exx
  442.         call prdword
  443.         ld a,' '
  444.         PRCHAR_
  445.         ld hl,(filesizeHSW)
  446.         exx
  447.         ld hl,(filesize)
  448.         call prdword
  449. ;        ld b,43
  450. ;nvview_panel0
  451. ;        ld a,' '
  452. ;        push bc
  453. ;        PRCHAR_
  454. ;        pop bc
  455. ;        djnz nvview_panel0
  456.         ld de,tspaces
  457.         ld hl,43
  458.         call sendchars
  459.         ;ld e,NVVIEW_PANELCOLOR;#38
  460.         ;OS_PRATTR
  461.         ld de,_COLOR;#38
  462.         SETCOLOR_
  463.        
  464.         ret
  465.        
  466. twin
  467.         db "WIN",0
  468. t866
  469.         db "866",0
  470.  
  471.      
  472. isbof
  473.         push bc
  474.         ld c,a
  475.         or h
  476.         or l
  477.         ld a,c
  478.         pop bc
  479.         ret
  480. iseof
  481.         push bc
  482.         push de
  483.         push hl
  484.         ld de,(filesize)
  485.         ld bc,(filesizeHSW)
  486.         ld b,a
  487.         or a
  488.         sbc hl,de
  489.         sbc a,c
  490.         ld a,b
  491.         pop hl
  492.         pop de
  493.         pop bc
  494.         ret
  495.      
  496. nvview_prpage
  497. ;ahl=addr
  498.         ld (curtoptextaddr),hl
  499.         ld (curtoptextHSB),a
  500.         push af
  501.         ld de,NVVIEW_XYTOP
  502.         call nv_setxy
  503.         pop af
  504.         ld b,NVVIEW_HGT
  505. nvview_prpage0
  506.         push bc
  507.         ;push de
  508.         ;push af
  509.         ;push hl
  510.         ;call nv_setxy
  511.         ;pop hl
  512.         ;pop af
  513.         call nvview_prline_nextline
  514.         ;pop de
  515.         pop bc
  516.         ;inc d
  517.         djnz nvview_prpage0
  518. nvview_setbottom
  519.         ld (curbottomtextaddr),hl
  520.         ld (curbottomtextHSB),a
  521.         ret
  522.        
  523. nvview_prevline
  524. ;ahl=addr
  525. ;line < 16K
  526. ;out: ahl, CY=error
  527.         call isbof
  528.          scf
  529.         ret z
  530. ;перед нами может быть #0d или #0d,#0a или ничего
  531.         ld (findprevline_old),hl
  532.         ld (findprevline_oldHSB),a
  533.        
  534.         or a
  535.         ld bc,0xffff
  536.         jr nz,$+4
  537.          ld b,h
  538.          ld c,l
  539.        
  540.         ld de,0x4000
  541.         or a
  542.         sbc hl,de
  543.         sbc a,e;0
  544.         push af
  545.         push hl
  546.         call ahl_to_pgaddr
  547.         set 6,h
  548. ;hl=c000+, можно уменьшать
  549. ;bc=number of chars to go != 0
  550.  
  551. ;перед нами может быть #0d или #0d,#0a или ничего
  552.         dec hl
  553.         dec bc
  554.         ld a,b
  555.         or c
  556.         jr z,nvview_prevlineq
  557.         ld a,0x0a
  558.         cp (hl)
  559.         jr nz,nvview_prevline_nolf
  560.         dec hl
  561.         dec bc
  562.         ld a,b
  563.         or c
  564.         jr z,nvview_prevlineq
  565. nvview_prevline_nolf
  566.         ld a,0x0d
  567.         cp (hl)
  568.         jr nz,nvview_prevline_nocr
  569.         dec hl
  570.         dec bc
  571.         ld a,b
  572.         or c
  573.         jr z,nvview_prevlineq
  574. nvview_prevline_nocr
  575. ;сейчас мы находимся перед символом конца предыдущей строки (не на нём)
  576. nvview_prevline0
  577.         ld a,(hl)
  578.         cp 0x0d
  579.         jr z,nvview_prevline_cr
  580.         cp 0x0a
  581.         jr z,nvview_prevline_lf
  582.         dec hl
  583.         dec bc
  584.         ld a,b
  585.         or c
  586.         jr nz,nvview_prevline0
  587. ;beginning of file
  588.         jr nvview_prevlineq
  589. nvview_prevline_cr
  590. nvview_prevline_lf
  591. ;сейчас мы находимся на конце символа конца строки перед предыдущей
  592.         inc hl
  593. nvview_prevlineq
  594.         ex de,hl ;new addr (bits 13..0), bit 14 = overflow
  595.         pop hl ;old addr
  596.         pop af
  597.         call pgaddr_to_ahl
  598.         call iswrapon ;CY=on
  599.         ret nc ;no wrap
  600.  
  601. findprevline_linewrap
  602. ;ahl = в начале строки
  603. ;перед ней может быть #0d или #0d,#0a
  604. ;надо псевдонапечатать несколько псевдострок, пока не дойдём до текущей
  605. findprevline_linewrap_count0
  606.          push af
  607.          push hl
  608.         call nvview_pseudoprline
  609.         push hl
  610. findprevline_old=$+1
  611.         ld bc,0
  612.         or a
  613.         sbc hl,bc ;nc: hl>=old
  614.         ld l,a
  615. findprevline_oldHSB=$+1
  616.         sbc a,0
  617.         ld a,l
  618.         pop hl
  619.          pop de ;old addr
  620.          pop bc ;b=old HSB
  621.         jr c,findprevline_linewrap_count0
  622.         ex de,hl
  623.         ld a,b
  624. ;ahl=на псевдострочку раньше
  625.         ret ;nc
  626.  
  627. getmaxlinesize
  628. ;ahl = addr
  629. ;out: bc=max line size before eof, z=(bc==0)
  630.         push af
  631.         push hl
  632.         ex de,hl
  633.         ld hl,(filesize)
  634.         ld c,a
  635.         ld a,(filesizeHSW)
  636.         or a
  637.         sbc hl,de
  638.         sbc a,c
  639.         ld bc,0
  640.         jr c,getmaxlinesize_aftereof
  641.         dec bc
  642.         or a
  643.         jr nz,$+4 ;filesize-addr >= 0x10000, will be 0xffff
  644.          ld b,h
  645.          ld c,l ;filesize-addr
  646. getmaxlinesize_aftereof
  647.         pop hl
  648.         pop af
  649.         ld e,a
  650.         ld a,b
  651.         or c
  652.         ld a,e
  653.         ret
  654.  
  655. nvview_prline_nextline
  656.         push af
  657.         push hl
  658.         call nvview_prline
  659.         pop hl
  660.         pop af
  661. nvview_nextline
  662. ;if eof, returns eof addr
  663. ;ahl=addr
  664. ;line < 16K
  665. ;out: ahl, CY=error
  666.         call iswrapon ;CY=on
  667.         jp c,nvview_pseudoprline
  668.         call getmaxlinesize ;bc=max line size before eof, z=(bc==0)
  669.          scf
  670.         ret z
  671.         push af
  672.         push hl
  673.         call ahl_to_pgaddr
  674. ;bc=number of chars to go != 0
  675. nvview_nextline0
  676.         ld a,(hl)
  677.         inc hl
  678.         dec bc
  679.         cp 0x0d
  680.         jr z,nvview_nextline_cr
  681.         cp 0x0a
  682.         jr z,nvview_nextline_cr;lf
  683.         ld a,b
  684.         or c
  685.         jr nz,nvview_nextline0
  686. nvview_nextlineq
  687.         ex de,hl ;new addr (bits 13..0), bit 14 = overflow
  688.         pop hl ;old addr
  689.         pop af
  690. pgaddr_to_ahl
  691. ;de = new addr (bits 13..0), bit 14 = overflow
  692. ;ahl = old addr
  693.         bit 6,d
  694.         ld bc,0x4000
  695.         jr z,$+4
  696.         add hl,bc
  697.         adc a,c;0
  698.         ld c,a
  699.         ld l,e
  700.         ld a,d
  701.         xor h
  702.         and 0x3f
  703.         xor h
  704.         ld h,a ;bits 13..0 copied
  705.         ld a,c ;ahl = new addr
  706.         ret ;nc
  707. nvview_nextline_cr
  708.         ld a,b
  709.         or c
  710.         jr z,nvview_nextlineq
  711.         ld a,(hl)
  712.         cp 0x0a
  713.         jr nz,nvview_nextline_lf
  714.         inc hl
  715. nvview_nextline_lf
  716.         jr nvview_nextlineq
  717.        
  718. nvview_prline
  719. ;ahl=addr
  720. ;check for last line (vs. file size)
  721. ;if filesize-addr < 80, then b=filesize-addr, else b=80
  722.         call getmaxlinesize ;bc=max line size before eof, z=(bc==0)
  723.         jr z,nvview_prlinespc_all;ret z
  724.         call ahl_to_pgaddr
  725. ;hl=#8000+0..#3fff
  726. ;bc=max line size before eof != 0
  727. nvview_prline_shift=$+1
  728.         ld de,0
  729.         call istherecr_or_lf ;add hl,de
  730.         ;jr nz,$+3
  731.         ;dec hl ;hl=cr/lf address
  732.  
  733.         push hl
  734.         ld h,b
  735.         ld l,c
  736.         or a
  737.         sbc hl,de
  738.         ld b,h
  739.         ld c,l ;bc=bc-lineshift
  740.         pop hl
  741.         ld a,NVVIEW_WID
  742.         jr c,nvview_prlinespc
  743.         jr z,nvview_prlinespc
  744.  
  745.         push hl
  746.         ld hl,NVVIEW_WID
  747.         call minhl_bc_tobc
  748.         ld b,c
  749.         pop hl
  750. ;b=number of chars to print != 0
  751.         ld de,prlinebuf
  752.         ld c,NVVIEW_WID
  753. nvview_prline0
  754.         ld a,(hl)
  755.         inc hl
  756.         cp 0x0d
  757.         jr z,nvview_prline_cr
  758.         cp 0x0a
  759.         jr z,nvview_prline_cr;lf
  760.         ;push bc
  761.         push hl
  762.         ld h,twinto866/256
  763.         ld l,a
  764. nvview_prline_recodepatch=$
  765.         nop ;/ld a,(hl)
  766.         ld (de),a ;PRCHAR_
  767.         inc de
  768.         pop hl
  769.         ;pop bc
  770.         dec c
  771.         djnz nvview_prline0
  772.         ;call print_prlinebuf
  773.         ;jr nz,nvview_prline_lf
  774.         ;ret
  775. nvview_prline_cr
  776.         call print_prlinebuf
  777. ;nvview_prline_lf
  778. ;допечатать пробелы до конца строки
  779.         jr nvview_prlinespc
  780. nvview_prlinespc_all
  781.         ld c,NVVIEW_WID
  782. nvview_prlinespc
  783.         push af
  784.         push hl
  785.         ;ld l,b
  786.         ;ld h,0
  787.         ;ld de,tspaces
  788.         ;call sendchars
  789.          ld a,c
  790.          or a
  791.         call nz,clearrestofline_crlf
  792.         pop hl
  793.         pop af
  794.         ret
  795.  
  796. print_prlinebuf
  797.         push af
  798.         push bc
  799.         push hl
  800. ;c=NVVIEW_WID-число символов
  801.         ld de,prlinebuf
  802.         ld a,NVVIEW_WID
  803.         sub c
  804.         ld l,a
  805.         ld h,0
  806.         call sendchars
  807.         pop hl
  808.         pop bc
  809.         pop af
  810.         ret
  811.  
  812. prlinebuf
  813.         ds NVVIEW_WID
  814.  
  815. nvview_pseudoprline
  816. ;ahl=addr
  817. ;out: ahl, CY=error
  818. ;check for last line (vs. file size)
  819. ;if filesize-addr < 80, then b=filesize-addr, else b=80
  820.         call getmaxlinesize ;bc=max line size before eof, z=(bc==0)
  821.          scf
  822.         ret z
  823.         push af
  824.         push hl
  825.         call ahl_to_pgaddr
  826. ;hl=#8000+0..#3fff
  827. ;bc=max line size before eof != 0
  828.         push hl
  829.         ld hl,NVVIEW_WID
  830.         call minhl_bc_tobc
  831.         ld b,c
  832.         pop hl
  833. ;b=number of chars to print != 0
  834.         ld c,NVVIEW_WID
  835. nvview_pseudoprline0
  836.         ld a,(hl)
  837.         inc hl
  838.         cp 0x0d
  839.         jr z,nvview_pseudoprline_cr
  840.         cp 0x0a
  841.         jr z,nvview_pseudoprline_lf
  842.         dec c
  843.         djnz nvview_pseudoprline0
  844.          ld a,(hl)
  845.          inc hl
  846.          cp 0x0d
  847.          jr z,nvview_pseudoprline_crok
  848.          cp 0x0a
  849.          jr z,nvview_pseudoprline_lf
  850.          dec hl
  851.         jp nvview_nextlineq
  852. nvview_pseudoprline_cr
  853.         dec b
  854.         jp z,nvview_nextlineq
  855. nvview_pseudoprline_crok
  856.         ld a,(hl)
  857.         cp 0x0a
  858.         jr nz,nvview_pseudoprline_lf
  859.         inc hl
  860. nvview_pseudoprline_lf
  861.         jp nvview_nextlineq
  862.        
  863. istherecr_or_lf
  864. ;hl=addr
  865. ;de=length to search
  866. ;out: z=found, hl=at match or after area
  867.         ld a,d
  868.         or e
  869.         jr z,istherecr_or_lf_fail
  870.          push hl
  871.         ld a,0x0d
  872.         call istherecrlfgo
  873.         jr z,popafZret;ret z
  874.          pop hl
  875.         ld a,0x0a
  876. istherecrlfgo
  877.         push bc
  878.         ld b,d
  879.         ld c,e
  880.         cpir ;TODO несколько раз через все блоки, если заканчиваются блоки, то их переключать
  881.         pop bc
  882.         ret nz ;nz=not found
  883.          dec hl
  884.         ret ;z=found
  885. istherecr_or_lf_fail
  886.         dec a
  887.         ret ;nz=not found
  888.        
  889. popafZret
  890.         pop af
  891.         cp a ;Z
  892.         ret
  893.        
  894. ;nvview_closefcb
  895. ;        ld de,fcb
  896. ;        OS_FCLOSE
  897. ;        ret
  898.  
  899. iswrapon
  900. ;CY = on
  901. wrapflag=$
  902.         scf;or a ;/scf
  903.         ret
  904.  
  905. reservepage
  906. ;new page, set page in textpages, npages++, set page in #c000
  907. ;nz=error
  908.         OS_NEWPAGE
  909.         or a
  910.         ret nz
  911. npages=$+1
  912.         ld hl,textpages
  913.         ld (hl),e
  914.         inc l
  915.         ld (npages),hl
  916.         ld a,e
  917.         SETPG32KHIGH
  918.         xor a
  919.         ret ;z
  920.  
  921. unreservepages
  922. unreservepages0
  923.         call unreservepage
  924.         jr z,unreservepages0
  925.         ret
  926.        
  927. unreservepage
  928. ;del page, npages--
  929. ;nz=error
  930.         ld hl,(npages)
  931.         ld a,l
  932.         or a
  933.         jr z,unreservepage_fail
  934.         dec l
  935.         ld (npages),hl
  936.         ld e,(hl)
  937.         OS_DELPAGE
  938.         xor a
  939.         ret ;z
  940. unreservepage_fail
  941.         xor a
  942.         dec a
  943.         ret ;nz
  944.        
  945. ahl_to_pgaddr
  946. ;keeps bc,de
  947. ;counts physical hl
  948.         rl h
  949.         rla
  950.         rl h
  951.         rla
  952.         srl h
  953.         scf
  954.         rr h
  955.         push bc
  956.         call setpg32k
  957.         pop bc
  958.         ret
  959.  
  960. setpg32k
  961. ;a=page number in table (0..)
  962.         push hl
  963.         ld l,a
  964.         ld h,textpages/256
  965.         ld a,(hl)
  966.         SETPG32KLOW
  967.         inc l
  968.         ld a,(hl)
  969.         SETPG32KHIGH
  970.         pop hl
  971.         ret
  972.  
  973. filesize
  974.         dw 0
  975. filesizeHSW
  976.         dw 0
  977.  
  978. nlines
  979.         dw 0
  980.