protected void ReadCoordinates(ILittleEndianInput in1) { field_1_first_row = in1.ReadUShort(); field_2_last_row = in1.ReadUShort(); field_3_first_column = in1.ReadUShort(); field_4_last_column = in1.ReadUShort(); }
public static SubRecord CreateSubRecord(ILittleEndianInput in1, CommonObjectType cmoOt) { int sid = in1.ReadUShort(); int secondUShort = in1.ReadUShort(); // Often (but not always) the datasize for the sub-record switch (sid) { case CommonObjectDataSubRecord.sid: return(new CommonObjectDataSubRecord(in1, secondUShort)); case EmbeddedObjectRefSubRecord.sid: return(new EmbeddedObjectRefSubRecord(in1, secondUShort)); case GroupMarkerSubRecord.sid: return(new GroupMarkerSubRecord(in1, secondUShort)); case EndSubRecord.sid: return(new EndSubRecord(in1, secondUShort)); case NoteStructureSubRecord.sid: return(new NoteStructureSubRecord(in1, secondUShort)); case LbsDataSubRecord.sid: return(new LbsDataSubRecord(in1, secondUShort, (int)cmoOt)); case FtCblsSubRecord.sid: return(new FtCblsSubRecord(in1, secondUShort)); } return(new UnknownSubRecord(in1, sid, secondUShort)); }
public static SubRecord CreateSubRecord(ILittleEndianInput in1, CommonObjectType cmoOt) { int sid = in1.ReadUShort(); int secondUShort = in1.ReadUShort(); // Often (but not always) the datasize for the sub-record switch (sid) { case CommonObjectDataSubRecord.sid: return new CommonObjectDataSubRecord(in1, secondUShort); case EmbeddedObjectRefSubRecord.sid: return new EmbeddedObjectRefSubRecord(in1, secondUShort); case GroupMarkerSubRecord.sid: return new GroupMarkerSubRecord(in1, secondUShort); case EndSubRecord.sid: return new EndSubRecord(in1, secondUShort); case NoteStructureSubRecord.sid: return new NoteStructureSubRecord(in1, secondUShort); case LbsDataSubRecord.sid: return new LbsDataSubRecord(in1, secondUShort, (int)cmoOt); case FtCblsSubRecord.sid: return new FtCblsSubRecord(in1, secondUShort); } return new UnknownSubRecord(in1, sid, secondUShort); }
private static object ReadAConstantValue(ILittleEndianInput in1) { byte grbit = (byte)in1.ReadByte(); switch (grbit) { case TYPE_EMPTY: in1.ReadLong(); // 8 byte 'not used' field return(EMPTY_REPRESENTATION); case TYPE_NUMBER: return(in1.ReadDouble()); case TYPE_STRING: return(StringUtil.ReadUnicodeString(in1)); case TYPE_BOOLEAN: return(ReadBoolean(in1)); case TYPE_ERROR_CODE: int errCode = in1.ReadUShort(); // next 6 bytes are Unused in1.ReadUShort(); in1.ReadInt(); return(ErrorConstant.ValueOf(errCode)); } throw new Exception("Unknown grbit value (" + grbit + ")"); }
/** * Reads an unsigned short value without decrypting */ public int ReadRecordSID() { int sid = _le.ReadUShort(); _rc4.SkipTwoBytes(); _rc4.StartRecord(sid); return(sid); }
public LbsDropData(ILittleEndianInput in1) { _wStyle = in1.ReadUShort(); _cLine = in1.ReadUShort(); _dxMin = in1.ReadUShort(); _str = StringUtil.ReadUnicodeString(in1); if (StringUtil.GetEncodedSize(_str) % 2 != 0) { _unused = (byte)in1.ReadByte(); } }
/** * Reads a 16 bit,un- signed value. * @return */ public int ReadUShort() { CheckRecordPosition(LittleEndianConsts.SHORT_SIZE); _currentDataOffset += LittleEndianConsts.SHORT_SIZE; pos += LittleEndianConsts.SHORT_SIZE; return(_dataInput.ReadUShort()); }
public static String ReadUnicodeLE(ILittleEndianInput in1, int nChars) { char[] buf = new char[nChars]; for (int i = 0; i < buf.Length; i++) { buf[i] = (char)in1.ReadUShort(); } return(new String(buf)); }
/** * InputStream <c>in</c> is expected to contain: * <ol> * <li>ushort nChars</li> * <li>byte is16BitFlag</li> * <li>byte[]/char[] characterData</li> * </ol> * For this encoding, the is16BitFlag is always present even if nChars==0. */ public static String ReadUnicodeString(ILittleEndianInput in1) { int nChars = in1.ReadUShort(); byte flag = (byte)in1.ReadByte(); if ((flag & 0x01) == 0) { return(ReadCompressedUnicode(in1, nChars)); } return(ReadUnicodeLE(in1, nChars)); }
public AttrPtg(ILittleEndianInput in1) { field_1_options = (byte)in1.ReadByte(); field_2_data = in1.ReadShort(); if (IsOptimizedChoose) { int nCases = field_2_data; int[] jumpTable = new int[nCases]; for (int i = 0; i < jumpTable.Length; i++) { jumpTable[i] = in1.ReadUShort(); } _jumpTable = jumpTable; _chooseFuncOffset = in1.ReadUShort(); } else { _jumpTable = null; _chooseFuncOffset = -1; } }
/** * Constructs a CommonObjectData record and Sets its fields appropriately. * * @param in the RecordInputstream to Read the record from */ public CommonObjectDataSubRecord(ILittleEndianInput in1, int size) { if (size != 18) { throw new RecordFormatException("Expected size 18 but got (" + size + ")"); } field_1_objectType = in1.ReadShort(); field_2_objectId = in1.ReadUShort(); field_3_option = in1.ReadShort(); field_4_reserved1 = in1.ReadInt(); field_5_reserved2 = in1.ReadInt(); field_6_reserved3 = in1.ReadInt(); }
private static object ReadAConstantValue(ILittleEndianInput in1) { byte grbit = (byte)in1.ReadByte(); switch (grbit) { case TYPE_EMPTY: in1.ReadLong(); // 8 byte 'not used' field return EMPTY_REPRESENTATION; case TYPE_NUMBER: return in1.ReadDouble(); case TYPE_STRING: return StringUtil.ReadUnicodeString(in1); case TYPE_BOOLEAN: return ReadBoolean(in1); case TYPE_ERROR_CODE: int errCode = in1.ReadUShort(); // next 6 bytes are Unused in1.ReadUShort(); in1.ReadInt(); return ErrorConstant.ValueOf(errCode); } throw new Exception("Unknown grbit value (" + grbit + ")"); }
public void TestConvertSharedFormulasOperandClasses_bug45123() { ILittleEndianInput in1 = TestcaseRecordInputStream.CreateLittleEndian(SHARED_FORMULA_WITH_REF_ARRAYS_DATA); int encodedLen = in1.ReadUShort(); Ptg[] sharedFormula = Ptg.ReadTokens(encodedLen, in1); SharedFormula sf = new SharedFormula(SpreadsheetVersion.EXCEL97); Ptg[] ConvertedFormula = sf.ConvertSharedFormulas(sharedFormula, 100, 200); RefPtg refPtg = (RefPtg)ConvertedFormula[1]; Assert.AreEqual("$C101", refPtg.ToFormulaString()); if (refPtg.PtgClass == Ptg.CLASS_REF) { throw new AssertionException("Identified bug 45123"); } ConfirmOperandClasses(sharedFormula, ConvertedFormula); }
protected void ReadCoordinates(ILittleEndianInput in1) { field_1_row = in1.ReadUShort(); field_2_col = in1.ReadUShort(); }
/** * @param in the stream to read data from * @param cbFContinued the seconf short in the record header * @param cmoOt the Containing Obj's {@link CommonObjectDataSubRecord#field_1_objectType} */ public LbsDataSubRecord(ILittleEndianInput in1, int cbFContinued, int cmoOt) { _cbFContinued = cbFContinued; int encodedTokenLen = in1.ReadUShort(); if (encodedTokenLen > 0) { int formulaSize = in1.ReadUShort(); _unknownPreFormulaInt = in1.ReadInt(); Ptg[] ptgs = Ptg.ReadTokens(formulaSize, in1); if (ptgs.Length != 1) { throw new RecordFormatException("Read " + ptgs.Length + " tokens but expected exactly 1"); } _linkPtg = ptgs[0]; switch (encodedTokenLen - formulaSize - 6) { case 1: _unknownPostFormulaByte = (byte)in1.ReadByte(); break; case 0: _unknownPostFormulaByte = null; break; default: throw new RecordFormatException("Unexpected leftover bytes"); } } _cLines = in1.ReadUShort(); _iSel = in1.ReadUShort(); _flags = in1.ReadUShort(); _idEdit = in1.ReadUShort(); // From [MS-XLS].pdf 2.5.147 FtLbsData: // This field MUST exist if and only if the Containing Obj?s cmo.ot is equal to 0x14. if (cmoOt == 0x14) { _dropData = new LbsDropData(in1); } // From [MS-XLS].pdf 2.5.147 FtLbsData: // This array MUST exist if and only if the fValidPlex flag (0x2) is set if ((_flags & 0x2) != 0) { _rgLines = new String[_cLines]; for (int i = 0; i < _cLines; i++) { _rgLines[i] = StringUtil.ReadUnicodeString(in1); } } // bits 5-6 in the _flags specify the type // of selection behavior this list control is expected to support // From [MS-XLS].pdf 2.5.147 FtLbsData: // This array MUST exist if and only if the wListType field is not equal to 0. if (((_flags >> 4) & 0x2) != 0) { _bsels = new bool[_cLines]; for (int i = 0; i < _cLines; i++) { _bsels[i] = in1.ReadByte() == 1; } } }
public IntPtg(ILittleEndianInput in1) : this(in1.ReadUShort()) { }
internal PhRun(ILittleEndianInput in1) { phoneticTextFirstCharacterOffset = in1.ReadUShort(); realTextFirstCharacterOffset = in1.ReadUShort(); realTextLength = in1.ReadUShort(); }
public NameXPtg(ILittleEndianInput in1) : this(in1.ReadUShort(), in1.ReadUShort(), in1.ReadUShort()) { }
public DeletedArea3DPtg(ILittleEndianInput in1) { field_1_index_extern_sheet = in1.ReadUShort(); unused1 = in1.ReadInt(); unused2 = in1.ReadInt(); }
public Initial(ILittleEndianInput in1) { _reserved0 = in1.ReadInt(); _reserved1 = in1.ReadUShort(); _reserved2 = in1.ReadUByte(); }
// not used: private int numParams = 0; public static FuncPtg Create(ILittleEndianInput in1) { return(Create(in1.ReadUShort())); }
// not used: private int numParams = 0; public static FuncPtg Create(ILittleEndianInput in1) { return Create(in1.ReadUShort()); }
public AttrPtg(ILittleEndianInput in1) { field_1_options =(byte)in1.ReadByte(); field_2_data = in1.ReadShort(); if (IsOptimizedChoose) { int nCases = field_2_data; int[] jumpTable = new int[nCases]; for (int i = 0; i < jumpTable.Length; i++) { jumpTable[i] = in1.ReadUShort(); } _jumpTable = jumpTable; _chooseFuncOffset = in1.ReadUShort(); } else { _jumpTable = null; _chooseFuncOffset = -1; } }
public TblPtg(ILittleEndianInput in1) { field_1_first_row = in1.ReadUShort(); field_2_first_col = in1.ReadUShort(); }
protected RefPtgBase(ILittleEndianInput in1) { field_1_row = in1.ReadUShort(); field_2_col = in1.ReadUShort(); }
/** * Constructs an EmbeddedObjectRef record and Sets its fields appropriately. * * @param in the record input stream. */ public EmbeddedObjectRefSubRecord(ILittleEndianInput in1, int size) { // Much guess-work going on here due to lack of any documentation. // See similar source code in OOO: // http://lxr.go-oo.org/source/sc/sc/source/filter/excel/xiescher.cxx // 1223 void XclImpOleObj::ReadPictFmla( XclImpStream& rStrm, sal_uInt16 nRecSize ) int streamIdOffset = in1.ReadShort(); // OOO calls this 'nFmlaLen' int remaining = size - LittleEndianConsts.SHORT_SIZE; int dataLenAfterFormula = remaining - streamIdOffset; int formulaSize = in1.ReadUShort(); remaining -= LittleEndianConsts.SHORT_SIZE; field_1_unknown_int = in1.ReadInt(); remaining -= LittleEndianConsts.INT_SIZE; byte[] formulaRawBytes = ReadRawData(in1, formulaSize); remaining -= formulaSize; field_2_refPtg = ReadRefPtg(formulaRawBytes); if (field_2_refPtg == null) { // common case // field_2_n16 seems to be 5 here // The formula almost looks like tTbl but the row/column values seem like garbage. field_2_unknownFormulaData = formulaRawBytes; } else { field_2_unknownFormulaData = null; } int stringByteCount; if (remaining >= dataLenAfterFormula + 3) { int tag = in1.ReadByte(); stringByteCount = LittleEndianConsts.BYTE_SIZE; if (tag != 0x03) { throw new RecordFormatException("Expected byte 0x03 here"); } int nChars = in1.ReadUShort(); stringByteCount += LittleEndianConsts.SHORT_SIZE; if (nChars > 0) { // OOO: the 4th way Xcl stores a unicode string: not even a Grbit byte present if Length 0 field_3_unicode_flag = (in1.ReadByte() & 0x01) != 0; stringByteCount += LittleEndianConsts.BYTE_SIZE; if (field_3_unicode_flag) { field_4_ole_classname = StringUtil.ReadUnicodeLE(in1,nChars); stringByteCount += nChars * 2; } else { field_4_ole_classname = StringUtil.ReadCompressedUnicode(in1,nChars); stringByteCount += nChars; } } else { field_4_ole_classname = ""; } } else { field_4_ole_classname = null; stringByteCount = 0; } remaining -= stringByteCount; // Pad to next 2-byte boundary if (((stringByteCount + formulaSize) % 2) != 0) { int b = in1.ReadByte(); remaining -= LittleEndianConsts.BYTE_SIZE; if (field_2_refPtg != null && field_4_ole_classname == null) { field_4_unknownByte = (byte)b; } } int nUnexpectedPadding = remaining - dataLenAfterFormula; if (nUnexpectedPadding > 0) { logger.Log(POILogger.ERROR, "Discarding " + nUnexpectedPadding + " unexpected padding bytes "); ReadRawData(in1, nUnexpectedPadding); remaining -= nUnexpectedPadding; } // Fetch the stream ID if (dataLenAfterFormula >= 4) { field_5_stream_id = in1.ReadInt(); remaining -= LittleEndianConsts.INT_SIZE; } else { field_5_stream_id = null; } field_6_unknown = ReadRawData(in1, remaining); }
public GUID(ILittleEndianInput in1) :this(in1.ReadInt(), in1.ReadUShort(), in1.ReadUShort(), in1.ReadLong()) { }
public GUID(ILittleEndianInput in1) : this(in1.ReadInt(), in1.ReadUShort(), in1.ReadUShort(), in1.ReadLong()) { }
/** * InputStream <c>in</c> is expected to contain: * <ol> * <li>ushort nChars</li> * <li>byte is16BitFlag</li> * <li>byte[]/char[] characterData</li> * </ol> * For this encoding, the is16BitFlag is always present even if nChars==0. */ public static String ReadUnicodeString(ILittleEndianInput in1) { int nChars = in1.ReadUShort(); byte flag = (byte)in1.ReadByte(); if ((flag & 0x01) == 0) { return ReadCompressedUnicode(in1, nChars); } return ReadUnicodeLE(in1, nChars); }
internal ExtRst(ILittleEndianInput in1, int expectedLength) { reserved = in1.ReadShort(); // Old style detection (Reserved = 0xFF) if (reserved == -1) { populateEmpty(); return; } // Spot corrupt records if (reserved != 1) { _logger.Log(POILogger.WARN, "Warning - ExtRst has wrong magic marker, expecting 1 but found " + reserved + " - ignoring"); // Grab all the remaining data, and ignore it for (int i = 0; i < expectedLength - 2; i++) { in1.ReadByte(); } // And make us be empty populateEmpty(); return; } // Carry on Reading in as normal short stringDataSize = in1.ReadShort(); formattingFontIndex = in1.ReadShort(); formattingOptions = in1.ReadShort(); // RPHSSub numberOfRuns = in1.ReadUShort(); short length1 = in1.ReadShort(); // No really. Someone Clearly forgot to read // the docs on their datastructure... short length2 = in1.ReadShort(); // And sometimes they write out garbage :( if (length1 == 0 && length2 > 0) { length2 = 0; } if (length1 != length2) { throw new InvalidOperationException( "The two length fields of the Phonetic Text don't agree! " + length1 + " vs " + length2 ); } phoneticText = StringUtil.ReadUnicodeLE(in1, length1); int RunData = stringDataSize - 4 - 6 - (2 * phoneticText.Length); int numRuns = (RunData / 6); phRuns = new PhRun[numRuns]; for (int i = 0; i < phRuns.Length; i++) { phRuns[i] = new PhRun(in1); } int extraDataLength = RunData - (numRuns * 6); if (extraDataLength < 0) { //System.err.Println("Warning - ExtRst overran by " + (0-extraDataLength) + " bytes"); extraDataLength = 0; } extraData = new byte[extraDataLength]; for (int i = 0; i < extraData.Length; i++) { extraData[i] = (byte)in1.ReadByte(); } }
/** * Constructs an EmbeddedObjectRef record and Sets its fields appropriately. * * @param in the record input stream. */ public EmbeddedObjectRefSubRecord(ILittleEndianInput in1, int size) { // Much guess-work going on here due to lack of any documentation. // See similar source code in OOO: // http://lxr.go-oo.org/source/sc/sc/source/filter/excel/xiescher.cxx // 1223 void XclImpOleObj::ReadPictFmla( XclImpStream& rStrm, sal_uInt16 nRecSize ) int streamIdOffset = in1.ReadShort(); // OOO calls this 'nFmlaLen' int remaining = size - LittleEndianConsts.SHORT_SIZE; int dataLenAfterFormula = remaining - streamIdOffset; int formulaSize = in1.ReadUShort(); remaining -= LittleEndianConsts.SHORT_SIZE; field_1_unknown_int = in1.ReadInt(); remaining -= LittleEndianConsts.INT_SIZE; byte[] formulaRawBytes = ReadRawData(in1, formulaSize); remaining -= formulaSize; field_2_refPtg = ReadRefPtg(formulaRawBytes); if (field_2_refPtg == null) { // common case // field_2_n16 seems to be 5 here // The formula almost looks like tTbl but the row/column values seem like garbage. field_2_unknownFormulaData = formulaRawBytes; } else { field_2_unknownFormulaData = null; } int stringByteCount; if (remaining >= dataLenAfterFormula + 3) { int tag = in1.ReadByte(); stringByteCount = LittleEndianConsts.BYTE_SIZE; if (tag != 0x03) { throw new RecordFormatException("Expected byte 0x03 here"); } int nChars = in1.ReadUShort(); stringByteCount += LittleEndianConsts.SHORT_SIZE; if (nChars > 0) { // OOO: the 4th way Xcl stores a unicode string: not even a Grbit byte present if Length 0 field_3_unicode_flag = (in1.ReadByte() & 0x01) != 0; stringByteCount += LittleEndianConsts.BYTE_SIZE; if (field_3_unicode_flag) { field_4_ole_classname = StringUtil.ReadUnicodeLE(in1, nChars); stringByteCount += nChars * 2; } else { field_4_ole_classname = StringUtil.ReadCompressedUnicode(in1, nChars); stringByteCount += nChars; } } else { field_4_ole_classname = ""; } } else { field_4_ole_classname = null; stringByteCount = 0; } remaining -= stringByteCount; // Pad to next 2-byte boundary if (((stringByteCount + formulaSize) % 2) != 0) { int b = in1.ReadByte(); remaining -= LittleEndianConsts.BYTE_SIZE; if (field_2_refPtg != null && field_4_ole_classname == null) { field_4_unknownByte = (byte)b; } } int nUnexpectedPadding = remaining - dataLenAfterFormula; if (nUnexpectedPadding > 0) { Console.WriteLine("Discarding " + nUnexpectedPadding + " unexpected padding bytes "); ReadRawData(in1, nUnexpectedPadding); remaining -= nUnexpectedPadding; } // Fetch the stream ID if (dataLenAfterFormula >= 4) { field_5_stream_id = in1.ReadInt(); remaining -= LittleEndianConsts.INT_SIZE; } else { field_5_stream_id = null; } field_6_unknown = ReadRawData(in1, remaining); }
public static String ReadUnicodeLE(ILittleEndianInput in1, int nChars) { char[] buf = new char[nChars]; for (int i = 0; i < buf.Length; i++) { buf[i] = (char)in1.ReadUShort(); } return new String(buf); }
public LbsDropData(ILittleEndianInput in1){ _wStyle = in1.ReadUShort(); _cLine = in1.ReadUShort(); _dxMin = in1.ReadUShort(); _str = StringUtil.ReadUnicodeString(in1); if(StringUtil.GetEncodedSize(_str) % 2 != 0){ _unused = (byte)in1.ReadByte(); } }
public NameXPtg(ILittleEndianInput in1) :this(in1.ReadUShort(), in1.ReadUShort(), in1.ReadUShort()) { }
/** Creates new DeletedRef3DPtg */ public DeletedRef3DPtg(ILittleEndianInput in1) { field_1_index_extern_sheet = in1.ReadUShort(); unused1 = in1.ReadInt(); }
public int ReadDataSize() { return(_lei.ReadUShort()); }
/**Creates new function pointer from a byte array * usually called while Reading an excel file. */ public MemFuncPtg(ILittleEndianInput in1) : this(in1.ReadUShort()) { }