Here is a description of the changes I've made to term for use on SCO 
UNIX.  There is a suggested change to the term protocol below.

1. SCO UNIX does not support UNIX domain sockets.  The UNIX domain
   sockets used for the term server/client communications have
   been replaced with either TCP/IP sockets or streams pipes.

   a) TCP/IP sockets.  These are enabled by defining NO_UNIX_DOMAIN
      and not defining STREAMS_PIPE.  The server establishes a socket
      and writes the port number to $HOME/.term/socket.  Clients
      read that file to get the port number, and then connect to
      that port on localhost.

   b) Streams pipes are enabled by setting defining both NO_UNIX_DOMAIN
      and STREAMS_PIPE.  This uses the SCO X server IPC connection
      protocol to connect.  The server opens /dev/X#S (where # is
      the display number).  Clients open /dev/X#R and write a dummy
      byte to initiate a connection.  The server then creates an
      appropriate streams pipe (/dev/spx) and sends the file 
      descriptor to the client.  (See spipe.c)

      Creating a named streams pipe requires root access on SCO.  In
      order to avoid that, term is prepared to "borrow" an X server
      local connection.  If you set TERM_BORROWED_DISPLAY_NUMBER to
      an integer, the server and clients will use that X server
      local connection as their IPC channel.  (The variable must
      be set for both the server and the clients).  If the variable
      is not set, the TCP/IP method will be used.

2) SCO UNIX uses streams pipes to talk to the X server.  (See above
   for a brief description of the protocol).  Rather than replace the
   code in the term server that opens a UNIX domain socket, I extended
   the protocol with a C_X_SERVER request.  This request causes the
   remote term server to establish a connection to its X server
   (as specified by its DISPLAY variable).

   Note that this makes SCO term software incompatible (with respect
   to txconn) with other versions, since the other end will either send
   the wrong request (C_SOCKET rather than C_X_SERVER) or the other
   term server won't recognise C_X_SERVER).

   I would like to suggest that you modify your protocol so that xconn
   always sends C_X_SERVER, and all term servers react to that by
   setting up the appropriate connection.  It also seems to me most
   sensible that the DISPLAY variable for the term server connecting
   to the X server should drive which X server to connect to.  I
   haven't done this, the code for ifdef'd under X_STREAMS_PIPE.


3) Much of the code in spipe.c is borrowed from SCO's X server or X client
   library.  It is freely redistributable as long as the copyright notice
   remains intact (see spipe.c for details).  Don't yell at us if it doesn't
   work.

Tom Kelly
tom@sco.com
3 April 1994
