From cdb91ea6b5bf0bbfcfaf5d27f063f711265e516e Mon Sep 17 00:00:00 2001
From: Elena.Budnik <ebudnik@irap.omp.eu>
Date: Mon, 18 Dec 2017 17:55:09 +0100
Subject: [PATCH] redmine #5568

---
 php/src/cdfinfo.c              | 227 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------
 php/src/cdfsamplingfromdata.c  | 268 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------
 php/src/cdfstartstopfromdata.c | 183 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------------------------------------------------------------
 3 files changed, 357 insertions(+), 321 deletions(-)

diff --git a/php/src/cdfinfo.c b/php/src/cdfinfo.c
index 63a7f56..d0a5c0f 100644
--- a/php/src/cdfinfo.c
+++ b/php/src/cdfinfo.c
@@ -15,42 +15,42 @@
 void cdf_status_handler (CDFstatus, char *); 
 char * cdf_str_datatype (long);
 
-typedef struct cdfvar {           /* CDF variable structure */
-     char name[CDF_VAR_NAME_LEN+1];   
-     long datatype;                   
-     long numElements;                /* string length for CDF_CHAR, 1 otherwise */
-     long dimensionality;             /* variable dimensionality                 */
-     long dimSizes[CDF_MAX_DIMS];     /* variable dimension sizes                */
-     long recVariance;                /* record variance                         */
-     long numRecs;                    /* # of records this variable contains     */
+typedef struct cdfvar {            /* CDF variable structure */
+	char name[CDF_VAR_NAME_LEN+1];   
+	long datatype;                   
+	long numElements;                /* string length for CDF_CHAR, 1 otherwise */
+	long dimensionality;             /* variable dimensionality                 */
+	long dimSizes[CDF_MAX_DIMS];     /* variable dimension sizes                */
+	long recVariance;                /* record variance                         */
+	long numRecs;                    /* # of records this variable contains     */
 } CDFvar;
 
 int main(int argc, char *argv[])
 {
+
+	CDFvar var;
+	CDFid    id;                     /* CDF file ID      */ 
+	CDFstatus   status;              /* CDF status code */
+
+	long nZvars, nAttrs, attrId, attrScope, varId; 
+	char attrName[CDF_ATTR_NAME_LEN+1];
+	char fileName[MAX_FILE_NAME_LEN];
+	char msg[100];
+	int dummy, i;
   
-  CDFvar var;
-  CDFid    id;                     /* CDF file ID      */ 
-  CDFstatus   status;              /* CDF status code */
-   
-  long nZvars, nAttrs, attrId, attrScope, varId; 
-  char attrName[CDF_ATTR_NAME_LEN+1];
-  char fileName[MAX_FILE_NAME_LEN];
-  char   msg[100];
-  int dummy, i;
-  
-   if (argc <= 1) 
-       exit(0);                   /* CDF input file name not specified */
-    else
-        strcpy(fileName, argv[argc-1]);       /* Get the input file name */
+	if (argc <= 1) 
+			exit(0);                               /* CDF input file name not specified */
+	else
+			strcpy(fileName, argv[argc-1]);       /* Get the input file name */
 	
 	
    status = CDFlib (OPEN_, CDF_, fileName, &id,  NULL_);   
  		     
-   if (status != CDF_OK)  {
-       strcpy(msg, "OPEN_, CDF_, ");       
-       strcat(msg, fileName);
-       cdf_status_handler (status, msg);
-   }
+	if (status != CDF_OK)  {
+			strcpy(msg, "OPEN_, CDF_, ");       
+			strcat(msg, fileName);
+			cdf_status_handler (status, msg);
+	}
  
  /*---------------------------------------------------------------------------
  *   This routine retrievs the following information:
@@ -64,124 +64,119 @@ int main(int argc, char *argv[])
  *   more.  Treat all CDF variables as zVariables.
  *--------------------------------------------------------------------------*/ 
  
-  status = CDFlib (SELECT_, CDF_zMODE_, zMODEon2,
-                     GET_, CDF_NUMATTRS_,  &nAttrs, 
-                           CDF_NUMzVARS_,  &nZvars, 
-                     NULL_);
-  if (status != CDF_OK) cdf_status_handler(status, "GET_, CDF_FILEINFO_");
+	status = CDFlib (SELECT_, CDF_zMODE_, zMODEon2,
+							GET_, CDF_NUMATTRS_,  &nAttrs, 
+									CDF_NUMzVARS_,  &nZvars, 
+							NULL_);
+	if (status != CDF_OK) cdf_status_handler(status, "GET_, CDF_FILEINFO_");
   
- // printf(" nAttrs %d Zvars %d\n",nAttrs, nZvars); 
+	// printf(" nAttrs %d Zvars %d\n",nAttrs, nZvars); 
   
-//  printf ("Attributes:\n");
+	//  printf ("Attributes:\n");
   
-  for (attrId = 0; attrId < nAttrs; attrId++) {
-         status = CDFlib (SELECT_, ATTR_, attrId,
-                          GET_, ATTR_NAME_, attrName,  ATTR_SCOPE_, &attrScope,
-                          NULL_);
-         if (status != CDF_OK) cdf_status_handler (status, "SELECT_, ATTR_");     
-      
-         
+	for (attrId = 0; attrId < nAttrs; attrId++) {
+			status = CDFlib (SELECT_, ATTR_, attrId,
+									GET_, ATTR_NAME_, attrName,  ATTR_SCOPE_, &attrScope,
+									NULL_);
+	if (status != CDF_OK) cdf_status_handler (status, "SELECT_, ATTR_");           
 //        printf("Attr %d  %s  %d\n", attrId, attrName, attrScope); 
-    }
+	}
     
- //   printf ("Variables:\n"); 
-    for (varId=0; varId < nZvars; varId++) {
-        status = CDFlib (SELECT_,zVAR_, varId,
-                         GET_, zVAR_NAME_, var.name,
-                               zVAR_DATATYPE_, &var.datatype,
-                               zVAR_NUMELEMS_, &var.numElements,
-                               zVAR_NUMDIMS_, &var.dimensionality,
-                               zVAR_DIMSIZES_, var.dimSizes,
-                               zVAR_NUMRECS_, &var.numRecs,
-                               zVAR_RECVARY_, &var.recVariance,
-                         NULL_);   
-        if (status != CDF_OK) cdf_status_handler (status, "GET_, zVARS_");
- 
-    //   printf("Varr %d  %s  %s %d\n", varId, var.name, cdf_str_datatype(var.datatype), var.numRecs); 
-      if (var.recVariance != 0 && var.numRecs > 1 && var.datatype != CDF_EPOCH && var.datatype != CDF_EPOCH16) printf("%s \n", var.name);
-     }
-     
-    /* Close the CDF file */
-    status = CDFlib (CLOSE_, CDF_, NULL_);   
+	//   printf ("Variables:\n"); 
+	for (varId=0; varId < nZvars; varId++) {
+		status = CDFlib (SELECT_,zVAR_, varId,
+								GET_, zVAR_NAME_, var.name,
+										zVAR_DATATYPE_, &var.datatype,
+										zVAR_NUMELEMS_, &var.numElements,
+										zVAR_NUMDIMS_, &var.dimensionality,
+										zVAR_DIMSIZES_, var.dimSizes,
+										zVAR_NUMRECS_, &var.numRecs,
+										zVAR_RECVARY_, &var.recVariance,
+								NULL_);   
+		if (status != CDF_OK) cdf_status_handler (status, "GET_, zVARS_");
+		//   printf("Varr %d  %s  %s %d\n", varId, var.name, cdf_str_datatype(var.datatype), var.numRecs); 
+		if (var.recVariance != 0 && var.numRecs > 1 && var.datatype != CDF_EPOCH && var.datatype != CDF_EPOCH16 && var.datatype != CDF_TIME_TT2000) printf("%s \n", var.name);
+	}
      
+	/* Close the CDF file */
+	status = CDFlib (CLOSE_, CDF_, NULL_);   
 }
 
-
-
-
 void cdf_status_handler (CDFstatus status, char *source)
 {
-   char  message[CDF_STATUSTEXT_LEN+1];
-
-   CDFerror (status, message);              /* Get the appropriate message */
-
-   if (status < CDF_WARN) {
-       printf ("An error has occurred, halting...\n");
-       printf ("%s\n", message);
-       printf ("** Error source: %s\n", source);
-       exit (status);
-   }
-   else if (status < CDF_OK) {
-       printf ("Warning, function may not have compeleted as expected...\n");
-       printf ("%s\n", message);
-   }
-   else if (status > CDF_OK) {
-       printf ("Function compeleted successfully, but be advised that...\n");
-       printf ("%s\n", message);
-   }
-   
-   
+	char  message[CDF_STATUSTEXT_LEN+1];
+
+	CDFerror (status, message);              /* Get the appropriate message */
+
+	if (status < CDF_WARN) {
+			printf ("An error has occurred, halting...\n");
+			printf ("%s\n", message);
+			printf ("** Error source: %s\n", source);
+			exit (status);
+	}
+	else if (status < CDF_OK) {
+			printf ("Warning, function may not have compeleted as expected...\n");
+			printf ("%s\n", message);
+	}
+	else if (status > CDF_OK) {
+			printf ("Function compeleted successfully, but be advised that...\n");
+			printf ("%s\n", message);
+	}
 }
+
 /*--------------------------------------------------------------------------
  *  This routine returns the string representation of the given CDF 
  *  datatype.
  *--------------------------------------------------------------------------*/
 char *  cdf_str_datatype (long type)
 {
-    switch (type) {
-      case CDF_BYTE:
-         return "CDF_BYTE";
+	switch (type) {
+	case CDF_BYTE:
+		return "CDF_BYTE";
 
-      case CDF_INT1:
-         return "CDF_INT1";
+	case CDF_INT1:
+		return "CDF_INT1";
 
-      case CDF_CHAR:
-         return "CDF_CHAR";
+	case CDF_CHAR:
+		return "CDF_CHAR";
 
-      case CDF_INT2:
-         return "CDF_INT2";
+	case CDF_INT2:
+		return "CDF_INT2";
 
-      case CDF_UCHAR:
-         return "CDF_UCHAR";
+	case CDF_UCHAR:
+		return "CDF_UCHAR";
 
-      case CDF_UINT1:
-         return "CDF_UINT1";
+	case CDF_UINT1:
+		return "CDF_UINT1";
 
-      case CDF_INT4:
-         return "CDF_INT4";
+	case CDF_INT4:
+		return "CDF_INT4";
 
-      case CDF_UINT2:
-         return "CDF_UINT2";
+	case CDF_UINT2:
+		return "CDF_UINT2";
 
-      case CDF_FLOAT:
-         return "CDF_FLOAT";
+	case CDF_FLOAT:
+		return "CDF_FLOAT";
 
-      case CDF_REAL4:
-         return "CDF_REAL4";
+	case CDF_REAL4:
+		return "CDF_REAL4";
 
-      case CDF_DOUBLE:
-         return "CDF_DOUBLE";
+	case CDF_DOUBLE:
+		return "CDF_DOUBLE";
 
-      case CDF_REAL8:
-         return "CDF_REAL8";
+	case CDF_REAL8:
+		return "CDF_REAL8";
 
-      case CDF_UINT4:
-         return "CDF_UINT4";
+	case CDF_UINT4:
+		return "CDF_UINT4";
 
-      case CDF_EPOCH:
-         return "CDF_EPOCH";
+	case CDF_EPOCH:
+		return "CDF_EPOCH";
 
-      case CDF_EPOCH16:
-         return "CDF_EPOCH16";
-    }
+	case CDF_EPOCH16:
+		return "CDF_EPOCH16";
+		
+	case	CDF_TIME_TT2000:
+		return "CDF_TIME_TT2000";
+	}
 }
diff --git a/php/src/cdfsamplingfromdata.c b/php/src/cdfsamplingfromdata.c
index 02c54b2..e804d6d 100644
--- a/php/src/cdfsamplingfromdata.c
+++ b/php/src/cdfsamplingfromdata.c
@@ -16,153 +16,177 @@
 /*************************************
    Global variables and structures
 **************************************/
-long  CDFDims,                                         // Number of dimensions in a CDF file
-      CDFVars,                                            // Number of variables in a CDF file
-      CDFDimSizes[CDF_MAX_DIMS],                   // Dimension Sizes in a CDF file
-      CDFencoding,                                    // Data encoding
-      CDFmajority,                                   // Variable majority
-      CDFmaxRec,                                     // max Record number
-      CDFAttrs;                                      // number of CDF Attributes
-   //   CDFdatatype;
+long  CDFDims,                                   // Number of dimensions in a CDF file
+	CDFVars,                                      // Number of variables in a CDF file
+	CDFDimSizes[CDF_MAX_DIMS],                    // Dimension Sizes in a CDF file
+	CDFencoding,                                  // Data encoding
+	CDFmajority,                                  // Variable majority
+	CDFmaxRec,                                    // max Record number
+	CDFAttrs;                                     // number of CDF Attributes
+//   CDFdatatype;
 
 struct cdfvar {                              // CDF variable structure
-     char name[CDF_VAR_NAME_LEN+1];
-     long num;                                //variable number
-     long datatype;
-     long numElem;                     // variable dimensionality
-     long recVariance;                 // variable rec Variance
-     long dimVariances[CDF_MAX_DIMS];  // # of data values in dimSizes
+	char name[CDF_VAR_NAME_LEN+1];
+	long num;                               //variable number
+	long datatype;
+	long numElem;                           // variable dimensionality
+	long recVariance;                       // variable rec Variance
+	long dimVariances[CDF_MAX_DIMS];        // # of data values in dimSizes
 } cdfVar;
 
-
-
 /*--------------------------------------------------------------------------
  *  Handles a CDF error.
  *--------------------------------------------------------------------------*/
 void cdf_handle_error(CDFstatus status)
 {
+	char  message[CDF_STATUSTEXT_LEN+1];
 
-  char  message[CDF_STATUSTEXT_LEN+1];
-
-   CDFerror (status, message);              /* Get the appropriate message */
-   fprintf  (stderr, "%s\n", message);
-   exit(1);
+	CDFerror (status, message);              /* Get the appropriate message */
+	fprintf  (stderr, "%s\n", message);
+	exit(1);
 }
 
 void find_min(int* delta, int nRecs, int minFalse, int* minVal)
 {
-  int i, n, min;
-
-   n = 1;
-   i = 0;
-   while (abs(delta[i]) <= minFalse) i++;
-   if (i < nRecs) {
-     min = abs(delta[i]); 
- // printf(" first MIN %d \n", min);
-      for (i = 1; i < nRecs; i++) {
-//   printf(" delta %d \n", delta[i]);
-         if (delta[i] == min) n++;
-         if (delta[i] < min && delta[i] > minFalse) {
-              min = delta[i];
-              n = 1;
-        }
-       }
-      } else { min = -10;
-               n = nRecs;
-             }
-  minVal[0] = min;
-  minVal[1] = n; 
-   printf(" MIN %d %d\n", min, n);
+	int i, n, min;
+
+	n = 1;
+	i = 0;
+	while (abs(delta[i]) <= minFalse) i++;
+	if (i < nRecs) {
+		min = abs(delta[i]); 
+		// printf(" first MIN %d \n", min);
+		for (i = 1; i < nRecs; i++) {
+			//   printf(" delta %d \n", delta[i]);
+			if (delta[i] == min) n++;
+			if (delta[i] < min && delta[i] > minFalse) {
+					min = delta[i];
+					n = 1;
+			}
+		}
+	} else {
+		min = -10;
+		n = nRecs;
+	}
+	
+	minVal[0] = min;
+	minVal[1] = n; 
+	printf(" MIN %d %d\n", min, n);
 }
 
 int main(int argc, char *argv[])
 {
-
-    long RecStart = 0, RecCount, RecInt = 1;
-    long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1};
-    long varN = -1;  
-    long datatype = 0, attrN, maxEntry;
-    CDFstatus   cstatus;           // CDF status code
-    CDFid id;
-    double *value;
-    int *delta;
-    int i, minFalse = 0, numEnough;
-    int min[2] = {0, 0};
-    char attrValue[300];
-    float Sampling;
-    double epoch16[2];
-    long year, month, day, hour, minute, sec, msec, mksec, nsec, psec;  
+	long RecStart = 0, RecCount, RecInt = 1;
+	long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1};
+	long varN = -1;  
+	long datatype = 0, attrN, maxEntry;
+	CDFstatus   cstatus;           // CDF status code
+	CDFid id;
+	double *value;
+	int *delta;
+	int i, minFalse = 0, numEnough;
+	int min[2] = {0, 0};
+	char attrValue[300];
+	float Sampling;
+	double epoch16[2], dbl_value, dbl_value_;
+	long year, month, day, hour, minute, sec, msec, mksec, nsec, psec; 
+	long long *int_value;
     
 /*********************** Open CDF file *****************************/
