void trio_print_pointer TRIO_ARGS2((ref, pointer), trio_pointer_t ref, trio_pointer_t pointer)
{
	trio_reference_t* self = (trio_reference_t*)ref;
	trio_flags_t flags;
	trio_uintmax_t number;

	if (NULL == pointer)
	{
		TRIO_CONST char* string = internalNullString;
		while (*string)
			self->data->OutStream(self->data, *string++);
	}
	else
	{
		/*
		 * The subtraction of the null pointer is a workaround
		 * to avoid a compiler warning. The performance overhead
		 * is negligible (and likely to be removed by an
		 * optimizing compiler). The (char *) casting is done
		 * to please ANSI C++.
		 */
		number = (trio_uintmax_t)((char*)pointer - (char*)0);
		/* Shrink to size of pointer */
		number &= (trio_uintmax_t)-1;
		flags = self->parameter->flags;
		flags |= (FLAGS_UNSIGNED | FLAGS_ALTERNATIVE | FLAGS_NILPADDING);
		TrioWriteNumber(self->data, number, flags, POINTER_WIDTH, NO_PRECISION, BASE_HEX);
	}
}
void trio_print_pointer TRIO_ARGS2((ref, pointer), trio_pointer_t ref, trio_pointer_t pointer)
{
	trio_reference_t* self = (trio_reference_t*)ref;
	trio_flags_t flags;
	trio_uintmax_t number;

	if (NULL == pointer)
	{
		TRIO_CONST char* string = internalNullString;
		while (*string)
			self->data->OutStream(self->data, *string++);
	}
	else
	{
		 
		number = (trio_uintmax_t)((char*)pointer - (char*)0);
		 
		number &= (trio_uintmax_t)-1;
		flags = self->parameter->flags;
		flags |= (FLAGS_UNSIGNED | FLAGS_ALTERNATIVE | FLAGS_NILPADDING);
		TrioWriteNumber(self->data, number, flags, POINTER_WIDTH, NO_PRECISION, BASE_HEX);
	}
}