
/*
 *  MAILQ.C
 *
 *  (c) Copyright 1990 Kriton Kyrimis
 *
 *  uunet.uu.net!theseas.ntua.gt!kriton!kyrimis
 */

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <exec/types.h>
#include <exec/memory.h>
#include <libraries/dos.h>
#include "config.h"
#ifdef LATTICE
#include <proto/dos.h>
#include <proto/exec.h>
#endif

main()
{
  BPTR lk;
  struct FileInfoBlock *fb = 0;
  int i, end;
  char let = '\0';
  void whereto(char *, const int);

  fb = (struct FileInfoBlock *)AllocMem(sizeof(struct FileInfoBlock), 0);
  if (!fb) {
    fprintf(stderr, "Can't allocate memory for file info block\n");
    exit(1);
  }
  lk = Lock(GetConfigDir(UUSPOOL), ACCESS_READ);
  if (!lk) {
    fprintf(stderr, "Can't lock %s\n", GetConfigDir(UUSPOOL));
    FreeMem(fb, sizeof(struct FileInfoBlock));
    exit(1);
  }
  if (!Examine(lk, fb)) {
    fprintf(stderr, "Can't examine %s\n", GetConfigDir(UUSPOOL));
    FreeMem(fb, sizeof(struct FileInfoBlock));
    UnLock(lk);
    exit(1);
  }

#define fname fb->fib_FileName

  while (ExNext(lk, fb)) {
    if (fb->fib_DirEntryType < 0) {
      if ((fname[0] != 'D') || (fname[1] != '.')) {
	continue;
      }

      for (i = strlen(fname)-1; i > 0; i--) {
	if (!isdigit(fname[i])) {
	  let = fname[i];
	  end = i;
	  break;
	}
      }
      if (let != 'X') {
	continue;
      }
      whereto(fname, end);
    }
  }

#undef fname

  FreeMem(fb, sizeof(struct FileInfoBlock));
  UnLock(lk);
  exit(0);
}

void
whereto(char *fname, const int end)
{
  char tmp[132];
  FILE *f;
  char *path;

  path = MakeConfigPath(UUSPOOL, fname);
  f = fopen(path, "r");
  if (!f) {
    fprintf(stderr, "Can't open %s\n", tmp);
    return;
  }
  while (fgets(tmp, sizeof(tmp), f)) {
    if (!strncmp(tmp, "C rmail ", 8)) {
      fname[end] = '\0';
      printf("%s %s!%s", path, &fname[2], &tmp[8]);
      break;
    }
  }
  fclose(f);
  return;
}

