⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 optionsdlg.cpp

📁 用于开发Atmel的AVR系列单片机的GCC集成开发环境
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/**************************************************************************
Project: WinAVRIDE        Class: Compiler Options Dialog
Copyright (C) 2005  Philipp Schober

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

History
19.Feb 2005 - First Release (V1.0)
****************************************************************************/

#include <vcl.h>
#pragma hdrstop

#include "OptionsDlg.h"
#include "DirDialog.h"
#include "MainForm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TOptDlg *OptDlg;
//---------------------------------------------------------------------------
__fastcall TOptDlg::TOptDlg(TComponent* Owner)
        : TForm(Owner)
{
 options.MCUType = "at90s8535";
 OutputName = "";
 DataStart = 0x800060;
 HeapStart = 0x800000;
 HeapEnd = 0x800000;
 OptimBox->ItemIndex = 2;
}
//---------------------------------------------------------------------------
void __fastcall TOptDlg::ShowWindow (void)
{
 Position = poScreenCenter;
 OptToControl ();
 ShowModal ();
}
//---------------------------------------------------------------------------
void __fastcall TOptDlg::OkButtonClick(TObject *Sender)
{
 ControlToOpt ();
 ModalResult = mrOk;
}
//---------------------------------------------------------------------------

void __fastcall TOptDlg::CancelClick(TObject *Sender)
{
 ModalResult = mrCancel;
}
//---------------------------------------------------------------------------

