@comment Tell Emacs to use -*-texinfo-*- mode
@comment $Id: transfer.tex,v 2.3 91/09/01 23:04:52 royce Exp $

@node File Transfers, Miscellaneous, Shells vs. the Desktop, Top
@chapter File Transfers
@cindex File transfers

As you've probably guessed by now, Fnordadel is oriented
towards the discussion type of @sc{bbs}ing (i.e.: message oriented rather than
file transfer oriented).  Still, Fnordadel prides itself on being
flexible, and a decent level of file transfer features is supported.

@node File Directories, Protocols, File Transfers, File Transfers
@section File Directories
@cindex File directories
@cindex Directories

Fnordadel permits a room to have attached to it a directory on the storage
device; users may be able to upload files to this directory, or download
files from this directory, or both.  (These attributes are changed by editing
the room; see @ref{Sysop room-editing commands}.)  Users may also read the
contents of the directory in either a short format (@code{.R(ead) D(irectory)})
or a long format (@code{.R(ead) E(xtended-directory)}).  The short form
prints out the filenames and sizes, whereas the long form adds the date stamp
of the files and an optional description.
@xref{Multi-key file reading commands}.

The file descriptions are kept in each directory in a
file called @file{.fdr}.  This file is added to whenever a user uploads a
file to the directory, and it is also editable with a text editor.
It consists of lines of the form
@example
<@var{filename}> <@var{description}>
@end example
@noindent
where the two fields are separated by whitespace (spaces and/or tabs).
The lines must be alphabetically sorted; that is, the line for
@file{foobar.zoo} must come after the line for @file{blort.lzh} and so on.

If you add files to a directory manually (by copying
them in using a shell or the Desktop) then the @file{.fdr} file will,
obviously, not be updated.  You may want to do so manually so
as to provide some sort of help for your downloading-mad users.

@node Protocols, The File Browser, File Directories, File Transfers
@section Protocols

Fnordadel supports the following protocols for file
transfers:
@cindex File transfer protocols
@cindex Protocols
@cindex Transfer protocols
@table @asis
@item Xmodem
The standard 128-byte packet prototol.  Invoke
this protocol using @code{.R(ead) X(modem) F(ile) @dots{}}
or @code{.E(nter) X(modem) F(ile) @dots{}}.

@item Ymodem
Xmodem with 1K (1024 byte) packets.  Yes, we
know this is a misnomer, but it's historical.
(Translation: ``We didn't put it in, someone
else did@dots{}'')  Invoke this protocol using
@code{.R(ead) Y(modem) F(ile) @dots{}} or @code{.E(nter)
Y(modem) F(ile) @dots{}}.

@item Ymodem batch
This is true Ymodem---1K packets with
batch transfers (i.e., you can send more than
one file at once, and the software keeps track
of filenames and stuff).  Fnordadel supports
this for general use in downloads only; it
will do Ymodem batch uploads only when a user
with Sysop or Co-Sysop status is logged in.  Invoke this
protocol using @code{.R(ead) Y(modem) B(atch file) @dots{}}
or @code{.E(nter) Y(modem) B(atch file) @dots{}}.

@item WXmodem
This is a windowed packet protocol which is
not widely used, and the implementation residing
in Fnordadel is known to be weak; we've never
even touched it.  We don't even have a terminal
program which supports it, so we can't test it
except with itself, which is hardly rigorous.
Maybe try it if you can.  Invoke this protocol
by using @code{.R(ead) W(Xmodem) @dots{}} or @code{.E(nter)
W(Xmodem) @dots{}}.

@item Vanilla @sc{ascii}
This is a straight @sc{ascii} transfer terminated with two @samp{^X}
(@samp{Ctrl-X}) characters.  It is useful for modems with their own error
correction, or for other times when you want a plain transfer (say, for
uploading a message directly from the editor of a terminal package, or
some such.)  It is invoked with @code{.R(ead) V(anilla) @dots{}} or
@code{.E(nter) V(anilla) @dots{}}.

@item @sc{ascii}
This is a straight @sc{ascii} transfer with no error
checking or distinguishing features.  It just
blorts out the file.  This ``protocol'' is unlike the
others in that it cannot be specifically invoked in
a command, and it is available only with @code{.R(ead)};
invoke it by using @code{.R(ead) F(ile)}.
@end table

You may also enable any number of additional file transfer
protocols using doors; see @ref{Protocol doors}.

The actual mechanism for file transfers is documented in this manual in
@ref{Multi-key file entry commands}, and @ref{Multi-key file reading commands},
among other places, and in the online help files.  Note that the transfer
protocols can be used to transfer more than just files; in particular, they
can be used to upload messages into and download messages from the message
base.

@node The File Browser,  , Protocols, File Transfers
@section The File Browser
@cindex Browser, file
@cindex File browser

