private bool CheckDup(RegisterEntry new_entry) { int addr_new = new_entry.GetAddress(); string name_new = new_entry.GetName(); foreach (RegisterEntry item in RegList) { if (item.GetIsComment() || item == new_entry) { continue; } if (item.GetName().Equals(name_new)) { new_entry.SetReason("Name " + name_new + " is already in the list at address " + item.GetAddress().ToString()); new_entry.SetValid(false); return(false); } if (item.GetAddress() == addr_new) { new_entry.SetReason("Address " + addr_new + " is already in the list at register " + item.GetName()); new_entry.SetValid(false); return(false); } } return(true); }
public static bool ValidEntry(RegisterEntry entry) { if (entry.GetIsComment()) { return(true); } bool b = true; if (!entry.IsValidAddress()) { entry.SetReason("The register " + entry.GetName() + " has invalid address: " + entry.GetAddress()); entry.SetValid(false); b = false; } if (!entry.IsValidMAIS()) { entry.SetReason("The register " + entry.GetName() + " has invalid MAIS field: " + entry.GetMAIS()); entry.SetValid(false); b = false; } if (!entry.IsValidLSB()) { entry.SetReason("The register " + entry.GetName() + "(" + entry.GetAddress() + ") has LSB out of range [0, 32)"); entry.SetValid(false); b = false; } if (!entry.IsValidLSB()) { entry.SetReason("The register " + entry.GetName() + "(" + entry.GetAddress() + ") has MSB out of range [0, 32)"); entry.SetValid(false); b = false; } if (!entry.IsValidLsbMsb()) { entry.SetReason("The register " + entry.GetName() + "(" + entry.GetAddress() + ") has MSB < LSB"); entry.SetValid(false); b = false; } return(b); }
private void TreeGridView1_SelectionChanged(object sender, EventArgs e) { RegisterEntry re = null; foreach (TreeGridNode item in treeGridView1.SelectedRows) { try { re = RegList[(int)item.Cells["IndexColumn"].Value]; int index = (int)item.Cells["SecondaryIndexColumn"].Value; if (index != -1) { re = re.GetFields()[index]; //MessageBox.Show(re.GetIndex().ToString() + ", " + index); } else { //MessageBox.Show(re.GetIndex().ToString()); } break; } catch (NullReferenceException) { //do nothing for groups return; } } if (re != null) { RegNameText.Text = re.GetName(); CommentText.Text = re.GetComment(); InitText.Text = re.GetInit(); int index = LSBOpts.FindStringExact(re.GetLSB().ToString()); if (index == -1) { index = 0; } LSBOpts.SelectedIndex = index; index = LSBOpts.FindStringExact(re.GetLSB().ToString()); if (index == -1) { index = 0; } LSBOpts.SelectedIndex = index; index = MSBOpts.FindStringExact(re.GetMSB().ToString()); if (index == -1) { index = 31; } MSBOpts.SelectedIndex = index; index = MAISOpts.FindStringExact(re.GetMAIS().ToString()); if (index == -1) { index = 0; } MAISOpts.SelectedIndex = index; index = TypeOpts.FindStringExact(re.GetRegType().ToString()); if (index == -1) { index = 0; } TypeOpts.SelectedIndex = index; index = FPGAOpts.FindStringExact(re.GetFPGA().ToString()); if (index == -1) { index = 0; } FPGAOpts.SelectedIndex = index; RegGroupOpts.SelectedIndex = RegGroupOpts.FindStringExact(re.GetGroup()); if (re.GetIsComment()) { ErrorMessage.Text = ""; } else if (!re.GetValid()) { ErrorMessage.Text = re.GetReason(); } else { ErrorMessage.Text = ""; } } }
/* Edit a register */ private void Load_Click(object sender, EventArgs e) { RegisterEntry re = null; TreeGridNode node = null; foreach (TreeGridNode item in treeGridView1.SelectedRows) { try { re = RegList[(int)item.Cells["IndexColumn"].Value]; int index = (int)item.Cells["SecondaryIndexColumn"].Value; if (index != -1) { re = re.GetFields()[index]; } node = item; break; } catch (NullReferenceException) { //do nothing for groups return; } } if (re == null) { MessageBox.Show("Please select a register in order to edit"); return; } string name = RegNameText.Text; if (!re.GetName().Equals(name)) { MessageBox.Show("You can't edit a register's name"); RegNameText.Text = re.GetName(); return; } string mais = MAISOpts.Text; string lsb = LSBOpts.Text; string msb = MSBOpts.Text; string type = TypeOpts.Text; string fpga = FPGAOpts.Text; string init = InitText.Text; string comment = CommentText.Text; string group = RegGroupOpts.Text; RegisterEntry entry; int i = re.GetIndex(), j = re.GetSecondaryIndex(); if (i == -1) { MessageBox.Show("No such register " + name); InitFields(); return; } entry = RegList[i]; if (j != -1) { entry = entry.GetFields()[j]; } if (entry.GetIsComment()) { MessageBox.Show("This register is a comment and can't be edited"); //InitFields(); return; } Enum.TryParse(type, out RegisterEntry.type_field t); RegisterEntry.type_field s = entry.GetRegType(); if ((s == RegisterEntry.type_field.FIELD && t != RegisterEntry.type_field.FIELD) || s != RegisterEntry.type_field.FIELD && t == RegisterEntry.type_field.FIELD) { MessageBox.Show("Can't edit a field or create one using Load"); TypeOpts.SelectedIndex = (int)s; return; } if (!RegisterEntry.IsValidLsbMsb(msb, lsb)) { MessageBox.Show("Can't edit an entry to have LSB > MSB"); //InitFields(); return; } Enum.TryParse(fpga, out RegisterEntry.fpga_field r); entry.EditRegister(mais, lsb, msb, t, r, init, comment, group); OpenValidation(); UpdateDataBase(); EditCell(node, entry.GetTableEntry()); }
/* 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); }