Added new record types to biff viewer

git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@352618 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Andrew C. Oliver 2002-05-11 19:13:42 +00:00
parent d2672d5e76
commit 1e5961f2df

View File

@ -1,61 +1,61 @@
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache POI" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache POI", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
/* /*
* BiffViewer.java * ====================================================================
* The Apache Software License, Version 1.1
* *
* Created on November 13, 2001, 9:23 AM * Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache POI" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache POI", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
/*
* BiffViewer.java
*
* Created on November 13, 2001, 9:23 AM
*/ */
package org.apache.poi.hssf.dev; package org.apache.poi.hssf.dev;
@ -70,129 +70,115 @@ import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
* Utillity for reading in BIFF8 records and displaying data from them. * Utillity for reading in BIFF8 records and displaying data from them.
* @author Andrew C. Oliver (acoliver at apache dot org) *
* @author Glen Stampoultzis (glens at apache.org) *@author Andrew C. Oliver (acoliver at apache dot org)
* @see #main *@author Glen Stampoultzis (glens at apache.org)
*@created May 10, 2002
*@see #main
*/ */
public class BiffViewer public class BiffViewer {
{
String filename; String filename;
private boolean dump; private boolean dump;
/** /**
* Creates new BiffViewer * Creates new BiffViewer
* *
* @param args *@param args
*/ */
public BiffViewer(String[] args) public BiffViewer(String[] args) {
{ if (args.length > 0) {
if (args.length > 0)
{
filename = args[0]; filename = args[0];
} else } else {
{
System.out.println("BIFFVIEWER REQUIRES A FILENAME***"); System.out.println("BIFFVIEWER REQUIRES A FILENAME***");
} }
} }
/** /**
* Method run * Method run starts up BiffViewer...
*
* starts up BiffViewer...
*/ */
public void run() public void run() {
{ try {
try
{
POIFSFileSystem fs = POIFSFileSystem fs =
new POIFSFileSystem(new FileInputStream(filename)); new POIFSFileSystem(new FileInputStream(filename));
InputStream stream = InputStream stream =
fs.createDocumentInputStream("Workbook"); fs.createDocumentInputStream("Workbook");
Record[] records = createRecords(stream, dump); Record[] records = createRecords(stream, dump);
} catch (Exception e) } catch (Exception e) {
{
e.printStackTrace(); e.printStackTrace();
} }
} }
/** /**
* Create an array of records from an input stream * Create an array of records from an input stream
* *
* @param in the InputStream from which the records will be *@param in the InputStream from which the records
* obtained * will be obtained
* @param dump *@param dump
* *@return an array of Records created from the
* @return an array of Records created from the InputStream * InputStream
* *@exception RecordFormatException on error processing the InputStream
* @exception RecordFormatException on error processing the
* InputStream
*/ */
public static Record[] createRecords(InputStream in, boolean dump) public static Record[] createRecords(InputStream in, boolean dump)
throws RecordFormatException throws RecordFormatException {
{
ArrayList records = new ArrayList(); ArrayList records = new ArrayList();
Record last_record = null; Record last_record = null;
int loc = 0; int loc = 0;
try try {
{
// long offset = 0; // long offset = 0;
short rectype = 0; short rectype = 0;
do do {
{
rectype = LittleEndian.readShort(in); rectype = LittleEndian.readShort(in);
System.out.println("============================================"); System.out.println("============================================");
System.out.println("Offset 0x" + Integer.toHexString(loc) + " (" + loc + ")"); System.out.println("Offset 0x" + Integer.toHexString(loc) + " (" + loc + ")");
loc += 2; loc += 2;
if (rectype != 0) if (rectype != 0) {
{
short recsize = LittleEndian.readShort(in); short recsize = LittleEndian.readShort(in);
loc += 2; loc += 2;
byte[] data = new byte[(int) recsize]; byte[] data = new byte[(int) recsize];
in.read(data); in.read(data);
if ((rectype == WSBoolRecord.sid) && (recsize == 0)) if ((rectype == WSBoolRecord.sid) && (recsize == 0)) {
{
System.out.println(loc); System.out.println(loc);
} }
loc += recsize; loc += recsize;
// offset += 4 + recsize; // offset += 4 + recsize;
if (dump) if (dump) {
{
dump(rectype, recsize, data); dump(rectype, recsize, data);
} }
Record[] recs = createRecord(rectype, recsize, Record[] recs = createRecord(rectype, recsize,
data); // handle MulRK records data);
// handle MulRK records
Record record = recs[0]; Record record = recs[0];
if ((record instanceof UnknownRecord) if ((record instanceof UnknownRecord)
&& !dump) // if we didn't already dump && !dump) {
{ // just cause dump was on and we're hit an unknow // if we didn't already dump
// just cause dump was on and we're hit an unknow
dumpUnknownRecord(data); dumpUnknownRecord(data);
} }
if (record != null) if (record != null) {
{ if (rectype == ContinueRecord.sid) {
if (rectype == ContinueRecord.sid)
{
dumpContinueRecord(last_record, dump, data); dumpContinueRecord(last_record, dump, data);
} else } else {
{
last_record = record; last_record = record;
records.add(record); records.add(record);
} }
} }
} }
} while (rectype != 0); } while (rectype != 0);
} catch (IOException e) } catch (IOException e) {
{
throw new RecordFormatException("Error reading bytes"); throw new RecordFormatException("Error reading bytes");
} }
Record[] retval = new Record[records.size()]; Record[] retval = new Record[records.size()];
@ -201,21 +187,26 @@ public class BiffViewer
return retval; return retval;
} }
private static void dumpContinueRecord(Record last_record, boolean dump, byte[] data) throws IOException
{ /**
if (last_record == null) * Description of the Method
{ *
*@param last_record Description of the Parameter
*@param dump Description of the Parameter
*@param data Description of the Parameter
*@exception IOException Description of the Exception
*/
private static void dumpContinueRecord(Record last_record, boolean dump, byte[] data) throws IOException {
if (last_record == null) {
throw new RecordFormatException( throw new RecordFormatException(
"First record is a ContinueRecord??"); "First record is a ContinueRecord??");
} }
if (dump) if (dump) {
{
System.out.println( System.out.println(
"-----PRECONTINUED LAST RECORD WOULD SERIALIZE LIKE:"); "-----PRECONTINUED LAST RECORD WOULD SERIALIZE LIKE:");
byte[] lr = last_record.serialize(); byte[] lr = last_record.serialize();
if (lr != null) if (lr != null) {
{
HexDump.dump(last_record.serialize(), HexDump.dump(last_record.serialize(),
0, System.out, 0); 0, System.out, 0);
} }
@ -224,8 +215,7 @@ public class BiffViewer
"-----PRECONTINUED----------------------------------"); "-----PRECONTINUED----------------------------------");
} }
last_record.processContinueRecord(data); last_record.processContinueRecord(data);
if (dump) if (dump) {
{
System.out.println( System.out.println(
"-----CONTINUED LAST RECORD WOULD SERIALIZE LIKE:"); "-----CONTINUED LAST RECORD WOULD SERIALIZE LIKE:");
HexDump.dump(last_record.serialize(), 0, HexDump.dump(last_record.serialize(), 0,
@ -236,16 +226,20 @@ public class BiffViewer
} }
} }
private static void dumpUnknownRecord(byte[] data) throws IOException
{ /**
* Description of the Method
*
*@param data Description of the Parameter
*@exception IOException Description of the Exception
*/
private static void dumpUnknownRecord(byte[] data) throws IOException {
// record hex dump it! // record hex dump it!
System.out.println( System.out.println(
"-----UNKNOWN----------------------------------"); "-----UNKNOWN----------------------------------");
if (data.length > 0) if (data.length > 0) {
{
HexDump.dump(data, 0, System.out, 0); HexDump.dump(data, 0, System.out, 0);
} else } else {
{
System.out.print("**NO RECORD DATA**"); System.out.print("**NO RECORD DATA**");
} }
System.out.println(); System.out.println();
@ -253,8 +247,16 @@ public class BiffViewer
"-----UNKNOWN----------------------------------"); "-----UNKNOWN----------------------------------");
} }
private static void dump(short rectype, short recsize, byte[] data) throws IOException
{ /**
* Description of the Method
*
*@param rectype Description of the Parameter
*@param recsize Description of the Parameter
*@param data Description of the Parameter
*@exception IOException Description of the Exception
*/
private static void dump(short rectype, short recsize, byte[] data) throws IOException {
// System.out // System.out
// .println("fixing to recordize the following"); // .println("fixing to recordize the following");
System.out.print("rectype = 0x" System.out.print("rectype = 0x"
@ -263,11 +265,9 @@ public class BiffViewer
+ Integer.toHexString(recsize)); + Integer.toHexString(recsize));
System.out.println( System.out.println(
"-BEGIN DUMP---------------------------------"); "-BEGIN DUMP---------------------------------");
if (data.length > 0) if (data.length > 0) {
{
HexDump.dump(data, 0, System.out, 0); HexDump.dump(data, 0, System.out, 0);
} else } else {
{
System.out.println("**NO RECORD DATA**"); System.out.println("**NO RECORD DATA**");
} }
// System.out.println(); // System.out.println();
@ -275,408 +275,331 @@ public class BiffViewer
"-END DUMP-----------------------------------"); "-END DUMP-----------------------------------");
} }
/** /**
* Essentially a duplicate of RecordFactory. Kept seperate as not to * Essentially a duplicate of RecordFactory. Kept seperate as not to screw
* screw up non-debug operations. * up non-debug operations.
* *
*@param rectype Description of the Parameter
*@param size Description of the Parameter
*@param data Description of the Parameter
*@return Description of the Return Value
*/ */
private static Record[] createRecord(short rectype, short size, private static Record[] createRecord(short rectype, short size,
byte[] data) byte[] data) {
{
Record retval = null; Record retval = null;
Record[] realretval = null; Record[] realretval = null;
// int irectype = rectype; // int irectype = rectype;
switch (rectype) switch (rectype) {
{
case ChartRecord.sid: case ChartRecord.sid:
retval = new ChartRecord(rectype, size, data); retval = new ChartRecord(rectype, size, data);
break; break;
case ChartFormatRecord.sid: case ChartFormatRecord.sid:
retval = new ChartFormatRecord(rectype, size, data); retval = new ChartFormatRecord(rectype, size, data);
break; break;
case SeriesRecord.sid: case SeriesRecord.sid:
retval = new SeriesRecord(rectype, size, data); retval = new SeriesRecord(rectype, size, data);
break; break;
case BeginRecord.sid: case BeginRecord.sid:
retval = new BeginRecord(rectype, size, data); retval = new BeginRecord(rectype, size, data);
break; break;
case EndRecord.sid: case EndRecord.sid:
retval = new EndRecord(rectype, size, data); retval = new EndRecord(rectype, size, data);
break; break;
case BOFRecord.sid: case BOFRecord.sid:
retval = new BOFRecord(rectype, size, data); retval = new BOFRecord(rectype, size, data);
break; break;
case InterfaceHdrRecord.sid: case InterfaceHdrRecord.sid:
retval = new InterfaceHdrRecord(rectype, size, data); retval = new InterfaceHdrRecord(rectype, size, data);
break; break;
case MMSRecord.sid: case MMSRecord.sid:
retval = new MMSRecord(rectype, size, data); retval = new MMSRecord(rectype, size, data);
break; break;
case InterfaceEndRecord.sid: case InterfaceEndRecord.sid:
retval = new InterfaceEndRecord(rectype, size, data); retval = new InterfaceEndRecord(rectype, size, data);
break; break;
case WriteAccessRecord.sid: case WriteAccessRecord.sid:
retval = new WriteAccessRecord(rectype, size, data); retval = new WriteAccessRecord(rectype, size, data);
break; break;
case CodepageRecord.sid: case CodepageRecord.sid:
retval = new CodepageRecord(rectype, size, data); retval = new CodepageRecord(rectype, size, data);
break; break;
case DSFRecord.sid: case DSFRecord.sid:
retval = new DSFRecord(rectype, size, data); retval = new DSFRecord(rectype, size, data);
break; break;
case TabIdRecord.sid: case TabIdRecord.sid:
retval = new TabIdRecord(rectype, size, data); retval = new TabIdRecord(rectype, size, data);
break; break;
case FnGroupCountRecord.sid: case FnGroupCountRecord.sid:
retval = new FnGroupCountRecord(rectype, size, data); retval = new FnGroupCountRecord(rectype, size, data);
break; break;
case WindowProtectRecord.sid: case WindowProtectRecord.sid:
retval = new WindowProtectRecord(rectype, size, data); retval = new WindowProtectRecord(rectype, size, data);
break; break;
case ProtectRecord.sid: case ProtectRecord.sid:
retval = new ProtectRecord(rectype, size, data); retval = new ProtectRecord(rectype, size, data);
break; break;
case PasswordRecord.sid: case PasswordRecord.sid:
retval = new PasswordRecord(rectype, size, data); retval = new PasswordRecord(rectype, size, data);
break; break;
case ProtectionRev4Record.sid: case ProtectionRev4Record.sid:
retval = new ProtectionRev4Record(rectype, size, data); retval = new ProtectionRev4Record(rectype, size, data);
break; break;
case PasswordRev4Record.sid: case PasswordRev4Record.sid:
retval = new PasswordRev4Record(rectype, size, data); retval = new PasswordRev4Record(rectype, size, data);
break; break;
case WindowOneRecord.sid: case WindowOneRecord.sid:
retval = new WindowOneRecord(rectype, size, data); retval = new WindowOneRecord(rectype, size, data);
break; break;
case BackupRecord.sid: case BackupRecord.sid:
retval = new BackupRecord(rectype, size, data); retval = new BackupRecord(rectype, size, data);
break; break;
case HideObjRecord.sid: case HideObjRecord.sid:
retval = new HideObjRecord(rectype, size, data); retval = new HideObjRecord(rectype, size, data);
break; break;
case DateWindow1904Record.sid: case DateWindow1904Record.sid:
retval = new DateWindow1904Record(rectype, size, data); retval = new DateWindow1904Record(rectype, size, data);
break; break;
case PrecisionRecord.sid: case PrecisionRecord.sid:
retval = new PrecisionRecord(rectype, size, data); retval = new PrecisionRecord(rectype, size, data);
break; break;
case RefreshAllRecord.sid: case RefreshAllRecord.sid:
retval = new RefreshAllRecord(rectype, size, data); retval = new RefreshAllRecord(rectype, size, data);
break; break;
case BookBoolRecord.sid: case BookBoolRecord.sid:
retval = new BookBoolRecord(rectype, size, data); retval = new BookBoolRecord(rectype, size, data);
break; break;
case FontRecord.sid: case FontRecord.sid:
retval = new FontRecord(rectype, size, data); retval = new FontRecord(rectype, size, data);
break; break;
case FormatRecord.sid: case FormatRecord.sid:
retval = new FormatRecord(rectype, size, data); retval = new FormatRecord(rectype, size, data);
break; break;
case ExtendedFormatRecord.sid: case ExtendedFormatRecord.sid:
retval = new ExtendedFormatRecord(rectype, size, data); retval = new ExtendedFormatRecord(rectype, size, data);
break; break;
case StyleRecord.sid: case StyleRecord.sid:
retval = new StyleRecord(rectype, size, data); retval = new StyleRecord(rectype, size, data);
break; break;
case UseSelFSRecord.sid: case UseSelFSRecord.sid:
retval = new UseSelFSRecord(rectype, size, data); retval = new UseSelFSRecord(rectype, size, data);
break; break;
case BoundSheetRecord.sid: case BoundSheetRecord.sid:
retval = new BoundSheetRecord(rectype, size, data); retval = new BoundSheetRecord(rectype, size, data);
break; break;
case CountryRecord.sid: case CountryRecord.sid:
retval = new CountryRecord(rectype, size, data); retval = new CountryRecord(rectype, size, data);
break; break;
case SSTRecord.sid: case SSTRecord.sid:
retval = new SSTRecord(rectype, size, data); retval = new SSTRecord(rectype, size, data);
break; break;
case ExtSSTRecord.sid: case ExtSSTRecord.sid:
retval = new ExtSSTRecord(rectype, size, data); retval = new ExtSSTRecord(rectype, size, data);
break; break;
case EOFRecord.sid: case EOFRecord.sid:
retval = new EOFRecord(rectype, size, data); retval = new EOFRecord(rectype, size, data);
break; break;
case IndexRecord.sid: case IndexRecord.sid:
retval = new IndexRecord(rectype, size, data); retval = new IndexRecord(rectype, size, data);
break; break;
case CalcModeRecord.sid: case CalcModeRecord.sid:
retval = new CalcModeRecord(rectype, size, data); retval = new CalcModeRecord(rectype, size, data);
break; break;
case CalcCountRecord.sid: case CalcCountRecord.sid:
retval = new CalcCountRecord(rectype, size, data); retval = new CalcCountRecord(rectype, size, data);
break; break;
case RefModeRecord.sid: case RefModeRecord.sid:
retval = new RefModeRecord(rectype, size, data); retval = new RefModeRecord(rectype, size, data);
break; break;
case IterationRecord.sid: case IterationRecord.sid:
retval = new IterationRecord(rectype, size, data); retval = new IterationRecord(rectype, size, data);
break; break;
case DeltaRecord.sid: case DeltaRecord.sid:
retval = new DeltaRecord(rectype, size, data); retval = new DeltaRecord(rectype, size, data);
break; break;
case SaveRecalcRecord.sid: case SaveRecalcRecord.sid:
retval = new SaveRecalcRecord(rectype, size, data); retval = new SaveRecalcRecord(rectype, size, data);
break; break;
case PrintHeadersRecord.sid: case PrintHeadersRecord.sid:
retval = new PrintHeadersRecord(rectype, size, data); retval = new PrintHeadersRecord(rectype, size, data);
break; break;
case PrintGridlinesRecord.sid: case PrintGridlinesRecord.sid:
retval = new PrintGridlinesRecord(rectype, size, data); retval = new PrintGridlinesRecord(rectype, size, data);
break; break;
case GridsetRecord.sid: case GridsetRecord.sid:
retval = new GridsetRecord(rectype, size, data); retval = new GridsetRecord(rectype, size, data);
break; break;
case GutsRecord.sid: case GutsRecord.sid:
retval = new GutsRecord(rectype, size, data); retval = new GutsRecord(rectype, size, data);
break; break;
case DefaultRowHeightRecord.sid: case DefaultRowHeightRecord.sid:
retval = new DefaultRowHeightRecord(rectype, size, data); retval = new DefaultRowHeightRecord(rectype, size, data);
break; break;
case WSBoolRecord.sid: case WSBoolRecord.sid:
retval = new WSBoolRecord(rectype, size, data); retval = new WSBoolRecord(rectype, size, data);
break; break;
case HeaderRecord.sid: case HeaderRecord.sid:
retval = new HeaderRecord(rectype, size, data); retval = new HeaderRecord(rectype, size, data);
break; break;
case FooterRecord.sid: case FooterRecord.sid:
retval = new FooterRecord(rectype, size, data); retval = new FooterRecord(rectype, size, data);
break; break;
case HCenterRecord.sid: case HCenterRecord.sid:
retval = new HCenterRecord(rectype, size, data); retval = new HCenterRecord(rectype, size, data);
break; break;
case VCenterRecord.sid: case VCenterRecord.sid:
retval = new VCenterRecord(rectype, size, data); retval = new VCenterRecord(rectype, size, data);
break; break;
case PrintSetupRecord.sid: case PrintSetupRecord.sid:
retval = new PrintSetupRecord(rectype, size, data); retval = new PrintSetupRecord(rectype, size, data);
break; break;
case DefaultColWidthRecord.sid: case DefaultColWidthRecord.sid:
retval = new DefaultColWidthRecord(rectype, size, data); retval = new DefaultColWidthRecord(rectype, size, data);
break; break;
case DimensionsRecord.sid: case DimensionsRecord.sid:
retval = new DimensionsRecord(rectype, size, data); retval = new DimensionsRecord(rectype, size, data);
break; break;
case RowRecord.sid: case RowRecord.sid:
retval = new RowRecord(rectype, size, data); retval = new RowRecord(rectype, size, data);
break; break;
case LabelSSTRecord.sid: case LabelSSTRecord.sid:
retval = new LabelSSTRecord(rectype, size, data); retval = new LabelSSTRecord(rectype, size, data);
break; break;
case RKRecord.sid: case RKRecord.sid:
retval = new RKRecord(rectype, size, data); retval = new RKRecord(rectype, size, data);
break; break;
case NumberRecord.sid: case NumberRecord.sid:
retval = new NumberRecord(rectype, size, data); retval = new NumberRecord(rectype, size, data);
break; break;
case DBCellRecord.sid: case DBCellRecord.sid:
retval = new DBCellRecord(rectype, size, data); retval = new DBCellRecord(rectype, size, data);
break; break;
case WindowTwoRecord.sid: case WindowTwoRecord.sid:
retval = new WindowTwoRecord(rectype, size, data); retval = new WindowTwoRecord(rectype, size, data);
break; break;
case SelectionRecord.sid: case SelectionRecord.sid:
retval = new SelectionRecord(rectype, size, data); retval = new SelectionRecord(rectype, size, data);
break; break;
case ContinueRecord.sid: case ContinueRecord.sid:
retval = new ContinueRecord(rectype, size, data); retval = new ContinueRecord(rectype, size, data);
break; break;
case LabelRecord.sid: case LabelRecord.sid:
retval = new LabelRecord(rectype, size, data); retval = new LabelRecord(rectype, size, data);
break; break;
case MulRKRecord.sid: case MulRKRecord.sid:
retval = new MulRKRecord(rectype, size, data); retval = new MulRKRecord(rectype, size, data);
break; break;
case MulBlankRecord.sid: case MulBlankRecord.sid:
retval = new MulBlankRecord(rectype, size, data); retval = new MulBlankRecord(rectype, size, data);
break; break;
case BlankRecord.sid: case BlankRecord.sid:
retval = new BlankRecord(rectype, size, data); retval = new BlankRecord(rectype, size, data);
break; break;
case BoolErrRecord.sid: case BoolErrRecord.sid:
retval = new BoolErrRecord(rectype, size, data); retval = new BoolErrRecord(rectype, size, data);
break; break;
case ColumnInfoRecord.sid: case ColumnInfoRecord.sid:
retval = new ColumnInfoRecord(rectype, size, data); retval = new ColumnInfoRecord(rectype, size, data);
break; break;
case MergeCellsRecord.sid: case MergeCellsRecord.sid:
retval = new MergeCellsRecord(rectype, size, data); retval = new MergeCellsRecord(rectype, size, data);
break; break;
case AreaRecord.sid: case AreaRecord.sid:
retval = new AreaRecord(rectype, size, data); retval = new AreaRecord(rectype, size, data);
break; break;
case DataFormatRecord.sid: case DataFormatRecord.sid:
retval = new DataFormatRecord(rectype, size, data); retval = new DataFormatRecord(rectype, size, data);
break; break;
case BarRecord.sid: case BarRecord.sid:
retval = new BarRecord(rectype, size, data); retval = new BarRecord(rectype, size, data);
break; break;
case DatRecord.sid: case DatRecord.sid:
retval = new DatRecord(rectype, size, data); retval = new DatRecord(rectype, size, data);
break; break;
case PlotGrowthRecord.sid: case PlotGrowthRecord.sid:
retval = new PlotGrowthRecord(rectype, size, data); retval = new PlotGrowthRecord(rectype, size, data);
break; break;
case UnitsRecord.sid: case UnitsRecord.sid:
retval = new UnitsRecord(rectype, size, data); retval = new UnitsRecord(rectype, size, data);
break; break;
case FrameRecord.sid: case FrameRecord.sid:
retval = new FrameRecord(rectype, size, data); retval = new FrameRecord(rectype, size, data);
break; break;
case ValueRangeRecord.sid: case ValueRangeRecord.sid:
retval = new ValueRangeRecord(rectype, size, data); retval = new ValueRangeRecord(rectype, size, data);
break; break;
case SeriesListRecord.sid: case SeriesListRecord.sid:
retval = new SeriesListRecord(rectype, size, data); retval = new SeriesListRecord(rectype, size, data);
break; break;
case FontBasisRecord.sid: case FontBasisRecord.sid:
retval = new FontBasisRecord(rectype, size, data); retval = new FontBasisRecord(rectype, size, data);
break; break;
case FontIndexRecord.sid: case FontIndexRecord.sid:
retval = new FontIndexRecord(rectype, size, data); retval = new FontIndexRecord(rectype, size, data);
break; break;
case LineFormatRecord.sid: case LineFormatRecord.sid:
retval = new LineFormatRecord(rectype, size, data); retval = new LineFormatRecord(rectype, size, data);
break; break;
case AreaFormatRecord.sid: case AreaFormatRecord.sid:
retval = new AreaFormatRecord(rectype, size, data); retval = new AreaFormatRecord(rectype, size, data);
break; break;
case LinkedDataRecord.sid: case LinkedDataRecord.sid:
retval = new LinkedDataRecord(rectype, size, data); retval = new LinkedDataRecord(rectype, size, data);
break; break;
case FormulaRecord.sid: case FormulaRecord.sid:
retval = new FormulaRecord(rectype, size, data); retval = new FormulaRecord(rectype, size, data);
break; break;
case SheetPropertiesRecord.sid: case SheetPropertiesRecord.sid:
retval = new SheetPropertiesRecord(rectype, size, data); retval = new SheetPropertiesRecord(rectype, size, data);
break; break;
case DefaultDataLabelTextPropertiesRecord.sid: case DefaultDataLabelTextPropertiesRecord.sid:
retval = new DefaultDataLabelTextPropertiesRecord(rectype, size, data); retval = new DefaultDataLabelTextPropertiesRecord(rectype, size, data);
break; break;
case TextRecord.sid: case TextRecord.sid:
retval = new TextRecord(rectype, size, data); retval = new TextRecord(rectype, size, data);
break; break;
case AxisParentRecord.sid: case AxisParentRecord.sid:
retval = new AxisParentRecord(rectype, size, data); retval = new AxisParentRecord(rectype, size, data);
break; break;
case AxisLineFormatRecord.sid: case AxisLineFormatRecord.sid:
retval = new AxisLineFormatRecord(rectype, size, data); retval = new AxisLineFormatRecord(rectype, size, data);
break; break;
case SupBookRecord.sid: case SupBookRecord.sid:
retval = new SupBookRecord(rectype, size, data); retval = new SupBookRecord(rectype, size, data);
break; break;
case ExternSheetRecord.sid: case ExternSheetRecord.sid:
retval = new ExternSheetRecord(rectype, size, data); retval = new ExternSheetRecord(rectype, size, data);
break; break;
case SCLRecord.sid: case SCLRecord.sid:
retval = new SCLRecord(rectype, size, data); retval = new SCLRecord(rectype, size, data);
break; break;
case SeriesToChartGroupRecord.sid: case SeriesToChartGroupRecord.sid:
retval = new SeriesToChartGroupRecord(rectype, size, data); retval = new SeriesToChartGroupRecord(rectype, size, data);
break; break;
case AxisUsedRecord.sid:
retval = new AxisUsedRecord(rectype, size, data);
break;
case AxisRecord.sid:
retval = new AxisRecord(rectype, size, data);
break;
case CategorySeriesAxisRecord.sid:
retval = new CategorySeriesAxisRecord(rectype, size, data);
break;
case AxisOptionsRecord.sid:
retval = new AxisOptionsRecord(rectype, size, data);
break;
case TickRecord.sid:
retval = new TickRecord(rectype, size, data);
break;
default : default:
retval = new UnknownRecord(rectype, size, data); retval = new UnknownRecord(rectype, size, data);
} }
if (realretval == null) if (realretval == null) {
{
realretval = new Record[1]; realretval = new Record[1];
realretval[0] = retval; realretval[0] = retval;
System.out.println("recordid = 0x" + Integer.toHexString(rectype) + ", size =" + size); System.out.println("recordid = 0x" + Integer.toHexString(rectype) + ", size =" + size);
@ -685,45 +608,40 @@ public class BiffViewer
return realretval; return realretval;
} }
/** /**
* Method setDump - hex dump out data or not. * Method setDump - hex dump out data or not.
*
*
* @param dump
* *
*@param dump
*/ */
public void setDump(boolean dump) public void setDump(boolean dump) {
{
this.dump = dump; this.dump = dump;
} }
/** /**
* Method main * Method main with 1 argument just run straight biffview against given
* with 1 argument just run straight biffview against given file<P> * file<P>
* with 2 arguments where the second argument is "on" - run biffviewer<P>
* with hex dumps of records <P>
* *
* with 2 arguments where the second argument is "bfd" just run a big fat * with 2 arguments where the second argument is "on" - run biffviewer<P>
* hex dump of the file...don't worry about biffviewing it at all
* *
* with hex dumps of records <P>
* *
* @param args * with 2 arguments where the second argument is "bfd" just run a big fat
* hex dump of the file...don't worry about biffviewing it at all
* *
*@param args
*/ */
public static void main(String[] args) public static void main(String[] args) {
{ try {
try
{
BiffViewer viewer = new BiffViewer(args); BiffViewer viewer = new BiffViewer(args);
if ((args.length > 1) && args[1].equals("on")) if ((args.length > 1) && args[1].equals("on")) {
{
viewer.setDump(true); viewer.setDump(true);
} }
if ((args.length > 1) && args[1].equals("bfd")) if ((args.length > 1) && args[1].equals("bfd")) {
{
POIFSFileSystem fs = POIFSFileSystem fs =
new POIFSFileSystem(new FileInputStream(args[0])); new POIFSFileSystem(new FileInputStream(args[0]));
InputStream stream = InputStream stream =
@ -733,12 +651,10 @@ public class BiffViewer
stream.read(data); stream.read(data);
HexDump.dump(data, 0, System.out, 0); HexDump.dump(data, 0, System.out, 0);
} else } else {
{
viewer.run(); viewer.run();
} }
} catch (Exception e) } catch (Exception e) {
{
e.printStackTrace(); e.printStackTrace();
} }
} }