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: wbtime3d.c
- * Purpose: requester to set Time-3D parameters
- * Author: Charles Peterson (CPP)
- * History: 18-March-1994 CPP; Created.
- * 9-August-94 CPP (1.10); Auto Setup and Hidden 3D buttons
- * 14-Dec-94 CPP (1.17); Fix button gadgets for >4 colors
- * 12-Feb-95 CPP (1.41); Fix bug with loaded values
- * 1-Jan-95 CPP (2.01); Make Hidden default for Auto Setup
- * Comments: Workbench GUI. Amiga Dependent!
- */
-
- #ifdef AMIGA /* This module is AMIGA dependent */
-
- #include <stdio.h> /* sprintf() */
- #include <string.h>
-
- /*
- * 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"
-
- /*
- * External globals
- */
- extern struct Window *dialog_window_p;
-
- static struct Requester *time3d_rp = NULL;
-
- static struct Gadget *help_time3d_gadgetp;
- static struct Gadget *set_up_1_gadgetp;
- static struct Gadget *time_segsize_gadgetp;
- static struct Gadget *time_segments_gadgetp;
- static struct Gadget *time_overlap_gadgetp;
- static struct Gadget *time_offset_gadgetp;
- static struct Gadget *rotx_gadgetp;
- static struct Gadget *rotz_gadgetp;
- static struct Gadget *reset_time3d_gadgetp;
- static struct Gadget *time3d_on_gadgetp;
- static struct Gadget *hidden3d_gadgetp;
- static struct Gadget *end_time3d_gadgetp;
- /* static struct Gadget *time3d_message_gadgetp; */
-
- #define MAX_VAL_SIZE 30
-
- #define SET_TIME3D_ON \
- if (Time3D) radio_button__in (time3d_on_gadgetp, dialog_window_p);
-
- void time3d_requester (void)
- {
- struct IntuiMessage *message;
- APTR *address = NULL;
- ULONG class = 0;
- UWORD qualifier = NULL;
- APTR *next_address = NULL;
- ULONG next_class = 0;
- UWORD next_qualifier = NULL;
- APTR string_gadget_being_set = NULL;
- char string[MAX_VAL_SIZE];
-
- if (!time3d_rp)
- {
- gadget__begin (GTYP_REQGADGET);
- /*
- * Setup Gadgets
- */
- help_time3d_gadgetp = action_button__new ("Help", 0, 0);
-
- set_up_1_gadgetp = action_button__new ("Auto Set-Up 1", 8, 0);
-
- string[0] = '\0';
-
- time_segsize_gadgetp = string_gadget__new ("Time Segment Size:",
- string,
- MAX_VAL_SIZE,
- 39, 0, 1);
-
- time_segments_gadgetp = string_gadget__new ("Time Segment Count:",
- string,
- MAX_VAL_SIZE,
- 39, 0, 2);
-
- time_offset_gadgetp = string_gadget__new ("Time Segment Offset:",
- string,
- MAX_VAL_SIZE,
- 39, 0, 3);
-
- time_overlap_gadgetp = string_gadget__new ("Time Segment Overlap:",
- string,
- MAX_VAL_SIZE,
- 39, 0, 4);
-
- rotx_gadgetp = string_gadget__new ("X Rotation:",
- string,
- MAX_VAL_SIZE,
- 18, 0, 5);
-
- rotz_gadgetp = string_gadget__new ("Z Rotation:",
- string,
- MAX_VAL_SIZE,
- 18, 21, 5);
-
-
- reset_time3d_gadgetp = action_button__new ("Reset", 0, 6);
-
- time3d_on_gadgetp = radio_button__new ("3D-Time On", 8, 6);
-
- hidden3d_gadgetp = radio_button__new ("Hidden3D", 21, 6);
-
- /* time3d_message_gadgetp = message_gadget__new (40, 0, 7); */
-
- end_time3d_gadgetp = tall_action_button__new ("...Done", 32, 6);
-
- time3d_rp = requester__new ();
- time3d_rp->ReqGadget = end_time3d_gadgetp;
- time3d_rp->ReqText = NULL;
-
- } /* Ok, time3d_rp has been created */
-
-
- if (requester__display (time3d_rp, dialog_window_p))
- {
- /*
- * Update everything
- */
- SET_TIME3D_ON;
-
- if (Hidden3D) radio_button__in (hidden3d_gadgetp, dialog_window_p);
-
- string[0] = '\0';
- if (TimeSegSize != NOT_SET)
- {
- sprintf (string, "%ld", TimeSegSize);
- }
- string_gadget__reset (time_segsize_gadgetp, string,
- dialog_window_p);
-
- string[0] = '\0';
- if (TimeSegments != NOT_SET)
- {
- sprintf (string, "%ld", TimeSegments);
- }
- string_gadget__reset (time_segments_gadgetp, string,
- dialog_window_p);
-
- string[0] = '\0';
- if (TimeOffset != NOT_SET)
- {
- sprintf (string, "%ld", TimeOffset);
- }
- string_gadget__reset (time_offset_gadgetp, string,
- dialog_window_p);
-
- string[0] = '\0';
- if (TimeOffset == NOT_SET)
- {
- sprintf (string, "%g", TimeOverlap);
- }
- string_gadget__reset (time_overlap_gadgetp, string,
- dialog_window_p);
-
- sprintf (string, "%g", RotX);
- string_gadget__reset (rotx_gadgetp, string, dialog_window_p);
-
- sprintf (string, "%g", RotZ);
- string_gadget__reset (rotz_gadgetp, string, dialog_window_p);
-
- ActivateGadget (time_segsize_gadgetp,
- dialog_window_p,
- time3d_rp);
- while (TRUE)
- {
- Wait (1 << dialog_window_p->UserPort->mp_SigBit);
- while (message = (struct IntuiMessage *) GetMsg
- (dialog_window_p->UserPort))
- {
- class = message->Class;
- qualifier = message->Qualifier;
- address = message->IAddress;
- ReplyMsg ((struct Message *) message);
- /*
- * Finish unfinished string
- */
-
- if (string_gadget_being_set &&
- string_gadget_being_set != address &&
- address != (APTR) reset_time3d_gadgetp)
- {
- next_address = address;
- next_class = class;
- next_qualifier = qualifier;
- address = string_gadget_being_set;
- class = IDCMP_GADGETUP;
- qualifier = NULL;
- }
- string_gadget_being_set = NULL;
-
- while (address) /* once for previous string, then next */
- {
- CATCH_ERROR
-
- if (qualifier & IEQUALIFIER_CONTROL)
- {
- help_message ("Workbench 3D-Time Help");
- }
- /*
- * 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_time3d_gadgetp)
- {
- help_message ("Workbench 3D-Time Help");
- }
- else if (address == (APTR) end_time3d_gadgetp)
- {
- requester__remove (time3d_rp, dialog_window_p);
- return;
- }
- else if (address == (APTR) time3d_on_gadgetp)
- {
- radio_button__toggle (time3d_on_gadgetp,
- set_time_3d,
- set_no_time_3d,
- dialog_window_p);
- }
- else if (address == (APTR) hidden3d_gadgetp)
- {
- radio_button__toggle (hidden3d_gadgetp,
- set_hidden_3d,
- set_no_hidden_3d,
- dialog_window_p);
- }
- else if (address == (APTR) time_segsize_gadgetp)
- {
- string_gadget__apply
- (time_segsize_gadgetp, set_time_seg_size);
- if (TimeSegments == NOT_SET)
- {
- struct StringInfo *sinfop =
- time_segments_gadgetp->SpecialInfo;
- char *buffer = sinfop->Buffer;
- buffer[0] = '\0';
- refresh_gadget (time_segments_gadgetp,
- dialog_window_p);
- }
- if (!next_address)
- {
- ActivateGadget (time_segments_gadgetp,
- dialog_window_p,
- time3d_rp);
- }
- }
- else if (address == (APTR) time_segments_gadgetp)
- {
- string_gadget__apply (time_segments_gadgetp,
- set_time_segments);
- if (TimeSegSize == NOT_SET)
- {
- struct StringInfo *sinfop =
- time_segsize_gadgetp->SpecialInfo;
- char *buffer = sinfop->Buffer;
- buffer[0] = '\0';
- refresh_gadget (time_segsize_gadgetp,
- dialog_window_p);
- }
- if (!next_address)
- {
- ActivateGadget (time_offset_gadgetp,
- dialog_window_p,
- time3d_rp);
- }
- }
- else if (address == (APTR) time_offset_gadgetp)
- {
- string_gadget__apply (time_offset_gadgetp,
- set_time_offset);
- if (TimeOffset != NOT_SET)
- {
- struct StringInfo *sinfop =
- time_overlap_gadgetp->SpecialInfo;
- char *buffer = sinfop->Buffer;
- buffer[0] = '\0';
- refresh_gadget (time_overlap_gadgetp,
- dialog_window_p);
- }
- if (!next_address)
- {
- ActivateGadget (time_overlap_gadgetp,
- dialog_window_p,
- time3d_rp);
- }
- }
- else if (address == (APTR) time_overlap_gadgetp)
- {
- /*
- * ignore if unchanged from default
- */
- struct StringInfo *sinfo =
- time_overlap_gadgetp->SpecialInfo;
- int pos = sinfo->BufferPos;
- char *buffer = sinfo->Buffer;
-
- if (!((pos == 0 &&
- buffer[0] == '0' &&
- buffer[1] == '.' &&
- buffer[2] == '5' &&
- buffer[3] == '\0') ||
- (TimeOffset != NOT_SET &&
- buffer[0] == '\0')))
- {
- buffer = string_gadget__apply
- (time_overlap_gadgetp, set_time_overlap);
- if (!strlen (buffer))
- {
- sprintf (buffer, "%g", TimeOverlap);
- refresh_gadget (time_overlap_gadgetp,
- dialog_window_p);
- }
- if (TimeOffset == NOT_SET)
- {
- struct StringInfo *sinfop =
- time_offset_gadgetp->SpecialInfo;
- char *buffer = sinfop->Buffer;
- buffer[0] = '\0';
- refresh_gadget (time_offset_gadgetp,
- dialog_window_p);
- }
- }
- if (!next_address)
- {
- ActivateGadget (rotx_gadgetp,
- dialog_window_p,
- time3d_rp);
- }
- }
- else if (address == (APTR) reset_time3d_gadgetp ||
- address == (APTR) set_up_1_gadgetp)
- {
- set_time_offset (NullString);
- set_time_overlap (NullString);
- set_time_segments (NullString);
- set_time_seg_size (NullString);
- set_no_time_3d (NullString);
- set_rotation_x (NullString);
- set_rotation_z (NullString);
- set_hidden_3d (NullString);
-
- string_gadget__reset (time_offset_gadgetp,
- "\0", dialog_window_p);
- string_gadget__reset (time_segments_gadgetp,
- "\0", dialog_window_p);
- string_gadget__reset (time_segsize_gadgetp,
- "\0", dialog_window_p);
-
- sprintf (string, "%g", TimeOverlap);
- string_gadget__reset (time_overlap_gadgetp,
- string, dialog_window_p);
-
- sprintf (string, "%g", RotX);
- string_gadget__reset (rotx_gadgetp,
- string, dialog_window_p);
-
- sprintf (string, "%g", RotZ);
- string_gadget__reset (rotz_gadgetp,
- string, dialog_window_p);
-
- radio_button__out (time3d_on_gadgetp,
- dialog_window_p);
-
- radio_button__in (hidden3d_gadgetp,
- dialog_window_p);
-
- if (address == (APTR) set_up_1_gadgetp)
- {
- string_gadget__reset (time_segments_gadgetp,
- "10", dialog_window_p);
- set_time_segments ("10");
- }
- }
- else if (address == (APTR) rotx_gadgetp)
- {
- char *buffer =
- string_gadget__apply (rotx_gadgetp,
- set_rotation_x);
- if (!strlen (buffer))
- {
- sprintf (string, "%g", RotX);
- string_gadget__reset (rotx_gadgetp,
- string, dialog_window_p);
- }
- if (!next_address)
- {
- ActivateGadget (rotz_gadgetp,
- dialog_window_p,
- time3d_rp);
- }
- }
- else if (address == (APTR) rotz_gadgetp)
- {
- char *buffer =
- string_gadget__apply (rotz_gadgetp,
- set_rotation_z);
- if (!strlen (buffer))
- {
- sprintf (string, "%g", RotZ);
- string_gadget__reset (rotz_gadgetp,
- string, dialog_window_p);
- }
- if (!next_address)
- {
- ActivateGadget (time_segsize_gadgetp,
- dialog_window_p,
- time3d_rp);
- }
- }
- END_CATCH_ERROR;
- SET_TIME3D_ON;
- address = next_address;
- class = next_class;
- qualifier = next_qualifier;
- next_address = NULL;
- next_class = NULL;
- next_qualifier = NULL;
- } /* while next address */
- }
- }
- }
- }
-
- #endif /* end ifdef AMIGA */
-
-
-
-
-