[H] HOMEATARI MUTINEER / DOCUMENTATION / 1.3.183

Data and File Formats

Reference the board's registries, records, indexes, metadata, and paths.

Browse documentation

Data And File Formats

This page documents files used by the packaged ATR and live board.

ATR Directory Layout

Normal Mutineer ATR:

  • Root: AUTOEXEC.BAT, AUTOGO, RHND850.COM, REMMS.COM, README.
  • D1:>CORE>: tokenized BASIC runtime modules and interactive overlays.
  • D1:>TOOLS>: tokenized local/job utility modules.
  • D1:>PROTO>: native transfer protocol binaries.
  • D1:>DATA>: runtime databases and config.
  • Configured ASCII root: ASCII menus/static files.
  • Configured ATASCII root: ATASCII menus/static files.
  • D1:>MAIL>: default message base files.

Configuration Files

D1:>DATA>PATHREG.DAT is the fixed bootstrap location for the binary path registry. Its eight-byte header contains PREG, version 1, record size 64, record count, and generation. Each 64-byte record contains a 16-bit stable ID, flags, path length, an eight-byte name, and a 52-byte uppercase SpartaDOS path.

Flags identify directories, required files, writable targets, and text assets. Paths are limited to D1: through D8: and reject controls, wildcards, traversal, malformed syntax, duplicates, and truncation. INIT and host tooling validate the complete registry and atomically replace it through .NEW and .BAK. Runtime modules look up and cache only the records they use, validating the selected record before consuming its path. If both the live and backup registries are invalid, REMMS detaches and INIT stops at usable BASIC.

The registry supplies data, core, tools, protocols, ASCII, ATASCII, mail, network, and doors roots plus stable records for packaged menus, static text, common user/caller files, transfer handoff files, scheduler files, and global network queue/config files. APPREG.DAT, DOORCAT.DAT, message metadata, and file metadata remain the authorities for their dynamic targets.

Runtime path ownership classes:

  • fixed bootstrap: RUNBBS, APPMGR, PATHREG.DAT, PATHREG.BAK, and PATHREG.NEW;
  • path registry: common config/data/spool files with stable PATHREG IDs;
  • app registry: registered BASIC/native application targets;
  • door catalog: door target paths and minimum access levels;
  • message metadata: MESG?.MET/.DAT/.IDX plus base-local message worker files under the configured message root;
  • file metadata: FILE?.MET/.DAT/.IDX, public upload paths, and quarantine paths;
  • native worker contracts: lock, journal, swap, recovery, and compaction files owned by message/file native workers.

D1:>DATA>CONFIG is line-oriented text:

CSECT
CBYTE
CALLNO
MSECT
MBYTE
MSGS
HMSG
IDLEMIN
ANSRINGS

WFC, CORE, and SYSOP read it to track caller history pointers and message counts and the inactivity logout timer in minutes. IDLEMIN=0 disables idle logout. ANSRINGS is the number of RING indications REMMS waits before answering, clamped to 1..9. The packaged default is 657, 48, 0, 559, 21, 1, 1, 15, 1.

D1:>DATA>MSGBASE.CFG stores the message-base root on line 1 and the active base IDs on line 2 (for example, 0A). BASIC readers cache this list instead of probing all 27 possible metadata files. A legacy one-line file remains readable and falls back to probing all IDs. The native message ABI fixes this path at D1:>MAIL>; changing the file is not a supported relocation mechanism. Its packaged value is:

D1:>MAIL>

D1:>DATA>SCHED.CFG stores generic scheduled jobs. Message jobs use registered application keys, not a message-specific hard-coded table. The packaged defaults declare MSGVER daily, MSGNET daily, and MSGCOMP weekly. WFC dispatches one eligible job per RTC minute while idle with no carrier or pending ring.

D1:>DATA>SYSOP.CFG controls remote sysop chat availability and snoop default. Current format:

SYSC,2
available
snoop_default

0 means remote callers who use Y see SYSOP NOT AVAILABLE. and CORE stays loaded. 1 allows CORE to dispatch the SYSCHAT pager. The local console rings three times, five seconds apart; the SysOp presses the Atari START console key to answer. The caller can cancel the page with Ctrl-X. If no answer arrives during the three-ring window, the caller is told the SysOp is not available but has been notified, then returns to CORE. Legacy one-number files remain readable as availability-only files.

D1:>DATA>ACL.CFG is comma-separated:

level,session_minutes,daily_minutes

Level 0 is banned. Level 9 is sysop. LOGIN applies session and daily limits from this file during login/registration.

