/// <summary>
        /// The parse screen definition.
        /// </summary>
        /// <param name="definition">
        /// The definition.
        /// </param>
        private void ParseScreenDefinition(SBString definition)
        {
            const int ButtonDesc = 11;
            const int Buttons = 12;
            const int Fields = 15;
            const int ProcessesBefore = 25;
            const int ProcessesAfter = 26;
            const int IntHelp = 27;
            const int FieldPos = 31;
            const int ConversionCode = 34;
            const int DefaultDerived = 35;
            const int Validation = 36;
            // So far I have not found where or what this is, in the BRANCH S1 screen it looks like a hangove from rev control. const int InputConversion   = 39;
            const int StyleName = 51;

            try
            {
                // fields
                var noFields = definition.Dcount(Fields);
                for (int fno = 1; fno <= noFields; fno++)
                {
                    var processBefore = (definition.Dcount() >= ProcessesBefore && definition.Extract(ProcessesBefore).Dcount() >= fno)
                                            ? definition.Extract(ProcessesBefore, fno).Value
                                            : string.Empty;
                    var processAfter = (definition.Dcount() >= ProcessesAfter && definition.Extract(ProcessesAfter).Dcount() >= fno)
                                           ? definition.Extract(ProcessesAfter, fno).Value
                                           : string.Empty;
                    var intuitiveHelp = (definition.Dcount() >= IntHelp && definition.Extract(IntHelp).Dcount() >= fno)
                                            ? definition.Extract(IntHelp, fno).Value
                                            : string.Empty;
                    var conversionCode = (definition.Dcount() >= ConversionCode && definition.Extract(ConversionCode).Dcount() >= fno)
                                             ? definition.Extract(ConversionCode, fno).Value
                                             : string.Empty;
                    var fieldDefault = string.Empty;
                    if (definition.Dcount() >= FieldPos && definition.Extract(FieldPos).Dcount() >= fno)
                    {
                        fieldDefault = (!string.IsNullOrEmpty(definition.Extract(FieldPos, fno).Value)
                                        && definition.Extract(FieldPos, fno).Value.Substring(0, 1).Equals("0"))
                                           ? string.Empty
                                           : definition.Extract(DefaultDerived, fno).Value;
                    }

                    var derived = string.Empty;
                    if (definition.Dcount() >= FieldPos && definition.Extract(FieldPos).Dcount() >= fno)
                    {
                        derived = (!string.IsNullOrEmpty(definition.Extract(FieldPos, fno).Value)
                                   && definition.Extract(FieldPos, fno).Value.Substring(0, 1).Equals("0"))
                                      ? string.Empty
                                      : definition.Extract(DefaultDerived, fno).Value;
                    }

                    var validation = (definition.Dcount() >= Validation && definition.Extract(Validation).Dcount() >= fno)
                                         ? definition.Extract(Validation, fno).Value
                                         : string.Empty;
                    var styleName = (definition.Dcount() >= StyleName && definition.Extract(StyleName).Dcount() >= fno)
                                        ? definition.Extract(StyleName, fno).Value
                                        : string.Empty;

                    this.FieldDescriptions.Add(
                        new ScreenFieldDefinition(this.FileName, definition.Extract(Fields, fno).Value)
                            {
                                ProcessBefore = processBefore,
                                ProcessAfter = processAfter,
                                IntuitiveHelp = intuitiveHelp,
                                ConversionCode = conversionCode,
                                FieldDefault = fieldDefault,
                                Derived = derived,
                                Validation = validation,
                                StyleName = styleName
                            });
                }

                // Buttons
                var noButtons = definition.Dcount(Buttons);
                for (int bNo = 1; bNo <= noButtons; bNo++)
                {
                    if (!definition.Extract(Buttons, bNo).IsNullOrEmpty())
                    {
                        DebugViewModel.Instance.ProcessAnalysisViewModel.LoadProcessFromExpression(
                            SourceDefinition.Button,
                            SourceDefinition.Process,
                            definition.Extract(Buttons, bNo).Value,
                            this,
                            "Button " + definition.Extract(ButtonDesc, bNo).Value);
                    }
                }

                // load the list of processes
                if (!string.IsNullOrWhiteSpace(definition.Extract(7, 1).Value))
                {
                    DebugViewModel.Instance.ProcessAnalysisViewModel.LoadProcessFromExpression(
                        SourceDefinition.Screen,
                        SourceDefinition.Process,
                        definition.Extract(7, 1).Value,
                        this,
                        "Before Screen Display");
                }

                if (!string.IsNullOrWhiteSpace(definition.Extract(7, 2).Value))
                {
                    DebugViewModel.Instance.ProcessAnalysisViewModel.LoadProcessFromExpression(
                        SourceDefinition.Screen,
                        SourceDefinition.Process,
                        definition.Extract(7, 2).Value,
                        this,
                        "After Screen Display");
                }

                if (!string.IsNullOrWhiteSpace(definition.Extract(7, 3).Value))
                {
                    DebugViewModel.Instance.ProcessAnalysisViewModel.LoadProcessFromExpression(
                        SourceDefinition.Screen,
                        SourceDefinition.Process,
                        definition.Extract(7, 3).Value,
                        this,
                        "After Read Record");
                }

                if (!string.IsNullOrWhiteSpace(definition.Extract(7, 4).Value))
                {
                    DebugViewModel.Instance.ProcessAnalysisViewModel.LoadProcessFromExpression(
                        SourceDefinition.Screen,
                        SourceDefinition.Process,
                        definition.Extract(7, 4).Value,
                        this,
                        "After Accept");
                }

                if (!string.IsNullOrWhiteSpace(definition.Extract(7, 5).Value))
                {
                    DebugViewModel.Instance.ProcessAnalysisViewModel.LoadProcessFromExpression(
                        SourceDefinition.Screen,
                        SourceDefinition.Process,
                        definition.Extract(7, 5).Value,
                        this,
                        "After Update");
                }

                if (!string.IsNullOrWhiteSpace(definition.Extract(7, 6).Value))
                {
                    DebugViewModel.Instance.ProcessAnalysisViewModel.LoadProcessFromExpression(
                        SourceDefinition.Screen,
                        SourceDefinition.Process,
                        definition.Extract(7, 6).Value,
                        this,
                        "If Escape");
                }

                // Buttons
            }
            catch (Exception exception)
            {
                CustomLogger.LogException(exception, "Exception parsing screen definition");
                // MessageBox.Show("Exception parsing screen definition (" + exception.Message + ")");
            }
        }