XSCHEM REMOTE INTERFACE SPECIFICATION
GENERAL INFORMATIONS
XSCHEM embeds a tcl shell, when running xschem the terminal will present a tcl prompt allowing to send commands through it. Most user actions done in the drawing window can be done by sending tcl commands through the tcl shell. A tcp socket can be activated to allow sending remote commands to xschem, for this to work you must the xschem_listen_port tcl variable in xschemrc, specifying an unused port number. Xschem will listen to this port number for commands and send back results, as if commands were given directly from the tcl console.
XSCHEM implements a TCL xschem command that accepts additional arguments.
This command implements all the XSCHEM remote interface.
Of course all Tck-Tk commands are available, for example, if this command is sent to XSCHEM: 'wm withdraw .'
the xschem main window
will be withdrawn by the window manager, while 'wm state . normal' will show again the window.
This command: 'puts $XSCHEM_LIBRARY_PATH' will print the content of the XSCHEM_LIBRARY_PATH tcl variable
containing the search path.
Handling TCP connection with multiple XSCHEM instances
Since the same TCP port can not be used in more than one process a mechanism is provided to handle multiple
xschem processes.
A setup_tcp_xschem <port> command is provided to set up another TCP port xschem will listen to,
freeing the initial port number set in the xschem_listen_port TCL variable, in the xschemrc
configuration file.
- If port is given and is an unused TCP port it will be used for following TCP communications.
- If port is not given use the port number defined in xschem_listen_port.
- If port number is given and is equal to 0 a free port number will be used.
In all cases the xschem_listen_port returns the new port number that will be used and set the global
xschem_listen_port variable accordingly.
The following shell script fragment shows the commands to be used to negotiate with xschem another tcp port.
The nc (netcat) utility is used to pipe the commands to the tcp socket.
When starting xschem a fixed initial port number is always used (2021 by default), so it is always possible to
remotely communicate with xschem using this TCP port. Then the following commands can be sent to setup a new port number
for further communications, freeing the initial (2021) port number. If another xschem process is started it will
again use the initial port number, so no port number collisions occur.
# start an xschem instance in background schippes@asus:~$ xschem -b & [1] 9342 # negotiate a new port number instead of default 2021 schippes@asus:~$ a=$(echo 'setup_tcp_xschem 0' |nc localhost 2021) schippes@asus:~$ echo "$a" 34279 # Send a command using the new port number schippes@asus:~$ b=$(echo 'xschem get current_name' |nc localhost "$a") schippes@asus:~$ echo "$b" untitled.sch ## repeat above steps if you want additional xschem instances each listening to a different free tcp port.