Compact Permission Authorities

Mutineer v1 uses compact minimum-level fields rather than resident per-level permission matrices:

  • APPREG.DAT stores the minimum level for each app.
  • DOORCAT.DAT stores the minimum level for each door.
  • MESG?.MET stores read and post levels plus moderation mode.
  • FILE?.MET stores view, download, and upload levels plus protocol policy.
  • USERS.DAT stores caller access level; LOGIN enforces profile/user-edit rules.

Authors can delete their own messages; level 8+ can moderate/delete other users' messages; level 9 owns sysop-only user edits including handle changes. Full per-level matrices, roles, groups, and deny-overrides are not part of the current runtime format.

Users

Files:

  • D1:>DATA>USERS.DAT: fixed-width user records.
  • D1:>DATA>USERS.IDX: fixed-width handle index records.
  • D1:>DATA>NEXTUSER.DAT: next user number as text.

USERS.DAT records are 128 bytes:

  • status byte;
  • user number high/low;
  • handle, 16 bytes;
  • full name, 24 bytes;
  • email, 40 bytes;
  • password, 12 bytes;
  • access level;
  • flags;
  • call count high/low;
  • daily date, 8 bytes;
  • daily used minutes high/low;
  • reserved tail bytes.

USERS.IDX records contain normalized handle text, user number high/low, status, and a reserved byte. Registration creates the first user as access level 9; later self-registered users are level 1. Fresh ATRs preallocate 128 zero-filled record slots in both files. LOGIN opens them in update mode and positions to the selected fixed slot before writing; a zero first byte marks an unused index slot. Ordinary callers cannot change handles after creation. Level 9 sysops can change a handle through LOGIN profile edit; the save rewrites the matching USERS.DAT record and its fixed USERS.IDX slot together. NEXTUSER.DAT is rejected once all 128 slots are allocated.

Caller History

D1:>DATA>CALLERS.DAT is a text file. The packaged file starts with *. WFC recalibrates the append pointer on startup and appends caller identity, date, and time. CORE reads it for the caller-list command.

Feedback

D1:>DATA>FEEDBACK.DAT is an append-only text file created the first time a caller saves feedback. CORE writes one record per feedback entry:

+MM/DD/YY HH:MM:SS
user_number
handle
email_or_secondary_identity
feedback text

The E feedback command and confirmed G goodbye path both use this file.

Application Registry

Packed runtime: D1:>DATA>APPREG.DAT.

APPREG.DAT is a binary packed image. APPMGR bulk-loads it once, validates its length and checksum, and binary-searches its key-sorted records while all live communications continue through REMMS.

Logical rows:

handle,key,return,type,flags,access,route,term,name,path

Validation rules:

  • up to 32 records;
  • handle range 1..254, unique;
  • stable key unique, hexadecimal in the source file;
  • return key must be 0000 or match another app key;
  • access must be 0..9;
  • path must fit 24 bytes and match supported SDX path syntax;
  • name must fit 8 bytes.

Packed format:

  • 12-byte header: MAPR, version 1, record size 48, record count, generation, little-endian 16-bit additive body checksum, and two zero bytes;
  • key-sorted 48-byte records: handle/type/flags/access, little-endian key and return key, path/name lengths, route/term, 24-byte path, 8-byte name, and four reserved zero bytes.

D1:>DATA>FILEBASE.CFG is headed by FCFG,1; each following ATASCII record is one unique uppercase file-area ID in display order. FILEBASE uses this list for its resident area selector instead of probing all 26 possible metadata files, and FILEMGR updates it atomically after a successful area creation.

Transfer Protocol Registry

Packed runtime: D1:>DATA>PROTOREG.DAT.

PROTOREG.DAT begins with MPRT,1; each remaining ATASCII record contains:

id,name,send_key,recv_key,features,min_level,max_block,description

The packaged registry exposes XMODEM checksum, XMODEM CRC, XMODEM-1K, and YMODEM batch. Native binaries are physically packaged under D1:>PROTO> as XMSEND.COM, XMRECV.COM, YMSEND.COM, and YMRECV.COM. ZMODEM remains reserved and is not user-selectable.

Message Bases

Default public/private base files:

  • D1:>MAIL>MESGA.MET
  • D1:>MAIL>MESGA.DAT
  • D1:>MAIL>MESGA.IDX
  • D1:>MAIL>MESG0.MET
  • D1:>MAIL>MESG0.DAT
  • D1:>MAIL>MESG0.IDX

