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, andPATHREG.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/.IDXplus 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.DATstores the minimum level for each app.DOORCAT.DATstores the minimum level for each door.MESG?.METstores read and post levels plus moderation mode.FILE?.METstores view, download, and upload levels plus protocol policy.USERS.DATstores 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
0000or 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, version1, record size48, 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.METD1:>MAIL>MESGA.DATD1:>MAIL>MESGA.IDXD1:>MAIL>MESG0.METD1:>MAIL>MESG0.DATD1:>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.IDXandD1:>MAIL>MAILFROM.IDX: rebuildable mail accelerators.D1:>MAIL>MSGAUDIT.DAT: moderation/private-access audit trail.D1:>NET>NETIN.QandNETOUT.Q: filesystem transport queues.D1:>NET>NETSEEN.IDX,NETSENT.IDX, andNETMAP.DAT: 16-byte network identity and suppression records.D1:>NET>NETNODE.CFGandNETROUTE.CFG: local node andarea,base,direction,peerroutes.D1:>NET>IN,OUT,BAD, andDONE: 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 commitMM11records./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 base0.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 forMSGRCV.COM. The native worker scans valid active, held, and deletedMM11records, rebuilds the full index and mail accelerators, retains backups, and installs through anMSWPmanifest.MSGCOMP: thin manual/scheduled UI forMSGCMP.COM. The native worker rewrites retained DAT records and every index pointer, drops fully deleted private mail, retains.DBK/.IBK/.MBK, and installs throughMSWP.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.AorL: select/list bases.X: return to main menu.
File Areas
Default files:
D1:>DATA>FILEA.METD1:>DATA>FILEA.DATD1:>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:.