-     if ((cstatus = CDFopen(fileName, &id))  != CDF_OK)
-                                cdf_handle_error(cstatus);
+	if ((cstatus = CDFopen(fileName, &id))  != CDF_OK)
+										cdf_handle_error(cstatus);
  
 /*********** treat all vars as zVars with eliminated false dimensionality and get Nrecs **********/
     
-    if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
-                                                   cdf_handle_error (cstatus);
-    while (datatype != CDF_EPOCH && datatype != CDF_EPOCH16){
-       varN++;
-       if ((cstatus = CDFlib(SELECT_, zVAR_, varN,
-                          GET_, zVAR_DATATYPE_, &datatype, NULL_)) != CDF_OK)
-                                                    cdf_handle_error (cstatus);
-  
-  //     if (datatype == CDF_EPOCH16)  break;
-      }
-  fprintf(stdout,"DATATYPE %d %d\n", varN, datatype);
-    if ((cstatus = CDFlib(SELECT_, zVAR_, varN,
-                          GET_, zVAR_MAXREC_, &CDFmaxRec, NULL_)) != CDF_OK)
-                                                   cdf_handle_error (cstatus);
+	if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
+										cdf_handle_error (cstatus);
+	
+    while (datatype != CDF_EPOCH && datatype != CDF_EPOCH16 && datatype != CDF_TIME_TT2000){
+		varN++;
+		if ((cstatus = CDFlib(SELECT_, zVAR_, varN,
+									GET_, zVAR_DATATYPE_, &datatype, NULL_)) != CDF_OK)
+																	cdf_handle_error (cstatus);  
+		//     if (datatype == CDF_EPOCH16)  break;
+	}
+	fprintf(stdout,"DATATYPE %d %d\n", varN, datatype);
+	if ((cstatus = CDFlib(SELECT_, zVAR_, varN,
+								GET_, zVAR_MAXREC_, &CDFmaxRec, NULL_)) != CDF_OK)
+										cdf_handle_error (cstatus);
+
+	fprintf(stdout,"Max Recs %d\n", CDFmaxRec+1);
+	if (CDFmaxRec < 10) {
+		fprintf(stdout," %d\n", badFile);
+		exit (0);
+	}
+	
+	if ( datatype == CDF_TIME_TT2000 ) {
+		int_value = (long long *) malloc (sizeof(long long) * (CDFmaxRec+1));
+		/******************* Get Epoch  *************************/
+		if ((cstatus = CDFlib (SELECT_,
+								zVAR_, varN,
+								zVAR_RECNUMBER_, RecStart,
+								zVAR_RECCOUNT_, CDFmaxRec+1,
+								zVAR_RECINTERVAL_, RecInt,
+								zVAR_DIMINDICES_, indices,
+								zVAR_DIMCOUNTS_, counts,
+								zVAR_DIMINTERVALS_, intervals,
+								GET_, zVAR_HYPERDATA_, int_value,  NULL_)) != CDF_OK) 
+															cdf_handle_error (cstatus);
+	}
+	else {
+		value = (double *)malloc(sizeof(double)* (CDFmaxRec+1)*((datatype == CDF_EPOCH16)+1)); 
+		/******************* Get Epoch  *************************/
+		if ((cstatus = CDFlib (SELECT_,
+								zVAR_, varN,
+								zVAR_RECNUMBER_, RecStart,
+								zVAR_RECCOUNT_, CDFmaxRec+1,
+								zVAR_RECINTERVAL_, RecInt,
+								zVAR_DIMINDICES_, indices,
+								zVAR_DIMCOUNTS_, counts,
+								zVAR_DIMINTERVALS_, intervals,
+								GET_, zVAR_HYPERDATA_, value,  NULL_)) != CDF_OK) 
+															cdf_handle_error (cstatus);
+	}
+	
 
