- 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>
424 lines
15 KiB
Plaintext
424 lines
15 KiB
Plaintext
COMPAT.TXT - Compatibility Information
|
|
(C) Copyright 1995 by Borland International
|
|
|
|
|
|
Contents:
|
|
========
|
|
Using ObjectWindows 1.0 with Borland C++ 4.5
|
|
Downloading OWL1.PAK
|
|
Using Turbo Assembler 4.0 with Borland C++ 4.5
|
|
Using the Object Based Class Library with Borland C++ 4.5
|
|
Using Turbo Vision 1.0x with Borland C++ 4.5
|
|
Using the Paradox Engine and Database Frameworks with BC 4.5
|
|
|
|
|
|
Using ObjectWindows 1.0 with Borland C++ 4.5
|
|
============================================
|
|
|
|
The ObjectWindows 1.0 library can be built with Borland C++ 4.5 for
|
|
developing OWL 1.0 native applications. With the increased capacity of the
|
|
Borland tools as compared to Borland C++ 3.1, you can now use OWL libraries
|
|
with full symbolic debug information and debug your application in either
|
|
the Integrated Development Environment or in Tubro Debugger for Windows.
|
|
|
|
The overall process requires modifying ObjectWindows source files and
|
|
rebuilding the object-based container library as well as ObjectWindows. All
|
|
necessary files are contained in OWL1.PAK which is on the Borland C++
|
|
compact disk in the \bc45\install directory. If you obtained Borland C++ on
|
|
5-1/4" disks instead of compact disk, you will need to download OWL1.PAK
|
|
from Borland's ftp site, local bulletin board, or CompuServe. (See
|
|
"Downloading OWL1.PAK".)
|
|
|
|
To begin the process, copy OWL1.PAK to the \bc45 directory and use
|
|
unpaq.exe (in the \bc45 directory) to extract the files. When using unpaq,
|
|
be sure to set:
|
|
|
|
Restore directories: checked
|
|
Archive name: \bc45\owl1.pak
|
|
Destination dir: \bc45
|
|
|
|
Next, select Open archive. By default, all files are selected and if you
|
|
de-select any, they will not be installed. Now select Decompress.
|
|
|
|
Building and using ObjectWindows and the object-based container library are
|
|
described in 1OWL45.TXT which you will now find in the directory
|
|
\bc45\source\owl1.
|
|
|
|
|
|
|
|
Downloading OWL1.PAK
|
|
====================
|
|
|
|
OWL1.PAK can be obtained from the following sources:
|
|
|
|
Borland's anonymous ftp site: ftp.borland.com
|
|
|
|
CompuServe: !go BCPPWin and look in library 2.
|
|
|
|
Borland's Download Bulletin:
|
|
The DLBBS can be dialed at 408-431-5096. Simply join the C++
|
|
Conference (number 12). And from the File menu, select download
|
|
and enter OWL1.PAK (you do not need to be in the specific file
|
|
area).
|
|
|
|
|
|
Using Turbo Assembler 4.0 with Borland C++ 4.5
|
|
==============================================
|
|
Turbo Assembler 4.0 is fully compatible with Borland C++ 4.5. There is
|
|
an error in the WHEREIS example program which will cause two undefined
|
|
symbol errors when built. The following corrections will resolve the
|
|
problem:
|
|
|
|
In file \examples\tasm\whereis\iexedos.asm
|
|
line 118, change:
|
|
mov es,[es:psp.EnvironmentBlock]
|
|
to:
|
|
mov es,[es:Psp.EnvironmentBlock]
|
|
|
|
line 196, change:
|
|
mov ax, [ComSpecSeg]
|
|
to:
|
|
mov ax, [ComspecSeg]
|
|
|
|
In file \examples\tasm\whereis\whereis.asm
|
|
line 448, change:
|
|
endp main
|
|
to:
|
|
endp Main
|
|
|
|
line 565, change:
|
|
call WriteAsciizString,ds,offset Syntax
|
|
to:
|
|
call WriteASCIIZString,ds,offset Syntax
|
|
|
|
|
|
Using the Object Based Class Library with Borland C++ 4.5
|
|
=========================================================
|
|
|
|
The object based class library, while still included with Borland C++
|
|
4.5, must be compiled before it can be used. Here are instructions for
|
|
doing so:
|
|
|
|
There is a makefile in the source directory, \BC45\SOURCE\CLASSLIB which
|
|
can be used to build all versions of the class library. For example, to
|
|
build a large model static version for use with Object Windows, run the
|
|
following command:
|
|
|
|
MAKE -DDOS -DOBJECTS "-DBCC=bcc -x-" -DMODEL=l -DNAME=tclassl
|
|
|
|
To build a debugging dynamic version of the class library DLL, run the
|
|
following command:
|
|
|
|
MAKE -DDOS -DDBG -DOBJECTS "-DBCC=bcc -x-" -DDLL -DNAME=tclass
|
|
|
|
Note that to successfully use the DLL version of the class library you will
|
|
have to copy TCLASS40.DLL from the \BC45\LIB directory into the \BC45\BIN
|
|
directory.
|
|
|
|
|
|
|
|
Using Turbo Vision 1.0x with Borland C++ 4.5
|
|
============================================
|
|
|
|
REBUILDING THE TURBO VISION LIBRARY:
|
|
|
|
Due to changes in the debug information format, symbol length, and
|
|
runtime library, the Turbo Vision 1.0 library must be recompiled with
|
|
Borland C++ 4.5. Note that Turbo Vision 2.0 is fully compatible with
|
|
Borland C++ 4.5 and does not require the modifications in this section.
|
|
|
|
There are a few minor changes that need to be made to the source code
|
|
before recompiling it with the new compiler. These are due to slightly
|
|
tightened syntax restrictions. The makefile will require some
|
|
modification as well, which are shown below.
|
|
|
|
There are 3 steps to this process:
|
|
|
|
1. Copy the old 3.1 Turbo Vision source into the new BC45 directory
|
|
structure.
|
|
2. Make the appropriate changes according to the instructions below.
|
|
3. Run MAKE to build the new Turbo Vision library you need to
|
|
continue your work. If you are using Turbo Vision in an overlaid
|
|
application, make sure you follow the instructions specific to
|
|
overlays.
|
|
|
|
These steps are now presented in more detail: Note that the Borland C++
|
|
root directory is assumed to be \BC45. Change this as necessary for your
|
|
particular installation. Also, if you are upgrading from Borland C++
|
|
2.0 and have the original version of Turbo Vision, some of the line
|
|
numbers mentioned may not accurately reflect your version.
|
|
|
|
You need to copy your old Turbo Vision source and include files from
|
|
Borland C++ 3.1 into your Borland C++ 4.5 directory hierarchy. To do
|
|
this, just run the following command:
|
|
|
|
XCOPY \BC31\TVISION \BC45\TVISION /S
|
|
|
|
and when it asks you about creating a directory called TVISION, say yes.
|
|
Modify the above paths according to your system configuration if
|
|
necessary. You are now ready to make the necessary modifications before
|
|
rebuilding the library.
|
|
|
|
The changes are as follows:
|
|
|
|
1. Due to tighter syntax checking, case blocks that declare initialized
|
|
local variables need their own scoping block. Make the changes below
|
|
in the order shown so that confusion over the correct line numbers
|
|
can be avoided. In general, the '{' follows a case statement, and
|
|
the '}' follows a break statement.
|
|
|
|
COLORSEL.CPP
|
|
|
|
Add after line 219: }
|
|
Add after line 179: {
|
|
Add after line 177: }
|
|
Add after line 164: {
|
|
|
|
TBUTTON.CPP
|
|
|
|
Add after line 226: }
|
|
Add after line 211: {
|
|
Add after line 209: }
|
|
Add after line 192: {
|
|
|
|
2. TINPUTLIN.CPP
|
|
Replace line 44: if( (p = strchr( s, '~' )) != 0 )
|
|
With if( (p = (char*) strchr( s, '~' )) != 0)
|
|
|
|
3. TMNUVIEW.CPP
|
|
Replace line 348: char *loc = strchr( p->name, '~' );
|
|
With char *loc = (char*)strchr( p->name, '~' );
|
|
|
|
4. TVWRITE.ASM
|
|
Replace line 25: PUBLIC @TView@writeChar$qsszcucs
|
|
With PUBLIC @TView@writeChar$qsscucs
|
|
|
|
Replace line 27: PUBLIC @TView@writeStr$qssnxzcuc
|
|
With PUBLIC @TView@writeStr$qssnxcuc
|
|
|
|
Replace line 366: PROC @TView@writeChar$qsszcucs
|
|
With PROC @TView@writeChar$qsscucs
|
|
|
|
Replace line 436: PROC @TView@writeStr$qssnxzcuc
|
|
With PROC @TView@writeStr$qssnxcuc
|
|
|
|
Note that all of the above changes simply entail removing
|
|
the letter 'z' from the last part of the mangled symbol
|
|
name.
|
|
|
|
5. MAKEFILE
|
|
Replace line 100:
|
|
CFLAGS = -c $(CCOVYFLAGS) -P -O1 -m$(MODEL) -I$(INCLUDE) -n$(OBJDIR)
|
|
With
|
|
CFLAGS = -c -x- $(CCOVYFLAGS) -P -O1 -m$(MODEL) -I$(INCLUDE) -n$(OBJDIR)
|
|
|
|
Replace line 73:
|
|
TLIB = $(BCROOT)\bin\tlib /0
|
|
With this group of 5 lines:
|
|
!ifdef DEBUG
|
|
TLIB = $(BCROOT)\bin\tlib
|
|
!else
|
|
TLIB = $(BCROOT)\bin\tlib /0
|
|
!endif
|
|
|
|
*** If you did NOT purchase the Turbo Assembler add-on package for
|
|
Borland C++ 4.5, you must make some additional changes.
|
|
|
|
Replace the group at lines 259-263:
|
|
!if $d(BC)
|
|
$(TASM) $&.asm, $(OBJDIR)\$&.obj
|
|
!else
|
|
copy $(TVLIBDIR)\$&.obj $(OBJDIR)
|
|
!endif
|
|
With this group:
|
|
!if !$d(NOTASM)
|
|
$(TASM) $&.asm, $(OBJDIR)\$&.obj
|
|
!else
|
|
copy $(LIBDIR)\COMPAT\$&.obj $(OBJDIR)
|
|
!endif
|
|
|
|
Add after line 49:
|
|
NOTASM = 1
|
|
|
|
|
|
USE OF EXCEPTION HANDLING WITH TURBO VISION:
|
|
|
|
Turbo Vision was designed with its own global new operator. Due to this
|
|
internal design you will not be able to use exception handling with the
|
|
new operator. However, any other type of exception handling is
|
|
supported. In order to enable exception handling do not make the change
|
|
to line 88 of the makefile.
|
|
|
|
|
|
USE OF OVERLAYS WITH TURBO VISION:
|
|
|
|
** Note: All instructions in this section are in addition to the changes
|
|
recommended above.
|
|
|
|
As with Borland C++ 3.1, Turbo Vision can be used in an overlayed program
|
|
if the library is rebuild with certain options, shown below:
|
|
|
|
All overlayed modules must be compiled with local virtual tables (-Vs).
|
|
|
|
Overlayed modules no longer need to be compiled via assembler (-B).
|
|
|
|
Overlayed modules must be compiled with exceptions disabled (-x-).
|
|
|
|
Here are the steps required to build an overlayable version of TV.LIB:
|
|
|
|
1. First make an additional change to file TVISION\SOURCE\MAKEFILE:
|
|
|
|
Change line 96 from : CCOVYFLAGS = -Y -Vs -B
|
|
to : CCOVYFLAGS = -Y -Vs
|
|
|
|
2. Change to the \BC45\TVISION\LIB directory and make a backup copy of
|
|
TV.LIB by typing:
|
|
|
|
COPY TV.LIB OLDTV.LIB
|
|
|
|
3. Switch to the \BC45\TVISION\SOURCE directory and type:
|
|
|
|
MAKE -B -DOVERLAY
|
|
|
|
4. This will create a new TV.LIB in the \BC45\TVISION\LIB directory.
|
|
There are seven modules in TV.LIB which cannot be overlayed. The
|
|
easiest solution to this problem is to create three seperate
|
|
libraries. Two libraries will be used when creating overlayed TV
|
|
apps, and the original TV.LIB will remain for use in non-overlayed TV
|
|
apps:
|
|
|
|
TV.LIB - full TV lib for use in non-overlayed TV apps
|
|
TVO.LIB - overlayable modules of TV.LIB
|
|
TVNO.LIB - non-overlayable modules of TV.LIB
|
|
|
|
To create these libraries, switch into the TVISION\LIB directory and
|
|
type the following commands:
|
|
|
|
TLIB TV.LIB -*SYSERR -*TSCREEN -*DRIVERS -*DRIVERS2 -*SWAPST -*TEVENT -*SYSINT
|
|
TLIB TVNO.LIB +SYSERR +TSCREEN +DRIVERS +DRIVERS2 +SWAPST +TEVENT +SYSINT
|
|
RENAME TV.LIB TVO.LIB
|
|
RENAME TVOLD.LIB TV.LIB
|
|
DEL *.OBJ *.BAK
|
|
|
|
5. You will now have the three libraries. To create an overlayed Turbo
|
|
Vision application, include both TVO.LIB and TVNO.LIB in the project
|
|
file or link line of the makefile. Using the local options for each
|
|
item, mark TVO.LIB as overlayed and TVNO.LIB as non-overlayed. Also,
|
|
go to the TargetExpert dialog box for this target and uncheck the
|
|
Turbo Vision Library.
|
|
|
|
|
|
|
|
Using the Paradox Engine And Database Frameworks with BC 4.5
|
|
============================================================
|
|
|
|
THE PARADOX ENGINE
|
|
|
|
There is only one significant detail regarding the use of the Paradox
|
|
Engine 3.0x with Borland C++ 4.5. The BC 3.1 versions of setjump and
|
|
longjump will have to be linked into your application in order to create
|
|
DOS Paradox Engine and Database Framework applications. The object
|
|
module, setjmp.obj, is provided in the BC45\LIB\COMPAT directory. Linking
|
|
this module into your application will replace the BC 4.5 version of
|
|
these functions. To do this, simply add the file
|
|
\BC45\LIB\COMPAT\SETJMP.OBJ to your project file or to the link command
|
|
in your makefile.
|
|
|
|
|
|
REBUILDING THE DATABASE FRAMEWORKS
|
|
|
|
Due to changes in the debug information format, symbol length, and
|
|
runtime library, the Database Framework library must be recompiled with
|
|
Borland C++ 4.5.
|
|
|
|
A number of changes will have to be made to the Paradox Engine DBF v3.01
|
|
makefile in order for it to work with BC 4.5 (this makefile is available
|
|
from our local BBS at (408) 431-5096 as the file TI1169.ZIP and from
|
|
TechFax at (800) 822-4269, document number 1169):
|
|
|
|
1. Copy makefile.bc to make40.mak
|
|
|
|
2. Make certain that a turboc.cfg file exists in the BC45\BIN directory
|
|
containing:
|
|
|
|
-Ic:\bc45\include
|
|
-Lc:\bc45\lib
|
|
|
|
Make certain that a tlink.cfg file exist in the BC45\BIN directory
|
|
containing:
|
|
|
|
-Lc:\bc45\lib
|
|
|
|
Adjust the above paths to reflect your systems' configuration.
|
|
|
|
3. Make the following changes:
|
|
|
|
Line 83: Change the 'CCINCLUDE=' line to contain the path to the BC
|
|
4.5 include directory.
|
|
Line 168: Delete the blank space at the end of the 'DEBUGFLAG=v ' line
|
|
Line 172: Delete the blank space at the end of the 'DYNAMICFLAG=d ' line
|
|
Line 202: Add '-DWindows' after '-DWINDOWS'
|
|
Line 204: Add '-DWindows' after '-DWINDOWS'
|
|
Line 206: Add '-DWindows' after '-DWINDOWS'
|
|
Line 239: Replace '$D' with 'BuildDir'
|
|
Line 249: Replace '$D' with 'BuildDir'
|
|
Line 261: Replace '$D' with 'BuildDir'
|
|
|
|
Then use the following command to create a Database Framework Library.
|
|
Add one or both of the options -DDBG and -DWINDOWS to add debug info or
|
|
build for use in WINDOWS code. (Refer to the makefile for even more
|
|
options.)
|
|
|
|
make -fmake40.mak
|
|
|
|
For example, the following command will create a large model, static
|
|
windows DBF library with debug info:
|
|
|
|
make -DWINDOWS -DDBG -fmake40.mak
|
|
|
|
The libraries will be created in the PXENG30\C\LIB directory. These
|
|
libraries are now ready for use in your Database Frameworks Program.
|
|
|
|
|
|
CHANGES TO USER CODE WITH RESPECT TO DBF
|
|
|
|
The only change to your source code involves the use of the 'new'
|
|
operator. In BC++ 4.5, the new operator no longer returns NULL in case
|
|
of failure, rather the xalloc exception is thrown. To change this back
|
|
so operator new returns NULL, call set_new_handler(0).
|
|
|
|
The only remaining issue is with using the new operator in the
|
|
constructor of global objects. How do you call set_new_handler(0)
|
|
before a global object's constructor is called? This is accomplished by
|
|
using a #pragma startup function with a priority higher than that of the
|
|
startup function used to call the particular global object's
|
|
constructor. The following code shows an example of changing the
|
|
behavior of new:
|
|
|
|
#include <new.h>
|
|
|
|
void old_new(void)
|
|
{
|
|
set_new_handler(0);
|
|
}
|
|
|
|
#pragma startup old_new 31
|
|
|
|
BEngine eng(pxWin);
|
|
|
|
int main (void)
|
|
{
|
|
.
|
|
.
|
|
.
|
|
return 0;
|
|
}
|
|
|
|
Note that creating global instances of Database Framework objects is not
|
|
recommended because it can make error checking difficult.
|
|
|
|
The other option is to change the source of the Database Frameworks: Add
|
|
the try {} catch(xalloc) clause everywhere that new is called.
|
|
|
|
|