- 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>
269 lines
9.3 KiB
C++
269 lines
9.3 KiB
C++
// BDE - (C) Copyright 1994 by Borland International
|
|
|
|
#include <windows.h>
|
|
#include <commdlg.h>
|
|
#include <idapi.h>
|
|
#include <ctl3d.h>
|
|
#include <cderr.h>
|
|
#include <string.h>
|
|
#include <io.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <dos.h> // for date structure and getdate function
|
|
#include <direct.h>
|
|
#include <errno.h>
|
|
#include <malloc.h>
|
|
#include <ctype.h>
|
|
#include "id_defs.h"
|
|
#include "macro.h"
|
|
|
|
// Macro for Subclassing the edit control.
|
|
#define SubClassWindow(hWnd, lpfn) \
|
|
((WNDPROC)SetWindowLong((hWnd), GWL_WNDPROC, \
|
|
(LPARAM)(WNDPROC)(lpfn)))
|
|
|
|
// Define used for Microsoft compilers
|
|
#if defined(_MSC_VER)
|
|
#define farmalloc(parm) _fmalloc(parm)
|
|
#define farfree(parm) _ffree(parm)
|
|
// Leave it blank on purpose as VC++ minds having far declared.
|
|
#define ABFAR
|
|
#endif
|
|
|
|
#if defined(__TURBOC__) && defined(_Windows)
|
|
#define ABFAR far
|
|
#endif
|
|
|
|
// Definitions needed for engine.c
|
|
#define NAMELEN 20
|
|
#define ADDRESSLEN 40
|
|
#define CITYLEN 20
|
|
#define STATELEN 3
|
|
#define ZIPLEN 13
|
|
#define PHONELEN 21
|
|
#define DATELEN 11
|
|
#define COMMENTLEN 300
|
|
|
|
#define TOP 0
|
|
#define BOTTOM 2
|
|
#define PREV_REC -1
|
|
#define NEXT_REC 1
|
|
#define RANGEERROR 2
|
|
#define STRLEN 256
|
|
#define MAXFILENAMELEN 256
|
|
#define MAXFILETITLELEN 256
|
|
#define MAXPASSLEN 30
|
|
#define MAXALIAS 256
|
|
#define szINTERBASE "INTERBASE TABLE"
|
|
#define szSYBASE "SYBASE"
|
|
#define szORACLE "ORACLE"
|
|
#define szPERSONAL "Personal"
|
|
#define szBUSINESS "Business"
|
|
#define NEW 1
|
|
#define OPEN 2
|
|
#define MAXCHARLEN 60000L
|
|
#define FILEHANDLESNEEDED 40
|
|
|
|
typedef UINT (CALLBACK* FARHOOK)(HWND, UINT, WPARAM, LPARAM);
|
|
|
|
// Externs for global data
|
|
extern HINSTANCE hInst;
|
|
extern HWND hMainWnd;
|
|
extern HWND hErrorWnd;
|
|
extern BOOL NewRecMode;
|
|
extern BOOL RangeSet;
|
|
extern WNDPROC _wpOrigWndProc;
|
|
extern FARHOOK lpfnFileHook;
|
|
extern UINT16 iMSGFileOK;
|
|
extern BOOL bIsServer;
|
|
|
|
// Variables for table creation
|
|
extern const UINT16 uNumFields; // used in engine.c
|
|
extern const UINT16 uNumIndexes; // used in engine.c
|
|
extern const UINT16 uNumRecs; // Number of records to insert
|
|
|
|
// The name of the table to use and the directory of where to put it.
|
|
extern const char far szTblName[];
|
|
extern char far szTblDirectory[];
|
|
extern char far szPrivDirectory[];
|
|
extern const char far szTblType[];
|
|
|
|
// Structures used throughout the code.
|
|
extern FLDDesc ABFAR fldDesc[];
|
|
extern IDXDesc ABFAR idxDBDesc[];
|
|
extern IDXDesc ABFAR idxIBPDDesc[];
|
|
|
|
// Variables for ENGINE.C
|
|
typedef struct {
|
|
CHAR FName[NAMELEN];
|
|
CHAR LName[NAMELEN];
|
|
CHAR Spouse[ADDRESSLEN];
|
|
CHAR Addrs1[ADDRESSLEN];
|
|
CHAR Addrs2[ADDRESSLEN];
|
|
CHAR City[CITYLEN];
|
|
CHAR State[STATELEN];
|
|
CHAR Zip[ZIPLEN];
|
|
CHAR Phone1[PHONELEN];
|
|
CHAR Phone2[PHONELEN];
|
|
CHAR Date1[DATELEN];
|
|
CHAR Comment[COMMENTLEN];
|
|
} RecordType;
|
|
|
|
// Structures for OpenFile dialog.
|
|
typedef struct
|
|
{
|
|
OPENFILENAME ofn;
|
|
CHAR szFile[MAXFILENAMELEN];
|
|
CHAR szFileTitle[MAXFILETITLELEN];
|
|
CHAR szDirectory[DBIMAXPATHLEN + 1];
|
|
CHAR szTitle[DBIMAXNAMELEN];
|
|
}FOCHUNK;
|
|
|
|
typedef FOCHUNK FAR *LPFOCHUNK;
|
|
|
|
typedef struct
|
|
{
|
|
CHAR Password[MAXPASSLEN];
|
|
CHAR Alias[DBIMAXTBLNAMELEN];
|
|
CHAR Database[DBIMAXTBLNAMELEN];
|
|
}PASSSTRUCT;
|
|
|
|
typedef struct
|
|
{
|
|
phDBIDb phDb;
|
|
UINT16 uType;
|
|
}ABCREATESTRUCT;
|
|
|
|
typedef ABCREATESTRUCT FAR *pCS;
|
|
|
|
typedef struct
|
|
{
|
|
DBINAME szTagName;
|
|
DBIKEYEXP szKeyExp;
|
|
UINT16 iFldsInKey;
|
|
DBIKEY aiKeyFld;
|
|
DBIKEY aiKeyLen;
|
|
}ABIDXDESC;
|
|
typedef ABIDXDESC FAR *pABIDXDESC;
|
|
|
|
typedef struct
|
|
{
|
|
phDBICur phCur;
|
|
hDBIDb hDb;
|
|
}ABHANDLES;
|
|
typedef ABHANDLES FAR *pAbHandles;
|
|
|
|
typedef struct
|
|
{
|
|
CHAR FieldName[DBIMAXNAMELEN + 2];
|
|
}FIELDNAME;
|
|
typedef FIELDNAME FAR *pFIELDName;
|
|
|
|
// Function prototypes for ADR_MAIN.C
|
|
BOOL InitApp(int nCmdShow);
|
|
long FAR _pascal _export MainWndProc(HWND, UINT, UINT, LONG);
|
|
BOOL FillStruct(RecordType *, UINT16, pCHAR);
|
|
BOOL DisplayTable(hDBICur hCur);
|
|
BOOL TableExist(pCHAR);
|
|
BOOL FillTable (hDBICur hCur, pCHAR ABType);
|
|
BOOL DispRec(RecordType *);
|
|
DBIResult MoveRec (hDBICur hCur, INT16);
|
|
void CheckButtons(hDBICur hCur);
|
|
void SetupEdits(void);
|
|
BOOL SaveRec(hDBICur hCur, BOOL);
|
|
BOOL GetRec(RecordType *);
|
|
BOOL DeleteRecord(hDBICur hCur);
|
|
void SetControl(UINT16, BOOL);
|
|
UINT16 FillDropList (HWND, UINT16, UINT16, pABIDXDESC, pCHAR);
|
|
void SetFNameFocus(void);
|
|
BOOL ClearDlg(void);
|
|
BOOL Varified(void);
|
|
BOOL CanContinue(pCHAR, UINT16);
|
|
void EndNewRec(hDBICur hCur);
|
|
DBIResult SetDefaultDate (void);
|
|
void FillFieldList(HWND);
|
|
void GetField(RecordType *, pCHAR, UINT16);
|
|
void PutField(RecordType *, pCHAR, UINT16);
|
|
DBISearchCond GetCond(HWND);
|
|
void FillAliasCBBox(pDBDesc pAliases, UINT32 uNumAliases,
|
|
UINT16 CBId, HWND hWnd);
|
|
BOOL FillFileList (HWND hWnd, UINT16 LBId, hDBIDb hDb);
|
|
void SetFieldNames(hDBICur hCur);
|
|
pCHAR Proper(pCHAR String);
|
|
void SetAll(BOOL bAction);
|
|
BOOL HourGlassCursor (BOOL turnOn);
|
|
|
|
// Function prototypes for ADR_UTIL.C
|
|
UINT16 WinMsg(pCHAR, UINT16, UINT16);
|
|
void ChangeEntryMode(hDBICur hCur);
|
|
int MakeFullPath(pCHAR pszDirectory, pCHAR pszRelativeDirectory);
|
|
|
|
// Functions for ENGINE.C
|
|
DBIResult DbInit(void);
|
|
DBIResult DbExit(void);
|
|
DBIResult CreateTable(hDBIDb hDb, phDBICur phCur, pCHAR);
|
|
DBIResult AddRecord(hDBICur hCur, RecordType *, BOOL);
|
|
DBIResult SetDate(pDATE Date, pCHAR pszString);
|
|
DBIResult GetTable(hDBIDb hDb, phDBICur phCur);
|
|
DBIResult CloseDb(phDBIDb phDb);
|
|
DBIResult GetData(hDBICur hCur, RecordType *);
|
|
DBIResult FillRec(hDBICur hCur, pBYTE, RecordType *);
|
|
DBIResult GoTop(hDBICur hCur, BOOL bMoveRec);
|
|
DBIResult GetNextRec(hDBICur hCur);
|
|
DBIResult GetPrevRec(hDBICur hCur);
|
|
DBIResult GoBottom(hDBICur hCur, BOOL bMoveRec);
|
|
DBIResult SetIndex(phDBICur phCur, pCHAR szTagName);
|
|
DBIResult SetupIndex(phDBICur phCur, pCHAR szName, pCHAR szTagName,
|
|
UINT16 IndexId);
|
|
BOOL AtEOF(hDBICur hCur);
|
|
BOOL AtBOF(hDBICur hCur);
|
|
DBIResult FillIndexStr(hDBICur hCur, hDBIDb hDb, pABIDXDESC *pIndexes,
|
|
pCHAR pszActIdx, pUINT16 puIndexes);
|
|
DBIResult DeleteRec(hDBICur hCur);
|
|
DBIResult SetRange(RecordType *pHighRec, RecordType *pLowRec,
|
|
BOOL bHighInclude, BOOL bLowInclude, hDBICur hCur,
|
|
BOOL bHighEmpty, BOOL bLowEmpty);
|
|
DBIResult FillBuf(hDBICur hCur, pBYTE pRecBuf, RecordType* pString);
|
|
DBIResult Search(hDBICur hCur, DBISearchCond eCond, BOOL bDirect,
|
|
UINT16 iFlds, UINT16 iLen, RecordType *pKey);
|
|
DBIResult ResetRange(hDBICur hCur);
|
|
DBIResult DateEncode(UINT16 mon, UINT16 day, UINT16 year, pDATE pTempDate);
|
|
DBIResult GetDateFormat(pFMTDate pDate);
|
|
DBIResult GetDirectory(hDBIDb hDb, pCHAR pszBuffer);
|
|
DBIResult FillAliasStr(pDBDesc *Alias, pUINT32 plNumAliases);
|
|
DBIResult OpenDB(phDBIDb phDb, pCHAR pszTableType, pCHAR pszPassword,
|
|
pCHAR pszAlias);
|
|
DBIResult DisplayError(DBIResult rslt, pCHAR* pMsg);
|
|
DBIResult GetFieldInfo(pCHAR pFld, pUINT16 FldNum, pUINT16 FldLen,
|
|
hDBICur hCur, UINT16 iFields);
|
|
void StripChar (pCHAR Dest, pCHAR Src, CHAR Char);
|
|
DBIResult GetMdxName(hDBICur hCur, pCHAR MdxName);
|
|
DBIResult GetIndexDescs(hDBIDb hDb, pIDXDesc AllDesc);
|
|
DBIResult GetFldNames(hDBICur hCur, pFIELDName pFieldNames);
|
|
DBIResult CloseTable(phDBICur pCur);
|
|
DBIResult CheckTable(hDBICur hCur, pBOOL pbFlag);
|
|
DBIResult GetTblType(hDBICur hCur, pCHAR szTableType);
|
|
DBIResult InitIndex1(phDBICur phCur);
|
|
DBIResult GetTableList(hDBIDb hDb, phDBICur phTblCur);
|
|
DBIResult GetNextTblRec(hDBICur hTblCur, pTBLBaseDesc pbaseDesc);
|
|
DBIResult DeleteTable(phDBICur phCur, hDBIDb hDb, pCHAR TblName,
|
|
pCHAR TblType);
|
|
|
|
// Functions for ADRCMDLG.C
|
|
BOOL FAR _pascal _export PasswdDlg (HWND, WORD, WORD, LONG);
|
|
BOOL FAR _pascal _export TypeDlg (HWND, WORD, WORD, LONG);
|
|
BOOL FAR _pascal _export FileHook(HWND, UINT, WPARAM, LPARAM);
|
|
void InitializeStruct(LPSTR, pCS);
|
|
void ProcessCDError(UINT32 dwErrorCode);
|
|
BOOL ChkExt(pCHAR szFileName);
|
|
BOOL IsStandard(pCHAR szAlias, pDBDesc pAliases, UINT32 uNumAliases);
|
|
void SetupDialog(HWND hDlg, INT16 Action);
|
|
|
|
// Functions for ADR_DLGS.C
|
|
long FAR _pascal _export EditSubClassProc(HWND, WORD, WORD, LONG);
|
|
BOOL FAR _pascal _export AboutDlg(HWND, WORD, WORD, LONG);
|
|
BOOL FAR _pascal _export OrderDlg(HWND, WORD, WORD, LONG);
|
|
BOOL FAR _pascal _export RangeDlg(HWND, WORD, WORD, LONG);
|
|
BOOL FAR _pascal _export SearchDlg(HWND, WORD, WORD, LONG);
|
|
|