Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cat(C)

ct(C)

echo(C)

stty(C)

uucp(C)

uname(C)


 cu(C)                           19 June 1992                           cu(C)


 Name

    cu - call another UNIX/XENIX system

 Syntax

    cu [-s speed] [-l line] [-h] [-t] [-xn] [-o | -e | -oe] [-n] telno

    cu [-s speed] [-h] [-xn] [-o | -e | -oe] -l line [dir]

    cu [-h] [-xn] [-o | -e | -oe] systemname

 Description

    The cu command calls up another UNIX system, a terminal, or possibly a
    non-UNIX system.  It manages an interactive conversation with possible
    transfers of ASCII files.

    The cu command accepts the following options and arguments:

    -sspeed     Specifies the transmission speed (150, 300, 600, 1200, 2400,
                4800, 9600, 19200, 38400).  The default value is "Any" speed
                which will depend on the order of the lines in the
                /usr/lib/uucp/Devices file.  A speed range can also be
                specified (for example, -s1200-4800).

    -lline      Specifies a device name to use as the communication line.
                This can be used to override the search that would otherwise
                take place for the first available line having the right
                speed. When the -l option is used without the -s option, the
                speed of a line is taken from the Devices file. When the -l
                and -s options are both used together, cu will search the De-
                vices file to check if the requested speed for the requested
                line is available.  If so, the connection will be made at the
                requested speed; otherwise, an error message will be printed
                and the call will not be made. The specified device is gen-
                erally a directly connected asynchronous line (for example,
                /dev/ttyab) in which case a telephone number (telno) is not
                required.  The specified device need not be in the /dev
                directory.  If the specified device is associated with an
                auto dialer, a telephone number must be provided. Use of this
                option with systemname rather than telno will not give the
                desired result (see systemname below).

    -h          Emulates local echo, supporting calls to other computer sys-
                tems which expect terminals to be set to half-duplex mode.

    -t          Used to dial an ASCII terminal which has been set to auto
                answer.  Appropriate mapping of carriage-return to carriage-
                return-line-feed pairs is set.

    -xn         Causes diagnostic traces to be printed; it produces a
                detailed output of the program execution on stderr.  The
                debugging level, n, is a single digit in the range 0 to 9;
                -x9 is the most useful value.

    -n          For added security, -n will prompt the user to provide the
                telephone number to be dialed rather than taking it from the
                command line.

    telno       When using an automatic dialer, the argument is the telephone
                number with equal signs for secondary dial tone or minus
                signs placed appropriately for delays of 4 seconds.

    systemname  A UUCP system name may be used rather than a telephone num-
                ber.  In this case, cu will obtain an appropriate direct line
                or telephone number from /usr/lib/uucp/Systems.  Note: the
                systemname option should not be used in conjunction with the
                -l and -s options as cu will connect to the first available
                line for the system name specified, ignoring the requested
                line and speed.

    dir         The keyword dir can be used with cu -lline, in order to talk
                directly to a modem on that line, instead of talking to
                another system via that modem. This can be useful when debug-
                ging or checking modem operation.  Note:  only users with
                write access to the Devices file are permitted to use cu
                -lline dir.

    In addition, cu uses the following options to determine communications
    settings:

    -o   If the remote system expects or sends 7-bits with odd parity.

    -e   If the remote system expects or sends 7-bits with even parity.

    -oe  If the remote system expects or sends 7-bits, ignoring parity and
         sends 7-bits with either parity.

    By default, cu expects and sends 8-bit characters without parity.  If the
    login prompt received appears to contain incorrect 8-bit characters, or a
    correct login is rejected, use the 7-bit options described above.

    After making the connection, cu runs as two processes:  the transmit pro-
    cess and the receive process.  The transmit process reads data from stan-
    dard input and, except for lines beginning with ``~'', passes the data to
    the remote system.  The receive process accepts data from the remote sys-
    tem and, except for lines beginning with ``~'', passes the data to stan-
    dard output.

    Normally, an automatic XON/XOFF protocol is used to control input from
    the remote system so the buffer is not overrun.

    Lines beginning with ``~'' have special meanings.

    The transmit process interprets the following user-initiated commands:

    ~.                  terminate the conversation.

    ~!                  escape to an interactive shell on the local system.

    ~!cmd ...           run cmd on the local system (via sh -c).

    ~$cmd ...           run cmd locally and send its output to the remote
                        system.

    ~+cmd ...           run cmd on the local system but take standard input
                        from the remote system.

    ~%cd                change the directory on the local system.  Note: ~!cd
                        will cause the command to be run by a sub-shell,
                        probably not what was intended.

    ~%take from [ to ]  copy file from (on the remote system) to file to on
                        the local system.  If to is omitted, the from argu-
                        ment is used in both places.

    ~%put from [ to ]   copy file from (on the local system) to file to on
                        the remote system.  If to is omitted, the from argu-
                        ment is used in both places.

                        For both ~%take and ~%put commands, as each block of
                        the file is transferred, consecutive single digits
                        are printed to the terminal.

    ~~line              send the line ~line to the remote system.

    ~%break             transmit a BREAK to the remote system (which can also
                        be specified as ~%b).

    ~%debug             toggles the -x debugging level between 0 and 9 (which
                        can also be specified as ~%d).

    ~t                  prints the values of the termio structure variables
                        for the user's terminal (useful for debugging).

    ~l                  prints the values of the termio structure variables
                        for the remote communication line (useful for debug-
                        ging).

    ~%nostop            toggles between XON/XOFF input control protocol and
                        no input control.  This is useful in case the remote
                        system is one which does not respond properly to the
                        XON and XOFF characters.

    The use of ~%put requires stty(C) and cat(C) on the remote side.  It also
    requires that the current erase and kill characters on the remote system
    be identical to these current control characters on the local system.
    Backslashes are inserted at appropriate places.

    The use of ~%take requires the existence of echo(C) and cat(C) on the
    remote system.  Also, tabs mode (see stty(C)) should be set on the remote
    system if tabs are to be copied without expansion to spaces.

    The receive process normally copies data from the remote system to its
    standard output.  It may also direct output to local files.

    You can construct take and put commands that work between UNIX and non-
    UNIX systems by sending the appropriate characters to cu.  To do this,
    you will need to know the equivalent of echo(C) and cat(C) on the non-
    UNIX system.

    For example, to transfer a file named fred from a remote non-UNIX system
    to the file /tmp/fred on the local UNIX system, construct a command
    similar to the following:

       ~%
       echo '~>':/tmp/fred
       cat fred
       echo '~>'

    This creates a file /tmp/fred on the local UNIX system, putting the char-
    acters ``~>'' into it, which tells cu to start receiving data into this
    file.  The file fred is then sent to standard output on the remote ma-
    chine, and cu therefore receives it. Finally, a ``~>'' is echoed into the
    file; this is a signal to cu to stop receiving input.  (Remember to
    replace echo and cat with the equivalent commands for the non-UNIX sys-
    tem.)

    You can also append the file from the remote machine to an existing file
    on the local system:

       ~%
       echo '~>>':/tmp/fred
       cat fred
       echo '~>'

    This appends the remote file onto the end of the existing file /tmp/fred.

    When cu is used on system1 to connect to system2 and subsequently used on
    system2 to connect to system3, commands on system2 can be executed by
    using ``~~''. Executing a tilde command reminds the user of the local
    system uname.  For example, uname can be executed on systems 1, 2, and 3
    as follows:

       uname
       system3
       ~!uname
       system1
       ~~!uname
       system2

    In general, ``~'' causes the command to be executed on the original ma-
    chine, and ``~~'' causes the command to be executed on the next machine
    in the chain.

 Examples

    To dial a system whose telephone number is 9 201 555 1212 using 1200 baud
    (where dialtone is expected after the 9):

       cu  -s1200   9=12015551212

    If the speed is not specified, ``Any'' is the default value.

    To login to a system connected by a direct line:

       cu  -l  /dev/ttyXX  or  cu -l ttyXX

    To dial a system with the specific line and a specific speed:

       cu  -s1200  -l  ttyXX

    To dial a system using a specific line associated with an auto dialer:

       cu  -l  ttyXX  9=12015551212

    To call up a system named huey:

       cu huey

    To talk directly to an ACU (connect directly with the modem and enter
    modem commands manually):

       cu  -lttyXX dir


 Files

    /usr/lib/uucp/Systems
    /usr/lib/uucp/Devices
    /usr/lib/uucp/LCK..(tty-device)

 See also

    cat(C), ct(C), echo(C), stty(C), uucp(C), uname(C)

 Diagnostics

    Exit code is zero for normal exit, otherwise, one.

 Warnings

    The cu command does not do any integrity checking on data it transfers.
    Data fields with special cu characters may not be transmitted properly.
    Depending on the interconnection hardware, it may be necessary to use a
    ``~.'' to terminate the conversion even if stty0 has been used.  Non-
    printing characters are not dependably transmitted using either the ~%put
    or ~%take commands.  cu between an IMBR1 and a penril modem will not
    return a login prompt immediately upon connection.  A carriage return
    will return the prompt.

 Note

    There is an artificial slowing of transmission by cu during the ~%put
    operation so that loss of data is unlikely.

 Standards conformance

    cu is conformant with:

    AT&T SVID Issue 2;
    and X/Open Portability Guide, Issue 3, 1989.


Typewritten Software • bear@typewritten.org • Edmonds, WA 98026