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

Revision 64, 195.4 KB checked in by marcus, 14 years ago (diff)

r49 | svn | 2008-10-14 22:36:40 +0200 (Di, 14 Okt 2008) | 1 line

autoevt: filter depending on distance; appropriate variables in globalparams.h

Line 
1
2/* file shm.c
3 *      =====
4 *
5 * $Revision: 49 $, $Date: 2008-10-14 22:36:40 +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                if  (TRUE)  {
1447                        mx_filter_from_autoevt( autoevt, xmv_cmd_filter.name,
1448                                &xmv_cmd_filter.autocut );
1449                        if  (*xmv_cmd_filter.name == '\0')  {
1450                                xmv_cmd_filter.autocut = 5.0;  /* shv_globals not yet implemented */
1451                                strcpy( xmv_cmd_filter.name, GpGetString(cGpS_default_filter) );
1452                        } /*endif*/
1453                } else {
1454                        xmv_cmd_filter.autocut = 5.0;  /* shv_globals not yet implemented */
1455                        strcpy( xmv_cmd_filter.name, GpGetString(cGpS_default_filter) );
1456                } /*endif*/
1457                mx_filter_box_defaults( xmv_w, &xmv_cmd_filter );
1458                xmv_dspctrl.zoom = 1.0;
1459                mx_clear_rotation();
1460                *xmv_sortstr = '\0';
1461                *xmv_sortinfo = '\0';
1462        case k_button_read_grsn_read:
1463                xmv_phasetrc = NULL;
1464                cl3_save_parameters( CUC_SAVEMODE_INC, xmv_cpar, &status );
1465                status = BC_NOERROR;
1466                str = cu_get_string( xmv_w[k_widget_read_grsn_date] );
1467                strcpy( xmv_cmd_readg.start, str );
1468                strcat( xmv_cmd_readg.start, "_" );
1469                str = cu_get_string( xmv_w[k_widget_read_grsn_time] );
1470                strcat( xmv_cmd_readg.start, str );
1471                str = cu_get_string( xmv_w[k_widget_read_grsn_length] );
1472                if  (sscanf(str,"%f",&xmv_cmd_readg.seclth) != 1)  {
1473                        printf( "*SHM: length conversion error\n" );
1474                        break;
1475                } /*endif*/
1476                mx_get_chanlist( xmv_w, &xmv_cmd_readg );
1477                str = cu_get_string( xmv_w[k_widget_read_grsn_device] );
1478                strcpy( xmv_cmd_readg.device, str );
1479                xmv_cmd_readg.seclth *= 60.0;
1480                xmv_cmd_readg.format = MXC_FORMAT_SEED;
1481                if  (XtIsManaged(xmv_w[k_widget_read_grsn]))
1482                        XtUnmanageChild( xmv_w[k_widget_read_grsn] );
1483                /* mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "nr" ); */
1484                mg_disable_redraw( TRUE );
1485                mg_print_filter( xmv_w[k_widget_draw], "" );
1486                cl2_display_busy( xmv_w, TRUE );
1487                mx_readg( &xmv_cmd_readg, xmv_w[k_widget_draw],
1488                        xmv_w[k_widget_single_draw], &xmv_dspctrl,
1489                        *tag==k_button_read_grsn_read, autoevt, &status );
1490                if  (Severe(&status))  {
1491                        cl2_display_busy( xmv_w, FALSE );
1492                        if  (GpGetInt(cGpI_debug_level) > 3)
1493                                printf( "SHM-dbg4: read aborted, status %d\n", status );
1494                        break;
1495                } else if  (mg_dsptrcs() == 0)  {
1496                        status = CUE_NO_TRACES;
1497                        cl2_display_busy( xmv_w, FALSE );
1498                        if  (GpGetInt(cGpI_debug_level) > 3)
1499                                printf( "SHM-dbg4: no traces read, status %d\n", status );
1500                        break;
1501                } /*endif*/
1502                if  (strcmp(GpGetString(cGpS_default_filter),"BUT_BP") == 0)  {
1503                        cl_create_filter( xmv_w, CLC_CREFIL_BUT_BP, &status );
1504                        if  (Severe(&status))  {
1505                                cl2_display_busy( xmv_w, FALSE );
1506                                break;
1507                        } /*endif*/
1508                        strcpy( xmv_cmd_filter.name, cu_get_string(
1509                                xmv_w[k_widget_filter_edit_text]) );
1510                } /*endif*/
1511                if  (xmv_cmd_filter.name[0] != '\0')  {
1512                        mg_print_busy( xmv_w[k_widget_draw], TRUE );
1513                        mx_filter( &xmv_cmd_filter, xmv_w[k_widget_draw],
1514                                &xmv_dspctrl, &status );
1515                        mg_print_filter( xmv_w[k_widget_draw], xmv_cmd_filter.name );
1516                        if  (Severe(&status))  {
1517                                cl2_display_busy( xmv_w, FALSE );
1518                                break;
1519                        } /*endif*/
1520                } /*endif*/
1521                /* mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "rd" ); */
1522                if  (*tag == k_button_read_grsn_readnew)  {
1523                        cu_reset_phase( &xmv_phase );
1524                        cu_reset_paramsets( &xmv_par );
1525                        xmv_cpar = xmv_par.par;
1526                        xmv_cpar->soft_change = TRUE;
1527                        cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
1528                        xmv_cpar->soft_change = FALSE;
1529                        cl2_param_box_defaults( xmv_w, xmv_cpar /*, &xmv_dspctrl*/ );
1530                } /*endif*/
1531                if  (mx_need_rotation())
1532                        mx_rotation( xmv_w[k_widget_draw], &xmv_dspctrl,
1533                                xmv_cpar->b_azimuth, xmv_cpar->source_lat,
1534                                xmv_cpar->source_lon, &status );
1535                if  (*xmv_sortstr != '\0')  {
1536                        cl4_sort_traces( xmv_w[k_widget_draw], &xmv_dspctrl, xmv_sortstr,
1537                                xmv_cpar, &status );
1538                        mg_print_sortinfo( xmv_w[k_widget_draw], xmv_sortinfo );
1539                } /*endif*/
1540                if  (*tag == k_button_read_grsn_read)  {
1541                        mg_print_lastcmd( xmv_w[k_widget_draw], "Read Again" );
1542                } else {
1543                        mg_print_lastcmd( xmv_w[k_widget_draw], "Read New" );
1544                } /*endif*/
1545                if  (*autoevt != '\0' && *tag == k_button_read_grsn_readnew)  {
1546                        i = strlen( autoevt );
1547                        if  (i > 5 && strcmp(autoevt+i-4,".evt") == 0)  {
1548                                if  (GpGetInt(cGpI_debug_level) > 1)
1549                                        printf( "SHM-dbg2: restore evt from %s\n", autoevt );
1550                                /*cu_delete_all_phases( xmv_w[k_widget_draw],
1551                                        xmv_w[k_widget_single_draw], "*", TRUE );*/
1552                                cl3_restore_from_evt( autoevt, xmv_cpar, &eventid, &status );
1553                                if  (Severe(&status))  {
1554                                        cu_alert( status );
1555                                        status = cBcNoError;
1556                                } /*endif*/
1557                                if  (GpGetBoolean(cGpB_recover_evid))  xmv_par.evid = eventid;
1558                                xmv_cpar->soft_change = TRUE;
1559                                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
1560                                xmv_cpar->soft_change = FALSE;
1561                                /*mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &status );*/
1562                        } /*endif*/
1563                        /* sort by distance automatically if requested */
1564                        if  (GpGetBoolean(cGpB_autosort_by_distance))  {
1565                                if  (GpGetInt(cGpI_debug_level) > 3)
1566                                        printf( "SHM-dbg4: auto sort by distance\n" );
1567                                strcpy( xmv_sortstr, "DISTANCE" );
1568                                strcpy( xmv_sortinfo, "sort:d" );
1569                                /*cu_get_param_values( xmv_w, xmv_cpar );*/
1570                                cl4_sort_traces( xmv_w[k_widget_draw], &xmv_dspctrl, xmv_sortstr,
1571                                        xmv_cpar, &status );
1572                                if  (Severe(&status))  {
1573                                        cu_alert( status );
1574                                        status = cBcNoError;
1575                                } /*endif*/
1576                                mg_print_sortinfo( xmv_w[k_widget_draw], xmv_sortinfo );
1577                        } /*endif*/
1578                } /*endif*/
1579                cl2_display_busy( xmv_w, FALSE );
1580                mg_disable_redraw( FALSE );
1581                mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &status );
1582                /* reset 'Keep Traces' if automatic is switched on */
1583                if  (xmv_keeptrc_auto)  {
1584                        xmv_cmd_readg.keep = FALSE;
1585                        xmv_keeptrc_auto = FALSE;
1586                        XmToggleButtonSetState( xmv_w[k_widget_read_grsn_keep], FALSE, FALSE );
1587                } /*endif*/
1588                if  (is_readnew)
1589                        cl3_call_extproc( CL3C_PLUGIN_INIPROC, xmv_w, &xmv_dspctrl, &xmv_par,
1590                                &xmv_phase, &status );
1591                break;
1592#ifdef XXX
1593        case k_button_read_grsn_request:
1594                if  (XtIsManaged(xmv_w[k_widget_read_grsn]))
1595                        XtUnmanageChild( xmv_w[k_widget_read_grsn] );
1596                XmUpdateDisplay( xmv_appshell );
1597                cl2_display_busy( xmv_w, TRUE );
1598                mg_print_lastcmd( xmv_w[k_widget_draw], "Request" );
1599                cl4_request_data( xmv_w, &xmv_cmd_readg, &status );
1600                cl2_display_busy( xmv_w, FALSE );
1601                if  (status == BC_NOERROR)
1602                        xm_read_requested_data( xmv_w, &status );
1603                break;
1604#endif
1605        case k_button_read_grsn_cancel:
1606                if  (XtIsManaged(xmv_w[k_widget_read_grsn]))
1607                        XtUnmanageChild( xmv_w[k_widget_read_grsn] );
1608                mg_print_lastcmd( xmv_w[k_widget_draw], "Read Cancelled" );
1609                break;
1610        case k_button_read_grsn_reset:
1611                cl3_readbox_reset( xmv_w, &xmv_cmd_readg.sl );
1612                break;
1613        case k_button_read_grsn_invhdr:
1614                xmv_cmd_readg.reads_invhdr = !xmv_cmd_readg.reads_invhdr;
1615                break;
1616        case k_button_read_grsn_1hz:
1617                mx_get_chanlist( xmv_w, &xmv_cmd_readg );
1618                break;
1619        case k_button_read_grsn_20hz:
1620                mx_get_chanlist( xmv_w, &xmv_cmd_readg );
1621                break;
1622        case k_button_read_grsn_80hz:
1623                mx_get_chanlist( xmv_w, &xmv_cmd_readg );
1624                break;
1625        case k_button_read_grsn_edit_hz:
1626                mx_get_chanlist( xmv_w, &xmv_cmd_readg );
1627                break;
1628        case k_button_read_grsn_station+0:
1629        case k_button_read_grsn_station+1:
1630        case k_button_read_grsn_station+2:
1631        case k_button_read_grsn_station+3:
1632        case k_button_read_grsn_station+4:
1633        case k_button_read_grsn_station+5:
1634        case k_button_read_grsn_station+6:
1635        case k_button_read_grsn_station+7:
1636        case k_button_read_grsn_station+8:
1637        case k_button_read_grsn_station+9:
1638        case k_button_read_grsn_station+10:
1639        case k_button_read_grsn_station+11:
1640        case k_button_read_grsn_station+12:
1641        case k_button_read_grsn_station+13:
1642        case k_button_read_grsn_station+14:
1643        case k_button_read_grsn_station+15:
1644        case k_button_read_grsn_station+16:
1645        case k_button_read_grsn_station+17:
1646        case k_button_read_grsn_station+18:
1647        case k_button_read_grsn_station+19:
1648        case k_button_read_grsn_station+20:
1649        case k_button_read_grsn_station+21:
1650        case k_button_read_grsn_station+22:
1651        case k_button_read_grsn_station+23:
1652        case k_button_read_grsn_station+24:
1653        case k_button_read_grsn_station+25:
1654        case k_button_read_grsn_station+26:
1655        case k_button_read_grsn_station+27:
1656        case k_button_read_grsn_station+28:
1657        case k_button_read_grsn_station+29:
1658                bit = 1 << (*tag - k_button_read_grsn_station);
1659                if  (data->set)  {
1660                        xmv_cmd_readg.stations |= bit;
1661                } else {
1662                        xmv_cmd_readg.stations &= ~bit;
1663                } /*endif*/
1664                break;
1665        case k_button_read_grsn_grf:
1666                if  (data->set)  {
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], TRUE, FALSE );
1673                                } /*endif*/
1674                        } /*endfor*/
1675                } else {
1676                        for  (bit=xmv_cmd_readg.sl.set1start;
1677                                bit<=xmv_cmd_readg.sl.set1end; bit++)  {
1678                                if  (xmv_cmd_readg.sl.code[bit][0] != '-')  {
1679                                        xmv_cmd_readg.stations &= ~(1<<bit);
1680                                        XmToggleButtonSetState(
1681                                                xmv_w[k_widget_read_grsn_station+bit], FALSE, FALSE );
1682                                } /*endif*/
1683                        } /*endfor*/
1684                } /*endif*/
1685                break;
1686        case k_button_read_grsn_grsn:
1687                if  (data->set)  {
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], TRUE, FALSE );
1694                                } /*endif*/
1695                        } /*endfor*/
1696                } else {
1697                        for  (bit=xmv_cmd_readg.sl.set2start;
1698                                bit<=xmv_cmd_readg.sl.set2end; bit++)  {
1699                                if  (xmv_cmd_readg.sl.code[bit][0] != '-')  {
1700                                        xmv_cmd_readg.stations &= ~(1<<bit);
1701                                        XmToggleButtonSetState(
1702                                                xmv_w[k_widget_read_grsn_station+bit], FALSE, FALSE );
1703                                } /*endif*/
1704                        } /*endfor*/
1705                } /*endif*/
1706                break;
1707        case k_button_read_grsn_all:
1708                cl4_select_all_possible_stations( xmv_w, &xmv_cmd_readg, &status );
1709                break;
1710        case k_button_read_grsn_comp_z:
1711        case k_button_read_grsn_comp_n:
1712        case k_button_read_grsn_comp_e:
1713        case k_button_read_grsn_comp_edit:
1714                xmv_cmd_readg.comp[0] ='\0';
1715                if  (XmToggleButtonGetState(xmv_w[k_widget_read_grsn_comp_z]))
1716                        strcat( xmv_cmd_readg.comp, "Z" );
1717                if  (XmToggleButtonGetState(xmv_w[k_widget_read_grsn_comp_n]))
1718                        strcat( xmv_cmd_readg.comp, "N" );
1719                if  (XmToggleButtonGetState(xmv_w[k_widget_read_grsn_comp_e]))
1720                        strcat( xmv_cmd_readg.comp, "E" );
1721                if  (XmToggleButtonGetState(xmv_w[k_widget_read_grsn_comp_edit]))
1722                        if  (strlen(xmv_cmd_readg.comp)
1723                                +strlen(cu_get_string(xmv_w[k_widget_read_grsn_comp_text]))
1724                                < MXC_COMP_STRLTH)
1725                                strcat( xmv_cmd_readg.comp,
1726                                        cu_get_string(xmv_w[k_widget_read_grsn_comp_text]) );
1727                break;
1728        case k_button_read_grsn_secup:
1729                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1730                        xmv_w[k_widget_read_grsn_time], 10.0, &status );
1731                break;
1732        case k_button_read_grsn_secdn:
1733                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1734                        xmv_w[k_widget_read_grsn_time], -10.0, &status );
1735                break;
1736        case k_button_read_grsn_minup:
1737                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1738                        xmv_w[k_widget_read_grsn_time], 60.0, &status );
1739                break;
1740        case k_button_read_grsn_mindn:
1741                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1742                        xmv_w[k_widget_read_grsn_time], -60.0, &status );
1743                break;
1744        case k_button_read_grsn_hourup:
1745                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1746                        xmv_w[k_widget_read_grsn_time], 3600.0, &status );
1747                break;
1748        case k_button_read_grsn_hourdn:
1749                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1750                        xmv_w[k_widget_read_grsn_time], -3600.0, &status );
1751                break;
1752        case k_button_read_grsn_dayup:
1753                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1754                        xmv_w[k_widget_read_grsn_time], 86400.0, &status );
1755                break;
1756        case k_button_read_grsn_daydn:
1757                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1758                        xmv_w[k_widget_read_grsn_time], -86400.0, &status );
1759                break;
1760        case k_button_read_grsn_monthup:
1761                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1762                        xmv_w[k_widget_read_grsn_time], CUC_MONTH_INC, &status);
1763                break;
1764        case k_button_read_grsn_monthdn:
1765                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1766                        xmv_w[k_widget_read_grsn_time], CUC_MONTH_DEC, &status);
1767                break;
1768        case k_button_read_grsn_yearup:
1769                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1770                        xmv_w[k_widget_read_grsn_time], CUC_YEAR_INC, &status );
1771                break;
1772        case k_button_read_grsn_yeardn:
1773                cu_set_read_time( xmv_w[k_widget_read_grsn_date],
1774                        xmv_w[k_widget_read_grsn_time], CUC_YEAR_DEC, &status );
1775                break;
1776        case k_button_read_grsn_nexttime:
1777                cu_set_read_time_file( xmv_w, CUC_LIST_NEXT, autoevt, xmv_detecinfo,
1778                        &status );
1779                mg_print_detecinfo( xmv_w[k_widget_draw], xmv_detecinfo );
1780                break;
1781        case k_button_read_grsn_prevtime:
1782                cu_set_read_time_file( xmv_w, CUC_LIST_PREV, autoevt, xmv_detecinfo,
1783                        &status );
1784                mg_print_detecinfo( xmv_w[k_widget_draw], xmv_detecinfo );
1785                break;
1786        case k_button_read_grsn_keep:
1787                xmv_cmd_readg.keep = data->set;
1788                break;
1789        case k_button_read_grsn_eventfile:
1790                cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_EVENTS, &status );
1791                break;
1792        case k_button_read_grsn_device:
1793                if  (XmToggleButtonGetState(xmv_w[k_widget_read_grsn_fbox]))
1794                        cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_SFD, &status );
1795                break;
1796        case k_button_read_grsn_todaysfd:
1797                cl4_manage_sfdfile( xmv_w, &xmv_cmd_readg );
1798                break;
1799        case k_button_read_grsn_nextdiag:
1800                cu_next_read_dialog( xmv_w );
1801                break;
1802        case k_button_phase_dismiss:
1803                if  (XtIsManaged(xmv_w[k_widget_phase_box]))
1804                        XtUnmanageChild( xmv_w[k_widget_phase_box] );
1805                break;
1806        case k_button_phase_ok:
1807                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
1808                        &status );
1809                cu_rename_phase( xmv_w );
1810                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
1811                        &status );
1812                break;
1813        case k_button_phase_delete:
1814#               ifdef XXX
1815                mg_delete_phase( &xmv_phase, &ok );
1816                if  (ok)  {
1817                        mg_mark_one_phase( xmv_w[k_widget_draw],
1818                                xmv_w[k_widget_single_draw], &xmv_phase,
1819                                xmv_onset_acc==CUC_ACCURACY_DISPLAY );
1820                        xmv_phase.name[0] = '\0';
1821                } /*endif*/
1822#               endif
1823                cu_delete_all_phases( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
1824                        cu_get_string(xmv_w[k_widget_phase_name_text]), TRUE );
1825                break;
1826        case k_button_phase_sign_p:
1827                if  (data->set)  xmv_phase.sign = 1;
1828                break;
1829        case k_button_phase_sign_m:
1830                if  (data->set)  xmv_phase.sign = -1;
1831                break;
1832        case k_button_phase_sign_0:
1833                if  (data->set)  xmv_phase.sign = 0;
1834                break;
1835        case k_button_phase_spec_e:
1836                if  (data->set)  xmv_phase.spec = cPiSpecEmergent;
1837                break;
1838        case k_button_phase_spec_i:
1839                if  (data->set)  xmv_phase.spec = cPiSpecImpulsive;
1840                break;
1841        case k_button_phase_reliab_yes:
1842                if  (data->set)  xmv_phase.reliable = TRUE;
1843                break;
1844        case k_button_phase_reliab_no:
1845                if  (data->set)  xmv_phase.reliable = FALSE;
1846                break;
1847        case k_button_phase_name_b:
1848                cu_set_string( xmv_w[k_widget_phase_name_text], "beam" );
1849                break;
1850        case k_button_phase_name_Pn:
1851                cu_set_string( xmv_w[k_widget_phase_name_text], "Pn" );
1852                break;
1853        case k_button_phase_name_Pg:
1854                cu_set_string( xmv_w[k_widget_phase_name_text], "Pg" );
1855                break;
1856        case k_button_phase_name_Sn:
1857                cu_set_string( xmv_w[k_widget_phase_name_text], "Sn" );
1858                break;
1859        case k_button_phase_name_Sg:
1860                cu_set_string( xmv_w[k_widget_phase_name_text], "Sg" );
1861                break;
1862        case k_button_phase_name_Lg:
1863                cu_set_string( xmv_w[k_widget_phase_name_text], "Lg" );
1864                break;
1865        case k_button_phase_name_Rg:
1866                cu_set_string( xmv_w[k_widget_phase_name_text], "Rg" );
1867                break;
1868        case k_button_phase_name_P:
1869                cu_set_string( xmv_w[k_widget_phase_name_text], "P" );
1870                break;
1871        case k_button_phase_name_pP:
1872                cu_set_string( xmv_w[k_widget_phase_name_text], "pP" );
1873                break;
1874        case k_button_phase_name_sP:
1875                cu_set_string( xmv_w[k_widget_phase_name_text], "sP" );
1876                break;
1877        case k_button_phase_name_PKPdf:
1878                cu_set_string( xmv_w[k_widget_phase_name_text], "PKPdf" );
1879                break;
1880        case k_button_phase_name_PKPbc:
1881                cu_set_string( xmv_w[k_widget_phase_name_text], "PKPbc" );
1882                break;
1883        case k_button_phase_name_PKPab:
1884                cu_set_string( xmv_w[k_widget_phase_name_text], "PKPab" );
1885                break;
1886        case k_button_phase_name_pPKPdf:
1887                cu_set_string( xmv_w[k_widget_phase_name_text], "pPKPdf" );
1888                break;
1889        case k_button_phase_name_pPKPbc:
1890                cu_set_string( xmv_w[k_widget_phase_name_text], "pPKPbc" );
1891                break;
1892        case k_button_phase_name_pPKPab:
1893                cu_set_string( xmv_w[k_widget_phase_name_text], "pPKPab" );
1894                break;
1895        case k_button_phase_name_PKP:
1896                cu_set_string( xmv_w[k_widget_phase_name_text], "PKP" );
1897                break;
1898        case k_button_phase_name_PP:
1899                cu_set_string( xmv_w[k_widget_phase_name_text], "PP" );
1900                break;
1901        case k_button_phase_name_pPP:
1902                cu_set_string( xmv_w[k_widget_phase_name_text], "pPP" );
1903                break;
1904        case k_button_phase_name_S:
1905                cu_set_string( xmv_w[k_widget_phase_name_text], "S" );
1906                break;
1907        case k_button_phase_name_SKS:
1908                cu_set_string( xmv_w[k_widget_phase_name_text], "SKS" );
1909                break;
1910        case k_button_phase_name_PKKP:
1911                cu_set_string( xmv_w[k_widget_phase_name_text], "PKKP" );
1912                break;
1913        case k_button_phase_name_PKPPKP:
1914                cu_set_string( xmv_w[k_widget_phase_name_text], "PKPPKP" );
1915                break;
1916        case k_button_phase_name_PcP:
1917                cu_set_string( xmv_w[k_widget_phase_name_text], "PcP" );
1918                break;
1919        case k_button_phase_name_L:
1920                cu_set_string( xmv_w[k_widget_phase_name_text], CUC_LP_PHASE_NAME );
1921                break;
1922        case k_button_phase_name_X:
1923                cu_set_string( xmv_w[k_widget_phase_name_text], "X" );
1924                break;
1925        case k_button_phase_qual_0:
1926        case k_button_phase_qual_1:
1927        case k_button_phase_qual_2:
1928        case k_button_phase_qual_3:
1929        case k_button_phase_qual_4:
1930        case k_button_phase_qual_5:
1931        case k_button_phase_qual_6:
1932        case k_button_phase_qual_7:
1933        case k_button_phase_qual_8:
1934        case k_button_phase_qual_9:
1935                xmv_phase.quality = (*tag) - k_button_phase_qual_0;
1936                xmv_phase.weight = cu_quality2weight( xmv_phase.quality );
1937                break;
1938        case k_button_phase_acc_none:
1939                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
1940                        &status );
1941                xmv_onset_acc = CUC_ACCURACY_NONE;
1942                xmv_dspctrl.show_phase_acc = FALSE;
1943                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
1944                        &status );
1945                break;
1946        case k_button_phase_acc_query:
1947                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
1948                        &status );
1949                xmv_onset_acc = CUC_ACCURACY_QUERY;
1950                xmv_dspctrl.show_phase_acc = FALSE;
1951                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
1952                        &status );
1953                break;
1954        case k_button_phase_acc_display:
1955                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
1956                        &status );
1957                xmv_onset_acc = CUC_ACCURACY_DISPLAY;
1958                xmv_dspctrl.show_phase_acc = TRUE;
1959                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
1960                        &status );
1961                break;
1962        case k_button_param_dismiss:
1963                if  (XtIsManaged(xmv_w[k_widget_param_box]))
1964                        XtUnmanageChild( xmv_w[k_widget_param_box] );
1965                break;
1966        case k_button_param_hypoloc:
1967                /*
1968                mg_print_lastcmd( xmv_w[k_widget_draw], "Hypoellipse Box" );
1969                if  (!XtIsManaged(xmv_w[k_widget_hypoellipse_box]))
1970                        XtManageChild( xmv_w[k_widget_hypoellipse_box] );
1971                break;
1972                */
1973        case k_button_hypo_ok:
1974                /*
1975                if  (XtIsManaged(xmv_w[k_widget_hypoellipse_box]))
1976                        XtUnmanageChild( xmv_w[k_widget_hypoellipse_box] );
1977                */
1978                XmUpdateDisplay( xmv_appshell );
1979                mg_print_lastcmd( xmv_w[k_widget_draw], "Locate External" );
1980                cl2_display_busy( xmv_w, TRUE );
1981                XtSetSensitive( xmv_w[k_widget_menu_main], FALSE );
1982                cu_get_param_values( xmv_w, xmv_cpar );
1983                cl3_regio_localization(
1984                        xmv_w, cu_get_string(xmv_w[k_widget_phase_name_text]),
1985                        &xmv_par, &status );
1986                xmv_cpar->soft_change = TRUE;
1987                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
1988                xmv_cpar->soft_change = FALSE;
1989                cu_print_param_values( xmv_cpar );
1990                XtSetSensitive( xmv_w[k_widget_menu_main], TRUE );
1991                cl2_display_busy( xmv_w, FALSE );
1992                break;
1993/*
1994        case k_button_hypo_cancel:
1995                mg_print_lastcmd( xmv_w[k_widget_draw], "Hypoellipse Cancelled" );
1996                if  (XtIsManaged(xmv_w[k_widget_hypoellipse_box]))
1997                        XtUnmanageChild( xmv_w[k_widget_hypoellipse_box] );
1998                break;
1999*/
2000        case k_button_hypo_depth_free:
2001                cu_set_string( xmv_w[k_widget_hypo_depth_text], "free" );
2002                break;
2003        case k_button_hypo_depth_0:
2004                cu_set_string( xmv_w[k_widget_hypo_depth_text], "0" );
2005                break;
2006        case k_button_hypo_depth_5:
2007                cu_set_string( xmv_w[k_widget_hypo_depth_text], "5" );
2008                break;
2009        case k_button_hypo_depth_10:
2010                cu_set_string( xmv_w[k_widget_hypo_depth_text], "10" );
2011                break;
2012        case k_button_hypo_depth_15:
2013                cu_set_string( xmv_w[k_widget_hypo_depth_text], "15" );
2014                break;
2015        case k_button_hypo_depth_20:
2016                cu_set_string( xmv_w[k_widget_hypo_depth_text], "20" );
2017                break;
2018        case k_button_hypo_depth_33:
2019                cu_set_string( xmv_w[k_widget_hypo_depth_text], "33" );
2020                break;
2021        case k_button_hypo_use_s_yes:
2022        case k_button_hypo_use_s_no:
2023                break;
2024        case k_button_param_theo:
2025                mg_print_lastcmd( xmv_w[k_widget_draw], "Theo Phase Box" );
2026                if  (XtIsManaged(xmv_w[k_widget_theo_phase_box]))  {
2027                        XtUnmanageChild( xmv_w[k_widget_theo_phase_box] );
2028                } else {
2029                        XtManageChild( xmv_w[k_widget_theo_phase_box] );
2030                } /*endif*/
2031                break;
2032        case k_button_theo_phase_ok:
2033                if  (XtIsManaged(xmv_w[k_widget_theo_phase_box]))
2034                        XtUnmanageChild( xmv_w[k_widget_theo_phase_box] );
2035                XmUpdateDisplay( xmv_appshell );
2036                mg_print_lastcmd( xmv_w[k_widget_draw], "Theo (Tables)" );
2037                cl2_display_busy( xmv_w, TRUE );
2038                XtSetSensitive( xmv_w[k_widget_menu_main], FALSE );
2039                cu_get_param_values( xmv_w, xmv_cpar );
2040                cl3_set_theo_phases( xmv_w, &status );
2041                if  (Severe(&status))  {
2042                        XtSetSensitive( xmv_w[k_widget_menu_main], TRUE );
2043                        break;
2044                } /*endif*/
2045                cu_theo_arrivals( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
2046                        xmv_cpar, &status );
2047                XtSetSensitive( xmv_w[k_widget_menu_main], TRUE );
2048                cl2_display_busy( xmv_w, FALSE );
2049                break;
2050        case k_button_theo_phase_cancel:
2051                if  (XtIsManaged(xmv_w[k_widget_theo_phase_box]))
2052                        XtUnmanageChild( xmv_w[k_widget_theo_phase_box] );
2053                break;
2054        case k_button_param_theo_ext:
2055                mg_print_lastcmd( xmv_w[k_widget_draw], "Theo (ExtProg)" );
2056                cl2_display_busy( xmv_w, TRUE );
2057                XtSetSensitive( xmv_w[k_widget_menu_main], FALSE );
2058                cu_get_param_values( xmv_w, xmv_cpar );
2059                cl2_extern_theo( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
2060                        xmv_cpar, xmv_onset_acc==CUC_ACCURACY_DISPLAY, &status );
2061                XtSetSensitive( xmv_w[k_widget_menu_main], TRUE );
2062                cl2_display_busy( xmv_w, FALSE );
2063                break;
2064        case k_button_param_depth:
2065                mg_print_lastcmd( xmv_w[k_widget_draw], "Depth" );
2066                cl2_display_busy( xmv_w, TRUE );
2067                cu_get_param_values( xmv_w, xmv_cpar );
2068                cl_fit_depth( xmv_cpar->distance, &(xmv_cpar->depth),
2069                        &(xmv_cpar->err.dep), &(xmv_cpar->depth_type), &status );
2070                xmv_cpar->soft_change = TRUE;
2071                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
2072                xmv_cpar->soft_change = FALSE;
2073                cu_print_param_values( xmv_cpar );
2074                cl2_display_busy( xmv_w, FALSE );
2075                break;
2076        case k_button_param_locq_tooweak:
2077                xmv_cpar->loc_quality = CUC_LOCQ_TOOWEAK;
2078                break;
2079        case k_button_param_locq_incoherent:
2080                xmv_cpar->loc_quality = CUC_LOCQ_INCOHERENT;
2081                break;
2082        case k_button_param_locq_nobearing:
2083                xmv_cpar->loc_quality = CUC_LOCQ_NOBEARING;
2084                break;
2085        case k_button_param_locq_region:
2086                xmv_cpar->loc_quality = CUC_LOCQ_REGION;
2087                break;
2088        case k_button_param_locq_reliable:
2089                xmv_cpar->loc_quality = CUC_LOCQ_RELIABLE;
2090                break;
2091        case k_button_param_locq_undefined:
2092                xmv_cpar->loc_quality = CUC_LOCQ_UNDEFINED;
2093                break;
2094        case k_button_filter_none:
2095                if  (! data->set)  break;
2096                filter_mode = CLC_CREFIL_NONE;
2097                cu_set_string( xmv_w[k_widget_filter_edit_text], "" );
2098                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2099                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2100                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2101                break;
2102        case k_button_filter_other:
2103                if  (! data->set)  break;
2104                filter_mode = CLC_CREFIL_NONE;
2105                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2106                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2107                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2108                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2109                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2110                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2111                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2112                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2113                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2114                break;
2115        case k_button_filter_wwssn_sp:
2116                if  (! data->set)  break;
2117                filter_mode = CLC_CREFIL_NONE;
2118                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+G_WWSSN_SP" );
2119                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2120                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2121                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2122                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2123                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2124                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2125                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2126                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2127                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2128                break;
2129        case k_button_filter_wwssn_lp:
2130                if  (! data->set)  break;
2131                filter_mode = CLC_CREFIL_NONE;
2132                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+WWSSN_LP" );
2133                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2134                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2135                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2136                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2137                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2138                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2139                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2140                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2141                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2142                break;
2143        case k_button_filter_lrsm_sp:
2144                if  (! data->set)  break;
2145                filter_mode = CLC_CREFIL_NONE;
2146                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+LRSM_SP" );
2147                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2148                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2149                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2150                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2151                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2152                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2153                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2154                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2155                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2156                break;
2157        case k_button_filter_lrsm_lp:
2158                if  (! data->set)  break;
2159                filter_mode = CLC_CREFIL_NONE;
2160                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+LRSM_LP" );
2161                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2162                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2163                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2164                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2165                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2166                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2167                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2168                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2169                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2170                break;
2171        case k_button_filter_kirnos:
2172                if  (! data->set)  break;
2173                filter_mode = CLC_CREFIL_NONE;
2174                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+KIRNOS" );
2175                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2176                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2177                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2178                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2179                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2180                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2181                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2182                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2183                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2184                break;
2185        case k_button_filter_woodand:
2186                if  (! data->set)  break;
2187                filter_mode = CLC_CREFIL_NONE;
2188                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+WOODAND" );
2189                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2190                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2191                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2192                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2193                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2194                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2195                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2196                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2197                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2198                break;
2199        case k_button_filter_standard_bp:
2200                if  (! data->set)  break;
2201                filter_mode = CLC_CREFIL_NONE;
2202                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+STANDARD_BP" );
2203                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2204                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2205                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2206                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2207                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2208                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2209                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2210                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2211                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2212                break;
2213        case k_button_filter_sro_lp:
2214                if  (! data->set)  break;
2215                filter_mode = CLC_CREFIL_NONE;
2216                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+SRO_LP" );
2217                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2218                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2219                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2220                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2221                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2222                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2223                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2224                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2225                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2226                break;
2227        case k_button_filter_but_bp:
2228                if  (! data->set)  break;
2229                filter_mode = CLC_CREFIL_BUT_BP;
2230                cu_set_string( xmv_w[k_widget_filter_edit_text], "---" );
2231                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], TRUE );
2232                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], TRUE );
2233                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], TRUE );
2234                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], TRUE );
2235                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], TRUE );
2236                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], TRUE );
2237                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], TRUE );
2238                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], TRUE );
2239                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], TRUE );
2240                break;
2241        case k_button_filter_but_lp:
2242                if  (! data->set)  break;
2243                filter_mode = CLC_CREFIL_BUT_LP;
2244                cu_set_string( xmv_w[k_widget_filter_edit_text], "---" );
2245                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], TRUE );
2246                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2247                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], TRUE );
2248                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2249                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2250                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], TRUE );
2251                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], TRUE );
2252                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], TRUE );
2253                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], TRUE );
2254                break;
2255        case k_button_filter_but_hp:
2256                if  (! data->set)  break;
2257                filter_mode = CLC_CREFIL_BUT_HP;
2258                cu_set_string( xmv_w[k_widget_filter_edit_text], "---" );
2259                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], FALSE );
2260                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], TRUE );
2261                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], TRUE );
2262                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], TRUE );
2263                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], TRUE );
2264                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], FALSE );
2265                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], FALSE );
2266                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], TRUE );
2267                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], TRUE );
2268                break;
2269        case k_button_filter_displace:
2270                if  (! data->set)  break;
2271                filter_mode = CLC_CREFIL_NONE;
2272                cu_set_string( xmv_w[k_widget_filter_edit_text], "S+DISPL" );
2273                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_text], TRUE );
2274                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_text], FALSE );
2275                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_text], FALSE );
2276                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_up], FALSE );
2277                XtSetSensitive( xmv_w[k_widget_filter_butpar_hi_down], FALSE );
2278                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_up], TRUE );
2279                XtSetSensitive( xmv_w[k_widget_filter_butpar_lo_down], TRUE );
2280                XtSetSensitive( xmv_w[k_widget_filter_butpar_order_up], FALSE );
2281                XtSetSensitive( xmv_w[k_widget_filter_butpar_ord_down], FALSE );
2282                break;
2283        case k_button_filter_butpar_lo_up:
2284                cl_manage_filter_bounds( xmv_w, CLC_BUTPAR_LO_UP, &status );
2285                break;
2286        case k_button_filter_butpar_lo_down:
2287                cl_manage_filter_bounds( xmv_w, CLC_BUTPAR_LO_DOWN, &status );
2288                break;
2289        case k_button_filter_butpar_hi_up:
2290                cl_manage_filter_bounds( xmv_w, CLC_BUTPAR_HI_UP, &status );
2291                break;
2292        case k_button_filter_butpar_hi_down:
2293                cl_manage_filter_bounds( xmv_w, CLC_BUTPAR_HI_DOWN, &status );
2294                break;
2295        case k_button_filter_butpar_order_up:
2296                cl_manage_filter_bounds( xmv_w, CLC_BUTPAR_ORDER_UP, &status );
2297                break;
2298        case k_button_filter_butpar_order_down:
2299                cl_manage_filter_bounds( xmv_w, CLC_BUTPAR_ORDER_DOWN, &status );
2300                break;
2301        case k_button_filter_ok:
2302                if  (filter_mode != CLC_CREFIL_NONE)  {
2303                        cl_create_filter( xmv_w, filter_mode, &status );
2304                        if  (Severe(&status))  break;
2305                } /*endif*/
2306                strcpy( xmv_cmd_filter.name, cu_get_string(
2307                        xmv_w[k_widget_filter_edit_text]) );
2308                if  (strcmp(xmv_cmd_filter.name,"S+DISPL") == 0)  {
2309                        strcpy( tmpstr,
2310                                cu_get_string( xmv_w[k_widget_filter_butpar_lo_text]) );
2311                        i = strlen( tmpstr ) - 1;
2312                        if  (tmpstr[i] == 's')  tmpstr[i] = 'S';
2313                        i = 0;
2314                        while  (tmpstr[i] == ' ' && i < strlen(tmpstr))
2315                                i++;
2316                        strcat( xmv_cmd_filter.name, tmpstr+i );
2317                        if  (GpGetInt(cGpI_debug_level) > 3)
2318                                printf( "SHM-dbg4: %s\n", xmv_cmd_filter.name );
2319                } /*endif*/
2320                XtUnmanageChild( xmv_w[k_widget_filter_box] );
2321                XmUpdateDisplay( xmv_appshell );
2322                cl2_display_busy( xmv_w, TRUE );
2323                mx_filter( &xmv_cmd_filter, xmv_w[k_widget_draw],
2324                        &xmv_dspctrl, &status );
2325                if  (*xmv_sortstr != '\0')  {
2326                        cl4_sort_traces( xmv_w[k_widget_draw], &xmv_dspctrl, xmv_sortstr,
2327                                xmv_cpar, &status );
2328                        mg_print_sortinfo( xmv_w[k_widget_draw], xmv_sortinfo );
2329                } /*endif*/
2330                mg_print_filter( xmv_w[k_widget_draw], xmv_cmd_filter.name );
2331                cl2_display_busy( xmv_w, FALSE );
2332                cl_set_simfilter_active( xmv_w, TRUE );
2333                mg_print_lastcmd( xmv_w[k_widget_draw], "Filter Execution" );
2334                break;
2335        case k_button_filter_cancel:
2336                mg_print_lastcmd( xmv_w[k_widget_draw], "Filter Cancelled" );
2337                XtUnmanageChild( xmv_w[k_widget_filter_box] );
2338                break;
2339        case k_button_filter_autocut_0:
2340                xmv_cmd_filter.autocut = 0.0;
2341                break;
2342        case k_button_filter_autocut_5sec:
2343                xmv_cmd_filter.autocut = 5.0;
2344                break;
2345        case k_button_filter_autocut_20sec:
2346                xmv_cmd_filter.autocut = 20.0;
2347                break;
2348        case k_button_filter_autocut_1min:
2349                xmv_cmd_filter.autocut = 60.0;
2350                break;
2351        case k_button_filter_autocut_3min:
2352                xmv_cmd_filter.autocut = 180.0;
2353                break;
2354        case k_button_filter_autocut_5min:
2355                xmv_cmd_filter.autocut = 300.0;
2356                break;
2357        case k_button_filter_autocut_10min:
2358                xmv_cmd_filter.autocut = 600.0;
2359                break;
2360        case k_button_phase_type_other:
2361                xmv_cpar->source_type = CUC_TYPE_OTHER;
2362                break;
2363        case k_button_phase_type_local:
2364                xmv_cpar->source_type = CUC_TYPE_LOCAL_QUAKE;
2365                break;
2366        case k_button_phase_type_regio:
2367                xmv_cpar->source_type = CUC_TYPE_REGIO_QUAKE;
2368                break;
2369        case k_button_phase_type_tele:
2370                xmv_cpar->source_type = CUC_TYPE_TELE_QUAKE;
2371                break;
2372        case k_button_phase_type_nuclear:
2373                xmv_cpar->source_type = CUC_TYPE_NUCLEAR;
2374                break;
2375        case k_button_phase_type_blast:
2376                xmv_cpar->source_type = CUC_TYPE_BLAST;
2377                break;
2378        case k_button_phase_type_mining:
2379                xmv_cpar->source_type = CUC_TYPE_MINING;
2380                break;
2381        case k_button_multipli_1_3:
2382                cu_do_multiplication( 1./3., &status );
2383                break;
2384        case k_button_multipli_1_2:
2385                cu_do_multiplication( 1./2., &status );
2386                break;
2387        case k_button_multipli_1:
2388                cu_do_multiplication( 1., &status );
2389                break;
2390        case k_button_multipli_2:
2391                cu_do_multiplication( 2., &status );
2392                break;
2393        case k_button_multipli_3:
2394                cu_do_multiplication( 3., &status );
2395                break;
2396        case k_button_multipli_4:
2397                cu_do_multiplication( 4., &status );
2398                break;
2399        case k_button_multipli_edit_mul:
2400                cu_do_multiplication( CUC_MULTIPLI_EDIT_MUL, &status );
2401                break;
2402        case k_button_multipli_edit_div:
2403                cu_do_multiplication( CUC_MULTIPLI_EDIT_DIV, &status );
2404                break;
2405        case k_button_analyst_ok:
2406                mx_analyst_name( xmv_w, &xmv_dspctrl, &status );
2407                break;
2408        case k_button_infsource_ok:
2409                strcpy( xmv_cpar->source,
2410                        cu_get_string(xmv_w[k_widget_infsource_name_text]) );
2411                XtUnmanageChild( xmv_w[k_widget_infsource_box] );
2412                break;
2413        case k_button_param_set_1:
2414        case k_button_param_set_2:
2415        case k_button_param_set_3:
2416                cu_get_param_values( xmv_w, xmv_cpar );
2417                xmv_par.parno = *tag - k_button_param_set_1;
2418                xmv_cpar = xmv_par.par + xmv_par.parno;
2419                xmv_cpar->soft_change = TRUE;
2420                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
2421                xmv_cpar->soft_change = FALSE;
2422                break;
2423        case k_button_fk_okauto:
2424        case k_button_fk_ok:
2425                XtUnmanageChild( xmv_w[k_widget_fk_box] );
2426                XmUpdateDisplay( xmv_appshell );
2427                cl3_perform_fk( xmv_w, fk_unit_deg, (*tag == k_button_fk_ok),
2428                        "", &status );
2429                if  (*tag != k_button_fk_okauto)
2430                        break;
2431        case k_button_fk_get_values:
2432                XtUnmanageChild( xmv_w[k_widget_fk_box] );
2433                cl3_fk_get_values( xmv_cpar, &status );
2434                xmv_cpar->soft_change = TRUE;
2435                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
2436                xmv_cpar->soft_change = FALSE;
2437                break;
2438        case k_button_fk_cancel:
2439                XtUnmanageChild( xmv_w[k_widget_fk_box] );
2440                break;
2441        case k_button_fk_unit_deg:
2442                fk_unit_deg = TRUE;
2443                break;
2444        case k_button_fk_unit_km:
2445                fk_unit_deg = FALSE;
2446                break;
2447        case k_button_speccmd_hide:
2448                XtUnmanageChild( xmv_w[k_widget_speccmd_box] );
2449                break;
2450        case k_button_speccmd_1:
2451        case k_button_speccmd_1+1:
2452        case k_button_speccmd_1+2:
2453        case k_button_speccmd_1+3:
2454        case k_button_speccmd_1+4:
2455        case k_button_speccmd_1+5:
2456        case k_button_speccmd_1+6:
2457        case k_button_speccmd_1+7:
2458        case k_button_speccmd_1+8:
2459        case k_button_speccmd_1+9:
2460        case k_button_speccmd_1+10:
2461        case k_button_speccmd_1+11:
2462        case k_button_speccmd_1+12:
2463        case k_button_speccmd_1+13:
2464        case k_button_speccmd_1+14:
2465        case k_button_speccmd_1+15:
2466                str = cu_get_string(
2467                        xmv_w[k_widget_speccmd_1_text+(*tag)-k_button_speccmd_1] );
2468                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, str );
2469                mg_print_lastcmd( xmv_w[k_widget_draw], str );
2470                break;
2471        case k_button_vespa_ok:
2472                mg_print_lastcmd( xmv_w[k_widget_draw], "Vespagram" );
2473                cl4_do_vespa( xmv_w, &xmv_dspctrl, xmv_cpar->b_azimuth, TRUE, &status );
2474                XtSetSensitive( xmv_w[k_widget_vespa_export_button], TRUE );
2475                break;
2476        case k_button_vespa_cancel:
2477                XtUnmanageChild( xmv_w[k_widget_vespa_input_box] );
2478                break;
2479        case k_button_vespa_undo:
2480                cl4_do_vespa( xmv_w, &xmv_dspctrl, xmv_cpar->b_azimuth, FALSE, &status );
2481                XtUnmanageChild( xmv_w[k_widget_vespa_input_box] );
2482                break;
2483        case k_button_vespa_power_1:
2484                cu_set_string( xmv_w[k_widget_vespa_power_text], "1" );
2485                break;
2486        case k_button_vespa_power_2:
2487                cu_set_string( xmv_w[k_widget_vespa_power_text], "2" );
2488                break;
2489        case k_button_vespa_power_3:
2490                cu_set_string( xmv_w[k_widget_vespa_power_text], "3" );
2491                break;
2492        case k_button_vespa_power_5:
2493                cu_set_string( xmv_w[k_widget_vespa_power_text], "5" );
2494                break;
2495        case k_button_vespa_power_10:
2496                cu_set_string( xmv_w[k_widget_vespa_power_text], "10" );
2497                break;
2498        case k_button_vespa_slostep_1:
2499                cu_set_string( xmv_w[k_widget_vespa_slostep_text], "0.2" );
2500                break;
2501        case k_button_vespa_slostep_2:
2502                cu_set_string( xmv_w[k_widget_vespa_slostep_text], "0.5" );
2503                break;
2504        case k_button_vespa_slostep_3:
2505                cu_set_string( xmv_w[k_widget_vespa_slostep_text], "1.0" );
2506                break;
2507        case k_button_vespa_slohi_1:
2508                cu_set_string( xmv_w[k_widget_vespa_slohi_text], "5.0" );
2509                break;
2510        case k_button_vespa_slohi_2:
2511                cu_set_string( xmv_w[k_widget_vespa_slohi_text], "8.0" );
2512                break;
2513        case k_button_vespa_slohi_3:
2514                cu_set_string( xmv_w[k_widget_vespa_slohi_text], "12.0" );
2515                break;
2516        case k_button_vespa_export:
2517                cl4_vespa_export( xmv_w, &status );
2518                break;
2519        case k_button_locsat_ok:
2520                cu_get_param_values( xmv_w, xmv_cpar );
2521                XtUnmanageChild( xmv_w[k_widget_locsat_box] );
2522                XmUpdateDisplay( xmv_appshell );
2523                cl3_locsat_interface( xmv_w, &xmv_par, &status );
2524                xmv_cpar->soft_change = TRUE;
2525                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
2526                xmv_cpar->soft_change = FALSE;
2527                break;
2528        case k_button_locsat_hypo:
2529                cu_get_param_values( xmv_w, xmv_cpar );
2530                XtUnmanageChild( xmv_w[k_widget_locsat_box] );
2531                XmUpdateDisplay( xmv_appshell );
2532                /* set depth to free or fixed value */
2533                str = cu_get_string( xmv_w[k_widget_locsat_depth_text] );
2534                if  (strcmp(str,"free") == 0)  {
2535                        xmv_cpar->depth_type = CUC_DEPTH_FREE;
2536                        xmv_cpar->depth = 5.0;
2537                } else {
2538                        xmv_cpar->depth_type = CUC_DEPTH_PRESET;
2539                        sscanf( str, "%f", &(xmv_cpar->depth) );
2540                } /*endif*/
2541                /* write table prefix to filename in $SH_SCRATCH */
2542                str = cu_get_string( xmv_w[k_widget_locsat_prefix_text] );
2543                sprintf( cmd, "echo %s >$SH_SCRATCH/table_prefix.txt", str );
2544                system( cmd );
2545                cl3_call_extproc( CL3C_PLUGIN_LOCPROC, xmv_w, &xmv_dspctrl,
2546                        &xmv_par, &xmv_phase, &status );
2547                xmv_cpar->soft_change = TRUE;
2548                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
2549                xmv_cpar->soft_change = FALSE;
2550                break;
2551        case k_button_locsat_cancel:
2552                XtUnmanageChild( xmv_w[k_widget_locsat_box] );
2553                break;
2554        case k_button_locsat_depth_free:
2555                cu_set_string( xmv_w[k_widget_locsat_depth_text], "free" );
2556                break;
2557        case k_button_locsat_depth_0:
2558                cu_set_string( xmv_w[k_widget_locsat_depth_text], "0" );
2559                break;
2560        case k_button_locsat_depth_1:
2561                cu_set_string( xmv_w[k_widget_locsat_depth_text], "1" );
2562                break;
2563        case k_button_locsat_depth_10:
2564                cu_set_string( xmv_w[k_widget_locsat_depth_text], "10" );
2565                break;
2566        case k_button_locsat_depth_15:
2567                cu_set_string( xmv_w[k_widget_locsat_depth_text], "15" );
2568                break;
2569        case k_button_locsat_depth_20:
2570                cu_set_string( xmv_w[k_widget_locsat_depth_text], "20" );
2571                break;
2572        case k_button_locsat_depth_33:
2573                cu_set_string( xmv_w[k_widget_locsat_depth_text], "33" );
2574                break;
2575        case k_button_locsat_auto_yes:
2576        case k_button_locsat_auto_no:
2577                break;
2578        case k_button_locsat_output_yes:
2579        case k_button_locsat_output_no:
2580                break;
2581        case k_button_setup_hide:
2582                XtUnmanageChild( xmv_w[k_widget_setup_box] );
2583                break;
2584        case k_button_setup_hc_fast:
2585                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl,
2586                        "@SHM_CMD_SETHC sd_xwd.csh" );
2587                break;
2588        case k_button_setup_hc_qual:
2589                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl,
2590                        "@SHM_CMD_SETHC sd_screendump.csh" );
2591                break;
2592        case k_button_setup_maxcrsr_crosshair:
2593                GpSetInt( cGpI_max_cursor_form, MGC_CRSR_CROSSHAIR );
2594                break;
2595        case k_button_setup_maxcrsr_waveform:
2596                GpSetInt( cGpI_max_cursor_form, MGC_CRSR_WAVEFORM );
2597                break;
2598        case k_button_setup_maxcrsr_negwave:
2599                GpSetInt( cGpI_max_cursor_form, MGC_CRSR_WAVEFORM_NEG );
2600                break;
2601        case k_button_setup_maxcrsr_hilbert:
2602                GpSetInt( cGpI_max_cursor_form, MGC_CRSR_WAVEFORM_HILB );
2603                break;
2604        case k_button_setup_maxcrsr_neghilb:
2605                GpSetInt( cGpI_max_cursor_form, MGC_CRSR_WAVEFORM_NEGHILB );
2606                break;
2607        case k_button_setup_norm_c:
2608                GpSetBoolean( cGpB_auto_scaling, FALSE );
2609                GpSetInt( cGpI_trace_normalisation, cGp_NORM_CONST );
2610                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "shm_cmd_norm c" );
2611                break;
2612        case k_button_setup_norm_af:
2613                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "shm_cmd_norm af" );
2614                GpSetBoolean( cGpB_auto_scaling, FALSE );
2615                GpSetInt( cGpI_trace_normalisation, cGp_NORM_AW );
2616                break;
2617        case k_button_setup_norm_aw:
2618                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "shm_cmd_norm aw" );
2619                GpSetBoolean( cGpB_auto_scaling, FALSE );
2620                GpSetInt( cGpI_trace_normalisation, cGp_NORM_AW );
2621                break;
2622        case k_button_setup_norm_sf:
2623                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "shm_cmd_norm sf" );
2624                GpSetBoolean( cGpB_auto_scaling, TRUE );
2625                GpSetInt( cGpI_trace_normalisation, cGp_NORM_SW );
2626                break;
2627        case k_button_setup_norm_sw:
2628                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "shm_cmd_norm sw" );
2629                GpSetBoolean( cGpB_auto_scaling, TRUE );
2630                GpSetInt( cGpI_trace_normalisation, cGp_NORM_SW );
2631                break;
2632        case k_button_setup_topdown_top:
2633                GpSetBoolean( cGpB_top_down_order, TRUE );
2634                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "rd" );
2635                break;
2636        case k_button_setup_topdown_down:
2637                GpSetBoolean( cGpB_top_down_order, FALSE );
2638                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "rd" );
2639                break;
2640        case k_button_setup_filtyp_recursive:
2641                GpSetChar( cGpC_filter_type, 'R' );
2642#ifdef XXX
2643                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl,
2644                        "shmsetup use_rec_filters true" );
2645#endif
2646                break;
2647        case k_button_setup_filtyp_fft:
2648                GpSetChar( cGpC_filter_type, 'F' );
2649#ifdef XXX
2650                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl,
2651                        "shmsetup use_rec_filters false" );
2652#endif
2653                break;
2654        case k_button_setup_deffil_none:
2655                GpSetString( cGpS_default_filter, "", NULL );
2656                break;
2657        case k_button_setup_deffil_standard_bp:
2658                GpSetString( cGpS_default_filter, "S+STANDARD_BP", NULL );
2659                break;
2660        case k_button_setup_deffil_wwssn_sp:
2661                GpSetString( cGpS_default_filter, "S+G_WWSSN_SP", NULL );
2662                break;
2663        case k_button_setup_deffil_but_bp:
2664                GpSetString( cGpS_default_filter, "BUT_BP", NULL );
2665                break;
2666        case k_button_setup_evtview_full:
2667                GpSetString( cGpS_evtview_proc, "", NULL );
2668                break;
2669        case k_button_setup_evtview_brief:
2670                GpSetString( cGpS_evtview_proc, "ev2view", NULL );
2671                break;
2672        case k_button_setup_phasename_full:
2673                GpSetBoolean( cGpB_full_phase_names, TRUE );
2674                break;
2675        case k_button_setup_phasename_brief:
2676                GpSetBoolean( cGpB_full_phase_names, FALSE );
2677                break;
2678        case k_button_refstat_ok:
2679                XtUnmanageChild( xmv_w[k_widget_refstat_box] );
2680                XmUpdateDisplay( xmv_appshell );
2681                GpSetString( cGpS_refstation,
2682                        cu_get_string(xmv_w[k_widget_refstat_edit_text]), NULL );
2683                break;
2684        case k_button_refstat_station_1:
2685        case k_button_refstat_station_1+1:
2686        case k_button_refstat_station_1+2:
2687        case k_button_refstat_station_1+3:
2688        case k_button_refstat_station_1+4:
2689        case k_button_refstat_station_last:
2690                i = (*tag) - k_button_refstat_station_1;
2691                cl4_read_refstation( i+1, tmpstr, &status );
2692                if  (status == BC_NOERROR)
2693                        cu_set_string( xmv_w[k_widget_refstat_edit_text], tmpstr );
2694                break;
2695        case k_button_phase_attrib_ext:
2696                mg_print_lastcmd( xmv_w[k_widget_draw], "More Attribs" );
2697                if  (XtIsManaged(xmv_w[k_widget_event_attrib_box]))  {
2698                        XtUnmanageChild( xmv_w[k_widget_event_attrib_box] );
2699                } else {
2700                        XtManageChild( xmv_w[k_widget_event_attrib_box] );
2701                } /*endif*/
2702                break;
2703        case k_button_attrib_ok:
2704                XtUnmanageChild( xmv_w[k_widget_event_attrib_box] );
2705                break;
2706        case k_button_evpublic_ignore:
2707                xmv_cpar->flags &= ~CUC_F_EVENT_TELEX_ALL;
2708                xmv_cpar->flags |= CUC_F_EVENT_IGNORE;
2709                break;
2710        case k_button_evpublic_telex1:
2711                xmv_cpar->flags &= ~CUC_F_EVENT_TELEX_ALL;
2712                xmv_cpar->flags &= ~CUC_F_EVENT_IGNORE;
2713                break;
2714        case k_button_evpublic_telexall:
2715                xmv_cpar->flags |= CUC_F_EVENT_TELEX_ALL;
2716                xmv_cpar->flags &= ~CUC_F_EVENT_IGNORE;
2717                break;
2718        case k_button_read_grsn_fbox:
2719                /* just use button state */
2720                break;
2721        case k_button_opick_ok:
2722                if  (XtIsManaged(xmv_w[k_widget_opick_box]))  {
2723                        XtUnmanageChild( xmv_w[k_widget_opick_box] );
2724                } else {
2725                        XtManageChild( xmv_w[k_widget_opick_box] );
2726                } /*endif*/
2727                break;
2728        case k_button_opick_thresh_1:
2729                cu_set_string( xmv_w[k_widget_opick_thresh_text], "20" );
2730                break;
2731        case k_button_opick_thresh_2:
2732                cu_set_string( xmv_w[k_widget_opick_thresh_text], "10" );
2733                break;
2734        case k_button_opick_thresh_3:
2735                cu_set_string( xmv_w[k_widget_opick_thresh_text], "5" );
2736                break;
2737        case k_button_opick_thresh_4:
2738                cu_set_string( xmv_w[k_widget_opick_thresh_text], "2" );
2739                break;
2740        case k_button_opick_duration_1:
2741                cu_set_string( xmv_w[k_widget_opick_duration_text], "0.2" );
2742                break;
2743        case k_button_opick_duration_2:
2744                cu_set_string( xmv_w[k_widget_opick_duration_text], "0.3" );
2745                break;
2746        case k_button_opick_duration_3:
2747                cu_set_string( xmv_w[k_widget_opick_duration_text], "0.5" );
2748                break;
2749        case k_button_opick_duration_4:
2750                cu_set_string( xmv_w[k_widget_opick_duration_text], "1.0" );
2751                break;
2752        case k_button_opick_duration_5:
2753                cu_set_string( xmv_w[k_widget_opick_duration_text], "2.0" );
2754                break;
2755        case k_button_opick_break_1:
2756                cu_set_string( xmv_w[k_widget_opick_break_text], "0.00" );
2757                break;
2758        case k_button_opick_break_2:
2759                cu_set_string( xmv_w[k_widget_opick_break_text], "0.05" );
2760                break;
2761        case k_button_opick_break_3:
2762                cu_set_string( xmv_w[k_widget_opick_break_text], "0.10" );
2763                break;
2764        case k_button_opick_break_4:
2765                cu_set_string( xmv_w[k_widget_opick_break_text], "0.15" );
2766                break;
2767        case k_button_spcsetup_ok:
2768                if  (XtIsManaged(xmv_w[k_widget_spcsetup_box]))
2769                        XtUnmanageChild( xmv_w[k_widget_spcsetup_box] );
2770                spc_get_dialog_values( xmv_w, &status );
2771                break;
2772        case k_button_spcsetup_cancel:
2773                if  (XtIsManaged(xmv_w[k_widget_spcsetup_box]))
2774                        XtUnmanageChild( xmv_w[k_widget_spcsetup_box] );
2775                break;
2776        case k_button_adrm_configure:
2777                cl4_adrm_configure( xmv_w, &status );
2778                break;
2779        case k_button_adrm_cancel:
2780                if  (XtIsManaged(xmv_w[k_widget_adrm_selection_box]))
2781                        XtUnmanageChild( xmv_w[k_widget_adrm_selection_box] );
2782                break;
2783        case k_button_adrm_ok:
2784                if  (XtIsManaged(xmv_w[k_widget_adrm_selection_box]))
2785                        XtUnmanageChild( xmv_w[k_widget_adrm_selection_box] );
2786                XmUpdateDisplay( xmv_appshell );
2787                cl2_display_busy( xmv_w, TRUE );
2788                ok = xmv_cmd_readg.keep;  /* store */
2789                cl4_adrm_request( xmv_w, xmv_cmd_readg.start, xmv_cmd_readg.seclth,
2790                        tmpstr, &status );
2791                if  (*tmpstr != '\0' && status == cBcNoError)  {
2792                        /* data file created, read in */
2793                        xmh_read_gsefile( tmpstr, &status );
2794                } /*endif*/
2795                xmv_cmd_readg.keep = ok;  /* restore */
2796                cl2_display_busy( xmv_w, FALSE );
2797                break;
2798        case k_button_plugin_cancel:
2799                if  (XtIsManaged(xmv_w[k_widget_add_plugin_box]))
2800                        XtUnmanageChild( xmv_w[k_widget_add_plugin_box] );
2801                break;
2802        case k_button_plugin_add:
2803                cl2_display_busy( xmv_w, TRUE );
2804                if  (XtIsManaged(xmv_w[k_widget_add_plugin_box]))
2805                        XtUnmanageChild( xmv_w[k_widget_add_plugin_box] );
2806                cl3_add_extproc( xmv_w, &status );
2807                cl2_display_busy( xmv_w, FALSE );
2808                break;
2809        case k_button_param_setslow:
2810                PiSbSetSlowness( &(xmv_cpar->slowbox),
2811                        cu_get_string(xmv_w[k_widget_phase_name_text]), xmv_cpar->b_slowness,
2812                        xmv_cpar->b_azimuth, xmv_cpar->l_slowness, xmv_cpar->l_azimuth,
2813                        &status );
2814                mg_print_lastcmd( xmv_w[k_widget_draw], "SetSlow" );
2815                printf( "*SHM: stored slo:%5.2f az:%5.1f to %s\n", xmv_cpar->b_slowness,
2816                        xmv_cpar->b_azimuth, cu_get_string(xmv_w[k_widget_phase_name_text]) );
2817                break;
2818        default:
2819                printf( "*SHM: xm_call_activate: this cannot happen\n " );
2820        } /*endswitch*/
2821
2822        mg_set_cursor( MGC_XCRSR_NORMAL );
2823        /* XtSetSensitive( xmv_w[k_widget_main], TRUE ); */
2824
2825        if  (GpGetInt(cGpI_debug_level) > 3)
2826                printf( "SHM-dbg4: end of xm_call_activate, status %d\n", status );
2827
2828        if  (Severe(&status))  {
2829                if  (GpGetInt(cGpI_debug_level) > 3)
2830                        printf( "SHM-dbg4: call cu_alert\n" );
2831                cu_alert( status );
2832                /* printf( "*SHM: xm_call_activate: status %d\n", status ); */
2833        } /*endif*/
2834
2835} /* end of xm_call_activate */
2836
2837
2838
2839/*--------------------------------------------------------------------------*/
2840
2841
2842
2843static void xm_call_menu_select( Widget widget, int *tag, XmAnyCallbackStruct *data )
2844
2845/* callback routine of menu entries
2846 *
2847 * parameters of routine
2848 * Widget     widget;       input; widget ID
2849 * int        *tag;         input; entry number
2850 * XmAnyCallbackStruct *data not used
2851 */
2852{
2853        /* local variables */
2854        STATUS   locstat;              /* local status */
2855        char     str[BC_LINELTH+1];    /* scratch string */
2856        static TSyBoolean show3traces=FALSE; /* display 3 traces in zoom window */
2857        TSyBoolean reset_xcursor;      /* reset xcursor ? */
2858
2859        /* executable code */
2860
2861        xmh_log_action( "e", *tag );
2862
2863        locstat = BC_NOERROR;
2864        mg_set_cursor( MGC_XCRSR_BUSY );
2865        reset_xcursor = TRUE;
2866        /* XtSetSensitive( xmv_w[k_widget_main], FALSE ); */
2867
2868        switch  (*tag)  {
2869        case k_entry_command:
2870                HELPTEXT( "command" );
2871                mg_print_lastcmd( xmv_w[k_widget_draw], "Command Box" );
2872                if  (XtIsManaged(xmv_w[k_widget_command_box]))  {
2873                        XtUnmanageChild( xmv_w[k_widget_command_box] );
2874                } else {
2875                        XtManageChild( xmv_w[k_widget_command_box] );
2876                } /*endif*/
2877                break;
2878        case k_entry_help:
2879                mg_print_lastcmd( xmv_w[k_widget_draw], "Help Text" );
2880                if  (XtIsManaged(xmv_w[k_widget_help_box]))  {
2881                        XtUnmanageChild( xmv_w[k_widget_help_box] );
2882                        xmv_help = FALSE;
2883                } else {
2884                        XtManageChild( xmv_w[k_widget_help_box] );
2885                        xmv_help = TRUE;
2886                        HELPTEXT( "help" );
2887                } /*endif*/
2888                break;
2889        case k_entry_cmd_speccmd:
2890                HELPTEXT( "speccmd" );
2891                mg_print_lastcmd( xmv_w[k_widget_draw], "Command Box" );
2892                if  (XtIsManaged(xmv_w[k_widget_speccmd_box]))  {
2893                        XtUnmanageChild( xmv_w[k_widget_speccmd_box] );
2894                } else {
2895                        XtManageChild( xmv_w[k_widget_speccmd_box] );
2896                } /*endif*/
2897                break;
2898        case k_entry_cmd_del_horiz:
2899                HELPTEXT( "del-horiz" );
2900                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "del _comp~(z)" );
2901                mg_print_lastcmd( xmv_w[k_widget_draw], "Delete Horizontals" );
2902                /* set xmv_phasetrc to NULL in case this trace has been deleted */
2903                xmv_phasetrc = NULL;
2904                break;
2905        case k_entry_cmd_screendump:
2906        case k_entry_calib_screendump:
2907        case k_entry_spct_screendump:
2908        case k_entry_pm_screendump:
2909                HELPTEXT( "screendump" );
2910                cl2_display_busy( xmv_w, TRUE );
2911                XmUpdateDisplay( xmv_appshell );
2912                sprintf( str, "%s %s", GpGetString(cGpS_screendump_proc),
2913                        cl_unique_name() );
2914                system( str );
2915                mg_print_lastcmd( xmv_w[k_widget_draw], "Screendump" );
2916                cl2_display_busy( xmv_w, FALSE );
2917                break;
2918        case k_entry_cmd_userdef:
2919                strcpy( str, shd_inputs );
2920                strcat( str, "userdef.events" );
2921                xm_exec_userdef( str );
2922                break;
2923        case k_entry_quit:
2924                HELPTEXT( "quit" );
2925                mg_print_lastcmd( xmv_w[k_widget_draw], "Quit" );
2926                if  (xmv_par.state == CUC_PARSTATE_PROCESS)  {
2927                        locstat = CUE_SAVE_FIRST;
2928                        break;
2929                } /*endif*/
2930                if  (MrmCloseHierarchy(xmv_hier) != MrmSUCCESS)  {
2931                        fprintf( stderr, "*SHM: Unable to close UID hierarchy.\n" );
2932                        exit( 1 );
2933                } /*endif*/
2934                xmh_log_action( "\n--end-of-SHM\n", 0 );
2935                se_terminate();
2936                SqlDeleteScratchFile();
2937                exit( 0 );
2938        case k_entry_read_grsn:
2939                HELPTEXT( "read-seed" );
2940                mg_print_lastcmd( xmv_w[k_widget_draw], "Read" );
2941                if  (XtIsManaged(xmv_w[k_widget_read_grsn]))  {
2942                        XtUnmanageChild( xmv_w[k_widget_read_grsn] );
2943                } else {
2944                        XtManageChild( xmv_w[k_widget_read_grsn] );
2945                } /*endif*/
2946                break;
2947        case k_entry_readgse:
2948                HELPTEXT( "read-gse" );
2949                locstat = BC_NOERROR;
2950                cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_GSE, &locstat );
2951                mg_print_lastcmd( xmv_w[k_widget_draw], "Read GSE" );
2952                break;
2953        case k_entry_readgse2:
2954                HELPTEXT( "read-gse2" );
2955                locstat = BC_NOERROR;
2956                cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_GSE2, &locstat );
2957                mg_print_lastcmd( xmv_w[k_widget_draw], "Read GSE2" );
2958                break;
2959        case k_entry_readah:
2960                HELPTEXT( "read-ah" );
2961                locstat = BC_NOERROR;
2962                cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_AH, &locstat );
2963                mg_print_lastcmd( xmv_w[k_widget_draw], "Read AH" );
2964                break;
2965        case k_entry_readq:
2966                HELPTEXT( "read-q" );
2967                locstat = BC_NOERROR;
2968                cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_Q, &locstat );
2969                mg_print_lastcmd( xmv_w[k_widget_draw], "Read Q" );
2970                break;
2971        case k_entry_readrfmt:
2972                HELPTEXT( "read-rfmt" );
2973                locstat = BC_NOERROR;
2974                cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_RFMT, &locstat );
2975                mg_print_lastcmd( xmv_w[k_widget_draw], "Read Other" );
2976                break;
2977        case k_entry_write_mseed:
2978                HELPTEXT( "write-mseed" );
2979                mg_print_lastcmd( xmv_w[k_widget_draw], "Write MiniSEED" );
2980                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "writeseed" );
2981                break;
2982        case k_entry_write_gse:
2983                HELPTEXT( "write-gse" );
2984                mg_print_lastcmd( xmv_w[k_widget_draw], "Write GSE1.0" );
2985                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "writegse;;" );
2986                break;
2987        case k_entry_stw:
2988                HELPTEXT( "stw" );
2989                mx_stw( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw], &xmv_dspctrl );
2990                mg_print_lastcmd( xmv_w[k_widget_draw], "Set Time Wdw" );
2991                break;
2992        case k_entry_dtw:
2993                HELPTEXT( "dtw" );
2994                mg_do_drag( xmv_w[k_widget_draw], MGC_DRAG_CLEAR, 0, 0 );
2995                locstat = BC_NOERROR;
2996                mg_plot_drag_window( xmv_w[k_widget_single_draw],
2997                        xmv_onset_acc==CUC_ACCURACY_DISPLAY, &locstat );
2998                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "dtw" );
2999                mg_print_lastcmd( xmv_w[k_widget_draw], "Del Time Wdw" );
3000                break;
3001        case k_entry_wdw_move_right:
3002                HELPTEXT( "wdw-move-r" );
3003                sprintf( str, "shm_cmd_movetw %4.2f", GpGetFloat(cGpF_move_wdw_step) );
3004                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, str );
3005                mg_print_lastcmd( xmv_w[k_widget_draw], "Move Window Right" );
3006                mg_do_drag( xmv_w[k_widget_draw], MGC_DRAG_CLEAR, 0, 0 );
3007                break;
3008        case k_entry_wdw_move_left:
3009                HELPTEXT( "wdw-move-l" );
3010                sprintf( str, "shm_cmd_movetw %5.2f", -GpGetFloat(cGpF_move_wdw_step) );
3011                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, str );
3012                mg_print_lastcmd( xmv_w[k_widget_draw], "Move Window Left" );
3013                mg_do_drag( xmv_w[k_widget_draw], MGC_DRAG_CLEAR, 0, 0 );
3014                break;
3015        case k_entry_wdw_grow_right:
3016                HELPTEXT( "wdw-grow-r" );
3017                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "shm_cmd_growtw right" );
3018                mg_print_lastcmd( xmv_w[k_widget_draw], "Grow Window Right" );
3019                mg_do_drag( xmv_w[k_widget_draw], MGC_DRAG_CLEAR, 0, 0 );
3020                break;
3021        case k_entry_wdw_grow_left:
3022                HELPTEXT( "wdw-grow-l" );
3023                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "shm_cmd_growtw left" );
3024                mg_print_lastcmd( xmv_w[k_widget_draw], "Grow Window Left" );
3025                mg_do_drag( xmv_w[k_widget_draw], MGC_DRAG_CLEAR, 0, 0 );
3026                break;
3027        case k_entry_wdw_3traces:
3028                show3traces = !show3traces;
3029                mg_show_3_traces( show3traces );
3030                mg_print_lastcmd( xmv_w[k_widget_draw], "3 Zoom Traces" );
3031                break;
3032        case k_entry_parameters:
3033                HELPTEXT( "param-box" );
3034                mg_print_lastcmd( xmv_w[k_widget_draw], "Parameter Box" );
3035                if  (XtIsManaged(xmv_w[k_widget_param_box]))  {
3036                        XtUnmanageChild( xmv_w[k_widget_param_box] );
3037                } else {
3038                        XtManageChild( xmv_w[k_widget_param_box] );
3039                } /*endif*/
3040                break;
3041        case k_entry_dump_params:
3042                HELPTEXT( "dump-params" );
3043                mg_print_lastcmd( xmv_w[k_widget_draw], "Show Current Params" );
3044                cu_get_param_values( xmv_w, xmv_cpar );
3045                cl3_dump_parameters( &xmv_par, "sh_temp_par.txt", FALSE, FALSE,
3046                        TRUE, &locstat);
3047                break;
3048        case k_entry_final_params:
3049                HELPTEXT( "final-params" );
3050                mg_print_lastcmd( xmv_w[k_widget_draw], "Show Final Params" );
3051                cu_get_param_values( xmv_w, xmv_cpar );
3052                cl3_dump_parameters( &xmv_par, "--automatic--", FALSE, FALSE,
3053                        TRUE, &locstat );
3054                /* cl3_save_parameters( CUC_SAVEMODE_EVENT, xmv_cpar, &locstat ); */
3055                cl3_save_parameters( xmv_par.evid, xmv_cpar, &locstat );
3056                /* xmv_par.state = CUC_PARSTATE_FINAL; */
3057                xm_set_processing_state( CUC_PARSTATE_FINAL );
3058                cl3_call_extproc( CL3C_PLUGIN_ENDPROC, xmv_w, &xmv_dspctrl, &xmv_par,
3059                        &xmv_phase, &locstat );
3060                break;
3061        case k_entry_cancel_params:
3062                HELPTEXT( "cancel-params" );
3063                mg_print_lastcmd( xmv_w[k_widget_draw], "Cancel Params" );
3064                /* xmv_par.state = CUC_PARSTATE_CANCELLED; */
3065                xm_set_processing_state( CUC_PARSTATE_FINAL );
3066                break;
3067        case k_entry_short_info:
3068                mg_print_lastcmd( xmv_w[k_widget_draw], "Short Info" );
3069                cu_print_param_values( xmv_cpar );
3070                break;
3071        case k_entry_trc_delete:
3072                HELPTEXT( "trc-delete" );
3073                /* mx_trclist_command( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3074                        &xmv_dspctrl, "del %s", &locstat ); */
3075                cl4_delete_traces();
3076                cl_set_simfilter_active( xmv_w, TRUE );
3077                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "rd" );
3078                mg_print_lastcmd( xmv_w[k_widget_draw], "Delete Traces" );
3079                /* set xmv_phasetrc to NULL in case this trace has been deleted */
3080                xmv_phasetrc = NULL;
3081                break;
3082        case k_entry_trc_del_badqual:
3083                HELPTEXT( "trc-dec-badqual" );
3084                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "del _qual(y)" );
3085                mg_print_lastcmd( xmv_w[k_widget_draw], "Delete Bad Qual" );
3086                xmv_phasetrc = NULL;
3087                break;
3088        case k_entry_trc_keep_r:
3089                HELPTEXT( "trc-keep-R" );
3090                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "del _comp(z)" );
3091                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "del _comp(t)" );
3092                mg_print_lastcmd( xmv_w[k_widget_draw], "Keep R" );
3093                /* set xmv_phasetrc to NULL in case this trace has been deleted */
3094                xmv_phasetrc = NULL;
3095                break;
3096        case k_entry_trc_keep_t:
3097                HELPTEXT( "trc-keep-T" );
3098                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "del _comp(z)" );
3099                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "del _comp(r)" );
3100                mg_print_lastcmd( xmv_w[k_widget_draw], "Keep T" );
3101                /* set xmv_phasetrc to NULL in case this trace has been deleted */
3102                xmv_phasetrc = NULL;
3103                break;
3104        case k_entry_trc_demean:
3105                HELPTEXT( "trc-demean" );
3106                mx_trclist_command( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3107                        &xmv_dspctrl, "DEMEAN %s", &locstat );
3108                cl_set_simfilter_active( xmv_w, TRUE );
3109                mg_print_lastcmd( xmv_w[k_widget_draw], "Demean Traces" );
3110                break;
3111        case k_entry_trc_despike:
3112                HELPTEXT( "trc-despike" );
3113                mx_trclist_command( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3114                        &xmv_dspctrl, "despike %s 50.0", &locstat );
3115                cl_set_simfilter_active( xmv_w, TRUE );
3116                mg_print_lastcmd( xmv_w[k_widget_draw], "Despike Traces" );
3117                break;
3118        case k_entry_trc_trend:
3119                HELPTEXT( "trc-trend" );
3120                mx_trclist_command( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3121                        &xmv_dspctrl, "trend %s", &locstat );
3122                cl_set_simfilter_active( xmv_w, TRUE );
3123                mg_print_lastcmd( xmv_w[k_widget_draw], "Remove Trend" );
3124                break;
3125        case k_entry_trc_refml:
3126                HELPTEXT( "trc-refml" );
3127                mx_trclist_refml( &locstat );
3128                mg_clear_selections( xmv_w[k_widget_draw] );
3129                cl_set_simfilter_active( xmv_w, TRUE );
3130                mg_print_lastcmd( xmv_w[k_widget_draw], "Ref ml" );
3131                break;
3132        case k_entry_trc_hide:
3133                HELPTEXT( "trc-hide" );
3134                mx_trclist_command( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3135                        &xmv_dspctrl, "SHM_CMD_HIDE %s", &locstat );
3136                cl_set_simfilter_active( xmv_w, TRUE );
3137                mg_print_lastcmd( xmv_w[k_widget_draw], "Hide Traces" );
3138                break;
3139        case k_entry_trc_invhide:
3140                HELPTEXT( "trc-invhide" );
3141                mx_trclist_command( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3142                        &xmv_dspctrl, "SHM_CMD_HIDE %s inverted", &locstat );
3143                cl_set_simfilter_active( xmv_w, TRUE );
3144                mg_print_lastcmd( xmv_w[k_widget_draw], "InvHide Traces" );
3145                break;
3146        case k_entry_trc_sort_d:
3147                HELPTEXT( "sort-d" );
3148                if  (*xmv_sortstr == '\0')  {
3149                        strcpy( xmv_sortstr, "DISTANCE" );
3150                        strcpy( xmv_sortinfo, "sort:d" );
3151                } else {
3152                        *xmv_sortstr = '\0';
3153                        *xmv_sortinfo = '\0';
3154                        break;
3155                } /*endif*/
3156                cu_get_param_values( xmv_w, xmv_cpar );
3157                cl4_sort_traces( xmv_w[k_widget_draw], &xmv_dspctrl, xmv_sortstr,
3158                        xmv_cpar, &locstat );
3159                mg_print_sortinfo( xmv_w[k_widget_draw], xmv_sortinfo );
3160                mg_print_lastcmd( xmv_w[k_widget_draw], "Sort Dist" );
3161                break;
3162        case k_entry_trc_sort_a:
3163                HELPTEXT( "sort-a" );
3164                if  (*xmv_sortstr == '\0')  {
3165                        strcpy( xmv_sortstr, "AZIMUTH" );
3166                        strcpy( xmv_sortinfo, "sort:a" );
3167                } else {
3168                        *xmv_sortstr = '\0';
3169                        *xmv_sortinfo = '\0';
3170                        break;
3171                } /*endif*/
3172                cu_get_param_values( xmv_w, xmv_cpar );
3173                cl4_sort_traces( xmv_w[k_widget_draw], &xmv_dspctrl, xmv_sortstr,
3174                        xmv_cpar, &locstat );
3175                mg_print_sortinfo( xmv_w[k_widget_draw], xmv_sortinfo );
3176                mg_print_lastcmd( xmv_w[k_widget_draw], "Sort Azim" );
3177                break;
3178        case k_entry_filter:
3179                HELPTEXT( "filter" );
3180                mg_print_lastcmd( xmv_w[k_widget_draw], "Select Filter" );
3181                if  (XtIsManaged(xmv_w[k_widget_filter_box]))  {
3182                        XtUnmanageChild( xmv_w[k_widget_filter_box] );
3183                } else {
3184                        XtManageChild( xmv_w[k_widget_filter_box] );
3185                } /*endif*/
3186                break;
3187        case k_entry_rotate:
3188                HELPTEXT( "rotate" );
3189                mg_print_lastcmd( xmv_w[k_widget_draw], "Rotate" );
3190                cl2_display_busy( xmv_w, TRUE );
3191                cu_get_param_values( xmv_w, xmv_cpar );
3192                mx_rotation( xmv_w[k_widget_draw], &xmv_dspctrl, xmv_cpar->b_azimuth,
3193                        xmv_cpar->source_lat, xmv_cpar->source_lon, &locstat );
3194                cl2_display_busy( xmv_w, FALSE );
3195                break;
3196        case k_entry_amplper_p:
3197                HELPTEXT( "amplper-p" );
3198                xmv_select.waiting = 2;
3199                xmv_select.processed = 0;
3200                xmv_select.initiator = CUC_SELTYPE_AMPLPER_P;
3201                strcpy( xmv_select.select[0].name, "w-start" );
3202                strcpy( xmv_select.select[1].name, "w-end" );
3203                strcpy( xmv_select.infotext, CUC_SELTEXT_AMPLPER_P );
3204                mg_print_status( xmv_w[k_widget_draw], CUC_SELTEXT_AMPLPER_P, TRUE);
3205                mg_print_lastcmd( xmv_w[k_widget_draw], "A&P peak-peak" );
3206                mg_set_cursor( MGC_XCRSR_RIGHT );
3207                reset_xcursor = FALSE;
3208                break;
3209        case k_entry_amplper_z:
3210                HELPTEXT( "amplper-z" );
3211                xmv_select.waiting = 2;
3212                xmv_select.processed = 0;
3213                xmv_select.initiator = CUC_SELTYPE_AMPLPER_Z;
3214                strcpy( xmv_select.select[0].name, "w-start" );
3215                strcpy( xmv_select.select[1].name, "w-end" );
3216                strcpy( xmv_select.infotext, CUC_SELTEXT_AMPLPER_Z );
3217                mg_print_status( xmv_w[k_widget_draw], CUC_SELTEXT_AMPLPER_Z, TRUE);
3218                mg_print_lastcmd( xmv_w[k_widget_draw], "A&P zero-peak" );
3219                mg_set_cursor( MGC_XCRSR_RIGHT );
3220                reset_xcursor = FALSE;
3221                break;
3222        case k_entry_ampl_man:
3223                HELPTEXT( "ampl-man" );
3224                xmv_select.waiting = 2;
3225                xmv_select.processed = 0;
3226                xmv_select.initiator = CUC_SELTYPE_AMPL_MAN;
3227                strcpy( xmv_select.select[0].name, "w-start" );
3228                strcpy( xmv_select.select[1].name, "w-end" );
3229                strcpy( xmv_select.infotext, CUC_SELTEXT_AMPL_MAN );
3230                mg_print_status( xmv_w[k_widget_draw], CUC_SELTEXT_AMPL_MAN, TRUE);
3231                mg_print_lastcmd( xmv_w[k_widget_draw], "Ampl. manually" );
3232                mg_set_cursor( MGC_XCRSR_RIGHT );
3233                reset_xcursor = FALSE;
3234                break;
3235        case k_entry_per_man:
3236                HELPTEXT( "period-man" );
3237                xmv_select.waiting = 2;
3238                xmv_select.processed = 0;
3239                xmv_select.initiator = CUC_SELTYPE_PER_MAN;
3240                strcpy( xmv_select.select[0].name, "w-start" );
3241                strcpy( xmv_select.select[1].name, "w-end" );
3242                strcpy( xmv_select.infotext, CUC_SELTEXT_PER_MAN );
3243                mg_print_status( xmv_w[k_widget_draw], CUC_SELTEXT_PER_MAN, TRUE);
3244                mg_print_lastcmd( xmv_w[k_widget_draw], "Period manually" );
3245                mg_set_cursor( MGC_XCRSR_RIGHT );
3246                reset_xcursor = FALSE;
3247                break;
3248        case k_entry_ampl_surface:
3249                HELPTEXT( "ampl-surface" );
3250                xmv_select.waiting = 2;
3251                xmv_select.processed = 0;
3252                xmv_select.initiator = CUC_SELTYPE_AMPL_SURFACE;
3253                strcpy( xmv_select.select[0].name, "w-start" );
3254                strcpy( xmv_select.select[1].name, "w-end" );
3255                strcpy( xmv_select.infotext, CUC_SELTEXT_AMPL_SURFACE );
3256                mg_print_status( xmv_w[k_widget_draw], CUC_SELTEXT_AMPL_SURFACE, TRUE);
3257                mg_print_lastcmd( xmv_w[k_widget_draw], "Surface Ampl. auto" );
3258                mg_set_cursor( MGC_XCRSR_RIGHT );
3259                reset_xcursor = FALSE;
3260                break;
3261        case k_entry_abort_selection:
3262                HELPTEXT( "abort-selection" );
3263                xmv_select.waiting = 0;
3264                xmv_select.processed = 0;
3265                xmv_select.initiator = CUC_SELTYPE_NONE;
3266                mg_print_status( xmv_w[k_widget_draw], xmv_select.infotext, FALSE );
3267                mg_print_lastcmd( xmv_w[k_widget_draw], "Abort Selection" );
3268                break;
3269        case k_entry_calib_accept:
3270                HELPTEXT( "calib-accept" );
3271                mg_print_lastcmd( xmv_w[k_widget_draw], "Accept Calibration" );
3272                cal_accept_values( xmv_w[k_widget_calibwdw], xmv_cpar );
3273                break;
3274        case k_entry_calib_quit:
3275                HELPTEXT( "calib-quit" );
3276                mg_print_lastcmd( xmv_w[k_widget_draw], "Quit Calibration" );
3277                cal_accept_values( xmv_w[k_widget_calibwdw], NULL );
3278                break;
3279        case k_entry_flags_setcalib:
3280                mg_print_lastcmd( xmv_w[k_widget_draw], "Set Calib Flag" );
3281                xmv_cpar->flags |= CUC_F_EVENT_CALIB;
3282                break;
3283        case k_entry_flags_unsetcalib:
3284                mg_print_lastcmd( xmv_w[k_widget_draw], "Clear Calib Flag" );
3285                xmv_cpar->flags &= ~CUC_F_EVENT_CALIB;
3286                break;
3287        case k_entry_magn_mb:
3288                HELPTEXT( "magn-mb" );
3289                mg_print_lastcmd( xmv_w[k_widget_draw], "Magnitude mb" );
3290                cu_get_param_values( xmv_w, xmv_cpar );
3291                cl2_magnitude( SIC_MAGN_MB, xmv_cpar, &locstat );
3292                break;
3293        case k_entry_magn_ms_plain:
3294                HELPTEXT( "magn-ms-plain" );
3295                mg_print_lastcmd( xmv_w[k_widget_draw], "Magnitude MS (plain)" );
3296                cu_get_param_values( xmv_w, xmv_cpar );
3297                cl2_magnitude( SIC_MAGN_MS_PLAIN, xmv_cpar, &locstat );
3298                break;
3299        case k_entry_magn_ms_c_na:
3300                HELPTEXT( "magn-ms-c-na" );
3301                mg_print_lastcmd( xmv_w[k_widget_draw], "Magnitude MS c-na" );
3302                cu_get_param_values( xmv_w, xmv_cpar );
3303                cl2_magnitude( SIC_MAGN_MS_C_NA, xmv_cpar, &locstat );
3304                break;
3305        case k_entry_magn_ms_c_eu:
3306                HELPTEXT( "magn-ms-c-eu" );
3307                mg_print_lastcmd( xmv_w[k_widget_draw], "Magnitude MS c-eu" );
3308                cu_get_param_values( xmv_w, xmv_cpar );
3309                cl2_magnitude( SIC_MAGN_MS_C_EU, xmv_cpar, &locstat );
3310                break;
3311        case k_entry_magn_ms_c_o:
3312                HELPTEXT( "magn-ms-c-o" );
3313                mg_print_lastcmd( xmv_w[k_widget_draw], "Magnitude MS c-o" );
3314                cu_get_param_values( xmv_w, xmv_cpar );
3315                cl2_magnitude( SIC_MAGN_MS_C_O, xmv_cpar, &locstat );
3316                break;
3317        case k_entry_magn_ms_o:
3318                HELPTEXT( "magn-ms-o" );
3319                mg_print_lastcmd( xmv_w[k_widget_draw], "Magnitude MS o" );
3320                cu_get_param_values( xmv_w, xmv_cpar );
3321                cl2_magnitude( SIC_MAGN_MS_O, xmv_cpar, &locstat );
3322                break;
3323        case k_entry_magn_ml:
3324                HELPTEXT( "magn-ml" );
3325                mg_print_lastcmd( xmv_w[k_widget_draw], "Magnitude ml" );
3326                if  (strcmp(xmv_cmd_filter.name,"S+WOODAND") != 0)  {
3327                        /* locstat = CUE_NO_WOODAND; */
3328                        /* break; */
3329                        /* make it instead of complaining */
3330                        int     item;      /* button to emulate */
3331                        XmToggleButtonCallbackStruct data;
3332                        item = k_button_filter_woodand;
3333                        data.set = TRUE;
3334                        xm_call_activate( (Widget)0, &item, &data );
3335                        item = k_button_filter_ok;
3336                        xm_call_activate( (Widget)0, &item, NULL );
3337                } /*endif*/
3338                xmv_select.waiting = 2;
3339                xmv_select.processed = 0;
3340                xmv_select.initiator = CUC_SELTYPE_MAGN_ML;
3341                strcpy( xmv_select.select[0].name, "w-start-ml" );
3342                strcpy( xmv_select.select[1].name, "w-end-ml" );
3343                strcpy( xmv_select.infotext, CUC_SELTEXT_MAGN_ML );
3344                mg_print_status( xmv_w[k_widget_draw], CUC_SELTEXT_MAGN_ML, TRUE);
3345                cu_get_param_values( xmv_w, xmv_cpar );
3346                mg_set_cursor( MGC_XCRSR_RIGHT );
3347                reset_xcursor = FALSE;
3348                break;
3349        case k_entry_magn_del_ml:
3350                mg_print_lastcmd( xmv_w[k_widget_draw], "delete ml" );
3351                cl4_del_magnitude( xmv_w[k_widget_draw], cPiMagnMl );
3352                cl_set_simfilter_active( xmv_w, TRUE );
3353                break;
3354        case k_entry_gencomment:
3355                HELPTEXT( "comment" );
3356                mg_print_lastcmd( xmv_w[k_widget_draw], "Enter Comment" );
3357                cl2_modify_comment( &(xmv_cpar->comment), &locstat );
3358                break;
3359        case k_entry_info_source:
3360                HELPTEXT( "info-source" );
3361                mg_print_lastcmd( xmv_w[k_widget_draw], "Info Source" );
3362                if  (XtIsManaged(xmv_w[k_widget_infsource_box]))  {
3363                        XtUnmanageChild( xmv_w[k_widget_infsource_box] );
3364                } else {
3365                        XtManageChild( xmv_w[k_widget_infsource_box] );
3366                } /*endif*/
3367                break;
3368        case k_entry_params_save:
3369                HELPTEXT( "save-params" );
3370                mg_print_lastcmd( xmv_w[k_widget_draw], "Save Status" );
3371                cu_get_param_values( xmv_w, xmv_cpar );
3372                cl3_save_parameters( CUC_SAVEMODE_A, xmv_cpar, &locstat );
3373                break;
3374        case k_entry_params_restore:
3375                HELPTEXT( "params-restore" );
3376                cl3_restore_parameters( "a", xmv_cpar, &locstat );
3377                xmv_cpar->soft_change = TRUE;
3378                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3379                xmv_cpar->soft_change = FALSE;
3380                mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &locstat );
3381                /* mg_plot_phases( xmv_w[k_widget_draw], &locstat ); */
3382                mg_print_lastcmd( xmv_w[k_widget_draw], "Restore Status" );
3383                break;
3384        case k_entry_params_recover:
3385                HELPTEXT( "params-recover" );
3386                cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_SAVE, &locstat );
3387                mg_print_lastcmd( xmv_w[k_widget_draw], "Recover Status" );
3388                break;
3389        case k_entry_params_evt:
3390                HELPTEXT( "params-evt" );
3391                cl_file_select_init( xmv_w[k_widget_filesel], CLC_PATH_EVT, &locstat );
3392                mg_print_lastcmd( xmv_w[k_widget_draw], "Recover Evt-File" );
3393                break;
3394        case k_entry_locsat:
3395                HELPTEXT( "locsat" );
3396                mg_print_lastcmd( xmv_w[k_widget_draw], "LocSAT" );
3397                if  (XtIsManaged(xmv_w[k_widget_locsat_box]))  {
3398                        XtUnmanageChild( xmv_w[k_widget_locsat_box] );
3399                } else {
3400                        XtManageChild( xmv_w[k_widget_locsat_box] );
3401                } /*endif*/
3402                break;
3403        case k_entry_opick_setup:
3404                HELPTEXT( "opick_setup" );
3405                mg_print_lastcmd( xmv_w[k_widget_draw], "OnsetPick Setup" );
3406                if  (XtIsManaged(xmv_w[k_widget_opick_box]))  {
3407                        XtUnmanageChild( xmv_w[k_widget_opick_box] );
3408                } else {
3409                        XtManageChild( xmv_w[k_widget_opick_box] );
3410                } /*endif*/
3411                break;
3412        case k_entry_ext_location:
3413                { float xslo;   /* dummy value */
3414                HELPTEXT( "ext-location" );
3415                cu_get_param_values( xmv_w, xmv_cpar );
3416                si_ext_location( xmv_cpar->source_lat, xmv_cpar->source_lon,
3417                        xmv_cpar->depth, GpGetString(cGpS_refstation), &(xmv_cpar->distance),
3418                        &(xmv_cpar->b_azimuth), &xslo, &locstat );
3419                xmv_cpar->dist_unit = CUC_DIST_UNIT_DEG;
3420                /* xmv_cpar->b_slowness_err = 0.0; */
3421                xmv_cpar->b_azimuth_err = 0.0;
3422                xmv_cpar->soft_change = TRUE;
3423                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3424                xmv_cpar->soft_change = FALSE;
3425                mg_print_lastcmd( xmv_w[k_widget_draw], "External Loc" );
3426                break;
3427                }
3428        case k_entry_match_location:
3429                { char station[cBcShortStrLth+1];  /* station name */
3430                  char agency[cBcShortStrLth+1];   /* lookup agency name */
3431                  char locphase[cPiMaxPhaseLth+1]; /* local phase name */
3432                  float xslo;                      /* dummy value */
3433                HELPTEXT( "match-location" );
3434                if  (xmv_phasetrc == NULL)  {
3435                        *station = '\0';
3436                        locstat = CUE_TOUCH_PHASE;
3437                        break;
3438                } else {
3439                        locstat = cBcNoError;
3440                        db_gets( xmv_phasetrc, ES_STATION, cBcShortStrLth, station, &locstat );
3441                        if  (locstat != cBcNoError)  {
3442                                locstat = CUE_TOUCH_PHASE;
3443                                break;
3444                        } /*endif*/
3445                } /*endif*/
3446                cl2_display_busy( xmv_w, TRUE );
3447                if  (*station == '\0')  strcpy( station, GpGetString(cGpS_refstation) );
3448                strcpy( locphase, xmv_phase.name );
3449                if  (strcmp(locphase,"L") == 0)  strcpy( locphase, "LR" );
3450                si_lookup_agency( xmv_phase.onset, agency );
3451                si_match_location( agency, locphase, xmv_phase.onset,
3452                        station, xmv_cpar->b_slowness, xmv_cpar->b_azimuth, TRUE,
3453                        &(xmv_cpar->source_lat), &(xmv_cpar->source_lon),
3454                        &(xmv_cpar->depth), xmv_cpar->origin, xmv_cpar->source, &locstat );
3455                if  (locstat == cBcNoError)  {
3456                        /*strcpy( xmv_cpar->source, "neic-a" );*/
3457                        si_ext_location( xmv_cpar->source_lat, xmv_cpar->source_lon,
3458                                xmv_cpar->depth, GpGetString(cGpS_refstation),
3459                                &(xmv_cpar->distance), &(xmv_cpar->b_azimuth), &xslo, &locstat );
3460                        xmv_cpar->dist_unit = CUC_DIST_UNIT_DEG;
3461                        mb_ferindex( xmv_cpar->source_lat, xmv_cpar->source_lon,
3462                                &(xmv_cpar->reg_id), &locstat );
3463                        /*cl4_loc_from_dist( xmv_cpar, &locstat );*/
3464                        xmv_cpar->soft_change = TRUE;
3465                        cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3466                        xmv_cpar->soft_change = FALSE;
3467                } /*endif*/
3468                cl2_display_busy( xmv_w, FALSE );
3469                mg_print_lastcmd( xmv_w[k_widget_draw], "Match Location" );
3470                break;
3471                }
3472        case k_entry_identify_phase:
3473                { char station[cBcShortStrLth+1];  /* station name */
3474                  float xslo;                      /* dummy value */
3475                  char idphase[cBcShortStrLth+1];  /* phase found */
3476                  int cnt;                         /* phase rename counter */
3477                HELPTEXT( "identify-phase" );
3478                if  (xmv_phasetrc == NULL)  {
3479                        *station = '\0';
3480                        locstat = CUE_TOUCH_PHASE;
3481                        break;
3482                } else {
3483                        db_gets( xmv_phasetrc, ES_STATION, cBcShortStrLth, station, NULL );
3484                } /*endif*/
3485                cl2_display_busy( xmv_w, TRUE );
3486                if  (*station == '\0')  strcpy( station, GpGetString(cGpS_refstation) );
3487                si_identify_phase( xmv_phase.onset,
3488                        station, xmv_cpar->b_slowness, xmv_cpar->b_azimuth, idphase,
3489                        &(xmv_cpar->source_lat), &(xmv_cpar->source_lon),
3490                        &(xmv_cpar->depth), xmv_cpar->origin, xmv_cpar->source, &locstat );
3491                if  (locstat == cBcNoError)  {
3492                        xmv_cpar->depth_type = CUC_DEPTH_RELIABLE;
3493                        if  (strcmp(xmv_phase.name,idphase) != 0)  {
3494                                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
3495                                        &locstat );
3496                                PiRenamePhase( xmv_phase.name, idphase, &cnt );
3497                                mg_plot_phases( xmv_w[k_widget_draw], xmv_dspctrl.show_phase_acc,
3498                                        &locstat );
3499                                strcpy( xmv_phase.name, idphase );
3500                        } /*endif*/
3501                        si_ext_location( xmv_cpar->source_lat, xmv_cpar->source_lon,
3502                                xmv_cpar->depth, GpGetString(cGpS_refstation),
3503                                &(xmv_cpar->distance), &(xmv_cpar->b_azimuth), &xslo, &locstat );
3504                        xmv_cpar->dist_unit = CUC_DIST_UNIT_DEG;
3505                        /* cl4_loc_from_dist( xmv_cpar, &locstat ); */
3506                        mb_ferindex( xmv_cpar->source_lat, xmv_cpar->source_lon,
3507                                &(xmv_cpar->reg_id), &locstat );
3508                        mb_fername( xmv_cpar->reg_id, BC_LINELTH, xmv_cpar->regname, &locstat );
3509                        xmv_cpar->soft_change = TRUE;
3510                        cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3511                        xmv_cpar->soft_change = FALSE;
3512                } /*endif*/
3513                cl2_display_busy( xmv_w, FALSE );
3514                mg_print_lastcmd( xmv_w[k_widget_draw], "Identify Phase" );
3515                break;
3516                }
3517        case k_entry_source_region:
3518                HELPTEXT( "source-region" );
3519                cu_get_param_values( xmv_w, xmv_cpar );
3520#               ifdef XXX
3521                if  (xmv_cpar->dist_unit != CUC_DIST_UNIT_DEG)  {
3522                        if  (GpGetInt(cGpI_debug_level) > 2)
3523                                printf( "SHM-dbg3: get_location: distance unit is km\n" );
3524                        break;
3525                } /*endif*/
3526                si_get_location( xmv_cpar->distance, xmv_cpar->b_azimuth,
3527                        GpGetString(cGpS_refstation), &(xmv_cpar->source_lat),
3528                        &(xmv_cpar->source_lon), &(xmv_cpar->reg_id),
3529                        xmv_cpar->regname, &locstat );
3530                xmv_cpar->table_number = CUC_REGTABLE_FLINNENG;
3531#               endif
3532                cl4_loc_from_dist( xmv_cpar, &locstat );
3533                xmv_cpar->soft_change = TRUE;
3534                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3535                xmv_cpar->soft_change = FALSE;
3536                mg_print_lastcmd( xmv_w[k_widget_draw], "Src Region" );
3537                break;
3538        case k_entry_phase_difference:
3539                HELPTEXT( "phase-diff" );
3540                cl4_phase_difference( GpGetString(cGpS_diff_phase_list), xmv_cpar->depth,
3541                        &(xmv_cpar->distance), &locstat );
3542                xmv_cpar->dist_unit = CUC_DIST_UNIT_DEG;
3543                xmv_cpar->soft_change = TRUE;
3544                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3545                xmv_cpar->soft_change = FALSE;
3546                mg_print_lastcmd( xmv_w[k_widget_draw], "Phase Diff" );
3547                break;
3548        case k_entry_deltheo:
3549                HELPTEXT( "del-theo" );
3550                /* delete all theoretical phases from all traces */
3551                cu_delete_all_phases( xmv_w[k_widget_draw],
3552                        xmv_w[k_widget_single_draw], "--theo--", TRUE );
3553                break;
3554        case k_entry_fk:
3555                HELPTEXT( "fk" );
3556                mg_print_lastcmd( xmv_w[k_widget_draw], "FK" );
3557                if  (XtIsManaged(xmv_w[k_widget_fk_box]))  {
3558                        XtUnmanageChild( xmv_w[k_widget_fk_box] );
3559                } else {
3560                        cl3_preset_fk_values( xmv_w, xmv_cmd_filter.name );
3561                        XtManageChild( xmv_w[k_widget_fk_box] );
3562                } /*endif*/
3563                break;
3564        case k_entry_vespa:
3565                HELPTEXT( "vespa" );
3566                mg_print_lastcmd( xmv_w[k_widget_draw], "Vespa" );
3567                XtSetSensitive( xmv_w[k_widget_vespa_export_button], FALSE );
3568                if  (XtIsManaged(xmv_w[k_widget_vespa_input_box]))  {
3569                        XtUnmanageChild( xmv_w[k_widget_vespa_input_box] );
3570                } else {
3571                        XtManageChild( xmv_w[k_widget_vespa_input_box] );
3572                } /*endif*/
3573                break;
3574        case k_entry_setup:
3575                HELPTEXT( "setup-box" );
3576                mg_print_lastcmd( xmv_w[k_widget_draw], "Setup Box" );
3577                if  (XtIsManaged(xmv_w[k_widget_setup_box]))  {
3578                        XtUnmanageChild( xmv_w[k_widget_setup_box] );
3579                } else {
3580                        XtManageChild( xmv_w[k_widget_setup_box] );
3581                } /*endif*/
3582                /* it's not a very good idea to put this here: */
3583                mg_init_tracedisplay( xmv_w[k_widget_draw], -1, -1,
3584                        GpGetInt(cGpI_top_margin), -1 );
3585                break;
3586        case k_entry_configure:
3587                HELPTEXT( "configure" );
3588                mg_print_lastcmd( xmv_w[k_widget_draw], "Configure" );
3589                xm_call_configure();
3590                break;
3591        case k_entry_refstation:
3592                HELPTEXT( "refstation" );
3593                mg_print_lastcmd( xmv_w[k_widget_draw], "Ref. Station" );
3594                if  (XtIsManaged(xmv_w[k_widget_refstat_box]))  {
3595                        XtUnmanageChild( xmv_w[k_widget_refstat_box] );
3596                } else {
3597                        XtManageChild( xmv_w[k_widget_refstat_box] );
3598                } /*endif*/
3599                break;
3600        case k_entry_mparam_sn_auto:
3601                HELPTEXT( "signoise-auto" );
3602                mg_print_lastcmd( xmv_w[k_widget_draw], "S/N auto" );
3603                cl4_signoise_set_windows( xmv_w,
3604                        cu_get_string(xmv_w[k_widget_phase_name_text]),
3605                        xmv_cmd_filter.name, &locstat );
3606                if  (SySevere(&locstat))  break;
3607                cl4_signoise_values( cu_get_string(xmv_w[k_widget_phase_name_text]),
3608                        &locstat );
3609                break;
3610        case k_entry_mparam_sn_repeat:
3611                HELPTEXT( "signoise-repeat" );
3612                mg_print_lastcmd( xmv_w[k_widget_draw], "S/N repeat" );
3613                cl4_signoise_values( cu_get_string(xmv_w[k_widget_phase_name_text]),
3614                        &locstat );
3615                break;
3616        case k_entry_mparam_sn_delete:
3617                HELPTEXT( "signoise-delete" );
3618                mg_print_lastcmd( xmv_w[k_widget_draw], "S/N delete" );
3619                cl4_delete_signoise_values(
3620                        cu_get_string(xmv_w[k_widget_phase_name_text]), &locstat );
3621                cu_delete_all_phases( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3622                        "--pseudo--", TRUE );
3623                break;
3624        case k_entry_mparam_sn_clear:
3625                HELPTEXT( "delete-pseudos" );
3626                mg_print_lastcmd( xmv_w[k_widget_draw], "del pseudos" );
3627                cu_delete_all_phases( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3628                        "--pseudo--", TRUE );
3629                break;
3630        case k_entry_spectrum:
3631                HELPTEXT( "spectrum" );
3632                mg_print_lastcmd( xmv_w[k_widget_draw], "Spectrum" );
3633                spc_initialize( xmv_w[k_widget_spectrum_box],
3634                        xmv_w[k_widget_spctwdw], &locstat );
3635                spc_insert_spectrum( xmv_w[k_widget_spctwdw], &locstat );
3636                break;
3637        case k_entry_spectrogram:
3638                HELPTEXT( "spectrogram" );
3639                mg_print_lastcmd( xmv_w[k_widget_draw], "Spectrogram" );
3640                spc_spectrogram( &locstat );
3641                break;
3642        case k_entry_spct_insert:
3643                HELPTEXT( "spectrum-insert" );
3644                mg_print_lastcmd( xmv_w[k_widget_draw], "Insert Spectrum" );
3645                spc_insert_spectrum( xmv_w[k_widget_spctwdw], &locstat );
3646                break;
3647        case k_entry_spct_fitline:
3648                HELPTEXT( "spectrum-fitline" );
3649                mg_print_lastcmd( xmv_w[k_widget_draw], "Fit Line" );
3650                spc_start_fitline();
3651                break;
3652        case k_entry_spct_quit:
3653                HELPTEXT( "spectrum-quit" );
3654                mg_print_lastcmd( xmv_w[k_widget_draw], "Quit Spectrum" );
3655                spc_close_window();
3656                break;
3657        case k_entry_spct_autoscale:
3658                HELPTEXT( "spectrum-autoscale" );
3659                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Lo-Ampl Up" );
3660                spc_change_display( cSpcAutoscale, &locstat );
3661                break;
3662        case k_entry_spct_amplo_up:
3663                HELPTEXT( "spectrum-amplo_up" );
3664                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Lo-Ampl Up" );
3665                spc_change_display( cSpcAmpLoUp, &locstat );
3666                break;
3667        case k_entry_spct_amplo_down:
3668                HELPTEXT( "spectrum-amplo_down" );
3669                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Lo-Ampl Down" );
3670                spc_change_display( cSpcAmpLoDown, &locstat );
3671                break;
3672        case k_entry_spct_amphi_up:
3673                HELPTEXT( "spectrum-amphi_up" );
3674                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Hi-Ampl Up" );
3675                spc_change_display( cSpcAmpHiUp, &locstat );
3676                break;
3677        case k_entry_spct_amphi_down:
3678                HELPTEXT( "spectrum-amphi_down" );
3679                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Hi-Ampl Down" );
3680                spc_change_display( cSpcAmpHiDown, &locstat );
3681                break;
3682        case k_entry_spct_frqlo_up:
3683                HELPTEXT( "spectrum-frqlo_up" );
3684                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Lo-Freq Up" );
3685                spc_change_display( cSpcFrqLoUp, &locstat );
3686                break;
3687        case k_entry_spct_frqlo_down:
3688                HELPTEXT( "spectrum-frqlo_down" );
3689                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Lo-Freq Down" );
3690                spc_change_display( cSpcFrqLoDown, &locstat );
3691                break;
3692        case k_entry_spct_frqhi_up:
3693                HELPTEXT( "spectrum-frqhi_up" );
3694                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Hi-Freq Up" );
3695                spc_change_display( cSpcFrqHiUp, &locstat );
3696                break;
3697        case k_entry_spct_frqhi_down:
3698                HELPTEXT( "spectrum-frqhi_down" );
3699                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Hi-Freq Down" );
3700                spc_change_display( cSpcFrqHiDown, &locstat );
3701                break;
3702        case k_entry_spct_mode_powspc:
3703                HELPTEXT( "spectrum-mode_powspc" );
3704                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Mode PowSpec" );
3705                spc_recompute_spectra( cSpcModePowSpc, &locstat );
3706                break;
3707        case k_entry_spct_mode_fft:
3708                HELPTEXT( "spectrum-mode_fft" );
3709                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Mode FFT" );
3710                spc_recompute_spectra( cSpcModeFft, &locstat );
3711                break;
3712        case k_entry_spct_mode_fft2:
3713                HELPTEXT( "spectrum-mode_fft2" );
3714                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Mode FFT^2" );
3715                spc_recompute_spectra( cSpcModeFft2, &locstat );
3716                break;
3717        case k_entry_spct_clear:
3718                HELPTEXT( "spectrum-clear" );
3719                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Clear" );
3720                break;
3721        case k_entry_spct_setup:
3722                HELPTEXT( "spectrum-setup" );
3723                mg_print_lastcmd( xmv_w[k_widget_draw], "Spc Setup" );
3724                spc_set_dialog_values( xmv_w );
3725                if  (XtIsManaged(xmv_w[k_widget_spcsetup_box]))  {
3726                        XtUnmanageChild( xmv_w[k_widget_spcsetup_box] );
3727                } else {
3728                        XtManageChild( xmv_w[k_widget_spcsetup_box] );
3729                } /*endif*/
3730                break;
3731        case k_entry_pmotion:
3732                HELPTEXT( "pmotion" );
3733                mg_print_lastcmd( xmv_w[k_widget_draw], "Part.Motion" );
3734                pmm_initialize( xmv_w[k_widget_pmotion_box],
3735                        xmv_w[k_widget_pmwdw], &locstat );
3736                xmv_pm_on = TRUE;
3737                break;
3738        case k_entry_pm_quit:
3739                HELPTEXT( "pm-quit" );
3740                mg_print_lastcmd( xmv_w[k_widget_draw], "Quit Part.Motion" );
3741                pmm_close_window();
3742                xmv_pm_on = FALSE;
3743                break;
3744        case k_entry_pm_lincol:
3745                HELPTEXT( "pm-line-col" );
3746                mg_print_lastcmd( xmv_w[k_widget_draw], "PM Line Col." );
3747                pmm_set_mode( cPmmModeLineColored );
3748                break;
3749        case k_entry_pm_linmono:
3750                HELPTEXT( "pm-line-mono" );
3751                mg_print_lastcmd( xmv_w[k_widget_draw], "PM Line Mono." );
3752                pmm_set_mode( cPmmModeLineMono );
3753                break;
3754        case k_entry_pm_plot1:
3755                HELPTEXT( "pm-plot1" );
3756                mg_print_lastcmd( xmv_w[k_widget_draw], "PM Plot NE" );
3757                pmm_set_mode( cPmmModePlot1 );
3758                break;
3759        case k_entry_pm_plot3:
3760                HELPTEXT( "pm-plot3" );
3761                mg_print_lastcmd( xmv_w[k_widget_draw], "PM Plot 3" );
3762                pmm_set_mode( cPmmModePlot3 );
3763                break;
3764        case k_entry_pm_zoom_on:
3765                HELPTEXT( "pm-zoom-on" );
3766                mg_print_lastcmd( xmv_w[k_widget_draw], "PM Zoom On" );
3767                pmm_set_mode( cPmmModeZoomOn );
3768                break;
3769        case k_entry_pm_zoom_off:
3770                HELPTEXT( "pm-zoom-off" );
3771                mg_print_lastcmd( xmv_w[k_widget_draw], "PM Zoom Off" );
3772                pmm_set_mode( cPmmModeZoomOff );
3773                break;
3774        case k_entry_polarfil:
3775                HELPTEXT( "polarfil" );
3776                mg_print_lastcmd( xmv_w[k_widget_draw], "Polar.Filter" );
3777                pol_initialize( xmv_w[k_widget_polarfil_box],
3778                        xmv_w[k_widget_polwdw], &locstat );
3779                xmv_polar_on = TRUE;
3780                break;
3781        case k_entry_pol_quit:
3782                HELPTEXT( "pol-quit" );
3783                mg_print_lastcmd( xmv_w[k_widget_draw], "Quit Polar.Filter" );
3784                pol_close_window();
3785                xmv_polar_on = FALSE;
3786                break;
3787        case k_entry_pol_inc_cohlth:
3788                pol_incpar( POL_ID_COHLTH, 1 );
3789                break;
3790        case k_entry_pol_dec_cohlth:
3791                pol_incpar( POL_ID_COHLTH, -1 );
3792                break;
3793        case k_entry_pol_inc_pow_linfil:
3794                pol_incpar( POL_ID_POW_LINFIL, 1 );
3795                break;
3796        case k_entry_pol_dec_pow_linfil:
3797                pol_incpar( POL_ID_POW_LINFIL, -1 );
3798                break;
3799        case k_entry_calib:
3800                cal_initialize( xmv_w[k_widget_calibration_box],
3801                        xmv_w[k_widget_calibwdw], &locstat );
3802                if  (Severe(&locstat))  break;
3803                cal_display_calib( xmv_w[k_widget_calibwdw], xmv_cpar, &locstat );
3804                break;
3805        case k_entry_planewave:
3806                mg_print_lastcmd( xmv_w[k_widget_draw], "Plane Wave" );
3807                cl2_display_busy( xmv_w, TRUE );
3808                cu_get_param_values( xmv_w, xmv_cpar );
3809                cu_localization(
3810                        cu_get_string(xmv_w[k_widget_phase_name_text]),
3811                        CUF_DOLOC_SLOAZ, xmv_cpar, &locstat );
3812                xmv_cpar->soft_change = TRUE;
3813                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3814                xmv_cpar->soft_change = FALSE;
3815                cu_print_param_values( xmv_cpar );
3816                cl2_display_busy( xmv_w, FALSE );
3817                break;
3818        case k_entry_align:
3819                mx_handle_beam( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3820                        FALSE, &xmv_dspctrl, xmv_cpar,
3821                        cu_get_string(xmv_w[k_widget_phase_name_text]), &locstat );
3822                mg_print_lastcmd( xmv_w[k_widget_draw], "Align" );
3823                break;
3824        case k_entry_beam:
3825                cu_get_param_values( xmv_w, xmv_cpar );
3826                mx_handle_beam( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3827                        TRUE, &xmv_dspctrl, xmv_cpar, "", &locstat );
3828                mg_print_lastcmd( xmv_w[k_widget_draw], "Beam" );
3829                break;
3830        case k_entry_fixbeam:
3831                cl4_fix_beam( xmv_w, &xmv_dspctrl, xmv_cmd_filter.name, &locstat );
3832                mg_print_lastcmd( xmv_w[k_widget_draw], "Fix Beam" );
3833                xmv_cmd_readg.keep = TRUE;
3834                xmv_keeptrc_auto = TRUE;
3835                XmToggleButtonSetState( xmv_w[k_widget_read_grsn_keep], TRUE, FALSE );
3836                break;
3837        case k_entry_autopick1:
3838                cl_auto_beam_pick( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3839                        GpGetString(cGpS_auto_phase), TRUE, &locstat );
3840                mg_print_lastcmd( xmv_w[k_widget_draw], "Min/Max Pick" );
3841                break;
3842        case k_entry_corrpick:
3843                cl_correlation_pick( xmv_w[k_widget_draw], xmv_w[k_widget_single_draw],
3844                        cu_get_string(xmv_w[k_widget_phase_name_text]), &locstat );
3845                mg_print_lastcmd( xmv_w[k_widget_draw], "Correlation Pick" );
3846                break;
3847        case k_entry_onsetpick:
3848                cl4_onset_pick( xmv_w, &xmv_dspctrl,
3849                        cu_get_string(xmv_w[k_widget_phase_name_text]), TRUE, &locstat );
3850                mg_print_lastcmd( xmv_w[k_widget_draw], "Onset Pick" );
3851                break;
3852        case k_entry_residcorr:
3853                cl4_resid_corr( TRUE, xmv_cpar->b_slowness, xmv_cpar->b_azimuth,
3854                        &locstat );
3855                cu_set_exec_flag( CUC_F_EXEC_RESIDCORR, TRUE );
3856                mg_print_lastcmd( xmv_w[k_widget_draw], "Residual Correction" );
3857                break;
3858        case k_entry_residdel:
3859                cl4_resid_corr( FALSE, 0.0, 0.0, &locstat );
3860                cu_set_exec_flag( CUC_F_EXEC_RESIDCORR, FALSE );
3861                mg_print_lastcmd( xmv_w[k_widget_draw], "Residual Delete" );
3862                break;
3863        case k_entry_eproc1:
3864        case k_entry_eproc2:
3865        case k_entry_eproc3:
3866        case k_entry_eproc4:
3867        case k_entry_eproc5:
3868        case k_entry_eproc6:
3869        case k_entry_eproc7:
3870        case k_entry_eproc8:
3871        case k_entry_eproc9:
3872        case k_entry_eproc10:
3873        case k_entry_eproc11:
3874        case k_entry_eproc12:
3875        case k_entry_eproc13:
3876        case k_entry_eproc14:
3877        case k_entry_eproc15:
3878        case k_entry_eproc16:
3879        case k_entry_eproc17:
3880        case k_entry_eproc18:
3881        case k_entry_eproc19:
3882        case k_entry_eproc20:
3883                cl3_call_extproc( (*tag)-k_entry_eproc1+1, xmv_w, &xmv_dspctrl,
3884                        &xmv_par, &xmv_phase, &locstat );
3885                break;
3886        case k_entry_add_plugin:
3887                cl2_display_busy( xmv_w, TRUE );
3888                mg_print_lastcmd( xmv_w[k_widget_draw], "Add Plugin" );
3889                cl3_request_extproc( xmv_w, &locstat );
3890                cl2_display_busy( xmv_w, FALSE );
3891                break;
3892        case k_entry_adrm_request:
3893                HELPTEXT( "adrm_request" );
3894                mg_print_lastcmd( xmv_w[k_widget_draw], "AutoDRM Request" );
3895                if  (XtIsManaged(xmv_w[k_widget_adrm_selection_box]))  {
3896                        XtUnmanageChild( xmv_w[k_widget_adrm_selection_box] );
3897                } else {
3898                        XtManageChild( xmv_w[k_widget_adrm_selection_box] );
3899                } /*endif*/
3900                break;
3901        case k_entry_locate_tele:
3902                mg_print_lastcmd( xmv_w[k_widget_draw], "Localize" );
3903                cl2_display_busy( xmv_w, TRUE );
3904                cu_get_param_values( xmv_w, xmv_cpar );
3905                cu_localization(
3906                        cu_get_string(xmv_w[k_widget_phase_name_text]),
3907                        CUF_DOLOC_DISTANCE|CUF_DOLOC_ORIGIN, xmv_cpar, &locstat );
3908                xmv_cpar->soft_change = TRUE;
3909                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
3910                xmv_cpar->soft_change = FALSE;
3911                cu_print_param_values( xmv_cpar );
3912                cl2_display_busy( xmv_w, FALSE );
3913                break;
3914        case k_entry_key_arrow_up:
3915        case k_entry_key_arrow_down:
3916        case k_entry_key_arrow_left:
3917        case k_entry_key_arrow_right:
3918                xm_move_drag_window( *tag );
3919                break;
3920        default:
3921                printf( "*SHM: illegal menu entry number\n" );
3922        } /*endswitch*/
3923
3924        if  (reset_xcursor)
3925                mg_set_cursor( MGC_XCRSR_NORMAL );
3926        /* XtSetSensitive( xmv_w[k_widget_main], TRUE ); */
3927        if  (Severe(&locstat))
3928                cu_alert( locstat );
3929
3930} /* end of xm_call_menu_select */
3931
3932
3933
3934/*--------------------------------------------------------------------------*/
3935
3936
3937
3938static void xm_call_scale( Widget widget, int *tag, XmScaleCallbackStruct *data )
3939
3940/* manages time slider
3941 *
3942 * parameters of routine
3943 * Widget     widget;     input; scale widget
3944 * int        *tag;       input; scale number
3945 * XmScaleCallbackStruct *data; output; slider value
3946 */
3947{
3948        /* local variables */
3949        int      minlth;              /* slider value */
3950        char     str[BC_LINELTH+1];   /* number string */
3951        STATUS   locstat;             /* local status */
3952        int      dspwidth, dspheight; /* display size (drawing area) in pixel */
3953        int      newwidth, newheight; /* modified values */
3954        int      n;                   /* number of arguments */
3955        Arg      arglist[3];          /* argument list */
3956        int      u_draw_area_width;   /* drawing area width */
3957        int      u_draw_area_height;  /* drawing area height */
3958
3959        /* executable code */
3960
3961        minlth = data->value;
3962        switch  (*tag)  {
3963        case k_scale_read_grsn_length:
3964                sprintf( str, "%4.1f", (float)minlth );
3965                cu_set_string( xmv_w[k_widget_read_grsn_length], str );
3966                break;
3967        case k_scale_param_ctrl_zoom:
3968                xmv_dspctrl.zoom = pow( GpGetFloat(cGpF_trace_zoom_base),
3969                        (float)minlth/GpGetFloat(cGpF_trace_zoom_exp) );
3970                locstat = BC_NOERROR;
3971                mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &locstat );
3972                if  (Severe(&locstat))
3973                        printf( "*SHM: xm_call_scale: redraw status %d\n", locstat );
3974                break;
3975        case k_scale_filter_autocut:
3976                xmv_cmd_filter.autocut = (float)minlth;
3977                break;
3978        case k_scale_setup_dh:
3979                u_draw_area_width = GpGetInt( cGpI_draw_area_width );
3980                u_draw_area_height = GpGetInt( cGpI_draw_area_height );
3981                dspwidth = u_draw_area_width;
3982                dspheight = u_draw_area_height;
3983                newheight = (int)((float)dspheight * pow(GpGetFloat(cGpF_area_zoom_base),
3984                        (float)minlth/GpGetFloat(cGpF_area_zoom_exp)) );
3985                if  (GpGetInt(cGpI_debug_level) > 2)
3986                        printf( "SHM-dbg3: new height %d\n", newheight );
3987                xmv_prevent_resize++;
3988                n = 0;
3989                XtSetArg( arglist[n], XmNheight, newheight );  n++;
3990                XtSetValues( xmv_w[k_widget_draw], arglist, 1 );
3991                locstat = cBcNoError;
3992                pix_resize_window_buffer( XtDisplay(xmv_w[k_widget_draw]),
3993                        XtWindow(xmv_w[k_widget_draw]), &locstat );
3994                mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &locstat );
3995                break;
3996        case k_scale_setup_dw:
3997                u_draw_area_width = GpGetInt( cGpI_draw_area_width );
3998                u_draw_area_height = GpGetInt( cGpI_draw_area_height );
3999                dspwidth = u_draw_area_width;
4000                dspheight = u_draw_area_height;
4001                newwidth = (int)((float)dspwidth * pow(GpGetFloat(cGpF_area_zoom_base),
4002                        (float)minlth/GpGetFloat(cGpF_area_zoom_exp)) );
4003                if  (GpGetInt(cGpI_debug_level) > 2)
4004                        printf( "SHM-dbg3: new width %d\n", newwidth );
4005                xmv_prevent_resize++;
4006                n = 0;
4007                XtSetArg( arglist[n], XmNwidth, newwidth );  n++;
4008                XtSetValues( xmv_w[k_widget_draw], arglist, 1 );
4009                locstat = cBcNoError;
4010                pix_resize_window_buffer( XtDisplay(xmv_w[k_widget_draw]),
4011                        XtWindow(xmv_w[k_widget_draw]), &locstat );
4012                mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &locstat );
4013                break;
4014        default:
4015                printf( "*SHM: xm_call_scale: this cannot happen\n" );
4016        } /*endswitch*/
4017
4018} /* end of xm_call_scale */
4019
4020
4021
4022/*--------------------------------------------------------------------------*/
4023
4024
4025
4026static void xm_call_drawing_input( Widget widget, int *tag,
4027        XmDrawingAreaCallbackStruct *data )
4028
4029/* callback for input to drawing area window
4030 *
4031 * parameters of routine
4032 * Widget     widget;      input; widget ID
4033 * int        *tag;        input;
4034 * DrawingAreaCallbackStruct *data;
4035 */
4036{
4037        /* local variables */
4038        static float last_time;       /* last time */
4039        float    time;                /* selected time */
4040        int      trcno;               /* trace number */
4041        BOOLEAN  ok;                  /* position ok */
4042        char     cmd[BC_LINELTH+1];   /* command line */
4043
4044        /* executable code */
4045
4046        if  (data->reason != XmCR_INPUT)  {
4047                printf( "*SHM: strange input\n" );
4048                return;
4049        } /*endif*/
4050
4051        printf( "input: \n" );
4052
4053#ifdef XXX
4054        mg_get_time_and_trace( data->event->xbutton.x, data->event->xbutton.y,
4055                &time, &trcno, &ok );
4056
4057        if  (!ok || trcno == 0)  {
4058                if  (data->event->type == ButtonPress)
4059                        mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "dtw");
4060                return;
4061        } /*endif*/
4062
4063        if  (data->event->type == ButtonPress)  {
4064                /* mg_mark_trace( widget, trcno, time ); */
4065                last_time = time;
4066                return;
4067        } else if  (data->event->type == ButtonRelease)  {
4068                sprintf( cmd, "stw %f %f", last_time, time );
4069                mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, cmd );
4070        } /*endif*/
4071#endif
4072
4073} /* end of xm_call_drawing_input */
4074
4075
4076
4077/*--------------------------------------------------------------------------*/
4078
4079
4080
4081void xm_action_motion( Widget w, XEvent *ev, String *params, Cardinal *parno )
4082
4083/* action routine for pointer motion
4084 *
4085 * parameters of routine
4086 * Widget     w;      input; widget ID
4087 * XEvent     *ev;    input; current event
4088 * ...   (don't know much about it)
4089 */
4090{
4091        /* local variables */
4092        static TSyBoolean time_btn_pressed=FALSE;     /* Time Button is pressed */
4093        static TSyBoolean phase_btn_pressed=FALSE;    /* Phase Button is pressed */
4094        static int        curr_crsr=MGC_CRSR_NOCURSOR;     /* current cursor */
4095        static int        lastwdw;              /* last window */
4096        static Widget     lastwidget;           /* last widget */
4097        static Time       last_time=0;          /* last time of selection */
4098        static TSyBoolean to_be_deleted=FALSE;  /* phase should be deleted */
4099        static TSyBoolean select_active;        /* trace selection activated */
4100        static TSyBoolean select_on=FALSE;      /* select or deselect */
4101        static TSyBoolean close_phase_found;    /* close phase found */
4102        static int        rubber_mode=MGC_RUBBER_END;    /* draw rubber band */
4103        static TPiPhase   phase_backup;         /* backup phase used for b-phases */
4104        TSyStatus         status;               /* return status */
4105        int               wdwno;                /* window number */
4106        TPiPhase          close_phase;          /* close phase */
4107        TPiPhase          *close_phase_ptr;     /* pointer to close phase or NULL */
4108        TPiPhase          bck_phase;            /* backup storage phase info */
4109        TPiPhaseList      *plist;               /* pointer to phase list */
4110        TSyBoolean        crsr_ok;              /* cursor display ok ? */
4111        int               trcnum;               /* trace number */
4112
4113        /* executable code */
4114
4115        status = BC_NOERROR;
4116
4117        if  (w == xmv_w[k_widget_calibwdw])  {
4118                cal_handle_xevent( w, ev );
4119                return;
4120        } else if  (w == xmv_w[k_widget_spctwdw])  {
4121                spc_handle_xevent( w, ev, &status );
4122                if  (Severe(&status))  cu_alert( status );
4123                return;
4124        } /*endif*/
4125
4126        wdwno = (w == xmv_w[k_widget_draw]) ? MGC_WDW_MAIN : MGC_WDW_SINGLE;
4127        if  (wdwno != lastwdw)  {
4128                if  (curr_crsr != MGC_CRSR_NOCURSOR)
4129                        mg_draw_cursor( lastwidget, lastwdw, &xmv_dspctrl, MGC_CRSR_OFF,
4130                                0, 0, NULL );
4131                lastwdw = wdwno;
4132                lastwidget = w;
4133        } /*endif*/
4134
4135        if  (ev->type == MotionNotify)  {
4136                if  (time_btn_pressed)  {
4137                        if  (!XtIsManaged(xmv_w[k_widget_single_draw_box]))
4138                                XtManageChild( xmv_w[k_widget_single_draw_box] );
4139                        mg_do_drag( w, MGC_DRAG_CONTINUE, ev->xmotion.x,
4140                                ev->xmotion.y );
4141                        mg_plot_drag_window( xmv_w[k_widget_single_draw],
4142                                xmv_onset_acc==CUC_ACCURACY_DISPLAY, &status );
4143                        if  (Severe(&status))  cu_alert( status );
4144                        if  (xmv_pm_on)  pmm_draw_pmotion( xmv_dspctrl.zoom );
4145                        if  (xmv_polar_on)  pol_draw_poltraces( xmv_dspctrl.zoom, &status );
4146                        if  (Severe(&status))  cu_alert( status );
4147                } else if  (phase_btn_pressed)  {
4148                        if  (!XtIsManaged(xmv_w[k_widget_phase_box]))
4149                                XtManageChild( xmv_w[k_widget_phase_box] );
4150                        mg_do_phase( w, wdwno, MGC_PHASE_START, ev->xmotion.x,
4151                                ev->xmotion.y, xmv_phase.onset, &trcnum, NULL );
4152                        xmv_phasetrc = mg_trcptr( trcnum );
4153                        mg_draw_cursor( w, wdwno, &xmv_dspctrl, MGC_CRSR_CONTINUE,
4154                                ev->xmotion.x, ev->xmotion.y, NULL );
4155                } else if  (ev->xmotion.state & XMC_PHASE_BUTTON_MASK)  {
4156                        /* Select traces by moving over name with phase button pressed. */
4157                        /* This is not covered by the above case, since 'phase_btn_pressed' */
4158                        /* is selected only if cursor is within trace area.                 */
4159                        if  (wdwno == MGC_WDW_MAIN)  {
4160                                if  (select_on)  {
4161                                        mg_select_trace( xmv_w[k_widget_draw], ev->xbutton.x, ev->xbutton.y );
4162                                } else {
4163                                        mg_deselect_trace( xmv_w[k_widget_draw], ev->xbutton.x, ev->xbutton.y );
4164                                } /*endif*/
4165                                cl_set_simfilter_active( xmv_w, !ts_some_trace_selected() );
4166                        } /*endif*/
4167                } else {
4168                        mg_draw_cursor( w, wdwno, &xmv_dspctrl, MGC_CRSR_CONTINUE,
4169                                ev->xmotion.x, ev->xmotion.y, NULL );
4170                        if  (rubber_mode > MGC_RUBBER_END)
4171                                mg_rubber_line( w, wdwno, rubber_mode, ev->xmotion.x,
4172                                        ev->xmotion.y );
4173                } /*endif*/
4174                mg_print_time( xmv_w[k_widget_draw], wdwno, ev->xmotion.x,
4175                        ev->xmotion.y );
4176        } else if  (ev->type == ButtonPress) {
4177                switch  (ev->xbutton.button)  {
4178                case XMC_TIME_BUTTON:
4179                        if  (wdwno == MGC_WDW_SINGLE)  {
4180                                xm_move_drag_window( k_entry_key_arrow_up );
4181                                return;
4182                        } /*endif*/
4183                        mg_do_phase( (Widget)0, MGC_WDW_LAST, MGC_PHASE_CLEAR,
4184                                0, 0, NULL, NULL, NULL );
4185                        mg_draw_cursor( w, wdwno, &xmv_dspctrl, MGC_CRSR_OFF, 0, 0, NULL );
4186                        time_btn_pressed = TRUE;
4187                        if  (!XtIsManaged(xmv_w[k_widget_single_draw_box]))
4188                                XtManageChild( xmv_w[k_widget_single_draw_box] );
4189                        mg_do_drag( w, MGC_DRAG_START, ev->xbutton.x,
4190                                ev->xbutton.y );
4191                        mg_do_drag( w, MGC_DRAG_CONTINUE, ev->xbutton.x,
4192                                ev->xbutton.y );
4193                        mg_plot_drag_window( xmv_w[k_widget_single_draw],
4194                                xmv_onset_acc==CUC_ACCURACY_DISPLAY, &status );
4195                        if  (Severe(&status))  cu_alert( status );
4196                        if  (xmv_pm_on)  pmm_draw_pmotion( xmv_dspctrl.zoom );
4197                        if  (xmv_polar_on)  pol_draw_poltraces( xmv_dspctrl.zoom, &status );
4198                        if  (Severe(&status))  cu_alert( status );
4199                        break;
4200                case XMC_PHASE_BUTTON:
4201                        /* if there is a selection on the station, mark it and return */
4202                        if  (wdwno == MGC_WDW_MAIN &&
4203                                mg_toggle_trace_selection(xmv_w[k_widget_draw],
4204                                ev->xbutton.x,ev->xbutton.y))  {
4205                                select_active = TRUE;
4206                                select_on = !select_on;
4207                                cl_set_simfilter_active( xmv_w, !ts_some_trace_selected() );
4208                                break;
4209                        } /*endif*/
4210                        /* now this will create or change a phase */
4211                        phase_btn_pressed = TRUE;
4212                        /* Creating a phase changes processing state from inital to process */
4213                        xm_set_processing_state( CUC_PARSTATE_PROCESS );
4214                        /* save current phase to be able to restore it after pseudo-phase */
4215                        phase_backup = xmv_phase;
4216                        strcpy( phase_backup.name,
4217                                cu_get_string(xmv_w[k_widget_phase_name_text]) );
4218                        if  (!XtIsManaged(xmv_w[k_widget_phase_box]))
4219                                XtManageChild( xmv_w[k_widget_phase_box] );
4220                        /* decrease rubber mode if active */
4221                        if  (rubber_mode > MGC_RUBBER_END)
4222                                if  (--rubber_mode == MGC_RUBBER_END)
4223                                        mg_rubber_line( w, wdwno, rubber_mode, 0, 0 );
4224                        /* reset close_phase name and check for an active selection */
4225                        close_phase.name[0] = '\0';
4226                        close_phase_ptr = (xmv_select.waiting == 0) ? &close_phase : NULL;
4227                        /* an active selection prevents the 'close_phase' mechanism */
4228                        mg_do_phase( w, wdwno, MGC_PHASE_START, ev->xbutton.x,
4229                                ev->xbutton.y, xmv_phase.onset, &trcnum, close_phase_ptr );
4230                        xmv_phasetrc = mg_trcptr( trcnum );
4231                        close_phase_found = (close_phase.name[0] != '\0');
4232                        if  (close_phase_found)  {
4233                                status = cBcNoError;
4234                                PmRemovePhase( xmv_phasetrc, &close_phase, &status );
4235                                /* mg_do_phase has in this case already deleted the phase from */
4236                                /* memory but not removed from screen (bit stupid, I know).    */
4237                                /* So this has be done separately. */
4238                                mg_mark_one_phase( xmv_w[k_widget_draw],
4239                                        xmv_w[k_widget_single_draw], &close_phase,
4240                                        xmv_phasetrc, xmv_onset_acc==CUC_ACCURACY_DISPLAY );
4241                                cu_phase_box_defaults( xmv_w, &close_phase );
4242                                if  (close_phase.name[0] != 'b')  bck_phase = xmv_phase;
4243                                xmv_phase = close_phase;
4244                        } else {
4245                                /* A new phase is selected, don't take old amplitude values */
4246                                xmv_phase.ampl = 0.0;
4247                                xmv_phase.ampl_time = 0.0;
4248                                xmv_phase.ampl_displ = 0.0;
4249                                xmv_phase.ampl_veloc = 0.0;
4250                                xmv_phase.period = 0.0;
4251                                xmv_phase.magnitude = 0.0;
4252                                xmv_phase.magn_source = cPiMagnUndefined;
4253                                xmv_phase.ap_source = cPiApsrcUndefined;
4254                                xmv_phase.bb.bbampl = 0.0;
4255                                xmv_phase.bb.bbampl_time = 0.0;
4256                                xmv_phase.bb.bbperiod = 0.0;
4257                                xmv_phase.bb.mbb = 0.0;
4258                                xmv_phase.onset_acc_l = cPiAccEmpty;
4259                                xmv_phase.onset_acc_r = cPiAccEmpty;
4260                        } /*endif*/
4261                        if  (Abs(ev->xbutton.time - last_time)
4262                                < GpGetInt(cGpI_double_click_time))
4263                                to_be_deleted = TRUE;
4264                        last_time = ev->xbutton.time;
4265                        break;
4266                case XMC_CURSOR_BUTTON:
4267                        if  (++curr_crsr > GpGetInt(cGpI_max_cursor_form))
4268                                curr_crsr = MGC_CRSR_FIRST;
4269                        if  (curr_crsr <= MGC_CRSR_WAVEFORM)
4270                                mg_draw_cursor( w, wdwno, &xmv_dspctrl, MGC_CRSR_CLEAR, 0, 0, NULL);
4271                        do  {
4272                                mg_draw_cursor( w, wdwno, &xmv_dspctrl, curr_crsr,
4273                                        ev->xbutton.x, ev->xbutton.y, &crsr_ok );
4274                                if  (!crsr_ok)
4275                                        if  (++curr_crsr > GpGetInt(cGpI_max_cursor_form))
4276                                                curr_crsr = MGC_CRSR_FIRST;
4277                        }  while  (!crsr_ok);
4278                        break;
4279                } /*endswitch*/
4280        } else if  (ev->type == ButtonRelease) {
4281                if  (ev->xbutton.button == XMC_TIME_BUTTON)  {
4282                        if  (wdwno == MGC_WDW_SINGLE)  return;
4283                        time_btn_pressed = FALSE;
4284#                       ifdef XXX
4285                        if  (!XtIsManaged(xmv_w[k_widget_single_draw_box]))
4286                                XtManageChild( xmv_w[k_widget_single_draw_box] );
4287                        mg_do_drag( w, MGC_DRAG_END, ev->xbutton.x, ev->xbutton.y );
4288                        mg_plot_drag_window( xmv_w[k_widget_single_draw], &status );
4289                        if  (Severe(&status))  cu_alert( status );
4290#                       endif
4291                } else if  (ev->xbutton.button == XMC_PHASE_BUTTON)  {
4292                        if  (select_active)  {
4293                                select_active = FALSE;
4294                        } else if  (xmv_phasetrc == NULL)  {
4295                                /* ignore this */
4296                        } else if  (xmv_select.waiting > 0)  {
4297                                cl2_process_selection( xmv_w, &xmv_dspctrl, wdwno, xmv_cpar,
4298                                        &xmv_select, &xmv_phase, xmv_phasetrc, &status );
4299                                if  (Severe(&status))  cu_alert( status );
4300                        } else {
4301                                strcpy( xmv_phase.name, cu_get_string(
4302                                        xmv_w[k_widget_phase_name_text]) );
4303                                xmv_phase.source = cPiSourceManually;
4304                                strcpy( xmv_phase.filter, xmv_cmd_filter.name );
4305                                if  (to_be_deleted)  {
4306                                        to_be_deleted = FALSE;
4307                                        mg_do_phase( w, wdwno, MGC_PHASE_CLEAR, 0, 0, NULL, NULL, NULL );
4308                                } else {
4309                                        cu_accept_phase( xmv_w[k_widget_draw],
4310                                                xmv_w[k_widget_single_draw], &xmv_phase, xmv_phasetrc,
4311                                                xmv_dspctrl.show_phase_acc, &status );
4312                                        /* prompt for onset accuracy if this is switched on and if */
4313                                        /* no dummy phase is created and no phase is moved or deleted */
4314                                        if  (xmv_onset_acc > CUC_ACCURACY_NONE
4315                                                && xmv_phase.name[0] != 'b'
4316                                                && xmv_phase.name[0] != 'w' && !close_phase_found
4317                                                && status == BC_NOERROR)  {
4318                                                xmv_select.waiting = 2;
4319                                                xmv_select.processed = 0;
4320                                                xmv_select.initiator = CUC_SELTYPE_ONSET_ACC;
4321                                                /* the following phase structure will be changed when */
4322                                                /* the initiator is called */
4323                                                xmv_select.addparam = (void *)PmFindPhase( xmv_phasetrc,
4324                                                        xmv_phase.name );
4325                                                strcpy( xmv_select.select[0].name, "w-acc-l" );
4326                                                strcpy( xmv_select.select[1].name, "w-acc-r" );
4327                                                strcpy( xmv_select.infotext, CUC_SELTEXT_ONSET_ACC );
4328                                                mg_set_cursor( MGC_XCRSR_RIGHT );
4329                                                mg_print_status( xmv_w[k_widget_draw],
4330                                                        CUC_SELTEXT_ONSET_ACC, TRUE );
4331                                                mg_rubber_line( w, wdwno, MGC_RUBBER_START,
4332                                                        ev->xbutton.x, ev->xbutton.y );
4333                                                rubber_mode = MGC_RUBBER_CONT_L;
4334                                        } /*endif*/
4335                                        /* restore phase info if pseudo-phase was created */
4336                                        if  (phase_backup.name[0] != '\0' && xmv_phase.name[0] == 'b')  {
4337                                                xmv_phase = phase_backup;
4338                                                cu_phase_box_defaults( xmv_w, &xmv_phase );
4339                                        } /*endif*/
4340                                } /*endif*/
4341                        } /*endif*/
4342                        phase_btn_pressed = FALSE;
4343                } /*endif*/
4344        } else if  (ev->type == KeyPress) {
4345                {
4346                /* this is a workaround for accelerators not working on recent Suse  *
4347       * Linux implementations                                             */
4348#define MODIF_SHIFT 0x11
4349#define MODIF_LOCK  0x12
4350#define MODIF_CTRL  0x14
4351#define MODIF_ALT   0x18
4352                int tag;
4353                Modifiers mret;
4354                KeySym keysym;
4355                XtTranslateKeycode( ev->xkey.display, ev->xkey.keycode, ev->xkey.state,
4356                        &mret, &keysym );
4357                if  (ev->xkey.state == MODIF_CTRL)  {
4358                        switch  ((char)keysym)  {
4359                        case '0':   tag = k_entry_eproc10;        break;
4360                        case '1':   tag = k_entry_eproc1;         break;
4361                        case '2':   tag = k_entry_eproc2;         break;
4362                        case '3':   tag = k_entry_eproc3;         break;
4363                        case '4':   tag = k_entry_eproc4;         break;
4364                        case '5':   tag = k_entry_eproc5;         break;
4365                        case '6':   tag = k_entry_eproc6;         break;
4366                        case '7':   tag = k_entry_eproc7;         break;
4367                        case '8':   tag = k_entry_eproc8;         break;
4368                        case '9':   tag = k_entry_eproc9;         break;
4369                        case 'a':   tag = k_entry_readah;         break;
4370                        case 'b':   tag = k_entry_magn_mb;        break;
4371                        case 'd':   tag = k_entry_deltheo;        break;
4372                        case 'e':   tag = k_button_param_theo_ext;break;
4373                        case 'f':   tag = k_entry_fk;             break;
4374                        case 'g':   tag = k_entry_readgse;        break;
4375                        case 'h':   tag = k_entry_cmd_screendump; break;
4376                        case 'i':   tag = k_entry_pol_inc_cohlth; break;
4377                        case 'j':   tag = k_entry_pol_inc_pow_linfil; break;
4378                        case 'k':   tag = k_entry_command;        break;
4379                        case 'l':   tag = k_entry_pol_dec_cohlth; break;
4380                        case 'm':   tag = k_entry_magn_ms_plain;  break;
4381                        case 'n':   tag = k_entry_mparam_sn_auto; break;
4382                        case 'o':   tag = k_entry_cmd_del_horiz;  break;
4383                        case 'p':   tag = k_entry_final_params;   break;
4384                        case 'q':   tag = k_entry_cancel_params;  break;
4385                        case 'r':   tag = k_entry_pol_dec_pow_linfil; break;
4386                        case 's':   tag = k_entry_cmd_speccmd;    break;
4387                        case 't':   tag = k_button_param_theo;    break;
4388                        case 'v':   tag = k_entry_vespa;          break;
4389                        case 'x':   tag = k_entry_help;           break;
4390                        case 'y':   tag = k_entry_trc_sort_d;     break;
4391                        case 'z':   tag = k_entry_quit;           break;
4392                        default:    tag = 0;
4393                                if  (GpGetInt(cGpI_debug_level) > 3)
4394                                        printf( "SHM-dbg4: pressed key %d, keysym %ld\n",
4395                                                ev->xkey.keycode, keysym );
4396                        } /*endswitch*/
4397                } else {
4398                        switch  ((char)keysym)  {
4399                        case '0':   tag = k_entry_cmd_userdef;        break;
4400                        case '1':   tag = k_entry_magn_ml;        break;
4401                        case '3':   tag = k_entry_wdw_3traces;    break;
4402                        case '5':   tag = k_entry_pmotion;        break;
4403                        case '8':   tag = k_entry_spectrogram;    break;
4404                        case '9':   tag = k_entry_spectrum;       break;
4405                        case 'C':   tag = k_entry_configure;      break;
4406                        case 'a':   tag = k_entry_locsat;         break;
4407                        case 'b':   tag = k_entry_beam;           break;
4408                        case 'c':   tag = k_entry_calib;          break;
4409                        case 'd':   tag = k_entry_dtw;            break;
4410                        case 'e':   tag = k_button_param_depth;   break;
4411                        case 'f':   tag = k_entry_filter;         break;
4412                        case 'g':   tag = k_entry_wdw_grow_right; break;
4413                        case 'h':   tag = k_entry_ext_location;   break;
4414                        case 'i':   tag = k_entry_align;          break;
4415                        case 'k':   tag = k_entry_wdw_grow_left;  break;
4416                        case 'l':   tag = k_entry_locate_tele;    break;
4417                        case 'm':   tag = k_entry_wdw_move_right; break;
4418                        case 'n':   tag = k_entry_wdw_move_left;  break;
4419                        case 'o':   tag = k_entry_dump_params;    break;
4420                        case 'p':   tag = k_entry_corrpick;       break;
4421                        case 'q':   tag = k_entry_abort_selection;break;
4422                        case 'r':   tag = k_entry_read_grsn;      break;
4423                        case 's':   tag = k_entry_stw;            break;
4424                        case 't':   tag = k_entry_rotate;         break;
4425                        case 'u':   tag = k_entry_autopick1;      break;
4426                        case 'v':   tag = k_entry_gencomment;     break;
4427                        case 'w':   tag = k_entry_planewave;      break;
4428                        case 'x':   tag = k_entry_amplper_p;      break;
4429                        case 'y':   tag = k_entry_info_source;    break;
4430                        case 'z':   tag = k_entry_amplper_z;      break;
4431                        default:
4432                                if  (keysym == GpGetInt(cGpI_keysym_arrow_up))  {
4433                                        tag = k_entry_key_arrow_up;
4434                                } else if  (keysym == GpGetInt(cGpI_keysym_arrow_down))  {
4435                                        tag = k_entry_key_arrow_down;
4436                                } else if  (keysym == GpGetInt(cGpI_keysym_arrow_left))  {
4437                                        tag = k_entry_key_arrow_left;
4438                                } else if  (keysym == GpGetInt(cGpI_keysym_arrow_right))  {
4439                                        tag = k_entry_key_arrow_right;
4440                                } else {
4441                                        tag = 0;
4442                                        if  (GpGetInt(cGpI_debug_level) > 2)
4443                                                printf( "SHM-dbg3: pressed key %d, keysym %ld\n",
4444                                                        ev->xkey.keycode, keysym );
4445                                } /*endif*/
4446                        } /*endswitch*/
4447                } /*endif*/
4448                if  (GpGetInt(cGpI_debug_level) > 2)  printf( "SHM-dbg3: tag: %d\n", tag );
4449                if  (tag > 0)  xm_call_menu_select( w, &tag, NULL );
4450                }
4451        } else {
4452                if  (GpGetInt(cGpI_debug_level) > 0)
4453                        printf( "SHM-dbg1: unhandled SHM event of type %d\n", ev->type );
4454        } /*endif*/
4455
4456} /* end of xm_action_motion */
4457
4458
4459
4460/*--------------------------------------------------------------------------*/
4461
4462
4463
4464static void xm_call_text_input( Widget widget, int *tag,
4465        XmTextVerifyCallbackStruct *data )
4466
4467/* callback on text edit actions
4468 *
4469 * parameters of routine
4470 * Widget     widget;       input; text widget ID
4471 * int        *tag;         input; widget number
4472 * XmTextVerifyCallbackStruct *data;
4473 */
4474{
4475        /* local variables */
4476        int      wno = *tag;              /* widget number */
4477        char     *cp;                     /* text pointer */
4478        char     text[BC_LINELTH+1];      /* editable text */
4479        int      slen;                    /* string length */
4480        int      pos;                     /* text position */
4481
4482        /* executable code */
4483
4484        /* check source string on special entries */
4485        if  ((widget == xmv_w[k_widget_param_azimuth_text]
4486                || widget == xmv_w[k_widget_param_distance_text]
4487                || widget == xmv_w[k_widget_param_origin_d_text]
4488                || widget == xmv_w[k_widget_param_origin_t_text]
4489                || widget == xmv_w[k_widget_param_lat_text]
4490                || widget == xmv_w[k_widget_param_lon_text])
4491                && xmv_cpar->source[0] == '\0'
4492                && !xmv_cpar->soft_change)  {
4493                if  (!XtIsManaged(xmv_w[k_widget_infsource_box]))
4494                        XtManageChild( xmv_w[k_widget_infsource_box] );
4495        } /*endif*/
4496
4497        /* reset phase buttons on new phase */
4498        if  (widget == xmv_w[k_widget_phase_name_text])  {
4499                if  (XmToggleButtonGetState(xmv_w[k_widget_phase_spec_i]))  {
4500                        XmToggleButtonSetState( xmv_w[k_widget_phase_spec_i], FALSE, TRUE );
4501                        XmToggleButtonSetState( xmv_w[k_widget_phase_spec_e], TRUE, TRUE );
4502                } /*endif*/
4503                if  (XmToggleButtonGetState(xmv_w[k_widget_phase_reliab_no]))  {
4504                        XmToggleButtonSetState( xmv_w[k_widget_phase_reliab_no], FALSE, TRUE );
4505                        XmToggleButtonSetState( xmv_w[k_widget_phase_reliab_yes], TRUE, TRUE );
4506                } /*endif*/
4507                if  (!XmToggleButtonGetState(xmv_w[k_widget_phase_sign_0]))  {
4508                        XmToggleButtonSetState( xmv_w[k_widget_phase_sign_0], TRUE, TRUE );
4509                        XmToggleButtonSetState( xmv_w[k_widget_phase_sign_p], FALSE, TRUE );
4510                        XmToggleButtonSetState( xmv_w[k_widget_phase_sign_m], FALSE, TRUE );
4511                } /*endif*/
4512        } /*endif*/
4513
4514        if  (widget == xmv_w[k_widget_param_depth_text] && !xmv_cpar->soft_change)
4515                xmv_cpar->depth_type = CUC_DEPTH_ESTIMATED;
4516
4517        if  (data->text->length == 1 && data->startPos == data->endPos)  {
4518#               ifdef XXX
4519                if  (*(data->text->ptr) == 'x')  {
4520                        *text = '\0';
4521                        cu_set_string( widget, text );
4522                        return;
4523                } /*endif*/
4524#               endif
4525                cp = cu_get_string( widget );
4526                slen = strlen( cp );
4527                if  (slen > BC_LINELTH)  {
4528                        printf( "*SHM: xm_call_text_input: text overflow ***\n" );
4529                        return;
4530                } /*endif*/
4531                strcpy( text, cp );
4532                pos = data->startPos;
4533                if  (text[pos] == '\0')  return;  /* then appended to end */
4534                if  (pos >= 0 && pos < slen)  {
4535                        strcpy( text+pos, text+pos+1 );
4536                        cu_set_string( widget, text );
4537                } /*endif*/
4538        } /*endif*/
4539
4540} /* end of xm_call_text_input */
4541
4542
4543
4544/*--------------------------------------------------------------------------*/
4545
4546
4547
4548static void xm_call_file_selection( Widget widget, int *tag,
4549        XmFileSelectionBoxCallbackStruct *data )
4550
4551/* callback on file selection via FileSelectionBox
4552 *
4553 * parameters of routine
4554 * Widget     widget;     widget id of file selector
4555 * int        *tag;       input; not used here
4556 * XmFileSelectionBoxCallbackStruct *data; input; data returned by SelectionBox
4557 */
4558{
4559        /* local variables */
4560        STATUS   status;                  /* return status */
4561        int      mode;                    /* which kind of file */
4562        char     selfile[BC_FILELTH+1];   /* selected file */
4563        int      slen;                    /* string length */
4564        int      i, j;                    /* counters */
4565        char     syscmd[cBcVeryLongStrLth+1]; /* shell command */
4566        char     tmpfile[cBcFileLth+1];   /* scratch file */
4567        char     *env;                    /* pointer to environment */
4568        long     eventid;                 /* event ID for evt recovery */
4569
4570        /* executable code */
4571
4572        mg_set_cursor( MGC_XCRSR_BUSY );
4573
4574        cl_file_select_callback( xmv_w, data, BC_FILELTH, selfile, &mode );
4575
4576        status = BC_NOERROR;
4577        if  (mode == CLC_PATH_GSE || mode == CLC_PATH_GSE2 || mode == CLC_PATH_AH
4578                || mode == CLC_PATH_Q || mode == CLC_PATH_RFMT)  {
4579                /* reset all parameters */
4580                PiClearAllPhases();
4581                cu_reset_phase( &xmv_phase );
4582                strcpy( xmv_phase.name, GpGetString(cGpS_auto_phase) );
4583                cu_phase_box_defaults( xmv_w, &xmv_phase );
4584                xmv_cmd_filter.autocut = 5.0;  /* shv_globals not yet implemented */
4585                mx_filter_box_defaults( xmv_w, &xmv_cmd_filter );
4586                xmv_dspctrl.zoom = 1.0;
4587                mx_clear_rotation();
4588                cu_reset_paramsets( &xmv_par );
4589                xmv_cpar = xmv_par.par;
4590                xmv_cpar->soft_change = TRUE;
4591                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
4592                xmv_cpar->soft_change = FALSE;
4593                cl2_param_box_defaults( xmv_w, xmv_cpar /*, &xmv_dspctrl*/ );
4594                /* end of reset */
4595                mg_print_filter( xmv_w[k_widget_draw], "" );
4596                if  (mode == CLC_PATH_GSE)  {
4597                        xmv_cmd_readg.format = MXC_FORMAT_GSE;
4598                } else if  (mode == CLC_PATH_GSE2)  {
4599                        xmv_cmd_readg.format = MXC_FORMAT_GSE2;
4600                } else if  (mode == CLC_PATH_Q)  {
4601                        xmv_cmd_readg.format = MXC_FORMAT_Q;
4602                } else if  (mode == CLC_PATH_RFMT)  {
4603                        /* create tmp filename */
4604                        sprintf( tmpfile, "%s%sRFMT.GSE", shd_scratch, id_shv );
4605                        if  (GpGetInt(cGpI_debug_level) > 1)
4606                                printf( "*SHM: reformatting file %s (tmp=%s)\n", selfile, tmpfile );
4607                        /* reformat input file */
4608                        sprintf( syscmd, "%sshm_exec_rfmt_other %s %s %s",
4609                                GpGetString(cGpS_defpath_extprog), GpGetString(cGpS_reformat_proc),
4610                                selfile, tmpfile );
4611                        if  (GpGetInt(cGpI_debug_level) > 1)
4612                                printf( "SHM-dbg2: executing >%s<\n", syscmd );
4613                        system( syscmd );
4614                        /* tell readg what to read */
4615                        strcpy( selfile, tmpfile );
4616                        xmv_cmd_readg.format = MXC_FORMAT_GSE2;
4617                } else {
4618                        xmv_cmd_readg.format = MXC_FORMAT_AH;
4619                } /*endif*/
4620                strcpy( xmv_cmd_readg.filename, selfile );
4621                mx_readg( &xmv_cmd_readg, xmv_w[k_widget_draw],
4622                        xmv_w[k_widget_single_draw], &xmv_dspctrl,
4623                        FALSE, NULL, &status );
4624                /* delete scratch file if read from 'other' format */
4625                if  (mode == CLC_PATH_RFMT)  {
4626                        sprintf( syscmd, "\\rm %s\n", tmpfile );
4627                        system( syscmd );
4628                } /*endif*/
4629                if  (strcmp(GpGetString(cGpS_default_filter),"BUT_BP") == 0)  {
4630                        cl_create_filter( xmv_w, CLC_CREFIL_BUT_BP, &status );
4631                        if  (Severe(&status))  {
4632                                mg_set_cursor( MGC_XCRSR_NORMAL );
4633                                cu_alert( status );
4634                                return;
4635                        } /* endif*/
4636                        strcpy( xmv_cmd_filter.name, cu_get_string(
4637                                xmv_w[k_widget_filter_edit_text]) );
4638                } else {
4639                        strcpy( xmv_cmd_filter.name, GpGetString(cGpS_default_filter) );
4640                } /*endif*/
4641                if  (xmv_cmd_filter.name[0] != '\0')  {
4642                        cl2_display_busy( xmv_w, TRUE );
4643                        mx_filter( &xmv_cmd_filter, xmv_w[k_widget_draw],
4644                                &xmv_dspctrl, &status );
4645                        cl2_display_busy( xmv_w, FALSE );
4646                        mg_print_filter( xmv_w[k_widget_draw], xmv_cmd_filter.name );
4647                } /*endif*/
4648                /* mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "rd" ); */
4649                if  (*tag == k_button_read_grsn_readnew)  {
4650                        cu_reset_phase( &xmv_phase );
4651                        cu_reset_paramsets( &xmv_par );
4652                        xmv_cpar = xmv_par.par;
4653                        xmv_cpar->soft_change = TRUE;
4654                        cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
4655                        xmv_cpar->soft_change = FALSE;
4656                } /*endif*/
4657        } else if  (mode == CLC_PATH_SAVE)  {
4658                cl3_restore_parameters( selfile, xmv_cpar, &status );
4659                if  (Severe(&status))  {
4660                        mg_set_cursor( MGC_XCRSR_NORMAL );
4661                        cu_alert( status );
4662                        return;
4663                } /*endif*/
4664                xmv_cpar->soft_change = TRUE;
4665                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
4666                xmv_cpar->soft_change = FALSE;
4667                mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &status );
4668                if  (Severe(&status))  {
4669                        mg_set_cursor( MGC_XCRSR_NORMAL );
4670                        cu_alert( status );
4671                        return;
4672                } /*endif*/
4673                /* try to get event ID from filename */
4674                slen = strlen( selfile );
4675                for  (i=slen-13; i<slen-4; i++)
4676                        if  (!isdigit(selfile[i]))  {
4677                                mg_set_cursor( MGC_XCRSR_NORMAL );
4678                                return;
4679                        } /*endif*/
4680                if  (selfile[slen-14] == '1')  {
4681                        if  (sscanf(selfile+slen-14,"%10d",&i) != 1)  {
4682                                mg_set_cursor( MGC_XCRSR_NORMAL );
4683                                return;
4684                        } /*endif*/
4685                } else {
4686                        if  (sscanf(selfile+slen-13,"%9d",&i) != 1)  {
4687                                mg_set_cursor( MGC_XCRSR_NORMAL );
4688                                return;
4689                        } /*endif*/
4690                } /*endif*/
4691                xmv_par.evid = i;
4692        } else if  (mode == CLC_PATH_EVT)  {
4693                cl3_restore_from_evt( selfile, xmv_cpar, &eventid, &status );
4694                if  (GpGetBoolean(cGpB_recover_evid))  xmv_par.evid = eventid;
4695                if  (Severe(&status))  {
4696                        mg_set_cursor( MGC_XCRSR_NORMAL );
4697                        cu_alert( status );
4698                        return;
4699                } /*endif*/
4700                xmv_cpar->soft_change = TRUE;
4701                cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
4702                xmv_cpar->soft_change = FALSE;
4703                mg_tracedisplay( xmv_w[k_widget_draw], &xmv_dspctrl, &status );
4704                if  (Severe(&status))  {
4705                        mg_set_cursor( MGC_XCRSR_NORMAL );
4706                        cu_alert( status );
4707                        return;
4708                } /*endif*/
4709        } /*endif*/
4710
4711        mg_set_cursor( MGC_XCRSR_NORMAL );
4712
4713} /* end of xm_call_file_selection */
4714
4715
4716
4717/*--------------------------------------------------------------------------*/
4718
4719
4720
4721static void xmh_read_gsefile( char datafile[], TSyStatus *status )
4722
4723/* reads in GSE data file, append to display.
4724 * The code of this route was copied from the above routine
4725 * 'xm_call_file_selection' and shrunk to the case of reading GSE2 files.
4726 *
4727 * parameters of routine
4728 * char       datafile[]; input; name of data file
4729 */
4730{
4731        /* local variables */
4732        int      mode;                    /* which kind of file */
4733        char     selfile[BC_FILELTH+1];   /* selected file */
4734        int      slen;                    /* string length */
4735        int      i, j;                    /* counters */
4736        char     syscmd[cBcVeryLongStrLth+1]; /* shell command */
4737        char     tmpfile[cBcFileLth+1];   /* scratch file */
4738        char     *env;                    /* pointer to environment */
4739
4740        /* executable code */
4741
4742        mg_set_cursor( MGC_XCRSR_BUSY );
4743
4744        /* reset all parameters */
4745#ifdef XXX
4746        PiClearAllPhases();
4747        cu_reset_phase( &xmv_phase );
4748        strcpy( xmv_phase.name, GpGetString(cGpS_auto_phase) );
4749        cu_phase_box_defaults( xmv_w, &xmv_phase );
4750        xmv_cmd_filter.autocut = 5.0;  /* shv_globals not yet implemented */
4751        mx_filter_box_defaults( xmv_w, &xmv_cmd_filter );
4752        xmv_dspctrl.zoom = 1.0;
4753        mx_clear_rotation();
4754        cu_reset_paramsets( &xmv_par );
4755        xmv_cpar = xmv_par.par;
4756        xmv_cpar->soft_change = TRUE;
4757        cu_set_param_values( xmv_w, xmv_cpar, xmv_par.parno );
4758        xmv_cpar->soft_change = FALSE;
4759        cl2_param_box_defaults( xmv_w, xmv_cpar /*, &xmv_dspctrl*/ );
4760        /* end of reset */
4761#endif
4762        mg_print_filter( xmv_w[k_widget_draw], "" );
4763        xmv_cmd_readg.format = MXC_FORMAT_GSE2;
4764        strcpy( xmv_cmd_readg.filename, datafile );
4765        xmv_cmd_readg.keep = TRUE;
4766        mx_readg( &xmv_cmd_readg, xmv_w[k_widget_draw],
4767                xmv_w[k_widget_single_draw], &xmv_dspctrl,
4768                FALSE, NULL, status );
4769        if  (strcmp(GpGetString(cGpS_default_filter),"BUT_BP") == 0)  {
4770                cl_create_filter( xmv_w, CLC_CREFIL_BUT_BP, status );
4771                if  (Severe(status))  {
4772                        mg_set_cursor( MGC_XCRSR_NORMAL );
4773                        return;
4774                } /* endif*/
4775                strcpy( xmv_cmd_filter.name, cu_get_string(
4776                        xmv_w[k_widget_filter_edit_text]) );
4777        } else {
4778                strcpy( xmv_cmd_filter.name, GpGetString(cGpS_default_filter) );
4779        } /*endif*/
4780        if  (xmv_cmd_filter.name[0] != '\0')  {
4781                cl2_display_busy( xmv_w, TRUE );
4782                mx_filter( &xmv_cmd_filter, xmv_w[k_widget_draw],
4783                        &xmv_dspctrl, status );
4784                cl2_display_busy( xmv_w, FALSE );
4785                mg_print_filter( xmv_w[k_widget_draw], xmv_cmd_filter.name );
4786        } /*endif*/
4787        /* mx_exec_sh( xmv_w[k_widget_draw], &xmv_dspctrl, "rd" ); */
4788        mg_set_cursor( MGC_XCRSR_NORMAL );
4789
4790} /* end of xmh_read_gsefile */
4791
4792
4793
4794/*--------------------------------------------------------------------------*/
4795
4796
4797
4798static void xmh_log_action( char inf[], int num )
4799
4800/* logs action info to file cGpS_motif_log.  If inf=="--reset--"
4801 * the file is rewound.
4802 *
4803 * parameters of routine
4804 * char       inf[];          input; info string
4805 * int        num;            input; ID number
4806 */
4807{
4808        /* local variables */
4809        static int log_cnt=0; /* log counter */
4810        FILE     *fp;         /* pointer to file */
4811        char     *mlog;       /* name of motif log file */
4812
4813        /* executable code */
4814
4815        mlog = GpGetString( cGpS_motif_log );
4816        if  (*mlog == '\0')  return;
4817
4818        if  (inf != NULL)
4819                if  (strcmp(inf,"--reset--") == 0)  {
4820                        log_cnt = 0;
4821                        /* sy_fdelete( shv_global.motif_log ); */
4822                        fp = sy_fopen( mlog, "a" );
4823                        if  (fp == NULL)  return;
4824                        fprintf( fp, "\n\nnew SHM session\n\n" );
4825                        sy_fclose( fp );
4826                        return;
4827                } /*endif*/
4828
4829        fp = sy_fopen( mlog, "a" );
4830        if  (fp == NULL)  return;
4831
4832        if  (++log_cnt % 15 == 0)  fprintf( fp, "\n" );
4833        if  (inf != NULL)
4834                if  (*inf != '\0')
4835                        fprintf( fp, "%s", inf );
4836        fprintf( fp, "[%d]", num );
4837        sy_fclose( fp );
4838
4839} /* end of xmh_log_action */
4840
4841
4842
4843/*--------------------------------------------------------------------------*/
4844
4845
4846
4847#define EV(e) ((strcmp(event,e) == 0))
4848
4849
4850
4851static void xm_exec_userdef( char fname[] )
4852
4853/* performs sequence of user defined commands
4854 *
4855 * parameters of routine
4856 * char       fname[];       input; name of file with commands
4857 */
4858{
4859        /* local variables */
4860        FILE     *fp;                 /* pointer to input file */
4861        char     line[BC_LINELTH+1];  /* current line of file */
4862        char     event[BC_LINELTH+1]; /* name of event */
4863        int      item;                /* event item */
4864        BOOLEAN  m;                   /* menu or button */
4865
4866        /* executable code */
4867
4868        fp = sy_fopen( fname, "r" );
4869        if  (fp == NULL)  {
4870                fprintf( stderr, "*SHM: couldn't open userdef file %s\n", fname );
4871                return;
4872        } /*endif*/
4873
4874        while  (fgets(line,BC_LINELTH,fp) != NULL)  {
4875                if  (*line == '\n' || *line == '!')  continue;
4876                sscanf( line, "%s", event );
4877                if       EV("command")   {item=k_entry_command; m=TRUE;}
4878                else if  EV("quit")      {item=k_entry_quit; m=TRUE;}
4879                else if  EV("read_grsn") {item=k_entry_read_grsn; m=TRUE;}
4880                /*  :  */
4881                /*  :  */
4882                else if  EV("read_grsn_nexttime")  {item=k_button_read_grsn_nexttime; m=FALSE;}
4883                else if  EV("read_grsn_prevtime")  {item=k_button_read_grsn_prevtime; m=FALSE;}
4884                else if  EV("read_grsn_mindn")     {item=k_button_read_grsn_mindn; m=FALSE;}
4885                else if  EV("read_grsn_read")      {item=k_button_read_grsn_read; m=FALSE;}
4886                else if  EV("read_grsn_readnew")   {item=k_button_read_grsn_readnew; m=FALSE;}
4887                else  {fprintf( stderr, "*SHM: userdef: unkown keyword %s\n", event ); continue;}
4888                if  (m)  {
4889                        xm_call_menu_select( (Widget)0, &item, NULL );
4890                } else {
4891                        xm_call_activate( (Widget)0, &item, NULL );
4892                } /*endif*/
4893        } /*endwhile*/
4894
4895        sy_fclose( fp );
4896
4897} /* end of xm_exec_userdef */
4898
4899
4900
4901#undef EV
4902
4903
4904
4905/*--------------------------------------------------------------------------*/
4906
4907
4908
4909static void xm_read_requested_data( Widget w[], STATUS *status )
4910
4911/* reads requested data
4912 *
4913 * parameters of routine
4914 * Widget     w[];         input; widget array
4915 * STATUS     *status;     output; return status
4916 */
4917{
4918        /* local variables */
4919        int      item;                  /* item to activate */
4920        char     old_dev[BC_FILELTH+1]; /* initial device name */
4921        char     *cptr;                 /* pointer to char */
4922
4923        /* executable code */
4924
4925        /* store initial values */
4926        cptr = cu_get_string( w[k_widget_read_grsn_device] );
4927        if  (cptr != NULL)  strcpy( old_dev, cptr );
4928
4929        /* set new values */
4930        if  (getenv("SFD") != NULL)  {
4931                cu_set_string( w[k_widget_read_grsn_device], "SFD" );
4932        } else {
4933                cu_set_string( w[k_widget_read_grsn_device], "SH_SCRATCH" );
4934        } /*endif*/
4935
4936        /* read data */
4937        item = k_button_read_grsn_read;
4938        xm_call_activate( (Widget)0, &item, NULL );
4939
4940        /* restore initial values */
4941        cu_set_string( w[k_widget_read_grsn_device], old_dev );
4942
4943} /* end of xm_read_requested_data */
4944
4945
4946
4947/*--------------------------------------------------------------------------*/
4948
4949
4950
4951static void xm_configure_windows( Widget wa[] )
4952
4953/* configures windows
4954 *
4955 * no parameters
4956 */
4957{
4958        /* local variables */
4959        int      x, y, w, h, border;         /* window configuration */
4960        Widget   widget;                     /* current widget */
4961
4962        /* executable code */
4963
4964        widget = wa[k_widget_main];
4965        x = GpGetInt( cGpI_window_main_x );
4966        y = GpGetInt( cGpI_window_main_y );
4967        w = GpGetInt( cGpI_window_main_w );
4968        h = GpGetInt( cGpI_window_main_h );
4969        border = GpGetInt( cGpI_window_border );
4970        if  (XtIsManaged(widget))  XtUnmanageChild( widget );
4971        if  (w > 0 && h > 0) XtConfigureWidget( widget, x, y, w, h, border );
4972        if  (strchr(xmv_openwdw,'m') != NULL)  {
4973                XtManageChild( widget );
4974                XtMoveWidget( XtParent(widget), x, y );
4975        } /*endif*/
4976
4977        widget = wa[k_widget_single_draw_box];
4978        x = GpGetInt( cGpI_single_trace_box_x );
4979        y = GpGetInt( cGpI_single_trace_box_y );
4980        w = GpGetInt( cGpI_single_trace_box_w );
4981        h = GpGetInt( cGpI_single_trace_box_h );
4982        border = GpGetInt( cGpI_window_border );
4983        if  (XtIsManaged(widget))  XtUnmanageChild( widget );
4984        if  (w > 0 && h > 0) XtConfigureWidget( widget, x, y, w, h, border );
4985        if  (strchr(xmv_openwdw,'s') != NULL)  {
4986                XtManageChild( widget );
4987                XtMoveWidget( XtParent(widget), x, y );
4988        } /*endif*/
4989
4990        widget = wa[k_widget_phase_box];
4991        x = GpGetInt( cGpI_phase_box_x );
4992        y = GpGetInt( cGpI_phase_box_y );
4993        w = GpGetInt( cGpI_phase_box_w );
4994        h = GpGetInt( cGpI_phase_box_h );
4995        border = GpGetInt( cGpI_window_border );
4996        if  (XtIsManaged(widget))  XtUnmanageChild( widget );
4997        if  (w > 0 && h > 0) XtConfigureWidget( widget, x, y, w, h, border );
4998        if  (strchr(xmv_openwdw,'p') != NULL)  {
4999                XtManageChild( widget );
5000                XtMoveWidget( XtParent(widget), x, y );
5001        } /*endif*/
5002
5003        widget = wa[k_widget_param_box];
5004        x = GpGetInt( cGpI_parameter_box_x );
5005        y = GpGetInt( cGpI_parameter_box_y );
5006        w = GpGetInt( cGpI_parameter_box_w );
5007        h = GpGetInt( cGpI_parameter_box_h );
5008        border = GpGetInt( cGpI_window_border );
5009        if  (XtIsManaged(widget))  XtUnmanageChild( widget );
5010        if  (w > 0 && h > 0) XtConfigureWidget( widget, x, y, w, h, border );
5011        if  (strchr(xmv_openwdw,'e') != NULL)  {
5012                XtManageChild( widget );
5013                XtMoveWidget( XtParent(widget), x, y );
5014        } /*endif*/
5015
5016} /* end of xm_configure_windows */
5017
5018
5019
5020/*--------------------------------------------------------------------------*/
5021
5022
5023
5024static void xm_call_configure( void )
5025
5026/* calls configure script and rereads SHM_USER_STARTUP.SHC
5027 *
5028 * parameters of routine
5029 * none
5030 */
5031{
5032        /* local variables */
5033        char     parfile[cBcFileLth+1];          /* parameter file */
5034        char     *env;                           /* pointer to environment */
5035        char     editcmd[cBcLongStrLth+1];       /* edit command */
5036        char     analyst_save[cGp_TEXTVARLTH+1]; /* analysts initials save storage */
5037
5038        /* executable code */
5039
5040        /* string length check has been done in the inital GpReadParfile already */
5041
5042        /* get name of parameter file */
5043        env = (char *)getenv( "SH_USER_PARAM" );
5044        if  (env == NULL)  {
5045                env = (char *)getenv( "SH_INPUTS" );
5046                if  (env == NULL)  {
5047                        fprintf( stderr, "SHM: this cannot happen, SH_INPUTS not defined\n" );
5048                        exit( 1 );
5049                } /*endif*/
5050                strcpy( parfile, env );
5051                strcat( parfile, "/shm-config.txt" );
5052        } else {
5053                strcpy( parfile, env );
5054        } /*endif*/
5055
5056        /* create edit command and execute it */
5057        if  (strlen(GpGetString(cGpS_texteditor))+strlen(parfile)+1 > cBcLongStrLth) {
5058                fprintf( stderr, "not very likely: edit command for parameter file too long\n" );
5059                exit( 1 );
5060        } /*endif*/
5061        strcpy( editcmd, GpGetString(cGpS_texteditor) );
5062        strcat( editcmd, " " );
5063        strcat( editcmd, parfile );
5064        system( editcmd );
5065
5066        /* read possibly modified parameter file */
5067        strcpy( analyst_save, GpGetString(cGpS_analyst) );
5068        GpReadParfile();
5069        GpSetString( cGpS_analyst, analyst_save, NULL );
5070
5071} /* end of xm_call_configure */
5072
5073
5074
5075/*--------------------------------------------------------------------------*/
5076
5077
5078
5079static void xm_fetch_widgets( void )
5080
5081/* fetches all widgets
5082 *
5083 * no parameters
5084 */
5085{
5086        /* local variables */
5087        MrmType  wc_main;                /* main window class */
5088        MrmType  wc_cmd;                 /* command box class */
5089        MrmType  wc_draw;                /* drawing area class */
5090        MrmType  wc_grsn;                /* read grsn class */
5091        MrmType  wc_single;              /* single draw class */
5092        MrmType  wc_phase;               /* phase box class */
5093        MrmType  wc_param;               /* parameter box class */
5094        MrmType  class;                  /* class of widget */
5095
5096        /* executable code */
5097
5098        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "fetching widgets ...\n" );
5099        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[main]" );
5100        if  (MrmFetchWidget(xmv_hier,"window_main",xmv_appshell,
5101                &xmv_w[k_widget_main],&wc_main) != MrmSUCCESS)  {
5102                fprintf( stderr, "*SHM: can't fetch top level widget\n" );
5103        } /*endif*/
5104        XtManageChild( xmv_w[k_widget_main] );
5105
5106        XtRealizeWidget( xmv_appshell );
5107
5108        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[single]" );
5109        if  (MrmFetchWidget(xmv_hier,"single_trace_box",xmv_appshell,
5110                xmv_w+k_widget_single_draw_box,&wc_single) != MrmSUCCESS)  {
5111                fprintf( stderr, "*SHM: can't fetch single_draw widget\n" );
5112        } /*endif*/
5113        XtManageChild( xmv_w[k_widget_single_draw_box] );
5114
5115        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[command]" );
5116        if  (MrmFetchWidget(xmv_hier,"command_box",xmv_appshell,
5117                xmv_w+k_widget_command_box,&wc_cmd) != MrmSUCCESS)  {
5118                fprintf( stderr, "*SHM: can't fetch command widget\n" );
5119        } /*endif*/
5120
5121        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[read_dialog]" );
5122        if  (MrmFetchWidget(xmv_hier,"read_grsn_box",xmv_appshell,
5123                xmv_w+k_widget_read_grsn,&wc_grsn) != MrmSUCCESS)  {
5124                fprintf( stderr, "*SHM: can't fetch read-grsn widget\n" );
5125        } /*endif*/
5126
5127        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[calibration]" );
5128        if  (MrmFetchWidget(xmv_hier,"calibration_window_box",xmv_appshell,
5129                xmv_w+k_widget_calibration_box,&class) != MrmSUCCESS)  {
5130                fprintf( stderr, "*SHM: can't fetch calibration_window_box widget\n" );
5131        } /*endif*/
5132
5133        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[spectrum]" );
5134        if  (MrmFetchWidget(xmv_hier,"spectrum_window_box",xmv_appshell,
5135                xmv_w+k_widget_spectrum_box,&class) != MrmSUCCESS)  {
5136                fprintf( stderr, "*SHM: can't fetch spectrum_window_box widget\n" );
5137        } /*endif*/
5138
5139        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[pmotion]" );
5140        if  (MrmFetchWidget(xmv_hier,"pmotion_window_box",xmv_appshell,
5141                xmv_w+k_widget_pmotion_box,&class) != MrmSUCCESS)  {
5142                fprintf( stderr, "*SHM: can't fetch pmotion_window_box widget\n" );
5143        } /*endif*/
5144
5145        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[polarfil]" );
5146        if  (MrmFetchWidget(xmv_hier,"polarfil_window_box",xmv_appshell,
5147                xmv_w+k_widget_polarfil_box,&class) != MrmSUCCESS)  {
5148                fprintf( stderr, "*SHM: can't fetch polarfil_window_box widget\n" );
5149        } /*endif*/
5150
5151        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[phase_box]" );
5152        if  (MrmFetchWidget(xmv_hier,"phase_box",xmv_appshell,
5153                xmv_w+k_widget_phase_box,&wc_phase) != MrmSUCCESS)  {
5154                fprintf( stderr, "*SHM: can't fetch phase_box widget\n" );
5155        } /*endif*/
5156
5157        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[parbox]" );
5158        if  (MrmFetchWidget(xmv_hier,"parameter_box",xmv_appshell,
5159                xmv_w+k_widget_param_box,&wc_param) != MrmSUCCESS)  {
5160                fprintf( stderr, "*SHM: can't fetch param_box widget\n" );
5161        } /*endif*/
5162
5163        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[filter]" );
5164        if  (MrmFetchWidget(xmv_hier,"filter_selection_box",xmv_appshell,
5165                xmv_w+k_widget_filter_box,&class) != MrmSUCCESS)  {
5166                fprintf( stderr, "*SHM: can't fetch filter_box widget\n" );
5167        } /*endif*/
5168
5169        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[alert]" );
5170        if  (MrmFetchWidget(xmv_hier,"alert_box",xmv_appshell,
5171                xmv_w+k_widget_alert_box,&class) != MrmSUCCESS)  {
5172                fprintf( stderr, "*SHM: can't fetch alert_box widget\n" );
5173        } /*endif*/
5174
5175        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[multipli]" );
5176        if  (MrmFetchWidget(xmv_hier,"multiplication_box",xmv_appshell,
5177                xmv_w+k_widget_multiplication_box,&class) != MrmSUCCESS)  {
5178                fprintf( stderr, "*SHM: can't fetch multiplication_box widget\n" );
5179        } /*endif*/
5180
5181#ifdef XXX
5182        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[hypoe]" );
5183        if  (MrmFetchWidget(xmv_hier,"hypoellipse_box",xmv_appshell,
5184                xmv_w+k_widget_hypoellipse_box,&class) != MrmSUCCESS)  {
5185                fprintf( stderr, "*SHM: can't fetch hypoellipse_box widget\n" );
5186        } /*endif*/
5187#endif
5188
5189        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[locsat]" );
5190        if  (MrmFetchWidget(xmv_hier,"locsat_box",xmv_appshell,
5191                xmv_w+k_widget_locsat_box,&class) != MrmSUCCESS)  {
5192                fprintf( stderr, "*SHM: can't fetch locsat_box widget\n" );
5193        } /*endif*/
5194
5195        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[onsetpick]" );
5196        if  (MrmFetchWidget(xmv_hier,"onsetpick_box",xmv_appshell,
5197                xmv_w+k_widget_opick_box,&class) != MrmSUCCESS)  {
5198                fprintf( stderr, "*SHM: can't fetch onsetpick_box widget\n" );
5199        } /*endif*/
5200
5201        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[infosource]" );
5202        if  (MrmFetchWidget(xmv_hier,"infsource_box",xmv_appshell,
5203                xmv_w+k_widget_infsource_box,&class) != MrmSUCCESS)  {
5204                fprintf( stderr, "*SHM: can't fetch infsource_box widget\n" );
5205        } /*endif*/
5206
5207        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[fk_input]" );
5208        if  (MrmFetchWidget(xmv_hier,"fk_input_box",xmv_appshell,
5209                xmv_w+k_widget_fk_box,&class) != MrmSUCCESS)  {
5210                fprintf( stderr, "*SHM: can't fetch fk_input_box widget\n" );
5211        } /*endif*/
5212
5213        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[theo_phase]" );
5214        if  (MrmFetchWidget(xmv_hier,"theo_phase_box",xmv_appshell,
5215                xmv_w+k_widget_theo_phase_box,&class) != MrmSUCCESS)  {
5216                fprintf( stderr, "*SHM: can't fetch theo_phase_box widget\n" );
5217        } /*endif*/
5218
5219        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[help_box]" );
5220        if  (MrmFetchWidget(xmv_hier,"help_box",xmv_appshell,
5221                xmv_w+k_widget_help_box,&class) != MrmSUCCESS)  {
5222                fprintf( stderr, "*SHM: can't fetch help_box widget\n" );
5223        } /*endif*/
5224
5225        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[speccmd_box]" );
5226        if  (MrmFetchWidget(xmv_hier,"speccmd_box",xmv_appshell,
5227                xmv_w+k_widget_speccmd_box,&class) != MrmSUCCESS)  {
5228                fprintf( stderr, "*SHM: can't fetch speccmd_box widget\n" );
5229        } /*endif*/
5230
5231        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[vespa_input_box]" );
5232        if  (MrmFetchWidget(xmv_hier,"vespa_input_box",xmv_appshell,
5233                xmv_w+k_widget_vespa_input_box,&class) != MrmSUCCESS)  {
5234                fprintf( stderr, "*SHM: can't fetch vespa_input_box widget\n" );
5235        } /*endif*/
5236
5237        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[setup_box]" );
5238        if  (MrmFetchWidget(xmv_hier,"setup_box",xmv_appshell,
5239                xmv_w+k_widget_setup_box,&class) != MrmSUCCESS)  {
5240                fprintf( stderr, "*SHM: can't fetch setup_box widget\n" );
5241        } /*endif*/
5242
5243        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[refstat_box]" );
5244        if  (MrmFetchWidget(xmv_hier,"refstation_box",xmv_appshell,
5245                xmv_w+k_widget_refstat_box,&class) != MrmSUCCESS)  {
5246                fprintf( stderr, "*SHM: can't fetch refstat_box widget\n" );
5247        } /*endif*/
5248
5249        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[event_attrib_box]" );
5250        if  (MrmFetchWidget(xmv_hier,"event_attrib_box",xmv_appshell,
5251                xmv_w+k_widget_event_attrib_box,&class) != MrmSUCCESS)  {
5252                fprintf( stderr, "*SHM: can't fetch event_attrib_box widget\n" );
5253        } /*endif*/
5254
5255        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[spcsetup_box]" );
5256        if  (MrmFetchWidget(xmv_hier,"spcsetup_box",xmv_appshell,
5257                xmv_w+k_widget_spcsetup_box,&class) != MrmSUCCESS)  {
5258                fprintf( stderr, "*SHM: can't fetch spcsetup_box widget\n" );
5259        } /*endif*/
5260
5261        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[adrm_request]" );
5262        if  (MrmFetchWidget(xmv_hier,"adrm_selection_box",xmv_appshell,
5263                xmv_w+k_widget_adrm_selection_box,&class) != MrmSUCCESS)  {
5264                fprintf( stderr, "*SHM: can't fetch adrm_selection_box widget\n" );
5265        } /*endif*/
5266
5267        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "[add_plugin]" );
5268        if  (MrmFetchWidget(xmv_hier,"add_plugin_box",xmv_appshell,
5269                xmv_w+k_widget_add_plugin_box,&class) != MrmSUCCESS)  {
5270                fprintf( stderr, "*SHM: can't fetch add_plugin_box widget\n" );
5271        } /*endif*/
5272
5273        if  (GpGetInt(cGpI_debug_level) > 1)  printf( "\n" );
5274
5275} /* end of xm_fetch_widgets */
5276
5277
5278
5279/*--------------------------------------------------------------------------*/
5280
5281
5282
5283void xm_set_processing_state( int state )
5284
5285/* Sets processing state, controls Read Again and Read New,
5286 * Enables/Disabled Quit
5287 *
5288 * parameters if routine
5289 * int        state;     input; new state
5290 */
5291{
5292        /* local variables */
5293        static int  last_state=CUC_PARSTATE_UNDEFINED;     /* last status */
5294
5295        /* executable code */
5296
5297        if  (state == last_state)  return;
5298
5299        if  (state == CUC_PARSTATE_INITIAL)  {
5300                XtSetSensitive( xmv_w[k_widget_read_grsn_read_again], TRUE );
5301                XtSetSensitive( xmv_w[k_widget_read_grsn_read_new], TRUE );
5302                XtSetSensitive( xmv_w[k_widget_button_quit], TRUE );
5303                xmv_par.state = CUC_PARSTATE_INITIAL;
5304        } else if  (state == CUC_PARSTATE_FINAL)  {
5305                XtSetSensitive( xmv_w[k_widget_read_grsn_read_again], FALSE );
5306                XtSetSensitive( xmv_w[k_widget_read_grsn_read_new], TRUE );
5307                XtSetSensitive( xmv_w[k_widget_button_quit], TRUE );
5308                xmv_par.state = CUC_PARSTATE_INITIAL;
5309        } else {
5310                XtSetSensitive( xmv_w[k_widget_read_grsn_read_again], TRUE );
5311                XtSetSensitive( xmv_w[k_widget_read_grsn_read_new], FALSE );
5312                XtSetSensitive( xmv_w[k_widget_button_quit], FALSE );
5313                xmv_par.state = CUC_PARSTATE_PROCESS;
5314        } /*endif*/
5315
5316        last_state = state;
5317
5318} /* end of xm_set_read_state */
5319
5320
5321
5322/*--------------------------------------------------------------------------*/
5323
5324
5325
5326void xm_set_x_resources( Display *display )
5327
5328/* Sets X resources to user defined colours
5329 *
5330 * no parameters passed
5331 */
5332{
5333        /* local variables */
5334        static XrmDatabase xrm_database;          /* X resource database */
5335        char     col0[cBcShortStrLth+1];          /* background colour 0 */
5336        char     col1[cBcShortStrLth+1];          /* background colour 1 */
5337        char     col2[cBcShortStrLth+1];          /* background colour 2 */
5338        char     fg[cBcShortStrLth+1];            /* foreground colour 2 */
5339
5340        /* executable code */
5341
5342        strcpy( col0, "#F7DEBD" );
5343        strcpy( col1, "#F2B16E" );
5344        strcpy( col2, "#63282A" );
5345        strcpy( fg,   "#63282A" );
5346
5347        /* dialog foreground */
5348        fg[0] = '#';
5349        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_fg_red),   fg+1, fg+2 );
5350        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_fg_green), fg+3, fg+4 );
5351        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_fg_blue),  fg+5, fg+6 );
5352        fg[7] = '\0';
5353
5354        /* dialog background 0 (bright) */
5355        col0[0] = '#';
5356        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg0_red),   col0+1, col0+2 );
5357        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg0_green), col0+3, col0+4 );
5358        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg0_blue),  col0+5, col0+6 );
5359        col0[7] = '\0';
5360
5361        /* dialog background 1 (middle) */
5362        col1[0] = '#';
5363        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg1_red),   col1+1, col1+2 );
5364        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg1_green), col1+3, col1+4 );
5365        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg1_blue),  col1+5, col1+6 );
5366        col1[7] = '\0';
5367
5368        /* dialog background 2 (dark) */
5369        col2[0] = '#';
5370        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg2_red),   col2+1, col2+2 );
5371        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg2_green), col2+3, col2+4 );
5372        xm_hex_colour( GpGetFloat(cGpF_colour_dialog_bg2_blue),  col2+5, col2+6 );
5373        col2[7] = '\0';
5374
5375        xrm_database = XtDatabase( display );
5376        XrmPutStringResource( &xrm_database, "SHM*background", col0 );
5377        XrmPutStringResource( &xrm_database, "SHM*foreground", fg );
5378        XrmPutStringResource( &xrm_database, "SHM*borderColor", col0 );
5379        XrmPutStringResource( &xrm_database, "SHM*XmBulletinBoard.background", col1 );
5380        XrmPutStringResource( &xrm_database, "SHM*XmRowColumn.background", col1 );
5381        XrmPutStringResource( &xrm_database, "SHM*XmForm.background", col1 );
5382        XrmPutStringResource( &xrm_database, "SHM*XmToggleButton.background", col1 );
5383        XrmPutStringResource( &xrm_database, "SHM*XmPushButton.background", col0 );
5384        XrmPutStringResource( &xrm_database, "SHM*XmLabel.background", col1 );
5385        XrmPutStringResource( &xrm_database, "SHM*XmScale.background", col1 );
5386        XrmPutStringResource( &xrm_database, "SHM*XmCommand.background", col1 );
5387        /*XrmPutStringResource( &xrm_database, "SHM*XmOptionMenu.background", col1 );*/
5388
5389        XrmPutStringResource( &xrm_database, "SHM*read_grsn_main_button_box.background", col2 );
5390        XrmPutStringResource( &xrm_database, "SHM*read_grsn_box.background", col2 );
5391        XrmPutStringResource( &xrm_database, "SHM*add_plugin_box.background", col2 );
5392        XrmPutStringResource( &xrm_database, "SHM*plugin_main_button_box.background", col2 );
5393        XrmPutStringResource( &xrm_database, "SHM*analyst_box.background", col2 );
5394        XrmPutStringResource( &xrm_database, "SHM*analyst_main_button_box.background", col2 );
5395        XrmPutStringResource( &xrm_database, "SHM*adrm_selection_box.background", col2 );
5396        XrmPutStringResource( &xrm_database, "SHM*adrm_main_button_box.background", col2 );
5397        XrmPutStringResource( &xrm_database, "SHM*event_attrib_box.background", col2 );
5398        XrmPutStringResource( &xrm_database, "SHM*attrib_main_button_box.background", col2 );
5399        XrmPutStringResource( &xrm_database, "SHM*filter_selection_box.background", col2 );
5400        XrmPutStringResource( &xrm_database, "SHM*filter_main_button_box.background", col2 );
5401        XrmPutStringResource( &xrm_database, "SHM*fk_input_box.background", col2 );
5402        XrmPutStringResource( &xrm_database, "SHM*fk_main_button_box.background", col2 );
5403        XrmPutStringResource( &xrm_database, "SHM*infsource_box.background", col2 );
5404        XrmPutStringResource( &xrm_database, "SHM*infsource_main_button_box.background", col2 );
5405        XrmPutStringResource( &xrm_database, "SHM*locsat_box.background", col2 );
5406        XrmPutStringResource( &xrm_database, "SHM*locsat_main_button_box.background", col2 );
5407        XrmPutStringResource( &xrm_database, "SHM*multiplication_box.background", col2 );
5408        XrmPutStringResource( &xrm_database, "SHM*multipli_default_box.background", col2 );
5409        XrmPutStringResource( &xrm_database, "SHM*onsetpick_box.background", col2 );
5410        XrmPutStringResource( &xrm_database, "SHM*opick_main_button_box.background", col2 );
5411        XrmPutStringResource( &xrm_database, "SHM*parameter_box.background", col2 );
5412        XrmPutStringResource( &xrm_database, "SHM*param_main_button_box1.background", col2 );
5413        XrmPutStringResource( &xrm_database, "SHM*phase_box.background", col2 );
5414        XrmPutStringResource( &xrm_database, "SHM*phase_main_button_box.background", col2 );
5415        XrmPutStringResource( &xrm_database, "SHM*refstation_box.background", col2 );
5416        XrmPutStringResource( &xrm_database, "SHM*refstat_main_button_box.background", col2 );
5417        XrmPutStringResource( &xrm_database, "SHM*setup_box.background", col2 );
5418        XrmPutStringResource( &xrm_database, "SHM*setup_main_button_box.background", col2 );
5419        XrmPutStringResource( &xrm_database, "SHM*spcsetup_box.background", col2 );
5420        XrmPutStringResource( &xrm_database, "SHM*spcsetup_main_button_box.background", col2 );
5421        XrmPutStringResource( &xrm_database, "SHM*speccmd_box.background", col2 );
5422        XrmPutStringResource( &xrm_database, "SHM*speccmd_main_button_box.background", col2 );
5423        XrmPutStringResource( &xrm_database, "SHM*theo_phase_box.background", col2 );
5424        XrmPutStringResource( &xrm_database, "SHM*theo_phase_main_button_box.background", col2 );
5425        XrmPutStringResource( &xrm_database, "SHM*vespa_input_box.background", col2 );
5426        XrmPutStringResource( &xrm_database, "SHM*vespa_main_button_box.background", col2 );
5427        XrmPutStringResource( &xrm_database, "SHM*menu_main.background", col0 );
5428        XrmPutStringResource( &xrm_database, "SHM*menu_calibration.background", col0 );
5429        XrmPutStringResource( &xrm_database, "SHM*menu_spectrum.background", col0 );
5430
5431} /* end of xm_set_x_resources */
5432
5433
5434
5435/*--------------------------------------------------------------------------*/
5436
5437
5438
5439void xm_hex_colour( float col, char *a, char *b )
5440
5441/* returns hex code (2 chars) of colour coding
5442 *
5443 * parameters of routine
5444 * int        col;       input; colour part (R or G or B) between 0.0 and 1.0
5445 * char       *a, *b;    output; two single characters (byte hexcode)
5446 */
5447{
5448        /* local variables */
5449        int      val;        /* value */
5450        int      nibble;     /* nibble value */
5451
5452        /* executable code */
5453
5454        val = Nint(col * 255.0);
5455
5456        /* hi nibble */
5457        nibble = (val >> 4) & 0x000F;
5458        if  (nibble < 10)  {
5459                *a = '0' + (char)nibble;
5460        } else {
5461                *a = 'A' + (char)(nibble-10);
5462        } /*endif*/
5463
5464        /* lo nibble */
5465        nibble = val & 0x000F;
5466        if  (nibble < 10)  {
5467                *b = '0' + (char)nibble;
5468        } else {
5469                *b = 'A' + (char)(nibble-10);
5470        } /*endif*/
5471
5472} /* end of xm_hex_colour */
5473
5474
5475
5476/*--------------------------------------------------------------------------*/
5477
5478
5479
5480void xm_move_drag_window( int key_entry )
5481
5482/* moves drag window after arrow keys
5483 *
5484 * parameters of routine
5485 * int        key_entry;    input; which key pressed
5486 */
5487{
5488        /* local variables */
5489        int      x1, y1, x2, y2;   /* position of drag box */
5490        TSyBoolean valid;          /* drag box on? */
5491        int      x, y;             /* new position */
5492        int      tmp;              /* scratch */
5493        float    reltime;          /* trace time (not used here) */
5494        int      trcno;            /* trace number (not used here) */
5495        TSyStatus status;          /* return status */
5496
5497        /* executable code */
5498
5499        status = cBcNoError;
5500
5501        mg_get_last_drag_box( &valid, &x1, &y1, &x2, &y2 );
5502        if  (!valid)  return;
5503
5504        /* compute new drag box position */
5505        x = (x1+x2)/2;
5506        y = (y1+y2)/2;
5507        if  (key_entry == k_entry_key_arrow_left)  {
5508                tmp = x2 - x1;
5509                if  (tmp < 0)  tmp = -tmp;
5510                tmp /= 5;
5511                if  (tmp == 0)  tmp = 1;
5512                x -= tmp;
5513        } else if  (key_entry == k_entry_key_arrow_right)  {
5514                tmp = x2 - x1;
5515                if  (tmp < 0)  tmp = -tmp;
5516                tmp /= 5;
5517                if  (tmp == 0)  tmp = 1;
5518                x += tmp;
5519        } else if  (key_entry == k_entry_key_arrow_up)  {
5520                tmp = y2 - y1;
5521                if  (tmp < 0)  tmp = -tmp;
5522                y -= tmp;
5523        } else {
5524                tmp = y2 - y1;
5525                if  (tmp < 0)  tmp = -tmp;
5526                y += tmp;
5527        } /*endif*/
5528
5529        /* check if new position is still within traces */
5530        mg_get_time_and_trace( x, y, &reltime, &trcno, &valid );
5531        if  (!valid)  return;
5532
5533        if  (!XtIsManaged(xmv_w[k_widget_single_draw_box]))
5534                XtManageChild( xmv_w[k_widget_single_draw_box] );
5535        mg_do_drag( xmv_w[k_widget_draw], MGC_DRAG_START, x, y );
5536        mg_do_drag( xmv_w[k_widget_draw], MGC_DRAG_CONTINUE, x, y );
5537        mg_plot_drag_window( xmv_w[k_widget_single_draw],
5538                xmv_onset_acc==CUC_ACCURACY_DISPLAY, &status );
5539        if  (Severe(&status))  cu_alert( status );
5540        if  (xmv_pm_on)  pmm_draw_pmotion( xmv_dspctrl.zoom );
5541        if  (xmv_polar_on)  pol_draw_poltraces( xmv_dspctrl.zoom, &status );
5542        if  (Severe(&status))  cu_alert( status );
5543
5544} /* end of xm_move_drag_window */
5545
5546
5547
5548/*--------------------------------------------------------------------------*/
Note: See TracBrowser for help on using the repository browser.