All pastes #452903 Raw Edit

beest

public text v1 · immutable
·published 2007-04-22 16:36 UTC
rendered paste body
alias request {
  var %id = $1, %url = $2, %info = $3-
  if (!%id || !%url) { return }
  if (!$regex(%url, /^(http:\/\/)?([^:/]+)(:(\d+))?(/.*)?$/i)) { return }
  var %host, %port = 80, %path = /, %matches = $regml(0), %i = 1
  if ($regml(%i) == http://) { inc %i }
  %host = $regml(%i)
  if (%matches > %i) {
    inc %i
    if ($left($regml(%i), 1) == /) { %path = $regml(%i) }
    else {
      inc %i
      %port = $regml(%i)
      if (%matches > %i) {
        inc %i
        %path = $regml(%i)
      }
    }
  }
  var %largest = 0, %total = $sock(req1123476767*, 0)
  %i = 1
  while (%i <= %total) {
    var %conn = $right($sock(req1123476767*, %i).name, -13)
    if (%conn isnum) {
      if (%conn > %largest) {
        %largest = %conn
      }
    }
    inc %i
  }
  inc %largest
  var %name = req1123476767 $+ %largest
  hmake %name 5
  hadd %name id %id
  hadd %name info %info
  hadd %name header $true
  hadd %name chunked $false
  hadd %name request $&
    GET %path HTTP/1.1 $+ $crlf $+ $&
    Host: %host $+ : $+ %port $+ $crlf $+ $&
    Connection: Close $+ $crlf $+ $crlf
  sockopen %name %host %port
}

on 1:sockopen:req1123476767*:{
  var %id = $hget($sockname, id)
  if ($sockerr) {
    .signal %id 0 $hget($sockname, info) $sock($sockname).wserr $sock($sockname).wsmsg
    hfree $sockname
    return
  }
  .signal %id 2 $hget($sockname, info)
  sockwrite $sockname $hget($sockname, request)
}

on 1:sockread:req1123476767*:{
  var %temp, %id = $hget($sockname, id), %chunked = $false, %read, %len
  if ($sockerr) {
    .signal %id 0 $hget($sockname, info) $sock($sockname).wserr $sock($sockname).wsmsg
    hfree -w $sockname
    return
  }
  while ($true) {
    sockread -f %temp
    if ($sockbr == 0) { break }
    if ($hget($sockname, header)) {
      if (%temp == Transfer-Encoding: chunked) { hadd -m $sockname chunked $true }
      elseif (%temp == $null) { hadd -m $sockname header $false }
    }
    elseif (%temp != $null) {
      if ($hget($sockname, chunked)) {
        if (%chunked) {
          inc %read $calc($sockbr + 2)
          if (%read >= %len) { %chunked = $false }
          .signal %id 1 $hget($sockname, info) %temp
        }
        else {
          %read = 0
          %len = $base($gettok(%temp, 1, 32), 16, 10)
          %chunked = $true
        }
      }
      else {
        .signal %id 1 $hget($sockname, info) %temp
      }
    }
  }
}

on 1:sockclose:req1123476767*:{
  var %id = $hget($sockname, id)
  .signal %id 3 $hget($sockname, info)
  hfree $sockname
}
on *:SIGNAL:zoek:{
  var %status = $1
  if (%status == 0) {
    ; ERROR!
    var %errno = $2, %errstr = $3-
    echo 4 -a ERROR ( $+ %errno $+ ): %errstr
  }
  if (%status == 1) {
    ; OUTPUTTING A LINE
    aline @woorden $2- 
    ; echo 2 -a $2-
  }
  if (%status == 2) {
    ; STARTING DATA OUTPUT
    window -l @woorden 10 10 
  }
  if (%status == 3) {
    ; ENDING DATA OUTPUT

  }
}

menu @woorden {
  dclick: {
    set %text $sline(@woorden,1)
    msg #topradio %text
  }
}
alias 3letters /request zoek http://www.strekewijf.be/info.php?field= $+ $chr(37) $+ $1 $+ $chr(37) $+ $2 $+ $chr(37) $+ $3 $+ $chr(37) $+ &action=search
alias nrletters /request zoek http://www.strekewijf.be/info.php?field= $+ $1 $+ &action=search2 
alias beginletters /request zoek http://www.strekewijf.be/info.php?field= $+ $1 $+ &action=search3
alias eindletters /request zoek http://www.strekewijf.be/info.php?field= $+ $1 $+ &action=search4

menu channel {
  #topradio 
  .3 letter gegeven:/3letters $$?="eerste letter ?" $$?="tweede letter ?" $$?="derde letter ?"
  .aantal karakters:/nrletters $$?="aantal letters ?" 
  .beginletters:/beginletters $$?="beginletters ?"
  .eindletters:/eindletters $$?="eindletters ?"
}