From 6b216d0643235f6497dd163f20cb51aaa40a0aac Mon Sep 17 00:00:00 2001 From: Cyd Date: Sun, 19 Jul 2026 08:46:05 -0500 Subject: [PATCH] source410: link campaign - entire engine compiles (152/152), first true link, 52-symbol unresolved ledger build410.sh: merged-engine mass compile + BT TUs + tlib + authentic tlink32. Engine closure fixes: boxtree/set/l4gauge/filestrm back-dates, lamp<->gaugrend cycle broken (1995 form), APP.HPP Shutdown default, NetNub include path, DPL vpx shim, SOS 32-bit lib arbitration (SOSDBXC/SOSMBXC; SOSMW*=16-bit), WATTCP excluded (16-bit NetNub TSR side). UNRESOLVED-LEDGER.txt = the measured gap to a linking BTL4OPT.EXE. Co-Authored-By: Claude Fable 5 --- restoration/source410/MUNGA/APP.HPP | 2 +- restoration/source410/MUNGA/BOXTREE.HPP | 218 +++ restoration/source410/MUNGA/LAMP.HPP | 7 +- restoration/source410/MUNGA/SET.HPP | 266 ++++ restoration/source410/MUNGA_L4/L4GAUGE.HPP | 1173 +++++++++++++++++ restoration/source410/README.md | 14 + restoration/source410/UNRESOLVED-LEDGER.txt | 52 + restoration/source410/build410.sh | 159 +++ restoration/source410/override/FILESTRM.HPP | 49 + restoration/source410/shim/dpl/vpx/dpl_priv.h | 1 + 10 files changed, 1934 insertions(+), 7 deletions(-) create mode 100644 restoration/source410/MUNGA/BOXTREE.HPP create mode 100644 restoration/source410/MUNGA/SET.HPP create mode 100644 restoration/source410/MUNGA_L4/L4GAUGE.HPP create mode 100644 restoration/source410/UNRESOLVED-LEDGER.txt create mode 100644 restoration/source410/build410.sh create mode 100644 restoration/source410/override/FILESTRM.HPP create mode 100644 restoration/source410/shim/dpl/vpx/dpl_priv.h diff --git a/restoration/source410/MUNGA/APP.HPP b/restoration/source410/MUNGA/APP.HPP index d647fe9b..a1f15249 100644 --- a/restoration/source410/MUNGA/APP.HPP +++ b/restoration/source410/MUNGA/APP.HPP @@ -143,7 +143,7 @@ public: Stop(); virtual Logical - Shutdown(int remainingApps); + Shutdown(int remainingApps = 0); virtual void Terminate(); diff --git a/restoration/source410/MUNGA/BOXTREE.HPP b/restoration/source410/MUNGA/BOXTREE.HPP new file mode 100644 index 00000000..f28e43d0 --- /dev/null +++ b/restoration/source410/MUNGA/BOXTREE.HPP @@ -0,0 +1,218 @@ +#if !defined(BOXTREE_HPP) +# define BOXTREE_HPP + +# if !defined(BNDGBOX_HPP) +# include +# endif +# if !defined(MEMBLOCK_HPP) +# include +# endif + +//########################################################################## +//####################### BoundingBoxTreeNode ######################## +//########################################################################## + +class BoundingBoxTree; + +class BoundingBoxTreeNode SIGNATURED +{ +public: + static MemoryBlock + AllocatedMemory; + friend class BoundingBoxTree; + +//########################################################################## +// Memory Allocation +// +private: + static MemoryBlock* GetAllocatedMemory(); + void* operator new(size_t) { return GetAllocatedMemory()->New(); } + void operator delete(void *where) { GetAllocatedMemory()->Delete(where); } + +//########################################################################## +// Construction and Destruction +// +protected: + ExtentBox + nodeExtents; + BoundingBox + *staticContents; + BoundingBoxTreeNode + *nodeBranches[6], + *innerNode; + + BoundingBoxTreeNode( + BoundingBox *volume, + const ExtentBox &extents + ); + ~BoundingBoxTreeNode(); + + void + Add( + BoundingBox *BoundingBox, + const ExtentBox &extents + ); + void + Remove( + BoundingBox *BoundingBox, + const ExtentBox &extents + ); + +//########################################################################## +// Tree Traversal Functions +// +protected: + static int + TraversalOrder[6]; + + static void + SetTraversalOrder( + int first, + int second, + int third + ); + +public: + BoundingBoxTreeNode* + FindSmallestNodeContaining( + const ExtentBox &extents, + BoundingBoxTreeNode *parent + ); + + BoundingBoxTreeNode* + FindSmallestNodeContainingColumn(const ExtentBox &extents); + + BoundingBox* + FindBoundingBoxContaining( + const Point3D &point, + BoundingBox *parent + ); + + void + FindBoundingBoxesContaining( + BoundingBox *volume, + const ExtentBox &slice, + BoundingBoxCollisionList &list + ); + + BoundingBox* + FindBoundingBoxUnder( + const Point3D &point, + Scalar *height + ); + + BoundingBox* + FindBoundingBoxHitBy(Line *line); + +//########################################################################## +// Test Support +// +public: + Logical + TestInstance() const; +}; + +//########################################################################## +//######################## BoundingBoxTree ########################### +//########################################################################## + +class BoundingBoxTree SIGNATURED +{ + +//########################################################################## +// Construction and Destruction +// +protected: + BoundingBoxTreeNode *root; + +public: + BoundingBoxTree() + {Check_Pointer(this); root = NULL;} + ~BoundingBoxTree() + {Check(this); EraseTree();} + + static void + SetTraversalOrder( + int first, + int second, + int third + ) + {BoundingBoxTreeNode::SetTraversalOrder(first, second, third);} + + void + Add( + BoundingBox* volume, + const ExtentBox &extents + ); + void + Remove(BoundingBox* volume) + { + Check(this); Check(volume); Check(root); + root->Remove(volume, *volume); + } + void + EraseTree(); + +//########################################################################## +// Tree Traversal Functions +// +public: + BoundingBox* + FindBoundingBoxContaining(const Point3D &point) + { + Check(this); Check(&point); Check(root); + return root->FindBoundingBoxContaining(point, NULL); + } + + BoundingBoxTreeNode* + FindSmallestNodeContaining(const ExtentBox &extents) + { + Check(this); Check(&extents); Check(root); + return root->FindSmallestNodeContaining(extents, NULL); + } + + void + FindBoundingBoxesContaining( + BoundingBox *volume, + BoundingBoxCollisionList &list + ) + { + Check(this); Check(volume); Check(&list); Check(root); + root->FindBoundingBoxesContaining( + volume, + *volume, + list + ); + } + + BoundingBoxTreeNode* + FindSmallestNodeContainingColumn(const ExtentBox &extents) + { + Check(this); Check(&extents); Check(root); + Verify((BoundingBoxTreeNode::TraversalOrder[4]>>1) == Y_Axis); + return root->FindSmallestNodeContainingColumn(extents); + } + + BoundingBox* + FindBoundingBoxUnder( + const Point3D &point, + Scalar *height + ) + { + Check(this); Check(&point); Check(root); Check_Pointer(height); + Verify((BoundingBoxTreeNode::TraversalOrder[4]>>1) == Y_Axis); + return root->FindBoundingBoxUnder(point, height); + } + + BoundingBox* + FindBoundingBoxHitBy(Line *line); + +//########################################################################## +// Test Support +// +public: + Logical + TestInstance() const; +}; + +#endif diff --git a/restoration/source410/MUNGA/LAMP.HPP b/restoration/source410/MUNGA/LAMP.HPP index b6fa9098..c8b34efd 100644 --- a/restoration/source410/MUNGA/LAMP.HPP +++ b/restoration/source410/MUNGA/LAMP.HPP @@ -1,12 +1,7 @@ #if !defined(LAMP_HPP) # define LAMP_HPP -# if !defined(GAUGREND_HPP) -# include -# endif -# if !defined(STYLE_HPP) -# include -# endif + class GaugeRenderer; # if !defined(GRAPH2D_HPP) # include # endif diff --git a/restoration/source410/MUNGA/SET.HPP b/restoration/source410/MUNGA/SET.HPP new file mode 100644 index 00000000..90520e97 --- /dev/null +++ b/restoration/source410/MUNGA/SET.HPP @@ -0,0 +1,266 @@ +#if !defined(SET_HPP) +# define SET_HPP + +# if !defined(CHAIN_HPP) +# include +# endif + +// Classes Defined in this file + +class Set; +class SetIterator; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Set ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +class Set : public Socket +{ + + friend class SetIterator; + +public: + Logical + TestInstance() const; + + + // Constructor + Set(Node *node); + + ~Set(); + +protected: + Set& operator=(const Set &rhs); + + //STUBBED: UNKNOWN RB 1/15/07 + //void + // AddImplementation(Plug *plug); + + // Useful Set Operations + Logical operator==(const Set &rhs); + Set operator-(const Set &rhs) const; + Set Union(const Set &rhs) const; + Set Intersection(const Set &rhs) const; + + // Set membership + Logical + Exists(const Plug &element) const; + +private: + Chain *contents; +}; + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SetOf ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +template class SetOf: + public Set +{ +public: + SetOf(Node *node); + ~SetOf(); + +protected: + SetOf(Set set): + Set(set) + { + } + +public: + + // Public interface + + void + Add(T *plug) + {AddImplementation(plug);} + + // Useful Set Operations + SetOf& + operator=(const SetOf &rhs) + { + if (this==&rhs) return *this; + Set::operator=(rhs); + return *this; + } + + Logical + operator==(const SetOf &rhs) + {return Set::operator==(rhs);} + + + SetOf + operator-(const SetOf rhs) const + {return (SetOf) Set::operator-(rhs);} + + SetOf + Union(const SetOf &rhs) const + {return (SetOf) Set::Union(rhs);} + + SetOf + Intersection(const SetOf &rhs) const + {return (SetOf) Set::Intersection(rhs);} + + +}; + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~ SetOf templates ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + template + SetOf::SetOf(Node *node): + Set(node) + { + } + + template + SetOf::~SetOf() + { + } + + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~ SetIterator ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + class SetIterator: + public ChainIterator + { + public: + friend class Set; + // + //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Public interface + //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // + + // + //-------------------------------------------------------------------- + // Constructors, Destructor and testing + //-------------------------------------------------------------------- + // + SetIterator(Set *set); + SetIterator(const SetIterator &iterator); + ~SetIterator(); + + protected: + SetIterator(Chain *chain); // Used fot Set implementation to iterate on own contents + }; + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~ SetIteratorOf ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + template class SetIteratorOf: + public SetIterator + { + public: + // + //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // Public interface + //-------------------------------------------------------------------- + //-------------------------------------------------------------------- + // + + // + //-------------------------------------------------------------------- + // Constructors and Destructor + //-------------------------------------------------------------------- + // + SetIteratorOf(SetOf *chain); + SetIteratorOf(SetOf &chain); + SetIteratorOf(const SetIteratorOf &iterator); + ~SetIteratorOf(); + + // + //-------------------------------------------------------------------- + // Iterator methods (see Iterator for full listing) + //-------------------------------------------------------------------- + // + T* + ReadAndNext() + {return (T*)ReadAndNextImplementation();} + T* + ReadAndPrevious() + {return (T*)ReadAndPreviousImplementation();} + T* + GetCurrent() + {return (T*)GetCurrentImplementation();} + T* + GetNth(CollectionSize index) + {return (T*)GetNthImplementation(index);} + void + Insert(T *plug) + {InsertImplementation(plug);} + + SetIteratorOf& + Begin() + {return (SetIteratorOf&)BeginImplementation();} + SetIteratorOf& + End() + {return (SetIteratorOf&)EndImplementation();} + SetIteratorOf& + Forward() + {return (SetIteratorOf&)ForwardImplementation();} + SetIteratorOf& + Backward() + {return (SetIteratorOf&)BackwardImplementation();} + + // + //--------------------------------------------------- + // Operators useful when it is know that the iterator + // is a SetOf<> Iterator + //--------------------------------------------------- + // +#if 0 + Logical + operator!() + {return currentLink == NULL;} + operator T*() + {return GetCurrent();} + T* + operator->() + {return GetCurrent();} + T& + operator*() + {return *GetCurrent();} + + SetIteratorOf& + operator++() + {Next(); return *this;} + SetIteratorOf& + operator--() + {Previous(); return *this;} + T* + operator++(int) + {return ReadAndNext();} + T* + operator--(int) + {return ReadAndPrevious();} +#endif + }; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~ SetIteratorOf templates ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + template + SetIteratorOf::SetIteratorOf(SetOf *set): + SetIterator(chain) + { + } + + template + SetIteratorOf::SetIteratorOf(SetOf &set): + SetIterator(&chain) + { + } + + template + SetIteratorOf::SetIteratorOf(const SetIteratorOf &iterator): + SetIterator(iterator) + { + } + + template + SetIteratorOf::~SetIteratorOf() + { + } + +#endif diff --git a/restoration/source410/MUNGA_L4/L4GAUGE.HPP b/restoration/source410/MUNGA_L4/L4GAUGE.HPP new file mode 100644 index 00000000..70a9b1f9 --- /dev/null +++ b/restoration/source410/MUNGA_L4/L4GAUGE.HPP @@ -0,0 +1,1173 @@ +#if !defined(L4GAUGE_HPP) +# define L4GAUGE_HPP + +# if !defined(GAUGREND_HPP) +# include +# endif +# if !defined(GAUGE_HPP) +# include +# endif +# if !defined(L4WRHOUS_HPP) +# include +# endif +# if !defined(L4VB16_HPP) +# include +# endif + +extern char + *nameCopy(const char *old_name); +// +//-------------------------------------------------------------------------- +// NumericDisplay +// +// - displays a formatted numeric value. +// allowed formats are: +// unsignedFormat which displays an unsigned value of (N) digits +// signedFormat which displays + or - and (N-1) digits +// timeFormat which pairs of digits seperated by colons: HH:MM:SS +// ...where N = number_of_chars (below). +//-------------------------------------------------------------------------- +// +class NumericDisplay SIGNATURED +{ +public: + enum NumericFormat + { + unsignedFormat, + signedFormat, + signedBlankedZerosFormat, + absoluteFormat, + timeFormat + }; + + NumericDisplay( + L4Warehouse *warehouse, + int x_position, int y_position, + const char *font_name, //BitMap *font_bitmap, + int number_of_digits, + NumericFormat requested_format, + int background_color, int foreground_color + ); + + ~NumericDisplay(); + + Logical + TestInstance() const; + + void + ShowInstance(char *indent); + + void + ForceUpdate(); + + void + SetColors( + int bg_color, + int fg_color + ); + void + Draw( + GraphicsView *graphics_view, + Scalar current_value + ); + void + Erase( + GraphicsView *graphics_view + ); + enum + { + maxDigits = 16 + }; + + enum + { + blankedDigit = 127, + plusDigit=10, + minusDigit, + decimalDigit, + colonDigit, + totalDigitsPerFont + }; +protected: + +L4Warehouse + *warehouse; +char + *digitMapName; +int + digitWidth, + digitHeight, + numberOfDigits, + backgroundColor, + foregroundColor, + offsetX, + offsetY; +NumericFormat + format; +Scalar + largestValue, + previousValue; +Logical + erased; +char + previousDigit[maxDigits]; +}; + +// +//-------------------------------------------------------------------------- +// NumericDisplayScalar +// +// - displays a formatted numeric value as a gauge. +//-------------------------------------------------------------------------- +// +class NumericDisplayScalar : + public GraphicGauge +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + NumericDisplayScalar( + GaugeRate new_rate, + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int left, int bottom, int right, int top, + const char *font_name, //BitMap *font_bitmap, + int number_of_chars, + NumericDisplay::NumericFormat requested_format, + int background_color, int foreground_color, + Scalar *value_pointer, + const char *identification_string = "NumericDisplayScalar" + ); + + ~NumericDisplayScalar(); + + Logical + TestInstance() const; + void + ShowInstance(char *indent); + void + BecameActive(); + void + SetColors( + int bg_color, + int fg_color + ); + void + Execute(); + +protected: + NumericDisplay + *numericDisplay; + Scalar + currentValue; +}; + +// +//-------------------------------------------------------------------------- +// NumericDisplaySpeed +// +// - converts Scalar input(MPS) to be displayed as KPH +//-------------------------------------------------------------------------- +// +class NumericDisplaySpeed : + public NumericDisplayScalar +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + NumericDisplaySpeed( + GaugeRate new_rate, + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int left, int bottom, int right, int top, + const char *font_name, //BitMap *font_bitmap, + int number_of_chars, + NumericDisplay::NumericFormat requested_format, + int background_color, int foreground_color, + Scalar *value_pointer + ); + + void + Execute(); +}; + +// +//-------------------------------------------------------------------------- +// NumericDisplayInteger +// +// - displays a formatted numeric value as a gauge. +//-------------------------------------------------------------------------- +// +class NumericDisplayInteger : + public GraphicGauge +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + NumericDisplayInteger( + GaugeRate new_rate, + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int left, int bottom, int right, int top, + const char *font_name, //BitMap *font_bitmap, + int number_of_chars, + NumericDisplay::NumericFormat requested_format, + int background_color, int foreground_color, + int *value_pointer, + const char *identification_string = "NumericDisplayInteger" + ); + + ~NumericDisplayInteger(); + + Logical + TestInstance() const; + void + ShowInstance(char *indent); + void + BecameActive(); + void + SetColors( + int bg_color, + int fg_color + ); + void + Execute(); + +protected: + NumericDisplay + *numericDisplay; + int + currentValue; +}; + +// +//-------------------------------------------------------------------------- +// DigitalClock +// +//-------------------------------------------------------------------------- +// +class DigitalClock : + public GraphicGauge +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + DigitalClock( + GaugeRate new_rate, + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int left, int bottom, int right, int top, + const char *font_name, //BitMap *font_bitmap, + int number_of_chars, + NumericDisplay::NumericFormat requested_format, + int background_color, int foreground_color, + const char *identification_string = "DigitalClock" + ); + + ~DigitalClock(); + + Logical + TestInstance() const; + + void + ShowInstance(char *indent); + + void + BecameActive(); + + void + Execute(); + +protected: + NumericDisplay + *numericDisplay; +}; + +class RankAndScore : + public GraphicGauge +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + RankAndScore( + GaugeRate new_rate, + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int left, int bottom, + const char *font_name, + int background_color, int foreground_color, + const char *identification_string = "RankAndScore" + ); + + ~RankAndScore(); + + Logical + TestInstance() const; + void + ShowInstance(char *indent); + void + LinkToEntity(Entity *entity); + void + BecameActive(); + void + Execute(); + +protected: + NumericDisplay + *numericDisplayRank, + *numericDisplayScore; + Entity + *linkedEntity; + Logical + previousState; + int + foregroundColor, + backgroundColor; +}; + +//########################################################################## +// MakeConfig +//########################################################################## +extern MethodDescription + MakeConfigMethodDescription; + +//########################################################################## +// MakeExternConfig +//########################################################################## +extern MethodDescription + MakeExternConfigMethodDescription; + +//########################################################################## +// BackgroundReconfig +//########################################################################## +class BackgroundReconfig : + public GaugeBackground +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + BackgroundReconfig( + ModeMask mode_mask, + L4GaugeRenderer *renderer, + int port_number, + int palette_ID, + int enable_ID, + const char *palette_name, + const char *identification_string = "BackgroundReconfig" + ); + + ~BackgroundReconfig(); + + void + BecameActive(); +protected: + + Logical + ignorePaletteFlag; + int + portNumber, + paletteID, + enableID; + char + *paletteName; +}; + +//-------------------------------------------------------------------------- +// BackgroundLine +//-------------------------------------------------------------------------- +class BackgroundLine : + public GraphicGaugeBackground +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + BackgroundLine( + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int thick, + int left, int bottom, int right, int top, + int color, + const char *identification_string = "BackgroundLine" + ); + + void + BecameActive(); +protected: + int + thickFlag; + Rectangle2D + endpoints; +}; + +//-------------------------------------------------------------------------- +// BackgroundRect +//-------------------------------------------------------------------------- +class BackgroundRect : + public GraphicGaugeBackground +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + BackgroundRect( + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int left, int bottom, int right, int top, + int color, + const char *identification_string = "BackgroundRect" + ); + + void + BecameActive(); +protected: + Rectangle2D + endpoints; +}; + +//-------------------------------------------------------------------------- +// BackgroundFilledRect +//-------------------------------------------------------------------------- +class BackgroundFilledRect : + public GraphicGaugeBackground +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + BackgroundFilledRect( + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int left, int bottom, int right, int top, + int color, + const char *identification_string = "BackgroundFilledRect" + ); + + void + BecameActive(); +protected: + Rectangle2D + endpoints; +}; + +//-------------------------------------------------------------------------- +// BackgroundPixelmap +//-------------------------------------------------------------------------- +class BackgroundPixelmap : + public GraphicGaugeBackground +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + BackgroundPixelmap( + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int left, int bottom, + const char *pixelmap_name, + int opaque_flag, + const char *identification_string = "BackgroundPixelmap" + ); + + ~BackgroundPixelmap(); + + Logical + TestInstance() const; + + void + BecameActive(); +protected: + char + *pixelMapName; + int + opaqueFlag; +}; + +//-------------------------------------------------------------------------- +// BackgroundBitmap +//-------------------------------------------------------------------------- +class BackgroundBitmap : + public GraphicGaugeBackground +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + BackgroundBitmap( + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int left, int bottom, + const char *bitmap_name, + int opaque_flag, + int foreground_color, + int background_color = 0, + const char *identification_string = "BackgroundBitmap" + ); + + ~BackgroundBitmap(); + + Logical + TestInstance() const; + void + BecameActive(); + +protected: + char + *bitMapName; + int + foregroundColor, + backgroundColor, + opaqueFlag; +}; + +// +//-------------------------------------------------------------------------- +// WipeGaugeScalar +// +// - Base class for "wipe"-style instruments, where a parameter causes +// a rectangular area to change size. +//-------------------------------------------------------------------------- +// +class WipeGaugeScalar : + public GraphicGauge +{ +public: + enum Direction { + wipeLeft, + wipeDown, + wipeRight, + wipeUp + }; + + void + BecameActive(); + +protected: + WipeGaugeScalar( + GaugeRate new_rate, + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int left, int bottom, int right, int top, + Direction direction, + Scalar min, + Scalar max, + const char *identification_string = "WipeGaugeScalar" + ); + + virtual ~WipeGaugeScalar(); + + Logical + TestInstance() const; + + void + ShowInstance(char *indent); + + void + Execute(); + +protected: + virtual void + DrawActive( + Rectangle2D *rectangle + ); + + virtual void + DrawInactive( + Rectangle2D *rectangle + ); + + Direction + wipeDirection; + int + width, + height, + previousValue; + Rectangle2D + previousSize; + Scalar + minimumValue, + currentValue, + maximumValue; + Logical + forceUpdateFlag; +}; + +// +//-------------------------------------------------------------------------- +// +//-------------------------------------------------------------------------- +// +class BarGraphSolidScalar : + public WipeGaugeScalar +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + BarGraphSolidScalar( + GaugeRate new_rate, + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int left, int bottom, int right, int top, + int foreground_color, int background_color, + WipeGaugeScalar::Direction direction, + Scalar min, + Scalar max, + Scalar *value_pointer, + const char *identification_string = "BarGraphSolidScalar" + ); + + ~BarGraphSolidScalar(); + + Logical + TestInstance() const; + + void + ShowInstance(char *indent); + +protected: + void + DrawActive( + Rectangle2D *rectangle + ); + + void + DrawInactive( + Rectangle2D *rectangle + ); + + int + backgroundColor, + foregroundColor; +}; + +// +//-------------------------------------------------------------------------- +// +//-------------------------------------------------------------------------- +// +class BarGraphBitMapScalar : + public WipeGaugeScalar +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + BarGraphBitMapScalar( + GaugeRate new_rate, + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int left, int bottom, int right, int top, + const char *bitmap_name, + int foreground_color, + int background_color, + WipeGaugeScalar::Direction direction, + Scalar min, + Scalar max, + Scalar *value_pointer, + const char *identification_string = "BarGraphBitMapScalar" + ); + + ~BarGraphBitMapScalar(); + + Logical + TestInstance() const; + + void + ShowInstance(char *indent); + +protected: + void + DrawActive( + Rectangle2D *rectangle + ); + + void + DrawInactive( + Rectangle2D *rectangle + ); + + char + *bitMapName; + int + foregroundColor, + backgroundColor; +}; + +// +//-------------------------------------------------------------------------- +// +//-------------------------------------------------------------------------- +// +class BarGraphPixelMapScalar : + public WipeGaugeScalar +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + BarGraphPixelMapScalar( + GaugeRate new_rate, + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int left, int bottom, int right, int top, + const char *pixelmap_name, + int background_color, + WipeGaugeScalar::Direction direction, + Scalar min, + Scalar max, + Scalar *value_pointer, + const char *identification_string = "BarGraphPixelMapScalar" + ); + + ~BarGraphPixelMapScalar(); + + Logical + TestInstance() const; + + void + ShowInstance(char *indent); + +protected: + void + DrawActive( + Rectangle2D *rectangle + ); + + void + DrawInactive( + Rectangle2D *rectangle + ); + + char + *pixelMapName; + int + backgroundColor; +}; + +//####################################################################### +// ColorState +//####################################################################### +class ColorState : + public GraphicGauge +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + ColorState( + GaugeRate new_rate, + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int left, int bottom, + const char *bitmap_name, + int first_color, + Scalar first_bin, + int second_color, + Scalar second_bin, + int third_color, + Scalar third_bin, + int fourth_color, + Scalar fourth_bin, + int fifth_color, + int damage_zone, + DamageZone ***value_pointer, + const char *identification_string = "ColorState" + ); + + ~ColorState(); + + Logical + TestInstance() const; + void + ShowInstance(char *indent); + void + BecameActive(); + void + Execute(); + +protected: + int + previousState, + color[5]; + char + *bitMapName; + DamageZone + *damagePointer; + Scalar + bin[4]; +}; + +//####################################################################### +// TwoState +//####################################################################### +class TwoState : + public GraphicGauge +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + TwoState( + GaugeRate new_rate, + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int left, int bottom, + const char *bitmap_name, + int first_color, + int second_color, + int *value_pointer, + const char *identification_string = "TwoState" + ); + + ~TwoState(); + + Logical + TestInstance() const; + void + ShowInstance(char *indent); + void + BecameActive(); + void + Execute(); + +protected: + int + previousState, + color[2]; + int + currentValue; + char + *bitMapName; +}; + + +// +//-------------------------------------------------------------------------- +// NumericDisplayScalarTwoState +// +// - displays a formatted numeric value as a gauge. +// - can be turned on or off +//-------------------------------------------------------------------------- +// +class NumericDisplayScalarTwoState : + public GraphicGauge +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + NumericDisplayScalarTwoState( + GaugeRate new_rate, + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int left, int bottom, int right, int top, + const char *font_name, //BitMap *font_bitmap, + int number_of_chars, + NumericDisplay::NumericFormat requested_format, + int background_color, int foreground_color, + Scalar *value_pointer, + int *logical_pointer, + const char *identification_string = "NumericDisplayScalarTwoState" + ); + + ~NumericDisplayScalarTwoState(); + + Logical + TestInstance() const; + void + ShowInstance(char *indent); + void + BecameActive(); + + #if 0 + void + SetColors( + int bg_color, + int fg_color + ); + #endif + void + Execute(); + +protected: + NumericDisplay + *numericDisplay; + int + previousState, previousValue, + color[2]; + Scalar + currentValue; + int + currentLogical; + +}; + + +//####################################################################### +// SegmentArc +//####################################################################### +class SegmentArc : + public GraphicGauge +{ +public: + SegmentArc( + GaugeRate new_rate, + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int center_x, int center_y, + Scalar inner0, Scalar outer0, + Scalar inner1, Scalar outer1, + Scalar deg0, Scalar deg1, + int number_of_segs_and_direction, + int background_color, + int foreground_color, + Logical use_thick_lines = True, + const char *identification_string = "SegmentArc" + ); + + ~SegmentArc(); + + Logical + TestInstance() const; + void + ShowInstance(char *indent); + void + BecameActive(); + void + Execute(); + +protected: + int + backgroundColor, + foregroundColor, + numberOfSegments, + previousSegment; + Logical + useThickLines; + Scalar + currentValue, + startAngle, + deltaAngle, + innerRadius, + outerRadius, + deltaInnerRadius, + deltaOuterRadius; +}; + +//####################################################################### +// SegmentArcNormalized +//####################################################################### +class SegmentArcNormalized : + public SegmentArc +{ +public: + static MethodDescription + methodDescription; + + static Logical + Make( + int display_port_index, + Vector2DOf position, + Entity *entity, + GaugeRenderer * gauge_renderer + ); + + SegmentArcNormalized( + GaugeRate new_rate, + ModeMask mode_mask, + L4GaugeRenderer *renderer, + unsigned int owner_ID, + int graphics_port_number, + int center_x, int center_y, + Scalar inner0, Scalar outer0, + Scalar inner1, Scalar outer1, + Scalar deg0, Scalar deg1, + int number_of_segs_and_direction, + int background_color, + int foreground_color, + Scalar *value_pointer, + Logical use_thick_lines = True, + const char *identification_string = "SegmentArcNormalized" + ); +}; + +#endif diff --git a/restoration/source410/README.md b/restoration/source410/README.md index d78ebd6f..eb9eec54 100644 --- a/restoration/source410/README.md +++ b/restoration/source410/README.md @@ -71,3 +71,17 @@ file-by-file; the current blocker for full closure is the 1995 engine header gap first — only the drifted WinTesla `VDATA.h` survives, in BT412/engine). Include order for builds: `CODE/BT/*` over `CODE/RP/*`, `-DNO_PRECOMPILED_HEADERS` until the mech-family headers are reconstructed. Remaining gap: TASM32 (JOYSTICK.ASM only). + +## Link campaign (build410, 2026-07-19) +`source410/build410.sh` assembles BTL4OPT.EXE: merged-engine mass compile (**152/152 green** +— the ENTIRE surviving engine compiles), BT TUs (11/11), tlib libs (munga 1.25MB / mungal4 +with the prebuilt-1995 objs / bt / btl4), then the authentic tlink32 link rooted by a probe +main (build scaffold). First true link run: **52 unresolved externals** +(`UNRESOLVED-LEDGER.txt`) = the measured remaining gap. Kill-lists: l4gauge.cpp back-date +(14 widget statics), the missing-engine-body back-date wave (~24: rotation, player, team, +l4app, explode, dropzone, terrain, cultural, subsystm-statics, netclient...), the prebuilt +RANDOM.obj fold, and the staged game-TU statics blocks (MECH.CPP et al. — each TU file opens +with its binary-evidenced Derivation/SharedData statics and grows into the full body). +Link-lib arbitration: SOS = SOSDBXC+SOSMBXC (the 32-bit Borland-flat variants; SOSMW*=16-bit), +WATTCP excluded (it belongs to the 16-bit NetNub TSR — the game talks to it via shared +memory), filestrm = the RP-era pair (BT-tree pair is post-4.10 drift; override layer). diff --git a/restoration/source410/UNRESOLVED-LEDGER.txt b/restoration/source410/UNRESOLVED-LEDGER.txt new file mode 100644 index 00000000..6db4840d --- /dev/null +++ b/restoration/source410/UNRESOLVED-LEDGER.txt @@ -0,0 +1,52 @@ +BTCameraDirector::DefaultData +BTPlayer::DefaultData +BackgroundBitmap::methodDescription +BackgroundFilledRect::methodDescription +BackgroundLine::methodDescription +BackgroundPixelmap::methodDescription +BackgroundReconfig::methodDescription +BackgroundRect::methodDescription +BarGraphPixelMapScalar::methodDescription +BarGraphSolidScalar::methodDescription +ColorState::methodDescription +CulturalIcon::DefaultData +DigitalClock::methodDescription +DropZone::DefaultData +EulerAngles::Identity +Explosion::DefaultData +L4Application::ClassDerivations +L4Application::MessageHandlers +L4Application::missionReviewMode +L4Application::rioPlaybackFileName +L4Application::rioRecordingFileName +Landmark::DefaultData +Mech::DefaultData +MechRIOMapper::DefaultData +MechThrustmasterMapper::DefaultData +Missile::DefaultData +NetworkClient::ClassDerivations +NumericDisplayInteger::methodDescription +NumericDisplayScalar::methodDescription +NumericDisplaySpeed::methodDescription +Player::AttributeIndex +Player::ClassDerivations +Player::DefaultData +Player::MessageHandlers +Projectile::DefaultData +Quaternion::Identity +RandomGenerator::Index +RankAndScore::methodDescription +Receiver::ClassDerivations +Receiver::DefaultData +Receiver::MessageHandlers +SegmentArcNormalized::methodDescription +Subsystem::ClassDerivations +Team::AttributeIndex +Team::ClassDerivations +Team::DefaultData +Team::MessageHandlers +Terrain::DefaultData +TwoState::methodDescription +UnscalableTerrain::ClassDerivations +UnscalableTerrain::DefaultData +YawPitchRoll::Identity diff --git a/restoration/source410/build410.sh b/restoration/source410/build410.sh new file mode 100644 index 00000000..1d25b6e6 --- /dev/null +++ b/restoration/source410/build410.sh @@ -0,0 +1,159 @@ +#!/bin/bash +# build410.sh -- assemble BTL4OPT.EXE from the reconstructed 4.10 tree. +# +# Stages: +# 1. mass-compile the merged engine source (CODE/BT over CODE/RP over +# source410 backfills) into build410/obj/{munga,mungal4}/ +# 2. compile the BT game TUs (CODE originals + source410) into +# build410/obj/{bt,btl4}/ +# 3. tlib the four libs; prebuilt-1995 .obj fallbacks fill source gaps +# 4. tlink32 with the authentic OPT.MAK order; unresolved externals -> +# build410/UNRESOLVED.txt (the canonical remaining-work ledger) +# +# Usage: ./build410.sh [engine|bt|libs|link|all|status] + +T=/c/VWE/TeslaRel410 +TW=c:/VWE/TeslaRel410 +export PATH="$T/BORLAND/BC45/BIN:$PATH" +C=$TW/CODE/BT +R=$TW/CODE/RP +S=$TW/restoration/source410 +B=$T/restoration/build410 +Bw=$TW/restoration/build410 + +INC="$S/override;$C/BT_L4;$C/BT;$C/MUNGA;$C/MUNGA_L4;$C/MUNGA_L4/SOS/BC4;$S/MUNGA;$S/MUNGA_L4;$R/MUNGA;$R/MUNGA_L4;$R/MUNGA_L4/NetNub;$R/MUNGA_L4/sos/bc4;$C/MUNGA_L4/LIBDPL;$C/MUNGA_L4/NETNUB;$C/MUNGA_L4/NETNUB/INCLUDE;$S/MUNGA_L4;$R/MUNGA_L4/libDPL;$R/MUNGA_L4/libDPL/dpl;$S/shim;$S/BT;$S/BT_L4;$TW/BORLAND/BC45/INCLUDE" +FLAGS="-c -DLBE4 -DDEBUG_LEVEL=0 -DDEBUG_STREAM=cout \ +-b -r -ff -AT -k- -N- -v- -5 -a4 -V -Jg -x- -RT- -O2 -w-" + +mkdir -p "$B"/obj/{munga,mungal4,bt,btl4} "$B"/lib + +# compile one TU into a bucket; skip if the obj is newer than the source +cc() { # cc + local out="$B/obj/$1/$(basename "${2%.*}" | tr 'A-Z' 'a-z').obj" + [ -f "$out" ] && [ "$out" -nt "$2" ] && return 0 + if bcc32 $FLAGS -I"$INC" -o"$(cygpath -w "$out" 2>/dev/null || echo $out)" "$2" \ + > "$B/obj/$1/$(basename "${2%.*}").log" 2>&1; then + return 0 + else + rm -f "$out"; return 1 + fi +} + +# merged engine source view: BT tree wins, RP fills, source410 backfills last +merged() { # merged [S410dir] + { ls "$1"/*.CPP "$1"/*.cpp 2>/dev/null | sed 's/.*[\\/]//' + ls "$2"/*.CPP "$2"/*.cpp 2>/dev/null | sed 's/.*[\\/]//' + [ -n "$3" ] && ls "$3"/*.CPP 2>/dev/null | sed 's/.*[\\/]//' + } | tr 'A-Z' 'a-z' | sort -u +} +srcfor() { # srcfor [S410dir] + case "$1" in + filestrm.cpp) echo "$3/FILESTRM.CPP"; return;; # BT pair = post-4.10 drift + l4vidper.cpp|l4tsdpl.cpp) return;; # not in mungal4.lib + esac + for d in "$2" "$4" "$3"; do # BT first, then source410, then RP + [ -z "$d" ] && continue + for f in "$d"/*.CPP "$d"/*.cpp; do + [ -f "$f" ] || continue + [ "$(basename "$f" | tr 'A-Z' 'a-z')" = "$1" ] && { echo "$f"; return; } + done + done +} + +stage_engine() { + local ok=0 fail=0 failed="" + for lib in munga mungal4; do + local bd rd sd + if [ $lib = munga ]; then bd=$C/MUNGA; rd=$R/MUNGA; sd=$S/MUNGA; else bd=$C/MUNGA_L4; rd=$R/MUNGA_L4; sd=$S/MUNGA_L4; fi + for n in $(merged "$bd" "$rd" "$sd"); do + src=$(srcfor "$n" "$bd" "$rd" "$sd") + [ -z "$src" ] && continue + if cc $lib "$src"; then ok=$((ok+1)); else fail=$((fail+1)); failed="$failed $lib/$n"; fi + done + done + echo "ENGINE: $ok ok, $fail fail" + for f in $failed; do echo " FAIL $f"; done | head -60 + for f in $failed; do echo "$f"; done > "$B/ENGINE-FAILURES.txt" +} + +stage_bt() { + local ok=0 fail=0 + for n in $(merged "$C/BT" /dev/null "$S/BT"); do + src=$(srcfor "$n" "$C/BT" /dev/null "$S/BT") + [ -z "$src" ] && continue + if cc bt "$src"; then ok=$((ok+1)); else fail=$((fail+1)); echo " FAIL bt/$n"; fi + done + for n in $(merged "$C/BT_L4" /dev/null "$S/BT_L4"); do + src=$(srcfor "$n" "$C/BT_L4" /dev/null "$S/BT_L4") + [ -z "$src" ] && continue + if cc btl4 "$src"; then ok=$((ok+1)); else fail=$((fail+1)); echo " FAIL btl4/$n"; fi + done + echo "BT: $ok ok, $fail fail" +} + +stage_libs() { + cd "$B/lib" + for lib in munga mungal4 bt btl4; do + rm -f $lib.lib + ls "$B/obj/$lib"/*.obj >/dev/null 2>&1 || continue + : > $lib.rsp + for o in "$B/obj/$lib"/*.obj; do + printf '+..\obj\%s\%s & +' "$lib" "$(basename "$o")" >> $lib.rsp + done + # prebuilt-1995 fallbacks for TUs with no compiled obj + if [ $lib = munga ] || [ $lib = mungal4 ]; then + for o in $(find $R/MUNGA/opt $R/MUNGA_L4 -iname "*.obj" 2>/dev/null); do + n=$(basename "${o%.*}" | tr 'A-Z' 'a-z') + if [ ! -f "$B/obj/munga/$n.obj" ] && [ ! -f "$B/obj/mungal4/$n.obj" ]; then + case "$lib/$o" in + munga/*/MUNGA/*) printf '+%s & +' "$(cygpath -w "$o" | sed 's|\|\\|g')" >> $lib.rsp;; + mungal4/*/MUNGA_L4/*) printf '+%s & +' "$(cygpath -w "$o" | sed 's|\|\\|g')" >> $lib.rsp;; + esac + fi + done + fi + sed -i '$ s/ &$//' $lib.rsp + MSYS2_ARG_CONV_EXCL='*' tlib $lib.lib /P32 @$lib.rsp > $lib.tlib.log 2>&1 + echo "$lib.lib: $(grep -c '^+' $lib.rsp) members ($(ls -la $lib.lib 2>/dev/null | awk '{print $5}') bytes)" + done +} + +stage_link() { + cd "$B" + if [ ! -f obj/btl4/btl4.obj ] && [ -f probe_main.cpp ]; then + bcc32 $FLAGS -I"$INC" -oprobe_main.obj probe_main.cpp > probe_main.log 2>&1 || { echo "probe main FAILED (probe_main.log)"; return 1; } + MAIN=probe_main.obj + else + MAIN=obj/btl4/btl4.obj + fi + cat > link.rsp < link.log 2>&1 + grep -i "undefined" link.log | sed "s/^.*Error: //" | sort -u > UNRESOLVED.txt + echo "link exit: $? ; unresolved: $(wc -l < UNRESOLVED.txt) (build410/UNRESOLVED.txt)" +} + +case "${1:-all}" in + engine) stage_engine;; + bt) stage_bt;; + libs) stage_libs;; + link) stage_link;; + status) for d in munga mungal4 bt btl4; do echo "$d: $(ls "$B/obj/$d"/*.obj 2>/dev/null | wc -l) objs"; done;; + all) stage_engine; stage_bt; stage_libs; stage_link;; +esac diff --git a/restoration/source410/override/FILESTRM.HPP b/restoration/source410/override/FILESTRM.HPP new file mode 100644 index 00000000..279341f9 --- /dev/null +++ b/restoration/source410/override/FILESTRM.HPP @@ -0,0 +1,49 @@ +#if !defined(FILESTRM_HPP) +# define FILESTRM_HPP + +# if !defined(MEMSTRM_HPP) +# include +# endif + +class FileStream : public MemoryStream +{ +public: + FileStream(const char* file_name = NULL, Logical writable = False); + ~FileStream() { Close(); } + +public: + void* GetPointer() const + { + Fail("No implementation possible for FileStream::GetPointer()"); + return NULL; + } + + void SetPointer(void *new_pointer) { Fail("No implementation possible for FileStream::SetPointer(void*)"); } + void SetPointer(size_t index); + + MemoryStream& AdvancePointer(size_t count); + + MemoryStream& RewindPointer(size_t count); + + MemoryStream& ReadBytes(void *ptr, size_t number_of_bytes); + MemoryStream& WriteBytes(const void *ptr, size_t number_of_bytes); + + void Open(const char* file_name = NULL, Logical writable = False); + void Close(); + Logical IsFileOpened() { return fileHandle != -1; } + + Logical TestInstance() const; + +protected: + int fileHandle; + Logical readOnly; + + static int OpenImplementation(const char* file_name, Logical read_only); + static void FlushImplementation(int file_handle); + static void CloseImplementation(int file_handle); + static size_t SeekImplementation(int file_handle, size_t where, Logical from_end = False); + static size_t ReadImplementation(int file_handle, void *buffer, size_t length); + static size_t WriteImplementation(int file_handle, const void* buffer, size_t length); +}; + +#endif diff --git a/restoration/source410/shim/dpl/vpx/dpl_priv.h b/restoration/source410/shim/dpl/vpx/dpl_priv.h new file mode 100644 index 00000000..19c94d2e --- /dev/null +++ b/restoration/source410/shim/dpl/vpx/dpl_priv.h @@ -0,0 +1 @@ +#include