protected static Ptg calcIndirect( Ptg[] operands )
	{
		try
		{
			if( operands[0] instanceof PtgStr )
			{
				PtgStr ps = (PtgStr) operands[0];

				String locx = ps.toString();
				// detect range
				if( !(FormulaParser.isRef( locx ) || FormulaParser.isRange( locx )) )
				{    // see if it's a named range
					Name nmx = ps.getParentRec().getWorkBook().getName( locx );
					if( nmx != null )
					{ // there is a named range
						locx = nmx.getLocation();
					}
					else
					{
						return ps;    //it's just a value
					}
				}
				if( "".equals( locx ) )
				{
					return new PtgInt( 0 );    // that's what Excel does!
				}
				PtgArea3d refp = new PtgArea3d( false );
				refp.setParentRec( ps.getParentRec() );
				refp.setUseReferenceTracker( true );    // very important!!! :)
				refp.setLocation( locx );
				return refp;

			}
			if( operands[0] instanceof PtgRef )
			{
				// check if the ptgRef value is a string representing a Named range
				Object o = operands[0].getValue();
				PtgStr ps = new PtgStr( o.toString() );
				ps.setParentRec( operands[0].getParentRec() );
				operands = new Ptg[1];
				operands[0] = ps;
				return calcIndirect( operands );
			}
			if( operands[0] instanceof PtgName )
			{
				return calcIndirect( operands[0].getComponents() );
			}
		}
		catch( Exception e )
		{
			//log.error("INDIRECT: " + e.toString());
		}
		return new PtgErr( PtgErr.ERROR_REF );    // 's what Excel does ...
	}