triop.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. /*************************************************************************
  2. *
  3. * $Id$
  4. *
  5. * Copyright (C) 2000 Bjorn Reese and Daniel Stenberg.
  6. *
  7. * Permission to use, copy, modify, and distribute this software for any
  8. * purpose with or without fee is hereby granted, provided that the above
  9. * copyright notice and this permission notice appear in all copies.
  10. *
  11. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
  12. * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  13. * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
  14. * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
  15. *
  16. ************************************************************************
  17. *
  18. * Private functions, types, etc. used for callback functions.
  19. *
  20. * The ref pointer is an opaque type and should remain as such.
  21. * Private data must only be accessible through the getter and
  22. * setter functions.
  23. *
  24. ************************************************************************/
  25. #ifndef TRIO_TRIOP_H
  26. #define TRIO_TRIOP_H
  27. #include "triodef.h"
  28. #include <stdlib.h>
  29. #if defined(TRIO_COMPILER_ANCIENT)
  30. # include <varargs.h>
  31. #else
  32. # include <stdarg.h>
  33. #endif
  34. #ifdef __cplusplus
  35. extern "C" {
  36. #endif
  37. #ifndef TRIO_C99
  38. # define TRIO_C99 1
  39. #endif
  40. #ifndef TRIO_BSD
  41. # define TRIO_BSD 1
  42. #endif
  43. #ifndef TRIO_GNU
  44. # define TRIO_GNU 1
  45. #endif
  46. #ifndef TRIO_MISC
  47. # define TRIO_MISC 1
  48. #endif
  49. #ifndef TRIO_UNIX98
  50. # define TRIO_UNIX98 1
  51. #endif
  52. #ifndef TRIO_MICROSOFT
  53. # define TRIO_MICROSOFT 1
  54. #endif
  55. #ifndef TRIO_EXTENSION
  56. # define TRIO_EXTENSION 1
  57. #endif
  58. #ifndef TRIO_WIDECHAR /* Does not work yet. Do not enable */
  59. # define TRIO_WIDECHAR 0
  60. #endif
  61. #ifndef TRIO_ERRORS
  62. # define TRIO_ERRORS 1
  63. #endif
  64. #ifndef TRIO_MALLOC
  65. # define TRIO_MALLOC(n) malloc(n)
  66. #endif
  67. #ifndef TRIO_REALLOC
  68. # define TRIO_REALLOC(x,n) realloc((x),(n))
  69. #endif
  70. #ifndef TRIO_FREE
  71. # define TRIO_FREE(x) free(x)
  72. #endif
  73. /*************************************************************************
  74. * User-defined specifiers
  75. */
  76. typedef int (*trio_callback_t) TRIO_PROTO((trio_pointer_t));
  77. trio_pointer_t trio_register TRIO_PROTO((trio_callback_t callback, const char *name));
  78. void trio_unregister TRIO_PROTO((trio_pointer_t handle));
  79. TRIO_CONST char *trio_get_format TRIO_PROTO((trio_pointer_t ref));
  80. trio_pointer_t trio_get_argument TRIO_PROTO((trio_pointer_t ref));
  81. /* Modifiers */
  82. int trio_get_width TRIO_PROTO((trio_pointer_t ref));
  83. void trio_set_width TRIO_PROTO((trio_pointer_t ref, int width));
  84. int trio_get_precision TRIO_PROTO((trio_pointer_t ref));
  85. void trio_set_precision TRIO_PROTO((trio_pointer_t ref, int precision));
  86. int trio_get_base TRIO_PROTO((trio_pointer_t ref));
  87. void trio_set_base TRIO_PROTO((trio_pointer_t ref, int base));
  88. int trio_get_padding TRIO_PROTO((trio_pointer_t ref));
  89. void trio_set_padding TRIO_PROTO((trio_pointer_t ref, int is_padding));
  90. int trio_get_short TRIO_PROTO((trio_pointer_t ref)); /* h */
  91. void trio_set_shortshort TRIO_PROTO((trio_pointer_t ref, int is_shortshort));
  92. int trio_get_shortshort TRIO_PROTO((trio_pointer_t ref)); /* hh */
  93. void trio_set_short TRIO_PROTO((trio_pointer_t ref, int is_short));
  94. int trio_get_long TRIO_PROTO((trio_pointer_t ref)); /* l */
  95. void trio_set_long TRIO_PROTO((trio_pointer_t ref, int is_long));
  96. int trio_get_longlong TRIO_PROTO((trio_pointer_t ref)); /* ll */
  97. void trio_set_longlong TRIO_PROTO((trio_pointer_t ref, int is_longlong));
  98. int trio_get_longdouble TRIO_PROTO((trio_pointer_t ref)); /* L */
  99. void trio_set_longdouble TRIO_PROTO((trio_pointer_t ref, int is_longdouble));
  100. int trio_get_alternative TRIO_PROTO((trio_pointer_t ref)); /* # */
  101. void trio_set_alternative TRIO_PROTO((trio_pointer_t ref, int is_alternative));
  102. int trio_get_alignment TRIO_PROTO((trio_pointer_t ref)); /* - */
  103. void trio_set_alignment TRIO_PROTO((trio_pointer_t ref, int is_leftaligned));
  104. int trio_get_spacing TRIO_PROTO((trio_pointer_t ref)); /* TRIO_PROTO((space) */
  105. void trio_set_spacing TRIO_PROTO((trio_pointer_t ref, int is_space));
  106. int trio_get_sign TRIO_PROTO((trio_pointer_t ref)); /* + */
  107. void trio_set_sign TRIO_PROTO((trio_pointer_t ref, int is_showsign));
  108. int trio_get_quote TRIO_PROTO((trio_pointer_t ref)); /* ' */
  109. void trio_set_quote TRIO_PROTO((trio_pointer_t ref, int is_quote));
  110. int trio_get_upper TRIO_PROTO((trio_pointer_t ref));
  111. void trio_set_upper TRIO_PROTO((trio_pointer_t ref, int is_upper));
  112. #if TRIO_C99
  113. int trio_get_largest TRIO_PROTO((trio_pointer_t ref)); /* j */
  114. void trio_set_largest TRIO_PROTO((trio_pointer_t ref, int is_largest));
  115. int trio_get_ptrdiff TRIO_PROTO((trio_pointer_t ref)); /* t */
  116. void trio_set_ptrdiff TRIO_PROTO((trio_pointer_t ref, int is_ptrdiff));
  117. int trio_get_size TRIO_PROTO((trio_pointer_t ref)); /* z / Z */
  118. void trio_set_size TRIO_PROTO((trio_pointer_t ref, int is_size));
  119. #endif
  120. /* Printing */
  121. int trio_print_ref TRIO_PROTO((trio_pointer_t ref, const char *format, ...));
  122. int trio_vprint_ref TRIO_PROTO((trio_pointer_t ref, const char *format, va_list args));
  123. int trio_printv_ref TRIO_PROTO((trio_pointer_t ref, const char *format, trio_pointer_t *args));
  124. void trio_print_int TRIO_PROTO((trio_pointer_t ref, int number));
  125. void trio_print_uint TRIO_PROTO((trio_pointer_t ref, unsigned int number));
  126. /* void trio_print_long TRIO_PROTO((trio_pointer_t ref, long number)); */
  127. /* void trio_print_ulong TRIO_PROTO((trio_pointer_t ref, unsigned long number)); */
  128. void trio_print_double TRIO_PROTO((trio_pointer_t ref, double number));
  129. void trio_print_string TRIO_PROTO((trio_pointer_t ref, char *string));
  130. void trio_print_pointer TRIO_PROTO((trio_pointer_t ref, trio_pointer_t pointer));
  131. #ifdef __cplusplus
  132. } /* extern "C" */
  133. #endif
  134. #endif /* TRIO_TRIOP_H */