private void assembleButton_Click(object sender, EventArgs e) { preComCheck = null; CompError c = new CompError(); int off; bool success = Utility.OffsetStringToInt(offsetBox.Text, out off); if (success) { insertOffset = off; bool syntaxPass = false; preComCheck = new BinFile(asm.AssembleASM(off, mainTextBox.Text, ref c, out syntaxPass)); if (!syntaxPass) { Error.ShowErrorMessage(c); gcheckSuccess = false; } else if (preComCheck.Length != 0) { string message = "Are you sure you want to insert this code?"; message += "\n" + "Offset: $" + insertOffset.ToString("X") + " Size: $" + preComCheck.Length.ToString("X") + " byte(s)"; if (MessageBox.Show(message, "Confirm Insertion", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes) { baseFile.ModifyFile(insertOffset, preComCheck); this.DialogResult = System.Windows.Forms.DialogResult.OK; } } } }
private void okButton_Click(object sender, EventArgs e) { bool checkNameCollision = editingMode == LabelEditMode.Add ? true : !nameBox.Text.Equals(editedLabel.Name, StringComparison.Ordinal); int off = -1; int len = 0; Symbol sym = new Symbol() { Name = nameBox.Text }; if (!Utility.IsWord(nameBox.Text)) { Error.ShowErrorMessage(ErrorMessage.Label_InvalidName); } else if (checkNameCollision && labelContainer.IsSymbolDefined(sym)) { Error.ShowErrorMessage(ErrorMessage.Label_NameAlreadyDefined); } else if (!Utility.OffsetStringToInt(offsetBox.Text, out off)) { Error.ShowErrorMessage(ErrorMessage.Label_InvalidOffset); } else if (!Int32.TryParse(lengthBox.Text, NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture, out len) || len <= 0) { Error.ShowErrorMessage(ErrorMessage.Label_InvalidLength); } else { TemplateBuilder tb = new TemplateBuilder(); string input = dataTemplateBox.Text; bool success = false; CompError error = new CompError(); var printTemplate = tb.ValidateTemplate(input, ref error, out success); if (!success) { Error.ShowErrorMessage(error); } else { if (editingMode == LabelEditMode.Edit) { labelContainer.RemoveDataLabel(editedLabel); } editedLabel = new DataLabel(off, len, nameBox.Text, printTemplate, commentBox.Text, (DataSectionType)dataTypeBox.SelectedIndex); labelContainer.AddDataLabel(editedLabel); this.DialogResult = System.Windows.Forms.DialogResult.OK; } } }
public string ValidateTemplate(string input, ref CompError error, out bool success) { Initialize(); success = false; error = new CompError(); var syntaxTree = new CommonTree(); if (!CreateAST(input, out syntaxTree)) { error = currentError; return(""); } if (!EvaluateAST(syntaxTree)) { error = currentError; return(""); } success = true; return(sb.ToString()); }
public byte[] AssembleASM(int baseOffset, string input, ref CompError error, out bool success) { success = false; error = new CompError(); int currentOffset = baseOffset; int currentPreOffset = baseOffset; Initialize(); var syntaxTree = new CommonTree(); if (!CreateAST(input, out syntaxTree)) { error = currentError; return new byte[1]; } if (!(EvaluateAST(syntaxTree, baseOffset) && EvaluateSymbols(baseOffset))) { error = currentError; return new byte[1]; } success = true; return codeGen.StreamToArray(); }
public string ValidateTemplate(string input, ref CompError error, out bool success) { Initialize(); success = false; error = new CompError(); var syntaxTree = new CommonTree(); if (!CreateAST(input, out syntaxTree)) { error = currentError; return ""; } if (!EvaluateAST(syntaxTree)) { error = currentError; return ""; } success = true; return sb.ToString(); }
private void Initialize() { codeGen.ClearStream(); variableDict.Clear(); callDict.Clear(); symFillTable.Clear(); macroDict.Clear(); macroArgStack.Clear(); currentError = new CompError(); GlobalScopeName = "_"; LocalScopeName = "_"; foreach (FunctionLabel kvp in lc.FuncList) { callDict.Add(GetGlobalScopedID(kvp.Name), Utility.GetPCAddress(kvp.Value)); } foreach (DataLabel kvp in lc.DataList) { callDict.Add(GetGlobalScopedID(kvp.Name), Utility.GetPCAddress(kvp.Value)); } foreach (VarLabel kvp in lc.VarList) { variableDict.Add(GetGlobalScopedID(kvp.Name), kvp.Value); } }