?login_element?

Subversion Repositories NedoOS

Rev

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

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