Login

Subversion Repositories NedoOS

Rev

Rev 1135 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

htmlview
        call showtime

        ld hl,(curprintvirtualy)
        ld (html_endy),hl
        call prcharmc_stateful_resethandler
        ;ld hl,0
        ;ld (html_curtopy),hl
       
        ld hl,(firstpointer)
        ld (htmlshowline_accessedpointer),hl
        ld a,(firstpointerHSB)
        ld (htmlshowline_accessedpointerHSB),a
       
html_redrawloop
;redraw interface (TODO test)
        call cleanstatusline
        call browser_editline_print

        call htmlshowpage
        ;call setpgs_scr
       
html_mainloop

htmlcursorxy=$+1
        ld de,HTMLTOPY*256
        call html_setxy
        call setpgs_scr
        ld e,(hl)
        push de ;e=oldcolor
        ld a,0x38
        call html_prattr

html_getkeyloop0
        ;YIELD ;halt ;если сделать просто di:rst #38, то 1.сдвинем таймер и 2.можем потерять кадровое прерывание, а если без ei, то будут глюки
        ;GET_KEY ;OS_GETKEYNOLANG
        ; jr nz,html_getkeyloop0 ;no focus
        ;ld a,c ;keynolang        
        ;cp NOKEY
        call yieldgetkeynolang
        jr nz,html_mainloop_keyq
;control_imer_oldmousecoords=$+1
;        ld bc,0
;        ld (control_imer_oldmousecoords),de
;        ld a,b
;        sub d
;        ld d,a
;        ld a,e
;        sub c
;        ld e,a
;        ld (control_imer_mousecoordsdelta),de
       
        ;call nvview_panel
        jr html_getkeyloop0
;html_mainloop_keyq_nokey
;        xor a
html_mainloop_keyq

        pop de ;e=oldcolor
        push af
        push de
        ld de,(htmlcursorxy)
        call html_setxy
        pop de
        ld a,e
        call html_prattr

control_imer_mousecoordsdelta=$+1
        ld de,0
        call html_mousemove

        pop af
        cp key_redraw
        jr z,html_redrawloop
        ;cp key_esc
        ;jp z,browser_quit
        call globalbuttons
        ld hl,html_mainloop
        push hl
        cp key_up
        jp z,html_up
        cp key_up_scroll
        jp z,html_up_scroll
        cp key_down
        jp z,html_down
        cp key_down_scroll
        jp z,html_down_scroll
        cp key_right
        jp z,html_right
        cp key_left
        jp z,html_left
        cp key_enter
        jp z,html_enter
        cp 'l'
        jr z,html_download
        ;cp 's'
        ;jp z,browser_downloadthis
        ;cp '5'
        ;jp z,browser_reload
        cp 'u'
        jr z,html_changeencoding
        ;cp key_backspace
        ;jp z,browser_backspace
        cp key_pgup
        jp z,html_pgup
        cp key_pgdown
        jp z,html_pgdown
        cp key_home
        jp z,html_home
        cp key_end
        jp z,html_endkey
        ret

html_changeencoding
        ld hl,defaultunicodeflag
        ld a,(hl)
        xor 1
        ld (hl),a
        jp browser_reload
       
html_download
        call html_enter_find
        call keepcurlink
;linkbuf=relative link
        call makefulllink
;curfulllink=url

wgetloaded_pid=$+1
        ld a,0
        or a
        call z,reloadwget

;TODO проверить, что wget жив:
        ld a,(wgetloaded_pid)
        ld e,a
        OS_CHECKPID
        or a
        call z,reloadwget ;dead

;ждём готовности wget
waitwgetinit0
        YIELD
wgetmainpg=$+1
        ld a,0
        SETPG32KHIGH
        ld a,(0xc000+COMMANDLINE)
        inc a
        jr z,waitwgetinit0
       
        ld hl,curfulllink
        ld de,0xc000+WGETBUF
        call strcopy
        ld a,0xff
        ld (0xc000+COMMANDLINE),a ;строка задания готова
       
        jp remembercurlink
        ;jp browser_godownload

reloadwget
        call setpgtemp8000
        ld de,0x8000;oldpath
        OS_GETPATH

        OS_SETSYSDRV
        ld de,wgetfilename
        call openstream_file
        or a
        ret nz
       
        ld de,0x8000;oldpath
        OS_CHDIR
       
        OS_NEWAPP ;на момент создания должна быть включена текущая директория!!!
        or a
        jr nz,html_download_closeq ;error
