Пример #1
0
 /// <summary>
 /// Ctor
 /// </summary>
 /// <param name="reader">Streamreader</param>
 /// <param name="id">Ptg Id</param>
 /// <param name="length">The recordlength</param>
 public AbstractPtg(IStreamReader reader, Ptg0x19Sub ptgid)
 {
     _reader   = reader;
     _offset   = _reader.BaseStream.Position;
     _id       = (PtgNumber)ptgid;
     this.data = "";
 }
Пример #2
0
 public PtgAttrSemi(IStreamReader reader, Ptg0x19Sub ptgid)
     :
     base(reader, ptgid)
 {
     Debug.Assert((Ptg0x19Sub)this.Id == ID);
     this.Length  = 4;
     this.Data    = "Semi";
     this.type    = PtgType.Operator;
     this.popSize = 1;
     this.Reader.ReadBytes(2);
 }
Пример #3
0
 public PtgAttrIf(IStreamReader reader, Ptg0x19Sub ptgid)
     :
     base(reader, ptgid)
 {
     Debug.Assert((Ptg0x19Sub)this.Id == ID);
     this.Length  = 4;
     this.Data    = "IF";
     this.type    = PtgType.Operator;
     this.popSize = 1;
     PtgOffset    = this.Reader.ReadUInt16();
 }
Пример #4
0
 public PtgAttrSum(IStreamReader reader, Ptg0x19Sub ptgid)
     :
     base(reader, ptgid)
 {
     Debug.Assert((Ptg0x19Sub)this.Id == ID);
     this.Length  = 4;
     this.Data    = "SUM";
     this.type    = PtgType.Operator;
     this.popSize = 1;
     this.Unused  = this.Reader.ReadUInt16();
 }
Пример #5
0
 public PtgAttrBaxcel(IStreamReader reader, Ptg0x19Sub ptgid, bool bitSemi)
     :
     base(reader, ptgid)
 {
     Debug.Assert((Ptg0x19Sub)this.Id == ID1 || (Ptg0x19Sub)this.Id == ID2);
     this.bitSemi = bitSemi;
     this.Length  = 4;
     this.type    = PtgType.Operator;
     this.popSize = 1;
     DataBytes    = this.Reader.ReadBytes(2);
 }
Пример #6
0
        public PtgAttrChoose(IStreamReader reader, Ptg0x19Sub ptgid)
            :
            base(reader, ptgid)
        {
            Debug.Assert((Ptg0x19Sub)this.Id == ID);
            this.Length  = 4;
            this.Data    = "Semi";
            this.type    = PtgType.Operator;
            this.popSize = 1;
            uint cOffset = this.Reader.ReadUInt16();

            for (int i = 0; i <= cOffset; i++)
            {
                this.Reader.ReadUInt16();
            }
            this.Length += (cOffset + 1) * 2;
        }
