Esempio n. 1
0
        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;
                    }
                }
            }
        }
Esempio n. 2
0
        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;
                    }
                }
            }
        }
Esempio n. 3
0
        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;
                }
            }
        }
Esempio n. 4
0
        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());
        }
Esempio n. 5
0
        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();
        }
Esempio n. 6
0
        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();
        }
Esempio n. 7
0
        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);
            }
        }
Esempio n. 8
0
 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;
         }
     }
 }