: based.	( n base -- )
	base @ -rot  base !  s>d <# #s #> type base ! ;
: xemit		( char -- )
	dup newline = if drop cr else emit then  ;
: .cstring	( adr -- )
	begin	dup c@ ?dup
	while	xemit char+
	repeat  drop  ;
: printf	( argn .. arg1 format -- )
		( ... format )
	begin	dup c@ ?dup
	while	dup [char] % <>
		if	emit
		else   	drop  char+ dup c@	( ... arg adr' char )
			case	[char] c of  swap xemit         endof
				[char] s of  swap .cstring      endof
				[char] x of  swap d# 16 based.  endof
				[char] d of  swap d# 10 based.  endof
				[char] o of  swap d#  8 based.  endof
				[char] b of  swap d#  2 based.  endof
				dup xemit	( default )
			endcase
		then	char+	( adr' )
	repeat drop ;

