RFC 412

User FTP Documentation

πŸ“… published November 1972, from ietf

Work Information Center #12404 πŸŽ€

Bestie, this is RFC 412, titled User FTP Documentation, written by G. Hicks from Utah and dated 27-Nov-72 πŸ’–. It doesn't say what category it's in, and it doesn't obsolete or update anything 🌸.

The whole doc is the HELP file for the Utah-10 implementation of the User FTP Process. It's literally what a user sees on their console when they type HELP<cr>, and it's the only documentation made so far πŸ’….


FTP User Documentation ✨

November 27, 1972


I. Control Characters πŸ¦‹

okay so there are a few control characters that have a special job in the FTP Process πŸ’…. First, the abort character is <control-z> (SUB). For editing, only <control-r>, <control-a>, <control-h>, <control-v>, <control-w>, <alt-mode>, <eol>, <space>, <control-x> and <rub-out> do anything at all πŸ™ˆ.

<control-a> (SOH) and <control-h> (BS) are the character delete keys. <control-w> is the word delete character. Note: When doing the ' funktion, this character will delete the entire line typed ⚠️.

<control-v> says take the next character literally 🧚. <alt-mode> (ESC) ends the command and gives helpful noise words. <eol> and <space> are terminators too, but these two give no command completion or noise words. All three echo as a space, however 🌈.

<control-x> (CAN) and <rub-out> (DEL) are the command abort characters πŸ’€. <control-r> (DC2) retypes the line the way the command interpreter sees it πŸ‘‘.

When you use ? as a prompter for initial commands, it types out every command that starts with that particular character string πŸ“. If it's typed in a sub-command field, it only types out the prompt message if it's the first character typed. At all other times, it gets accepted as part of the typed string 😭.


II. General Information πŸ’œ

The FTP user process is designed to make transferring files from one host on the ARPANET to another much easier than it has been up until now ✨. To that end, the command language was designed to feel as natural as possible 🫢.

The command interpreter is, of course, part of this idea 🌸. So to help the user as much as possible, there are a few ways to find out what's expected in the form of commands, file names, user names, and so on. When the user has typed nothing, typing ? makes the interpreter type out all the commands that are available to them. If the user has typed anything at all, the interpreter responds with all the commands that begin with that particular character string πŸ¦‹.

To make the command language as easy to learn as possible, the command interpreter will "see" nothing that isn't part of a legal command πŸ™ˆ. If the user types anything that isn't expected, the character isn't echoed and a bell is echoed instead πŸ””.


III. Brief Command Listing 🌸

The commands that are expected, and their syntax, are listed below. NOTE: UPPER and lower case letters are identical πŸ’–.

<host-name>
D<decimal host number>
<octal host number>
;<any string> (useful for comments to a person that is
linked to you)
MODE <mode name>
RETREIVE <remote file> (to) <local file>
GET <remote file> (to) <local file>
SEND <local file> (to) <remote file>
STORE <local file> (to) <remote file>
APPEND <local file> (to) <remote file>
RENAME <remote file> (to be) <new remote file name>
DELETE <remote file>
BYE
COPY <direction descriptor> <file group> (to) <file group>
     (see detailed description below)
LOGOUT
DDT
LIST <file group> (to file) <local file name>
SOCKET (NOT IMPLEMENTED YET)
ALLOCATE <decimal number of bytes>
QUIT
   foreign host)
HOST <any valid ARPANET host name or number>
USER <remote user name>
PASSWORD <password for remote user's name>
ACCOUNT <string or number for remote user's name>
STATUS (see description of status command below)
LOGIN <user name> <password> <optional account> <to host>
BYTE <decimal byte size>
TYPE <type descriptor>
STRUCTURE <structure descriptor>
TENEX
ASCII
VERBOSE

IV. Detailed Description of the Commands 🧚

Okay, here's the deeper dive πŸŽ€. The commands and their syntax are described in more detail below. Words in parentheses are noise words πŸ’…. NOTE: upper and lower case are identical πŸ™ˆ. Unless the command description says otherwise, every command described here is implemented ✨.

<host name> or <host number> 🌐

Performs the ICP to the indicated host, with explanatory remarks if the ICP isn't possible πŸ’–.

MODE <mode descriptor> πŸ¦‹

