001: /* ====================================================================
002: Licensed to the Apache Software Foundation (ASF) under one or more
003: contributor license agreements. See the NOTICE file distributed with
004: this work for additional information regarding copyright ownership.
005: The ASF licenses this file to You under the Apache License, Version 2.0
006: (the "License"); you may not use this file except in compliance with
007: the License. You may obtain a copy of the License at
008:
009: http://www.apache.org/licenses/LICENSE-2.0
010:
011: Unless required by applicable law or agreed to in writing, software
012: distributed under the License is distributed on an "AS IS" BASIS,
013: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: See the License for the specific language governing permissions and
015: limitations under the License.
016: ==================================================================== */
017:
018: package org.apache.poi.hdf.model.hdftypes;
019:
020: import org.apache.poi.util.BitField;
021: import org.apache.poi.util.LittleEndian;
022:
023: import org.apache.poi.hdf.model.hdftypes.definitions.FIBAbstractType;
024:
025: /**
026: *
027: * @author andy
028: */
029: public class FileInformationBlock extends FIBAbstractType {
030: /*
031: private short field_1_id;
032: private short field_2_version; // 101 = Word 6.0 +
033: private short field_3_product_version;
034: private short field_4_language_stamp;
035: private short field_5_unknown;
036: private short field_6_options;
037:
038: private static final BitField template = BitFieldFactory.getInstance(0x0001);
039: private static final BitField glossary = BitFieldFactory.getInstance(0x0002);
040: private static final BitField quicksave = BitFieldFactory.getInstance(0x0004);
041: private static final BitField haspictr = BitFieldFactory.getInstance(0x0008);
042: private static final BitField nquicksaves = BitFieldFactory.getInstance(0x00F0);
043: private static final BitField encrypted = BitFieldFactory.getInstance(0x0100);
044: private static final BitField tabletype = BitFieldFactory.getInstance(0x0200);
045: private static final BitField readonly = BitFieldFactory.getInstance(0x0400);
046: private static final BitField writeReservation = BitFieldFactory.getInstance(0x0800);
047: private static final BitField extendedCharacter = BitFieldFactory.getInstance(0x1000);
048: private static final BitField loadOverride = BitFieldFactory.getInstance(0x2000);
049: private static final BitField farEast = BitFieldFactory.getInstance(0x4000);
050: private static final BitField crypto = BitFieldFactory.getInstance(0x8000);
051:
052: private short field_7_minversion;
053: private short field_8_encrypted_key;
054: private short field_9_environment; // 0 or 1 - windows or mac
055: private short field_10_history;
056:
057: private static final BitField history_mac = BitFieldFactory.getInstance(0x01);
058: private static final BitField empty_special = BitFieldFactory.getInstance(0x02);
059: private static final BitField load_override = BitFieldFactory.getInstance(0x04);
060: private static final BitField future_undo = BitFieldFactory.getInstance(0x08);
061: private static final BitField w97_saved = BitFieldFactory.getInstance(0x10);
062: private static final BitField spare = BitFieldFactory.getInstance(0xfe);
063:
064: private short field_11_default_charset;
065: private short field_12_default_extcharset;
066: private int field_13_offset_first_char;
067: private int field_14_offset_last_char;
068: private short field_15_count_shorts;
069:
070: private short field_16_beg_shorts; //why same offset?
071:
072: private short field_16_creator_id;
073: private short field_17_revisor_id;
074: private short field_18_creator_private;
075: private short field_19_revisor_private;
076:
077: private short field_20_unused;
078: private short field_21_unused;
079: private short field_22_unused;
080: private short field_23_unused;
081: private short field_24_unused;
082: private short field_25_unused;
083: private short field_26_unused;
084: private short field_27_unused;
085: private short field_28_unused;
086:
087: private short field_29_fareastid;
088: private short field_30_count_ints;
089:
090: private int field_31_beg_ints; //why same offset?
091:
092: private int field_31_last_byte;
093:
094: private int field_32_creator_build_date;
095: private int field_33_revisor_build_date; */
096: /** length of main document text stream*/
097: // private int field_34_main_streamlen;
098: /**length of footnote subdocument text stream*/
099: /* private int field_35_footnote_streamlen;
100: private int field_36_header_streamlen;
101: private int field_37_macro_streamlen;
102: private int field_38_annotation_streamlen;
103: private int field_39_endnote_streamlen;
104: private int field_40_textbox_streamlen;
105: private int field_41_headbox_streamlen; */
106: /**offset in table stream of character property bin table*/
107: // private int field_42_pointer_to_plc_list_chp; //rename me!
108: // private int field_43_first_chp; //rename me
109: // private int field_44_count_chps; //rename me
110: /**offset in table stream of paragraph property bin */
111: /* private int field_45_pointer_to_plc_list_pap; //rename me.
112: private int field_46_first_pap; //rename me
113: private int field_47_count_paps; //rename me
114: private int field_48_pointer_to_plc_list_lvc; //rename me
115: private int field_49_first_lvc; //rename me
116: private int field_50_count_lvc; //rename me
117:
118: private int field_51_unknown;
119: private int field_52_unknown; */
120: //not sure about this array.
121: /*
122: private short field_53_fc_lcb_array_size;
123: private int field_54_original_stylesheet_offset;
124: private int field_55_original_stylesheet_size;
125: private int field_56_stylesheet_offset;
126: private int field_57_stylesheet_size;
127: private int field_58_footnote_ref_offset;
128: private int field_59_footnote_ref_size;
129: private int field_60_footnote_plc_offset;
130: private int field_61_footnote_plc_size;
131: private int field_62_annotation_ref_offset;
132: private int field_63_annotation_ref_size;
133: private int field_64_annotation_plc_offset;
134: private int field_65_annotation_plc_size; */
135: /** offset in table stream of section descriptor SED PLC*/
136: /* private int field_66_section_plc_offset;
137: private int field_67_section_plc_size;
138: private int field_68_unused;
139: private int field_69_unused;
140: private int field_70_pheplc_offset;
141: private int field_71_pheplc_size;
142: private int field_72_glossaryST_offset;
143: private int field_73_glossaryST_size;
144: private int field_74_glossaryPLC_offset;
145: private int field_75_glossaryPLC_size;
146: private int field_76_headerPLC_offset;
147: private int field_77_headerPLC_size;
148: private int field_78_chp_bin_table_offset;
149: private int field_79_chp_bin_table_size;
150: private int field_80_pap_bin_table_offset;
151: private int field_81_pap_bin_table_size;
152: private int field_82_sea_plc_offset;
153: private int field_83_sea_plc_size;
154: private int field_84_fonts_offset;
155: private int field_85_fonts_size;
156: private int field_86_main_fields_offset;
157: private int field_87_main_fields_size;
158: private int field_88_header_fields_offset;
159: private int field_89_header_fields_size;
160: private int field_90_footnote_fields_offset;
161: private int field_91_footnote_fields_size;
162: private int field_92_ann_fields_offset;
163: private int field_93_ann_fields_size;
164: private int field_94_unused;
165: private int field_95_unused;
166: private int field_96_bookmark_names_offset;
167: private int field_97_bookmark_names_size;
168: private int field_98_bookmark_offsets_offset;
169: private int field_99_bookmark_offsets_size;
170: private int field_100_macros_offset;
171: private int field_101_macros_size;
172: private int field_102_unused;
173: private int field_103_unused;
174: private int field_104_unused;
175: private int field_105_unused;
176: private int field_106_printer_offset;
177: private int field_107_printer_size;
178: private int field_108_printer_portrait_offset;
179: private int field_109_printer_portrait_size;
180: private int field_110_printer_landscape_offset;
181: private int field_111_printer_landscape_size;
182: private int field_112_wss_offset;
183: private int field_113_wss_size;
184: private int field_114_DOP_offset;
185: private int field_115_DOP_size;
186: private int field_116_sttbfassoc_offset;
187: private int field_117_sttbfassoc_size; */
188: /**offset in table stream of beginning of information for complex files.
189: * Also, this is the beginning of the Text piece table*/
190: /*
191: private int field_118_textPieceTable_offset;
192: private int field_119_textPieceTable_size;
193: private int field_199_list_format_offset;
194: private int field_200_list_format_size;
195: private int field_201_list_format_override_offset;
196: private int field_202_list_format_override_size;
197:
198:
199:
200:
201: ^/
202: /** Creates a new instance of FileInformationBlock */
203: public FileInformationBlock(byte[] mainDocument) {
204: fillFields(mainDocument, (short) 0, (short) 0);
205: /* field_1_id = LittleEndian.getShort(mainDocument, 0);
206: field_2_version = LittleEndian.getShort(mainDocument, 0x2); // 101 = Word 6.0 +
207: field_3_product_version = LittleEndian.getShort(mainDocument, 0x4);
208: field_4_language_stamp = LittleEndian.getShort(mainDocument, 0x6);
209: field_5_unknown = LittleEndian.getShort(mainDocument, 0x8);
210: field_6_options = LittleEndian.getShort(mainDocument, 0xa);
211:
212:
213:
214: field_13_offset_first_char = LittleEndian.getInt(mainDocument, 0x18);
215: field_34_main_streamlen = LittleEndian.getInt(mainDocument, 0x4c);
216: field_35_footnote_streamlen = LittleEndian.getInt(mainDocument, 0x50);
217:
218: field_56_stylesheet_offset = LittleEndian.getInt(mainDocument, 0xa2);
219: field_57_stylesheet_size = LittleEndian.getInt(mainDocument, 0xa6);
220: field_66_section_plc_offset = LittleEndian.getInt(mainDocument, 0xca);
221: field_67_section_plc_size = LittleEndian.getInt(mainDocument, 0xce);
222:
223: field_78_chp_bin_table_offset = LittleEndian.getInt(mainDocument, 0xfa);
224: field_79_chp_bin_table_size = LittleEndian.getInt(mainDocument, 0xfe);
225: field_80_pap_bin_table_offset = LittleEndian.getInt(mainDocument, 0x102);
226: field_81_pap_bin_table_size = LittleEndian.getInt(mainDocument, 0x106);
227:
228: field_84_fonts_offset = LittleEndian.getInt(mainDocument, 0x112);
229: field_85_fonts_size = LittleEndian.getInt(mainDocument, 0x116);
230:
231: field_114_DOP_offset = LittleEndian.getInt(mainDocument, 0x192);
232: field_115_DOP_size = LittleEndian.getInt(mainDocument, 0x196);
233: field_118_textPieceTable_offset = LittleEndian.getInt(mainDocument, 0x1a2);
234:
235: field_199_list_format_offset = LittleEndian.getInt(mainDocument, 0x2e2);
236: field_200_list_format_size = LittleEndian.getInt(mainDocument, 0x2e6);
237: field_201_list_format_override_offset = LittleEndian.getInt(mainDocument, 0x2ea);
238: field_202_list_format_override_size= LittleEndian.getInt(mainDocument, 0x2ee);*/
239:
240: }
241: /*
242: public boolean useTable1()
243: {
244: return tabletype.setShort(field_6_options) > 0;
245: }
246: public int getFirstCharOffset()
247: {
248: return field_13_offset_first_char;
249: }
250: public int getStshOffset()
251: {
252: return field_56_stylesheet_offset;
253: }
254: public int getStshSize()
255: {
256: return field_57_stylesheet_size;
257: }
258: public int getSectionDescriptorOffset()
259: {
260: return field_66_section_plc_offset;
261: }
262: public int getSectionDescriptorSize()
263: {
264: return field_67_section_plc_size;
265: }
266: public int getChpBinTableOffset()
267: {
268: return field_78_chp_bin_table_offset;
269: }
270: public int getChpBinTableSize()
271: {
272: return field_79_chp_bin_table_size;
273: }
274: public int getPapBinTableOffset()
275: {
276: return field_80_pap_bin_table_offset;
277: }
278: public int getPapBinTableSize()
279: {
280: return field_81_pap_bin_table_size;
281: }
282: public int getFontsOffset()
283: {
284: return field_84_fonts_offset;
285: }
286: public int getFontsSize()
287: {
288: return field_85_fonts_size;
289: }
290: public int getDOPOffset()
291: {
292: return field_114_DOP_offset;
293: }
294: public int getDOPSize()
295: {
296: return field_115_DOP_size;
297: }
298: public int getComplexOffset()
299: {
300: return field_118_textPieceTable_offset;
301: }
302: public int getLSTOffset()
303: {
304: return field_199_list_format_offset;
305: }
306: public int getLSTSize()
307: {
308: return field_200_list_format_size;
309: }
310: public int getLFOOffset()
311: {
312: return field_201_list_format_override_offset;
313: }
314: public int getLFOSize()
315: {
316: return field_202_list_format_override_size;
317: }
318: */
319:
320: }
|