コード例 #1
0
        public ISymCommand ReadCommand()
        {
            _data += Read();

            if (!string.IsNullOrEmpty(_data))
            {
                string commandStart = Encoding.ASCII.GetString(new byte[] { 0x1b, 0xfe });
                string commandEnd   = Encoding.ASCII.GetString(new byte[] { 0xfc });

                int start = _data.IndexOf(commandStart, StringComparison.Ordinal);
                int end   = _data.IndexOf(commandEnd, start + commandStart.Length, StringComparison.Ordinal);
                while (start >= 0 && end >= start + commandStart.Length)
                {
                    int commandLength = end - start - commandStart.Length;

                    string     commandString = _data.Substring(start + commandStart.Length, commandLength);
                    SymCommand newCommand    = SymCommand.Parse(commandString);
                    _data = _data.Substring(start + commandStart.Length + commandString.Length);
                    int dataLength = _data.Length;
                    if (newCommand.Command == "File")
                    {
                        int nextStart = _data.IndexOf(commandStart, StringComparison.Ordinal);
                        if (nextStart > 2)
                        {
                            newCommand.Data = _data.Substring(0, nextStart - 2);
                            _data           = _data.Substring(nextStart);
                        }
                    }

                    _commands.Add(newCommand);

                    start = _data.IndexOf(commandStart, StringComparison.Ordinal);
                    end   = _data.IndexOf(commandEnd, start + commandStart.Length, StringComparison.Ordinal);
                }
            }

            if (_commandIndex + 1 == _commands.Count)
            {
                _commands.Clear();
                _commandIndex = -1;
            }

            if (_commands.Count == 0)
            {
                return(SymCommand.Parse(""));
            }

            ISymCommand cmd = _commands[++_commandIndex];

            if ((cmd.Command == "MsgDlg") && (cmd.HasParameter("Text")))
            {
                if (cmd.Get("Text").IndexOf("From PID", StringComparison.Ordinal) != -1)
                {
                    cmd = ReadCommand();
                }
            }
            return(cmd);
        }