?login_element?

Subversion Repositories NedoOS

Rev

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

  1.  
  2. NVVIEW_XYTOP=0x0000
  3. NVVIEW_HGT=24
  4. NVVIEW_WID=80
  5. _NVVIEW_PANELCOLOR=0x0700;0x38
  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.         ld de,0
  20.         SETXY_
  21.         CLS_
  22.  
  23.         ld hl,unreservepages
  24.         push hl
  25.        
  26.         call setcurpaneldir
  27.         call nv_openfcb ;autopush nv_closefcb
  28.         ret nz ;error
  29.  
  30.         ld hl,0
  31.         ld de,0
  32. nvview_load0
  33.         push de
  34.         push hl
  35.         call reservepage
  36.         pop hl
  37.         pop de
  38.         ret nz ;no memory
  39.         ld a,0xc000/256
  40.         call cmd_loadpage
  41.         push af
  42.         ex de,hl
  43.         add hl,bc
  44.         ex de,hl
  45.         jr nc,$+3
  46.         inc hl
  47.         pop af
  48.         or a
  49.         jr z,nvview_load0
  50. ;hlde=true file size (for TRDOSFS)
  51.         ld (fcb+FCB_FSIZE),de
  52.         ld (fcb+FCB_FSIZE+2),hl
  53.  
  54.         xor a
  55.         ld h,a
  56.         ld l,a
  57.         call nvview_settop
  58.        
  59.         ;call nvview_panel        
  60.        
  61.         call nvview_calclines
  62.         ld hl,1;0
  63.         ld (nvview_ncurline),hl
  64.  
  65. nvview_redrawloop
  66.         ;jp nvview_hexeditor
  67.  
  68.         call nvview_prcurpage
  69. nvview_mainloop
  70. nvview_mainloop0
  71.         YIELD ;halt ;если сделать просто di:rst #38, то 1.сдвинем таймер и 2.можем потерять кадровое прерывание, а если без ei, то будут глюки
  72.         GETKEY_ ;OS_GETKEYNOLANG
  73.         ld a,c ;keynolang
  74.         cp NOKEY
  75.         jr nz,nvview_mainloop_keyq
  76.         call nvview_panel
  77.         jr nvview_mainloop0
  78. nvview_mainloop_keyq
  79.         cp key_redraw
  80.         jr z,nvview_redrawloop
  81.         cp key_esc
  82.         ret z
  83.         cp key_tab
  84.         jp z,nvview_hexeditor
  85.         ld hl,nvview_mainloop
  86.         push hl
  87.         cp key_up
  88.         jp z,nvview_up
  89.         cp key_down
  90.         jp z,nvview_down
  91.         cp key_pgup
  92.         jp z,nvview_pgup
  93.         cp key_pgdown
  94.         jp z,nvview_pgdown
  95.         cp 's';csss
  96.         jp z,nvview_changeencoding
  97.         cp key_home
  98.         jp z,nvview_home
  99.         cp key_sspgup;ext3
  100.         jp z,nvview_home
  101.         cp key_end
  102.         jp z,nvview_end
  103.         cp key_sspgdown;ext4
  104.         jp z,nvview_end
  105.         cp key_left
  106.         jp z,nvview_left
  107.         cp key_right
  108.         jp z,nvview_right
  109.         cp 'w'
  110.         jp z,nvview_wrap
  111.         ret
  112.  
  113. nvview_hexeditor
  114.         ;pop af ;снимаем адрес возврата
  115.         ld de,#0000
  116.         call nv_setxy
  117.         ld hl,(curtoptextaddr)
  118.         ld a,(curtoptextHSB)
  119.         ld (hexaddrlineHSB),a
  120.         ld a,l
  121.         and 0xf0
  122.         ld l,a
  123.         ld (hexaddrline),hl
  124.         ld hl,0
  125.         ld (hexcuraddrxy),hl
  126.         jp nvview_hexeditor_redrawloop
  127. nvview_hexeditorq
  128.         call nvview_calclines
  129.         ld hl,(hexaddrline)
  130.         ld a,(hexaddrlineHSB)
  131.         call nvview_nextline
  132.         call nvview_prevline ;line beginning (TODO fix uneven sizes in wrap mode)
  133.        
  134.         call nvview_settop
  135.         call nvview_calccurline
  136.        
  137.         jp nvview_redrawloop
  138.  
  139. nvview_wrap
  140.         ld a,(wrapflag)
  141.         xor 128
  142.         ld (wrapflag),a
  143.         ld hl,0
  144.         ld (nvview_prline_shift),hl
  145.         ld hl,(curtoptextaddr)
  146.         ld a,(curtoptextHSB)
  147.         call nvview_pgdown_pgup_ahl;nvview_prcurpage
  148.         call nvview_calclines
  149.         ld hl,(curtoptextaddr)
  150.         ld a,(curtoptextHSB)
  151.         call nvview_calccurline
  152.         ret
  153.        
  154. nvview_right
  155.         ld a,(nvview_prline_shift)
  156.         add a,8
  157.         ret c
  158.         ld (nvview_prline_shift),a
  159.         jp nvview_prcurpage
  160.        
  161. nvview_left
  162.         ld a,(nvview_prline_shift)
  163.         sub 8
  164.         ret c
  165.         ld (nvview_prline_shift),a
  166.         jp nvview_prcurpage
  167.        
  168. nvview_prcurpage
  169.         ld hl,(curtoptextaddr)
  170.         ld a,(curtoptextHSB)
  171.         jp nvview_prpage
  172.        
  173. nvview_home
  174.         ld hl,1;0
  175.         ld (nvview_ncurline),hl
  176.         xor a
  177.         ld h,a
  178.         ld l,a
  179.         call nvview_settop
  180.         jp nvview_prpage
  181.        
  182. nvview_end
  183.         ld hl,(fcb+FCB_FSIZE)
  184.         ld a,(fcb+FCB_FSIZE+2)
  185.         ld b,NVVIEW_HGT
  186. nvview_end0
  187.         push bc
  188.         call nvview_prevline
  189.         pop bc
  190.         djnz nvview_end0
  191.         call nvview_calccurline
  192.         jp nvview_prpage
  193.  
  194. deccurline
  195.         push hl
  196.         ld hl,(nvview_ncurline)
  197.         dec hl
  198.         ld (nvview_ncurline),hl
  199.         pop hl
  200.         ret
  201.        
  202. inccurline
  203.         push hl
  204.         ld hl,(nvview_ncurline)
  205.         inc hl
  206.         ld (nvview_ncurline),hl
  207.         pop hl
  208.         ret
  209.  
  210. nvview_up
  211.         ld hl,(curtoptextaddr)
  212.         ld a,(curtoptextHSB)
  213.         call isbof
  214.         ret z
  215.         call nvview_prevline
  216.         call nvview_settop
  217.         push af
  218.         push hl
  219.         ld de,NVVIEW_XYTOP
  220.         ld hl,256*NVVIEW_HGT + NVVIEW_WID
  221.         OS_SCROLLDOWN
  222.         ld de,NVVIEW_XYTOP
  223.         call nv_setxy
  224.         pop hl
  225.         pop af
  226.         call nvview_prline
  227.         call deccurline
  228.         ld hl,(curbottomtextaddr)
  229.         ld a,(curbottomtextHSB)
  230.         call nvview_prevline
  231.         jp nvview_setbottom
  232.  
  233. nvview_down
  234. curbottomtextaddr=$+1
  235.         ld hl,0
  236. curbottomtextHSB=$+1
  237.         ld a,0
  238.         call iseof
  239.         ret z
  240.         push af
  241.         push hl
  242.         ld de,NVVIEW_XYTOP
  243.         ld hl,256*NVVIEW_HGT + NVVIEW_WID
  244.         OS_SCROLLUP
  245.         ld de,NVVIEW_XYTOP+((NVVIEW_HGT-1)*256)
  246.         call nv_setxy
  247.         pop hl
  248.         pop af
  249.         call nvview_prline_nextline
  250.         call nvview_setbottom
  251.         call inccurline
  252. curtoptextaddr=$+1
  253.         ld hl,0
  254. curtoptextHSB=$+1
  255.         ld a,0
  256.         call nvview_nextline
  257. nvview_settop        
  258.         ld (curtoptextaddr),hl
  259.         ld (curtoptextHSB),a
  260.         ret
  261.  
  262. nvview_pgup
  263.         ld hl,(curtoptextaddr)
  264.         ld a,(curtoptextHSB)
  265. nvview_pgup_go
  266.         ld b,NVVIEW_HGT
  267. nvview_pgup0
  268.         push bc
  269.         call nvview_prevline
  270.          call nc,deccurline
  271.         pop bc
  272.         djnz nvview_pgup0
  273.         call nvview_prpage
  274.         jp clear_keyboardbuffer
  275.        
  276. nvview_pgdown
  277.          ld hl,(nvview_ncurline)
  278.          ld bc,NVVIEW_HGT
  279.          add hl,bc
  280.          ld (nvview_ncurline),hl
  281.         ld hl,(curbottomtextaddr)
  282.         ld a,(curbottomtextHSB)
  283. nvview_pgdown_pgup_ahl
  284.         ld b,NVVIEW_HGT
  285. nvview_pgdown0
  286.         push bc
  287.         call nvview_nextline
  288.          call nc,inccurline
  289.         pop bc
  290.         djnz nvview_pgdown0
  291.         jr nvview_pgup_go
  292.         if 1==0
  293.         ld b,NVVIEW_HGT
  294. nvview_pgdown1
  295.         push bc
  296.         call nvview_prevline
  297.          call nc,deccurline
  298.         pop bc
  299.         djnz nvview_pgdown1
  300.         call nvview_prpage
  301.         jp clear_keyboardbuffer
  302.         endif
  303.        
  304. nvview_calccurline
  305.         ;ld hl,(curtoptextaddr)
  306.         ;ld a,(curtoptextHSB)
  307. ;ahl=curtextline (kept)
  308.         push af
  309.         push hl
  310.         ld (nvview_calccurline_old),hl
  311.         ld (nvview_calccurline_oldHSB),a
  312.         ld ix,1;0
  313.          or h
  314.          or l
  315.          jr z,nvview_calccurline_countq
  316.         xor a
  317.         ld h,a
  318.         ld l,a
  319. nvview_calccurline_count0
  320.         call nvview_nextline;nvview_pseudoprline
  321.         push hl
  322. nvview_calccurline_old=$+1
  323.         ld bc,0
  324.         or a
  325.         sbc hl,bc ;nc: hl>=old
  326.         ld l,a
  327. nvview_calccurline_oldHSB=$+1
  328.         sbc a,0
  329.         ld a,l
  330.         pop hl
  331.         inc ix
  332.         jr c,nvview_calccurline_count0 ;cy: ahl<old
  333. nvview_calccurline_countq
  334.         ;push ix
  335.         ;pop hl
  336.         ld (nvview_ncurline),ix;hl
  337.         pop hl
  338.         pop af
  339.         ret
  340.        
  341. nvview_calclines
  342. ;out ix = lines
  343.         ld ix,0
  344.         xor a
  345.         ld h,a
  346.         ld l,a
  347. nvview_calclines0
  348.         inc ix
  349.         call nvview_nextline
  350.         call iseof
  351.         jp nz,nvview_calclines0
  352.         ld (nlines),ix
  353.         ret
  354.        
  355. clear_keyboardbuffer
  356.         push bc
  357.         ld b,5
  358. clear_keyboardbuffer0
  359.         push bc
  360.         GETKEY_
  361.         pop bc
  362.         djnz clear_keyboardbuffer0
  363.         pop bc
  364.         ret
  365.        
  366. nvview_changeencoding
  367.         ld hl,nvview_prline_recodepatch
  368.         ld a,(hl)
  369.         xor 0x7e ;"ld a,(hl)"
  370.         ld (hl),a
  371.         call nvview_prcurpage
  372.         ;ret
  373. nvview_panel
  374.         ld de,0x1800
  375.         call nv_setxy
  376.         ld de,_NVVIEW_PANELCOLOR;#38
  377.         SETCOLOR_
  378.        
  379.         ld a,(nvview_prline_recodepatch)
  380.         or a
  381.         ld hl,t866
  382.         jr z,$+5
  383.         ld hl,twin
  384.          ld c,0
  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 de,_COLOR;#38
  419.         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 "../_sdk/codepage/winto866"
  902.