Format 1.1 MESG?.MET stores two 17-field MMET metadata blocks. Each block contains:

  • signature MMET;
  • format version;
  • base ID;
  • generation;
  • base name and short name;
  • read and post levels;
  • moderation mode;
  • next message number;
  • active, deleted, and held counts;
  • DAT end sector/byte;
  • IDX record count;
  • last compaction marker.

Format 1.1 MESG?.DAT records start with MM11, followed by record state, message number, author and recipient user numbers, parent and root message numbers, display names, subject, date, time, line count, body lines, and END. Runtime states are A (active), H (held), and D (deleted). Moderation and deletion update both DAT state and index flags so recovery preserves the decision. MESG?.IDX records are 16 bytes: message number, DAT pointer, status flags, line count, parent/root, author, recipient, and one reserved zero byte.

Auxiliary message files:

  • D1:>MAIL>DRAFTS.DAT/.IDX: disk-backed message drafts.
  • D1:>MAIL>MSGREAD.DAT: append-updated per-user/base high-water table. Each 8-byte record contains version, base ID, big-endian user number, big-endian high-water message number, a reserved zero byte, and an additive checksum. Readers use the last valid matching record and ignore corruption.
  • D1:>MAIL>MSGREAD.XCP: sparse read exceptions.
  • D1:>MAIL>MAILSTAT.DAT: physical 8.3 name for private-mail state records.
  • D1:>MAIL>MAILTO.IDX and D1:>MAIL>MAILFROM.IDX: rebuildable mail accelerators.
  • D1:>MAIL>MSGAUDIT.DAT: moderation/private-access audit trail.
  • D1:>NET>NETIN.Q and NETOUT.Q: filesystem transport queues.
  • D1:>NET>NETSEEN.IDX, NETSENT.IDX, and NETMAP.DAT: 16-byte network identity and suppression records.
  • D1:>NET>NETNODE.CFG and NETROUTE.CFG: local node and area,base,direction,peer routes.
  • D1:>NET>IN, OUT, BAD, and DONE: packet lifecycle directories.

MAILSTAT.DAT uses 16-byte version-1 records containing message number, sender, recipient, sender-deleted, recipient-deleted, recipient-read, and delivered state. Sender and recipient deletion are independent. Only when both delete a message is the authoritative MESG0 record marked deleted.

Interactive message modules:

  • MESGAREA: list, scan, read, and dispatch.
  • MSGEDIT: compose using disk-backed drafts and commit MM11 records. / opens the save/edit/display/abort/continue menu and // stores a literal slash. Public addressees may name an active user without making the post private. ANSI and ATASCII cursor, insert, delete, and backspace input is interpreted by the editor and is never stored in message text. Unsafe modem bursts discard and restart the whole line; no received prefix is committed.
  • MSGMAIL: private mail compose, inbox, sent listing, and readback for base 0.
  • MSGMOD: level 8/9 held queue, approve, soft-delete, restore, thread lock/unlock, and audit logging.

Utility/job modules live under D1:>TOOLS>:

  • MSGVER: read-only structural message-base verification.
  • MSGRECOV: thin manual UI for MSGRCV.COM. The native worker scans valid active, held, and deleted MM11 records, rebuilds the full index and mail accelerators, retains backups, and installs through an MSWP manifest.
  • MSGCOMP: thin manual/scheduled UI for MSGCMP.COM. The native worker rewrites retained DAT records and every index pointer, drops fully deleted private mail, retains .DBK/.IBK/.MBK, and installs through MSWP.
  • MSGNET: validates and exchanges MNET v1 ASCII7 packets through filesystem queues. Modem transport remains external.

MSGSTORE.COM is the only runtime owner of live message metadata, data, indexes, locks, mail state, moderation audit, and network maps. Interactive BASIC modules write only request and staging files. Its transient MSG1 control block occupies session offsets 340..351.

Routine message operations use a short-lived .LCK, not a transaction journal. DAT is append-only, and MSGRCV.COM rebuilds index and metadata from valid MM11 records after an interrupted operation. A failed operation keeps the lock visible until manual recovery. Legacy MTXN files remain recognized so bases created by earlier builds can still be recovered.

Base creation uses a versioned MBASE request in D1:>MAIL>MSGREQ.DAT. INIT supplies names and access levels; MSGSTORE.COM validates the request and constructs both 17-field MMET blocks. BASIC never writes an MMET image. Normal commits append a validated 16-byte index record and install a verified dual-block metadata replacement. Recovery and compaction rebuild from authoritative MM11 records and verify staged index cardinality and DAT pointers before installation.

