/******************************************************************************
*
*  NSSDC/CDF                                                    CDFinquire.
*
*  Version 1.6f, 16-Dec-97, Hughes STX.
*
*  Modification history:
*
*   V1.0  23-Mar-92, J Love     Original version.
*   V1.1  16-Sep-92, J Love     CDF V2.3 (shareable/NeXT/zVar).
*   V1.2   2-Nov-92, J Love     Added variable values display.
*   V1.3  26-Jan-94, J Love     CDF V2.4.
*   V1.4  27-Oct-94, J Love	CDF V2.5.
*   V1.4a  6-Apr-95, J Love	POSIX.
*   V1.5  13-Sep-95, J Love	Added CDFexport defaults.
*   V1.5a 28-Sep-95, J Love	Macintosh dialog filtering.  Outline default
*				button.
*   V1.6   9-Sep-96, J Love	CDF V2.6.
*   V1.6a 15-Nov-96, J Love	Added `simple' mode to CDFexport.
*   V1.6b  4-Feb-97, J Love	Show defaults for CDFexport `simple' mode
*				correctly and added `prompt'.
*   V1.6c 21-Feb-97, J Love	Removed RICE.
*   V1.6d  4-Mar-97, J Love	Windows NT for MS Visual C/C++ on an IBM PC.
*   V1.6e  7-Dec-97, J Love	More Windows NT.
*   V1.6f 16-Dec-97, J Love	Added Alpha/OpenVMS floating-point defaults.
*   V1.6g 24-Feb-03, M Liu      Changed EPOCH default value from double to an 
*                               encoded date string.
*   V1.7  22-Jan-06, M Liu      Removed CDFwalk and CDFlist parts.
*
******************************************************************************/

#include "cdfinq.h"

/******************************************************************************
* Increased stack size for Borland C on IBM PC.
******************************************************************************/

#if defined(BORLANDC)
extern unsigned _stklen = BORLANDC_STACK_SIZE;
#endif

/******************************************************************************
* Local function prototypes.
******************************************************************************/

static char *epochToken PROTOARGs((int zMode));
static char *majorityToken PROTOARGs((int zMode));
static char *zModeToken PROTOARGs((int zMode));
static char *No PROTOARGs((Logical state));

#if !defined(mac)
static void CDFexportVMS PROTOARGs((void));
static void CDFexportInitialVMS PROTOARGs((void));
static void CDFsimpleInitialVMS PROTOARGs((void));
static void CDFexportNotVMS PROTOARGs((void));
static void CDFexportInitialNotVMS PROTOARGs((void));
static void CDFsimpleInitialNotVMS PROTOARGs((void));
#endif

/******************************************************************************
* Main.
******************************************************************************/

#if !defined(win32) || (defined(win32) && defined(ALONE))
MAIN {
  Logical success = TRUE;
  strcpyX (pgmName, "CDFinquire", MAX_PROGRAM_NAME_LEN);
#if defined(mac)
  MacExecuteSO (InquireCDF, InquireQOPs);
#else
  success = InquireCDF (argc, argv);
#endif
#if defined(DEBUG)
  if (cdf_FreeMemory(NULL,FatalError) > 0) DisplayWarning ("Abandoned buffers.");
#else
  cdf_FreeMemory (NULL, FatalError);
#endif
  return BOO(success,EXIT_SUCCESS_,EXIT_FAILURE_);
}
#endif

/******************************************************************************
* InquireCDF.
******************************************************************************/

Logical InquireCDF (argC, argV)
int argC;
char *argV[];
{
  QOP *qop;
  static char *validQuals[] = { "id", "page", "nopage", "about", NULL };
  static int optRequired[] = { FALSE, FALSE, FALSE, FALSE, 0 };
  Logical qopError = FALSE;
  /****************************************************************************
  * Based on the number of command line arguments entered...
  ****************************************************************************/
  switch (argC) {
    case 1:
      PageOLH ("cdfinq.olh", argV[0]);
      return TRUE;
    case 2:
      if (strcmp(argV[1],"-java") == 0) {
        pagingOn = FALSE;
        PageOLH ("cdfinqj.olh", argV[0]);
        return TRUE;
      }
    default:
      qop = Qop (argC, argV, validQuals, optRequired);
      if (qop == NULL) return FALSE;
      /***********************************************************************
      * Check for `about' qualifier.
      ***********************************************************************/
      if (qop->qualEntered[ABOUTqual]) {
	DisplayIdentification (pgmName);
	cdf_FreeMemory (qop, FatalError);
	return TRUE;
      }
      /***********************************************************************
      * Check for `id' qualifier.
      ***********************************************************************/
      if (!qop->qualEntered[IDqual]) {
	DisplayError ("Missing qualifier (`id').");
	qopError = TRUE;
      }
      /***********************************************************************
      * Check for `page' qualifier.
      ***********************************************************************/
      qopError = qopError | !TFqualifier(qop,&pagingOn,PAGEqual,NOPAGEqual,
					 DEFAULTpageINQ,"page");
      /************************************************************************
      * Free QOP memory and check for an error.
      ************************************************************************/
      cdf_FreeMemory (qop, FatalError);
      if (qopError) return FALSE;
      break;
  }
  /****************************************************************************
  * Display...
  ****************************************************************************/
  DisplayVerRelInc ();
  DisplayCacheDefaults ();
  DisplayBlockingDefaults ();
  DisplayPadValueDefaults ();
  DisplayMiscDefaults ();
  DisplayToolkitDefaults ();
  return TRUE;
}

/******************************************************************************
* DisplayVerRelInc.
******************************************************************************/

void DisplayVerRelInc () {
  long version, release, increment; char subincrement;
  CDFlib (GET_, LIB_VERSION_, &version,
                LIB_RELEASE_, &release,
                LIB_INCREMENT_, &increment,
                LIB_subINCREMENT_, &subincrement,
          NULL_);
  WriteOutSO ("\nCDF distribution V%ld.%ld.%ld%c\n",
              version, release, increment, subincrement);
  return;
}

