Files
TeslaRel410/BORLAND/BDE/EXAMPLES/PASCAL/BOOKMARK.PAS
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

143 lines
5.0 KiB
ObjectPascal

{ BookMark.pas }
program BookMark;
{$IfDef VER80}
uses SnipTool, SnipData, SysUtils, WinTypes, WinProcs,
DbiProcs, DbiTypes, DbiErrs;
{$Else}
uses WinTypes, WinCrt, Strings, DbiProcs, DbiTypes, DbiErrs,
SnipTool, SnipData;
{$EndIf}
const
szTblName = 'customer'; { Name of table to be opened. }
szTblType = szPARADOX; { Table type to use. }
{=====================================================================
Procedure: BookMark();
Input: None.
Return: None.
Description:
This example shows how to save the current position within
a cursor (the current record). The position within the
cursor will then be changed and reset to that location.
Note: A bookmark only works with the current cursor. If the
cursor is changed - such as changing the active index,
then the bookmark may become corrupt or invalid. Therefore,
if you switch indexes you will need to regenerate the bookmark.
===================================================================== }
var
hDb: hDBIDb; { Handle to the database }
hCur: hDBICur; { Handle to the table }
TblProps: CURProps; { Table properties }
const
pBookBuf: pBYTE = nil; { Pointer to the bookmark }
begin
Screen('*** BookMark Example ***');
Screen('');
Screen(' Initializing IDAPI... ');
if (InitAndConnect(hDb) <> DBIERR_NONE) then { Terminate example if }
begin { Initialization fails }
Screen('');
Screen('*** End of Example ***');
exit;
end;
Screen(' Setting the Database directory... ');
ChkRslt(DbiSetDirectory(hDb, pCHAR(szTblDirectory)), DBIERR_NONE,
' Error - SetDirectory.');
Screen(' Opening the '+szTblName+' table... ');
if (ChkRslt(DbiOpenTable(hDb, pCHAR(szTblName), pCHAR(szTblType),
nil, nil, 0, dbiREADWRITE, dbiOPENSHARED,
xltFIELD, FALSE, nil, hCur),
DBIERR_NONE, ' Error - OpenTable.') <> DBIERR_NONE) then
begin
Screen(' Close the Database and exit IDAPI... ');
CloseDbAndexit(hDb);
Screen('');
Screen('*** End of Example ***');
exit;
end;
{ Get the properties of the table so that we can create the correct
bookmark size for the present condition of the table. Since the
bookmark is cursor related it can change with any change to the
cursor, such as a change to the index or filters. }
ChkRslt(DbiGetCursorProps(hCur,TblProps), DBIERR_NONE,
' Error - GetCursorProperties.');
{ Move forward one record }
ChkRslt(DbiGetNextRecord(hCur, dbiNOLOCK, nil, nil), DBIERR_NONE,
' Error - GetNextRecord.');
Screen(' Displaying the first record in the table...');
ChkRslt(DisplayNextRecord(hCur), DBIERR_NONE,
' Error - DisplayNextRecord.');
Screen('');
Screen(' Jumping to the third record in the table... ');
ChkRslt(DbiGetRelativeRecord(hCur, 2, dbiNOLOCK, nil, nil),
DBIERR_NONE, ' Error - GetRelativeRecord.');
{ Create the bookmark buffer. The size comes from the table property
BookMarkSize. }
GetMem (pBookBuf, TblProps.iBookMarkSize);
if not Assigned(pBookBuf) then
begin
Screen(' Error: Out of memory.');
CloseDbAndexit(hDb);
Screen('');
Screen('*** End of Example ***');
exit;
end;
{ Display the record that we will set a bookmark on. }
Screen(' Getting a bookmark on this record...');
ChkRslt(DbiGetBookMark(hCur, pBookBuf), DBIERR_NONE,
' Error - GetBookMark.');
ChkRslt(DisplayNextRecord(hCur), DBIERR_NONE,
' Error - DisplayNextRecord.');
Screen('');
Screen(' Jumping to the end of the table...');
ChkRslt(DbiSetToEnd(hCur), DBIERR_NONE, ' Error - SetToend. ');
{ Set to end moves past the last record }
ChkRslt(DbiGetPriorRecord(hCur, dbiNOLOCK, nil, nil), DBIERR_NONE,
' Error - DbiGetPriorRecord.');
Screen(' Display the record...');
ChkRslt(DisplayCurrentRecord(hCur), DBIERR_NONE,
' Error - DisplayCurrentRecord.');
Screen('');
Screen(' Going back to the bookmarked record...');
ChkRslt(DbiSetToBookMark(hCur, pBookBuf), DBIERR_NONE,
' Error - SetToBookMark.');
Screen(' Displaying the bookmarked record...');
ChkRslt(DisplayNextRecord(hCur), DBIERR_NONE,
' Error - DisplayNextRecord.');
Screen('');
Screen(' Close the Table ...');
ChkRslt(DbiCloseCursor(hCur), DBIERR_NONE, ' Error - CloseCursor.');
FreeMem(pBookBuf, TblProps.iBookMarkSize);
Screen(' Close the database and exit IDAPI...');
CloseDbAndexit(hDb);
Screen('');
Screen('*** End of Example ***');
end.