]> source.dussan.org Git - poi.git/commitdiff
Fix indent/whitespace
authorNick Burch <nick@apache.org>
Sun, 12 Jul 2015 18:02:50 +0000 (18:02 +0000)
committerNick Burch <nick@apache.org>
Sun, 12 Jul 2015 18:02:50 +0000 (18:02 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1690495 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/dev/BiffViewer.java

index a14339a66db34515f44e5ad9cce3e44bcb38bbd4..58753048c7ee3d5ad3bf2de155096f2aced2bbfb 100644 (file)
@@ -88,325 +88,322 @@ import org.apache.poi.util.LittleEndian;
 
 /**
  *  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)
- *@see        #main
+ * @see        #main
  */
 public final class BiffViewer {
-       static final char[] NEW_LINE_CHARS = System.getProperty("line.separator").toCharArray();
+    static final char[] NEW_LINE_CHARS = System.getProperty("line.separator").toCharArray();
 
     private BiffViewer() {
-               // no instances of this class
-       }
-
-       /**
-        *  Create an array of records from an input stream
-        *
-        *@param  is the InputStream from which the records will be obtained
-        *@return an array of Records created from the InputStream
-        *@exception  RecordFormatException  on error processing the InputStream
-        */
-       public static Record[] createRecords(InputStream is, PrintStream ps, BiffRecordListener recListener, boolean dumpInterpretedRecords)
-                       throws RecordFormatException {
-               List<Record> temp = new ArrayList<Record>();
-
-               RecordInputStream recStream = new RecordInputStream(is);
-               while (true) {
-                       boolean hasNext;
-                       try {
-                               hasNext = recStream.hasNextRecord();
-                       } catch (LeftoverDataException e) {
-                               e.printStackTrace();
-                               System.err.println("Discarding " + recStream.remaining() + " bytes and continuing");
-                               recStream.readRemainder();
-                               hasNext = recStream.hasNextRecord();
-                       }
-                       if (!hasNext) {
-                               break;
-                       }
-                       recStream.nextRecord();
-                       if (recStream.getSid() == 0) {
-                               continue;
-                       }
-                       Record record;
-                       if (dumpInterpretedRecords) {
-                               record = createRecord (recStream);
-                               if (record.getSid() == ContinueRecord.sid) {
-                                       continue;
-                               }
-                               temp.add(record);
-
-                               if (dumpInterpretedRecords) {
-                                       for (String header : recListener.getRecentHeaders()) {
-                                               ps.println(header);
-                                       }
-                                       ps.print(record.toString());
-                               }
-                       } else {
-                               recStream.readRemainder();
-                       }
-                       ps.println();
-               }
-               Record[] result = new Record[temp.size()];
-               temp.toArray(result);
-               return result;
-       }
-
-
-       /**
-        *  Essentially a duplicate of RecordFactory. Kept separate as not to screw
-        *  up non-debug operations.
-        *
-        */
-       private static Record createRecord(RecordInputStream in) {
-               switch (in.getSid()) {
-                       case AreaFormatRecord.sid:     return new AreaFormatRecord(in);
-                       case AreaRecord.sid:           return new AreaRecord(in);
-                       case ArrayRecord.sid:          return new ArrayRecord(in);
-                       case AxisLineFormatRecord.sid: return new AxisLineFormatRecord(in);
-                       case AxisOptionsRecord.sid:    return new AxisOptionsRecord(in);
-                       case AxisParentRecord.sid:     return new AxisParentRecord(in);
-                       case AxisRecord.sid:           return new AxisRecord(in);
-                       case AxisUsedRecord.sid:       return new AxisUsedRecord(in);
-                       case AutoFilterInfoRecord.sid: return new AutoFilterInfoRecord(in);
-                       case BOFRecord.sid:            return new BOFRecord(in);
-                       case BackupRecord.sid:         return new BackupRecord(in);
-                       case BarRecord.sid:            return new BarRecord(in);
-                       case BeginRecord.sid:          return new BeginRecord(in);
-                       case BlankRecord.sid:          return new BlankRecord(in);
-                       case BookBoolRecord.sid:       return new BookBoolRecord(in);
-                       case BoolErrRecord.sid:        return new BoolErrRecord(in);
-                       case BottomMarginRecord.sid:   return new BottomMarginRecord(in);
-                       case BoundSheetRecord.sid:     return new BoundSheetRecord(in);
-                       case CFHeaderRecord.sid:       return new CFHeaderRecord(in);
-            case CFHeader12Record.sid:     return new CFHeader12Record(in);
-                       case CFRuleRecord.sid:         return new CFRuleRecord(in);
-                       case CalcCountRecord.sid:      return new CalcCountRecord(in);
-                       case CalcModeRecord.sid:       return new CalcModeRecord(in);
-                       case CategorySeriesAxisRecord.sid: return new CategorySeriesAxisRecord(in);
-                       case ChartFormatRecord.sid:    return new ChartFormatRecord(in);
-                       case ChartRecord.sid:          return new ChartRecord(in);
-                       case CodepageRecord.sid:       return new CodepageRecord(in);
-                       case ColumnInfoRecord.sid:     return new ColumnInfoRecord(in);
-                       case ContinueRecord.sid:       return new ContinueRecord(in);
-                       case CountryRecord.sid:        return new CountryRecord(in);
-                       case DBCellRecord.sid:         return new DBCellRecord(in);
-                       case DSFRecord.sid:            return new DSFRecord(in);
-                       case DatRecord.sid:            return new DatRecord(in);
-                       case DataFormatRecord.sid:     return new DataFormatRecord(in);
-                       case DateWindow1904Record.sid: return new DateWindow1904Record(in);
-                       case DConRefRecord.sid: return new DConRefRecord(in);
-                       case DefaultColWidthRecord.sid:return new DefaultColWidthRecord(in);
-                       case DefaultDataLabelTextPropertiesRecord.sid: return new DefaultDataLabelTextPropertiesRecord(in);
-                       case DefaultRowHeightRecord.sid: return new DefaultRowHeightRecord(in);
-                       case DeltaRecord.sid:          return new DeltaRecord(in);
-                       case DimensionsRecord.sid:     return new DimensionsRecord(in);
-                       case DrawingGroupRecord.sid:   return new DrawingGroupRecord(in);
-                       case DrawingRecordForBiffViewer.sid: return new DrawingRecordForBiffViewer(in);
-                       case DrawingSelectionRecord.sid: return new DrawingSelectionRecord(in);
-                       case DVRecord.sid:             return new DVRecord(in);
-                       case DVALRecord.sid:           return new DVALRecord(in);
-                       case EOFRecord.sid:            return new EOFRecord(in);
-                       case EndRecord.sid:            return new EndRecord(in);
-                       case ExtSSTRecord.sid:         return new ExtSSTRecord(in);
-                       case ExtendedFormatRecord.sid: return new ExtendedFormatRecord(in);
-                       case ExternSheetRecord.sid:    return new ExternSheetRecord(in);
-                       case ExternalNameRecord.sid:   return new ExternalNameRecord(in);
-                       case FeatRecord.sid:           return new FeatRecord(in);
-                       case FeatHdrRecord.sid:        return new FeatHdrRecord(in);
-                       case FilePassRecord.sid:       return new FilePassRecord(in);
-                       case FileSharingRecord.sid:    return new FileSharingRecord(in);
-                       case FnGroupCountRecord.sid:   return new FnGroupCountRecord(in);
-                       case FontBasisRecord.sid:      return new FontBasisRecord(in);
-                       case FontIndexRecord.sid:      return new FontIndexRecord(in);
-                       case FontRecord.sid:           return new FontRecord(in);
-                       case FooterRecord.sid:         return new FooterRecord(in);
-                       case FormatRecord.sid:         return new FormatRecord(in);
-                       case FormulaRecord.sid:        return new FormulaRecord(in);
-                       case FrameRecord.sid:          return new FrameRecord(in);
-                       case GridsetRecord.sid:        return new GridsetRecord(in);
-                       case GutsRecord.sid:           return new GutsRecord(in);
-                       case HCenterRecord.sid:        return new HCenterRecord(in);
-                       case HeaderRecord.sid:         return new HeaderRecord(in);
-                       case HideObjRecord.sid:        return new HideObjRecord(in);
-                       case HorizontalPageBreakRecord.sid: return new HorizontalPageBreakRecord(in);
-                       case HyperlinkRecord.sid:      return new HyperlinkRecord(in);
-                       case IndexRecord.sid:          return new IndexRecord(in);
-                       case InterfaceEndRecord.sid:   return InterfaceEndRecord.create(in);
-                       case InterfaceHdrRecord.sid:   return new InterfaceHdrRecord(in);
-                       case IterationRecord.sid:      return new IterationRecord(in);
-                       case LabelRecord.sid:          return new LabelRecord(in);
-                       case LabelSSTRecord.sid:       return new LabelSSTRecord(in);
-                       case LeftMarginRecord.sid:     return new LeftMarginRecord(in);
-                       case LegendRecord.sid:         return new LegendRecord(in);
-                       case LineFormatRecord.sid:     return new LineFormatRecord(in);
-                       case LinkedDataRecord.sid:     return new LinkedDataRecord(in);
-                       case MMSRecord.sid:            return new MMSRecord(in);
-                       case MergeCellsRecord.sid:     return new MergeCellsRecord(in);
-                       case MulBlankRecord.sid:       return new MulBlankRecord(in);
-                       case MulRKRecord.sid:          return new MulRKRecord(in);
-                       case NameRecord.sid:           return new NameRecord(in);
-                       case NameCommentRecord.sid:    return new NameCommentRecord(in);
-                       case NoteRecord.sid:           return new NoteRecord(in);
-                       case NumberRecord.sid:         return new NumberRecord(in);
-                       case ObjRecord.sid:            return new ObjRecord(in);
-                       case ObjectLinkRecord.sid:     return new ObjectLinkRecord(in);
-                       case PaletteRecord.sid:        return new PaletteRecord(in);
-                       case PaneRecord.sid:           return new PaneRecord(in);
-                       case PasswordRecord.sid:       return new PasswordRecord(in);
-                       case PasswordRev4Record.sid:   return new PasswordRev4Record(in);
-                       case PlotAreaRecord.sid:       return new PlotAreaRecord(in);
-                       case PlotGrowthRecord.sid:     return new PlotGrowthRecord(in);
-                       case PrecisionRecord.sid:      return new PrecisionRecord(in);
-                       case PrintGridlinesRecord.sid: return new PrintGridlinesRecord(in);
-                       case PrintHeadersRecord.sid:   return new PrintHeadersRecord(in);
-                       case PrintSetupRecord.sid:     return new PrintSetupRecord(in);
-                       case ProtectRecord.sid:        return new ProtectRecord(in);
-                       case ProtectionRev4Record.sid: return new ProtectionRev4Record(in);
-                       case RKRecord.sid:             return new RKRecord(in);
-                       case RecalcIdRecord.sid:       return new RecalcIdRecord(in);
-                       case RefModeRecord.sid:        return new RefModeRecord(in);
-                       case RefreshAllRecord.sid:     return new RefreshAllRecord(in);
-                       case RightMarginRecord.sid:    return new RightMarginRecord(in);
-                       case RowRecord.sid:            return new RowRecord(in);
-                       case SCLRecord.sid:            return new SCLRecord(in);
-                       case SSTRecord.sid:            return new SSTRecord(in);
-                       case SaveRecalcRecord.sid:     return new SaveRecalcRecord(in);
-                       case SelectionRecord.sid:      return new SelectionRecord(in);
-                       case SeriesIndexRecord.sid:    return new SeriesIndexRecord(in);
-                       case SeriesListRecord.sid:     return new SeriesListRecord(in);
-                       case SeriesRecord.sid:         return new SeriesRecord(in);
-                       case SeriesTextRecord.sid:     return new SeriesTextRecord(in);
-                       case SeriesToChartGroupRecord.sid: return new SeriesToChartGroupRecord(in);
-                       case SharedFormulaRecord.sid:  return new SharedFormulaRecord(in);
-                       case SheetPropertiesRecord.sid:return new SheetPropertiesRecord(in);
-                       case StringRecord.sid:         return new StringRecord(in);
-                       case StyleRecord.sid:          return new StyleRecord(in);
-                       case SupBookRecord.sid:        return new SupBookRecord(in);
-                       case TabIdRecord.sid:          return new TabIdRecord(in);
-                       case TableStylesRecord.sid:    return new TableStylesRecord(in);
-                       case TableRecord.sid:          return new TableRecord(in);
-                       case TextObjectRecord.sid:     return new TextObjectRecord(in);
-                       case TextRecord.sid:           return new TextRecord(in);
-                       case TickRecord.sid:           return new TickRecord(in);
-                       case TopMarginRecord.sid:      return new TopMarginRecord(in);
-            case UncalcedRecord.sid:       return new UncalcedRecord(in);
-                       case UnitsRecord.sid:          return new UnitsRecord(in);
-                       case UseSelFSRecord.sid:       return new UseSelFSRecord(in);
-                       case VCenterRecord.sid:        return new VCenterRecord(in);
-                       case ValueRangeRecord.sid:     return new ValueRangeRecord(in);
-                       case VerticalPageBreakRecord.sid: return new VerticalPageBreakRecord(in);
-                       case WSBoolRecord.sid:         return new WSBoolRecord(in);
-                       case WindowOneRecord.sid:      return new WindowOneRecord(in);
-                       case WindowProtectRecord.sid:  return new WindowProtectRecord(in);
-                       case WindowTwoRecord.sid:      return new WindowTwoRecord(in);
-                       case WriteAccessRecord.sid:    return new WriteAccessRecord(in);
-                       case WriteProtectRecord.sid:   return new WriteProtectRecord(in);
-
-                       // chart
-                       case CatLabRecord.sid:         return new CatLabRecord(in);
-                       case ChartEndBlockRecord.sid:  return new ChartEndBlockRecord(in);
-                       case ChartEndObjectRecord.sid: return new ChartEndObjectRecord(in);
-                       case ChartFRTInfoRecord.sid:   return new ChartFRTInfoRecord(in);
-                       case ChartStartBlockRecord.sid: return new ChartStartBlockRecord(in);
-                       case ChartStartObjectRecord.sid: return new ChartStartObjectRecord(in);
-
-                       // pivot table
-                       case StreamIDRecord.sid:        return new StreamIDRecord(in);
-                       case ViewSourceRecord.sid:      return new ViewSourceRecord(in);
-                       case PageItemRecord.sid:        return new PageItemRecord(in);
-                       case ViewDefinitionRecord.sid:  return new ViewDefinitionRecord(in);
-                       case ViewFieldsRecord.sid:      return new ViewFieldsRecord(in);
-                       case DataItemRecord.sid:        return new DataItemRecord(in);
-                       case ExtendedPivotTableViewFieldsRecord.sid: return new ExtendedPivotTableViewFieldsRecord(in);
-               }
-               return new UnknownRecord(in);
-       }
-
-       private static final class CommandArgs {
-
-               private final boolean _biffhex;
-               private final boolean _noint;
-               private final boolean _out;
-               private final boolean _rawhex;
-               private final boolean _noHeader;
-               private final File _file;
-
-               private CommandArgs(boolean biffhex, boolean noint, boolean out, boolean rawhex, boolean noHeader, File file) {
-                       _biffhex = biffhex;
-                       _noint = noint;
-                       _out = out;
-                       _rawhex = rawhex;
-                       _file = file;
-                       _noHeader = noHeader;
-               }
-
-               public static CommandArgs parse(String[] args) throws CommandParseException {
-                       int nArgs = args.length;
-                       boolean biffhex = false;
-                       boolean noint = false;
-                       boolean out = false;
-                       boolean rawhex = false;
-                       boolean noheader = false;
-                       File file = null;
-                       for (int i=0; i<nArgs; i++) {
-                               String arg = args[i];
-                               if (arg.startsWith("--")) {
-                                       if ("--biffhex".equals(arg)) {
-                                               biffhex = true;
-                                       } else if ("--noint".equals(arg)) {
-                                               noint = true;
-                                       } else if ("--out".equals(arg)) {
-                                               out = true;
-                                       } else if ("--escher".equals(arg)) {
-                                               System.setProperty("poi.deserialize.escher", "true");
-                                       } else if ("--rawhex".equals(arg)) {
-                                               rawhex = true;
-                                       } else if ("--noheader".equals(arg)) {
-                                               noheader = true;
-                                       } else {
-                                               throw new CommandParseException("Unexpected option '" + arg + "'");
-                                       }
-                                       continue;
-                               }
-                               file = new File(arg);
-                               if (!file.exists()) {
-                                       throw new CommandParseException("Specified file '" + arg + "' does not exist");
-                               }
-                               if (i+1<nArgs) {
-                                       throw new CommandParseException("File name must be the last arg");
-                               }
-                       }
-                       if (file == null) {
-                               throw new CommandParseException("Biff viewer needs a filename");
-                       }
-                       return new CommandArgs(biffhex, noint, out, rawhex, noheader, file);
-               }
-               public boolean shouldDumpBiffHex() {
-                       return _biffhex;
-               }
-               public boolean shouldDumpRecordInterpretations() {
-                       return !_noint;
-               }
-               public boolean shouldOutputToFile() {
-                       return _out;
-               }
-               public boolean shouldOutputRawHexOnly() {
-                       return _rawhex;
-               }
-               public boolean suppressHeader() {
-                       return _noHeader;
-               }
-               public File getFile() {
-                       return _file;
-               }
-       }
-       private static final class CommandParseException extends Exception {
-               public CommandParseException(String msg) {
-                       super(msg);
-               }
-       }
+        // no instances of this class
+    }
+
+    /**
+     *  Create an array of records from an input stream
+     *
+     *@param  is the InputStream from which the records will be obtained
+     *@return an array of Records created from the InputStream
+     *@exception  RecordFormatException  on error processing the InputStream
+     */
+    public static Record[] createRecords(InputStream is, PrintStream ps, BiffRecordListener recListener, boolean dumpInterpretedRecords)
+            throws RecordFormatException {
+        List<Record> temp = new ArrayList<Record>();
+
+        RecordInputStream recStream = new RecordInputStream(is);
+        while (true) {
+            boolean hasNext;
+            try {
+                hasNext = recStream.hasNextRecord();
+            } catch (LeftoverDataException e) {
+                e.printStackTrace();
+                System.err.println("Discarding " + recStream.remaining() + " bytes and continuing");
+                recStream.readRemainder();
+                hasNext = recStream.hasNextRecord();
+            }
+            if (!hasNext) {
+                break;
+            }
+            recStream.nextRecord();
+            if (recStream.getSid() == 0) {
+                continue;
+            }
+            Record record;
+            if (dumpInterpretedRecords) {
+                record = createRecord (recStream);
+                if (record.getSid() == ContinueRecord.sid) {
+                    continue;
+                }
+                temp.add(record);
+
+                if (dumpInterpretedRecords) {
+                    for (String header : recListener.getRecentHeaders()) {
+                        ps.println(header);
+                    }
+                    ps.print(record.toString());
+                }
+            } else {
+                recStream.readRemainder();
+            }
+            ps.println();
+        }
+        Record[] result = new Record[temp.size()];
+        temp.toArray(result);
+        return result;
+    }
+
+
+    /**
+     *  Essentially a duplicate of RecordFactory. Kept separate as not to screw
+     *  up non-debug operations.
+     *
+     */
+    private static Record createRecord(RecordInputStream in) {
+        switch (in.getSid()) {
+            case AreaFormatRecord.sid:        return new AreaFormatRecord(in);
+            case AreaRecord.sid:              return new AreaRecord(in);
+            case ArrayRecord.sid:             return new ArrayRecord(in);
+            case AxisLineFormatRecord.sid:    return new AxisLineFormatRecord(in);
+            case AxisOptionsRecord.sid:       return new AxisOptionsRecord(in);
+            case AxisParentRecord.sid:        return new AxisParentRecord(in);
+            case AxisRecord.sid:              return new AxisRecord(in);
+            case AxisUsedRecord.sid:          return new AxisUsedRecord(in);
+            case AutoFilterInfoRecord.sid:    return new AutoFilterInfoRecord(in);
+            case BOFRecord.sid:               return new BOFRecord(in);
+            case BackupRecord.sid:            return new BackupRecord(in);
+            case BarRecord.sid:               return new BarRecord(in);
+            case BeginRecord.sid:             return new BeginRecord(in);
+            case BlankRecord.sid:             return new BlankRecord(in);
+            case BookBoolRecord.sid:          return new BookBoolRecord(in);
+            case BoolErrRecord.sid:           return new BoolErrRecord(in);
+            case BottomMarginRecord.sid:      return new BottomMarginRecord(in);
+            case BoundSheetRecord.sid:        return new BoundSheetRecord(in);
+            case CFHeaderRecord.sid:          return new CFHeaderRecord(in);
+            case CFHeader12Record.sid:        return new CFHeader12Record(in);
+            case CFRuleRecord.sid:            return new CFRuleRecord(in);
+            case CalcCountRecord.sid:         return new CalcCountRecord(in);
+            case CalcModeRecord.sid:          return new CalcModeRecord(in);
+            case CategorySeriesAxisRecord.sid:return new CategorySeriesAxisRecord(in);
+            case ChartFormatRecord.sid:       return new ChartFormatRecord(in);
+            case ChartRecord.sid:             return new ChartRecord(in);
+            case CodepageRecord.sid:          return new CodepageRecord(in);
+            case ColumnInfoRecord.sid:        return new ColumnInfoRecord(in);
+            case ContinueRecord.sid:          return new ContinueRecord(in);
+            case CountryRecord.sid:           return new CountryRecord(in);
+            case DBCellRecord.sid:            return new DBCellRecord(in);
+            case DSFRecord.sid:               return new DSFRecord(in);
+            case DatRecord.sid:               return new DatRecord(in);
+            case DataFormatRecord.sid:        return new DataFormatRecord(in);
+            case DateWindow1904Record.sid:    return new DateWindow1904Record(in);
+            case DConRefRecord.sid:           return new DConRefRecord(in);
+            case DefaultColWidthRecord.sid:   return new DefaultColWidthRecord(in);
+            case DefaultDataLabelTextPropertiesRecord.sid: return new DefaultDataLabelTextPropertiesRecord(in);
+            case DefaultRowHeightRecord.sid:  return new DefaultRowHeightRecord(in);
+            case DeltaRecord.sid:             return new DeltaRecord(in);
+            case DimensionsRecord.sid:        return new DimensionsRecord(in);
+            case DrawingGroupRecord.sid:      return new DrawingGroupRecord(in);
+            case DrawingRecordForBiffViewer.sid: return new DrawingRecordForBiffViewer(in);
+            case DrawingSelectionRecord.sid:  return new DrawingSelectionRecord(in);
+            case DVRecord.sid:                return new DVRecord(in);
+            case DVALRecord.sid:              return new DVALRecord(in);
+            case EOFRecord.sid:               return new EOFRecord(in);
+            case EndRecord.sid:               return new EndRecord(in);
+            case ExtSSTRecord.sid:            return new ExtSSTRecord(in);
+            case ExtendedFormatRecord.sid:    return new ExtendedFormatRecord(in);
+            case ExternSheetRecord.sid:       return new ExternSheetRecord(in);
+            case ExternalNameRecord.sid:      return new ExternalNameRecord(in);
+            case FeatRecord.sid:              return new FeatRecord(in);
+            case FeatHdrRecord.sid:           return new FeatHdrRecord(in);
+            case FilePassRecord.sid:          return new FilePassRecord(in);
+            case FileSharingRecord.sid:       return new FileSharingRecord(in);
+            case FnGroupCountRecord.sid:      return new FnGroupCountRecord(in);
+            case FontBasisRecord.sid:         return new FontBasisRecord(in);
+            case FontIndexRecord.sid:         return new FontIndexRecord(in);
+            case FontRecord.sid:              return new FontRecord(in);
+            case FooterRecord.sid:            return new FooterRecord(in);
+            case FormatRecord.sid:            return new FormatRecord(in);
+            case FormulaRecord.sid:           return new FormulaRecord(in);
+            case FrameRecord.sid:             return new FrameRecord(in);
+            case GridsetRecord.sid:           return new GridsetRecord(in);
+            case GutsRecord.sid:              return new GutsRecord(in);
+            case HCenterRecord.sid:           return new HCenterRecord(in);
+            case HeaderRecord.sid:            return new HeaderRecord(in);
+            case HideObjRecord.sid:           return new HideObjRecord(in);
+            case HorizontalPageBreakRecord.sid: return new HorizontalPageBreakRecord(in);
+            case HyperlinkRecord.sid:         return new HyperlinkRecord(in);
+            case IndexRecord.sid:             return new IndexRecord(in);
+            case InterfaceEndRecord.sid:      return InterfaceEndRecord.create(in);
+            case InterfaceHdrRecord.sid:      return new InterfaceHdrRecord(in);
+            case IterationRecord.sid:         return new IterationRecord(in);
+            case LabelRecord.sid:             return new LabelRecord(in);
+            case LabelSSTRecord.sid:          return new LabelSSTRecord(in);
+            case LeftMarginRecord.sid:        return new LeftMarginRecord(in);
+            case LegendRecord.sid:            return new LegendRecord(in);
+            case LineFormatRecord.sid:        return new LineFormatRecord(in);
+            case LinkedDataRecord.sid:        return new LinkedDataRecord(in);
+            case MMSRecord.sid:               return new MMSRecord(in);
+            case MergeCellsRecord.sid:        return new MergeCellsRecord(in);
+            case MulBlankRecord.sid:          return new MulBlankRecord(in);
+            case MulRKRecord.sid:             return new MulRKRecord(in);
+            case NameRecord.sid:              return new NameRecord(in);
+            case NameCommentRecord.sid:       return new NameCommentRecord(in);
+            case NoteRecord.sid:              return new NoteRecord(in);
+            case NumberRecord.sid:            return new NumberRecord(in);
+            case ObjRecord.sid:               return new ObjRecord(in);
+            case ObjectLinkRecord.sid:        return new ObjectLinkRecord(in);
+            case PaletteRecord.sid:           return new PaletteRecord(in);
+            case PaneRecord.sid:              return new PaneRecord(in);
+            case PasswordRecord.sid:          return new PasswordRecord(in);
+            case PasswordRev4Record.sid:      return new PasswordRev4Record(in);
+            case PlotAreaRecord.sid:          return new PlotAreaRecord(in);
+            case PlotGrowthRecord.sid:        return new PlotGrowthRecord(in);
+            case PrecisionRecord.sid:         return new PrecisionRecord(in);
+            case PrintGridlinesRecord.sid:    return new PrintGridlinesRecord(in);
+            case PrintHeadersRecord.sid:      return new PrintHeadersRecord(in);
+            case PrintSetupRecord.sid:        return new PrintSetupRecord(in);
+            case ProtectRecord.sid:           return new ProtectRecord(in);
+            case ProtectionRev4Record.sid:    return new ProtectionRev4Record(in);
+            case RKRecord.sid:                return new RKRecord(in);
+            case RecalcIdRecord.sid:          return new RecalcIdRecord(in);
+            case RefModeRecord.sid:           return new RefModeRecord(in);
+            case RefreshAllRecord.sid:        return new RefreshAllRecord(in);
+            case RightMarginRecord.sid:       return new RightMarginRecord(in);
+            case RowRecord.sid:               return new RowRecord(in);
+            case SCLRecord.sid:               return new SCLRecord(in);
+            case SSTRecord.sid:               return new SSTRecord(in);
+            case SaveRecalcRecord.sid:        return new SaveRecalcRecord(in);
+            case SelectionRecord.sid:         return new SelectionRecord(in);
+            case SeriesIndexRecord.sid:       return new SeriesIndexRecord(in);
+            case SeriesListRecord.sid:        return new SeriesListRecord(in);
+            case SeriesRecord.sid:            return new SeriesRecord(in);
+            case SeriesTextRecord.sid:        return new SeriesTextRecord(in);
+            case SeriesToChartGroupRecord.sid:return new SeriesToChartGroupRecord(in);
+            case SharedFormulaRecord.sid:     return new SharedFormulaRecord(in);
+            case SheetPropertiesRecord.sid:   return new SheetPropertiesRecord(in);
+            case StringRecord.sid:            return new StringRecord(in);
+            case StyleRecord.sid:             return new StyleRecord(in);
+            case SupBookRecord.sid:           return new SupBookRecord(in);
+            case TabIdRecord.sid:             return new TabIdRecord(in);
+            case TableStylesRecord.sid:       return new TableStylesRecord(in);
+            case TableRecord.sid:             return new TableRecord(in);
+            case TextObjectRecord.sid:        return new TextObjectRecord(in);
+            case TextRecord.sid:              return new TextRecord(in);
+            case TickRecord.sid:              return new TickRecord(in);
+            case TopMarginRecord.sid:         return new TopMarginRecord(in);
+            case UncalcedRecord.sid:          return new UncalcedRecord(in);
+            case UnitsRecord.sid:             return new UnitsRecord(in);
+            case UseSelFSRecord.sid:          return new UseSelFSRecord(in);
+            case VCenterRecord.sid:           return new VCenterRecord(in);
+            case ValueRangeRecord.sid:        return new ValueRangeRecord(in);
+            case VerticalPageBreakRecord.sid: return new VerticalPageBreakRecord(in);
+            case WSBoolRecord.sid:            return new WSBoolRecord(in);
+            case WindowOneRecord.sid:         return new WindowOneRecord(in);
+            case WindowProtectRecord.sid:     return new WindowProtectRecord(in);
+            case WindowTwoRecord.sid:         return new WindowTwoRecord(in);
+            case WriteAccessRecord.sid:       return new WriteAccessRecord(in);
+            case WriteProtectRecord.sid:      return new WriteProtectRecord(in);
+
+            // chart
+            case CatLabRecord.sid:            return new CatLabRecord(in);
+            case ChartEndBlockRecord.sid:     return new ChartEndBlockRecord(in);
+            case ChartEndObjectRecord.sid:    return new ChartEndObjectRecord(in);
+            case ChartFRTInfoRecord.sid:      return new ChartFRTInfoRecord(in);
+            case ChartStartBlockRecord.sid:   return new ChartStartBlockRecord(in);
+            case ChartStartObjectRecord.sid:  return new ChartStartObjectRecord(in);
+
+            // pivot table
+            case StreamIDRecord.sid:           return new StreamIDRecord(in);
+            case ViewSourceRecord.sid:         return new ViewSourceRecord(in);
+            case PageItemRecord.sid:           return new PageItemRecord(in);
+            case ViewDefinitionRecord.sid:     return new ViewDefinitionRecord(in);
+            case ViewFieldsRecord.sid:         return new ViewFieldsRecord(in);
+            case DataItemRecord.sid:           return new DataItemRecord(in);
+            case ExtendedPivotTableViewFieldsRecord.sid: return new ExtendedPivotTableViewFieldsRecord(in);
+        }
+        return new UnknownRecord(in);
+    }
+
+    private static final class CommandArgs {
+
+        private final boolean _biffhex;
+        private final boolean _noint;
+        private final boolean _out;
+        private final boolean _rawhex;
+        private final boolean _noHeader;
+        private final File _file;
+
+        private CommandArgs(boolean biffhex, boolean noint, boolean out, boolean rawhex, boolean noHeader, File file) {
+            _biffhex = biffhex;
+            _noint = noint;
+            _out = out;
+            _rawhex = rawhex;
+            _file = file;
+            _noHeader = noHeader;
+        }
+
+        public static CommandArgs parse(String[] args) throws CommandParseException {
+            int nArgs = args.length;
+            boolean biffhex = false;
+            boolean noint = false;
+            boolean out = false;
+            boolean rawhex = false;
+            boolean noheader = false;
+            File file = null;
+            for (int i=0; i<nArgs; i++) {
+                String arg = args[i];
+                if (arg.startsWith("--")) {
+                    if ("--biffhex".equals(arg)) {
+                        biffhex = true;
+                    } else if ("--noint".equals(arg)) {
+                        noint = true;
+                    } else if ("--out".equals(arg)) {
+                        out = true;
+                    } else if ("--escher".equals(arg)) {
+                        System.setProperty("poi.deserialize.escher", "true");
+                    } else if ("--rawhex".equals(arg)) {
+                        rawhex = true;
+                    } else if ("--noheader".equals(arg)) {
+                        noheader = true;
+                    } else {
+                        throw new CommandParseException("Unexpected option '" + arg + "'");
+                    }
+                    continue;
+                }
+                file = new File(arg);
+                if (!file.exists()) {
+                    throw new CommandParseException("Specified file '" + arg + "' does not exist");
+                }
+                if (i+1<nArgs) {
+                    throw new CommandParseException("File name must be the last arg");
+                }
+            }
+            if (file == null) {
+                throw new CommandParseException("Biff viewer needs a filename");
+            }
+            return new CommandArgs(biffhex, noint, out, rawhex, noheader, file);
+        }
+        public boolean shouldDumpBiffHex() {
+            return _biffhex;
+        }
+        public boolean shouldDumpRecordInterpretations() {
+            return !_noint;
+        }
+        public boolean shouldOutputToFile() {
+            return _out;
+        }
+        public boolean shouldOutputRawHexOnly() {
+            return _rawhex;
+        }
+        public boolean suppressHeader() {
+            return _noHeader;
+        }
+        public File getFile() {
+            return _file;
+        }
+    }
+    private static final class CommandParseException extends Exception {
+        public CommandParseException(String msg) {
+            super(msg);
+        }
+    }
 
        /**
         * Method main with 1 argument just run straight biffview against given