Files
fpc-msgbase/docs/format-notes/dependencies.md

76 lines
3.0 KiB
Markdown

# External dependencies in copied format units
## Sample data
Real message bases for testing live at `~/fidonet/msg/`:
- `hudson/` — Hudson MSGINFO/IDX/HDR/TXT/TOIDX.BBS set
- `jam/` — many JAM echo areas (e.g. `10thamd.jhr/jdt/jdx/jlr`)
- `echomail.jam/` — extra JAM samples
- `netmail/` — FTS-1 *.MSG numbered files (mixed upper/lower case on disk)
- `squish/` — Squish bases (currently empty but layout reserved)
- `local/jam/`, `lowerit/`, `passthru/` — additional collections
Tests should open these read-only and verify message counts, first/last
messages, and specific known attributes. Do NOT write to these paths
from tests — copy them into a scratch dir first.
## Authoritative specs
The FTSC document collection at `/home/ken/Source Code/ftsc/docs/` is the
source of truth when validating attribute bits, packet header layouts,
date strings, and kludge syntax. Key documents we cross-check against:
- `fts-0001.016` — FTS-1 packet & message format (PKT, *.MSG, attributes,
date string, kludges)
- `fsc-0039.001` / `fsc-0039.004` — Type-2+ packet header
- `fsc-0045.001` — Type-2.2 packet header
- `fsc-0048.002` — AuxNet Type-2 variant
- `fsc-0009`, `fsc-0035` etc. — kludges and control lines
When in doubt about an encoding or bit position, reference the spec
before changing the conversion tables in `ma.types.pas`.
These references were inherited from the Allfix tree and need to be resolved
during the format-by-format refactor pass.
## ma.fmt.pkt.pas
Currently uses: `msgunit`, `netaddrs`, `aftypes`.
Needs from `msgunit`:
- `PktHeader` — 58-byte FTN packet header record
- `PktRecord` — per-message header record inside a packet
- `PacketRecord` — high-level parsed message with kludges, address parts,
flavours, etc.
- `FlavourType`, `FlavourTypeSet`, `DateTimeArray`
Plan:
- Move `PktHeader` + `PktRecord` into `ma.fmt.pkt.pas` itself (packet-only).
- Move `PacketRecord`, `FlavourType`, `FlavourTypeSet`, `DateTimeArray`
into `ma.types.pas` so other backends can use them where needed.
- Drop the `msgunit` / `netaddrs` / `aftypes` `uses` clauses.
## ma.fmt.wildcat.pas + ma.fmt.wcutil.pas
Use the WildCat 4 SDK. The SDK source has been copied verbatim into
`src/wc_sdk/` (formerly `wc_dev/` in Allfix) so this repo can build the
Wildcat backend without external paths.
The SDK pulls in OS/2-era helpers (`Os2Comp`, `DosUtil`, `p_System`,
`btisbase`, `isamtool`, …). Keeping it on its own search-path entry
(`-Fusrc/wc_sdk`) means callers that don't need Wildcat can omit the
backend without forcing the SDK onto the build line.
## include.inc
Allfix sources start with `{$I include.inc}`. Our copied units no longer
have that on the search path (we deliberately want the new lib to be
self-contained). Plan during refactor:
- Replace each `{$I include.inc}` with explicit `{$mode objfpc}{$H+}` plus
any other compiler switches the unit actually needs (most don't need
more than mode + `$H+`).
- Drop `WILDCAT4`, `EXECSWAP`, `UNI` and other Allfix-specific defines.