+----------------------------------------------------------------------+
|                                                                      |
|                  D I S C L A I M E R   N O T I C E                   |
|                                                                      |
|  This document and/or  portions of the material and  data furnished  |
|  herewith,  was developed under sponsorship of the U.S. Government.  |
|  Neither the U.S.  nor  the U.S.D.O.E.,  nor  the  Leland  Stanford  |
|  Junior University, nor their employees,  nor their respective con-  |
|  tractors, subcontractors, or their employees, makes  any warranty,  |
|  express or implied, or assumes any liability or responsibility for  |
|  accuracy,  completeness or  usefulness of any information, appara-  |
|  tus, product or process disclosed, or represents that its use will  |
|  not infringe privately-owned rights.  Mention of any product,  its  |
|  manufacturer, or suppliers shall not, nor is it intended to, imply  |
|  approval, disapproval, or fitness for any particular use. The U.S.  |
|  and  the University at all times  retain the right to use and dis-  |
|  seminate same for any purpose whatsoever.                           |
|                                                                      |
+----------------------------------------------------------------------+


                        TN3270.device v. 1.25
                        =====================

                                by

                          W.G.J. Langeveld
                  Stanford Linear Accelerator Center

                     Copyright  1991,1992,1993
               Trustees, Leland Stanford Jr. University

                         All Rights Reserved



Note: This software requires socket.library which in turn requires
      AmigaDOS 2.04.

Version 0.90:
=============

TNSer.device is a device (real name tnser.device) that looks like a serial
drive but runs the Telnet protocol over Commodore's TCP/IP  (AS225).  Just
put tnser.device in the devs: drawer and select it as the serial device to
use with any terminal program. Select any unit number,  the device doesn't
care.  From that moment,  things should be self-explanatory.  If not,  hit
return or type help.

        Have fun!

        Willy Langeveld, 29 October 1991.

Version 0.92:
=============

        Fixed a bug causing it to not work with some terminal programs.
Also, fixed a problem where it wouldn't connect to any other machine after
the first one, unless the device was closed and reopened (as in the VLT
"Hangup" function).

        Willy Langeveld, 4 November 1991.

Version 0.93:
=============

	Changed the way the coprocesses are started up. This is now handled
in a completely reentrant way using the exchange of messages between the
Open() routine and the coprocess (the co-process needs to communicate the
address of the message port it will use). Also found a place where some
memory was being lost on each close.

	Willy Langeveld, 6 November 1991.

Version 0.96:
=============

	Major bug fix: AbortIO's weren't handled at all right. They are now.
Major enhancements: the command parser has been greatly improved (one can use
abbreviations etc.), one can now set binary mode, an escape character, and
one can log hex printouts to a file. When an escape character is set (escape
<char> or escape 0xhh), one can return to command mode by typing the escape
character, and one can then change stuff. A "status" command was added as
well. Using binary mode, I have been able to upload and download binary files
to a VAX using XMODEM (the problem in non-binary mode turns out to be cr/lf
combinations). Not that one would ever want to do this, because one would
normally use FTP, but heck, it *should* work, right? 8^)

	Willy Langeveld, 23 November 1991.

Version 0.97:
=============

	Major bug fix: only one session was possible at a time. Running
a second session would cause the first session to be aborted, and likely
a crash would result on exit. Major enhancement: EOF mode is now supported,
i.e., one can write null-terminated strings with an io_Length of -1, and one
can read using SERF_EOFMODE and a set of TermArray characters. The
SERF_EOFMODE flag can be set or cleared on any IO request, but the TermArray
must be set using SDCMD_SETPARAMS. Small fry: saved a few bytes here and there.

	Willy Langeveld, 5 December 1991.

Version 0.98:
=============

	Okay, so EOF mode was supposed to include the terminator on reads...

Version 0.99:
=============

	This version has improved handling of large blocks of incoming data.
It used to wait for another incoming request, even when a pending read request
was already present. When another request (of any kind, most likely a write)
came in it would handle the read request and the other request in sequence.
The user-level symptom was that sometimes you had to press a key to make it
continue.

	Willy Langeveld, 24 February 1992.

Version 1.0:
============

	This version fixes a problem (race condition?) that could occur if
the terminal program runs at priority higher than 0. The tnser co-process
would always run at priority 0, and would never get to the stage of giving
a prompt. When closing the device, the co-process would not terminate.
The fix was to run the co-process at the same priority as the calling task.
	Also, one can now set the port number to log into before a session,
for that session only. The port number reverts back to the default after
the session.

	Willy Langeveld, 24 June 1992.

Version 1.15:
=============

	Renamed to TN3270.device.
        This version has several significant enhancements. Most importantly,
