home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga ACS 1997 #2
/
amigaacscoverdisc
/
utilities
/
shareware
/
music
/
gfft-2.03
/
source
/
gfft-2.03-source.lha
/
wbdialog.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-01-02
|
49KB
|
1,732 lines
/***************************************************************************
* 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: wbdialog.c
* Purpose: workbench GUI dialog
* Author: Charles Peterson (CPP)
* History: 19-Nov-1993 CPP; Created.
* 4-Aug-94 CPP (1.04); Filenames may contain spaces
* 5-Aug-94 CPP (1.05); Make append apply to name shown
* 5-Aug-94 CPP (1.10); Minor interface improvements
* 31-Aug-94 CPP (1.13); Fix display of pre-set LogX and LogY
* 14-Dec-94 CPP (1.17); Fix display of gadgets w. >4 colors
* 5-Jan-95 CPP (1.18); Use system default font if possible
* 20-Jan-1994 CPP (1.23); Use icon tooltypes
* 26-Jan-95 CPP (1.26); Allow largest possible font size
* 27-Jan-95 CPP (1.27); Report window open failure
* 28-Jan-95 CPP (1.28); Nag requester
* 28-Jan-95 CPP (1.29); Labeled radio buttons
* 28-Jan-95 CPP (1.30); Tall buttons for emphasis
* 6-Feb-95 CPP (1.31); Progress Requester
*
* Comments: Workbench GUI. Amiga Dependent!
* We must exit from here on all fatal errors!
* (Note: might have been started from CLI. In that case,
* don't expect to find any workbench message or icons.
* Read and write files and options might already have been
* selected through CLI arguments or commands.)
*/
#ifdef AMIGA /* This module is AMIGA dependent */
#include <stdio.h> /* sprintf() */
#include <string.h>
/* #define ONLY_OK_TALL */
/*
* Amiga includes
*/
#include <exec/types.h>
#include <workbench/workbench.h>
#include <intuition/intuition.h>
#include <clib/intuition_protos.h>
#include <clib/exec_protos.h>
#include <dos.h> /* chkabort() */
/*
* GFFT includes
*/
#include "gfft.h"
#include "settings.h" /* for testing */
#include "wbench.h"
#include "format.h"
/*
* special global variables defined here
*/
struct Window *dialog_window_p = NULL;
struct Gadget *message_gadgetp;
/*
* Semi-global variables
*/
extern LONG num_files;
extern LONG file_index;
extern double LoopTimeElapsed;
extern int Tooltype_Errors;
/*
* Strings from messages[.c|.h]
*/
extern const char NameAuthor[];
extern const char VersionData[];
extern const char Copyright[];
extern char *Please_Select_Read_File_S;
extern char *Set_Parameters_Then_Ok_S;
extern char *Attempting_to_Perform_FFT_S;
extern char *Set_Sampling_Rate_S;
extern char *Verify_Sampling_Rate_S;
extern char *Dialog_Window_Title;
/*
* From wbtools
*/
extern BOOLEAN Old_Intuition;
extern short Screen_Font_Height;
extern short Font_Height;
extern short Font_Width;
/*
* From Amiga Hardware Reference Manual
*/
#define RAW_HELP_KEY 0x5f
/*
* Window definitions
*/
#define FONT_SIZE 8
#define MAX_TEXT_COLS 75 /* This turns out to be the max we can get with screen width = 640 */
#define BUTTON_ROWS 9 /* This allows a small console window beneath window when height = 200 */
#define SELECT_READ_FILE 1
#define SELECT_PARAMETERS 2
#define PERFORMING_FFT 3
#define REMEMBER_MESSAGE 4
#define SET_RATE 5
#define VERIFY_RATE 6
/*
* Static variables for this file
*/
static struct Gadget *octave_2_gadgetp, *octave_3_gadgetp;
static struct Gadget *octave_4_gadgetp, *octave_5_gadgetp;
static struct Gadget *octave_6_gadgetp, *octave_7_gadgetp;
static struct Gadget *octave_low_gadgetp, *octave_hi_gadgetp;
static struct Gadget *ok_gadgetp, *CLI_gadgetp, *next_gadgetp;
static struct Gadget *copyright_gadgetp, *select_read_gadgetp;
static struct Gadget *read_file_gadgetp, *con_read_gadgetp;
static struct Gadget *one_shot_gadgetp, *repeat_only_gadgetp;
static struct Gadget *channel_gadgetp, *rate_gadgetp, *bins_gadgetp;
static struct Gadget *bins_max_gadgetp, *overlap_gadgetp, *pad_gadgetp;
static struct Gadget *interleave_gadgetp, *no_interleave_gadgetp;
static struct Gadget *rectangle_gadgetp, *welch_gadgetp, *parzen_gadgetp;
static struct Gadget *b_h_74db_gadgetp, *triangle_gadgetp;
static struct Gadget *b_h_92db_gadgetp;
static struct Gadget *hamming_gadgetp, *combine_plots_gadgetp;
static struct Gadget *hann_gadgetp, *pink_gadgetp, *def_write_gadgetp;
static struct Gadget *write_file_gadgetp, *cancel_write_gadgetp;
static struct Gadget *low_f_gadgetp, *high_f_gadgetp, *time_segs_gadgetp;
static struct Gadget *plot_gadgetp, *log_x_gadgetp, *log_y_gadgetp;
static struct Gadget *amplitude_gadgetp, *power_gadgetp, *db_gadgetp;
static struct Gadget *mean_gadgetp, *smoothing_gadgetp, *help_gadgetp;
static struct Gadget *no_smoothing_gadgetp, *sq_smoothing_gadgetp;
static struct Gadget *re_plot_gadgetp, *re_output_gadgetp;
static struct Gadget *time3d_gadgetp, *cut_plots_gadgetp;
static struct Gadget *append_gadgetp, *cal_gadgetp;
static struct Gadget *spectrum_select_gadgetp;
static struct Requester *progress_rp = NULL;
static struct Requester *reout_progress_rp = NULL;
APTR *last_address = NULL;
#define DONT_KNOW -1
static ULONG bins_used = DONT_KNOW;
static wb_append_on = FALSE;
BOOLEAN Tooltype_Errors_Reported = FALSE;
/*
* local functions
*/
static void message__set (int message_number);
static void octave_buttons__set (void);
static void fdep_buttons__enable (void);
static void window_buttons__set (void);
static void read_parameters__set (void);
static void rate_gadget__update (void);
static void amplitude__set (void);
static void bins_gadget__update (BOOLEAN force_update);
static void bins_string__set (char *buffer);
static void high_f_gadget__update (void);
static void low_f_gadget__update (void);
static void do_help (struct Gadget *gadgetp);
static char *wb_set_append (char *arguments);
static char *wb_no_set_append (char *arguments);
int workbench_dialog (void)
{
int next_action = WORKBENCH_MODE;
struct IntuiMessage *message;
APTR *address = NULL;
ULONG class = NULL;
UWORD qualifier = NULL;
UWORD code = NULL;
APTR next_address = NULL;
ULONG next_class = NULL;
UWORD next_code = NULL;
UWORD next_qualifier = NULL;
BOOLEAN last_plot;
char channel_string[20];
char rate_string[32];
char bins_string[20];
char low_f_string[32];
char high_f_string[32];
char smoothing_string[20];
char copyright_string[132];
int copyright_indent;
int copyright_delta;
int last_command_mode = CommandMode;
APTR string_gadget_being_set = NULL;
double s_rate = (Rate == AUTO_RATE) ? FileRate : Rate;
last_plot = Plot;
Plot = ANY_PLOT;
if (dialog_window_p == NULL)
{
open_libraries ();
setup_window_defaults (BUTTON_ROWS);
gadget__begin (NULL); /* Ensure requester mode off */
/*
* Define the Gadgets
*/
/* Top Row */
strcpy (copyright_string, NameAuthor);
strcat (copyright_string, VersionData);
strcat (copyright_string, " "); /* One space */
strcat (copyright_string, Copyright);
copyright_delta = MAX_TEXT_COLS - strlen (copyright_string);
if (1 & copyright_delta)
{
strcpy (copyright_string, NameAuthor);
strcat (copyright_string, VersionData);
strcat (copyright_string, " "); /* Two spaces */
strcat (copyright_string, Copyright);
}
copyright_delta = MAX_TEXT_COLS - strlen (copyright_string);
copyright_indent = copyright_delta / 2;
copyright_gadgetp = action_button__new (copyright_string,
copyright_indent, 0);
copyright_gadgetp->UserData = "Workbench Copyright";
/* Second Row */
help_gadgetp = action_button__new ("Help", 0, 1);
help_gadgetp->UserData = "Workbench Help";
read_file_gadgetp = string_gadget__new ("Sample File:", ReadName,
MAX_PATH, 49, 6, 1);
read_file_gadgetp->UserData = "Workbench Sample-File";
select_read_gadgetp = action_button__new ("Select", 57, 1);
select_read_gadgetp->UserData = "Workbench Sample-Select";
con_read_gadgetp = action_button__new ("con:", 65, 1);
con_read_gadgetp->UserData = "Workbench Sample-Con:";
next_gadgetp = action_button__new ("Next", 71, 1);
next_gadgetp->UserData = "Workbench Next";
if (num_files <= 0 ||
num_files <= file_index + 1)
{
next_gadgetp->Flags |= GADGDISABLED;
}
/* Third Row */
octave_low_gadgetp = labeled_radio_button__new
("Octave:", "Low", 0, 2);
octave_2_gadgetp = radio_button__new ("2", 14, 2);
octave_3_gadgetp = radio_button__new ("3", 17, 2);
octave_4_gadgetp = radio_button__new ("4", 20, 2);
octave_5_gadgetp = radio_button__new ("5", 23, 2);
octave_6_gadgetp = radio_button__new ("6", 26, 2);
octave_7_gadgetp = radio_button__new ("7", 29, 2);
octave_hi_gadgetp = radio_button__new ("Hi", 32, 2);
octave_low_gadgetp->UserData = "Workbench Octave-Low";
octave_2_gadgetp->UserData = "Workbench Octave-2";
octave_3_gadgetp->UserData = "Workbench Octave-3";
octave_4_gadgetp->UserData = "Workbench Octave-4";
octave_5_gadgetp->UserData = "Workbench Octave-5";
octave_6_gadgetp->UserData = "Workbench Octave-6";
octave_7_gadgetp->UserData = "Workbench Octave-7";
octave_hi_gadgetp->UserData = "Workbench Octave-Hi";
one_shot_gadgetp = radio_button__new ("One-Shot Only", 37, 2);
one_shot_gadgetp->UserData = "Workbench One-Shot-Only";
repeat_only_gadgetp = radio_button__new ("Repeat O", 52, 2);
repeat_only_gadgetp->UserData = "Workbench Repeat-Only";
sprintf (channel_string,"%d",Channel);
channel_gadgetp = string_gadget__new ("Channel:", channel_string,
2, 13, 62, 2);
channel_gadgetp->UserData = "Workbench Channel";
/* Fourth Row */
if (s_rate != AUTO_RATE && s_rate != INVALID_RATE)
{
sprintf (rate_string, "%g", s_rate);
}
else
{
rate_string[0] = '\0';
}
rate_gadgetp = string_gadget__new ("S Rate:", rate_string,
30, 20, 0, 3);
rate_gadgetp->UserData = "Workbench Rate";
bins_string__set (bins_string);
bins_gadgetp = string_gadget__new ("Bins:", bins_string,
12, 16, 22, 3);
bins_gadgetp->UserData = "Workbench Bins";
bins_max_gadgetp = radio_button__new ("MAX", 40, 3);
bins_max_gadgetp->UserData = "Workbench Bins-Max";
overlap_gadgetp = radio_button__new ("Overlap", 46, 3);
overlap_gadgetp->UserData = "Workbench Overlap";
cal_gadgetp = action_button__new ("Cal & Mag", 56, 3);
cal_gadgetp->UserData = "Workbench Cal-&-Mag";
time3d_gadgetp = action_button__new ("3D-Time", 68, 3);
time3d_gadgetp->UserData = "Workbench 3D-Time";
/* Fifth Row */
rectangle_gadgetp = labeled_radio_button__new
("Window:", "Rectangle ", 0, 4);
triangle_gadgetp = radio_button__new ("Triangle", 21, 4);
parzen_gadgetp = radio_button__new ("Parzen", 31, 4);
welch_gadgetp = radio_button__new ("Welch", 39, 4);
hann_gadgetp = radio_button__new ("Hann", 46, 4);
hamming_gadgetp = radio_button__new ("Hamming", 52, 4);
b_h_74db_gadgetp = radio_button__new ("B-H 74dB", 61, 4);
b_h_92db_gadgetp = radio_button__new ("92dB", 71, 4);
rectangle_gadgetp->UserData = "Workbench Rectangle";
triangle_gadgetp->UserData = "Workbench Triangle";
parzen_gadgetp->UserData = "Workbench Parzen";
welch_gadgetp->UserData = "Workbench Welch";
hann_gadgetp->UserData = "Workbench Hann";
hamming_gadgetp->UserData = "Workbench Hamming";
b_h_74db_gadgetp->UserData = "Workbench 74dB-Blackman-Harris";
b_h_92db_gadgetp->UserData = "Workbench 92dB-Blackman-Harris";
/* Sixth Row */
if (LowFrequency != LOWEST_FREQUENCY)
{
sprintf (low_f_string, "%g", LowFrequency);
}
else
{
low_f_string[0] = '\0';
}
low_f_gadgetp = string_gadget__new ("Low Freq:", low_f_string,
30, 22, 0, 5);
low_f_gadgetp->UserData = "Workbench Low-Frequency";
if (HighFrequency != DBL_MAX)
{
sprintf (high_f_string, "%g", HighFrequency);
}
else
{
if (s_rate != AUTO_RATE && s_rate != INVALID_RATE)
{
sprintf (high_f_string, "%g", s_rate / 2);
}
else
{
high_f_string[0] = '\0';
}
}
high_f_gadgetp = string_gadget__new ("High Freq:", high_f_string,
30, 23, 25, 5);
high_f_gadgetp->UserData = "Workbench High-Frequency";
no_smoothing_gadgetp = radio_button__new ("NO", 73, 5);
no_smoothing_gadgetp->UserData = "Workbench Smoothing-No";
if (SmoothingSegments != INVALID_SMOOTHING &&
SmoothingSegments != NO_SMOOTHING)
{
sprintf (smoothing_string, "%ld", SmoothingSegments);
}
else
{
smoothing_string[0] = '\0';
}
smoothing_gadgetp = string_gadget__new ("Smooth:", smoothing_string,
12, 17, 50, 5);
smoothing_gadgetp->UserData = "Workbench Smoothing";
sq_smoothing_gadgetp = radio_button__new ("Sq", 69, 5);
sq_smoothing_gadgetp->UserData = "workbench Smoothing-Squared";
/* Seventh Row */
plot_gadgetp = radio_button__new ("Plot", 0, 6);
plot_gadgetp->UserData = "Workbench Plot";
combine_plots_gadgetp = radio_button__new ("&", 6, 6);
combine_plots_gadgetp->UserData = "Workbench Plot-Combine";
cut_plots_gadgetp = action_button__new ("X", 9, 6);
cut_plots_gadgetp->UserData = "Workbench Plot-Cut";
if (is_temp_file (WriteName))
{
write_file_gadgetp = string_gadget__new ("Spectrm File:",
NullString, MAX_PATH,
42, 12, 6);
}
else
{
write_file_gadgetp = string_gadget__new ("Spectrm File:",
WriteName, MAX_PATH,
42, 12, 6);
}
write_file_gadgetp->UserData = "Workbench Spectrum-File";
spectrum_select_gadgetp = action_button__new ("S", 56, 6);
spectrum_select_gadgetp->UserData =
"Workbench Spectrum-File-Select";
append_gadgetp = radio_button__new ("Open", 59, 6);
append_gadgetp->UserData = "Workbench Spectrum-File-Open";
cancel_write_gadgetp = action_button__new ("Can", 65, 6);
cancel_write_gadgetp->UserData = "Workbench Spectrum-File-Cancel";
def_write_gadgetp = action_button__new ("*.fft", 70, 6);
def_write_gadgetp->UserData = "Workbench *.fft";
/* Eighth Row */
CLI_gadgetp = action_button__new ("CLI", 0, 7);
CLI_gadgetp->UserData = "Workbench CLI";
pink_gadgetp = radio_button__new ("Pink", 6, 7);
pink_gadgetp->UserData = "Workbench Pink";
amplitude_gadgetp = radio_button__new ("Ampl", 13, 7);
amplitude_gadgetp->UserData = "Workbench Amplitude";
power_gadgetp = radio_button__new ("Power", 19, 7);
power_gadgetp->UserData = "Workbench Power";
mean_gadgetp = radio_button__new ("Mean", 27, 7);
mean_gadgetp->UserData = "Workbench Mean";
db_gadgetp = radio_button__new ("dB", 34, 7);
db_gadgetp->UserData = "Workbench dB";
log_x_gadgetp = radio_button__new ("LogX", 39, 7);
log_x_gadgetp->UserData = "Workbench Logx";
log_y_gadgetp = radio_button__new ("LogY", 46, 7);
log_y_gadgetp->UserData = "Workbench Logy";
#ifndef ONLY_OK_TALL
re_plot_gadgetp = tall_action_button__new ("RePlot", 53, 7);
#else
re_plot_gadgetp = action_button__new ("RePlot", 53, 7);
#endif
re_plot_gadgetp->UserData = "Workbench RePlot";
#ifndef ONLY_OK_TALL
re_output_gadgetp = tall_action_button__new ("ReOutput", 62, 7);
#else
re_output_gadgetp = action_button__new ("ReOutput", 62, 7);
#endif
re_output_gadgetp->UserData = "Workbench ReOutput";
ok_gadgetp = tall_action_button__new ("OK", 73, 7);
ok_gadgetp->UserData = "Workbench OK";
/* Ninth Row */
/* IMPORTANT! LAST GADGET MUST APPEAR IN WINDOW INITIALIZATION */
message_gadgetp = message_gadget__new (75, 0, 8);
message_gadgetp->UserData = "Workbench Message";
/*
* Now, create the Window
*/
dialog_window_p = window__new (Dialog_Window_Title);
}
CommandMode = WORKBENCH_MODE;
/*
* Set up gadgets with current info
*/
if (Overlap) radio_button__in (overlap_gadgetp, dialog_window_p);
if (OneShotOnly) radio_button__in (one_shot_gadgetp, dialog_window_p);
if (RepeatOnly) radio_button__in (repeat_only_gadgetp, dialog_window_p);
if (SquaredSmoothing) radio_button__in (sq_smoothing_gadgetp,
dialog_window_p);
if (Plot != NO_PLOT) radio_button__in (plot_gadgetp, dialog_window_p);
if (CombinePlots) radio_button__in (combine_plots_gadgetp,
dialog_window_p);
if (Pink) radio_button__in (pink_gadgetp, dialog_window_p);
if (Mean) radio_button__in (mean_gadgetp, dialog_window_p);
if (Db) radio_button__in (db_gadgetp, dialog_window_p);
if (LogX) radio_button__in (log_x_gadgetp, dialog_window_p);
if (LogY) radio_button__in (log_y_gadgetp, dialog_window_p);
if (NumberBins == MAX_BINS) radio_button__in (bins_max_gadgetp,
dialog_window_p);
amplitude__set ();
if (SmoothingSegments == NO_SMOOTHING)
{
radio_button__in (no_smoothing_gadgetp, dialog_window_p);
}
window_buttons__set ();
octave_buttons__set ();
/* I've been driven to this by lack of support */
workbench_nag_requester ();
if (Tooltype_Errors && !Tooltype_Errors_Reported)
{
error_message (TOOLTYPE_ERROR);
Tooltype_Errors_Reported = TRUE;
}
if (ReadName && strlen(ReadName))
{
read_parameters__set ();
message__set (SELECT_PARAMETERS);
}
else
{
message__set (SELECT_READ_FILE);
}
/* Handle events */
while (TRUE)
{
chkabort ();
Wait (1 << dialog_window_p->UserPort->mp_SigBit);
while (message = (struct IntuiMessage *) GetMsg
(dialog_window_p->UserPort))
{
class = message->Class;
address = message->IAddress;
qualifier = message->Qualifier;
code = message->Code;
ReplyMsg ((struct Message *) message);
/*
* IDCMP_CLOSEWINDOW doesn't have an IAddress
* so must be handled here.
*/
if (class == IDCMP_CLOSEWINDOW) goto closewindow;
/*
* Finish unfinished string
*/
if (string_gadget_being_set &&
string_gadget_being_set != address && !
(string_gadget_being_set == read_file_gadgetp &&
(address == (APTR) select_read_gadgetp) ||
(address == (APTR) con_read_gadgetp)))
{
next_address = address;
next_class = class;
next_qualifier = qualifier;
next_code = code;
address = string_gadget_being_set;
class = IDCMP_GADGETUP;
qualifier = NULL;
code = NULL;
}
string_gadget_being_set = NULL;
while (address)
{
CATCH_ERROR;
/*
* Here begins massive compound if statement
*/
if (class == IDCMP_RAWKEY)
{
/* Test for HELP key on keyboard...
* At present, I'm not happy with the way this works.
* If a string gadget is activated, there is no response.
* So, I'm leaving it as undocumented, maybe it will
* help someone anyway. Meanwhile there is a help
* button which does the same thing.
*/
if (code == RAW_HELP_KEY)
{
workbench_help_requester ();
}
} /* end if class == IDCMP_RAWKEY */
else if (qualifier & IEQUALIFIER_CONTROL)
{
/*
* CTRL and any gadget select gives help on that gadget
*/
do_help ((struct Gadget *) address);
}
/*
* Check for string GADGETDOWN
*/
else if (class == IDCMP_GADGETDOWN &&
((struct Gadget *) address)->GadgetType &
GTYP_STRGADGET)
{
string_gadget_being_set = address;
}
else if (address == (APTR) help_gadgetp)
{
workbench_help_requester ();
}
else if (address == (APTR) ok_gadgetp)
{
ULONG check_frames = FileFrames;
message__set (PERFORMING_FFT);
CATCH_ERROR
{
#ifdef NO_PROGRESS
ok (NullString);
loop_time_message_done (LoopTimeElapsed);
#else
if (!progress_rp)
progress_rp = progress_requester__new
(Attempting_to_Perform_FFT_S, 50);
progress_requester__apply (progress_rp,
ok,
NullString,
dialog_window_p);
loop_time_message_done (LoopTimeElapsed);
#endif
}
ON_ERROR
{
message__set (REMEMBER_MESSAGE);
}
END_CATCH_ERROR;
if (check_frames != FileFrames)
{ /* A file scan has occurred */
bins_gadget__update (FALSE);
}
}
else if (address == (APTR) CLI_gadgetp)
{
next_action = INTERACTIVE_MODE;
goto closewindow;
}
else if (address == (APTR) copyright_gadgetp)
{
copyright_requester ();
}
else if (address == (APTR) cal_gadgetp)
{
calibration_requester ();
}
else if (address == (APTR) time3d_gadgetp)
{
time3d_requester ();
bins_gadget__update (FALSE);
}
else if (address == (APTR) rectangle_gadgetp)
{
set_rectangle (NullString);
window_buttons__set ();
}
else if (address == (APTR) triangle_gadgetp)
{
set_triangle (NullString);
window_buttons__set ();
}
else if (address == (APTR) parzen_gadgetp)
{
set_parzen (NullString);
window_buttons__set ();
}
else if (address == (APTR) welch_gadgetp)
{
set_welch (NullString);
window_buttons__set ();
}
else if (address == (APTR) hann_gadgetp)
{
set_hann (NullString);
window_buttons__set ();
}
else if (address == (APTR) hamming_gadgetp)
{
set_hamming (NullString);
window_buttons__set ();
}
else if (address == (APTR) b_h_74db_gadgetp)
{
set_blackman_harris_74db (NullString);
window_buttons__set ();
}
else if (address == (APTR) b_h_92db_gadgetp)
{
set_blackman_harris_92db (NullString);
window_buttons__set ();
}
else if (address == (APTR) one_shot_gadgetp)
{
if (one_shot_gadgetp->Flags & SELECTED)
{
set_no_one_shot_only (NullString);
radio_button__out (one_shot_gadgetp,
dialog_window_p);
}
else
{
set_one_shot_only (NullString);
radio_button__in (one_shot_gadgetp,
dialog_window_p);
radio_button__out (repeat_only_gadgetp,
dialog_window_p);
}
bins_gadget__update (FALSE);
}
else if (address == (APTR) repeat_only_gadgetp)
{
if (repeat_only_gadgetp->Flags & SELECTED)
{
set_no_repeat_only (NullString);
radio_button__out (repeat_only_gadgetp,
dialog_window_p);
}
else
{
set_repeat_only (NullString);
radio_button__in (repeat_only_gadgetp,
dialog_window_p);
radio_button__out (one_shot_gadgetp,
dialog_window_p);
}
bins_gadget__update (FALSE);
}
/* else if (address == (APTR) pad_gadgetp) */
/* { */
/* radio_button__toggle (pad_gadgetp, set_pad, */
/* set_no_pad, */
/* dialog_window_p); */
/* bins_gadget__update (FALSE); */
/* } */
else if (address == (APTR) channel_gadgetp)
{
char *buffer = string_gadget__apply
(channel_gadgetp, set_channel);
if (!strlen (buffer))
{
sprintf (buffer, "%d", Channel);
refresh_gadget (channel_gadgetp,
dialog_window_p);
}
}
else if (address == (APTR) rate_gadgetp)
{
char *buffer = string_gadget__apply
(rate_gadgetp, set_rate);
if (!strlen (buffer))
{
rate_gadget__update ();
}
high_f_gadget__update ();
message__set (SELECT_PARAMETERS);
}
else if (address == (APTR) bins_max_gadgetp)
{
set_bins (NullString);
radio_button__in (bins_max_gadgetp,
dialog_window_p);
bins_gadget__update (TRUE); /* Force */
}
else if (address == (APTR) bins_gadgetp)
{
char *buffer = string_gadget__apply
(bins_gadgetp, set_bins);
if (strlen (buffer))
{
radio_button__out (bins_max_gadgetp,
dialog_window_p);
}
else
{
radio_button__in (bins_max_gadgetp,
dialog_window_p);
}
bins_gadget__update (TRUE); /* Force */
}
else if (address == (APTR) no_smoothing_gadgetp)
{
struct StringInfo *string_infop =
smoothing_gadgetp->SpecialInfo;
char *buffer = string_infop->Buffer;
buffer[0] = '\0';
refresh_gadget (smoothing_gadgetp,
dialog_window_p);
radio_button__in (no_smoothing_gadgetp,
dialog_window_p);
set_smoothing_segments (NullString);
}
else if (address == (APTR) smoothing_gadgetp)
{
char *buffer = string_gadget__apply
(smoothing_gadgetp, set_smoothing_segments);
if (strlen (buffer))
{
radio_button__out (no_smoothing_gadgetp,
dialog_window_p);
}
else
{
radio_button__in (no_smoothing_gadgetp,
dialog_window_p);
}
}
else if (address == (APTR) sq_smoothing_gadgetp)
{
radio_button__toggle (sq_smoothing_gadgetp,
set_squared_smoothing,
set_no_squared_smoothing,
dialog_window_p);
}
else if (address == (APTR) octave_low_gadgetp)
{
Octave = 1;
octave_buttons__set ();
bins_gadget__update (FALSE);
}
else if (address == (APTR) octave_2_gadgetp)
{
Octave = 2;
octave_buttons__set ();
bins_gadget__update (FALSE);
}
else if (address == (APTR) octave_3_gadgetp)
{
Octave = 3;
octave_buttons__set ();
bins_gadget__update (FALSE);
}
else if (address == (APTR) octave_4_gadgetp)
{
Octave = 4;
octave_buttons__set ();
bins_gadget__update (FALSE);
}
else if (address == (APTR) octave_5_gadgetp)
{
Octave = 5;
octave_buttons__set ();
bins_gadget__update (FALSE);
}
else if (address == (APTR) octave_6_gadgetp)
{
Octave = 6;
octave_buttons__set ();
bins_gadget__update (FALSE);
}
else if (address == (APTR) octave_7_gadgetp)
{
Octave = 7;
octave_buttons__set ();
bins_gadget__update (FALSE);
}
else if (address == (APTR) octave_hi_gadgetp)
{
Octave = 0;
octave_buttons__set ();
bins_gadget__update (FALSE);
}
else if (address == (APTR) next_gadgetp)
{
next_action = NEXT_FILE;
goto closewindow;
}
else if (address == (APTR) select_read_gadgetp)
{
char *read_file = file_requestor
("Select Sample File");
if (read_file)
{
string_gadget__reset (read_file_gadgetp, read_file,
dialog_window_p);
name_string_gadget__apply (read_file_gadgetp,
set_read);
read_parameters__set ();
}
else
{
message__set (SELECT_READ_FILE);
}
gfree (read_file);
}
else if (address == (APTR) con_read_gadgetp)
{
set_read ("con:");
string_gadget__reset (read_file_gadgetp, "con:",
dialog_window_p);
read_parameters__set ();
}
else if (address == (APTR) read_file_gadgetp)
{
CATCH_ERROR
{
name_string_gadget__apply (read_file_gadgetp,
set_read);
read_parameters__set ();
}
ON_ERROR
{
message__set (SELECT_READ_FILE);
}
END_CATCH_ERROR;
}
else if (address == (APTR) low_f_gadgetp)
{
char *buffer = string_gadget__apply
(low_f_gadgetp, set_low_frequency);
if (!strlen (buffer))
{
low_f_gadget__update ();
}
}
else if (address == (APTR) high_f_gadgetp)
{
char *buffer = string_gadget__apply
(high_f_gadgetp, set_high_frequency);
if (!strlen (buffer))
{
high_f_gadget__update ();
}
}
else if (address == (APTR) write_file_gadgetp)
{
if (wb_append_on)
{
name_string_gadget__apply (write_file_gadgetp,
set_append);
}
else
{
name_string_gadget__apply (write_file_gadgetp,
set_write);
}
}
else if (address == (APTR) spectrum_select_gadgetp)
{
char *spectrum_file = file_requestor
("Select Spectrum File");
if (spectrum_file)
{
/* default now to append mode; usually helps */
radio_button__in (append_gadgetp, dialog_window_p);
wb_set_append (NullString);
string_gadget__reset (write_file_gadgetp,
spectrum_file,
dialog_window_p);
if (wb_append_on)
{
name_string_gadget__apply (write_file_gadgetp,
set_append);
}
else
{
name_string_gadget__apply (write_file_gadgetp,
set_write);
}
}
}
else if (address == (APTR) append_gadgetp)
{
radio_button__toggle (append_gadgetp,
wb_set_append, wb_no_set_append,
dialog_window_p);
}
else if (address == (APTR) cancel_write_gadgetp)
{
string_gadget__reset (write_file_gadgetp,
NullString, dialog_window_p);
if (wb_append_on)
{
set_append (NullString);
}
else
{
set_write (NullString);
}
}
else if (address == (APTR) def_write_gadgetp)
{
struct StringInfo *string_infop =
write_file_gadgetp->SpecialInfo;
char *buffer = string_infop->Buffer;
if (ReadName)
{
strcpy (buffer, ReadName);
strcat (buffer, ".fft");
}
else
{
strcpy (buffer, ".fft");
}
string_infop->NumChars = strlen (buffer);
if (wb_append_on)
{
name_string_gadget__apply (write_file_gadgetp,
set_append);
}
else
{
name_string_gadget__apply (write_file_gadgetp,
set_write);
}
refresh_gadget (write_file_gadgetp,
dialog_window_p);
}
else if (address == (APTR) amplitude_gadgetp)
{
set_amplitude (NullString);
amplitude__set ();
}
else if (address == (APTR) power_gadgetp)
{
set_power (NullString);
amplitude__set ();
}
else if (address == (APTR) overlap_gadgetp)
{
radio_button__toggle (overlap_gadgetp,
set_overlap, set_no_overlap,
dialog_window_p);
}
else if (address == (APTR) db_gadgetp)
{
radio_button__toggle (db_gadgetp,
set_db, set_no_db,
dialog_window_p);
}
else if (address == (APTR) pink_gadgetp)
{
radio_button__toggle (pink_gadgetp, set_pink,
set_no_pink,
dialog_window_p);
}
else if (address == (APTR) mean_gadgetp)
{
radio_button__toggle (mean_gadgetp, set_mean,
set_sum,
dialog_window_p);
}
else if (address == (APTR) plot_gadgetp)
{
radio_button__toggle (plot_gadgetp, set_plot,
set_no_plot,
dialog_window_p);
last_plot = Plot;
}
else if (address == (APTR) combine_plots_gadgetp)
{
radio_button__toggle (combine_plots_gadgetp,
set_combine_plots,
set_no_combine_plots,
dialog_window_p);
}
else if (address == (APTR) cut_plots_gadgetp)
{
cut_combined_plot (NullString);
}
else if (address == (APTR) re_output_gadgetp)
{
extern double Ending_Progress; /* from ok_spectrum() */
if (!reout_progress_rp)
reout_progress_rp = progress_requester__new
("Rewriting spectrum file...", 50);
Ending_Progress = 99.0;
progress_requester__apply (reout_progress_rp,
re_output,
NullString,
dialog_window_p);
}
else if (address == (APTR) re_plot_gadgetp)
{
re_plot (NullString);
}
else if (address == (APTR) log_x_gadgetp)
{
radio_button__toggle (log_x_gadgetp, set_logx,
set_no_logx,
dialog_window_p);
}
else if (address == (APTR) log_y_gadgetp)
{
radio_button__toggle (log_y_gadgetp, set_logy,
set_no_logy,
dialog_window_p);
} /* end massive compound if*/
END_CATCH_ERROR;
last_address = address;
address = next_address;
class = next_class;
qualifier = next_qualifier;
code = next_code;
next_address = NULL;
next_class = NULL;
next_qualifier = NULL;
next_code = NULL;
} /* end while (address) */
} /* end while (message...) */
} /* end while (TRUE) */
closewindow:
CloseWindow (dialog_window_p);
dialog_window_p = NULL;
if (class == IDCMP_CLOSEWINDOW)
{
quit (NullString); /* it all ends here, no matter where started */
}
CommandMode = last_command_mode;
Plot = last_plot; /* reset previous default, unless changed */
return next_action;
}
static void amplitude__set (void)
{
if (Amplitude)
{
radio_button__in (amplitude_gadgetp, dialog_window_p);
radio_button__out (power_gadgetp, dialog_window_p);
}
else
{
radio_button__in (power_gadgetp, dialog_window_p);
radio_button__out (amplitude_gadgetp, dialog_window_p);
}
}
static void window_buttons__set ()
{
switch (WindowType)
{
case RECTANGLE_WINDOW:
radio_button__in (rectangle_gadgetp, dialog_window_p);
radio_button__out (triangle_gadgetp, dialog_window_p);
radio_button__out (parzen_gadgetp, dialog_window_p);
radio_button__out (welch_gadgetp, dialog_window_p);
radio_button__out (hann_gadgetp, dialog_window_p);
radio_button__out (hamming_gadgetp, dialog_window_p);
radio_button__out (b_h_74db_gadgetp, dialog_window_p);
radio_button__out (b_h_92db_gadgetp, dialog_window_p);
break;
case TRIANGLE_WINDOW:
radio_button__out (rectangle_gadgetp, dialog_window_p);
radio_button__in (triangle_gadgetp, dialog_window_p);
radio_button__out (parzen_gadgetp, dialog_window_p);
radio_button__out (welch_gadgetp, dialog_window_p);
radio_button__out (hann_gadgetp, dialog_window_p);
radio_button__out (hamming_gadgetp, dialog_window_p);
radio_button__out (b_h_74db_gadgetp, dialog_window_p);
radio_button__out (b_h_92db_gadgetp, dialog_window_p);
break;
case PARZEN_WINDOW:
radio_button__out (rectangle_gadgetp, dialog_window_p);
radio_button__out (triangle_gadgetp, dialog_window_p);
radio_button__in (parzen_gadgetp, dialog_window_p);
radio_button__out (welch_gadgetp, dialog_window_p);
radio_button__out (hann_gadgetp, dialog_window_p);
radio_button__out (hamming_gadgetp, dialog_window_p);
radio_button__out (b_h_74db_gadgetp, dialog_window_p);
radio_button__out (b_h_92db_gadgetp, dialog_window_p);
break;
case WELCH_WINDOW:
radio_button__out (rectangle_gadgetp, dialog_window_p);
radio_button__out (triangle_gadgetp, dialog_window_p);
radio_button__out (parzen_gadgetp, dialog_window_p);
radio_button__in (welch_gadgetp, dialog_window_p);
radio_button__out (hann_gadgetp, dialog_window_p);
radio_button__out (hamming_gadgetp, dialog_window_p);
radio_button__out (b_h_74db_gadgetp, dialog_window_p);
radio_button__out (b_h_92db_gadgetp, dialog_window_p);
break;
case HANN_WINDOW:
radio_button__out (rectangle_gadgetp, dialog_window_p);
radio_button__out (triangle_gadgetp, dialog_window_p);
radio_button__out (parzen_gadgetp, dialog_window_p);
radio_button__out (welch_gadgetp, dialog_window_p);
radio_button__in (hann_gadgetp, dialog_window_p);
radio_button__out (hamming_gadgetp, dialog_window_p);
radio_button__out (b_h_74db_gadgetp, dialog_window_p);
radio_button__out (b_h_92db_gadgetp, dialog_window_p);
break;
case HAMMING_WINDOW:
radio_button__out (rectangle_gadgetp, dialog_window_p);
radio_button__out (triangle_gadgetp, dialog_window_p);
radio_button__out (parzen_gadgetp, dialog_window_p);
radio_button__out (welch_gadgetp, dialog_window_p);
radio_button__out (hann_gadgetp, dialog_window_p);
radio_button__in (hamming_gadgetp, dialog_window_p);
radio_button__out (b_h_74db_gadgetp, dialog_window_p);
radio_button__out (b_h_92db_gadgetp, dialog_window_p);
break;
case BLACKMAN_HARRIS_74DB_WINDOW:
radio_button__out (rectangle_gadgetp, dialog_window_p);
radio_button__out (triangle_gadgetp, dialog_window_p);
radio_button__out (parzen_gadgetp, dialog_window_p);
radio_button__out (welch_gadgetp, dialog_window_p);
radio_button__out (hann_gadgetp, dialog_window_p);
radio_button__out (hamming_gadgetp, dialog_window_p);
radio_button__in (b_h_74db_gadgetp, dialog_window_p);
radio_button__out (b_h_92db_gadgetp, dialog_window_p);
break;
case BLACKMAN_HARRIS_92DB_WINDOW:
radio_button__out (rectangle_gadgetp, dialog_window_p);
radio_button__out (triangle_gadgetp, dialog_window_p);
radio_button__out (parzen_gadgetp, dialog_window_p);
radio_button__out (welch_gadgetp, dialog_window_p);
radio_button__out (hann_gadgetp, dialog_window_p);
radio_button__out (hamming_gadgetp, dialog_window_p);
radio_button__out (b_h_74db_gadgetp, dialog_window_p);
radio_button__in (b_h_92db_gadgetp, dialog_window_p);
break;
}
}
static void fdep_buttons__enable (void)
{
BOOLEAN changed_value = FALSE;
BOOLEAN no_one_shot_frames = TRUE;
BOOLEAN no_repeat_frames = TRUE;
if (!ReadPtr) return;
switch (FileOctaves)
{
case 7:
gadget__enable (octave_7_gadgetp, dialog_window_p);
case 6:
gadget__enable (octave_6_gadgetp, dialog_window_p);
case 5:
gadget__enable (octave_5_gadgetp, dialog_window_p);
case 4:
gadget__enable (octave_4_gadgetp, dialog_window_p);
case 3:
gadget__enable (octave_3_gadgetp, dialog_window_p);
case 2:
gadget__enable (octave_2_gadgetp, dialog_window_p);
}
switch (FileOctaves)
{
case 1:
gadget__disable (octave_2_gadgetp, dialog_window_p);
case 2:
gadget__disable (octave_3_gadgetp, dialog_window_p);
case 3:
gadget__disable (octave_4_gadgetp, dialog_window_p);
case 4:
gadget__disable (octave_5_gadgetp, dialog_window_p);
case 5:
gadget__disable (octave_6_gadgetp, dialog_window_p);
case 6:
gadget__disable (octave_7_gadgetp, dialog_window_p);
}
if (FileChannels > 1)
{
gadget__enable (channel_gadgetp, dialog_window_p);
}
else
{
if (Channel > 1)
{
set_channel (NullString);
string_gadget__reset (channel_gadgetp, "1", dialog_window_p);
changed_value = TRUE;
}
gadget__disable (channel_gadgetp, dialog_window_p);
}
if (FileFormat == ID_8SVX)
{
if (FileOneShotHiFrames)
{
gadget__enable (one_shot_gadgetp, dialog_window_p);
no_one_shot_frames = FALSE;
}
if (FileRepeatHiFrames)
{
gadget__enable (repeat_only_gadgetp, dialog_window_p);
no_repeat_frames = FALSE;
}
}
if (no_one_shot_frames)
{
if (OneShotOnly)
{
set_no_one_shot_only (NullString);
radio_button__out (one_shot_gadgetp, dialog_window_p);
changed_value = TRUE;
}
gadget__disable (one_shot_gadgetp, dialog_window_p);
}
if (no_repeat_frames)
{
if (RepeatOnly)
{
set_no_repeat_only (NullString);
radio_button__out (repeat_only_gadgetp, dialog_window_p);
changed_value = TRUE;
}
gadget__disable (repeat_only_gadgetp, dialog_window_p);
}
if (changed_value)
{
error_message (CHANGED_FORMAT_DEP_VALUE);
}
}
static void octave_buttons__set (void)
{
switch (Octave)
{
case 0:
radio_button__in (octave_hi_gadgetp, dialog_window_p);
radio_button__out (octave_low_gadgetp, dialog_window_p);
radio_button__out (octave_2_gadgetp, dialog_window_p);
radio_button__out (octave_3_gadgetp, dialog_window_p);
radio_button__out (octave_4_gadgetp, dialog_window_p);
radio_button__out (octave_5_gadgetp, dialog_window_p);
radio_button__out (octave_6_gadgetp, dialog_window_p);
radio_button__out (octave_7_gadgetp, dialog_window_p);
break;
case 1:
radio_button__out (octave_hi_gadgetp, dialog_window_p);
radio_button__in (octave_low_gadgetp, dialog_window_p);
radio_button__out (octave_2_gadgetp, dialog_window_p);
radio_button__out (octave_3_gadgetp, dialog_window_p);
radio_button__out (octave_4_gadgetp, dialog_window_p);
radio_button__out (octave_5_gadgetp, dialog_window_p);
radio_button__out (octave_6_gadgetp, dialog_window_p);
radio_button__out (octave_7_gadgetp, dialog_window_p);
break;
case 2:
radio_button__out (octave_hi_gadgetp, dialog_window_p);
radio_button__out (octave_low_gadgetp, dialog_window_p);
radio_button__in (octave_2_gadgetp, dialog_window_p);
radio_button__out (octave_3_gadgetp, dialog_window_p);
radio_button__out (octave_4_gadgetp, dialog_window_p);
radio_button__out (octave_5_gadgetp, dialog_window_p);
radio_button__out (octave_6_gadgetp, dialog_window_p);
radio_button__out (octave_7_gadgetp, dialog_window_p);
break;
case 3:
radio_button__out (octave_hi_gadgetp, dialog_window_p);
radio_button__out (octave_low_gadgetp, dialog_window_p);
radio_button__out (octave_2_gadgetp, dialog_window_p);
radio_button__in (octave_3_gadgetp, dialog_window_p);
radio_button__out (octave_4_gadgetp, dialog_window_p);
radio_button__out (octave_5_gadgetp, dialog_window_p);
radio_button__out (octave_6_gadgetp, dialog_window_p);
radio_button__out (octave_7_gadgetp, dialog_window_p);
break;
case 4:
radio_button__out (octave_hi_gadgetp, dialog_window_p);
radio_button__out (octave_low_gadgetp, dialog_window_p);
radio_button__out (octave_2_gadgetp, dialog_window_p);
radio_button__out (octave_3_gadgetp, dialog_window_p);
radio_button__in (octave_4_gadgetp, dialog_window_p);
radio_button__out (octave_5_gadgetp, dialog_window_p);
radio_button__out (octave_6_gadgetp, dialog_window_p);
radio_button__out (octave_7_gadgetp, dialog_window_p);
break;
case 5:
radio_button__out (octave_hi_gadgetp, dialog_window_p);
radio_button__out (octave_low_gadgetp, dialog_window_p);
radio_button__out (octave_2_gadgetp, dialog_window_p);
radio_button__out (octave_3_gadgetp, dialog_window_p);
radio_button__out (octave_4_gadgetp, dialog_window_p);
radio_button__in (octave_5_gadgetp, dialog_window_p);
radio_button__out (octave_6_gadgetp, dialog_window_p);
radio_button__out (octave_7_gadgetp, dialog_window_p);
break;
case 6:
radio_button__out (octave_hi_gadgetp, dialog_window_p);
radio_button__out (octave_low_gadgetp, dialog_window_p);
radio_button__out (octave_2_gadgetp, dialog_window_p);
radio_button__out (octave_3_gadgetp, dialog_window_p);
radio_button__out (octave_4_gadgetp, dialog_window_p);
radio_button__out (octave_5_gadgetp, dialog_window_p);
radio_button__in (octave_6_gadgetp, dialog_window_p);
radio_button__out (octave_7_gadgetp, dialog_window_p);
break;
case 7:
radio_button__out (octave_hi_gadgetp, dialog_window_p);
radio_button__out (octave_low_gadgetp, dialog_window_p);
radio_button__out (octave_2_gadgetp, dialog_window_p);
radio_button__out (octave_3_gadgetp, dialog_window_p);
radio_button__out (octave_4_gadgetp, dialog_window_p);
radio_button__out (octave_5_gadgetp, dialog_window_p);
radio_button__out (octave_6_gadgetp, dialog_window_p);
radio_button__in (octave_7_gadgetp, dialog_window_p);
break;
}
}
static void read_parameters__set (void)
{
if (!ReadName || ReadName == NullString) return;
fdep_buttons__enable ();
rate_gadget__update ();
bins_gadget__update (FALSE);
/* low_f_gadget__update (); now included in bins_gadget__update... */
high_f_gadget__update ();
if (FileFormat != UNFORMATTED)
{
message__set (SELECT_PARAMETERS);
}
else if (Rate == AUTO_RATE)
{
message__set (SET_RATE);
}
else
{
message__set (VERIFY_RATE);
}
}
static void rate_gadget__update (void)
{
double rate;
struct StringInfo *string_infop =
rate_gadgetp->SpecialInfo;
char *buffer = string_infop->Buffer;
rate = (Rate == AUTO_RATE) ? FileRate : Rate;
if (rate != AUTO_RATE)
{
sprintf (buffer,"%g",rate);
}
else
{
buffer[0] = '\0';
}
refresh_gadget (rate_gadgetp, dialog_window_p);
}
static void high_f_gadget__update (void)
{
double rate;
struct StringInfo *string_infop =
high_f_gadgetp->SpecialInfo;
char *buffer = string_infop->Buffer;
if (HighFrequency == DBL_MAX)
{
rate = (Rate == AUTO_RATE) ? FileRate : Rate;
if (rate != AUTO_RATE)
{
sprintf (buffer, "%g", rate / (2 * Interleave));
refresh_gadget (high_f_gadgetp, dialog_window_p);
}
}
}
static void low_f_gadget__update (void)
{
double rate;
struct StringInfo *string_infop =
low_f_gadgetp->SpecialInfo;
char *buffer = string_infop->Buffer;
BOOLEAN reset = FALSE;
if (LowFrequency == LOWEST_FREQUENCY)
{
rate = (Rate == AUTO_RATE) ? FileRate : Rate;
if (rate != AUTO_RATE)
{
/*
* Ahah, a beautiful divide by zero handling
* if TRAP_TEST defined, just enter 0 into Bins gadget
* Unfortunately, ffp math forces a trap on divide by zero, and
* this cannot be intercepted without writing assembly code. Damn.
*/
/* #define TRAP_TEST */
#ifdef TRAP_TEST
if (bins_used != DONT_KNOW) /* May divide by 0 */
#else
if (bins_used != DONT_KNOW && bins_used > 0) /* Safe */
#endif
{
double low_f = rate / (2.0 * bins_used * Interleave);
sprintf (buffer, "%g", low_f);
reset = TRUE;
}
}
if (!reset)
{
buffer[0] = '\0';
}
refresh_gadget (low_f_gadgetp, dialog_window_p);
}
}
static void bins_gadget__update (BOOLEAN force_update)
{
struct StringInfo *string_infop;
char *buffer;
if (NumberBins == MAX_BINS || force_update)
{
string_infop = bins_gadgetp->SpecialInfo;
buffer = string_infop->Buffer;
bins_string__set (buffer);
refresh_gadget (bins_gadgetp, dialog_window_p);
}
low_f_gadget__update ();
}
static void bins_string__set (char *buffer)
{
BOOLEAN done = FALSE;
if (NumberBins != MAX_BINS)
{
bins_used = NumberBins;
sprintf (buffer, "%ld", NumberBins);
done = TRUE;
}
else if (ReadPtr != NULL && ReadPtr != stdin)
{
BOOLEAN save_quiet = Quiet;
Quiet = TRUE;
bins_used = DONT_KNOW;
CATCH_ERROR;
bins_used = do_ok (FALSE);
sprintf (buffer, "%ld", bins_used);
done = TRUE;
END_CATCH_ERROR;
Quiet = save_quiet;
}
if (!done) buffer[0] = '\0';
}
static void message__set (int message_number)
{
static int remember_message = SELECT_PARAMETERS;
switch (message_number)
{
case SELECT_READ_FILE:
message_gadget__write (message_gadgetp,
Please_Select_Read_File_S,
dialog_window_p);
ActivateGadget (read_file_gadgetp, dialog_window_p, NULL);
remember_message = SELECT_READ_FILE;
#ifdef DISABLE_OK_WHEN_NOT_READY
gadget__disable (ok_gadgetp, dialog_window_p);
#endif
break;
case SELECT_PARAMETERS:
#ifdef DISABLE_OK_WHEN_NOT_READY
gadget__enable (ok_gadgetp, dialog_window_p);
#endif
message_gadget__write (message_gadgetp,
Set_Parameters_Then_Ok_S,
dialog_window_p);
remember_message = SELECT_PARAMETERS;
break;
case PERFORMING_FFT:
message_gadget__write (message_gadgetp,
Attempting_to_Perform_FFT_S,
dialog_window_p);
break;
case SET_RATE:
message_gadget__write (message_gadgetp,
Set_Sampling_Rate_S,
dialog_window_p);
remember_message = SET_RATE;
ActivateGadget (rate_gadgetp, dialog_window_p, NULL);
#ifdef DISABLE_OK_WHEN_NOT_READY
gadget__disable (ok_gadgetp, dialog_window_p);
#endif
break;
case VERIFY_RATE:
message_gadget__write (message_gadgetp,
Verify_Sampling_Rate_S,
dialog_window_p);
ActivateGadget (rate_gadgetp, dialog_window_p, NULL);
remember_message = VERIFY_RATE;
break;
case REMEMBER_MESSAGE:
message__set (remember_message);
break;
}
}
static void do_help (struct Gadget *gadgetp)
{
if (gadgetp->UserData)
{
help_message ( (char *) gadgetp->UserData);
}
else
{
error_message (HELP_MESSAGE_UNAVAILABLE);
}
}
static char *wb_set_append (char *arguments)
{
wb_append_on = TRUE;
name_string_gadget__apply (write_file_gadgetp, set_append);
return arguments;
}
static char *wb_no_set_append (char *arguments)
{
wb_append_on = FALSE;
if (last_address != (APTR) spectrum_select_gadgetp)
{
string_gadget__reset (write_file_gadgetp, NullString,
dialog_window_p);
}
name_string_gadget__apply (write_file_gadgetp, set_write);
return arguments;
}
/*
* Obsolete Gadgets (not enough room; deemed less important)
*/
#if FALSE
char ileave_string[20];
no_interleave_gadgetp = radio_button__new ("NO", 73, 3);
if (Interleave > 1 && Interleave != INVALID_INTERLEAVE)
{
sprintf (ileave_string, "%ld", Interleave);
}
else
{
ileave_string[0] = '\0';
if (Interleave != INVALID_INTERLEAVE)
{
radio_button__in (no_interleave_gadgetp, dialog_window_p);
}
}
interleave_gadgetp = string_gadget__new ("Interleave:",
ileave_string,
12, 20, 51, 3);
else if (address == (APTR) no_interleave_gadgetp)
{
struct StringInfo *string_infop =
interleave_gadgetp->SpecialInfo;
char *buffer = string_infop->Buffer;
buffer[0] = '\0';
refresh_gadget (interleave_gadgetp,
dialog_window_p);
radio_button__in (no_interleave_gadgetp,
dialog_window_p);
set_no_interleave (NullString);
bins_gadget__update (FALSE);
}
else if (address == (APTR) interleave_gadgetp)
{
CATCH_ERROR
{
string_gadget__apply (interleave_gadgetp,
set_interleave);
}
END_CATCH_ERROR;
radio_button__out (no_interleave_gadgetp,
dialog_window_p);
bins_gadget__update (FALSE);
}
#endif /* obsolete section */
#endif /* ifdef AMIGA */