/******************************************************************************
* DisplayCacheDefaults.
******************************************************************************/

void DisplayCacheDefaults () {
  char text[MAX_SCREENLINE_LEN+1];
  WriteOutSO ("\nCache size defaults:\n\n");
  sprintf (text, "  Single-file CDF, dotCDF file: %d\n", NUMcacheSINGLE);
  WriteOutSO (text);
  sprintf (text, "  Single-file CDF, staging scratch file: %d\n", NUMcacheSTAGE);
  WriteOutSO (text);
  sprintf (text, "  Single-file CDF, compression scratch file: %d\n",
	   NUMcacheCOMPRESS);
  WriteOutSO (text);
  sprintf (text, "  Multi-file CDF, dotCDF file: %d\n", NUMcacheMULTI);
  WriteOutSO (text);
  sprintf (text, "  Multi-file CDF, variable file: %d\n", NUMcacheVAR);
  WriteOutSO (text);
  return;
}  

/******************************************************************************
* DisplayBlockingDefaults.
******************************************************************************/

void DisplayBlockingDefaults () {
  char text[MAX_SCREENLINE_LEN+1];
  WriteOutSO ("\nBlocking factor defaults (minimum bytes/block):\n\n");
  sprintf (text, "  Standard: %d\n", MIN_BLOCKING_BYTES_standard);
  WriteOutSO (text);
  sprintf (text, "  SparseRecords: %d\n", MIN_BLOCKING_BYTES_sparse);
  WriteOutSO (text);
  sprintf (text, "  Compressed: %d\n", MIN_BLOCKING_BYTES_compressed);
  WriteOutSO (text);
  return;
}  

/******************************************************************************
* DisplayPadValueDefaults.
******************************************************************************/

void DisplayPadValueDefaults () {
  char text[MAX_SCREENLINE_LEN+1];
  char epString[EPOCH_STRING_LEN+1];
  char epString16[EPOCH16_STRING_LEN+1];
  double epoch16[2];
  WriteOutSO ("\nDefault pad values:\n\n");
  sprintf (text, "  CDF_BYTE: %d\n", (int) DEFAULT_BYTE_PADVALUE);
  WriteOutSO (text);
  sprintf (text, "  CDF_INT1: %d\n", (int) DEFAULT_INT1_PADVALUE);
  WriteOutSO (text);
  sprintf (text, "  CDF_INT2: %d\n", (int) DEFAULT_INT2_PADVALUE);
  WriteOutSO (text);
  sprintf (text, "  CDF_INT4: ");
  sprintf (EofS(text), Int32FORMAT, (Int32) DEFAULT_INT4_PADVALUE);
  sprintf (EofS(text), "\n");
  WriteOutSO (text);
  sprintf (text, "  CDF_UINT1: %u\n", (uInt) DEFAULT_UINT1_PADVALUE);
  WriteOutSO (text);
  sprintf (text, "  CDF_UINT2: %u\n", (uInt) DEFAULT_UINT2_PADVALUE);
  WriteOutSO (text);
  sprintf (text, "  CDF_UINT4: ");
  sprintf (EofS(text), Int32uFORMAT, (uInt32) DEFAULT_INT4_PADVALUE);
  sprintf (EofS(text), "\n");
  WriteOutSO (text);
  sprintf (text, "  CDF_REAL4: %f\n", (float) DEFAULT_REAL4_PADVALUE);
  WriteOutSO (text);
  sprintf (text, "  CDF_FLOAT: %f\n", (float) DEFAULT_FLOAT_PADVALUE);
  WriteOutSO (text);
  sprintf (text, "  CDF_REAL8: %f\n", (double) DEFAULT_REAL8_PADVALUE);
  WriteOutSO (text);
  sprintf (text, "  CDF_DOUBLE: %f\n", (double) DEFAULT_DOUBLE_PADVALUE);
  WriteOutSO (text);
  encodeEPOCH((double) DEFAULT_EPOCH_PADVALUE, epString);
  sprintf (text, "  CDF_EPOCH: %s\n", epString);
  WriteOutSO (text);
  epoch16[0] = epoch16[1] = DEFAULT_EPOCH_PADVALUE;
  encodeEPOCH16(epoch16, epString16);
  sprintf (text, "  CDF_EPOCH16: %s\n", epString16);
  WriteOutSO (text);
  sprintf (text, "  CDF_CHAR: \"%c\"\n", (sChar) DEFAULT_CHAR_PADVALUE);
  WriteOutSO (text);
  sprintf (text, "  CDF_UCHAR: \"%c\"\n", (uChar) DEFAULT_UCHAR_PADVALUE);
  WriteOutSO (text);
  return;
}  

/******************************************************************************
* DisplayMiscDefaults.
******************************************************************************/