Sets the mode of the data transfer connection according to these sub-commands:

  • STREAM: bit stream. End of file is indicated by the data connection closing 🌊.
  • BLOCK: formats (or expects formatted) data into blocks 🧱.
  • TEXT: sends or retrieves text. Forces TYPE ASCII and BYTE 8. This command sends the appropriate commands to the foreign host, then sends the data using the TELNET codes for EOR and EOF as per the FTP Protocol πŸ’Œ.
  • HASP: compresses data πŸ—œοΈ.

NOTE: Of the above sub-commands, only MODE STREAM and MODE TEXT are implemented at present 😭.

RETREIVE (file) <remote file> (to file) <local file name> πŸ“₯

Sends the retr command to the remote server, then sets up the data connection according to any previous MODE, TYPE, and BYTE commands πŸ”§. The data coming in on the data connection goes into the local file you specify πŸ’œ.

GET (file) <remote file name> (to file) <local file name> 🫢

See the description of RETREIVE 🌸.

STORE (local file) <file name> (onto file) <remote file> πŸ“€

Accepts a local file name, does the formatting according to any previous BYTE, TYPE, and MODE commands, and sends it to the foreign host ✨.

SEND (local file) <file name> (onto file) <remote file> πŸ’…

See the description of STORE πŸ¦‹.

APPEND (local file) <file name> (to remote file) <remote file> βž•

Does the same thing as a STORE, except the file gets appended to the remote file instead of just writing over it πŸ“.

RENAME (existing file) <file name> (to be) <new file name> ✏️

Accepts the name of an old remote file and asks for a new file name. It sends the appropriate commands and names to the foreign host, which causes the old file name to be replaced by the new one 🌈.

DELETE (file) <file name> πŸ—‘οΈ

This command marks the remote file for deletion. It does require that the command be confirmed twice πŸ™ˆ. Be careful, bestie πŸ’€.

BYE πŸ‘‹

Takes no arguments. Causes the server to end the current session with the user πŸ’”. The program returns to the EXEC MODE once the remote server has acknowledged the command πŸŒ™.

COPY 🌟

This command does a variety of things πŸŽ€. First, it lets the user describe a file group, e.g. *.mac, *.sav, and so on. The *'s can be for foreign files or local files, depending on these sub-commands:

REMOTE (remote file group) <remote file grouping>: this causes the user FTP to ask the server for the files in <remote file grouping>. Then it asks the user to specify where each file is going. A typical sequence might look like this 🧁:

!copy remote (remote file group) ftp.*
Please be patient. Getting remote file names.
Got them.
!copy (file) <HICKS>FTP.MAC;| (to file) ftp.mac [New file]
[Messages and etc. follow with the above line being
repeated for each file in the remote file group.]

LOCAL (local file grouping) <local file group>: this causes the user FTP to accept the file group specified, and send the file names to the server, leaving off the <directory name> and version number of the local file πŸ—‚οΈ. The user may not specify *'d devices or *'d directories 🚫. A line for this might look like this:

!copy local (local file group) ftp.*;*
 [Confirm]

Next, if the user doesn't specify any *'s for either the remote file or the local file, this command works exactly like the RETREIVE or STORE command described earlier πŸ’«.

LOGOUT πŸšͺ

Takes no arguments. See the description of the BYE command for more details 🫢.

RESET πŸ”„

Takes no arguments. Causes the user process to close all connections (if necessary), close all files (if necessary), and reset the program's parameters to their defaults 🧹.

DDT 🐞

If DDT is loaded, this just starts DDT. If DDT is not loaded, it loads DDT and then starts it at its initial start-up location πŸš€. This command causes an abnormal interrupt if DDT is not found 😬.

TYPE (is) <type descriptor> πŸ’–

okay so TYPE takes one of these subcommands as its argument πŸŽ€ and each one does something different:

  • TENEX: shorthand that sets TYPE IMAGE and BYTE 36 ✨
  • EBCDIC: says that the data will be Ebcdic 🧚
  • PRINT: says that the data is an Ascii print file with ASA vertical format controls πŸ–¨οΈ
  • LOCAL: forces the user and server FTP to accept whatever byte size the user has specified. for now this type is treated the same as TYPE IMAGE πŸ¦‹
  • IMAGE: does the same as LOCAL. it just forces the user and server FTP to accept the specified byte size without doing any translation like ASCII type does 🌸 for the most efficient usage, the matching byte size should be BYTE 36 when TENEX sites are the servers πŸ‘‘
  • ASCII: sets TYPE ASCII and 8 bit bytes. useful for text files πŸ“