-    fprintf(stdout,"Max Recs %d\n", CDFmaxRec+1);
-    if (CDFmaxRec < 10) {
-       fprintf(stdout," %d\n", badFile);
-       exit (0);
-    }
-    value = (double *)malloc(sizeof(double)* (CDFmaxRec+1)*((datatype == CDF_EPOCH16)+1));
-
-/******************* Get Epoch  *************************/
-    if ((cstatus = CDFlib (SELECT_,
-                           zVAR_, varN,
-                           zVAR_RECNUMBER_, RecStart,
-                           zVAR_RECCOUNT_, CDFmaxRec+1,
-                           zVAR_RECINTERVAL_, RecInt,
-                           zVAR_DIMINDICES_, indices,
-                           zVAR_DIMCOUNTS_, counts,
-                           zVAR_DIMINTERVALS_, intervals,
-                            GET_, zVAR_HYPERDATA_, value,  NULL_)) != CDF_OK) 
-                                                cdf_handle_error (cstatus);
   
-     delta = (int *)malloc(sizeof(int)* CDFmaxRec);
-     for (i = 1; i < CDFmaxRec+1; i++)  
-     {
-         if (datatype == CDF_EPOCH16) {
-         epoch16[0] = value[2*(i-1)];
-         epoch16[1] = value[2*(i-1)+1];
-         EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &minute, &sec, &msec, &mksec, &nsec, &psec);
-         value[i-1] = computeEPOCH(year, month, day, hour, minute, sec, msec);
-         epoch16[0] = value[2*i];
-         epoch16[1] = value[2*i+1];
-         EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &minute, &sec, &msec, &mksec, &nsec, &psec);
-         value[i] = computeEPOCH(year, month, day, hour, minute, sec, msec);
-        }
-        delta[i-1] = (int)(value[i] - value[i-1] + 50)/100;
-    }
- //      fprintf(stdout,"value %f\n", value[11]-value[10]);
-     free(value); 
- //  fprintf(stdout,"delta %d\n", delta[0]);
-     numEnough = CDFmaxRec/10; 
-     while (min[1] <  numEnough) {
-         fprintf(stdout,"minFalse %d\n", minFalse);
-         find_min(delta, CDFmaxRec, minFalse, min); 
-         minFalse = min[0];
-     }
+	delta = (int *)malloc(sizeof(int)* CDFmaxRec);
+	for (i = 1; i < CDFmaxRec+1; i++)  
+	{
+		if (datatype == CDF_TIME_TT2000) {
+			dbl_value_ = CDF_TT2000_to_UTC_EPOCH(int_value[i-1]);
+			dbl_value = CDF_TT2000_to_UTC_EPOCH(int_value[i]);
+			delta[i-1] = (int)(dbl_value - dbl_value_ + 50)/100;
+		}
+		else {
+			if (datatype == CDF_EPOCH16) {
+				epoch16[0] = value[2*(i-1)];
+				epoch16[1] = value[2*(i-1)+1];
+				EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &minute, &sec, &msec, &mksec, &nsec, &psec);
+				value[i-1] = computeEPOCH(year, month, day, hour, minute, sec, msec);
+				epoch16[0] = value[2*i];
+				epoch16[1] = value[2*i+1];
+				EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &minute, &sec, &msec, &mksec, &nsec, &psec);
+				value[i] = computeEPOCH(year, month, day, hour, minute, sec, msec);
+			}
+			delta[i-1] = (int)(value[i] - value[i-1] + 50)/100;
+		}
+	}
+	// fprintf(stdout,"value %f\n", value[11]-value[10]);
+	if (datatype == CDF_TIME_TT2000) free(int_value); 
+	else free(value);
+	// fprintf(stdout,"delta %d\n", delta[0]);
+	numEnough = CDFmaxRec/10; 
+	while (min[1] <  numEnough) {
+		fprintf(stdout,"minFalse %d\n", minFalse);
+		find_min(delta, CDFmaxRec, minFalse, min); 
+		minFalse = min[0];
+	}
      
