- BORLAND/: Borland C++ 4.52 (chosen over 4.5 by byte-match: CODE/RP/CW32.LIB
is identical to 4.52's install lib). BCC32/TLINK32/TLIB/MAKE run natively on
Win11; CODE/BT/OPT.MAK is the shipped BTL4OPT.EXE's exact flag recipe
(extender = Borland PowerPack DPMI32, not Phar Lap TNT).
- restoration/source410/: the literal 1995-form reconstruction of the missing
BT game source (never mixed into CODE/). Round 1-3 state:
* 6 of 10 surviving original TUs COMPILE CLEAN under the period toolchain
(BTMSSN, BTCNSL, BTSCNRL, BTTEAM, BTL4MODE, BTL4ARND) - first builds
since 1996.
* BT_L4/BTL4APP.CPP pilot reconstruction: 12/12 functions, Fail() lands on
its binary-recorded line 400 exactly.
* BT/BTCNSL.HPP: console wire IDs recovered from the binary's ctors
(Killed=9, Damaged=10, ScoreUpdate=13, DeathWithoutHonor=15 [T1];
TeamScore=12 flagged [T4]).
* MUNGA/: 8 engine-header backfills back-dated from the BT412 WinTesla tree
(VDATA numbering decomp-verified; AUDREND's OpenAL-era virtual removed -
the period compiler is the drift detector).
* Tooling: backdate.py (WinTesla->1995 header transform), compile410.sh
(per-TU verification sweep under authentic OPT.MAK flags).
* README: corrected roadmap - MECH.HPP is the capstone grown with the mech
TU reconstructions; BTREG.CPP green = the header-family milestone.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
425 lines
11 KiB
C++
425 lines
11 KiB
C++
//----------------------------------------------------------------------------
|
|
// ObjectWindows - (C) Copyright 1991, 1993 by Borland International
|
|
//----------------------------------------------------------------------------
|
|
#include <owl\owlpch.h>
|
|
#include <owl\applicat.h>
|
|
#include <owl\framewin.h>
|
|
#include <owl\dialog.h>
|
|
#include <owl\radiobut.h>
|
|
#include <owl\edit.h>
|
|
#include <owl\listbox.h>
|
|
#include <owl\combobox.h>
|
|
#include <owl\scrollba.h>
|
|
#include <string.h>
|
|
#include <cstring.h>
|
|
|
|
#include "transfer.h"
|
|
|
|
const MAXNAMELEN = 26;
|
|
const MAXADDRLEN = 47;
|
|
const MAXCITYSTLEN = 27;
|
|
const MAXCOUNTRYLEN = 27;
|
|
const MAXLBDATALEN = 30;
|
|
const MAXCBDATALEN = 30;
|
|
|
|
const WM_DIALOG_CLOSED = WM_USER + 100;
|
|
|
|
struct TTransferStruct {
|
|
TTransferStruct();
|
|
|
|
BOOL MrTitle;
|
|
BOOL MsTitle;
|
|
BOOL DrTitle;
|
|
char NameEdit[MAXNAMELEN];
|
|
char Addr1Edit[MAXADDRLEN];
|
|
char Addr2Edit[MAXADDRLEN];
|
|
char CityStEdit[MAXCITYSTLEN];
|
|
char CountryEdit[MAXCOUNTRYLEN];
|
|
BOOL CheckBox1;
|
|
BOOL CheckBox2;
|
|
BOOL CheckBox3;
|
|
TListBoxData ListBoxData;
|
|
char LBDataEdit[MAXLBDATALEN];
|
|
TComboBoxData ComboBoxData;
|
|
char CBDataEdit[MAXCBDATALEN];
|
|
TScrollBarData ScrollBarData;
|
|
};
|
|
|
|
TTransferStruct::TTransferStruct()
|
|
{
|
|
MrTitle = MsTitle = DrTitle = FALSE;
|
|
NameEdit[0] = 0;
|
|
Addr1Edit[0] = 0;
|
|
Addr2Edit[0] = 0;
|
|
CityStEdit[0] = 0;
|
|
CountryEdit[0] = 0;
|
|
|
|
CheckBox1 = CheckBox2 = CheckBox3 = 0;
|
|
|
|
//
|
|
// Pre-fill the listbox. It may be sorted, and/or multiselect
|
|
//
|
|
ListBoxData.AddString("Zebra");
|
|
ListBoxData.AddString("Aardvark");
|
|
ListBoxData.AddString("Ocelot");
|
|
ListBoxData.AddString("Beaver");
|
|
ListBoxData.AddString("Emu");
|
|
ListBoxData.Select(2); // Ocelot
|
|
ListBoxData.Select(3); // Beaver
|
|
LBDataEdit[0] = 0;
|
|
|
|
//
|
|
// Pre-fill the combobox
|
|
//
|
|
ComboBoxData.AddString("Red");
|
|
ComboBoxData.AddString("Pink");
|
|
ComboBoxData.AddString("Blue");
|
|
ComboBoxData.AddString("Green");
|
|
ComboBoxData.AddString("Yellow");
|
|
ComboBoxData.Select(2); // Blue
|
|
CBDataEdit[0] = 0;
|
|
|
|
ScrollBarData.LowValue = 0;
|
|
ScrollBarData.HighValue = 100;
|
|
ScrollBarData.Position = 50;
|
|
}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
class TTransferDialog : public TDialog {
|
|
public:
|
|
TTransferDialog(TWindow* parent, int resId, TTransferStruct& ts);
|
|
void CmAddListBox();
|
|
void CmAddComboBox();
|
|
void EvDestroy();
|
|
|
|
void CloseWindow(int ret);
|
|
|
|
private:
|
|
TListBox* ListBox; // cache for transfer access.
|
|
TComboBox* ComboBox;
|
|
TEdit* ListBoxData;
|
|
TEdit* ComboBoxData;
|
|
TScrollBar* ScrollBar;
|
|
|
|
DECLARE_RESPONSE_TABLE(TTransferDialog);
|
|
|
|
};
|
|
|
|
DEFINE_RESPONSE_TABLE1(TTransferDialog, TDialog)
|
|
EV_COMMAND(CM_ADDLISTBOX, CmAddListBox),
|
|
EV_COMMAND(CM_ADDCOMBOBOX, CmAddComboBox),
|
|
EV_WM_DESTROY,
|
|
END_RESPONSE_TABLE;
|
|
|
|
TTransferDialog::TTransferDialog(TWindow* parent, int resId, TTransferStruct& ts)
|
|
: TDialog(parent, resId)
|
|
{
|
|
new TRadioButton(this, ID_MRBUTTON, 0);
|
|
new TRadioButton(this, ID_MSBUTTON, 0);
|
|
new TRadioButton(this, ID_DRBUTTON, 0);
|
|
new TEdit(this, ID_NAMEEDIT, sizeof(ts.NameEdit));
|
|
new TEdit(this, ID_ADDR1EDIT, sizeof(ts.Addr1Edit));
|
|
new TEdit(this, ID_ADDR2EDIT, sizeof(ts.Addr2Edit));
|
|
new TEdit(this, ID_CITYSTEDIT, sizeof(ts.CityStEdit));
|
|
new TEdit(this, ID_COUNTRYEDIT, sizeof(ts.CountryEdit));
|
|
new TCheckBox(this, ID_CHECKBOX1);
|
|
new TCheckBox(this, ID_CHECKBOX2);
|
|
new TCheckBox(this, ID_CHECKBOX3);
|
|
ListBox = new TListBox(this, ID_LISTBOX);
|
|
ListBoxData = new TEdit(this, ID_LISTBOXDATA, sizeof(ts.LBDataEdit));
|
|
ComboBox = new TComboBox(this, ID_COMBOBOX, MAXCBDATALEN);
|
|
ComboBoxData = new TEdit(this, ID_COMBOBOXDATA, sizeof(ts.CBDataEdit));
|
|
ScrollBar = new TScrollBar(this, ID_SCROLLBAR);
|
|
|
|
SetTransferBuffer(&ts);
|
|
}
|
|
|
|
//
|
|
// Lets transfer on close even though we are modeless
|
|
//
|
|
void
|
|
TTransferDialog::CloseWindow(int ret)
|
|
{
|
|
TransferData(tdGetData);
|
|
TDialog::CloseWindow(ret);
|
|
}
|
|
|
|
|
|
//
|
|
// Add a string to the list box.
|
|
//
|
|
void
|
|
TTransferDialog::CmAddListBox()
|
|
{
|
|
char buf[MAXLBDATALEN] = "";
|
|
|
|
ListBoxData->GetLine(buf, MAXLBDATALEN - 1, 0);
|
|
if (buf[0] != '\0')
|
|
ListBox->AddString(buf);
|
|
ListBoxData->DeleteLine(0);
|
|
}
|
|
|
|
//
|
|
// Add a string to the combo box.
|
|
//
|
|
void
|
|
TTransferDialog::CmAddComboBox()
|
|
{
|
|
char buf[MAXCBDATALEN] = "";
|
|
|
|
ComboBoxData->GetLine(buf, MAXCBDATALEN - 1, 0);
|
|
if (buf[0] != '\0')
|
|
ComboBox->AddString(buf);
|
|
ComboBoxData->DeleteLine(0);
|
|
}
|
|
|
|
void
|
|
TTransferDialog::EvDestroy()
|
|
{
|
|
// tell application that dialog is closing.
|
|
Parent->PostMessage(WM_DIALOG_CLOSED);
|
|
TDialog::EvDestroy();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
class TTransferInfoDialog : public TDialog {
|
|
public:
|
|
TTransferInfoDialog(TWindow* parent, int resId, string& info);
|
|
void SetupWindow();
|
|
|
|
private:
|
|
TEdit* DisplayInfo;
|
|
string& Info;
|
|
};
|
|
|
|
TTransferInfoDialog::TTransferInfoDialog(TWindow* parent, int resId, string& info)
|
|
: TDialog(parent, resId), Info(info)
|
|
{
|
|
DisplayInfo = new TEdit(this, ID_INFO, 2000);
|
|
}
|
|
|
|
void
|
|
TTransferInfoDialog::SetupWindow()
|
|
{
|
|
TDialog::SetupWindow();
|
|
DisplayInfo->Insert(Info.c_str());
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
class TTransferWindow : public TFrameWindow {
|
|
public:
|
|
TTransferWindow(TWindow* parent, const char* title);
|
|
~TTransferWindow() {
|
|
delete[] Label;
|
|
}
|
|
|
|
void CmDialog();
|
|
void CmTransfer();
|
|
void CmDialogEnable(TCommandEnabler& commandHandler);
|
|
LRESULT EvDialogClosed(WPARAM wParam, LPARAM lParam);
|
|
|
|
private:
|
|
TTransferStruct TransferStruct;
|
|
TTransferDialog* TransferDialog;
|
|
char* Label; // string to print on transfer.
|
|
|
|
DECLARE_RESPONSE_TABLE(TTransferWindow);
|
|
};
|
|
|
|
DEFINE_RESPONSE_TABLE1(TTransferWindow, TFrameWindow)
|
|
EV_COMMAND(CM_DIALOG, CmDialog),
|
|
EV_COMMAND(CM_TRANSFER, CmTransfer),
|
|
EV_COMMAND_ENABLE(CM_DIALOG, CmDialogEnable),
|
|
EV_MESSAGE(WM_DIALOG_CLOSED, EvDialogClosed),
|
|
END_RESPONSE_TABLE;
|
|
|
|
|
|
TTransferWindow::TTransferWindow(TWindow* parent, const char* title)
|
|
: TFrameWindow(parent, title),
|
|
TWindow(parent, title)
|
|
{
|
|
AssignMenu(ID_MENU);
|
|
Label = new char[1024];
|
|
Label[0] = 0;
|
|
TransferDialog = 0;
|
|
}
|
|
|
|
//
|
|
// Create modeless dialog.
|
|
//
|
|
void
|
|
TTransferWindow::CmDialog()
|
|
{
|
|
TransferDialog = new TTransferDialog(this, IDD_DIALOG, TransferStruct);
|
|
TransferDialog->Create();
|
|
TransferDialog->ShowWindow(SW_SHOW);
|
|
}
|
|
|
|
//
|
|
// Transfer data and display.
|
|
//
|
|
void
|
|
TTransferWindow::CmTransfer()
|
|
{
|
|
if (TransferDialog)
|
|
TransferDialog->Transfer(&TransferStruct, tdGetData);
|
|
|
|
TStringArray& lbStrArray = TransferStruct.ListBoxData.GetStrings();
|
|
TStringArray& cbStrArray = TransferStruct.ComboBoxData.GetStrings();
|
|
unsigned lbNItems = lbStrArray.GetItemsInContainer();
|
|
unsigned cbNItems = cbStrArray.GetItemsInContainer();
|
|
unsigned i;
|
|
char buf[10];
|
|
string displayInfo;
|
|
|
|
// mailing info.
|
|
//
|
|
displayInfo += "Mailing Label Entered:";
|
|
displayInfo += "\r\n";
|
|
if (TransferStruct.MrTitle)
|
|
displayInfo += "Mr. ";
|
|
else if (TransferStruct.MsTitle)
|
|
displayInfo += "Ms. ";
|
|
else if (TransferStruct.DrTitle)
|
|
displayInfo += "Dr. ";
|
|
else
|
|
displayInfo += "??. ";
|
|
displayInfo += TransferStruct.NameEdit;
|
|
displayInfo += "\r\n";
|
|
displayInfo += TransferStruct.Addr1Edit;
|
|
displayInfo += "\r\n";
|
|
if (strcmp(TransferStruct.Addr2Edit, "") != 0) {
|
|
displayInfo += TransferStruct.Addr2Edit;
|
|
displayInfo += "\r\n";
|
|
}
|
|
displayInfo += TransferStruct.CityStEdit;
|
|
displayInfo += "\r\n";
|
|
displayInfo += TransferStruct.CountryEdit;
|
|
displayInfo += "\r\n";
|
|
displayInfo += "\r\n";
|
|
|
|
// check boxes.
|
|
//
|
|
if (TransferStruct.CheckBox1)
|
|
displayInfo += "CheckBox #1 checked.\r\n";
|
|
else
|
|
displayInfo += "CheckBox #1 not checked.\r\n";
|
|
|
|
if (TransferStruct.CheckBox2)
|
|
displayInfo += "CheckBox #2 checked.\r\n";
|
|
else
|
|
displayInfo += "CheckBox #2 not checked.\r\n";
|
|
|
|
if (TransferStruct.CheckBox3)
|
|
displayInfo += "CheckBox #3 checked.\r\n\r\n";
|
|
else
|
|
displayInfo += "CheckBox #3 not checked.\r\n\r\n";
|
|
|
|
// list box strings.
|
|
//
|
|
if (lbNItems != 0) {
|
|
TStringArrayIterator iter(lbStrArray);
|
|
displayInfo += "First 5 ListBox strings:\r\n";
|
|
for (i = 0; i < lbNItems && i < 5; i++, iter++) {
|
|
displayInfo += " ";
|
|
displayInfo += iter.Current();
|
|
displayInfo += "\r\n";
|
|
}
|
|
displayInfo += "\r\n";
|
|
|
|
displayInfo += "Listbox selection\r\n ";
|
|
string sel;
|
|
TransferStruct.ListBoxData.GetSelString(sel);
|
|
displayInfo += sel;
|
|
displayInfo += "\r\n";
|
|
}
|
|
|
|
// strings from edit control for list box data.
|
|
//
|
|
if (TransferStruct.LBDataEdit[0] != '\0') {
|
|
displayInfo += "String from Edit control for ListBox data:\r\n ";
|
|
displayInfo += TransferStruct.LBDataEdit;
|
|
displayInfo += "\r\n";
|
|
}
|
|
|
|
// combo box strings.
|
|
//
|
|
if (cbNItems != 0) {
|
|
displayInfo += "First 5 ComboBox strings:\r\n";
|
|
for (i = 0; i < cbNItems && i < 5; i++) {
|
|
displayInfo += " ";
|
|
displayInfo += cbStrArray[i];
|
|
displayInfo += "\r\n";
|
|
}
|
|
displayInfo += "\r\n";
|
|
|
|
displayInfo += "Combobox selection\r\n ";
|
|
displayInfo += TransferStruct.ComboBoxData.GetSelection();
|
|
displayInfo += "\r\n";
|
|
}
|
|
|
|
// strings from edit control for combo box data.
|
|
//
|
|
if (TransferStruct.CBDataEdit[0] != '\0') {
|
|
displayInfo += "String from Edit control for ComboBox data:\r\n ";
|
|
displayInfo += TransferStruct.CBDataEdit;
|
|
}
|
|
|
|
// scroll bar info.
|
|
//
|
|
displayInfo += "\r\nScrollBar Info:\r\n Low value: ";
|
|
itoa(TransferStruct.ScrollBarData.LowValue, buf, 10);
|
|
displayInfo += buf;
|
|
displayInfo += " High value: ";
|
|
itoa(TransferStruct.ScrollBarData.HighValue, buf, 10);
|
|
displayInfo += buf;
|
|
displayInfo += " Current value: ";
|
|
itoa(TransferStruct.ScrollBarData.Position, buf, 10);
|
|
displayInfo += buf;
|
|
|
|
// display info.
|
|
//
|
|
TTransferInfoDialog infoDialog(this, ID_DISPLAY_INFO, displayInfo);
|
|
infoDialog.Execute();
|
|
}
|
|
|
|
//
|
|
// Disable the 'App|Dialog' menu item if dialog is already active.
|
|
//
|
|
void
|
|
TTransferWindow::CmDialogEnable(TCommandEnabler& commandHandler)
|
|
{
|
|
commandHandler.Enable(!TransferDialog);
|
|
}
|
|
|
|
//
|
|
// The dialog has closed, notified by dialog.
|
|
//
|
|
LRESULT
|
|
TTransferWindow::EvDialogClosed(WPARAM, LPARAM)
|
|
{
|
|
TransferDialog = 0;
|
|
return 1;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
class TTransferApp : public TApplication {
|
|
public:
|
|
TTransferApp() : TApplication("TransferTest") {}
|
|
|
|
void InitMainWindow()
|
|
{MainWindow = new TTransferWindow(0, "Test Dialog Transfer");}
|
|
};
|
|
|
|
int
|
|
OwlMain(int /*argc*/, char* /*argv*/ [])
|
|
{
|
|
return TTransferApp().Run();
|
|
}
|