Пример #7
0
        public static Stack <AbstractPtg> getFormulaStack(IStreamReader reader, UInt16 cce)
        {
            Stack <AbstractPtg> ptgStack = new Stack <AbstractPtg>();

            try
            {
                for (uint i = 0; i < cce; i++)
                {
                    PtgNumber ptgtype = (PtgNumber)reader.ReadByte();

                    if ((int)ptgtype > 0x5D)
                    {
                        ptgtype -= 0x40;
                    }

                    else if ((int)ptgtype > 0x3D)
                    {
                        ptgtype -= 0x20;
                    }
                    AbstractPtg ptg = null;
                    if (ptgtype == PtgNumber.Ptg0x19Sub)
                    {
                        Ptg0x19Sub ptgtype2 = (Ptg0x19Sub)reader.ReadByte();
                        switch (ptgtype2)
                        {
                        case Ptg0x19Sub.PtgAttrSum: ptg = new PtgAttrSum(reader, ptgtype2); break;

                        case Ptg0x19Sub.PtgAttrIf: ptg = new PtgAttrIf(reader, ptgtype2); break;

                        case Ptg0x19Sub.PtgAttrGoto: ptg = new PtgAttrGoto(reader, ptgtype2); break;

                        case Ptg0x19Sub.PtgAttrSemi: ptg = new PtgAttrSemi(reader, ptgtype2); break;

                        case Ptg0x19Sub.PtgAttrChoose: ptg = new PtgAttrChoose(reader, ptgtype2); break;

                        case Ptg0x19Sub.PtgAttrSpace: ptg = new PtgAttrSpace(reader, ptgtype2); break;

                        case Ptg0x19Sub.PtgNotDocumented: ptg = new PtgNotDocumented(reader, ptgtype2); break;

                        default: break;
                        }
                    }
                    else if (ptgtype == PtgNumber.Ptg0x18Sub)
                    {
                    }
                    else
                    {
                        switch (ptgtype)
                        {
                        case PtgNumber.PtgInt: ptg = new PtgInt(reader, ptgtype); break;

                        case PtgNumber.PtgAdd: ptg = new PtgAdd(reader, ptgtype); break;

                        case PtgNumber.PtgSub: ptg = new PtgSub(reader, ptgtype); break;

                        case PtgNumber.PtgMul: ptg = new PtgMul(reader, ptgtype); break;

                        case PtgNumber.PtgDiv: ptg = new PtgDiv(reader, ptgtype); break;

                        case PtgNumber.PtgParen: ptg = new PtgParen(reader, ptgtype); break;

                        case PtgNumber.PtgNum: ptg = new PtgNum(reader, ptgtype); break;

                        case PtgNumber.PtgRef: ptg = new PtgRef(reader, ptgtype); break;

                        case PtgNumber.PtgRefN: ptg = new PtgRefN(reader, ptgtype); break;

                        case PtgNumber.PtgPower: ptg = new PtgPower(reader, ptgtype); break;

                        case PtgNumber.PtgPercent: ptg = new PtgPercent(reader, ptgtype); break;

                        case PtgNumber.PtgBool: ptg = new PtgBool(reader, ptgtype); break;

                        case PtgNumber.PtgGt: ptg = new PtgGt(reader, ptgtype); break;

                        case PtgNumber.PtgGe: ptg = new PtgGe(reader, ptgtype); break;

                        case PtgNumber.PtgLt: ptg = new PtgLt(reader, ptgtype); break;

                        case PtgNumber.PtgLe: ptg = new PtgLe(reader, ptgtype); break;

                        case PtgNumber.PtgEq: ptg = new PtgEq(reader, ptgtype); break;

                        case PtgNumber.PtgNe: ptg = new PtgNe(reader, ptgtype); break;

                        case PtgNumber.PtgUminus: ptg = new PtgUminus(reader, ptgtype); break;

                        case PtgNumber.PtgUplus: ptg = new PtgUplus(reader, ptgtype); break;

                        case PtgNumber.PtgStr: ptg = new PtgStr(reader, ptgtype); break;

                        case PtgNumber.PtgConcat: ptg = new PtgConcat(reader, ptgtype); break;

                        case PtgNumber.PtgUnion: ptg = new PtgUnion(reader, ptgtype); break;

                        case PtgNumber.PtgIsect: ptg = new PtgIsect(reader, ptgtype); break;

                        case PtgNumber.PtgMemErr: ptg = new PtgMemErr(reader, ptgtype); break;

                        case PtgNumber.PtgArea: ptg = new PtgArea(reader, ptgtype); break;

                        case PtgNumber.PtgAreaN: ptg = new PtgAreaN(reader, ptgtype); break;

                        case PtgNumber.PtgFuncVar: ptg = new PtgFuncVar(reader, ptgtype); break;

                        case PtgNumber.PtgFunc: ptg = new PtgFunc(reader, ptgtype); break;

                        case PtgNumber.PtgExp: ptg = new PtgExp(reader, ptgtype); break;

                        case PtgNumber.PtgRef3d: ptg = new PtgRef3d(reader, ptgtype); break;

                        case PtgNumber.PtgArea3d: ptg = new PtgArea3d(reader, ptgtype); break;

                        case PtgNumber.PtgNameX: ptg = new PtgNameX(reader, ptgtype); break;

                        case PtgNumber.PtgName: ptg = new PtgName(reader, ptgtype); break;

                        case PtgNumber.PtgMissArg: ptg = new PtgMissArg(reader, ptgtype); break;

                        case PtgNumber.PtgRefErr: ptg = new PtgRefErr(reader, ptgtype); break;

                        case PtgNumber.PtgRefErr3d: ptg = new PtgRefErr3d(reader, ptgtype); break;

                        case PtgNumber.PtgAreaErr: ptg = new PtgAreaErr(reader, ptgtype); break;

                        case PtgNumber.PtgAreaErr3d: ptg = new PtgAreaErr3d(reader, ptgtype); break;

                        case PtgNumber.PtgMemFunc: ptg = new PtgMemFunc(reader, ptgtype); break;

                        case PtgNumber.PtgErr: ptg = new PtgErr(reader, ptgtype); break;

                        default: break;
                        }
                    }
                    i += ptg.getLength() - 1;
                    ptgStack.Push(ptg);
                }
            }
            catch (Exception ex)
            {
                throw new ExtractorException(ExtractorException.PARSEDFORMULAEXCEPTION, ex);
            }

            return(ptgStack);
        }