View Javadoc

1   ////////////////////////////////////////////////////////////////////////////////
2   // MillScript-Excel: an Open Spice interpreter and batch website creation tool
3   // Copyright (C) 2006 Open World Ltd, Kevin Rogers
4   //
5   // This file is part of MillScript-Excel.
6   //
7   // MillScript-Excel is free software; you can redistribute it and/or modify it under
8   // the terms of the GNU General Public License as published by the Free
9   // Software Foundation; either version 2 of the License, or (at your option)
10  // any later version.
11  //
12  // MillScript-Excel is distributed in the hope that it will be useful, but WITHOUT
13  // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15  // more details.
16  //
17  // You should have received a copy of the GNU General Public License along with
18  // MillScript-Excel; if not, write to the Free Software Foundation, Inc., 59 Temple
19  // Place, Suite 330, Boston, MA  02111-1307  USA
20  ////////////////////////////////////////////////////////////////////////////////
21  package org.millscript.office.excel.records.substructures;
22  
23  import org.millscript.office.excel.RecordTokenizer;
24  import org.millscript.office.excel.alerts.BIFFAlert;
25  
26  /**
27   * 
28   */
29  public abstract class ConstantCachedValue {
30  
31      public static ConstantCachedValue getValue( final RecordTokenizer tokenizer ) {
32          final byte id = tokenizer.readByte();
33          switch ( id ) {
34              case 0x00:  // Empty
35                  // Skip the 8 unused bytes :-)
36                  tokenizer.skipBytes( 8 );
37                  return new EmptyValue();
38              case 0x01:  // Number
39                  return new NumberValue( tokenizer.read8ByteDouble() );
40              case 0x02:  // String
41                  switch ( tokenizer.getBiffVersion() ) {
42                      case BIFF8:
43                      case BIFF8X:
44                          return new StringValue( tokenizer.readLongString() );
45                      default:
46                          return new StringValue( tokenizer.readShortString() );
47                  }
48              case 0x04:  // Boolean
49                  final byte value = tokenizer.readByte();
50                  // Skip the 8 unused bytes :-)
51                  tokenizer.skipBytes( 7 );
52                  switch ( value ) {
53                      case 0:
54                          return new BooleanValue( false );
55                      case 1:
56                          return new BooleanValue( true );
57                      default:
58                          throw new BIFFAlert(
59                              "Illegal value for Boolean constant cached value"
60                          ).culprit( "value", value ).mishap();
61                  }
62              case 0x10:  // Error
63                  final byte error = tokenizer.readByte();
64                  // Skip the 8 unused bytes :-)
65                  tokenizer.skipBytes( 7 );
66                  return new ErrorValue( error );
67              default:
68                  throw new BIFFAlert(
69                      "Unknown identifier for constant cached value"
70                  ).culprit( "identifier", id ).mishap();
71          }
72      }
73  
74  }