Files
TeslaRel410/BORLAND/BC45/EXAMPLES/OWL/OWLAPI/CMDENABL/CMDENAB2.CPP
T
CydandClaude Fable 5 63312e07f9 source410: literal 4.10 source reconstruction + BC++ 4.52 fleet toolchain archived
- 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>
2026-07-19 07:33:26 -05:00

160 lines
4.0 KiB
C++

//----------------------------------------------------------------------------
// ObjectWindows - (C) Copyright 1994 by Borland International
// Command-enabling sample application
// Second version implements command enabling for file commands.
//----------------------------------------------------------------------------
#include <owl/owlpch.h>
#include <owl/applicat.h>
#include <owl/framewin.h>
#include "cmdenabl.h"
// Class definitions:
// TCmdEnableApp -- application object initializes TApplication, overrides
// InitMainWindow.
class TCmdEnableApp : public TApplication
{
public:
TCmdEnableApp() : TApplication() {}
protected:
void InitMainWindow();
};
// TCmdEnableWindow -- window object initializes TWindow, adds four event
// handlers, adds response table for four events.
class TCmdEnableWindow : public TWindow {
public:
TCmdEnableWindow(TWindow* parent = 0);
protected:
bool isDirty;
bool isNewFile;
// Event handlers
void CmFileNew();
void CmFileOpen();
void CmFileSave();
void CmFileSaveAs();
void CmToggleDirty();
void CmToggleNew();
void CmShowState();
// Command-enabling functions
void CeFileNew(TCommandEnabler&);
void CeFileOpen(TCommandEnabler&);
void CeFileSave(TCommandEnabler&);
DECLARE_RESPONSE_TABLE(TCmdEnableWindow);
};
DEFINE_RESPONSE_TABLE1(TCmdEnableWindow, TWindow)
EV_COMMAND(CM_FILENEW, CmFileNew),
EV_COMMAND(CM_FILEOPEN, CmFileOpen),
EV_COMMAND(CM_FILESAVE, CmFileSave),
EV_COMMAND(CM_FILESAVEAS, CmFileSaveAs),
EV_COMMAND(CM_TOGGLEDIRTY, CmToggleDirty),
EV_COMMAND(CM_TOGGLENEW, CmToggleNew),
EV_COMMAND(CM_SHOWSTATE, CmShowState),
EV_COMMAND_ENABLE(CM_FILENEW, CeFileNew),
EV_COMMAND_ENABLE(CM_FILEOPEN, CeFileOpen),
EV_COMMAND_ENABLE(CM_FILESAVE, CeFileSave),
END_RESPONSE_TABLE;
// Put the OwlMain here just to get it out of the way
int OwlMain(int /*argc*/, char* /*argv*/ [])
{
return TCmdEnableApp().Run();
}
// Class function definitions
// class TCmdEnableApp
// TCmdEnableApp::InitMainWindow
void
TCmdEnableApp::InitMainWindow()
{
// Construct the frame window
TFrameWindow* frame = new TFrameWindow(0, "Command-enabling sample application", new TCmdEnableWindow, true);
// Set the main window and its menu
SetMainWindow(frame);
GetMainWindow()->AssignMenu("COMMANDS");
}
TCmdEnableWindow::TCmdEnableWindow(TWindow *parent) : TWindow(parent)
{
isNewFile = true;
isDirty = false;
}
void
TCmdEnableWindow::CmFileNew()
{
isDirty=false;
isNewFile=true;
MessageBox("Opened a new file.\nisDirty=false\nisNewFile=true", "File action taken");
}
void
TCmdEnableWindow::CmFileOpen()
{
isDirty=false;
isNewFile=false;
MessageBox("Opened an existing file.\nisDirty=false\nisNewFile=false", "File action taken");
}
void
TCmdEnableWindow::CmFileSave()
{
isDirty=false;
isNewFile=false;
MessageBox("Saved an existing file.\nisDirty=false\nisNewFile=false", "File action taken");
}
void
TCmdEnableWindow::CmFileSaveAs()
{
isDirty=false;
isNewFile=false;
MessageBox("Saved a file under a new name.\nisDirty=false\nisNewFile=false", "File action taken");
}
void
TCmdEnableWindow::CmToggleDirty()
{
isDirty=!isDirty;
}
void
TCmdEnableWindow::CmToggleNew()
{
isNewFile=!isNewFile;
}
void
TCmdEnableWindow::CmShowState()
{
string str(isDirty ? "isDirty = true\n" : "isDirty = false\n");
str += (isNewFile ? "isNewFile = true" : "isNewFile = false");
MessageBox(str.c_str(), "Current state");
}
void
TCmdEnableWindow::CeFileNew(TCommandEnabler& ce)
{
// Enable CmFileNew if not dirty
ce.Enable(!isDirty);
}
void
TCmdEnableWindow::CeFileOpen(TCommandEnabler& ce)
{
// Enable CmFileSave if not new file and is dirty.
ce.Enable(!isNewFile && isDirty);
}
void
TCmdEnableWindow::CeFileSave(TCommandEnabler& ce)
{
// Enable CmFileSave if not new file
ce.Enable(!isNewFile);
}