#include <inttypes.h>
#include <string.h>
#include <tcl.h>
#include <stdio.h>
#include <tclTommath.h>
#ifndef TCL_Z_MODIFIER
# define TCL_Z_MODIFIER "z"
#endif
int main() {
Tcl_Obj *obj;
/* Ensure proper initialization, even without TIP #414 */
Tcl_CreateInterp();
printf("LL modifier: \"%s\" Z modifier: \"%s\"\n", TCL_LL_MODIFIER, TCL_Z_MODIFIER);
/* Hex string with prefix */
printf("%%#x: %#x\n", 15);
obj = Tcl_ObjPrintf("%#x", 15);
printf("%%#x: %s\n", Tcl_GetString(obj));
/* 0 Hex string with prefix */
printf("%%#x: %#x\n", 0);
obj = Tcl_ObjPrintf("%#x", 0);
printf("%%#x: %s\n", Tcl_GetString(obj));
/* Hex string with prefix, uppercase */
printf("%%#X: %#X\n", 15);
obj = Tcl_ObjPrintf("%#X", 15);
printf("%%#X: %s\n", Tcl_GetString(obj));
/* Hex float with prefix */
printf("%%a: %a\n", 1.75);
obj = Tcl_ObjPrintf("%a", 1.75);
printf("%%a: %s\n", Tcl_GetString(obj));
/* Hex float with prefix, uppercase */
printf("%%A: %A\n", 1.75);
obj = Tcl_ObjPrintf("%A", 1.75);
printf("%%A: %s\n", Tcl_GetString(obj));
/* int32_t */
int32_t i32 = 45;
printf("%%PRId32: %" PRId32 "\n", i32);
obj = Tcl_ObjPrintf("%" PRId32, i32);
printf("%%PRId32: %s\n", Tcl_GetString(obj));
/* int64_t */
int64_t i64 = 46;
printf("%%PRId64: %" PRId64 "\n", i64);
obj = Tcl_ObjPrintf("%" PRId64, i64);
printf("%%PRId64: %s\n", Tcl_GetString(obj));
/* (unsigned) Tcl_WideInt / long long */
Tcl_WideUInt w = 47;
unsigned long long ll = (unsigned long long) w;
printf("%%llu: %" TCL_LL_MODIFIER "u\n", w);
obj = Tcl_ObjPrintf("%" TCL_LL_MODIFIER "u", w);
printf("%%llu: %s\n", Tcl_GetString(obj));
printf("%%llu: %" TCL_LL_MODIFIER "u\n", ll);
obj = Tcl_ObjPrintf("%" TCL_LL_MODIFIER "u", ll);
printf("%%llu: %s\n", Tcl_GetString(obj));
printf("%%llu: %llu\n", w);
obj = Tcl_ObjPrintf("%llu", w);
printf("%%llu: %s\n", Tcl_GetString(obj));
printf("%%llu: %llu\n", ll);
obj = Tcl_ObjPrintf("%llu", ll);
printf("%%llu: %s\n", Tcl_GetString(obj));
/* size_t */
size_t s = 48;
printf("%%z: %" TCL_Z_MODIFIER "u\n", s);
obj = Tcl_ObjPrintf("%" TCL_Z_MODIFIER "u", s);
printf("%%z: %s\n", Tcl_GetString(obj));
/* intmax_t */
intmax_t m = 49;
printf("%%jd: %jd\n", m);
obj = Tcl_ObjPrintf("%jd", m);
printf("%%jd: %s\n", Tcl_GetString(obj));
/* ptrdiff_t */
ptrdiff_t p = 50;
printf("%%td: %td\n", p);
obj = Tcl_ObjPrintf("%td", p);
printf("%%td: %s\n", Tcl_GetString(obj));
/* long double */
long double ld = 51.75;
printf("%%Lg: %Lg\n", ld);
obj = Tcl_ObjPrintf("%Lg", ld);
printf("%%Lg: %s\n", Tcl_GetString(obj));
/* mp_int */
mp_int mp;
mp_init_size(&mp, 0);
mp_set_int(&mp, 52);
obj = Tcl_ObjPrintf("%Ld", &mp);
printf("%%Ld: %s\n", Tcl_GetString(obj));
/* void * */
void *vp = (void *)(size_t)53;
printf("%%p: %p\n", vp);
obj = Tcl_ObjPrintf("%p", vp);
printf("%%p: %s\n", Tcl_GetString(obj));
}