Removes all PKT code from fpc-msgbase. The wire format and its
container concerns now live in the sibling fpc-ftn-transport
library (units tt.pkt.format, tt.pkt.reader, tt.pkt.writer,
tt.pkt.batch). Pair this commit with fpc-ftn-transport's
0.2.0 (commit 6bb71a6).
Why: the previous "reader here, writer there" split (briefly
landed in 0.3.5) baked in a coupling that didn't survive a
fresh look. The writer reached into fpc-msgbase for types,
the wire format lived in the wrong house, and consumers reading
fpc-msgbase saw "PKT support" that was actually only half-
support. Cleanest split: PKT is a wire format, both directions
belong with the wire-format-aware library; fpc-msgbase becomes
purely real message bases (Hudson / JAM / Squish / MSG /
PCBoard / EzyCom / GoldBase / Wildcat).
Also a cleaner separation-of-concerns story: a BBS that just
reads JAM/Squish never needs fpc-ftn-transport. A pure store-
and-forward node doing only ArcMail unbundle never depends on
storage formats. Each library = one concern.
Removed:
src/formats/ma.fmt.pkt.pas -> tt.pkt.format
src/formats/ma.fmt.pkt.uni.pas -> tt.pkt.reader
(TPktMessageBase -> TPktReader)
src/ma.batch.pas -> tt.pkt.batch
(TPacketBatch class name unchanged)
tests/test_batch.pas -> tests/test_pkt_writer.pas
(consolidated PKT tests)
examples/example_tosser.pas -> moves with the batch helper
Reduced in src/ma.types.pas:
- PacketRecord
- FlavourType / FlavourTypeSet / DateTimeArray
- FlagsToFido / FidoToFlags
- VersionNum (PKT-product-code stamping)
All moved to tt.pkt.format.
Kept in src/ma.types.pas:
- mbfPkt enum value (so tt.pkt.reader can register the backend
with the unified-API factory; consumers still use the
standard MessageBaseOpen(mbfPkt, ...) shape)
Migration for vendoring consumers:
before: after:
uses ma.fmt.pkt; uses tt.pkt.format;
uses ma.fmt.pkt.uni; uses tt.pkt.reader;
uses ma.batch; uses tt.pkt.batch;
(no writer surface) uses tt.pkt.writer;
TPktMessageBase TPktReader
TPktFile, TPktMessage, (unchanged class names)
TPktHeaderInfo, etc.
TPacketBatch (unchanged)
Docs sweep:
- README: PKT row called out as "moved to fpc-ftn-transport";
TPacketBatch removed from features.
- docs/architecture.md: layer diagram drops PKT + ma.batch;
new sibling-library box added for fpc-ftn-transport.
- docs/attributes-registry.md: PKT column dropped from per-
format support matrix; pointer to fpc-ftn-transport.
- docs/API.md: PKT cheat-sheet entry redirects to
fpc-ftn-transport; TPacketBatch section reduced to a
"moved" pointer with the new uses-clause shape.
- docs/ftsc-compliance.md: Type-2 / 2+ / 2.2 / AuxNet rows
annotated as living in tt.pkt.format.
Suite: 47/47 across 9 programs (was 9 with test_batch; now 9
with the PKT bits dropped from test_consumer_round1 and
test_hwm). All other tests untouched.
2.3 KiB
2.3 KiB
FTSC compliance
This library treats the FTSC document collection at
/home/ken/Source Code/ftsc/docs/ as authoritative for every
FidoNet-family format. Wire formats, attribute bits, date strings,
packet headers, and kludge syntax must match the specs exactly.
Specs applied
| Area | Spec | Status in ma.types.pas |
|---|---|---|
| FTS-1 attribute word (bits 0..15) | fts-0001.016 | Verified: bits match spec |
| FTS-1 *.MSG file layout (190 bytes) | fts-0001.016 | Implemented per spec |
| FTS-1 DateTime string "DD MMM YY HH:MM:SS" | fts-0001.016 | MsgDateToTDateTime matches |
| Type-2 packet header (58 bytes) | fts-0001.016 | Lives in fpc-ftn-transport's tt.pkt.format |
| Type-2+ packet header | fsc-0039.004 | Lives in fpc-ftn-transport's tt.pkt.format |
| Type-2.2 packet header | fsc-0045.001 | Lives in fpc-ftn-transport's tt.pkt.format |
| AuxNet Type-2 variant | fsc-0048.002 | Lives in fpc-ftn-transport's tt.pkt.format |
Kludge lines (^AMSGID, ^AREPLY, …) |
fsc-0009, … | Implemented per spec |
Non-FTSC formats
Several backends cover formats that are not FTSC:
- Hudson — QuickBBS-style 5-file layout. Spec source: QuickBBS documentation.
- JAM — jam.txt by Joaquim Homrighausen, Andrew Milner, Mats Birch, Mats Wallin. Canonical spec shipped with the JAM reference code.
- Squish — Lanius
squish.docby Scott Dudley. - PCBoard — Clark Development
pcboard.doc. - EzyCom — EzyCom reference.
- GoldBase — widened Hudson variant.
- Wildcat — MSI SDK (vendored in
src/wc_sdk/).
Verification protocol per format
Before marking a format implementation complete:
- Open every sample base under
tests/data/<format>/read-only, walk all messages, dump to text. Verify counts and known field values. - Round-trip: read every message, write it to a fresh base, read back, compare. Every field a backend writes during a Read it MUST re-consume during a subsequent Write.
- Re-read the relevant FTSC / format spec and confirm every field
in
TUniMessageis preserved.