This ScriptBasic 3.0 Windows 32-bit runtime download includes the first release of the IUP GUI extension module.
DOWNLOADThe Thesaurus IUP demo by Armando Rivera was based on Peter van Eerten's Gtk-Server Thesaurus demo.

import IUP.bas
GLOBAL CONST title = "Thesaurus!"
'Servers = "1=dict.org, 2=test.dict.org, 3=dict.die.net"
Servers[0]="dict.org"
Servers[1]="dict1.us.dict.org"
Servers[2]="all.dict.org"
about=""" This is a Demo
of the IUP GUI Binding
for Scriptbasic"""
const nl = "\n"
SUB CLEAR
IUP::AddItem(serverList,"")
END SUB
SUB Get_Dicts(svrAddr)
LOCAL dat$, total, count
ON ERROR GOTO G_NetError
OPEN svrAddr & ":2628" FOR SOCKET AS 1
PRINT#1,"SHOW DB\n"
LINE INPUT#1, dat$
LINE INPUT#1, dat$
count = 0
WHILE LEFT(dat$, 1) <> "."
LINE INPUT#1, dat$
IF LEFT(dat$, 1) <> "." THEN total[count] = TRIM(dat$)
count+=1
WEND
PRINT#1,"QUIT\n"
CLOSE 1
for cnt = 0 to count
IUP::AddItem(serverList, total[cnt])
next
EXIT SUB
G_NetError:
'IUP::Message("ERROR Connecting" , svrAddr & " is not available!")
print "Server not available",nl
END SUB
SUB Lookup_Word
LOCAL dict$, dat$, total$, info$
IUP::SetText(win, title & " - " & IUP::GetText(entry))
IUP::SetText(text, "Fetching....")
ON ERROR GOTO L_NetError
selectedServer = Servers[IUP::GetSelection(serverCombo) -1]
'THIS DOESN'T WORK YET
'whichDictionary = IUP::GetText(serverList)
'print whichDictionary
'dict$ = LEFT(whichDictionary, INSTR(whichDictionary, " "))
'print dict$
OPEN selectedServer & ":2628" FOR SOCKET AS 1
IF IUP::GetState(chkAll) = "ON" THEN
PRINT#1,"DEFINE * " & IUP::GetText(entry) & "\n"
ELSE
PRINT#1,"DEFINE " & dict$ & " " & IUP::GetText(entry)& "\n"
END IF
REPEAT
LINE INPUT#1, dat$
'dat$ = REPLACE(dat$, CHR$(34), CHR$(92) & CHR$(34))
IF LEFT(dat$, 3) = "151" THEN
total$ &= "------------------------------\n"
total$ &= RIGHT(dat$, LEN(dat$) - LEN(IUP::GetText(entry)) - 9)
total$ &= "------------------------------\n"
REPEAT
LINE INPUT#1, info$
'info$ = REPLACE(info$, CHR$(34), CHR$(92) & CHR$(34))
IF LEFT(info$, 1) <> "." THEN total$ &= TRIM(info$) & nl
UNTIL LEFT(info$, 1) = "."
total$ &= "\n"
END IF
UNTIL LEFT(dat$, 3) = "250" OR VAL(LEFT(dat$, 3)) > 499
PRINT#1,"QUIT\n"
CLOSE 1
IF LEFT(dat$, 3) = "552" THEN
total$ = "No match found."
ELSE IF LEFT(dat$, 3) = "501" THEN
total$ = "Select a dictionary first!"
ELSE IF LEFT(dat$, 3) = "550" THEN
total$ = "Invalid database!"
END IF
IUP::SetText(text, total$)
EXIT SUB
L_NetError:
dat$[0] = "Could not lookup word!"
IUP::SetText(text, dat$)
END SUB
REM Initialize IUP
IUP::Init()
REM Create Main Window
win = IUP::Create("dialog","TITLE=Thesaurus, SIZE=500x300")
REM create container to house ALL GUI objects
vbox = IUP::Create("vbox","MARGIN=10x10")
REM Create Server panel
topBox = IUP::Create("hbox", " GAP=10", vbox)
serverFrame = IUP::Create("frame", "TITLE=Servers, EXPAND=YES", topBox)
serverBox= IUP::Create("hbox", "GAP=5", serverFrame)
serverCombo = IUP::Create("list", "DROPDOWN=YES, SIZE=120x, EXPAND=HORIZONTAL, VALUE=1", serverBox)
btnFetch = IUP::Create("button", "TITLE=Fetch, SIZE = 50x", serverBox)
REM Create control panel
controlFrame = IUP::Create("frame", "TITLE=Controls", topBox)
controlBox = IUP::Create("hbox", "Margin=6x6, GAP=5", controlFrame)
btnAbout = IUP::Create("button", "TITLE=About, SIZE = 50x", controlBox)
btnClear = IUP::Create("button", "TITLE=Clear, SIZE = 50x", controlBox)
btnExit = IUP::Create("button", "TITLE=Exit, SIZE = 50x", controlBox)
REM Create dictionary panel
dictFrame = IUP::Create("frame", "TITLE=Dictionaries", vbox)
serverList = IUP::Create("list", "EXPAND=YES, VISIBLELINES=1", dictFrame)
REM Create text part
transFrame = IUP::Create("frame", "TITLE=Translation", vbox)
text = IUP::Create("text", "MULTILINE=YES, EXPAND=YES", transFrame)
REM Create entry and search button
bottomBox = IUP::Create("hbox", "GAP=10", vbox)
label = IUP::Create("label", "TITLE=\"Enter Word to Search For:\", SIZE=x12", bottomBox)
entry = IUP::Create("text", " EXPAND=HORIZONTAL",bottomBox)
btnSearch = IUP::Create("button","TITLE=Search, SIZE=50x", bottomBox)
chkAll = IUP::Create("toggle", "TITLE=ALL, VALUE=ON,SIZE=x12", bottomBox)
chkUTF = IUP::Create("toggle", "TITLE=UTF-8, SIZE=x12", bottomBox)
REM Add the main GUI container to the Window
IUP::AddChild(win, vbox)
REM Show the Window
IUP::Show(win)
IUP::SetFocus(btnFetch)
for i = 0 to 2
IUP::AddItem(serverCombo, Servers[i])
next
repeat
IUP::Wait()
action = IUP::Event()
eventtype = IUP::EventType()
if action = btnAbout then
IUP::Message("ABOUT", about)
end if
if action = btnFetch then
selection = IUP::GetSelection(serverCombo)
Get_Dicts(Servers[selection-1])
end if
if action = btnClear then
end if
if action = btnSearch then
Lookup_Word()
end if
until action = win or action = btnExit
Print "All Done"
module iup
REM """
The module iup.bas is based on the iup library.
"""
' FUNCTION DECLARATIONS
declare sub ::Init alias "Init" lib "iup"
declare sub ::Show alias "Show" lib "iup"
declare sub ::Destroy alias "Destroy" lib "iup"
declare sub ::Close alias "Close" lib "iup"
declare sub ::Create alias "Create" lib "iup"
declare sub ::AddChild alias "AddChild" lib "iup"
declare sub ::Wait alias "Wait" lib "iup"
declare sub ::ExitLoop alias "ExitLoop" lib "iup"
declare sub ::Event alias "GetEvent" lib "iup"
declare sub ::SetText alias "SetText" lib "iup"
declare sub ::GetText alias "GetText" lib "iup"
declare sub ::SetItem alias "SetItem" lib "iup"
declare sub ::GetItem alias "GetItem" lib "iup"
declare sub ::GetState alias "GetItem" lib "iup"
declare sub ::SetFocus alias "Focus" lib "iup"
declare sub ::Message alias "Message" lib "iup"
declare sub ::GetClass alias "GetClass" lib "iup"
declare sub ::GetSelection alias "GetItem" lib "iup"
declare sub ::AddItem alias "AddItem" lib "iup"
declare sub ::EventType alias "EventType" lib "iup"
end module