PREV UP NEXT

# 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 comands 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 listenng to a different free tcp port.