void DisplayMiscDefaults () {
  char text[MAX_SCREENLINE_LEN+1];
  WriteOutSO ("\n");
  sprintf (text, "RLE compression/decompression %s supported.\n",
	   BOO((Logical)SUPPORT_RLE,"is","is not"));
  WriteOutSO (text);
  sprintf (text, "HUFF compression/decompression %s supported.\n",
	   BOO((Logical)SUPPORT_HUFF,"is","is not"));
  WriteOutSO (text);
  sprintf (text, "AHUFF compression/decompression %s supported.\n",
	   BOO((Logical)SUPPORT_AHUFF,"is","is not"));
  WriteOutSO (text);
  sprintf (text, "GZIP compression/decompression %s supported.\n",
	   BOO((Logical)SUPPORT_GZIP,"is","is not"));
  WriteOutSO (text);
/*
  sprintf (text, "ZLIB compression/decompression %s supported.\n",
	   BOO((Logical)SUPPORT_ZLIB64,"is","is not"));
  WriteOutSO (text);
*/
  WriteOutSO ("\n");
  sprintf (text, "MD5 checksum %s supported.\n",
           BOO((Logical)SUPPORT_MD5,"is","is not"));
  WriteOutSO (text);
  WriteOutSO ("\n");
  sprintf (text, "Trailing blanks %s stripped from CDF paths.\n",
	   BOO((Logical)STRIP_TRAILING_BLANKS_FROM_CDFPATH,"are","are not"));
  WriteOutSO (text);
  sprintf (text, "CDF library allows %s access to CDFs.\n",
	   BOO((Logical)BUILD_READ_ONLY_DISTRIBUTION,"read/only",
						     "read/write"));
  WriteOutSO (text);
  sprintf (text, "Status code explanations %s available from CDF library.\n",
	   BOO((Logical)INCLUDE_STATUS_TEXT,"are","are not"));
  WriteOutSO (text);
  sprintf (text, "-0.0 %s converted to 0.0 by default.\n",
	   BOO((Logical)DEFAULT_NEGtoPOSfp0,"is","is not"));
  WriteOutSO (text);
  sprintf (text, "\nDefault encoding: %s\n",
	   BOO((Logical)DEFAULT_TO_HOST_ENCODING,"HOST_ENCODING",
						 "NETWORK_ENCODING"));
  WriteOutSO (text);
  sprintf (text, "Default majority: %s\n",
	   BOO((Logical)DEFAULT_TO_ROW_MAJOR,"ROW_MAJOR","COLUMN_MAJOR"));
  WriteOutSO (text);
  sprintf (text, "Default format: %s\n",
	   BOO((Logical)DEFAULT_TO_SINGLE_FILE,"SINGLE_FILE","MULTI_FILE"));
  WriteOutSO (text);
#if defined(alphavmsD)
  WriteOutSO ("Default single-precision floating-point: F_FLOAT\n");
  WriteOutSO ("Default double-precision floating-point: D_FLOAT\n");
#endif
#if defined(alphavmsG)
  WriteOutSO ("Default single-precision floating-point: F_FLOAT\n");
  WriteOutSO ("Default double-precision floating-point: G_FLOAT\n");
#endif
#if defined(alphavmsI)
  WriteOutSO ("Default single-precision floating-point: IEEE_FLOAT\n");
  WriteOutSO ("Default double-precision floating-point: IEEE_FLOAT\n");
#endif
  return;
}  

/******************************************************************************
* DisplayToolkitDefaults.
******************************************************************************/