void __fastcall TOptDlg::OptToControl (void)
{
 int i;
 AnsiString temp;

 if (options.MCUType != "")
 {
  for (i = 0;i < MCUBox->Items->Count;i++)
  {
   if (MCUBox->Items->Strings[i] == options.MCUType)
   {
    MCUBox->ItemIndex = i;
    break;
   }
  }
 }
 OutName->Text = OutputName;
 if (options.OutputFormat == "binary") FormatGroup->ItemIndex = 0;
 else if (options.OutputFormat == "srec") FormatGroup->ItemIndex = 2;
 else FormatGroup->ItemIndex = 1;
  
 AddComp->Text = options.AddComp;
 AddLink->Text = options.AddLink;
 GenList->Checked = options.GenList;
 GenMap->Checked = options.GenMap;
 CRef->Checked = options.CRef;
 TinyStack->Checked = options.TinyStack;
 DbgGroup->ItemIndex = options.DbgGroup;
 GenEEPROM->Checked = options.GenEEPROM;
 MathBox->Checked = options.MathBox;
 prntGroup->ItemIndex = options.prntGroup;
 scnGroup->ItemIndex = options.scnGroup;
 SaveTempBox->Checked = options.SaveTempBox;
 StdGroup->ItemIndex = options.StdGroup;
 PedaWarn->Checked = options.PedaWarn;
 NoImpWarn->Checked = options.NoImpWarn;
 CharSubsWarn->Checked = options.CharSubsWarn;
 ComWarn->Checked = options.ComWarn;
 FormWarn->Checked = options.FormWarn;
 ImplWarn->Checked = options.ImplWarn;
 BracWarn->Checked = options.BracWarn;
 ParWarn->Checked = options.ParWarn;
 RetTypWarn->Checked = options.RetTypWarn;
 SwitchWarn->Checked = options.SwitchWarn;
 SwiDefWarn->Checked = options.SwiDefWarn;
 UnusWarn->Checked = options.UnusWarn;
 UninitWarn->Checked = options.UninitWarn;
 PragWarn->Checked = options.PragWarn;
 SysHeadWarn->Checked = options.SysHeadWarn;
 UndefWarn->Checked = options.UndefWarn;
 EndifWarn->Checked = options.EndifWarn;
 ProtWarn->Checked = options.ProtWarn;
 NestWarn->Checked = options.NestWarn;
 InlineWarn->Checked = options.InlineWarn;
 UnreaWarn->Checked = options.UnreaWarn;
 AllWarn->Checked = options.AllWarn;
 PartWarn->Checked = options.PartWarn;
 NoWarn->Checked = options.NoWarn;
 OptimBox->ItemIndex = options.OptimBox;
 ExtLst->Checked = options.ExtLst;
 SymTab->Checked = options.SymTab;

 TexSecBox->Checked = RelocText;
 temp.printf ("%X", TextStart);
 TextSection->Text = temp;
 DatSecBox->Checked = RelocData;
 temp.printf ("%X", DataStart - 0x800000);
 DataSection->Text = temp;
 BssSecBox->Checked = RelocBss;
 temp.printf ("%X", BssStart - 0x800000);
 BssSection->Text = temp;
 HeapStartBox->Checked = DefHeapStart;
 temp.printf ("%X", HeapStart - 0x800000);
 HeapStartEd->Text = temp;
 HeapEndBox->Checked = DefHeapEnd;
 temp.printf ("%X", HeapEnd - 0x800000);
 HeapEndEd->Text = temp;
}
//---------------------------------------------------------------------------
void __fastcall TOptDlg::ControlToOpt (void)
{

 //LinkerOptions = "";
 OutputName = OutName->Text;
 options.MCUType = MCUBox->Items->Strings[MCUBox->ItemIndex];

 switch (FormatGroup->ItemIndex)
 {
  case 0: options.OutputFormat = "binary";
          break;
  case 1: options.OutputFormat = "ihex";
          break;
  case 2: options.OutputFormat = "srec";
 }
 options.AddComp = AddComp->Text;
 options.AddLink = AddLink->Text;
 options.GenList = GenList->Checked;
 options.GenMap = GenMap->Checked;
 options.CRef = CRef->Checked;
 options.TinyStack = TinyStack->Checked;
 options.DbgGroup = DbgGroup->ItemIndex;
 options.GenEEPROM = GenEEPROM->Checked;
 options.MathBox = MathBox->Checked;
 options.prntGroup = prntGroup->ItemIndex;
 options.scnGroup = scnGroup->ItemIndex;
 options.SaveTempBox = SaveTempBox->Checked;
 options.StdGroup = StdGroup->ItemIndex;
 options.PedaWarn = PedaWarn->Checked;
 options.NoImpWarn = NoImpWarn->Checked;
 options.CharSubsWarn = CharSubsWarn->Checked;
 options.ComWarn = ComWarn->Checked;
 options.FormWarn = FormWarn->Checked;
 options.ImplWarn = ImplWarn->Checked;
 options.BracWarn = BracWarn->Checked;
 options.ParWarn = ParWarn->Checked;
 options.RetTypWarn = RetTypWarn->Checked;
 options.SwitchWarn = SwitchWarn->Checked;
 options.SwiDefWarn = SwiDefWarn->Checked;
 options.UnusWarn = UnusWarn->Checked;
 options.UninitWarn = UninitWarn->Checked;
 options.PragWarn = PragWarn->Checked;
 options.SysHeadWarn = SysHeadWarn->Checked;
 options.UndefWarn = UndefWarn->Checked;
 options.EndifWarn = EndifWarn->Checked;
 options.ProtWarn = ProtWarn->Checked;
 options.NestWarn = NestWarn->Checked;
 options.InlineWarn = InlineWarn->Checked;
 options.UnreaWarn = UnreaWarn->Checked;
 options.AllWarn = AllWarn->Checked;
 options.PartWarn = PartWarn->Checked;
 options.NoWarn = NoWarn->Checked;
 options.OptimBox = OptimBox->ItemIndex;
 options.ExtLst = ExtLst->Checked;
 options.SymTab = SymTab->Checked;

 RelocText = TexSecBox->Checked;
 TextStart = HexToInt (TextSection->Text);
 RelocData = DatSecBox->Checked;
 DataStart = HexToInt (DataSection->Text) + 0x800000;
 RelocBss = BssSecBox->Checked;
 BssStart = HexToInt (BssSection->Text) + 0x800000;
 DefHeapStart = HeapStartBox->Checked;
 HeapStart = HexToInt (HeapStartEd->Text) + 0x800000;
 DefHeapEnd = HeapEndBox->Checked;
 HeapEnd = HexToInt (HeapEndEd->Text) + 0x800000;
 hasChanged = true;
}
//---------------------------------------------------------------------------
void __fastcall TOptDlg::SaveSettings (TIniFile *prj)
{
 prj->WriteString ("Options", "AddCompOpt", options.AddComp);
 prj->WriteString ("Options", "AddLinkOpt", options.AddLink);
 prj->WriteBool ("Options", "ListFile", GenList->Checked);
 prj->WriteString ("Options", "Target", OutputName);
 prj->WriteString ("Options", "Format", options.OutputFormat);
 prj->WriteString ("Options", "MCUType", options.MCUType);
 prj->WriteBool ("Options", "MapFile", options.GenMap);
 prj->WriteBool ("Options", "CrossReference", options.CRef);
 prj->WriteBool ("Options", "TinyStack", options.TinyStack);
 prj->WriteInteger ("Options", "DebugOut", options.DbgGroup);
 prj->WriteBool ("Options", "GenEEPROM", options.GenEEPROM);
 prj->WriteBool ("Options", "MathLib", options.MathBox);
 prj->WriteInteger ("Options", "PrintfVers", options.prntGroup);
 prj->WriteInteger ("Options", "ScanfVers", options.scnGroup);
 prj->WriteBool ("Options", "RelocTextStart", RelocText);
 prj->WriteInteger ("Options", "TextStart", TextStart);
 prj->WriteBool ("Options", "RelocDataStart", RelocData);
 prj->WriteInteger ("Options", "DataStart", DataStart);
 prj->WriteBool ("Options", "RelocBssStart", RelocBss);
 prj->WriteInteger ("Options", "BssStart", BssStart);
 prj->WriteBool ("Options", "DefHeapStart", DefHeapStart);
 prj->WriteInteger ("Options", "HeapStart", HeapStart);
 prj->WriteBool ("Options", "DefHeapEnd", DefHeapEnd);
 prj->WriteInteger ("Options", "HeapEnd", HeapEnd);
 prj->WriteBool ("Options", "SaveTemp", options.SaveTempBox);
 prj->WriteInteger ("Options", "CStandard", options.StdGroup);
 prj->WriteBool ("Options", "WarnPedantic", options.PedaWarn);
 prj->WriteBool ("Options", "WarnNoImport", options.NoImpWarn);
 prj->WriteBool ("Options", "WarnCharSubs", options.CharSubsWarn);
 prj->WriteBool ("Options", "WarnComment", options.ComWarn);
 prj->WriteBool ("Options", "WarnFormat", options.FormWarn);
 prj->WriteBool ("Options", "WarnImplicit", options.ImplWarn);
 prj->WriteBool ("Options", "WarnMissingBrac", options.BracWarn);
 prj->WriteBool ("Options", "WarnParentheses", options.ParWarn);
 prj->WriteBool ("Options", "WarnReturnType", options.RetTypWarn);
 prj->WriteBool ("Options", "WarnSwitch", options.SwitchWarn);
 prj->WriteBool ("Options", "WarnSwitchDef", options.SwiDefWarn);
 prj->WriteBool ("Options", "WarnUnused", options.UnusWarn);
 prj->WriteBool ("Options", "WarnUnitialized", options.UninitWarn);
 prj->WriteBool ("Options", "WarnUnknPrag", options.PragWarn);
 prj->WriteBool ("Options", "WarnSysHead", options.SysHeadWarn);
 prj->WriteBool ("Options", "WarnUndef", options.UndefWarn);
 prj->WriteBool ("Options", "WarnEndif", options.EndifWarn);
 prj->WriteBool ("Options", "WarnStrictProt", options.ProtWarn);
 prj->WriteBool ("Options", "WarnNestExt", options.NestWarn);
 prj->WriteBool ("Options", "WarnInline", options.InlineWarn);
 prj->WriteBool ("Options", "WarnUnreachable", options.UnreaWarn);
 prj->WriteBool ("Options", "WarnAll", options.AllWarn);
 prj->WriteBool ("Options", "WarnPartially", options.PartWarn);
 prj->WriteBool ("Options", "WarnNo", options.NoWarn);
 prj->WriteInteger ("Options", "Optimization", options.OptimBox);
 prj->WriteBool ("Options", "ExtListing", options.ExtLst);
 prj->WriteBool ("Options", "SymbolTable", options.SymTab);
}
//---------------------------------------------------------------------------
void __fastcall TOptDlg::LoadSettings (TIniFile *prj)
{


 options.AddComp = prj->ReadString ("Options", "AddCompOpt", NULL);
 options.AddLink = prj->ReadString ("Options", "AddLinkOpt", NULL);
 options.GenList = prj->ReadBool ("Options", "ListFile", false);
 OutputName = prj->ReadString ("Options", "Target", NULL);
 if (OutputName == "0") OutputName = "";
 options.OutputFormat = prj->ReadString ("Options", "Format", "ihex");

 options.MCUType = prj->ReadString ("Options", "MCUType", "at90s8535");

 options.GenMap = prj->ReadBool ("Options", "MapFile", true);
 options.CRef = prj->ReadBool ("Options", "CrossReference", true);
 options.TinyStack = prj->ReadBool ("Options", "TinyStack", false);
 options.DbgGroup = prj->ReadInteger ("Options", "DebugOut", 0);
 options.GenEEPROM = prj->ReadBool ("Options", "GenEEPROM", false);
 options.MathBox = prj->ReadBool ("Options", "MathLib", false);
 options.prntGroup = prj->ReadInteger ("Options", "PrintfVers", 0);
 options.scnGroup = prj->ReadInteger ("Options", "ScanfVers", 0);
 RelocText = prj->ReadBool ("Options", "RelocTextStart", false);
 TextStart = prj->ReadInteger ("Options", "TextStart", 0);
 RelocData = prj->ReadBool ("Options", "RelocDataStart", false);
 DataStart = prj->ReadInteger ("Options", "DataStart", 0x800060);
 RelocBss = prj->ReadBool ("Options", "RelocBssStart", false);
 BssStart = prj->ReadInteger ("Options", "BssStart", 0x800060);
 DefHeapStart = prj->ReadBool ("Options", "DefHeapStart", false);
 HeapStart = prj->ReadInteger ("Options", "HeapStart", 0x800000);
 DefHeapEnd = prj->ReadBool ("Options", "DefHeapEnd", false);
 HeapEnd = prj->ReadInteger ("Options", "HeapEnd", 0x800000);
 options.SaveTempBox = prj->ReadBool ("Options", "SaveTemp", false);
 options.StdGroup = prj->ReadInteger ("Options", "CStandard", 3);
 options.PedaWarn = prj->ReadBool ("Options", "WarnPedantic", false);
 options.NoImpWarn = prj->ReadBool ("Options", "WarnNoImport", false);
 options.CharSubsWarn = prj->ReadBool ("Options", "WarnCharSubs", false);
 options.ComWarn = prj->ReadBool ("Options", "WarnComment", false);
 options.FormWarn = prj->ReadBool ("Options", "WarnFormat", false);
 options.ImplWarn = prj->ReadBool ("Options", "WarnImplicit", false);
 options.BracWarn = prj->ReadBool ("Options", "WarnMissingBrac", false);
 options.ParWarn = prj->ReadBool ("Options", "WarnParentheses", false);
 options.RetTypWarn = prj->ReadBool ("Options", "WarnReturnType", false);
 options.SwitchWarn = prj->ReadBool ("Options", "WarnSwitch", false);
 options.SwiDefWarn = prj->ReadBool ("Options", "WarnSwitchDef", false);
 options.UnusWarn = prj->ReadBool ("Options", "WarnUnused", false);
 options.UninitWarn = prj->ReadBool ("Options", "WarnUnitialized", false);
 options.PragWarn = prj->ReadBool ("Options", "WarnUnknPrag", false);
 options.SysHeadWarn = prj->ReadBool ("Options", "WarnSysHead", false);
 options.UndefWarn = prj->ReadBool ("Options", "WarnUndef", false);
 options.EndifWarn = prj->ReadBool ("Options", "WarnEndif", false);
 options.ProtWarn = prj->ReadBool ("Options", "WarnStrictProt", false);
 options.NestWarn = prj->ReadBool ("Options", "WarnNestExt", false);
 options.InlineWarn = prj->ReadBool ("Options", "WarnInline", false);
 options.UnreaWarn = prj->ReadBool ("Options", "WarnUnreachable", false);
 options.AllWarn = prj->ReadBool ("Options", "WarnAll", false);
 options.PartWarn = prj->ReadBool ("Options", "WarnPartially", true);
 options.NoWarn = prj->ReadBool ("Options", "WarnNo", false);
 options.OptimBox = prj->ReadInteger ("Options", "Optimization", 2);
 options.ExtLst = prj->ReadBool ("Options", "ExtListing", false);
 options.SymTab = prj->ReadBool ("Options", "SymbolTable", false);
 hasChanged = false;
}
//---------------------------------------------------------------------------
void __fastcall TOptDlg::SetOutputName (AnsiString name)
{
 if (OutputName == "")
 {
  name.Delete (name.Pos (".prj"), 4);
  OutputName = name;
 }
 OutName->Text = OutputName;
}
//---------------------------------------------------------------------------


void __fastcall TOptDlg::HexKeyPress(TObject *Sender, char &Key)
{
 char valid[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                 'A', 'B', 'C', 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f', '\b'};
 int i;
 for (i = 0;i < 23;i++)
 {
  if (Key == valid[i]) return;
 }
 Key = 0;
}
//---------------------------------------------------------------------------
void __fastcall TOptDlg::TexSecBoxClick(TObject *Sender)
{
 TextSection->Enabled = TexSecBox->Checked;
}
//---------------------------------------------------------------------------
void __fastcall TOptDlg::DatSecBoxClick(TObject *Sender)
{
 DataSection->Enabled = DatSecBox->Checked;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -