#How it works
Callers upload and download from the terminal. You stock the areas from the console, or by FTP and a scan. If you run message areas, most of this is already familiar. Categories are the shelves and areas sit on them. Each area has its own access strings. Every caller has a current file area, and a menu item can aim at one area or ask the caller to choose.
#What callers see
Reaching the file areas
A stock board has File Areas on MAIN under F, and it leads to the FILES menu. On an upgraded board the key is F if F was free, or else the first free digit; the Dashboard tells you once which one it took. When no key was free at all, the item sits on MAIN hidden and keyless until you give it one on the Menus page.
A MAIN drawn from a picture or a template will not show the new key by itself. Draw it in, or move the item.
The FILES menu as shipped:
| Key | Item | What it does |
|---|---|---|
| L | List files | The file list of the caller's current area. |
| N | New files | Every area with something new since the caller's previous call, one area at a time. |
| S | Search files | Names and descriptions across every area the caller may read. |
| U | Upload a file | An upload into the current area. |
| A | Change file area | The area picker. |
| Q | Back | Back to MAIN. |
No switch turns the feature off. A board that wants no file areas removes the key from MAIN.
The file list
The header carries the area's name, its file count, how many of those are new to this caller, and their total size. When a ratio or file points are on, the caller's standing follows.
Each file takes two rows. The first holds the number, a flag, the name, the size, the date it was listed, the download count and the uploader. Under it sits the first line of the description.
The flag column shows * for a file new since the caller's previous call, and
h for the caller's own upload while it waits for your approval. A held upload
shows only to its uploader and to you.
| Key | Action |
|---|---|
| Arrows, Home, End, PgUp, PgDn | Move the bar, and page. |
| Enter | View the file. |
| D | Download the file under the bar. |
| U | Upload into this area. |
| N | Show only what is new. N again shows everything. |
| S | Search. |
| O | Flip the order between newest first and by name. The board remembers the choice for each caller. |
| A | Change area. |
| Q or Esc | Back to the menu. |
Viewing a file
Enter opens the file's page: the full name, the exact size, who listed it and when, the download count, and the first twelve characters of its SHA-256 hash. A status line says whether the file is new since the caller's last call or already seen, and a held upload says so. The whole description follows.
One longer than thirteen lines pages. Space or PgDn shows the next page, PgUp the one before. D downloads. N and P walk to the next and previous file in the list the caller came from, and Q goes back.
Downloading
D hands the browser a short-lived link, and the browser saves the file under its listed name. The screen says the file is on its way, and that a browser which asks first will have put up its own prompt. Enter fetches the file again; any other key returns to the list.
The link lives ten minutes (a setting) and allows a few fetches, so a browser that retries or resumes a broken download can. A download counts when the bytes start to move.
A download is refused, with the reason on the message row, when the area is closed to the caller, when the daily download limit is reached, when the caller's ratio is spent, or when the file costs more points than the caller holds. The SysOp is never refused.
Uploading
U opens the upload screen for the current area. It says what the area does with uploads, held for your approval or listed at once, and the largest file the board takes. Enter opens the browser's file chooser, and so does a tap on a phone. A file dropped anywhere on the page is taken too. Esc cancels.
The name and the size are checked before a byte crosses. The board refuses at once, and offers the chooser again, for a file bigger than the limit, a name it cannot use, a name already in the area, or the same bytes already on the board under any name.
Then the bytes cross in pieces small enough for a shared host, with a progress bar in the box.
When the file is whole, the description editor opens: up to twenty lines of seventy-six
columns, filled in from the FILE_ID.DIZ (or DESC.SDI) inside a zip
when the board is set to read it. A description shorter than the minimum is sent back for
more. Ctrl+S saves. Esc in the editor throws the whole upload away.
An upload into an area that holds uploads waits for you. The caller is told so, and sees the
file in the list marked h until you approve or refuse it. In an area that lists at
once, the file is listed straight away and earns file points if points are on. Uploads are
refused outright in an area closed to them, and in any area whose Write ACS the caller does not
pass.
New files
N on the FILES menu walks every area that has something new for the caller, one area at a time, showing only the new files. Space moves on to the next area and Q stops the walk; the usual list keys work inside each area. New means listed since the caller's previous call, so a first call sees nothing as new.
Inside a list, N narrows that one list to its new files.
Search
S asks for words or a name. The search runs over file names and descriptions in
every area the caller may read, and ignores case. * and ? are
wildcards (*.zip, lord?.*); a search with no wildcard matches
anywhere in the text. Each hit shows its area, and the hit list takes the same keys as a file
list. Two hundred hits at most.
Changing area
A opens the area picker: the areas on their shelves, numbered, each with its file count and the caller's new count. Categories head their groups, and areas with no category sit under "Other Areas". The caller picks by number, or with the arrows and Enter. The choice becomes the caller's current file area and lasts across calls.
Only areas whose Read ACS the caller passes are listed. An unlisted area stays out of the picker, though a menu item that names it still gets there.
#Setting up areas
File Areas in the console rail opens the page. The rail entry shows how many uploads are waiting for you.
Categories
Categories are the shelves of the picker. Add one, rename it, move it up or down, or delete it. Deleting a category leaves its areas in place, uncategorized.
Areas, field by field
Add an area, or edit one from the list.
| Tag | Short and unique: A to Z, 0 to 9 and underscore, two to twelve characters. The stock folder is named after it. INCOMING is refused, because the board keeps uploads in flight under that name. |
| Name | Up to forty characters, shown to callers. |
| Description | Up to a hundred characters, shown beneath the name in the picker. |
| Category | The shelf it lists under. |
| Read ACS | Who may open the area and download from it. Blank is everyone. The ACS cheat sheet is on the message Areas page, and chapter 8 has the grammar. |
| Write ACS | Who may upload here. Blank is everyone. This one is enforced, the first Write ACS the board honors, because uploads take disk. |
| Listed | Unchecked keeps the area out of the general picker. A menu item that names it still reaches it. Listed decides what the picker shows; privacy is the Read ACS's job. |
| Uploads | Held for your approval by default. Switch it to listed at once, or to closed for no uploads at all. |
| Free area | Downloads here count against nothing, and uploads here earn nothing. |
| Folder | Blank keeps the files under data/files/TAG. Otherwise, an
absolute path on the server, outside the web root and outside the board, where you put files
by FTP or SSH. The board makes the folder if it can. |
| Art | Kept for a later release. Nothing shows it yet. |
Arrows move areas up and down within their category. Renaming a tag moves the stock folder with it. Delete refuses an area that a menu names, as a targeted item or a default file area, and an area that still holds files: clear the references and move or delete the files first.
The Files tab
Pick an area and the tab lists its files, with the folder's path above them. Each row carries the name with the first description line, the size, the date it was listed, the uploader, the download count and the status. Files the scan found give "the folder" as their uploader. A file gone from the disk shows "missing on disk". The Held button shows every held upload across all areas.
For a held upload:
- Approve lists it. If file points are on, the uploader earns them now.
- Refuse removes it and sends the uploader a letter. The reason field starts out with
the canned text ("Sorry, but the SysOp did not approve your file."). Edit it for this one
file, or blank it to send no letter at all. The canned text is the theme string
files.refusal_letter, and its subject isfiles.refusal_subject.
For any file, edit changes the name and the description, and the file on disk is renamed with it. Move puts it in another area, disk and all. Download fetches it to your browser. Delete marks it deleted.
A deleted file keeps its bytes until Purge deleted files on the Database page removes them. If another file takes its name before then, the deleted one is retired on the spot.
Uploading from the console
Upload into the area takes a file from your browser and lists it at once under your name. This form is bound by the host's upload limit, which the page shows. Callers upload in pieces and are not. A bigger file goes into the folder by FTP or SSH, and the scan lists it.
Scan the folder
Scan the folder lists every file in the area's folder the board does not know yet, under your name, up to two hundred a pass. Press it again for the rest.
Descriptions come from a FILES.BBS in the folder when there is one, or else from
the FILE_ID.DIZ inside a zip. Failing both, the file reads "No description" until
you edit it.
The scan skips subfolders, dotfiles, symbolic links, the index itself, names a web server might run, files whose bytes are already listed elsewhere on the board, and names that belong to deleted files not yet purged. A file that was there before and has since vanished shows "missing on disk" in the list.
FILES.BBS
The index format of the era. One entry per line: the file name, spaces, then the description. A line that starts with a space, a dash, a plus or a bar continues the entry above it. The file may be UTF-8 or CP437, and the board reads the first megabyte.
#Settings and the economies
Settings, File areas:
| Setting | Default | Meaning |
|---|---|---|
| Max upload | 10 MB | The largest file a caller may send, 1 to 4096 MB. |
| Minimum description length | 10 | Characters an upload's description must have, 0 to 500. |
| Read FILE_ID.DIZ out of uploaded zips | on | The description an archive carries fills the editor in. |
| Show who uploaded a file | on | Off hides the uploader in lists and on the file's page. |
| Daily download limit | 0 | Downloads a caller may make in a board day. 0 is no limit, and the SysOp never counts. |
| Download ticket minutes | 10 | How long a download link stays good after D, 1 to 1440. |
| Ratio | 0 | Downloads allowed per upload. 0 is off. |
| Grace | 10 | Downloads every caller gets before the ratio applies. |
| File points | off | Uploads earn them, downloads spend them. |
| Starting points | 100 | What every caller begins with. |
| Points per 10 KB uploaded | 4 | Earned when the upload is listed. |
| Points per 10 KB downloaded | 1 | Spent when the download starts. |
Both economies ship off. A board that wants the 1993 feel turns them on here.
The ratio. A caller may download up to their uploads times the ratio, plus the grace. The next download past that is refused.
File points. A caller's balance is the starting points, plus what their uploads earned, minus what their downloads cost. Uploads earn when they are listed: on your approval, or at once in an area that lists directly. Downloads cost when they start, and a file that costs more than the balance is refused. Raise the starting points later and every caller moves alike.
A free area counts for nothing under either one. While either is on, the file list's header shows the caller's standing, and the Users page shows a caller's balance and lets you change it.
#Codes
Seven live-text codes join the ones the board already fills in wherever text is shown (Appendix B has the full list). The caller's help lists them on its F page.
| Code | Becomes |
|---|---|
| %FA | The caller's current file area |
| %FD | That area's description |
| %FC | Files in that area |
| %FN | Files in it new to the caller |
| %FT | Files on the whole board |
| %FU | Files the caller has uploaded |
| %FP | The caller's file points; blank while points are off |
Inside a box, put an exclamation mark in front (!%FA) so the value stamps in
place and the border stays put.
#On the Users page
A caller's card shows their uploads and downloads beside their calls and posts. While file points are on, the card shows the balance as well, and you can set it.
#Backups
The Backup tab on the Database page has an Include file areas checkbox. The page shows what a backup would weigh with the files and without them, and warns past half a gigabyte. A restore from a backup made with the files puts them back.
Only the stock folders under data/files go in. An area with a Folder of your own
outside the board is yours to back up. The rest of backing up and restoring is in
chapter 19.
#On disk
Each area's files live under data/files/TAG, or in the folder you named, under
their listed names. Anyone with FTP access can read the folder as it stands. Uploads in flight
sit in data/files/incoming and are swept an hour after they stall. The web server
cannot serve either folder. Every download goes through the board's own link.
Names
A listed name is printable ASCII, up to a hundred and twenty characters. Accented letters are
transliterated where they can be, and characters a path or a header cannot carry are removed.
Two kinds of name are refused: the Windows device names (CON, PRN, AUX, NUL, COM1 to COM9,
LPT1 to LPT9), and anything a web server might run (.php and its relatives,
.cgi, .pl, .shtml, .htaccess,
.htpasswd, web.config). Names are unique within an area, whatever
the case.
#Theme copies
A board with its own strings.ini gets two new sections, [fareas]
and [files], and a reworked [help]. The help is a menu with pages
now, and help.more is gone. The Dashboard says so once after the upgrade.
Until your copy carries the new keys, the board uses its own defaults for them. The refusal
letter's wording lives in [files] too, so a themed board can turn down an upload
in its own voice. Chapter 11 covers theme copies in general.