<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://manicpop.org/gewiki/index.php?action=history&amp;feed=atom&amp;title=Data_structures</id>
	<title>Data structures - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://manicpop.org/gewiki/index.php?action=history&amp;feed=atom&amp;title=Data_structures"/>
	<link rel="alternate" type="text/html" href="https://manicpop.org/gewiki/index.php?title=Data_structures&amp;action=history"/>
	<updated>2026-10-20T13:48:12Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://manicpop.org/gewiki/index.php?title=Data_structures&amp;diff=2148&amp;oldid=prev</id>
		<title>CodexBot: Link Btrieve explanation at first mention</title>
		<link rel="alternate" type="text/html" href="https://manicpop.org/gewiki/index.php?title=Data_structures&amp;diff=2148&amp;oldid=prev"/>
		<updated>2026-10-18T17:53:41Z</updated>

		<summary type="html">&lt;p&gt;Link Btrieve explanation at first mention&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;Galactic Empire&amp;#039;&amp;#039; uses C structures both as live state and as the bytes passed to [[Btrieve]]. A field&amp;#039;s type, order, and offset can therefore be part of the saved-game format. The principal definitions are in &amp;lt;code&amp;gt;GEMAIN.H&amp;lt;/code&amp;gt;; the 16-bit ge-next and 32-bit V10 ports must be read as distinct layouts, not as structures whose bytes can be copied between platforms.&lt;br /&gt;
