Metropoli BBS
VIEWER: saveset.c MODE: TEXT (ASCII)
/***************************************************************************
 *		  Copyright (C) 1994  Charles P. Peterson                  *
 *	     4007 Enchanted Sun, San Antonio, Texas 78244-1254             *
 *              Email: Charles_P_Peterson@fcircus.sat.tx.us                *
 *                                                                         *
 *		  This is free software with NO WARRANTY.                  *
 *	      See gfft.c, or run program itself, for details.              *
 *		      Support is available for a fee.                      *
 ***************************************************************************
 *
 * Program:     gfft--General FFT analysis
 * File:        saveset.c
 * Purpose:     save settings
 * Author:      Charles Peterson (CPP)
 * History:     11-Feb-95 CPP (1.39); Created.
 * Comment:     
 */

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

#include "gfft.h"
#include "settings.h"

#define WRITE_BOOLEAN( NAME, VARIABLE, DEFLT) \
  write_boolean (fp, cstr, NAME, VARIABLE, DEFLT);

static void write_boolean (FILE *fp, char *cstr, char *name, 
			   BOOLEAN variable, BOOLEAN deflt)
{
    if (variable && !deflt)
    {
	fprintf (fp, "%s%s\n", cstr, name);
    }
    else if (!variable && deflt)
    {
	fprintf (fp, "%sNo%s\n", cstr, name);
    }
}

#define WRITE_ULONG( NAME, VARIABLE, DEFLT, IGNORE1) \
write_ulong (fp, cstr, NAME, VARIABLE, DEFLT, IGNORE1)

static void write_ulong (FILE *fp, char *cstr, char *name, ULONG variable, 
			 ULONG deflt, ULONG ignore1)
{
    if (!(variable == deflt || variable == ignore1))
    {
	fprintf (fp, "%s%s=%lu\n", cstr, name, variable);
    }
}

#define WRITE_LONG( NAME, VARIABLE, DEFLT, IGNORE) \
write_long (fp, cstr, NAME, VARIABLE, DEFLT, IGNORE)

static void write_long (FILE *fp, char *cstr, char *name, long variable, 
			long deflt, long ignore)
{
    if (!(variable == deflt || variable == ignore))
    {
	fprintf (fp, "%s%s=%ld\n", cstr, name, variable);
    }
}

#define WRITE_DOUBLE( NAME, VARIABLE, DEFLT, IGNORE) \
write_double (fp, cstr, NAME, VARIABLE, DEFLT, IGNORE)

static void write_double (FILE *fp, char *cstr, char *name, 
			  double variable, double deflt, double ignore)
{
    if (!(variable == deflt || variable == ignore))
    {
#ifdef _FFP
	fprintf (fp, "%s%s=%19.12g\n", cstr, name, variable);
#else
	fprintf (fp, "%s%s=%15.8g\n", cstr, name, variable);
#endif
    }
}

#define WRITE_CHARS( NAME, VARIABLE) \
  write_chars (fp, cstr, NAME, VARIABLE)

static void write_chars (FILE *fp, char *cstr, char *name, char *variable)
{
    if (variable && strlen (variable))
    {
	fprintf (fp, "%s%s=%s\n", cstr, name, variable);
    }
}

#define WRITE_WINDOWT( VARIABLE, DEFLT) \
  write_windowt (fp, cstr, VARIABLE, DEFLT);

static void write_windowt (FILE *fp, char *cstr, int variable, int deflt)
{
    char *windowt;

    if (variable != deflt)
    {
	switch (variable)
	{
	case RECTANGLE_WINDOW:
	    windowt = "Rectangle";
	    break;
	case TRIANGLE_WINDOW:
	    windowt = "Triangle";
	    break;
	case PARZEN_WINDOW:
	    windowt = "Parzen";
	    break;
	case WELCH_WINDOW:
	    windowt = "Welch";
	    break;
	case HANN_WINDOW:
	    windowt = "Hann";
	    break;
	case HAMMING_WINDOW:
	    windowt = "Hamming";
	    break;
	case BLACKMAN_HARRIS_74DB_WINDOW:
	    windowt = "74dB-Blackman-Harris";
	    break;
	case BLACKMAN_HARRIS_92DB_WINDOW:
	    windowt = "92dB-Blackman-Harris";
	    break;
	default:
	    return;
	}
	fprintf (fp, "%s%s\n", cstr, windowt);
    }
}

#define WRITE_CAL_LIST( VARIABLE) \
  calibration_list__write (fp, cstr, &VARIABLE);


#define WRITE_PLOT_COMMANDS( NAME, VARIABLE) \
  write_plot_commands (fp, cstr, NAME, VARIABLE);


