alias checkword {
; if a socket is already opened, close it
if ($sock(checkword,0)) { sockclose checkword }
; open the socket and mark it with the word
sockopen checkword dict.org 2628
sockmark checkword $1 0
; set a 30 second timer to time the connection out, send the 'checking' signal
.timercheckword 1 30 checkword.timeout
.signal -n checkword.checking $1
}
alias checkword.timeout {
; send the timeout signal, close the socket
.signal -n checkword.timeout
sockclose checkword
}
on 1:sockopen:checkword:{
; send the error signal if there is an error, otherwise turn the timeout timer off
if ($sockerr) { .signal -n checkword.error $sock($sockname).wsmsg }
else { .timercheckword off }
}
on 1:sockread:checkword:{
; send the error signal if there is an error
if ($sockerr) { .signal -n checkword.error $sock($sockname).wsmsg }
:read
sockread %checkword
if (%checkword) {
tokenize 32 %checkword
; send the DEFINE command and the word to the dict server
if ($1 = 220) { sockwrite -n $sockname DEFINE ! $gettok($sock($sockname).mark,1,32) }
; if 150 is returned, an exact match was found, so the word is correct
if ($1 = 150) { .signal -n checkword.correct $sock($sockname).mark | sockclose $sockname }
; if 552 is returned, no exact matches were found
if ($1 = 552) {
; make sure the second part of the sockmark isnt 1 (to keep it from executing this code over and over)
if ($gettok($sock($sockname).mark,2,32) != 1) {
.signal -n checkword.incorrect $sock($sockname).mark
; request a list of possible spellings from the server based on levenshtein distance
sockwrite -n $sockname MATCH web1913 lev $gettok($sock($sockname).mark,1,32)
; once the request is made, mark the socket to keep it from looping
sockmark $sockname $puttok($sock($sockname).mark,1,2,32)
}
; if we already requested suggestions and none were returned, send the nosuggestions signal and close the socket
else { .signal -n checkword.nosuggestions $gettok($sock($sockname).mark,1,32) | sockclose $sockname }
}
if ($1 = web1913) { sockmark $sockname $sock($sockname).mark $remove($2,") }
; this sends the list of suggested spellings
if ($1 = .) {
tokenize 32 $sock($sockname).mark
.signal -n checkword.suggestions $1 $3-
}
if ($1 = 250) { sockclose $sockname }
}
if ($sockbr) { goto read }
}