&lt;br /&gt;
== Persistent records ==&lt;br /&gt;
The game has separate user, ship, planet-family, and (in standard ge-next) mail databases. The functions &amp;lt;code&amp;gt;geudb()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gepdb()&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;gesdb()&amp;lt;/code&amp;gt; select the corresponding Btrieve file and key. A Btrieve file is opened with the compiled &amp;lt;code&amp;gt;sizeof&amp;lt;/code&amp;gt; its record structure, so adding a field without removing or adjusting filler is not merely a source-code change.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Record !! Database role !! Classic structure !! Classic Btrieve record !! 16-bit ge-next 0.3 structure / record !! Elwynor V10 structure / record !! ge-next32 structure / record&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;WARUSR&amp;lt;/code&amp;gt; || One persistent player || 255 bytes || 246 bytes || 246 bytes || 256 bytes || 256 bytes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;WARSHP&amp;lt;/code&amp;gt; || One persistent ship || 514 bytes || 501 bytes || 501 bytes || 512 bytes || 512 bytes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GALSECT&amp;lt;/code&amp;gt; || Sector index || 512 bytes || 493 bytes || 493 bytes || 512 bytes || 512 bytes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GALPLNT&amp;lt;/code&amp;gt; || Planet body || 512 bytes || 493 bytes || 493 bytes || 512 bytes || 512 bytes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GALWORM&amp;lt;/code&amp;gt; || Wormhole body || 512 bytes || 493 bytes || 493 bytes || 512 bytes || 512 bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The shipped classic &amp;lt;code&amp;gt;MBMGEUSR.NEW&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MBMGESHP.NEW&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;MBMGEPLT.NEW&amp;lt;/code&amp;gt; Btrieve templates declare fixed record lengths of &amp;#039;&amp;#039;&amp;#039;246&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;501&amp;#039;&amp;#039;&amp;#039;, and &amp;#039;&amp;#039;&amp;#039;493&amp;#039;&amp;#039;&amp;#039; bytes respectively. The corresponding classic &amp;lt;code&amp;gt;.DAT&amp;lt;/code&amp;gt; files have the same lengths. These are the actual allotted &amp;#039;&amp;#039;logical record&amp;#039;&amp;#039; lengths, not the Btrieve page size or physical slot size. The planet database uses 493 bytes for each of its three record types.&lt;br /&gt;
&lt;br /&gt;
Classic&amp;#039;s &amp;lt;code&amp;gt;GEMAIN.H&amp;lt;/code&amp;gt; uses filler expressions written around nominal 256-byte user and 512-byte ship/planet targets. Summing its members under the byte-packed 16-bit layout instead gives the classic structure sizes shown in the table: the user structure is 255 bytes, not 256, and the ship structure is 514, not 512. These are calculated structure sizes, distinct from the fixed record lengths read from the shipped Btrieve templates. Classic opens each Btrieve file with &amp;lt;code&amp;gt;sizeof&amp;lt;/code&amp;gt; the compiled structure; the file&amp;#039;s own fixed-length definition is a separate constraint. ge-next&amp;#039;s 16-bit 0.3 structures use explicit filler sized to the real 246/501/493-byte records rather than perpetuating the misleading classic arithmetic.&lt;br /&gt;
&lt;br /&gt;
The shipped Elwynor V10 and ge-next32 Btrieve files confirm 256-byte user records and 512-byte ship and planet-family records, matching their respective structures; ge-next32 also checks all five structure sizes at compile time. Equal lengths do not imply compatible layouts: Elwynor&amp;#039;s port and ge-next32 arrange or use fields differently, so their database records should not be exchanged without conversion. A 16-bit record is not a truncated 32-bit record either: member order, alignment, and some compatibility slots differ. In particular, 0.3&amp;#039;s reordered records are not compatible with pre-0.3 saved games; the 0.3 release notes require a reset.&lt;br /&gt;
&lt;br /&gt;
=== WARUSR: player account ===&lt;br /&gt;
&amp;lt;code&amp;gt;userid&amp;lt;/code&amp;gt; is the identity key. &amp;lt;code&amp;gt;score&amp;lt;/code&amp;gt; is a roster-sorting key; &amp;lt;code&amp;gt;teamcode&amp;lt;/code&amp;gt; is another indexed key. Standard ge-next also stores cash, ship counts and highest assigned ship number, total and player-only kills, planet count, separate kill/planet score components, population, 30 option bytes, and eight faction-relation bytes. Its &amp;lt;code&amp;gt;score&amp;lt;/code&amp;gt; is the cumulative game score, while the kill and planet components describe where it came from. See [[Scoring and rosters]] and [[Droids#Factions and distress in ge-next|factions]].&lt;br /&gt;
&lt;br /&gt;
Classic reserved a 40-byte &amp;lt;code&amp;gt;waste&amp;lt;/code&amp;gt; area and retained a &amp;lt;code&amp;gt;debt&amp;lt;/code&amp;gt; field from an apparent earlier or unfinished credit system. The [[GEREADME.DOC#05/09/89_Release_2.0d|2.0d release notes]] say the debt line was removed from REPORT ACCOUNT, and 3.2e still includes an unused message about a bank limiting cash advances because of outstanding debt. The field is initialized to zero, but the surviving 3.2e code does not appear to incur or repay player debt. Not every odd-looking field was dead: &amp;lt;code&amp;gt;rospos&amp;lt;/code&amp;gt; was assigned during roster processing, displayed in reports, and used in kill-bonus calculation. ge-next eventually removed the unused space and the obsolete stored roster-position field, replacing its behavior with a roster lookup. A block of &amp;lt;code&amp;gt;key_filler&amp;lt;/code&amp;gt; in the 16-bit 0.3 structure deliberately keeps &amp;lt;code&amp;gt;teamcode&amp;lt;/code&amp;gt; at its required Btrieve key offset. A developer must not remove that block merely because it has no gameplay value.&lt;br /&gt;
&lt;br /&gt;
In ge-arena, the same persistent user-record family retains account settings and stores an &amp;lt;code&amp;gt;arena_wins[]&amp;lt;/code&amp;gt; count for each mode. Its &amp;lt;code&amp;gt;score&amp;lt;/code&amp;gt; is repurposed as total arena wins for roster sorting; per-match kills, deaths, time, bases, and mode score live in &amp;lt;code&amp;gt;ARENAPLAYER&amp;lt;/code&amp;gt;, not in permanent ship records. The win array takes bytes from reserved filler so that the arena variant keeps the same record length within its architecture. Arena and standard-game databases are separate and should not be interchanged.&lt;br /&gt;
&lt;br /&gt;
=== WARSHP: ship state ===&lt;br /&gt;
A ship record begins with its owner ID and &amp;lt;code&amp;gt;shipno&amp;lt;/code&amp;gt;, followed by name, class, status, coordinates, heading and target heading, speed and target speed, damage, flux energy, phaser and shield state, cloak state, and live control damage. It also holds the current lock, last attacker, ship kill counts, inventory, repair and combat timers, deployed decoy references, and incoming torpedo/missile tracking. The &amp;lt;code&amp;gt;ltorps[]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;lmissl[]&amp;lt;/code&amp;gt; arrays are ordnance pursuing &amp;#039;&amp;#039;this&amp;#039;&amp;#039; ship, not a list of everything this ship has fired. Later fields include upgrade bits, jamming, weapon throttles, overspeed accumulation, and state used by Cybertrons and other NPCs. Some fields are explicitly user-only or NPC-only even though they share the same record format.&lt;br /&gt;
&lt;br /&gt;
The live ship slot or MajorBBS channel is not the same thing as persistent &amp;lt;code&amp;gt;shipno&amp;lt;/code&amp;gt;. A slot can be reused; it must not be treated as a stable player identity in delayed combat state. See [[Ship slot]] and [[Ship number]]. Standard ge-next stores player and NPC ship records in the ship database; ge-arena uses disposable match ships, while its persistent user records remain. ge-arena&amp;#039;s &amp;lt;code&amp;gt;damage_notice&amp;lt;/code&amp;gt; byte for Cyber-Base warning thresholds consumes one byte of the 16-bit ship filler rather than increasing &amp;lt;code&amp;gt;WARSHP&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Classic carried fields associated with abandoned or partial ideas, including &amp;lt;code&amp;gt;train&amp;lt;/code&amp;gt; and an &amp;lt;code&amp;gt;emulate&amp;lt;/code&amp;gt; flag in the original header. The 0.2.6 line still retained the old field ordering, a 35-character ship-name array, and several fields added into legacy spare space. Before RC2, the ship-name array was brought into line with its actual usable length. In 0.3 RC2, &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;coord&amp;lt;/code&amp;gt;, movement values, combat state, equipment, and NPC state were regrouped, and unused/redundant members were removed. The new field order makes the record easier to audit but changes offsets, which is why old databases cannot be opened as though they were 0.3 records.&lt;br /&gt;
&lt;br /&gt;
=== Sector, planet, and wormhole ===&lt;br /&gt;
&amp;lt;code&amp;gt;GALSECT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;GALPLNT&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;GALWORM&amp;lt;/code&amp;gt; are different records in the &amp;#039;&amp;#039;same&amp;#039;&amp;#039; planet database. Each begins with &amp;lt;code&amp;gt;xsect&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ysect&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;plnum&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;, allowing a shared sector/number key. The sector index has &amp;lt;code&amp;gt;plnum == 0&amp;lt;/code&amp;gt; and contains &amp;lt;code&amp;gt;numplan&amp;lt;/code&amp;gt; plus up to nine &amp;lt;code&amp;gt;PLNTCOORD&amp;lt;/code&amp;gt; entries identifying the type and position of each body. Planets and wormholes use numbered body records; their filler makes every record in this Btrieve file the same length. &amp;lt;code&amp;gt;PKEY&amp;lt;/code&amp;gt; is the small lookup key used to address these records, not another stored body format. See [[Sector]] and [[Wormholes]].&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;GALPLNT&amp;lt;/code&amp;gt; record holds its coordinates, owner, name, environment and resource ratings, cash and tax, tax rate, trade password, fourteen &amp;lt;code&amp;gt;ITEM&amp;lt;/code&amp;gt; entries, beacon, spy owner, team code, and update bookkeeping. Each &amp;lt;code&amp;gt;ITEM&amp;lt;/code&amp;gt; has quantity, production rate, allied-sales flag, reserve, allied markup, and amount sold to allies. An unowned planet still has a full planet record; ownership does not determine whether the record exists. Standard ge-next uses &amp;lt;code&amp;gt;timestamp&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;plantimesave&amp;lt;/code&amp;gt; to schedule and resume production, and stores the nebula seed in Zygor&amp;#039;s &amp;lt;code&amp;gt;nebseed&amp;lt;/code&amp;gt; field. ge-arena leaves its nebula seed in memory; its planet filler instead contains shield/phaser boosts and flags for upgrades or maintenance, alongside the normal item fields. See [[Planetary production]], [[Zygor]], and [[Nebulas]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GALWORM&amp;lt;/code&amp;gt; stores entrance coordinates, a destination coordinate, visibility flag, and optional name. It has no planet economy or owner. Both planet and wormhole records share the sector key prefix and fixed-size database slot, but their remaining bytes mean different things. Blindly interpreting a wormhole as &amp;lt;code&amp;gt;GALPLNT&amp;lt;/code&amp;gt; would turn destination and padding bytes into bogus planet fields.&lt;br /&gt;
&lt;br /&gt;
=== Mail ===&lt;br /&gt;
Standard 16-bit ge-next opens its mail database using &amp;lt;code&amp;gt;sizeof(MESSAGE) + GEMSGSIZ&amp;lt;/code&amp;gt;, documented as a 1000-byte packed record. &amp;lt;code&amp;gt;MESSAGE&amp;lt;/code&amp;gt; is a MajorBBS-style message header and text envelope; &amp;lt;code&amp;gt;MAIL&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MAILSTAT&amp;lt;/code&amp;gt; are GE&amp;#039;s &amp;#039;&amp;#039;payload formats&amp;#039;&amp;#039; placed inside that text, not independent 1000-byte Btrieve records. A normal delayed report can carry a template ID, class, recipient, names, coordinates, and numeric parameters; a production-status report uses &amp;lt;code&amp;gt;MAILSTAT&amp;lt;/code&amp;gt; to carry a planet snapshot. The 32-bit port wraps the V10 message header and a fixed GE text payload in &amp;lt;code&amp;gt;GEMESSAGE&amp;lt;/code&amp;gt;, and opens the database using &amp;lt;code&amp;gt;sizeof(GEMESSAGE)&amp;lt;/code&amp;gt;. ge-arena does not use the mail database. See [[Classic bug: Rejected mail leaks into output]].&lt;br /&gt;
&lt;br /&gt;
The published classic GE source includes &amp;lt;code&amp;gt;message.h&amp;lt;/code&amp;gt; but does not provide the file. GE&amp;#039;s private mail database uses a message structure modeled on the MajorBBS mail header; classic could also route reports to a player&amp;#039;s MajorBBS mailbox. The classic release notes describe GE mail as the older path and say that a later release made the personal mailbox the default while retaining GE mail through &amp;lt;code&amp;gt;USEGEMSG&amp;lt;/code&amp;gt;. The distributed 3.2e &amp;lt;code&amp;gt;MBMGEMSG.MSG&amp;lt;/code&amp;gt;, however, sets &amp;lt;code&amp;gt;USEGEMSG&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;YES&amp;lt;/code&amp;gt;, selecting GE mail. The notes do not establish why the GE database adopted this structure or when the two delivery paths first appeared. Early ge-next reconstructed &amp;lt;code&amp;gt;MESSAGE.H&amp;lt;/code&amp;gt; from MajorBBS &amp;lt;code&amp;gt;GME.H&amp;lt;/code&amp;gt; to restore the missing definition. It subsequently removed the MajorBBS-mail delivery option and kept GE mail, then folded the reconstructed &amp;lt;code&amp;gt;MESSAGE&amp;lt;/code&amp;gt; definition directly into &amp;lt;code&amp;gt;GEMAIN.H&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Teams ===&lt;br /&gt;
&amp;lt;code&amp;gt;TEAM&amp;lt;/code&amp;gt; is a fixed-width team entry containing the code, name, member count, deletion date, password, and secret. Standard ge-next loads and saves its team table to &amp;lt;code&amp;gt;MPOGETEA.DAT&amp;lt;/code&amp;gt; as a separate text-backed table, not as a Btrieve planet/user/ship record. ge-arena does not use that file; any future arena teams are intended to be match-local. User and planet &amp;lt;code&amp;gt;teamcode&amp;lt;/code&amp;gt; fields still exist in their record layouts. See [[Teams]].&lt;br /&gt;
&lt;br /&gt;
== Live tables and workspaces ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Lifetime and purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;COORD&amp;lt;/code&amp;gt; || Two floating-point world coordinates. &amp;lt;code&amp;gt;coord1()&amp;lt;/code&amp;gt; derives a sector; &amp;lt;code&amp;gt;coord2()&amp;lt;/code&amp;gt; derives the within-sector position.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PLANETAB&amp;lt;/code&amp;gt; || One ship/channel&amp;#039;s cached nearby planets and wormholes. It is refreshed as sectors change; stale or cross-user cache use can produce incorrect gravity/orbit behavior. See [[Classic bug: Cross-user planet cache corruption]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SCANTAB&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;SHIPTAB&amp;lt;/code&amp;gt; || Per-user scan contacts, assigned letters, distances, and headings. This is a bounded display/index table, not a persistent roster of all ships. See [[Scantab]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MINE&amp;lt;/code&amp;gt; || Global active-mine slot: owner marker, timer, and location. Ownerless and unused are distinct markers in ge-next.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;TORPEDO&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;MISSILE&amp;lt;/code&amp;gt; || Compact incoming-projectile entries in &amp;lt;code&amp;gt;WARSHP&amp;lt;/code&amp;gt;, including the firing ship slot, distance to impact, and for missiles remaining energy.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SHIP&amp;lt;/code&amp;gt; || Loaded ship-class settings and NPC function hooks; configured from the ship-class MSG file, not a user ship record. ge-arena adds per-mode class and starting-loadout fields to this in-memory configuration.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;S00&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;WORMTAB&amp;lt;/code&amp;gt; || Predefined neutral-zone body descriptions and temporary wormhole-pair construction data.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ENTRYTAB&amp;lt;/code&amp;gt; || Per-channel throttling/timing state for ship-entry announcements.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ARENAPLAYER&amp;lt;/code&amp;gt; || ge-arena-only live player state: lobby readiness, match state, selected ship, respawn delay, kills/deaths, and mode score. It is reset independently of persistent arena wins.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The game also uses globals such as &amp;lt;code&amp;gt;warsptr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;waruptr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;plptr&amp;lt;/code&amp;gt;, and temporary record buffers as shared workspaces. These are intentional in the synchronous MajorBBS execution model; they are not independent copies for concurrent requests. A port that introduces concurrent handlers must isolate or serialize access to them.&lt;br /&gt;
&lt;br /&gt;
== How the layout evolved ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Classic 3.2e:&amp;#039;&amp;#039;&amp;#039; The large records contained reserved filler and some fields with little or abandoned gameplay use, such as &amp;lt;code&amp;gt;WARUSR.waste&amp;lt;/code&amp;gt;, user/planet debt, and &amp;lt;code&amp;gt;GALPLNT.technology&amp;lt;/code&amp;gt;. Others that look obscure, such as &amp;lt;code&amp;gt;rospos&amp;lt;/code&amp;gt;, were active. Classic packed multiple planetary body types into a shared fixed-length database, and relied on compile-time structure sizes and key offsets.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ge-next 0.1:&amp;#039;&amp;#039;&amp;#039; The first compiled ge-next release fixed cash/tax overflow behavior and several planetary and ship calculations while remaining broadly close to classic&amp;#039;s storage scheme. These fixes should not be confused with 0.3&amp;#039;s later wholesale layout change.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ge-next 0.2 and 0.2.6:&amp;#039;&amp;#039;&amp;#039; The NPC and planet-update overhaul added faction relation bytes to &amp;lt;code&amp;gt;WARUSR&amp;lt;/code&amp;gt;, repurposed ship state for new NPC behavior, and replaced the planet&amp;#039;s unused debt field with update timing. Subsequent pre-0.3 work added separate user-kill counts, a nebula seed, lock and entry state, and upgrade/overspeed fields, largely by using space in the legacy-shaped records. The 0.2.6 header still shows classic-style ordering and reserved areas.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ge-next 0.3 RC2 onward:&amp;#039;&amp;#039;&amp;#039; The broad restructuring removed obsolete fields, grouped related data, normalized types and names, assigned explicit offsets in comments, and recalculated filler. A separate 0.3 fix corrected &amp;lt;code&amp;gt;GALPLNT&amp;lt;/code&amp;gt;&amp;#039;s filler after its actual item-array size was verified. Compatibility with earlier saved games was deliberately broken; resetting the databases was required. Later arena builds consume reserved bytes for arena wins, powerups, and NPC notices without changing each build&amp;#039;s fixed record length.&lt;br /&gt;
&lt;br /&gt;
The source comments documenting offsets are an audit aid, not a substitute for checking &amp;lt;code&amp;gt;sizeof&amp;lt;/code&amp;gt; and actual Btrieve key definitions. The V10 port uses fixed-width &amp;lt;code&amp;gt;SHORT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;USHORT&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;ULONG&amp;lt;/code&amp;gt; fields where appropriate and compile-time size assertions for the major records. Copying a 16-bit &amp;lt;code&amp;gt;.DAT&amp;lt;/code&amp;gt; file to the 32-bit port is not a record conversion; it requires a deliberate field-by-field migration, including key layout, signedness, and reserved bytes.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Source code]]&lt;br /&gt;
* [[Classic bug database]]&lt;br /&gt;
* [[Porting Galactic Empire]]&lt;br /&gt;
* [[Integer and storage assumptions]]&lt;br /&gt;
&lt;br /&gt;
{{GE navigation}}&lt;br /&gt;
[[Category:Source code]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>CodexBot</name></author>
	</entry>
</feed>