private bool DoRPN(TParsedTokenListBuilder TokenBuilder, TNameRecordList Names, byte[] RPN, int atPos, int afPos, ref bool HasSubtotal, ref bool HasAggregate) { int tPos = atPos; int fPos = afPos; int ArrayPos = fPos; TTokenOffset TokenOffset = new TTokenOffset(); while (tPos < fPos) { TokenOffset.Add(tPos, TokenBuilder.Count); byte RealToken = RPN[tPos]; ptg BaseToken = TBaseParsedToken.CalcBaseToken((ptg)RealToken); TUnsupportedFormulaErrorType ErrType = TUnsupportedFormulaErrorType.FormulaTooComplex; string ErrName = null; if (!Evaluate(TokenBuilder, TokenOffset, Names, BaseToken, (ptg)RealToken, RPN, ref tPos, ref ArrayPos, ref ErrType, ref ErrName, ref HasSubtotal, ref HasAggregate)) { TokenBuilder.Clear(); return(false); } tPos++; } //while TokenOffset.Add(tPos, TokenBuilder.Count); //eof FixGotosAndMemTokens(TokenBuilder, TokenOffset); return(true); }
private static byte[] ConvertToBiff8(TExternSheetList ExternSheetList, byte Token, byte[] Data, ref int tPos) { byte[] Result; int rPos = 0; switch (TBaseParsedToken.CalcBaseToken((ptg)Token)) { case ptg.Name: Result = new byte[4]; //Wrong on Excel docs! BitOps.SetWord(Result, 0, BitOps.GetWord(Data, tPos)); tPos += 14; return(Result); case ptg.NameX: Result = new byte[6]; //This is actually 6 BitOps.SetWord(Result, 2, BitOps.GetWord(Data, tPos + 10)); tPos += 24; return(Result); case ptg.Ref: case ptg.RefN: Result = new byte[4]; ConvertRowsAndColumns7To8(Data, Result, ref tPos, ref rPos, false); return(Result); case ptg.Area: case ptg.AreaN: Result = new byte[8]; ConvertRowsAndColumns7To8(Data, Result, ref tPos, ref rPos, true); return(Result); case ptg.RefErr: tPos += 3; return(new byte[4]); case ptg.AreaErr: tPos += 6; return(new byte[8]); case ptg.Ref3d: case ptg.Ref3dErr: Result = new byte[6]; Convert3D7To8(ExternSheetList, Token, Data, Result, ref tPos, ref rPos); ConvertRowsAndColumns7To8(Data, Result, ref tPos, ref rPos, false); return(Result); case ptg.Area3d: case ptg.Area3dErr: Result = new byte[10]; Convert3D7To8(ExternSheetList, Token, Data, Result, ref tPos, ref rPos); ConvertRowsAndColumns7To8(Data, Result, ref tPos, ref rPos, true); return(Result); } XlsMessages.ThrowException(XlsErr.ErrBadToken, Token); return(null); //just to compile. }
private static byte[] ConvertToBiff7(TReferences References, byte Token, byte[] Data, ref int tPos) { byte[] Result; int rPos = 0; switch (TBaseParsedToken.CalcBaseToken((ptg)Token)) { case ptg.Name: Result = new byte[14]; BitOps.SetWord(Result, 0, BitOps.GetWord(Data, tPos)); tPos += 4; //Biff8 Name is Wrong on Excel docs! return(Result); case ptg.NameX: Result = new byte[24]; BitOps.SetWord(Result, 0, 0xFFFF); BitOps.SetWord(Result, 10, BitOps.GetWord(Data, tPos + 2)); tPos += 6; //This is actually 6 return(Result); case ptg.Ref: case ptg.RefN: Result = new byte[3]; if (!ConvertRowsAndColumns8To7(Data, Result, ref tPos, ref rPos, false)) { return(null); } return(Result); case ptg.Area: case ptg.AreaN: Result = new byte[6]; if (!ConvertRowsAndColumns8To7(Data, Result, ref tPos, ref rPos, true)) { return(null); } return(Result); case ptg.RefErr: tPos += 4; return(new byte[3]); case ptg.AreaErr: tPos += 8; return(new byte[6]); case ptg.Ref3d: case ptg.Ref3dErr: Result = new byte[17]; if (!Convert3D8To7(References, Token, Data, Result, ref tPos, ref rPos)) { return(null); } if (!ConvertRowsAndColumns8To7(Data, Result, ref tPos, ref rPos, false)) { return(null); } return(Result); case ptg.Area3d: case ptg.Area3dErr: Result = new byte[20]; if (!Convert3D8To7(References, Token, Data, Result, ref tPos, ref rPos)) { return(null); } if (!ConvertRowsAndColumns8To7(Data, Result, ref tPos, ref rPos, true)) { return(null); } return(Result); } return(null); }