?login_element?

Subversion Repositories NedoOS

Rev

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

  1.     module Gopher
  2. ; HL - gopher row
  3. extractRequest:
  4.     ld hl, historyBlock.locator
  5.     ld de, requestbuffer
  6. .loop
  7.     ld a, (hl)
  8.     ld (de), a
  9.     inc hl
  10.     inc de
  11.     cp 0
  12.     jr z, .search
  13.     jr .loop
  14. .search
  15.     dec de
  16.     ld a, (historyBlock.mediaType)
  17.     cp MIME_INPUT
  18.     jr nz, .exit
  19.     ld hl, historyBlock.search
  20.     ld a, TAB
  21.     ld (de), a
  22.     inc de
  23. .searchCopy
  24.     ld a, (hl)
  25.     and a : jr z, .exit
  26.     ld (de), a
  27.     inc hl : inc de
  28.     jr .searchCopy
  29. .exit
  30.     ld a, CR : ld (de), a : inc de
  31.     ld a, LF : ld (de), a : inc de
  32.     xor a
  33.     ld (de), a
  34.     ret
  35.  
  36.  
  37. makeRequest:
  38.     call TcpIP.closeAll
  39.     call extractRequest
  40.     ld de, historyBlock.port
  41.     call atohl
  42.     ld (.port + 1), hl
  43.  
  44.     ld hl, historyBlock.host
  45.     call TcpIP.resolveIp
  46.     jp nc, .error
  47. .port  
  48.     ld bc, #beaf
  49.     call TcpIP.openTcp
  50.     jp nz, .error
  51.  
  52.     ld a, b
  53.     ld (socket), a
  54.  
  55.     ld de, requestbuffer
  56.     push de
  57.     call strlen
  58.     pop de
  59.     ld a, (socket)
  60.     call TcpIP.sendTCP
  61.     or a
  62.     ret
  63. .error
  64.     scf
  65.     ret
  66.  
  67. loadBuffer:
  68.     ld hl, outputBuffer
  69.     ld (.pointer), hl
  70. .loop
  71.     ld a, (socket)
  72.     call TcpIP.stateTcp
  73.     and a : ret nz ; If there some error
  74.     ld a, h : or l : jr nz, .getPacket ; if there some data
  75.     ld a, b : cp 4 : ret nz ; If there no established status
  76.     jr .loop
  77. .getPacket
  78.     ld hl, TCP_BUF_SIZE
  79.     ld a, (socket)
  80.     call TcpIP.recvTCP
  81.     push bc
  82.         ld hl, (.pointer)
  83.         add hl, bc : ld a, h : cp #c0 : jp nc, .skiploop
  84.         ld de, (.pointer), hl, TcpIP.tcpBuff
  85.         ldir
  86.     pop bc
  87.     ld hl, (.pointer)
  88.     add hl, bc
  89.     ld (.pointer), hl
  90.     jp .loop
  91. .skiploop
  92.     pop bc
  93.     call TcpIP.closeAll
  94.     jp .loop
  95. .pointer dw outputBuffer
  96.  
  97. download:
  98.     ld de, historyBlock.locator
  99.     ld hl, de
  100. .findFileName
  101.     ld a, (de) : inc de
  102.     cp '/' : jr nz, .skip
  103.     ld hl, de
  104. .skip
  105.     and a : jr nz, .findFileName
  106. .copy
  107.     ;; HL - filename pointer
  108.     ld de, DialogBox.inputBuffer
  109. .copyFileName
  110.     ld a, (hl) : and a : jr z, .finishCopy
  111.  
  112.     ld (de), a : inc hl, de
  113.     jr .copyFileName
  114. .finishCopy
  115.     ld (de), a
  116.     call DialogBox.inputBox.noclear
  117.     ld a, (DialogBox.inputBuffer) : and a : jp z, History.back
  118.    
  119.     call makeRequest : jp c, Fetcher.fetchFromNet.error
  120.  
  121.     ld a, FMODE_NO_READ, b, ATTR_NOTHING, de, DialogBox.inputBuffer
  122.     call Dos.fcreate
  123.     and a : jr nz, .error
  124.     ld a, b : ld (.fp), a
  125.     ld hl, .progress : call DialogBox.msgNoWait
  126. .loop
  127.     ld a, (socket)
  128.     call TcpIP.stateTcp
  129.     and a : jp nz, .exit ; If there some error
  130.     ld a, h : or l : jr nz, .getPacket ; if there some data
  131.     ld a, b : cp 4 : jp nz, .exit ; If there no established status
  132.     jr .loop
  133. .getPacket
  134.     call pulsing
  135.     ld hl, 512
  136.     ld a, (socket)
  137.     call TcpIP.recvTCP
  138.     ld hl, bc, a, (.fp), b, a, de, TcpIP.tcpBuff
  139.     call Dos.fwrite
  140.     jp .loop
  141. .exit
  142.     ld a, (.fp), b, a
  143.     call Dos.fclose
  144.     call TcpIP.closeAll
  145.     jp History.back
  146. .error
  147.     ld a, (.fp), b, a
  148.     call Dos.fclose
  149.     call TcpIP.closeAll
  150.     ld hl, .err
  151.     call DialogBox.msgBox
  152.     jp History.back
  153. .err db "Operation failed! Sorry! Check filename or disk space!",0
  154. .progress db "Downloading in progress! Wait a bit!", 0
  155. .fp db 0
  156.  
  157. socket db 0
  158. pulsator db " "
  159. pulsing
  160.     push de
  161.     ld de, #0B01 : call TextMode.gotoXY
  162.     ld a, (pulsator)
  163.     cp '*'
  164.     jp z, printasterix
  165.     ld a, '*'
  166.     ld (pulsator),a
  167.     ld a,' '
  168.     call TextMode.putC
  169.     pop de
  170.     ret
  171. printasterix
  172.     ld a, ' '
  173.     ld (pulsator),a
  174.     ld a,'*'
  175.     call TextMode.putC
  176.     pop de
  177.     ret
  178.  
  179. requestbuffer ds #1ff
  180.     endmodule
  181.