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, ¶m_temp)) ? \ 86 param_temp_ptr->intv.value : \ 87 (abort(), (int) 0)) 88 89 #define PM_STR(name) \ 90 ((param_temp_ptr = param_get(name, ¶m_temp)) ? \ 91 param_temp_ptr->strv.value : \ 92 (abort(), (char *) 0)) 93 94 #define PM_COLOR(name) \ 95 ((param_temp_ptr = param_get(name, ¶m_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, ¶m_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, ¶m_temp)) ? \ 106 param_temp_ptr->fontv.value : \ 107 (abort(), (XFontStruct *) 0)) 108 109 #define PM_STYLE(name) \ 110 ((param_temp_ptr = param_get(name, ¶m_temp)) ? \ 111 param_temp_ptr->stylev : \ 112 (abort(), param_null_style)) 113 114 #define PM_BOOL(name) \ 115 ((param_temp_ptr = param_get(name, ¶m_temp)) ? \ 116 param_temp_ptr->boolv.value : \ 117 (abort(), 0)) 118 119 #define PM_DBL(name) \ 120 ((param_temp_ptr = param_get(name, ¶m_temp)) ? \ 121 param_temp_ptr->dblv.value : \ 122 (abort(), 0.0)) 123 124 125 #endif /* _PARAMS_H_ */ 126