
	/*
	** Checks files downloaded from NYU to determine date ranges
	** in the IMU data, CGM data, and self-reported meal times.
	*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

	/* return the total #days between start and end dates */
int days(char *start, char *end)
{
int	days_in_month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int	smonth,sday,emonth,eday,t,a,b;

if (strcmp(start,"none") == 0  &&  strcmp(end,"none") == 0)
  return(0);
if ((strcmp(start,"none") == 0  &&  strcmp(end,"none") != 0)  ||
    (strcmp(start,"none") != 0  &&  strcmp(end,"none") == 0))
  return(1);
if (strlen(start) == 5  &&  strlen(end) == 5)
  {	/* ##-## month day only */
  smonth=(start[0]-'0')*10+(start[1]-'0');
  sday=(start[3]-'0')*10+(start[4]-'0');
  emonth=(end[0]-'0')*10+(end[1]-'0');
  eday=(end[3]-'0')*10+(end[4]-'0');
  }
else
  {
  a=0;
  while (start[a] != '/')
    a++;
  b=a+1;
  while (start[b] != '/')
    b++;
  if (a == 1)
    smonth=(start[0]-'0');
  else
    smonth=(start[0]-'0')*10+(start[1]-'0');
  if (b-a == 2)
    sday=(start[a+1]-'0');
  else
    sday=(start[a+1]-'0')*10+(start[a+2]-'0');
  a=0;
  while (end[a] != '/')
    a++;
  b=a+1;
  while (end[b] != '/')
    b++;
  if (a == 1)
    emonth=(end[0]-'0');
  else
    emonth=(end[0]-'0')*10+(end[1]-'0');
  if (b-a == 2)
    eday=(end[a+1]-'0');
  else
    eday=(end[a+1]-'0')*10+(end[a+2]-'0');
  }

if (smonth == emonth)
  t=eday-sday+1;
else
  t=days_in_month[smonth-1]-sday+1+eday;
return(t);
}


int main(int argc, char *argv[])

{
FILE	*fpt;
char	header[3200],part1[320],part2[320],subid[32];
char	filename[320];
char	CGM_start[80],CGM_end[80];
char	PNPapp_start[80],PNPapp_end[80];
char	IMU_start[80],IMU_end[80];
int	i,j,k,TotalLines;

if (argc != 2)
  {
  printf("Usage:  daterange [folder]\n");
  exit(0);
  }

	/* find PID in argv[1] */
strcpy(header,argv[1]);
for (i=0; i<strlen(header)-4; i++)
  if (header[i] == 'P'  &&  header[i+1] == 'D')
    break;
if (i == strlen(header)-4)
  {
  printf("Could not find PD### in %s\n",argv[1]);
  exit(0);
  }
strcpy(subid,&(header[i]));
subid[5]=0;	/* strip off any trailing characters */

	/* parse CGM file for dates */
sprintf(filename,"%s\\%s-cgm.csv",argv[1],subid);
if ((fpt=fopen(filename,"r")) == NULL)
  {
  strcpy(CGM_start,"none");
  strcpy(CGM_end,"none");
  }
else
  {
  fgets(header,3200,fpt);	/* header line (ID,...) */
  if (header[0] == 'P' &&  header[1] == 'D')
    fgets(header,3200,fpt); /* second header line (file also had PD###,,) */
  TotalLines=0;
  while (1)
    {
    i=fscanf(fpt,"%s %s",part1,part2);
    if (i != 2)
      break;
    j=0;
    while (part1[j] != ',')
      j++;
    if (TotalLines == 0)
      strcpy(CGM_start,&(part1[j+1]));
    else
      strcpy(CGM_end,&(part1[j+1]));
    TotalLines++;
    }
  fclose(fpt);
  }

sprintf(filename,"%s\\%s-pnp.txt",argv[1],subid);
if ((fpt=fopen(filename,"r")) == NULL)
  {
  strcpy(PNPapp_start,"none");
  strcpy(PNPapp_end,"none");
  }
else
  {
  fgets(header,3200,fpt);
  TotalLines=0;
  while (1)
    {
    if (fgets(header,3200,fpt) == NULL)
      break;
    if (header[0] != 'P')
      continue;
    j=0;
    while (header[j] != '\t')
      j++;
    k=j+1;
    while (header[k] != '\t')
      k++;
    header[k]=0;
    if (TotalLines == 0)
      strcpy(PNPapp_start,&(header[j+1]));
    else
      strcpy(PNPapp_end,&(header[j+1]));
    TotalLines++;
    }
  fclose(fpt);
  }

sprintf(filename,"ls %s/IMU/*.act > IMUfiles.txt",argv[1]);
system(filename);
strcpy(IMU_start,"none");
strcpy(IMU_end,"none");
if ((fpt=fopen("IMUfiles.txt","r")) != NULL)
  {
  TotalLines=0;
  while (1)
    {
    i=fscanf(fpt,"%s",header);
    if (i != 1)
      break;
    header[strlen(header)-4]=0;
    if (TotalLines == 0)
      strcpy(IMU_start,&(header[strlen(header)-5]));
    else
      strcpy(IMU_end,&(header[strlen(header)-5]));
    TotalLines++;
    }
  fclose(fpt);
  system("rm IMUfiles.txt");
  }

printf("%s,%d,%d,%d\n",argv[1], days(IMU_start,IMU_end),
	days(PNPapp_start,PNPapp_end), days(CGM_start,CGM_end));
printf("IMU:  %s - %s\n",IMU_start,IMU_end);
printf("PNPapp:  %s - %s\n",PNPapp_start,PNPapp_end);
printf("CGM:  %s - %s\n",CGM_start,CGM_end);
printf("\n");
}

