Subversion Repositories NedoOS

Rev

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