source: SH_SHM/trunk/source/motif/shm.c @ 320

Revision 320, 198.5 KB checked in by marcus, 12 years ago (diff)

r159 | walther | 2011-02-10 15:46:45 +0100 (Do, 10 Feb 2011) | 1 line

version number update for next release

Line 
1
2/* file shm.c
3 *      =====
4 *
5 * $Revision: 159 $, $Date: 2011-02-10 15:46:45 +0100 (Do, 10 Feb 2011) $
6 *
7 * main module of shm
8 * K. Stammler, 15-Feb-93
9 */
10
11
12/*
13 *
14 *  SeismicHandler, seismic analysis software
15 *  Copyright (C) 1996,  Klaus Stammler, Federal Institute for Geosciences
16 *                                       and Natural Resources (BGR), Germany
17 *
18 *  This program is free software; you can redistribute it and/or modify
19 *  it under the terms of the GNU General Public License as published by
20 *  the Free Software Foundation; either version 2 of the License, or
21 *  (at your option) any later version.
22 *
23 *  This program is distributed in the hope that it will be useful,
24 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
25 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26 *  GNU General Public License for more details.
27 *
28 *  You should have received a copy of the GNU General Public License
29 *  along with this program; if not, write to the Free Software
30 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
31 *
32 */
33
34
35#include <stdio.h>
36#include <string.h>
37#include <ctype.h>
38#include <math.h>
39#include "basecnst.h"
40#undef BC_DEFINE_TRUE_FALSE
41#ifdef BC_INC_STDLIB
42#include BC_INC_STDLIB
43#endif
44#include <Xm/Xm.h>
45#include <Xm/ToggleB.h>
46#include <Xm/Scale.h>
47#include <Xm/Text.h>
48#include <Mrm/MrmPublic.h>
49#include <X11/Xresource.h>
50
51#define MAINPROG
52
53#define HELPTEXT(s) if (xmv_help) cl4_help(xmv_w[k_widget_help_scroll],s)
54
55#include "sysbase.h"
56#include "shconst.h"
57#include "shvars.h"
58#include "shdirs.h"
59#include "cpar.h"
60#include "tcusrdef.h"
61#include "earthloc.h"
62#include "phaseinf.h"
63#include "phasemgr.h"
64#include "seusrdef.h"
65#include "fctxmn5.h"
66#include "callsh.h"
67#include "infoidx.h"
68#include "glusrdef.h"
69#include "motifgraph.h"
70#include "cbutil.h"
71#include "mfexec.h"
72#include "station_no.h"
73#include "pixmaps.h"
74#include "seismics.h"
75#include "cblib.h"
76#include "cblib2.h"
77#include "cblib3.h"
78#include "cblib4.h"
79#include "calibloc.h"
80#include "spectrum.h"
81#include "partmotion.h"
82#include "polarfil.h"
83#include "shm_widgets.h"
84#include "seed_io/seedcfg.h"
85#include "seed_io/seed_lib.h"
86#include "globalparams.h"
87#include "sqliface.h"
88
89
90/* menu entry numbers */
91#define k_entry_command 1
92#define k_entry_quit 2
93#define k_entry_read_grsn 3
94#define k_entry_stw 4
95#define k_entry_dtw 5
96#define k_entry_parameters 6
97#define k_entry_filter 7
98#define k_entry_amplper_p 8
99#define k_entry_amplper_z 9
100#define k_entry_ampl_man 10
101#define k_entry_per_man 11
102#define k_entry_abort_selection 12
103#define k_entry_dump_params 13
104#define k_entry_short_info 14
105#define k_entry_trc_delete 15
106#define k_entry_trc_demean 16
107#define k_entry_trc_despike 17
108#define k_entry_trc_trend 18
109#define k_entry_readgse 19
110#define k_entry_readah 20
111#define k_entry_readq 21
112#define k_entry_calib_accept 22
113#define k_entry_calib_quit 23
114#define k_entry_cmd_speccmd 24
115#define k_entry_readrfmt 25
116/* 26 */
117#define k_entry_cmd_del_horiz 27
118/* 28 */
119#define k_entry_cmd_screendump 29
120#define k_entry_magn_mb 30
121#define k_entry_magn_ms_plain 31
122#define k_entry_magn_ms_c_na 32
123#define k_entry_magn_ms_c_eu 33
124#define k_entry_magn_ms_c_o 34
125#define k_entry_magn_ms_o 35
126#define k_entry_magn_ml 36
127#define k_entry_trc_hide 37
128#define k_entry_trc_invhide 38
129#define k_entry_final_params 39
130#define k_entry_cancel_params 40
131#define k_entry_calib_screendump 41
132#define k_entry_gencomment 42
133#define k_entry_params_save 43
134#define k_entry_params_restore 44
135#define k_entry_ext_location 45
136#define k_entry_phase_difference 46
137#define k_entry_source_region 47
138#define k_entry_rotate 48
139#define k_entry_deltheo 49
140#define k_entry_fk 50
141#define k_entry_params_recover 51
142#define k_entry_wdw_move_right 52
143#define k_entry_wdw_move_left 53
144#define k_entry_wdw_grow_right 54
145#define k_entry_wdw_grow_left 55
146#define k_entry_help 56
147#define k_entry_info_source 57
148#define k_entry_vespa 58
149#define k_entry_trc_sort_d 59
150#define k_entry_trc_sort_a 60
151#define k_entry_cmd_userdef 61
152#define k_entry_magn_sep 62
153#define k_entry_locsat 63
154#define k_entry_setup 64
155#define k_entry_readgse2 65
156#define k_entry_trc_refml 66
157#define k_entry_magn_del_ml 67
158#define k_entry_params_evt 68
159#define k_entry_flags_setcalib 69
160#define k_entry_flags_unsetcalib 70
161#define k_entry_ampl_surface 71
162#define k_entry_refstation 72
163#define k_entry_mparam_sn_auto 73
164#define k_entry_mparam_sn_repeat 74
165#define k_entry_mparam_sn_clear 75
166#define k_entry_mparam_sn_delete 76
167#define k_entry_configure 77
168#define k_entry_onset_pick 78
169#define k_entry_opick_setup 79
170#define k_entry_wdw_3traces 80
171#define k_entry_spectrum 81
172#define k_entry_spct_insert 82
173#define k_entry_spct_quit 83
174#define k_entry_spct_screendump 84
175#define k_entry_spct_amplo_up 85
176#define k_entry_spct_amplo_down 86
177#define k_entry_spct_amphi_up 87
178#define k_entry_spct_amphi_down 88
179#define k_entry_spct_frqlo_up 89
180#define k_entry_spct_frqlo_down 90
181#define k_entry_spct_frqhi_up 91
182#define k_entry_spct_frqhi_down 92
183#define k_entry_spct_mode_powspc 93
184#define k_entry_spct_mode_fft 94
185#define k_entry_spct_mode_fft2 95
186/* 96-99 */
187#define k_entry_spct_clear 100
188#define k_entry_spct_setup 101
189#define k_entry_spct_autoscale 102
190#define k_entry_pmotion 103
191#define k_entry_pm_screendump 104
192#define k_entry_pm_quit 105
193#define k_entry_pm_lincol 106
194#define k_entry_pm_linmono 107
195#define k_entry_pm_plot1 108
196#define k_entry_pm_plot3 109
197#define k_entry_pm_zoom_on 110
198#define k_entry_pm_zoom_off 111
199#define k_entry_write_mseed 112
200#define k_entry_write_gse 113
201#define k_entry_planewave 114
202#define k_entry_align 115
203#define k_entry_beam 116
204#define k_entry_fixbeam 117
205#define k_entry_autopick1 118
206#define k_entry_onsetpick 119
207#define k_entry_calib 120
208#define k_entry_residcorr 121
209#define k_entry_residdel 122
210#define k_entry_corrpick 123
211#define k_entry_eproc1 124
212#define k_entry_eproc2 125
213#define k_entry_eproc3 126
214#define k_entry_eproc4 127
215#define k_entry_eproc5 128
216#define k_entry_eproc6 129
217#define k_entry_eproc7 130
218#define k_entry_eproc8 131
219#define k_entry_eproc9 132
220#define k_entry_eproc10 133
221#define k_entry_eproc11 134
222#define k_entry_eproc12 135
223#define k_entry_eproc13 136
224#define k_entry_eproc14 137
225#define k_entry_eproc15 138
226#define k_entry_eproc16 139
227#define k_entry_eproc17 140
228#define k_entry_eproc18 141
229#define k_entry_eproc19 142
230#define k_entry_eproc20 143
231#define k_entry_adrm_request 144
232#define k_entry_match_location 145
233#define k_entry_identify_phase 146
234#define k_entry_spct_fitline 147
235#define k_entry_trc_keep_r 148
236#define k_entry_trc_keep_t 149
237#define k_entry_locate_tele 150
238#define k_entry_polarfil 151
239#define k_entry_pol_quit 152
240#define k_entry_pol_screendump 153
241#define k_entry_pol_inc_cohlth 154
242#define k_entry_pol_dec_cohlth 155
243#define k_entry_pol_inc_pow_linfil 156
244#define k_entry_pol_dec_pow_linfil 157
245#define k_entry_add_plugin 158
246#define k_entry_spectrogram 159
247#define k_entry_trc_del_badqual 160
248#define k_entry_del_location 161
249
250#define k_entry_key_arrow_up 300
251#define k_entry_key_arrow_down 301
252#define k_entry_key_arrow_left 302
253#define k_entry_key_arrow_right 303
254
255/* scale numbers */
256#define k_scale_read_grsn_length 1
257#define k_scale_param_ctrl_zoom 2
258#define k_scale_filter_autocut 3
259#define k_scale_setup_dh 4
260#define k_scale_setup_dw 5
261
262/* button numbers */
263#define k_button_read_grsn_read 1
264#define k_button_read_grsn_cancel 2
265#define k_button_read_grsn_1hz 3
266#define k_button_read_grsn_20hz 4
267#define k_button_read_grsn_80hz 5
268   /* reserved 6-34 entries */
269#define k_button_read_grsn_comp_z 35
270#define k_button_read_grsn_comp_n 36
271#define k_button_read_grsn_comp_e 37
272#define k_button_read_grsn_secup 38
273#define k_button_read_grsn_minup 39
274#define k_button_read_grsn_hourup 40
275#define k_button_read_grsn_dayup 41
276#define k_button_read_grsn_secdn 42
277#define k_button_read_grsn_mindn 43
278#define k_button_read_grsn_hourdn 44
279#define k_button_read_grsn_daydn 45
280#define k_button_read_grsn_grf 46
281#define k_button_read_grsn_grsn 47
282#define k_button_read_grsn_keep 48
283#define k_button_read_grsn_yearup 49
284#define k_button_read_grsn_yeardn 50
285#define k_button_read_grsn_monthup 51
286#define k_button_read_grsn_monthdn 52
287#define k_button_read_grsn_nexttime 53
288#define k_button_read_grsn_prevtime 54
289#define k_button_phase_ok 55
290#define k_button_phase_dismiss 56
291#define k_button_phase_sign_p 57
292#define k_button_phase_sign_m 58
293#define k_button_phase_sign_0 59
294#define k_button_phase_reliab_yes 60
295#define k_button_phase_reliab_no 61
296#define k_button_phase_name_b 62
297#define k_button_phase_name_Pn 63
298#define k_button_phase_name_Pg 64
299#define k_button_phase_name_Sn 65
300#define k_button_phase_name_Sg 66
301#define k_button_phase_name_Lg 67
302#define k_button_phase_name_Rg 68
303#define k_button_phase_name_P 69
304#define k_button_phase_name_pP 70
305#define k_button_phase_name_sP 71
306#define k_button_phase_name_PKPdf 72
307#define k_button_phase_name_PKPbc 73
308#define k_button_phase_name_PKPab 74
309#define k_button_phase_name_pPKPdf 75
310#define k_button_phase_name_pPKPbc 76
311#define k_button_phase_name_pPKPab 77
312#define k_button_phase_name_PKP 78
313#define k_button_phase_name_PP 79
314#define k_button_phase_name_pPP 80
315#define k_button_phase_name_S  81
316#define k_button_phase_name_SKS 82
317#define k_button_phase_name_PKKP  83
318#define k_button_phase_name_PKPPKP  84
319#define k_button_phase_name_PcP  85
320#define k_button_phase_name_L 86
321#define k_button_phase_name_X 87
322#define k_button_phase_spec_e 100
323#define k_button_phase_spec_i 101
324#define k_button_phase_delete 102
325#define k_button_param_dismiss 103
326#define k_button_param_localize 104
327#define k_button_param_theo 105
328#define k_button_filter_ok 106
329#define k_button_filter_cancel 107
330#define k_button_filter_none 108
331#define k_button_filter_other 109
332#define k_button_filter_wwssn_sp 110
333#define k_button_filter_wwssn_lp 111
334#define k_button_filter_lrsm_sp 112
335#define k_button_filter_lrsm_lp 113
336#define k_button_filter_kirnos 114
337#define k_button_filter_woodand 115
338#define k_button_filter_standard_bp 116
339#define k_button_filter_but_bp 117
340#define k_button_filter_but_lp 118
341#define k_button_filter_but_hp 119
342#define k_button_filter_sro_lp 120
343#define k_button_filter_displace 121
344   /* reserved 122-123 */
345#define k_button_multipli_1_3 124
346#define k_button_multipli_1_2 125
347#define k_button_multipli_1 126
348#define k_button_multipli_2 127
349#define k_button_multipli_3 128
350#define k_button_multipli_4 129
351#define k_button_multipli_edit_mul 130
352#define k_button_multipli_edit_div 131
353#define k_button_phase_type_other 132
354#define k_button_phase_type_local 133
355#define k_button_phase_type_regio 134
356#define k_button_phase_type_tele 135
357#define k_button_phase_type_nuclear 136
358#define k_button_phase_type_blast 137
359#define k_button_phase_type_mining 138
360#define k_button_param_depth 139
361#define k_button_read_grsn_eventfile 141
362#define k_button_filter_butpar_lo_up 143
363#define k_button_filter_butpar_lo_down 144
364#define k_button_filter_butpar_hi_up 145
365#define k_button_filter_butpar_hi_down 146
366#define k_button_filter_butpar_order_up 147
367#define k_button_filter_butpar_order_down 148
368#define k_button_read_grsn_readnew 150
369#define k_button_param_hypoloc 151
370/*   :  */
371#define k_button_hypo_ok 170
372#define k_button_hypo_cancel 171
373#define k_button_hypo_depth_0 172
374#define k_button_hypo_depth_5 173
375#define k_button_hypo_depth_10 174
376#define k_button_hypo_depth_15 175
377#define k_button_hypo_depth_20 176
378#define k_button_hypo_depth_33 177
379#define k_button_hypo_depth_free 180
380#define k_button_hypo_use_s_yes 181
381#define k_button_hypo_use_s_no 182
382#define k_button_phase_qual_0 183
383#define k_button_phase_qual_1 184
384#define k_button_phase_qual_2 185
385#define k_button_phase_qual_3 186
386#define k_button_phase_qual_4 187
387#define k_button_phase_qual_5 188
388#define k_button_phase_qual_6 189
389#define k_button_phase_qual_7 190
390#define k_button_phase_qual_8 191
391#define k_button_phase_qual_9 192
392/*   :   */
393#define k_button_param_theo_ext 200
394#define k_button_analyst_ok 201
395#define k_button_analyst_cancel 202
396#define k_button_filter_autocut_0 203
397#define k_button_filter_autocut_5sec 204
398#define k_button_filter_autocut_20sec 205
399#define k_button_filter_autocut_1min 206
400#define k_button_filter_autocut_3min 207
401#define k_button_filter_autocut_5min 208
402#define k_button_filter_autocut_10min 209
403/*  :  */
404#define k_button_infsource_ok 215
405#define k_button_infsource_cancel 216
406#define k_button_param_locq_tooweak 217
407#define k_button_param_locq_incoherent 218
408#define k_button_param_locq_nobearing 219
409#define k_button_param_locq_region 220
410#define k_button_param_locq_reliable 221
411#define k_button_param_set_1 222
412#define k_button_param_set_2 223
413#define k_button_param_set_3 224
414#define k_button_read_grsn_reset 225
415#define k_button_fk_ok 227
416#define k_button_fk_cancel 228
417#define k_button_read_grsn_invhdr 229
418#define k_button_fk_unit_deg 230
419#define k_button_fk_unit_km 231
420#define k_button_fk_get_values 232
421#define k_button_theo_phase_ok 233
422#define k_button_theo_phase_cancel 234
423#define k_button_phase_acc_none 235
424#define k_button_phase_acc_query 236
425#define k_button_phase_acc_display 237
426#define k_button_param_locq_undefined 238
427#define k_button_speccmd_hide 239
428#define k_button_speccmd_1 240
429/* reserved until 259 */
430#define k_button_read_grsn_edit_hz 260
431#define k_button_read_grsn_station 261
432/* reserved until 292 */
433#define k_button_vespa_ok 293
434#define k_button_vespa_cancel 294
435#define k_button_vespa_undo 295
436#define k_button_vespa_power_1 296
437#define k_button_vespa_power_2 297
438#define k_button_vespa_power_3 298
439#define k_button_vespa_power_5 299
440#define k_button_vespa_power_10 300
441#define k_button_vespa_slostep_1 301
442#define k_button_vespa_slostep_2 302
443#define k_button_vespa_slostep_3 303
444#define k_button_vespa_slohi_1 304
445#define k_button_vespa_slohi_2 305
446#define k_button_vespa_slohi_3 306
447#define k_button_read_grsn_all 307
448#define k_button_locsat_ok 308
449#define k_button_locsat_cancel 309
450#define k_button_locsat_depth_0 310
451#define k_button_locsat_depth_1 311
452#define k_button_locsat_depth_10 312
453#define k_button_locsat_depth_15 313
454#define k_button_locsat_depth_20 314
455#define k_button_locsat_depth_33 315
456#define k_button_locsat_depth_free 316
457#define k_button_locsat_auto_yes 317
458#define k_button_locsat_auto_no 318
459#define k_button_setup_hide 319
460#define k_button_setup_hc_fast 320
461#define k_button_setup_hc_qual 321
462#define k_button_setup_maxcrsr_crosshair 322
463#define k_button_setup_maxcrsr_waveform 323
464#define k_button_setup_maxcrsr_negwave 324
465#define k_button_setup_maxcrsr_hilbert 325
466#define k_button_setup_maxcrsr_neghilb 326
467#define k_button_setup_norm_c 327
468#define k_button_setup_norm_af 328
469#define k_button_setup_norm_aw 329
470#define k_button_setup_norm_sf 330
471#define k_button_setup_norm_sw 331
472#define k_button_setup_topdown_top 332
473#define k_button_setup_topdown_down 333
474#define k_button_setup_filtyp_recursive 334
475#define k_button_setup_filtyp_fft 335
476#define k_button_setup_deffil_none 336
477#define k_button_setup_deffil_standard_bp 337
478#define k_button_setup_deffil_wwssn_sp 338
479#define k_button_setup_evtview_full 339
480#define k_button_setup_evtview_brief 340
481#define k_button_read_grsn_request 341
482#define k_button_locsat_output_yes 342
483#define k_button_locsat_output_no 343
484#define k_button_setup_phasename_full 344
485#define k_button_setup_phasename_brief 345
486#define k_button_read_grsn_todaysfd 346
487#define k_button_refstat_ok 347
488#define k_button_refstat_station_1 348
489/* 349-352 reserved */
490#define k_button_refstat_station_last 353
491#define k_button_phase_attrib_ext 354
492#define k_button_attrib_ok 355
493#define k_button_evpublic_ignore 356
494#define k_button_evpublic_telex1 357
495#define k_button_evpublic_telexall 358
496#define k_button_setup_deffil_but_bp 359
497#define k_button_vespa_export 360
498#define k_button_read_grsn_device 361
499#define k_button_read_grsn_fbox 362
500#define k_button_opick_ok 364
501#define k_button_opick_thresh_1 365
502#define k_button_opick_thresh_2 366
503#define k_button_opick_thresh_3 367
504#define k_button_opick_thresh_4 368
505#define k_button_opick_thresh_5 369
506#define k_button_opick_thresh_6 370
507#define k_button_opick_thresh_7 371
508#define k_button_opick_duration_1 372
509#define k_button_opick_duration_2 373
510#define k_button_opick_duration_3 374
511#define k_button_opick_duration_4 375
512#define k_button_opick_duration_5 376
513#define k_button_opick_duration_6 377
514#define k_button_opick_duration_7 378
515#define k_button_opick_break_1 379
516#define k_button_opick_break_2 380
517#define k_button_opick_break_3 381
518#define k_button_opick_break_4 382
519#define k_button_opick_break_5 383
520#define k_button_opick_break_6 384
521#define k_button_opick_break_7 385
522#define k_button_spcsetup_ok 386
523#define k_button_spcsetup_cancel 387
524#define k_button_read_grsn_nextdiag 388
525#define k_button_fk_okauto 389
526#define k_button_read_grsn_comp_edit 390
527#define k_button_adrm_ok 391
528#define k_button_adrm_cancel 392
529#define k_button_adrm_1 393
530/* up to 407 reserved */
531#define k_button_adrm_configure 408
532#define k_button_param_setslow 409
533#define k_button_locsat_hypo 410
534#define k_button_plugin_add 411
535#define k_button_plugin_cancel 412
536#define k_button_plugin_1 413
537/* up to 427 reserved */
538#define k_button_read_grsn_resettime 428
539
540/* constants */
541#define XMC_MAXWIDGET 400
542
543#define XMC_TIME_BUTTON Button3
544#define XMC_TIME_BUTTON_MASK Button3Mask
545#define XMC_PHASE_BUTTON Button1
546#define XMC_PHASE_BUTTON_MASK Button1Mask
547#define XMC_CURSOR_BUTTON Button2
548#define XMC_CURSOR_BUTTON_MASK Button2Mask
549
550#define XMC_MAXFILNAME 10
551
552
553/* exported variables of SH */
554int        tc;                 /* local text channels */
555int        tc_shv;             /* global text channels */
556int        gc;                 /* local graphic channels */
557int        gc_shv;             /* global graphic channels */
558int        cc;                 /* local console channels */
559int        cc_shv;             /* global console channels */
560SHFLAGS    shflags_shv;        /* local processing flags */
561SHFLAGS    shglbflags_shv;     /* global processing flags */
562TSyStatus  shv_last_status;    /* status of last command */
563int        shv_maininput=0;    /* main input level for CP's */
564char       id_shv[11]={SHC_FILE_PREFIX}; /* session ID */
565
566char       protfile_shv[SHC_FILELTH+1]; /* protocol file */
567char       shd_scratch[SHC_FILELTH+1] =  {DD_SCRATCH};
568char       shd_help[SHC_FILELTH+1]    =  {DD_HELP};
569char       shd_errors[SHC_FILELTH+1]  =  {DD_ERRORS};
570char       shd_inputs[SHC_FILELTH+1]  =  {DD_INPUTS};
571
572
573/* global variables */
574static XtAppContext   xmv_appctxt;
575static Widget         xmv_appshell;        /* main widget */
576static MrmHierarchy   xmv_hier;            /* hierarchy ID */
577static char           *xmv_uidlist[3];
578static char           xmv_uidentry1[cBcFileLth+1]; /* 1. (and only) UID file */
579       Widget         xmv_w[XMC_MAXWIDGET];/* widget array, used a. in mfexec */
580static CUT_PARAMSETS  xmv_par;             /* analysis parameters */
581static CUT_PARAMS     *xmv_cpar;           /* pointer to current set */
582static MGT_DSPCTRL    xmv_dspctrl;         /* display control parameters */
583static CUT_SELECTIONS xmv_select;          /* additional selections */
584static int            xmv_onset_acc=CUC_ACCURACY_NONE; /* accuracy of phases */
585static TSyBoolean     xmv_help=FALSE;      /* show help text */
586/* SH commands */
587       MX_CMD_READG   xmv_cmd_readg;       /* read GRSN, used also in mfexec.c*/
588static MX_CMD_FILTER  xmv_cmd_filter;      /* filter applied */
589static TPiPhase       xmv_phase;           /* curent phase info */
590static CUT_TRACE      *xmv_phasetrc=NULL;  /* phase trace */
591static char           xmv_sortstr[cBcShortStrLth+1];   /* sort info */
592static char           xmv_sortinfo[cBcShortStrLth+1];  /* sort display text */
593static char           xmv_detecinfo[cBcLineLth+1];      /* detection line */
594static TSyBoolean     xmv_xt_initialized=FALSE;        /* Xt initialized */
595static int            xmv_prevent_resize=0; /* prevents resize events if >0 */
596static TSyBoolean     xmv_pm_on=FALSE;      /* particle motion switched on */
597static TSyBoolean     xmv_polar_on=FALSE;      /* particle motion switched on */
598static TSyBoolean     xmv_keeptrc_auto=FALSE; /* 'Keep Traces' Button autom. */
599static char           xmv_openwdw[cBcShortStrLth+1]; /* which windows to open */
600static int            xmv_last_window_no=MGC_WDW_MAIN;  /* last active window */
601/*static char           xmv_filter_name[cBcShortStrLth+1][MAXFILNAME];*/ /* filter names */
602/* theoretical phases (must be same sequence as in dialog box) */
603       char           *xmv_thpname[] = {
604                "P","pP","sP","PP","PS","PKPab","PKPbc","PKPdf","pPKPab","pPKPbc",
605                "pPKPdf","sPKPab","sPKPbc","sPKPdf","PcP","PcS","PKKPdf","PKiKP","PPP",
606                "Pdiff","S","pS","sS","SS","SP","SKSac","SKSdf","SKPac","SKPdf",
607                "sSKSac","sSKSdf","ScS","ScP","SKKSac","SKKSdf","SSS","SKKPdf","Sdiff",""
608                };
609
610
611/* prototypes of local routines */
612static void xm_initialize( void );
613static void xmh_log_action( char inf[], int num );
614static void xm_exec_userdef( char fname[] );
615static void xm_read_requested_data( Widget w[], STATUS *status );
616static void xm_configure_windows( Widget w[] );
617static void xm_fetch_widgets( void );
618static void xm_call_configure( void );
619static void xm_call_cmdexec( Widget widget, char *tag,
620        XmCommandCallbackStruct *data );
621static void xm_call_create_widget( Widget widget, int *tag,
622        XmAnyCallbackStruct *data );
623static void xm_call_expose_drawingarea( Widget widget, char *tag,
624        XmDrawingAreaCallbackStruct *data );
625static void xm_call_resize_object( Widget widget, int *tag,
626        XmAnyCallbackStruct *data );
627static void xm_call_activate( Widget widget, int *tag,
628        XmToggleButtonCallbackStruct *data );
629static void xm_call_menu_select( Widget widget, int *tag,
630        XmAnyCallbackStruct *data );
631static void xm_call_scale( Widget widget, int *tag,
632        XmScaleCallbackStruct *data );
633static void xm_call_drawing_input( Widget widget, int *tag,
634        XmDrawingAreaCallbackStruct *data );
635static void xm_call_text_input( Widget widget, int *tag,
636        XmTextVerifyCallbackStruct *data );
637static void xm_call_file_selection( Widget widget, int *tag,
638        XmFileSelectionBoxCallbackStruct *data );
639static void xmh_read_gsefile( char datafile[], TSyStatus *status );
640void xm_action_motion( Widget w, XEvent *ev, String *params,
641        Cardinal *parno );
642void xm_set_processing_state( int state );
643void xm_set_x_resources( Display *display );
644void xm_hex_colour( float col, char *a, char *b );
645void xm_move_drag_window( int key_entry );
646
647
648/* names to be registered */
649static MrmRegisterArg   xmv_regvec[] = {
650        { "xm_call_menu_select", (XtPointer) xm_call_menu_select },
651        { "xm_call_create_widget", (XtPointer) xm_call_create_widget },
652        { "xm_call_expose_drawingarea", (XtPointer) xm_call_expose_drawingarea },
653        { "xm_call_resize_object", (XtPointer) xm_call_resize_object },
654        { "xm_call_activate", (XtPointer) xm_call_activate },
655        { "xm_call_scale", (XtPointer) xm_call_scale },
656        { "xm_call_drawing_input", (XtPointer) xm_call_drawing_input },
657        { "xm_call_text_input", (XtPointer) xm_call_text_input },
658        { "xm_call_file_selection", (XtPointer) xm_call_file_selection },
659        { "xm_call_cmdexec", (XtPointer) xm_call_cmdexec }
660};
661
662/* action routines */
663static   XtActionsRec xmv_new_actions[] = {
664        {"xm_action_motion", xm_action_motion}
665};
666
667
668
669int main( int argc, char *argv[] )
670{
671        /* local variables */
672        /* SH variables */
673        STATUS   status;                   /* SH return status */
674        char     cmd[BC_LINELTH+1];        /* SH command line */
675        char     progname[cBcFileLth+1];   /* program name (shm or shm_world) */
676        /* Motif variables */
677        int      n;                        /* counter */
678        Arg      arglist[2];               /* argument list */
679        Display  *display;                 /* display */
680        MrmType  class;                    /* widget class */
681
682        /* executable code */
683
684        printf( "\n" );
685        printf( "SeismicHandler Motif version 2.5 (February-2011), Copyright (C) 2011\n" );
686        printf( "Klaus Stammler, Seismological Observatory Graefenberg (SZGRF)\n" );
687        printf( "of the Federal Institute for Geosciences and Natural Resources (BGR).\n" );
688        printf( "SeismicHandler comes with ABSOLUTELY NO WARRANTY.\n" );
689        printf( "This is free software, and you are welcome to redistribute it\n" );
690        printf( "under certain conditions; see $SH_ROOT/doc/gpl.txt for details.\n" );
691        printf( "\n" );
692
693        /* for optional parameters; -exec=<proc>, -evt=<evt>, -openwdw=<wdw> */
694        pa_init( argc, argv );
695
696        /* read global parameters */
697        GpReadParfile();
698        if  (GpGetInt(cGpI_debug_level) > 5)  {
699                printf( "shm-dbg6: dumping global parameters\n" );
700                GpDumpParams();
701        } /*endif*/
702        cl_read_autofilters();
703
704        strcpy( xmv_uidentry1, argv[0] );
705        if  (GpGetBoolean(cGpB_small_menu_font))  {
706                strcat( xmv_uidentry1, "_smfnt.uid" );
707        } else {
708                strcat( xmv_uidentry1, ".uid" );
709        } /*endif*/
710        xmv_uidlist[0] = xmv_uidentry1;
711        xmv_uidlist[1] = NULL;
712
713        /* initialize SH */
714        /* ------------- */
715
716        status = BC_NOERROR;
717        sy_initprocess();
718        se_initialize( argc, argv, &status );
719        if  (Severe(&status))  {
720                se_dsplymsg( 0, status );
721                exit( status );
722        } /*endif*/
723
724        /* initialize Motif */
725        /* ---------------- */
726
727        MrmInitialize();
728        XrmInitialize();
729
730        XtToolkitInitialize();
731        xmv_appctxt = XtCreateApplicationContext();
732        display = XtOpenDisplay( xmv_appctxt, NULL, argv[0], "SHM",
733                NULL, 0, &argc, argv );
734        if  (display == NULL)  {
735                fprintf( stderr, "*SHM: can't open display\n" );
736                exit( 1 );
737        } /*endif*/
738
739        /* X resources */
740        xm_set_x_resources( display );
741
742        XtAppAddActions( xmv_appctxt, xmv_new_actions, 1 );
743
744        n = 0;
745        XtSetArg( arglist[n], XmNallowShellResize, True );  n++;
746        XtSetArg( arglist[n], XmNsaveUnder, True ); n++;
747        xmv_appshell = XtAppCreateShell( argv[0], "SHM",
748                applicationShellWidgetClass, display, arglist, n );
749
750        switch  (MrmOpenHierarchyPerDisplay( XtDisplay(xmv_appshell),
751                1/*(MrmCount)XtNumber(xmv_uidlist)*/, xmv_uidlist,
752                NULL, &xmv_hier ))  {
753        case MrmSUCCESS:
754                break;
755        case MrmNOT_FOUND:
756                fprintf( stderr, "*SHM: Unable to open UID files.\n" );
757                exit( 1 );
758        default:
759                fprintf( stderr, "*SHM: Unable to open UID hierarchy.\n" );
760                exit( 1 );
761        } /*endswitch*/
762
763        if  (MrmRegisterNames(xmv_regvec, (MrmCount) XtNumber(xmv_regvec)) !=
764                MrmSUCCESS)  {
765                fprintf( stderr, "*SHM: couldn't register names\n" );
766        } /*endif*/
767
768        xm_fetch_widgets( );
769
770        /* startup SH, call SHSTRTUP.SHC and SHM_CMD_STARTUP.SHC */
771        /*mn5_set_shmsetup_pointer( &shv_global );*/
772        mn5_set_external_routine( mx_sh_external_routine );
773        callsh( "! just to run the global startup file", &n, &status );
774        callsh( "shm_cmd_startup", &n, &status );  /* shm startup */
775        mg_set_reverse_xors( GpGetBoolean(cGpB_reverse_xors) );
776
777        /* trace normalisation */
778        switch  (GpGetInt(cGpI_trace_normalisation))  {
779        case cGp_NORM_CONST:  callsh( "shm_cmd_norm c", &n, &status );  break;
780        case cGp_NORM_AW:     callsh( "shm_cmd_norm aw", &n, &status ); break;
781        case cGp_NORM_SW:     callsh( "shm_cmd_norm sw", &n, &status );  break;
782        default:
783                fprintf( stderr, "*SHM: error in program, check trace_normalisation code\n" );
784        } /*endswitch*/
785
786#ifdef XXX
787        if  (strcmp(GpGetStringElem(cGpL_station_info_file),"default") != 0)  {
788                gl_locfile_name( GpGetString(cGpS_station_info_file) );
789        } /*endif*/
790#endif
791        cu_next_read_dialog( xmv_w );
792
793        if  (GpGetBoolean(cGpB_prompt_analyst))  {
794                if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[analyst]" );
795                if  (MrmFetchWidget(xmv_hier,"analyst_box",xmv_appshell,
796                        xmv_w+k_widget_analyst_box,&class) != MrmSUCCESS)  {
797                        fprintf( stderr, "*SHM: can't fetch analyst_box widget\n" );
798                } /*endif*/
799                XtManageChild( xmv_w[k_widget_analyst_box] );
800        } /*endif*/
801
802        /* check which windows to open */
803        if  (pa_qspecified("-openwdw"))  {
804                strncpy( xmv_openwdw, pa_qvalue("-openwdw"), cBcShortStrLth );
805        } else {
806                strcpy( xmv_openwdw, "mspe" );
807        } /*endif*/
808
809        xm_initialize();
810
811        xm_configure_windows( xmv_w );
812
813        cl3_init_extproc_entries( xmv_w );
814
815        /* take SH script and evt file from command line */
816        {
817                char autoexec[cBcLineLth+1]="";  /* autoexec name */
818                if  (pa_qspecified("-exec"))  {
819                        strncpy( autoexec, pa_qvalue("-exec"), cBcLineLth );
820                        if  (GpGetInt(cGpI_debug_level) > 0)
821                                printf( "SHM-dbg1: execute auto .%s.\n", autoexec );
822                        status = cBcNoError;
823                        callsh( autoexec, &n, &status );
824                        mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &status );
825                } /*endif*/
826                if  (pa_qspecified("-evt"))  {
827                        strncpy( autoexec, pa_qvalue("-evt"), cBcLineLth );
828                        if  (GpGetInt(cGpI_debug_level) > 0)
829                                printf( "SHM-dbg1: load evt %s\n", autoexec );
830                        status = cBcNoError;
831                        cl3_restore_from_evt( autoexec, xmv_cpar, NULL, FALSE, &status );
832                        mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &status );
833                } /*endif*/
834        }
835
836        /* execute button sequence on -buttonseq qualifiers */
837        if  (pa_qspecified("-buttonseq"))  {
838                status = cBcNoError;
839                mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &status );
840                xm_exec_userdef( pa_qvalue("-buttonseq") );
841        } /*endif*/
842
843        xmv_xt_initialized = TRUE;
844        XtAppMainLoop( xmv_appctxt );
845
846        if  (MrmCloseHierarchy(xmv_hier) != MrmSUCCESS)  {
847                fprintf( stderr, "*SHM: Unable to close UID hierarchy.\n" );
848                exit( 1 );
849        } /*endif*/
850
851        se_terminate();
852        SqlDeleteScratchFile();
853
854        return 0;
855
856} /* end of main */
857
858
859
860/*--------------------------------------------------------------------------*/
861
862
863
864static void xm_initialize( void )
865
866/* initializes global variables
867 *
868 * no parameters
869 */
870{
871        /* local variables */
872        char     str[BC_LINELTH+1];  /* scratch */
873        char     tmpstr[cBcShortStrLth+1];  /* scratch string */
874        STATUS   locstat=BC_NOERROR; /* local status */
875        int      i;                  /* counter */
876        char     *cptr;              /* pointer to resource string */
877        Arg      arglist[3];         /* argument list */
878        int      n;                  /* length of list */
879        int      u_draw_area_width;  /* drawing area width */
880        int      u_draw_area_height; /* drawing area height */
881
882        /* executable code */
883
884        u_draw_area_width = GpGetInt( cGpI_draw_area_width );
885        u_draw_area_height = GpGetInt( cGpI_draw_area_height );
886
887        /* check for resource values which are set in resource files usually */
888        cptr = cu_get_string( xmv_w[k_widget_locsat_prefix_text] );
889        if  (*cptr <= ' ')
890                cu_set_string( xmv_w[k_widget_locsat_prefix_text], "tab" );
891        cptr = cu_get_string( xmv_w[k_widget_fk_frqlo_text] );
892        if  (*cptr <= ' ')
893                cu_set_string( xmv_w[k_widget_fk_frqlo_text], "0.4" );
894        cptr = cu_get_string( xmv_w[k_widget_fk_frqhi_text] );
895        if  (*cptr <= ' ')
896                cu_set_string( xmv_w[k_widget_fk_frqhi_text], "3.0" );
897        cptr = cu_get_string( xmv_w[k_widget_fk_slowness_text] );
898        if  (*cptr <= ' ')
899                cu_set_string( xmv_w[k_widget_fk_slowness_text], "15" );
900        cptr = cu_get_string( xmv_w[k_widget_fk_resol_text] );
901        if  (*cptr <= ' ')
902                cu_set_string( xmv_w[k_widget_fk_resol_text], "51" );
903        cptr = cu_get_string( xmv_w[k_widget_fk_colnum_text] );
904        if  (*cptr <= ' ')
905                cu_set_string( xmv_w[k_widget_fk_colnum_text], "10" );
906        cptr = cu_get_string( xmv_w[k_widget_filter_butpar_hi_text] );
907        if  (*cptr <= ' ')
908                cu_set_string( xmv_w[k_widget_filter_butpar_hi_text], "5Hz" );
909        cptr = cu_get_string( xmv_w[k_widget_filter_butpar_lo_text] );
910        if  (*cptr <= ' ')
911                cu_set_string( xmv_w[k_widget_filter_butpar_lo_text], "100s" );
912        cptr = cu_get_string( xmv_w[k_widget_filter_butpar_order_text] );
913        if  (*cptr <= ' ')
914                cu_set_string( xmv_w[k_widget_filter_butpar_order_text], "3" );
915        cptr = cu_get_string( xmv_w[k_widget_opick_thresh_text] );
916        if  (*cptr <= ' ')
917                cu_set_string( xmv_w[k_widget_opick_thresh_text], "10" );
918        cptr = cu_get_string( xmv_w[k_widget_opick_duration_text] );
919        if  (*cptr <= ' ')
920                cu_set_string( xmv_w[k_widget_opick_duration_text], "1.0" );
921        cptr = cu_get_string( xmv_w[k_widget_opick_break_text] );
922        if  (*cptr <= ' ')
923                cu_set_string( xmv_w[k_widget_opick_break_text], "0.0" );
924
925        /* read values from X-resources into shv_global */
926        cptr = cu_get_string( xmv_w[k_widget_read_grsn_device] );
927        if  (*cptr > ' ' && strlen(cptr) < cBcFileLth)
928                GpSetString( cGpS_defpath_data, cptr, NULL );
929
930        xmh_log_action( "--reset--", 0 );
931
932        xmv_dspctrl.zoom = 1.0;
933        xmv_dspctrl.norm = MGC_NORM_AF;
934        xmv_dspctrl.show_phase_acc = FALSE;
935
936        /* readg */
937        strcpy( xmv_cmd_readg.device, GpGetString(cGpS_defpath_data) );
938        strcpy( xmv_cmd_readg.start, "24-Feb-93_8:0:0" );
939        cu_set_string( xmv_w[k_widget_read_grsn_device], xmv_cmd_readg.device );
940        xmv_cmd_readg.seclth = 900.0;
941        for  (i=0; i<=xmv_cmd_readg.sl.set2end; i++)
942                if  (XmToggleButtonGetState( xmv_w[k_widget_read_grsn_station+i] ))
943                        xmv_cmd_readg.stations |= (1<<i);
944        if  (XmToggleButtonGetState(xmv_w[k_widget_read_grsn_comp_z]))
945                if  (strlen(xmv_cmd_readg.comp) < MXC_COMP_STRLTH)
946                        strcat( xmv_cmd_readg.comp, "Z" );
947        if  (XmToggleButtonGetState(xmv_w[k_widget_read_grsn_comp_n]))
948                if  (strlen(xmv_cmd_readg.comp) < MXC_COMP_STRLTH)
949                        strcat( xmv_cmd_readg.comp, "N" );
950        if  (XmToggleButtonGetState(xmv_w[k_widget_read_grsn_comp_e]))
951                if  (strlen(xmv_cmd_readg.comp) < MXC_COMP_STRLTH)
952                        strcat( xmv_cmd_readg.comp, "E" );
953        if  (XmToggleButtonGetState(xmv_w[k_widget_read_grsn_comp_edit]))
954                if  (strlen(xmv_cmd_readg.comp)
955                        +strlen(cu_get_string(xmv_w[k_widget_read_grsn_comp_text]))
956                        < MXC_COMP_STRLTH)
957                        strcat( xmv_cmd_readg.comp,
958                                cu_get_string(xmv_w[k_widget_read_grsn_comp_text]) );
959#ifdef XXX
960        xmv_cmd_readg.channum = 1;
961        strcpy( xmv_cmd_readg.chanstr[0], "BH" );
962        XmToggleButtonSetState( xmv_w[k_widget_read_grsn_20hz], TRUE, FALSE );
963#endif
964        xmv_cmd_readg.keep = FALSE;
965        xmv_cmd_readg.use_readk = FALSE;
966        xmv_cmd_readg.reads_invhdr = FALSE;
967        strcpy( xmv_cmd_readg.sfdfile, "sfdfile.sfd" );
968
969        strcpy( xmv_cmd_filter.name, GpGetString(cGpS_default_filter) );
970        xmv_cmd_filter.autocut = 5.0;
971
972        XmToggleButtonSetState( xmv_w[k_widget_filter_none], TRUE, FALSE );
973
974        /* set AutoDRM selection box */
975        cl4_init_adrm_buttons( xmv_w );
976
977        cu_reset_phase( &xmv_phase );
978        strcpy( xmv_phase.name, GpGetString(cGpS_auto_phase) );
979        cu_phase_box_defaults( xmv_w, &xmv_phase );
980        xmv_phase.name[0] = '\0';
981        for  (i=0; i<CUC_MAXPARSET; i++)
982                xmv_par.par[i].comment = NULL;
983        cu_reset_paramsets( &xmv_par );
984        xmv_cpar = xmv_par.par;
985        xm_set_processing_state( CUC_PARSTATE_INITIAL );
986        /* xmv_par.state = CUC_PARSTATE_INITIAL; */
987        xmv_cpar->soft_change = TRUE;
988        cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
989        xmv_cpar->soft_change = FALSE;
990
991        cu_current_time( str );
992        str[11] = '\0';
993        strcpy( str+18, "00" );
994        cu_set_string( xmv_w[k_widget_read_grsn_date], str );
995        cu_set_string( xmv_w[k_widget_read_grsn_time], str+12 );
996        cu_set_string( xmv_w[k_widget_read_grsn_eventfile_text], "eventlist");
997        cu_set_string( xmv_w[k_widget_read_grsn_eventno_text], "0");
998
999        XmScaleSetValue( xmv_w[k_widget_read_grsn_length_scale], 6 );
1000
1001        XtSetSensitive( xmv_w[k_widget_draw], TRUE );
1002
1003        /* set size of main window and drawing area */
1004        n = 0;
1005        XtSetArg( arglist[n], XmNwidth, u_draw_area_width+4 );  n++;
1006        XtSetArg( arglist[n], XmNheight, u_draw_area_height+37 );  n++;
1007        XtSetValues( xmv_w[k_widget_main], arglist, n );
1008        n = 0;
1009        XtSetArg( arglist[n], XmNwidth, u_draw_area_width );  n++;
1010        XtSetArg( arglist[n], XmNheight, u_draw_area_height );  n++;
1011        XtSetValues( xmv_w[k_widget_draw], arglist, n );
1012
1013        /* set width of single draw box equal to width of main window */
1014        n = 0;
1015        XtSetArg( arglist[n], XmNwidth, u_draw_area_width );  n++;
1016        XtSetValues( xmv_w[k_widget_single_draw], arglist, n );
1017
1018        /* create window buffer for main window */
1019        pix_create_window_buffer( XtDisplay(xmv_w[k_widget_draw]),
1020                XtWindow(xmv_w[k_widget_draw]), TRUE, &locstat );
1021        if  (Severe(&locstat))  {
1022                printf( "*SHM: create_window_buffer error %d ***\n", locstat );
1023        } /*endif*/
1024
1025        locstat = BC_NOERROR;
1026        pix_create_window_buffer( XtDisplay(xmv_w[k_widget_single_draw]),
1027                XtWindow(xmv_w[k_widget_single_draw]), TRUE, &locstat );
1028        if  (Severe(&locstat))
1029                printf( "*SHM: error in pix_create_window_buffer for single w ***\n" );
1030
1031        mg_draw_cursor( xmv_w[k_widget_draw], MGC_WDW_MAIN, &xmv_dspctrl,
1032                MGC_CRSR_CONTINUE, 0, 0, NULL );
1033
1034        /* set colours of windows */
1035        n = 0;
1036        XtSetArg( arglist[n], XmNbackground, pix_colour(PIXC_COL_BACKGROUND) );  n++;
1037        XtSetArg( arglist[n], XmNforeground, pix_colour(PIXC_COL_FOREGROUND) );  n++;
1038        XtSetValues( xmv_w[k_widget_draw], arglist, n );
1039        n = 0;
1040        XtSetArg( arglist[n], XmNbackground, pix_colour(PIXC_COL_BACKGROUND) );  n++;
1041        XtSetArg( arglist[n], XmNforeground, pix_colour(PIXC_COL_FOREGROUND) );  n++;
1042        XtSetValues( xmv_w[k_widget_single_draw], arglist, n );
1043        n = 0;
1044        XtSetArg( arglist[n], XmNbackground, pix_colour(PIXC_COL_BACKGROUND) );  n++;
1045        XtSetArg( arglist[n], XmNforeground, pix_colour(PIXC_COL_FOREGROUND) );  n++;
1046        XtSetValues( xmv_w[k_widget_pmwdw], arglist, n );
1047        n = 0;
1048        XtSetArg( arglist[n], XmNbackground, pix_colour(PIXC_COL_BACKGROUND) );  n++;
1049        XtSetArg( arglist[n], XmNforeground, pix_colour(PIXC_COL_FOREGROUND) );  n++;
1050        XtSetValues( xmv_w[k_widget_spctwdw], arglist, n );
1051        n = 0;
1052        XtSetArg( arglist[n], XmNbackground, pix_colour(PIXC_COL_BACKGROUND) );  n++;
1053        XtSetArg( arglist[n], XmNforeground, pix_colour(PIXC_COL_FOREGROUND) );  n++;
1054        XtSetValues( xmv_w[k_widget_calibwdw], arglist, n );
1055        n = 0;
1056        XtSetArg( arglist[n], XmNbackground, pix_colour(PIXC_COL_BACKGROUND) );  n++;
1057        XtSetArg( arglist[n], XmNforeground, pix_colour(PIXC_COL_FOREGROUND) );  n++;
1058        XtSetValues( xmv_w[k_widget_polwdw], arglist, n );
1059
1060        /* set phases according to cGpS_theo_phase_list */
1061        *str = ',';
1062        strncpy( str+1, GpGetString(cGpS_theo_phase_list), BC_LINELTH-2 );
1063        strcat( str, "," );
1064        i = 0;
1065        while  (xmv_thpname[i][0] != '\0')  {
1066                *tmpstr = ',';
1067                strcpy( tmpstr+1, xmv_thpname[i] );
1068                strcat( tmpstr, "," );
1069                if  (strstr(str,tmpstr) != NULL)
1070                        XmToggleButtonSetState( xmv_w[k_widget_theo_phase_P+i], TRUE, FALSE );
1071                i++;
1072        } /*endwhile*/
1073
1074        cl4_read_special_commands( xmv_w );
1075
1076        /* manage reference station */
1077        locstat = BC_NOERROR;
1078        cl4_read_refstation_list( xmv_w, &locstat );
1079        if  (Severe(&locstat))
1080                printf( "*SHM: error reading ref station list (%d) ***\n", locstat );
1081        /*
1082        cl4_read_refstation( 1, str, &locstat );
1083        if  (Severe(&locstat))
1084                printf( "*SHM: error reading ref station 1 (%d) ***\n", locstat );
1085        GpSetString( cGpS_refstation, str, NULL );
1086        */
1087
1088        *xmv_sortstr = '\0';
1089
1090        mg_init_tracedisplay( xmv_w[k_widget_draw], -1, -1,
1091                GpGetInt(cGpI_top_margin), -1 );
1092
1093        XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
1094        XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
1095        XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
1096        XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
1097        XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
1098        XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
1099        XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
1100        XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
1101        XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
1102
1103} /* end of xm_initialize */
1104
1105
1106
1107/*--------------------------------------------------------------------------*/
1108
1109
1110
1111static void xm_call_cmdexec( Widget widget, char *tag,
1112        XmCommandCallbackStruct *data )
1113
1114/* command execution
1115 */
1116{
1117        /* local variables */
1118#ifdef XXX
1119        char     cmdline[BC_LINELTH+1];    /* command line */
1120        unsigned slen;                     /* string length */
1121#endif
1122        char     *cmd;                     /* pointer to command line */
1123
1124        /* executable code */
1125
1126#ifdef XXX
1127        slen = data->length-9;
1128        strncpy( cmdline, (char *)data->value+9, slen );
1129        cmdline[slen] = '\0';
1130#endif
1131        XmStringGetLtoR( data->value, XmSTRING_DEFAULT_CHARSET, &cmd );
1132        mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, cmd );
1133        /* do I have to free cmd ??? */
1134
1135} /* end of xm_call_cmdexec */
1136
1137
1138
1139/*--------------------------------------------------------------------------*/
1140
1141
1142
1143static void xm_call_create_widget( Widget widget, int *tag,
1144        XmAnyCallbackStruct *data )
1145
1146/* Callback routine on creation of drawing area
1147 *
1148 * parameters of routine
1149 * Widget     widget;          input; widget number of drawing area
1150 * int        *tag;            input; widget number
1151 * XmAnyCallbackStruct *data;  input; not used here
1152 */
1153{
1154        /* local variables */
1155        int      wno = *tag;                 /* widget number */
1156        char     acttable[BC_LONGSTRLTH+1];  /* action table */
1157        XtTranslations new_table;            /* translated table */
1158        Arg      al[1];
1159#ifdef XXX
1160        Widget   w_crsr[3];                  /* cursor widgets */
1161#endif
1162
1163        /* executable code */
1164
1165        if  (wno >= XMC_MAXWIDGET || wno < 0)  {
1166                printf( "*SHM: illegal widget number\n" );
1167                return;
1168        } /*endif*/
1169
1170        /* printf( "[%d]", wno ); */
1171        xmv_w[wno] = widget;
1172
1173        switch (wno)  {
1174        case k_widget_draw:
1175                strcpy( acttable, "<Motion>: xm_action_motion()\n" );
1176                strcat( acttable, "<Btn1Down>: xm_action_motion()\n" );
1177                strcat( acttable, "<Btn1Up>: xm_action_motion()\n" );
1178                strcat( acttable, "<Btn2Down>: xm_action_motion()\n" );
1179                strcat( acttable, "<Btn2Up>: xm_action_motion()\n" );
1180                strcat( acttable, "<Btn3Down>: xm_action_motion()\n" );
1181                strcat( acttable, "<Btn3Up>: xm_action_motion()\n" );
1182                if  (GpGetBoolean(cGpB_own_accelerators))
1183                        strcat( acttable, "<KeyPress>: xm_action_motion()\n" );
1184                new_table = XtParseTranslationTable( acttable );
1185                XtOverrideTranslations( xmv_w[k_widget_draw], new_table );
1186                /*XtSetArg( al[0], XmNtranslations, new_table );
1187                XtSetValues( xmv_w[k_widget_draw], al, 1 );*/
1188                mg_init_tracedisplay( xmv_w[k_widget_draw], -1, -1,
1189                        GpGetInt(cGpI_top_margin), -1 );
1190                mg_add_cursor_widget( widget );
1191                /* I tried next line to enable accelerators, but had no success:
1192                XtInstallAllAccelerators( xmv_w[k_widget_draw],
1193                        xmv_w[k_widget_menu_main] ); */
1194                /*
1195                w_crsr[0] = xmv_w[k_widget_main];
1196                w_crsr[1] = xmv_w[k_widget_single_draw];
1197                w_crsr[2] = xmv_w[k_widget_spctwdw];
1198                mg_set_cursor_widgets( w_crsr, 3 );
1199                */
1200                break;
1201        case k_widget_single_draw:
1202                strcpy( acttable, "<Motion>: xm_action_motion()\n" );
1203                strcat( acttable, "<Btn1Down>: xm_action_motion()\n" );
1204                strcat( acttable, "<Btn1Up>: xm_action_motion()\n" );
1205                strcat( acttable, "<Btn2Down>: xm_action_motion()\n" );
1206                strcat( acttable, "<Btn2Up>: xm_action_motion()\n" );
1207                strcat( acttable, "<Btn3Down>: xm_action_motion()\n" );
1208                strcat( acttable, "<Btn3Up>: xm_action_motion()\n" );
1209                if  (GpGetBoolean(cGpB_own_accelerators))
1210                        strcat( acttable, "<KeyPress>: xm_action_motion()\n" );
1211                new_table = XtParseTranslationTable( acttable );
1212                /* XtOverrideTranslations( xmv_w[k_widget_single_draw], new_table ); */
1213                XtSetArg( al[0], XmNtranslations, new_table );
1214                XtSetValues( xmv_w[k_widget_single_draw], al, 1 );
1215                mg_add_cursor_widget( widget );
1216                /*
1217                w_crsr[0] = xmv_w[k_widget_main];
1218                w_crsr[1] = xmv_w[k_widget_single_draw];
1219                w_crsr[2] = xmv_w[k_widget_spctwdw];
1220                mg_set_cursor_widgets( w_crsr, 3 );
1221                */
1222                break;
1223        case k_widget_calibwdw:
1224                strcpy( acttable, "<Motion>: xm_action_motion()\n" );
1225                strcat( acttable, "<Btn1Down>: xm_action_motion()\n" );
1226                strcat( acttable, "<Btn1Up>: xm_action_motion()\n" );
1227                strcat( acttable, "<Btn2Down>: xm_action_motion()\n" );
1228                strcat( acttable, "<Btn2Up>: xm_action_motion()\n" );
1229                strcat( acttable, "<Btn3Down>: xm_action_motion()\n" );
1230                strcat( acttable, "<Btn3Up>: xm_action_motion()\n" );
1231                if  (GpGetBoolean(cGpB_own_accelerators))
1232                        strcat( acttable, "<KeyPress>: xm_action_motion()\n" );
1233                new_table = XtParseTranslationTable( acttable );
1234                /* XtOverrideTranslations( xmv_w[k_widget_calibwdw], new_table ); */
1235                XtSetArg( al[0], XmNtranslations, new_table );
1236                XtSetValues( xmv_w[k_widget_calibwdw], al, 1 );
1237                break;
1238        case k_widget_spctwdw:
1239                strcpy( acttable, "<Motion>: xm_action_motion()\n" );
1240                strcat( acttable, "<Btn1Down>: xm_action_motion()\n" );
1241                strcat( acttable, "<Btn1Up>: xm_action_motion()\n" );
1242                strcat( acttable, "<Btn2Down>: xm_action_motion()\n" );
1243                strcat( acttable, "<Btn2Up>: xm_action_motion()\n" );
1244                strcat( acttable, "<Btn3Down>: xm_action_motion()\n" );
1245                strcat( acttable, "<Btn3Up>: xm_action_motion()\n" );
1246                if  (GpGetBoolean(cGpB_own_accelerators))
1247                        strcat( acttable, "<KeyPress>: xm_action_motion()\n" );
1248                new_table = XtParseTranslationTable( acttable );
1249                /* XtOverrideTranslations( xmv_w[k_widget_spctwdw], new_table ); */
1250                XtSetArg( al[0], XmNtranslations, new_table );
1251                XtSetValues( xmv_w[k_widget_spctwdw], al, 1 );
1252                /* mg_add_cursor_widget( widget ); */ /* this crashes the program */
1253                break;
1254        case k_widget_alert_box:
1255                cu_set_alert_widget( widget );
1256                break;
1257        case k_widget_polwdw:
1258                strcpy( acttable, "<Motion>: xm_action_motion()\n" );
1259                strcat( acttable, "<Btn1Down>: xm_action_motion()\n" );
1260                strcat( acttable, "<Btn1Up>: xm_action_motion()\n" );
1261                strcat( acttable, "<Btn2Down>: xm_action_motion()\n" );
1262                strcat( acttable, "<Btn2Up>: xm_action_motion()\n" );
1263                strcat( acttable, "<Btn3Down>: xm_action_motion()\n" );
1264                strcat( acttable, "<Btn3Up>: xm_action_motion()\n" );
1265                if  (GpGetBoolean(cGpB_own_accelerators))
1266                        strcat( acttable, "<KeyPress>: xm_action_motion()\n" );
1267                new_table = XtParseTranslationTable( acttable );
1268                /* XtOverrideTranslations( xmv_w[k_widget_spctwdw], new_table ); */
1269                XtSetArg( al[0], XmNtranslations, new_table );
1270                XtSetValues( xmv_w[k_widget_polwdw], al, 1 );
1271                break;
1272        case k_widget_multiplication_box:
1273        case k_widget_multipli_edit_text:
1274        case k_widget_multipli_value_label:
1275                if  (xmv_w[k_widget_multiplication_box] != 0 &&
1276                        xmv_w[k_widget_multipli_edit_text] != 0 &&
1277                        xmv_w[k_widget_multipli_value_label] != 0)
1278                        cu_set_multiplication_widget(
1279                                xmv_w[k_widget_multiplication_box],
1280                                xmv_w[k_widget_multipli_value_label],
1281                                xmv_w[k_widget_multipli_edit_text] );
1282                break;
1283        } /*endswitch*/
1284
1285} /* end of xm_call_create_widget */
1286
1287
1288
1289/*--------------------------------------------------------------------------*/
1290
1291
1292
1293static void xm_call_expose_drawingarea( Widget widget, char *tag,
1294        XmDrawingAreaCallbackStruct *data )
1295
1296/* Callback routine on creation of drawing area
1297 *
1298 * parameters of routine
1299 * Widget     widget;          input; widget number of drawing area
1300 * char       *tag;            input; not used here
1301 * XmDrawingAreaCallbackStruct *data;  input;
1302 */
1303{
1304#ifdef XXX
1305        /* executable code, old version */
1306        static int cnt;
1307        STATUS status=0;
1308
1309        if  (widget != xmv_w[k_widget_draw])  return;
1310        if  (data->reason != XmCR_EXPOSE)  return;
1311        if  (GpGetInt(cGpI_debug_level) > 1)
1312                printf( "SHM-dbg2: expose called %d\n", ++cnt );
1313        mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &status );
1314        if  (status != BC_NOERROR)
1315                printf( "*SHM: tracedisplay: return status %d\n", status );
1316#endif
1317
1318        /* local variables */
1319
1320        /* executable code */
1321
1322        if  (data->reason != XmCR_EXPOSE)  return;
1323        pix_manage_exposure( &(data->event->xexpose) );
1324
1325} /* end of xm_call_expose_drawingarea */
1326
1327
1328
1329/*--------------------------------------------------------------------------*/
1330
1331
1332
1333static void xm_call_resize_object( Widget widget, int *tag,
1334        XmAnyCallbackStruct *data )
1335
1336/* Callback routine on creation of drawing area
1337 *
1338 * parameters of routine
1339 * Widget     widget;          input; widget number of drawin area
1340 * int        *tag;            input; tag entry
1341 * XmAnyCallbackStruct *data;  input;
1342 */
1343{
1344        /* local variables */
1345        static int   cnt;
1346        STATUS       status=0;
1347
1348        /* executable code */
1349
1350        switch (*tag)  {
1351        case k_widget_main:
1352                if  (GpGetInt(cGpI_debug_level) > 1)
1353                        printf( "SHM-dbg2: main window resized\n" );
1354                break;
1355        case k_widget_draw:
1356                if  (xmv_prevent_resize > 0)  {
1357                        xmv_prevent_resize--;
1358                        break;
1359                } /*endif*/
1360                if  (xmv_xt_initialized)  {
1361#ifdef XXX
1362                        /* try to set size of single trace window */
1363                        {
1364                                /* local variables */
1365                                int    n;               /* number of arguments */
1366                                Arg    arglist[3];      /* argument list */
1367                                Window root_ret;        /* root window */
1368                                int    wx, wy;          /* window position */
1369                                unsigned bw, dp;        /* border, depth */
1370                                unsigned ww, wh;        /* window width and height */
1371                                /* executable code */
1372                                XGetGeometry( XtDisplay(xmv_w[k_widget_draw]),
1373                                        XtWindow(xmv_w[k_widget_draw]), &root_ret,
1374                                        &wx, &wy, &ww, &wh, &bw, &dp );
1375                                n = 0;
1376                                XtSetArg( arglist[n], XmNwidth, ww );  n++;
1377                                XtSetValues( xmv_w[k_widget_single_draw], arglist, 1 );
1378                        }
1379#endif
1380                        mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &status );
1381                        if  (status != BC_NOERROR)
1382                                printf( "*SHM: tracedisplay: return status %d\n", status );
1383                } /*endif*/
1384                break;
1385        case k_widget_single_draw:
1386                /*printf( "*SHM: resize_object k_widget_single_draw\n" );*/
1387                break;
1388        case k_widget_spctwdw:
1389                spc_change_display( cSpcResized, &status );
1390                break;
1391        case k_widget_pmwdw:
1392                /*pmm_change_display( cSpcResized, &status );*/
1393                break;
1394        case k_widget_polwdw:
1395                break;
1396        default:
1397                printf( "*SHM: resize_object: this cannot happen\n" );
1398        } /*endswitch*/
1399
1400} /* end of xm_call_resize_object */
1401
1402
1403
1404/*--------------------------------------------------------------------------*/
1405
1406
1407
1408static void xm_call_activate( Widget widget, int *tag,
1409        XmToggleButtonCallbackStruct *data )
1410
1411/* Callback routine on button selection
1412 *
1413 * parameters of routine
1414 * Widget     widget;          input; widget number of drawing area
1415 * int        *tag;            input; tag entry
1416 * XmPushButtonCallbackStruct *data;  input;
1417 */
1418{
1419        /* local variables */
1420        static int  filter_mode=CLC_CREFIL_NONE;  /* flag for filter creation */
1421        static BOOLEAN fk_unit_deg=TRUE; /* fk distance unit */
1422        static char    autoevt[BC_FILELTH+1]="";  /* evt-file automatically read in */
1423        STATUS   status;                 /* return status */
1424        long     bit;                    /* station bit */
1425        char     *str;                   /* string pointer */
1426        char     timestr[BC_LINELTH+1];  /* time string */
1427        BOOLEAN  ok;                     /* return flag */
1428        int      i;                      /* counter */
1429        char     tmpstr[BC_LINELTH+1];   /* scratch string */
1430        char     cmd[BC_LONGSTRLTH+1];   /* shell command */
1431        BOOLEAN  is_readnew;             /* is ReadNew, not ReadAgain */
1432        long     eventid;                /* event ID for evt recovery */
1433
1434        /* executable code */
1435
1436        xmh_log_action( NULL, *tag );
1437
1438        status = BC_NOERROR;
1439        is_readnew = FALSE;
1440
1441        /* XtSetSensitive( xmv_w[k_widget_main], FALSE ); */
1442        mg_set_cursor( MGC_XCRSR_BUSY );
1443
1444        switch  (*tag)  {
1445        case k_button_read_grsn_readnew:
1446                if  (xmv_par.state == CUC_PARSTATE_PROCESS)  {
1447                        status = CUE_SAVE_FIRST;
1448                        break;
1449                } /*endif*/
1450                xm_set_processing_state( CUC_PARSTATE_INITIAL );
1451                is_readnew = TRUE;
1452                PiClearAllPhases();
1453                cu_reset_phase( &xmv_phase );
1454                strcpy( xmv_phase.name, GpGetString(cGpS_auto_phase) );
1455                cu_phase_box_defaults( xmv_w, &xmv_phase );
1456                xmv_cmd_filter.autocut = 5.0;  /* shv_globals not yet implemented */
1457                strcpy( xmv_cmd_filter.name, GpGetString(cGpS_default_filter) );
1458                mx_filter_box_defaults( xmv_w, &xmv_cmd_filter );
1459                xmv_dspctrl.zoom = 1.0;
1460                mx_clear_rotation();
1461                *xmv_sortstr = '\0';
1462                *xmv_sortinfo = '\0';
1463        case k_button_read_grsn_read:
1464                xmv_phasetrc = NULL;
1465                cl3_save_parameters( CUC_SAVEMODE_INC, xmv_cpar, &status );
1466                status = BC_NOERROR;
1467                str = cu_get_string( xmv_w[k_widget_read_grsn_date] );
1468                strcpy( xmv_cmd_readg.start, str );
1469                strcat( xmv_cmd_readg.start, "_" );
1470                str = cu_get_string( xmv_w[k_widget_read_grsn_time] );
1471                strcat( xmv_cmd_readg.start, str );
1472                str = cu_get_string( xmv_w[k_widget_read_grsn_length] );
1473                if  (sscanf(str,"%f",&xmv_cmd_readg.seclth) != 1)  {
1474                        printf( "*SHM: length conversion error\n" );
1475                        break;
1476                } /*endif*/
1477                mx_get_chanlist( xmv_w, &xmv_cmd_readg );
1478                str = cu_get_string( xmv_w[k_widget_read_grsn_device] );
1479                strcpy( xmv_cmd_readg.device, str );
1480                xmv_cmd_readg.seclth *= 60.0;
1481                xmv_cmd_readg.format = MXC_FORMAT_SEED;
1482                if  (XtIsManaged(xmv_w[k_widget_read_grsn]))
1483                        XtUnmanageChild( xmv_w[k_widget_read_grsn] );
1484                /* mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "nr" ); */
1485                mg_disable_redraw( TRUE );
1486                mg_print_filter( xmv_w[k_widget_draw], "" );
1487                cl2_display_busy( xmv_w, TRUE );
1488                mx_readg( &xmv_cmd_readg, xmv_w[k_widget_draw],
1489                        xmv_w[k_widget_single_draw], &xmv_dspctrl,
1490                        *tag==k_button_read_grsn_read, autoevt, &status );
1491                if  (Severe(&status))  {
1492                        cl2_display_busy( xmv_w, FALSE );
1493                        if  (GpGetInt(cGpI_debug_level) > 3)
1494                                printf( "SHM-dbg4: read aborted, status %d\n", status );
1495                        break;
1496                } else if  (mg_dsptrcs() == 0)  {
1497                        status = CUE_NO_TRACES;
1498                        cl2_display_busy( xmv_w, FALSE );
1499                        if  (GpGetInt(cGpI_debug_level) > 3)
1500                                printf( "SHM-dbg4: no traces read, status %d\n", status );
1501                        break;
1502                } /*endif*/
1503                if  (*tag == k_button_read_grsn_readnew)  {
1504                        if  (GpGetBoolean(cGpB_autofilter_by_distance))  {
1505                                mx_filter_from_autoevt( autoevt, xmv_cmd_filter.name,
1506                                        &xmv_cmd_filter.autocut );
1507                                if  (*xmv_cmd_filter.name == '\0')  {
1508                                        xmv_cmd_filter.autocut = 5.0;  /* shv_globals not yet implemented */
1509                                        strcpy( xmv_cmd_filter.name, GpGetString(cGpS_default_filter) );
1510                                } /*endif*/
1511                                if  (strcmp(xmv_cmd_filter.name,"BUT_BP") == 0)  {
1512                                        cl_create_filter( xmv_w, CLC_CREFIL_BUT_BP, &status );
1513                                        if  (Severe(&status))  {
1514                                                cl2_display_busy( xmv_w, FALSE );
1515                                                break;
1516                                        } /*endif*/
1517                                        strcpy( xmv_cmd_filter.name, cu_get_string(
1518                                                xmv_w[k_widget_filter_edit_text]) );
1519                                } /*endif*/
1520                        } else {
1521                                if  (strcmp(GpGetString(cGpS_default_filter),"BUT_BP") == 0
1522                                        && *tag == k_button_read_grsn_readnew)  {
1523                                        cl_create_filter( xmv_w, CLC_CREFIL_BUT_BP, &status );
1524                                        if  (Severe(&status))  {
1525                                                cl2_display_busy( xmv_w, FALSE );
1526                                                break;
1527                                        } /*endif*/
1528                                        strcpy( xmv_cmd_filter.name, cu_get_string(
1529                                                xmv_w[k_widget_filter_edit_text]) );
1530                                } else {
1531                                        xmv_cmd_filter.autocut = 5.0;  /* shv_globals not yet implemented */
1532                                        strcpy( xmv_cmd_filter.name, GpGetString(cGpS_default_filter) );
1533                                } /*endif*/
1534                        } /*endif*/
1535                } /*endif*/
1536                if  (xmv_cmd_filter.name[0] != '\0')  {
1537                        mg_print_busy( xmv_w[k_widget_draw], TRUE );
1538                        mx_filter( &xmv_cmd_filter, xmv_w[k_widget_draw],
1539                                &xmv_dspctrl, &status );
1540                        mg_print_filter( xmv_w[k_widget_draw], xmv_cmd_filter.name );
1541                        if  (Severe(&status))  {
1542                                cl2_display_busy( xmv_w, FALSE );
1543                                break;
1544                        } /*endif*/
1545                } /*endif*/
1546                /* mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "rd" ); */
1547                if  (*tag == k_button_read_grsn_readnew)  {
1548                        cu_reset_phase( &xmv_phase );
1549                        cu_reset_paramsets( &xmv_par );
1550                        xmv_cpar = xmv_par.par;
1551                        xmv_cpar->soft_change = TRUE;
1552                        cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
1553                        xmv_cpar->soft_change = FALSE;
1554                        cl2_param_box_defaults( xmv_w, xmv_cpar /*, &xmv_dspctrl*/ );
1555                } /*endif*/
1556                if  (mx_need_rotation())
1557                        mx_rotation( xmv_w[k_widget_draw], &xmv_dspctrl,
1558                                xmv_cpar->b_azimuth, xmv_cpar->source_lat,
1559                                xmv_cpar->source_lon, &status );
1560                if  (*xmv_sortstr != '\0')  {
1561                        cl4_sort_traces( xmv_w[k_widget_draw], &xmv_dspctrl, xmv_sortstr,
1562                                xmv_cpar, &status );
1563                        mg_print_sortinfo( xmv_w[k_widget_draw], xmv_sortinfo );
1564                } /*endif*/
1565                if  (*tag == k_button_read_grsn_read)  {
1566                        mg_print_lastcmd( xmv_w[k_widget_draw], "Read Again" );
1567                } else {
1568                        mg_print_lastcmd( xmv_w[k_widget_draw], "Read New" );
1569                } /*endif*/
1570                if  (*autoevt != '\0' && *tag == k_button_read_grsn_readnew)  {
1571                        i = strlen( autoevt );
1572                        if  (i > 5 && strcmp(autoevt+i-4,".evt") == 0)  {
1573                                if  (GpGetInt(cGpI_debug_level) > 1)
1574                                        printf( "SHM-dbg2: restore evt from %s\n", autoevt );
1575                                /*cu_delete_all_phases( xmv_w[k_widget_draw],
1576                                        xmv_w[k_widget_single_draw], "*", TRUE );*/
1577                                cl3_restore_from_evt( autoevt, xmv_cpar, &eventid, TRUE,
1578                                        &status );
1579                                if  (Severe(&status))  {
1580                                        cu_alert( status );
1581                                        status = cBcNoError;
1582                                } /*endif*/
1583                                if  (GpGetBoolean(cGpB_recover_evid))  xmv_par.evid = eventid;
1584                                xmv_cpar->soft_change = TRUE;
1585                                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
1586                                xmv_cpar->soft_change = FALSE;
1587                                /*mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &status );*/
1588                        } /*endif*/
1589                        /* sort by distance automatically if requested */
1590                        if  (GpGetBoolean(cGpB_autosort_by_distance))  {
1591                                if  (GpGetInt(cGpI_debug_level) > 3)
1592                                        printf( "SHM-dbg4: auto sort by distance\n" );
1593                                strcpy( xmv_sortstr, "DISTANCE" );
1594                                strcpy( xmv_sortinfo, "sort:d" );
1595                                /*cu_get_param_values( xmv_w, xmv_cpar );*/
1596                                cl4_sort_traces( xmv_w[k_widget_draw], &xmv_dspctrl, xmv_sortstr,
1597                                        xmv_cpar, &status );
1598                                if  (Severe(&status))  {
1599                                        cu_alert( status );
1600                                        status = cBcNoError;
1601                                } /*endif*/
1602                                mg_print_sortinfo( xmv_w[k_widget_draw], xmv_sortinfo );
1603                        } /*endif*/
1604                } /*endif*/
1605                cl2_display_busy( xmv_w, FALSE );
1606                mg_disable_redraw( FALSE );
1607                mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &status );
1608                /* reset 'Keep Traces' if automatic is switched on */
1609                if  (xmv_keeptrc_auto)  {
1610                        xmv_cmd_readg.keep = FALSE;
1611                        xmv_keeptrc_auto = FALSE;
1612                        XmToggleButtonSetState( xmv_w[k_widget_read_grsn_keep], FALSE, FALSE );
1613                } /*endif*/
1614                if  (is_readnew)
1615                        cl3_call_extproc( CL3C_PLUGIN_INIPROC, xmv_w, &xmv_dspctrl, &xmv_par,
1616                                &xmv_phase, &status );
1617                break;
1618#ifdef XXX
1619        case k_button_read_grsn_request:
1620                if  (XtIsManaged(xmv_w[k_widget_read_grsn]))
1621                        XtUnmanageChild( xmv_w[k_widget_read_grsn] );
1622                XmUpdateDisplay( xmv_appshell );
1623                cl2_display_busy( xmv_w, TRUE );
1624                mg_print_lastcmd( xmv_w[k_widget_draw], "Request" );
1625                cl4_request_data( xmv_w, &xmv_cmd_readg, &status );
1626                cl2_display_busy( xmv_w, FALSE );
1627                if  (status == BC_NOERROR)
1628                        xm_read_requested_data( xmv_w, &status );
1629                break;
1630#endif
1631        case k_button_read_grsn_cancel:
1632                if  (XtIsManaged(xmv_w[k_widget_read_grsn]))
1633                        XtUnmanageChild( xmv_w[k_widget_read_grsn] );
1634                mg_print_lastcmd( xmv_w[k_widget_draw], "Read Cancelled" );
1635                break;
1636        case k_button_read_grsn_reset:
1637                cl3_readbox_reset( xmv_w, &xmv_cmd_readg.sl );
1638                break;
1639        case k_button_read_grsn_invhdr:
1640                xmv_cmd_readg.reads_invhdr = !xmv_cmd_readg.reads_invhdr;
1641                break;
1642        case k_button_read_grsn_1hz:
1643                mx_get_chanlist( xmv_w, &xmv_cmd_readg );
1644                break;
1645        case k_button_read_grsn_20hz:
1646                mx_get_chanlist( xmv_w, &xmv_cmd_readg );
1647                break;
1648        case k_button_read_grsn_80hz:
1649                mx_get_chanlist( xmv_w, &xmv_cmd_readg );
1650                break;
1651        case k_button_read_grsn_edit_hz:
1652                mx_get_chanlist( xmv_w, &xmv_cmd_readg );
1653                break;
1654        case k_button_read_grsn_station+0:
1655        case k_button_read_grsn_station+1:
1656        case k_button_read_grsn_station+2:
1657        case k_button_read_grsn_station+3:
1658        case k_button_read_grsn_station+4:
1659        case k_button_read_grsn_station+5:
1660        case k_button_read_grsn_station+6:
1661        case k_button_read_grsn_station+7:
1662        case k_button_read_grsn_station+8:
1663        case k_button_read_grsn_station+9:
1664        case k_button_read_grsn_station+10:
1665        case k_button_read_grsn_station+11:
1666        case k_button_read_grsn_station+12:
1667        case k_button_read_grsn_station+13:
1668        case k_button_read_grsn_station+14:
1669        case k_button_read_grsn_station+15:
1670        case k_button_read_grsn_station+16:
1671        case k_button_read_grsn_station+17:
1672        case k_button_read_grsn_station+18:
1673        case k_button_read_grsn_station+19:
1674        case k_button_read_grsn_station+20:
1675        case k_button_read_grsn_station+21:
1676        case k_button_read_grsn_station+22:
1677        case k_button_read_grsn_station+23:
1678        case k_button_read_grsn_station+24:
1679        case k_button_read_grsn_station+25:
1680        case k_button_read_grsn_station+26:
1681        case k_button_read_grsn_station+27:
1682        case k_button_read_grsn_station+28:
1683        case k_button_read_grsn_station+29:
1684                bit = 1 << (*tag - k_button_read_grsn_station);
1685                if  (data == NULL)  {
1686                        xmv_cmd_readg.stations |= bit;
1687                } else if  (data->set)  {
1688                        xmv_cmd_readg.stations |= bit;
1689                } else {
1690                        xmv_cmd_readg.stations &= ~bit;
1691                } /*endif*/
1692                break;
1693        case k_button_read_grsn_grf:
1694                if  (data->set)  {
1695                        for  (bit=xmv_cmd_readg.sl.set1start;
1696                                bit<=xmv_cmd_readg.sl.set1end; bit++)  {
1697                                if  (xmv_cmd_readg.sl.code[bit][0] != '-')  {
1698                                        xmv_cmd_readg.stations |= (1<<bit);
1699                                        XmToggleButtonSetState(
1700                                                xmv_w[k_widget_read_grsn_station+bit], TRUE, FALSE );
1701                                } /*endif*/
1702                        } /*endfor*/
1703                } else {
1704                        for  (bit=xmv_cmd_readg.sl.set1start;
1705                                bit<=xmv_cmd_readg.sl.set1end; bit++)  {
1706                                if  (xmv_cmd_readg.sl.code[bit][0] != '-')  {
1707                                        xmv_cmd_readg.stations &= ~(1<<bit);
1708                                        XmToggleButtonSetState(
1709                                                xmv_w[k_widget_read_grsn_station+bit], FALSE, FALSE );
1710                                } /*endif*/
1711                        } /*endfor*/
1712                } /*endif*/
1713                break;
1714        case k_button_read_grsn_grsn:
1715                if  (data->set)  {
1716                        for  (bit=xmv_cmd_readg.sl.set2start;
1717                                bit<=xmv_cmd_readg.sl.set2end; bit++)  {
1718                                if  (xmv_cmd_readg.sl.code[bit][0] != '-')  {
1719                                        xmv_cmd_readg.stations |= (1<<bit);
1720                                        XmToggleButtonSetState(
1721                                                xmv_w[k_widget_read_grsn_station+bit], TRUE, FALSE );
1722                                } /*endif*/
1723                        } /*endfor*/
1724                } else {
1725                        for  (bit=xmv_cmd_readg.sl.set2start;
1726                                bit<=xmv_cmd_readg.sl.set2end; bit++)  {
1727                                if  (xmv_cmd_readg.sl.code[bit][0] != '-')  {
1728                                        xmv_cmd_readg.stations &= ~(1<<bit);
1729                                        XmToggleButtonSetState(
1730                                                xmv_w[k_widget_read_grsn_station+bit], FALSE, FALSE );
1731                                } /*endif*/
1732                        } /*endfor*/
1733                } /*endif*/
1734                break;
1735        case k_button_read_grsn_all:
1736                cl4_select_all_possible_stations( xmv_w, &xmv_cmd_readg, &status );
1737                break;
1738        case k_button_read_grsn_comp_z:
1739        case k_button_read_grsn_comp_n:
1740        case k_button_read_grsn_comp_e:
1741        case k_button_read_grsn_comp_edit:
1742                xmv_cmd_readg.comp[0] ='\0';
1743                if  (XmToggleButtonGetState(xmv_w[k_widget_read_grsn_comp_z]))
1744                        strcat( xmv_cmd_readg.comp, "Z" );
1745                if  (XmToggleButtonGetState(xmv_w[k_widget_read_grsn_comp_n]))
1746                        strcat( xmv_cmd_readg.comp, "N" );
1747                if  (XmToggleButtonGetState(xmv_w[k_widget_read_grsn_comp_e]))
1748                        strcat( xmv_cmd_readg.comp, "E" );
1749                if  (XmToggleButtonGetState(xmv_w[k_widget_read_grsn_comp_edit]))
1750                        if  (strlen(xmv_cmd_readg.comp)
1751                                +strlen(cu_get_string(xmv_w[k_widget_read_grsn_comp_text]))
1752                                < MXC_COMP_STRLTH)
1753                                strcat( xmv_cmd_readg.comp,
1754                                        cu_get_string(xmv_w[k_widget_read_grsn_comp_text]) );
1755                break;
1756        case k_button_read_grsn_secup:
1757                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1758                        xmv_w[k_widget_read_grsn_time], 10.0, &status );
1759                break;
1760        case k_button_read_grsn_secdn:
1761                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1762                        xmv_w[k_widget_read_grsn_time], -10.0, &status );
1763                break;
1764        case k_button_read_grsn_minup:
1765                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1766                        xmv_w[k_widget_read_grsn_time], 60.0, &status );
1767                break;
1768        case k_button_read_grsn_mindn:
1769                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1770                        xmv_w[k_widget_read_grsn_time], -60.0, &status );
1771                break;
1772        case k_button_read_grsn_hourup:
1773                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1774                        xmv_w[k_widget_read_grsn_time], 3600.0, &status );
1775                break;
1776        case k_button_read_grsn_hourdn:
1777                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1778                        xmv_w[k_widget_read_grsn_time], -3600.0, &status );
1779                break;
1780        case k_button_read_grsn_dayup:
1781                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1782                        xmv_w[k_widget_read_grsn_time], 86400.0, &status );
1783                break;
1784        case k_button_read_grsn_daydn:
1785                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1786                        xmv_w[k_widget_read_grsn_time], -86400.0, &status );
1787                break;
1788        case k_button_read_grsn_monthup:
1789                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1790                        xmv_w[k_widget_read_grsn_time], CUC_MONTH_INC, &status);
1791                break;
1792        case k_button_read_grsn_monthdn:
1793                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1794                        xmv_w[k_widget_read_grsn_time], CUC_MONTH_DEC, &status);
1795                break;
1796        case k_button_read_grsn_yearup:
1797                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1798                        xmv_w[k_widget_read_grsn_time], CUC_YEAR_INC, &status );
1799                break;
1800        case k_button_read_grsn_yeardn:
1801                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1802                        xmv_w[k_widget_read_grsn_time], CUC_YEAR_DEC, &status );
1803                break;
1804        case k_button_read_grsn_nexttime:
1805                cu_set_read_time_file( xmv_w, CUC_LIST_NEXT, autoevt, xmv_detecinfo,
1806                        &status );
1807                mg_print_detecinfo( xmv_w[k_widget_draw], xmv_detecinfo );
1808                break;
1809        case k_button_read_grsn_resettime:
1810                cu_set_read_time_file( xmv_w, CUC_LIST_RESET, autoevt, xmv_detecinfo,
1811                        &status );
1812                mg_print_detecinfo( xmv_w[k_widget_draw], xmv_detecinfo );
1813                break;
1814        case k_button_read_grsn_prevtime:
1815                cu_set_read_time_file( xmv_w, CUC_LIST_PREV, autoevt, xmv_detecinfo,
1816                        &status );
1817                mg_print_detecinfo( xmv_w[k_widget_draw], xmv_detecinfo );
1818                break;
1819        case k_button_read_grsn_keep:
1820                xmv_cmd_readg.keep = data->set;
1821                break;
1822        case k_button_read_grsn_eventfile:
1823                cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_EVENTS, &status );
1824                break;
1825        case k_button_read_grsn_device:
1826                if  (XmToggleButtonGetState(xmv_w[k_widget_read_grsn_fbox]))
1827                        cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_SFD, &status );
1828                break;
1829        case k_button_read_grsn_todaysfd:
1830                cl4_manage_sfdfile( xmv_w, &xmv_cmd_readg );
1831                break;
1832        case k_button_read_grsn_nextdiag:
1833                cu_next_read_dialog( xmv_w );
1834                break;
1835        case k_button_phase_dismiss:
1836                if  (XtIsManaged(xmv_w[k_widget_phase_box]))
1837                        XtUnmanageChild( xmv_w[k_widget_phase_box] );
1838                break;
1839        case k_button_phase_ok:
1840                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
1841                        &status );
1842                cu_rename_phase( xmv_w );
1843                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
1844                        &status );
1845                break;
1846        case k_button_phase_delete:
1847#               ifdef XXX
1848                mg_delete_phase( &xmv_phase, &ok );
1849                if  (ok)  {
1850                        mg_mark_one_phase( xmv_w[k_widget_draw],
1851                                xmv_w[k_widget_single_draw], &xmv_phase,
1852                                xmv_onset_acc==CUC_ACCURACY_DISPLAY );
1853                        xmv_phase.name[0] = '\0';
1854                } /*endif*/
1855#               endif
1856                cu_delete_all_phases( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
1857                        cu_get_string(xmv_w[k_widget_phase_name_text]), TRUE );
1858                break;
1859        case k_button_phase_sign_p:
1860                if  (data->set)  xmv_phase.sign = 1;
1861                break;
1862        case k_button_phase_sign_m:
1863                if  (data->set)  xmv_phase.sign = -1;
1864                break;
1865        case k_button_phase_sign_0:
1866                if  (data->set)  xmv_phase.sign = 0;
1867                break;
1868        case k_button_phase_spec_e:
1869                if  (data->set)  xmv_phase.spec = cPiSpecEmergent;
1870                break;
1871        case k_button_phase_spec_i:
1872                if  (data->set)  xmv_phase.spec = cPiSpecImpulsive;
1873                break;
1874        case k_button_phase_reliab_yes:
1875                if  (data->set)  xmv_phase.reliable = TRUE;
1876                break;
1877        case k_button_phase_reliab_no:
1878                if  (data->set)  xmv_phase.reliable = FALSE;
1879                break;
1880        case k_button_phase_name_b:
1881                cu_set_string( xmv_w[k_widget_phase_name_text], "beam" );
1882                break;
1883        case k_button_phase_name_Pn:
1884                cu_set_string( xmv_w[k_widget_phase_name_text], "Pn" );
1885                break;
1886        case k_button_phase_name_Pg:
1887                cu_set_string( xmv_w[k_widget_phase_name_text], "Pg" );
1888                break;
1889        case k_button_phase_name_Sn:
1890                cu_set_string( xmv_w[k_widget_phase_name_text], "Sn" );
1891                break;
1892        case k_button_phase_name_Sg:
1893                cu_set_string( xmv_w[k_widget_phase_name_text], "Sg" );
1894                break;
1895        case k_button_phase_name_Lg:
1896                cu_set_string( xmv_w[k_widget_phase_name_text], "Lg" );
1897                break;
1898        case k_button_phase_name_Rg:
1899                cu_set_string( xmv_w[k_widget_phase_name_text], "Rg" );
1900                break;
1901        case k_button_phase_name_P:
1902                cu_set_string( xmv_w[k_widget_phase_name_text], "P" );
1903                break;
1904        case k_button_phase_name_pP:
1905                cu_set_string( xmv_w[k_widget_phase_name_text], "pP" );
1906                break;
1907        case k_button_phase_name_sP:
1908                cu_set_string( xmv_w[k_widget_phase_name_text], "sP" );
1909                break;
1910        case k_button_phase_name_PKPdf:
1911                cu_set_string( xmv_w[k_widget_phase_name_text], "PKPdf" );
1912                break;
1913        case k_button_phase_name_PKPbc:
1914                cu_set_string( xmv_w[k_widget_phase_name_text], "PKPbc" );
1915                break;
1916        case k_button_phase_name_PKPab:
1917                cu_set_string( xmv_w[k_widget_phase_name_text], "PKPab" );
1918                break;
1919        case k_button_phase_name_pPKPdf:
1920                cu_set_string( xmv_w[k_widget_phase_name_text], "pPKPdf" );
1921                break;
1922        case k_button_phase_name_pPKPbc:
1923                cu_set_string( xmv_w[k_widget_phase_name_text], "pPKPbc" );
1924                break;
1925        case k_button_phase_name_pPKPab:
1926                cu_set_string( xmv_w[k_widget_phase_name_text], "pPKPab" );
1927                break;
1928        case k_button_phase_name_PKP:
1929                cu_set_string( xmv_w[k_widget_phase_name_text], "PKP" );
1930                break;
1931        case k_button_phase_name_PP:
1932                cu_set_string( xmv_w[k_widget_phase_name_text], "PP" );
1933                break;
1934        case k_button_phase_name_pPP:
1935                cu_set_string( xmv_w[k_widget_phase_name_text], "pPP" );
1936                break;
1937        case k_button_phase_name_S:
1938                cu_set_string( xmv_w[k_widget_phase_name_text], "S" );
1939                break;
1940        case k_button_phase_name_SKS:
1941                cu_set_string( xmv_w[k_widget_phase_name_text], "SKS" );
1942                break;
1943        case k_button_phase_name_PKKP:
1944                cu_set_string( xmv_w[k_widget_phase_name_text], "PKKP" );
1945                break;
1946        case k_button_phase_name_PKPPKP:
1947                cu_set_string( xmv_w[k_widget_phase_name_text], "PKPPKP" );
1948                break;
1949        case k_button_phase_name_PcP:
1950                cu_set_string( xmv_w[k_widget_phase_name_text], "PcP" );
1951                break;
1952        case k_button_phase_name_L:
1953                cu_set_string( xmv_w[k_widget_phase_name_text], CUC_LP_PHASE_NAME );
1954                break;
1955        case k_button_phase_name_X:
1956                cu_set_string( xmv_w[k_widget_phase_name_text], "X" );
1957                break;
1958        case k_button_phase_qual_0:
1959        case k_button_phase_qual_1:
1960        case k_button_phase_qual_2:
1961        case k_button_phase_qual_3:
1962        case k_button_phase_qual_4:
1963        case k_button_phase_qual_5:
1964        case k_button_phase_qual_6:
1965        case k_button_phase_qual_7:
1966        case k_button_phase_qual_8:
1967        case k_button_phase_qual_9:
1968                xmv_phase.quality = (*tag) - k_button_phase_qual_0;
1969                xmv_phase.weight = cu_quality2weight( xmv_phase.quality );
1970                break;
1971        case k_button_phase_acc_none:
1972                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
1973                        &status );
1974                xmv_onset_acc = CUC_ACCURACY_NONE;
1975                xmv_dspctrl.show_phase_acc = FALSE;
1976                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
1977                        &status );
1978                break;
1979        case k_button_phase_acc_query:
1980                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
1981                        &status );
1982                xmv_onset_acc = CUC_ACCURACY_QUERY;
1983                xmv_dspctrl.show_phase_acc = FALSE;
1984                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
1985                        &status );
1986                break;
1987        case k_button_phase_acc_display:
1988                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
1989                        &status );
1990                xmv_onset_acc = CUC_ACCURACY_DISPLAY;
1991                xmv_dspctrl.show_phase_acc = TRUE;
1992                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
1993                        &status );
1994                break;
1995        case k_button_param_dismiss:
1996                if  (XtIsManaged(xmv_w[k_widget_param_box]))
1997                        XtUnmanageChild( xmv_w[k_widget_param_box] );
1998                break;
1999        case k_button_param_hypoloc:
2000                /*
2001                mg_print_lastcmd( xmv_w[k_widget_draw], "Hypoellipse Box" );
2002                if  (!XtIsManaged(xmv_w[k_widget_hypoellipse_box]))
2003                        XtManageChild( xmv_w[k_widget_hypoellipse_box] );
2004                break;
2005                */
2006        case k_button_hypo_ok:
2007                /*
2008                if  (XtIsManaged(xmv_w[k_widget_hypoellipse_box]))
2009                        XtUnmanageChild( xmv_w[k_widget_hypoellipse_box] );
2010                */
2011                XmUpdateDisplay( xmv_appshell );
2012                mg_print_lastcmd( xmv_w[k_widget_draw], "Locate External" );
2013                cl2_display_busy( xmv_w, TRUE );
2014                XtSetSensitive( xmv_w[k_widget_menu_main], FALSE );
2015                cu_get_param_values( xmv_w, xmv_cpar );
2016                cl3_regio_localization(
2017                        xmv_w, cu_get_string(xmv_w[k_widget_phase_name_text]),
2018                        &xmv_par, &status );
2019                xmv_cpar->soft_change = TRUE;
2020                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
2021                xmv_cpar->soft_change = FALSE;
2022                cu_print_param_values( xmv_cpar );
2023                XtSetSensitive( xmv_w[k_widget_menu_main], TRUE );
2024                cl2_display_busy( xmv_w, FALSE );
2025                break;
2026/*
2027        case k_button_hypo_cancel:
2028                mg_print_lastcmd( xmv_w[k_widget_draw], "Hypoellipse Cancelled" );
2029                if  (XtIsManaged(xmv_w[k_widget_hypoellipse_box]))
2030                        XtUnmanageChild( xmv_w[k_widget_hypoellipse_box] );
2031                break;
2032*/
2033        case k_button_hypo_depth_free:
2034                cu_set_string( xmv_w[k_widget_hypo_depth_text], "free" );
2035                break;
2036        case k_button_hypo_depth_0:
2037                cu_set_string( xmv_w[k_widget_hypo_depth_text], "0" );
2038                break;
2039        case k_button_hypo_depth_5:
2040                cu_set_string( xmv_w[k_widget_hypo_depth_text], "5" );
2041                break;
2042        case k_button_hypo_depth_10:
2043                cu_set_string( xmv_w[k_widget_hypo_depth_text], "10" );
2044                break;
2045        case k_button_hypo_depth_15:
2046                cu_set_string( xmv_w[k_widget_hypo_depth_text], "15" );
2047                break;
2048        case k_button_hypo_depth_20:
2049                cu_set_string( xmv_w[k_widget_hypo_depth_text], "20" );
2050                break;
2051        case k_button_hypo_depth_33:
2052                cu_set_string( xmv_w[k_widget_hypo_depth_text], "33" );
2053                break;
2054        case k_button_hypo_use_s_yes:
2055        case k_button_hypo_use_s_no:
2056                break;
2057        case k_button_param_theo:
2058                mg_print_lastcmd( xmv_w[k_widget_draw], "Theo Phase Box" );
2059                if  (XtIsManaged(xmv_w[k_widget_theo_phase_box]))  {
2060                        XtUnmanageChild( xmv_w[k_widget_theo_phase_box] );
2061                } else {
2062                        XtManageChild( xmv_w[k_widget_theo_phase_box] );
2063                } /*endif*/
2064                break;
2065        case k_button_theo_phase_ok:
2066                if  (XtIsManaged(xmv_w[k_widget_theo_phase_box]))
2067                        XtUnmanageChild( xmv_w[k_widget_theo_phase_box] );
2068                XmUpdateDisplay( xmv_appshell );
2069                mg_print_lastcmd( xmv_w[k_widget_draw], "Theo (Tables)" );
2070                cl2_display_busy( xmv_w, TRUE );
2071                XtSetSensitive( xmv_w[k_widget_menu_main], FALSE );
2072                cu_get_param_values( xmv_w, xmv_cpar );
2073                cl3_set_theo_phases( xmv_w, &status );
2074                if  (Severe(&status))  {
2075                        XtSetSensitive( xmv_w[k_widget_menu_main], TRUE );
2076                        break;
2077                } /*endif*/
2078                cu_theo_arrivals( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
2079                        xmv_cpar, &status );
2080                XtSetSensitive( xmv_w[k_widget_menu_main], TRUE );
2081                cl2_display_busy( xmv_w, FALSE );
2082                break;
2083        case k_button_theo_phase_cancel:
2084                if  (XtIsManaged(xmv_w[k_widget_theo_phase_box]))
2085                        XtUnmanageChild( xmv_w[k_widget_theo_phase_box] );
2086                break;
2087        case k_button_param_theo_ext:
2088                mg_print_lastcmd( xmv_w[k_widget_draw], "Theo (ExtProg)" );
2089                cl2_display_busy( xmv_w, TRUE );
2090                XtSetSensitive( xmv_w[k_widget_menu_main], FALSE );
2091                cu_get_param_values( xmv_w, xmv_cpar );
2092                cl2_extern_theo( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
2093                        xmv_cpar, xmv_onset_acc==CUC_ACCURACY_DISPLAY, &status );
2094                XtSetSensitive( xmv_w[k_widget_menu_main], TRUE );
2095                cl2_display_busy( xmv_w, FALSE );
2096                break;
2097        case k_button_param_depth:
2098                mg_print_lastcmd( xmv_w[k_widget_draw], "Depth" );
2099                cl2_display_busy( xmv_w, TRUE );
2100                cu_get_param_values( xmv_w, xmv_cpar );
2101                cl_fit_depth( xmv_cpar->distance, &(xmv_cpar->depth),
2102                        &(xmv_cpar->err.dep), &(xmv_cpar->depth_type), &status );
2103                xmv_cpar->soft_change = TRUE;
2104                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
2105                xmv_cpar->soft_change = FALSE;
2106                cu_print_param_values( xmv_cpar );
2107                cl2_display_busy( xmv_w, FALSE );
2108                break;
2109        case k_button_param_locq_tooweak:
2110                xmv_cpar->loc_quality = CUC_LOCQ_TOOWEAK;
2111                break;
2112        case k_button_param_locq_incoherent:
2113                xmv_cpar->loc_quality = CUC_LOCQ_INCOHERENT;
2114                break;
2115        case k_button_param_locq_nobearing:
2116                xmv_cpar->loc_quality = CUC_LOCQ_NOBEARING;
2117                break;
2118        case k_button_param_locq_region:
2119                xmv_cpar->loc_quality = CUC_LOCQ_REGION;
2120                break;
2121        case k_button_param_locq_reliable:
2122                xmv_cpar->loc_quality = CUC_LOCQ_RELIABLE;
2123                break;
2124        case k_button_param_locq_undefined:
2125                xmv_cpar->loc_quality = CUC_LOCQ_UNDEFINED;
2126                break;
2127        case k_button_filter_none:
2128                if  (! data->set)  break;
2129                filter_mode = CLC_CREFIL_NONE;
2130                cu_set_string( xmv_w[k_widget_filter_edit_text], "" );
2131                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2132                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2133                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2134                break;
2135        case k_button_filter_other:
2136                if  (! data->set)  break;
2137                filter_mode = CLC_CREFIL_NONE;
2138                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2139                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2140                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2141                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2142                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2143                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2144                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2145                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2146                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2147                break;
2148        case k_button_filter_wwssn_sp:
2149                if  (! data->set)  break;
2150                filter_mode = CLC_CREFIL_NONE;
2151                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+G_WWSSN_SP" );
2152                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2153                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2154                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2155                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2156                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2157                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2158                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2159                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2160                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2161                break;
2162        case k_button_filter_wwssn_lp:
2163                if  (! data->set)  break;
2164                filter_mode = CLC_CREFIL_NONE;
2165                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+WWSSN_LP" );
2166                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2167                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2168                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2169                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2170                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2171                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2172                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2173                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2174                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2175                break;
2176        case k_button_filter_lrsm_sp:
2177                if  (! data->set)  break;
2178                filter_mode = CLC_CREFIL_NONE;
2179                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+LRSM_SP" );
2180                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2181                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2182                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2183                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2184                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2185                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2186                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2187                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2188                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2189                break;
2190        case k_button_filter_lrsm_lp:
2191                if  (! data->set)  break;
2192                filter_mode = CLC_CREFIL_NONE;
2193                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+LRSM_LP" );
2194                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2195                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2196                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2197                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2198                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2199                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2200                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2201                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2202                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2203                break;
2204        case k_button_filter_kirnos:
2205                if  (! data->set)  break;
2206                filter_mode = CLC_CREFIL_NONE;
2207                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+KIRNOS" );
2208                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2209                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2210                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2211                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2212                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2213                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2214                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2215                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2216                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2217                break;
2218        case k_button_filter_woodand:
2219                if  (! data->set)  break;
2220                filter_mode = CLC_CREFIL_NONE;
2221                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+WOODAND" );
2222                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2223                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2224                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2225                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2226                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2227                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2228                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2229                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2230                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2231                break;
2232        case k_button_filter_standard_bp:
2233                if  (! data->set)  break;
2234                filter_mode = CLC_CREFIL_NONE;
2235                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+STANDARD_BP" );
2236                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2237                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2238                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2239                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2240                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2241                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2242                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2243                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2244                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2245                break;
2246        case k_button_filter_sro_lp:
2247                if  (! data->set)  break;
2248                filter_mode = CLC_CREFIL_NONE;
2249                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+SRO_LP" );
2250                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2251                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2252                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2253                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2254                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2255                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2256                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2257                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2258                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2259                break;
2260        case k_button_filter_but_bp:
2261                if  (! data->set)  break;
2262                filter_mode = CLC_CREFIL_BUT_BP;
2263                cu_set_string( xmv_w[k_widget_filter_edit_text], "---" );
2264                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], TRUE );
2265                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], TRUE );
2266                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], TRUE );
2267                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], TRUE );
2268                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], TRUE );
2269                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], TRUE );
2270                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], TRUE );
2271                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], TRUE );
2272                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], TRUE );
2273                break;
2274        case k_button_filter_but_lp:
2275                if  (! data->set)  break;
2276                filter_mode = CLC_CREFIL_BUT_LP;
2277                cu_set_string( xmv_w[k_widget_filter_edit_text], "---" );
2278                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], TRUE );
2279                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2280                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], TRUE );
2281                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2282                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2283                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], TRUE );
2284                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], TRUE );
2285                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], TRUE );
2286                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], TRUE );
2287                break;
2288        case k_button_filter_but_hp:
2289                if  (! data->set)  break;
2290                filter_mode = CLC_CREFIL_BUT_HP;
2291                cu_set_string( xmv_w[k_widget_filter_edit_text], "---" );
2292                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2293                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], TRUE );
2294                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], TRUE );
2295                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], TRUE );
2296                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], TRUE );
2297                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2298                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2299                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], TRUE );
2300                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], TRUE );
2301                break;
2302        case k_button_filter_displace:
2303                if  (! data->set)  break;
2304                filter_mode = CLC_CREFIL_NONE;
2305                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+DISPL" );
2306                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], TRUE );
2307                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2308                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2309                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2310                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2311                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], TRUE );
2312                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], TRUE );
2313                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2314                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2315                break;
2316        case k_button_filter_butpar_lo_up:
2317                cl_manage_filter_bounds( xmv_w, CLC_BUTPAR_LO_UP, &status );
2318                break;
2319        case k_button_filter_butpar_lo_down:
2320                cl_manage_filter_bounds( xmv_w, CLC_BUTPAR_LO_DOWN, &status );
2321                break;
2322        case k_button_filter_butpar_hi_up:
2323                cl_manage_filter_bounds( xmv_w, CLC_BUTPAR_HI_UP, &status );
2324                break;
2325        case k_button_filter_butpar_hi_down:
2326                cl_manage_filter_bounds( xmv_w, CLC_BUTPAR_HI_DOWN, &status );
2327                break;
2328        case k_button_filter_butpar_order_up:
2329                cl_manage_filter_bounds( xmv_w, CLC_BUTPAR_ORDER_UP, &status );
2330                break;
2331        case k_button_filter_butpar_order_down:
2332                cl_manage_filter_bounds( xmv_w, CLC_BUTPAR_ORDER_DOWN, &status );
2333                break;
2334        case k_button_filter_ok:
2335                if  (filter_mode != CLC_CREFIL_NONE)  {
2336                        cl_create_filter( xmv_w, filter_mode, &status );
2337                        if  (Severe(&status))  break;
2338                } /*endif*/
2339                strcpy( xmv_cmd_filter.name, cu_get_string(
2340                        xmv_w[k_widget_filter_edit_text]) );
2341                if  (strcmp(xmv_cmd_filter.name,"S+DISPL") == 0)  {
2342                        strcpy( tmpstr,
2343                                cu_get_string( xmv_w[k_widget_filter_butpar_lo_text]) );
2344                        i = strlen( tmpstr ) - 1;
2345                        if  (tmpstr[i] == 's')  tmpstr[i] = 'S';
2346                        i = 0;
2347                        while  (tmpstr[i] == ' ' && i < strlen(tmpstr))
2348                                i++;
2349                        strcat( xmv_cmd_filter.name, tmpstr+i );
2350                        if  (GpGetInt(cGpI_debug_level) > 3)
2351                                printf( "SHM-dbg4: %s\n", xmv_cmd_filter.name );
2352                } /*endif*/
2353                XtUnmanageChild( xmv_w[k_widget_filter_box] );
2354                XmUpdateDisplay( xmv_appshell );
2355                cl2_display_busy( xmv_w, TRUE );
2356                mx_filter( &xmv_cmd_filter, xmv_w[k_widget_draw],
2357                        &xmv_dspctrl, &status );
2358                if  (*xmv_sortstr != '\0')  {
2359                        cl4_sort_traces( xmv_w[k_widget_draw], &xmv_dspctrl, xmv_sortstr,
2360                                xmv_cpar, &status );
2361                        mg_print_sortinfo( xmv_w[k_widget_draw], xmv_sortinfo );
2362                } /*endif*/
2363                mg_print_filter( xmv_w[k_widget_draw], xmv_cmd_filter.name );
2364                cl2_display_busy( xmv_w, FALSE );
2365                cl_set_simfilter_active( xmv_w, TRUE );
2366                mg_print_lastcmd( xmv_w[k_widget_draw], "Filter Execution" );
2367                break;
2368        case k_button_filter_cancel:
2369                mg_print_lastcmd( xmv_w[k_widget_draw], "Filter Cancelled" );
2370                XtUnmanageChild( xmv_w[k_widget_filter_box] );
2371                break;
2372        case k_button_filter_autocut_0:
2373                xmv_cmd_filter.autocut = 0.0;
2374                break;
2375        case k_button_filter_autocut_5sec:
2376                xmv_cmd_filter.autocut = 5.0;
2377                break;
2378        case k_button_filter_autocut_20sec:
2379                xmv_cmd_filter.autocut = 20.0;
2380                break;
2381        case k_button_filter_autocut_1min:
2382                xmv_cmd_filter.autocut = 60.0;
2383                break;
2384        case k_button_filter_autocut_3min:
2385                xmv_cmd_filter.autocut = 180.0;
2386                break;
2387        case k_button_filter_autocut_5min:
2388                xmv_cmd_filter.autocut = 300.0;
2389                break;
2390        case k_button_filter_autocut_10min:
2391                xmv_cmd_filter.autocut = 600.0;
2392                break;
2393        case k_button_phase_type_other:
2394                xmv_cpar->source_type = CUC_TYPE_OTHER;
2395                break;
2396        case k_button_phase_type_local:
2397                xmv_cpar->source_type = CUC_TYPE_LOCAL_QUAKE;
2398                break;
2399        case k_button_phase_type_regio:
2400                xmv_cpar->source_type = CUC_TYPE_REGIO_QUAKE;
2401                break;
2402        case k_button_phase_type_tele:
2403                xmv_cpar->source_type = CUC_TYPE_TELE_QUAKE;
2404                break;
2405        case k_button_phase_type_nuclear:
2406                xmv_cpar->source_type = CUC_TYPE_NUCLEAR;
2407                break;
2408        case k_button_phase_type_blast:
2409                xmv_cpar->source_type = CUC_TYPE_BLAST;
2410                break;
2411        case k_button_phase_type_mining:
2412                xmv_cpar->source_type = CUC_TYPE_MINING;
2413                break;
2414        case k_button_multipli_1_3:
2415                cu_do_multiplication( 1./3., &status );
2416                break;
2417        case k_button_multipli_1_2:
2418                cu_do_multiplication( 1./2., &status );
2419                break;
2420        case k_button_multipli_1:
2421                cu_do_multiplication( 1., &status );
2422                break;
2423        case k_button_multipli_2:
2424                cu_do_multiplication( 2., &status );
2425                break;
2426        case k_button_multipli_3:
2427                cu_do_multiplication( 3., &status );
2428                break;
2429        case k_button_multipli_4:
2430                cu_do_multiplication( 4., &status );
2431                break;
2432        case k_button_multipli_edit_mul:
2433                cu_do_multiplication( CUC_MULTIPLI_EDIT_MUL, &status );
2434                break;
2435        case k_button_multipli_edit_div:
2436                cu_do_multiplication( CUC_MULTIPLI_EDIT_DIV, &status );
2437                break;
2438        case k_button_analyst_ok:
2439                mx_analyst_name( xmv_w, &xmv_dspctrl, &status );
2440                break;
2441        case k_button_infsource_ok:
2442                strcpy( xmv_cpar->source,
2443                        cu_get_string(xmv_w[k_widget_infsource_name_text]) );
2444                XtUnmanageChild( xmv_w[k_widget_infsource_box] );
2445                break;
2446        case k_button_param_set_1:
2447        case k_button_param_set_2:
2448        case k_button_param_set_3:
2449                cu_get_param_values( xmv_w, xmv_cpar );
2450                xmv_par.parno = *tag - k_button_param_set_1;
2451                xmv_cpar = xmv_par.par + xmv_par.parno;
2452                xmv_cpar->soft_change = TRUE;
2453                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
2454                xmv_cpar->soft_change = FALSE;
2455                break;
2456        case k_button_fk_okauto:
2457        case k_button_fk_ok:
2458                XtUnmanageChild( xmv_w[k_widget_fk_box] );
2459                XmUpdateDisplay( xmv_appshell );
2460                cl3_perform_fk( xmv_w, fk_unit_deg, (*tag == k_button_fk_ok),
2461                        "", &status );
2462                if  (*tag != k_button_fk_okauto)
2463                        break;
2464        case k_button_fk_get_values:
2465                XtUnmanageChild( xmv_w[k_widget_fk_box] );
2466                cl3_fk_get_values( xmv_cpar, &status );
2467                xmv_cpar->soft_change = TRUE;
2468                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
2469                xmv_cpar->soft_change = FALSE;
2470                break;
2471        case k_button_fk_cancel:
2472                XtUnmanageChild( xmv_w[k_widget_fk_box] );
2473                break;
2474        case k_button_fk_unit_deg:
2475                fk_unit_deg = TRUE;
2476                break;
2477        case k_button_fk_unit_km:
2478                fk_unit_deg = FALSE;
2479                break;
2480        case k_button_speccmd_hide:
2481                XtUnmanageChild( xmv_w[k_widget_speccmd_box] );
2482                break;
2483        case k_button_speccmd_1:
2484        case k_button_speccmd_1+1:
2485        case k_button_speccmd_1+2:
2486        case k_button_speccmd_1+3:
2487        case k_button_speccmd_1+4:
2488        case k_button_speccmd_1+5:
2489        case k_button_speccmd_1+6:
2490        case k_button_speccmd_1+7:
2491        case k_button_speccmd_1+8:
2492        case k_button_speccmd_1+9:
2493        case k_button_speccmd_1+10:
2494        case k_button_speccmd_1+11:
2495        case k_button_speccmd_1+12:
2496        case k_button_speccmd_1+13:
2497        case k_button_speccmd_1+14:
2498        case k_button_speccmd_1+15:
2499                str = cu_get_string(
2500                        xmv_w[k_widget_speccmd_1_text+(*tag)-k_button_speccmd_1] );
2501                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, str );
2502                mg_print_lastcmd( xmv_w[k_widget_draw], str );
2503                break;
2504        case k_button_vespa_ok:
2505                mg_print_lastcmd( xmv_w[k_widget_draw], "Vespagram" );
2506                cl4_do_vespa( xmv_w, &xmv_dspctrl, xmv_cpar->b_azimuth, TRUE, &status );
2507                XtSetSensitive( xmv_w[k_widget_vespa_export_button], TRUE );
2508                break;
2509        case k_button_vespa_cancel:
2510                XtUnmanageChild( xmv_w[k_widget_vespa_input_box] );
2511                break;
2512        case k_button_vespa_undo:
2513                cl4_do_vespa( xmv_w, &xmv_dspctrl, xmv_cpar->b_azimuth, FALSE, &status );
2514                XtUnmanageChild( xmv_w[k_widget_vespa_input_box] );
2515                break;
2516        case k_button_vespa_power_1:
2517                cu_set_string( xmv_w[k_widget_vespa_power_text], "1" );
2518                break;
2519        case k_button_vespa_power_2:
2520                cu_set_string( xmv_w[k_widget_vespa_power_text], "2" );
2521                break;
2522        case k_button_vespa_power_3:
2523                cu_set_string( xmv_w[k_widget_vespa_power_text], "3" );
2524                break;
2525        case k_button_vespa_power_5:
2526                cu_set_string( xmv_w[k_widget_vespa_power_text], "5" );
2527                break;
2528        case k_button_vespa_power_10:
2529                cu_set_string( xmv_w[k_widget_vespa_power_text], "10" );
2530                break;
2531        case k_button_vespa_slostep_1:
2532                cu_set_string( xmv_w[k_widget_vespa_slostep_text], "0.2" );
2533                break;
2534        case k_button_vespa_slostep_2:
2535                cu_set_string( xmv_w[k_widget_vespa_slostep_text], "0.5" );
2536                break;
2537        case k_button_vespa_slostep_3:
2538                cu_set_string( xmv_w[k_widget_vespa_slostep_text], "1.0" );
2539                break;
2540        case k_button_vespa_slohi_1:
2541                cu_set_string( xmv_w[k_widget_vespa_slohi_text], "5.0" );
2542                break;
2543        case k_button_vespa_slohi_2:
2544                cu_set_string( xmv_w[k_widget_vespa_slohi_text], "8.0" );
2545                break;
2546        case k_button_vespa_slohi_3:
2547                cu_set_string( xmv_w[k_widget_vespa_slohi_text], "12.0" );
2548                break;
2549        case k_button_vespa_export:
2550                cl4_vespa_export( xmv_w, &status );
2551                break;
2552        case k_button_locsat_ok:
2553                cu_get_param_values( xmv_w, xmv_cpar );
2554                XtUnmanageChild( xmv_w[k_widget_locsat_box] );
2555                XmUpdateDisplay( xmv_appshell );
2556                cl3_locsat_interface( xmv_w, &xmv_par, &status );
2557                xmv_cpar->soft_change = TRUE;
2558                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
2559                xmv_cpar->soft_change = FALSE;
2560                break;
2561        case k_button_locsat_hypo:
2562                cu_get_param_values( xmv_w, xmv_cpar );
2563                XtUnmanageChild( xmv_w[k_widget_locsat_box] );
2564                XmUpdateDisplay( xmv_appshell );
2565                /* set depth to free or fixed value */
2566                str = cu_get_string( xmv_w[k_widget_locsat_depth_text] );
2567                if  (strcmp(str,"free") == 0)  {
2568                        xmv_cpar->depth_type = CUC_DEPTH_FREE;
2569                        xmv_cpar->depth = 5.0;
2570                } else {
2571                        xmv_cpar->depth_type = CUC_DEPTH_PRESET;
2572                        sscanf( str, "%f", &(xmv_cpar->depth) );
2573                } /*endif*/
2574                /* write table prefix to filename in $SH_SCRATCH */
2575                str = cu_get_string( xmv_w[k_widget_locsat_prefix_text] );
2576                sprintf( cmd, "echo %s >$SH_SCRATCH/table_prefix.txt", str );
2577                system( cmd );
2578                cl3_call_extproc( CL3C_PLUGIN_LOCPROC, xmv_w, &xmv_dspctrl,
2579                        &xmv_par, &xmv_phase, &status );
2580                xmv_cpar->soft_change = TRUE;
2581                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
2582                xmv_cpar->soft_change = FALSE;
2583                break;
2584        case k_button_locsat_cancel:
2585                XtUnmanageChild( xmv_w[k_widget_locsat_box] );
2586                break;
2587        case k_button_locsat_depth_free:
2588                cu_set_string( xmv_w[k_widget_locsat_depth_text], "free" );
2589                break;
2590        case k_button_locsat_depth_0:
2591                cu_set_string( xmv_w[k_widget_locsat_depth_text], "0" );
2592                break;
2593        case k_button_locsat_depth_1:
2594                cu_set_string( xmv_w[k_widget_locsat_depth_text], "1" );
2595                break;
2596        case k_button_locsat_depth_10:
2597                cu_set_string( xmv_w[k_widget_locsat_depth_text], "10" );
2598                break;
2599        case k_button_locsat_depth_15:
2600                cu_set_string( xmv_w[k_widget_locsat_depth_text], "15" );
2601                break;
2602        case k_button_locsat_depth_20:
2603                cu_set_string( xmv_w[k_widget_locsat_depth_text], "20" );
2604                break;
2605        case k_button_locsat_depth_33:
2606                cu_set_string( xmv_w[k_widget_locsat_depth_text], "33" );
2607                break;
2608        case k_button_locsat_auto_yes:
2609        case k_button_locsat_auto_no:
2610                break;
2611        case k_button_locsat_output_yes:
2612        case k_button_locsat_output_no:
2613                break;
2614        case k_button_setup_hide:
2615                XtUnmanageChild( xmv_w[k_widget_setup_box] );
2616                break;
2617        case k_button_setup_hc_fast:
2618                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl,
2619                        "@SHM_CMD_SETHC sd_xwd.csh" );
2620                break;
2621        case k_button_setup_hc_qual:
2622                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl,
2623                        "@SHM_CMD_SETHC sd_screendump.csh" );
2624                break;
2625        case k_button_setup_maxcrsr_crosshair:
2626                GpSetInt( cGpI_max_cursor_form, MGC_CRSR_CROSSHAIR );
2627                break;
2628        case k_button_setup_maxcrsr_waveform:
2629                GpSetInt( cGpI_max_cursor_form, MGC_CRSR_WAVEFORM );
2630                break;
2631        case k_button_setup_maxcrsr_negwave:
2632                GpSetInt( cGpI_max_cursor_form, MGC_CRSR_WAVEFORM_NEG );
2633                break;
2634        case k_button_setup_maxcrsr_hilbert:
2635                GpSetInt( cGpI_max_cursor_form, MGC_CRSR_WAVEFORM_HILB );
2636                break;
2637        case k_button_setup_maxcrsr_neghilb:
2638                GpSetInt( cGpI_max_cursor_form, MGC_CRSR_WAVEFORM_NEGHILB );
2639                break;
2640        case k_button_setup_norm_c:
2641                GpSetBoolean( cGpB_auto_scaling, FALSE );
2642                GpSetInt( cGpI_trace_normalisation, cGp_NORM_CONST );
2643                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "shm_cmd_norm c" );
2644                break;
2645        case k_button_setup_norm_af:
2646                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "shm_cmd_norm af" );
2647                GpSetBoolean( cGpB_auto_scaling, FALSE );
2648                GpSetInt( cGpI_trace_normalisation, cGp_NORM_AW );
2649                break;
2650        case k_button_setup_norm_aw:
2651                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "shm_cmd_norm aw" );
2652                GpSetBoolean( cGpB_auto_scaling, FALSE );
2653                GpSetInt( cGpI_trace_normalisation, cGp_NORM_AW );
2654                break;
2655        case k_button_setup_norm_sf:
2656                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "shm_cmd_norm sf" );
2657                GpSetBoolean( cGpB_auto_scaling, TRUE );
2658                GpSetInt( cGpI_trace_normalisation, cGp_NORM_SW );
2659                break;
2660        case k_button_setup_norm_sw:
2661                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "shm_cmd_norm sw" );
2662                GpSetBoolean( cGpB_auto_scaling, TRUE );
2663                GpSetInt( cGpI_trace_normalisation, cGp_NORM_SW );
2664                break;
2665        case k_button_setup_topdown_top:
2666                GpSetBoolean( cGpB_top_down_order, TRUE );
2667                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "rd" );
2668                break;
2669        case k_button_setup_topdown_down:
2670                GpSetBoolean( cGpB_top_down_order, FALSE );
2671                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "rd" );
2672                break;
2673        case k_button_setup_filtyp_recursive:
2674                GpSetChar( cGpC_filter_type, 'R' );
2675#ifdef XXX
2676                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl,
2677                        "shmsetup use_rec_filters true" );
2678#endif
2679                break;
2680        case k_button_setup_filtyp_fft:
2681                GpSetChar( cGpC_filter_type, 'F' );
2682#ifdef XXX
2683                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl,
2684                        "shmsetup use_rec_filters false" );
2685#endif
2686                break;
2687        case k_button_setup_deffil_none:
2688                GpSetString( cGpS_default_filter, "", NULL );
2689                break;
2690        case k_button_setup_deffil_standard_bp:
2691                GpSetString( cGpS_default_filter, "S+STANDARD_BP", NULL );
2692                break;
2693        case k_button_setup_deffil_wwssn_sp:
2694                GpSetString( cGpS_default_filter, "S+G_WWSSN_SP", NULL );
2695                break;
2696        case k_button_setup_deffil_but_bp:
2697                GpSetString( cGpS_default_filter, "BUT_BP", NULL );
2698                break;
2699        case k_button_setup_evtview_full:
2700                GpSetString( cGpS_evtview_proc, "", NULL );
2701                break;
2702        case k_button_setup_evtview_brief:
2703                GpSetString( cGpS_evtview_proc, "ev2view", NULL );
2704                break;
2705        case k_button_setup_phasename_full:
2706                GpSetBoolean( cGpB_full_phase_names, TRUE );
2707                break;
2708        case k_button_setup_phasename_brief:
2709                GpSetBoolean( cGpB_full_phase_names, FALSE );
2710                break;
2711        case k_button_refstat_ok:
2712                XtUnmanageChild( xmv_w[k_widget_refstat_box] );
2713                XmUpdateDisplay( xmv_appshell );
2714                GpSetString( cGpS_refstation,
2715                        cu_get_string(xmv_w[k_widget_refstat_edit_text]), NULL );
2716                break;
2717        case k_button_refstat_station_1:
2718        case k_button_refstat_station_1+1:
2719        case k_button_refstat_station_1+2:
2720        case k_button_refstat_station_1+3:
2721        case k_button_refstat_station_1+4:
2722        case k_button_refstat_station_last:
2723                i = (*tag) - k_button_refstat_station_1;
2724                cl4_read_refstation( i+1, tmpstr, &status );
2725                if  (status == BC_NOERROR)
2726                        cu_set_string( xmv_w[k_widget_refstat_edit_text], tmpstr );
2727                break;
2728        case k_button_phase_attrib_ext:
2729                mg_print_lastcmd( xmv_w[k_widget_draw], "More Attribs" );
2730                if  (XtIsManaged(xmv_w[k_widget_event_attrib_box]))  {
2731                        XtUnmanageChild( xmv_w[k_widget_event_attrib_box] );
2732                } else {
2733                        XtManageChild( xmv_w[k_widget_event_attrib_box] );
2734                } /*endif*/
2735                break;
2736        case k_button_attrib_ok:
2737                XtUnmanageChild( xmv_w[k_widget_event_attrib_box] );
2738                break;
2739        case k_button_evpublic_ignore:
2740                xmv_cpar->flags &= ~CUC_F_EVENT_TELEX_ALL;
2741                xmv_cpar->flags |= CUC_F_EVENT_IGNORE;
2742                break;
2743        case k_button_evpublic_telex1:
2744                xmv_cpar->flags &= ~CUC_F_EVENT_TELEX_ALL;
2745                xmv_cpar->flags &= ~CUC_F_EVENT_IGNORE;
2746                break;
2747        case k_button_evpublic_telexall:
2748                xmv_cpar->flags |= CUC_F_EVENT_TELEX_ALL;
2749                xmv_cpar->flags &= ~CUC_F_EVENT_IGNORE;
2750                break;
2751        case k_button_read_grsn_fbox:
2752                /* just use button state */
2753                break;
2754        case k_button_opick_ok:
2755                if  (XtIsManaged(xmv_w[k_widget_opick_box]))  {
2756                        XtUnmanageChild( xmv_w[k_widget_opick_box] );
2757                } else {
2758                        XtManageChild( xmv_w[k_widget_opick_box] );
2759                } /*endif*/
2760                break;
2761        case k_button_opick_thresh_1:
2762                cu_set_string( xmv_w[k_widget_opick_thresh_text], "20" );
2763                break;
2764        case k_button_opick_thresh_2:
2765                cu_set_string( xmv_w[k_widget_opick_thresh_text], "10" );
2766                break;
2767        case k_button_opick_thresh_3:
2768                cu_set_string( xmv_w[k_widget_opick_thresh_text], "5" );
2769                break;
2770        case k_button_opick_thresh_4:
2771                cu_set_string( xmv_w[k_widget_opick_thresh_text], "2" );
2772                break;
2773        case k_button_opick_duration_1:
2774                cu_set_string( xmv_w[k_widget_opick_duration_text], "0.2" );
2775                break;
2776        case k_button_opick_duration_2:
2777                cu_set_string( xmv_w[k_widget_opick_duration_text], "0.3" );
2778                break;
2779        case k_button_opick_duration_3:
2780                cu_set_string( xmv_w[k_widget_opick_duration_text], "0.5" );
2781                break;
2782        case k_button_opick_duration_4:
2783                cu_set_string( xmv_w[k_widget_opick_duration_text], "1.0" );
2784                break;
2785        case k_button_opick_duration_5:
2786                cu_set_string( xmv_w[k_widget_opick_duration_text], "2.0" );
2787                break;
2788        case k_button_opick_break_1:
2789                cu_set_string( xmv_w[k_widget_opick_break_text], "0.00" );
2790                break;
2791        case k_button_opick_break_2:
2792                cu_set_string( xmv_w[k_widget_opick_break_text], "0.05" );
2793                break;
2794        case k_button_opick_break_3:
2795                cu_set_string( xmv_w[k_widget_opick_break_text], "0.10" );
2796                break;
2797        case k_button_opick_break_4:
2798                cu_set_string( xmv_w[k_widget_opick_break_text], "0.15" );
2799                break;
2800        case k_button_spcsetup_ok:
2801                if  (XtIsManaged(xmv_w[k_widget_spcsetup_box]))
2802                        XtUnmanageChild( xmv_w[k_widget_spcsetup_box] );
2803                spc_get_dialog_values( xmv_w, &status );
2804                break;
2805        case k_button_spcsetup_cancel:
2806                if  (XtIsManaged(xmv_w[k_widget_spcsetup_box]))
2807                        XtUnmanageChild( xmv_w[k_widget_spcsetup_box] );
2808                break;
2809        case k_button_adrm_configure:
2810                cl4_adrm_configure( xmv_w, &status );
2811                break;
2812        case k_button_adrm_cancel:
2813                if  (XtIsManaged(xmv_w[k_widget_adrm_selection_box]))
2814                        XtUnmanageChild( xmv_w[k_widget_adrm_selection_box] );
2815                break;
2816        case k_button_adrm_ok:
2817                if  (XtIsManaged(xmv_w[k_widget_adrm_selection_box]))
2818                        XtUnmanageChild( xmv_w[k_widget_adrm_selection_box] );
2819                XmUpdateDisplay( xmv_appshell );
2820                cl2_display_busy( xmv_w, TRUE );
2821                ok = xmv_cmd_readg.keep;  /* store */
2822                cl4_adrm_request( xmv_w, xmv_cmd_readg.start, xmv_cmd_readg.seclth,
2823                        tmpstr, &status );
2824                if  (*tmpstr != '\0' && status == cBcNoError)  {
2825                        /* data file created, read in */
2826                        xmh_read_gsefile( tmpstr, &status );
2827                } /*endif*/
2828                xmv_cmd_readg.keep = ok;  /* restore */
2829                cl2_display_busy( xmv_w, FALSE );
2830                break;
2831        case k_button_plugin_cancel:
2832                if  (XtIsManaged(xmv_w[k_widget_add_plugin_box]))
2833                        XtUnmanageChild( xmv_w[k_widget_add_plugin_box] );
2834                break;
2835        case k_button_plugin_add:
2836                cl2_display_busy( xmv_w, TRUE );
2837                if  (XtIsManaged(xmv_w[k_widget_add_plugin_box]))
2838                        XtUnmanageChild( xmv_w[k_widget_add_plugin_box] );
2839                cl3_add_extproc( xmv_w, &status );
2840                cl2_display_busy( xmv_w, FALSE );
2841                break;
2842        case k_button_param_setslow:
2843                PiSbSetSlowness( &(xmv_cpar->slowbox),
2844                        cu_get_string(xmv_w[k_widget_phase_name_text]), xmv_cpar->b_slowness,
2845                        xmv_cpar->b_azimuth, xmv_cpar->l_slowness, xmv_cpar->l_azimuth,
2846                        &status );
2847                mg_print_lastcmd( xmv_w[k_widget_draw], "SetSlow" );
2848                printf( "*SHM: stored slo:%5.2f az:%5.1f to %s\n", xmv_cpar->b_slowness,
2849                        xmv_cpar->b_azimuth, cu_get_string(xmv_w[k_widget_phase_name_text]) );
2850                break;
2851        default:
2852                printf( "*SHM: xm_call_activate: this cannot happen (%d)\n", *tag );
2853        } /*endswitch*/
2854
2855        mg_set_cursor( MGC_XCRSR_NORMAL );
2856        /* XtSetSensitive( xmv_w[k_widget_main], TRUE ); */
2857
2858        if  (GpGetInt(cGpI_debug_level) > 3)
2859                printf( "SHM-dbg4: end of xm_call_activate, status %d\n", status );
2860
2861        if  (Severe(&status))  {
2862                if  (GpGetInt(cGpI_debug_level) > 3)
2863                        printf( "SHM-dbg4: call cu_alert\n" );
2864                cu_alert( status );
2865                /* printf( "*SHM: xm_call_activate: status %d\n", status ); */
2866        } /*endif*/
2867
2868} /* end of xm_call_activate */
2869
2870
2871
2872/*--------------------------------------------------------------------------*/
2873
2874
2875
2876static void xm_call_menu_select( Widget widget, int *tag, XmAnyCallbackStruct *data )
2877
2878/* callback routine of menu entries
2879 *
2880 * parameters of routine
2881 * Widget     widget;       input; widget ID
2882 * int        *tag;         input; entry number
2883 * XmAnyCallbackStruct *data not used
2884 */
2885{
2886        /* local variables */
2887        STATUS   locstat;              /* local status */
2888        char     str[BC_LINELTH+1];    /* scratch string */
2889        static TSyBoolean show3traces=FALSE; /* display 3 traces in zoom window */
2890        TSyBoolean reset_xcursor;      /* reset xcursor ? */
2891
2892        /* executable code */
2893
2894        xmh_log_action( "e", *tag );
2895
2896        locstat = BC_NOERROR;
2897        mg_set_cursor( MGC_XCRSR_BUSY );
2898        reset_xcursor = TRUE;
2899        /* XtSetSensitive( xmv_w[k_widget_main], FALSE ); */
2900
2901        switch  (*tag)  {
2902        case k_entry_command:
2903                HELPTEXT( "command" );
2904                mg_print_lastcmd( xmv_w[k_widget_draw], "Command Box" );
2905                if  (XtIsManaged(xmv_w[k_widget_command_box]))  {
2906                        XtUnmanageChild( xmv_w[k_widget_command_box] );
2907                } else {
2908                        XtManageChild( xmv_w[k_widget_command_box] );
2909                } /*endif*/
2910                break;
2911        case k_entry_help:
2912                mg_print_lastcmd( xmv_w[k_widget_draw], "Help Text" );
2913                if  (XtIsManaged(xmv_w[k_widget_help_box]))  {
2914                        XtUnmanageChild( xmv_w[k_widget_help_box] );
2915                        xmv_help = FALSE;
2916                } else {
2917                        XtManageChild( xmv_w[k_widget_help_box] );
2918                        xmv_help = TRUE;
2919                        HELPTEXT( "help" );
2920                } /*endif*/
2921                break;
2922        case k_entry_cmd_speccmd:
2923                HELPTEXT( "speccmd" );
2924                mg_print_lastcmd( xmv_w[k_widget_draw], "Command Box" );
2925                if  (XtIsManaged(xmv_w[k_widget_speccmd_box]))  {
2926                        XtUnmanageChild( xmv_w[k_widget_speccmd_box] );
2927                } else {
2928                        XtManageChild( xmv_w[k_widget_speccmd_box] );
2929                } /*endif*/
2930                break;
2931        case k_entry_cmd_del_horiz:
2932                HELPTEXT( "del-horiz" );
2933                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "del _comp~(z)" );
2934                mg_print_lastcmd( xmv_w[k_widget_draw], "Delete Horizontals" );
2935                /* set xmv_phasetrc to NULL in case this trace has been deleted */
2936                xmv_phasetrc = NULL;
2937                break;
2938        case k_entry_cmd_screendump:
2939        case k_entry_calib_screendump:
2940        case k_entry_spct_screendump:
2941        case k_entry_pm_screendump:
2942                HELPTEXT( "screendump" );
2943                cl2_display_busy( xmv_w, TRUE );
2944                XmUpdateDisplay( xmv_appshell );
2945                sprintf( str, "%s %s", GpGetString(cGpS_screendump_proc),
2946                        cl_unique_name() );
2947                system( str );
2948                mg_print_lastcmd( xmv_w[k_widget_draw], "Screendump" );
2949                cl2_display_busy( xmv_w, FALSE );
2950                break;
2951        case k_entry_cmd_userdef:
2952                strcpy( str, shd_inputs );
2953                strcat( str, "userdef.events" );
2954                xm_exec_userdef( str );
2955                break;
2956        case k_entry_quit:
2957                HELPTEXT( "quit" );
2958                mg_print_lastcmd( xmv_w[k_widget_draw], "Quit" );
2959                if  (xmv_par.state == CUC_PARSTATE_PROCESS)  {
2960                        locstat = CUE_SAVE_FIRST;
2961                        break;
2962                } /*endif*/
2963                if  (MrmCloseHierarchy(xmv_hier) != MrmSUCCESS)  {
2964                        fprintf( stderr, "*SHM: Unable to close UID hierarchy.\n" );
2965                        exit( 1 );
2966                } /*endif*/
2967                xmh_log_action( "\n--end-of-SHM\n", 0 );
2968                se_terminate();
2969                SqlDeleteScratchFile();
2970                exit( 0 );
2971        case k_entry_read_grsn:
2972                HELPTEXT( "read-seed" );
2973                mg_print_lastcmd( xmv_w[k_widget_draw], "Read" );
2974                if  (XtIsManaged(xmv_w[k_widget_read_grsn]))  {
2975                        XtUnmanageChild( xmv_w[k_widget_read_grsn] );
2976                } else {
2977                        XtManageChild( xmv_w[k_widget_read_grsn] );
2978                } /*endif*/
2979                break;
2980        case k_entry_readgse:
2981                HELPTEXT( "read-gse" );
2982                locstat = BC_NOERROR;
2983                cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_GSE, &locstat );
2984                mg_print_lastcmd( xmv_w[k_widget_draw], "Read GSE" );
2985                break;
2986        case k_entry_readgse2:
2987                HELPTEXT( "read-gse2" );
2988                locstat = BC_NOERROR;
2989                cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_GSE2, &locstat );
2990                mg_print_lastcmd( xmv_w[k_widget_draw], "Read GSE2" );
2991                break;
2992        case k_entry_readah:
2993                HELPTEXT( "read-ah" );
2994                locstat = BC_NOERROR;
2995                cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_AH, &locstat );
2996                mg_print_lastcmd( xmv_w[k_widget_draw], "Read AH" );
2997                break;
2998        case k_entry_readq:
2999                HELPTEXT( "read-q" );
3000                locstat = BC_NOERROR;
3001                cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_Q, &locstat );
3002                mg_print_lastcmd( xmv_w[k_widget_draw], "Read Q" );
3003                break;
3004        case k_entry_readrfmt:
3005                HELPTEXT( "read-rfmt" );
3006                locstat = BC_NOERROR;
3007                cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_RFMT, &locstat );
3008                mg_print_lastcmd( xmv_w[k_widget_draw], "Read Other" );
3009                break;
3010        case k_entry_write_mseed:
3011                HELPTEXT( "write-mseed" );
3012                mg_print_lastcmd( xmv_w[k_widget_draw], "Write MiniSEED" );
3013                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "writeseed" );
3014                break;
3015        case k_entry_write_gse:
3016                HELPTEXT( "write-gse" );
3017                mg_print_lastcmd( xmv_w[k_widget_draw], "Write GSE1.0" );
3018                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "writegse;;" );
3019                break;
3020        case k_entry_stw:
3021                HELPTEXT( "stw" );
3022                mx_stw( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw], &xmv_dspctrl );
3023                mg_print_lastcmd( xmv_w[k_widget_draw], "Set Time Wdw" );
3024                break;
3025        case k_entry_dtw:
3026                HELPTEXT( "dtw" );
3027                mg_do_drag( xmv_w[k_widget_draw], MGC_DRAG_CLEAR, 0, 0 );
3028                locstat = BC_NOERROR;
3029                mg_plot_drag_window( xmv_w[k_widget_single_draw],
3030                        xmv_onset_acc==CUC_ACCURACY_DISPLAY, &locstat );
3031                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "dtw" );
3032                mg_print_lastcmd( xmv_w[k_widget_draw], "Del Time Wdw" );
3033                break;
3034        case k_entry_wdw_move_right:
3035                HELPTEXT( "wdw-move-r" );
3036                sprintf( str, "shm_cmd_movetw %4.2f", GpGetFloat(cGpF_move_wdw_step) );
3037                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, str );
3038                mg_print_lastcmd( xmv_w[k_widget_draw], "Move Window Right" );
3039                mg_do_drag( xmv_w[k_widget_draw], MGC_DRAG_CLEAR, 0, 0 );
3040                break;
3041        case k_entry_wdw_move_left:
3042                HELPTEXT( "wdw-move-l" );
3043                sprintf( str, "shm_cmd_movetw %5.2f", -GpGetFloat(cGpF_move_wdw_step) );
3044                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, str );
3045                mg_print_lastcmd( xmv_w[k_widget_draw], "Move Window Left" );
3046                mg_do_drag( xmv_w[k_widget_draw], MGC_DRAG_CLEAR, 0, 0 );
3047                break;
3048        case k_entry_wdw_grow_right:
3049                HELPTEXT( "wdw-grow-r" );
3050                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "shm_cmd_growtw right" );
3051                mg_print_lastcmd( xmv_w[k_widget_draw], "Grow Window Right" );
3052                mg_do_drag( xmv_w[k_widget_draw], MGC_DRAG_CLEAR, 0, 0 );
3053                break;
3054        case k_entry_wdw_grow_left:
3055                HELPTEXT( "wdw-grow-l" );
3056                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "shm_cmd_growtw left" );
3057                mg_print_lastcmd( xmv_w[k_widget_draw], "Grow Window Left" );
3058                mg_do_drag( xmv_w[k_widget_draw], MGC_DRAG_CLEAR, 0, 0 );
3059                break;
3060        case k_entry_wdw_3traces:
3061                show3traces = !show3traces;
3062                mg_show_3_traces( show3traces );
3063                mg_print_lastcmd( xmv_w[k_widget_draw], "3 Zoom Traces" );
3064                break;
3065        case k_entry_parameters:
3066                HELPTEXT( "param-box" );
3067                mg_print_lastcmd( xmv_w[k_widget_draw], "Parameter Box" );
3068                if  (XtIsManaged(xmv_w[k_widget_param_box]))  {
3069                        XtUnmanageChild( xmv_w[k_widget_param_box] );
3070                } else {
3071                        XtManageChild( xmv_w[k_widget_param_box] );
3072                } /*endif*/
3073                break;
3074        case k_entry_dump_params:
3075                HELPTEXT( "dump-params" );
3076                mg_print_lastcmd( xmv_w[k_widget_draw], "Show Current Params" );
3077                cu_get_param_values( xmv_w, xmv_cpar );
3078                cl3_dump_parameters( &xmv_par, "sh_temp_par.txt", FALSE, FALSE,
3079                        TRUE, &locstat);
3080                break;
3081        case k_entry_final_params:
3082                HELPTEXT( "final-params" );
3083                mg_print_lastcmd( xmv_w[k_widget_draw], "Show Final Params" );
3084                cu_get_param_values( xmv_w, xmv_cpar );
3085                cl3_dump_parameters( &xmv_par, "--automatic--", FALSE, FALSE,
3086                        TRUE, &locstat );
3087                /* cl3_save_parameters( CUC_SAVEMODE_EVENT, xmv_cpar, &locstat ); */
3088                cl3_save_parameters( xmv_par.evid, xmv_cpar, &locstat );
3089                /* xmv_par.state = CUC_PARSTATE_FINAL; */
3090                xm_set_processing_state( CUC_PARSTATE_FINAL );
3091                cl3_call_extproc( CL3C_PLUGIN_ENDPROC, xmv_w, &xmv_dspctrl, &xmv_par,
3092                        &xmv_phase, &locstat );
3093                break;
3094        case k_entry_cancel_params:
3095                HELPTEXT( "cancel-params" );
3096                mg_print_lastcmd( xmv_w[k_widget_draw], "Cancel Params" );
3097                /* xmv_par.state = CUC_PARSTATE_CANCELLED; */
3098                xm_set_processing_state( CUC_PARSTATE_FINAL );
3099                break;
3100        case k_entry_short_info:
3101                mg_print_lastcmd( xmv_w[k_widget_draw], "Short Info" );
3102                cu_print_param_values( xmv_cpar );
3103                break;
3104        case k_entry_trc_delete:
3105                HELPTEXT( "trc-delete" );
3106                /* mx_trclist_command( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3107                        &xmv_dspctrl, "del %s", &locstat ); */
3108                cl4_delete_traces();
3109                cl_set_simfilter_active( xmv_w, TRUE );
3110                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "rd" );
3111                mg_print_lastcmd( xmv_w[k_widget_draw], "Delete Traces" );
3112                /* set xmv_phasetrc to NULL in case this trace has been deleted */
3113                xmv_phasetrc = NULL;
3114                break;
3115        case k_entry_trc_del_badqual:
3116                HELPTEXT( "trc-dec-badqual" );
3117                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "del _qual(y)" );
3118                mg_print_lastcmd( xmv_w[k_widget_draw], "Delete Bad Qual" );
3119                xmv_phasetrc = NULL;
3120                break;
3121        case k_entry_trc_keep_r:
3122                HELPTEXT( "trc-keep-R" );
3123                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "del _comp(z)" );
3124                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "del _comp(t)" );
3125                mg_print_lastcmd( xmv_w[k_widget_draw], "Keep R" );
3126                /* set xmv_phasetrc to NULL in case this trace has been deleted */
3127                xmv_phasetrc = NULL;
3128                break;
3129        case k_entry_trc_keep_t:
3130                HELPTEXT( "trc-keep-T" );
3131                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "del _comp(z)" );
3132                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "del _comp(r)" );
3133                mg_print_lastcmd( xmv_w[k_widget_draw], "Keep T" );
3134                /* set xmv_phasetrc to NULL in case this trace has been deleted */
3135                xmv_phasetrc = NULL;
3136                break;
3137        case k_entry_trc_demean:
3138                HELPTEXT( "trc-demean" );
3139                mx_trclist_command( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3140                        &xmv_dspctrl, "DEMEAN %s", &locstat );
3141                cl_set_simfilter_active( xmv_w, TRUE );
3142                mg_print_lastcmd( xmv_w[k_widget_draw], "Demean Traces" );
3143                break;
3144        case k_entry_trc_despike:
3145                HELPTEXT( "trc-despike" );
3146                mx_trclist_command( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3147                        &xmv_dspctrl, "despike %s 50.0", &locstat );
3148                cl_set_simfilter_active( xmv_w, TRUE );
3149                mg_print_lastcmd( xmv_w[k_widget_draw], "Despike Traces" );
3150                break;
3151        case k_entry_trc_trend:
3152                HELPTEXT( "trc-trend" );
3153                mx_trclist_command( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3154                        &xmv_dspctrl, "trend %s", &locstat );
3155                cl_set_simfilter_active( xmv_w, TRUE );
3156                mg_print_lastcmd( xmv_w[k_widget_draw], "Remove Trend" );
3157                break;
3158        case k_entry_trc_refml:
3159                HELPTEXT( "trc-refml" );
3160                mx_trclist_refml( &locstat );
3161                mg_clear_selections( xmv_w[k_widget_draw] );
3162                cl_set_simfilter_active( xmv_w, TRUE );
3163                mg_print_lastcmd( xmv_w[k_widget_draw], "Ref ml" );
3164                break;
3165        case k_entry_trc_hide:
3166                HELPTEXT( "trc-hide" );
3167                mx_trclist_command( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3168                        &xmv_dspctrl, "SHM_CMD_HIDE %s", &locstat );
3169                cl_set_simfilter_active( xmv_w, TRUE );
3170                mg_print_lastcmd( xmv_w[k_widget_draw], "Hide Traces" );
3171                break;
3172        case k_entry_trc_invhide:
3173                HELPTEXT( "trc-invhide" );
3174                mx_trclist_command( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3175                        &xmv_dspctrl, "SHM_CMD_HIDE %s inverted", &locstat );
3176                cl_set_simfilter_active( xmv_w, TRUE );
3177                mg_print_lastcmd( xmv_w[k_widget_draw], "InvHide Traces" );
3178                break;
3179        case k_entry_trc_sort_d:
3180                HELPTEXT( "sort-d" );
3181                if  (*xmv_sortstr == '\0')  {
3182                        strcpy( xmv_sortstr, "DISTANCE" );
3183                        strcpy( xmv_sortinfo, "sort:d" );
3184                } else {
3185                        *xmv_sortstr = '\0';
3186                        *xmv_sortinfo = '\0';
3187                        break;
3188                } /*endif*/
3189                cu_get_param_values( xmv_w, xmv_cpar );
3190                cl4_sort_traces( xmv_w[k_widget_draw], &xmv_dspctrl, xmv_sortstr,
3191                        xmv_cpar, &locstat );
3192                mg_print_sortinfo( xmv_w[k_widget_draw], xmv_sortinfo );
3193                mg_print_lastcmd( xmv_w[k_widget_draw], "Sort Dist" );
3194                break;
3195        case k_entry_trc_sort_a:
3196                HELPTEXT( "sort-a" );
3197                if  (*xmv_sortstr == '\0')  {
3198                        strcpy( xmv_sortstr, "AZIMUTH" );
3199                        strcpy( xmv_sortinfo, "sort:a" );
3200                } else {
3201                        *xmv_sortstr = '\0';
3202                        *xmv_sortinfo = '\0';
3203                        break;
3204                } /*endif*/
3205                cu_get_param_values( xmv_w, xmv_cpar );
3206                cl4_sort_traces( xmv_w[k_widget_draw], &xmv_dspctrl, xmv_sortstr,
3207                        xmv_cpar, &locstat );
3208                mg_print_sortinfo( xmv_w[k_widget_draw], xmv_sortinfo );
3209                mg_print_lastcmd( xmv_w[k_widget_draw], "Sort Azim" );
3210                break;
3211        case k_entry_filter:
3212                HELPTEXT( "filter" );
3213                mg_print_lastcmd( xmv_w[k_widget_draw], "Select Filter" );
3214                if  (XtIsManaged(xmv_w[k_widget_filter_box]))  {
3215                        XtUnmanageChild( xmv_w[k_widget_filter_box] );
3216                } else {
3217                        XtManageChild( xmv_w[k_widget_filter_box] );
3218                } /*endif*/
3219                break;
3220        case k_entry_rotate:
3221                HELPTEXT( "rotate" );
3222                mg_print_lastcmd( xmv_w[k_widget_draw], "Rotate" );
3223                cl2_display_busy( xmv_w, TRUE );
3224                cu_get_param_values( xmv_w, xmv_cpar );
3225                mx_rotation( xmv_w[k_widget_draw], &xmv_dspctrl, xmv_cpar->b_azimuth,
3226                        xmv_cpar->source_lat, xmv_cpar->source_lon, &locstat );
3227                cl2_display_busy( xmv_w, FALSE );
3228                break;
3229        case k_entry_amplper_p:
3230                HELPTEXT( "amplper-p" );
3231                xmv_select.waiting = 2;
3232                xmv_select.processed = 0;
3233                xmv_select.initiator = CUC_SELTYPE_AMPLPER_P;
3234                strcpy( xmv_select.select[0].name, "w-start" );
3235                strcpy( xmv_select.select[1].name, "w-end" );
3236                strcpy( xmv_select.infotext, CUC_SELTEXT_AMPLPER_P );
3237                mg_print_status( xmv_w[k_widget_draw], CUC_SELTEXT_AMPLPER_P, TRUE);
3238                mg_print_lastcmd( xmv_w[k_widget_draw], "A&P peak-peak" );
3239                mg_set_cursor( MGC_XCRSR_RIGHT );
3240                reset_xcursor = FALSE;
3241                break;
3242        case k_entry_amplper_z:
3243                HELPTEXT( "amplper-z" );
3244                xmv_select.waiting = 2;
3245                xmv_select.processed = 0;
3246                xmv_select.initiator = CUC_SELTYPE_AMPLPER_Z;
3247                strcpy( xmv_select.select[0].name, "w-start" );
3248                strcpy( xmv_select.select[1].name, "w-end" );
3249                strcpy( xmv_select.infotext, CUC_SELTEXT_AMPLPER_Z );
3250                mg_print_status( xmv_w[k_widget_draw], CUC_SELTEXT_AMPLPER_Z, TRUE);
3251                mg_print_lastcmd( xmv_w[k_widget_draw], "A&P zero-peak" );
3252                mg_set_cursor( MGC_XCRSR_RIGHT );
3253                reset_xcursor = FALSE;
3254                break;
3255        case k_entry_ampl_man:
3256                HELPTEXT( "ampl-man" );
3257                xmv_select.waiting = 2;
3258                xmv_select.processed = 0;
3259                xmv_select.initiator = CUC_SELTYPE_AMPL_MAN;
3260                strcpy( xmv_select.select[0].name, "w-start" );
3261                strcpy( xmv_select.select[1].name, "w-end" );
3262                strcpy( xmv_select.infotext, CUC_SELTEXT_AMPL_MAN );
3263                mg_print_status( xmv_w[k_widget_draw], CUC_SELTEXT_AMPL_MAN, TRUE);
3264                mg_print_lastcmd( xmv_w[k_widget_draw], "Ampl. manually" );
3265                mg_set_cursor( MGC_XCRSR_RIGHT );
3266                reset_xcursor = FALSE;
3267                break;
3268        case k_entry_per_man:
3269                HELPTEXT( "period-man" );
3270                xmv_select.waiting = 2;
3271                xmv_select.processed = 0;
3272                xmv_select.initiator = CUC_SELTYPE_PER_MAN;
3273                strcpy( xmv_select.select[0].name, "w-start" );
3274                strcpy( xmv_select.select[1].name, "w-end" );
3275                strcpy( xmv_select.infotext, CUC_SELTEXT_PER_MAN );
3276                mg_print_status( xmv_w[k_widget_draw], CUC_SELTEXT_PER_MAN, TRUE);
3277                mg_print_lastcmd( xmv_w[k_widget_draw], "Period manually" );
3278                mg_set_cursor( MGC_XCRSR_RIGHT );
3279                reset_xcursor = FALSE;
3280                break;
3281        case k_entry_ampl_surface:
3282                HELPTEXT( "ampl-surface" );
3283                xmv_select.waiting = 2;
3284                xmv_select.processed = 0;
3285                xmv_select.initiator = CUC_SELTYPE_AMPL_SURFACE;
3286                strcpy( xmv_select.select[0].name, "w-start" );
3287                strcpy( xmv_select.select[1].name, "w-end" );
3288                strcpy( xmv_select.infotext, CUC_SELTEXT_AMPL_SURFACE );
3289                mg_print_status( xmv_w[k_widget_draw], CUC_SELTEXT_AMPL_SURFACE, TRUE);
3290                mg_print_lastcmd( xmv_w[k_widget_draw], "Surface Ampl. auto" );
3291                mg_set_cursor( MGC_XCRSR_RIGHT );
3292                reset_xcursor = FALSE;
3293                break;
3294        case k_entry_abort_selection:
3295                HELPTEXT( "abort-selection" );
3296                xmv_select.waiting = 0;
3297                xmv_select.processed = 0;
3298                xmv_select.initiator = CUC_SELTYPE_NONE;
3299                mg_print_status( xmv_w[k_widget_draw], xmv_select.infotext, FALSE );
3300                mg_print_lastcmd( xmv_w[k_widget_draw], "Abort Selection" );
3301                break;
3302        case k_entry_calib_accept:
3303                HELPTEXT( "calib-accept" );
3304                mg_print_lastcmd( xmv_w[k_widget_draw], "Accept Calibration" );
3305                cal_accept_values( xmv_w[k_widget_calibwdw], xmv_cpar );
3306                break;
3307        case k_entry_calib_quit:
3308                HELPTEXT( "calib-quit" );
3309                mg_print_lastcmd( xmv_w[k_widget_draw], "Quit Calibration" );
3310                cal_accept_values( xmv_w[k_widget_calibwdw], NULL );
3311                break;
3312        case k_entry_flags_setcalib:
3313                mg_print_lastcmd( xmv_w[k_widget_draw], "Set Calib Flag" );
3314                xmv_cpar->flags |= CUC_F_EVENT_CALIB;
3315                break;
3316        case k_entry_flags_unsetcalib:
3317                mg_print_lastcmd( xmv_w[k_widget_draw], "Clear Calib Flag" );
3318                xmv_cpar->flags &= ~CUC_F_EVENT_CALIB;
3319                break;
3320        case k_entry_magn_mb:
3321                HELPTEXT( "magn-mb" );
3322                mg_print_lastcmd( xmv_w[k_widget_draw], "Magnitude mb" );
3323                cu_get_param_values( xmv_w, xmv_cpar );
3324                cl2_magnitude( SIC_MAGN_MB, xmv_cpar, &locstat );
3325                break;
3326        case k_entry_magn_ms_plain:
3327                HELPTEXT( "magn-ms-plain" );
3328                mg_print_lastcmd( xmv_w[k_widget_draw], "Magnitude MS (plain)" );
3329                cu_get_param_values( xmv_w, xmv_cpar );
3330                cl2_magnitude( SIC_MAGN_MS_PLAIN, xmv_cpar, &locstat );
3331                break;
3332        case k_entry_magn_ms_c_na:
3333                HELPTEXT( "magn-ms-c-na" );
3334                mg_print_lastcmd( xmv_w[k_widget_draw], "Magnitude MS c-na" );
3335                cu_get_param_values( xmv_w, xmv_cpar );
3336                cl2_magnitude( SIC_MAGN_MS_C_NA, xmv_cpar, &locstat );
3337                break;
3338        case k_entry_magn_ms_c_eu:
3339                HELPTEXT( "magn-ms-c-eu" );
3340                mg_print_lastcmd( xmv_w[k_widget_draw], "Magnitude MS c-eu" );
3341                cu_get_param_values( xmv_w, xmv_cpar );
3342                cl2_magnitude( SIC_MAGN_MS_C_EU, xmv_cpar, &locstat );
3343                break;
3344        case k_entry_magn_ms_c_o:
3345                HELPTEXT( "magn-ms-c-o" );
3346                mg_print_lastcmd( xmv_w[k_widget_draw], "Magnitude MS c-o" );
3347                cu_get_param_values( xmv_w, xmv_cpar );
3348                cl2_magnitude( SIC_MAGN_MS_C_O, xmv_cpar, &locstat );
3349                break;
3350        case k_entry_magn_ms_o:
3351                HELPTEXT( "magn-ms-o" );
3352                mg_print_lastcmd( xmv_w[k_widget_draw], "Magnitude MS o" );
3353                cu_get_param_values( xmv_w, xmv_cpar );
3354                cl2_magnitude( SIC_MAGN_MS_O, xmv_cpar, &locstat );
3355                break;
3356        case k_entry_magn_ml:
3357                HELPTEXT( "magn-ml" );
3358                mg_print_lastcmd( xmv_w[k_widget_draw], "Magnitude ml" );
3359                if  (strcmp(xmv_cmd_filter.name,"S+WOODAND") != 0)  {
3360                        /* locstat = CUE_NO_WOODAND; */
3361                        /* break; */
3362                        /* make it instead of complaining */
3363                        int     item;      /* button to emulate */
3364                        XmToggleButtonCallbackStruct data;
3365                        item = k_button_filter_woodand;
3366                        data.set = TRUE;
3367                        xm_call_activate( (Widget)0, &item, &data );
3368                        item = k_button_filter_ok;
3369                        xm_call_activate( (Widget)0, &item, NULL );
3370                } /*endif*/
3371                xmv_select.waiting = 2;
3372                xmv_select.processed = 0;
3373                xmv_select.initiator = CUC_SELTYPE_MAGN_ML;
3374                strcpy( xmv_select.select[0].name, "w-start-ml" );
3375                strcpy( xmv_select.select[1].name, "w-end-ml" );
3376                strcpy( xmv_select.infotext, CUC_SELTEXT_MAGN_ML );
3377                mg_print_status( xmv_w[k_widget_draw], CUC_SELTEXT_MAGN_ML, TRUE);
3378                cu_get_param_values( xmv_w, xmv_cpar );
3379                mg_set_cursor( MGC_XCRSR_RIGHT );
3380                reset_xcursor = FALSE;
3381                break;
3382        case k_entry_magn_del_ml:
3383                mg_print_lastcmd( xmv_w[k_widget_draw], "delete ml" );
3384                cl4_del_magnitude( xmv_w[k_widget_draw], cPiMagnMl );
3385                cl_set_simfilter_active( xmv_w, TRUE );
3386                break;
3387        case k_entry_gencomment:
3388                HELPTEXT( "comment" );
3389                mg_print_lastcmd( xmv_w[k_widget_draw], "Enter Comment" );
3390                cl2_modify_comment( &(xmv_cpar->comment), &locstat );
3391                break;
3392        case k_entry_info_source:
3393                HELPTEXT( "info-source" );
3394                mg_print_lastcmd( xmv_w[k_widget_draw], "Info Source" );
3395                if  (XtIsManaged(xmv_w[k_widget_infsource_box]))  {
3396                        XtUnmanageChild( xmv_w[k_widget_infsource_box] );
3397                } else {
3398                        XtManageChild( xmv_w[k_widget_infsource_box] );
3399                } /*endif*/
3400                break;
3401        case k_entry_params_save:
3402                HELPTEXT( "save-params" );
3403                mg_print_lastcmd( xmv_w[k_widget_draw], "Save Status" );
3404                cu_get_param_values( xmv_w, xmv_cpar );
3405                cl3_save_parameters( CUC_SAVEMODE_A, xmv_cpar, &locstat );
3406                break;
3407        case k_entry_params_restore:
3408                HELPTEXT( "params-restore" );
3409                cl3_restore_parameters( "a", xmv_cpar, &locstat );
3410                xmv_cpar->soft_change = TRUE;
3411                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3412                xmv_cpar->soft_change = FALSE;
3413                mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &locstat );
3414                /* mg_plot_phases( xmv_w[k_widget_draw], &locstat ); */
3415                mg_print_lastcmd( xmv_w[k_widget_draw], "Restore Status" );
3416                break;
3417        case k_entry_params_recover:
3418                HELPTEXT( "params-recover" );
3419                cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_SAVE, &locstat );
3420                mg_print_lastcmd( xmv_w[k_widget_draw], "Recover Status" );
3421                break;
3422        case k_entry_params_evt:
3423                HELPTEXT( "params-evt" );
3424                cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_EVT, &locstat );
3425                mg_print_lastcmd( xmv_w[k_widget_draw], "Recover Evt-File" );
3426                break;
3427        case k_entry_locsat:
3428                HELPTEXT( "locsat" );
3429                mg_print_lastcmd( xmv_w[k_widget_draw], "LocSAT" );
3430                if  (XtIsManaged(xmv_w[k_widget_locsat_box]))  {
3431                        XtUnmanageChild( xmv_w[k_widget_locsat_box] );
3432                } else {
3433                        XtManageChild( xmv_w[k_widget_locsat_box] );
3434                } /*endif*/
3435                break;
3436        case k_entry_opick_setup:
3437                HELPTEXT( "opick_setup" );
3438                mg_print_lastcmd( xmv_w[k_widget_draw], "OnsetPick Setup" );
3439                if  (XtIsManaged(xmv_w[k_widget_opick_box]))  {
3440                        XtUnmanageChild( xmv_w[k_widget_opick_box] );
3441                } else {
3442                        XtManageChild( xmv_w[k_widget_opick_box] );
3443                } /*endif*/
3444                break;
3445        case k_entry_ext_location:
3446                { float xslo;   /* dummy value */
3447                HELPTEXT( "ext-location" );
3448                cu_get_param_values( xmv_w, xmv_cpar );
3449                si_ext_location( xmv_cpar->source_lat, xmv_cpar->source_lon,
3450                        xmv_cpar->depth, GpGetString(cGpS_refstation), &(xmv_cpar->distance),
3451                        &(xmv_cpar->b_azimuth), &xslo, &locstat );
3452                xmv_cpar->dist_unit = CUC_DIST_UNIT_DEG;
3453                /* xmv_cpar->b_slowness_err = 0.0; */
3454                xmv_cpar->b_azimuth_err = 0.0;
3455                cl4_update_region_name( xmv_cpar, &locstat );
3456                xmv_cpar->soft_change = TRUE;
3457                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3458                xmv_cpar->soft_change = FALSE;
3459                mg_print_lastcmd( xmv_w[k_widget_draw], "External Loc" );
3460                break;
3461                }
3462        case k_entry_del_location:
3463                HELPTEXT( "del-location" );
3464                /*
3465                xmv_cpar->source_lat = 0.0;
3466                xmv_cpar->source_lon = 0.0;
3467                xmv_cpar->origin[0] = '\0';
3468                xmv_cpar->depth = GpGetFloat( cGpF_default_depth );
3469                xmv_cpar->source_type = GpGetInt( cGpI_default_event_type );
3470                xmv_cpar->reg_id = 0;
3471                xmv_cpar->regname[0] = '\0';
3472                xmv_cpar->loc_meth = CUC_LOCMETH_UNDEFINED;
3473                xmv_cpar->loc_quality = GpGetInt( cGpI_default_loc_quality );
3474                xmv_cpar->loc_addpar[0] = '\0';
3475                xmv_cpar->distance = 0.0;
3476                xmv_cpar->dist_unit = CUC_DIST_UNIT_DEG;
3477                xmv_cpar->source[0] = '\0';
3478                */
3479                cu_reset_parameters( xmv_cpar );
3480                xmv_cpar->soft_change = TRUE;
3481                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3482                xmv_cpar->soft_change = FALSE;
3483                break;
3484        case k_entry_match_location:
3485                { char station[cBcShortStrLth+1];  /* station name */
3486                  char agency[cBcShortStrLth+1];   /* lookup agency name */
3487                  char locphase[cPiMaxPhaseLth+1]; /* local phase name */
3488                  float xslo;                      /* dummy value */
3489                HELPTEXT( "match-location" );
3490                if  (xmv_phasetrc == NULL)  {
3491                        *station = '\0';
3492                        locstat = CUE_TOUCH_PHASE;
3493                        break;
3494                } else {
3495                        locstat = cBcNoError;
3496                        db_gets( xmv_phasetrc, ES_STATION, cBcShortStrLth, station, &locstat );
3497                        if  (locstat != cBcNoError)  {
3498                                locstat = CUE_TOUCH_PHASE;
3499                                break;
3500                        } /*endif*/
3501                } /*endif*/
3502                cl2_display_busy( xmv_w, TRUE );
3503                if  (*station == '\0')  strcpy( station, GpGetString(cGpS_refstation) );
3504                strcpy( locphase, xmv_phase.name );
3505                if  (strcmp(locphase,"L") == 0)  strcpy( locphase, "LR" );
3506                si_lookup_agency( xmv_phase.onset, agency );
3507                si_match_location( agency, locphase, xmv_phase.onset,
3508                        station, xmv_cpar->b_slowness, xmv_cpar->b_azimuth, TRUE,
3509                        &(xmv_cpar->source_lat), &(xmv_cpar->source_lon),
3510                        &(xmv_cpar->depth), xmv_cpar->origin, xmv_cpar->source, &locstat );
3511                if  (locstat == cBcNoError)  {
3512                        /*strcpy( xmv_cpar->source, "neic-a" );*/
3513                        si_ext_location( xmv_cpar->source_lat, xmv_cpar->source_lon,
3514                                xmv_cpar->depth, GpGetString(cGpS_refstation),
3515                                &(xmv_cpar->distance), &(xmv_cpar->b_azimuth), &xslo, &locstat );
3516                        xmv_cpar->dist_unit = CUC_DIST_UNIT_DEG;
3517                        cl4_update_region_name( xmv_cpar, &locstat );
3518                        xmv_cpar->soft_change = TRUE;
3519                        cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3520                        xmv_cpar->soft_change = FALSE;
3521                } /*endif*/
3522                cl2_display_busy( xmv_w, FALSE );
3523                mg_print_lastcmd( xmv_w[k_widget_draw], "Match Location" );
3524                break;
3525                }
3526        case k_entry_identify_phase:
3527                { char station[cBcShortStrLth+1];  /* station name */
3528                  float xslo;                      /* dummy value */
3529                  char idphase[cBcShortStrLth+1];  /* phase found */
3530                  int cnt;                         /* phase rename counter */
3531                HELPTEXT( "identify-phase" );
3532                if  (xmv_phasetrc == NULL)  {
3533                        *station = '\0';
3534                        locstat = CUE_TOUCH_PHASE;
3535                        break;
3536                } else {
3537                        db_gets( xmv_phasetrc, ES_STATION, cBcShortStrLth, station, NULL );
3538                } /*endif*/
3539                cl2_display_busy( xmv_w, TRUE );
3540                if  (*station == '\0')  strcpy( station, GpGetString(cGpS_refstation) );
3541                si_identify_phase( xmv_phase.onset,
3542                        station, xmv_cpar->b_slowness, xmv_cpar->b_azimuth, idphase,
3543                        &(xmv_cpar->source_lat), &(xmv_cpar->source_lon),
3544                        &(xmv_cpar->depth), xmv_cpar->origin, xmv_cpar->source, &locstat );
3545                if  (locstat == cBcNoError)  {
3546                        xmv_cpar->depth_type = CUC_DEPTH_RELIABLE;
3547                        if  (strcmp(xmv_phase.name,idphase) != 0)  {
3548                                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
3549                                        &locstat );
3550                                PiRenamePhase( xmv_phase.name, idphase, &cnt );
3551                                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
3552                                        &locstat );
3553                                strcpy( xmv_phase.name, idphase );
3554                        } /*endif*/
3555                        si_ext_location( xmv_cpar->source_lat, xmv_cpar->source_lon,
3556                                xmv_cpar->depth, GpGetString(cGpS_refstation),
3557                                &(xmv_cpar->distance), &(xmv_cpar->b_azimuth), &xslo, &locstat );
3558                        xmv_cpar->dist_unit = CUC_DIST_UNIT_DEG;
3559                        cl4_update_region_name( xmv_cpar, &locstat );
3560                        xmv_cpar->soft_change = TRUE;
3561                        cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3562                        xmv_cpar->soft_change = FALSE;
3563                } /*endif*/
3564                cl2_display_busy( xmv_w, FALSE );
3565                mg_print_lastcmd( xmv_w[k_widget_draw], "Identify Phase" );
3566                break;
3567                }
3568        case k_entry_source_region:
3569                HELPTEXT( "source-region" );
3570                cu_get_param_values( xmv_w, xmv_cpar );
3571                cl4_loc_from_dist( xmv_cpar, &locstat );
3572                xmv_cpar->soft_change = TRUE;
3573                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3574                xmv_cpar->soft_change = FALSE;
3575                mg_print_lastcmd( xmv_w[k_widget_draw], "Src Region" );
3576                break;
3577        case k_entry_phase_difference:
3578                HELPTEXT( "phase-diff" );
3579                cl4_phase_difference( GpGetString(cGpS_diff_phase_list), xmv_cpar->depth,
3580                        &(xmv_cpar->distance), &locstat );
3581                xmv_cpar->dist_unit = CUC_DIST_UNIT_DEG;
3582                xmv_cpar->soft_change = TRUE;
3583                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3584                xmv_cpar->soft_change = FALSE;
3585                mg_print_lastcmd( xmv_w[k_widget_draw], "Phase Diff" );
3586                break;
3587        case k_entry_deltheo:
3588                HELPTEXT( "del-theo" );
3589                /* delete all theoretical phases from all traces */
3590                cu_delete_all_phases( xmv_w[k_widget_draw],
3591                        xmv_w[k_widget_single_draw], "--theo--", TRUE );
3592                break;
3593        case k_entry_fk:
3594                HELPTEXT( "fk" );
3595                mg_print_lastcmd( xmv_w[k_widget_draw], "FK" );
3596                if  (XtIsManaged(xmv_w[k_widget_fk_box]))  {
3597                        XtUnmanageChild( xmv_w[k_widget_fk_box] );
3598                } else {
3599                        cl3_preset_fk_values( xmv_w, xmv_cmd_filter.name );
3600                        XtManageChild( xmv_w[k_widget_fk_box] );
3601                } /*endif*/
3602                break;
3603        case k_entry_vespa:
3604                HELPTEXT( "vespa" );
3605                mg_print_lastcmd( xmv_w[k_widget_draw], "Vespa" );
3606                XtSetSensitive( xmv_w[k_widget_vespa_export_button], FALSE );
3607                if  (XtIsManaged(xmv_w[k_widget_vespa_input_box]))  {
3608                        XtUnmanageChild( xmv_w[k_widget_vespa_input_box] );
3609                } else {
3610                        XtManageChild( xmv_w[k_widget_vespa_input_box] );
3611                } /*endif*/
3612                break;
3613        case k_entry_setup:
3614                HELPTEXT( "setup-box" );
3615                mg_print_lastcmd( xmv_w[k_widget_draw], "Setup Box" );
3616                if  (XtIsManaged(xmv_w[k_widget_setup_box]))  {
3617                        XtUnmanageChild( xmv_w[k_widget_setup_box] );
3618                } else {
3619                        XtManageChild( xmv_w[k_widget_setup_box] );
3620                } /*endif*/
3621                /* it's not a very good idea to put this here: */
3622                mg_init_tracedisplay( xmv_w[k_widget_draw], -1, -1,
3623                        GpGetInt(cGpI_top_margin), -1 );
3624                break;
3625        case k_entry_configure:
3626                HELPTEXT( "configure" );
3627                mg_print_lastcmd( xmv_w[k_widget_draw], "Configure" );
3628                xm_call_configure();
3629                break;
3630        case k_entry_refstation:
3631                HELPTEXT( "refstation" );
3632                mg_print_lastcmd( xmv_w[k_widget_draw], "Ref. Station" );
3633                if  (XtIsManaged(xmv_w[k_widget_refstat_box]))  {
3634                        XtUnmanageChild( xmv_w[k_widget_refstat_box] );
3635                } else {
3636                        XtManageChild( xmv_w[k_widget_refstat_box] );
3637                } /*endif*/
3638                break;
3639        case k_entry_mparam_sn_auto:
3640                HELPTEXT( "signoise-auto" );
3641                mg_print_lastcmd( xmv_w[k_widget_draw], "S/N auto" );
3642                cl4_signoise_set_windows( xmv_w,
3643                        cu_get_string(xmv_w[k_widget_phase_name_text]),
3644                        xmv_cmd_filter.name, &locstat );
3645                if  (SySevere(&locstat))  break;
3646                cl4_signoise_values( cu_get_string(xmv_w[k_widget_phase_name_text]),
3647                        &locstat );
3648                break;
3649        case k_entry_mparam_sn_repeat:
3650                HELPTEXT( "signoise-repeat" );
3651                mg_print_lastcmd( xmv_w[k_widget_draw], "S/N repeat" );
3652                cl4_signoise_values( cu_get_string(xmv_w[k_widget_phase_name_text]),
3653                        &locstat );
3654                break;
3655        case k_entry_mparam_sn_delete:
3656                HELPTEXT( "signoise-delete" );
3657                mg_print_lastcmd( xmv_w[k_widget_draw], "S/N delete" );
3658                cl4_delete_signoise_values(
3659                        cu_get_string(xmv_w[k_widget_phase_name_text]), &locstat );
3660                cu_delete_all_phases( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3661                        "--pseudo--", TRUE );
3662                break;
3663        case k_entry_mparam_sn_clear:
3664                HELPTEXT( "delete-pseudos" );
3665                mg_print_lastcmd( xmv_w[k_widget_draw], "del pseudos" );
3666                cu_delete_all_phases( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3667                        "--pseudo--", TRUE );
3668                break;
3669        case k_entry_spectrum:
3670                HELPTEXT( "spectrum" );
3671                mg_print_lastcmd( xmv_w[k_widget_draw], "Spectrum" );
3672                spc_initialize( xmv_w[k_widget_spectrum_box],
3673                        xmv_w[k_widget_spctwdw], &locstat );
3674                spc_insert_spectrum( xmv_w[k_widget_spctwdw], &locstat );
3675                break;
3676        case k_entry_spectrogram:
3677                HELPTEXT( "spectrogram" );
3678                mg_print_lastcmd( xmv_w[k_widget_draw], "Spectrogram" );
3679                spc_spectrogram( &locstat );
3680                break;
3681        case k_entry_spct_insert:
3682                HELPTEXT( "spectrum-insert" );
3683                mg_print_lastcmd( xmv_w[k_widget_draw], "Insert Spectrum" );
3684                spc_insert_spectrum( xmv_w[k_widget_spctwdw], &locstat );
3685                break;
3686        case k_entry_spct_fitline:
3687                HELPTEXT( "spectrum-fitline" );
3688                mg_print_lastcmd( xmv_w[k_widget_draw], "Fit Line" );
3689                spc_start_fitline();
3690                break;
3691        case k_entry_spct_quit:
3692                HELPTEXT( "spectrum-quit" );
3693                mg_print_lastcmd( xmv_w[k_widget_draw], "Quit Spectrum" );
3694                spc_close_window();
3695                break;
3696        case k_entry_spct_autoscale:
3697                HELPTEXT( "spectrum-autoscale" );
3698                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Lo-Ampl Up" );
3699                spc_change_display( cSpcAutoscale, &locstat );
3700                break;
3701        case k_entry_spct_amplo_up:
3702                HELPTEXT( "spectrum-amplo_up" );
3703                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Lo-Ampl Up" );
3704                spc_change_display( cSpcAmpLoUp, &locstat );
3705                break;
3706        case k_entry_spct_amplo_down:
3707                HELPTEXT( "spectrum-amplo_down" );
3708                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Lo-Ampl Down" );
3709                spc_change_display( cSpcAmpLoDown, &locstat );
3710                break;
3711        case k_entry_spct_amphi_up:
3712                HELPTEXT( "spectrum-amphi_up" );
3713                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Hi-Ampl Up" );
3714                spc_change_display( cSpcAmpHiUp, &locstat );
3715                break;
3716        case k_entry_spct_amphi_down:
3717                HELPTEXT( "spectrum-amphi_down" );
3718                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Hi-Ampl Down" );
3719                spc_change_display( cSpcAmpHiDown, &locstat );
3720                break;
3721        case k_entry_spct_frqlo_up:
3722                HELPTEXT( "spectrum-frqlo_up" );
3723                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Lo-Freq Up" );
3724                spc_change_display( cSpcFrqLoUp, &locstat );
3725                break;
3726        case k_entry_spct_frqlo_down:
3727                HELPTEXT( "spectrum-frqlo_down" );
3728                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Lo-Freq Down" );
3729                spc_change_display( cSpcFrqLoDown, &locstat );
3730                break;
3731        case k_entry_spct_frqhi_up:
3732                HELPTEXT( "spectrum-frqhi_up" );
3733                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Hi-Freq Up" );
3734                spc_change_display( cSpcFrqHiUp, &locstat );
3735                break;
3736        case k_entry_spct_frqhi_down:
3737                HELPTEXT( "spectrum-frqhi_down" );
3738                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Hi-Freq Down" );
3739                spc_change_display( cSpcFrqHiDown, &locstat );
3740                break;
3741        case k_entry_spct_mode_powspc:
3742                HELPTEXT( "spectrum-mode_powspc" );
3743                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Mode PowSpec" );
3744                spc_recompute_spectra( cSpcModePowSpc, &locstat );
3745                break;
3746        case k_entry_spct_mode_fft:
3747                HELPTEXT( "spectrum-mode_fft" );
3748                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Mode FFT" );
3749                spc_recompute_spectra( cSpcModeFft, &locstat );
3750                break;
3751        case k_entry_spct_mode_fft2:
3752                HELPTEXT( "spectrum-mode_fft2" );
3753                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Mode FFT^2" );
3754                spc_recompute_spectra( cSpcModeFft2, &locstat );
3755                break;
3756        case k_entry_spct_clear:
3757                HELPTEXT( "spectrum-clear" );
3758                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Clear" );
3759                break;
3760        case k_entry_spct_setup:
3761                HELPTEXT( "spectrum-setup" );
3762                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Setup" );
3763                spc_set_dialog_values( xmv_w );
3764                if  (XtIsManaged(xmv_w[k_widget_spcsetup_box]))  {
3765                        XtUnmanageChild( xmv_w[k_widget_spcsetup_box] );
3766                } else {
3767                        XtManageChild( xmv_w[k_widget_spcsetup_box] );
3768                } /*endif*/
3769                break;
3770        case k_entry_pmotion:
3771                HELPTEXT( "pmotion" );
3772                mg_print_lastcmd( xmv_w[k_widget_draw], "Part.Motion" );
3773                pmm_initialize( xmv_w[k_widget_pmotion_box],
3774                        xmv_w[k_widget_pmwdw], &locstat );
3775                xmv_pm_on = TRUE;
3776                break;
3777        case k_entry_pm_quit:
3778                HELPTEXT( "pm-quit" );
3779                mg_print_lastcmd( xmv_w[k_widget_draw], "Quit Part.Motion" );
3780                pmm_close_window();
3781                xmv_pm_on = FALSE;
3782                break;
3783        case k_entry_pm_lincol:
3784                HELPTEXT( "pm-line-col" );
3785                mg_print_lastcmd( xmv_w[k_widget_draw], "PM Line Col." );
3786                pmm_set_mode( cPmmModeLineColored );
3787                break;
3788        case k_entry_pm_linmono:
3789                HELPTEXT( "pm-line-mono" );
3790                mg_print_lastcmd( xmv_w[k_widget_draw], "PM Line Mono." );
3791                pmm_set_mode( cPmmModeLineMono );
3792                break;
3793        case k_entry_pm_plot1:
3794                HELPTEXT( "pm-plot1" );
3795                mg_print_lastcmd( xmv_w[k_widget_draw], "PM Plot NE" );
3796                pmm_set_mode( cPmmModePlot1 );
3797                break;
3798        case k_entry_pm_plot3:
3799                HELPTEXT( "pm-plot3" );
3800                mg_print_lastcmd( xmv_w[k_widget_draw], "PM Plot 3" );
3801                pmm_set_mode( cPmmModePlot3 );
3802                break;
3803        case k_entry_pm_zoom_on:
3804                HELPTEXT( "pm-zoom-on" );
3805                mg_print_lastcmd( xmv_w[k_widget_draw], "PM Zoom On" );
3806                pmm_set_mode( cPmmModeZoomOn );
3807                break;
3808        case k_entry_pm_zoom_off:
3809                HELPTEXT( "pm-zoom-off" );
3810                mg_print_lastcmd( xmv_w[k_widget_draw], "PM Zoom Off" );
3811                pmm_set_mode( cPmmModeZoomOff );
3812                break;
3813        case k_entry_polarfil:
3814                HELPTEXT( "polarfil" );
3815                mg_print_lastcmd( xmv_w[k_widget_draw], "Polar.Filter" );
3816                pol_initialize( xmv_w[k_widget_polarfil_box],
3817                        xmv_w[k_widget_polwdw], &locstat );
3818                xmv_polar_on = TRUE;
3819                break;
3820        case k_entry_pol_quit:
3821                HELPTEXT( "pol-quit" );
3822                mg_print_lastcmd( xmv_w[k_widget_draw], "Quit Polar.Filter" );
3823                pol_close_window();
3824                xmv_polar_on = FALSE;
3825                break;
3826        case k_entry_pol_inc_cohlth:
3827                pol_incpar( POL_ID_COHLTH, 1 );
3828                break;
3829        case k_entry_pol_dec_cohlth:
3830                pol_incpar( POL_ID_COHLTH, -1 );
3831                break;
3832        case k_entry_pol_inc_pow_linfil:
3833                pol_incpar( POL_ID_POW_LINFIL, 1 );
3834                break;
3835        case k_entry_pol_dec_pow_linfil:
3836                pol_incpar( POL_ID_POW_LINFIL, -1 );
3837                break;
3838        case k_entry_calib:
3839                cal_initialize( xmv_w[k_widget_calibration_box],
3840                        xmv_w[k_widget_calibwdw], &locstat );
3841                if  (Severe(&locstat))  break;
3842                cal_display_calib( xmv_w[k_widget_calibwdw], xmv_cpar, &locstat );
3843                break;
3844        case k_entry_planewave:
3845                mg_print_lastcmd( xmv_w[k_widget_draw], "Plane Wave" );
3846                cl2_display_busy( xmv_w, TRUE );
3847                cu_get_param_values( xmv_w, xmv_cpar );
3848                cu_localization(
3849                        cu_get_string(xmv_w[k_widget_phase_name_text]),
3850                        CUF_DOLOC_SLOAZ, xmv_cpar, &locstat );
3851                xmv_cpar->soft_change = TRUE;
3852                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3853                xmv_cpar->soft_change = FALSE;
3854                cu_print_param_values( xmv_cpar );
3855                cl2_display_busy( xmv_w, FALSE );
3856                break;
3857        case k_entry_align:
3858                mx_handle_beam( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3859                        FALSE, &xmv_dspctrl, xmv_cpar,
3860                        cu_get_string(xmv_w[k_widget_phase_name_text]), &locstat );
3861                mg_print_lastcmd( xmv_w[k_widget_draw], "Align" );
3862                break;
3863        case k_entry_beam:
3864                cu_get_param_values( xmv_w, xmv_cpar );
3865                mx_handle_beam( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3866                        TRUE, &xmv_dspctrl, xmv_cpar, "", &locstat );
3867                mg_print_lastcmd( xmv_w[k_widget_draw], "Beam" );
3868                break;
3869        case k_entry_fixbeam:
3870                cl4_fix_beam( xmv_w, &xmv_dspctrl, xmv_cmd_filter.name, &locstat );
3871                mg_print_lastcmd( xmv_w[k_widget_draw], "Fix Beam" );
3872                xmv_cmd_readg.keep = TRUE;
3873                xmv_keeptrc_auto = TRUE;
3874                XmToggleButtonSetState( xmv_w[k_widget_read_grsn_keep], TRUE, FALSE );
3875                break;
3876        case k_entry_autopick1:
3877                cl_auto_beam_pick( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3878                        GpGetString(cGpS_auto_phase), TRUE, &locstat );
3879                mg_print_lastcmd( xmv_w[k_widget_draw], "Min/Max Pick" );
3880                break;
3881        case k_entry_corrpick:
3882                cl_correlation_pick( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3883                        cu_get_string(xmv_w[k_widget_phase_name_text]), &locstat );
3884                mg_print_lastcmd( xmv_w[k_widget_draw], "Correlation Pick" );
3885                break;
3886        case k_entry_onsetpick:
3887                cl4_onset_pick( xmv_w, &xmv_dspctrl,
3888                        cu_get_string(xmv_w[k_widget_phase_name_text]), TRUE, &locstat );
3889                mg_print_lastcmd( xmv_w[k_widget_draw], "Onset Pick" );
3890                break;
3891        case k_entry_residcorr:
3892                cl4_resid_corr( TRUE, xmv_cpar->b_slowness, xmv_cpar->b_azimuth,
3893                        &locstat );
3894                cu_set_exec_flag( CUC_F_EXEC_RESIDCORR, TRUE );
3895                mg_print_lastcmd( xmv_w[k_widget_draw], "Residual Correction" );
3896                break;
3897        case k_entry_residdel:
3898                cl4_resid_corr( FALSE, 0.0, 0.0, &locstat );
3899                cu_set_exec_flag( CUC_F_EXEC_RESIDCORR, FALSE );
3900                mg_print_lastcmd( xmv_w[k_widget_draw], "Residual Delete" );
3901                break;
3902        case k_entry_eproc1:
3903        case k_entry_eproc2:
3904        case k_entry_eproc3:
3905        case k_entry_eproc4:
3906        case k_entry_eproc5:
3907        case k_entry_eproc6:
3908        case k_entry_eproc7:
3909        case k_entry_eproc8:
3910        case k_entry_eproc9:
3911        case k_entry_eproc10:
3912        case k_entry_eproc11:
3913        case k_entry_eproc12:
3914        case k_entry_eproc13:
3915        case k_entry_eproc14:
3916        case k_entry_eproc15:
3917        case k_entry_eproc16:
3918        case k_entry_eproc17:
3919        case k_entry_eproc18:
3920        case k_entry_eproc19:
3921        case k_entry_eproc20:
3922                cl3_call_extproc( (*tag)-k_entry_eproc1+1, xmv_w, &xmv_dspctrl,
3923                        &xmv_par, &xmv_phase, &locstat );
3924                break;
3925        case k_entry_add_plugin:
3926                cl2_display_busy( xmv_w, TRUE );
3927                mg_print_lastcmd( xmv_w[k_widget_draw], "Add Plugin" );
3928                cl3_request_extproc( xmv_w, &locstat );
3929                cl2_display_busy( xmv_w, FALSE );
3930                break;
3931        case k_entry_adrm_request:
3932                HELPTEXT( "adrm_request" );
3933                mg_print_lastcmd( xmv_w[k_widget_draw], "AutoDRM Request" );
3934                if  (XtIsManaged(xmv_w[k_widget_adrm_selection_box]))  {
3935                        XtUnmanageChild( xmv_w[k_widget_adrm_selection_box] );
3936                } else {
3937                        XtManageChild( xmv_w[k_widget_adrm_selection_box] );
3938                } /*endif*/
3939                break;
3940        case k_entry_locate_tele:
3941                mg_print_lastcmd( xmv_w[k_widget_draw], "Localize" );
3942                cl2_display_busy( xmv_w, TRUE );
3943                cu_get_param_values( xmv_w, xmv_cpar );
3944                cu_localization(
3945                        cu_get_string(xmv_w[k_widget_phase_name_text]),
3946                        CUF_DOLOC_DISTANCE|CUF_DOLOC_ORIGIN, xmv_cpar, &locstat );
3947                xmv_cpar->soft_change = TRUE;
3948                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3949                xmv_cpar->soft_change = FALSE;
3950                cu_print_param_values( xmv_cpar );
3951                cl2_display_busy( xmv_w, FALSE );
3952                break;
3953        case k_entry_key_arrow_up:
3954        case k_entry_key_arrow_down:
3955        case k_entry_key_arrow_left:
3956        case k_entry_key_arrow_right:
3957        if  (xmv_last_window_no == MGC_WDW_MAIN)
3958                mg_draw_cursor( xmv_w[k_widget_draw], MGC_WDW_MAIN, &xmv_dspctrl,
3959                MGC_CRSR_CLEAR, 0, 0, NULL);
3960        else
3961                mg_draw_cursor( xmv_w[k_widget_single_draw], MGC_WDW_SINGLE,
3962                &xmv_dspctrl, MGC_CRSR_CLEAR, 0, 0, NULL);
3963                xm_move_drag_window( *tag );
3964                break;
3965        default:
3966                printf( "*SHM: illegal menu entry number\n" );
3967        } /*endswitch*/
3968
3969        if  (reset_xcursor)
3970                mg_set_cursor( MGC_XCRSR_NORMAL );
3971        /* XtSetSensitive( xmv_w[k_widget_main], TRUE ); */
3972        if  (Severe(&locstat))
3973                cu_alert( locstat );
3974
3975} /* end of xm_call_menu_select */
3976
3977
3978
3979/*--------------------------------------------------------------------------*/
3980
3981
3982
3983static void xm_call_scale( Widget widget, int *tag, XmScaleCallbackStruct *data )
3984
3985/* manages time slider
3986 *
3987 * parameters of routine
3988 * Widget     widget;     input; scale widget
3989 * int        *tag;       input; scale number
3990 * XmScaleCallbackStruct *data; output; slider value
3991 */
3992{
3993        /* local variables */
3994        int      minlth;              /* slider value */
3995        char     str[BC_LINELTH+1];   /* number string */
3996        STATUS   locstat;             /* local status */
3997        int      dspwidth, dspheight; /* display size (drawing area) in pixel */
3998        int      newwidth, newheight; /* modified values */
3999        int      n;                   /* number of arguments */
4000        Arg      arglist[3];          /* argument list */
4001        int      u_draw_area_width;   /* drawing area width */
4002        int      u_draw_area_height;  /* drawing area height */
4003
4004        /* executable code */
4005
4006        minlth = data->value;
4007        switch  (*tag)  {
4008        case k_scale_read_grsn_length:
4009                sprintf( str, "%4.1f", (float)minlth );
4010                cu_set_string( xmv_w[k_widget_read_grsn_length], str );
4011                break;
4012        case k_scale_param_ctrl_zoom:
4013                xmv_dspctrl.zoom = pow( GpGetFloat(cGpF_trace_zoom_base),
4014                        (float)minlth/GpGetFloat(cGpF_trace_zoom_exp) );
4015                locstat = BC_NOERROR;
4016                mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &locstat );
4017                if  (Severe(&locstat))
4018                        printf( "*SHM: xm_call_scale: redraw status %d\n", locstat );
4019                break;
4020        case k_scale_filter_autocut:
4021                xmv_cmd_filter.autocut = (float)minlth;
4022                break;
4023        case k_scale_setup_dh:
4024                u_draw_area_width = GpGetInt( cGpI_draw_area_width );
4025                u_draw_area_height = GpGetInt( cGpI_draw_area_height );
4026                dspwidth = u_draw_area_width;
4027                dspheight = u_draw_area_height;
4028                newheight = (int)((float)dspheight * pow(GpGetFloat(cGpF_area_zoom_base),
4029                        (float)minlth/GpGetFloat(cGpF_area_zoom_exp)) );
4030                if  (GpGetInt(cGpI_debug_level) > 2)
4031                        printf( "SHM-dbg3: new height %d\n", newheight );
4032                xmv_prevent_resize++;
4033                n = 0;
4034                XtSetArg( arglist[n], XmNheight, newheight );  n++;
4035                XtSetValues( xmv_w[k_widget_draw], arglist, 1 );
4036                locstat = cBcNoError;
4037                pix_resize_window_buffer( XtDisplay(xmv_w[k_widget_draw]),
4038                        XtWindow(xmv_w[k_widget_draw]), &locstat );
4039                mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &locstat );
4040                break;
4041        case k_scale_setup_dw:
4042                u_draw_area_width = GpGetInt( cGpI_draw_area_width );
4043                u_draw_area_height = GpGetInt( cGpI_draw_area_height );
4044                dspwidth = u_draw_area_width;
4045                dspheight = u_draw_area_height;
4046                newwidth = (int)((float)dspwidth * pow(GpGetFloat(cGpF_area_zoom_base),
4047                        (float)minlth/GpGetFloat(cGpF_area_zoom_exp)) );
4048                if  (GpGetInt(cGpI_debug_level) > 2)
4049                        printf( "SHM-dbg3: new width %d\n", newwidth );
4050                xmv_prevent_resize++;
4051                n = 0;
4052                XtSetArg( arglist[n], XmNwidth, newwidth );  n++;
4053                XtSetValues( xmv_w[k_widget_draw], arglist, 1 );
4054                locstat = cBcNoError;
4055                pix_resize_window_buffer( XtDisplay(xmv_w[k_widget_draw]),
4056                        XtWindow(xmv_w[k_widget_draw]), &locstat );
4057                mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &locstat );
4058                break;
4059        default:
4060                printf( "*SHM: xm_call_scale: this cannot happen\n" );
4061        } /*endswitch*/
4062
4063} /* end of xm_call_scale */
4064
4065
4066
4067/*--------------------------------------------------------------------------*/
4068
4069
4070
4071static void xm_call_drawing_input( Widget widget, int *tag,
4072        XmDrawingAreaCallbackStruct *data )
4073
4074/* callback for input to drawing area window
4075 *
4076 * parameters of routine
4077 * Widget     widget;      input; widget ID
4078 * int        *tag;        input;
4079 * DrawingAreaCallbackStruct *data;
4080 */
4081{
4082        /* local variables */
4083        static float last_time;       /* last time */
4084        float    time;                /* selected time */
4085        int      trcno;               /* trace number */
4086        BOOLEAN  ok;                  /* position ok */
4087        char     cmd[BC_LINELTH+1];   /* command line */
4088
4089        /* executable code */
4090
4091        if  (data->reason != XmCR_INPUT)  {
4092                printf( "*SHM: strange input\n" );
4093                return;
4094        } /*endif*/
4095
4096        printf( "input: \n" );
4097
4098#ifdef XXX
4099        mg_get_time_and_trace( data->event->xbutton.x, data->event->xbutton.y,
4100                &time, &trcno, &ok );
4101
4102        if  (!ok || trcno == 0)  {
4103                if  (data->event->type == ButtonPress)
4104                        mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "dtw");
4105                return;
4106        } /*endif*/
4107
4108        if  (data->event->type == ButtonPress)  {
4109                /* mg_mark_trace( widget, trcno, time ); */
4110                last_time = time;
4111                return;
4112        } else if  (data->event->type == ButtonRelease)  {
4113                sprintf( cmd, "stw %f %f", last_time, time );
4114                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, cmd );
4115        } /*endif*/
4116#endif
4117
4118} /* end of xm_call_drawing_input */
4119
4120
4121
4122/*--------------------------------------------------------------------------*/
4123
4124
4125
4126void xm_action_motion( Widget w, XEvent *ev, String *params, Cardinal *parno )
4127
4128/* action routine for pointer motion
4129 *
4130 * parameters of routine
4131 * Widget     w;      input; widget ID
4132 * XEvent     *ev;    input; current event
4133 * ...   (don't know much about it)
4134 */
4135{
4136        /* local variables */
4137        static TSyBoolean time_btn_pressed=FALSE;     /* Time Button is pressed */
4138        static TSyBoolean phase_btn_pressed=FALSE;    /* Phase Button is pressed */
4139        static int        curr_crsr=MGC_CRSR_NOCURSOR;     /* current cursor */
4140        static int        lastwdw;              /* last window */
4141        static Widget     lastwidget;           /* last widget */
4142        static Time       last_time=0;          /* last time of selection */
4143        static TSyBoolean to_be_deleted=FALSE;  /* phase should be deleted */
4144        static TSyBoolean select_active;        /* trace selection activated */
4145        static TSyBoolean select_on=FALSE;      /* select or deselect */
4146        static TSyBoolean close_phase_found;    /* close phase found */
4147        static int        rubber_mode=MGC_RUBBER_END;    /* draw rubber band */
4148        static TPiPhase   phase_backup;         /* backup phase used for b-phases */
4149        TSyStatus         status;               /* return status */
4150        int               wdwno;                /* window number */
4151        TPiPhase          close_phase;          /* close phase */
4152        TPiPhase          *close_phase_ptr;     /* pointer to close phase or NULL */
4153        TPiPhase          bck_phase;            /* backup storage phase info */
4154        TPiPhaseList      *plist;               /* pointer to phase list */
4155        TSyBoolean        crsr_ok;              /* cursor display ok ? */
4156        int               trcnum;               /* trace number */
4157
4158        /* executable code */
4159
4160        status = BC_NOERROR;
4161
4162        if  (w == xmv_w[k_widget_calibwdw])  {
4163                cal_handle_xevent( w, ev );
4164                return;
4165        } else if  (w == xmv_w[k_widget_spctwdw])  {
4166                spc_handle_xevent( w, ev, &status );
4167                if  (Severe(&status))  cu_alert( status );
4168                return;
4169        } /*endif*/
4170
4171        wdwno = (w == xmv_w[k_widget_draw]) ? MGC_WDW_MAIN : MGC_WDW_SINGLE;
4172    xmv_last_window_no = wdwno;
4173        if  (wdwno != lastwdw)  {
4174                if  (curr_crsr != MGC_CRSR_NOCURSOR)
4175                        mg_draw_cursor( lastwidget, lastwdw, &xmv_dspctrl, MGC_CRSR_OFF,
4176                                0, 0, NULL );
4177                lastwdw = wdwno;
4178                lastwidget = w;
4179        } /*endif*/
4180
4181        if  (ev->type == MotionNotify)  {
4182                if  (time_btn_pressed)  {
4183                        if  (!XtIsManaged(xmv_w[k_widget_single_draw_box]))
4184                                XtManageChild( xmv_w[k_widget_single_draw_box] );
4185                        mg_do_drag( w, MGC_DRAG_CONTINUE, ev->xmotion.x,
4186                                ev->xmotion.y );
4187                        mg_plot_drag_window( xmv_w[k_widget_single_draw],
4188                                xmv_onset_acc==CUC_ACCURACY_DISPLAY, &status );
4189                        if  (Severe(&status))  cu_alert( status );
4190                        if  (xmv_pm_on)  pmm_draw_pmotion( xmv_dspctrl.zoom );
4191                        if  (xmv_polar_on)  pol_draw_poltraces( xmv_dspctrl.zoom, &status );
4192                        if  (Severe(&status))  cu_alert( status );
4193                } else if  (phase_btn_pressed)  {
4194                        if  (!XtIsManaged(xmv_w[k_widget_phase_box]))
4195                                XtManageChild( xmv_w[k_widget_phase_box] );
4196                        mg_do_phase( w, wdwno, MGC_PHASE_START, ev->xmotion.x,
4197                                ev->xmotion.y, xmv_phase.onset, &trcnum, NULL );
4198                        xmv_phasetrc = mg_trcptr( trcnum );
4199                        mg_draw_cursor( w, wdwno, &xmv_dspctrl, MGC_CRSR_CONTINUE,
4200                                ev->xmotion.x, ev->xmotion.y, NULL );
4201                } else if  (ev->xmotion.state & XMC_PHASE_BUTTON_MASK)  {
4202                        /* Select traces by moving over name with phase button pressed. */
4203                        /* This is not covered by the above case, since 'phase_btn_pressed' */
4204                        /* is selected only if cursor is within trace area.                 */
4205                        if  (wdwno == MGC_WDW_MAIN)  {
4206                                if  (select_on)  {
4207                                        mg_select_trace( xmv_w[k_widget_draw], ev->xbutton.x, ev->xbutton.y );
4208                                } else {
4209                                        mg_deselect_trace( xmv_w[k_widget_draw], ev->xbutton.x, ev->xbutton.y );
4210                                } /*endif*/
4211                                cl_set_simfilter_active( xmv_w, !ts_some_trace_selected() );
4212                        } /*endif*/
4213                } else {
4214                        mg_draw_cursor( w, wdwno, &xmv_dspctrl, MGC_CRSR_CONTINUE,
4215                                ev->xmotion.x, ev->xmotion.y, NULL );
4216                        if  (rubber_mode > MGC_RUBBER_END)
4217                                mg_rubber_line( w, wdwno, rubber_mode, ev->xmotion.x,
4218                                        ev->xmotion.y );
4219                } /*endif*/
4220                mg_print_time( xmv_w[k_widget_draw], wdwno, ev->xmotion.x,
4221                        ev->xmotion.y );
4222        } else if  (ev->type == ButtonPress) {
4223                switch  (ev->xbutton.button)  {
4224                case XMC_TIME_BUTTON:
4225                        if  (wdwno == MGC_WDW_SINGLE)  {
4226                                xm_move_drag_window( k_entry_key_arrow_up );
4227                                return;
4228                        } /*endif*/
4229                        mg_do_phase( (Widget)0, MGC_WDW_LAST, MGC_PHASE_CLEAR,
4230                                0, 0, NULL, NULL, NULL );
4231                        mg_draw_cursor( w, wdwno, &xmv_dspctrl, MGC_CRSR_OFF, 0, 0, NULL );
4232                        time_btn_pressed = TRUE;
4233                        if  (!XtIsManaged(xmv_w[k_widget_single_draw_box]))
4234                                XtManageChild( xmv_w[k_widget_single_draw_box] );
4235                        mg_do_drag( w, MGC_DRAG_START, ev->xbutton.x,
4236                                ev->xbutton.y );
4237                        mg_do_drag( w, MGC_DRAG_CONTINUE, ev->xbutton.x,
4238                                ev->xbutton.y );
4239                        mg_plot_drag_window( xmv_w[k_widget_single_draw],
4240                                xmv_onset_acc==CUC_ACCURACY_DISPLAY, &status );
4241                        if  (Severe(&status))  cu_alert( status );
4242                        if  (xmv_pm_on)  pmm_draw_pmotion( xmv_dspctrl.zoom );
4243                        if  (xmv_polar_on)  pol_draw_poltraces( xmv_dspctrl.zoom, &status );
4244                        if  (Severe(&status))  cu_alert( status );
4245                        break;
4246                case XMC_PHASE_BUTTON:
4247                        /* if there is a selection on the station, mark it and return */
4248                        if  (wdwno == MGC_WDW_MAIN &&
4249                                mg_toggle_trace_selection(xmv_w[k_widget_draw],
4250                                ev->xbutton.x,ev->xbutton.y))  {
4251                                select_active = TRUE;
4252                                select_on = !select_on;
4253                                cl_set_simfilter_active( xmv_w, !ts_some_trace_selected() );
4254                                break;
4255                        } /*endif*/
4256                        /* now this will create or change a phase */
4257                        phase_btn_pressed = TRUE;
4258                        /* Creating a phase changes processing state from inital to process */
4259                        xm_set_processing_state( CUC_PARSTATE_PROCESS );
4260                        /* save current phase to be able to restore it after pseudo-phase */
4261                        phase_backup = xmv_phase;
4262                        strcpy( phase_backup.name,
4263                                cu_get_string(xmv_w[k_widget_phase_name_text]) );
4264                        if  (!XtIsManaged(xmv_w[k_widget_phase_box]))
4265                                XtManageChild( xmv_w[k_widget_phase_box] );
4266                        /* decrease rubber mode if active */
4267                        if  (rubber_mode > MGC_RUBBER_END)
4268                                if  (--rubber_mode == MGC_RUBBER_END)
4269                                        mg_rubber_line( w, wdwno, rubber_mode, 0, 0 );
4270                        /* reset close_phase name and check for an active selection */
4271                        close_phase.name[0] = '\0';
4272                        close_phase_ptr = (xmv_select.waiting == 0) ? &close_phase : NULL;
4273                        /* an active selection prevents the 'close_phase' mechanism */
4274                        mg_do_phase( w, wdwno, MGC_PHASE_START, ev->xbutton.x,
4275                                ev->xbutton.y, xmv_phase.onset, &trcnum, close_phase_ptr );
4276                        xmv_phasetrc = mg_trcptr( trcnum );
4277                        close_phase_found = (close_phase.name[0] != '\0');
4278                        if  (close_phase_found)  {
4279                                status = cBcNoError;
4280                                PmRemovePhase( xmv_phasetrc, &close_phase, &status );
4281                                /* mg_do_phase has in this case already deleted the phase from */
4282                                /* memory but not removed from screen (bit stupid, I know).    */
4283                                /* So this has be done separately. */
4284                                mg_mark_one_phase( xmv_w[k_widget_draw],
4285                                        xmv_w[k_widget_single_draw], &close_phase,
4286                                        xmv_phasetrc, xmv_onset_acc==CUC_ACCURACY_DISPLAY );
4287                                cu_phase_box_defaults( xmv_w, &close_phase );
4288                                if  (close_phase.name[0] != 'b')  bck_phase = xmv_phase;
4289                                xmv_phase = close_phase;
4290                        } else {
4291                                /* A new phase is selected, don't take old amplitude values */
4292                                xmv_phase.ampl = 0.0;
4293                                xmv_phase.ampl_time = 0.0;
4294                                xmv_phase.ampl_displ = 0.0;
4295                                xmv_phase.ampl_veloc = 0.0;
4296                                xmv_phase.period = 0.0;
4297                                xmv_phase.magnitude = 0.0;
4298                                xmv_phase.magn_source = cPiMagnUndefined;
4299                                xmv_phase.ap_source = cPiApsrcUndefined;
4300                                xmv_phase.bb.bbampl = 0.0;
4301                                xmv_phase.bb.bbampl_time = 0.0;
4302                                xmv_phase.bb.bbperiod = 0.0;
4303                                xmv_phase.bb.mbb = 0.0;
4304                                xmv_phase.onset_acc_l = cPiAccEmpty;
4305                                xmv_phase.onset_acc_r = cPiAccEmpty;
4306                        } /*endif*/
4307                        if  (Abs(ev->xbutton.time - last_time)
4308                                < GpGetInt(cGpI_double_click_time))
4309                                to_be_deleted = TRUE;
4310                        last_time = ev->xbutton.time;
4311                        break;
4312                case XMC_CURSOR_BUTTON:
4313                        if  (++curr_crsr > GpGetInt(cGpI_max_cursor_form))
4314                                curr_crsr = MGC_CRSR_FIRST;
4315                        if  (curr_crsr <= MGC_CRSR_WAVEFORM)
4316                                mg_draw_cursor( w, wdwno, &xmv_dspctrl, MGC_CRSR_CLEAR, 0, 0, NULL);
4317                        do  {
4318                                mg_draw_cursor( w, wdwno, &xmv_dspctrl, curr_crsr,
4319                                        ev->xbutton.x, ev->xbutton.y, &crsr_ok );
4320                                if  (!crsr_ok)
4321                                        if  (++curr_crsr > GpGetInt(cGpI_max_cursor_form))
4322                                                curr_crsr = MGC_CRSR_FIRST;
4323                        }  while  (!crsr_ok);
4324                        break;
4325                } /*endswitch*/
4326        } else if  (ev->type == ButtonRelease) {
4327                if  (ev->xbutton.button == XMC_TIME_BUTTON)  {
4328                        if  (wdwno == MGC_WDW_SINGLE)  return;
4329                        time_btn_pressed = FALSE;
4330#                       ifdef XXX
4331                        if  (!XtIsManaged(xmv_w[k_widget_single_draw_box]))
4332                                XtManageChild( xmv_w[k_widget_single_draw_box] );
4333                        mg_do_drag( w, MGC_DRAG_END, ev->xbutton.x, ev->xbutton.y );
4334                        mg_plot_drag_window( xmv_w[k_widget_single_draw], &status );
4335                        if  (Severe(&status))  cu_alert( status );
4336#                       endif
4337                } else if  (ev->xbutton.button == XMC_PHASE_BUTTON)  {
4338                        if  (select_active)  {
4339                                select_active = FALSE;
4340                        } else if  (xmv_phasetrc == NULL)  {
4341                                /* ignore this */
4342                        } else if  (xmv_select.waiting > 0)  {
4343                                cl2_process_selection( xmv_w, &xmv_dspctrl, wdwno, xmv_cpar,
4344                                        &xmv_select, &xmv_phase, xmv_phasetrc, &status );
4345                                if  (Severe(&status))  cu_alert( status );
4346                        } else {
4347                                strcpy( xmv_phase.name, cu_get_string(
4348                                        xmv_w[k_widget_phase_name_text]) );
4349                                xmv_phase.source = cPiSourceManually;
4350                                strcpy( xmv_phase.filter, xmv_cmd_filter.name );
4351                                if  (to_be_deleted)  {
4352                                        to_be_deleted = FALSE;
4353                                        mg_do_phase( w, wdwno, MGC_PHASE_CLEAR, 0, 0, NULL, NULL, NULL );
4354                                } else {
4355                                        cu_accept_phase( xmv_w[k_widget_draw],
4356                                                xmv_w[k_widget_single_draw], &xmv_phase, xmv_phasetrc,
4357                                                xmv_dspctrl.show_phase_acc, &status );
4358                                        /* prompt for onset accuracy if this is switched on and if */
4359                                        /* no dummy phase is created and no phase is moved or deleted */
4360                                        if  (xmv_onset_acc > CUC_ACCURACY_NONE
4361                                                && xmv_phase.name[0] != 'b'
4362                                                && xmv_phase.name[0] != 'w' && !close_phase_found
4363                                                && status == BC_NOERROR)  {
4364                                                xmv_select.waiting = 2;
4365                                                xmv_select.processed = 0;
4366                                                xmv_select.initiator = CUC_SELTYPE_ONSET_ACC;
4367                                                /* the following phase structure will be changed when */
4368                                                /* the initiator is called */
4369                                                xmv_select.addparam = (void *)PmFindPhase( xmv_phasetrc,
4370                                                        xmv_phase.name );
4371                                                strcpy( xmv_select.select[0].name, "w-acc-l" );
4372                                                strcpy( xmv_select.select[1].name, "w-acc-r" );
4373                                                strcpy( xmv_select.infotext, CUC_SELTEXT_ONSET_ACC );
4374                                                mg_set_cursor( MGC_XCRSR_RIGHT );
4375                                                mg_print_status( xmv_w[k_widget_draw],
4376                                                        CUC_SELTEXT_ONSET_ACC, TRUE );
4377                                                mg_rubber_line( w, wdwno, MGC_RUBBER_START,
4378                                                        ev->xbutton.x, ev->xbutton.y );
4379                                                rubber_mode = MGC_RUBBER_CONT_L;
4380                                        } /*endif*/
4381                                        /* restore phase info if pseudo-phase was created */
4382                                        if  (phase_backup.name[0] != '\0' && xmv_phase.name[0] == 'b')  {
4383                                                xmv_phase = phase_backup;
4384                                                cu_phase_box_defaults( xmv_w, &xmv_phase );
4385                                        } /*endif*/
4386                                } /*endif*/
4387                        } /*endif*/
4388                        phase_btn_pressed = FALSE;
4389                } /*endif*/
4390        } else if  (ev->type == KeyPress) {
4391                {
4392                /* this is a workaround for accelerators not working on recent Suse  *
4393       * Linux implementations                                             */
4394#define MODIF_SHIFT 0x11
4395#define MODIF_LOCK  0x12
4396#define MODIF_CTRL  0x14
4397#define MODIF_ALT   0x18
4398                int tag;
4399                Modifiers mret;
4400                KeySym keysym;
4401                XtTranslateKeycode( ev->xkey.display, ev->xkey.keycode, ev->xkey.state,
4402                        &mret, &keysym );
4403                if  (ev->xkey.state == MODIF_CTRL)  {
4404                        switch  ((char)keysym)  {
4405                        case '0':   tag = k_entry_eproc10;        break;
4406                        case '1':   tag = k_entry_eproc1;         break;
4407                        case '2':   tag = k_entry_eproc2;         break;
4408                        case '3':   tag = k_entry_eproc3;         break;
4409                        case '4':   tag = k_entry_eproc4;         break;
4410                        case '5':   tag = k_entry_eproc5;         break;
4411                        case '6':   tag = k_entry_eproc6;         break;
4412                        case '7':   tag = k_entry_eproc7;         break;
4413                        case '8':   tag = k_entry_eproc8;         break;
4414                        case '9':   tag = k_entry_eproc9;         break;
4415                        case 'a':   tag = k_entry_readah;         break;
4416                        case 'b':   tag = k_entry_magn_mb;        break;
4417                        case 'd':   tag = k_entry_deltheo;        break;
4418                        case 'e':   tag = k_button_param_theo_ext;break;
4419                        case 'f':   tag = k_entry_fk;             break;
4420                        case 'g':   tag = k_entry_readgse;        break;
4421                        case 'h':   tag = k_entry_cmd_screendump; break;
4422                        case 'i':   tag = k_entry_pol_inc_cohlth; break;
4423                        case 'j':   tag = k_entry_pol_inc_pow_linfil; break;
4424                        case 'k':   tag = k_entry_command;        break;
4425                        case 'l':   tag = k_entry_pol_dec_cohlth; break;
4426                        case 'm':   tag = k_entry_magn_ms_plain;  break;
4427                        case 'n':   tag = k_entry_mparam_sn_auto; break;
4428                        case 'o':   tag = k_entry_cmd_del_horiz;  break;
4429                        case 'p':   tag = k_entry_final_params;   break;
4430                        case 'q':   tag = k_entry_cancel_params;  break;
4431                        case 'r':   tag = k_entry_pol_dec_pow_linfil; break;
4432                        case 's':   tag = k_entry_cmd_speccmd;    break;
4433                        case 't':   tag = k_button_param_theo;    break;
4434                        case 'v':   tag = k_entry_vespa;          break;
4435                        case 'x':   tag = k_entry_help;           break;
4436                        case 'y':   tag = k_entry_trc_sort_d;     break;
4437                        case 'z':   tag = k_entry_quit;           break;
4438                        default:    tag = 0;
4439                                if  (GpGetInt(cGpI_debug_level) > 3)
4440                                        printf( "SHM-dbg4: pressed key %d, keysym %ld\n",
4441                                                ev->xkey.keycode, keysym );
4442                        } /*endswitch*/
4443                } else {
4444                        switch  ((char)keysym)  {
4445                        case '0':   tag = k_entry_cmd_userdef;        break;
4446                        case '1':   tag = k_entry_magn_ml;        break;
4447                        case '3':   tag = k_entry_wdw_3traces;    break;
4448                        case '5':   tag = k_entry_pmotion;        break;
4449                        case '8':   tag = k_entry_spectrogram;    break;
4450                        case '9':   tag = k_entry_spectrum;       break;
4451                        case 'C':   tag = k_entry_configure;      break;
4452                        case 'a':   tag = k_entry_locsat;         break;
4453                        case 'b':   tag = k_entry_beam;           break;
4454                        case 'c':   tag = k_entry_calib;          break;
4455                        case 'd':   tag = k_entry_dtw;            break;
4456                        case 'e':   tag = k_button_param_depth;   break;
4457                        case 'f':   tag = k_entry_filter;         break;
4458                        case 'g':   tag = k_entry_wdw_grow_right; break;
4459                        case 'h':   tag = k_entry_ext_location;   break;
4460                        case 'i':   tag = k_entry_align;          break;
4461                        case 'k':   tag = k_entry_wdw_grow_left;  break;
4462                        case 'l':   tag = k_entry_locate_tele;    break;
4463                        case 'm':   tag = k_entry_wdw_move_right; break;
4464                        case 'n':   tag = k_entry_wdw_move_left;  break;
4465                        case 'o':   tag = k_entry_dump_params;    break;
4466                        case 'p':   tag = k_entry_corrpick;       break;
4467                        case 'q':   tag = k_entry_abort_selection;break;
4468                        case 'r':   tag = k_entry_read_grsn;      break;
4469                        case 's':   tag = k_entry_stw;            break;
4470                        case 't':   tag = k_entry_rotate;         break;
4471                        case 'u':   tag = k_entry_autopick1;      break;
4472                        case 'v':   tag = k_entry_gencomment;     break;
4473                        case 'w':   tag = k_entry_planewave;      break;
4474                        case 'x':   tag = k_entry_amplper_p;      break;
4475                        case 'y':   tag = k_entry_info_source;    break;
4476                        case 'z':   tag = k_entry_amplper_z;      break;
4477                        default:
4478                                if  (keysym == GpGetInt(cGpI_keysym_arrow_up))  {
4479                                        tag = k_entry_key_arrow_up;
4480                                } else if  (keysym == GpGetInt(cGpI_keysym_arrow_down))  {
4481                                        tag = k_entry_key_arrow_down;
4482                                } else if  (keysym == GpGetInt(cGpI_keysym_arrow_left))  {
4483                                        tag = k_entry_key_arrow_left;
4484                                } else if  (keysym == GpGetInt(cGpI_keysym_arrow_right))  {
4485                                        tag = k_entry_key_arrow_right;
4486                                } else {
4487                                        tag = 0;
4488                                        if  (GpGetInt(cGpI_debug_level) > 2)
4489                                                printf( "SHM-dbg3: pressed key %d, keysym %ld\n",
4490                                                        ev->xkey.keycode, keysym );
4491                                } /*endif*/
4492                        } /*endswitch*/
4493                } /*endif*/
4494                if  (GpGetInt(cGpI_debug_level) > 2)  printf( "SHM-dbg3: tag: %d\n", tag );
4495                if  (tag > 0)  xm_call_menu_select( w, &tag, NULL );
4496                }
4497        } else {
4498                if  (GpGetInt(cGpI_debug_level) > 0)
4499                        printf( "SHM-dbg1: unhandled SHM event of type %d\n", ev->type );
4500        } /*endif*/
4501
4502} /* end of xm_action_motion */
4503
4504
4505
4506/*--------------------------------------------------------------------------*/
4507
4508
4509
4510static void xm_call_text_input( Widget widget, int *tag,
4511        XmTextVerifyCallbackStruct *data )
4512
4513/* callback on text edit actions
4514 *
4515 * parameters of routine
4516 * Widget     widget;       input; text widget ID
4517 * int        *tag;         input; widget number
4518 * XmTextVerifyCallbackStruct *data;
4519 */
4520{
4521        /* local variables */
4522        int      wno = *tag;              /* widget number */
4523        char     *cp;                     /* text pointer */
4524        char     text[BC_LINELTH+1];      /* editable text */
4525        int      slen;                    /* string length */
4526        int      pos;                     /* text position */
4527
4528        /* executable code */
4529
4530        /* check source string on special entries */
4531        if  ((widget == xmv_w[k_widget_param_azimuth_text]
4532                || widget == xmv_w[k_widget_param_distance_text]
4533                || widget == xmv_w[k_widget_param_origin_d_text]
4534                || widget == xmv_w[k_widget_param_origin_t_text]
4535                || widget == xmv_w[k_widget_param_lat_text]
4536                || widget == xmv_w[k_widget_param_lon_text])
4537                && xmv_cpar->source[0] == '\0'
4538                && !xmv_cpar->soft_change)  {
4539                if  (!XtIsManaged(xmv_w[k_widget_infsource_box]))
4540                        XtManageChild( xmv_w[k_widget_infsource_box] );
4541        } /*endif*/
4542
4543        /* reset phase buttons on new phase */
4544        if  (widget == xmv_w[k_widget_phase_name_text])  {
4545                if  (XmToggleButtonGetState(xmv_w[k_widget_phase_spec_i]))  {
4546                        XmToggleButtonSetState( xmv_w[k_widget_phase_spec_i], FALSE, TRUE );
4547                        XmToggleButtonSetState( xmv_w[k_widget_phase_spec_e], TRUE, TRUE );
4548                } /*endif*/
4549                if  (XmToggleButtonGetState(xmv_w[k_widget_phase_reliab_no]))  {
4550                        XmToggleButtonSetState( xmv_w[k_widget_phase_reliab_no], FALSE, TRUE );
4551                        XmToggleButtonSetState( xmv_w[k_widget_phase_reliab_yes], TRUE, TRUE );
4552                } /*endif*/
4553                if  (!XmToggleButtonGetState(xmv_w[k_widget_phase_sign_0]))  {
4554                        XmToggleButtonSetState( xmv_w[k_widget_phase_sign_0], TRUE, TRUE );
4555                        XmToggleButtonSetState( xmv_w[k_widget_phase_sign_p], FALSE, TRUE );
4556                        XmToggleButtonSetState( xmv_w[k_widget_phase_sign_m], FALSE, TRUE );
4557                } /*endif*/
4558        } /*endif*/
4559
4560        if  (widget == xmv_w[k_widget_param_depth_text] && !xmv_cpar->soft_change)
4561                xmv_cpar->depth_type = CUC_DEPTH_ESTIMATED;
4562
4563        if  (data->text->length == 1 && data->startPos == data->endPos)  {
4564#               ifdef XXX
4565                if  (*(data->text->ptr) == 'x')  {
4566                        *text = '\0';
4567                        cu_set_string( widget, text );
4568                        return;
4569                } /*endif*/
4570#               endif
4571                cp = cu_get_string( widget );
4572                slen = strlen( cp );
4573                if  (slen > BC_LINELTH)  {
4574                        printf( "*SHM: xm_call_text_input: text overflow ***\n" );
4575                        return;
4576                } /*endif*/
4577                strcpy( text, cp );
4578                pos = data->startPos;
4579                if  (text[pos] == '\0')  return;  /* then appended to end */
4580                if  (pos >= 0 && pos < slen)  {
4581                        strcpy( text+pos, text+pos+1 );
4582                        cu_set_string( widget, text );
4583                } /*endif*/
4584        } /*endif*/
4585
4586} /* end of xm_call_text_input */
4587
4588
4589
4590/*--------------------------------------------------------------------------*/
4591
4592
4593
4594static void xm_call_file_selection( Widget widget, int *tag,
4595        XmFileSelectionBoxCallbackStruct *data )
4596
4597/* callback on file selection via FileSelectionBox
4598 *
4599 * parameters of routine
4600 * Widget     widget;     widget id of file selector
4601 * int        *tag;       input; not used here
4602 * XmFileSelectionBoxCallbackStruct *data; input; data returned by SelectionBox
4603 */
4604{
4605        /* local variables */
4606        STATUS   status;                  /* return status */
4607        int      mode;                    /* which kind of file */
4608        char     selfile[BC_FILELTH+1];   /* selected file */
4609        int      slen;                    /* string length */
4610        int      i, j;                    /* counters */
4611        char     syscmd[cBcVeryLongStrLth+1]; /* shell command */
4612        char     tmpfile[cBcFileLth+1];   /* scratch file */
4613        char     *env;                    /* pointer to environment */
4614        long     eventid;                 /* event ID for evt recovery */
4615
4616        /* executable code */
4617
4618        mg_set_cursor( MGC_XCRSR_BUSY );
4619
4620        cl_file_select_callback( xmv_w, data, BC_FILELTH, selfile, &mode );
4621
4622        status = BC_NOERROR;
4623        if  (mode == CLC_PATH_GSE || mode == CLC_PATH_GSE2 || mode == CLC_PATH_AH
4624                || mode == CLC_PATH_Q || mode == CLC_PATH_RFMT)  {
4625                /* reset all parameters */
4626                PiClearAllPhases();
4627                cu_reset_phase( &xmv_phase );
4628                strcpy( xmv_phase.name, GpGetString(cGpS_auto_phase) );
4629                cu_phase_box_defaults( xmv_w, &xmv_phase );
4630                xmv_cmd_filter.autocut = 5.0;  /* shv_globals not yet implemented */
4631                mx_filter_box_defaults( xmv_w, &xmv_cmd_filter );
4632                xmv_dspctrl.zoom = 1.0;
4633                mx_clear_rotation();
4634                cu_reset_paramsets( &xmv_par );
4635                xmv_cpar = xmv_par.par;
4636                xmv_cpar->soft_change = TRUE;
4637                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
4638                xmv_cpar->soft_change = FALSE;
4639                cl2_param_box_defaults( xmv_w, xmv_cpar /*, &xmv_dspctrl*/ );
4640                /* end of reset */
4641                mg_print_filter( xmv_w[k_widget_draw], "" );
4642                if  (mode == CLC_PATH_GSE)  {
4643                        xmv_cmd_readg.format = MXC_FORMAT_GSE;
4644                } else if  (mode == CLC_PATH_GSE2)  {
4645                        xmv_cmd_readg.format = MXC_FORMAT_GSE2;
4646                } else if  (mode == CLC_PATH_Q)  {
4647                        xmv_cmd_readg.format = MXC_FORMAT_Q;
4648                } else if  (mode == CLC_PATH_RFMT)  {
4649                        /* create tmp filename */
4650                        sprintf( tmpfile, "%s%sRFMT.GSE", shd_scratch, id_shv );
4651                        if  (GpGetInt(cGpI_debug_level) > 1)
4652                                printf( "*SHM: reformatting file %s (tmp=%s)\n", selfile, tmpfile );
4653                        /* reformat input file */
4654                        sprintf( syscmd, "%sshm_exec_rfmt_other %s %s %s",
4655                                GpGetString(cGpS_defpath_extprog), GpGetString(cGpS_reformat_proc),
4656                                selfile, tmpfile );
4657                        if  (GpGetInt(cGpI_debug_level) > 1)
4658                                printf( "SHM-dbg2: executing >%s<\n", syscmd );
4659                        system( syscmd );
4660                        /* tell readg what to read */
4661                        strcpy( selfile, tmpfile );
4662                        xmv_cmd_readg.format = MXC_FORMAT_GSE2;
4663                } else {
4664                        xmv_cmd_readg.format = MXC_FORMAT_AH;
4665                } /*endif*/
4666                strcpy( xmv_cmd_readg.filename, selfile );
4667                mx_readg( &xmv_cmd_readg, xmv_w[k_widget_draw],
4668                        xmv_w[k_widget_single_draw], &xmv_dspctrl,
4669                        FALSE, NULL, &status );
4670                /* delete scratch file if read from 'other' format */
4671                if  (mode == CLC_PATH_RFMT)  {
4672                        sprintf( syscmd, "\\rm %s\n", tmpfile );
4673                        system( syscmd );
4674                } /*endif*/
4675                if  (strcmp(GpGetString(cGpS_default_filter),"BUT_BP") == 0)  {
4676                        cl_create_filter( xmv_w, CLC_CREFIL_BUT_BP, &status );
4677                        if  (Severe(&status))  {
4678                                mg_set_cursor( MGC_XCRSR_NORMAL );
4679                                cu_alert( status );
4680                                return;
4681                        } /* endif*/
4682                        strcpy( xmv_cmd_filter.name, cu_get_string(
4683                                xmv_w[k_widget_filter_edit_text]) );
4684                } else {
4685                        strcpy( xmv_cmd_filter.name, GpGetString(cGpS_default_filter) );
4686                } /*endif*/
4687                if  (xmv_cmd_filter.name[0] != '\0')  {
4688                        cl2_display_busy( xmv_w, TRUE );
4689                        mx_filter( &xmv_cmd_filter, xmv_w[k_widget_draw],
4690                                &xmv_dspctrl, &status );
4691                        cl2_display_busy( xmv_w, FALSE );
4692                        mg_print_filter( xmv_w[k_widget_draw], xmv_cmd_filter.name );
4693                } /*endif*/
4694                /* mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "rd" ); */
4695                if  (*tag == k_button_read_grsn_readnew)  {
4696                        cu_reset_phase( &xmv_phase );
4697                        cu_reset_paramsets( &xmv_par );
4698                        xmv_cpar = xmv_par.par;
4699                        xmv_cpar->soft_change = TRUE;
4700                        cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
4701                        xmv_cpar->soft_change = FALSE;
4702                } /*endif*/
4703        } else if  (mode == CLC_PATH_SAVE)  {
4704                cl3_restore_parameters( selfile, xmv_cpar, &status );
4705                if  (Severe(&status))  {
4706                        mg_set_cursor( MGC_XCRSR_NORMAL );
4707                        cu_alert( status );
4708                        return;
4709                } /*endif*/
4710                xmv_cpar->soft_change = TRUE;
4711                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
4712                xmv_cpar->soft_change = FALSE;
4713                mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &status );
4714                if  (Severe(&status))  {
4715                        mg_set_cursor( MGC_XCRSR_NORMAL );
4716                        cu_alert( status );
4717                        return;
4718                } /*endif*/
4719                /* try to get event ID from filename */
4720                slen = strlen( selfile );
4721                for  (i=slen-13; i<slen-4; i++)
4722                        if  (!isdigit(selfile[i]))  {
4723                                mg_set_cursor( MGC_XCRSR_NORMAL );
4724                                return;
4725                        } /*endif*/
4726                if  (selfile[slen-14] == '1')  {
4727                        if  (sscanf(selfile+slen-14,"%10d",&i) != 1)  {
4728                                mg_set_cursor( MGC_XCRSR_NORMAL );
4729                                return;
4730                        } /*endif*/
4731                } else {
4732                        if  (sscanf(selfile+slen-13,"%9d",&i) != 1)  {
4733                                mg_set_cursor( MGC_XCRSR_NORMAL );
4734                                return;
4735                        } /*endif*/
4736                } /*endif*/
4737                xmv_par.evid = i;
4738        } else if  (mode == CLC_PATH_EVT)  {
4739                cl3_restore_from_evt( selfile, xmv_cpar, &eventid, FALSE, &status );
4740                if  (GpGetBoolean(cGpB_recover_evid))  xmv_par.evid = eventid;
4741                if  (Severe(&status))  {
4742                        mg_set_cursor( MGC_XCRSR_NORMAL );
4743                        cu_alert( status );
4744                        return;
4745                } /*endif*/
4746                xmv_cpar->soft_change = TRUE;
4747                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
4748                xmv_cpar->soft_change = FALSE;
4749                mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &status );
4750                if  (Severe(&status))  {
4751                        mg_set_cursor( MGC_XCRSR_NORMAL );
4752                        cu_alert( status );
4753                        return;
4754                } /*endif*/
4755        } /*endif*/
4756
4757        mg_set_cursor( MGC_XCRSR_NORMAL );
4758
4759} /* end of xm_call_file_selection */
4760
4761
4762
4763/*--------------------------------------------------------------------------*/
4764
4765
4766
4767static void xmh_read_gsefile( char datafile[], TSyStatus *status )
4768
4769/* reads in GSE data file, append to display.
4770 * The code of this route was copied from the above routine
4771 * 'xm_call_file_selection' and shrunk to the case of reading GSE2 files.
4772 *
4773 * parameters of routine
4774 * char       datafile[]; input; name of data file
4775 */
4776{
4777        /* local variables */
4778        int      mode;                    /* which kind of file */
4779        char     selfile[BC_FILELTH+1];   /* selected file */
4780        int      slen;                    /* string length */
4781        int      i, j;                    /* counters */
4782        char     syscmd[cBcVeryLongStrLth+1]; /* shell command */
4783        char     tmpfile[cBcFileLth+1];   /* scratch file */
4784        char     *env;                    /* pointer to environment */
4785
4786        /* executable code */
4787
4788        mg_set_cursor( MGC_XCRSR_BUSY );
4789
4790        /* reset all parameters */
4791#ifdef XXX
4792        PiClearAllPhases();
4793        cu_reset_phase( &xmv_phase );
4794        strcpy( xmv_phase.name, GpGetString(cGpS_auto_phase) );
4795        cu_phase_box_defaults( xmv_w, &xmv_phase );
4796        xmv_cmd_filter.autocut = 5.0;  /* shv_globals not yet implemented */
4797        mx_filter_box_defaults( xmv_w, &xmv_cmd_filter );
4798        xmv_dspctrl.zoom = 1.0;
4799        mx_clear_rotation();
4800        cu_reset_paramsets( &xmv_par );
4801        xmv_cpar = xmv_par.par;
4802        xmv_cpar->soft_change = TRUE;
4803        cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
4804        xmv_cpar->soft_change = FALSE;
4805        cl2_param_box_defaults( xmv_w, xmv_cpar /*, &xmv_dspctrl*/ );
4806        /* end of reset */
4807#endif
4808        mg_print_filter( xmv_w[k_widget_draw], "" );
4809        xmv_cmd_readg.format = MXC_FORMAT_GSE2;
4810        strcpy( xmv_cmd_readg.filename, datafile );
4811        xmv_cmd_readg.keep = TRUE;
4812        mx_readg( &xmv_cmd_readg, xmv_w[k_widget_draw],
4813                xmv_w[k_widget_single_draw], &xmv_dspctrl,
4814                FALSE, NULL, status );
4815        if  (strcmp(GpGetString(cGpS_default_filter),"BUT_BP") == 0)  {
4816                cl_create_filter( xmv_w, CLC_CREFIL_BUT_BP, status );
4817                if  (Severe(status))  {
4818                        mg_set_cursor( MGC_XCRSR_NORMAL );
4819                        return;
4820                } /* endif*/
4821                strcpy( xmv_cmd_filter.name, cu_get_string(
4822                        xmv_w[k_widget_filter_edit_text]) );
4823        } else {
4824                strcpy( xmv_cmd_filter.name, GpGetString(cGpS_default_filter) );
4825        } /*endif*/
4826        if  (xmv_cmd_filter.name[0] != '\0')  {
4827                cl2_display_busy( xmv_w, TRUE );
4828                mx_filter( &xmv_cmd_filter, xmv_w[k_widget_draw],
4829                        &xmv_dspctrl, status );
4830                cl2_display_busy( xmv_w, FALSE );
4831                mg_print_filter( xmv_w[k_widget_draw], xmv_cmd_filter.name );
4832        } /*endif*/
4833        /* mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "rd" ); */
4834        mg_set_cursor( MGC_XCRSR_NORMAL );
4835
4836} /* end of xmh_read_gsefile */
4837
4838
4839
4840/*--------------------------------------------------------------------------*/
4841
4842
4843
4844static void xmh_log_action( char inf[], int num )
4845
4846/* logs action info to file cGpS_motif_log.  If inf=="--reset--"
4847 * the file is rewound.
4848 *
4849 * parameters of routine
4850 * char       inf[];          input; info string
4851 * int        num;            input; ID number
4852 */
4853{
4854        /* local variables */
4855        static int log_cnt=0; /* log counter */
4856        FILE     *fp;         /* pointer to file */
4857        char     *mlog;       /* name of motif log file */
4858
4859        /* executable code */
4860
4861        mlog = GpGetString( cGpS_motif_log );
4862        if  (*mlog == '\0')  return;
4863
4864        if  (inf != NULL)
4865                if  (strcmp(inf,"--reset--") == 0)  {
4866                        log_cnt = 0;
4867                        /* sy_fdelete( shv_global.motif_log ); */
4868                        fp = sy_fopen( mlog, "a" );
4869                        if  (fp == NULL)  return;
4870                        fprintf( fp, "\n\nnew SHM session\n\n" );
4871                        sy_fclose( fp );
4872                        return;
4873                } /*endif*/
4874
4875        fp = sy_fopen( mlog, "a" );
4876        if  (fp == NULL)  return;
4877
4878        if  (++log_cnt % 15 == 0)  fprintf( fp, "\n" );
4879        if  (inf != NULL)
4880                if  (*inf != '\0')
4881                        fprintf( fp, "%s", inf );
4882        fprintf( fp, "[%d]", num );
4883        sy_fclose( fp );
4884
4885} /* end of xmh_log_action */
4886
4887
4888
4889/*--------------------------------------------------------------------------*/
4890
4891
4892
4893#define EV(e) ((strcmp(event,e) == 0))
4894
4895
4896
4897static void xm_exec_userdef( char fname[] )
4898
4899/* performs sequence of user defined commands
4900 *
4901 * parameters of routine
4902 * char       fname[];       input; name of file with commands
4903 */
4904{
4905        /* local variables */
4906        FILE     *fp;                     /* pointer to input file */
4907        char     line[BC_LINELTH+1];      /* current line of file */
4908        char     event[BC_LINELTH+1];     /* name of event */
4909        int      item;                    /* event item */
4910        int      m;                       /* menu, button or nothing */
4911        int      i;                       /* counter */
4912        char     itemname[cBcLineLth+1];  /* name of station button */
4913
4914        /* executable code */
4915
4916        fp = sy_fopen( fname, "r" );
4917        if  (fp == NULL)  {
4918                fprintf( stderr, "*SHM: couldn't open userdef file %s\n", fname );
4919                return;
4920        } /*endif*/
4921
4922        while  (fgets(line,BC_LINELTH,fp) != NULL)  {
4923                if  (*line == '\n' || *line == '!')  continue;
4924                sscanf( line, "%s", event );
4925                if       EV("command")   {item=k_entry_command; m=1;}
4926                else if  EV("quit")      {item=k_entry_quit; m=1;}
4927                else if  EV("read_grsn") {item=k_entry_read_grsn; m=1;}
4928                /*  :  */
4929                /*  :  */
4930                else if  EV("read_grsn_nexttime")  {item=k_button_read_grsn_nexttime; m=0;}
4931                else if  EV("read_grsn_prevtime")  {item=k_button_read_grsn_prevtime; m=0;}
4932                else if  EV("read_grsn_resettime") {item=k_button_read_grsn_resettime; m=0;}
4933                else if  EV("read_grsn_mindn")     {item=k_button_read_grsn_mindn; m=0;}
4934                else if  EV("read_grsn_read")      {item=k_button_read_grsn_read; m=0;}
4935                else if  EV("read_grsn_readnew")   {item=k_button_read_grsn_readnew; m=0;}
4936                else if  EV("read_grsn_frq1")      {
4937                        item = -1;
4938                        XmToggleButtonSetState(xmv_w[k_widget_read_grsn_1hz],TRUE,TRUE);
4939                        m=2;
4940                }
4941                else if  EV("read_grsn_frq2")      {
4942                        item = k_button_read_grsn_20hz;
4943                        XmToggleButtonSetState(xmv_w[k_widget_read_grsn_20hz],TRUE,TRUE);
4944                        m=0;
4945                }
4946                else if  EV("read_grsn_frq3")      {
4947                        item = k_button_read_grsn_80hz;
4948                        XmToggleButtonSetState(xmv_w[k_widget_read_grsn_80hz],TRUE,TRUE);
4949                        m=0;
4950                }
4951                else if  EV("read_grsn_comp1")     {
4952                        item = -1;
4953                        XmToggleButtonSetState(xmv_w[k_widget_read_grsn_comp_z],TRUE,TRUE);
4954                        m=2;
4955                }
4956                else if  EV("read_grsn_comp2")     {
4957                        item = -1;
4958                        XmToggleButtonSetState(xmv_w[k_widget_read_grsn_comp_n],TRUE,TRUE);
4959                        m=2;
4960                }
4961                else if  EV("read_grsn_comp3")     {
4962                        item = -1;
4963                        XmToggleButtonSetState(xmv_w[k_widget_read_grsn_comp_e],TRUE,TRUE);
4964                        m=2;
4965                }
4966                else  {
4967                        item = -1;
4968                        for  (i=0; i<30; i++)  {
4969                                sprintf( itemname, "read_grsn_station_%d", i+1 );
4970                                if EV(itemname)  {
4971                                        XmToggleButtonSetState(xmv_w[k_widget_read_grsn_station+i],TRUE,TRUE);
4972                                        item = k_button_read_grsn_station+i;
4973                                        m = 2;
4974                                        break;
4975                                } /*endif*/
4976                        } /*endfor*/
4977                        if  (item < 0)  {
4978                                fprintf( stderr, "*SHM: userdef: unkown keyword %s\n", event );
4979                                continue;
4980                        } /*endif*/
4981                } /*endif*/
4982                if  (m == 1)  {
4983                        xm_call_menu_select( (Widget)0, &item, NULL );
4984                } else if  (m == 0) {
4985                        xm_call_activate( (Widget)0, &item, NULL );
4986                } /*endif*/
4987        } /*endwhile*/
4988
4989        sy_fclose( fp );
4990
4991} /* end of xm_exec_userdef */
4992
4993
4994
4995#undef EV
4996
4997
4998
4999/*--------------------------------------------------------------------------*/
5000
5001
5002
5003static void xm_read_requested_data( Widget w[], STATUS *status )
5004
5005/* reads requested data
5006 *
5007 * parameters of routine
5008 * Widget     w[];         input; widget array
5009 * STATUS     *status;     output; return status
5010 */
5011{
5012        /* local variables */
5013        int      item;                  /* item to activate */
5014        char     old_dev[BC_FILELTH+1]; /* initial device name */
5015        char     *cptr;                 /* pointer to char */
5016
5017        /* executable code */
5018
5019        /* store initial values */
5020        cptr = cu_get_string( w[k_widget_read_grsn_device] );
5021        if  (cptr != NULL)  strcpy( old_dev, cptr );
5022
5023        /* set new values */
5024        if  (getenv("SFD") != NULL)  {
5025                cu_set_string( w[k_widget_read_grsn_device], "SFD" );
5026        } else {
5027                cu_set_string( w[k_widget_read_grsn_device], "SH_SCRATCH" );
5028        } /*endif*/
5029
5030        /* read data */
5031        item = k_button_read_grsn_read;
5032        xm_call_activate( (Widget)0, &item, NULL );
5033
5034        /* restore initial values */
5035        cu_set_string( w[k_widget_read_grsn_device], old_dev );
5036
5037} /* end of xm_read_requested_data */
5038
5039
5040
5041/*--------------------------------------------------------------------------*/
5042
5043
5044
5045static void xm_configure_windows( Widget wa[] )
5046
5047/* configures windows
5048 *
5049 * no parameters
5050 */
5051{
5052        /* local variables */
5053        int      x, y, w, h, border;         /* window configuration */
5054        Widget   widget;                     /* current widget */
5055
5056        /* executable code */
5057
5058        widget = wa[k_widget_main];
5059        x = GpGetInt( cGpI_window_main_x );
5060        y = GpGetInt( cGpI_window_main_y );
5061        w = GpGetInt( cGpI_window_main_w );
5062        h = GpGetInt( cGpI_window_main_h );
5063        border = GpGetInt( cGpI_window_border );
5064        if  (XtIsManaged(widget))  XtUnmanageChild( widget );
5065        if  (w > 0 && h > 0) XtConfigureWidget( widget, x, y, w, h, border );
5066        if  (strchr(xmv_openwdw,'m') != NULL)  {
5067                XtManageChild( widget );
5068                XtMoveWidget( XtParent(widget), x, y );
5069        } /*endif*/
5070
5071        widget = wa[k_widget_single_draw_box];
5072        x = GpGetInt( cGpI_single_trace_box_x );
5073        y = GpGetInt( cGpI_single_trace_box_y );
5074        w = GpGetInt( cGpI_single_trace_box_w );
5075        h = GpGetInt( cGpI_single_trace_box_h );
5076        border = GpGetInt( cGpI_window_border );
5077        if  (XtIsManaged(widget))  XtUnmanageChild( widget );
5078        if  (w > 0 && h > 0) XtConfigureWidget( widget, x, y, w, h, border );
5079        if  (strchr(xmv_openwdw,'s') != NULL)  {
5080                XtManageChild( widget );
5081                XtMoveWidget( XtParent(widget), x, y );
5082        } /*endif*/
5083
5084        widget = wa[k_widget_phase_box];
5085        x = GpGetInt( cGpI_phase_box_x );
5086        y = GpGetInt( cGpI_phase_box_y );
5087        w = GpGetInt( cGpI_phase_box_w );
5088        h = GpGetInt( cGpI_phase_box_h );
5089        border = GpGetInt( cGpI_window_border );
5090        if  (XtIsManaged(widget))  XtUnmanageChild( widget );
5091        if  (w > 0 && h > 0) XtConfigureWidget( widget, x, y, w, h, border );
5092        if  (strchr(xmv_openwdw,'p') != NULL)  {
5093                XtManageChild( widget );
5094                XtMoveWidget( XtParent(widget), x, y );
5095        } /*endif*/
5096
5097        widget = wa[k_widget_param_box];
5098        x = GpGetInt( cGpI_parameter_box_x );
5099        y = GpGetInt( cGpI_parameter_box_y );
5100        w = GpGetInt( cGpI_parameter_box_w );
5101        h = GpGetInt( cGpI_parameter_box_h );
5102        border = GpGetInt( cGpI_window_border );
5103        if  (XtIsManaged(widget))  XtUnmanageChild( widget );
5104        if  (w > 0 && h > 0) XtConfigureWidget( widget, x, y, w, h, border );
5105        if  (strchr(xmv_openwdw,'e') != NULL)  {
5106                XtManageChild( widget );
5107                XtMoveWidget( XtParent(widget), x, y );
5108        } /*endif*/
5109
5110} /* end of xm_configure_windows */
5111
5112
5113
5114/*--------------------------------------------------------------------------*/
5115
5116
5117
5118static void xm_call_configure( void )
5119
5120/* calls configure script and rereads SHM_USER_STARTUP.SHC
5121 *
5122 * parameters of routine
5123 * none
5124 */
5125{
5126        /* local variables */
5127        char     parfile[cBcFileLth+1];          /* parameter file */
5128        char     *env;                           /* pointer to environment */
5129        char     editcmd[cBcLongStrLth+1];       /* edit command */
5130        char     analyst_save[cGp_TEXTVARLTH+1]; /* analysts initials save storage */
5131
5132        /* executable code */
5133
5134        /* string length check has been done in the inital GpReadParfile already */
5135
5136        /* get name of parameter file */
5137        env = (char *)getenv( "SH_USER_PARAM" );
5138        if  (env == NULL)  {
5139                env = (char *)getenv( "SH_INPUTS" );
5140                if  (env == NULL)  {
5141                        fprintf( stderr, "SHM: this cannot happen, SH_INPUTS not defined\n" );
5142                        exit( 1 );
5143                } /*endif*/
5144                strcpy( parfile, env );
5145                strcat( parfile, "/shm-config.txt" );
5146        } else {
5147                strcpy( parfile, env );
5148        } /*endif*/
5149
5150        /* create edit command and execute it */
5151        if  (strlen(GpGetString(cGpS_texteditor))+strlen(parfile)+1 > cBcLongStrLth) {
5152                fprintf( stderr, "not very likely: edit command for parameter file too long\n" );
5153                exit( 1 );
5154        } /*endif*/
5155        strcpy( editcmd, GpGetString(cGpS_texteditor) );
5156        strcat( editcmd, " " );
5157        strcat( editcmd, parfile );
5158        system( editcmd );
5159
5160        /* read possibly modified parameter file */
5161        strcpy( analyst_save, GpGetString(cGpS_analyst) );
5162        GpReadParfile();
5163        GpSetString( cGpS_analyst, analyst_save, NULL );
5164
5165} /* end of xm_call_configure */
5166
5167
5168
5169/*--------------------------------------------------------------------------*/
5170
5171
5172
5173static void xm_fetch_widgets( void )
5174
5175/* fetches all widgets
5176 *
5177 * no parameters
5178 */
5179{
5180        /* local variables */
5181        MrmType  wc_main;                /* main window class */
5182        MrmType  wc_cmd;                 /* command box class */
5183        MrmType  wc_draw;                /* drawing area class */
5184        MrmType  wc_grsn;                /* read grsn class */
5185        MrmType  wc_single;              /* single draw class */
5186        MrmType  wc_phase;               /* phase box class */
5187        MrmType  wc_param;               /* parameter box class */
5188        MrmType  class;                  /* class of widget */
5189
5190        /* executable code */
5191
5192        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "fetching widgets ...\n" );
5193        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[main]" );
5194        if  (MrmFetchWidget(xmv_hier,"window_main",xmv_appshell,
5195                &xmv_w[k_widget_main],&wc_main) != MrmSUCCESS)  {
5196                fprintf( stderr, "*SHM: can't fetch top level widget\n" );
5197        } /*endif*/
5198        XtManageChild( xmv_w[k_widget_main] );
5199
5200        XtRealizeWidget( xmv_appshell );
5201
5202        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[single]" );
5203        if  (MrmFetchWidget(xmv_hier,"single_trace_box",xmv_appshell,
5204                xmv_w+k_widget_single_draw_box,&wc_single) != MrmSUCCESS)  {
5205                fprintf( stderr, "*SHM: can't fetch single_draw widget\n" );
5206        } /*endif*/
5207        XtManageChild( xmv_w[k_widget_single_draw_box] );
5208
5209        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[command]" );
5210        if  (MrmFetchWidget(xmv_hier,"command_box",xmv_appshell,
5211                xmv_w+k_widget_command_box,&wc_cmd) != MrmSUCCESS)  {
5212                fprintf( stderr, "*SHM: can't fetch command widget\n" );
5213        } /*endif*/
5214
5215        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[read_dialog]" );
5216        if  (MrmFetchWidget(xmv_hier,"read_grsn_box",xmv_appshell,
5217                xmv_w+k_widget_read_grsn,&wc_grsn) != MrmSUCCESS)  {
5218                fprintf( stderr, "*SHM: can't fetch read-grsn widget\n" );
5219        } /*endif*/
5220
5221        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[calibration]" );
5222        if  (MrmFetchWidget(xmv_hier,"calibration_window_box",xmv_appshell,
5223                xmv_w+k_widget_calibration_box,&class) != MrmSUCCESS)  {
5224                fprintf( stderr, "*SHM: can't fetch calibration_window_box widget\n" );
5225        } /*endif*/
5226
5227        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[spectrum]" );
5228        if  (MrmFetchWidget(xmv_hier,"spectrum_window_box",xmv_appshell,
5229                xmv_w+k_widget_spectrum_box,&class) != MrmSUCCESS)  {
5230                fprintf( stderr, "*SHM: can't fetch spectrum_window_box widget\n" );
5231        } /*endif*/
5232
5233        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[pmotion]" );
5234        if  (MrmFetchWidget(xmv_hier,"pmotion_window_box",xmv_appshell,
5235                xmv_w+k_widget_pmotion_box,&class) != MrmSUCCESS)  {
5236                fprintf( stderr, "*SHM: can't fetch pmotion_window_box widget\n" );
5237        } /*endif*/
5238
5239        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[polarfil]" );
5240        if  (MrmFetchWidget(xmv_hier,"polarfil_window_box",xmv_appshell,
5241                xmv_w+k_widget_polarfil_box,&class) != MrmSUCCESS)  {
5242                fprintf( stderr, "*SHM: can't fetch polarfil_window_box widget\n" );
5243        } /*endif*/
5244
5245        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[phase_box]" );
5246        if  (MrmFetchWidget(xmv_hier,"phase_box",xmv_appshell,
5247                xmv_w+k_widget_phase_box,&wc_phase) != MrmSUCCESS)  {
5248                fprintf( stderr, "*SHM: can't fetch phase_box widget\n" );
5249        } /*endif*/
5250
5251        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[parbox]" );
5252        if  (MrmFetchWidget(xmv_hier,"parameter_box",xmv_appshell,
5253                xmv_w+k_widget_param_box,&wc_param) != MrmSUCCESS)  {
5254                fprintf( stderr, "*SHM: can't fetch param_box widget\n" );
5255        } /*endif*/
5256
5257        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[filter]" );
5258        if  (MrmFetchWidget(xmv_hier,"filter_selection_box",xmv_appshell,
5259                xmv_w+k_widget_filter_box,&class) != MrmSUCCESS)  {
5260                fprintf( stderr, "*SHM: can't fetch filter_box widget\n" );
5261        } /*endif*/
5262
5263        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[alert]" );
5264        if  (MrmFetchWidget(xmv_hier,"alert_box",xmv_appshell,
5265                xmv_w+k_widget_alert_box,&class) != MrmSUCCESS)  {
5266                fprintf( stderr, "*SHM: can't fetch alert_box widget\n" );
5267        } /*endif*/
5268
5269        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[multipli]" );
5270        if  (MrmFetchWidget(xmv_hier,"multiplication_box",xmv_appshell,
5271                xmv_w+k_widget_multiplication_box,&class) != MrmSUCCESS)  {
5272                fprintf( stderr, "*SHM: can't fetch multiplication_box widget\n" );
5273        } /*endif*/
5274
5275#ifdef XXX
5276        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[hypoe]" );
5277        if  (MrmFetchWidget(xmv_hier,"hypoellipse_box",xmv_appshell,
5278                xmv_w+k_widget_hypoellipse_box,&class) != MrmSUCCESS)  {
5279                fprintf( stderr, "*SHM: can't fetch hypoellipse_box widget\n" );
5280        } /*endif*/
5281#endif
5282
5283        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[locsat]" );
5284        if  (MrmFetchWidget(xmv_hier,"locsat_box",xmv_appshell,
5285                xmv_w+k_widget_locsat_box,&class) != MrmSUCCESS)  {
5286                fprintf( stderr, "*SHM: can't fetch locsat_box widget\n" );
5287        } /*endif*/
5288
5289        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[onsetpick]" );
5290        if  (MrmFetchWidget(xmv_hier,"onsetpick_box",xmv_appshell,
5291                xmv_w+k_widget_opick_box,&class) != MrmSUCCESS)  {
5292                fprintf( stderr, "*SHM: can't fetch onsetpick_box widget\n" );
5293        } /*endif*/
5294
5295        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[infosource]" );
5296        if  (MrmFetchWidget(xmv_hier,"infsource_box",xmv_appshell,
5297                xmv_w+k_widget_infsource_box,&class) != MrmSUCCESS)  {
5298                fprintf( stderr, "*SHM: can't fetch infsource_box widget\n" );
5299        } /*endif*/
5300
5301        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[fk_input]" );
5302        if  (MrmFetchWidget(xmv_hier,"fk_input_box",xmv_appshell,
5303                xmv_w+k_widget_fk_box,&class) != MrmSUCCESS)  {
5304                fprintf( stderr, "*SHM: can't fetch fk_input_box widget\n" );
5305        } /*endif*/
5306
5307        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[theo_phase]" );
5308        if  (MrmFetchWidget(xmv_hier,"theo_phase_box",xmv_appshell,
5309                xmv_w+k_widget_theo_phase_box,&class) != MrmSUCCESS)  {
5310                fprintf( stderr, "*SHM: can't fetch theo_phase_box widget\n" );
5311        } /*endif*/
5312
5313        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[help_box]" );
5314        if  (MrmFetchWidget(xmv_hier,"help_box",xmv_appshell,
5315                xmv_w+k_widget_help_box,&class) != MrmSUCCESS)  {
5316                fprintf( stderr, "*SHM: can't fetch help_box widget\n" );
5317        } /*endif*/
5318
5319        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[speccmd_box]" );
5320        if  (MrmFetchWidget(xmv_hier,"speccmd_box",xmv_appshell,
5321                xmv_w+k_widget_speccmd_box,&class) != MrmSUCCESS)  {
5322                fprintf( stderr, "*SHM: can't fetch speccmd_box widget\n" );
5323        } /*endif*/
5324
5325        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[vespa_input_box]" );
5326        if  (MrmFetchWidget(xmv_hier,"vespa_input_box",xmv_appshell,
5327                xmv_w+k_widget_vespa_input_box,&class) != MrmSUCCESS)  {
5328                fprintf( stderr, "*SHM: can't fetch vespa_input_box widget\n" );
5329        } /*endif*/
5330
5331        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[setup_box]" );
5332        if  (MrmFetchWidget(xmv_hier,"setup_box",xmv_appshell,
5333                xmv_w+k_widget_setup_box,&class) != MrmSUCCESS)  {
5334                fprintf( stderr, "*SHM: can't fetch setup_box widget\n" );
5335        } /*endif*/
5336
5337        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[refstat_box]" );
5338        if  (MrmFetchWidget(xmv_hier,"refstation_box",xmv_appshell,
5339                xmv_w+k_widget_refstat_box,&class) != MrmSUCCESS)  {
5340                fprintf( stderr, "*SHM: can't fetch refstat_box widget\n" );
5341        } /*endif*/
5342
5343        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[event_attrib_box]" );
5344        if  (MrmFetchWidget(xmv_hier,"event_attrib_box",xmv_appshell,
5345                xmv_w+k_widget_event_attrib_box,&class) != MrmSUCCESS)  {
5346                fprintf( stderr, "*SHM: can't fetch event_attrib_box widget\n" );
5347        } /*endif*/
5348
5349        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[spcsetup_box]" );
5350        if  (MrmFetchWidget(xmv_hier,"spcsetup_box",xmv_appshell,
5351                xmv_w+k_widget_spcsetup_box,&class) != MrmSUCCESS)  {
5352                fprintf( stderr, "*SHM: can't fetch spcsetup_box widget\n" );
5353        } /*endif*/
5354
5355        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[adrm_request]" );
5356        if  (MrmFetchWidget(xmv_hier,"adrm_selection_box",xmv_appshell,
5357                xmv_w+k_widget_adrm_selection_box,&class) != MrmSUCCESS)  {
5358                fprintf( stderr, "*SHM: can't fetch adrm_selection_box widget\n" );
5359        } /*endif*/
5360
5361        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[add_plugin]" );
5362        if  (MrmFetchWidget(xmv_hier,"add_plugin_box",xmv_appshell,
5363                xmv_w+k_widget_add_plugin_box,&class) != MrmSUCCESS)  {
5364                fprintf( stderr, "*SHM: can't fetch add_plugin_box widget\n" );
5365        } /*endif*/
5366
5367        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "\n" );
5368
5369} /* end of xm_fetch_widgets */
5370
5371
5372
5373/*--------------------------------------------------------------------------*/
5374
5375
5376
5377void xm_set_processing_state( int state )
5378
5379/* Sets processing state, controls Read Again and Read New,
5380 * Enables/Disabled Quit
5381 *
5382 * parameters if routine
5383 * int        state;     input; new state
5384 */
5385{
5386        /* local variables */
5387        static int  last_state=CUC_PARSTATE_UNDEFINED;     /* last status */
5388
5389        /* executable code */
5390
5391        if  (state == last_state)  return;
5392
5393        if  (state == CUC_PARSTATE_INITIAL)  {
5394                XtSetSensitive( xmv_w[k_widget_read_grsn_read_again], TRUE );
5395                XtSetSensitive( xmv_w[k_widget_read_grsn_read_new], TRUE );
5396                XtSetSensitive( xmv_w[k_widget_button_quit], TRUE );
5397                xmv_par.state = CUC_PARSTATE_INITIAL;
5398        } else if  (state == CUC_PARSTATE_FINAL)  {
5399                XtSetSensitive( xmv_w[k_widget_read_grsn_read_again], FALSE );
5400                XtSetSensitive( xmv_w[k_widget_read_grsn_read_new], TRUE );
5401                XtSetSensitive( xmv_w[k_widget_button_quit], TRUE );
5402                xmv_par.state = CUC_PARSTATE_INITIAL;
5403        } else {
5404                XtSetSensitive( xmv_w[k_widget_read_grsn_read_again], TRUE );
5405                XtSetSensitive( xmv_w[k_widget_read_grsn_read_new], FALSE );
5406                XtSetSensitive( xmv_w[k_widget_button_quit], FALSE );
5407                xmv_par.state = CUC_PARSTATE_PROCESS;
5408        } /*endif*/
5409
5410        last_state = state;
5411
5412} /* end of xm_set_read_state */
5413
5414
5415
5416/*--------------------------------------------------------------------------*/
5417
5418
5419
5420void xm_set_x_resources( Display *display )
5421
5422/* Sets X resources to user defined colours
5423 *
5424 * no parameters passed
5425 */
5426{
5427        /* local variables */
5428        static XrmDatabase xrm_database;          /* X resource database */
5429        char     col0[cBcShortStrLth+1];          /* background colour 0 */
5430        char     col1[cBcShortStrLth+1];          /* background colour 1 */
5431        char     col2[cBcShortStrLth+1];          /* background colour 2 */
5432        char     fg[cBcShortStrLth+1];            /* foreground colour 2 */
5433
5434        /* executable code */
5435
5436        strcpy( col0, "#F7DEBD" );
5437        strcpy( col1, "#F2B16E" );
5438        strcpy( col2, "#63282A" );
5439        strcpy( fg,   "#63282A" );
5440
5441        /* dialog foreground */
5442        fg[0] = '#';
5443        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_fg_red),   fg+1, fg+2 );
5444        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_fg_green), fg+3, fg+4 );
5445        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_fg_blue),  fg+5, fg+6 );
5446        fg[7] = '\0';
5447
5448        /* dialog background 0 (bright) */
5449        col0[0] = '#';
5450        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg0_red),   col0+1, col0+2 );
5451        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg0_green), col0+3, col0+4 );
5452        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg0_blue),  col0+5, col0+6 );
5453        col0[7] = '\0';
5454
5455        /* dialog background 1 (middle) */
5456        col1[0] = '#';
5457        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg1_red),   col1+1, col1+2 );
5458        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg1_green), col1+3, col1+4 );
5459        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg1_blue),  col1+5, col1+6 );
5460        col1[7] = '\0';
5461
5462        /* dialog background 2 (dark) */
5463        col2[0] = '#';
5464        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg2_red),   col2+1, col2+2 );
5465        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg2_green), col2+3, col2+4 );
5466        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg2_blue),  col2+5, col2+6 );
5467        col2[7] = '\0';
5468
5469        xrm_database = XtDatabase( display );
5470        XrmPutStringResource( &xrm_database, "SHM*background", col0 );
5471        XrmPutStringResource( &xrm_database, "SHM*foreground", fg );
5472        XrmPutStringResource( &xrm_database, "SHM*borderColor", col0 );
5473        XrmPutStringResource( &xrm_database, "SHM*XmBulletinBoard.background", col1 );
5474        XrmPutStringResource( &xrm_database, "SHM*XmRowColumn.background", col1 );
5475        XrmPutStringResource( &xrm_database, "SHM*XmForm.background", col1 );
5476        XrmPutStringResource( &xrm_database, "SHM*XmToggleButton.background", col1 );
5477        XrmPutStringResource( &xrm_database, "SHM*XmPushButton.background", col0 );
5478        XrmPutStringResource( &xrm_database, "SHM*XmLabel.background", col1 );
5479        XrmPutStringResource( &xrm_database, "SHM*XmScale.background", col1 );
5480        XrmPutStringResource( &xrm_database, "SHM*XmCommand.background", col1 );
5481        /*XrmPutStringResource( &xrm_database, "SHM*XmOptionMenu.background", col1 );*/
5482
5483        XrmPutStringResource( &xrm_database, "SHM*read_grsn_main_button_box.background", col2 );
5484        XrmPutStringResource( &xrm_database, "SHM*read_grsn_box.background", col2 );
5485        XrmPutStringResource( &xrm_database, "SHM*add_plugin_box.background", col2 );
5486        XrmPutStringResource( &xrm_database, "SHM*plugin_main_button_box.background", col2 );
5487        XrmPutStringResource( &xrm_database, "SHM*analyst_box.background", col2 );
5488        XrmPutStringResource( &xrm_database, "SHM*analyst_main_button_box.background", col2 );
5489        XrmPutStringResource( &xrm_database, "SHM*adrm_selection_box.background", col2 );
5490        XrmPutStringResource( &xrm_database, "SHM*adrm_main_button_box.background", col2 );
5491        XrmPutStringResource( &xrm_database, "SHM*event_attrib_box.background", col2 );
5492        XrmPutStringResource( &xrm_database, "SHM*attrib_main_button_box.background", col2 );
5493        XrmPutStringResource( &xrm_database, "SHM*filter_selection_box.background", col2 );
5494        XrmPutStringResource( &xrm_database, "SHM*filter_main_button_box.background", col2 );
5495        XrmPutStringResource( &xrm_database, "SHM*fk_input_box.background", col2 );
5496        XrmPutStringResource( &xrm_database, "SHM*fk_main_button_box.background", col2 );
5497        XrmPutStringResource( &xrm_database, "SHM*infsource_box.background", col2 );
5498        XrmPutStringResource( &xrm_database, "SHM*infsource_main_button_box.background", col2 );
5499        XrmPutStringResource( &xrm_database, "SHM*locsat_box.background", col2 );
5500        XrmPutStringResource( &xrm_database, "SHM*locsat_main_button_box.background", col2 );
5501        XrmPutStringResource( &xrm_database, "SHM*multiplication_box.background", col2 );
5502        XrmPutStringResource( &xrm_database, "SHM*multipli_default_box.background", col2 );
5503        XrmPutStringResource( &xrm_database, "SHM*onsetpick_box.background", col2 );
5504        XrmPutStringResource( &xrm_database, "SHM*opick_main_button_box.background", col2 );
5505        XrmPutStringResource( &xrm_database, "SHM*parameter_box.background", col2 );
5506        XrmPutStringResource( &xrm_database, "SHM*param_main_button_box1.background", col2 );
5507        XrmPutStringResource( &xrm_database, "SHM*phase_box.background", col2 );
5508        XrmPutStringResource( &xrm_database, "SHM*phase_main_button_box.background", col2 );
5509        XrmPutStringResource( &xrm_database, "SHM*refstation_box.background", col2 );
5510        XrmPutStringResource( &xrm_database, "SHM*refstat_main_button_box.background", col2 );
5511        XrmPutStringResource( &xrm_database, "SHM*setup_box.background", col2 );
5512        XrmPutStringResource( &xrm_database, "SHM*setup_main_button_box.background", col2 );
5513        XrmPutStringResource( &xrm_database, "SHM*spcsetup_box.background", col2 );
5514        XrmPutStringResource( &xrm_database, "SHM*spcsetup_main_button_box.background", col2 );
5515        XrmPutStringResource( &xrm_database, "SHM*speccmd_box.background", col2 );
5516        XrmPutStringResource( &xrm_database, "SHM*speccmd_main_button_box.background", col2 );
5517        XrmPutStringResource( &xrm_database, "SHM*theo_phase_box.background", col2 );
5518        XrmPutStringResource( &xrm_database, "SHM*theo_phase_main_button_box.background", col2 );
5519        XrmPutStringResource( &xrm_database, "SHM*vespa_input_box.background", col2 );
5520        XrmPutStringResource( &xrm_database, "SHM*vespa_main_button_box.background", col2 );
5521        XrmPutStringResource( &xrm_database, "SHM*menu_main.background", col0 );
5522        XrmPutStringResource( &xrm_database, "SHM*menu_calibration.background", col0 );
5523        XrmPutStringResource( &xrm_database, "SHM*menu_spectrum.background", col0 );
5524
5525} /* end of xm_set_x_resources */
5526
5527
5528
5529/*--------------------------------------------------------------------------*/
5530
5531
5532
5533void xm_hex_colour( float col, char *a, char *b )
5534
5535/* returns hex code (2 chars) of colour coding
5536 *
5537 * parameters of routine
5538 * int        col;       input; colour part (R or G or B) between 0.0 and 1.0
5539 * char       *a, *b;    output; two single characters (byte hexcode)
5540 */
5541{
5542        /* local variables */
5543        int      val;        /* value */
5544        int      nibble;     /* nibble value */
5545
5546        /* executable code */
5547
5548        val = Nint(col * 255.0);
5549
5550        /* hi nibble */
5551        nibble = (val >> 4) & 0x000F;
5552        if  (nibble < 10)  {
5553                *a = '0' + (char)nibble;
5554        } else {
5555                *a = 'A' + (char)(nibble-10);
5556        } /*endif*/
5557
5558        /* lo nibble */
5559        nibble = val & 0x000F;
5560        if  (nibble < 10)  {
5561                *b = '0' + (char)nibble;
5562        } else {
5563                *b = 'A' + (char)(nibble-10);
5564        } /*endif*/
5565
5566} /* end of xm_hex_colour */
5567
5568
5569
5570/*--------------------------------------------------------------------------*/
5571
5572
5573
5574void xm_move_drag_window( int key_entry )
5575
5576/* moves drag window after arrow keys
5577 *
5578 * parameters of routine
5579 * int        key_entry;    input; which key pressed
5580 */
5581{
5582        /* local variables */
5583        int      x1, y1, x2, y2;   /* position of drag box */
5584        TSyBoolean valid;          /* drag box on? */
5585        int      x, y;             /* new position */
5586        int      tmp;              /* scratch */
5587        float    reltime;          /* trace time (not used here) */
5588        int      trcno;            /* trace number (not used here) */
5589        TSyStatus status;          /* return status */
5590
5591        /* executable code */
5592
5593        status = cBcNoError;
5594
5595        mg_get_last_drag_box( &valid, &x1, &y1, &x2, &y2 );
5596        if  (!valid)  return;
5597
5598        /* compute new drag box position */
5599        x = (x1+x2)/2;
5600        y = (y1+y2)/2;
5601        if  (key_entry == k_entry_key_arrow_left)  {
5602                tmp = x2 - x1;
5603                if  (tmp < 0)  tmp = -tmp;
5604                tmp /= 5;
5605                if  (tmp == 0)  tmp = 1;
5606                x -= tmp;
5607        } else if  (key_entry == k_entry_key_arrow_right)  {
5608                tmp = x2 - x1;
5609                if  (tmp < 0)  tmp = -tmp;
5610                tmp /= 5;
5611                if  (tmp == 0)  tmp = 1;
5612                x += tmp;
5613        } else if  (key_entry == k_entry_key_arrow_up)  {
5614                tmp = y2 - y1;
5615                if  (tmp < 0)  tmp = -tmp;
5616                y -= tmp;
5617        } else {
5618                tmp = y2 - y1;
5619                if  (tmp < 0)  tmp = -tmp;
5620                y += tmp;
5621        } /*endif*/
5622
5623        /* check if new position is still within traces */
5624        mg_get_time_and_trace( x, y, &reltime, &trcno, &valid );
5625        if  (!valid)  return;
5626
5627        if  (!XtIsManaged(xmv_w[k_widget_single_draw_box]))
5628                XtManageChild( xmv_w[k_widget_single_draw_box] );
5629        mg_do_drag( xmv_w[k_widget_draw], MGC_DRAG_START, x, y );
5630        mg_do_drag( xmv_w[k_widget_draw], MGC_DRAG_CONTINUE, x, y );
5631        mg_plot_drag_window( xmv_w[k_widget_single_draw],
5632                xmv_onset_acc==CUC_ACCURACY_DISPLAY, &status );
5633        if  (Severe(&status))  cu_alert( status );
5634        if  (xmv_pm_on)  pmm_draw_pmotion( xmv_dspctrl.zoom );
5635        if  (xmv_polar_on)  pol_draw_poltraces( xmv_dspctrl.zoom, &status );
5636        if  (Severe(&status))  cu_alert( status );
5637
5638} /* end of xm_move_drag_window */
5639
5640
5641
5642/*--------------------------------------------------------------------------*/
Note: See TracBrowser for help on using the repository browser.