\documentstyle[a4,12pt]{article}
\begin{document}
\author{APM Manual pages}
\title{                  IE - The Reference Manual}
\maketitle
\parskip .1 in
\setcounter{secnumdepth}{10}
\parindent 0in

\section{Preamble}
{\hspace*{1.3 in}} Electronic Version 1.2


IE is a screen editor, based on single keystroke commands,
and immediate entry of text. It is very simple to use, but can
provide many advanced features.

\section{Getting started}

To edit a file on any system that supports IE just say:

{\hspace*{0.4 in}} IE file

Then, any text you type will be inserted into the file where the
cursor is on the screen. {\hspace{0.2 in}} The RETURN key has a similar effect as when
used outside the editor, that is it terminates the current line, and
moves onto a new one. The DEL key deletes the character to the left
of the cursor, including new lines. The ARROW keys move around the
screen. {\hspace{0.2 in}} To close the edit and write back the modified file, press
the COMMA (,) key on the numeric keypad at the right hand side of
the keyboard. {\hspace{0.2 in}} If you do NOT want to keep what changes you have
made the edit can be ABORTED by typing Ctrl-Y, when you will be asked
if you really want to abort, typing Y or Ctrl-Y in response to this
leaves the editor without writing back the modified file.


\section{Terminal types}
The following terminals are supported:

{\hspace*{0.2 in}} Visual 200 {\hspace{0.3 in}} (V200)
\\ {\hspace*{0.2 in}} Visual 55 {\hspace{0.4 in}} (V55)
\\ {\hspace*{0.2 in}} Wyse 75 {\hspace{0.5 in}} (WY75) {\hspace{0.6 in}} *
\\ {\hspace*{0.2 in}} VT100 {\hspace{1.7 in}} **
\\ {\hspace*{0.2 in}} VT220

{\hspace*{0.2 in}} Wyse 50 {\hspace{0.5 in}} (WY50) {\hspace{0.6 in}} ***
\\ {\hspace*{0.2 in}} Freedom 100 {\hspace{1.3 in}} ***

* As Wyse 75 terminals are very close to VT100s it is normal for the
 operating system to believe that these are VT100s. For editing
 purposes there are a few differences, and it is important to specify
 to IE that you are using a Wyse 75, for example use the /WY75
 qualifier on VAX/VMS.

** Most terminals provide this as an emulation mode.

*** These terminals were only added as experiments, they are not covered by
\\ {\hspace*{0.3 in}} this manual.

\section{Keys}

The following types of terminal keys will be referred to in this
manual:

Standard
\\ {\hspace*{0.6 in}} ordinary letters, plus main function control keys which
\\ {\hspace*{0.6 in}} now have long names, such as RETURN.

Control
\\ {\hspace*{0.6 in}} written as Ctrl- plus the letter.

Function
\\ {\hspace*{0.6 in}} these are labelled F0 upwards, many now terminals
\\ {\hspace*{0.6 in}} start at F1 , or even F6 rather than F0. VT100oid
\\ {\hspace*{0.6 in}} terminals also have a set of keys PF1 to PF4, these
\\ {\hspace*{0.6 in}} are not treated as function keys by IE, but as
\\ {\hspace*{0.6 in}} oddities, see below. True VT100s do not have function
\\ {\hspace*{0.6 in}} keys, which is rather restrictive, so IE interprets PF1
\\ {\hspace*{0.6 in}} followed by a digit as being F0 to F9.

Keypad
\\ {\hspace*{0.6 in}} these are the numeric keys on the right hand of the
\\ {\hspace*{0.6 in}} keyboard. These are either normal, when written as
\\ {\hspace*{0.6 in}} Keypad followed by a number, or shifted, when written
\\ {\hspace*{0.6 in}} as Function Keypad and then a number.

{\hspace*{0.6 in}} To obtain the Function Keypad values on Visual 200
\\ {\hspace*{0.6 in}} press the CONVERT FUNCTION key with the keypad digit.
\\ {\hspace*{0.6 in}} On the Visual 55s this key is labelled FUNCTION. On
\\ {\hspace*{0.6 in}} VT100oid terminals PF1 must be pressed once, before-
\\ {\hspace*{0.6 in}} hand.

Oddities
\\ {\hspace*{0.6 in}} Terminal manufacturers like to put all sorts of bizarre
\\ {\hspace*{0.6 in}} extra keys on their products. This is a pain for
\\ {\hspace*{0.6 in}} editors, but IE tries to cope. Visual 200s have
\\ {\hspace*{0.6 in}} extra keys galore, such as CP and CL. VT100oid
\\ {\hspace*{0.6 in}} terminals have PF1 to PF4, IE uses PF1 as a shift, but
\\ {\hspace*{0.6 in}} PF2-4 can be used, as can PF1 followed by PF2-PF4 which
\\ {\hspace*{0.6 in}} is the same as Function PF2-Function PF4.

Any key on the terminal can be attached to an IE command, or a
character; this process is called binding. For each command the
standard key bindings for each of the main terminals is given, but the
user can redefine any of these keys, see the section on Keyboard
Files. If a command is not normally bound to any key by default the
not available symbol N/A is used.

\section{Display}

IE reads files into buffers, which the user then looks at through
a window, which is a portion of the terminal screen. This window
is always the full width of the screen, and is normally the full
height of the screen. It is possible to reduce the window's height
using the WINDOW TOP and WINDOW BOTTOM profile options.

On VAX/VMS systems broadcast messages are trapped and displayed
in a special one line Broadcast Window at the top of the screen
in FEATURE MODE and stay there until cancelled.

FEATURE MODE is a terminal independent method of highlighting text.
On Visual 200 and Visual 55 terminals feature mode appears dimmer
than surrounding text; on VT100 and VT220s in inverse video; on
Wyse 75 whatever the current setting of the Attribute setup value is,
this is recommended to be either INVERSE or UNDERLINE for IE, but not
DIM, as this does not look so good.

The top line of the window is also used for reporting error
messages. These appear on the top line of the window, or the line
below the Broadcast Window, in FEATURE MODE, and remain until the next
key is pressed, when the line is restored. This line is called the
message line. All prompts for extra information also appear on this
line.

If a line is longer than the width of the terminal (normally 80
characters) a graphics character like a T turned on its side is
displayed in the rightmost column on the screen. If the cursor is
standing on this character it means that it is in fact some number of
characters off the right hand side of the screen.

To allow the creation of empty buffers, which are in effect new files,
a special line is added to the end of the file during the edit. This
means that an empty file does in fact have this one virtual line in
it. By default it is displayed as a graphics line.

Control characters are displayed in a helpful fashion. The ASCII HT
character is interpreted as being an 8 character position TAB, as
presented by VAX/VMS and VAX/UNIX. {\hspace{0.2 in}} Normally the space occupied by
TAB filling is simply blank (spaces) but the TAB SHOW option can be
set to print a graphics character in each column position that the TAB
moves accross. On Visual 200 and Visual 55 terminals this is a double
dot character, on VT100, VT220 and Wyse 75 it is represented by a
single character position HT symbol.

Other control characters are displayed as $\hat{ }${}$<$letter$>$ in FEATURE MODE,
and occupy two character positions on the screen, but appear for
editing purposes as one. Characters with the eighth bit set are
displayed with a degrees sign before them, including control
characters which then take up three character positions.

Bugs:

HT display:

This does not interact well with the end of line marker, use shorter lines!

\section{Calling IE}

IE is currently mounted on the following systems:

{\hspace*{0.2 in}} VAX/VMS
\\ {\hspace*{0.2 in}} VAX UNIX 4.2bsd
\\ {\hspace*{0.2 in}} APM


To simply edit a file use the command:

{\hspace*{0.2 in}} IE file

Or to edit one file onto another, use the command

{\hspace*{0.2 in}} IE file1 file2 {\hspace{0.9 in}} on VAX/VMS and UNIX
\\ {\hspace*{0.2 in}} IE file1/file2 {\hspace{0.9 in}} on the APM


The following command line switches are available.
On VAX/VMS the switch is proceeded by a /, on UNIX and the APM a -.

\subsection{NOCONFIRM}

This means that when you abort the edit you are not asked if your
really mean it.

\subsection{CREATE}

Ignore any existing file of the given name; always start with an empty
buffer.

\subsection{IGNORE}

This qualifier is used in association with the RECOVER switch to
indicate that any differences in editing environment between the
original edit and the recovery edit should be ignored. See the
section on Journalising for further details.

\subsection{JOURNAL}

The qualifier JOURNAL=$<$file name$>$ can be used to override the default
journal file name, see the section of Journalising for further
details.

\subsection{KEYBOARD}

The qualifier KEYBOARD=$<$file name$>$ can be used to override the default
keyboard file.

\subsection{LAST}

Edit the file that was last edited.

\subsection{MEMORY}

This sets the edit memory to be the file being edited. If the editor
is invoked with no file name after this the remembered file will be
edited. {\hspace{0.2 in}} The position within the file when the last edit was closed
is remembered between edit sessions, unless the NOSAVE\_POSITION
qualifier is used. The TOP switch can be used to override the saved
position when starting an edit.

\subsection{PROFILE}

The /NOPROFILE switch may be used to cause any profile file that is in
use to be ignored.

On all systems PROFILE=$<$file name$>$ can be used to set up a value for
the profile file.

\subsection{READ}

This is used to prevent files being written out, thus avoiding
accidental damage.

\subsection{RECOVER}

This invokes the edit recovery mechanism, see the section on
Journalising.

\subsection{NOSAVE\_POSITION}

This switch indicates that the last used position in a memory edit
should not be remembered. See the qualifier MEMORY for further
details.

\subsection{SILENT}

This suppress the printing of the "Reading from ..." messages at the
start and finish of edits. This is very useful in command files and
when calling the editor as a subroutine.

\subsection{TOP}

The saved memory edit position should not be used; at the start of the
edit the cursor will be at the top of the file. See the switch MEMORY
for more details.

\subsection{WIDTH}

If you are using a terminal that has a width other than 80 characters
the WIDTH=$<$number$>$ qualifier can be used to specify the terminals
width. This is most useful when using an option like 132 columns on
VT100oid terminals.

