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

Revision 63, 195.1 KB checked in by marcus, 14 years ago (diff)

r48 | svn | 2008-10-14 18:19:33 +0200 (Di, 14 Okt 2008) | 1 line

detection line on display window

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