home *** CD-ROM | disk | FTP | other *** search
- /***************************************************************************
- * 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 */
-
-