SCHED.CFG is executed by the SCHED overlay while WFC has no carrier or ring. DATA>JOBCTX.DAT uses MJOB,2 followed by job ID, module key, argument, attempt count, retry limit, state, result, and detail. It records one running/retried job. Verification, networking, and conditional compaction run without prompts; recovery is manual-only.

MSGMGR is fenced as a format 1.1 maintenance launcher. Its old create, post, delete, undelete, and rebuild writers are disabled because they emitted the pre-1.1 metadata, body, and index layouts.

Caller commands in MESGAREA:

  • Q: quick scan.
  • S: summary.
  • R: read.
  • E: enter.
  • M: private mail.
  • O: moderation for level 8+.
  • K: kill.
  • A or L: select/list bases.
  • X: return to main menu.

File Areas

Default files:

  • D1:>DATA>FILEA.MET
  • D1:>DATA>FILEA.DAT
  • D1:>DATA>FILEA.IDX

FILE?.MET version 2 stores the original eleven fields:

  • version;
  • area ID;
  • area name;
  • view level;
  • download level;
  • upload level;
  • data file path;
  • index file path;
  • upload path;
  • next file number;
  • active file count.

It then stores generation, protocol mask and defaults, batch/partial policy, upload/free-space/batch limits, and the area quarantine path. The packaged area uses D1:>DATA>QUAR>.

File records include status, file number, filename, description, type, location, uploader, upload date, file size, and download count. Index records are 16 bytes and use states 0=unused, 1=active, 2=held, and 4=deleted. Caller uploads are always installed in the configured quarantine path as held records. Held records are excluded from browse, search, marks, and downloads. FILEMGR creates and verifies areas, approves held uploads by moving them to the public upload path, rejects files, restores deleted records, and invokes native recovery/compaction. Permanent catalog and transaction writes belong only to the native file workers.

XFER.TXN is an append-only FTXN,2 journal. Its fixed context retains the area and operation, file and actor numbers, four transaction-ID bytes, original DAT/index/generation positions, committed batch count, and source/temp/final paths. Durable state lines follow END: TRANSFER_OK, FILE_OK, DAT_OK, IDX_OK, MET_OK, LOG_OK, and COMMITTED. FILERCV.COM validates the journal paths, accepts an already-installed payload, rebuilds the authoritative index before appending a missing DAT record, avoids duplicate audit entries, and removes the lock/journal only after convergence. Rejected held uploads have their quarantine payload removed before the deleted catalog record is committed.

Caller commands in FILEBASE:

  • B, F, A, N: browse/list configured areas and files.
  • D: download by number or name.
  • U: upload into an area.
  • I, H, ?: file-area information.
  • L: lists marked files.
  • C: clears marked files.
  • M: marks a file.
  • S: searches files.
  • P: selects the transfer protocol.

Runtime modules print short status lines before slow disk/database operations, such as loading menus, scanning message/file indexes, looking up users, and saving records. These messages are caller-visible and are expected output.

Door Catalog

Source file: D1:>DATA>DOORS.CFG.

Runtime file: D1:>DATA>DOORCAT.DAT.

Rows are comma-separated:

id, door name, filename, path, access level

The path must end in >. Offline/package tooling validates DOORS.CFG, generates DOORCAT.DAT, and generates the visible DOORMNU menu files. Callers use DOORCAT.DAT; they do not pay the cost of parsing CSV rows.

DOORCAT.DAT starts with DORC, version byte 1, a two-digit ASCII count, and a space. Each record is 50 bytes: selector, required access level, and a 48-byte space-padded target path. Missing door programs return DOOR UNAVAILABLE. and leave the caller in the door menu.

Text Assets

Default packaged directories, configurable through PATHREG.DAT:

  • D1:>ASCII>
  • D1:>ATASCII>

Menus/static files include MAINMNU, FILESMNU, MESGMNU, MAILMNU, MODMNU, DOORMNU, INITMNU, FILEMGR, MSGMGR, BULLMNU, BULL1, BULL2, BULL4, INFO, OBBS, WELC, and PRELOGIN. PRELOGIN is authored as the paired source files prelogin.asc and prelogin.ata and is displayed once before the login/new-user/goodbye prompt. The packager also writes generated branded text files HELP, NEWU, and FUNC, and stages TEXTF article files.

Menus and static files are reread through REMMS RTEXT whenever their module menu loop returns. BASIC does not keep menu text resident or open these assets directly while the modem owns R:.