1 /*
2  * Xgraph parameters
3  */
4 
5 #ifndef _PARAMS_H_
6 #define _PARAMS_H_
7 
8 #include "xgraph.h"
9 
10 /* If you have an ANSI compiler,  some checking will be done */
11 #ifdef __STDC__
12 #define DECLARE(func, rtn, args)	extern rtn func args
13 #else
14 #define DECLARE(func, rtn, args)	extern rtn func ()
15 #endif
16 
17 typedef enum param_types_defn {
18     INT, STR, PIXEL, FONT, STYLE, BOOL, DBL
19 } param_types;
20 
21 typedef struct params_int_defn {
22     param_types type;		/* INT */
23     int value;
24 } param_int;
25 
26 typedef struct params_str_defn {
27     param_types type;		/* STR */
28     char *value;
29 } param_str;
30 
31 typedef struct params_pix_defn {
32     param_types type;		/* PIXEL */
33     XColor value;
34 } param_pix;
35 
36 typedef struct params_font_defn {
37     param_types type;		/* FONT */
38     XFontStruct *value;
39 } param_font;
40 
41 typedef struct params_style_defn {
42     param_types type;		/* STYLE */
43     int len;
44     char *dash_list;
45 } param_style;
46 
47 typedef struct params_bool_defn {
48     param_types type;		/* BOOL */
49     int value;
50 } param_bool;
51 
52 typedef struct params_dbl_defn {
53     param_types type;		/* DBL */
54     double value;
55 } param_dbl;
56 
57 typedef union params_defn {
58     param_types type;
59     param_int intv;		/* INT */
60     param_str strv;		/* STR */
61     param_pix pixv;		/* PIXEL */
62     param_font fontv;		/* FONT */
63     param_style stylev;		/* STYLE */
64     param_bool boolv;		/* BOOL */
65     param_dbl dblv;		/* DBL */
66 } params;
67 
68 DECLARE(param_init, void, (Display *disp, Colormap cmap));
69 DECLARE(param_set, void, (char *name, param_types type, char *val));
70 DECLARE(param_reset, void, (char *name, char *val));
71 DECLARE(param_get, params *, (char *name, params *val));
72 DECLARE(param_dump, void, ());
73 
74 #ifndef __CYGWIN__
75 DECLARE(stricmp, int, (char *a, char *b));
76 #endif
77 
78 /* Some convenience macros */
79 
80 extern params param_temp, *param_temp_ptr;
81 extern XColor param_null_color;
82 extern param_style param_null_style;
83 
84 #define PM_INT(name)	\
85 ((param_temp_ptr = param_get(name, &param_temp)) ? \
86  param_temp_ptr->intv.value : \
87  (abort(), (int) 0))
88 
89 #define PM_STR(name)	\
90 ((param_temp_ptr = param_get(name, &param_temp)) ? \
91  param_temp_ptr->strv.value : \
92  (abort(), (char *) 0))
93 
94 #define PM_COLOR(name)	\
95 ((param_temp_ptr = param_get(name, &param_temp)) ? \
96  param_temp_ptr->pixv.value : \
97  (abort(), param_null_color))
98 
99 #define PM_PIXEL(name)	\
100 ((param_temp_ptr = param_get(name, &param_temp)) ? \
101  param_temp_ptr->pixv.value.pixel : \
102  (abort(), (Pixel) 0))
103 
104 #define PM_FONT(name)	\
105 ((param_temp_ptr = param_get(name, &param_temp)) ? \
106  param_temp_ptr->fontv.value : \
107  (abort(), (XFontStruct *) 0))
108 
109 #define PM_STYLE(name)	\
110 ((param_temp_ptr = param_get(name, &param_temp)) ? \
111  param_temp_ptr->stylev : \
112  (abort(), param_null_style))
113 
114 #define PM_BOOL(name)	\
115 ((param_temp_ptr = param_get(name, &param_temp)) ? \
116  param_temp_ptr->boolv.value : \
117  (abort(), 0))
118 
119 #define PM_DBL(name)	\
120 ((param_temp_ptr = param_get(name, &param_temp)) ? \
121  param_temp_ptr->dblv.value : \
122  (abort(), 0.0))
123 
124 
125 #endif /* _PARAMS_H_ */
126