On VAX/VMS the value given using SET TERMINAL/WIDTH=$<$number$>$ will be
used by default.

On the APM the operating system internal value is used, as is the
screen height. This means that if the Level 1 graphics Visual 200
emulator is in use IE utilises all the available screen space.

\subsection{Terminal Types}
\subsubsection{On VAX/VMS}

Normally the default terminal type is used, but this may be overridden
using the qualifiers /VT100 /VT220 /V200 /WY75 /V55. For
more exotic terminals the form /DEVICE\_TYPE=$<$name$>$ should be used.

\subsubsection{On VAX UNIX}

This is normally taken from an environmental variable TERM, as with
normal UNIX programs. This can be overridden with the symbol
IE\_TT\_Type if the real terminal type differs from that know to the
existing termcap database. An example of this is using a Wyse 75 or
VT220 terminal, which can both use TERM set to vt100, but benefit from
IE knowing exactly what type they are.

\subsubsection{On APM}

The value of the symbol TERMINAL is translated for the default
terminal type, but the following qualifiers are provided:

{\hspace*{0.2 in}} -V200
\\ {\hspace*{0.2 in}} -V55
\\ {\hspace*{0.2 in}} -VT100
\\ {\hspace*{0.2 in}} -VT220
\\ {\hspace*{0.2 in}} -Freedom100
\\ {\hspace*{0.2 in}} -WY50
\\ {\hspace*{0.2 in}} -WY75




\section{Insertion}

Normally to insert text, just type. This inserts at the current
position what you type just as you would expect. {\hspace{0.2 in}} The RETURN key is
bound to a function called Break Line which terminates the current
line and moves onto a new one, also as you would expect. {\hspace{0.2 in}} Some other
useful functions are described below.

\subsection{Insert Line}

Bindings: {\hspace{0.4 in}} All terminals: Keypad 7

This insert a new blank line above the current line. The cursor is
moved to the same level of indentation as on the current line, but on
the new line. The current line is unaffected. If the AUTO INDENT
option is set to NO, then the cursor is moved to the start of the new
line.


\subsection{Break Line}

Bindings: {\hspace{0.4 in}} All terminals: RETURN

This breaks the current line at the cursor position. Any text after
the cursor is moved onto a new line indented as much as on the current
line. The cursor is then moved to the start of the text on the new
line. If the AUTO INDENT option is set to NO the text is moved to the
start of the new line.

\subsection{Insert Literal}

Bindings: {\hspace{0.4 in}} All terminals: Ctrl-P

This allows any typeable character to be inserted at the current
cursor position. To do this, issue the command, and then type the key
that is to be inserted. This is useful for inserting keys that are
normally bound to other functions, such as RETURN, or Ctrl-P itself.

Notice that non-ASCII defined keys, such as function keys, are in fact
composites made up of, usually, what are called escape sequences.
This means that Insert Literal followed by a function key will insert
an ESC character followed by some text characters which identify the
escape sequence, and once separated from their escape simply become
ordinary text.

\subsection{Insert ASCII}

Bindings: {\hspace{0.4 in}} All terminals: Ctrl-A

This allows control characters to be inserted at the current cursor
position by ASCII value. The prompt "ASCII: " appears on the top
line of the window and the ASCII code of the desired character can be
typed in decimal.

Bugs

The NUL character can not be inserted in this fashion, use Ctrl-P and Ctrl-@.

\subsection{Insert TAB}

Bindings: {\hspace{0.4 in}} All terminals: TAB

This, by default, does not insert the ASCII HT character, but rather
inserts spaces until the next internal tab stop is reached. The
TAB WIDTH option can be used to set the number of spaces between tab
stops.

It is possible to define TAB to insert the ASCII HT character, see the
command Define Key.

In Overwrite Mode Insert TAB merely moves along to the next TAB stop
and does not alter the line.

\subsection{Typing Modes}

By default text typed at the terminal is inserted into the text. It
is also possible to select a mode whereby typed text overwrites
existing text. {\hspace{0.2 in}} The following commands manipulate this mode setting.

\subsubsection{Insert Mode}

Bindings
\\ {\hspace*{1.0 in}} Visual 55: N/A
\\ {\hspace*{1.0 in}} All other terminals: Keypad 8

Enters text insertion mode.

\subsubsection{Overwrite Mode}

Bindings
\\ {\hspace*{1.0 in}} Visual 55: N/A
\\ {\hspace*{1.0 in}} All other terminals: Function Keypad 8

Enters text overwrite mode.

\subsubsection{Toggle Mode}

Bindings
\\ {\hspace*{1.0 in}} Visual 55: Keypad 8
\\ {\hspace*{1.0 in}} All other terminals: N/A

Swaps from insert mode to overwrite mode.


\subsection{Formatting}

Certain elementary formating facilities are provided by the editor.
They all rely on the numeric options LEFT MARGIN and RIGHT MARGIN,
which default to 1 and 80.

In normal typing if AUTO INDENT is set to NO, then new lines will be
started at the LEFT MARGIN character position.

If the AUTO LINE BREAK option is set to YES text will be automatically
broken before a word when the cursor goes beyond the RIGHT MARGIN
setting. This means that RETURN need rarely be typed when entering
ordinary text.

If AUTO LINE BREAK is at YES and JUSTIFY is set to YES, then lines
will be padded with spaces until they fill the space between LEFT and
RIGHT MARGINs. The padding alternates between left end and right end
first.

This can be used to type in ready justified text, and for typing
newspaper style columns of text. The Justify Text command can be used
to rejustify a line after a correction.

This is a very rudimentary facility and not intended as a replacement
for text formatting programs, rather it is for short texts, such as
mail or news items.


\section{Movement}

Horizontal movement is counted in characters, where HTs and control
characters count as one character. Vertical movement is counted in
lines. During vertical movement the editor always tries to keep one
line above or below the current line on the screen. This is obviously
not possible at the begining and end of the buffer.

\subsection{Left}

Bindings: {\hspace{0.4 in}} All Terminals: Left Arrow

This moves the cursor one character to the left, unless at the start
of a line, in which case it has no effect.

\subsection{Right}

Bindings: {\hspace{0.4 in}} All Terminals: Right Arrow

This moves the cursor one character to the right, unless at the end
of the line, in which case it has no effect.

\subsection{Up}

Bindings: {\hspace{0.4 in}} All Terminals: Up Arrow

The cursor is moved onto the previous line, unless at the top of the
buffer, in which case it has no effect.

If there is text on the line above up to the point where the cursor is
then the horizontal position of the cursor is unchanged. If however
the line above is shorter than the current one, the cursor is moved to
the end of the text on the line above, possibly the start of the line
if it is empty.

If the WIGGLE option is set to YES then the cursor will be moved back
out again when it moves onto a long enough line on a subsequent Up
command.

If the option FREE CURSOR is set to YES, then the cursor does not move
its horizontal position at all.

\subsection{Down}

Bindings: {\hspace{0.4 in}} All Terminals: Down Arrow

The cursor is moved onto the next line, unless at the bottom of the
buffer, in which case it has no effect.

If there is text on the line below up to the point where the cursor is
then the horizontal position of the cursor is unchanged. If however
the line below is shorter than the current one, the cursor is moved to
the end of the text on the line below, possibly the start of the line
if it is empty.

If the WIGGLE option is set to YES then the cursor will be moved back
out again when it moves onto a long enough line on a subsequent Down
command.

If the option FREE CURSOR is set to YES, then the cursor does not move
its horizontal position at all.


\subsection{End of Line}

Bindings: {\hspace{0.4 in}} All Terminals: Keypad 1

This moves the cursor to the end of the current line.

This command drops a Magic Marker, see Last Position command for
further details.

\subsection{End of Page}
Bindings: {\hspace{0.4 in}} All Terminals: Keypad 3

This moves the cursor to the end of the line currently the last one
on the screen. A new line is scrolled onto the screen unless at the
end of the buffer.

This command can be used with the Scroll Page Down command to scan
through a buffer a screen full at a time.

This command drops a Magic Marker, see Last Position command for
further details.

\subsection{End of File}

Bindings: {\hspace{0.4 in}} All Terminals: Keypad 2

This moves the cursor to the last line of the buffer.

This command drops a Magic Marker, see Last Position command for
further details.

\subsection{Start of Line}

Bindings: {\hspace{0.4 in}} All Terminals: Keypad 0

The moves the cursor to the start of the current line.

This command drops a Magic Marker, see Last Position command for more
details.

\subsection{Start of Page}

Bindings: {\hspace{0.4 in}} All Terminals: Function Keypad 3

The cursor is moved to the start of the line currently at the top of
the screen. A new line is scrolled onto the top of the screen unless
at the top of the buffer.

This command can be used with Scroll Page Up to page backwards through
the buffer, screen at a time.

This command drops a Magic Marker, see Last Position command for more
details.

\subsection{Start of File}

Bindings

{\hspace*{1.1 in}} Visual 200: HOME
\\ {\hspace*{1.1 in}} Visual 55: HOME
\\ {\hspace*{1.1 in}} Wyse 75: {\hspace{0.3 in}} HOME and PF2
\\ {\hspace*{1.1 in}} VT100: {\hspace{0.4 in}} PF2
\\ {\hspace*{1.1 in}} VT220: {\hspace{0.4 in}} PF2

The cursor is moved to the start of the first line of the buffer.

This command drops a Magic Marker, see Last Position Command for more
details.

\subsection{Word Left}

Bindings

{\hspace*{1.1 in}} Visual 200: F0
\\ {\hspace*{1.1 in}} VT220: F6
\\ {\hspace*{1.1 in}} All Other Terminals: F1

This moves the cursor to the start of the next word to the left,
unless at the start of the line in which case it has no effect.

A word is defined to be a group of letters, a group of numbers, or a
single punctuation mark. White space (i.e. spaces and HTs) are
ignored.

\subsection{Word Right}

Bindings

{\hspace*{1.1 in}} Visual 200: F1
\\ {\hspace*{1.1 in}} VT220: F7
\\ {\hspace*{1.1 in}} All Other Terminals: F2

This moves the cursor to the start of the next word to the right,
unless at the end of the line in which case it has no effect.