;dehl=номера страниц в 0000,4000,8000,c000 нового приложения, b=id, a=error
        push bc ;b=id
        ld a,d
        ld (wgetmainpg),a
        SETPG32KHIGH
        ;push de
        ;push hl
        ld hl,0xc000+COMMANDLINE
        ld (hl),0xff ;daemon mode
        inc hl
        ld (hl),0
        ;pop hl
        ;pop de
        ld de,0xc100
        ld hl,0x3f00
        call readstream_file
        pop af
        ld (wgetloaded_pid),a
        ld e,a ;e=id
        OS_RUNAPP
html_download_closeq
        jp closestream_file

html_enter
;click on href
        call html_enter_find
        jp browser_go

html_enter_find
        ld a,(htmlcursorxy+1)
        sub HTMLTOPY
        ld c,a
        ld b,0
        ld hl,(html_curtopy)
        add hl,bc
        ld (html_enter_virtualy),hl

         ;jr $
        ld hl,(first2pointer)
        ld a,(first2pointerHSB)
html_enter_find0
        call isnull
        jr z,html_enter_findq
        push af
        push hl
       
        if 1==0
       
        ld bc,HREF_Y
        add hl,bc
        adc a,0
        call readword ;de=beginy
        ex de,hl
html_enter_virtualy=$+1
        ld bc,0
        or a
        sbc hl,bc ;HREF_Y - y
        ex de,hl
        jr z,html_enter_findlineok ;для правильной ссылки HREF_Y<=y
         ;jr c,html_enter_findlineok_hrefy_lessthan_y
       
        endif
         
;for long linktexts: beginyx<=yx<endyx
;можно первичную фильтрацию (beginy<=y<=endy), но неудобно

        ld bc,HREF_Y
        add hl,bc
        adc a,b;0
        call readword ;de=beginy
        call readbyte ;c=beginx
html_enter_virtualy=$+1
        ld hl,0
        ld a,(htmlcursorxy)
        ;hla=Yyx
        ;dec=beginYyx
        cp c
        sbc hl,de
        jr c,html_enter_findnext
        pop hl
        pop af
        push af
        push hl
        ld bc,HREF_ENDY
        add hl,bc
        adc a,b;0
        call readword ;de=endy
        call readbyte ;c=endx
        ld hl,(html_enter_virtualy)
        ld a,(htmlcursorxy)
        ;hla=Yyx
        ;dec=endYyx
        cp c
        sbc hl,de
        ;jr nc,html_enter_findnext
        jr c,html_enter_findok

html_enter_findnext
        pop hl
        pop af
        call getnextelement
        jr html_enter_find0
       
       
        if 1==0
       
html_enter_findlineok_hrefy_lessthan_y

       
html_enter_findlineok
        call readbyte ;c=beginx
        ld b,a
        ld a,(htmlcursorxy)
        cp c
        ld a,b
;x<beginx => fail
        jr c,html_enter_findnext
         ;jr $
        call readword ;de=endy
        push hl
        ld hl,(html_enter_virtualy)
        or a
        sbc hl,de
        pop hl
;y==endy => ok (long linktext)
        push af
        call readbyte ;c=endx
        pop af
        ;jr z,html_enter_findok_endy

        ld b,a
        ld a,(htmlcursorxy)
        cp c
        ld a,b
;x>=endx =>fail
        jr nc,html_enter_findnext
        ;jr html_enter_findok
               
html_enter_findok_endy
        endif

html_enter_findok
         ;pop bc
         ;pop bc
        ;call readbyte ;skip VISITED
         
         pop hl
         pop af
        ld bc,HREF_TEXT
        add hl,bc
        adc a,b;0
         
        ld de,linkbuf
html_enter_findok_copyname0
        call readbyte
        ex de,hl
        ld (hl),c
        inc hl
        ex de,hl
        inc c
        dec c
        jr nz,html_enter_findok_copyname0
               
         ;jr $
        ret
       
html_enter_findq
        pop af
        ret

html_prattr
        ld de,40
        ld b,8
html_prattr0
        ld (hl),a
        add hl,de
        djnz html_prattr0
        ret

html_setxy
;de=yx (kept)
        push de
        sla d
        sla d
        sla d
        call setxymc
        res 6,h
        pop de
        ret

html_left
        ld a,(htmlcursorxy)
        sub 1
        ret c
        ld (htmlcursorxy),a
        ret
       
html_right
        ld a,(htmlcursorxy)
        inc a
        cp 80
        ret nc
        ld (htmlcursorxy),a
        ret

MOUSEFACTOR=8
html_mousemove
;de=mouse delta
;чтобы двигать не резко, надо отдельно хранить младшие части x,y (не отображаемые на экране)
        ld hl,(htmlcursorxy)
