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

Revision 195, 198.5 KB checked in by marcus, 13 years ago (diff)

r113 | svn | 2010-03-05 19:28:01 +0100 (Fr, 05 Mär 2010) | 1 line

fix of waveform cursor problem when moving drag window by arrow key

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