- 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>
180 lines
3.7 KiB
C++
180 lines
3.7 KiB
C++
//----------------------------------------------------------------------------
|
|
// ObjectWindows - (C) Copyright 1991, 1993 by Borland International
|
|
//
|
|
// Windows desktop screensaver classes.
|
|
//----------------------------------------------------------------------------
|
|
#include <owl\owlpch.h>
|
|
#include <owl\dialog.h>
|
|
#include "tscrnsav.h"
|
|
|
|
DEFINE_RESPONSE_TABLE1(TScrnSavWindow, TFrameWindow)
|
|
EV_WM_MOUSEMOVE,
|
|
EV_WM_LBUTTONDOWN,
|
|
EV_WM_RBUTTONDOWN,
|
|
EV_WM_MBUTTONDOWN,
|
|
EV_WM_ACTIVATE,
|
|
EV_WM_ACTIVATEAPP,
|
|
EV_WM_KEYDOWN,
|
|
EV_WM_SYSKEYDOWN,
|
|
EV_WM_SYSCOMMAND,
|
|
END_RESPONSE_TABLE;
|
|
|
|
TScrnSavWindow::TScrnSavWindow(TWindow* parent, const char* title, TModule* module)
|
|
: TFrameWindow(parent, title, 0, FALSE, module)
|
|
{
|
|
ShowCursor(FALSE);
|
|
Attr.Style = WS_POPUP;
|
|
}
|
|
|
|
TScrnSavWindow::~TScrnSavWindow()
|
|
{
|
|
ShowCursor(TRUE);
|
|
}
|
|
|
|
void
|
|
TScrnSavWindow::GetWindowClass(WNDCLASS& wndClass)
|
|
{
|
|
TWindow::GetWindowClass(wndClass);
|
|
wndClass.hIcon = 0;
|
|
wndClass.style |= CS_SAVEBITS;
|
|
wndClass.hbrBackground = (HBRUSH)GetStockObject(NULL_BRUSH);
|
|
}
|
|
|
|
void
|
|
TScrnSavWindow::SetupWindow()
|
|
{
|
|
TFrameWindow::SetupWindow();
|
|
GetCursorPos(PrevPt);
|
|
TRect r;
|
|
::GetWindowRect(GetDesktopWindow(), &r);
|
|
MoveWindow(r, TRUE);
|
|
}
|
|
|
|
void
|
|
TScrnSavWindow::EvMouseMove(UINT, TPoint& point)
|
|
{
|
|
if (point != PrevPt)
|
|
PostMessage(WM_CLOSE);
|
|
}
|
|
|
|
void
|
|
TScrnSavWindow::EvLButtonDown(UINT, TPoint&)
|
|
{
|
|
PostMessage(WM_CLOSE);
|
|
}
|
|
|
|
void
|
|
TScrnSavWindow::EvRButtonDown(UINT, TPoint&)
|
|
{
|
|
PostMessage(WM_CLOSE);
|
|
}
|
|
|
|
void
|
|
TScrnSavWindow::EvMButtonDown(UINT, TPoint&)
|
|
{
|
|
PostMessage(WM_CLOSE);
|
|
}
|
|
|
|
void
|
|
TScrnSavWindow::EvActivate(UINT active, BOOL, HWND)
|
|
{
|
|
if (!active)
|
|
PostMessage(WM_CLOSE);
|
|
}
|
|
|
|
#if defined(__WIN32__)
|
|
void TScrnSavWindow::EvActivateApp(BOOL active, HANDLE)
|
|
#else
|
|
void TScrnSavWindow::EvActivateApp(BOOL active, HTASK)
|
|
#endif
|
|
{
|
|
if (!active)
|
|
PostMessage(WM_CLOSE);
|
|
}
|
|
|
|
void
|
|
TScrnSavWindow::EvKeyDown(UINT, UINT, UINT)
|
|
{
|
|
PostMessage(WM_CLOSE);
|
|
}
|
|
|
|
void
|
|
TScrnSavWindow::EvSysKeyDown(UINT, UINT, UINT)
|
|
{
|
|
PostMessage(WM_CLOSE);
|
|
}
|
|
|
|
void
|
|
TScrnSavWindow::EvSysCommand(UINT cmdType, TPoint&)
|
|
{
|
|
if ((cmdType & 0xFFF0) != SC_SCREENSAVE)
|
|
DefaultProcessing();
|
|
}
|
|
|
|
int
|
|
TScrnSavApp::Run()
|
|
{
|
|
if (strcmp(lpCmdLine, "/c") == 0 || strcmp(lpCmdLine, "-c") == 0) {
|
|
Configuring = TRUE;
|
|
InitConfigDialog();
|
|
|
|
//
|
|
// Get the desktop control panel applet's window handle and make a
|
|
// TWindow out of it.
|
|
//
|
|
HWND deskAppletHWnd = ::FindWindow(WC_DIALOG, "Desktop");
|
|
TWindow* deskAppletWnd = 0;
|
|
if (deskAppletHWnd)
|
|
deskAppletWnd = new TWindow(deskAppletHWnd);
|
|
|
|
//
|
|
// Set our config dialog to have the applet window as its parent if
|
|
// available
|
|
//
|
|
if (deskAppletWnd)
|
|
ConfigureDialog->SetParent(deskAppletWnd);
|
|
ConfigureDialog->Execute();
|
|
delete ConfigureDialog;
|
|
|
|
//
|
|
// When our alias is destructed, it remove its thunk, & restores old proc
|
|
//
|
|
delete deskAppletWnd;
|
|
return Status;
|
|
|
|
} else {
|
|
Configuring = FALSE;
|
|
return TApplication::Run();
|
|
}
|
|
}
|
|
|
|
void
|
|
TScrnSavApp::InitMainWindow()
|
|
{
|
|
Configuring = FALSE;
|
|
InitScrnSavWindow();
|
|
if (ScrnSavWnd)
|
|
MainWindow = ScrnSavWnd;
|
|
LastTime = GetCurrentTime();
|
|
}
|
|
|
|
void
|
|
TScrnSavApp::InitScrnSavWindow()
|
|
{
|
|
ScrnSavWnd = new TScrnSavWindow(0, 0, 0);
|
|
}
|
|
|
|
BOOL
|
|
TScrnSavApp::IdleAction(long)
|
|
{
|
|
if (!Configuring) {
|
|
uint32 diffTime = GetCurrentTime() - LastTime;
|
|
if (Speed == 2 || Speed == 1 && diffTime > 10 || diffTime > 50) {
|
|
ScrnSavWnd->AnimateScreen();
|
|
LastTime = GetCurrentTime();
|
|
}
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|