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

Revision 77, 197.7 KB checked in by marcus, 15 years ago (diff)

r60 | svn | 2008-11-09 15:51:25 +0100 (So, 09 Nov 2008) | 1 line

changed version number in shm

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