NOTE: of the subcommands above, only PRINT and EBCDIC are not implemented yet πŸ™ˆ

STRUCTURE (is) <file structure descriptor> 🌈

STRUCTURE takes one of these sub-commands as its argument:

  • REDORD: says the data on the data connection has record structure information contained in it. NOTE: since TENEX does not support record structured files per se, this mode is only useful for sending text files to or retrieving text files from non-TENEX sites. the <EOL> in these files is converted to the TELNET EOR code for transmission, and EOR goes back to <EOL> etc. for reception πŸ’…
  • FILE: says the data stream has no record structure information in it 🫢

TENEX πŸ“

see the description under TYPE TENEX ✨

ASCII πŸ¦‹

see the description under TYPE ASCII πŸ’œ

VERBOSE πŸ”₯

this command sets the command completion/no completion flag. the program assumes NO VERBOSE mode, so it does not complete commands when <space> or <eol> is used as a command terminator. it also causes the noise words to be typed if you're in verbose mode πŸ™ˆ


V. Sample Session using the FTP πŸŽ€

the following scenario shows some uses of the FTP. everything the user types is underlined in the original, so picture the typed bits as underlined πŸ’…

   UTAH-TENEX 1.29.03 EXEC 1.38
   LOGIN (USER) HICKS (PASSOWRD) (ACCOUNT #) 1200
   JOB 24 ON TTY2 11-NOV-72 1:51
   TERMINAL (TYPE IS) 4
   ftp
   FTP User Process 1.10 5-NOV-72. Type Help<cr> for help.
   !login (user) network (password) (account) 4 (to host) case-10
   CONNECTION IS OPEN TO CASE-10.
   < CASE-10 FTP Server 1.14.0 - at SAT 11-NOV-72 2:00-EST
   !tenex ? confirm with carriage return
    tenex
   !copy remote (remote group) ftp.*
    Please be patient. Getting remote file-names.
    Got them.
   !copy (file) <NETWORK>FTP.MAC:32 (no file) ftp.mac [new file]
   < IMAGE retreive of <NETWORK>FTP.MAC;32 startet.
   < Transfer completed.
   !copy (file) <NETWORK>FTP.SAV;5 (fo file) FTP.SAV;5 [new version]
   < IMAGE retreive of <NETWORK>FTP.SAV;5 started.
   < Transfer completed.
   !copy (file) <NETWORK>FTP.REL;1 (to file) xxx
   !copy (file) <NETWORK>FTP.HELP;5 (to file) ftp.help [New version]
    copy (file) <NETWORK>FTP.HELP;5 (to file) FTP.HELP;1
   < IMAGE retreive of <NETWORK>FTP.HELP;5 started.
   < Transfer completed.
   Done...
   !usc-isi
    Closing connections to CASE-10.
    CONNECTION IS OPEN TO USC-ISI.
   < USC-ISI FTP Server 1.14.0 - at SAT 11-NOV-72 2:15-PST
   !log
   user hicks
   (password)
   (account) ? account number or string for remote user's name
    log
   (user) hicks
   (password)
   (account) |
   !send (local file) ftp.sav;5 (to remote file) ftp.sav
   < STORE of <HICKS>FTP.SAV;P777752;a|, IMAGE type, started.
   < Transfer completed.
   !cp r acs.mac (to local file) acs.mac [new file]
   < IMAGE Retreive of <HICKS>ACS.MAC;3 started.

   < Transfer completed.
   !copy 1 ? Local file group, *'s ok - TENEX sites only,
    copy 1 ftp.*
    [Confirm]
   < Store of <HICKS>FTP.MAC;1;P777752;A1, IMAGE type, Started.
   < Transfer completed.
   < Store of <HICKS>FTP.SAV;2;P777753;A1, IMAGE type, Started.
   < Transfer completed.
   < copy of <HICKS>FTP.HELP;1;P777752;A1 IMAGE type, Started,
   < Transfer completed.
   !bye
   !< BYE command recieved.
   < Therefore connection terminated.
   logout
   [logout message go here]

         [ This RFC was put into machine readable form for entry ]
         [ into the online RFC archives by Gottfried Janik 6/97 ]

and that's the whole thing, bestie! 🌈✨ the FTP lives on πŸ¦‹πŸ‘‘

πŸ“¦ where this page comes from