The Fnordadel file browser is an addition not found on any other
Citadel variants that we know of.  If offers users a way to step through the
list of files in a directory room one at a time, and do things with them.
Many other types of @sc{bbs}es have such functionality, and we decided it was
time for a Citadel to be able to claim the same thing, for those who want to
do file transfer stuff as well as discussion.

Because we try to make commands consistent, the file browser is
called up in the same fashion that the one-at-a-time message reading option
is invoked, namely using the @code{M(ore)} modifier:
@example
.R(ead) M(ore) D(irectory) [@var{optional file mask}]
.R(ead) M(ore) E(xtended directory) [@var{optional file mask}]
@end example
@noindent
Both of the above commands produce exactly the same result, which is
to display the first file in the directory that matches the given file mask
(if there is one).  Following the file name display (which looks just like
the entry for that file in the normal @code{.R(ead) E(xtended directory)}
listing),
the browser prompt is displayed.  Here's what you might see:
@example
callbaud.sys    2588 | 91Apr28 | Highly esoteric BBS usage stats.

Browse cmd:
@end example
Note that other command options might be useful in conjunction with
the browser mode option @code{M(ore)}.  Two good examples are
@code{-(before)} and @code{+(after)}.
These commands cause the
system to ask for a date in standard Citadel format (e.g. @samp{91May20},
or just
@samp{May20} to assume the current year).  You can also just hit @samp{<CR>}
to tell the
system to use the date of your last call.  Fnordadel then merrily crunches
through the directory and only lists those files before or after the date.

Hitting @samp{?} at the browser prompt produces the following list of
commands:
@cindex Browser menu
@example
[A]- view this entry again
[B]ackup to previous file
[C]lear batch list
[H]eader listing of ARC, LZH, ZOO file
[M]ark this file for batch transfer
[N]ext file (also <SPACE>, <CR>)
[U]nmark a file
[V]iew batch list
e[X]it the browser (also [Q]uit, [S]top)
@end example

@table @code
@item [A]- view this entry again
This command will redisplay the current file description, in case it
was somehow removed from view and the user forgot what it was.

@item [B]ackup to previous file
This command will back up one entry and redisplay the preceeding file
description, if there is one.

@item [C]lear batch list
This command wipes out the entire batch list.  There is
currently no way to take out just one file name from the list; if
you really don't want to transfer it, you'll have to @code{[C]lear} the
list and start over.

@item [H]eader listing of ARC, LZH, ZOO file
This command is quite useful for helping decide whether a given archive
file is worth downloading.  If the description isn't enough, this will
show the archive's table of contents, like the @samp{.RH} command would.
The @samp{.arc} file format is supported internally with Fnordadel, but
for @samp{.lzh} and @samp{.zoo} files (or any others) to work, the Sysop
must have set up some doors.  @xref{Archiver doors}.

@item [M]ark this file for batch transfer
This command adds the currently-displayed file to an internal
list of files to be batch downloaded by the user, presumably using
the @code{.R(ead) Y(modem) B(atch file)} command.  After a file is marked,
the total size of all marked files is shown.  The browser will not permit
a user to mark more files than the daily download limit allows.

Normally, the @samp{.RYB} command
needs the user to enter a file mask indicating which files are to be
transferred.  However, if there is a batch list in existence, the
user can just hit @samp{<CR>} after entering @samp{.RYB},
and the system will prompt
for the transfer of all files in the batch list.  The batch list will
not stop the user from explicitly transferring other files if desired,
by doing @samp{.RYB @var{filename}}.  @xref{Multi-key file reading commands}.

The batch list may contain a collection of files from any
series of directory rooms.  The user can go from room to room, adding
interesting files to the list, until he has everything wanted.  Then
one massive @samp{.RYB <@samp{<CR>}>} command will take them all.
(Assuming the user has enough download credit available, of course.  See
the @code{download}
@vindex download
parameter in @file{ctdlcnfg.doc}, and @ref{Daily download limit}.)

@item [N]ext file (also <SPACE>, <CR>)
This command advances to the next file that matches the given
file mask, if any.  If there are no files remaining, the browser
exits and the user is returned to the room prompt.  Any marked files
may now be transferred.  To view the current batch list, it is
necessary to re-enter the browser.

@item [U]nmark a file
This command allows a user to unmark an individual file.  The user will
be prompted for the file name to unmark, and if it is present in the batch
list, it will be removed.

@item [V]iew batch list
The @code{[V]iew} command does just that, allows the user to view
the current batch list.  There are three columns of information
(source room, file name and file size), followed by the total size of
all marked files.  Here's an example:
@example
RT stats                callbaud.sys    2588
Foo room                bigfile.foo     100000
Total marked file size = 102588 bytes.
@end example

@item e[X]it the browser (also [Q]uit, [S]top)
this command immediately exits the browser and returns the
user to the room prompt.
@end table
