MSC PCH support

git-svn-id: svn://ultimatepp.org/upp/trunk@8033 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2015-01-12 20:21:56 +00:00
parent 14b2658ce0
commit 77b5beb1dc
42 changed files with 400 additions and 195 deletions

View file

@ -7,7 +7,7 @@ uses
plugin/pcre;
file
CodeEditor.h,
CodeEditor.h options PCH,
Syntax readonly separator,
Syntax.h,
hl_color.i,

View file

@ -32,11 +32,12 @@ link(SOLARIS) "-Wl,-R -Wl,/usr/local/lib";
link(GCC POSIX STACKTRACE) -rdynamic;
file
Core.h,
Core.h options PCH,
config.h,
Defs.h,
Cpu.cpp optimize_speed,
Cpu.cpp optimize_speed options NOPCH,
Mt.h,
Core.upp,
Mt.cpp,
OL_Set.cpp,
Global.h,

View file

@ -6,7 +6,7 @@ uses
Core;
file
CppBase.h,
CppBase.h options PCH,
keyword.i,
Pre.cpp,
cpplex.cpp,

View file

@ -35,7 +35,7 @@ library(DRAGONFLY) "Xext Xinerama";
file
Core readonly separator,
CtrlCore.h,
CtrlCore.h options PCH,
MKeys.h,
stdids.h,
SystemDraw.cpp,

View file

@ -9,7 +9,7 @@ uses
uses(POSIX | LINUX | FREEBSD) PdfDraw;
file
CtrlLib.h,
CtrlLib.h options PCH,
CtrlLib readonly separator,
LabelBase.h,
LabelBase.cpp,

View file

@ -21,7 +21,7 @@ library(OSX11) "fontconfig freetype expat";
library(FREEBSD) xcb;
file
Draw.h,
Draw.h options PCH,
FontInt.h,
Font.cpp,
FontCR.cpp,

View file

@ -6,7 +6,7 @@ uses
Core;
file
Esc.h,
Esc.h options PCH,
EscValue.cpp,
EscArray.cpp,
EscMap.cpp,

View file

@ -8,7 +8,7 @@ uses
RichEdit;
file
IconDes.h,
IconDes.h options PCH,
IconDes.key,
IconDraw.cpp,
AlphaCtrl.cpp,

View file

@ -4,7 +4,7 @@ uses
Draw;
file
Painter.h,
Painter.h options PCH,
Painter.hpp,
Painter.cpp,
SvgArc.cpp,

View file

@ -4,7 +4,7 @@ uses
Draw;
file
PdfDraw.h,
PdfDraw.h options PCH,
TTFStream.cpp,
TTFStruct.cpp,
TTFReader.cpp,

View file

@ -4,7 +4,7 @@ uses
CtrlLib;
file
RichEdit.h,
RichEdit.h options PCH,
Ruler.cpp,
UnitEdit.cpp,
Editor.cpp,

View file

@ -5,7 +5,7 @@ uses
Draw;
file
RichText.h,
RichText.h options PCH,
Object.cpp,
RichImage.icpp,
Para.h,

View file

@ -2,7 +2,7 @@ uses
CtrlLib;
file
TextDiffCtrl.h,
TextDiffCtrl.h options PCH,
TextDiff.cpp,
TextCtrl.cpp,
DiffCtrl.cpp,

View file

@ -312,6 +312,7 @@ void AutoSetup()
"PATH = " + AsCString(AppendFileName(mingwdir, "bin") + exe) + ";\n"
"INCLUDE = " + AsCString(AppendFileName(mingwdir, "include") + include) + ";\n"
"LIB = " + AsCString(AppendFileName(mingwdir, "lib") + lib + mlib) + ";\n"
"ALLOW_PRECOMPILED_HEADERS = \"1\";\n"
);
SaveFile(AppendFileName(dir, "default_method"), m);
}
@ -345,6 +346,7 @@ void AutoSetup()
"LIB = " + AsCString(AppendFileName(owcdir, "lib386") + ';' +
AppendFileName(owcdir, "lib386\\nt") +
lib + mlib) + ";\n"
"ALLOW_PRECOMPILED_HEADERS = \"1\";\n"
);
SaveFile(AppendFileName(dir, "default_method"), m);
}
@ -397,6 +399,7 @@ void AutoSetup()
AppendFileName(sdk, "Lib\\winv6.3\\um\\x64") +
lib
) + ";\n"
"ALLOW_PRECOMPILED_HEADERS = \"1\";\n"
);
SaveFile(AppendFileName(dir, "default_method"), m);
}
@ -441,6 +444,7 @@ void AutoSetup()
AppendFileName(sdk, "Lib\\winv6.3\\um\\x86") +
lib
) + ";\n"
"ALLOW_PRECOMPILED_HEADERS = \"1\";\n"
);
SaveFile(AppendFileName(dir, "default_method"), m);
}
@ -489,6 +493,7 @@ void AutoSetup()
AppendFileName(sdk, "Lib\\win8\\um\\x64") +
lib
) + ";\n"
"ALLOW_PRECOMPILED_HEADERS = \"1\";\n"
);
SaveFile(AppendFileName(dir, "default_method"), m);
}
@ -533,6 +538,7 @@ void AutoSetup()
AppendFileName(sdk, "Lib\\win8\\um\\x86") +
lib
) + ";\n"
"ALLOW_PRECOMPILED_HEADERS = \"1\";\n"
);
SaveFile(AppendFileName(dir, "default_method"), m);
}
@ -579,6 +585,7 @@ void AutoSetup()
AppendFileName(sdk, "Lib\\x64") +
lib
) + ";\n"
"ALLOW_PRECOMPILED_HEADERS = \"1\";\n"
);
SaveFile(AppendFileName(dir, "default_method"), m);
}
@ -621,6 +628,7 @@ void AutoSetup()
AppendFileName(sdk, "Lib") +
lib
) + ";\n"
"ALLOW_PRECOMPILED_HEADERS = \"1\";\n"
);
SaveFile(AppendFileName(dir, "default_method"), m);
}
@ -667,6 +675,7 @@ void AutoSetup()
AppendFileName(sdk, "Lib\\x64") +
lib
) + ";\n"
"ALLOW_PRECOMPILED_HEADERS = \"1\";\n"
);
SaveFile(AppendFileName(dir, "default_method"), m);
}
@ -709,6 +718,7 @@ void AutoSetup()
AppendFileName(sdk, "Lib") +
lib
) + ";\n"
"ALLOW_PRECOMPILED_HEADERS = \"1\";\n"
);
SaveFile(AppendFileName(dir, "default_method"), m);
}

View file

@ -7,7 +7,7 @@ uses
RichEdit;
file
Browser.h,
Browser.h options PCH,
Browser readonly separator,
Lay.cpp,
Iml.cpp,

View file

