snobol4tcl − SNOBOL4 Tcl/Tk interface
-INCLUDE ’stcl.sno’
tclhandle = STCL_CREATEINTERP()
STCL_DELETEINTERP(tclhandle)
STCL_EVALFILE(tclhandle,tclfilename)
value = STCL_GETVAR(tclhandle,varname)
STCL_SETVAR(tclhandle,varname,value)
STCL_EVAL(tclhandle,tclstmt)
Tcl is an embedable scripting language developed by John Osterhout, while at the University of Clifornia, Berkeley. Tk is a graphical user interface toolkit developed for Tcl.
This page describes STCL, an experimental facility for invoking Tcl and Tk from SNOBOL4 programs, inspired by Arjen Markus’ "ftcl" FORTRAN/Tcl interface
STCL_CREATEINTERP creates a Tcl interpreter and returns a handle which can be passed to the remaining functions.
STCL_DELETEINTERP destroys a Tcl interpreter.
STCL_EVALFILE reads a Tcl script file into the referenced Tcl interpreter.
STCL_GETVAR retrieves the string value of named variable from a Tcl interpreter. STCL_GETVAR stores a string value of named variable in a Tcl interpreter.
STCL_EVAL evaluates a string containing Tcl code in a Tcl interpreter.
-INCLUDE
’stcl.sno’
INTERP = STCL_CREATEINTERP()
TCL_VERSION = STCL_GETVAR(INTERP, "tcl_version")
OUTPUT = IDENT(TCL_VERSION) "Could not get
tcl_version" :S(END)
OUTPUT = "Tcl Version: " TCL_VERSION
* check Tcl
version
NUM = SPAN(’0123456789’)
VPAT = NUM ’.’ NUM
TCL_VERSION VPAT . VER :S(CHECKV)
OUTPUT = "could not parse tcl_version"
:(END)
CHECKV LT(VER, 8.4) :S(CHECKTK)
* Tcl 8.4
and later can dynamicly load Tk!
STCL_EVAL(INTERP, "package require Tk")
:F(END)
* Check for
Tk
CHECKTK TK_VERSION = STCL_GETVAR(INTERP,
"tk_version") :F(NO_TK)
DIFFER(TK_VERSION) :S(HAVETK)
NO_TK OUTPUT = "Could not find tk_version"
:(END)
HAVETK OUTPUT = "Tk version: " TK_VERSION
LOOP OUTPUT
= STCL_EVAL(INTERP, ’tk_messageBox -message
"Alert!" -type ok -icon info’)
VAL = STCL_EVAL(INTERP, ’tk_messageBox -message
"Really quit?" -type yesno -icon question’)
OUTPUT = VAL
DIFFER(VAL, "yes") :S(LOOP)
END
tclsh(n), Tcl(n).
Philip L. Budne
NOTE! By default the STCL extension is not built into snobol4(1), it must be explicitly included at build time. In Tcl 8.4 and later, Tk can be dynamicly loaded by Tcl at runtime, but in earlier releases, it has to be included at compile time. When dynamicly linked libraries are not available, this can cause the SNOBOL4 interpreter executable to expand by up to four fold! STCL should be a dynamicly loaded SNOBOL4 extension.