Expressions
    - Stored as byte code (type 'OpCode')
    - String -> internal translation happens in
	sc/source/core/tool/compiler.cxx :
	    ScTokenArray *ScCompiler::CompileString
	or
	    it can be constructed manually (eg for arrays)

    - For xml export internal -> string happens in
	    sc/source/core/data/cell2.cxx
	    	ScFormulaCell::GetEnglishFormula
	There is also a counterpart in ScCompiler
	    sc/source/core/tool/compiler.cxx
	    	ScCompiler::CreateStringFromTokenArray

    - Builtin functions
	: Stored internally as distinct opcodes (ick?)
	: their parameter names and descriptions are stored in
	    sc/source/ui/src/scfuncs.src
	  which also includes an 'ExtraData' field that specifies
	    * The function group
	    * The HelpID ('hid')
	    * number of arguments or VAR_ARGS
	    * 0/1 to indicate if an argument is optional

Cells
    - contain a pointer to an ScTokenArray (not a ref)

-----------------------------------------------------------------
I/O 'Filters'
    - List of filters seems hardcoded
    - OASIS filter is in
	sc/source/filter/xml
	ScXMLExport

-----------------------------------------------------------------
Omitted Arguments
    - DCOUNT	- field
    - DCOUNTA	- field

-----------------------------------------------------------------
Useful enhancements
    - row limit							(fixed in 2.0)
    - ctrl click to add areas to the selection only works when
      more than one cell is already selected			(fixed in 2.0)
    - conditional fmts require style instead of inline tweaks	(non-trivial) 
    - contains/not-contains for autofilter			(fixed in 2.0)
    - no colour change for active autofilter			(not fixed, difficulty unknown)
    - Allow '+' or '-' to start an expr				(not fixed, should not be too hard)
    - Allow '*' to start an expr.				(need to prove this is correct)
    - show filename rather than full path for open files.	(not too hard)
    - Support A:A or 1:3 style referencing			(inprogress with R1C1)
    - datapilot area resize
    - macro work & help
-----------------------------------------------------------------
Misc
- ACOSH
     : (blank) == #NUM! not Err.502
     : (1) == #NUM! not Err.502

- ACOS
    : (1.00000000000001) = #NUM! not #VALUE!
    : (-1.00000000000001) = #NUM! not #VALUE!

#include <iostream>
#include <rtl/strbuf.hxx>
static const sal_Char *dbg_dump(const rtl::OString &rStr)
{
    static rtl::OStringBuffer aStr;

    aStr = rtl::OStringBuffer(rStr);
    aStr.append(static_cast<char>(0));
    return aStr.getStr();
}
static const sal_Char *dbg_dump(const rtl::OUString &rStr)
{
    return dbg_dump(rtl::OUStringToOString(rStr, RTL_TEXTENCODING_UTF8));
}

	std::cerr << dbg_dump (::rtl::OUString (rRange.aStart.GetColRowString())) << ":";
	std::cerr << dbg_dump (::rtl::OUString (rRange.aEnd.GetColRowString()))
			  << " stored with" << cur_index << "\n";
