diff m_struct.h @ 8169:7c9253521f9c

A struct setter. It allow you to setup struct from some user settings.
author albeu
date Tue, 12 Nov 2002 14:16:30 +0000
parents
children 2cc1ce724722
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/m_struct.h	Tue Nov 12 14:16:30 2002 +0000
@@ -0,0 +1,50 @@
+
+#ifndef NEW_CONFIG
+#warning "Including m_struct.h but NEW_CONFIG is disabled"
+#else
+
+///////////////////// A struct setter ////////////////////////
+
+struct m_option;
+
+/// Struct definition
+typedef struct m_struct_st {
+  char* name; // For error msg and debuging
+  unsigned int size; // size of the whole struct
+  void* defaults; // Pointer to a struct filled with the default settings
+  struct m_option* fields; // settable fields
+} m_struct_t;
+
+// Note : the p field of the m_option_t struct must contain the offset
+// of the member in the struct (use M_ST_OFF macro for this).
+
+// From glib.h (modified ;-)
+#define M_ST_OFF(struct_type, member)    \
+    ((void*) &((struct_type*) 0)->member)
+#define M_ST_MB_P(struct_p, struct_offset)   \
+    ((void*) (struct_p) + (unsigned long) (struct_offset))
+#define M_ST_MB(member_type, struct_p, struct_offset)   \
+    (*(member_type*) M_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
+
+
+
+/// Allocate the struct and set it to the defaults
+void*
+m_struct_alloc(m_struct_t* st);
+/// Set a field of the struct
+int
+m_struct_set(m_struct_t* st, void* obj, char* field, char* param);
+/// Reset a field (or all if field == NULL) to defaults
+void
+m_struct_reset(m_struct_t* st, void* obj, char* field);
+/// Create a copy of an existing struct
+void*
+m_struct_copy(m_struct_t* st, void* obj);
+/// Free an allocated struct
+void
+m_struct_free(m_struct_t* st, void* obj);
+/// Get a field description
+struct m_option*
+m_struct_get_field(m_struct_t* st,char* f);
+
+#endif