A word is defined to be a group of letters, a group of numbers, or a
single punctuation mark. White space (i.e. spaces and HTs are
ignored).

\subsection{Up to Start}

Bindings

{\hspace*{1.1 in}} Visual 200: F2
\\ {\hspace*{1.1 in}} VT220: F8
\\ {\hspace*{1.1 in}} All Other Terminals: F3

This moves the cursor to the start of the line above.

This command has no effect at the top of the bufer.

This command drops a Magic Marker, see Last Position command for more
details.

\subsection{Down to Start}

Bindings

{\hspace*{1.1 in}} Visual 200: F3
\\ {\hspace*{1.1 in}} VT220: F9
\\ {\hspace*{1.1 in}} All Other Terminals: F4

This moves the cursor to the start of the line below.

This command has no effect at the end of the buffer.

This command drops a Magic Marker, see Last Position command for more
details.

\subsection{Move to Line}

Bindings

{\hspace*{1.4 in}} VT220: F10
\\ {\hspace*{1.4 in}} All Other Terminals: LINE FEED

This prompts "Line: " and expects a number. If RETURN is pressed
immediately then the command has no effect.

If a number is typed (followed by RETURN) then the cursor is moved to
the line with that number. {\hspace{0.2 in}} This is an absolute move, it is also
possible to specify relative moves by using + or - before the number,
for example the sequence

{\hspace*{0.2 in}} LINE FEED + 1 0 RETURN

will move 10 lines further on in the buffer.

To find out the number of the current line, and the number of lines in
the buffer, press ? in response to the prompt. No RETURN is needed.

\subsection{Move to Column}

Bindings

{\hspace*{1.3 in}} VT220: Ctrl-Space
\\ {\hspace*{1.3 in}} All Other Terminals: Ctrl-@

This prompts "Column: " and expects a number. If RETURN is pressed
immediately then the command has no effect.

If a number is typed (followed by RETURN) then the cursor is moved to
the column with that number. {\hspace{0.2 in}} This is an absolute move, it is also
possible to specify relative moves by using + or - before the number,
for example the sequence

{\hspace*{0.2 in}} Ctrl-@ - 1 5 RETURN

will move 15 characters to the left.

To find out the number of the current column, and the length of the
current line, press ? in response to the prompt. No RETURN is needed.

\subsection{Scroll Page Up}

Bindings

{\hspace*{1.1 in}} Visual 55: N/A
\\ {\hspace*{1.1 in}} All Other Terminals: Function Keypad .

This redraws the screen with the current line as the second bottom
line, unless at the end of the buffer, when it will be the bottom of
the screen.

This command is normally used with the Start of Page command to page
backwards through the buffer. On VT220 and Wyse 75 terminals the Prev
Scrn key is defined to be a macro which performs this function.

\subsection{Scroll Page Down}

Bindings: {\hspace{0.4 in}} All Terminals: Keypad .

This redraws the screen with the current line as the second top
line, unless at the start of the buffer, when it will be the top of
the screen.

This command is normally used with the End of Page command to page
forwards through the buffer. On VT220 and Wyse 75 terminals the Next
Scrn key is defined to be a macro which performs this function.

\subsection{Last Position}

Bindings: {\hspace{0.4 in}} All Terminals: Ctrl-L

This command is used to move back to the place you were before the
last major move command. This is very useful if you have accidently used
the Start of File or End of File commands. Each command listed above
as dropping a Magic Marker can be recovered. A record is kept of all
Magic Markers from the start of the edit, but as the Last Position
command is used they are eaten up.

If a line which had a Magic Marker on it is deleted then that Magic
Marker is also deleted.

Magic Markers are buffer specific: each buffers has its own list.


\section{Searching}

It is possible to look for texts within a buffer, in different
directions, and to replace the located text with a different one.

\subsection{Search}

Bindings

{\hspace*{1.3 in}} VT220: Find
\\ {\hspace*{1.3 in}} All Other Terminal: Keypad 9

This command prompts "Search: " and the text to be located should
be typed in, terminated with RETURN. {\hspace{0.2 in}} The buffer is then searched
starting at the current cursor position, and working fowards to the
end. {\hspace{0.2 in}} For every hundred lines searched a dot is displayed on the top
line of the window.

When the text is found the cursor is positioned at the start of it.
On VT100 and VT220 terminals the located text is underlined.
If the text is not found an error message is put up on the
message line, and the cursor is not moved.

If you want to interrupt a long search, this can be done with Ctrl-C.
Notice that this is used as an operating system interrupt character
rather than an IE command, and this results in an overloading of the
key. On VAX/VMS V4 systems Ctrl-C is echoed as CANCEL in feature
mode, but it is not echoed on other systems.

This command drops a Magic Marker, see Last Position command for more
details.

Normally the case of letters does not matter in searching, but if the
CASE SIGNIFICANCE option is set to YES then exact case matching is
used.

By default the search terminates at the end of the buffer, but if the
WRAP SEARCH option is set to YES then the search will wrap round to
the begining of the buffer down to the position that the search was
started from. {\hspace{0.2 in}} Or if the BACK SEARCH option is set, the text before
the starting point is searched backwards up to the top of buffer.
If either of these steps is taken a message is displayed on the top
line of the screen.

\subsection{Backwards Search}

Bindings

{\hspace*{0.9 in}} Visual 200: Ctrl-$\hat{ }${}
\\ {\hspace*{0.9 in}} Visual 55: Back Space
\\ {\hspace*{0.9 in}} Wyse 75: Back Space
\\ {\hspace*{0.9 in}} VT100: Ctrl-$\hat{ }${}
\\ {\hspace*{0.9 in}} VT220: Remove

This command prompts "hcraeS: " and the text to be located should
be typed in, terminated with RETURN. {\hspace{0.2 in}} The buffer is then searched
starting at the current cursor position, and working backwards to the
begining. {\hspace{0.2 in}} For every hundred lines searched a dot is displayed on the
message line.

When the text is found the cursor is positioned at the start of it.
On VT100 and VT220 terminals the located text is underlined.
If the text is not found an error message is put up on the
message line.

If you want to interrupt a long search, this can be done with Ctrl-C.
Notice that this is used as an operating system interrupt character
rather than an IE command, and this results in an overloading of the
key. On VAX/VMS V4 systems Ctrl-C is echoed as CANCEL in feature
mode, but it is not echoed on other systems.

This command drops a Magic Marker, see Last Position command for more
details.

Normally the case of letters does not matter in searching, but if the
CASE SIGNIFICANCE option is set to YES then exact case matching is
used.

By default the search terminates at the top of the buffer, but if the
WRAP SEARCH option is set to YES then the search will wrap round to
the end of the buffer up to the position that the search was started
from. {\hspace{0.2 in}} Or if the BACK SEARCH option is set, the text below the
starting point is searched backwards down to the end of the buffer.
If either of these steps is taken a message is displayed on the top
line of the screen.

\subsection{Search Again}

Bindings

{\hspace*{1.3 in}} VT220: Keypad 9
\\ {\hspace*{1.3 in}} All Other Terminals: Function Keypad 9

This repeats the last Search or Backwards Search. It is exactly
like retyping the command.

\subsection{Change Text}

Bindings

{\hspace*{1.4 in}} VT220: Insert Here
\\ {\hspace*{1.4 in}} All Other Terminals: Keypad 6

This command prompts "Change: " for a search string, and then
"To: " for a replacement string. The text is searched for the
string, and if it is found then it is replaced with the second
string.

The search is carried out in the same manner as Search, and all the
options that are relevant to it are relevant to this.

If the SEARCH BEFORE REPLACE option is set to NO, then Change Text
becomes a substitution command. The prompt "Change To: " is issued
and the text typed in response to this is used to replace the text
found wth the last Search or Backwards Search command.

\subsection{Change Again}

Bindings

{\hspace*{1.3 in}} VT220: Keypad 6
\\ {\hspace*{1.3 in}} All Other Terminals: Function Keypad 6

This repeats the last Change Text. It is exactly like retyping the
previous Change Text command.

\subsection{Match Bracket}

Bindings: {\hspace{0.4 in}} All Terminals: Ctrl-B

This command can be used for checking the match of all sorts of
brackets and delimiters. An example of its use is moving to a (
character, and then issuing the Match Bracket command. The cursor
will be moved onto the matching ), taking account of all the nested
brackets, and ignoring line terminations.

If there is no matching bracket then an error message is displayed on
the message line. If the Match Bracket command is issued when the
cursor is NOT on a valid character there is no effect.