@ -224,6 +224,7 @@ struct OneFileHost : Host {
virtual bool Run(const char *cmdline, Stream& out, int slot, String key, int blitz_count) { return host->Run(cmdline, out, slot, key, blitz_count); }
virtual bool Wait() { return host->Wait(); }
virtual bool Wait(int slot) { return host->Wait(slot); }
virtual void OnFinish(Callback cb) { return host->OnFinish(cb); }
virtual One<AProcess> StartProcess(const char *c) { return host->StartProcess(c); }
virtual void Launch(const char *cmdline, bool) { host->Launch(cmdline); }
virtual void AddFlags(Index<String>& cfg) { host->AddFlags(cfg); }

View file

@ -50,6 +50,7 @@ struct CppBuilder : Builder {
bool Run(const char *cmdline, Stream& out, int slot, String key, int blitz_count);
bool Wait();
bool Wait(int slot);
void OnFinish(Callback cb);
bool HasFlag(const char *f) const { return config.Find(f) >= 0; }
bool Cp(const String& cmd, const String& package, bool& error);
bool Cd(const String& cmd);
@ -77,7 +78,8 @@ struct CppBuilder : Builder {
Blitz BlitzStep(Vector<String>& sfile, Vector<String>& soptions,
Vector<String>& obj, Vector<String>& immfile,
const char *objext, Vector<bool>& optimize);
const char *objext, Vector<bool>& optimize,
const Index<String>& noblitz);
virtual void AddMakeFile(MakeFile& makefile, String package,
const Vector<String>& all_uses, const Vector<String>& all_libraries,
@ -127,7 +129,7 @@ struct MscBuilder : CppBuilder {
String CmdLine(const String& package, const Package& pkg);
String MachineName() const;
String LinkerName() const;
String PdbPch(String package, int slot, bool do_pch) const;
String Pdb(String package, int slot, bool separate_pdb) const;
bool HasAnyDebug() const;
void BinObjConsole(String c) { PutConsole(c); }
bool IsMsc89() const;

View file

@ -6,7 +6,7 @@ uses
ide\Core;
file
Builders.h,
Builders.h options PCH,
CppBuilder.cpp,
MakeFile.cpp,
GccBuilder.icpp,

View file

@ -188,6 +188,11 @@ bool CppBuilder::Wait(int slot)
return host->Wait(slot);
}
void CppBuilder::OnFinish(Callback cb)
{
host->OnFinish(cb);
}
void CppBuilder::ChDir(const String& path)
{
host->ChDir(path);
@ -386,7 +391,8 @@ Time BlitzBaseTime()
Blitz CppBuilder::BlitzStep(Vector<String>& sfile, Vector<String>& soptions,
Vector<String>& obj, Vector<String>& immfile,
const char *objext, Vector<bool>& optimize)
const char *objext, Vector<bool>& optimize,
const Index<String>& noblitz)
{
Blitz b;
Vector<String> excluded;
@ -406,7 +412,8 @@ Blitz CppBuilder::BlitzStep(Vector<String>& sfile, Vector<String>& soptions,
Time fntime = GetFileTime(fn);
if((ext == ".cpp" || ext == ".cc" || ext == ".cxx")
&& HdependBlitzApproved(fn) && IsNull(soptions[i]) && !optimize[i]
&& fntime < BlitzBaseTime()) {
&& fntime < BlitzBaseTime()
&& noblitz.Find(fn) < 0) {
if(HdependFileTime(fn) > blitztime)
b.build = true;
blitz << "\r\n"

View file

@ -99,6 +99,7 @@ bool GccBuilder::BuildPackage(const String& package, Vector<String>& linkfile, V
Vector<String> soptions, isoptions;
Vector<bool> optimize, ioptimize;
bool error = false;
Index<String> nopch, noblitz;
for(i = 0; i < pkg.GetCount(); i++) {
if(!IdeIsBuilding())
@ -135,7 +136,7 @@ bool GccBuilder::BuildPackage(const String& package, Vector<String>& linkfile, V
}
if(HasFlag("BLITZ")) {
Blitz b = BlitzStep(sfile, soptions, obj, immfile, ".o", optimize);
Blitz b = BlitzStep(sfile, soptions, obj, immfile, ".o", optimize, noblitz);
if(b.build) {
PutConsole("BLITZ:" + b.info);
int slot = AllocSlot();

View file

@ -159,15 +159,18 @@ bool MscBuilder::HasAnyDebug() const
return HasFlag("DEBUG") || HasFlag("DEBUG_MINIMAL") || HasFlag("DEBUG_FULL");
}
String MscBuilder::PdbPch(String package, int slot, bool do_pch) const
String MscBuilder::Pdb(String package, int slot, bool separate_pdb) const
{
String pkg_slot = NFormat("%s-%d", GetAnyFileName(package), slot + 1);
String pdb = GetHostPathQ(CatAnyPath(outdir, pkg_slot + ".pdb"));
String cc;
cc << " -Gy -Fd" << pdb << ' ';
if(do_pch && !IsMsc89()) // MSC8/9 does not support automatic precompiled headers...
cc << "-YX -Fp" << GetHostPathQ(CatAnyPath(outdir, pkg_slot + ".pch")) << ' ';
return cc;
String pdb_name = GetAnyFileName(package);
if(separate_pdb)
pdb_name << '-' << (slot + 1);
return " -Gy -Fd" + GetHostPathQ(CatAnyPath(outdir, pdb_name + ".pdb"));
}
void DeletePCHFile(const String& pch_file)
{
DeleteFile(pch_file);
PutVerbose("Deleting PCH: " + pch_file);
}
bool MscBuilder::BuildPackage(const String& package, Vector<String>& linkfile, Vector<String>& immfile,
@ -239,6 +242,7 @@ bool MscBuilder::BuildPackage(const String& package, Vector<String>& linkfile, V
String pch;
/*
if(allow_pch && pkg.GetCount() && IsMsc86()) {
String hdr_path = SourcePath(package, pkg[0]);
if(IsCHeaderFile(hdr_path) && HdependBlitzApproved(hdr_path)) {
@ -268,6 +272,13 @@ bool MscBuilder::BuildPackage(const String& package, Vector<String>& linkfile, V
<< " -Fp" << GetHostPathQ(pchfile);
}
}
*/
String pch_header;
Index<String> nopch, noblitz;
bool blitz = HasFlag("BLITZ");
for(i = 0; i < pkg.GetCount(); i++) {
if(!IdeIsBuilding())
@ -277,19 +288,20 @@ bool MscBuilder::BuildPackage(const String& package, Vector<String>& linkfile, V
Vector<String> srcfile = CustomStep(pkg[i], package, error);
if(srcfile.GetCount() == 0)
error = true;
bool speed = release && pkg[i].optimize_speed && opt == R_OPTIMAL;
for(int j = 0; j < srcfile.GetCount(); j++) {
String fn = srcfile[j];
String ext = ToLower(GetFileExt(fn));
if(ext == ".c" || ext == ".cpp" || ext == ".cc" || ext == ".cxx" || ext == ".rc" || ext == ".brc") {
sfile.Add(fn);
soptions.Add(gop);
optimize.Add(release && pkg[i].optimize_speed && opt == R_OPTIMAL);
optimize.Add(speed);
}
else
if(ext == ".icpp") {
isfile.Add(fn);
isoptions.Add(gop);
ioptimize.Add(release && pkg[i].optimize_speed && opt == R_OPTIMAL);
ioptimize.Add(speed);
}
else
if(ext == ".obj")
@ -297,21 +309,73 @@ bool MscBuilder::BuildPackage(const String& package, Vector<String>& linkfile, V
else
if(ext == ".lib")
linkfile.Add(fn);
else
if(findarg(ext, ".h", ".hpp", ".hh", ".hxx") >= 0 && pkg[i].pch && allow_pch && IsMsc89() && release && !HasAnyDebug() && !blitz) {
if(pch_header.GetCount())
PutConsole(GetFileName(fn) + ": multiple PCH is not allowed. Check your package configuration");
else
pch_header = fn;
}
if(pkg[i].nopch) {
nopch.Add(fn);
if(allow_pch && release)
noblitz.Add(fn);
}
if(pkg[i].noblitz)
noblitz.Add(fn);
}
}
}
int recompile = 0;
Blitz b;
if(blitz) {
b = BlitzStep(sfile, soptions, obj, immfile, ".obj", optimize, noblitz);
recompile = b.build;
}
if(HasFlag("BLITZ")) {
Blitz b = BlitzStep(sfile, soptions, obj, immfile, ".obj", optimize);
if(b.build) {
PutConsole("BLITZ:" + b.info);
int slot = AllocSlot();
if(slot < 0 ||
!Run(Join(cc, cpp_options) + PdbPch(package, slot, false)
+ " -Tp " + GetHostPathQ(b.path) + " -Fo" + GetHostPathQ(b.object),
slot, GetHostPath(b.object), b.count))
for(i = 0; i < sfile.GetCount(); i++) {
String fn = sfile[i];
String ext = ToLower(GetFileExt(fn));
if(findarg(ext, ".rc", ".brc") < 0 && HdependFileTime(sfile[i]) > GetFileTime(CatAnyPath(outdir, GetFileTitle(fn) + ".obj")))
recompile++;
}
String pch_use;
String pch_file;
if(recompile > 1 && pch_header.GetCount()) {
String pch_obj = CatAnyPath(outdir, GetFileTitle(pch_header) + "$pch.obj");
pch_file = CatAnyPath(outdir, GetFileTitle(pch_header) + ".pch");
String pch_common = GetHostPathQ(pch_header) + " -Fp" + GetHostPathQ(pch_file) + " -FI" + GetHostPathQ(pch_header);
if(blitz) // enable MK__s macros
pch_common.Cat(" -DBLITZ_INDEX__=FPCH");
if(HdependFileTime(pch_header) > GetFileTime(pch_obj)) { // check if PCH is up-to-date
int pch_slot = AllocSlot();
StringBuffer sb;
sb << Join(cc, cpp_options) << Pdb(package, pch_slot, false) << " -Yc" << pch_common
<< " -Tp " << GetHostPathQ(pch_header) << " -Fo" + GetHostPathQ(pch_obj);
PutConsole("PCH: " + GetFileName(pch_header));
if(pch_slot < 0 || !Run(~sb, pch_slot, GetHostPath(pch_obj), 1))
error = true;
Wait();
}
pch_use = " -Yu" + pch_common;
obj.Add(pch_obj);
}
if(blitz && b.build) {
PutConsole("BLITZ:" + b.info);
int slot = AllocSlot();
String c = Join(cc, cpp_options);
if(HasAnyDebug())
c << Pdb(package, slot, false);
if(slot < 0 ||
!Run(c + " -Tp " + GetHostPathQ(b.path) + " -Fo" + GetHostPathQ(b.object) + pch_use,
slot, GetHostPath(b.object), b.count))
error = true;
}
int first_ifile = sfile.GetCount();
@ -321,9 +385,6 @@ bool MscBuilder::BuildPackage(const String& package, Vector<String>& linkfile, V
int ccount = 0;
// if(sContainsPchOptions(cc))
// pch = Null;
for(i = 0; i < sfile.GetCount(); i++) {
if(!IdeIsBuilding())
return false;
@ -357,8 +418,8 @@ bool MscBuilder::BuildPackage(const String& package, Vector<String>& linkfile, V
SaveFile(tmpfile, fo);
int slot = AllocSlot();
StringBuffer cmdline;
cmdline << cc << PdbPch(package, slot, false)
<< " -Tc " << GetHostPathQ(tmpfile) << " -Fo" << GetHostPathQ(objfile);
cmdline << cc << Pdb(package, slot, false)
<< " -Tc " << GetHostPathQ(tmpfile) << " -Fo" << GetHostPathQ(objfile);
if(slot < 0 || !Run(String(cmdline), slot, GetHostPath(objfile), 1))
throw Exc(NFormat("Error compiling binary object '%s'.", objfile));
}
@ -372,9 +433,13 @@ bool MscBuilder::BuildPackage(const String& package, Vector<String>& linkfile, V
if(optimize[i])
c = cc_speed;
int slot = AllocSlot();
if(slot < 0 || !Run(c + PdbPch(package, slot, !sContainsPchOptions(cc) && !sContainsPchOptions(soptions[i]))
+ " " + soptions[i] + (ext == ".c" ? Join(" -Tc", c_options) : Join(" -Tp", cpp_options)) + ' '
+ GetHostPathQ(fn) + " -Fo" + GetHostPathQ(objfile) + pch, slot, GetHostPath(objfile), 1))
if(HasAnyDebug())
c << Pdb(package, slot, !sContainsPchOptions(cc) && !sContainsPchOptions(soptions[i]));
c << " " + soptions[i] + (ext == ".c" ? Join(" -Tc", c_options) : Join(" -Tp", cpp_options)) + ' '
+ GetHostPathQ(fn) + " -Fo" + GetHostPathQ(objfile);
if(nopch.Find(fn) < 0)
c << pch_use;
if(slot < 0 || !Run(c, slot, GetHostPath(objfile), 1))
execerr = true;
}
if(execerr)
@ -409,6 +474,9 @@ bool MscBuilder::BuildPackage(const String& package, Vector<String>& linkfile, V
linkfile.Add(libfile);
}
linkoptions << ' ' << Gather(pkg.link, config.GetKeys());
if(pch_file.GetCount())
OnFinish(callback1(DeletePCHFile, pch_file));
int linktime = GetTickCount();
if(!HasFlag("MAIN")) {

View file

@ -82,7 +82,7 @@ bool OwcBuilder::BuildPackage(const String& package, Vector<String>& linkfile, V
}
if (HasFlag("BLITZ")) {
Blitz b = BlitzStep(sfile, soptions, obj, immfile, ".obj", optimize);
Blitz b = BlitzStep(sfile, soptions, obj, immfile, ".obj", optimize, Index<String>());
if (b.build) {
PutConsole("BLITZ:" + b.info);
int slot = AllocSlot();

View file

@ -99,7 +99,7 @@ Image ImageOver(const Image& back, const Image& over)
return MakeImage(h);
}
Image IdeFileImage(const String& filename, bool fast, bool include_path)
Image IdeFileImage(const String& filename, bool fast, bool include_path, bool pch)
{
Image img = CtrlImg::File();
IdeFileIcon0(false, filename, img);
@ -107,6 +107,8 @@ Image IdeFileImage(const String& filename, bool fast, bool include_path)
img = ImageOver(img, IdeCommonImg::Fast());
if(include_path)
img = ImageOver(img, IdeCommonImg::IncludePath());
if(pch)
img = ImageOver(img, IdeCommonImg::Precompile());
return img;
}

View file

@ -29,7 +29,7 @@ FileSel& OutputFs();
void ShellOpenFolder(const String& dir);
Image IdeFileImage(const String& filename, bool fast = false, bool include_path = false);
Image IdeFileImage(const String& filename, bool fast, bool include_path, bool pch);
bool FinishSave(String tmpfile, String outfile);
void DeactivationSave(bool b);

View file

@ -5,7 +5,7 @@ uses
CtrlLib;
file
Common.h,
Common.h options PCH,
ComDlg.cpp,
Module.cpp,
Util.cpp,

View file

@ -13,6 +13,7 @@ IMAGE_ID(PackageNew)
IMAGE_ID(FastPackage)
IMAGE_ID(FFff)
IMAGE_ID(Source)
IMAGE_ID(Precompile)
IMAGE_ID(Fast)
IMAGE_ID(ISource)
IMAGE_ID(json)
@ -29,98 +30,100 @@ IMAGE_ID(IncludePath)
IMAGE_ID(Qtf)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,154,93,104,29,69,20,199,247,213,183,162,68,9,10,62,68,65,182,162,72,236,83,36,141,130,248,144,88,17)
IMAGE_DATA(221,135,22,53,47,21,165,6,139,32,165,13,150,172,104,196,198,164,45,154,86,241,81,68,232,125,80,4,241,197,143,164)
IMAGE_DATA(36,144,20,154,154,54,91,155,216,214,40,182,213,24,219,98,98,165,138,233,223,153,189,119,238,157,157,157,51,59,187,119)
IMAGE_DATA(111,123,211,222,19,14,155,221,61,191,115,206,204,206,158,157,217,187,206,26,103,141,115,157,9,50,104,132,47,96,191,181)
IMAGE_DATA(82,252,224,224,32,196,255,34,142,124,156,111,77,188,156,135,238,127,197,119,106,62,41,127,149,145,143,251,190,95,117,252)
IMAGE_DATA(90,243,106,255,11,222,182,255,171,185,254,25,180,62,164,70,197,160,218,198,131,18,75,31,194,24,175,184,78,140,151,252)
IMAGE_DATA(100,226,45,218,66,242,26,95,13,62,129,215,169,45,79,170,13,159,32,38,62,133,214,143,212,112,102,224,57,230,78,240)
IMAGE_DATA(76,220,211,247,223,139,153,109,91,177,178,187,63,166,252,56,63,79,248,193,129,238,141,184,178,231,173,68,229,118,14,81)
IMAGE_DATA(217,83,196,143,241,132,13,116,190,41,222,86,27,249,231,159,63,21,87,151,135,134,175,118,252,70,252,24,148,226,178,75)
IMAGE_DATA(189,22,3,207,115,16,4,188,66,199,149,31,231,231,9,63,40,20,244,156,170,220,206,33,6,99,138,248,49,158,176,129)
IMAGE_DATA(206,55,197,219,106,35,255,252,243,167,226,234,242,208,240,213,142,223,136,31,131,222,56,197,224,38,239,17,220,26,124,130)
IMAGE_DATA(219,49,17,83,126,156,159,39,252,224,230,66,63,238,192,36,179,157,12,183,170,138,227,220,206,33,6,99,138,248,49,158)
IMAGE_DATA(176,129,206,55,197,219,106,35,255,252,243,167,226,234,242,208,240,213,142,223,136,31,131,214,166,24,160,47,119,183,57,9)
IMAGE_DATA(95,151,249,160,247,235,149,151,151,167,62,232,125,74,124,216,105,173,242,175,150,191,209,219,159,23,127,149,165,56,51,32)
IMAGE_DATA(47,140,174,250,82,21,89,203,107,94,180,36,189,124,17,162,86,70,93,124,83,117,100,203,128,130,182,170,74,241,77,57)
IMAGE_DATA(80,118,54,188,167,177,163,226,171,109,240,8,187,178,242,118,185,174,75,249,32,219,45,212,243,60,157,13,213,62,109,63)
IMAGE_DATA(107,108,180,124,19,99,251,216,214,119,194,103,78,121,235,26,174,175,196,135,236,176,203,166,214,108,73,87,240,138,91,190)
IMAGE_DATA(223,87,201,203,56,190,120,188,64,89,54,242,125,191,194,24,199,55,143,195,227,114,206,119,74,203,75,175,28,95,199,71)
IMAGE_DATA(196,34,190,81,18,218,159,40,174,185,255,163,146,125,153,32,42,92,214,74,151,149,79,126,82,116,118,118,162,171,171,43)
IMAGE_DATA(162,252,88,115,115,179,23,245,163,143,207,237,85,17,62,155,155,95,78,140,47,248,214,214,214,80,185,240,99,99,99,99)
IMAGE_DATA(37,31,60,143,108,241,249,150,171,13,47,199,151,133,159,55,245,176,46,126,22,94,196,87,243,184,86,241,229,107,81,203)
IMAGE_DATA(248,186,241,167,142,69,19,127,205,228,42,125,103,160,123,66,165,178,31,29,29,13,21,118,190,34,23,79,240,40,78,129)
IMAGE_DATA(202,79,93,126,204,204,87,94,50,9,182,188,143,202,239,237,214,60,172,120,237,211,188,204,66,127,94,230,69,95,9,21)
IMAGE_DATA(188,35,241,234,249,36,190,242,135,42,120,88,241,90,45,179,250,217,82,82,255,87,88,88,93,63,158,23,63,95,177,41)
IMAGE_DATA(178,34,223,232,185,56,31,87,168,237,181,189,23,168,62,201,95,50,20,131,196,27,49,73,239,196,71,104,193,103,228,133)
IMAGE_DATA(188,178,210,133,127,46,183,99,233,207,117,88,248,237,65,252,52,223,142,185,217,46,28,15,158,11,237,215,98,10,247,97)
IMAGE_DATA(142,228,255,190,244,0,254,90,110,195,133,243,235,113,246,204,163,56,125,234,9,198,62,139,233,239,122,66,251,117,184,132)
IMAGE_DATA(182,149,255,72,254,194,249,181,248,99,177,13,191,158,123,140,197,126,10,179,179,221,56,58,221,131,201,137,222,208,126,211)
IMAGE_DATA(50,240,252,69,114,169,128,115,103,239,193,153,95,30,198,252,252,147,152,155,235,198,204,76,15,14,31,222,129,241,241,55)
IMAGE_DATA(66,251,93,63,3,251,79,209,252,143,167,219,89,206,143,179,54,63,195,216,151,48,53,181,29,19,19,253,56,120,112,40)
IMAGE_DATA(180,255,60,88,196,151,193,73,146,63,249,67,39,78,124,191,9,51,199,94,196,145,169,109,56,116,232,77,140,143,237,197)
IMAGE_DATA(183,223,124,24,218,31,9,222,103,253,241,58,201,207,158,216,136,99,71,95,96,57,191,202,218,236,179,25,205,32,27,196)
IMAGE_DATA(31,48,254,227,208,126,49,88,143,229,224,110,109,33,178,81,76,223,2,76,181,16,69,111,94,210,139,177,167,114,104,51)
IMAGE_DATA(178,25,248,170,183,100,15,44,45,45,73,188,89,66,155,79,191,0,14,124,173,229,173,242,127,119,8,216,213,75,221,160)
IMAGE_DATA(24,126,111,55,246,238,121,39,212,161,161,1,12,12,188,141,157,59,95,195,142,29,219,139,252,214,135,128,205,45,42,103)
IMAGE_DATA(221,135,255,110,184,13,151,55,220,149,181,48,208,247,239,245,90,12,116,113,211,20,3,190,133,164,124,63,77,49,112,36)
IMAGE_DATA(78,104,154,98,160,139,159,166,24,232,226,167,41,6,50,223,40,6,53,47,6,169,250,80,83,12,210,20,132,92,139,129)
IMAGE_DATA(41,233,52,182,64,80,81,39,161,67,116,203,4,137,139,241,234,0,80,151,9,73,241,75,36,168,101,130,93,124,122,153)
IMAGE_DATA(160,240,201,125,213,88,38,52,150,9,217,110,126,123,169,241,59,3,72,219,212,29,32,221,56,78,202,119,6,90,94,46)
IMAGE_DATA(6,92,204,239,12,162,190,213,98,144,252,206,32,154,159,90,12,76,239,12,34,5,67,202,195,182,24,200,111,174,35,237)
IMAGE_DATA(72,46,6,177,28,99,172,249,102,38,115,79,83,12,138,125,163,180,203,190,24,16,109,183,46,6,113,54,93,49,136,141)
IMAGE_DATA(29,162,189,100,33,51,28,91,213,197,32,15,209,125,124,145,248,193,133,235,186,30,191,88,226,103,52,112,101,108,192,212)
IMAGE_DATA(179,232,80,206,46,44,44,20,57,215,141,76,217,133,150,6,131,54,103,30,87,102,11,60,15,166,11,77,77,234,12,69)
IMAGE_DATA(39,8,36,246,120,41,142,104,147,239,148,127,154,162,11,97,73,121,204,164,190,50,241,60,118,71,71,71,218,15,92,194)
IMAGE_DATA(126,230,252,239,29,29,17,31,225,181,96,146,144,191,231,73,57,8,31,97,65,151,250,197,192,71,114,160,212,112,253,194)
IMAGE_DATA(28,156,210,88,145,253,216,142,31,213,143,162,249,127,48,148,135,212,247,71,71,245,45,9,131,169,222,165,218,167,141,254)
IMAGE_DATA(9,156,146,95,237,241,51,112,101,62,99,220,218,201,42,40,6,185,204,12,10,65,0,167,175,15,206,150,45,112,42,31)
IMAGE_DATA(236,144,34,102,6,156,115,135,135,225,240,27,159,243,98,203,52,105,102,80,102,153,173,87,210,166,18,27,170,225,201,94)
IMAGE_DATA(24,25,41,179,126,241,3,161,84,51,3,17,195,43,198,73,43,149,54,178,216,89,102,6,97,63,243,25,193,190,125,17)
IMAGE_DATA(31,182,51,131,240,26,149,114,16,62,248,204,64,238,83,3,95,201,65,185,102,178,218,204,12,194,60,132,159,20,227,39)
IMAGE_DATA(230,103,21,204,12,254,7,139,53,205,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(1632, 16)
IMAGE_DATA(120,156,237,154,95,104,221,116,20,199,243,234,219,80,170,20,5,31,170,32,153,40,82,247,84,233,170,32,62,180,78,68)
IMAGE_DATA(243,176,161,246,101,162,96,113,8,50,214,226,104,68,43,174,182,219,208,49,197,71,17,97,247,65,17,196,23,255,117,180)
IMAGE_DATA(208,14,214,217,173,153,107,221,159,42,110,211,90,183,97,235,100,138,221,215,252,114,111,238,253,229,151,115,126,249,37,55)
IMAGE_DATA(89,187,245,158,114,72,147,156,207,57,231,247,39,39,249,229,198,90,103,173,179,110,48,65,6,141,240,37,236,55,86,142)
IMAGE_DATA(31,26,26,66,248,127,24,71,62,46,182,58,94,206,131,250,95,241,157,154,79,202,95,101,228,227,174,235,214,29,191,104)
IMAGE_DATA(94,237,255,144,55,237,255,122,198,63,131,174,14,41,168,24,212,219,120,112,98,232,35,52,198,43,182,21,227,37,63,153)
IMAGE_DATA(120,131,182,176,60,225,171,193,39,240,148,154,242,172,154,240,9,162,227,83,232,234,145,2,159,12,28,75,223,9,142,142)
IMAGE_DATA(123,250,254,123,49,189,125,27,150,119,15,196,84,28,23,231,25,63,56,208,189,25,87,247,188,149,168,194,206,98,42,123)
IMAGE_DATA(138,248,49,158,177,1,229,155,227,77,181,145,127,254,249,115,113,169,60,8,190,222,249,27,241,163,81,142,203,46,171,181)
IMAGE_DATA(24,56,142,5,207,19,21,58,174,226,184,56,207,248,65,169,68,115,170,10,59,139,153,140,41,226,199,120,198,6,148,111)
IMAGE_DATA(142,55,213,70,254,249,231,207,197,165,242,32,248,122,231,111,196,143,70,215,78,49,184,201,121,4,183,122,159,224,118,140)
IMAGE_DATA(199,84,28,23,231,25,63,184,185,52,128,59,48,225,219,78,4,91,85,195,227,194,206,98,38,99,138,248,49,158,177,1)
IMAGE_DATA(229,155,227,77,181,145,127,254,249,115,113,169,60,8,190,222,249,27,241,163,209,98,138,1,250,115,119,155,147,136,117,153)
IMAGE_DATA(11,126,127,181,242,242,242,212,5,191,207,137,11,51,45,42,255,122,249,181,222,254,188,248,107,44,229,39,3,118,96,168)
IMAGE_DATA(234,203,85,100,146,39,94,180,36,189,124,9,69,173,140,84,124,93,117,244,151,1,37,178,170,74,241,117,57,112,118,38)
IMAGE_DATA(188,67,216,113,241,213,54,56,140,93,85,69,187,108,219,230,124,176,237,14,213,113,28,202,134,107,31,217,207,132,13,201)
IMAGE_DATA(55,249,108,191,191,117,173,224,158,83,221,218,154,241,149,248,128,221,103,251,143,214,254,146,174,228,148,183,98,191,191,150)
IMAGE_DATA(151,118,126,137,120,158,178,108,20,251,110,141,209,206,111,17,71,196,21,156,107,85,150,151,78,53,62,197,71,196,32,190)
IMAGE_DATA(86,18,218,159,40,182,190,255,163,146,125,153,16,86,184,172,149,46,43,159,124,167,232,236,236,68,87,87,87,68,197,177)
IMAGE_DATA(230,230,102,39,234,135,142,47,236,85,9,125,54,55,191,156,24,63,228,91,91,91,3,21,34,142,141,142,142,86,124,136)
IMAGE_DATA(60,178,197,23,91,161,38,188,28,95,22,113,94,215,195,84,252,44,124,24,95,205,99,165,226,203,99,81,100,124,106,254)
IMAGE_DATA(169,115,81,199,175,152,92,163,239,12,168,59,84,42,251,145,145,145,64,97,230,43,50,120,33,143,242,35,80,245,174,43)
IMAGE_DATA(142,233,249,218,75,166,144,173,238,163,246,123,187,49,15,35,158,188,155,87,89,208,231,101,62,236,171,80,67,222,146,120)
IMAGE_DATA(245,124,18,95,251,67,29,60,140,120,82,171,44,253,180,148,212,255,53,22,70,227,39,242,18,231,107,54,101,54,204,55)
IMAGE_DATA(122,46,206,199,21,106,123,77,175,5,174,79,242,151,12,197,32,241,66,76,210,59,241,17,90,240,25,59,144,87,151,187)
IMAGE_DATA(240,207,149,118,44,254,185,1,243,191,61,136,159,230,218,49,59,211,133,227,222,115,129,253,122,76,226,62,204,178,252,223)
IMAGE_DATA(151,31,192,95,75,109,184,120,97,35,206,157,125,20,167,79,61,225,179,207,98,234,251,158,192,126,3,46,163,109,249,63)
IMAGE_DATA(150,191,120,97,61,254,88,104,195,175,231,31,243,99,63,133,153,153,110,28,157,234,193,196,120,95,96,191,101,9,120,254)
IMAGE_DATA(18,187,84,192,249,115,247,224,236,47,15,99,110,238,73,204,206,118,99,122,186,7,135,15,247,98,108,236,141,192,126,215)
IMAGE_DATA(207,192,254,83,60,127,230,116,187,159,243,227,126,155,159,241,217,151,48,57,185,3,227,227,3,56,120,112,56,176,255,220)
IMAGE_DATA(91,192,151,222,73,150,63,249,99,39,78,252,176,5,211,199,94,196,145,201,237,56,116,232,77,140,141,238,197,183,223,124)
IMAGE_DATA(24,216,31,241,222,247,251,227,117,150,159,57,177,25,199,142,190,224,231,252,170,223,102,215,127,162,25,242,39,241,7,62)
IMAGE_DATA(255,113,96,191,224,109,196,146,119,55,89,136,76,20,83,183,0,147,45,76,209,155,147,244,82,236,174,28,216,124,183,21)
IMAGE_DATA(248,170,175,98,15,44,46,46,74,188,94,2,155,79,191,0,14,124,77,242,70,249,191,59,12,236,234,227,46,80,236,123)
IMAGE_DATA(111,55,246,238,121,39,208,225,225,65,12,14,190,141,157,59,95,67,111,239,142,50,191,237,33,96,107,139,202,25,247,225)
IMAGE_DATA(191,155,110,195,149,77,119,101,45,12,252,245,123,163,22,3,42,110,154,98,32,182,144,84,236,167,41,6,150,196,133,154)
IMAGE_DATA(166,24,80,241,211,20,3,42,126,154,98,32,243,141,98,80,120,49,72,213,135,68,49,72,83,16,114,45,6,186,164,211)
IMAGE_DATA(216,2,94,77,173,132,14,161,150,9,18,23,227,213,9,160,46,19,146,226,87,72,112,203,4,179,248,252,50,65,225,147)
IMAGE_DATA(251,170,177,76,104,44,19,178,93,252,230,82,240,59,3,72,219,212,29,32,93,56,86,202,119,6,36,47,23,3,33,250)
IMAGE_DATA(119,6,81,223,106,49,72,126,103,16,205,79,45,6,186,119,6,145,130,33,229,97,90,12,228,55,215,145,118,36,23,131)
IMAGE_DATA(88,142,49,86,127,49,179,185,167,41,6,229,190,81,218,101,94,12,152,182,27,23,131,56,155,174,24,196,230,14,211,94)
IMAGE_DATA(182,144,105,142,93,215,197,32,15,161,62,190,72,252,224,194,182,109,71,12,86,248,51,26,132,250,172,231,171,99,208,161)
IMAGE_DATA(130,157,159,159,47,115,182,29,121,100,15,181,50,25,200,156,69,92,153,45,137,60,124,157,111,106,82,159,80,40,129,39)
IMAGE_DATA(177,199,43,113,194,54,185,86,245,167,41,190,16,86,84,196,76,234,43,29,47,98,119,116,116,164,253,192,37,232,103,193)
IMAGE_DATA(255,222,209,17,241,17,140,133,47,9,249,59,142,148,67,232,35,40,232,82,191,104,248,72,14,156,106,198,47,200,193,170)
IMAGE_DATA(204,21,217,143,233,252,81,253,40,154,255,7,67,121,72,142,203,132,244,188,116,167,200,224,163,198,214,124,172,76,252,122)
IMAGE_DATA(218,159,189,202,23,123,151,104,200,218,147,213,253,5,98,67,10,148,122,31,61,233,199,241,148,252,245,30,63,3,87,229)
IMAGE_DATA(51,198,45,76,254,7,251,86,63,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(1536, 16)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,154,61,104,28,71,20,199,167,76,145,194,149,136,131,93,73,133,81,149,210,164,217,246,192,112,56,196,131,81)
IMAGE_DATA(159,70,141,42,131,221,233,58,87,54,28,184,17,24,66,10,99,178,152,144,20,106,133,192,40,36,173,179,22,72,141,82)
IMAGE_DATA(132,128,2,33,216,238,108,172,241,254,119,245,230,222,204,206,231,238,29,186,24,63,243,152,207,223,123,51,111,102,103,71)
IMAGE_DATA(222,19,151,196,37,241,145,138,172,85,69,84,250,56,41,165,170,170,74,249,4,109,232,99,217,105,88,31,183,93,183,65)
IMAGE_DATA(61,118,26,118,111,111,207,235,211,197,147,13,154,83,72,124,60,100,81,60,103,82,120,59,118,143,214,215,13,30,101,91)
IMAGE_DATA(216,252,59,241,175,202,178,97,38,231,44,202,1,214,216,55,177,245,79,217,71,61,246,223,197,201,71,124,24,20,34,190)
IMAGE_DATA(24,133,143,43,138,66,157,156,156,120,55,3,218,208,199,178,83,196,184,128,157,198,47,177,66,76,140,180,40,190,87,251)
IMAGE_DATA(251,127,54,41,175,39,27,52,39,18,87,127,82,155,111,203,38,79,44,82,215,120,98,188,111,188,49,222,55,127,87,10)
IMAGE_DATA(109,253,236,235,117,200,141,63,88,22,255,161,235,63,143,253,119,113,146,113,24,208,73,215,231,52,147,242,150,80,229,143)
IMAGE_DATA(245,27,247,86,182,13,205,170,179,108,27,51,246,125,203,35,77,180,97,248,37,150,52,98,195,244,251,254,252,65,97,92)
IMAGE_DATA(32,30,206,49,55,124,157,31,143,205,54,135,13,115,204,103,93,255,46,27,162,93,91,239,188,137,135,86,127,180,62,3)
IMAGE_DATA(113,208,54,200,23,245,231,124,74,12,127,249,217,28,47,198,65,245,217,107,152,182,118,65,27,67,247,112,15,86,219,16)
IMAGE_DATA(139,190,77,44,232,102,16,59,17,99,147,10,158,230,9,54,162,124,89,95,23,3,54,82,253,243,135,40,153,119,216,114)
IMAGE_DATA(242,82,150,245,56,171,38,165,178,16,219,186,28,227,209,183,125,131,110,55,229,170,58,109,202,72,251,248,111,251,59,223)
IMAGE_DATA(232,11,153,63,124,61,123,118,234,189,77,164,240,183,111,255,219,155,231,113,55,227,57,73,226,135,204,63,83,231,35,159)
IMAGE_DATA(14,131,229,61,12,202,170,84,178,148,193,124,136,71,159,234,180,10,230,67,188,152,204,230,49,148,71,127,26,51,207,167)
IMAGE_DATA(142,191,15,207,227,132,20,101,59,191,168,245,203,212,229,144,11,58,12,98,87,157,88,240,123,31,38,34,126,16,164,250)
IMAGE_DATA(15,45,228,144,141,164,121,215,155,140,215,199,120,188,209,248,45,0,130,242,236,77,23,230,205,190,147,142,205,148,249,135)
IMAGE_DATA(254,175,32,133,231,183,147,238,45,37,206,131,25,143,159,26,105,14,31,146,16,159,161,203,35,139,56,12,54,54,54,84)
IMAGE_DATA(76,87,86,86,138,16,31,146,152,141,20,254,240,240,208,107,35,213,63,105,46,111,219,242,241,15,214,69,80,83,248,95)
IMAGE_DATA(61,154,202,15,241,63,116,254,87,182,69,80,83,248,235,165,91,83,249,33,254,135,204,63,71,109,190,183,224,48,192,55)
IMAGE_DATA(155,37,150,148,79,52,126,86,214,237,85,173,190,127,97,222,100,243,253,155,190,100,210,173,200,207,151,217,54,186,115,207)
IMAGE_DATA(179,209,198,175,180,108,84,89,111,53,183,141,188,183,98,107,35,103,221,92,154,62,126,255,126,169,146,226,55,244,102,124)
IMAGE_DATA(49,194,15,3,181,242,185,130,242,246,127,70,74,65,145,151,223,124,38,213,155,203,74,189,249,210,14,100,243,192,198,248)
IMAGE_DATA(150,189,172,96,199,102,69,55,88,77,254,241,87,165,26,127,209,126,135,135,223,14,123,243,107,37,126,184,211,225,240,29)
IMAGE_DATA(152,190,5,179,63,11,248,66,204,216,87,63,117,22,140,190,49,11,125,101,183,254,188,0,251,251,180,101,25,79,125,215)
IMAGE_DATA(207,191,135,243,58,74,53,11,69,254,117,215,191,199,111,171,228,247,218,213,182,204,248,163,163,35,181,187,187,171,214,214)
IMAGE_DATA(214,116,221,104,52,106,234,208,150,194,31,31,31,59,85,243,129,241,163,207,95,127,79,213,127,175,71,234,109,253,240,64)
IMAGE_DATA(145,71,157,230,3,241,131,31,244,255,182,126,224,222,169,86,145,71,29,218,140,56,144,111,139,127,123,206,145,127,202,107)
IMAGE_DATA(30,12,105,192,63,213,121,253,59,20,113,166,249,211,248,105,254,104,179,246,160,45,146,214,107,58,157,234,184,35,143,186)
IMAGE_DATA(8,219,177,99,105,156,179,110,6,209,201,138,200,137,250,252,133,84,55,238,41,157,42,108,106,166,49,30,204,141,187,170)
IMAGE_DATA(77,239,117,175,85,139,246,111,245,203,141,133,49,78,248,191,255,164,52,198,132,50,205,205,201,51,255,232,251,219,203,113)
IMAGE_DATA(203,220,85,102,217,195,115,133,191,205,135,149,246,103,143,39,22,11,107,156,217,177,160,249,146,173,231,47,252,215,101,23)
IMAGE_DATA(79,99,157,197,210,111,35,22,11,154,203,230,195,100,222,25,139,205,239,170,206,158,74,221,215,247,111,214,243,185,38,123)
IMAGE_DATA(243,62,54,133,79,210,37,253,209,209,176,223,52,72,188,77,241,43,194,108,27,154,173,35,220,199,134,102,73,81,22,225)
IMAGE_DATA(133,154,167,127,195,70,15,86,219,16,253,227,255,73,254,175,50,231,195,32,231,45,226,212,190,50,111,126,103,103,71,215)
IMAGE_DATA(173,174,174,158,249,56,180,217,227,7,203,153,173,173,173,179,250,154,215,148,15,14,14,154,50,229,169,158,243,46,127,168)
IMAGE_DATA(67,127,234,7,142,242,124,172,33,30,41,56,216,161,113,81,158,243,52,38,30,11,170,227,109,220,143,237,159,236,82,27)
IMAGE_DATA(149,83,120,94,230,44,213,211,28,184,45,215,250,99,220,20,107,91,208,6,13,241,52,70,222,143,132,199,46,196,167,202)
IMAGE_DATA(60,158,157,129,207,174,248,0,240,40,52,215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(1280, 12)
IMAGE_DATA(120,156,237,154,61,104,28,71,20,128,167,76,145,194,77,68,28,146,74,42,204,85,41,77,154,85,121,96,56,28,226,193)
IMAGE_DATA(168,79,35,23,170,12,118,119,219,185,138,225,64,46,4,129,144,34,132,44,38,36,133,90,89,96,20,146,214,217,8,164)
IMAGE_DATA(70,41,66,224,2,33,196,238,28,172,201,188,157,123,115,111,102,231,119,247,142,59,27,63,241,216,153,217,249,222,123,243)
IMAGE_DATA(102,118,118,78,119,236,10,187,194,196,152,173,179,112,169,194,82,30,131,6,131,1,47,203,82,112,206,69,85,85,162,170)
IMAGE_DATA(107,193,198,99,193,238,220,17,242,38,218,241,10,176,211,233,180,225,6,251,251,66,54,40,30,175,82,161,143,47,230,198)
IMAGE_DATA(47,178,178,47,159,233,123,51,182,81,127,12,162,122,242,68,179,165,140,159,142,169,148,247,203,121,46,156,60,250,224,202)
IMAGE_DATA(79,174,204,199,40,125,111,111,111,71,243,221,226,33,207,50,214,237,71,143,12,27,48,23,32,145,248,121,51,71,179,24)
IMAGE_DATA(208,198,241,241,177,145,211,0,63,143,193,154,51,170,129,249,83,49,128,13,136,3,237,100,172,159,150,157,204,245,187,18)
IMAGE_DATA(129,205,224,13,21,215,36,164,76,74,195,193,195,92,203,133,231,19,184,7,125,44,59,13,235,227,228,158,219,168,199,78)
IMAGE_DATA(195,30,29,29,121,125,186,120,180,129,99,10,137,143,7,89,22,79,153,20,222,206,221,190,124,240,40,15,117,91,200,248)
IMAGE_DATA(91,249,175,229,38,2,76,57,99,235,217,102,228,97,141,117,19,155,255,148,117,212,97,253,173,78,222,224,205,160,96,241)
IMAGE_DATA(201,40,124,92,81,20,226,226,226,194,187,24,224,30,244,177,236,20,49,46,96,167,241,139,172,60,155,24,215,162,248,74)
IMAGE_DATA(190,25,127,111,174,180,29,109,224,152,80,92,253,81,109,94,213,77,30,89,184,186,226,137,241,190,120,99,188,111,252,174)
IMAGE_DATA(43,168,242,115,172,231,33,55,255,192,146,252,247,157,255,69,172,191,213,73,198,102,128,59,93,151,221,140,243,91,242,232)
IMAGE_DATA(251,157,124,227,222,202,182,161,89,113,153,109,99,206,190,82,60,92,19,109,24,126,145,69,141,216,48,253,190,154,61,40)
IMAGE_DATA(132,11,228,195,25,115,195,203,242,104,100,222,115,216,48,99,190,108,251,119,217,96,243,99,175,115,220,200,131,214,191,42)
IMAGE_DATA(159,129,60,104,27,232,11,251,83,62,37,135,63,254,96,198,11,113,96,123,246,28,166,205,93,208,70,223,53,220,129,213)
IMAGE_DATA(54,216,178,79,19,75,58,25,196,118,196,216,160,130,187,121,130,141,40,95,169,207,225,62,27,169,254,233,67,148,204,59)
IMAGE_DATA(108,57,121,206,43,25,103,221,92,177,206,216,88,215,99,60,244,85,111,208,113,83,175,235,105,83,135,107,23,255,170,191)
IMAGE_DATA(243,141,190,148,241,131,175,199,143,167,222,211,68,10,127,251,246,223,157,121,154,119,51,159,101,18,223,103,252,153,186,24)
IMAGE_DATA(121,187,25,172,239,102,80,213,149,224,21,15,150,67,60,244,169,167,117,176,28,226,89,57,31,71,95,30,250,99,204,180)
IMAGE_DATA(156,26,127,23,158,230,9,174,80,183,203,203,154,191,76,93,15,89,209,102,16,59,234,196,146,223,121,51,97,241,141,32)
IMAGE_DATA(213,127,104,34,251,44,36,205,187,222,100,180,61,198,195,27,141,158,2,64,160,62,127,211,133,121,179,111,217,178,153,50)
IMAGE_DATA(254,208,255,10,82,120,122,58,105,159,82,226,60,48,163,209,183,198,53,135,15,73,136,207,208,245,145,101,108,6,59,59)
IMAGE_DATA(59,34,166,27,27,27,69,136,15,73,204,70,10,127,122,122,234,181,145,234,31,53,151,183,109,249,248,47,6,44,168,41)
IMAGE_DATA(252,79,30,77,229,251,248,239,59,254,15,199,44,168,41,252,245,202,173,169,124,31,255,125,198,159,163,54,223,89,94,211)
IMAGE_DATA(223,25,164,238,174,92,254,9,86,75,245,253,133,121,147,205,247,111,250,226,73,167,34,63,95,101,219,104,143,61,207,134)
IMAGE_DATA(202,95,101,217,168,179,222,106,110,27,121,111,69,101,35,103,222,92,154,30,191,127,189,212,73,249,235,123,50,94,141,208)
IMAGE_DATA(205,64,108,188,43,64,233,253,191,134,66,128,66,153,127,250,14,23,47,174,10,241,226,3,59,145,205,3,27,227,21,123)
IMAGE_DATA(85,128,29,155,101,237,100,53,229,47,63,174,196,232,125,245,61,60,248,109,177,55,63,17,236,235,187,45,14,190,7,198)
IMAGE_DATA(239,130,201,199,2,58,17,115,246,223,239,91,19,134,223,49,51,125,100,183,62,94,0,251,203,68,177,132,199,190,131,217)
IMAGE_DATA(247,225,180,13,175,154,5,133,242,243,182,127,143,95,165,232,247,218,71,170,78,248,179,179,51,113,120,120,40,182,182,182)
IMAGE_DATA(116,219,112,56,108,218,224,94,10,127,126,126,238,84,205,7,226,135,62,127,252,57,17,255,60,31,138,151,242,225,1,133)
IMAGE_DATA(50,180,105,62,144,63,240,3,253,63,147,15,220,127,66,41,148,161,13,238,25,121,64,223,22,255,114,198,161,127,44,107)
IMAGE_DATA(30,24,212,128,127,108,243,250,119,40,228,25,199,143,241,227,248,225,158,181,6,109,225,56,95,147,201,68,231,29,202,208)
IMAGE_DATA(22,97,91,118,44,141,115,214,201,32,58,88,22,217,81,159,62,227,226,198,125,161,175,2,22,53,209,24,15,204,141,123)
IMAGE_DATA(66,93,239,183,143,85,203,246,111,245,203,205,133,17,39,248,127,240,77,101,196,4,117,28,155,147,39,254,161,239,207,191)
IMAGE_DATA(141,20,115,79,152,117,15,79,21,252,237,62,172,181,63,59,158,88,46,172,56,179,115,129,227,69,91,79,159,249,143,203)
IMAGE_DATA(46,30,99,157,231,210,111,35,150,11,28,203,238,195,100,222,153,139,221,207,235,214,154,74,93,215,15,110,202,241,92,227)
IMAGE_DATA(157,121,31,155,194,39,233,154,254,232,168,223,111,26,56,188,77,225,87,132,217,54,52,43,51,220,197,134,102,81,161,206)
IMAGE_DATA(194,19,181,72,255,134,141,14,172,182,193,186,231,255,173,188,174,178,224,205,32,231,45,226,212,174,178,104,254,224,224,64)
IMAGE_DATA(183,109,110,110,94,250,56,184,103,199,15,44,101,246,246,246,46,229,49,175,169,159,156,156,52,117,44,99,59,229,93,254)
IMAGE_DATA(160,13,250,99,63,224,176,76,99,13,241,112,5,14,236,96,92,88,166,60,198,68,115,129,109,244,30,245,99,251,71,187)
IMAGE_DATA(120,15,235,41,60,173,83,22,219,113,12,212,150,107,254,33,110,204,181,45,112,15,52,196,99,140,180,31,10,205,93,136)
IMAGE_DATA(79,149,69,60,59,61,159,93,246,63,119,138,237,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(1440, 13)

View file

@ -21,6 +21,7 @@ Console::Console() {
input.SetFrame(Single<TopTextFrame>());
AddFrame(input);
input.Hide();
serial = 0;
}
void Console::LeftDouble(Point p, dword) {
@ -249,12 +250,20 @@ bool Console::Run(One<AProcess> pick_ process, const char *cmdline, Stream *out,
pslot.key = key;
pslot.group = current_group;
pslot.last_msecs = msecs();
pslot.serial = ++serial;
groups.GetAdd(pslot.group).count += blitz_count;
if(processes.GetCount() == 1)
Wait(slot);
return true;
}
void Console::OnFinish(Callback cb)
{
Finisher& f = finisher.Add();
f.serial = serial;
f.cb = cb;
}
void Console::FlushConsole()
{
if(console_lock < 0) {
@ -334,6 +343,7 @@ void Console::Kill(int islot)
if(slot.process->IsRunning())
slot.process->Kill();
slot.exitcode = slot.process->GetExitCode();
slot.serial = INT_MAX;
if(slot.exitcode != 0 && !IsNull(slot.key))
error_keys.Add(slot.key);
slot.process.Clear();
@ -345,6 +355,20 @@ void Console::Kill(int islot)
FlushConsole();
}
CheckEndGroup();
int minserial = INT_MAX;
for(int i = 0; i < processes.GetCount(); i++)
minserial = min(processes[i].serial, minserial);
int i = 0;
while(i < finisher.GetCount()) {
const Finisher& f = finisher[i];
if(f.serial > minserial)
i++;
else {
f.cb();
finisher.Remove(i);
}
}
}
void Console::SetSlots(int s)

View file

@ -193,6 +193,11 @@ bool IdeConsoleWait(int slot)
return the_ide && the_ide->IdeConsoleWait(slot);
}
void IdeConsoleOnFinish(Callback cb)
{
if(the_ide) the_ide->IdeConsoleOnFinish(cb);
}
void IdeGotoCodeRef(String s)
{
if(the_ide) the_ide->IdeGotoCodeRef(s);

View file

@ -56,6 +56,7 @@ public:
virtual void IdeConsoleEndGroup() = 0;
virtual bool IdeConsoleWait() = 0;
virtual bool IdeConsoleWait(int slot) = 0;
virtual void IdeConsoleOnFinish(Callback cb) = 0;
virtual bool IdeIsDebug() const = 0;
virtual void IdeEndDebug() = 0;
@ -111,6 +112,7 @@ void IdeConsoleBeginGroup(String group);
void IdeConsoleEndGroup();
bool IdeConsoleWait();
bool IdeConsoleWait(int slot);
void IdeConsoleOnFinish(Callback cb);
void IdeGotoCodeRef(String s);
String GetDefaultMethod();
@ -267,6 +269,7 @@ enum { CHARSET_UTF8_BOM = 250 }; // Same as TextCtrl::CHARSET_UTF8_BOM
class Package {
void Reset();
void Option(bool& option, const char *name);
public:
struct File : public String {
@ -279,10 +282,11 @@ public:
int font;
String highlight;
int optimize_speed;
bool pch, nopch, noblitz;
void operator=(const String& s) { String::operator=(s); readonly = separator = false; }
void Init() { readonly = separator = false; tabsize = Null; charset = 0; font = 0;
optimize_speed = false; }
optimize_speed = false; pch = nopch = noblitz = false; }
File() { Init(); }
File(const String& s) : String(s) { Init(); }

View file

@ -5,7 +5,7 @@ uses
plugin/bz2;
file
Core.h,
Core.h options PCH,
Core.cpp,
Hdepend.cpp optimize_speed,
Package.cpp,

View file

@ -143,6 +143,11 @@ bool LocalHost::Wait(int slot)
return IdeConsoleWait(slot);
}
void LocalHost::OnFinish(Callback cb)
{
IdeConsoleOnFinish(cb);
}
One<AProcess> LocalHost::StartProcess(const char *cmdline)
{
try {

View file

@ -25,6 +25,7 @@ struct Host {
virtual bool Run(const char *cmdline, Stream& out, int slot, String key, int blitz_count) = 0;
virtual bool Wait() = 0;
virtual bool Wait(int slot) = 0;
virtual void OnFinish(Callback cb) = 0;
virtual One<AProcess> StartProcess(const char *cmdline) = 0;
virtual void Launch(const char *cmdline, bool console = false) = 0;
virtual void AddFlags(Index<String>& cfg) = 0;
@ -58,6 +59,7 @@ struct LocalHost : Host {
virtual bool Run(const char *cmdline, Stream& out, int slot, String key, int blitz_count);
virtual bool Wait();
virtual bool Wait(int slot);
virtual void OnFinish(Callback cb);
virtual One<AProcess> StartProcess(const char *cmdline);
virtual void Launch(const char *cmdline, bool console);
virtual void AddFlags(Index<String>& cfg);

View file

@ -190,6 +190,17 @@ byte CharsetByNameX(const String& s)
return s == "UTF-8-BOM" ? CHARSET_UTF8_BOM : CharsetByName(s);
}
void Package::Option(bool& option, const char *name)
{
File& f = file.Top();
for(int i = 0; i < f.option.GetCount(); i++) // Ugly BW compatibility hack
if(f.option[i].text == name) {
f.option.Remove(i);
option = true;
break;
}
}
bool Package::Load(const char *path)
{
for(;;) {
@ -264,38 +275,51 @@ bool Package::Load(const char *path)
else
if(p.Id("file")) {
do {
File f(ReadValue(p));
file.Add() = pick(f);
File fv(ReadValue(p));
File& f = file.Add();
f = pick(fv);
while(!p.IsChar(',') && !p.IsChar(';')) {
if(!LoadFOpt(p, "options", file.Top().option) &&
!LoadFOpt(p, "depends", file.Top().depends)) {
if(!LoadFOpt(p, "options", f.option) &&
!LoadFOpt(p, "depends", f.depends)) {
if(p.Id("optimize_speed"))
file.Top().optimize_speed = true;
f.optimize_speed = true;
else
if(p.Id("optimize_size"))
file.Top().optimize_speed = false;
f.optimize_speed = false;
else
if(p.Id("pch"))
f.pch = true;
else
if(p.Id("nopch"))
f.nopch = true;
else
if(p.Id("noblitz"))
f.noblitz = true;
else
if(p.Id("readonly"))
file.Top().readonly = true;
f.readonly = true;
else
if(p.Id("separator"))
file.Top().separator = true;
f.separator = true;
else
if(p.Id("charset"))
file.Top().charset = CharsetByNameX(p.ReadString());
f.charset = CharsetByNameX(p.ReadString());
else
if(p.Id("tabsize"))
file.Top().tabsize = minmax(p.ReadInt(), 1, 20);
f.tabsize = minmax(p.ReadInt(), 1, 20);
else
if(p.Id("font"))
file.Top().font = minmax(p.ReadInt(), 0, 3);
f.font = minmax(p.ReadInt(), 0, 3);
else
if(p.Id("highlight"))
file.Top().highlight = p.ReadId();
f.highlight = p.ReadId();
else
p.ThrowError("invalid keyword");
p.SkipTerm();
}
}
Option(f.pch, "PCH");
Option(f.nopch, "NOPCH");
Option(f.noblitz, "NOBLITZ");
}
while(p.Char(','));
}
@ -319,7 +343,7 @@ bool Package::Load(const char *path)
if(p.Id("custom"))
custom.Add().Load(p);
else
p.ThrowError("invalid keyword");
p.SkipTerm();
}
p.Char(';');
}
@ -424,6 +448,13 @@ bool Package::Save(const char *path) const {
out << " font " << f.font;
if(f.optimize_speed)
out << " optimize_speed";
if(f.pch)
// out << " pch"; // good solution, but not backward compatible
out << " options PCH";
if(f.nopch)
out << " options NOPCH";
if(f.noblitz)
out << " options NOBLITZ";
if(f.charset > 0 && f.charset < CharsetCount() || f.charset == CHARSET_UTF8)
out << " charset " << AsCString(CharsetName(f.charset));
else

View file

@ -6,7 +6,7 @@ uses
HexView;
file
Debuggers.h,
Debuggers.h options PCH,
Debuggers.iml,
Gdb.lay,
Terminal.cpp,

View file

@ -8,7 +8,7 @@ uses
CodeEditor;
file
LayDes.h,
LayDes.h options PCH,
laydes.key,
sdiff.cpp,
laylib.cpp,

View file

@ -34,7 +34,7 @@ struct DependsDisplay : Display {
WString txt = q;
w.DrawRect(r, paper);
w.Clipoff(r.left + 10, r.top, r.Width() - 20, r.Height());
Image img = IdeFileImage(q);
Image img = IdeFileImage(q, false, false, false);
Size isz = img.GetSize();
w.DrawImage(0, (r.Height() - isz.cy) / 2, img);
int tcy = GetTLTextHeight(txt, StdFont());
@ -93,8 +93,13 @@ void PackageEditor::SaveOptions() {
actual.accepts = Split(accepts.GetText().ToString(), ' ');
actual.optimize_speed = optimize_speed;
actual.noblitz = noblitz;
if(IsActiveFile())
ActiveFile().optimize_speed = optimize_speed_file;
if(IsActiveFile()) {
Package::File& f = ActiveFile();
f.optimize_speed = optimize_speed_file;
f.pch = pch_file;
f.nopch = nopch_file;
f.noblitz = noblitz_file;
}
SavePackage();
}
}
@ -130,8 +135,12 @@ void PackageEditor::FileEmpty()
fileoption.Disable();
optimize_speed_file = false;
optimize_speed_file.Disable();
include_path_file = false;
include_path_file.Disable();
pch_file = false;
pch_file.Disable();
nopch_file = false;
nopch_file.Disable();
noblitz_file = false;
noblitz_file.Disable();
includeable_file = false;
includeable_file.Disable();
}
@ -362,9 +371,17 @@ void PackageEditor::FileCursor()
Package::File& f = ActiveFile();
if(!f.separator) {
String p = GetActiveFilePath();
bool tpp = GetFileExt(p) == ".tpp" && IsFolder(p);
String ext = ToLower(GetFileExt(p));
bool tpp = ext == ".tpp" && IsFolder(p);
bool hdr = findarg(ext, ".h", ".hpp", ".hh", ".hxx") >= 0 && !tpp;
optimize_speed_file.Enable(!tpp);
optimize_speed_file <<= actual.file[actualfileindex].optimize_speed;
optimize_speed_file <<= f.optimize_speed;
pch_file.Enable(hdr);
pch_file <<= f.pch;
nopch_file.Enable(!hdr);
nopch_file <<= f.nopch;
noblitz_file.Enable(!tpp);
noblitz_file <<= f.noblitz;
includeable_file.Enable(tpp);
includeable_file <<= FileExists(AppendFileName(p, "all.i"));
fileoption.Enable();
@ -577,7 +594,9 @@ PackageEditor::PackageEditor()
noblitz <<=
optimize_speed <<=
optimize_speed_file <<=
include_path_file <<= THISBACK(SaveOptionsLoad);
pch_file <<=
nopch_file <<=
noblitz_file <<= THISBACK(SaveOptionsLoad);
includeable_file <<= THISBACK(ToggleIncludeable);
@ -603,6 +622,8 @@ PackageEditor::PackageEditor()
ink <<=
bold <<=
italic <<= THISBACK(SaveOptionsLoad);
FileCursor();
}
void EditPackages(const char *main, const char *startwith, String& cfg) {

View file

@ -257,7 +257,7 @@ void WorkspaceWork::LoadActualPackage()
}
}
}
Image m = IdeFileImage(f, f.optimize_speed);
Image m = IdeFileImage(f, f.optimize_speed, false, f.pch);
if(GetFileExt(p) == ".tpp" && IsFolder(p)) {
if(FileExists(AppendFileName(p, "all.i")))
m = TopicImg::IGroup();

View file

@ -55,7 +55,7 @@ public:
protected:
struct Slot {
Slot() : outfile(NULL), quiet(true), exitcode(Null) {}
Slot() : outfile(NULL), quiet(true), exitcode(Null) { serial = INT_MAX; }
One<AProcess> process;
String cmdline;
@ -66,6 +66,7 @@ protected:
bool quiet;
int exitcode;
int last_msecs;
int serial;
};
struct Group {
@ -77,9 +78,15 @@ protected:
int msecs;
int raw_msecs;
};
struct Finisher {
int serial;
Callback cb;
};
Array<Slot> processes;
ArrayMap<String, Group> groups;
Array<Finisher> finisher;
Vector<String> error_keys;
String current_group;
String spooled_output;
@ -87,6 +94,7 @@ protected:
bool wrap_text;
FrameBottom<EditString> input;
String line;
int serial;
void CheckEndGroup();
void FlushConsole();
@ -121,6 +129,8 @@ public:
Vector<String> PickErrors() { Vector<String> e = pick(error_keys); error_keys.Clear(); return pick(e); }
void Wait(int slot);
bool Wait();
void OnFinish(Callback cb);
void WrapText(bool w) { wrap_text = w; }
@ -573,6 +583,7 @@ public:
virtual void IdeConsoleEndGroup();
virtual bool IdeConsoleWait();
virtual bool IdeConsoleWait(int slot);
virtual void IdeConsoleOnFinish(Callback cb);
virtual bool IdeIsDebug() const;
virtual void IdeEndDebug();

View file

@ -106,28 +106,30 @@ LAYOUT(FindFileLayout, 450, 280)
ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 80).BottomPosZ(4, 22))
END_LAYOUT
LAYOUT(UppLayout, 800, 576)
LAYOUT(UppLayout, 848, 576)
UNTYPED(package, LeftPosZ(4, 240).VSizePosZ(4, 196))
ITEM(Label, dv___1, SetLabel(t_("Description")).LeftPosZ(248, 64).TopPosZ(4, 19))
ITEM(DataPusher, description, HSizePosZ(308, 212).TopPosZ(4, 20))
ITEM(Option, optimize_speed, SetLabel(t_("Optimize for speed")).LeftPosZ(248, 120).TopPosZ(28, 20))
ITEM(Label, dv___4, SetLabel(t_("&Accepts")).HSizePosZ(368, 388).TopPosZ(28, 19))
ITEM(EditString, accepts, HSizePosZ(412, 272).TopPosZ(28, 19))
ITEM(Label, dv___6, SetLabel(t_("Encoding")).RightPosZ(208, 48).TopPosZ(28, 19))
ITEM(DropList, charset, RightPosZ(92, 112).TopPosZ(28, 19))
ITEM(Option, noblitz, SetLabel(t_("No BLITZ")).RightPosZ(6, 76).TopPosZ(28, 20))
ITEM(ArrayCtrl, option, HSizePosZ(248, 4).VSizePosZ(52, 128))
UNTYPED(filelist, LeftPosZ(4, 240).BottomPosZ(4, 188))
ITEM(ArrayCtrl, fileoption, HSizePosZ(248, 4).BottomPosZ(32, 92))
ITEM(Option, optimize_speed_file, SetLabel(t_("Optimize the file for speed")).LeftPosZ(248, 152).BottomPosZ(9, 19))
ITEM(Option, include_path_file, SetLabel(t_("Add to include path")).RightPosZ(268, 124).BottomPosZ(9, 19))
ITEM(Option, includeable_file, SetLabel(t_("Includeable group")).RightPosZ(140, 120).BottomPosZ(9, 19))
ITEM(Button, ok, SetLabel(t_("OK")).RightPosZ(72, 64).BottomPosZ(6, 22))
ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 64).BottomPosZ(6, 22))
ITEM(Label, dv___17, SetLabel(t_("Highlight")).RightPosZ(156, 48).TopPosZ(4, 19))
ITEM(ColorPusher, ink, RightPosZ(104, 52).TopPosZ(4, 20))
ITEM(Option, bold, SetLabel(t_("Bold")).RightPosZ(56, 44).TopPosZ(4, 20))
ITEM(Option, italic, SetLabel(t_("Italic")).RightPosZ(8, 44).TopPosZ(4, 20))
ITEM(Label, dv___2, SetLabel(t_("Description")).LeftPosZ(248, 64).TopPosZ(4, 19))
ITEM(DataPusher, description, HSizePosZ(308, 212).TopPosZ(4, 20))
ITEM(Label, dv___4, SetLabel(t_("Highlight")).RightPosZ(160, 48).TopPosZ(4, 19))
ITEM(ColorPusher, ink, RightPosZ(108, 52).TopPosZ(4, 20))
ITEM(Option, bold, SetLabel(t_("Bold")).RightPosZ(60, 44).TopPosZ(4, 20))
ITEM(Option, italic, SetLabel(t_("Italic")).RightPosZ(12, 44).TopPosZ(4, 20))
ITEM(Option, optimize_speed, SetLabel(t_("Optimize for speed")).LeftPosZ(248, 120).TopPosZ(28, 20))
ITEM(Label, dv___9, SetLabel(t_("&Accepts")).HSizePosZ(368, 436).TopPosZ(28, 19))
ITEM(EditString, accepts, HSizePosZ(412, 268).TopPosZ(28, 19))
ITEM(Label, dv___11, SetLabel(t_("Encoding")).RightPosZ(212, 48).TopPosZ(28, 19))
ITEM(DropList, charset, RightPosZ(96, 112).TopPosZ(28, 19))
ITEM(Option, noblitz, SetLabel(t_("No BLITZ")).RightPosZ(10, 76).TopPosZ(28, 20))
ITEM(ArrayCtrl, option, HSizePosZ(248, 8).VSizePosZ(52, 152))
ITEM(ArrayCtrl, fileoption, HSizePosZ(248, 8).BottomPosZ(48, 100))
ITEM(Option, optimize_speed_file, SetLabel(t_("Optimize the file for speed")).LeftPosZ(248, 152).BottomPosZ(25, 19))
ITEM(Option, includeable_file, SetLabel(t_("Includeable group")).LeftPosZ(404, 116).BottomPosZ(25, 19))
ITEM(Option, pch_file, SetLabel(t_("Precompile header")).LeftPosZ(248, 120).BottomPosZ(5, 19))
ITEM(Option, nopch_file, SetLabel(t_("Do not use precompiled header")).LeftPosZ(376, 180).BottomPosZ(5, 19))
ITEM(Option, noblitz_file, SetLabel(t_("Exclude from BLITZ")).LeftPosZ(560, 132).BottomPosZ(5, 19))
ITEM(Button, ok, SetLabel(t_("OK")).RightPosZ(76, 64).BottomPosZ(6, 22))
ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(8, 64).BottomPosZ(6, 22))
END_LAYOUT
LAYOUT(NewPackageLayout, 728, 560)

View file

@ -25,7 +25,7 @@ link(WIN32 MSC) /MAP;
file
IDE readonly separator,
ide.h,
ide.h options PCH,
version.h,
UppDlg.h,
BaseDlg.cpp,

View file

@ -162,6 +162,11 @@ bool Ide::IdeConsoleWait(int slot)
return true;
}
void Ide::IdeConsoleOnFinish(Callback cb)
{
console.OnFinish(cb);
}
void Ide::IdeSetRight(Ctrl& ctrl)
{
right.Add(ctrl.SizePos());

View file

@ -4,7 +4,7 @@ uses
TextDiffCtrl;
file
usvn.h,
usvn.h options PCH,
Console.cpp,
SvnFs.cpp,
SvnWorks.cpp,