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

Revision 67, 196.0 KB checked in by marcus, 15 years ago (diff)

r52 | svn | 2008-10-17 12:57:15 +0200 (Fr, 17 Okt 2008) | 1 line

fixed problems with defalt filter

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