/** * Constructs a Name record and Sets its fields appropriately. * * @param in the RecordInputstream to Read the record from */ public NameRecord(RecordInputStream ris) { byte[] remainder = ris.ReadAllContinuedRemainder(); ILittleEndianInput in1 = new LittleEndianByteArrayInputStream(remainder); field_1_option_flag = in1.ReadShort(); field_2_keyboard_shortcut = (byte)in1.ReadByte(); int field_3_length_name_text = in1.ReadByte(); int field_4_length_name_definition = in1.ReadShort(); field_5_externSheetIndex_plus1 = in1.ReadShort(); field_6_sheetNumber = in1.ReadUShort(); int field_7_length_custom_menu = in1.ReadUByte(); int field_8_length_description_text = in1.ReadUByte(); int field_9_length_help_topic_text = in1.ReadUByte(); int field_10_length_status_bar_text = in1.ReadUByte(); //store the name in byte form if it's a built-in name field_11_nameIsMultibyte = (in1.ReadByte() != 0); if (IsBuiltInName) { field_12_built_in_code = (byte)in1.ReadByte(); } else { if (field_11_nameIsMultibyte) { field_12_name_text = StringUtil.ReadUnicodeLE(in1, field_3_length_name_text); } else { field_12_name_text = StringUtil.ReadCompressedUnicode(in1, field_3_length_name_text); } } int nBytesAvailable = in1.Available() - (field_7_length_custom_menu + field_8_length_description_text + field_9_length_help_topic_text + field_10_length_status_bar_text); field_13_name_definition = SSFormula.Formula.Read(field_4_length_name_definition, in1, nBytesAvailable); //Who says that this can only ever be compressed unicode??? field_14_custom_menu_text = StringUtil.ReadCompressedUnicode(in1, field_7_length_custom_menu); field_15_description_text = StringUtil.ReadCompressedUnicode(in1, field_8_length_description_text); field_16_help_topic_text = StringUtil.ReadCompressedUnicode(in1, field_9_length_help_topic_text); field_17_status_bar_text = StringUtil.ReadCompressedUnicode(in1, field_10_length_status_bar_text); }
public void TestReadFully() { byte[] srcBuf = HexRead.ReadFromString("99 88 77 66 55 44 33"); ILittleEndianInput lei = new LittleEndianByteArrayInputStream(srcBuf); // do Initial read to increment the read index beyond zero Assert.AreEqual(0x8899, lei.ReadUShort()); byte[] actBuf = new byte[4]; lei.ReadFully(actBuf); if (actBuf[0] == 0x00 && srcBuf[0] == 0x77 && srcBuf[3] == 0x44) { throw new AssertionException("Identified bug in ReadFully() - source buffer was modified"); } byte[] expBuf = HexRead.ReadFromString("77 66 55 44"); Assert.IsTrue(Arrays.Equals(actBuf, expBuf)); Assert.AreEqual(0x33, lei.ReadUByte()); Assert.AreEqual(0, lei.Available()); }