-     free(delta); 
-     if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
-                                 cdf_handle_error (cstatus);
+	free(delta); 
+	if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
+										cdf_handle_error (cstatus);
 
- //   fprintf(stdout,"%d %f\n",min[1], (float)min[0]/100.0);
-      fprintf(stdout,"%f\n",(float)min[0]/10.0);
-  
+	//   fprintf(stdout,"%d %f\n",min[1], (float)min[0]/100.0);
+	fprintf(stdout,"%f\n",(float)min[0]/10.0); 
 }
diff --git a/php/src/cdfstartstopfromdata.c b/php/src/cdfstartstopfromdata.c
index 1859927..eba6093 100644
--- a/php/src/cdfstartstopfromdata.c
+++ b/php/src/cdfstartstopfromdata.c
@@ -16,21 +16,21 @@
    Global variables and structures
 **************************************/
 long  CDFDims,                                         // Number of dimensions in a CDF file
-      CDFVars,                                            // Number of variables in a CDF file
-      CDFDimSizes[CDF_MAX_DIMS],                   // Dimension Sizes in a CDF file
-      CDFencoding,                                    // Data encoding
-      CDFmajority,                                   // Variable majority
-      CDFmaxRec,                                     // max Record number
-      CDFAttrs;                                      // number of CDF Attributes
-   //   CDFdatatype;
+	CDFVars,                                         // Number of variables in a CDF file
+	CDFDimSizes[CDF_MAX_DIMS],                       // Dimension Sizes in a CDF file
+	CDFencoding,                                     // Data encoding
+	CDFmajority,                                     // Variable majority
+	CDFmaxRec,                                       // max Record number
+	CDFAttrs;                                        // number of CDF Attributes
+//   CDFdatatype;
 
 struct cdfvar {                              // CDF variable structure
-     char name[CDF_VAR_NAME_LEN+1];
-     long num;                                //variable number
-     long datatype;
-     long numElem;                     // variable dimensionality
-     long recVariance;                 // variable rec Variance
-     long dimVariances[CDF_MAX_DIMS];  // # of data values in dimSizes
+	char name[CDF_VAR_NAME_LEN+1];
+	long num;                                //variable number
+	long datatype;
+	long numElem;                     // variable dimensionality
+	long recVariance;                 // variable rec Variance
+	long dimVariances[CDF_MAX_DIMS];  // # of data values in dimSizes
 } cdfVar;
 
 
