Vector matches = term.match("rec-do(signature(<list>,<list>))");
Vector matches = term.match("rec-do(signature([<list>],[<list>]))");
  public void connect()       throws IOException, ToolException  {    if(verbose)      System.err.println("connecting to " + address.toString() + ", port=" + port);    socket = new Socket(address, port);    istream = socket.getInputStream();    ostream = socket.getOutputStream();    channel = new ToolBusChannel(istream);    //{ Determine the host name, even for the local host    host = address.getHostName();    if(host == null) {      String pair = address.toString();      host = pair.substring(0, pair.indexOf('/'));      if(verbose)        System.err.println("local host = " + host);    }    //}    //{ Start the handshake    writeHandshake(name + " " + host + " " + toolid);    int tid = readInt();    if(tid < 0)      throw new ToolException(this, "no port assigned by ToolBus");    if(toolid < 0) {      toolid = tid;      if(verbose)        System.err.println("got tool-id: " + toolid);    }    else if(toolid != tid)      throw new ToolException(this, "tool-id out of phase");    //}    //{ Complete the handshake by checking the input signature    try {      ATerm term = readTerm();			Vector matches = term.match("rec-do(signature(<list>,<list>))");      if(matches != null) {        if(verbose)          System.err.println("checking input signature...");        checkInputSignature((ATermList)matches.elementAt(0));				send(termSndVoid);      } else        throw new ToolException(this, "signature information garbled", term);    } catch (ParseError e) {      throw new ToolException(this, "signature information garbled");    }  //}    running = true;  }