public void OnNext(byte value)
        {
            if (IsInTextDataMode)
            {
                if (TextDataBlock.isPrintable(value))
                {
                    textDataBlock.Append(value);
                    if (textDataBlock.CurNoOfBytes == 16)
                    {
                        FlushTextDataAndLeaveTextDataMode();
                        EnterTextDataMode();
                    }
                }
                else
                {
                    FlushTextDataAndLeaveTextDataMode();
                    // recurse to processs value now
                    OnNext(value);
                }
            }
            else
            {
                if (instr == null)
                {
                    instr = new ConcreteInstruction(posStart, value);
                }
                else
                {
                    instr.Append(value);
                }

                if (instr.IsComplete)
                {
                    FlushInstruction();
                    if (instr.IsTextDataLabel)
                    {
                        EnterTextDataMode();
                    }
                    instr = null;
                }
            }
        }
 private void EnterTextDataMode()
 {
     textDataBlock = new TextDataBlock(posStart);
 }