this version has built-in 3270 emulation. Models 2, 3, 4, and 5 are supported
in color and "monochrome", and with or without status line. Some of the
Yale orders are also supported, and transparent output will allow simple
graphics. Not supported are transparent input, and some of the more advanced
3270 commands. In order to use the 3270 emulation, a protocol converter is
built in that maintains the display using VT100 escape sequences. Only a 
few easy ones are used, so most VT100 emulators should be able to handle
this. Communications to the emulator are accomplished through escape sequences,
some of which are mapped naturally to a standard VT100 keyboard.
        Other enhancements include reading and saving of a configuration file,
enhancements of the "test" command, and the addition of various other commands
related to the 3270 emulation. Command mode now rejects command lines with
control characters, and the log file is now written much like "type opt h"
output. Also, one can now specify a port number to log into instead of the
Telnet port.
        The source code was cleaned up in many places and a few bugs were
fixed.
        See the enclosed doc file tn3270dev.doc for further information.

There are two known problems. One of them has to do with the GetFA function,
which in some cases should wrap around zero, whereas in other cases it should
not. It only seems to cause problems in some very special cases, so it is not
a big deal. The second problem is stranger: with some mainframe applications,
some high intensity protected fields do not get displayed. Perhaps the 
application is assuming a higher level 3270 than is warranted, so perhaps it
is not really a bug. Neither problem causes any damage, they are mostly 
cosmetic. I will attempt to fix both these problems when I get back
from vacation, 29 september. Neither problem will require significant
changes.

	Willy Langeveld, 1 September 1992

Version 1.18:
=============

The two known problems mentioned before are now gone. They both were due to
faulty screen-update-optimization code. Some other bugs were fixed as well:
It turns out that some mail messages from some UNIX hosts contain non-display
characters. In the previous version, such characters might be sent to the
screen, causing the terminal program (e.g. VLT) to enter graphics mode.
Another potential problem was fixed: on reporting screen contents to the host,
the intensity information could be wrong. The bug apparently had no visible
consequences, however.

Enhancements: The text column of the log file now undergoes ebcdic to ascii
translation when the device is in 3270 emulation. Also, when the port
connected to is not Telnet, then no negotiations are initiated (in the default
case, the device sends out several Telnet transactions to the host on
connection). Further, the "Connecting..." message was moved so that it has
a chance to be displayed before the connect() call is issued. This also
has the advantage that it doesn't immediately block the terminal program.

	Willy Langeveld, 4 October 1992

Version 1.19:
=============

One more problem found and fixed. This one had to do with the fact that multiple
blocks of transparent data were interrupted by escape sequences to update the
status line, which in the case of Tektronix graphics could lead to glitches in
the display. The status line is usually not visible anyway in such cases, so
updating it is useless and wasteful anyway.

	Willy Langeveld, 7 October 1992

Version 1.21:
=============

This version uses an asynchronous "connect()" routine, out of which one can
escape using ctrl-C if the connection takes too long to establish. Also, all
occurrences of the <esc>c sequence were replaced with <esc>[H<esc>[J and
in one case same followed by <esc>[m. The <esc>c sequence has unwanted side
effects such as setting numeric keypad and application cursor to VT100
defaults.

	Willy Langeveld, 15 October 1992

Version 1.22:
=============

This version uses an improved asynchronous "connect()" routine. This one uses
only "legal" BSD socket constructs, so it should be safe. This version also
has its various version numbers set up so the darned 3.0 version command
works correctly. Note that the built-in feature of "connect()" to check for
ctrl-C does not work for tn3270.device, since any ctrl-C's typed in by the
user go to the terminal program and hence to the device as data, not a signal.

	Willy Langeveld, 24 November 1992

Version 1.23:
=============

This version allows one to send a "SDCMD_BREAK" command to the device to
escape to command mode. This only works if no special character has been set
for this purpose.

	Willy Langeveld, 9 December 1992

Version 1.24:
=============

Fixed a bug in the ReadModified handling. When two field attribute bytes were
directly adjoining, the second field would be treated as if it were part of the 
first one's field and was sent to the host, including the second field attr.

	Willy Langeveld, 4 February 1993

Version 1.25:
=============

Added "writelock" option to "save" command. This is for people who want to
allow others to telnet out from their Amigas - after a "save writelock",
both the "save" and "log" commands are disabled. The only way to recover
their use is to delete the config file.

	Willy Langeveld, 29 March 1993

Version 1.26:
=============

Removed code that puts the cursor at the lower righthand corner of the display
when there is no status line and a keyboard lock is encountered. This code had
a bug in that it would also confuse the 3270 emulation about the "real" cursor
location (i.e. the last transmitted one) and it should have been executed also
when "sending" or "updating". However, fixing the code caused considerable
slow-down, probably because other parts of the code now didn't compute screen
damage properly, and some other undesirable side effects remained. Rather than
going for an extensive rewrite to fix this rather unimportant frill, it was 
decided that if you want to have a status indication, you better turn on the
status line.

	Willy Langeveld, 24 May 1993

