home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2002 May
/
Chip_2002-05_cd1.bin
/
chplus
/
cpp
/
3
/
Tools.exe
/
tdump1.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1998-02-09
|
42KB
|
1,321 lines
//----------------------------------------------------------------------------
//Borland C++Builder
//Copyright (c) 1987, 1998 Borland International Inc. All Rights Reserved.
//----------------------------------------------------------------------------
//------------------------------------------------------------
#pragma hdrstop
#include <sys\stat.h>
#include <shlobj.h>
#include <WindowsX.h>
#include <registry.hpp>
#include <io.h>
#include <assert.h>
#include "TDump1.h"
#include "about.h"
#pragma resource "*.dfm"
TMainForm *MainForm;
//------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
GetRegInfo();
BinPth = "PATH=" + BCBRoot + "bin";
LibPth = BCBRoot + "lib";
IncPth = BCBRoot + "include";
ObjPth = BCBRoot + "lib\\obj";
//Initialize globals
AppCaption = "BCB Command Line Tools : ";
Application->Title = "BCB WinTools";
Application->Icon->LoadFromFile(WintoolsDir + "WinTools.ico");
//OutFileMi->Checked = true;
SourceFileSelected = false;
ObjList = new TStringList();
Clear = false;
IsDirty = false;
BCC32 = true;
CmdStrRE->Text = "BCC32";
FilterStr = "*.c;*.cpp";
MainForm->Caption = AppCaption + "Borland 32bit C++ Compiler";
WorkDir = "C:\\";
}
//------------------------------------------------------------
void TMainForm::GetRegInfo()
{
const String RegKey = "\\software\\borland\\C++Builder\\3.0";
TRegistry *MyRegistry = new TRegistry();
MyRegistry->RootKey = HKEY_LOCAL_MACHINE;
try {
if(MyRegistry->OpenKey(RegKey, false)) {
BCBRoot = MyRegistry->ReadString("RootDir");
if (!BCBRoot.IsEmpty()) {
BCBRoot = BCBRoot + "\\";
WintoolsDir = BCBRoot + "examples\\wintools\\";
}
else ShowMessage("Registry RootDir error");
MyRegistry->CloseKey();
}
}
catch(ERegistryException &E) {
ShowMessage(E.Message);
delete MyRegistry;
return;
}
delete MyRegistry;
}
void TMainForm::SetEnvPath()
{
String TempPath = "";
String RawPath;
String TotPath = "";
TStringList *PathList = new TStringList();
PathList->LoadFromFile(WintoolsDir + "Path.txt");
for (int n = 0; n < PathList->Count; n++) {
RawPath = "";
RawPath = PathList->Strings[n];
if (RawPath.Pos("$(BCB)")) {
RawPath.Delete(1, 7);
TempPath = TempPath + BCBRoot + RawPath + ";";
}
else TempPath = TempPath + RawPath + ";";
}
TotPath = "PATH=" + TempPath + WorkDir;
putenv(TotPath.c_str());
}
void __fastcall TMainForm::ClearClick(TObject *Sender)
{
Closeall1Click(Sender);
ClearCtls();
// Reset globals
IsDirty = false;
ResetTools();
SourceFileSelected = false;
Clear = false;
DefExt = "";
OptionString = "";
SourceFileDir = "";
StripExt = "";
ODFileName = "";
NewDestEdit = "";
NewSourceEdit = "";
CmdStrRE->Text = "";
ObjList->Clear();
// Reset to BCC32
PageCtl->ActivePage = PageCtl->Pages[0];
DestEd = ".txt";
RunBtn->Enabled = false;
BCC32 = true;
CmdStrRE->Text = "BCC32";
MainForm->Caption = AppCaption + "Borland 32bit C++ Compiler";
// Set richedit
ResultsRE->Lines->Clear();
BackBtnClick(Sender);
CmdStrRE->SelStart = 0;
CmdStrRE->SelLength = CmdStrRE->Text.Length();
CmdStrRE->SelAttributes->Color = clBlack;
CmdStrRE->SelStart = 0;
}
//------------------------------------------------------------
void TMainForm::ResetTools()
{
// Set all tools to a non-selected state
TDump = false;
TLib = false;
ImpDef = false;
ImpLib = false;
BCC32 = false;
ILink32 = false;
TLink32 = false;
Make = false;
BRCC32 = false;
CPP32 = false;
IDEtoBPR = false;
TDStrp32 = false;
Grep = false;
Touch = false;
Coff = false;
Convert = false;
TRegAX = false;
TlbImp = false;
Tasm = false;
}
void __fastcall TMainForm::ClearCtls()
{
// Initialize stuff
Clear = true;
if (Grep) CmdStrRE->Text = PageCtl->ActivePage->Caption +
" -";
else
CmdStrRE->Text = PageCtl->ActivePage->Caption + " ";
ResultsRE->Lines->Clear();
PosFound = 0;
ResultPnl->Hide();
// reset option checkboxes
TPcb3->Checked = false;
TPcb4->Checked = false;
TPcb5->Checked = false;
TPcb6->Checked = false;
TPcb7->Checked = false;
TPcb8->Checked = false;
TPcb9->Checked = false;
TLcb4->Checked = false;
TLcb5->Checked = false;
TLcb6->Checked = false;
TLcb7->Checked = false;
TLcb8->Checked = false;
TLcb9->Checked = false;
TPcb3->Font->Color = clBlack;
TPcb4->Font->Color = clBlack;
TPcb5->Font->Color = clBlack;
TPcb6->Font->Color = clBlack;
TPcb7->Font->Color = clBlack;
TPcb8->Font->Color = clBlack;
TPcb9->Font->Color = clBlack;
TLcb4->Font->Color = clBlack;
TLcb5->Font->Color = clBlack;
TLcb6->Font->Color = clBlack;
TLcb7->Font->Color = clBlack;
TLcb8->Font->Color = clBlack;
TLcb9->Font->Color = clBlack;
// reset checkbox controls and font
if (ObjList->Count) {
TCheckBox *CB;
for (int indx = 0; indx < ObjList->Count; indx++) {
CB = (TCheckBox *) ObjList->Objects[indx];
CB->Checked = false;
CB->Font->Color = clBlack;
}
}
ObjList->Clear();
OptionString = "";
Clear = false;
}
//------------------------------------------------------------
void TMainForm::PrepareCmdLine()
{
if (GetFileSize(ODFileName) > 2000000) {
ShowMessage("File is too large to process. Use dos prompt!");
ClearClick(DummySender);
return;
}
int FirstIndex;
// Handle options selected if any
if (ObjList->Count) {
TCheckBox *CB;
for (int indx = 0; indx < ObjList->Count; indx++) {
CB = (TCheckBox *) ObjList->Objects[indx];
FirstIndex = ObjList->IndexOfObject(ObjList->
Objects[indx]);
if (FirstIndex >= indx) {
if (Grep) {
if (CB->Checked) OptionString = OptionString
+ CB->Caption;
}
else
if (CB->Checked) OptionString = OptionString
+ " " + CB->Caption;
}
}
}
// Prepare command line String for all tools
const String Cmd = CmdStrRE->Text;
const String Source = "\"" + ODFileName +"\"";
const String Dest = "\"" + DestEd + "\"";
const String Combine = Cmd + OptionString + " ";
const String Combine2 = Source + " ";
if (TDump || Make || BRCC32 || IDEtoBPR || TDStrp32 || Touch ||TRegAX || Tasm32)
CmdStrRE->Text = Combine + Source;
if (BCC32 || CPP32)
CmdStrRE->Text = Combine + Source;
if (ILink32 || TLink32) {
CmdStrRE->Text = Combine + Source;
if (IKcb5->Checked || TKcb5->Checked) // console app
CmdStrRE->Text = Combine + "\"" + LibPth +
"\\c0x32.obj\" " + Source;
if (IKcb20->Checked || TKcb24->Checked) // win dll
CmdStrRE->Text = Combine + "\"" + LibPth +
"\\c0d32.obj\" " + Source;
if (IKcb21->Checked || TKcb25->Checked) // win exe
CmdStrRE->Text = Combine + "\"" + LibPth +
"\\c0w32.obj\" " + "\"" + LibPth +
"\\import32.lib\" " + "\"" + LibPth +
"\\cw32mt.lib\" " + Source;
}
if (ImpLib) {
String SubFn;
String MultiSource = OpenDlg->Files->Count?OpenDlg->Files->Strings[0]:String("");
if (OpenDlg->Files->Count > 1)
SubFn = StripFileExt(MultiSource) + ".lib\"";
else SubFn = StripFileExt(Source) + ".lib\"";
CmdStrRE->Text = Combine + SubFn + " " + Source;
}
if (ImpDef) {
DefExt = StripFileExt(Source) + ".def\"";
CmdStrRE->Text = Combine + DefExt + " " + Source;
}
if (Grep) {
if (!GPcb1->Checked)
CmdStrRE->Text = Cmd + OptionString + " " +
Dest + " " + "\"" + ODFileName + "\\*.*\"";
else
CmdStrRE->Text = Cmd + OptionString + " " +
Dest + " " + Source;
}
if (TDump || TLib) OutFileMi->Enabled = true;
else OutFileMi->Enabled = false;
if (TDump && (OutFileMi->Checked)) CmdStrRE->Text =
CmdStrRE->Text + " " + Dest;
if (Convert) {
CmdStrRE->Text = CmdStrRE->Text + OpenDlg->FileName;
SetCurrentDir(BCBRoot + "bin");
}
if (TlbImp) {
bool a = TPcb3->Checked;
bool b = TPcb4->Checked;
bool c = TPcb5->Checked;
bool d = TPcb6->Checked;
bool e = TPcb7->Checked;
bool f = TPcb8->Checked;
bool g = TPcb9->Checked;
LibOps = "";
if (a) LibOps = LibOps + " " + TPcb3->Caption;
if (b) LibOps = LibOps + " " + TPcb4->Caption;
if (c) LibOps = LibOps + " " + TPcb5->Caption;
if (d) LibOps = LibOps + " " + TPcb6->Caption;
if (e) LibOps = LibOps + " " + TPcb7->Caption;
if (f) LibOps = LibOps + " " + TPcb8->Caption;
if (g) LibOps = LibOps + " " + TPcb9->Caption;
}
if (TLib) {
bool a = TLcb4->Checked;
bool b = TLcb5->Checked;
bool c = TLcb6->Checked;
bool d = TLcb7->Checked;
bool e = TLcb8->Checked;
bool f = TLcb9->Checked;
LibOps = "";
if (a) LibOps = LibOps + " " + TLcb4->Caption;
if (b) LibOps = LibOps + " " + TLcb5->Caption;
if (c) LibOps = LibOps + " " + TLcb6->Caption;
if (d) LibOps = LibOps + " " + TLcb7->Caption;
if (e) LibOps = LibOps + " " + TLcb8->Caption;
if (f) LibOps = LibOps + " " + "&";
}
if (Coff) {
DefExt = StripFileExt(Source) + "OMF.lib\"";
CmdStrRE->Text = Combine + Source + " " + DefExt;
}
if ((TLib || TlbImp) && (OutFileMi->Checked)) CmdStrRE->Text =
Combine + Combine2 + LibOps + "," + Dest;
if ((TLib || TlbImp) && (!OutFileMi->Checked))CmdStrRE->Text =
Combine + Combine2 + LibOps;
// Setup color red for word found
CHARFORMAT SelectWordFmat;
memset(&SelectWordFmat, 0, sizeof(CHARFORMAT));
SelectWordFmat.cbSize = sizeof(CHARFORMAT);
SelectWordFmat.dwMask = CFM_COLOR;
SelectWordFmat.crTextColor = 0x000000FF;
String OneLine = CmdStrRE->Lines->Strings[0];
int Len = OneLine.Length();
String OneChar;
bool BeginSel = false;
bool EndSel = false;
int BeginPos;
int EndPos;
// Highlight CmdLine items needing modification
for (int p = 1; p <= Len+1; p++) {
OneChar = OneLine.SubString(p, 1);
if ((OneChar == "'") && (!BeginSel)) {
BeginSel = true;
BeginPos = p;
}
if ((OneChar == "'") && (BeginSel)) {
if (BeginPos != p) {
EndPos = p;
EndSel = true;
}
}
// Paint highlighted text red
if ((EndSel) && (BeginSel)) {
CmdStrRE->Perform(EM_SETSEL, BeginPos-1, EndPos);
CmdStrRE->Perform(EM_SETCHARFORMAT,
SCF_SELECTION,
(LPARAM) (CHARFORMAT FAR *)
&SelectWordFmat);
CmdStrRE->Perform(EM_SETSEL, BeginPos - 1, BeginPos - 1);
BeginSel = false;
EndSel = false;
}
}
}
//------------------------------------------------------------
void __fastcall TMainForm::RunBtnClick(TObject *Sender)
{
if (SourceFileSelected) {
ResultsRE->Clear();
int FBreak;
String TempFile;
Screen->Cursor = crHourGlass;
if (!Grep) SetEnvPath();
if (IsDirty) ResultsRE->Lines->
SaveToFile(OpenDlg->FileName);
ViewResults(Sender);
Application->ProcessMessages();
// If NT do security stuff
SECURITY_DESCRIPTOR sd;
SECURITY_ATTRIBUTES sa;
LPSECURITY_ATTRIBUTES lpsa = NULL;
if (IsWindowsNT()) {
InitializeSecurityDescriptor(&sd,
SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, true, NULL, false);
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = true;
sa.lpSecurityDescriptor = &sd;
lpsa = &sa;
}
// Create the Pipe and get r/w handles
HANDLE hReadPipe;
HANDLE hWritePipe;
assert(CreatePipe(&hReadPipe,
&hWritePipe,
lpsa,
2500000));
// initialize STARTUPINFO struct
STARTUPINFO si;
memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW |STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
si.hStdOutput = hWritePipe;
si.hStdError = hWritePipe;
PROCESS_INFORMATION pi;
assert(hWritePipe);
// Run the cmdLine tool
ResultsRE->Lines->Add("Working.....");
Application->ProcessMessages();
assert(CreateProcess(NULL,
CmdStrRE->Text.c_str(),
NULL,//security
NULL,// security
TRUE,//inherits handles
0,
0,
0,
&si,
&pi));
CloseHandle(pi.hThread);
WaitForSingleObject(pi.hProcess, 90000);
// read from the pipe and put in richedit
assert(hReadPipe);
DWORD BytesRead; //unsigned long
char dest[4000];
bool RdLoopDone = false;
ResultsRE->Lines->Clear();
FBreak = 1;
if (ExitCode) Screen->Cursor = crDefault;
while (!RdLoopDone) {
memset(dest, 0, 4000);
assert(ReadFile(hReadPipe, &dest, sizeof(dest), &BytesRead, NULL));
ResultsRE->Lines->Add(String(dest));
if (BytesRead < 4000) RdLoopDone = true;
if (FBreak > 150) RdLoopDone = true;
FBreak++;
}
ResultsRE->Lines->Add("FINISHED!");
String RawPath;
if (BCC32 || CPP32) {
for (int h = 0; h < OpenDlg->Files->Count; h++) {
RawPath = "";
RawPath = OpenDlg->Files->Strings[h];
TTabSheet *NewTabSheet = new TTabSheet(this);
if (CPP32)
NewTabSheet->Caption = StripFileExt(
ExtractFileName(RawPath)) + ".i";
else NewTabSheet->Caption =
ExtractFileName(OpenDlg->Files->Strings[h]);
NewTabSheet->PageControl= PageCtl2;
TRichEdit *NewRichEdit = new TRichEdit(this);
NewRichEdit->ScrollBars = ssBoth;
NewRichEdit->PlainText = true;
NewRichEdit->Parent = NewTabSheet;
NewRichEdit->Align = alClient;
Application->ProcessMessages();
try {
if (CPP32) {
TempFile = ExtractFilePath(RawPath) +
NewTabSheet->Caption;
if (GetFileSize(TempFile) > 4000000)
NewRichEdit->Lines->
Add("File size exceeds limit! Use WordPad to view!");
else
NewRichEdit->Lines->LoadFromFile(TempFile);
}
else NewRichEdit->Lines->LoadFromFile(RawPath);
}
catch(...) {
ShowMessage("Unable to open file " + RawPath);
Screen->Cursor = crDefault;
return;
}
}
}
try {
if (TLib || TDump) {
if (GetFileSize(DestEd) > 4000000)
ResultsRE->Lines->Add("File size exceeds limit! Use WordPad to view!");
else
ResultsRE->Lines->LoadFromFile(DestEd);
}
if (ImpDef) ResultsRE->Lines->
LoadFromFile(StripFileExt(OpenDlg->FileName) +
".def");
}
catch (...) {
ShowMessage("Unable to open file!");
Screen->Cursor = crDefault;
return;
}
// Process cleanup
CloseHandle(hReadPipe);
CloseHandle(hWritePipe);
CloseHandle(pi.hProcess);
ResultsRE->Perform(EM_SETSEL,0,0);
Screen->Cursor = crDefault;
IsDirty = false;
BackBtn->Enabled = true;
}
else ShowMessage("Select a File!");
}
//------------------------------------------------------------
void __fastcall TMainForm::BackBtnClick(TObject *Sender)
{
ResultPnl->Hide();
BackBtn->Enabled = false;
}
//------------------------------------------------------------
void __fastcall TMainForm::ToolsMi(TObject *Sender)
{
ResetTools();
TMenuItem* Item = dynamic_cast<TMenuItem *>(Sender);
SetupTool(Item->Caption);
}
//------------------------------------------------------------
void __fastcall TMainForm::ToolsPg(TObject *Sender)
{
ResetTools();
SetupTool(PageCtl->ActivePage->Caption);
}
//------------------------------------------------------------
void TMainForm::SetupTool(String Caption)
{
OutFileMi->Checked = false;
BrowseBtn->Enabled = true;
if (Caption == "TDump") {
OutFileMi->Checked = true;
PageCtl->ActivePage = PageCtl->Pages[13];
MainForm->Caption = AppCaption + "Turbo Dump";
TDump = true;
FilterStr = "*.*";
}
if (Caption == "BCC32") {
PageCtl->ActivePage = PageCtl->Pages[0];
MainForm->Caption = AppCaption + "Borland 32bit C++ Compiler";
BCC32 = true;
FilterStr = "*.c;*.cpp";
}
if (Caption == "ImpLib") {
PageCtl->ActivePage = PageCtl->Pages[9];
MainForm->Caption = AppCaption + "Create Import Library from a DLL/DEF";
ImpLib = true;
FilterStr = "*.dll;*.def";
}
if (Caption == "ImpDef") {
PageCtl->ActivePage = PageCtl->Pages[8];
MainForm->Caption = AppCaption + "Create a .DEF File from a DLL";
ImpDef = true;
FilterStr = "*.dll";
}
if (Caption == "TRegSvr") {
PageCtl->ActivePage = PageCtl->Pages[18];
MainForm->Caption = AppCaption + "ActiveX Registration Utility .OCX";
TRegAX = true;
FilterStr = "*.ocx";
}
if (Caption == "Tasm32") {
PageCtl->ActivePage = PageCtl->Pages[11];
MainForm->Caption = AppCaption + "Turbo Assembler";
Tasm = true;
FilterStr = "*.asm";
}
if (Caption == "TLibImp") {
PageCtl->ActivePage = PageCtl->Pages[15];
MainForm->Caption = AppCaption + "Generate a C++ class from Type library .TLB";
TlbImp = true;
FilterStr = "*.tlb";
}
if (Caption == "TLib") {
PageCtl->ActivePage = PageCtl->Pages[14];
MainForm->Caption = AppCaption + "Build or Modify Libraries";
TLib = true;
FilterStr = "*.lib";
}
if (Caption == "ILink32") {
MainForm->Caption = AppCaption + "Turbo Incremental Linker";
PageCtl->ActivePage = PageCtl->Pages[7];
ILink32 = true;
FilterStr = "*.obj;*.lib";
}
if (Caption == "TLink32") {
MainForm->Caption = AppCaption + "Turbo Linker";
PageCtl->ActivePage = PageCtl->Pages[16];
TLink32 = true;
FilterStr = "*.obj;*.lib";
}
if (Caption == "Make") { //************************************************************************
PageCtl->ActivePage = PageCtl->Pages[10];
MainForm->Caption = AppCaption + "MAKE runs rules from a text file (MAKEFILE or .MAK)";
Make = true;
FilterStr = "*.mak";
}
if (Caption == "BRCC32") {
PageCtl->ActivePage = PageCtl->Pages[1];
MainForm->Caption = AppCaption + "Resource Compiler for .RC files";
BRCC32 = true;
FilterStr = "*.rc";
}
if (Caption == "CPP32") {
PageCtl->ActivePage = PageCtl->Pages[2];
MainForm->Caption = AppCaption + "C++ PreProcessor for .Cxx and .Hxx files";
CPP32 = true;
FilterStr = "*.c;*.cpp;*.h;*.hpp";
}
if (Caption == "IDEtoBPR") {
PageCtl->ActivePage = PageCtl->Pages[6];
MainForm->Caption = AppCaption + "Convert .IDE to .BPR File";
IDEtoBPR = true;
FilterStr = "*.ide";
}
if (Caption == "Coff2omf") {
PageCtl->ActivePage = PageCtl->Pages[3];
MainForm->Caption = AppCaption + "Convert Coff import Lib to OMF import lib";
Coff = true;
FilterStr = "*.lib";
}
if (Caption == "Convert") {
PageCtl->ActivePage = PageCtl->Pages[4];
MainForm->Caption = AppCaption + "Convert .DFM to .TXT or .TXT to .DFM";
Convert = true;
FilterStr = "*.dfm;*.txt";
}
if (Caption == "TDStrp32") {
PageCtl->ActivePage = PageCtl->Pages[12];
MainForm->Caption = AppCaption + "Turbo Debugger Symbol Table Stripper for .EXE";
TDStrp32 = true;
FilterStr = "*.exe";
}
if (Caption == "Grep") {
GrepMi(DummySender);
}
if (Caption == "Touch") {
PageCtl->ActivePage = PageCtl->Pages[17];
MainForm->Caption = AppCaption + "Change File Date/Time Attributes";
Touch = true;
FilterStr = "*.*";
}
ClearCtls();
CmdStrRE->Text = PageCtl->ActivePage->Caption + " ";
OptionString = "";
if (SourceFileSelected) PrepareCmdLine();
}
void __fastcall TMainForm::GrepMi(TObject *Sender)
{
BrowseBtn->Enabled = false;
ResetTools();
PageCtl->ActivePage = PageCtl->Pages[5];
MainForm->Caption = AppCaption + "Grep Text Search Utility";
String GWord;
Application->ProcessMessages();
// Use Windows 95 Directory box to get dir
BROWSEINFO bi;
char GDir[MAX_PATH];
char FolderName[MAX_PATH];
LPITEMIDLIST ItemID;
memset(&bi, 0, sizeof(BROWSEINFO));
memset(GDir, 0, MAX_PATH);
bi.hwndOwner = Handle;
bi.pszDisplayName = FolderName;
bi.lpszTitle = "Select Directory to Search In!";
ItemID = SHBrowseForFolder(&bi);
SHGetPathFromIDList(ItemID, GDir);
GlobalFreePtr(ItemID);
String Temp = String(GDir);
if (Temp == "") return;
// Get the word to search for
bool SelectOK = InputQuery("Enter Word", "Grep for ?",GWord);
if (!SelectOK) return;
Grep = true;
OptionString = "";
ObjList->Clear();
ClearCtls();
CmdStrRE->Text = "Grep -";
DestEd = GWord;
SourceEd = Temp;
ODFileName = Temp;
FindDialog1->FindText = GWord;
SourceFileSelected = true;
CmdStrRE->Text = PageCtl->ActivePage->Caption + " -";
OptionString = "";
PrepareCmdLine();
RunBtn->Enabled = true;
OpenAtCursor->Enabled = true;
}
//------------------------------------------------------------
int TMainForm::HandleOpenDlgs(String FilterStr)
{
OpenDlg->FileName = FilterStr;
OpenDlg->InitialDir = WorkDir;
if (OpenDlg->Execute()) {
SourceFileSelected = true;
SourceEd = "";
// For multifiles
if (OpenDlg->Files->Count > 1) {
for (int h = 0; h < OpenDlg->Files->Count; h++) {
if (h < OpenDlg->Files->Count -1) {
if (h == 0)
SourceEd = SourceEd +
OpenDlg->Files->Strings[h] +
"\"" + " ";
else
SourceEd = SourceEd +
"\"" + OpenDlg->Files->
Strings[h] + "\"" + " ";
}
else
SourceEd = SourceEd + "\"" +
OpenDlg->Files->Strings[h];
}
}
else
SourceEd = OpenDlg->FileName;
ODFileName = ExtractFileName(OpenDlg->FileName);
SourceEd = OpenDlg->FileName;
SourceFileDir = ExtractFileDir(OpenDlg->FileName);
SetCurrentDir(SourceFileDir);
WorkDir = SourceFileDir;
NewDestEdit = StripFileExt(ODFileName) + ".txt";
DestEd = SourceFileDir + "\\" + NewDestEdit;
CmdStrRE->Text = PageCtl->ActivePage->Caption + " ";
OptionString = "";
PrepareCmdLine();
ObjList->Clear();
RunBtn->Enabled = true;
return 1;
}
else
return 0;
}
//------------------------------------------------------------
void __fastcall TMainForm::FindDialog1Find(TObject *Sender)
{
const String Search = FindDialog1->FindText;
FindNext1->Enabled = true;
FindNext2->Enabled = true;
// Setup color red for word found
CHARFORMAT SelectWordFmat;
memset(&SelectWordFmat, 0, sizeof(CHARFORMAT));
SelectWordFmat.cbSize = sizeof(CHARFORMAT);
SelectWordFmat.dwMask = CFM_COLOR;
SelectWordFmat.crTextColor = 0x000000FF;
// Setup search struct
bool FoundOne;
TFindText MyTFindText;
MyTFindText.chrg.cpMin = PosFound;
if (PosFound)
MyTFindText.chrg.cpMin = PosFound + Search.Length();
MyTFindText.chrg.cpMax = -1;
MyTFindText.lpstrText = strdup(Search.c_str());
// Perform search on active richedit
TRichEdit *RE = (TRichEdit *) PageCtl2->ActivePage->
Controls[0];
PosFound = RE->Perform(EM_FINDTEXT, 0, (LPARAM) (&MyTFindText));
FoundOne = PosFound != -1;
RE->Perform(EM_SETSEL, PosFound, PosFound + Search.Length());
RE->Perform(EM_SCROLLCARET, 0, 0);
RE->SetFocus();
if (!FoundOne) {
if (Search != "Function name") {
ShowMessage("End of Page! \"" + Search +
"\" not found!");
FindNext1->Enabled = false;
FindNext2->Enabled = false;
return;
}
}
else{ // Set select color red
RE->Perform(EM_SETCHARFORMAT,
SCF_SELECTION,
(LPARAM) (CHARFORMAT FAR *)
&SelectWordFmat);
RE->Perform(EM_SETSEL, PosFound, PosFound);
}
}
//------------------------------------------------------------
void __fastcall TMainForm::Toolcbs(TObject *Sender)
{
// Handle font colors
TFontStyles BoldFnt;
TCheckBox* cb = dynamic_cast<TCheckBox *>(Sender);
if (cb->State == cbChecked) {
cb->Font->Color = clBlue;
BoldFnt << fsBold;
cb->Font->Style = BoldFnt ;
}
else {
cb->Font->Color = clBlack;
BoldFnt >> fsBold;
cb->Font->Style = BoldFnt;
}
// Add checked boxes to the object list
ObjList->AddObject("TCheckBox", Sender);
if (!SourceFileSelected && !Clear && (ObjList->Count)) {
ShowMessage("Select a File!");
ClearCtls();
}
else {
if (Grep) CmdStrRE->Text = PageCtl->
ActivePage->Caption + " -";
else
CmdStrRE->Text = PageCtl->ActivePage->Caption + " ";
OptionString = "";
if (SourceFileSelected) PrepareCmdLine();
}
}
//------------------------------------------------------------
void __fastcall TMainForm::LabToCB(TObject *Sender)
{
// Make label activate corresponding checkbox
if (SourceFileSelected) {
String LabToCB;
String cbName;
int ctl;
TCheckBox *CB;
TLabel* lab = dynamic_cast<TLabel *>(Sender);
int Len = lab->Name.Length();
LabToCB = lab->Name.SubString(6, Len-5);
if (TDump) cbName = "TDcb"+LabToCB;
if (BCC32) cbName = "BCcb"+LabToCB;
if (ImpLib) cbName = "ILcb"+LabToCB;
if (ImpDef) cbName = "IDcb"+LabToCB;
if (TLib) cbName = "TLcb"+LabToCB;
if (ILink32) cbName = "IKcb"+LabToCB;
if (TLink32) cbName = "TKcb"+LabToCB;
if (Make) cbName = "MKcb"+LabToCB;
if (BRCC32) cbName = "BRcb"+LabToCB;
if (CPP32) cbName = "CPcb"+LabToCB;
if (TDStrp32) cbName = "DScb"+LabToCB;
if (Grep) cbName = "GPcb"+LabToCB;
if (Touch) cbName = "TCcb"+LabToCB;
if (Coff) cbName = "CFcb"+LabToCB;
if (IDEtoBPR) cbName = "BPcb"+LabToCB;
if (TlbImp) cbName = "TPcb"+LabToCB;
if (TRegAX) cbName = "TRcb"+LabToCB;
if (Tasm) cbName = "TScb"+LabToCB;
if (BCC32) {
if (BCCPnl1->Visible) {
for (ctl=0; ctl<BCCPnl1->ControlCount; ctl++) {
if (BCCPnl1->Controls[ctl]->Name == cbName) break;
}
CB = (TCheckBox *) BCCPnl1->Controls[ctl];
}
if (BCCPnl2->Visible) {
for (ctl=0; ctl<BCCPnl2->ControlCount; ctl++) {
if (BCCPnl2->Controls[ctl]->Name == cbName) break;
}
CB = (TCheckBox *) BCCPnl2->Controls[ctl];
}
if (BCCPnl3->Visible) {
for (ctl=0; ctl<BCCPnl3->ControlCount; ctl++) {
if (BCCPnl3->Controls[ctl]->Name == cbName) break;
}
CB = (TCheckBox *) BCCPnl3->Controls[ctl];
}
}
else {
for (ctl=0; ctl<PageCtl->ActivePage->ControlCount; ctl++) {
if (PageCtl->ActivePage->Controls[ctl]->
Name == cbName) break;
}
CB = (TCheckBox *) PageCtl->ActivePage->Controls[ctl];
}
CB->Checked = CB->State==cbUnchecked;
}
else ShowMessage("Select a File!");
}
//------------------------------------------------------------
void __fastcall TMainForm::Print1Click(TObject *Sender)
{
if (SourceFileSelected) {
try {
TRichEdit *RE = (TRichEdit *) PageCtl2->ActivePage->
Controls[0];
if (PrintDialog1->Execute())
RE->Print(PageCtl2->ActivePage->Caption);
else return;
}
catch(...) {
ShowMessage("Could not print file !");
return;
}
}
else
ShowMessage("Select a File!");
}
//------------------------------------------------------------
void __fastcall TMainForm::AdvBtnClick(TObject *Sender)
{
BCCPnl1->Hide();
BCCPnl3->Hide();
BCCPnl2->Show();
}
//------------------------------------------------------------
void __fastcall TMainForm::ResultsREKeyPress(TObject *Sender,
char &Key)
{
IsDirty = true;
}
//------------------------------------------------------------
void __fastcall TMainForm::SetWorkingDir1Click(
TObject *Sender)
{
// Use Windows 95 Directory box to get dir
BROWSEINFO bi;
char WDir[MAX_PATH];
char FolderName[MAX_PATH];
LPITEMIDLIST ItemID;
memset(&bi, 0, sizeof(BROWSEINFO));
memset(WDir, 0, MAX_PATH);
bi.hwndOwner = Handle;
bi.pszDisplayName = FolderName;
bi.lpszTitle = "Select Working Directory!";
ItemID = SHBrowseForFolder(&bi);
SHGetPathFromIDList(ItemID, WDir);
GlobalFreePtr(ItemID);
if (WorkDir == "") return;
WorkDir = String(WDir);
}
//------------------------------------------------------------
bool TMainForm::IsWindowsNT()
{
OSVERSIONINFO osv;
osv.dwOSVersionInfoSize = sizeof(osv);
GetVersionEx(&osv);
return (osv.dwPlatformId == VER_PLATFORM_WIN32_NT);
}
void __fastcall TMainForm::CloseActive(TObject *Sender)
{
if (PageCtl2->PageCount > 1) {
PageCtl2->ActivePage->Free();
PageCtl2->ActivePage = PageCtl2->Pages[0];
}
}
//------------------------------------------------------------
void __fastcall TMainForm::Closeall1Click(TObject *Sender)
{
if (PageCtl2->PageCount > 1) {
while (PageCtl2->PageCount > 1) {
PageCtl2->ActivePage = PageCtl2->Pages[1];
if (PageCtl2->ActivePage->Caption != "Results") {
PageCtl2->ActivePage->Free();
Application->ProcessMessages();
}
}
PageCtl2->ActivePage = PageCtl2->Pages[0];
}
}
//------------------------------------------------------------
void __fastcall TMainForm::Save2Click(TObject *Sender)
{
if (SourceFileSelected) {
try {
TRichEdit *RE = (TRichEdit *) PageCtl2->
ActivePage->Controls[0];
// not saved yet do saveas
if (SourceFileDir.IsEmpty()) {
SaveAs2Click(Sender);
return;
}
RE->Lines->SaveToFile(SourceFileDir + "\\" +
PageCtl2->ActivePage->Caption) ;
}
catch (...) {
ShowMessage("Could not save file " + SourceFileDir +
"\\" + PageCtl2->ActivePage->Caption);
return;
}
}
else
ShowMessage("Select a File!");
}
//------------------------------------------------------------
void __fastcall TMainForm::SaveAs2Click(TObject *Sender)
{
if (SourceFileSelected) {
try {
TRichEdit *RE = (TRichEdit *) PageCtl2->ActivePage->
Controls[0];
if (SaveDialog1->Execute())
RE->Lines->SaveToFile(SaveDialog1->FileName);
}
catch (...) {
ShowMessage("Could not save file " + SaveDialog1->
FileName) ;
return;
}
}
else
ShowMessage("Select a File!");
}
//------------------------------------------------------------
void __fastcall TMainForm::About1Click(TObject *Sender)
{
AboutBox = new TAboutBox(this);
AboutBox->ShowModal();
delete AboutBox;
}
//------------------------------------------------------------
void __fastcall TMainForm::OpenAtCursorClick(
TObject *Sender)
{
String OneChar;
String FilePath = "";
int LineNum = ResultsRE->Perform(EM_LINEFROMCHAR,ResultsRE->
SelStart,0);
String RawPath = ResultsRE->Lines->Strings[LineNum];
int x = RawPath.Length() -1; // Skip last char :
while (x) {
OneChar = RawPath.SubString(x, 1);
if (OneChar == " ") break;
FilePath.Insert(OneChar, 1);
x--;
}
CreateNewPage(ExtractFileName(FilePath), FilePath);
}
//------------------------------------------------------------
void __fastcall TMainForm::BrowseMi(TObject *Sender)
{
HandleOpenDlgs(FilterStr);
}
//------------------------------------------------------------
void __fastcall TMainForm::Find2Click(TObject *Sender)
{
if (FindDialog1->Execute()) PosFound = 0;
}
//------------------------------------------------------------
void __fastcall TMainForm::Exit1Click(TObject *Sender)
{
Application->Terminate();
}
//------------------------------------------------------------
void __fastcall TMainForm::OutFileMiClick(TObject *Sender)
{
OutFileMi->Checked = !OutFileMi->Checked;
CmdStrRE->Text = PageCtl->ActivePage->Caption + " ";
OptionString = "";
PrepareCmdLine();
}
//------------------------------------------------------------
void __fastcall TMainForm::ToolHelpMi(
TObject *Sender)
{
TMenuItem* Item = dynamic_cast<TMenuItem *>(Sender);
CreateNewPage(ExtractFileName(Item->Caption + ".txt"),
WintoolsDir + Item->Caption + ".txt");
SourceFileSelected = true;
}
//------------------------------------------------------------
String TMainForm::StripFileExt(String FileName)
{
String Temp;
String OneChar;
bool FoundDot = false;
int Len = FileName.Length();
while (Len > 0) {
OneChar = FileName.SubString(Len, 1);
if (FoundDot) Temp.Insert(OneChar, 0);
if (OneChar == ".") FoundDot = true;
Len--;
}
return Temp;
}
void __fastcall TMainForm::New1Click(TObject *Sender)
{
MainForm->Caption = AppCaption + "Create a New File";
CreateNewPage("New File", "None");
TRichEdit *RE = (TRichEdit *) PageCtl2->ActivePage->
Controls[0];
RE->SetFocus();
CmdStrRE->Text = "";
DestEd = "";
SourceFileSelected = true;
}
//------------------------------------------------------------
void __fastcall TMainForm::OpenClick(TObject *Sender)
{
TMenuItem* mi = dynamic_cast<TMenuItem *>(Sender);
String MItem = mi->Caption;
MainForm->Caption = AppCaption + "View/Edit a File";
if (HandleOpenDlgs("*.*")) {
ResultPnl->Parent = this;
ResultPnl->Align = alClient;
String File = OpenDlg->FileName;
CreateNewPage(ExtractFileName(File),File);
BackBtn->Enabled = true;
RunBtn->Enabled = false;
CmdStrRE->Text = "";
DestEd = "";
TRichEdit *RE = (TRichEdit *) PageCtl2->ActivePage->
Controls[0];
RE->SetFocus();
}
}
//------------------------------------------------------------
void TMainForm::CreateNewPage(String TabName, String LoadFile)
{
TTabSheet *NewTabSheet = new TTabSheet(this);
NewTabSheet->Caption = TabName;
NewTabSheet->PageControl = PageCtl2;
TRichEdit *NewRichEdit = new TRichEdit(this);
NewRichEdit->ScrollBars = ssBoth;
NewRichEdit->PlainText = true;
NewRichEdit->WordWrap = true;
NewRichEdit->Parent = NewTabSheet;
NewRichEdit->Align = alClient;
NewRichEdit->PopupMenu = PopupMenu1;
PageCtl2->ActivePage = PageCtl2->Pages[PageCtl2->PageCount - 1];
try {
if (LoadFile != "None")
NewRichEdit->Lines->LoadFromFile(LoadFile);
}
catch(...) {
ShowMessage("Unable to open file " + LoadFile);
return;
}
ResultPnl->Parent = this;
ResultPnl->Align = alClient;
ResultPnl->Show();
BackBtn->Enabled = true;
}
void __fastcall TMainForm::Operations(TObject *Sender)
{
if (SourceFileSelected) {
TFontStyles BoldFnt;
TCheckBox* cb = dynamic_cast<TCheckBox *>(Sender);
if (cb->State == cbChecked) {
cb->Font->Color = clBlue;
BoldFnt << fsBold;
cb->Font->Style = BoldFnt;
}
else {
cb->Font->Color = clBlack;
BoldFnt >> fsBold;
cb->Font->Style = BoldFnt;
}
CmdStrRE->Text = PageCtl->ActivePage->Caption + " ";
OptionString = "";
PrepareCmdLine();
}
else ShowMessage("Select a File!");
}
//------------------------------------------------------------
int TMainForm::GetFileSize(String SFile)
{
struct stat statbuf;
stat(SFile.c_str(), &statbuf);
return statbuf.st_size;
}
void __fastcall TMainForm::SymbolBtn(TObject *Sender)
{
if (SourceFileSelected) {
TButton* btn = dynamic_cast<TButton *>(Sender);
CmdStrRE->Text = CmdStrRE->Text + " " + btn->Caption;
}
else ShowMessage("Select a File!");
}
//------------------------------------------------------------
void __fastcall TMainForm::Button10Click(TObject *Sender)
{
BCCPnl2->Hide();
BCCPnl3->Hide();
BCCPnl1->Show();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::Button8Click(TObject *Sender)
{
BCCPnl1->Hide();
BCCPnl3->Hide();
BCCPnl2->Show();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::Button11Click(TObject *Sender)
{
BCCPnl1->Hide();
BCCPnl2->Hide();
BCCPnl3->Show();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ViewResults(TObject *Sender)
{
ResultPnl->Parent = this;
ResultPnl->Align = alClient;
ResultPnl->Show();
BackBtn->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::RevisePath1Click(TObject *Sender)
{
CreateNewPage("Path", WintoolsDir + "Path.txt");
String AddPath;
if (!InputQuery("Add to Path", "",AddPath)) return;
TRichEdit *RE = (TRichEdit *) PageCtl2->ActivePage->
Controls[0];
RE->Lines->Add(AddPath);
RE->Lines->SaveToFile(WintoolsDir + "Path.txt");
SetEnvPath();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::CmdStrREMouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
CmdStrRE->Align = alClient;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::PageCtlMouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
CmdStrRE->Align = alNone;
CmdStrRE->Width = 343;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ResultPnlMouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
CmdStrRE->Align = alNone;
CmdStrRE->Width = 343;
}
//---------------------------------------------------------------------------