*	16/02/2003	Add line number info to error messages, and probably 
	some context in the current expansion
*	16/02/2003	Add line number info to output
*	16/02/2003	Compile character constants and string literals properly
*	16/02/2003	Implement operators for strings(+,comparision,etc)
*	16/02/2003	Implement macros(commands) for I/O and shell commands
*	16/02/2003	Implement support for diversion
*	16/02/2003	Implement dictionary handling macros
*	16/02/2003	Implement undef
**	16/02/2003	Implement a cpp -> m5 header converter.
*	16/02/2003	Implement $SET: redefine a macro without pushing the new def
	on the def stack
*	16/02/2003	Write better error messages
*	16/02/2003	Implement quotation.
*	16/02/2003	Implement macro attributes(i.e. trim, nospc, expand)
*	16/02/2003	Write documentation


quoting:
	quoting is needed for 
		1- passing stuff without macro expansion
		2- passing code to macros as arguments /* i.e. controlled expansion */
		these two types of quoting need invisibility. i.e. the actual quotes
		should not exist in the output.
		3- making strings out of expansions. i.e. 
			$SPRINT(a,4*3)  --> "a12"


m4's scheme:
	1- expand the string between ( and ) before parsing the arguments for 
	a macro.
	2- expand the macro
	3- rescan the output of the macro

quoting is needed for step 1 in macro definitions

m4 allows

	def y (a,
	def z b)
	def x $2,$1
	u( x y z ) expands to  u( x(a,b) )
	expands to u(b,a)
	and such

arguments against expansion of arguments before macro expansion:
	the user will get confused. a macro call shall have the arguments
	as typed in by the user. m5 already supports the other behaviour by the
	$CALL built-in macro. 

	more quoting is needed.


arguments for expansion of arguments before macro expansion:
	simpler to implement and thus faster.

$SET x  $EVAL(x+1) $END

