cser/
/* By Sean Middleditch <elanthis@awemud.net>
   released into public domain, July 8th, 2003 */

#if !defined(C_SERIALIZE)
#define C_SERIALIZE 1

#define CSER_MAX_DATA 4096

/* write values to a file */
int cser_write_str(FILE* file, const char* name, const char* value);
int cser_write_num(FILE* file, const char* name, long num);

/* read from file */
#define CSER_READ_BEGIN(file) \
	do { \
		char _cser_buffer[CSER_MAX_DATA]; \
		char* _cser_name = NULL; \
		char* _cstr_string = NULL; \
		long _cstr_number = 0; \
		while ((cser_read((file), _cser_buffer, sizeof(_cser_buffer), \
			&_cser_name, &_cstr_string, &_cstr_number)) == 0) {
#define CSER_READ_STR(name,var) \
			if (!strcasecmp((name), _cser_name)) { \
				if ((var) != NULL) free(var); \
				var = NULL; \
				if (_cstr_string != NULL) \
					var = strdup(_cstr_string); \
			} else
#define CSER_READ_NUM(name,var) \
			if (!strcasecmp((name), _cser_name)) { \
				(var) = _cstr_number; \
			} else 
#define CSER_READ_END \
			{ /* Unknown value */ } \
		} \
	} while(0);

/* read one value from file */
int cser_read(FILE* file, char* buffer, size_t blen, char** name, char** str_value, long* num_value);

#endif