void write_settings (FILE *fp, char *cstr, BOOLEAN show_read,
		     BOOLEAN show_write)
{
    if (show_read)
    {
	WRITE_CHARS ("Read", ReadName);
    }

    if (show_write)
    {
	if (Appending)
	{
	    WRITE_CHARS ("Append", WriteName);
	}
	else
	{
	    WRITE_CHARS ("Write", WriteName);
	}
    }

/*  WRITE_BOOLEAN ("Amplitude", Amplitude, TRUE);  
      True by default, else write POWER */

    WRITE_CAL_LIST (CalibrationList);
    WRITE_ULONG ("Channel", Channel, 1L, 0L);
    WRITE_BOOLEAN ("CombinePlots", CombinePlots, FALSE);
    WRITE_BOOLEAN ("Db", Db, FALSE);
    WRITE_ULONG ("Frames", Frames, ULONG_MAX, ULONG_MAX);
    WRITE_BOOLEAN ("Header", Header, TRUE)
    WRITE_BOOLEAN ("Hidden3D", Hidden3D, TRUE);
    WRITE_DOUBLE ("HighFrequency", HighFrequency, HIGHEST_FREQUENCY, HIGHEST_FREQUENCY);
    WRITE_DOUBLE ("HighY", HighY, HIGHEST_Y, HIGHEST_Y);
    WRITE_BOOLEAN ("IgnoreFormat", IgnoreFormat, FALSE);
/*    WRITE_PARAMETER (IOFormatS, InputFormat, INPUT_FORMAT_DEFAULTS); */
    WRITE_ULONG ("Interleave", Interleave, 1, INVALID_INTERLEAVE);
    WRITE_BOOLEAN ("LogX", LogX, FALSE);
    WRITE_BOOLEAN ("LogY", LogY, FALSE);
    WRITE_DOUBLE ("LowFrequency", LowFrequency, LOWEST_FREQUENCY, LOWEST_FREQUENCY);
    WRITE_DOUBLE ("LowY", LowY, LOWEST_Y, LOWEST_Y);
    WRITE_ULONG ("Key", Key, 0, 0);

/*  WRITE_BOOLEAN ("Mean", Mean, TRUE); true by default, else set SUM */

    WRITE_DOUBLE ("Multiply", Multiply, 1.0L, 1.0L);
    WRITE_LONG ("NumberBins", NumberBins, MAX_BINS, INVALID_BINS);
    WRITE_BOOLEAN ("Numerical", Numerical, FALSE);
    WRITE_ULONG ("Octave", Octave, 1L, 1L);
    WRITE_BOOLEAN ("OneShotOnly", OneShotOnly, FALSE);
/*     WRITE_PARAMETER (IOFormatS, OutputFormat, OUTPUT_FORMAT_DEFAULTS); */
    WRITE_BOOLEAN ("Overlap", Overlap, TRUE);
    WRITE_BOOLEAN ("Pad", Pad, FALSE);
    WRITE_BOOLEAN ("Parseval", Parseval, TRUE);
    WRITE_BOOLEAN ("Pink", Pink, FALSE);
    WRITE_BOOLEAN ("Plot", Plot, NO_PLOT);
    WRITE_PLOT_COMMANDS ("PlotCommand", PlotCommands);
    WRITE_CHARS ("PlotOutput", PlotOutput);
    WRITE_BOOLEAN ("Power", Power, FALSE);
    WRITE_BOOLEAN ("PSDensity", PSDensity, FALSE);
    WRITE_DOUBLE ("Quantization", Quantization, MIN_QUANTIZATION, 
		  BAD_QUANTIZATION);
    WRITE_BOOLEAN ("Quiet", Quiet, FALSE);
    WRITE_DOUBLE ("Rate", Rate, AUTO_RATE, INVALID_RATE);
    WRITE_DOUBLE ("RotX", RotX, DEF_ROT_X, INVALID_ROTATION);
    WRITE_DOUBLE ("RotZ", RotZ, DEF_ROT_Z, INVALID_ROTATION);

    WRITE_BOOLEAN ("RepeatOnly", RepeatOnly, FALSE);
    WRITE_BOOLEAN ("SaveMemory", SaveMemory, FALSE);
    WRITE_LONG ("SmoothingSegments", SmoothingSegments, NO_SMOOTHING, 
		INVALID_SMOOTHING);
    WRITE_BOOLEAN ("SquaredSmoothing", SquaredSmoothing, FALSE);
    WRITE_ULONG ("StartByte", StartByte, 0, 0);
    WRITE_ULONG ("StartFrame", StartFrame, 0, 0);
    WRITE_ULONG ("StopByte", StopByte, ULONG_MAX, ULONG_MAX);
    WRITE_CHARS ("Terminal", Terminal);
    WRITE_BOOLEAN ("Time3D", Time3D, FALSE);
    WRITE_LONG ("TimeOffset", TimeOffset, NOT_SET, INVALID_SET);
    WRITE_DOUBLE ("TimeOverlap", TimeOverlap, DEFAULT_TIME_OVERLAP, 
		  (double) INVALID_SET);
    WRITE_LONG ("TimeSegments", TimeSegments, NOT_SET, INVALID_SET);
    WRITE_LONG ("TimeSegSize", TimeSegSize, NOT_SET, INVALID_SET);
    WRITE_BOOLEAN ("Topaz", Topaz, FALSE);
    WRITE_WINDOWT (WindowType, RECTANGLE_WINDOW);
}

[ RETURN TO DIRECTORY ]