added utils_par
[gpiv.git] / src / utils_par.c
blobb5353acfa0e3db5b876329568f1fc782225f4c7c
1 /* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 c-style: "K&R" -*- */
3 /*----------------------------------------------------------------------
5 gpiv - Graphic program for Particle Image Velocimetry, based on gtk/gnome
6 libraries.
8 Copyright (C) 2002 Gerber van der Graaf
10 This file is part of gpiv.
12 Gpiv is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
14 the Free Software Foundation; either version 2, or (at your option)
15 any later version.
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software Foundation,
24 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26 ----------------------------------------------------------------------*/
29 * utility functions for gpiv
30 * $Log: utils_par.c,v $
31 * Revision 1.1 2008-09-16 11:24:37 gerber
32 * added utils_par
37 #include "gpiv_gui.h"
38 #include "utils_par.h"
42 * Prottyping
44 static void
45 set_par_bool_ifdiff (gboolean *val_src,
46 gboolean *val_dest,
47 gboolean *set_dest);
49 static void
50 set_par_int_ifdiff (gint *val_src,
51 gint *val_dest,
52 gboolean *set_dest);
54 static void
55 print_par_bool (gchar *parname,
56 gboolean val,
57 gboolean set);
59 static void
60 print_par_int (gchar *parname,
61 gint val,
62 gboolean set);
64 static void
65 par_ovwrt_parameters (Par *par_src,
66 Par *par_dest,
67 gboolean force);
71 * Program-wide public functions
73 void
74 parameters_set (Par *par,
75 gboolean bool
77 /*-----------------------------------------------------------------------------
78 * Defines each parameter member of par_dest->*__set to bool
82 par->img_fmt__set = bool;
83 par->hdf__set = bool;
84 par->print_par__set = bool;
85 par->verbose__set = bool;
86 par->x_corr__set = bool;
87 par->console__show_tooltips__set = bool;
88 par->console__view_tabulator__set = bool;
89 par->console__view_gpivbuttons__set = bool;
90 par->console__nbins__set = bool;
92 #ifdef ENABLE_CAM
93 par->process__cam = bool;
94 #endif /* ENABLE_CAM */
96 #ifdef ENABLE_TRIG
97 par->process__trig = bool;
98 #endif /* ENABLE_DAC */
100 #ifdef ENABLE_IMGPROC
101 par->process__imgproc = bool;
102 #endif /* ENABLE_IMGPROC */
104 par->process__piv = bool;
105 par->process__gradient = bool;
106 par->process__resstats = bool;
107 par->process__errvec = bool;
108 par->process__peaklock = bool;
109 par->process__scale = bool;
110 par->process__average = bool;
111 par->process__subtract = bool;
112 par->process__vorstra = bool;
113 par->display__view_menubar = bool;
114 par->display__view_rulers = bool;
115 par->display__stretch_auto = bool;
116 par->display__vector_scale = bool;
117 par->display__vector_color = bool;
118 par->display__zoom_index = bool;
119 par->display__backgrnd__set = bool;
120 par->display__intregs = bool;
121 par->display__piv = bool;
122 par->display__scalar__set = bool;
127 void
128 set_parameters_ifdiff (Par *par_src,
129 Par *par_dest
131 /*-----------------------------------------------------------------------------
132 * Defines each parameter member of par_dest->*__set to TRUE if par_src differs
136 set_par_int_ifdiff ((int *) &par_src->img_fmt,
137 (int *) &par_dest->img_fmt,
138 &par_dest->img_fmt__set);
140 set_par_bool_ifdiff (&par_src->hdf,
141 &par_dest->hdf,
142 &par_dest->hdf__set);
144 set_par_bool_ifdiff (&par_src->print_par,
145 &par_dest->print_par,
146 &par_dest->print_par__set);
148 set_par_bool_ifdiff (&par_src->verbose,
149 &par_dest->verbose,
150 &par_dest->verbose__set);
152 set_par_bool_ifdiff (&par_src->x_corr,
153 &par_dest->x_corr,
154 &par_dest->x_corr__set);
156 set_par_bool_ifdiff (&par_src->console__show_tooltips,
157 &par_dest->console__show_tooltips,
158 &par_dest->console__show_tooltips__set);
160 set_par_bool_ifdiff (&par_src->console__view_tabulator,
161 &par_dest->console__view_tabulator,
162 &par_dest->console__view_tabulator__set);
164 set_par_bool_ifdiff (&par_src->console__view_gpivbuttons,
165 &par_dest->console__view_gpivbuttons,
166 &par_dest->console__view_gpivbuttons__set);
168 set_par_int_ifdiff (&par_src->console__nbins,
169 &par_dest->console__nbins,
170 &par_dest->console__nbins__set);
172 #ifdef ENABLE_CAM
173 set_par_bool_ifdiff (&par_src->process__cam,
174 &par_dest->process__cam,
175 &par_dest->process__cam__set);
176 #endif /* ENABLE_CAM */
178 #ifdef ENABLE_TRIG
179 set_par_bool_ifdiff (&par_src->process__trig,
180 &par_dest->process__trig,
181 &par_dest->process__trig__set);
182 #endif /* ENABLE_DAC */
184 #ifdef ENABLE_IMGPROC
185 set_par_bool_ifdiff (&par_src->process__imgproc,
186 &par_dest->process__imgproc,
187 &par_dest->process__imgproc__set);
188 #endif /* ENABLE_IMGPROC */
190 set_par_bool_ifdiff (&par_src->process__piv,
191 &par_dest->process__piv,
192 &par_dest->process__piv__set);
194 set_par_bool_ifdiff (&par_src->process__gradient,
195 &par_dest->process__gradient,
196 &par_dest->process__gradient__set);
198 set_par_bool_ifdiff (&par_src->process__resstats,
199 &par_dest->process__resstats,
200 &par_dest->process__resstats__set);
202 set_par_bool_ifdiff (&par_src->process__errvec,
203 &par_dest->process__errvec,
204 &par_dest->process__errvec__set);
206 set_par_bool_ifdiff (&par_src->process__peaklock,
207 &par_dest->process__peaklock,
208 &par_dest->process__peaklock__set);
211 set_par_bool_ifdiff (&par_src->process__scale,
212 &par_dest->process__scale,
213 &par_dest->process__scale__set);
216 set_par_bool_ifdiff (&par_src->process__average,
217 &par_dest->process__average,
218 &par_dest->process__average__set);
221 set_par_bool_ifdiff (&par_src->process__subtract,
222 &par_dest->process__subtract,
223 &par_dest->process__subtract__set);
226 set_par_bool_ifdiff (&par_src->process__vorstra,
227 &par_dest->process__vorstra,
228 &par_dest->process__vorstra__set);
231 set_par_bool_ifdiff (&par_src->display__view_menubar,
232 &par_dest->display__view_menubar,
233 &par_dest->display__view_menubar__set);
236 set_par_bool_ifdiff (&par_src->display__view_rulers,
237 &par_dest->display__view_rulers,
238 &par_dest->display__view_rulers__set);
241 set_par_bool_ifdiff (&par_src->display__stretch_auto,
242 &par_dest->display__stretch_auto,
243 &par_dest->display__stretch_auto__set);
246 set_par_int_ifdiff ((int *) &par_src->display__vector_scale,
247 (int *) &par_dest->display__vector_scale,
248 &par_dest->display__vector_scale__set);
251 set_par_int_ifdiff ((int *) &par_src->display__vector_color,
252 (int *) &par_dest->display__vector_color,
253 &par_dest->display__vector_color__set);
256 set_par_int_ifdiff ((int *) &par_src->display__zoom_index,
257 (int *) &par_dest->display__zoom_index,
258 &par_dest->display__zoom_index__set);
261 set_par_int_ifdiff ((int *) &par_src->display__backgrnd,
262 (int *) &par_dest->display__backgrnd,
263 &par_dest->display__backgrnd__set);
266 set_par_bool_ifdiff (&par_src->display__intregs,
267 &par_dest->display__intregs,
268 &par_dest->display__intregs__set);
271 set_par_bool_ifdiff (&par_src->display__piv,
272 &par_dest->display__piv,
273 &par_dest->display__piv__set);
276 set_par_int_ifdiff ((int *) &par_src->display__scalar,
277 (int *) &par_dest->display__scalar,
278 &par_dest->display__scalar__set);
285 void
286 print_parameters (Par *par
288 /*-----------------------------------------------------------------------------
292 print_par_int ("img_fmt", par->img_fmt,
293 par->img_fmt__set);
295 print_par_bool ("hdf", par->hdf,
296 par->hdf__set);
298 print_par_bool ("print_par", par->print_par,
299 par->print_par__set);
301 print_par_bool ("verbose", par->verbose,
302 par->verbose__set);
304 print_par_bool ("x_corr", par->x_corr,
305 par->x_corr__set);
307 print_par_bool ("console__show_tooltips", par->console__show_tooltips,
308 par->console__show_tooltips__set);
310 print_par_bool ("console__view_tabulator", par->console__view_tabulator,
311 par->console__view_tabulator__set);
313 print_par_bool ("console__view_gpivbuttons", par->console__view_gpivbuttons,
314 par->console__view_gpivbuttons__set);
316 print_par_int ("console__nbins", par->console__nbins,
317 par->console__nbins__set);
319 #ifdef ENABLE_CAM
320 print_par_bool ("process__cam", par->process__cam,
321 par->process__cam__set);
322 #endif /* ENABLE_CAM */
324 #ifdef ENABLE_TRIG
325 print_par_bool ("process__trig", par->process__trig,
326 par->process__trig__set);
327 #endif /* ENABLE_DAC */
329 #ifdef ENABLE_IMGPROC
330 print_par_bool ("process__imgproc", par->process__imgproc,
331 par->process__imgproc__set);
332 #endif /* ENABLE_IMGPROC */
334 print_par_bool ("process__piv", par->process__piv,
335 par->process__piv__set);
337 print_par_bool ("process__gradient", par->process__gradient,
338 par->process__gradient__set);
340 print_par_bool ("process__resstats", par->process__resstats,
341 par->process__resstats__set);
343 print_par_bool ("process__errvec", par->process__errvec,
344 par->process__errvec__set);
346 print_par_bool ("process__peaklock", par->process__peaklock,
347 par->process__peaklock__set);
350 print_par_bool ("process__scale", par->process__scale,
351 par->process__scale__set);
354 print_par_bool ("process__average", par->process__average,
355 par->process__average__set);
358 print_par_bool ("process__subtract", par->process__subtract,
359 par->process__subtract__set);
362 print_par_bool ("process__vorstra", par->process__vorstra,
363 par->process__vorstra__set);
366 print_par_bool ("display__view_menubar", par->display__view_menubar,
367 par->display__view_menubar__set);
370 print_par_bool ("display__view_rulers", par->display__view_rulers,
371 par->display__view_rulers__set);
374 print_par_bool ("display__stretch_auto", par->display__stretch_auto,
375 par->display__stretch_auto__set);
378 print_par_bool ("display__vector_scale", par->display__vector_scale,
379 par->display__vector_scale__set);
382 print_par_bool ("display__vector_color", par->display__vector_color,
383 par->display__vector_color__set);
386 print_par_bool ("display__zoom_index", par->display__zoom_index,
387 par->display__zoom_index__set);
390 print_par_bool ("display__background", par->display__backgrnd,
391 par->display__backgrnd__set);
394 print_par_bool ("display__intregs", par->display__intregs,
395 par->display__intregs__set);
398 print_par_bool ("display__piv", par->display__piv,
399 par->display__piv__set);
402 print_par_bool ("display__scalar", par->display__scalar,
403 par->display__scalar__set);
410 gchar *
411 cp_undef_parameters (Par *par_src,
412 Par *par_dest
414 /*-----------------------------------------------------------------------------
415 * DESCRIPTION:
416 * Copies only those gpiv parameters from src to dest if dest has not
417 * been defined
419 * INPUTS:
420 * par_src: source gpiv parameters
421 * force: flag to force the copying, even if destination
422 * already exists
423 * print_par: verbose output. Not implemented, yet.
425 * OUTPUTS:
426 * par_dest: destination piv parameters
428 * RETURNS:
430 *---------------------------------------------------------------------------*/
432 gchar *err_msg = NULL;
433 gboolean force = FALSE;
436 par_ovwrt_parameters (par_src, par_dest, force);
439 return err_msg;
444 Par *
445 cp_parameters (Par *par_src
447 /*-----------------------------------------------------------------------------
448 * DESCRIPTION:
449 * Copies all gpiv parameters
451 * INPUTS:
452 * par_src: source gpiv parameters
453 * force: flag to force the copying, even if destination
454 * already exists
455 * print_par: verbose output. Not implemented, yet.
457 * OUTPUTS:
458 * par_dest: destination piv parameters
460 * RETURNS:
462 *---------------------------------------------------------------------------*/
464 Par *par_dest = g_new0 (Par, 1);
465 gboolean force = TRUE;
468 par_ovwrt_parameters (par_src, par_dest, force);
471 return par_dest;
476 * Local functions
479 static void
480 set_par_bool_ifdiff (gboolean *val_src,
481 gboolean *val_dest,
482 gboolean *set_dest)
483 /*-----------------------------------------------------------------------------
486 if (*val_src != *val_dest) {
487 *val_dest = *val_src;
488 *set_dest = TRUE;
489 } else {
490 *set_dest = FALSE;
496 static void
497 set_par_int_ifdiff (gint *val_src,
498 gint *val_dest,
499 gboolean *set_dest)
500 /*-----------------------------------------------------------------------------
503 if (*val_src != *val_dest) {
504 *val_dest = *val_src;
505 *set_dest = TRUE;
506 } else {
507 *set_dest = FALSE;
513 static void
514 print_par_bool (gchar *parname,
515 gboolean val,
516 gboolean set)
517 /*-----------------------------------------------------------------------------
520 if (set) {
521 g_message ("%s__set is TRUE", parname);
522 } else {
523 g_message ("%s__set is FALSE", parname);
526 if (val) {
527 g_message ("%s is set to: TRUE", parname);
528 } else {
529 g_message ("%s is set to: FALSE", parname);
534 static void
535 print_par_int (gchar *parname,
536 gint val,
537 gboolean set)
538 /*-----------------------------------------------------------------------------
541 if (set) {
542 g_message ("%s__set is TRUE", parname);
543 } else {
544 g_message ("%s__set is FALSE", parname);
547 g_message ("%s is set to: %d", parname, val);
551 static void
552 par_ovwrt_parameters (Par *par_src,
553 Par *par_dest,
554 gboolean force
556 /*-----------------------------------------------------------------------------
557 * DESCRIPTION:
558 * Copies gpiv parameters
560 * INPUTS:
561 * par_src: source gpiv parameters
562 * par_dest: destination gpiv parameters
563 * force: flag to force the copying, even if destination
564 * already exists
566 * OUTPUTS:
567 * par_dest: destination piv parameters
569 * RETURNS:
571 *---------------------------------------------------------------------------*/
574 if (force
575 || ( par_src->img_fmt__set
576 && !par_dest->img_fmt__set)) {
577 par_dest->img_fmt = par_src->img_fmt;
578 par_dest->img_fmt__set = TRUE;
581 if (force
582 || ( par_src->hdf__set
583 && !par_dest->hdf__set)) {
584 par_dest->hdf = par_src->hdf;
585 par_dest->hdf__set = TRUE;
588 if (force
589 || ( par_src->print_par__set
590 && !par_dest->print_par__set)) {
591 par_dest->print_par = par_src->print_par;
592 par_dest->print_par__set = TRUE;
595 if (force
596 || ( par_src->verbose__set
597 && !par_dest->verbose__set)) {
598 par_dest->verbose = par_src->verbose;
599 par_dest->verbose__set = TRUE;
602 if (force
603 || ( par_src->x_corr__set
604 && !par_dest->x_corr__set)) {
605 par_dest->x_corr = par_src->x_corr;
606 par_dest->x_corr__set = TRUE;
609 if (force
610 || ( par_src->console__show_tooltips__set
611 && !par_dest->console__show_tooltips__set)) {
612 par_dest->console__show_tooltips = par_src->console__show_tooltips;
613 par_dest->console__show_tooltips__set = TRUE;
616 if (force
617 || ( par_src->console__view_tabulator__set
618 && !par_dest->console__view_tabulator__set)) {
619 par_dest->console__view_tabulator = par_src->console__view_tabulator;
620 par_dest->console__view_tabulator__set = TRUE;
623 if (force
624 || ( par_src->console__view_gpivbuttons__set
625 && !par_dest->console__view_gpivbuttons__set)) {
626 par_dest->console__view_gpivbuttons = par_src->console__view_gpivbuttons;
627 par_dest->console__view_gpivbuttons__set = TRUE;
630 if (force
631 || ( par_src->console__nbins__set
632 && !par_dest->console__nbins__set)) {
633 par_dest->console__nbins = par_src->console__nbins;
634 par_dest->console__nbins__set = TRUE;
637 #ifdef ENABLE_CAM
638 if (force
639 || ( par_src->process__cam__set
640 && !par_dest->process__cam__set)) {
641 par_dest->process__cam = par_src->process__cam;
642 par_dest->process__cam__set = TRUE;
644 #endif /* ENABLE_CAM */
646 #ifdef ENABLE_TRIG
647 if (force
648 || ( par_src->process__trig__set
649 && !par_dest->process__trig__set)) {
650 par_dest->process__trig = par_src->process__trig;
651 par_dest->process__trig__set = TRUE;
653 #endif /* ENABLE_DAC */
655 #ifdef ENABLE_IMGPROC
656 if (force
657 || ( par_src->process__imgproc__set
658 && !par_dest->process__imgproc__set)) {
659 par_dest->process__piv = par_src->process__piv;
660 par_dest->process__imgproc__set = TRUE;
662 #endif /* ENABLE_IMGPROC */
664 if (force
665 || ( par_src->process__piv__set
666 && !par_dest->process__piv__set)) {
667 par_dest->process__piv = par_src->process__piv;
668 par_dest->process__piv__set = TRUE;
671 if (force
672 || ( par_src->process__gradient__set
673 && !par_dest->process__gradient__set)) {
674 par_dest->process__gradient = par_src->process__gradient;
675 par_dest->process__gradient__set = TRUE;
678 if (force
679 || ( par_src->process__resstats__set
680 && !par_dest->process__resstats__set)) {
681 par_src->process__resstats = par_dest->process__resstats;
682 par_dest->process__resstats__set = TRUE;
685 if (force
686 || ( par_src->process__errvec__set
687 && !par_dest->process__errvec__set)) {
688 par_dest->process__errvec = par_src->process__errvec;
689 par_dest->process__errvec__set = TRUE;
692 if (force
693 || ( par_src->process__peaklock__set
694 && !par_dest->process__peaklock__set)) {
695 par_dest->process__peaklock = par_src->process__peaklock;
696 par_dest->process__peaklock__set = TRUE;
699 if (force
700 || ( par_src->process__scale__set
701 && !par_dest->process__scale__set)) {
702 par_dest->process__scale = par_src->process__scale;
703 par_dest->process__scale__set = TRUE;
706 if (force
707 || ( par_src->process__average__set
708 && !par_dest->process__average__set)) {
709 par_dest->process__average = par_src->process__average;
710 par_dest->process__average__set = TRUE;
713 if (force
714 || ( par_src->process__subtract__set
715 && !par_dest->process__subtract__set)) {
716 par_dest->process__subtract = par_src->process__subtract;
717 par_dest->process__subtract__set = TRUE;
720 if (force
721 || ( par_src->process__vorstra__set
722 && !par_dest->process__vorstra__set)) {
723 par_dest->process__vorstra = par_src->process__vorstra;
724 par_dest->process__vorstra__set = TRUE;
727 if (force
728 || ( par_src->display__view_menubar__set
729 && !par_dest->display__view_menubar__set)) {
730 par_dest->display__view_menubar = par_src->display__view_menubar;
731 par_dest->display__view_menubar__set = TRUE;
734 if (force
735 || ( par_src->display__view_rulers__set
736 && !par_dest->display__view_rulers__set)) {
737 par_dest->display__view_rulers = par_src->display__view_rulers;
738 par_dest->display__view_rulers__set = TRUE;
741 if (force
742 || ( par_src->display__stretch_auto__set
743 && !par_dest->display__stretch_auto__set)) {
744 par_dest->display__view_rulers = par_src->display__view_rulers;
745 par_dest->display__stretch_auto__set = TRUE;
748 if (force
749 || ( par_src->display__vector_scale__set
750 && !par_dest->display__vector_scale__set)) {
751 par_dest->display__vector_scale = par_src->display__vector_scale;
752 par_dest->display__vector_scale__set = TRUE;
755 if (force
756 || ( par_src->display__vector_color__set
757 && !par_dest->display__vector_color__set)) {
758 par_dest->display__vector_color = par_src->display__vector_color;
759 par_dest->display__vector_color__set = TRUE;
762 if (force
763 || ( par_src->display__zoom_index__set
764 && !par_dest->display__zoom_index__set)) {
765 par_dest->display__zoom_index = par_src->display__zoom_index;
766 par_dest->display__zoom_index__set = TRUE;
769 if (force
770 || ( par_src->display__backgrnd__set
771 && !par_dest->display__backgrnd__set)) {
772 par_dest->display__backgrnd = par_src->display__backgrnd;
773 par_dest->display__backgrnd__set = TRUE;
776 if (force
777 || ( par_src->display__intregs__set
778 && !par_dest->display__intregs__set)) {
779 par_dest->display__intregs = par_src->display__intregs;
780 par_dest->display__intregs__set = TRUE;
783 if (force
784 || ( par_src->display__piv__set
785 && !par_dest->display__piv__set)) {
786 par_dest->display__piv = par_src->display__piv;
787 par_dest->display__piv__set = TRUE;
790 if (force
791 || ( par_src->display__scalar__set
792 && !par_dest->display__scalar__set)) {
793 par_dest->display__scalar = par_src->display__scalar;
794 par_dest->display__scalar__set = TRUE;