static STRPTR VSPrintf(STRPTR buffer, STRPTR format, APTR args);
static STRPTR SPrintf(STRPTR buffer, STRPTR format, ...);



#if defined(__SASC)
	/* VERY DIRTY AND UNPORTABLE TRICK WITH SAS/C */
	static void PutChFunc (void)
	{
		void __builtin_emit (int);
		__builtin_emit(0x16C0);		/* move.b d0,(a3)+ */
	}
#elif defined(__GNUC__)
	/* VERY DIRTY AND UNPORTABLE TRICK WITH GCC */
	static void PutChFunc (void)
	{
		asm volatile ("moveb d0,a3@+");
	}
else
	/* For all other compilers: PutChFunc() translated to
	 * 68K binary opcodes! (move.b d0,(a3)+ ; rts)
	 */
	static ULONG PutChFunc = 0x16c04e75;
#endif



INLINE STRPTR VSPrintf(STRPTR buffer, STRPTR format, APTR args)
{
	return (STRPTR)RawDoFmt (format, args, PutChFunc, buffer);
}



INLINE STRPTR SPrintf(STRPTR buffer, STRPTR format, ...)
{
	/* "(&format)+1" is not portable on some RISC CPUs */
	return (STRPTR)RawDoFmt (format, (&format)+1, PutChFunc, buffer);
}