htmlcursorxylow=$+1
        ld bc,0 ;bits 7..5 (for Y) 7..6 (for X), others=0
        dup 3
        sla b
        rl h
        edup        
        ld a,h
        add a,d
        bit 7,d
        jr z,html_mousemove_yplus
        jr nc,html_mousemove_yminus_overflow
        cp HTMLTOPY*MOUSEFACTOR
        jr nc,html_mousemove_yq
html_mousemove_yminus_overflow
        ld a,HTMLTOPY*MOUSEFACTOR
        jr html_mousemove_yq
html_mousemove_yplus
        jr c,html_mousemove_yplus_overflow
        cp MOUSEFACTOR*(HTMLTOPY+HTMLHGT-1)
        jr c,html_mousemove_yq
html_mousemove_yplus_overflow
        ld a,MOUSEFACTOR*(HTMLTOPY+HTMLHGT-1)
html_mousemove_yq  
        srl a
        rr b
        rra
        rr b
        rra
        rr b
        ld (htmlcursorxy+1),a

        ld h,0
        sla c
        rl l
        sla c
        adc hl,hl
        ld a,e
        rla
        sbc a,a
        ld d,a
        add hl,de
        bit 7,e
        jr z,html_mousemove_xplus
        jr c,html_mousemove_xq
        ld hl,0 ;ld a,HTMLTOPY*MOUSEFACTOR
        jr html_mousemove_xq
html_mousemove_xplus
        ld de,MOUSEFACTOR/2*(80-1)
        jr c,html_mousemove_xplus_overflow
        ;or a
        sbc hl,de
        add hl,de
        jr c,html_mousemove_xq
html_mousemove_xplus_overflow
        ex de,hl
html_mousemove_xq
        ld a,l
        rr h
        rra
        rr c
        rra
        rr c
        ld (htmlcursorxy),a

        ld (htmlcursorxylow),bc
        ret
       
html_up
        ld a,(htmlcursorxy+1)
        cp HTMLTOPY
        jr z,html_up_scroll1
        dec a
        ld (htmlcursorxy+1),a
        ret
html_up_scroll
mouse_scrollvalue=$+1
        ld a,0 ;*-0x10
html_up_scroll0
        push af
        call html_up_scroll1
        pop af
        add a,0x10;sub 0x10
        jr nz,html_up_scroll0
        ret
html_up_scroll1
        ld hl,(html_curtopy)
        ld a,h
        or l
        ret z
        dec hl
        ld (html_curtopy),hl
        push hl
        call scrollmcdown
        pop hl
        ld d,HTMLTOPY
;hl=virtual Y
;d=scry
        jp htmlcleanshowline
       
html_down
        ld a,(htmlcursorxy+1)
        cp HTMLTOPY+HTMLHGT-1
        jr z,html_down_scroll1
        inc a
        ld (htmlcursorxy+1),a
        ret
html_down_scroll
        ld a,(mouse_scrollvalue) ;*+0x10
html_down_scroll0
        push af
        call html_down_scroll1
        pop af
        sub 0x10;add a,0x10
        jr nz,html_down_scroll0
        ret
html_down_scroll1
        ld hl,(html_curtopy)
        inc hl
        ld (html_curtopy),hl
        push hl
        call scrollmcup
        pop hl
        ld bc,HTMLHGT-1
        add hl,bc
        ld d,HTMLTOPY+HTMLHGT-1
;hl=virtual Y
;d=scry
        jp htmlcleanshowline

html_pgup
        ld hl,(html_curtopy)
        ld bc,HTMLHGT-1
        xor a
        sbc hl,bc
        jr nc,$+4
        ld h,a
        ld l,a
topy_showpage_slearkeyboardbuffer
        ld (html_curtopy),hl
        call htmlshowpage
clear_keyboardbuffer
        push bc
        ld b,5
clear_keyboardbuffer0
        push bc
        GET_KEY
        pop bc
        djnz clear_keyboardbuffer0
        pop bc
        ret
       
html_pgdown
        ld hl,(html_curtopy)
        ld bc,HTMLHGT-1
        add hl,bc
        jr topy_showpage_slearkeyboardbuffer
        ;ld (html_curtopy),hl
        ;call htmlshowpage
        ;ret
       
html_home
        ld hl,0
        jr topy_showpage_slearkeyboardbuffer

html_endkey
html_endy=$+1
        ld hl,0
        jr topy_showpage_slearkeyboardbuffer
       
htmlshowpage
        ld d,HTMLTOPY
html_curtopy=$+1
        ld hl,0
htmlshowpage0
;hl=virtual Y
;d=scry
        call htmlcleanshowline
        inc hl
        inc d
        ld a,d
        cp HTMLTOPY+HTMLHGT
        jr nz,htmlshowpage0
        ret

