📄 optionsdlg.cpp
字号:
/**************************************************************************
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 + -