@@ -40,88 +40,105 @@ struct cdfvar {                              // CDF variable structure
  *--------------------------------------------------------------------------*/
 void cdf_handle_error(CDFstatus status)
 {
+	char  message[CDF_STATUSTEXT_LEN+1];
 
-  char  message[CDF_STATUSTEXT_LEN+1];
-
-   CDFerror (status, message);              /* Get the appropriate message */
-   fprintf  (stderr, "%s\n", message);
-   exit(1);
+	CDFerror (status, message);              /* Get the appropriate message */
+	fprintf  (stderr, "%s\n", message);
+	exit(1);
 }
 
- 
-
 int main(int argc, char *argv[])
 {
-    char fileName[MAX_FILE_NAME_LEN];
-    long RecStart = 0, RecCount, RecInt = 1;
-    long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1};
-    long varN = -1;  
-    long datatype = 0;
-    CDFstatus   cstatus;           // CDF status code
-    CDFid id;
-    double *value;
-    int i;
-    double epoch16[2];
-    long year, month, day, hour, min, sec, msec, mksec, nsec, psec;    
-    
-    if (argc <= 1) 
-       exit(0);                   /* CDF input file name not specified */
-    else
-        strcpy(fileName, argv[argc-1]);       /* Get the input file name */ 
+	char fileName[MAX_FILE_NAME_LEN];
+	long RecStart = 0, RecCount, RecInt = 1;
+	long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1};
+	long varN = -1;  
+	long datatype = 0;
+	CDFstatus   cstatus;           // CDF status code
+	CDFid id;
+	double *value;
+	int i;
+	double epoch16[2], dbl_value, dbl_value_;
+	long year, month, day, hour, min, sec, msec, mksec, nsec, psec;    
+	long long *int_value;
+		
+	if (argc <= 1) 
+		exit(0);                               /* CDF input file name not specified */
+	else
+		strcpy(fileName, argv[argc-1]);       /* Get the input file name */ 
 
 /*********************** Open CDF file *****************************/
-     if ((cstatus = CDFopen(fileName, &id))  != CDF_OK)
-                                cdf_handle_error(cstatus);
+	if ((cstatus = CDFopen(fileName, &id))  != CDF_OK)
+										cdf_handle_error(cstatus);
  
 /*********** treat all vars as zVars with eliminated false dimensionality and get Nrecs **********/
     
-    if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
-                                                   cdf_handle_error (cstatus);
-    while (datatype != CDF_EPOCH && datatype != CDF_EPOCH16){
-       varN++;
-       if ((cstatus = CDFlib(SELECT_, zVAR_, varN,
-                          GET_, zVAR_DATATYPE_, &datatype, NULL_)) != CDF_OK)
-                                                    cdf_handle_error (cstatus);
-  
-    //   if (datatype == CDF_EPOCH16)  break;
-      }
+	if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK)
+																cdf_handle_error (cstatus);
+	
+	while (datatype != CDF_EPOCH && datatype != CDF_EPOCH16 && datatype != CDF_TIME_TT2000) {
+		varN++;
+		if ((cstatus = CDFlib(SELECT_, zVAR_, varN,
+									GET_, zVAR_DATATYPE_, &datatype, NULL_)) != CDF_OK)
+																cdf_handle_error (cstatus);
+	}
    
