예제 #1
0
        /* Check the a register can be added to the chart */
        private bool InputValidation(RegisterEntry entry)
        {
            if (entry.GetName()[0] >= '0' && entry.GetName()[0] <= '9')
            {
                MessageBox.Show("Register name can't begin with a digit");
                return(false);
            }
            if (entry.GetRegType() != RegisterEntry.type_field.FIELD)
            {
                int index = -1;
                for (int i = 0; i < RegList.Count; i++)
                {
                    if (RegList[i].GetName().Equals(entry.GetName()))
                    {
                        index = i;
                    }
                }
                if (index != -1)
                {
                    MessageBox.Show("Register " + entry.GetName() + " (" + RegList[index].GetAddress() + ") is already in the list");
                    return(false);
                }
                int addr = FindAddress();
                if (addr == -1)
                {
                    MessageBox.Show("Unable to add register " + entry.GetName() + ", no free slot in memory");
                    return(false);
                }
                entry.SetAddress(addr);
            }
            else
            {
                if (RegList.Count == 0)
                {
                    MessageBox.Show("There are no registers in the list");
                    return(false);
                }
                int           addr = -1, index = -1;
                RegisterEntry item;
                using (ChooseAddressPrompt prompt = new ChooseAddressPrompt(RegList.ToArray()))
                {
                    if (prompt.ShowDialog() == DialogResult.OK)
                    {
                        addr  = prompt.Chosen_address;
                        index = prompt.Index;
                        item  = RegList[prompt.Index];
                    }
                    else
                    {
                        return(false);
                    }
                }
                List <RegisterEntry> fields = item.GetFields();
                foreach (RegisterEntry field in fields)
                {
                    if (field.GetName().Equals(entry.GetName()))
                    {
                        MessageBox.Show("Field " + entry.GetName() + " (" + item.GetAddress() + ") is already in the list of " + item.GetName());
                        return(false);
                    }
                }
                entry.SetAddress(addr);
                entry.SetIndex(index);
            }

            if (!entry.IsValidLsbMsb())
            {
                MessageBox.Show("Can't insert register " + entry.GetName() + " with LSB greater than MSB");
                return(false);
            }
            return(true);
        }