public static WorkstationCommandBase ParseFactory(InputByteArray InputArray)
        {
            WorkstationCommandBase dsCmd = null;

            if (InputArray.RemainingLength >= 2)
            {
                // command codes as documented on 15.2 - 1 of 5494 function ref manual
                var buf = InputArray.PeekBytes(2);
                if (buf[0] == 0x04)
                {
                    var wrkstnCode = buf[1].ToWorkstationCode();
                    if (wrkstnCode != null)
                    {
                        var code = wrkstnCode.Value;
                        if (code == WorkstationCode.ClearUnit)
                        {
                            dsCmd = new ClearUnitCommand(InputArray);
                        }

                        else if (code == WorkstationCode.WTD)
                        {
                            dsCmd = new WriteToDisplayCommand(InputArray);
                        }

                        else if (code == WorkstationCode.ReadMdtFields)
                        {
                            dsCmd = new ReadMdtFieldsCommand(InputArray);
                        }

                        // 04 F3. write structure field. Used as vehicle for the D9 70 5250 query
                        // command.
                        else if (code == WorkstationCode.WriteStructuredField)
                        {
                            dsCmd = new WriteStructuredFieldCommand(InputArray);
                        }

                        else if (code == WorkstationCode.SaveScreen)
                        {
                            dsCmd = new SaveScreenCommand(InputArray);
                        }

                        else if (code == WorkstationCode.RestoreScreen)
                        {
                            dsCmd = new RestoreScreenCommand(InputArray);
                        }

                        else
                        {
                            throw new Exception(
                                      "workstation data stream command code not supported. " +
                                      code.ToString());
                        }
                    }
                }
            }

            return(dsCmd);
        }
        public static byte[] Build(byte ControlChar1, byte ControlChar2, byte[] OrderBytes)
        {
            var ba = new ByteArrayBuilder();

            {
                var buf = WorkstationCommandBase.ToBytes(WorkstationCode.WTD);
                ba.Append(buf);
            }
            ba.Append(ControlChar1);
            ba.Append(ControlChar2);
            ba.Append(OrderBytes);

            return(ba.ToByteArray());
        }