/**********************************************************************
 * lucy_archive.c -- archive routine for lucy
 *
 * $Source$
 * $Author$
 * $Header$
 *
 * Copyright 1990 by the Massachusetts Institute of Technology.
 * For copying and distribution information, see the file
 * "mit-copyright.h".
 **********************************************************************/
#include "mit-copyright.h"

#ifndef lint
static char rcsid_lucy_archive_c[] = "$Header$";
#endif /* lint */

#include <stdio.h>
#include "lucy/lucy.h"
tfile unix_tfile();		/* XXX should be in discuss .h file */

void
lucy_archive(argc, argv)
     int argc;
     char *argv[];
{
  long code;
  FILE *fp;
  tfile tf;
  lucy_qident i;
  name_blk *nb, nb2;
  lucyqlist l;
  int oumask;

  i = atoi(argv[1]);		/* XXX more error checking */

  /* XXX use better way of getting username */
  dsc_get_mtg(getenv("USER"), LUCY_ARCHIVE, &nb2, &code);
  if (code) {
    com_err(argv[0], code, LUCY_ARCHIVE);
    return;
  }

  oumask = umask(077);		/* protect temporary file */
  fp = fopen("/tmp/lucyarchive", "w"); /* XXX need unique name */
  umask(oumask);

  if (!fp) {
    perror(argv[0]);
    return;
  }
  code = lucy_chain_to_file(i, fp, 1);
  if (code) {
    com_err(argv[0], code, "while archiving %d", i);
    return;
  }

  fclose(fp);
  fp = fopen("/tmp/lucyarchive", "r");
  if (!fp) {
    perror(argv[0]);
    return;
  }
  code = lucy_trn_info(i, &l);
  if (code) {
    com_err(argv[0], code, "getting subject line");
    return;
  }
  tf = unix_tfile(fp->_file);
  dsc_add_trn(&nb2, tf, l->info.subject, 0, &i, &code);
  if (code) {
    com_err(argv[0], code, "while archiving");
    return;
  }
  printf("Archived transaction %d\n", i);
  fclose(fp);
  unlink("/tmp/lucyarchive");
  return;
}