void DisplayToolkitDefaults () {
#if !defined(mac) && !defined(win32)
  char text[MAX_SCREENLINE_LEN+1];
  static char *valuesTokens[] = { "none", "nrv", "rv", "all", "named" };
#endif
  WriteOut (stdout, "\nToolkit defaults:\n");
#if defined(mac) || defined(win32)
#if defined(mac)
  WriteOut (stdout, "    On a Macintosh the defaults for a\n");
#else
  WriteOut (stdout, "    On a Windows system the defaults for a\n");
#endif
  WriteOut (stdout, "    toolkit program are shown in the initial\n");
  WriteOut (stdout, "    parameters/qualifiers dialog box.\n");
#else
  /****************************************************************************
  * CDFconvert.
  ****************************************************************************/
  WriteOut (stdout, "\n");
  WriteOut (stdout, "  CDFconvert\n");
#if defined(vms)
  sprintf (text, "    /%sLOG\n", No(DEFAULTlogCVT));
  WriteOut (stdout, text);
  sprintf (text, "    /%sPERCENT\n", No(DEFAULTpctCVT));
  WriteOut (stdout, text);
  sprintf (text, "    /%sDELETE\n", No(DEFAULTdelCVT));
  WriteOut (stdout, text);
  sprintf (text, "    /%sNEG2POSFP0\n", No(DEFAULT_NEGtoPOSfp0));
  WriteOut (stdout, text);
  sprintf (text, "    /%sPAGE\n", No(DEFAULTpageCVT));
  WriteOut (stdout, text);
  sprintf (text, "    /ZMODE=%s\n", zModeToken(DEFAULTzModeCVT));
  WriteOut (stdout, text);
  sprintf (text, "    /REPORT=%s\n",
	   StatusCodeReportOptions(REPORTerrorsDEFAULT,
				   REPORTwarningsDEFAULT,
				   REPORTinfosDEFAULT));
  WriteOut (stdout, text);
  sprintf (text, "    /%sSTATISTICS\n", No(DEFAULTstatsCVT));
  WriteOut (stdout, text);
#else
  sprintf (text, "    -%slog\n", No(DEFAULTlogCVT));
  WriteOut (stdout, text);
  sprintf (text, "    -%spercent\n", No(DEFAULTpctCVT));
  WriteOut (stdout, text);
  sprintf (text, "    -%sdelete\n", No(DEFAULTdelCVT));
  WriteOut (stdout, text);
  sprintf (text, "    -%sneg2posfp0\n", No(DEFAULT_NEGtoPOSfp0));
  WriteOut (stdout, text);
  sprintf (text, "    -%spage\n", No(DEFAULTpageCVT));
  WriteOut (stdout, text);
  sprintf (text, "    -zmode %s\n", zModeToken(DEFAULTzModeCVT));
  WriteOut (stdout, text);
  sprintf (text, "    -report %s\n",
	   StatusCodeReportOptions(REPORTerrorsDEFAULT,
				   REPORTwarningsDEFAULT,
				   REPORTinfosDEFAULT));
  WriteOut (stdout, text);
  sprintf (text, "    -%sstatistics\n", No(DEFAULTstatsCVT));
  WriteOut (stdout, text);
#endif
  /****************************************************************************
  * CDFcompare.
  ****************************************************************************/
  WriteOut (stdout, "\n");
  WriteOut (stdout, "  CDFcompare\n");
#if defined(vms)
  sprintf (text, "    /%sLOG\n", No(DEFAULTlogCMP));
  WriteOut (stdout, text);
  sprintf (text, "    /%sATTR\n", No(DEFAULTattrCMP));
  WriteOut (stdout, text);
  sprintf (text, "    /%sVAR\n", No(DEFAULTvarCMP));
  WriteOut (stdout, text);
  sprintf (text, "    /%sNUMBER\n", No(DEFAULTnumberCMP));
  WriteOut (stdout, text);
  sprintf (text, "    /%sPERCENT\n", No(DEFAULTpctCMP));
  WriteOut (stdout, text);
  sprintf (text, "    /%sETC\n", No(DEFAULTetcCMP));
  WriteOut (stdout, text);
  sprintf (text, "    /%sPAGE\n", No(DEFAULTpageCMP));
  WriteOut (stdout, text);
  sprintf (text, "    /%sNEG2POSFP0\n", No(DEFAULT_NEGtoPOSfp0));
  WriteOut (stdout, text);
  sprintf (text, "    /ZMODES=(%s,%s)\n",
	   zModeToken(DEFAULTzModeCMP), zModeToken(DEFAULTzModeCMP));
  WriteOut (stdout, text);
  sprintf (text, "    /%sLOCATION\n", No(DEFAULTlocationCMP));
  WriteOut (stdout, text);
  sprintf (text, "    /%sVALUE\n", No(DEFAULTvalueCMP));
  WriteOut (stdout, text);
  sprintf (text, "    /REPORT=%s\n",
	   StatusCodeReportOptions(REPORTerrorsDEFAULT,
				   REPORTwarningsDEFAULT,
				   REPORTinfosDEFAULT));
  WriteOut (stdout, text);
  sprintf (text, "    /%sSTATISTICS\n", No(DEFAULTstatsCMP));
  WriteOut (stdout, text);
#else
  sprintf (text, "    -%slog\n", No(DEFAULTlogCMP));
  WriteOut (stdout, text);
  sprintf (text, "    -%sattr\n", No(DEFAULTattrCMP));
  WriteOut (stdout, text);
  sprintf (text, "    -%svar\n", No(DEFAULTvarCMP));
  WriteOut (stdout, text);
  sprintf (text, "    -%snumber\n", No(DEFAULTnumberCMP));
  WriteOut (stdout, text);
  sprintf (text, "    -%spercent\n", No(DEFAULTpctCMP));
  WriteOut (stdout, text);
  sprintf (text, "    -%setc\n", No(DEFAULTetcCMP));
  WriteOut (stdout, text);
  sprintf (text, "    -%spage\n", No(DEFAULTpageCMP));
  WriteOut (stdout, text);
  sprintf (text, "    -%sneg2posfp0\n", No(DEFAULT_NEGtoPOSfp0));
  WriteOut (stdout, text);
  sprintf (text, "    -zmodes \"%s,%s\"\n",
	   zModeToken(DEFAULTzModeCMP), zModeToken(DEFAULTzModeCMP));
  WriteOut (stdout, text);
  sprintf (text, "    -%slocation\n", No(DEFAULTlocationCMP));
  WriteOut (stdout, text);
  sprintf (text, "    -%svalue\n", No(DEFAULTvalueCMP));
  WriteOut (stdout, text);
  sprintf (text, "    -report %s\n",
	   StatusCodeReportOptions(REPORTerrorsDEFAULT,
				   REPORTwarningsDEFAULT,
				   REPORTinfosDEFAULT));
  WriteOut (stdout, text);
  sprintf (text, "    -%sstatistics\n", No(DEFAULTstatsCMP));
  WriteOut (stdout, text);
#endif
  /****************************************************************************
  * CDFstats.
  ****************************************************************************/
  WriteOut (stdout, "\n");
  WriteOut (stdout, "  CDFstats\n");
#if defined(vms)
  sprintf (text, "    /%sRANGE\n", No(DEFAULTrangeSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    /%sFILL\n", No(DEFAULTfillSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    /%sFORMAT\n", No(DEFAULTformatSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    /%sPAGE\n", No(DEFAULTpageSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    /%sNEG2POSFP0\n", No(DEFAULT_NEGtoPOSfp0));
  WriteOut (stdout, text);
  sprintf (text, "    /ZMODE=%s\n", zModeToken(DEFAULTzModeSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    /REPORT=%s\n",
	   StatusCodeReportOptions(REPORTerrorsDEFAULT,
	   			   REPORTwarningsDEFAULT,
		  		   REPORTinfosDEFAULT));
  WriteOut (stdout, text);
  sprintf (text, "    /%sUPDATE_VALIDS\n", No(DEFAULTupValidsSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    /%sUPDATE_SCALES\n", No(DEFAULTupScalesSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    /%sUPDATE_MONOTONIC\n", No(DEFAULTupMonoSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    /%sSTATISTICS\n", No(DEFAULTstatsSTATS));
  WriteOut (stdout, text);
#else
  sprintf (text, "    -%srange\n", No(DEFAULTrangeSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    -%sfill\n", No(DEFAULTfillSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    -%sformat\n", No(DEFAULTformatSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    -%spage\n", No(DEFAULTpageSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    -%sneg2posfp0\n", No(DEFAULT_NEGtoPOSfp0));
  WriteOut (stdout, text);
  sprintf (text, "    -zmode %s\n", zModeToken(DEFAULTzModeSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    -report %s\n",
	   StatusCodeReportOptions(REPORTerrorsDEFAULT,
	   			   REPORTwarningsDEFAULT,
		       		   REPORTinfosDEFAULT));
  WriteOut (stdout, text);
  sprintf (text, "    -%supdate_valids\n", No(DEFAULTupValidsSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    -%supdate_scales\n", No(DEFAULTupScalesSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    -%supdate_monotonic\n", No(DEFAULTupMonoSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    -%sstatistics\n", No(DEFAULTstatsSTATS));
  WriteOut (stdout, text);
#endif
  /****************************************************************************
  * CDFinquire.
  ****************************************************************************/
  WriteOut (stdout, "\n");
  WriteOut (stdout, "  CDFinquire\n");
#if defined(vms)
  WriteOut (stdout, BOO(DEFAULTidINQ,"    /ID\n",""));
  sprintf (text, "    /%sPAGE\n", No(DEFAULTpageINQ));
  WriteOut (stdout, text);
#else
  WriteOut (stdout, BOO(DEFAULTidINQ,"    -id\n",""));
  sprintf (text, "    -%spage\n", No(DEFAULTpageINQ));
  WriteOut (stdout, text);
#endif
  /****************************************************************************
  * SkeletonCDF.
  ****************************************************************************/
  WriteOut (stdout, "\n");
  WriteOut (stdout, "  SkeletonCDF\n");
#if defined(vms)
  sprintf (text, "    /%sLOG\n", No(DEFAULTlogSKT2CDF));
  WriteOut (stdout, text);
  sprintf (text, "    /%sDELETE\n", No(DEFAULTdeleteSKT2CDF));
  WriteOut (stdout, text);
  sprintf (text, "    /%sFILLVAL\n", No(DEFAULTfillvalSKT2CDF));
  WriteOut (stdout, text);
  sprintf (text, "    /%sNEG2POSFP0\n", No(DEFAULT_NEGtoPOSfp0));
  WriteOut (stdout, text);
  sprintf (text, "    /ZMODE=%s\n", zModeToken(DEFAULTzModeCDF2SKT));
  WriteOut (stdout, text);
  sprintf (text, "    /%sSTATISTICS\n", No(DEFAULTstatsSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    /REPORT=%s\n",
	   StatusCodeReportOptions(REPORTerrorsDEFAULT,
				   REPORTwarningsDEFAULT,
				   REPORTinfosDEFAULT));
  WriteOut (stdout, text);
#else
  sprintf (text, "    -%slog\n", No(DEFAULTlogSKT2CDF));
  WriteOut (stdout, text);
  sprintf (text, "    -%sdelete\n", No(DEFAULTdeleteSKT2CDF));
  WriteOut (stdout, text);
  sprintf (text, "    -%sfillval\n", No(DEFAULTfillvalSKT2CDF));
  WriteOut (stdout, text);
  sprintf (text, "    -%sneg2posfp0\n", No(DEFAULT_NEGtoPOSfp0));
  WriteOut (stdout, text);
  sprintf (text, "    -zmode %s\n", zModeToken(DEFAULTzModeCDF2SKT));
  WriteOut (stdout, text);
  sprintf (text, "    -%sstatistics\n", No(DEFAULTstatsSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    -report %s\n",
	   StatusCodeReportOptions(REPORTerrorsDEFAULT,
				   REPORTwarningsDEFAULT,
				   REPORTinfosDEFAULT));
  WriteOut (stdout, text);
#endif
  /****************************************************************************
  * SkeletonTable.
  ****************************************************************************/
  WriteOut (stdout, "\n");
  WriteOut (stdout, "  SkeletonTable\n");
#if defined(vms)
  sprintf (text, "    /%sLOG\n", No(DEFAULTlogCDF2SKT));
  WriteOut (stdout, text);
  sprintf (text, "    /%sFORMAT\n", No(DEFAULTformatCDF2SKT));
  WriteOut (stdout, text);
  sprintf (text, "    /VALUES=%s\n", valuesTokens[DEFAULTvaluesCDF2SKT]);
  WriteOut (stdout, text);
  sprintf (text, "    /%sNEG2POSFP0\n", No(DEFAULT_NEGtoPOSfp0));
  WriteOut (stdout, text);
  sprintf (text, "    /%sSCREEN\n", No(DEFAULTscreenCDF2SKT));
  WriteOut (stdout, text);
  sprintf (text, "    /%sPAGE\n", No(DEFAULTpageCDF2SKT));
  WriteOut (stdout, text);
  sprintf (text, "    /ZMODE=%s\n", zModeToken(DEFAULTzModeCDF2SKT));
  WriteOut (stdout, text);
  sprintf (text, "    /%sSTATISTICS\n", No(DEFAULTstatsSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    /REPORT=%s\n",
	   StatusCodeReportOptions(REPORTerrorsDEFAULT,
	   			   REPORTwarningsDEFAULT,
		  		   REPORTinfosDEFAULT));
  WriteOut (stdout, text);
#else
  sprintf (text, "    -%slog\n", No(DEFAULTlogCDF2SKT));
  WriteOut (stdout, text);
  sprintf (text, "    -%sformat\n", No(DEFAULTformatCDF2SKT));
  WriteOut (stdout, text);
  sprintf (text, "    -values %s\n", valuesTokens[DEFAULTvaluesCDF2SKT]);
  WriteOut (stdout, text);
  sprintf (text, "    -%sneg2posfp0\n", No(DEFAULT_NEGtoPOSfp0));
  WriteOut (stdout, text);
  sprintf (text, "    -%sscreen\n", No(DEFAULTscreenCDF2SKT));
  WriteOut (stdout, text);
  sprintf (text, "    -%spage\n", No(DEFAULTpageCDF2SKT));
  WriteOut (stdout, text);
  sprintf (text, "    -zmode %s\n", zModeToken(DEFAULTzModeCDF2SKT));
  WriteOut (stdout, text);
  sprintf (text, "    -%sstatistics\n", No(DEFAULTstatsSTATS));
  WriteOut (stdout, text);
  sprintf (text, "    -report %s\n",
	   StatusCodeReportOptions(REPORTerrorsDEFAULT,
	   			   REPORTwarningsDEFAULT,
		  		   REPORTinfosDEFAULT));
  WriteOut (stdout, text);
#endif
  /****************************************************************************
  * CDFedit.
  ****************************************************************************/
  WriteOut (stdout, "\n");
  WriteOut (stdout, "  CDFedit\n");
#if defined(vms)
  sprintf (text, "    /%sBROWSE\n", No(DEFAULTbrowseEDIT));
  WriteOut (stdout, text);
  sprintf (text, "    /ZMODE=%s\n", zModeToken(DEFAULTzModeEDIT));
  WriteOut (stdout, text);
  sprintf (text, "    /%sFORMAT\n", No(DEFAULTformatEDIT));
  WriteOut (stdout, text);
  sprintf (text, "    /%sPROMPT\n", No(DEFAULTpromptEDIT));
  WriteOut (stdout, text);
  sprintf (text, "    /%sNEG2POSFP0\n", No(DEFAULT_NEGtoPOSfp0));
  WriteOut (stdout, text);
  sprintf (text, "    /REPORT=%s\n",
	   StatusCodeReportOptions(REPORTerrorsDEFAULT,
				   REPORTwarningsDEFAULT,
				   REPORTinfosDEFAULT));
  WriteOut (stdout, text);
  sprintf (text, "    /%sSTATISTICS\n", No(DEFAULTstatsEDIT));
  WriteOut (stdout, text);
#else
  sprintf (text, "    -%sbrowse\n", No(DEFAULTbrowseEDIT));
  WriteOut (stdout, text);
  sprintf (text, "    -zmode %s\n", zModeToken(DEFAULTzModeEDIT));
  WriteOut (stdout, text);
  sprintf (text, "    -%sformat\n", No(DEFAULTformatEDIT));
  WriteOut (stdout, text);
  sprintf (text, "    -%sprompt\n", No(DEFAULTpromptEDIT));
  WriteOut (stdout, text);
  sprintf (text, "    -%sneg2posfp0\n", No(DEFAULT_NEGtoPOSfp0));
  WriteOut (stdout, text);
  sprintf (text, "    -report %s\n",
	   StatusCodeReportOptions(REPORTerrorsDEFAULT,
				   REPORTwarningsDEFAULT,
				   REPORTinfosDEFAULT));
  WriteOut (stdout, text);
  sprintf (text, "    -%sstatistics\n", No(DEFAULTstatsEDIT));
  WriteOut (stdout, text);
#endif
  /****************************************************************************
  * CDFexport.
  ****************************************************************************/
  WriteOut (stdout, "\n");
  WriteOut (stdout, "  CDFexport\n");
#if defined(vms)
  CDFexportVMS ();
#else
  CDFexportNotVMS ();
#endif

#endif
 return;

}

/******************************************************************************
* CDFexportVMS.
******************************************************************************/

#if !defined(mac) && !defined(win32)
static void CDFexportVMS () {
  char text[MAX_SCREENLINE_LEN+1];
  sprintf (text, "    /%sSIMPLE\n", No(DEFAULTsimpleEXPORT));
  WriteOut (stdout, text);
  sprintf (text, "    /%sPROMPT\n",
	   No(BOO(DEFAULTsimpleEXPORT,DEFAULTpromptSIMPLE,
				      DEFAULTpromptEXPORT)));
  WriteOut (stdout, text);
  sprintf (text, "    /ZMODE=%s\n",
	   zModeToken(BOO(DEFAULTsimpleEXPORT,DEFAULTzModeSIMPLE,
					      DEFAULTzModeEXPORT)));
  WriteOut (stdout, text);
  sprintf (text, "    /%sNEG2POSFP0\n", No(DEFAULT_NEGtoPOSfp0));
  WriteOut (stdout, text);
  sprintf (text, "    /REPORT=%s\n",
	   StatusCodeReportOptions(REPORTerrorsDEFAULT,
				   REPORTwarningsDEFAULT,
				   REPORTinfosDEFAULT));
  WriteOut (stdout, text);
  sprintf (text, "    /%sSTATISTICS\n", No(DEFAULTstatsEXPORT));
  WriteOut (stdout, text);
#if DEFAULTsimpleEXPORT
  CDFsimpleInitialVMS ();
#else
  CDFexportInitialVMS ();
#endif
  return;
}
#endif

/******************************************************************************
* CDFexportInitialVMS.
******************************************************************************/

#if !defined(mac) && !defined(win32)
static void CDFexportInitialVMS () {
  char text[MAX_SCREENLINE_LEN+1];
  sprintf (text,
	   "    /INITIAL=(%sFILTER,%sFILLS,%sFORMAT,%sFILLVAL,%sVALIDMIN,",
	   No(DEFAULTeachFilterEXPORT), No(DEFAULTfillsEXPORT),
	   No(DEFAULTformatEXPORT), No(DEFAULTfillvalEXPORT),
	   No(DEFAULTvalidminEXPORT));
  sprintf (EofS(text), "%sPREALLOCATE,\n", No(DEFAULTpreAllocateEXPORT));
  WriteOut (stdout, text);
  sprintf (text,
	   "              %sVALIDMAX,%sMONOTON,%sRECORD,%sINDICES,",
	   No(DEFAULTvalidmaxEXPORT), No(DEFAULTmonotonEXPORT),
	   No(DEFAULTrecordEXPORT), No(DEFAULTindicesEXPORT));
  sprintf (EofS(text), "%sOUTPUT,%sDELETE,\n",
	   No(DEFAULToutputEXPORT), No(DEFAULTdeleteEXPORT));
  WriteOut (stdout, text);
  sprintf (text,
	   "              %sEXCLUSIVE,%s,%s,%s,%s,%s%sHEADING)\n",
	   No(DEFAULTexclusiveEXPORT), epochToken(DEFAULTepochEXPORT),
	   BOO(DEFAULTsingleEXPORT,"SINGLE","MULTI"),
	   BOO(DEFAULTnetworkEXPORT,"NETWORK","HOST"),
	   BOO(DEFAULThorizontalEXPORT,"HORIZONTAL","VERTICAL"),
	   majorityToken(DEFAULTmajorityEXPORT), No(DEFAULTheadingEXPORT));
  WriteOut (stdout, text);
  return;
}
#endif

/******************************************************************************
* CDFsimpleInitialVMS.
******************************************************************************/

#if !defined(mac) && !defined(win32)
static void CDFsimpleInitialVMS () {
  char text[MAX_SCREENLINE_LEN+1];
  sprintf (text,
	   "    /INITIAL=(%sFORMAT,%sRECORD,%sINDICES,%sOUTPUT,\n",
	   No(DEFAULTformatSIMPLE), No(DEFAULTrecordSIMPLE),
	   No(DEFAULTindicesSIMPLE), No(DEFAULToutputSIMPLE));
  WriteOut (stdout, text);
  sprintf (text,
	   "              %s,%s,%s%sHEADING)\n",
	   epochToken(DEFAULTepochSIMPLE),
	   BOO(DEFAULThorizontalSIMPLE,"HORIZONTAL","VERTICAL"),
	   majorityToken(DEFAULTmajoritySIMPLE), No(DEFAULTheadingSIMPLE));
  WriteOut (stdout, text);
  return;
}
#endif

/******************************************************************************
* CDFexportNotVMS.
******************************************************************************/

#if !defined(mac) && !defined(win32)
static void CDFexportNotVMS () {
  char text[MAX_SCREENLINE_LEN+1];
  sprintf (text, "    -%ssimple\n", No(DEFAULTsimpleEXPORT));
  WriteOut (stdout, text);
  sprintf (text, "    -%sprompt\n",
	   No(BOO(DEFAULTsimpleEXPORT,DEFAULTpromptSIMPLE,
				      DEFAULTpromptEXPORT)));
  WriteOut (stdout, text);
  sprintf (text, "    -zmode %s\n",
	   zModeToken(BOO(DEFAULTsimpleEXPORT,DEFAULTzModeSIMPLE,
					      DEFAULTzModeEXPORT)));
  WriteOut (stdout, text);
  sprintf (text, "    -%sneg2posfp0\n", No(DEFAULT_NEGtoPOSfp0));
  WriteOut (stdout, text);
  sprintf (text, "    -report %s\n",
	   StatusCodeReportOptions(REPORTerrorsDEFAULT,
				   REPORTwarningsDEFAULT,
				   REPORTinfosDEFAULT));
  WriteOut (stdout, text);
  sprintf (text, "    -%sstatistics\n", No(DEFAULTstatsEXPORT));
  WriteOut (stdout, text);
#if DEFAULTsimpleEXPORT
  CDFsimpleInitialNotVMS ();
#else
  CDFexportInitialNotVMS ();
#endif
  return;
}
#endif

/******************************************************************************
* CDFexportInitialNotVMS.
******************************************************************************/

#if !defined(mac) && !defined(win32)
static void CDFexportInitialNotVMS () {
  char text[MAX_SCREENLINE_LEN+1];
  sprintf (text,
	   "    -initial \"%sfilter,%sfills,%sformat,%sfillval,%svalidmin,",
	   No(DEFAULTeachFilterEXPORT), No(DEFAULTfillsEXPORT),
	   No(DEFAULTformatEXPORT), No(DEFAULTfillvalEXPORT),
	   No(DEFAULTvalidminEXPORT));
  sprintf (EofS(text), "%spreallocate,\n", No(DEFAULTpreAllocateEXPORT));
  WriteOut (stdout, text);
  sprintf (text,
	   "              %svalidmax,%smonoton,%srecord,%sindices,",
	   No(DEFAULTvalidmaxEXPORT), No(DEFAULTmonotonEXPORT),
	   No(DEFAULTrecordEXPORT), No(DEFAULTindicesEXPORT));
  sprintf (EofS(text), "%soutput,%sdelete,\n",
	   No(DEFAULToutputEXPORT), No(DEFAULTdeleteEXPORT));
  WriteOut (stdout, text);
  sprintf (text,
	   "              %sexclusive,%s,%s,%s,%s,%s%sheading\"\n",
	   No(DEFAULTexclusiveEXPORT), epochToken(DEFAULTepochEXPORT),
	   BOO(DEFAULTsingleEXPORT,"single","multi"),
	   BOO(DEFAULTnetworkEXPORT,"network","host"),
	   BOO(DEFAULThorizontalEXPORT,"horizontal","vertical"),
	   majorityToken(DEFAULTmajorityEXPORT), No(DEFAULTheadingEXPORT));
  WriteOut (stdout, text);
  return;
}
#endif

/******************************************************************************
* CDFsimpleInitialNotVMS.
******************************************************************************/

#if !defined(mac) && !defined(win32)
static void CDFsimpleInitialNotVMS () {
  char text[MAX_SCREENLINE_LEN+1];
  sprintf (text,
	   "    -initial \"%sformat,%srecord,%sindices,%soutput,\n",
	   No(DEFAULTformatSIMPLE), No(DEFAULTrecordSIMPLE),
	   No(DEFAULTindicesSIMPLE), No(DEFAULToutputSIMPLE));
  WriteOut (stdout, text);
  sprintf (text,
	   "              %s,%s,%s%sheading\"\n",
	   epochToken(DEFAULTepochSIMPLE),
	   BOO(DEFAULThorizontalSIMPLE,"horizontal","vertical"),
	   majorityToken(DEFAULTmajoritySIMPLE), No(DEFAULTheadingSIMPLE));
  WriteOut (stdout, text);
  return;
}
#endif

/******************************************************************************
* zModeToken.
******************************************************************************/

static char *zModeToken (zMode)
int zMode;
{
  switch (zMode) {
    case zMODEoff: return "0";
    case zMODEon1: return "1";
    case zMODEon2: return "2";
  }
  return "?";
}

/******************************************************************************
* majorityToken.
******************************************************************************/

static char *majorityToken (majority)
int majority;
{
  switch (majority) {
    case INPUT_MAJOR: return "";
    case ROW_MAJOR:
#if defined(vms)
      return "ROW,";
#else
      return "row,";
#endif
    case COLUMN_MAJOR:
#if defined(vms)
      return "COLUMN,";
#else
      return "column,";
#endif
  }
  return "?";
}

/******************************************************************************
* epochToken.
******************************************************************************/

static char *epochToken (epochStyle)
int epochStyle;
{
  switch (epochStyle) {
    case EPOCH0_STYLE:
#if defined(vms)
      return "EPOCH";
#else
      return "epoch";
#endif
    case EPOCH1_STYLE:
#if defined(vms)
      return "EPOCH1";
#else
      return "epoch1";
#endif
    case EPOCH2_STYLE:
#if defined(vms)
      return "EPOCH2";
#else
      return "epoch2";
#endif
    case EPOCH3_STYLE:
#if defined(vms)
      return "EPOCH3";
#else
      return "epoch3";
#endif
    case EPOCHf_STYLE:
#if defined(vms)
      return "EPOCHf";
#else
      return "epochf";
#endif
    case EPOCHx_STYLE:
#if defined(vms)
      return "EPOCHx";
#else
      return "epochx";
#endif
  }
  return "?";
}

/******************************************************************************
* No.
******************************************************************************/

static char *No (state)
Logical state;
{
  switch (state) {
    case TRUE: return "";
#if defined(vms)
    case FALSE: return "NO";
#else
    case FALSE: return "no";
#endif
  }
  return "?";
}

/******************************************************************************
* InquireQOPs.
*    Returns TRUE if execution should continue.
******************************************************************************/

#if defined(mac)
Logical InquireQOPs (argC, argV)
int *argC;
char **argV[];
{
  DialogPtr dialogP;
  DialogRecord dRecord;
  WindowPtr behind = (WindowPtr) -1;
  ControlHandle controlHs[MAXIMUMin+1];
  Rect iRect;
#ifdef __MWERKS__
  ModalFilterUPP FilterDialogQOPsoUPP;
  UserItemUPP OutlineDefaultButtonUPP;
#endif
  short itemN, iType;
  static Logical first = TRUE;
  char cancelTitle[] = "Cancel";
  static Logical pageOutput = DEFAULTpageINQ;
  static Logical showId = DEFAULTidINQ;
  /****************************************************************************
  * Create the dialog and get the control handles.
  ****************************************************************************/
  dialogP = GetNewDialog (QOPri, &dRecord, behind);
  for (itemN = 1; itemN <= MAXIMUMin; itemN++) {
     GetDItem (dialogP, itemN, &iType, (Handle *) &controlHs[itemN], &iRect);
  }
  /****************************************************************************
  * Set the control values.
  ****************************************************************************/
  if (pageOutput) SetCtlValue (controlHs[PAGEin], 1);
  if (showId) SetCtlValue (controlHs[IDin], 1);
#ifndef __MWERKS__
  SetDItem (dialogP, (short) ODBin, (short) userItem,
	    (Handle) OutlineDefaultButton, &iRect);
#else
  OutlineDefaultButtonUPP = NewUserItemProc (OutlineDefaultButton);
  SetDItem (dialogP, (short) ODBin, (short) userItem,
	    (Handle) OutlineDefaultButtonUPP, &iRect);
#endif
  /****************************************************************************
  * Change the "Quit" button to a "Cancel" button after the first time.
  ****************************************************************************/
  if (first)
    first = FALSE;
  else
    SetCTitle (controlHs[CANCELin], CtoPstr(cancelTitle));
  /****************************************************************************
  * Display the dialog and wait for user actions.
  ****************************************************************************/
  ShowWindow ((WindowPtr) dialogP);
  SetCursor (ARROW_CURSOR);
#ifdef __MWERKS__
  FilterDialogQOPsoUPP = NewModalFilterProc((ProcPtr) FilterDialogQOPso);
#endif

  for (;;) {
#ifndef __MWERKS__
    ModalDialog (FilterDialogQOPso, &itemN);
#else
    ModalDialog (FilterDialogQOPsoUPP, &itemN);
#endif
    switch (itemN) {
      /************************************************************************
      * Ok.
      ************************************************************************/
      case OKin: {
		int n;
		/**********************************************************************
		* Get the value of each control.
		**********************************************************************/
		pageOutput = GetCtlValue (controlHs[PAGEin]);
		/**********************************************************************
		* Build argc/argv.
		**********************************************************************/
        *argC = 3;
        *argV = (char **) cdf_AllocateMemory (*argC * sizeof(char *),
					  FatalError);
		n = 0;
		MAKEstrARGv (argV, n, pgmName)
		MAKEstrARGv (argV, n, "-id")
		MAKEbooARGv (argV, n, pageOutput, "-page", "-nopage")
		/**********************************************************************
		* Close the dialog and return.
		**********************************************************************/
        CloseDialog (dialogP);
#ifdef __MWERKS__
        DisposeRoutineDescriptor (FilterDialogQOPsoUPP);
		DisposeRoutineDescriptor (OutlineDefaultButtonUPP);
#endif
        return TRUE;
      }
      /************************************************************************
      * Help.
      ************************************************************************/
      case HELPin: {
        int n;
        *argC = 1;
        *argV = (char **) cdf_AllocateMemory (*argC * sizeof(char *),
					  FatalError);
		n = 0;
		MAKEstrARGv (argV, n, pgmName)
		CloseDialog (dialogP);
#ifdef __MWERKS__
        DisposeRoutineDescriptor (FilterDialogQOPsoUPP);
		DisposeRoutineDescriptor (OutlineDefaultButtonUPP);
#endif
        return TRUE;
      }
      /************************************************************************
      * Cancel.
      ************************************************************************/
      case CANCELin:
        CloseDialog (dialogP);
#ifdef __MWERKS__
        DisposeRoutineDescriptor (FilterDialogQOPsoUPP);
		DisposeRoutineDescriptor (OutlineDefaultButtonUPP);
#endif
        return FALSE;
      /************************************************************************
      * Check boxes.
      ************************************************************************/
      case PAGEin:
        SetCtlValue (controlHs[itemN], BOO(GetCtlValue(controlHs[itemN]),0,1));
        break;
    }
  }
}
#endif


syntax highlighted by Code2HTML, v. 0.9.1