You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gnucash/lib/libgsf-1.12.3/gsf/gsf-utils.h

143 lines
5.1 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* gsf-utils.h:
*
* Copyright (C) 2002-2004 Jody Goldberg (jody@gnome.org)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of version 2.1 of the GNU Lesser General Public
* License as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
* USA
*/
#ifndef GSF_UTILS_H
#define GSF_UTILS_H
#include <gsf/gsf.h>
#include <glib-object.h>
G_BEGIN_DECLS
/* Do this the ugly way so that we don't have to worry about alignment */
#define GSF_LE_GET_GUINT8(p) (*(guint8 const *)(p))
#define GSF_LE_GET_GUINT16(p) \
(guint16)((((guint8 const *)(p))[0] << 0) | \
(((guint8 const *)(p))[1] << 8))
#define GSF_LE_GET_GUINT32(p) \
(guint32)((((guint8 const *)(p))[0] << 0) | \
(((guint8 const *)(p))[1] << 8) | \
(((guint8 const *)(p))[2] << 16) | \
(((guint8 const *)(p))[3] << 24))
#define GSF_LE_GET_GUINT64(p) (gsf_le_get_guint64 (p))
#define GSF_LE_GET_GINT8(p) ((gint8)GSF_LE_GET_GUINT8(p))
#define GSF_LE_GET_GINT16(p) ((gint16)GSF_LE_GET_GUINT16(p))
#define GSF_LE_GET_GINT32(p) ((gint32)GSF_LE_GET_GUINT32(p))
#define GSF_LE_GET_GINT64(p) ((gint64)GSF_LE_GET_GUINT64(p))
#define GSF_LE_GET_FLOAT(p) (gsf_le_get_float (p))
#define GSF_LE_GET_DOUBLE(p) (gsf_le_get_double (p))
guint64 gsf_le_get_guint64 (void const *p);
float gsf_le_get_float (void const *p);
double gsf_le_get_double (void const *p);
#define GSF_LE_SET_GUINT8(p, dat) \
(*((guint8 *)(p)) = ((dat) & 0xff))
#define GSF_LE_SET_GUINT16(p, dat) \
((*((guint8 *)(p) + 0) = ((dat) & 0xff)),\
(*((guint8 *)(p) + 1) = ((dat) >> 8) & 0xff))
#define GSF_LE_SET_GUINT32(p, dat) \
((*((guint8 *)(p) + 0) = (guchar) ((dat)) & 0xff), \
(*((guint8 *)(p) + 1) = (guchar) ((dat) >> 8) & 0xff), \
(*((guint8 *)(p) + 2) = (guchar) ((dat) >> 16) & 0xff), \
(*((guint8 *)(p) + 3) = (guchar) ((dat) >> 24) & 0xff))
#define GSF_LE_SET_GUINT64(p, dat) \
((*((guint8 *)(p) + 0) = (guchar) ((dat)) & 0xff), \
(*((guint8 *)(p) + 1) = (guchar) ((dat) >> 8) & 0xff), \
(*((guint8 *)(p) + 2) = (guchar) ((dat) >> 16) & 0xff), \
(*((guint8 *)(p) + 3) = (guchar) ((dat) >> 24) & 0xff), \
(*((guint8 *)(p) + 4) = (guchar) ((dat) >> 32) & 0xff), \
(*((guint8 *)(p) + 5) = (guchar) ((dat) >> 40) & 0xff), \
(*((guint8 *)(p) + 6) = (guchar) ((dat) >> 48) & 0xff), \
(*((guint8 *)(p) + 7) = (guchar) ((dat) >> 56) & 0xff))
#define GSF_LE_SET_GINT8(p,dat) GSF_LE_SET_GUINT8((p),(dat))
#define GSF_LE_SET_GINT16(p,dat) GSF_LE_SET_GUINT16((p),(dat))
#define GSF_LE_SET_GINT32(p,dat) GSF_LE_SET_GUINT32((p),(dat))
#define GSF_LE_SET_GINT64(p,dat) GSF_LE_SET_GUINT64((p),(dat))
#define GSF_LE_SET_FLOAT(p,dat) gsf_le_set_float((p),(dat))
#define GSF_LE_SET_DOUBLE(p,dat) gsf_le_set_double((p),(dat))
void gsf_le_set_float (void *p, float f);
void gsf_le_set_double (void *p, double d);
void gsf_init (void);
void gsf_shutdown (void);
void gsf_init_dynamic (GTypeModule *module);
void gsf_shutdown_dynamic (GTypeModule *module);
/* Debugging utilities */
void gsf_mem_dump (guint8 const *ptr, size_t len);
void gsf_input_dump (GsfInput *input, gboolean dump_as_hex);
/* base64 encoding utilities */
guint8 *gsf_base64_encode_simple (guint8 const *data, size_t len);
size_t gsf_base64_encode_close (guint8 const *in, size_t inlen,
gboolean break_lines, guint8 *out,
int *state, guint *save);
size_t gsf_base64_encode_step (guint8 const *in, size_t len,
gboolean break_lines, guint8 *out,
int *state, guint *save);
size_t gsf_base64_decode_simple (guint8 *data, size_t len);
size_t gsf_base64_decode_step (guint8 const *in, size_t len,
guint8 *out, int *state, guint *save);
/* For putting filenames into error messages. */
char *gsf_filename_to_utf8 (char const *filename, gboolean quoted);
/* Some version checking */
extern int libgsf_major_version;
extern int libgsf_minor_version;
extern int libgsf_micro_version;
char const *gsf_extension_pointer (char const * path);
void gsf_iconv_close (GIConv handle);
void gsf_property_settings_collect_valist (GType object_type,
GParameter **p_params,
size_t *p_n_params,
const gchar *first_property_name,
va_list var_args);
void gsf_property_settings_collect (GType object_type,
GParameter **p_params,
size_t *p_n_params,
const gchar *first_property_name,
...);
void gsf_property_settings_free (GParameter *params,
size_t n_params);
/* Errors */
#define GSF_ERROR (gsf_error_quark ())
typedef enum {
GSF_ERROR_OUT_OF_MEMORY,
GSF_ERROR_INVALID_DATA
} GsfError;
GQuark gsf_error_quark (void);
G_END_DECLS
#endif /* GSF_UTILS_H */