; IP locator v1.0 - entropy dalnet 

;============================== MENUS 

menu menubar,status,channel,query { 
  - 
  IP Locator { locate } 
  - 
} 

;============================== DIALOGS 

dialog locate { 
  title "IP Locator" 
  size -1 -1 134 93 
  option dbu notheme 
  text "IP Address", 1, 4 4 26 8, right 
  edit "", 2, 32 2 62 11 

  button "Locate", 3, 96 2 34 11 
  text "Status", 4, 4 16 25 8, right 
  edit "", 5, 32 14 62 11, read 
  text "City", 6, 4 34 25 8, right 
  text "State", 7, 4 43 25 8, right 
  text "Country", 8, 4 52 25 8, right 
  text "ISP", 9, 4 61 25 8, right 
  text "", 10, 32 34 98 8 
  text "", 11, 32 43 98 8 
  text "", 12, 32 52 98 8 
  text "", 13, 32 61 98 8 
  button "Clipboard", 14, 62 78 34 11 
  button "OK", 15, 96 78 34 11, ok 
  box "", 16, -4 25 142 4 
  box "", 17, -3 70 142 4 
} 

;============================== ALIASES 

alias -l locate { 
  if ($1) { 
    did -ra locate 5 Opening socket... 
    did -r locate 10,11,12,13 
    sockclose locate 
    sockopen locate Melissa Data | Data Quality Tools | Mailing Software | Consumer, Residential Lists | NCOA 80 
    sockmark locate $1- 
  } 
  else { 
    dialog $iif($dialog(locate),-x,-m) locate locate 
  } 
} 
alias -l striphtml { 
  var %txt = $mid($1-,1,800) 
  var %p = 1, %b = $replace(%txt,$chr(38),$+($chr(32),$chr(38)),;,$+(;,$chr(32)),>,$+(>,$chr(32)),<,$+($chr(32),<,)), %c 
  while ($gettok(%b,%p,32)) { 
    %c = $ifmatch 
    if (*<* iswm %c || *&*; iswm %c || *</* iswm %c || *solid* iswm %c || *px* iswm %c || *:* iswm %c && $remove(%c,:) !isnum || */* iswm %c || ** iswm %c || *;* iswm %c || *&* iswm %c || *<*>* iswm %c || *=* iswm %c || *"* iswm %c || *>* iswm %c || $+(*,$chr(40),*) iswm %c || $+(*,$chr(41),*) iswm %c || $+(*,$chr(123),*) iswm %c || $+(*,$chr(125),*) iswm %c) { %b = $remove(%b,%c) | %p = 0 } 
    inc %p 
  } 
  return %b 
} 
alias -l endlocate { 
  did -ra locate 5 Transaction complete. 
  if (%ip) { did -ra locate 10 %city | did -ra locate 11 %state | did -ra locate 12 %country | did -ra locate 13 %isp } 
  else { did -r locate 10,11,12,13 | did -ra locate 5 Nothing found. } 
  unset %isp 
  unset %ip 
  unset %city 
  unset %state 
  unset %country 
  unset %isp 
} 

;============================== EVENTS 

on *:dialog:locate:sclick:14:{ 
  var %a = IP: $did(2).text City: $did(10).text State: $did(11).text Country: $did(12).text ISP: $did(13).text 
  clipboard %a 
} 
on *:dialog:locate:sclick:3:{ 
  if (!$did(2).text) { beep | return } 
  locate $did(2).text 
} 
on *:sockopen:locate:{ 
  if ($sockerr > 0 && $dialog(locate)) { did -ra locate 5 Socket Open Error(s). | did -r locate 10,11,12,13 | return } 
  sockwrite -n $sockname GET $+(/lookups/iplocation.asp?ipaddress=,$sock($sockname).mark) HTTP/1.1 
  sockwrite -n $sockname Host: $+(www.melissadata.com,$str($crlf, 2)) 
  sockwrite -n $sockname Connection: keep-alive 
} 
on *:sockread:locate:{ 
  if ($sockerr > 0 && $dialog(locate)) { did -ra locate 5 Socket Read Error(s). | did -r locate 10,11,12,13 | return } 
  var %q 
  sockread %q 
  tokenize 32 $striphtml(%q) 
  did -ra locate 5 Reading data... 
  if (* IP Address *.*.*.* iswm $1-) { %ip = $4 } 
  if (* City * iswm $1-) { %city = $3- } 
  if (* State or Region * iswm $1-) { %state = $5- } 
  if (* Country * iswm $1-) { %country = $3- } 
  if (* ISP * iswm $1-) { %ISP = $3- } 
  .timertrace -o 1 1 endlocate $sock($sockname).mark 
}