public static DB parseList( Ptg[] dbrange )
	{
		int prevCol = -1;
		int nCols = 0;
		int nRows = 0;
		int maxRows = 0;

		// allocate the empty table for the dbrange
		for( Ptg aDbrange1 : dbrange )
		{
			if( aDbrange1 instanceof PtgRef )
			{
				PtgRef pref = (PtgRef) aDbrange1;
				int[] loc = pref.getIntLocation();
//				 TODO: check rc sanity here
				if( loc[1] != prevCol )
				{ // count # cols
					prevCol = loc[1];
					nCols++;
					nRows = 0;
				}
				else
				{ // count # rows
					nRows++;
					maxRows = Math.max( nRows, maxRows );
				}
			}
			else
			{
				return null;
			}
		}

		// now populate the table
		DB dblist = new DB( nCols, maxRows );
		prevCol = -1;
		nCols = -1;
		nRows = -1;
		for( Ptg aDbrange : dbrange )
		{
			PtgRef db1 = (PtgRef) aDbrange;
			int[] loc = db1.getIntLocation();
			Object vs = null;    // 20081120 KSC: Must distinguish between blanks and 0's
			if( !db1.isBlank() )
			{
				vs = db1.getValue();
			}

			// column headers
			if( loc[1] != prevCol )
			{
				if( vs != null )
				{
					dblist.colHeaders[++nCols] = vs.toString();
				}
				prevCol = loc[1];
				nRows = 0;
			}
			else
			{ // get value Ptgs
				try
				{
					dblist.rows[nRows++][nCols] = db1;
				}
				catch( ArrayIndexOutOfBoundsException e )
				{
					;    // possible nCols==-1
				}

			}
		}
		return dblist;
	}