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 }