Subversion Repositories NedoOS

Rev

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

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