15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * $Id$ 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 2000 Bjorn Reese and Daniel Stenberg. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Permission to use, copy, modify, and distribute this software for any 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * purpose with or without fee is hereby granted, provided that the above 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * copyright notice and this permission notice appear in all copies. 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************ 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Private functions, types, etc. used for callback functions. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The ref pointer is an opaque type and should remain as such. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Private data must only be accessible through the getter and 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * setter functions. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ************************************************************************/ 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef TRIO_TRIOP_H 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TRIO_TRIOP_H 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "triodef.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdlib.h> 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TRIO_COMPILER_ANCIENT) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# include <varargs.h> 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# include <stdarg.h> 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef TRIO_C99 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define TRIO_C99 1 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef TRIO_BSD 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define TRIO_BSD 1 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef TRIO_GNU 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define TRIO_GNU 1 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef TRIO_MISC 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define TRIO_MISC 1 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef TRIO_UNIX98 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define TRIO_UNIX98 1 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef TRIO_MICROSOFT 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define TRIO_MICROSOFT 1 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef TRIO_EXTENSION 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define TRIO_EXTENSION 1 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef TRIO_WIDECHAR /* Does not work yet. Do not enable */ 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define TRIO_WIDECHAR 0 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef TRIO_ERRORS 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define TRIO_ERRORS 1 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef TRIO_MALLOC 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define TRIO_MALLOC(n) malloc(n) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef TRIO_REALLOC 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define TRIO_REALLOC(x,n) realloc((x),(n)) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef TRIO_FREE 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define TRIO_FREE(x) free(x) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************* 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * User-defined specifiers 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int (*trio_callback_t) TRIO_PROTO((trio_pointer_t)); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)trio_pointer_t trio_register TRIO_PROTO((trio_callback_t callback, const char *name)); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_unregister TRIO_PROTO((trio_pointer_t handle)); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TRIO_CONST char *trio_get_format TRIO_PROTO((trio_pointer_t ref)); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)trio_pointer_t trio_get_argument TRIO_PROTO((trio_pointer_t ref)); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Modifiers */ 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_width TRIO_PROTO((trio_pointer_t ref)); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_width TRIO_PROTO((trio_pointer_t ref, int width)); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_precision TRIO_PROTO((trio_pointer_t ref)); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_precision TRIO_PROTO((trio_pointer_t ref, int precision)); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_base TRIO_PROTO((trio_pointer_t ref)); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_base TRIO_PROTO((trio_pointer_t ref, int base)); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_padding TRIO_PROTO((trio_pointer_t ref)); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_padding TRIO_PROTO((trio_pointer_t ref, int is_padding)); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_short TRIO_PROTO((trio_pointer_t ref)); /* h */ 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_shortshort TRIO_PROTO((trio_pointer_t ref, int is_shortshort)); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_shortshort TRIO_PROTO((trio_pointer_t ref)); /* hh */ 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_short TRIO_PROTO((trio_pointer_t ref, int is_short)); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_long TRIO_PROTO((trio_pointer_t ref)); /* l */ 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_long TRIO_PROTO((trio_pointer_t ref, int is_long)); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_longlong TRIO_PROTO((trio_pointer_t ref)); /* ll */ 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_longlong TRIO_PROTO((trio_pointer_t ref, int is_longlong)); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_longdouble TRIO_PROTO((trio_pointer_t ref)); /* L */ 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_longdouble TRIO_PROTO((trio_pointer_t ref, int is_longdouble)); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_alternative TRIO_PROTO((trio_pointer_t ref)); /* # */ 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_alternative TRIO_PROTO((trio_pointer_t ref, int is_alternative)); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_alignment TRIO_PROTO((trio_pointer_t ref)); /* - */ 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_alignment TRIO_PROTO((trio_pointer_t ref, int is_leftaligned)); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_spacing TRIO_PROTO((trio_pointer_t ref)); /* TRIO_PROTO((space) */ 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_spacing TRIO_PROTO((trio_pointer_t ref, int is_space)); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_sign TRIO_PROTO((trio_pointer_t ref)); /* + */ 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_sign TRIO_PROTO((trio_pointer_t ref, int is_showsign)); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_quote TRIO_PROTO((trio_pointer_t ref)); /* ' */ 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_quote TRIO_PROTO((trio_pointer_t ref, int is_quote)); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_upper TRIO_PROTO((trio_pointer_t ref)); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_upper TRIO_PROTO((trio_pointer_t ref, int is_upper)); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if TRIO_C99 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_largest TRIO_PROTO((trio_pointer_t ref)); /* j */ 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_largest TRIO_PROTO((trio_pointer_t ref, int is_largest)); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_ptrdiff TRIO_PROTO((trio_pointer_t ref)); /* t */ 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_ptrdiff TRIO_PROTO((trio_pointer_t ref, int is_ptrdiff)); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_get_size TRIO_PROTO((trio_pointer_t ref)); /* z / Z */ 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_set_size TRIO_PROTO((trio_pointer_t ref, int is_size)); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Printing */ 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_print_ref TRIO_PROTO((trio_pointer_t ref, const char *format, ...)); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_vprint_ref TRIO_PROTO((trio_pointer_t ref, const char *format, va_list args)); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int trio_printv_ref TRIO_PROTO((trio_pointer_t ref, const char *format, trio_pointer_t *args)); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_print_int TRIO_PROTO((trio_pointer_t ref, int number)); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_print_uint TRIO_PROTO((trio_pointer_t ref, unsigned int number)); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* void trio_print_long TRIO_PROTO((trio_pointer_t ref, long number)); */ 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* void trio_print_ulong TRIO_PROTO((trio_pointer_t ref, unsigned long number)); */ 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_print_double TRIO_PROTO((trio_pointer_t ref, double number)); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_print_string TRIO_PROTO((trio_pointer_t ref, char *string)); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void trio_print_pointer TRIO_PROTO((trio_pointer_t ref, trio_pointer_t pointer)); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} /* extern "C" */ 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* TRIO_TRIOP_H */ 151