Subversion Repositories NedoOS

Rev

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

  1.         DEVICE ZXSPECTRUM128
  2.         include "../_sdk/sys_h.asm"
  3.  
  4. WGETBUF=0x0800
  5. ;WGETBUFSZ=0x0400
  6. ;WGETBEGINADDR=WGETBUF+WGETBUFSZ
  7. ;WGETENDADDR=WGETBEGINADDR+2
  8.  
  9. end1=0x3500
  10.  
  11. DISKBUF=0x3500;0xb000
  12. DISKBUFsz=0x800;0x1000
  13.  
  14. LINEPIXELS=0x3d00 ;,wid8*2 (ьръё. ЁрчьхЁ = 512 фы  wid=2048) ;TODO Ёрэ№°х ш яютхЁї LINEGIF (ўЄюс√ pixels °ыш Ёрэ№°х, р attr чрЄшЁры х╕ т яЁюЎхёёх ъюэтхЁёшш)
  15.  
  16. STACK=0x3ffc
  17. SPOIL4B=0x4000 ;ьшъЁюёЄхъ эр 4 срщЄр, эхы№ч  эшцх 0x3b00 ;Ёрэ№°х с√ыю т эхтшфшьющ ўрёЄш ёЄЁрэшЎ√ ¤ъЁрэр, эю ёхщўрё ь√ яхЁхъы■ўрхь ¤ъЁрэ ё ¤Єшь ёЄхъюь
  18.  
  19. end2=0x7e00
  20.  
  21. depkbuf=0x7e00 ;32K+ for zip (match length of 3Ц258 bytes)
  22. buf64k=0
  23.  
  24. FREE=0x8000 ;фшэрьшўхёър  ярь Є№ jpeg, сєЇхЁ ёЄЁюъш gif
  25. LINE1=0x9400 ;сєЇхЁ ёЄЁюъш 0x400*3? jpeg
  26. LINE1_sz=0x0c00
  27.  
  28.  
  29. COLOR=7
  30. STATUSCOLOR=0x38
  31.  
  32. GIF_PIXELSIZE=0
  33.  
  34. HTMLTOPY=0
  35. HTMLHGT=24
  36. SCROLLHGT=HTMLHGT*8;192;200
  37.  
  38. BACKGROUNDCOLORLEVEL=0 ;яЁш юўшёЄъх сєЇхЁр ёЄЁюъш (фы  яЁртшы№эюую яЁртюую ъЁр  т юёЄрЄъх чэръюьхёЄр)
  39.  
  40. MAXLINKSZ=256-1
  41.  
  42. EDITLINEY=192
  43. EDITLINEMAXVISIBLEX=72
  44.  
  45.  
  46.        MACRO rdbyte
  47.         INC LY
  48.         LD A,(IY)
  49.         CALL Z,RDBYH
  50.        ENDM
  51.  
  52.        MACRO ziprdbyte
  53.         INC LY
  54.         LD A,(IY)
  55.         CALL Z,ZIPRDBYH
  56.        ENDM
  57.  
  58. ;b=R/G/Bmin
  59. ;de эр эрўрых сєЇхЁр R/G/B
  60. ;h=maxdistdiv
  61. ;т фшЇхЁшэух їюфшь Єюы№ъю яю юфэющ ёюёЄрты ■∙хщ, юёЄры№э√х эх ўшЄрхь:
  62.         macro DITHERMC1B ch0,ch1,ch2,ch3
  63.         ld a,(de) ;R(pixel)
  64.         inc e
  65.         sub b ;Rmin
  66.          rra ;maybe<0
  67.         ld l,a ;h=maxdistdiv
  68.         ld a,(hl) ;inklevel
  69.         cp ch0 ;chunklevel[x%4][y%4]
  70.         rl c ;bits
  71.         ld a,(de) ;R(pixel)
  72.         inc e
  73.         sub b ;Rmin
  74.          rra ;maybe<0
  75.         ld l,a ;h=maxdistdiv
  76.         ld a,(hl) ;inklevel
  77.         cp ch1 ;chunklevel[x%4][y%4]
  78.         rl c ;bits
  79.         ld a,(de) ;R(pixel)
  80.         inc e
  81.         sub b ;Rmin
  82.          rra ;maybe<0
  83.         ld l,a ;h=maxdistdiv
  84.         ld a,(hl) ;inklevel
  85.         cp ch2 ;chunklevel[x%4][y%4]
  86.         rl c ;bits
  87.         ld a,(de) ;R(pixel)
  88.         inc e
  89.         sub b ;Rmin
  90.          rra ;maybe<0
  91.         ld l,a ;h=maxdistdiv
  92.         ld a,(hl) ;inklevel
  93.         cp ch3 ;chunklevel[x%4][y%4]
  94.         rl c ;bits
  95.  
  96.         ld a,(de) ;R(pixel)
  97.         inc e
  98.         sub b ;Rmin
  99.          rra ;maybe<0
  100.         ld l,a ;h=maxdistdiv
  101.         ld a,(hl) ;inklevel
  102.         cp ch0 ;chunklevel[x%4][y%4]
  103.         rl c ;bits
  104.         ld a,(de) ;R(pixel)
  105.         inc e
  106.         sub b ;Rmin
  107.          rra ;maybe<0
  108.         ld l,a ;h=maxdistdiv
  109.         ld a,(hl) ;inklevel
  110.         cp ch1 ;chunklevel[x%4][y%4]
  111.         rl c ;bits
  112.         ld a,(de) ;R(pixel)
  113.         inc e
  114.         sub b ;Rmin
  115.          rra ;maybe<0
  116.         ld l,a ;h=maxdistdiv
  117.         ld a,(hl) ;inklevel
  118.         cp ch2 ;chunklevel[x%4][y%4]
  119.         rl c ;bits
  120.         ld a,(de) ;R(pixel)
  121.         inc e
  122.         sub b ;Rmin
  123.          rra ;maybe<0
  124.         ld l,a ;h=maxdistdiv
  125.         ld a,(hl) ;inklevel
  126.         cp ch3 ;chunklevel[x%4][y%4]
  127.         ld a,c
  128.         rla ;bits
  129.         exx
  130.         ld (de),a ;чряшёрЄ№ bits
  131.         ;exx
  132.         endm
  133.        
  134.         org PROGSTART
  135. cmd_begin
  136.         ld sp,STACK ;эх фюыцхэ юяєёърЄ№ё  эшцх #3b00! шэрўх тючьюцэр яюЁўр OS
  137.         call init        
  138.        
  139. ;curfulllink эєцхэ фы  ёюїЁрэхэш  т шёЄюЁшш ш шёяюы№чютрэш  яєЄш фы  юЄэюёшЄхы№э√ї ёё√ыюъ
  140. ;linkbuf ёюфхЁцшЄ ёё√ыъє (ьюцхЄ с√Є№ юЄэюёшЄхы№эр )
  141.         if 1==0
  142.         call setpgs_scr
  143.         call setpgcode4000
  144.         ld de,0xc000;0x0801
  145.         call setxymc
  146.         ld de,curfulllink;COMMANDLINE
  147.         call prtextmc
  148.         call setpgtemp8000
  149.         ;jr $
  150.         endif
  151.  
  152.         ;call keepcurlink
  153.  
  154.         jp browser_go_curfulllink
  155.        
  156. browser_godownload
  157.         ld a,1
  158.         ld (downloadflag),a
  159. browser_go
  160. ;curfulllink ёюфхЁцшЄ Єхъє∙є■ ёё√ыъє (шч эх╕ сЁрЄ№ яєЄ№), ёых° т ъюэЎх http://ser.ver єцх хёЄ№
  161. ;т linkbuf ыхцшЄ ёё√ыър (ьюцхЄ с√Є№ ыюъры№эр )
  162. ;TODO яхЁхъюфшЁютрЄ№ Ёєёёъшх сєът√ т ёё√ыъх т %? Єюы№ъю т эрсЁрээющ тЁєўэє■?
  163.         ld hl,linkbuf
  164.         push hl
  165.         push hl
  166.         call strlen
  167.         inc hl
  168.         ;move block to end of buf:
  169.         pop de;ld de,linkbuf
  170.         ld b,h
  171.         ld c,l ;size
  172.         dec de ;linkbuf-1
  173.         add hl,de ;end of data
  174.         ld de,linkbuf+(MAXLINKSZ+1)-1
  175.         lddr
  176.         inc de ;begin of data
  177.         ex de,hl
  178.         pop de;ld de,linkbuf
  179. recodelinkamp0
  180.         ld a,(hl)
  181.         inc hl
  182.         ld (de),a
  183.         inc de
  184.         or a
  185.         jr z,recodelinkamp0q
  186.         cp '&'
  187.         jr nz,recodelinkamp0
  188.         ld a,(hl)
  189.         cp 'a'
  190.         jr nz,recodelinkamp0
  191.         inc hl
  192.         ld a,(hl)
  193.         cp 'm'
  194.         jr nz,recodelinkamp0dec1
  195.         inc hl
  196.         ld a,(hl)
  197.         cp 'p'
  198.         jr nz,recodelinkamp0dec2
  199.         inc hl
  200.         ld a,(hl)
  201.         cp ';'
  202.         inc hl
  203.         jr z,recodelinkamp0
  204.         dec hl
  205.         dec hl
  206. recodelinkamp0dec2
  207.         dec hl
  208. recodelinkamp0dec1
  209.         dec hl
  210.         jr recodelinkamp0
  211. recodelinkamp0q
  212.  
  213.         call keepcurlink
  214.        
  215.         call makefulllink
  216. ;curfulllink ёюфхЁцшЄ яюыэ√щ url, ёюсЁрээ√щ шч ёЄрЁюую curfullink ш ёё√ыъш linkbuf
  217.  
  218.         if 1==0
  219.         call setpgs_scr
  220.         call setpgcode4000
  221.         ld de,0x0000
  222.         call setxymc
  223.         ld de,curfulllink;COMMANDLINE
  224.         call prtextmc
  225.         call setpgtemp8000
  226.         jr $
  227.         endif
  228.        
  229. browser_go_curfulllink
  230.        
  231.         jr browser_backspaceq
  232. keepcurlink
  233. ;фы  backspace: чряюьэшЄ№ яюыэ√щ яєЄ№ ё яЁюЄюъюыюь ш шьхэхь
  234. ;histaddr єърч√трхЄ эр яюёыхфэшщ ¤ыхьхэЄ шёЄюЁшш
  235.         call setpghist
  236. histaddr=$+1
  237.         ld de,0xc000
  238.         ld a,d
  239.         inc a
  240.         jr nz,keeptohist_nooverflow
  241.         ld hl,0xc100
  242.         ld de,0xc000
  243.         ld bc,0x3f00
  244.         ldir ;forget oldest link
  245. keeptohist_nooverflow
  246.         ld hl,curfulllink;linkbuf
  247.         ld bc,254
  248.         ldir
  249.         ld hl,html_curtopy
  250.         ld c,2
  251.         ldir
  252.         ld (histaddr),de
  253.         ld (html_curtopy),bc ;0
  254.         ret
  255.  
  256. remembercurlink
  257.         ld hl,(histaddr)
  258.         ld a,h
  259.         cp 0xc0
  260.         ret z ;jr z,browser_reload ;no history
  261.         dec h
  262.         ld (histaddr),hl
  263.         call setpghist
  264.          ;jr $
  265.         ld de,curfulllink;linkbuf
  266.         ;call strcopy
  267.         ld bc,254
  268.         ldir
  269.         ld de,html_curtopy
  270.         ldi
  271.         ldi
  272.         ret
  273.  
  274. browser_downloadthis
  275.         ld a,1
  276.         ld (downloadflag),a
  277. browser_reload
  278. ;histaddr єърч√трхЄ эр яюёыхфэшщ ¤ыхьхэЄ шёЄюЁшш
  279.         ;ld hl,(histaddr)
  280.         ;call setpghist
  281.         ;ld de,curfulllink;linkbuf
  282.         ;call strcopy
  283.         jr browser_backspaceq
  284.  
  285. browser_backspace
  286. ;тёяюьэшЄ№ ёЄрЁ√щ яєЄ№ ё яЁюЄюъюыюь ш шьхэхь, яюыюцшЄ№ хую т curfulllink
  287. ;ёхщўрё histaddr єърч√трхЄ эр яюёыхфэшщ ¤ыхьхэЄ шёЄюЁшш. шф╕ь эрчрф ш чряюьэшь эют√щ єърчрЄхы№
  288.         call remembercurlink
  289.  
  290. browser_backspaceq
  291. ;curfulllink ёюфхЁцшЄ яюыэ√щ url, ёюсЁрээ√щ шч ёЄрЁюую curfullink ш ёё√ыъш linkbuf        
  292.         ld sp,STACK ;эх фюыцхэ юяєёърЄ№ё  эшцх #3b00! шэрўх тючьюцэр яюЁўр OS
  293.        
  294.         call unreservepages
  295.         xor a
  296.         ld h,a
  297.         ld l,a
  298.         ld (freemem_hl),hl
  299.         ld (freemem_a),a
  300.  
  301.         call cleanstatusline
  302.         call browser_editline_print
  303.         call setpgtemp8000
  304.  
  305.          OS_GETTIMER ;hlde=timer
  306.          ld (timebegin),de
  307.  
  308.         ld hl,curfulllink
  309.         call isprotocolpresent
  310. ;a=protocol (0=file, 1=http), hl=after "//"
  311.         push hl ;hl=after "//"
  312.  
  313. ;тъы■ўшЄ№ ъюыс¤ъш яюф эєцэ√щ яЁюЄюъюы
  314.         ld bc,readstream_file
  315.         ld de,closestream_file
  316.         ld hl,openstream_file
  317.          or a
  318.          jr z,browser_go_changeprotocol_nohttp
  319.         ld bc,readstream_http
  320.         ld de,closestream_http
  321.         ld hl,openstream_http
  322. browser_go_changeprotocol_nohttp
  323.         ld (openstream_patch),hl
  324.         ld (readstream_patch),bc
  325.         ld (closestream_patch),de
  326.        
  327.         pop hl
  328.  
  329. ;hl=эрўрыю path схч яЁюЄюъюыр
  330.  
  331.         ex de,hl ;de=filename
  332. openstream_patch=$+1
  333.         call openstream_file
  334.         or a
  335.         jp nz,LOADERROR
  336.  
  337.         xor a
  338. downloadflag=$+1
  339.         cp 0
  340.         ld (downloadflag),a
  341.         jp nz,downloadfile
  342.        
  343.         call initframes_time_scroll
  344.        
  345.        LD IY,DISKBUF+DISKBUFsz-1
  346.  
  347.         call RDBYTE
  348.          ;jr $
  349.         ;cp '<'
  350.         ;jp z,loadhtml
  351.          ;cp 0x0a ;speccy.info
  352.          ;jp z,loadhtml
  353.         cp 'G'
  354.         jp z,loadgif
  355.         cp 0x89
  356.         jp z,loadpng
  357.         cp 0xff
  358.         jp z,loadjpeg
  359.         cp 'B'
  360.         jp nz,loadhtml;loadbmp_fail
  361.         call RDBYTE
  362.         cp 'M'
  363.         jp nz,loadhtml;loadbmp_fail
  364.  
  365. ; I    1    0      2    ╧Ёшчэръ ┬╠╨-Їрщыр - ёшьтюы√ 'BM'       (+)
  366. ;      2    2      4    ╨рчьхЁ ┬╠╨-Їрщыр (срщЄ)                (═└─╬ ╤╘╬╨╠╚╨╬┬└╥▄, ╫╚╥└╥▄ ═┼ ═╙╞═╬)
  367. ;      3    6      4    ╨хчхЁт (=0)                            (═└╠ ═┼ ═╙╞═╬)
  368. ;      4   10      4    ╤ьх∙хэшх т срщЄрї юЄ эрўрыр Їрщыр фю  
  369. ;                       эрўрыр юяшёрэш  ЁрёЄЁютюую шчюсЁрцхэш  (═└╠ ═┼ ═╙╞═╬, є эрё 118)
  370.                                                              
  371. ; II   5   14      4    ╨рчьхЁ ╬яшёрэш  ╚чюсЁрцхэш  (=40 WINDOWS) (═└╠ ═┼ ═╙╞═╬, тёхуфр 40)
  372. ;      6   18      4    ╪шЁшэр шчюсЁрцхэш  (т яшъёхырї)        (+)
  373. ;      7   22      4    ┬√ёюЄр шчюсЁрцхэш  (т яшъёхырї)        (+)
  374. ;      8   26      2    ╩юышўхёЄтю ЎтхЄют√ї яыюёъюёЄхщ (=1)    (═└╠ ═┼ ═╙╞═╬, тёхуфр 1)
  375. ;      9   28      2    ╩юышўхёЄтю сшЄ эр яшъёхы               (+ 4, 8, 24 ┴╚╥, ╧╬╥╬╠ ╠╬╞═╬ 1┴╚╥)
  376. ;     10   30      4    ┬шф ёцрЄш  шэЇюЁьрЎшш (0,1 шыш 2)      (╧╬╩└ ╫╥╬ ┴┼╟ ╤╞└╥╚▀)
  377. ;     11   34      4    ╨рчьхЁ юсЁрчр ЁрёЄЁютюую шчюсЁрцхэш    (═└─╬ ╤╘╬╨╠╚╨╬┬└╥▄, ╫╚╥└╥▄ ═┼ ═╙╞═╬)
  378. ;     12   38      4    ╨хъюьхэфєхьюх уюЁшчюэ-юх ЁрчЁх°хэшх    (═└╠ ═┼ ═╙╞═╬)
  379. ;     13   42      4    ╨хъюьхэфєхьюх тхЁЄшъры№эюх ЁрчЁх°хэшх  (═└╠ ═┼ ═╙╞═╬)
  380. ;     14   46      4    ╩юышўхёЄтю ЎтхЄют т ярышЄЁх            (+)
  381. ;     15   50      4    ╩юышўхёЄтю трцэ√ї ЎтхЄют т ярышЄЁх     (═└╠ ═┼ ═╙╞═╬)
  382.  
  383. ;фры№°х шф╕Є ярышЄЁр (B, G, R, 0)
  384.  
  385. ;фры№°х шф╕Є ърЁЄшэър (фышэ√ ёЄЁюъ т срщЄрї ъЁрЄэ√ 4)
  386.  
  387.         ld b,18-2
  388. loadbmp_skipheader0
  389.         call RDBYTE
  390.         djnz loadbmp_skipheader0
  391.         call GETDWORD_slow
  392.         ex de,hl ;hl=wid
  393.         call setpicwid
  394.         call GETDWORD_slow
  395.         ;ld (curpichgt),de
  396.         ex de,hl
  397.         call setpichgt
  398.        
  399.         ld b,54-26
  400.         call read_b_bytes
  401.        
  402.         ;ld de,0
  403.         ;ld hl,0 ;dehl=shift in file
  404.         ;ld a,(filehandle)
  405.         ;ld b,a
  406.         ;OS_SEEKHANDLE
  407.  
  408. ;TODO чрърчрЄ№ сыюъ ярь Єш ш уЁєчшЄ№ т эхую (ьюцэю уЁєчшЄ№ яю юфэюьє срщЄє, ёЄЁюўъш ъюэтхЁЄшЄ№ яю юфэющ, Єюуфр сєЇхЁ bmp эх эєцхэ)
  409.        
  410.         call reservepage
  411.         ret nz ;no memory
  412.         ld hl,DISKBUF
  413.         ld de,0xc000
  414.         ld bc,DISKBUFsz
  415.         ldir ;beginning of file is already read
  416.         ld hl,0x4000-DISKBUFsz
  417.         jr nvview_loadbmp0go
  418.        
  419. nvview_loadbmp0
  420.         call reservepage
  421.         ret nz ;no memory
  422.  
  423.         ld de,0xc000
  424.         ld hl,0x4000
  425. nvview_loadbmp0go
  426. ;DE = Buffer address, HL = Number of bytes to read
  427.          push hl
  428.         call readstream
  429. ;HL = Number of bytes actually read
  430.         ld b,h
  431.         ld c,l
  432.          pop hl
  433.         or a
  434.         sbc hl,bc ;NZ = bytes to read != bytes actually read
  435.         jr z,nvview_loadbmp0
  436.        
  437.         ld a,(npages)
  438.         ld hl,0
  439.         srl a
  440.         rr h
  441.         srl a
  442.         rr h
  443.         ld (freemem_hl),hl
  444.         ld (freemem_a),a ;ъюёЄ√ы№ (TODO чрърч√трЄ№ ярь Є№ яюф bmp эюЁьры№эю)
  445.        
  446.         call reservefirstframeaddr
  447.         call initframe ;юфшэ Ёрч эр ърЁЄшэъє яюёых setpicwid, setpichgt ш яюёых єёЄрэютъш gifframetime ;чрърч√трхЄ ярь Є№ яюф ъюэтхЁўхээ√щ ърфЁ
  448. ;ahl=рфЁхё ярь Єш яюф ъюэтхЁўхээ√щ ърфЁ
  449.  
  450.         ld hl,54 ;TODO юЄэюёшЄхы№эю эрўрыр bmp
  451.         xor a
  452. ;яхЁхщЄш эр яюёыхфэ■■ ёЄЁюўъє (ўЄюс√ ЁшёютрЄ№ ёэшчє ттхЁї, эєцэю ьхэ Є№ drawscreenline_frombuf):
  453.         if GIF_PIXELSIZE
  454.         ld de,(curpicwid)
  455.         else
  456.         ld de,(curpicwidx3)
  457.         endif
  458.         dec de
  459.         set 1,e
  460.         set 0,e
  461.         inc de ;юъЁєуышыш ЁрчьхЁ ёЄЁюъш ттхЁї фю 4 срщЄ: 0=>0, 1..3=>4, 4=>4...
  462.         ld (bmplinestep),de
  463.         ld bc,(curpichgt)
  464. bmpfindlastline0
  465.         add hl,de
  466.         adc a,0
  467.         dec hl
  468.         cpi
  469.         jp pe,bmpfindlastline0
  470.         ld (putchar_hl),hl
  471.         ld (putchar_a),a
  472.  
  473.         call setpgtemp8000
  474.  
  475.         ld bc,(curpichgt)
  476. fill0
  477.         push bc
  478.  
  479.         ld hl,(putchar_hl)
  480.         ld a,(putchar_a)
  481. bmplinestep=$+1
  482.         ld bc,0
  483.         or a
  484.         sbc hl,bc
  485.         sbc a,0
  486.         ld (putchar_hl),hl
  487.         ld (putchar_a),a        
  488.  
  489.         call islinevisible ;CY=invisible
  490.         jr c,bmpgetline_ifvisibleq
  491.         ld hl,(putchar_hl)
  492.         ld a,(putchar_a)
  493.         ld bc,(bmplinestep)
  494.         ld de,LINEGIF
  495.         call getfrommem
  496.         ld hl,LINEGIF
  497.         call drawscreenline_frombuf
  498.         call keepconvertedline ;чряюьшэрхь ёъюэтхЁўхээє■ ёЄЁюъє шч LINEPIXELS
  499. bmpgetline_ifvisibleq
  500.         call inccury
  501.  
  502.         pop bc
  503.         cpi
  504.         jp pe,fill0
  505.         jp showgif ;jp closequit
  506.        
  507. downloadfile
  508.         call reservepage
  509.         ret nz ;no memory
  510.        
  511.         ld de,downloadfilename ;TODO ёухэхЁшЁютрЄ№ шч єЁыр шыш HTTP юЄтхЄр + чряЁюёшЄ№ ЁхфръЄшЁютрэшх
  512. ;de=filename
  513.         OS_CREATEHANDLE
  514. ;b=new file handle
  515.         ld a,b
  516.         ld (downloadfilehandle),a
  517.        
  518. downloadfile0
  519.         ld de,0xc000
  520.         ld hl,0x4000
  521. ;DE = Buffer address, HL = Number of bytes to read
  522.          push hl
  523.         call readstream
  524.         ;jr $
  525. ;HL = Number of bytes actually read, A=error
  526.  
  527.         push hl
  528.         ld de,0xc000
  529. downloadfilehandle=$+1
  530.         ld b,0
  531.         OS_WRITEHANDLE
  532.         pop hl
  533.  
  534.         ld b,h
  535.         ld c,l
  536.          pop hl
  537.         or a
  538.         sbc hl,bc ;NZ = bytes to read != bytes actually read
  539.         jr z,downloadfile0
  540.        
  541.         ld a,(downloadfilehandle)
  542.         ld b,a
  543.         OS_CLOSEHANDLE
  544.        
  545.         ld hl,downloadfilename
  546.         inc (hl) ;TODO ттюф шьхэш
  547.  
  548.         jp closequit
  549.  
  550. loadpng
  551.          call setpgtemp8000
  552.         call readpng
  553.         jr showgif
  554.  
  555. loadjpeg
  556.         ;call initframes_time_scroll
  557.         call readjpeg
  558.         jr showgif
  559.        
  560. loadgif
  561.         ;call initframes_time_scroll
  562.         call readgif
  563.  
  564. showgif
  565.         call showtime
  566.  
  567. showgif_firstframe
  568.         ;jr $
  569. nframes=$+1
  570.         ld bc,0 ;0 шыш 1 т√ъы■ўр■Є єяЁртыхэшх
  571.         dec bc
  572.        
  573.         ld hl,(curpichgt_visible)
  574.         ld de,SCROLLHGT+1
  575.         or a
  576.         sbc hl,de
  577.         jr nc,showgif_drawevenifoneframe
  578.         ld hl,(keepframe_linesize)
  579.         ld de,80+1
  580.         or a
  581.         sbc hl,de
  582.         jr nc,showgif_drawevenifoneframe
  583.         dec bc
  584.         bit 7,b
  585.         inc bc
  586.         jp nz,closequit;showgifq ;хёыш 0 шыш 1 ърфЁ
  587. showgif_drawevenifoneframe
  588.  
  589. firstframeaddr=$+1
  590.         ld hl,0
  591. firstframeaddrHSB=$+1
  592.         ld a,0
  593. ;bc=ўшёыю ърфЁют-1
  594. showgif_frames0
  595.         push bc
  596.        
  597.         push hl
  598.         push af
  599.         OS_GETTIMER ;hlde=timer
  600.         pop af
  601.         ex de,hl
  602.         ex (sp),hl
  603.         call showframe ;ўшЄрхЄ showframetime шч ърфЁр
  604.        
  605.         pop de ;timer
  606.        
  607.         push af
  608.         push hl
  609.        
  610. showframetime=$+1
  611.         ld hl,0 ;in 1/100 s
  612.         inc hl
  613.         srl h
  614.         rr l
  615.         add hl,de ;max timer for this frame
  616.         ld (showframemaxtimer),hl
  617.  
  618. showframe_delay0
  619.         call yieldgetkeynolang ;z=nokey
  620.         ;cp key_enter
  621.         ;jp z,closequit ;TODO restore stack
  622.         ;cp 'z'
  623.         ;jr z,showframe_setzoom
  624.         call globalbuttons
  625.         ld hl,(xscroll)
  626.         cp key_left
  627.         jr z,showframe_left
  628.         cp key_right
  629.         jr z,showframe_right
  630.         ld hl,(yscroll)
  631.         cp key_down
  632.         jr z,showframe_down
  633.         cp key_up
  634.         jr z,showframe_up
  635. showframe_nokey
  636.         OS_GETTIMER ;hlde=timer
  637. showframemaxtimer=$+1
  638.         ld bc,0 ;max timer for this frame
  639.         ex de,hl
  640.         or a
  641.         sbc hl,bc
  642.         jp m,showframe_delay0 ;timer<maxtimer
  643.  
  644.         pop hl
  645.         pop af
  646.  
  647.         pop bc
  648.         dec bc
  649.         bit 7,b
  650.         jr z,showgif_frames0
  651.        
  652.         jp showgif_firstframe
  653.  
  654. showframe_setzoom
  655.         ld hl,setzoom_patch
  656.         ld a,(hl)
  657.         xor 0x80
  658.         ld (hl),a
  659.         jp browser_reload
  660.  
  661. ;TODO яЁюсыхьр, хёыш чрфхЁцър ърфЁр ёыш°ъюь ьрыхэ№ър , єёяххь Єюы№ъю юфшэ Ёрч яЁюўшЄрЄ№ ъыртш°ш
  662.  
  663. showframe_left
  664. ;hl=xscroll
  665.         dec hl
  666.         res 0,l
  667.         bit 7,h
  668.         jr nz,showframe_nokey
  669.         jr showframe_leftrightq
  670.  
  671. showframe_right
  672. ;hl=xscroll
  673. ;эх фтшурхь xscroll, хёыш яЁртр  уЁрэшЎр (=keepframe_linesize-xscroll) яюыєўрхЄё  <80
  674.         inc hl
  675.         inc hl
  676.         ex de,hl
  677.         ld hl,(keepframe_linesize)
  678.         or a
  679.         sbc hl,de
  680.         ld bc,80
  681.         or a
  682.         sbc hl,bc
  683.         ex de,hl
  684.         jr nc,showframe_leftrightq
  685. ;яЁхфхы ёъЁюыыр: xscroll=keepframe_linesize-80 >=0
  686.          ld hl,(keepframe_linesize)
  687.          or a
  688.          sbc hl,bc
  689.         jr c,showframe_nokey
  690. showframe_leftrightq
  691.         ld (xscroll),hl
  692.         jr showframe_nokey
  693.  
  694. showframe_up
  695. ;hl=yscroll
  696.         ld bc,8
  697.         xor a
  698.         sbc hl,bc
  699.         jr nc,showframe_updownq
  700.         ld h,a
  701.         ld l,a
  702.         jr showframe_updownq
  703.  
  704. showframe_down
  705. ;hl=yscroll
  706. ;эх фтшурхь yscroll, хёыш эшцэ   уЁрэшЎр (=curpichgt_visible-yscroll) яюыєўрхЄё  <SCROLLHGT(200)
  707.         ld bc,8
  708.         add hl,bc
  709.         ex de,hl
  710.         ld hl,(curpichgt_visible)
  711.         or a
  712.         sbc hl,de
  713.         ld bc,SCROLLHGT;200
  714.         or a
  715.         sbc hl,bc
  716.         ex de,hl
  717.         jr nc,showframe_updownq
  718. ;яЁхфхы ёъЁюыыр: yscroll=curpichgt_visible-SCROLLHGT >=0
  719.          ld hl,(curpichgt_visible)
  720.          or a
  721.          sbc hl,bc
  722.         jr c,showframe_nokey
  723. showframe_updownq
  724.         ld (yscroll),hl
  725.         jr showframe_nokey
  726.  
  727.  
  728.        
  729. loadbmp_fail
  730. closequit
  731.         call closestream
  732.          jr getkeyquit
  733.  
  734. LOADERROR
  735.         call closestream
  736.         ld de,tloaderr
  737.         jr TYPE_ERROR
  738. CONNECTIONERROR
  739.         ld de,tconnerr
  740. TYPE_ERROR
  741.         push de
  742.         call setpgs_scr
  743.         call setpgcode4000
  744.         ld a,STATUSCOLOR
  745.         call initprcharmc
  746.         ld de,0xc048
  747.         call setxymc
  748.         pop de
  749.         call prtextmc
  750.  
  751. ERROR ;for jpeg
  752.         ;jr $
  753. ERROR2
  754.         ;jr $
  755. ERROR4
  756.         ;jr $
  757. getkeyquit
  758. getkeyquit0
  759.         ;YIELD ;halt ;хёыш ёфхырЄ№ яЁюёЄю di:rst #38, Єю 1.ёфтшэхь ЄрщьхЁ ш 2.ьюцхь яюЄхЁ Є№ ърфЁютюх яЁхЁ√трэшх, р хёыш схч ei, Єю сєфєЄ уы■ъш
  760.         ;GET_KEY ;OS_GETKEYNOLANG
  761.         ;ld a,c ;keynolang
  762.         call yieldgetkeynolang
  763.         call globalbuttons
  764.         jr getkeyquit0
  765.        
  766. globalbuttons
  767.         cp key_backspace
  768.         jp z,browser_backspace
  769.         cp '5'
  770.         jp z,browser_reload
  771.         cp 'z'
  772.         jp z,showframe_setzoom
  773.         cp 's'
  774.         jp z,browser_downloadthis
  775.         cp 'e'
  776.         jp z,browser_editline
  777.         cp key_esc
  778.         ret nz
  779. browser_quit
  780.         ld a,(wgetloaded_pid)
  781.         or a
  782.         jr z,browser_quitq
  783.  
  784. ;TODO яЁютхЁшЄ№, ўЄю wget цшт:
  785.         ld e,a
  786.         OS_WAITPID
  787.         or a
  788.         jr z,browser_quitq
  789.  
  790.         ld a,(wgetmainpg)
  791.         SETPG32KHIGH
  792.         ld a,0xff
  793.         ld (0xc000+COMMANDLINE+2),a
  794. browser_quitq
  795.         QUIT
  796.  
  797. yieldgetkeynolang
  798.         YIELDGETKEY
  799.         ld a,c
  800.         ret
  801.  
  802. closestream
  803. closestream_patch=$+1
  804.         jp closestream_file
  805.        
  806. tconnerr
  807.         db "conn.err",0
  808. tloaderr
  809.         db "load err",0
  810.        
  811. showtime
  812.          call setpgcode4000
  813.         ld a,STATUSCOLOR
  814.         call initprcharmc
  815.  
  816.          OS_GETTIMER ;hlde=timer
  817.          ex de,hl
  818. timebegin=$+1
  819.          ld de,0
  820.          or a
  821.          sbc hl,de
  822.          ld de,0xc04a
  823. ;d=y, e=x8
  824. ;hl=time (frames)
  825.          jp prnumfrac
  826.          
  827. showmem
  828.         ld a,(npages)
  829. npages_old=$+1
  830.         cp -1
  831.         ret z
  832.         ld (npages_old),a
  833.         ld l,a
  834.         ld h,0
  835.         push hl
  836.          call setpgcode4000
  837.         ld a,STATUSCOLOR
  838.         call initprcharmc
  839.         pop hl
  840.          ld de,0xc046
  841.         jp prnum123
  842.        
  843. cleanstatusline
  844.         call setpgs_scr
  845.         call setpgcode4000
  846.         xor a
  847.         ld (browser_editline_scroll),a
  848.         ld hl,EDITLINEY*256+(40*192)
  849.         ld a,STATUSCOLOR
  850.         call cleanlinemc
  851.         ;ld a,STATUSCOLOR
  852.         jp initprcharmc
  853.          
  854. ;hl = poi to filename in string
  855. ;out: de = after last slash
  856. findlastslash.
  857. nfopenfnslash.
  858.         ld d,h
  859.         ld e,l ;de = after last slash
  860. nfopenfnslash0.
  861.         ld a,[hl]
  862.         inc hl
  863.         or a
  864.         ret z
  865.         cp '/'
  866.         jr nz,nfopenfnslash0.
  867.         jr nfopenfnslash.
  868.  
  869. strcopy
  870. ;hl->de
  871. strcopy0
  872.         ld a,(hl)
  873.         ldi
  874.         or a
  875.         jr nz,strcopy0
  876.         ret
  877.  
  878. makefulllink
  879. ;curfulllink = curfulllink+linkbuf
  880.         ld hl,linkbuf
  881. ;хёыш ёё√ыър эрўшэрхЄё  ёю ёых°р, Єю эрфю юЄЁхчрЄ№ тхё№ яєЄ№, ъЁюьх ёхЁтхЁр
  882.         ld a,(hl)
  883.         cp '/'
  884.         jr z,browser_go_rootlink ;"/Timex"
  885.        
  886.         call isprotocolpresent
  887. ;nz=protocol absent (hl=link), z=protocol present (a=protocol (0=file, 1=http), hl=after "//")
  888.         jr z,browser_go_protocolpresent ;яЁюЄюъюы хёЄ№ - linkbuf ёюфхЁцшЄ яюыэє■ ёё√ыъє (ъ эхщ Єюы№ъю фюсртшЄ№ / т ёыєўрх http://ser.ver)
  889.         ld a,(linkbuf+1)
  890.         sub ':'
  891.         jr z,browser_go_defaultprotocolpresent ;1:/file... => file://1:/file...
  892. ;эхЄ яЁюЄюъюыр - тч Є№ Єхъє∙шщ яєЄ№ шч curfulllink (Є.х. юЄЁхчрЄ№ тё╕ яюёых яюёыхфэхую ёых°р) ш яЁшъыхшЄ№ ъ эхьє ¤Єє ёё√ыъє (ё єў╕Єюь ../)
  893. ;ёых° т ъюэЎх http://ser.ver єцх хёЄ№
  894.         ld hl,curfulllink
  895.         call isprotocolpresent
  896. ;a=protocol (0=file, 1=http), hl=after "//"
  897.         call findlastslash. ;out: de = after last slash
  898.         ld hl,linkbuf
  899. browser_go_chdir
  900.         ld a,'.'
  901.         cp (hl)
  902.         jr nz,browser_go_chdirq
  903.         inc hl ;skip dot
  904.          ld a,(hl)
  905.          cp '/'
  906.         inc hl ;if nz,skip another dot supposed
  907.          jr z,browser_go_dotslash
  908.         ld a,(hl)
  909.         or a
  910.         jr z,$+3
  911.         inc hl ;skip / supposed
  912. ;hl=linkbuf+... (path/file without ../)
  913. ;de=curfulllink+...=end of curdir (after slash)
  914. ;remove last element of curdir = move de to previous slash
  915.          ;jr $
  916.         dec de ;at slash
  917.         dec de
  918.         ld a,(de)
  919.         inc de
  920.         inc de ;after slash
  921.         cp '/' ;is it "//"?
  922.         jr z,browser_go_chdir_error
  923.         dec de ;at slash
  924.         ex de,hl ;hl=at slash
  925.         dec hl
  926.         ld a,'/'
  927.         ld b,-1
  928.         cpdr
  929.         inc hl ;at previous slash (might be last slash of "//")
  930.         inc hl ;after slash
  931.         ex de,hl ;de=curfulllink+...=end of curdir (after slash)
  932.          jr browser_go_chdir
  933. browser_go_chdir_error
  934. browser_go_chdirq
  935. ;hl=linkbuf+... (path/file without ../)
  936. ;de=curfulllink+...=end of curdir (after slash)
  937.         call strcopy
  938.         jr browser_go_protocolpresentq
  939. browser_go_defaultprotocolpresent
  940. ;1:/file... => file://1:/file...
  941. ;a=0
  942.         call adddefaultprotocol
  943.         jr browser_go_protocolpresentq
  944. browser_go_dotslash=browser_go_chdir ;"./Timex"
  945.  
  946. browser_go_rootlink
  947. ;"/Timex"
  948. ;hl=linkbuf+... at slash
  949.          push hl
  950.         ld hl,curfulllink
  951.         call isprotocolpresent
  952. ;a=protocol (0=file, 1=http), hl=after "//"
  953.         call findslash
  954.         dec hl ;at slash
  955.         ex de,hl ;de=curfulllink+ after server (at slash)
  956.          pop hl
  957.         jr browser_go_copyto;linkbuf
  958. browser_go_protocolpresent
  959. ;a=protocol (0=file, 1=http), hl=after "//"
  960.         call addslashafterserver ;add / after http://ser.ver
  961.         ld de,curfulllink
  962. ;browser_go_copytolinkbuf
  963.         ld hl,linkbuf
  964. browser_go_copyto
  965.         call strcopy
  966. browser_go_protocolpresentq
  967. ;curfulllink ёюфхЁцшЄ яюыэ√щ url, ёюсЁрээ√щ шч ёЄрЁюую curfullink ш ёё√ыъш linkbuf
  968.         ret
  969.  
  970. adddefaultprotocol
  971. ;1:/file... => file://1:/file...
  972. ;ser.ver... => http://ser.ver...
  973. ;a=protocol (0=file, 1=http)
  974.         push af ;a=protocol (0=file, 1=http)
  975.         or a
  976.         ld hl,tfileprotocol
  977.         jr z,$+5
  978.         ld hl,thttpprotocol        
  979.         ld de,curfulllink
  980.         call strcopy
  981.         dec de
  982.         push de
  983.         ld hl,linkbuf
  984.         call strcopy        
  985.         pop hl
  986.         pop af ;a=protocol (0=file, 1=http)
  987.         ret
  988.  
  989. addslashafterserver
  990. ;add / after http://ser.ver
  991. ;hl=after "//"
  992.         call findslash
  993.         ;call strlen_tobc_keephl
  994.         ;ld a,'/'
  995.         ;cpir
  996.         ret z ;ёых° єцх хёЄ№
  997.          ld (hl),c;0
  998.          dec hl
  999.          ld (hl),a ;add / after http://ser.ver
  1000.         ret
  1001.  
  1002. findslash
  1003.         call strlen_tobc_keephl
  1004.         ld a,'/'
  1005.         cpir
  1006.         ret
  1007.  
  1008. strlen_tobc_keephl
  1009. ;hl=string
  1010.         push hl
  1011.         xor a
  1012.         ld b,-1
  1013.         cpir
  1014.         pop de
  1015.         sbc hl,de
  1016.         ld b,h
  1017.         ld c,l ;bc=strlen
  1018.         ex de,hl ;hl=string
  1019.         ret
  1020.  
  1021. isprotocolpresent
  1022. ;hl=link string
  1023. ;out: nz=protocol absent (hl=link), z=protocol present (a=protocol (0=file, 1=http), hl=after "//")
  1024.         ld de,tfileprotocol
  1025.         push hl
  1026.         call strcp_tillde0 ;if found, hl=after "//"
  1027.         pop de
  1028.         ld a,0
  1029.         ret z
  1030.         ex de,hl
  1031.         ld de,thttpprotocol
  1032.         push hl
  1033.         call strcp_tillde0 ;if found, hl=after "//"
  1034.         pop de
  1035.         ld a,1
  1036.         ret z
  1037.         ex de,hl
  1038.         ret ;nz=protocol absent (hl=start)
  1039.  
  1040. nextscreenline
  1041. ;out: de=ёЄрЁр  ёЄЁюър, nc=out of screen
  1042. drawscreenline_frombuf_scr=$+1
  1043.         ld de,0
  1044.         ld hl,40
  1045.         add hl,de ;next line on screen
  1046.          ;push bc
  1047.          ld bc,40*(SCROLLHGT+1)+0x4000
  1048.          or a
  1049.          sbc hl,bc
  1050.          add hl,bc
  1051.          ;pop bc
  1052.          ret nc
  1053.         ;bit 5,h
  1054.         ;ret nz ;jr nz,drawscreenline_frombufq ;end of screen, current line doesn't fit
  1055.         ld (drawscreenline_frombuf_scr),hl
  1056.         ret
  1057.        
  1058. drawscreenline_frombuf
  1059. ;hl=from
  1060.         exx
  1061.         call nextscreenline
  1062.         ;exx
  1063.         ;ret nc ;end of screen, current line doesn't fit
  1064.  
  1065.         push ix
  1066.         push iy
  1067.        
  1068. drawscreenline_frombuf_ixaddr=$+2
  1069.         ld ix,(dithermcy0-2)
  1070. drawscreenline_frombuf_iyaddr=$+2
  1071.         ld iy,(colorlace0-2)
  1072.  
  1073.         ;exx
  1074.         push af ;nc=out of screen
  1075.         push de ;screen
  1076.         ld de,LINEPIXELS;-0x4000
  1077.         ld hl,(keepframe_linesize)
  1078.         ld b,h
  1079.         ld c,l
  1080.         add hl,de
  1081.         exx
  1082.          call setpgdiv4000
  1083.          call setpgtemp8000 ;Єръющ эрь фрыш рфЁхё        
  1084.         jr drawscreenline_frombuf0go
  1085. drawscreenline_frombuf0
  1086.         exx
  1087.         pop hl
  1088. drawscreenline_frombuf0go
  1089. readchr_patch=$+1
  1090.         call readchrlomem
  1091.         push hl
  1092.         call convertchr ;jp=1980t (эх фхырхЄ exx т ъюэЎх, фы  єфюсёЄтр)
  1093.         inc de
  1094.         cpi ;фхырхЄ inc hl
  1095.         jp pe,drawscreenline_frombuf0
  1096.         pop af
  1097.        
  1098.         dec ix
  1099.         dec ix
  1100.         ld (drawscreenline_frombuf_ixaddr),ix
  1101.         dec iy
  1102.         dec iy
  1103.         ld (drawscreenline_frombuf_iyaddr),iy
  1104.        
  1105.          ;call setpgs_scr
  1106.         exx
  1107.         pop bc ;screen
  1108.         pop af ;nc=out of screen
  1109.         ld hl,LINEPIXELS;-0x4000
  1110. ;hl=data
  1111. ;bc=screen=0xc000+
  1112.         call c,prlinefast
  1113.  
  1114.          call setpgtemp8000
  1115.          call setpgcode4000
  1116.  
  1117.         pop iy
  1118.         pop ix
  1119.         ret;jp setpgtemp8000
  1120.        
  1121. read_b_bytes
  1122. read_b_bytes0
  1123.         call RDBYTE
  1124.         djnz read_b_bytes0
  1125.         ret
  1126.  
  1127. RDBYTE
  1128.         INC LY
  1129.         LD A,(IY)
  1130.         RET NZ
  1131. RDBYH
  1132.         INC HY
  1133.         LD A,HY
  1134.         CP DISKBUF/256+(DISKBUFsz/256)
  1135.         LD A,(IY)
  1136.          ccf ;CY=0: OK
  1137.         RET nz
  1138.        PUSH HL
  1139.        PUSH DE
  1140.         PUSH BC
  1141.         push IX
  1142.        CALL rdCS
  1143.        ex af,af'
  1144.       PUSH AF
  1145.        exx
  1146.        push bc
  1147.        push de
  1148.        push hl
  1149.        ld de,DISKBUF
  1150.        ld hl,DISKBUFsz
  1151.        call readstream
  1152. ;hl=actual size
  1153. ;fill the rest of buffer with zeros
  1154.        ld de,DISKBUF
  1155.        add hl,de
  1156.        ex de,hl ;de=start of zeros
  1157.        ld hl,DISKBUF+DISKBUFsz
  1158.        xor a
  1159.        sbc hl,de
  1160.        ld b,h
  1161.        ld c,l ;bc=length of zeros (Z=no zeros)
  1162.        jr z,readdiskbuf_nozeros
  1163.        ld h,d
  1164.        ld l,e ;start of zeros
  1165.        ld (hl),a;0
  1166.        inc de
  1167.        dec bc
  1168.        ld a,b
  1169.        or c
  1170.        jr z,readdiskbuf_nozeros
  1171.        ldir
  1172. readdiskbuf_nozeros
  1173.        pop hl
  1174.        pop de
  1175.        pop bc
  1176.        exx
  1177.       POP AF
  1178.       ex af,af'
  1179.         POP IX
  1180.         pop BC
  1181.        POP DE
  1182.          pop hl
  1183.        ld iy,DISKBUF
  1184.        LD A,(IY)
  1185.        or a ;CY=0: OK
  1186.         RET
  1187.  
  1188. ZIPRDBYH
  1189. ;TODO ўшЄрЄ№ ёЄюы№ъю, ёъюы№ъю юёЄрыюё№ т IDAT (хёыш ¤Єю эх сюы№°х DISKBUFsz), яюЄюь шёърЄ№ ёыхфє■∙шщ IDAT
  1190.         INC HY
  1191.         LD A,HY
  1192.         CP DISKBUF/256+(DISKBUFsz/256)
  1193.         LD A,(IY)
  1194.          ccf ;CY=0: OK
  1195.         RET nz
  1196.  
  1197.        PUSH HL
  1198.        PUSH DE
  1199.         PUSH BC
  1200.         push IX
  1201.        ;CALL rdCS
  1202.        ex af,af'
  1203.       PUSH AF
  1204.        exx
  1205.        push bc
  1206.        push de
  1207.        push hl
  1208.        
  1209. pngIDATremainedHSW=$+1
  1210.        ld de,0
  1211. pngIDATremained=$+1
  1212.        ld hl,0
  1213. ZIPRDBYH0read
  1214.        ld a,d
  1215.        or e
  1216.        ld bc,DISKBUFsz
  1217.        call z,minhl_bc_tobc ;keeps hl
  1218. ;bc=size
  1219.        ;jr $
  1220.        ld a,b
  1221.        or c
  1222.        jr nz,ZIPRDBYHn0
  1223. ;яЁюўшЄрЄ№ CRC
  1224. ;яЁюўшЄрЄ№ chunksize
  1225. ;яЁюўшЄрЄ№ "IDAT"
  1226.        ld de,DISKBUF
  1227.        ld hl,12
  1228.        call readstream
  1229. ;тьхёЄю remained:
  1230.        ld hl,DISKBUF+4
  1231.        ld d,(hl)
  1232.        inc hl
  1233.        ld e,(hl)
  1234.        inc hl
  1235.        ld a,(hl)
  1236.        inc hl
  1237.        ld l,(hl)
  1238.        ld h,a
  1239. ;ёэютр яюёўшЄрЄ№ ЁрчьхЁ Єхъє∙хую сыюър
  1240.        jr ZIPRDBYH0read
  1241. ZIPRDBYHn0
  1242. ;bc=size
  1243.        or a
  1244.        sbc hl,bc
  1245.        ld (pngIDATremained),hl
  1246.        jr nc,$+3
  1247.        dec de
  1248.        ld (pngIDATremainedHSW),de
  1249.        ld d,b
  1250.        ld e,c
  1251. ;de=size
  1252.        ld hl,DISKBUF+DISKBUFsz
  1253.        or a
  1254.        sbc hl,de ;size
  1255.        ex de,hl ;de=addr = DISKBUF+; hl=size
  1256.         push de
  1257.        call readstream
  1258.         pop de
  1259.         push de ;addr
  1260. ;hl=actual size
  1261.         ld a,h
  1262.         or l
  1263.         jr z,ZIPRDBYHq;readerror
  1264. ;move block to end of buf:
  1265.        ld b,h
  1266.        ld c,l
  1267.        dec de ;ld de,DISKBUF-1
  1268.        add hl,de ;end of data
  1269.        ld de,DISKBUF+DISKBUFsz-1
  1270.        sbc hl,de
  1271.        add hl,de
  1272.        jr z,ZIPRDBYHq
  1273.         pop af
  1274.        lddr
  1275.        inc de ;begin of data
  1276.         push de
  1277. ZIPRDBYHq
  1278.         pop iy ;addr = DISKBUF+
  1279.        
  1280.        pop hl
  1281.        pop de
  1282.        pop bc
  1283.        exx
  1284.       POP AF
  1285.       ex af,af'
  1286.         POP IX
  1287.         pop BC
  1288.        POP DE
  1289.          pop hl
  1290.        LD A,(IY)
  1291.        or a ;CY=0: OK
  1292.         ret
  1293.        
  1294.        
  1295.        
  1296.        
  1297. readstream
  1298. readstream_patch=$+1
  1299.         jp readstream_file
  1300.  
  1301. rdCS    
  1302.         LD A,0
  1303.         OR A
  1304.         RET Z
  1305. rdCSU  
  1306.         LD A,0xfe
  1307.         IN A,(0xfe)
  1308.         LD (getCS+1),A
  1309. getCS
  1310.         LD A,0xff
  1311.         RRA
  1312.         RET        
  1313.  
  1314. ;ўшЄрЄ№ с√ёЄЁю, р яюЄюь юЄърЄ√трЄ№ єърчрЄхы№ Їрщыр
  1315. GETDWORD_slow
  1316. ;hlde
  1317.         ;call RDBYTE
  1318.         ;ld e,a
  1319.         ;call RDBYTE
  1320.         ;ld d,a
  1321.         call GETWORD_slowhl
  1322.         ex de,hl
  1323. GETWORD_slowhl
  1324.         call RDBYTE
  1325.         ld l,a
  1326.         call RDBYTE
  1327.         ld h,a
  1328.         ret
  1329.        
  1330. RDWORDHSBLSBtohl
  1331.         CALL RDBYTE
  1332.         LD H,A
  1333.         CALL RDBYTE
  1334.         LD L,A
  1335.         RET  
  1336.  
  1337. readchrlomem
  1338. ;hl=from (BRG)
  1339.         ld d,chrbuf/256
  1340. _=0
  1341.         if GIF_PIXELSIZE
  1342.         dup 8
  1343.         ld a,(hl)
  1344.         inc hl
  1345.         ld (chrbuf+16+_),a
  1346.         ld (chrbuf+8+_),a
  1347.         ld (chrbuf+0+_),a
  1348. _=_+1
  1349.         edup
  1350.         else
  1351.         dup 8
  1352.         ld e,0xff&(chrbuf+16+_)
  1353.         ldi ;b
  1354.         ld e,0xff&(chrbuf+8+_)
  1355.         ldi ;g
  1356.         ld e,0xff&(chrbuf+0+_)
  1357.         ldi ;r
  1358. _=_+1
  1359.         edup
  1360.        
  1361.         endif
  1362.         ret
  1363.  
  1364. readchrlomemx2
  1365.         ld d,chrbuf/256
  1366. _=0
  1367.         if GIF_PIXELSIZE
  1368.         dup 4
  1369.         ld a,(hl)
  1370.         inc hl
  1371.         ld (chrbuf+16+_),a
  1372.         ld (chrbuf+8+_),a
  1373.         ld (chrbuf+0+_),a
  1374. _=_+1
  1375.         ld (chrbuf+16+_),a
  1376.         ld (chrbuf+8+_),a
  1377.         ld (chrbuf+0+_),a
  1378. _=_+1
  1379.         edup
  1380.         else
  1381.         dup 4
  1382.         ld e,0xff&(chrbuf+16+_)
  1383.         ld a,(hl)
  1384.         ld (de),a
  1385.         inc e
  1386.         ldi ;b
  1387.         ld e,0xff&(chrbuf+8+_)
  1388.         ld a,(hl)
  1389.         ld (de),a
  1390.         inc e
  1391.         ldi ;g
  1392.         ld e,0xff&(chrbuf+0+_)
  1393.         ld a,(hl)
  1394.         ld (de),a
  1395.         inc e
  1396.         ldi ;r
  1397. _=_+2
  1398.         edup
  1399.        
  1400.         endif
  1401.         ret
  1402.        
  1403. convertchr
  1404.  
  1405. chrbufG=64+8
  1406. ;яюшёъ 2 ЎтхЄют (чряюьшэрхь яюыюцхэш  ЁхъюЁфэ√ї ЎтхЄют, ўЄюс√ яюЄюь шї яЁюўшЄрЄ№):
  1407.         ld hl,chrbuf
  1408. _=chrbufG
  1409.         ld de,_*257
  1410.         ld c,(hl) ;Rmin
  1411.         ld b,c ;Rmax
  1412. _=_+1
  1413.         dup 7
  1414.         inc l
  1415.         ld a,(hl) ;R(pixel)
  1416.         cp c ;Rmin
  1417.         jr nc,$+2+1+2
  1418.          ld c,a ;Rmin
  1419.          ld e,_ ;Rmincolor = яюыюцхэшх Єхъє∙хую ЎтхЄр
  1420.         cp b ;Rmax
  1421.         jr c,$+2+1+2
  1422.          ld b,a ;Rmax
  1423.          ld d,_ ;Rmaxcolor = яюыюцхэшх Єхъє∙хую ЎтхЄр
  1424. _=_+1
  1425.         edup
  1426.         push de ;ld (Rminmaxcolor),de
  1427.         ld a,b
  1428.         sub c
  1429.         push af ;Rmax-Rmin
  1430.  
  1431.         inc l ;ld hl,chrbuf+8
  1432. _=chrbufG
  1433.         ld de,_*257
  1434.         ld c,(hl) ;Gmin
  1435.         ld b,c ;Gmax
  1436. _=_+1
  1437.         dup 7
  1438.         inc l
  1439.         ld a,(hl) ;G(pixel)
  1440.         cp c ;Gmin
  1441.         jr nc,$+2+1+2
  1442.          ld c,a ;Gmin
  1443.          ld e,_ ;Gmincolor = яюыюцхэшх Єхъє∙хую ЎтхЄр
  1444.         cp b ;Gmax
  1445.         jr c,$+2+1+2
  1446.          ld b,a ;Gmax
  1447.          ld d,_ ;Gmaxcolor = яюыюцхэшх Єхъє∙хую ЎтхЄр
  1448. _=_+1
  1449.         edup
  1450.         push de ;ld (Gminmaxcolor),de
  1451.         ld a,b
  1452.         sub c
  1453.         push af ;Gmax-Gmin
  1454.  
  1455.         inc l ;ld hl,chrbuf+16
  1456. _=chrbufG
  1457.         ld de,_*257
  1458.         ld c,(hl) ;Bmin
  1459.         ld b,c ;Bmax
  1460. _=_+1
  1461.         dup 7
  1462.         inc l
  1463.         ld a,(hl) ;B(pixel)
  1464.         cp c ;Bmin
  1465.         jr nc,$+2+1+2
  1466.          ld c,a ;Bmin
  1467.          ld e,_ ;Bmincolor = яюыюцхэшх Єхъє∙хую ЎтхЄр
  1468.         cp b ;Bmax
  1469.         jr c,$+2+1+2
  1470.          ld b,a ;Bmax
  1471.          ld d,_ ;Bmaxcolor = яюыюцхэшх Єхъє∙хую ЎтхЄр
  1472. _=_+1
  1473.         edup
  1474.         ld a,b
  1475.         sub c ;Bmax-Bmin
  1476.  
  1477. ;т√сшЁрхь ыєў°є■ юё№ ш х╕ minmaxcolor:
  1478.         ld c,a ;maxdist
  1479.         pop af ;Gmax-Gmin
  1480.         pop hl ;Gminmaxcolor
  1481.         cp c ;>=maxdist?
  1482.         jr c,$+2+1+1
  1483.          ld c,a ;maxdist
  1484.          ex de,hl
  1485.         pop af ;Rmax-Rmin
  1486.         pop hl ;Rminmaxcolor
  1487.         cp c ;>=maxdist?
  1488.         jr c,$+2+1
  1489.          ex de,hl
  1490.  
  1491. ;d=maxcolor
  1492. ;e=mincolor
  1493. ;схЁ╕ь ЁхъюЁфэ√х ЎтхЄр (т тшфх color16):
  1494. ;ўЄюс√ яюыєўшЄ№ color16, эрфю ёэрўрыр color64(=BBGGRR), яюЄюь яю ЄрсышЎх шч эхую
  1495.         jp (iy) ;colorlace0 ;/1
  1496.  
  1497. ROUNDUP=32
  1498. ROUNDDOWN=32
  1499.         macro DOROUNDDOWN
  1500.          sub ROUNDDOWN
  1501.          jr nc,$+3
  1502.          xor a
  1503.         endm
  1504.  
  1505.         macro DOROUNDUP
  1506.          add a,d;ROUNDUP;d
  1507.          jr nc,$+3
  1508.          sbc a,a
  1509.         endm
  1510.  
  1511.         dw colorlace1
  1512. colorlace0
  1513. ;d=maxcolor
  1514. ;e=mincolor
  1515. ;схЁ╕ь ЁхъюЁфэ√х ЎтхЄр (т тшфх color16):
  1516. ;ўЄюс√ яюыєўшЄ№ color16, эрфю ёэрўрыр color64(=BBGGRR), яюЄюь яю ЄрсышЎх шч эхую
  1517.         ld h,chrbuf/256
  1518.         ld l,d ;maxcolor
  1519.         ld c,(hl) ;G
  1520.         res 3,l
  1521.         ld b,(hl) ;R
  1522.         set 4,l
  1523.         ld a,(hl) ;B
  1524.         rlca
  1525.         rlca
  1526.         rl c
  1527.         rla
  1528.         rl c ;g
  1529.         rla
  1530.         rl b
  1531.         rla
  1532.         rl b ;r
  1533.         rla ;BBGGRR
  1534.         or 0xc0
  1535.         ld l,a
  1536.        ld d,h ;e=mincolor
  1537.         ld a,(de);(hl) ;G
  1538.         DOROUNDDOWN
  1539.         ld c,a
  1540.         res 3,e
  1541.         ld a,(de);(hl) ;R
  1542.         DOROUNDDOWN
  1543.         ld b,a
  1544.         set 4,e
  1545.         ld a,(de);(hl) ;B
  1546.         DOROUNDDOWN
  1547.         rlca
  1548.         rlca
  1549.         rl c
  1550.         rla
  1551.         rl c ;g
  1552.         rla
  1553.         rl b
  1554.         rla
  1555.         rl b ;r
  1556.         rla ;BBGGRR
  1557.         and 0x3f
  1558.         ld e,a;l,a
  1559.        ld a,(de) ;paper(maxcolor)
  1560.        or (hl) ;ink(mincolor)    
  1561. ;a=attr
  1562.         exx
  1563.         ld (hl),a ;чряшёрЄ№ attr
  1564.         exx
  1565. ;яю Ёхры№э√ь рЄЁшсєЄрь чрэютю яхЁхёўшЄрЄ№ maxaxis, min, maxdist! (яЁютхЁхэю, ўЄю схч ¤Єюую яюыєўрхЄё  я ЄэшёЄюёЄ№):
  1566.         ld d,h
  1567.         dec h ;ld h,tmaxaxis/256+2
  1568.         ld l,a ;сєфхь їюфшЄ№ яю ¤Єющ ЎтхЄютющ ёюёЄрты ■∙хщ
  1569.         ld e,(hl) ;maxaxis*8
  1570.         dec h
  1571.         ld b,(hl) ;min
  1572.         dec h
  1573.         ld h,(hl) ;maxdistdiv
  1574. ;b=R/G/Bmin
  1575. ;de эр эрўрых сєЇхЁр R/G/B
  1576. ;h=maxdistdiv
  1577. ;т фшЇхЁшэух їюфшь Єюы№ъю яю юфэющ ёюёЄрты ■∙хщ, юёЄры№э√х эх ўшЄрхь:
  1578.         jp (ix) ;dithermcy0/1/2/3
  1579.  
  1580.         dw colorlace0
  1581. colorlace1
  1582. ;d=maxcolor
  1583. ;e=mincolor
  1584. ;схЁ╕ь ЁхъюЁфэ√х ЎтхЄр (т тшфх color16):
  1585. ;ўЄюс√ яюыєўшЄ№ color16, эрфю ёэрўрыр color64(=BBGGRR), яюЄюь яю ЄрсышЎх шч эхую
  1586.         ld h,chrbuf/256
  1587.         ld l,d ;maxcolor
  1588.          ld d,ROUNDUP
  1589.         ld a,(hl) ;G
  1590.         DOROUNDUP
  1591.         ld c,a
  1592.         res 3,l
  1593.         ld a,(hl) ;R
  1594.         DOROUNDUP
  1595.         ld b,a
  1596.         set 4,l
  1597.         ld a,(hl) ;B
  1598.         DOROUNDUP
  1599.         rlca
  1600.         rlca
  1601.         rl c
  1602.         rla
  1603.         rl c ;g
  1604.         rla
  1605.         rl b
  1606.         rla
  1607.         rl b ;r
  1608.         rla ;BBGGRR
  1609.         or 0xc0
  1610.         ld l,a
  1611.         ld d,(hl) ;paper(maxcolor)
  1612.         ld l,e ;mincolor
  1613.         ld c,(hl) ;G
  1614.         res 3,l
  1615.         ld b,(hl) ;R
  1616.         set 4,l
  1617.         ld a,(hl) ;B
  1618.         rlca
  1619.         rlca
  1620.         rl c
  1621.         rla
  1622.         rl c ;g
  1623.         rla
  1624.         rl b
  1625.         rla
  1626.         rl b ;r
  1627.         rla ;BBGGRR
  1628.         and 0x3f
  1629.         ld l,a
  1630.         ld a,(hl) ;ink(mincolor)
  1631.         or d ;paper(maxcolor)
  1632.         exx
  1633.         ld (hl),a ;чряшёрЄ№ attr
  1634.         exx
  1635. ;яю Ёхры№э√ь рЄЁшсєЄрь чрэютю яхЁхёўшЄрЄ№ maxaxis, min, maxdist! (яЁютхЁхэю, ўЄю схч ¤Єюую яюыєўрхЄё  я ЄэшёЄюёЄ№):
  1636.         ld d,h
  1637.         dec h ;ld h,tmaxaxis/256+2
  1638.         ld l,a ;сєфхь їюфшЄ№ яю ¤Єющ ЎтхЄютющ ёюёЄрты ■∙хщ
  1639.         ld e,(hl) ;maxaxis*8
  1640.         dec h
  1641.         ld b,(hl) ;min
  1642.         dec h
  1643.         ld h,(hl) ;maxdistdiv
  1644. ;b=R/G/Bmin
  1645. ;de эр эрўрых сєЇхЁр R/G/B
  1646. ;h=maxdistdiv
  1647. ;т фшЇхЁшэух їюфшь Єюы№ъю яю юфэющ ёюёЄрты ■∙хщ, юёЄры№э√х эх ўшЄрхь:
  1648.         jp (ix) ;dithermcy0/1/2/3
  1649.        
  1650.  ;0 схёёь√ёыхээю (тёхуфр NC), яю¤Єюьє тёх чэрўхэш  єтхышўхэ√ эр 1:
  1651.         dw dithermcy2
  1652. dithermcy3
  1653.         DITHERMC1B 0x1, 0xd, 0x3, 0xf
  1654.         ret;jp convertchrq
  1655.        
  1656.         dw dithermcy1
  1657. dithermcy2
  1658.         DITHERMC1B 0x9, 0x5, 0xb, 0x7
  1659.         ret;jp convertchrq
  1660.        
  1661.         dw dithermcy0
  1662. dithermcy1
  1663.         DITHERMC1B 0x4, 0x10, 0x2, 0xe
  1664.         ret;jp convertchrq
  1665.        
  1666.         dw dithermcy3
  1667. dithermcy0
  1668.         DITHERMC1B 0xc, 0x8, 0xa, 0x6
  1669.         ret;jp convertchrq
  1670.        
  1671.        
  1672. skipword
  1673. ;hl=string
  1674. ;out: hl=terminator/space addr
  1675. getword0
  1676.         ld a,(hl)
  1677.         or a
  1678.         ret z
  1679.         cp ' '
  1680.         ret z
  1681.         inc hl
  1682.         jr getword0
  1683.  
  1684. skipspaces
  1685. ;hl=string
  1686. ;out: hl=after last space
  1687.         ld a,(hl)
  1688.         cp ' '
  1689.         ret nz
  1690.         inc hl
  1691.         jr skipspaces
  1692.  
  1693. minhl_bc_tobc
  1694.         or a
  1695.         sbc hl,bc
  1696.         add hl,bc
  1697.         ret nc ;bc<=hl
  1698.         ld b,h
  1699.         ld c,l
  1700.         ret
  1701.  
  1702.  
  1703. MULWORD
  1704. ;out: HLBC=DE*BC
  1705.         LD HL,0
  1706.         LD A,17
  1707. MULWOR0 RR B
  1708.         RR C
  1709.         DEC A
  1710.         RET Z
  1711.         JR NC,$+3
  1712.         ADD HL,DE
  1713.         RR H
  1714.         RR L
  1715.         JR MULWOR0
  1716.  
  1717. putline
  1718. ;hl=юЄъєфр ъюяшЁєхь ёЄЁюъє
  1719. ;bc=ёъюы№ъю срщЄ ъюяшЁєхь
  1720. ;эр т√їюфх ёфтшурхЄ єърчрЄхы№, ъєфр ъюяшЁєхь (putchar_hl, putchar_a)
  1721.         ex de,hl
  1722. putchar_hl=$+1
  1723.         ld hl,0
  1724. putchar_a=$+1
  1725.         ld a,0
  1726. ;de=from      
  1727. ;ahl=to
  1728. ;bc=size
  1729.         call puttomem
  1730. nextputlineaddr
  1731. ;keeps bc
  1732.         ld a,(putchar_a)
  1733.         ld hl,(putchar_hl)
  1734. curpicwidx3=$+1
  1735.         ld de,0
  1736.         add hl,de
  1737.         adc a,0
  1738. setputlineaddr
  1739.         ld (putchar_hl),hl
  1740.         ld (putchar_a),a
  1741.         ret
  1742.  
  1743. getline
  1744. ;de=ъєфр фюёЄр╕ь ёЄЁюъє
  1745. ;bc=ёъюы№ъю срщЄ фюёЄр╕ь
  1746. gifwasdisposalmethod=$+1
  1747.         ld a,0 ;bit0 = transparent color present, bit4..2 = disposal method (0=not specified(?), 1=do not dispose(?), 2=overwrite with bg color, 3=overwrite with prev frame(?))
  1748.         and 0x1c
  1749.         cp 8
  1750.         jr z,getline_fill
  1751.         ld hl,(nframes)
  1752.         ld a,h
  1753.         or l
  1754.         jr nz,getline_frommem
  1755. getline_fill
  1756. ;Їюэ яхЁтюую ърфЁр - чрыштър
  1757.         push de
  1758. gifbgcolor=$+1
  1759.          ld hl,PAL_GLOB
  1760.          ldi
  1761.          dec hl
  1762.          inc h
  1763.          ldi
  1764.          dec hl
  1765.          inc h
  1766.          ldi ;TODO яЁютхЁшЄ№ яюЁ фюъ ъюьяюэхэЄ!
  1767.         pop hl
  1768.          ret po ;bc=0
  1769.         ldir
  1770.         ret
  1771.  
  1772. getline_frommem
  1773.         ld hl,(putchar_hl)
  1774.         ld a,(putchar_a)
  1775.         jp getfrommem
  1776.        
  1777. curpicwid
  1778.         dw 0
  1779. curpichgt
  1780.         dw 0
  1781. curpichgt_visible
  1782.         dw 0
  1783.  
  1784.  
  1785. downloadfilename
  1786.         db "download.fil",0
  1787.  
  1788. tfileprotocol
  1789.         db "file://",0
  1790. thttpprotocol
  1791.         db "http://",0
  1792.  
  1793. linkbuf
  1794.         ds MAXLINKSZ+1
  1795.        
  1796. curfulllink
  1797.         ds MAXLINKSZ+1
  1798.  
  1799.         include "htmlview.asm"
  1800.         include "html.asm"
  1801.         include "prvirt.asm"
  1802.         include "mempgs.asm"
  1803.         include "dynmem.asm"
  1804.         include "../_sdk/file.asm"
  1805.         include "http.asm"
  1806.         include "gif.asm"
  1807.         include "drawmc.asm"
  1808.         include "editline.asm"
  1809.        
  1810. oldtimer
  1811.         dw 0
  1812.        
  1813.         align 256
  1814. textpages
  1815.         ds 256
  1816. ;TODO х∙╕ юЄфхы№эю gfxpages (ўЄюс√ ьюцэю с√ыю єфры Є№ RGB яюёых ъюэтхЁёшш)
  1817.  
  1818.         align 256
  1819. tmaxaxis ;maxdistdiv_fromattr[256], min_fromattr[256], maxaxis_fromattr[256]
  1820.         incbin "tmaxaxis"
  1821.        
  1822.         ;align 256 ;эхяюёЁхфёЄтхээю яюёых tmaxaxis
  1823. t64to16ink
  1824.         incbin "t64to16i"
  1825. chrbuf
  1826.         ds 8 ;R
  1827. chrbufG=$&0xff
  1828.         ds 8 ;G
  1829.         ds 8 ;B
  1830.         ds 256-64-24-64
  1831. t64to16paper
  1832.         incbin "t64to16p"
  1833.        
  1834. twinto866
  1835.         incbin "winto866"
  1836.        
  1837. endcode=$
  1838.        
  1839.         ds end1-$
  1840.         display "free for code=",$-endcode
  1841.  
  1842.         ds 0x4000-$ ;stack
  1843.         include "prmc.asm"
  1844.         include "jpeg.asm"
  1845.         include "png.asm"
  1846. depkbeg=$
  1847. initCRC
  1848. CRC32_
  1849.         ret
  1850. saveblock
  1851. savelastblock
  1852.         push af
  1853.         push bc
  1854.         push de
  1855.         push hl
  1856. ;TODO єёъюЁшЄ№
  1857.         ld de,depkbuf        
  1858. pngdepktoaddr=$+1
  1859.         ld hl,0
  1860. pngdepktoaddrHSB=$+1
  1861.         ld a,0
  1862.         ld bc,(Z6546) ;ёъюы№ъю срщЄ ёюїЁрэшЄ№
  1863.         ld (TD198),bc ;ёъюы№ъю срщЄ ёюїЁрэ ыш
  1864.  
  1865.  
  1866.         inc bc
  1867.         jr saveblock0_go
  1868. ;рфЁхё 0x7e00..0xffff
  1869. saveblock0
  1870.         push bc
  1871.          push af
  1872.          call gifsetpgLZW
  1873.          pop af
  1874.         ex de,hl
  1875.         ld c,(hl)
  1876.         inc hl
  1877.         ex de,hl
  1878.         call writebyte
  1879.         pop bc
  1880. saveblock0_go
  1881.         dec hl
  1882.         cpi
  1883.         jp pe,saveblock0
  1884.         ld (pngdepktoaddr),hl
  1885.         ld (pngdepktoaddrHSB),a
  1886.          call gifsetpgLZW
  1887.        
  1888.         ld hl,0
  1889.         ld (Z6546),hl
  1890.         pop hl
  1891.         pop de
  1892.         pop bc
  1893.         pop af
  1894.         ret
  1895. depkqerror=ERROR        
  1896. ziptrees
  1897.         ds 0xa60 + 2*288
  1898.         include "../pkunzip/depk.asm"
  1899.        
  1900.         display "depk size=",$-depkbeg
  1901.  
  1902. init
  1903.         ld e,2 ;MC hires mode
  1904.         OS_SETGFX
  1905.        
  1906.         ;YIELD ;ўЄюс√ cmd ьюу фюфхырЄ№ ётюш фхыр эр ¤ъЁрэх
  1907.  
  1908.         OS_GETSCREENPAGES
  1909. ;de=ёЄЁрэшЎ√ 0-ую ¤ъЁрэр (d=ёЄрЁ°р ), hl=ёЄЁрэшЎ√ 1-ую ¤ъЁрэр (h=ёЄрЁ°р )
  1910.         ld a,e
  1911.         ld (setpgs_scr_low),a
  1912.         ld (setpgs_scr_attr),a
  1913.         ld a,d
  1914.         ld (setpgs_scr_high),a
  1915.         ld (setpgs_scr_pixels),a
  1916.        
  1917.         OS_GETMAINPAGES
  1918. ;dehl=эюьхЁр ёЄЁрэшЎ т 0000,4000,8000,c000
  1919.         ld a,e
  1920.         ld (codepg4000),a
  1921.         ld a,h
  1922.         ld (codepg8000),a ;pgdiv
  1923.         ld a,l
  1924.         ld (curpgLZW),a
  1925.  
  1926. ;for JPEG:
  1927.         OS_NEWPAGE
  1928.         ld a,e
  1929.         ld (tpgs+0),a ;mul
  1930.         OS_NEWPAGE
  1931.         ld a,e
  1932.         ld (tpgs+1),a ;y
  1933.         OS_NEWPAGE
  1934.         ld a,e
  1935.         ld (tpgs+2),a ;cb?
  1936.         OS_NEWPAGE
  1937.         ld a,e
  1938.         ld (tpgs+5),a ;cr?
  1939.  
  1940.         OS_NEWPAGE
  1941.         ld a,e
  1942.         ld (temppg8000),a ;depack data, diskbuf
  1943.  
  1944.         OS_NEWPAGE
  1945.         ld a,e
  1946.         ld (histpg),a
  1947.        
  1948.         ld e,0;COLOR
  1949.         OS_CLS
  1950.  
  1951.         ld de,zxpal
  1952.         OS_SETPAL
  1953.  
  1954.         ;call setpgcode4000
  1955.         ;call setpgtemp8000
  1956.        
  1957. ;command line = "browser <file to load>"
  1958.         ld hl,COMMANDLINE ;command line
  1959.         call skipword
  1960.         call skipspaces
  1961.         ld a,(hl)
  1962.         or a
  1963.         jr nz,$+5
  1964.          ld hl,defaultfilename
  1965.         ld de,linkbuf
  1966.         call strcopy
  1967.  
  1968. ;recode url in linkbuf to full path:
  1969.         ld hl,linkbuf
  1970.         ld de,curfulllink
  1971.         push de
  1972.         call strcopy
  1973.         pop hl ;curfulllink
  1974.         call isprotocolpresent
  1975.         jr z,browser_recodefull_protocolpresent
  1976. ;protocol absent
  1977. ;1:/file... => file://1:/file...
  1978. ;ser.ver... => http://ser.ver...
  1979.         ld a,(linkbuf+1)
  1980.         cp ':'
  1981.         ld a,1
  1982.         jr nz,$+3
  1983.         xor a
  1984.         call adddefaultprotocol
  1985. browser_recodefull_protocolpresent
  1986. ;curfulllink OK
  1987. ;hl=after "//"
  1988. ;a=protocol
  1989.         jp addslashafterserver ;add / after http://ser.ver
  1990.  
  1991. defaultfilename
  1992.         ;db "0:/hippiman.bmp",0
  1993.         db "http://zxevo.ru/nos/",0
  1994.  
  1995. wgetfilename
  1996.         db "wget.com",0
  1997.         ;db "basic.com",0
  1998.  
  1999. zxpal
  2000.         incbin "zxpal"
  2001.  
  2002. free2=end2-$;0x8000-$
  2003.         display "free for code in 0x4000=",free2
  2004.         ds 0x8000-$
  2005.        
  2006.         incbin "tdiv"
  2007.        
  2008. cmd_end
  2009.  
  2010.         ;display "Size ",/d,cmd_end-cmd_begin," bytes"
  2011.  
  2012.         savebin "browser.com",cmd_begin,cmd_end-cmd_begin
  2013.        
  2014.         ;LABELSLIST "../us/user.l"
  2015.