#include  "mcio.h" 
#include  "egsubs.h" 

int
makeeglist (char **eglist, int maxnumeg, Indiv **indivmarkers, int numindivs)
// old routine mkeglist  
{

  Indiv *indx;
  int i, k, numeg = 0;
  for (i = 0; i < numindivs; i++)
    {
      indx = indivmarkers[i];
      if (indx->ignore)
        continue;
      k = indxindex (eglist, numeg, indx->egroup);
      if (k < 0)
        {
          if (numeg >= maxnumeg)
            {
              printf (
                  "number of populations too large.  Increase maxpops if you wish\n");
              fatalx (
                  "(makeeglist) You really want to analyse more than %d populations?\n",
                  maxnumeg);
            }
          eglist[numeg] = strdup (indx->egroup);
          ++numeg;
        }
    }
  return numeg;
}
int
mkeglist (Indiv **indm, int numindivs, char **eglist)
{
  Indiv *indx;
  int i, k, numeg = 0;
  for (i = 0; i < numindivs; i++)
    {
      indx = indm[i];
      if (indx->ignore)
        continue;
      k = indxindex (eglist, numeg, indx->egroup);
      if (k < 0)
        {
          eglist[numeg] = strdup (indx->egroup);
          ++numeg;
        }
    }
  return numeg;
}
int
loadlist (char **list, char *listname)
// listname is just a list of names ... 
{
  FILE *lfile;
  char line[MAXSTR];
  char *spt[MAXFF];
  char *sx;
  int nsplit, i, n = 0;

  if (listname == NULL)
    return 0;
  openit (listname, &lfile, "r");
  while (fgets (line, MAXSTR, lfile) != NULL)
    {
      nsplit = splitup (line, spt, MAXFF);
      if (nsplit == 0)
        continue;
      sx = spt[0];
      if (sx[0] == '#')
        {
          freeup (spt, nsplit);
          continue;
        }
      list[n] = strdup (sx);
      ++n;
      freeup (spt, nsplit);
    }
  return n;
}

int
loadlist_type (char **list, char *listname, int *ztypes, int off)
// listname is just a list of names ... 
{
  FILE *lfile;
  char line[MAXSTR];
  char *spt[MAXFF];
  char *sx;
  Indiv *indx;
  int nsplit, i, n = 0, tt;

  if (listname == NULL)
    return 0;
  openit (listname, &lfile, "r");
  while (fgets (line, MAXSTR, lfile) != NULL)
    {
      nsplit = splitup (line, spt, MAXFF);
      if (nsplit == 0)
        continue;
      sx = spt[0];
      if (sx[0] == '#')
        {
          freeup (spt, nsplit);
          continue;
        }
      if (nsplit < 2)
        fatalx ("bad listname: %s\n", sx);
      list[n] = strdup (sx);
      tt = atoi (spt[1]);
      ztypes[n] = tt + off;
      ++n;
      freeup (spt, nsplit);
    }
  return n;
}

void
seteglist (Indiv **indm, int nindiv, char *eglistname)
{
  FILE *egfile;
  char line[MAXSTR];
  char *spt[MAXFF];
  char *sx;
  Indiv *indx;
  int nsplit, i;

  if (eglistname == NULL)
    return;
  openit (eglistname, &egfile, "r");
  while (fgets (line, MAXSTR, egfile) != NULL)
    {
      nsplit = splitup (line, spt, MAXFF);
      if (nsplit == 0)
        continue;
      sx = spt[0];
      if (sx[0] == '#')
        continue;
      setstatus (indm, nindiv, sx);
      freeup (spt, nsplit);
    }
  fclose (egfile);
}

void
seteglistv (Indiv **indm, int nindiv, char *eglistname, int val)
{
  FILE *egfile;
  char line[MAXSTR];
  char *spt[MAXFF];
  char *sx = NULL;
  Indiv *indx;
  int nsplit, i;

  if (eglistname == NULL)
    {
      setstatusv (indm, nindiv, NULL, val);
    }

  openit (eglistname, &egfile, "r");
  while (fgets (line, MAXSTR, egfile) != NULL)
    {
      nsplit = splitup (line, spt, MAXFF);
      if (nsplit == 0)
        continue;
      sx = spt[0];
      if (sx[0] == '#')
        continue;
      setstatusv (indm, nindiv, sx, val);
      freeup (spt, nsplit);
    }
  fclose (egfile);
}