Bracket matching also takes place backwards. For example placing the
cursor on a ) results in the cursor being moved backwards to the
matching (.


Valid brackets and their match are listed below:

{\hspace*{0.4 in}} ( {\hspace{0.3 in}} -$>$ {\hspace{0.3 in}} )
\\ {\hspace*{0.4 in}} ) {\hspace{0.3 in}} -$>$ {\hspace{0.3 in}} ( {\hspace{0.7 in}} backwards
\\ {\hspace*{0.4 in}} [ {\hspace{0.3 in}} -$>$ {\hspace{0.3 in}} ]
\\ {\hspace*{0.4 in}} ] {\hspace{0.3 in}} -$>$ {\hspace{0.3 in}} [ {\hspace{0.7 in}} backwards
\\ {\hspace*{0.4 in}} \{ {\hspace{0.3 in}} -$>$ {\hspace{0.3 in}} \}
\\ {\hspace*{0.4 in}} \} {\hspace{0.3 in}} -$>$ {\hspace{0.3 in}} \{ {\hspace{0.7 in}} backwards
\\ {\hspace*{0.4 in}} $<$ {\hspace{0.3 in}} -$>$ {\hspace{0.3 in}} $>$
\\ {\hspace*{0.4 in}} $>$ {\hspace{0.3 in}} -$>$ {\hspace{0.3 in}} $<$ {\hspace{0.7 in}} backwards
\\ {\hspace*{0.4 in}} " {\hspace{0.3 in}} -$>$ {\hspace{0.3 in}} "
\\ {\hspace*{0.4 in}} ' {\hspace{0.3 in}} -$>$ {\hspace{0.3 in}} '
\\ {\hspace*{0.4 in}} ` {\hspace{0.3 in}} -$>$ {\hspace{0.3 in}} `
\\ {\hspace*{0.4 in}} \% {\hspace{0.3 in}} -$>$ {\hspace{0.3 in}} \%

Notice that the single quotes do not match in pairs like `' as they
would in true typography. Rather each kind matches the other as this
makes more sense for programming language editing.


\section{Deletion}

The following commands related to removing items from the buffer, and
then with restoring them again. {\hspace{0.2 in}} These are divided into horizontal
operations on characters, and vertical operations on lines. The
character operations are all called Erase operations, while the line
commands are Delete operations.

\subsection{Delete Line}

Bindings: {\hspace{0.4 in}} All Terminals: Keypad 4

This deletes the current line, unless it is the last line of the
buffer. {\hspace{0.2 in}} The cursor is moved onto the next line, at the same
horizontal position.

The deleted line is added to the deleted line list.

\subsection{Delete to End}

Bindings: {\hspace{0.4 in}} All Terminals: Function Keypad 2

This deletes all the lines, including the current line, up to the end
of the file. It provides three options, one to throw the lines away,
one to keep them on the deleted line list, or to not perform the
deletion at all. A prompt appears with this information, and typing T
will throw away the lines, K will keep them and any other key will
abandon the command.

\subsection{Delete to Start}

Bindings

{\hspace*{1.1 in}} Visual 200: N/A
\\ {\hspace*{1.1 in}} Visual 55: N/A
\\ {\hspace*{1.1 in}} Wyse 75: Function PF2
\\ {\hspace*{1.1 in}} VT100: Function PF2
\\ {\hspace*{1.1 in}} VT220: Function PF2

This deletes all the lines above the current line. It provides three
options, one to throw the lines away, one to keep them on the
deleted line list, or to not perform the deletion at all. A prompt
appears with this information, and typing T will throw away the lines,
K will keep them and any other key will abandon the command.

\subsection{Erase Char}

Bindings: {\hspace{0.4 in}} All Terminals: Keypad 5

This deletes the character under the cursor and moves the cursor onto
the character to right.

Deleted characters are put into the Character Bin and can be rescued
with the Undo Erasure command. {\hspace{0.2 in}} Multiple uses of Delete Char result in
all the characters deleted being put into a package in the bin, which
is sealed when any other command is issued. {\hspace{0.2 in}} This means that whole
strings of characters can be deleted and undeleted easily.

The use of this command at the end of a line is governed by the JOIN AT
END option. By default this is No, and means that the Erase Char command
used at the end of a line has no effect. Setting it to yes means that the
next line is appended to the current one.

\subsection{Erase Left}

Bindings: {\hspace{0.4 in}} All Terminals: DEL

This deletes the character to the left of the cursor. This also
can be used to join lines together, as using DEL at the start of the
line joins the current line onto the end of the previous line.

Characters, but not line breaks, are put into the Character Bin and
can be rescued with the Undo Erasure command. Multiple uses of Erase
Left result in the deleted characters being enterer in the reverse
order to that which they were typed in, which means that string
undoing results in the reversal of text.

In Overwrite Mode, Erase Left moves to the character on the left and
then overwrites it with a space character.

\subsection{Back Tab}

Bindings

{\hspace*{1.0 in}} Visual 200: BTAB (Shift TAB)
\\ {\hspace*{1.0 in}} Visual 55: BTAB
\\ {\hspace*{1.0 in}} Wyse 75: Function TAB
\\ {\hspace*{1.0 in}} VT100: Function TAB
\\ {\hspace*{1.0 in}} VT220: Function TAB

This command deletes back to the last internal TAB stop. The
TAB WIDTH option can be used to set the number of spaces between tab
stops.

In Overwrite Mode this command moves back to last TAB stop without
changing the line.

This command has no effect at the start of a line.

\subsection{Erase Word}

Bindings: {\hspace{0.4 in}} All Terminals: Ctrl-W

This command erases the word that the cursor is either within or
nearest to. Words are any sequence of letters and or numbers, or
individual punctuation characters.

When within a word all the characters of the word and any spaces
following it are removed, leaving the cursor at the start of the next
word or the end of the line. If the cursor is not within a word it
is moved to the nearest word to the left and erasure is as before.

All the characters that are deleted are put into the Character Bin in
a sealed package, which can then be undeleted with one use of the Undo
Erasure command.

\subsection{Erase to Start}

Bindings:

{\hspace*{0.9 in}} All Terminals: Ctrl-X
\\ {\hspace*{0.9 in}} Plus:
\\ {\hspace*{0.9 in}} Wyse 75: Function Keypad 0
\\ {\hspace*{0.9 in}} VT100: Function Keypad 0
\\ {\hspace*{0.9 in}} VT220: Function Keypad 0

This deletes all the characters to the left of the cursor from the
current line.

All the deleted characters are dropped in the Character Bin in a
sealed package, and can be undeleted with one use of Undo Erasure.

\subsection{Erase to End}

Bindings: {\hspace{0.4 in}} All Terminals: Function Keypad 1

This deletes all the characters from under the cursor to the end of
the current line.

All the deleted characters are dropped in the Character Bin in a
sealed package, and can be undeleted with one use of Undo Erasure.

\subsection{Restore Line}

Bindings

{\hspace*{1.5 in}} VT220: Keypad -
\\ {\hspace*{1.5 in}} All Other Terminals: Function Keypad 4

This restores the most recently deleted line, to above the current
line, and moves the cursor onto it at the same horizontal position.

\subsection{Clone Line}

Bindings

{\hspace*{1.1 in}} Visual 200: CL
\\ {\hspace*{1.1 in}} Visual 55: F12
\\ {\hspace*{1.1 in}} Wyse 75: PF4
\\ {\hspace*{1.1 in}} VT100: PF4
\\ {\hspace*{1.1 in}} VT220: PF4

This is a variation on Restore Line, except that the most recently
deleted line is copied into the buffer, AND left on the deletion list.
This means that a line can be duplicated many times over by first
deleting it, then using Clone Line to restore it in each time it is
needed.

This rather strange arrangement has arisen by historical accident, a
more systematic method is described in the section on Duplication.

\subsection{Restore All}

Bindings: {\hspace{0.4 in}} All Terminals: Function Keypad 7

This restores all the deleted lines to above the current line, leaving
the cursor in the same place.

The command requires confirmation by pressing Y after issuing the
command.

\subsection{Undo Erasure}

Bindings: {\hspace{0.4 in}} All Terminals: Ctrl-U

This inserts the last package from the character bin before the
cursor.


\section{Admin}

The following miscellaneous commands manipulate the editor state.

\subsection{Close Edit}

Bindings: {\hspace{0.4 in}} All Terminals: Keypad ,

This causes the main buffer to be written out to the file name
specified on the command line. If any other buffers have been
modified prompts appear to ask whether or not to write each one back.
Setting the WRITE BACK option to NO prevents this.

The command line qualifier READ suppresses the writing out of any
buffer, allowing edits free from fear of accidental damage.

Normally the edit can only be closed while in buffer MAIN, but setting
the option FORBID EXIT to NO allows the edit to be closed from any
buffer.

\subsection{Abort Edit}

Bindings: {\hspace{0.4 in}} All Terminals: Ctrl-Y

This causes the edit to be abandoned completely. {\hspace{0.2 in}} After issuing the
command a prompt saying "Do you really want to abort? (Y/N)" appears.
Typing either Y or Ctrl-Y in response to this aborts the edit,
anything else returns to the edit.

The command line qualifier NOCONFIRM removes the safety net.

Normally the edit can only be aborted while in buffer MAIN, but setting
the option FORBID EXIT to NO allows the edit to be closed from any
buffer.

\subsection{Interact}

Bindings

{\hspace*{1.4 in}} VT220: Help
\\ {\hspace*{1.4 in}} All Other Terminals: Keypad -

This terminal performs various house keeping functions, which are
selected by typing the first letter of the appropriate menu entry.

\subsubsection{Profile Operations}

This presents the option of either Setting the options of this current
edit from a file, or Dumping the currently set options into a file for
later use.

Profile files are ordinary text files and are suitable for editing.

See the section on Profile Files for more details.

\subsubsection{Keyboard Operations}

This presents the option of either Setting up the key to command
mapping from a file or Dumping the current mapping into a file for
later use.

Note that the keyboard file is a binary file and is not suitable for
editing.

Note also that keyboard files are generally terminal specific as most
terminals feature some keys that other terminals do not have, which
is the reason for having keyboard files in the first place!

\subsubsection{Set Modes}

This allows the interactive manipulation of the profile options. A
list of the options is displayed and the Up and Down Arrow keys can be
used to select which option to change.

For the YES and NO options either Y, N or D will change the value. D
returns to the default setting. For the numeric parameters, numbers
may be typed, terminated with RETURN.

Pressing RETURN goes back to the edit.

For a complete list of Profile Options, see the section on Profile
Files.

\subsubsection{Files}

This prompts "File Spec: ". If RETURN is pressed in response to this
the files in the current directory will be listed, in a system
specific manner. If a file specification is given, then only the
files corresponding to this will be listed.

Bugs:

On APM: Wild cards are not supported, the only valid file spec
is a directory name.

On UNIX: This facility is not supported.

\subsubsection{Display Keys}

This allows a display of what keys are mapped to what functions. The
classes of keys described in the section Keys can all be called up.

Pressing RETURN goes back to the edit.

\subsubsection{Operating System Specifics}

All operating systems have their peculiarities and IE provides some
facilities that are dependent on these.

\subsubsection{Under VAX/VMS}

Notify

This allows the user to send broadcasts to other users, it prompts for
first the user name or the intended recipient, and then for the
message.

\subsubsection{On the APM}

Quote Password

This allows the user to quote a password to the filestore, enabling
access to other directories.

\subsubsection{On VAX/UNIX}

None at present.



\subsection{Define Key}

Bindings: {\hspace{0.4 in}} All Terminals: Keypad Enter

This key is used to bind functions to keys. It prompts for the key to
be defined and then provides a variety of options:

\subsubsection{Letter}

This prompts for the letter that the key is to map to. This
command can be used for binding the TAB key to the ASCII HT character
by typing the TAB key to the "Press Letter: " prompt. It is also
possible to move the letters around the keyboard if you do not like
the terminal's normal arrangement.

\subsubsection{Command}

This allows the binding of keys to commands. Note that ANY key,
including the letters, can be bound to a command.

A large menu of all the commands is presented divided up into sections
similar to those in this manual. The four cursor keys can be used to
select the desired command, with movement wrapping at the edges of the
menu.

Pressing RETURN asssigns the command that is highlighted to the key.
Pressing Ctrl-Y leaves the key Undefined.

\subsubsection{K and Macro}

This allows for sequences of keystrokes to be bound to one key. There
are two methods of doing this.

The first is the KEYBOARD MACRO, selected by K. Once this has been
selected the user performs the edit that is to be stored just as it
would be done normally, and any changes will happen. When the
sequence is finished issue the Define Key command again to indicate
termination.

The second is an older and no longer recommended method for doing
anything other than binding keys to simple texts. The mapping for
the macro is prompted for and must be typed on the message line.

\subsubsection{Query}

This prints out the current key binding on the message line.


\subsection{Panic!}

Bindings

{\hspace*{1.3 in}} VT220: PF1 PF1
\\ {\hspace*{1.3 in}} All Other Terminals: ESC ESC

This resets all terminal modes, re-enables the keypad and redraws the
screen. In case of corruption or using the terminal on another system
in the middle of an edit.

\subsection{Redraw}

Bindings: {\hspace{0.4 in}} All Terminals: Ctrl-R

This redraws the screen should it become corrupt.

\subsection{Clear Broadcast}

Bindings: {\hspace{0.4 in}} All Terminals: Ctrl-C

This command is only useful on VAX/VMS systems, where broadcast
messages are displayed on the top line of the window, in the Broadcast
Window. This command cancels the broadcast window and returns the
line to useful editing service.

\subsection{Repeat Command}

Bindings

{\hspace*{1.3 in}} VT220: Do
\\ {\hspace*{1.3 in}} All Other Terminals: Ctrl-N

This prompts for a command string, which should be typed in as if it
were being used to perform an edit. This is terminated with RETURN,
if you wish to include RETURN keys in the repeated command, use Ctrl-P
before them. After this is entered the prompt "Times: " appears an
either a *, meaning "until it fails" or a number may be typed here.
The command is executed that many times.

Repeat executions may be interrupted using Ctrl-C. This is not an IE
command but an operating system interrupt. On VAX/VMS systems it is
echoed CANCEL in feature mode.

\subsection{NoOp}

Bindings

{\hspace*{1.4 in}} VT220: Ctrl-S and Ctrl-Q
\\ {\hspace*{1.4 in}} All Others Terminals: N/A

This command is "No Operation", and is provided to bind to keys which
you type accidentally a lot and you do not want to have any effect.
Setting them to Undefined will result in the terminal bell being
sounded when they are pressed.

\subsection{Debug}

Binding: {\hspace{0.5 in}} All Terminals: Ctrl-\

This is a magic command used by the editor maintainers. Mere mortals
will not be able to use it, or even bind keys to it.

\subsection{Shell Escape}

Binding: {\hspace{0.3 in}} All Terminals: Ctrl-Z

This suspends the editor, allowing the user to perform other
operations and then return to the edit.

This is not supported on VAX/VMS.

\subsection{Shell Buffer}

Binding: {\hspace{0.3 in}} All Terminals: Ctrl-D

This uses the contents of the current buffer as a "shell script" or
command file on the host system. {\hspace{0.3 in}} It is possible to specify
parameters to the script, and a name for an output buffer. If a name
is given, then the output that would go to the terminal is sent to a
buffer of that name, otherwise the output is sent to the terminal.

This is not supported on VAX/VMS.


\section{Duplication}

IE uses the concept of a COPY POSITION for moving and copying lines
about a buffer, or between buffers. The COPY POSITION is a buffer
independent marker.

To use the facilities, set the COPY POSITION on the line below where
the insertion is to take place and then move back to the source
position.

\subsection{Set Copy Position}

Bindings

{\hspace*{1.1 in}} Visual 200: CP
\\ {\hspace*{1.1 in}} Visual 55: F11
\\ {\hspace*{1.1 in}} Wyse 75: PF3
\\ {\hspace*{1.1 in}} VT100: PF3
\\ {\hspace*{1.1 in}} VT220: PF3

This sets the COPY POSITION on to the current line.

\subsection{Move Line}

Bindings: {\hspace{0.4 in}} All Terminals: Function Keypad 5


This transfers the current line to above the COPY POSITION. The
cursor moves to the next line at the same horizontal position.

\subsection{Duplicate Line}

Bindings: {\hspace{0.4 in}} All Terminals: Ctrl-T


This duplicates the current line to above the COPY POSITION. The
cursor moves to the next line at the same horizontal position.


\section{Character Operations}

The following commands operate on the characters in a line

\subsection{Lower Case}

Bindings

{\hspace*{1.1 in}} Visual 200: F4
\\ {\hspace*{1.1 in}} Visual 55: F5
\\ {\hspace*{1.1 in}} Wyse 75: F5
\\ {\hspace*{1.1 in}} VT100: F5
\\ {\hspace*{1.1 in}} VT220: F12

This converts the character under the cursor from UPPER CASE to lower
case. The cursor is then moved to the right.

This command has no effect at the end of lines, but it performs the
cursor move on characters that are not letters

\subsection{Upper Case}

Bindings

{\hspace*{1.1 in}} Visual 200: F5
\\ {\hspace*{1.1 in}} Visual 55: F6
\\ {\hspace*{1.1 in}} Wyse 75: F6
\\ {\hspace*{1.1 in}} VT100: F6
\\ {\hspace*{1.1 in}} VT220: F11

This converts the character under the cursor from lower case to UPPER
CASE. The cursor is then moved to the right.

This command has no effect at the end of lines, but it performs the
cursor move on characters that are not letters

\subsection{Flip Case}

Bindings

{\hspace*{1.1 in}} Visual 200: F6
\\ {\hspace*{1.1 in}} Visual 55: F7
\\ {\hspace*{1.1 in}} Wyse 75: F7
\\ {\hspace*{1.1 in}} VT100: F7
\\ {\hspace*{1.1 in}} VT220: F13

This converts the character under the cursor from lower case to UPPER
CASE or from UPPER CASE to lower case. The cursor is then moved to
the right.

This command has no effect at the end of lines, but it performs the
cursor move on characters that are not letters

\subsection{Swap About}

Bindings

{\hspace*{1.1 in}} Visual 200: F7
\\ {\hspace*{1.1 in}} Visual 55: F8
\\ {\hspace*{1.1 in}} Wyse 75: F8
\\ {\hspace*{1.1 in}} VT100: F8
\\ {\hspace*{1.1 in}} VT100: F14

This command swaps the two letters before the cursor around. This is
useful for correcting typing mistakes like:

{\hspace*{0.2 in}} Hosue {\hspace{0.7 in}} -$>$ {\hspace{0.4 in}} House

In this case the cursor would be positioned on the 'e'.

This command has no effect if it appears at the start of the line, or
one character in on the line.

\subsection{Justify Line}

Bindings: {\hspace{0.4 in}} NO DEFAULT BINDING

This command inserts spaces to justify the current line between the
settings of LEFT MARGIN and RIGHT MARGIN.

If the line is too long, then the line is unaffected.


\section{Markers}

Markers are a method of keeping track of places within a buffer.
Markers are buffer specific; each buffer has its own list of markers.

\subsection{Set Marker}

Bindings

{\hspace*{1.1 in}} Visual 200: F8
\\ {\hspace*{1.1 in}} Visual 55: F9
\\ {\hspace*{1.1 in}} Wyse 75: F9
\\ {\hspace*{1.1 in}} VT100: Function PF3
\\ {\hspace*{1.1 in}} VT220: Function PF3

This prompts "Set Marker: " and the name of the marker, should be
typed after this. The current line is then tagged with that name.
Names may be reused, with the old definitions being replaced.

\subsection{Jump to Marker}

Bindings

{\hspace*{1.1 in}} Visual 200: F9
\\ {\hspace*{1.1 in}} Visual 55: F10
\\ {\hspace*{1.1 in}} Wyse 75: F10
\\ {\hspace*{1.1 in}} VT100: Function PF4
\\ {\hspace*{1.1 in}} VT220: Function PF4

This causes a list of markers and the lines to which they are attached
to be displayed, and then the Up Arrow or Down Arrow keys can be used
to select which marker to jump to, then press RETURN. Alternatively the
name of the marker can be typed.

If no markers exist an error message is displayed.

Bugs: If more than about 20 markers exist, not all are displayed.


\section{Buffers}

As mentioned in the introductory sections, files are stored as buffers
in IE. The first file edited, given on the command line, is stored
in a buffer called MAIN. However it is possible to load other files
and edit them concurrently.

When an edit is Closed the user is asked whether to write back each
modified buffer. This can be prevented by setting the WRITE BACK
option to NO.

\subsection{Select Buffer}

Bindings

{\hspace*{1.1 in}} Visual 200: F10
\\ {\hspace*{1.1 in}} Visual 55: Ctrl-S
\\ {\hspace*{1.1 in}} Wyse 75: F13
\\ {\hspace*{1.1 in}} VT100: Ctrl-S
\\ {\hspace*{1.1 in}} VT220: Select

This displays a list of buffers and the names of the files they were
loaded from. The Up Arrow or Down Arrow keys can be used to select
the desired buffer, then press RETURN to enter it. Alternatively the
name of the buffer can be typed. Editing is resumed at the point the
buffer was left at.

Bugs: More than about 20 buffers are not displayed correctly.

\subsection{Get Buffer}

Bindings

{\hspace*{1.1 in}} Visual 200: F11
\\ {\hspace*{1.1 in}} Visual 55: Ctrl-G
\\ {\hspace*{1.1 in}} Wyse 75: F14
\\ {\hspace*{1.1 in}} VT100: Ctrl-G
\\ {\hspace*{1.1 in}} VT220: F18

This command is used to load a file into a buffer. {\hspace{0.2 in}} The prompt
"Buffer Name: " appears first. This is the name for use in Select and
Include Buffer. {\hspace{0.2 in}} Either you can invent a new name, or you can use the
name of the file to be loaded. If the buffer name is given as the
name of a file that exists then the prompt "File Name ($<$FILE$>$): "
appears. Pressing RETURN in response to this results in $<$FILE$>$ being
loaded, where $<$FILE$>$ is the expanded version of the buffer name.

If the buffer name is not a valid file name, however, the prompt is
simply "File Name: " and pressing RETURN returns to the edit. Giving
a file name results in that being loaded. If the given file does not
appear a report is given and the prompt is reissued.

To create an empty buffer use the system specific null device name as
the file name. On VAX/VMS this is NL:, on the APM it is :N and on
VAX/UNIX it is /dev/null.

\subsection{Put Buffer}

Bindings

{\hspace*{1.1 in}} Visual 200: F12
\\ {\hspace*{1.1 in}} Visual 55: Ctrl-O
\\ {\hspace*{1.1 in}} Wyse 75: F15
\\ {\hspace*{1.1 in}} VT100: Ctrl-O
\\ {\hspace*{1.1 in}} VT220: F19

This command is used to output the current buffer into a file.
Applications of this are keeping backup copies or producing extracts.
The prompt "File name for output (from $<$file$>$): " will appear, where
$<$file$>$ is the name of the file that the buffer was read from. If the
buffer was created then the part in brackets is omitted. {\hspace{0.2 in}} This is
NOT the default file name for output as this might case accidental
overwriting of files. If RETURN is pressed at this point the edit
continues unaffected. {\hspace{0.2 in}} If a valid file name is given, followed by
RETURN the buffer will be writen to that file.

On VAX/VMS systems all that is needed to write the buffer back to the
source file is to give the file name [], which results in all the
fields being filled in by default.

\subsection{Include Buffer}

Bindings

{\hspace*{1.1 in}} Visual 200: F13
\\ {\hspace*{1.1 in}} Visual 55: Ctrl-]
\\ {\hspace*{1.1 in}} Wyse 75: F16
\\ {\hspace*{1.1 in}} VT100: Ctrl-]
\\ {\hspace*{1.1 in}} VT220: F20

This displays a list of buffers and the names of the files they were
loaded from. The Up Arrow or Down Arrow keys can be used to select
the desired buffer, then press RETURN to enter it. Alternatively the
name of the buffer can be typed.

The buffer that is selected is copied into the current buffer above
the current line. If the current buffer is selected the command
performs no function, so it cannot be used to include a buffer within
itself.

Bugs: More than about 20 buffers are not displayed correctly.


\section{Profile Files}

It is impossible to please everyone, and very hard to please anyone!
To this end IE has a number of options that can be set, either
interactively, or at the start of each edit via the Profile File
mechanism. These can either be set up permanently, or set dynamically
either via the Interact/Profile Operations command, or by the
PROFILE=$<$file$>$ command line qualifier.

\subsection{The File Itself}

Profile files are simple text files, containing statements like:

{\hspace*{0.2 in}} Show TAB = Yes
\\ {\hspace*{0.2 in}} TAB Width = 2

and comments, either introduced with ! or \{, and terminated at the end
of the line. Some options can be given the boolean values of YES or
NO, whereas some take numbers.

\subsubsection{SHOW TAB}

Default: NO

If this is set to NO then the positions that ASCII HT characters fill
on the screen are occupied with spaces. If it is set to yes they are
filled with a graphics character: on the Visual 200 and Visual 55
a small double dot character, on the others it is a composite HT
character.

\subsubsection{AUTO INDENT}

Default: YES

This controls whether new lines are automatically filled with spaces
out to the level of the surrounding lines. This is most useful set to
YES for computer program writing, but is best at NO for plain text.

\subsubsection{AUTO LINE BREAK}

Default: NO

This is used with the the RIGHT MARGIN option to allow the typing of
plain text without the necesity of pressing RETURN at the ends of
lines. When it is switched to YES lines are automatically broken at
the start of the last word on the line. For editing programming
language files this should be NO

\subsubsection{JUSTIFY}

Default: NO

Used in conjunction with AUTO LINE BREAK at YES this causes lines
typed in to be padded with spaces to file the space between LEFT
MARGIN and RIGHT MARGIN.

\subsubsection{CASE SIGNIFICANCE}

Default: NO

This determines whether the case of a search string matters, if it is
set to YES an exact match between the string and the text is required.

\subsubsection{SEARCH BEFORE REPLACE}

Default: YES

This controls the behaviour of the Change Text command. With the
deafult value of YES, then the Change Text command prompts for a
search string and a replacement string. Setting the SEARCH BEFORE
REPLACE option to NO means that the command only needs a replacement
string and replaces the last Search or Backwards Search string.

\subsubsection{FREE CURSOR}

Default: NO

This affects the horizontal movement of the cursor when it is moved
vertically. If FREE CURSOR is set to YES then the cursor will move
straight up and down without being constrained to be within the text,
which is the case with the default value of NO.

\subsubsection{WRITE BACK}

Default: YES

This affects the fate of buffers when the edit is closed. If WRITE
BACK is set to NO then the contents of the buffers is thrown away if
changed. The normal value of YES means that the user will be prompted
per changed buffer as to whether it should be written back or not.

\subsubsection{BEEP MUTE}

Default: NO

This is a bizarre option put in at the request of Anti-Noise-
Pollutionists. Normally IE beeps on errors, but if this option is set
to YES it is as quiet as the tomb.

\subsubsection{FORBID EXIT}

Default: YES

The default state of this option prevents edits from being closed or
aborted from any buffer but the main one.

\subsubsection{WIGGLE MODE}

Default: NO

This controls the horizontal motion of the cursor while it moves
vertically. If the line it moves to is shorter, then the cursor is
constrained to within the text on that line, but will jump back to
the further out position when moved agin onto a longer line.

\subsubsection{WRAP SEARCH}

Default: NO

This controls the behaviour of the Search and Backwards Search
commands. If the text is not found in the normally searched section
of the text, the search wraps round the end of the buffer and works
towards the starting point.

If both WRAP SEARCH and BACK SEARCH are enabled, WRAP SEARCH takes
place.

\subsubsection{BACK SEARCH}

Default: NO

This controls the behaviour of the Search and Backwards Search
commands. If the text is not found in the normally searched section
of the text, the other half is search backwards from the starting
point.

If both WRAP SEARCH and BACK SEARCH are enabled, WRAP SEARCH takes
place.

\subsubsection{JOIN AT END}

Default: NO

This controls the behaviour of the Erase Char command at the end of
lines. In the default state the command has not effect, but if the
option is set to Yes then the following line is joined onto the
current one.

\subsubsection{TAB WIDTH}

Default: 3

This controls the width of the internal TAB settings, as used by the
Insert TAB and Back TAB commands.

\subsubsection{BEEP COLUMN}

Default: 75

Like a typewriter IE gives a beep to warn oh the end of the line
approaching. {\hspace{0.2 in}} This option specifies the column number at which
to go beep.

\subsubsection{LEFT MARGIN}

Default: 1

This is used when AUTO INDENT is NO to determine where to put the
cursor when starting a new line.

\subsubsection{RIGHT MARGIN}

Default: 80

This is used by the AUTO LINE BREAKing and JUSTIFYing facilities to
determine where to break the line.

\subsubsection{JOURNAL FREQUENCY}

Default: 0

This controls the frequency of Journalising. If it is set to 0 then
journalising is disabled. See the section on Journalising for more
details.

\subsubsection{WINDOW TOP}

Default: 0

This tells the editor which line to use as the top of the display
window.

\subsubsection{WINDOW BOTTOM}

Default: 23

This tells the editor which line to use as the bottom of the display.

On the APM the default value is set from the operating system height
setting.

\subsubsection{EOF MARKER}

Default: Terminal Dependent

Cascade sells things like personalised golf tees, pound coin holders,
etc. In this rather silly vain IE allows the user to change the
symbol used at the end of buffers.

This string is TERMINAL DEPENDENT, as it is output, raw, in the
terminals graphics mode. If you are a terminal oriented hacker then
go right ahead and have a different marker for each profile file!

Control characters are NOT displayed.


\subsection{Setting up your profile under VMS}

There are three ways of telling IE about where to find your profile
file:

Qualifier
\\ {\hspace*{1.0 in}} The qualifier /PROFILE=$<$file name$>$ can be used at
\\ {\hspace*{1.0 in}} each edit. It overrides other methods. Note that
\\ {\hspace*{1.0 in}} /NOPROFILE can also be useful if there is a problem
\\ {\hspace*{1.0 in}} with the defined profile file.

Logical Name
\\ {\hspace*{1.0 in}} Defining the logical name IE\_PROFILE to point to your
\\ {\hspace*{1.0 in}} profile file is a method that avoids typing it with
\\ {\hspace*{1.0 in}} every command. It is also independent of default
\\ {\hspace*{1.0 in}} directory.

Default File
\\ {\hspace*{1.0 in}} If a file called PROFILE.IE exists in the current
\\ {\hspace*{1.0 in}} default directory then this is used, unless either of
\\ {\hspace*{1.0 in}} the two previous methods have been employed. This is
\\ {\hspace*{1.0 in}} useful if you flit from directory to directory and
\\ {\hspace*{1.0 in}} perform different activities in each, for example
\\ {\hspace*{1.0 in}} programming and documenting.

\subsection{Setting up your profile on the APM}

Qualifier
\\ {\hspace*{1.0 in}} The -PROFILE=file qualifier can be used to specify the
\\ {\hspace*{1.0 in}} profile file for an edit. All edits after this will
\\ {\hspace*{1.0 in}} employ the same profile.

Default File
\\ {\hspace*{1.0 in}} If a file called PROFILE.IE exists in the current
\\ {\hspace*{1.0 in}} directory then that is used, or if not a file called
\\ {\hspace*{1.0 in}} PROFILE.IE in your login directory will be used.

\subsection{Setting up your profile under UNIX}

Qualifier
\\ {\hspace*{1.0 in}} The -PROFILE=$<$file$>$ switch can be used to specify the
\\ {\hspace*{1.0 in}} profile for a one off edit.

Default File
\\ {\hspace*{1.0 in}} If a file called .IE\_PROFILE exists in your working
\\ {\hspace*{1.0 in}} directory this is used. If not, then the file
\\ {\hspace*{1.0 in}} .IE\_PROFILE in your login directory is used.


\section{Keyboard Files}

Keyboard files are used to map terminal keys to editor functions.
Each terminal type must have its own keyboard file. In addition
users can tailor their keyboard files, and then keep them.

These are binary data files and as such are not suitable for editing,
they should be created using the Dump Keyboard command within the
Interact command.

\subsection{Setting up your own keyboard file under VAX/VMS}

Qualifier
\\ {\hspace*{1.0 in}} The command line qualifier /KEYBOARD=$<$file$>$ can be used
\\ {\hspace*{1.0 in}} to specify a one off keyboard file usage.

Logical Name
\\ {\hspace*{1.0 in}} If you only ever use one terminal then the logical name
\\ {\hspace*{1.0 in}} IE\_KEYBOARD can point to the keyboard file. If however
\\ {\hspace*{1.0 in}} you use different terminals a further mechanism is
\\ {\hspace*{1.0 in}} provided.

{\hspace*{1.0 in}} IE uses the 3-L terminal type support to determine
\\ {\hspace*{1.0 in}} what model is in use. This is an extension to the
\\ {\hspace*{1.0 in}} existing VMS terminal types that allows "oid" terminals
\\ {\hspace*{1.0 in}} to be fully supported. For example a Visual 200 is a
\\ {\hspace*{1.0 in}} VT52oid terminal, so VMS believes that it is a VT52.
\\ {\hspace*{1.0 in}} Defining the logical TT\_MAP\_VT52 to be VISUAL200 tells
\\ {\hspace*{1.0 in}} IE that all VT52 terminals are in fact Visual 200s on
\\ {\hspace*{1.0 in}} this system. Similarly with TT\_MAP\_VT100 set to
\\ {\hspace*{1.0 in}} WY75. For standard DEC terminals, such as VT100s,
\\ {\hspace*{1.0 in}} no TT\_MAP\_ name is set up.

{\hspace*{1.0 in}} To set up a keyboard file, the terminal map name is
\\ {\hspace*{1.0 in}} used in another logical name to point to the keyboard
\\ {\hspace*{1.0 in}} file. For the Visual 200 example the name would be
\\ {\hspace*{1.0 in}} IE\_VISUAL200\_KEYBOARD. The complete list is as
\\ {\hspace*{1.0 in}} follows:

{\hspace*{1.2 in}} IE\_VISUAL200\_KEYBOARD
\\ {\hspace*{1.2 in}} IE\_VISUAL55\_KEYBOARD
\\ {\hspace*{1.2 in}} IE\_WY75\_KEYBOARD
\\ {\hspace*{1.2 in}} IE\_VT100\_KEYBOARD
\\ {\hspace*{1.2 in}} IE\_VT220\_KEYBOARD

Default File
\\ {\hspace*{1.0 in}} If the file KEYBOARD.KIE exists in the current
\\ {\hspace*{1.0 in}} directory then this is used.

\subsection{Setting up your own keyboard file on the APM}

Qualifier
\\ {\hspace*{1.0 in}} The command line qualifier -KEYBOARD=$<$file$>$ can be used
\\ {\hspace*{1.0 in}} to specify the keyboard file once. All subsequent
\\ {\hspace*{1.0 in}} edits will use this keyboard file.

Default File
\\ {\hspace*{1.0 in}} The file KEYBOARD.KIE in the current directory will be
\\ {\hspace*{1.0 in}} used, or if that does not exist the file KEYBOARD.KIE in
\\ {\hspace*{1.0 in}} the login directory.

\subsection{Setting up your own keyoard file under UNIX}

Qualifier
\\ {\hspace*{1.0 in}} The command line switch -KEYBOARD=$<$file$>$ can be used to
\\ {\hspace*{1.0 in}} give a one off keyboard file setting.

Environmental Variable:
\\ {\hspace*{1.0 in}} The environmental variable IE\_KEYBOARD is the name of
\\ {\hspace*{1.0 in}} a directory which contains keyboards files called by
\\ {\hspace*{1.0 in}} the terminal mnemonic: V200, VT220, WY75 etc.


\section{Journalising}

It is a sad fact of computer life that things will always gow rong
(sic). Various things can be at fault: lightning, disk crashes,
operating systems failures, roadworks digging up networks or even bugs
in the editor.

When any such nasty event takes place there is potential for loosing
edits, so IE provides a method of recovering an edit. This is called
journalising, and when enabled a record of all the commands and text
typed to the editor is stored, and can be played back later.

To switch journalising on the option JOURNAL FREQUENCY should be set
to a non-zero value. {\hspace{0.2 in}} The number you choose is in fact the number of
key strokes that are buffered up before writing them out to disk. If
the value 1 is used then ever key stroke will be kept, however this
will have a very high serious effect on performance with long pauses
between key strokes on a loaded system. A typical value is 16 or 32,
which means that an edit will be recoverable up to worst 16 or 32 key
strokes behind.

When an edit is closed normally the journal file is deleted, but on an
abort it is kept so that if you REALLY did not mean to say Ctrl-Y and
then Y you can recapture the edit.

The command line qualifier RECOVER is used to rerun the edit, but it
is a good idea to perform some system dependent wizardry first.

\subsection{Recover under VAX/VMS}

The logical name IE\_JOURNAL gives the name of the journal file, which
is normally SYS\$LOGIN:JOURNAL.IE. If you wish to move this redefine
the logical name, but it is ESSENTIAL that there is no version number
on the file name. The command line qualifier /JOURNAL=$<$file$>$ can be
used to specify a one off journal file.

Before invoking the recover edit it is a good idea to copy the journal
file to a safe place:

{\hspace*{0.2 in}} \$ COPY IE\_JOURNAL;2 Safe\_Directory:SAVED.IEJ

It is very easy to make mistakes recovering edits! Notice that the ;2
is ESSENTIAL after the IE\_JOURNAL in this copy statement

Now use EXACTLY the same command line for the edit as before, except
add the qualifier /RECOVER.

A check is made to see if the source file, profile file and keyboard
file are the same as before to prevent running the wrong journal on a
file. If you do actually want to use a different configuration use
the /IGNORE qualifier to do this.

If the first recovery does not succeed for some reason, copy the saved
journal back to the original site:

{\hspace*{0.2 in}} \$ COPY Safe\_Directory:SAVED.IEJ IE\_JOURNAL;2

and try again. You will probably have figured out what the difference
was.

\subsection{Recover on the APM}

The journal file is normally kept in a file IE\_JOURNAL in the current
directory, but the command line qualifier -JOURNAL=$<$file$>$ can be used
to change this. The new value will be used for each edit after the
first automatically.

Before invoking the recover edit it is a good idea to copy the journal
file to a safe place:

{\hspace*{0.2 in}} \} T IE\_JOURNAL/SAVED\_JOURNAL

It is very easy to make mistakes recovering edits!

Now use EXACTLY the same command line for the edit as before, except
add the qualifier -RECOVER.

A check is made to see if the source file, profile file and keyboard
file are the same as before to prevent running the wrong journal on a
file. If you do actually want to use a different configuration use
the -IGNORE qualifier to do this.

If the first recover does have problems the copy the saved version
back to the original file:

{\hspace*{0.2 in}} \} T SAVED\_JOURNAL/IE\_JOURNAL

and try again - you will probably have worked out what was wrong last
time.

\subsection{Recover under UNIX}

This is not yet supported.

\subsection{Problems with journalising}

The two items are not so much bugs as problems inherent to the concept
of journalising. Why not use a better scheme you cry, well suggest
one please.

\subsubsection{Multiple Users}

If several people are logged in as the same user or are working in
the same directory then each one, except the first, will have to make
provision for using a differently named journal file.

\subsubsection{Writing out buffers}

If the Put Buffer command is used to write buffers back on top of the
original file all hell will be let loose if you try and rerun the edit
as some changes will already have been made. This is normally only
used as a backup method. If you really do want the belt and braces of
both journalising and backup copies, put the backups somewhere else.



\section{Calling IE from programs}
IE is an \%external \%routine and may be called from other programs that need to
perform editing.

It is also possible to get IE to display a message in the Broadcast Window when
the edit starts up - very useful for displaying error reports when calling IE
from a compiler.

The following declarations are in an include file:


\small\tt \begin{verbatim}%constant %integer abort
      ! If the user aborts his edit or a fatal condition arises IE
      ! %signals abort.

%constant %string (15) Version
      ! This is the version code of the editor that you will be using.

%constant %integer Silent
%constant %integer Confirm
%constant %integer Deaf
%constant %integer Reset Heap
%constant %integer Recover Edit
%constant %integer Ignore Differences
%constant %integer Adopt Defaults
   ! These are options for use when calling IE
   !    Silent     - suppresses the printing file loading/writing messages
   !    Confirm    - asks if the user really wants to before Aborting
   !    Deaf       - suppresses any broadcast messages appearing
   !*   Reset Heap - this causes IE to restore its claimed heap space         *
   !*                at the end of an editing session.  When used stand alone *
   !*                it does not bother but any other program using the heap  *
   !*                or likely to call the editor more than once MUST supply  *
   !*                this option.                                             *
   !     Recover Edit         \
   !     Ignore Differences    |    These are used for recovering edits
   !     Adopt Defaults       /


%external %routine %spec IE editor %alias "IE_EDITOR" %c
                                   (%string (127) in file, out file,
                                    %integer window top, window bottom,
                                    %integer %name start line, start pos,
                                    %string (127) profile,
                                                  keyboard,
                                    %integer options)
   ! This is the editor itself, the parameters aree as follows:
   !    In File       - The source file, creates output if null
   !    Out File      - The output file, read only if null
   !    Window Top    - Top line of the screen to use 0 to 12
   !    Window Bottom - Bottom line of the screen to use
   !    Start Line    - Line of file to start on, returns line at end (starts at
   !                    line 1.
   !    Start Pos     - Column of line to start on, returns position at end
   !                    (starts at 1)
   !    Profile       - Profile file - no profile if null
   !    Keyboard      - Keyboard File - this MUST be filled in.
   !    Options       - Bits set as above

%external %string (255) %function %spec Default Profile %alias "IE_DEF_PRO"
%external %string (255) %function %spec Default Keyboard %alias "IE_DEF_KEY"
   ! These provide values for the Profile and Keyboard parameters for
   ! IE as they would be filled in by the editor called as a command.



 Terminal model control:

%external %integer %function %spec Default Terminal %alias "IE_DEF_TER"
%external %byte %spec Terminal Model %alias "IE_TT_MODEL"
   ! The variable Terminal Model must be assigned the value of Default
   ! Terminal, or one of the following values:

%constant %integer Visual 200
%constant %integer Visual 55
%constant %integer VT100
%constant %integer VT220
%constant %integer Freedom 100
%constant %integer WY 50
%constant %integer WY 75

%external %routine %spec set up terminal %alias "IE_SET_UP_TERMINAL"
   ! This routine must be called before calling IE.

%external %routine %spec reset terminal  %alias "IE_RESET_TERMINAL"
   ! This routine must be called after calling IE.


%external %string (255) %spec Journal File %alias "IE_J_FILE"
%external %string (255) %function %spec Default Journal %alias "IE_DEF_JOU"
   ! If journalising is to be used the string must be filled in with a
   ! valid file name, normally provided by this routine.


%external %routine %spec Receive Broadcast %alias "IE_BROADCAST" %c
                                           (%string (255) Message)
   ! If this is called before IE Editor itself the Message will appear as a
   ! broadcast message at the top of the screen when the edit starts up.
   ! Very useful when integrating the editor into a compiler.

%external %integer %spec Main Buffer Changed %alias "IE_CHANGED_FLAG"
   ! This variable is set to non-zero if the main buffer of the edit
   ! has been altered.

%record %format Preload fm (%string (32) Buffer Name,
                            %string (255) File Name,
                            %record (Preload fm) %name Next)
%external %record (Preload fm) %name %spec Preloads %alias "IE_PRELOADS"
   ! It is possible to have IE automatically preload buffers.  To do
   ! this create a list of Preload fm records and point this name at
   ! them.
\end{verbatim}\rm  \normalsize \subsection{On VAX/VMS}

The include file is in ECS\_TEXT:[IE]IE.INC, and it is necesary to
link with ECS\_TEXT:[IE]IE/Lib.

\subsection{On the APM}

The file INC:IE.IMP provides the above declartions. All the routines
are already Installed.

\subsection{On the APM}

It is not part of the UNIX karma to call editors as subroutines,
rather they are envoked as subprocesses, and the user can select which
editor to use.


\section{Keypad Layouts}

The following graphical plans are provided as a help to remembering
the location of the various functions in the standard keyboard
definitions.

\subsection{Visual 200}

{\hspace*{1.2 in}} +------------+-------------+------------+
\\ {\hspace*{1.2 in}} |Restore All |Overwrite Mod|Search Again|
\\ {\hspace*{1.2 in}} | {\hspace{0.8 in}} | {\hspace{0.9 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{1.2 in}} |Insert Line |Insert Mode |Search {\hspace{0.4 in}} |
\\ {\hspace*{1.2 in}} +------------+-------------+------------+
\\ {\hspace*{1.2 in}} |Restore Line|Move Line {\hspace{0.3 in}} |Change Again|
\\ {\hspace*{1.2 in}} | {\hspace{0.8 in}} | {\hspace{0.9 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{1.2 in}} |Delete Line |Delete Char |Change Text |
\\ {\hspace*{1.2 in}} +------------+-------------+------------+
\\ {\hspace*{1.2 in}} |Erase To End|Delete To End|Start Of Pag|
\\ {\hspace*{1.2 in}} | {\hspace{0.8 in}} | {\hspace{0.9 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{1.2 in}} |End Of Line |End Of File |End Of Page |
\\ {\hspace*{1.2 in}} +------------+-------------+------------+
\\ {\hspace*{1.2 in}} | {\hspace{0.8 in}} |Abort Edit {\hspace{0.2 in}} |Scroll Up {\hspace{0.2 in}} |
\\ {\hspace*{1.2 in}} | {\hspace{0.8 in}} | {\hspace{0.9 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{1.2 in}} |Start Of Lin|Close Edit {\hspace{0.2 in}} |Scroll Down |
\\ {\hspace*{1.2 in}} +------------+------+------+------------+
\\ {\hspace*{1.2 in}} | {\hspace{1.3 in}} | {\hspace{1.3 in}} |
\\ {\hspace*{1.2 in}} | {\hspace{1.3 in}} | {\hspace{1.3 in}} |
\\ {\hspace*{1.2 in}} |Interact {\hspace{0.7 in}} |Define Key {\hspace{0.6 in}} |
\\ {\hspace*{1.2 in}} +-------------------+-------------------+

\subsection{Visual 55}

{\hspace*{0.6 in}} +------------+------------+------------+------------+
\\ {\hspace*{0.6 in}} |Restore All | {\hspace{0.8 in}} |Search Again| {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |Insert Line |Toggle Mode |Search {\hspace{0.4 in}} |Interact {\hspace{0.3 in}} |
\\ {\hspace*{0.6 in}} +------------+------------+------------+------------+
\\ {\hspace*{0.6 in}} |Restore Line|Move Line {\hspace{0.2 in}} |Change Again| {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |Delete Line |Delete Char |Change Text |Close Edit |
\\ {\hspace*{0.6 in}} +------------+------------+------------+------------+
\\ {\hspace*{0.6 in}} |Erase To End|Delete To En|Start Of Pag| {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |End Of Line |End Of File |End Of Page | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} +------------+------------+------------+ {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{1.7 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{1.7 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |Start Of Line {\hspace{0.8 in}} |Scroll Down |Define Key |
\\ {\hspace*{0.6 in}} +-------------------------+------------+------------+

\subsection{Wyse 75}
{\hspace*{0.6 in}} +------------+------------+------------+------------+
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} |Delete To St| {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |FUNCTION {\hspace{0.3 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} |Start Of Fil|Set Copy Poi|Clone Line |
\\ {\hspace*{0.6 in}} +------------+------------+------------+------------+
\\ {\hspace*{0.6 in}} |Restore All |Overwrite Mo|Search Again| {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |Insert Line |Insert Mode |Search {\hspace{0.4 in}} |Interact {\hspace{0.3 in}} |
\\ {\hspace*{0.6 in}} +------------+------------+------------+------------+
\\ {\hspace*{0.6 in}} |Restore Line|Move Line {\hspace{0.2 in}} |Change Again| {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |Delete Line |Delete Char |Change Text |Close Edit |
\\ {\hspace*{0.6 in}} +------------+------------+------------+------------+
\\ {\hspace*{0.6 in}} |Erase To End|Delete To En|Start Of Pag| {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |End Of Line |End Of File |End Of Page | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} +------------+------------+------------+ {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |Erase To Start {\hspace{0.7 in}} |Scroll Up {\hspace{0.2 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{1.7 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |Start Of Line {\hspace{0.8 in}} |Scroll Down |Define Key |
\\ {\hspace*{0.6 in}} +-------------------------+------------+------------+

\subsection{VT100}
{\hspace*{0.6 in}} +------------+------------+------------+------------+
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} |Delete To St| {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |FUNCTION {\hspace{0.3 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} |Start Of Fil|Set Copy Poi|Clone Line |
\\ {\hspace*{0.6 in}} +------------+------------+------------+------------+
\\ {\hspace*{0.6 in}} |Restore All |Overwrite Mo|Search Again| {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |Insert Line |Insert Mode |Search {\hspace{0.4 in}} |Interact {\hspace{0.3 in}} |
\\ {\hspace*{0.6 in}} +------------+------------+------------+------------+
\\ {\hspace*{0.6 in}} |Restore Line|Move Line {\hspace{0.2 in}} |Change Again| {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |Delete Line |Delete Char |Change Text |Close Edit |
\\ {\hspace*{0.6 in}} +------------+------------+------------+------------+
\\ {\hspace*{0.6 in}} |Erase To End|Delete To En|Start Of Pag| {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |End Of Line |End Of File |End Of Page | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} +------------+------------+------------+ {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |Erase To Start {\hspace{0.7 in}} |Scroll Up {\hspace{0.2 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{1.7 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |Start Of Line {\hspace{0.8 in}} |Scroll Down |Define Key |
\\ {\hspace*{0.6 in}} +-------------------------+------------+------------+

\subsection{VT220}
{\hspace*{0.6 in}} +------------+------------+------------+------------+
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} |Delete To St| {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |FUNCTION {\hspace{0.3 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} |Start Of Fil|Set Copy Poi|Clone Line |
\\ {\hspace*{0.6 in}} +------------+------------+------------+------------+
\\ {\hspace*{0.6 in}} |Restore All |Overwrite Mo| {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |Insert Line |Insert Mode |Search Again|Restore Line|
\\ {\hspace*{0.6 in}} +------------+------------+------------+------------+
\\ {\hspace*{0.6 in}} |Restore Line|Move Line {\hspace{0.2 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |Delete Line |Delete Char |Change Again|Close Edit |
\\ {\hspace*{0.6 in}} +------------+------------+------------+------------+
\\ {\hspace*{0.6 in}} |Erase To End|Delete To En|Start Of Pag| {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |End Of Line |End Of File |End Of Page | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} +------------+------------+------------+ {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |Erase To Start {\hspace{0.7 in}} |Scroll Up {\hspace{0.2 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} | {\hspace{1.7 in}} | {\hspace{0.8 in}} | {\hspace{0.8 in}} |
\\ {\hspace*{0.6 in}} |Start Of Line {\hspace{0.8 in}} |Scroll Down |Define Key |
\\ {\hspace*{0.6 in}} +-------------------------+------------+------------+


\section{Trademarks}

UNIX is a trademark of AT\&T Bell Laboratories.

VAX, VMS, DEC, VT52, VT100, VT220 are trademarks of the Digital
equipment corporation.

3-L is a trademark of Lattice Logic Ltd.

\vspace{.75in} view:ie printed on 17/02/89 at 11.53

\newpage
\tableofcontents
\end{document}
