private string GetSubValue(ValueViewModel vvm, object sv)
        {
            if (vvm.DataType == DataTypeType.String)
            {
                return(string.Format("\"{0}\"", sv));
            }

            return(sv.ToString());
        }
        private string GetValueDataType(short address)
        {
            var q = from v in this.ValueList
                    where v.Address == address
                    select v;
            ValueViewModel vvm = q.FirstOrDefault();

            return(vvm.DataType.ToString());
        }
        private object GetCurrentValue(short address)
        {
            var q = from v in this.ValueList
                    where v.Address == address
                    select v;
            ValueViewModel vvm = q.FirstOrDefault();

            if (vvm == null)
            {
                return("");
            }

            StringBuilder sb = new StringBuilder();

            if (vvm.SubValue1 != null)
            {
                sb.Append(GetSubValue(vvm, vvm.SubValue1));
            }
            if (vvm.SubValue2 != null)
            {
                sb.Append(GetSubValue(vvm, vvm.SubValue2));
            }
            if (vvm.SubValue3 != null)
            {
                sb.Append(GetSubValue(vvm, vvm.SubValue3));
            }
            if (vvm.SubValue4 != null)
            {
                sb.Append(GetSubValue(vvm, vvm.SubValue4));
            }
            if (vvm.SubValue5 != null)
            {
                sb.Append(GetSubValue(vvm, vvm.SubValue5));
            }

            return(sb.ToString());
        }
        private void BuildVariables()
        {
            List <ValueViewModel> valueList = new List <ValueViewModel>();

            foreach (Value value in this.ParsedContent.ValuesList)
            {
                ValueViewModel valueViewModel = new ValueViewModel()
                {
                    Address        = value.Address,
                    AddressHex     = (short)(value.Address - ParsedContent.BaseAddress + ParsedContent.StartOfValues),
                    AddressHexBase = (short)(value.Address + ParsedContent.StartOfValues),
                    DataType       = value.DataType,
                    Reference      = value.Reference
                };
                if (value.SubValues.Count > 0)
                {
                    if (valueViewModel.DataType == DataTypeType.Float)
                    {
                        valueViewModel.SubValue1 = BitConverter.ToSingle(BitConverter.GetBytes((Int32)(value.SubValues[0])), 0);
                    }
                    else
                    {
                        valueViewModel.SubValue1 = value.SubValues[0];
                    }
                }
                if (value.SubValues.Count > 1)
                {
                    valueViewModel.SubValue2 = value.SubValues[1];
                }
                if (value.SubValues.Count > 2)
                {
                    valueViewModel.SubValue3 = value.SubValues[2];
                }
                if (value.SubValues.Count > 3)
                {
                    valueViewModel.SubValue4 = value.SubValues[3];
                }
                if (value.SubValues.Count > 4)
                {
                    valueViewModel.SubValue5 = value.SubValues[4];
                }

                valueList.Add(valueViewModel);


                //build variables list
                if (!variables.ContainsKey(value.Address))
                {
                    Variable v = new Variable()
                    {
                        Address  = value.Address,
                        DataType = value.DataType.ToString()
                                   //Name = "var" + value.DataType.ToString() + value.Address.ToString()
                    };
                    switch (v.DataType.ToLower())
                    {
                    case ("int"):
                        v.Name = "nVar" + v.Address.ToString();
                        break;

                    case ("string"):
                        v.Name = "szVar" + v.Address.ToString();
                        break;

                    case ("point"):
                        v.Name = "ptVar" + v.Address.ToString();
                        break;

                    case ("character"):
                        v.Name = "cVar" + v.Address.ToString();
                        break;

                    case ("float"):
                        v.Name = "fVar" + v.Address.ToString();
                        break;

                    case ("quaternion"):
                        v.Name = "qVar" + v.Address.ToString();
                        break;
                    }


                    variables.Add(value.Address, v);
                }
            }
            this.ValueList = valueList;

            //work out which variables are static
            for (int i = 0; i < ParsedContent.OpCodeList.Count; i++)
            {
                Operation operation = ParsedContent.OpCodeList[i];
                if (operation.OpCode == OpCodeType.OP_GETTOP)
                {
                    if (variables.ContainsKey(operation.DataIndex.Value))
                    {
                        variables[operation.DataIndex.Value].Static = false;
                    }
                }
            }
        }