#What it does
It adds to your board. It never replaces or rewrites anything your callers have posted.
#Before you start
Copy your data/ folder somewhere safe. The import can be undone afterward from
Import History, but the backup is the real safety net, and the confirm screen will not let you
start without ticking the box that says you made one.
Two rules worth knowing up front:
- Running the same file twice imports every message twice. There is no duplicate detection, on purpose. If you imported the wrong thing, undo the batch; do not re-import over it.
- Imported authors are never matched to caller accounts. A message by "COOL HAND" from 1991 stays text, even if someone named COOL HAND calls your board today. Nothing anyone wrote forty years ago can be attributed to a living caller.
#Step 1: where are your messages coming from?
Pick your old software from the dropdown. It is grouped three ways.
| Common BBS packages | Mystic, Synchronet, ENiGMA 1/2, Talisman, Magicka, RemoteAccess, Telegard, QuickBBS, Maximus, EleBBS, ProBoard and WWIV. Pick the package and a help panel tells you which files to find and where they usually live on that system. Some packages ask one follow-up: Mystic can store messages two ways, and the panel tells you how to check which one you ran. |
| I know my format | For SysOps who inherited a message base without the board that
wrote it: JAM, Squish, Synchronet SMB, Hudson, FTS-1 *.msg directories, QWK
packets, and the ENiGMA SQLite database. |
| The ATDT Import Format | A documented zip of JSONL files that any exporter can write. This is the entry that covers Commodore 64 boards, Apple II boards, Atari boards and homebrew software. The format is published here; hand it to whoever can still read your old system's disk and they can write an exporter without ever asking anyone anything. |
A note on WWIV: its message store is proprietary, so the help panel walks you through generating a QWK packet from the board instead. QWK also matters as the universal fallback, since nearly every BBS ever written can produce one. Its limits are real (subjects cap at 25 characters in the classic format and threading is weak), so treat a QWK import as a content rescue, not a faithful copy.
#Step 2: how will you provide the files?
- Upload a .zip. Fine for most archives. The page shows your hosting's upload limit.
- Read from a folder on the server. The path for big imports. Copy the files up with
your hosting file manager (the default place is
data/import/), then use the Check folder button to make sure ATDT sees what you think it sees. JAM and Squish bases are many files, and a forty year archive will not fit through a PHP upload form.
Press Parse and preview. ATDT reads the whole source, in chunks with a progress bar for big ones, without writing anything to your board.
#Step 3: the preview
The preview screen is where the parse proves itself:
- A summary: how many areas, how many messages, dated from when to when, and how many records would not parse. A few is normal for an old base; at five percent the parse fails outright, because that means the file is not what it claims to be.
- One row per source area with its message count and date range.
- Three real messages, from the largest area: the earliest, one from the middle, and the latest, rendered exactly as they will be stored.
Look at the three messages. If accents, box drawings, or line breaks look wrong, change the Source character encoding and press Re-render samples until they look right. The counts cannot show you a wrong encoding; a real message with its signature block can.
The same goes for the Source timezone: it is how naive old timestamps become real points in time. Precision is not the goal, order is; if a whole archive lands an hour off, nothing of value is lost.
#Step 4: the mapping
One row per source area. For each, decide:
| Skip | The default. The area is left behind. |
| Import into existing area | Its messages are added to a board you already run. The private mail spool is never offered. |
| Create new area | ATDT suggests a tag (uppercased, 12 characters max, letters,
digits, underscore). If the suggestion would collide with an existing tag, the field is left
blank and marked: ATDT suggests but never invents a GENERAL2. Name, description, and Read and
Write ACS are yours to set. A SysOp archiving a dead board often wants s255 in
Write ACS so the archive stays read-only. |
Bulk controls (Skip all, Create all, set an ACS on every row) sit above the grid, and one Category picker applies to every area the import creates, so a fifteen area import is not fifteen dropdowns.
#Step 5: confirm and run
The confirm screen shows the totals: areas to create, areas that will receive messages (and a warning naming any that already hold posts), and the message count. Tick the backup box and press Start import.
The progress screen drives the whole run from your browser, in small chunks, nothing left to cron. You can watch it, or leave: closing the page pauses the import cleanly, and Import History offers Resume. On a big archive expect it to take a while; the confirm screen warns you past fifty thousand messages.
While it runs, ATDT is doing the careful work: transcoding everything to the board's CP437 character set (with a count of characters that had no home and became question marks), stripping the FTN kludge lines callers never saw while keeping the tearlines and origin lines they did see, doubling literal pipe characters so an old message cannot change screen colors, wrapping long lines at 79 columns without ever clipping, writing messages in date order so message numbers follow chronology, and wiring the reply threads back together. Replies whose parent is missing become thread roots; reply loops in a damaged base are detected and broken.
When it finishes, every current caller's last-read pointers are moved past the archive, so nobody's next new scan offers them two hundred thousand unread messages. Accounts created later are protected the same way. Messages posted after the import behave exactly as always.
#Import History and undo
Import History lists every batch: when, from what, how many areas and messages, and its status. From here you can Resume a paused or failed batch, or Undo one.
Undo requires typing UNDO in capitals. It deletes every message that batch imported and removes any area the batch created that is now empty; areas that existed before, or that gained organic posts since, are left standing.
#Troubleshooting
| Symptom | Cause and fix |
|---|---|
| "No .JHR files found" or similar | The path points at the wrong place, or the package sub-choice is wrong. Every parse error names the files it expected; use Check folder to look around. |
| The samples look like line noise | Wrong encoding. Change it on the preview and re-render until a real message reads clean. |
| "Another import is running" | One import at a time. Finish, resume, or undo the batch shown in Import History. A crashed import releases its hold by itself within ten minutes. |
| Dates look shifted | Set the Source timezone on the preview to where the old board physically lived. Two digit years pivot at 79: 80 through 99 are the 1900s, 00 through 79 are the 2000s. |