/**********************************************************************
 * ti library's routine for replacing a node
 *
 * $Author: brlewis $
 * $Source: /afs/net.mit.edu/project/net_dev/brlewis/src/lib/RCS/replace.c,v $
 * $Header: /afs/net.mit.edu/project/net_dev/brlewis/src/lib/RCS/replace.c,v 0.2 92/04/01 16:19:37 brlewis Exp $
 *
 * Copyright 1991 by the Massachusetts Institute of Technology.
 *
 * For copying and distribution information, please see the file
 * <mit-copyright.h>.
 **********************************************************************/

#include <mit-copyright.h>

#ifndef lint
static char rcsid_ti_replace_c[] = "$Header: /afs/net.mit.edu/project/net_dev/brlewis/src/lib/RCS/replace.c,v 0.2 92/04/01 16:19:37 brlewis Exp $";
#endif /* lint */

#include <stdio.h>
#include <string.h>
#include <ti/ti.h>

/**********************************************************************
 * ti_replace(TI_H hti, ti_node_H hnode)
 *	caller fills in appropriate fields of hnode beforehand
 *
 * - returns error code
 **********************************************************************/

/* jms 7/9/92 -- windows-izing completed, pending approval */

long
ti_replace(TI_H hti, ti_node_H hnode)
     TI_H hti;
     ti_node_H hnode;
{
  long code;
  static char inbuf[BUFSIZ];

  ti_node_LP lpnode;

  lpnode = (ti_node_LP)TI_DEREFERENCE(hnode);
  lpnode->nd_data = TI_DEREFERENCE(lpnode->nd_hdata);

  /* send command and receive reply */
  if (code = _ti_talkf(hti, inbuf, BUFSIZ-1,
             "r:%d:%d:0:%s:%s:%s:%s:%s\n",
             ti_id(lpnode),
	     ti_flags(lpnode)|TI_NRESOLVED,
             ti_topic(lpnode),
             ti_title(lpnode),
	     ti_source(lpnode),
             ti_locker(lpnode),
             ti_file(lpnode)))
    {
      goto CLEANUP;
    }

  /* success? */
  if (!atoi(inbuf))
    {
      CLEANUP_AND_RETURN(0L)
    }

  /* failure */
  strcpy(ti_context, ti_title(lpnode));
  code = _ti_srverr(inbuf));

CLEANUP:
  TI_REMOVE_DEREFERENCE(lpnode->nd_hdata, lpnode->nd_data);
  TI_REMOVE_DEREFERENCE(hnode, lpnode);
  return(code);
}
