- 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>
194 lines
6.3 KiB
Plaintext
194 lines
6.3 KiB
Plaintext
<<[H]TListBox [[TListBox]]
|
|
##{hheader.snp}
|
|
#include <owl\owlpch.h>
|
|
#pragma hdrstop
|
|
|
|
|
|
##<<TApplication QUERY_FILENAME_CPP [[Filename]]
|
|
#include "[[Filename]].rh" // Definition of all resources.
|
|
|
|
|
|
//{{TListBox = [[TListBox]]}}
|
|
class [[TListBox]] : public TListBox {
|
|
public:
|
|
[[TListBox]] (TWindow* parent, int id, int x, int y, int w, int h, TModule* module = 0);
|
|
virtual ~[[TListBox]] ();
|
|
##--BEGIN-- @OPT_APPL_PRINTING
|
|
|
|
//{{[[TListBox]]VIRTUAL_BEGIN}}
|
|
public:
|
|
virtual void Paint (TDC& dc, bool erase, TRect& rect);
|
|
##:DBVirtual(\\"[[TListBox]]", "Paint")
|
|
//{{[[TListBox]]VIRTUAL_END}}
|
|
//{{[[TListBox]]RSP_TBL_BEGIN}}
|
|
protected:
|
|
void EvGetMinMaxInfo (MINMAXINFO far& minmaxinfo);
|
|
//{{[[TListBox]]RSP_TBL_END}}
|
|
DECLARE_RESPONSE_TABLE([[TListBox]]);
|
|
##--END-- @OPT_APPL_PRINTING
|
|
}; //{{[[TListBox]]}}
|
|
##{hfooter.snp}
|
|
>>[H]TListBox [[TListBox]]
|
|
|
|
|
|
<<[CPP]TListBox [[TListBox]]
|
|
##{cheader.snp}
|
|
#include <owl\owlpch.h>
|
|
#pragma hdrstop
|
|
|
|
##<<TApplication QUERY_FILE_H [[FileName]]
|
|
#include "[[FileName]]"
|
|
##--BEGIN-- !@OPT_APPL_DOCVIEW
|
|
## --BEGIN-- @QUERY_APPL_MODEL == VALUE_MDI
|
|
##: <<TMDIChild QUERY_WIND_CLIENT [[Client]]
|
|
##: <<*Client QUERY_FILE_H [[FileName]]
|
|
#include "[[FileName]]"
|
|
## --END-- @QUERY_APPL_MODEL == VALUE_MDI
|
|
## --BEGIN-- @QUERY_APPL_MODEL == VALUE_SDI
|
|
|
|
## --END-- @QUERY_APPL_MODEL == VALUE_SDI
|
|
##--END-- !@OPT_APPL_DOCVIEW
|
|
##QUERY_FILE_H [[FileName]]
|
|
#include "[[FileName]]"
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
//{{[[TListBox]] Implementation}}
|
|
|
|
|
|
##--BEGIN-- @OPT_APPL_PRINTING
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Build a response table for all messages/commands handled
|
|
// by [[TListBox]] derived from TListBox.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
DEFINE_RESPONSE_TABLE1([[TListBox]], TListBox)
|
|
//{{[[TListBox]]RSP_TBL_BEGIN}}
|
|
##:DBResponse(\\"[[TListBox]]", "", "", "WM_GETMINMAXINFO", "")
|
|
EV_WM_GETMINMAXINFO,
|
|
//{{[[TListBox]]RSP_TBL_END}}
|
|
END_RESPONSE_TABLE;
|
|
|
|
|
|
##--END-- @OPT_APPL_PRINTING
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//////////////////////////////////////////////////////////
|
|
// [[TListBox]]
|
|
// ==========
|
|
// Construction/Destruction handling.
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
[[TListBox]]::[[TListBox]] (TWindow* parent, int id, int x, int y, int w, int h, TModule* module)
|
|
: TListBox(parent, id, x, y, w, h, module)
|
|
{
|
|
Attr.Style &= ~LBS_SORT; // Don't sort the list its a file.
|
|
|
|
##QUERY_WIND_STYLE [[StyleAttributes]]
|
|
##StyleAttributes != "" 3
|
|
// Override the default window style for TListBox.
|
|
[[StyleAttributes]]
|
|
|
|
##QUERY_WIND_BACKGRND [[BackgroundColor]]
|
|
##BackgroundColor != "" 3
|
|
// Change the window's background color
|
|
SetBkgndColor([[BackgroundColor]]);
|
|
|
|
// INSERT>> Your constructor code here.
|
|
|
|
}
|
|
|
|
|
|
[[TListBox]]::~[[TListBox]] ()
|
|
{
|
|
Destroy();
|
|
|
|
// INSERT>> Your destructor code here.
|
|
|
|
}
|
|
##--BEGIN-- @OPT_APPL_PRINTING == TRUE
|
|
|
|
|
|
##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
//
|
|
// Paint routine for Window, Printer, and PrintPreview for a TListBox client.
|
|
//
|
|
##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
void [[TListBox]]::Paint (TDC& dc, bool, TRect& rect)
|
|
{
|
|
##<<TApplication QUERY_CLASS_NAME [[TApplication]]
|
|
[[TApplication]] *theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
|
|
if (theApp) {
|
|
##:@QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
// Only paint if we're printing and we have something to paint, otherwise do nothing.
|
|
if (theApp->Printing && theApp->Printer && !rect.IsEmpty()) {
|
|
##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
|
|
// Use pageSize to get the size of the window to render into. For a Window it's the client area,
|
|
// for a printer it's the printer DC dimensions and for print preview it's the layout window.
|
|
TSize pageSize(rect.right - rect.left, rect.bottom - rect.top);
|
|
|
|
HFONT hFont = (HFONT)GetWindowFont();
|
|
TFont font("Arial", -12);
|
|
if (hFont == 0)
|
|
dc.SelectObject(font);
|
|
else
|
|
dc.SelectObject(TFont(hFont));
|
|
|
|
TEXTMETRIC tm;
|
|
int fHeight = (dc.GetTextMetrics(tm) == true) ? tm.tmHeight + tm.tmExternalLeading : 10;
|
|
|
|
##:@QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
// How many lines of this font can we fit on a page.
|
|
int linesPerPage = MulDiv(pageSize.cy, 1, fHeight);
|
|
if (linesPerPage) {
|
|
TPrintDialog::TData &printerData = theApp->Printer->GetSetup();
|
|
|
|
int maxPg = ((GetCount() / linesPerPage) + 1.0);
|
|
|
|
##:@QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
// Compute the number of pages to print.
|
|
printerData.MinPage = 1;
|
|
printerData.MaxPage = maxPg;
|
|
|
|
##:@QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
// Do the text stuff:
|
|
int fromPage = printerData.FromPage == -1 ? 1 : printerData.FromPage;
|
|
int toPage = printerData.ToPage == -1 ? 1 : printerData.ToPage;
|
|
char buffer[255];
|
|
int currentPage = fromPage;
|
|
|
|
while (currentPage <= toPage) {
|
|
int startLine = (currentPage - 1) * linesPerPage;
|
|
int lineIdx = 0;
|
|
while (lineIdx < linesPerPage) {
|
|
##:@QUERY_APPL_COMMENT == VALUE_VERBOSE
|
|
// If the string is no longer valid then there's nothing more to display.
|
|
if (GetString(buffer, startLine + lineIdx) < 0)
|
|
break;
|
|
dc.TabbedTextOut(TPoint(0, lineIdx * fHeight), buffer, strlen(buffer), 0, NULL, 0);
|
|
lineIdx++;
|
|
}
|
|
currentPage++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void [[TListBox]]::EvGetMinMaxInfo (MINMAXINFO far& minmaxinfo)
|
|
{
|
|
##<<TApplication QUERY_CLASS_NAME [[TApplication]]
|
|
[[TApplication]] *theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
|
|
if (theApp) {
|
|
if (theApp->Printing) {
|
|
minmaxinfo.ptMaxSize = TPoint(32000, 32000);
|
|
minmaxinfo.ptMaxTrackSize = TPoint(32000, 32000);
|
|
return;
|
|
}
|
|
}
|
|
TListBox::EvGetMinMaxInfo(minmaxinfo);
|
|
}
|
|
##--END-- @OPT_APPL_PRINTING == TRUE
|
|
>>[CPP]TListBox [[TListBox]]
|