This is tip3.man in view mode; [Download] [Up]

The program tip3 is a replacement for the tip that comes with the NeXT.  It
includes a facility for doing xmodem, ymodem, and zmodem transfers by executing
the programs /usr/local/bin/sz and /usr/local/bin/rz, which can be gotten from
the next listings on BIX.

In addition, tip3 will recognize the start of a zmodem download (by looking for
the beginning of the ZRQINIT sequence ^XB0) and automatically start the rz
process.  Thus, on BIX, one can give BIX the download command, and the download
of your SCRATCHPAD will happen automatically.

I wrote this utility primarily to communicate with BIX.  I also wanted to get
experience with Objective-C.  Tip3 was the first Objective-C program I wrote,
and has many things "hard-wired" that a truly friendly program would not.  For
example, the programs (rz, sz) used to accomplish the file transfers must exist
in the /usr/local/bin/ directory.  Also, the DELETE key is unconditionally
translated to backspace-space-backspace, so that the DELETE key will work
correctly on BIX.

I would most appreciate receiving any improvements made to tip3 (and I know
there is much room for improvement).

Installation of tip3 is like installation of other utilities, (simply copy it
into a directory in your PATH) except for one issue: the privilege of opening
the serial port.  One way to obtain this privilege is for tip3 to have its
setuid bit set and to be owned either by root or by the owner of /dev/cub (uucp
on my system).  The other way is to chmod the permission bits of /dev/cub so
that anyone can open it.

Following are usage notes:

      tip3 [file]


Tip3 manages a full-duplex connection to a device, typically a modem.
During operation, characters typed are sent to the device and characters
received from the device are written to the screen.

Invoking tip3 without an argument will open the /dev/cub (Port B)
device at 2400 bps.  With an argument tip3 will read and execute the
commands in the named file, a line at a time.  The set of commands
will be described below.  Most commands that can be executed from a
file can also be executed interactively by pressing ~ (tilde) followed
by a single character.  In the following table the corresponding tilde
sequence is given in parentheses before the command name.  Some
commands require more information, such as a file name or phone
number.  When invoked interactively, these commands will prompt the
user.  When invoked from a script file, the information must follow
the command as arguments.  For example, to set the receive protocol to
zmodem, one would interactively type ~p, answer the first prompt with
"r" (for receive) and specify "z" for the protocol.  In a script file,
one must write "protocol r z".  The commands are:

  (~^D) stop

    Quit the program.  This does not normally hang up the phone.  In many
    cases, the session can be restarted.

  (~p) protocol

    Set the file transfer protocols for sending or receiving files.  The
    program will prompt with
       Enter direction [(s)end,(r)eceive]:"
    for which protocol to set, and, after the user selects send or receive,
      Enter desired send protocol [(x)modem,xmodem(1)k,(y)modem,(z)modem]:
    Once the choice has been made, both send and receive protocols will be

  (~^P) parity

    Set the parity to be sent to the remote host.  Some hosts require even or
    odd parity.  BIX and most BBS's don't need any specific parity.  This only
    affects the parity of characters sent to the host; the parity of incoming
    characters is ignored.  The program will prompt with
      Enter desired parity (even, odd, or none) [e,o,n]:
    and will display the choice, once it has been made.

  (~s) send

    Send a file to the host using the currently selected "send protocol".  The
    program will prompt for a file, and will check for its existence.  If the
    file does not exist, the program will keep prompting until a good filename
    is entered.  Responding with just a return will abort the send.

    After a valid file is established, the program will prompt for a command to
    send to the host.  This string (with the trailing "return") will be sent to
    the host just before calling sz to perform the file transfer.  Normally
    this will be the command that would normally be typed to cause the host to
    receive a file.  The purpose of doing this is to avoid the several second
    pause waiting for the host protocol program to time out.

    An example upload, to BIX, is transcripted here (with annotations added):
      Rf:                               | BIX's prompt (user presses ~s)     |
      Enter file to send:comment        | tip3 prompts for file (user enters |
                                        |   filename "comment")              |
      Enter command to send to host:up  | tip3 prompts for host command (user|
                                        |   enters "up", the BIX command to  |
                                        |   upload a file to the scratchpad  |
      Sending comment, 8 blocks: Give your local XMODEM receive command now.
      Sector   8  1k 
                                        | The above is the output of sz, the |
                                        | program that does the file transfer|
                                        |                                    |
      File transfer process ended       | tip3 gets control back from sz and |
                                        |    is back in its normal mode      |
      Rf:                               | BIX's prompt, after successful send|
  (~r) receive 

    Receive a file from the host using the currently selected "receive
    protocol".  If the receive protocol does not automatically obtain the file
    name as part of the process, a file name will be prompted for.

    The command to cause the host to send the file should be typed in prior to
    executing the receive command of tip3.  This is in contrast to the "send"

  (~c) capture

    This toggles capture mode.  When capture mode is on, all characters sent
    from the host are captured in a file as well as being displayed on the
    screen.  Turning this on will prompt for a file name for capturing.  The
    default is "tip.record".

    If the given file already exists, then the current session is appended to
    it.  So it is safe to specify the same file over multiple sessions, or to
    put a "capture fixed_filename" into a script.

  (~h) hangup

    This will attempt to hang up the phone, first by dropping DTR, then by
    sending three tilde's (~~~), pausing, and issuing the Hayes command ATH0.
    This Hayes sequence is entirely hardwired.

  (~e) readscript

    This reads and executes a script file (the e is for execute).  The file
    name will be prompted for.  One script can call another.

  (~b) baudrate

    This allows the user to set the transmission speed of the serial port.  The
    supported speeds are, in bits per second: 300, 1200, 2400, 4800, 9600.


    This will write the arguments to the screen.  This might be useful for
    status messages.  Not very likely though.


    This will send the arguments to the serial port, and thus either to the
    modem or the remote host if the modem is "online".

  (~d) dial

    This command will prompt for a phone number to dial.  It assumes, like the
    hangup command, that the modem accepts Hayes "AT" type commands, and
    generates Hayes "verbose" responses (CONNECT, CONNECT 1200, CONNECT 2400,
    NO CARRIER, BUSY, NO DIALTONE).  If the response from the modem is either
    NO CARRIER or BUSY, then tip3 will pause a few seconds and try to dial
    again.  If the response is one of the CONNECT ones, tip3 rings the
    terminal's bell.

    To stop the redialing, press the ESCape key while tip3 is waiting for one
    of the Hayes responses; tip3 will respond with "User aborted dialing" and
    resume normal operations.


Too many things are hard-wired, like the hayes commands and responses, the
serial port to use (/dev/cub), the location and name of the zmodem program, the
initial protocols (xmodem 1k for sending, zmodem for receiving).

Also, tip3 does not prevent other programs from opening the serial device, the
way tip does.  It is possible to start one instance of tip3 while another is
running (say, from another Terminal).  In such cases the output from the modem
gets split between the active tip3's.  There is nothing to prevent different
users from running tip3 at the same time.  This really should be fixed, so I'll
have to figure out someday how it is done.

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.