htmlcleanshowline
;hl=virtual Y
;d=scry
        push de
        push hl
        ld e,0
        sla d
        sla d
        sla d
        call setxymc ;hl=0xc000+        
        call setpgs_scr
        xor a
        call cleanlinemc
        call setpgtemp8000
        pop hl
        pop de
       
        ;jr $
        push de
        push hl
        call htmlshowline
        pop hl
        pop de
        ret
       
htmlshowline
;hl=virtual Y
;d=scry
        ;jr $
        ld a,d
        add a,a
        add a,a
        add a,a
        ld (htmlshowline_scry),a
        ld (htmlshowline_virtualy),hl

htmlshowline_accessedpointer=$+1
        ld hl,0
htmlshowline_accessedpointerHSB=$+1
        ld a,0
       
;ищем вниз, если (accessedpointer.HREF_Y < y), иначе ищем вверх
        push af
        push hl
        call getandcompareHREF_Y ;CY = (HREF_Y < y)
        jr c,htmlshowline_finddown

;htmlshowline_findup
        pop hl
        pop af
htmlshowline_findup0
        call isnull
        jr z,htmlshowline_findq
        push af
        push hl
        call getandcompareHREF_Y
        jr z,htmlshowline_findok
         jr c,htmlshowline_pop2findq
        pop hl
        pop af
        call getprevelement
        jr htmlshowline_findup0

htmlshowline_finddown
        pop hl
        pop af
htmlshowline_finddown0
        call isnull
        jr z,htmlshowline_findq
        push af
        push hl
;        ld bc,HREF_Y
;        add hl,bc
;        adc a,b;0
;        call readword ;de
;        ex de,hl
;htmlshowline_virtualy=$+1
;        ld bc,0
;        or a
;        sbc hl,bc
;        ex de,hl
        call getandcompareHREF_Y
        jr z,htmlshowline_findok
         jr nc,htmlshowline_pop2findq
        pop hl
        pop af
        call getnextelement
        jr htmlshowline_finddown0
       
getandcompareHREF_Y
        ld bc,HREF_Y
        add hl,bc
        adc a,b;0
        call readword ;de
        ex de,hl
htmlshowline_virtualy=$+1
        ld bc,0
        or a
        sbc hl,bc
        ex de,hl
        ret ;CY = (HREF_Y < y), Z = equal

htmlshowline_findok
        push af
        push hl
        ld bc,HREF_Y+2
        or a
        sbc hl,bc
        sbc a,b;0
        ld (htmlshowline_accessedpointer),hl
        ld (htmlshowline_accessedpointerHSB),a
        pop hl
        pop af

        call readbyte ;x
        ld e,c
htmlshowline_scry=$+1
        ld d,0
        push af
        push hl
        call setxymc_stateful
        pop hl
        pop af
htmlshowline_showtext0
        call readbyte ;c
        inc c
        dec c
        jr z,htmlshowline_showtextq
        push af
        push hl
        ld a,c
        call prcharmc_stateful
        pop hl
        pop af
        jr htmlshowline_showtext0
htmlshowline_showtextq
       
htmlshowline_pop2findq
        pop hl
        pop af
       
htmlshowline_findq

        ret
       
        if 1==0
        ld hl,(firstpointer)
        ld a,(firstpointerHSB)
loadhtml_showtexts0
        call isnull
        jr z,loadhtml_showtextsq
        push af
        push hl
        ld bc,stringbuf1-stringbuf1header
        add hl,bc
        adc a,0
        ;jr $
loadhtml_showtext0
        call readbyte ;c
        inc c
        dec c
        jr z,loadhtml_showtextq
        push af
        push hl
        ld a,c
        call prcharmc_stateful
        pop hl
        pop af
        jr loadhtml_showtext0
loadhtml_showtextq
        call prcharmc_crlf_stateful
        pop hl
        pop af
        call getnextelement
        jr loadhtml_showtexts0
loadhtml_showtextsq
       
       
        ld hl,(first2pointer)
        ld a,(first2pointerHSB)
loadhtml_showhrefs0
        call isnull
        jr z,loadhtml_showhrefsq
        push af
        push hl
        ld bc,stringbuf2-stringbuf2header
        add hl,bc
        adc a,0
        ;jr $
loadhtml_showhref0
        call readbyte ;c
        inc c
        dec c
        jr z,loadhtml_showhrefq
        push af
        push hl
        ld a,c
        call prcharmc_stateful
        pop hl
        pop af
        jr loadhtml_showhref0
loadhtml_showhrefq
        call prcharmc_crlf_stateful
        pop hl
        pop af
        call getnextelement
        jr loadhtml_showhrefs0
loadhtml_showhrefsq

        jp closequit
        endif