-    if ((cstatus = CDFlib(SELECT_, zVAR_, varN,
-                          GET_, zVAR_MAXREC_, &CDFmaxRec, NULL_)) != CDF_OK)
-                                                   cdf_handle_error (cstatus);
-
- //   fprintf(stdout,"Max Recs %d\n", CDFmaxRec+1);
-    if (CDFmaxRec < 1) exit (0);
-     
-    value = (double *)malloc(sizeof(double)* (CDFmaxRec+1)*((datatype == CDF_EPOCH16)+1));
+	if ((cstatus = CDFlib(SELECT_, zVAR_, varN,
+								GET_, zVAR_MAXREC_, &CDFmaxRec, NULL_)) != CDF_OK)
+																cdf_handle_error (cstatus);
 
-/******************* Get Epoch  *************************/
-    if ((cstatus = CDFlib (SELECT_,
-                           zVAR_, varN,
-                           zVAR_RECNUMBER_, RecStart,
-                           zVAR_RECCOUNT_, CDFmaxRec+1,
-                           zVAR_RECINTERVAL_, RecInt,
-                           zVAR_DIMINDICES_, indices,
-                           zVAR_DIMCOUNTS_, counts,
-                           zVAR_DIMINTERVALS_, intervals,
-                           GET_, zVAR_HYPERDATA_, value,  NULL_)) != CDF_OK) 
-                                                cdf_handle_error (cstatus);
-  
-    if (datatype == CDF_EPOCH16) {
-        epoch16[0] = value[0];
-        epoch16[1] = value[1];
-        EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &min, &sec, &msec, &mksec, &nsec, &psec);
-        value[0] = computeEPOCH(year, month, day, hour, min, sec, msec);
-        epoch16[0] = value[CDFmaxRec*2];
-        epoch16[1] = value[CDFmaxRec*2+1];
-        EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &min, &sec, &msec, &mksec, &nsec, &psec);
-        value[CDFmaxRec] = computeEPOCH(year, month, day, hour, min, sec, msec);
-    }
-    printf("%f %f\n", value[0]/1000.0-TIMESHIFT, value[CDFmaxRec]/1000.0-TIMESHIFT);
+	//   fprintf(stdout,"Max Recs %d\n", CDFmaxRec+1);
+	if (CDFmaxRec < 1) exit (0);
+	
+   if ( datatype == CDF_TIME_TT2000 ) {
+		int_value = (long long *) malloc (sizeof(long long) * (CDFmaxRec+1));
+		/******************* Get Epoch  *************************/
+		if ((cstatus = CDFlib (SELECT_,
+								zVAR_, varN,
+								zVAR_RECNUMBER_, RecStart,
+								zVAR_RECCOUNT_, CDFmaxRec+1,
+								zVAR_RECINTERVAL_, RecInt,
+								zVAR_DIMINDICES_, indices,
+								zVAR_DIMCOUNTS_, counts,
+								zVAR_DIMINTERVALS_, intervals,
+								GET_, zVAR_HYPERDATA_, int_value,  NULL_)) != CDF_OK) 
+															cdf_handle_error (cstatus);
+		
+		dbl_value_ = CDF_TT2000_to_UTC_EPOCH(int_value[0]);
+		dbl_value = CDF_TT2000_to_UTC_EPOCH(int_value[CDFmaxRec]);	
+		printf("%f %f\n", dbl_value_/1000.0-TIMESHIFT,dbl_value/1000.0-TIMESHIFT);
+		free(int_value); 
+	}
+	else {
+		value = (double *)malloc(sizeof(double)* (CDFmaxRec+1)*((datatype == CDF_EPOCH16)+1));
 
+		/******************* Get Epoch  *************************/
+		if ((cstatus = CDFlib (SELECT_,
+								zVAR_, varN,
+								zVAR_RECNUMBER_, RecStart,
+								zVAR_RECCOUNT_, CDFmaxRec+1,
+								zVAR_RECINTERVAL_, RecInt,
+								zVAR_DIMINDICES_, indices,
+								zVAR_DIMCOUNTS_, counts,
+								zVAR_DIMINTERVALS_, intervals,
+								GET_, zVAR_HYPERDATA_, value,  NULL_)) != CDF_OK) 
+															cdf_handle_error (cstatus);
+	 
+		if (datatype == CDF_EPOCH16) {
+			epoch16[0] = value[0];
+			epoch16[1] = value[1];
+			EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &min, &sec, &msec, &mksec, &nsec, &psec);
+			value[0] = computeEPOCH(year, month, day, hour, min, sec, msec);
+			epoch16[0] = value[CDFmaxRec*2];
+			epoch16[1] = value[CDFmaxRec*2+1];
+			EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &min, &sec, &msec, &mksec, &nsec, &psec);
+			value[CDFmaxRec] = computeEPOCH(year, month, day, hour, min, sec, msec);
+		}
+		
+		printf("%f %f\n", value[0]/1000.0-TIMESHIFT, value[CDFmaxRec]/1000.0-TIMESHIFT);
+		free(value); 
+	}
    
-     if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
-                                 cdf_handle_error (cstatus);
-    
-      free(value); 
+    	if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK)
+										cdf_handle_error (cstatus);   
 }
--
libgit2 0.21.2