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>
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
#--------------------------------------------------------------------------#
|
||||
# #
|
||||
# MAKEFILE for Persistent Stream examples #
|
||||
# #
|
||||
# Copyright (c) 1994 Borland International #
|
||||
# All Rights Reserved #
|
||||
# #
|
||||
# Usage: #
|
||||
# #
|
||||
# make -DCON32 for 32-bit Windows Console #
|
||||
# make MODEL={s|m|c|l} for 16-bit Windows using EasyWin #
|
||||
# make MODEL={s|m|c|l|h} -DDOS16 for 16-bit DOS #
|
||||
# #
|
||||
#--------------------------------------------------------------------------#
|
||||
|
||||
EXE = stream0
|
||||
EXEALL = stream0.exe stream1.exe stream2.exe stream3.exe
|
||||
|
||||
EXEMAKE= $(STREAM0) $(STREAM1) $(STREAM2) $(STREAM3)
|
||||
|
||||
STREAM0=$(EXERULE:stream0.obj=stream0.obj strmpnt.obj)
|
||||
STREAM1=$(STREAM0:stream0=stream1)
|
||||
STREAM2=$(STREAM0:stream0=stream2)
|
||||
STREAM3=$(STREAM0:stream0=stream3)
|
||||
|
||||
|
||||
!include $(BCEXAMPLEDIR)\bidsmake.gen
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
// Copyright (C) 1994 Borland International
|
||||
// stream0.cpp
|
||||
// Must link with strmpnt.cpp
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#include "strmpnt.h"
|
||||
|
||||
const char* FileName = "stream.dat";
|
||||
|
||||
void WriteStream(void)
|
||||
{
|
||||
ofpstream ofp(FileName);
|
||||
T2DPoint p2(3,5);
|
||||
ofp << &p2;
|
||||
}
|
||||
|
||||
void ReadStream(void)
|
||||
{
|
||||
ifpstream ifp(FileName);
|
||||
T2DPoint* p2 = 0;
|
||||
ifp >> p2;
|
||||
if( p2 )
|
||||
p2->Draw();
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
WriteStream();
|
||||
ReadStream();
|
||||
return 0;
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,32 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
// Copyright (C) 1994 Borland International
|
||||
// stream1.cpp
|
||||
// Must link with strmpnt.cpp
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#include "strmpnt.h"
|
||||
|
||||
const char* FileName = "stream.dat";
|
||||
|
||||
void WriteStream()
|
||||
{
|
||||
ofpstream ofp(FileName);
|
||||
T3DPoint p3(7,9,11);
|
||||
ofp << &p3;
|
||||
}
|
||||
|
||||
void ReadStream()
|
||||
{
|
||||
ifpstream ifp(FileName);
|
||||
T3DPoint* p3 = 0;
|
||||
ifp >> p3;
|
||||
if( p3 )
|
||||
p3->Draw();
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
WriteStream();
|
||||
ReadStream();
|
||||
return 0;
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,32 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
// Copyright (C) 1994 Borland International
|
||||
// stream2.cpp
|
||||
// Must link with strmpnt.cpp
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#include "strmpnt.h"
|
||||
|
||||
const char* FileName = "stream.dat";
|
||||
|
||||
void WriteStream()
|
||||
{
|
||||
ofpstream ofp(FileName);
|
||||
T2DPointColor p2c(7,9,0,1,2);
|
||||
ofp << &p2c;
|
||||
}
|
||||
|
||||
void ReadStream()
|
||||
{
|
||||
ifpstream ifp(FileName);
|
||||
T2DPointColor* p2c = 0;
|
||||
ifp >> p2c;
|
||||
if( p2c )
|
||||
p2c->Draw();
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
WriteStream();
|
||||
ReadStream();
|
||||
return 0;
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,32 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
// Copyright (C) 1994 Borland International
|
||||
// stream3.cpp
|
||||
// Must link with strmpnt.cpp
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#include "strmpnt.h"
|
||||
|
||||
const char* FileName = "stream.dat";
|
||||
|
||||
void WriteStream()
|
||||
{
|
||||
ofpstream ofp(FileName);
|
||||
T3DPoint p3(7,9,11);
|
||||
ofp << &p3;
|
||||
}
|
||||
|
||||
void ReadStream()
|
||||
{
|
||||
ifpstream ifp(FileName);
|
||||
T3DPoint* p3 = 0;
|
||||
ifp >> p3;
|
||||
if( p3 )
|
||||
p3->Draw();
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
WriteStream();
|
||||
ReadStream();
|
||||
return 0;
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,112 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
// Copyright (C) 1994 Borland International
|
||||
// strmpnt.cpp
|
||||
// Helper file for streaming examples.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#include "strmpnt.h"
|
||||
|
||||
//
|
||||
// T2DPoint
|
||||
//
|
||||
T2DPoint::T2DPoint(int i, int j)
|
||||
: X(i), Y(j)
|
||||
{
|
||||
}
|
||||
|
||||
void T2DPoint::Draw()
|
||||
{
|
||||
cout << "Drawing 2D point at " << X << ", " << Y << endl;
|
||||
}
|
||||
|
||||
IMPLEMENT_CASTABLE(T2DPoint);
|
||||
IMPLEMENT_STREAMABLE(T2DPoint);
|
||||
|
||||
void T2DPoint::Streamer::Write(opstream& os) const
|
||||
{
|
||||
os << GetObject()->X << GetObject()->Y;
|
||||
}
|
||||
|
||||
void *T2DPoint::Streamer::Read(ipstream& in, uint32) const
|
||||
{
|
||||
in >> GetObject()->X >> GetObject()->Y;
|
||||
return GetObject();
|
||||
}
|
||||
|
||||
//
|
||||
// T3DPoint
|
||||
//
|
||||
T3DPoint::T3DPoint(int i, int j, int k)
|
||||
: T2DPoint(i, j), Z(k)
|
||||
{
|
||||
}
|
||||
|
||||
void T3DPoint::Draw()
|
||||
{
|
||||
cout << "Drawing 3D point at " << X << ", " << Y << ", " << Z << endl;
|
||||
}
|
||||
|
||||
IMPLEMENT_CASTABLE1(T3DPoint, T2DPoint);
|
||||
IMPLEMENT_STREAMABLE1(T3DPoint, T2DPoint);
|
||||
|
||||
void T3DPoint::Streamer::Write(opstream& os) const
|
||||
{
|
||||
WriteBaseObject((T2DPoint*)GetObject(), os);
|
||||
os << GetObject()->Z;
|
||||
}
|
||||
|
||||
void *T3DPoint::Streamer::Read(ipstream& in, uint32) const
|
||||
{
|
||||
ReadBaseObject((T2DPoint*)GetObject(), in);
|
||||
in >> GetObject()->Z;
|
||||
return GetObject();
|
||||
}
|
||||
|
||||
//
|
||||
// Color
|
||||
//
|
||||
TColor::TColor(int i, int j, int k)
|
||||
: R(i), G(j), B(k)
|
||||
{
|
||||
}
|
||||
|
||||
void TColor::DisplayColor()
|
||||
{
|
||||
cout << "Color (" << R << ", " << G << ", " << B << ")" << endl;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// T2DPointColor
|
||||
//
|
||||
T2DPointColor::T2DPointColor(int x, int y, int r, int g, int b)
|
||||
: T2DPoint(x, y), TColor(r, g, b)
|
||||
{
|
||||
}
|
||||
|
||||
void T2DPointColor::Draw()
|
||||
{
|
||||
DisplayColor();
|
||||
T2DPoint::Draw();
|
||||
}
|
||||
|
||||
IMPLEMENT_CASTABLE2(T2DPointColor, T2DPoint, TColor);
|
||||
IMPLEMENT_STREAMABLE2(T2DPointColor, T2DPoint, TColor);
|
||||
|
||||
void T2DPointColor::Streamer::Write(opstream& os) const
|
||||
{
|
||||
WriteBaseObject((T2DPoint*)GetObject(), os);
|
||||
|
||||
// Since TColor is not streamable (i.e. not derived from TStreamableBase
|
||||
// we'll write out the data members of it only.
|
||||
// Similarly for T2DPointColor::Streamer::Read().
|
||||
os << GetObject()->R << GetObject()->G << GetObject()->B;
|
||||
}
|
||||
|
||||
void *T2DPointColor::Streamer::Read(ipstream& in, uint32) const
|
||||
{
|
||||
ReadBaseObject((T2DPoint*)GetObject(), in);
|
||||
in >> GetObject()->R >> GetObject()->G >> GetObject()->B;
|
||||
return GetObject();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
// Copyright (C) 1994 Borland International
|
||||
// strmpnt.h
|
||||
// ---------------------------------------------------------------------------
|
||||
#ifndef STRMPNT_H
|
||||
#define STRMPNT_H
|
||||
|
||||
#include <classlib/objstrm.h>
|
||||
#include <iostream.h>
|
||||
|
||||
//
|
||||
// T2DPoint
|
||||
//
|
||||
// Simple object used for streaming.
|
||||
//
|
||||
const int T2DPointVersion = 1;
|
||||
|
||||
class T2DPoint : public virtual TStreamableBase {
|
||||
public:
|
||||
T2DPoint(int i=0, int j=0);
|
||||
virtual void Draw();
|
||||
|
||||
protected:
|
||||
int X;
|
||||
int Y;
|
||||
|
||||
DECLARE_STREAMABLE(, T2DPoint, T2DPointVersion);
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// T3DPoint
|
||||
//
|
||||
// Multiple-derived object used for streaming.
|
||||
//
|
||||
const int T3DPointVersion = 2;
|
||||
|
||||
class T3DPoint : public T2DPoint {
|
||||
public:
|
||||
T3DPoint(int i=0, int j=0, int k=0);
|
||||
virtual void Draw();
|
||||
|
||||
protected:
|
||||
int Z;
|
||||
|
||||
DECLARE_STREAMABLE(, T3DPoint, T3DPointVersion);
|
||||
};
|
||||
|
||||
//
|
||||
// TColor
|
||||
//
|
||||
// A non-streamable base class to show streaming of a multiply inherited
|
||||
// class.
|
||||
//
|
||||
const int TColorVersion=3;
|
||||
|
||||
class TColor {
|
||||
public:
|
||||
TColor(int i=0, int j=0, int k=0);
|
||||
virtual void DisplayColor();
|
||||
|
||||
protected:
|
||||
int R;
|
||||
int G;
|
||||
int B;
|
||||
};
|
||||
|
||||
// T2DPointColor
|
||||
// Streaming of a multiply inherited class where one branch
|
||||
// of inheritence is streamable (T2DPoint) and one branch
|
||||
// is not (TColor).
|
||||
//
|
||||
// Notice in the definition of
|
||||
// Streamer::Read and Streamer::Write
|
||||
// there's code to stream the data members of the TColor.
|
||||
// If the code is not provided, then the members of TColor
|
||||
// will be lost.
|
||||
// If all branches of the inheritence are already streamable,
|
||||
// then the Read and Write functions are easily defined.
|
||||
// For example,
|
||||
// void Derived::Streamer::Write(opstream &os) const
|
||||
// {
|
||||
// WriteBaseObject((Base1 *)GetObject(), os);
|
||||
// WriteBaseObject((Base2 *)GetObject(), os);
|
||||
// ...
|
||||
// os << NewDataMember1;
|
||||
// os << NewDataMember2;
|
||||
// ...
|
||||
// }
|
||||
// Similarly for the Read function.
|
||||
const int T2DPointColorVersion=3;
|
||||
|
||||
class T2DPointColor : public T2DPoint, public TColor {
|
||||
public:
|
||||
T2DPointColor(int x, int y, int r, int g, int b);
|
||||
virtual void Draw();
|
||||
|
||||
DECLARE_STREAMABLE(, T2DPointColor, T2DPointColorVersion);
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user