Specification of ZED

Copyright © 1979, 1981, 1983 University of Cambridge Computing Service. Written by Philip Hazel. Converted to HTML from a copy supplied by John Line. Distributed by permission.

                           CONTENTS


1. INTRODUCTION                                              3
     1.1 CALLING ZED FROM PHOENIX                            3
     1.2 CALLING ZED FROM JCL                                6

2. BASIC ZED COMMANDS                                        7
     2.1 The Current Line                                    7
     2.2 Line Numbers                                        7
     2.3 Selecting a Current Line                            7
         2.3.1 By Line Counting                              7
         2.3.2 By Context                                    8
     2.4 Making Changes to the Current Line                 10
     2.5 Deleting Whole Lines                               11
     2.6 Inserting New Lines                                12
     2.7 Command Repetition                                 13
     2.8 Leaving ZED                                        13
     2.9 A Combined Example                                 13

3. COMPLETE SPECIFICATION OF ZED                            15
     3.1 INTERFACE TO THE OPERATING SYSTEM                  15
     3.2 COMMAND SYNTAX                                     16
         3.2.1 Command Names                                16
         3.2.2 Arguments                                    17
             3.2.2.1 Strings                                17
             3.2.2.2 Multiple Strings                       17
             3.2.2.3 Qualified Strings                      17
             3.2.2.4 Search Expressions                     18
             3.2.2.5 Names                                  18
             3.2.2.6 Re-use of Last Search Expression       18
             3.2.2.7 Numbers                                19
             3.2.2.8 Switch Values                          19
         3.2.3 Command Groups                               19
         3.2.4 Command Repetition                           19
     3.3 ZED PROCESSING                                     20
         3.3.1 Prompts                                      20
         3.3.2 Attention Handling                           20
         3.3.3 Command Decoding                             21
         3.3.4 The Current Line                             21
         3.3.5 Line Numbers                                 22
         3.3.6 Semantics of Qualified Strings               22
         3.3.7 Semantics of Search Expressions              29
         3.3.8 Output Processing                            29
         3.3.9 Output and Edits Listing                     29
         3.3.10 End of File Handling                        30
     3.4 ZED COMMANDS                                       30
         3.4.1 Notation for Command Descriptions            30
         3.4.2 Selection of a Current Line Only             31
         3.4.3 Line Insertion and Deletion                  32
         3.4.4 Line Windowing                               34
             3.4.4.1 The Operational Window                 34
             3.4.4.2 Single Character Operations            36
             3.4.4.3 The Find Window                        37
         3.4.5 String Operations on the Current Line        38
             3.4.5.1 Basic String Alterations               38
             3.4.5.2 Pointing Variant                       38
             3.4.5.3 Deleting Parts of the Current Line     39

                              1

             3.4.5.4 Case Changing                          40
             3.4.5.5 Setting the Control Character          40
             3.4.5.6 Miscellaneous Current Line Commands    40
         3.4.6 Splitting and Joining Lines                  41
         3.4.7 Inspecting Parts of the Source               42
         3.4.8 Control of Command, Input and Output Files   43
             3.4.8.1 Command Files                          43
             3.4.8.2 Input Files                            44
             3.4.8.3 Output Files                           45
         3.4.9 Conditional Commands and Loops               47
             3.4.9.1 Conditional Commands                   47
             3.4.9.2 Loops                                  48
             3.4.9.3 Exceptional Flow of Control in Loops   49
         3.4.10 Margins                                     50
         3.4.11 Fixed Format Fields                         50
         3.4.12 Text Justification                          51
         3.4.13 Global Operations                           54
             3.4.13.1 Simple Character Changes              54
             3.4.13.2 Complicated Cases                     55
             3.4.13.3 Cancelling Global Operations          56
             3.4.13.4 Suspending Global Operations          57
             3.4.13.5 Looping Globals                       57
         3.4.14 Displaying the Program State                57
         3.4.15 Terminating a ZED Run                       58
         3.4.16 Current Line Verification                   58
         3.4.17 Edit Line Verification                      60
         3.4.18 Processing Lines in Hexadecimal             61
         3.4.19 Naming Groups of Commands                   62
         3.4.20 Miscellaneous Commands                      62
         3.4.21 Reading the First Line                      67
         3.4.22 Chinese ZED                                 68
     3.5 THE LAST SEARCH EXPRESSION                         68
         3.5.1 & As a Search Expression                     68
         3.5.2 & As a Qualified String                      69
         3.5.3 Examples of the Use of &                     70
     3.6 ERROR HANDLING                                     70
         3.6.1 Soft Errors                                  70
         3.6.2 Hard Errors                                  70
         3.6.3 Disastrous Errors                            71
         3.6.4 Overflows and Control Character Errors       71
         3.6.5 Store Errors                                 71
     3.7 CONTROL CHARACTER HANDLING                         72

4. FULL-SCREEN SUPPORT                                      73

5. COMMAND LIST                                             74

6. ALPHABETICALLY                                           79











                              2

                       1. INTRODUCTION



ZED is a text editor that processes sequential files line by
line under the control of EDITING COMMANDS. As ZED moves
through the input, or SOURCE file, lines which have been
passed (and possibly altered) are written out to a sequential
output file, the DESTINATION. The effect of a ZED run is
therefore to make a copy of the source, with changes as
requested by the editing commands.

Although the source is normally processed in a forward
sequential manner, there is a capability for moving backwards
a limited number of lines. This is possible because lines
which have been passed are not written to the destination
immediately, but are held instead in an output queue whose
maximum length depends on the amount of available store.
Normally several hundred lines can be held in store at once.

If the destination is a disc file, or if the source file is
sufficiently small that it can be held entirely in main store,
it is possible to make more than one pass through the text.

ZED commands are available for moving parts of the source
about (using in-store buffers), for outputting parts of the
source to alternative destinations, and for inserting material
from alternative sources.

Most users will find that the UPDATE command provides the most
convenient way of using the editor.

New users of the ZED editor should consult Chapter 9 of the
Newcomers' Guide and Chapter 11 of the Users' Guide.

1.1 CALLING ZED FROM PHOENIX

The Phoenix macro command ZED is used to call the ZED program.
The syntax for use with Phoenix is

          ZED [[FROM] dsd] [TO dsd] [WITH dsd]
               [VER dsd] [LIST dsd] [EPRINT dsd]
               [WORK dsd] [OPT text] [DD text]


The syntax of the UPDATE command is:


          UPDATE dsd [WITH dsd] [VER dsd] [LIST dsd]
               [EPRINT dsd] [OPT text] [NOPROMPT]
               [DD text]

There are also STORE and TIME keywords with their usual
meanings. Many of the keywords are common to both commands.

The FROM dataset defines the file to be edited (ZED command
only). If the FROM argument is omitted, the current dataset
(%C) is used. Note that FROM is the only item whose key may be

                              3

omitted.

The TO dataset defines the file to which the output of ZED
(that is, the result of editing FROM) is to be sent. If the TO
argument is omitted, the output dataset (%O) is used. This
will become the new current dataset on exit from ZED.

The WITH dataset defines the file containing the editing
commands. If the WITH argument is omitted ZED will read from
the Phoenix terminal in a session; in a job no editing will
take place (unless OPT is set, see below).

The VER dataset defines the file to which error messages and
line verifications are to be sent. If the VER argument is
omitted, the Phoenix terminal is used in a session and the
line printer in a job.

The LIST dataset defines the file to which a copy of every
output line is sent. Each edited line is preceded by its
original (source) line number, inserted lines are preceded by
four asterisks, and changes and deletions are indicated (see
section 3.3.9 for further details). If the LIST argument is
omitted, no listing takes place.

The EPRINT dataset defines the file to which a copy of every
line of editing commands is sent. If the EPRINT argument is
omitted no record of editing command lines is kept.

The OPT item can be used to provide a line of ZED commands to
be executed before those in the WITH file. If omitted it
defaults to null.

The WORK dataset is used by ZED when multiple passes are made
through a source text which is too big to hold entirely in
main store. The default is %N (i.e. no allocation), as ZED
allocates work datasets dynamically when required if they are
not provided.

The DD argument can be used to add additional information to
the environment in which ZED is to run. The most usual use is
to set up (arbitrary) ddnames for additional datasets in more
sophisticated editing applications. The NOPROMPT keyword
(UPDATE only) may be used to stop the system asking the user
whether he wants the edited version of the dataset filed back
to the original dataset.

Examples of UPDATE calls:

    UPDATE .FILE

This updates the dataset .FILE. When the editing session is
concluded (by the user typing Q or W) the system prompts with
a message:

    Refile as .FILE (yes/no)?

If the user types no at this point, the system issues a
message:

                              4

    Type in a new file name, or QUIT to discard edited version:


Examples of ZED calls:

    ZED

This uses all the standard files, and edits the current
dataset to make a new current dataset. Editing commands are
read from the terminal if in a session; in a job no editing is
done.

    ZED SPQR.FILE

The file SPQR.FILE is edited to form a new current dataset.
Again, editing commands are taken from the terminal if in a
session. Note that this command does not cause any changes to
be made to SPQR.FILE; the result of editing is left as the new
current dataset. If updating of SPQR.FILE is required then an
additional Phoenix command

    FILE TO SPQR.FILE

is needed after exiting from ZED.

    ZED ABCD.PDS:A WITH %H! TO ABCD.NEW
    <editing commands>
    !

This edits ABCD.PDS:A non-interactively, using the editing
commands supplied as an in-stream dataset. The output from ZED
is written to the file ABCD.NEW.



























                              5

1.2 CALLING ZED FROM JCL

The catalogued procedure ZED is used to call the ZED program.
It contains the following parameters:

    name             default    use

    OPT                 "       initial command line
    VER            SUBSYS=#PRC  verification output
    STORE             100K      region size

The following DD statements must be supplied by the caller:

    FROM          input file
    TO            output file
    EDITS         editing commands file

The following DD statements may be supplied if either of the
listing facilities is required:

    LIST          output listing
    EPRINT        edits listing

Additional ddnames (of the user's choice) may be required for
sophisticated applications. Example of a ZED call:

    //      EXEC ZED
    //FROM  DD   DSN=SPQR.FILE,DISP=SHR
    //TO    DD   DSN=&TEMP,DCB=FB,DISP=(NEW,PASS),
    //           UNIT=DISC,SPACE=(TRK,(1,1))
    //EDITS DD   *
    <editing commands>
    /*


























                              6

                    2. BASIC ZED COMMANDS



This section introduces some of the basic ZED commands,
omitting many of the advanced features. A complete description
of the command syntax and of all commands appears in section
3.

2.1 The Current Line

As ZED reads lines from the source and writes them to the
destination, the line which it has "in its hand" at any time
is called the CURRENT LINE. This is the line to which all
textual changes are made. New lines are always inserted before
the current line. When ZED is initialized, the current line is
the first line of the source.

2.2 Line Numbers

Each line in the source is identified by a unique line number.
This is not part of the information stored in the file, but is
computed by counting the lines as they are read. (Note that
the LIST utility program is available to give printouts of
text files with line numbers.) A line that has been read
retains its original line number all the time it is in main
storage, even when lines before or after it are deleted.

2.3 Selecting a Current Line



2.3.1 By Line Counting
The simplest way to select a new current line is to specify
its line number. The command

    M45

means "move to line 45". If line 45 has already been passed
this command moves back to it, provided that it is still in
main storage (normally several hundred lines are accessible).
For moving on a known number of lines, the command

    N

is used. It means "move to the next line". It can be preceded
by a count to indicate repetition. Thus

    4N

means "move on four lines". The sequence

    M12; 3N

would have the effect of making line 15 the current line. Note
that a semicolon is used to separate consecutive commands on
the same line.


                              7

The command

    P

moves to the previous line and, like N, may be used with a
repeat count to move back a given number of lines. It is only
possible to go back to lines which have been passed but which
have not yet been written to the output.


2.3.2 By Context
The F (find) command is used to select a current line by
context.

    F/Jabberwocky/

means "find the line containing 'Jabberwocky'". The search
starts at the current line and moves forward through the
source until the required line is found. If the end of the
source is reached without finding a matching line, the error
message SOURCE EXHAUSTED is given.

It is also possible to search backwards by using the BF
command.

    BF/gyre and gimble/

This also starts with the current line, but moves backwards
through lines already passed until the required line is found.
If the head of the output queue is reached without finding a
matching line, the error message NO MORE PREVIOUS LINES is
given.

The character string being searched for is enclosed in
DELIMITER CHARACTERS; in the example above / was used as the
delimiter. A number of special characters such as : / . , and
' are available for use as delimiters; naturally the string
itself must not contain the delimiter character. Spaces
between the command name and the first delimiter are ignored,
but spaces within the string are of course significant, since
the context is matched exactly.

    F /tum tum tree/

will not find "tum-tum tree" or "tum tum    tree".

A find command with no argument causes a repeat of the
previous find. Thus

    F/jubjub bird/; N; F

finds the second occurrence of a line containing "jubjub
bird". The N command between the two F commands is necessary
because an F command always starts by searching the current
line. If N were omitted the second F would find the same line
as the first.



                              8

The basic form of the F command described above will find a
line which contains the given string anywhere in its length.
The search can be restricted to the beginning or the end of
lines by placing one of the letters B or E in front of the
string. In this case, one or more spaces must follow the
command name. Thus

    F B/slithy toves/

means "find the line BEGINNING with 'slithy toves'", while

    F E/bandersnatch/

means "find the line Ending with 'bandersnatch'". As well as
putting further conditions on the context required, the use of
B or E speeds up the search, as only part of each line needs
to be considered.

B and E as used above are called QUALIFIERS, and the whole
argument is called a QUALIFIED STRING. A number of other
qualifiers are also available:

    F 3/dormouse/

means "find the line containing at least three occurrences of
"the string "'dormouse'. Any unsigned number other than zero
may be used, and is termed a COUNT QUALIFIER.

    F P/a-sitting on a gate./

means "find the line which contains Precisely the text 'a-
sitting on a gate.'". The required line must contain no other
characters, either before or after the given string.

An empty string can be used with the P qualifier to find an
empty line:

    F P//

The qualifier N changes the sense of the command so that it
finds a line NOT containing the given context. For example

    F NP//

finds a non-blank line, while

    F NB/The sun was shining/

finds a line that does NOT begin "The sun was shining". Note
that this is not the same thing as a line containing "The sun
was shining" not at the beginning.

As the examples above show, more than one qualifier may be
given. They may be in any order, with optional spaces between
them. Certain incompatible combinations are however forbidden,
and in particular only one of B, E and P may appear.



                              9

The qualifier W specifies a WORD SEARCH, which means that the
found string must neither be preceded nor followed by a letter
or digit, while the qualifier U specifies that the search is
to take place as though both the string and each line scanned
were UPPERCASED. Thus

    F UW/king/

will find lines containing the words "king", "KING" or even
"KiNg", but not "kingpin" or "thinking".

The qualifier S specifies that lines are to be considered as
starting at the first SIGNIFICANT (i.e. non-space) character.
This qualifier is usually used in conjunction with B or P. For
example

    F SB/grassy/

finds any of the lines

    grassy
       grassy knolls
          grassy

whereas

    F SP/grassy/

finds only the first and the last of them.

2.4 Making Changes to the Current Line

The E command EXCHANGES one string of characters in the line
for another:

    E/Wonderland/Looking Glass/

removes the string "Wonderland" from the current line, and
replaces it by "Looking Glass". Note that a single central
delimiter is used to separate the two strings. A null second
string can be used to delete parts of the line:

    E/monstrous crow//

New material can be added to the line by the A or B commands,
which insert the second of their arguments AFTER or BEFORE an
occurrence of the first. If the current line contained

    If seven maids with seven mops

then the command sequence

    A/seven/ty/; B W/seven/sixty-/

would turn it into

    If seventy maids with sixty-seven mops


                              10

If the W qualifier were omitted from the B command above, the
result would be

    If sixty-seventy maids with seven mops

because the search for a string normally proceeds from left to
right, and the first occurrence that is found is used. There
is however a qualifier L, which specifies that the search
proceed LEFTWARDS, thus causing the command to act on the LAST
occurrence of its first argument. The B command in the above
example could have been written

    B L/seven/sixty-/

to achieve the same effect.

If the first string in an A, B or E command is empty, the
second string is inserted at the beginning or the end of the
line, according as the L or E qualifiers are absent or
present.

A count qualifier may be used with the A, B and E commands to
change the Nth occurrence of a string in the current line. If
the L qualifier is also present then the Nth last occurrence
is changed. For example, the command line used in the above
example could be written

    A 2L/seven/ty/;  B 2/seven/sixty-/

to achieve the same effect.

If an A, B or E command is obeyed on a line which does not
match the qualified string given as the first argument, the
error message

    **No match

is output on the verification dataset.

2.5 Deleting Whole Lines

A range of lines may be deleted by specifying their line
numbers in a D command.

    D97 104

deletes lines 97 to 104 inclusive, leaving line 105 as the new
current line. The second line number may be omitted if only
one line is being deleted, and both numbers may be omitted if
deletion of the current line is required.

    F/plum cake/; D

deletes the line containing "plum cake", the line following it
becoming the new current line, while

    F BW/The/; 4D


                              11

deletes four lines, the first of which is the line beginning
with the word "The".

The characters . and * may be used in place of line numbers to
refer to "the current line" and "the end of the source"
respectively.

    D. *

deletes the rest of the source, including the current line.

2.6 Inserting New Lines

A single new line can be inserted BEFORE the current line by
means of the IS (insert string) command. It takes a single
string argument, which becomes the inserted line. For example,
the commands

    M17; IS/They would not listen to advice./

insert a new line containing the text "They would not listen
to advice." BEFORE line 17, while

    F B/The Queen of Hearts/; IS//

insert a new blank line before the line beginning with "The
Queen of Hearts".

For longer inserts, the I command can be used to insert any
number of lines of new material BEFORE a given line, specified
by line number:

    I468
    The little fishes of the sea,
    They sent an answer back to me.
    Z

The command itself must be the last on a line, the insertion
material following on successive lines, terminated by Z on a
line by itself. If the line number is omitted from the
command, the new material is inserted before the current line.

    F/corkscrew/; I
    He said, "I'll go and wake them, if..."
    Z

inserts a new line before the line containing "corkscrew".

After an I command containing a line number, the current line
is the line of that number; otherwise the current line is
unchanged.

I may be followed by * instead of a line number to insert
material at the end of the source.

There is also a REPLACE command, R, which is exactly
equivalent to D followed by I, and is provided purely for
convenience:

                              12

    R19 26
    In winter when the fields are white
    Z

deletes lines 19 to 26 inclusive, then inserts the new
material before line 27, which becomes the current line.

2.7 Command Repetition

Individual repeat counts as shown in the examples for N and D
above can be used with many ZED commands. In addition, a
collection of commands can be repeated by forming them into a
COMMAND GROUP using brackets:

    6(F P//; D)

deletes the next six blank lines in the source. Command groups
may extend over more than one line of command input:

    3(F B/    /; I

    Z
    N)

inserts a blank line before the next three indented lines.
When a command group such as the above is typed in
interactively, the normal ZED prompting character (which is a
colon) is replaced by a plus for the second and subsequent
lines of the group. Command groups may be nested to any depth.

2.8 Leaving ZED

The command W (for WINDUP) is used to end a ZED run. It causes
ZED to "wind through" to the end of the source, copying it to
the destination, and then to exit.

The command Q causes ZED to stop obeying commands from the
current command dataset and to revert to the previous one. If
there is no previous dataset (i.e. Q is encountered on the
WITH dataset) its effect is the same as W.

Reaching the end of the WITH dataset has the same effect as Q.
Note, however, that a line containing /* does not terminate a
WITH dataset connected to a terminal. In this case, Q or W
must be used.

The command STOP causes ZED to terminate without any further
processing. In particular, any pending lines of output still
in store will not be written out, with the result that the
destination file will not be complete. STOP should only be
used if the output from the ZED run is not required.

2.9 A Combined Example

Most simple editing requirements can be met with the commands
already described. Before going on to describe further
facilities, an example which uses several commands is
presented. Text following a backslash character in the editing

                              13

commands is comment; this is allowed in actual command lines,
though not in insert material or its terminator.

The source text (with line numbers):

    1   Tweedledee and Tweedledum
    2   agreed to a battle,
    3   For Tweedledum said Tweedledee
    4   ad spoiled his nice new rattle.
    5
    6   As black as a tar barrel
    7   Which frightened both the heroes so
    8   They quite forgot their quorell


The ZED commands:

    M1; E/dum/dee/; E/dee/dum/    \the order of the
                                  \E commands matters!
    N; E/a/A/; B W/a/have /       \now at line 2
    F B/ad/; B//H/                \H at line start
    F P//; F NP//; I              \before non-blank line
    Just then flew down a monstrous crow,
    Z
    M6; 2(A L//,/; N)             \commas at end of lines
    F/quore/; E/quorell/quarrel./ \F is in fact redundant
    Q                             \quit

The resulting destination text (with new line numbers):

    1   Tweedledum and Tweedledee
    2   Agreed to have a battle,
    3   For Tweedledum said Tweedledee
    4   Had spoiled his nice new rattle.
    5
    6   Just then flew down a monstrous crow,
    7   As black as a tar barrel,
    8   Which frightened both the heroes so,
    9   They quite forgot their quarrel.




















                              14

               3. COMPLETE SPECIFICATION OF ZED




3.1 INTERFACE TO THE OPERATING SYSTEM

ZED supports the Cambridge Standard Utility Interface, which
is documented elsewhere. When called directly from JCL or
Phoenix this involves only a normal PARM field, which may
contain a line of commands to be obeyed before the command
file.

ZED is capable of processing any sequential file supported by
MVS with the exception of VSAM files. It is hoped to remove
this restriction in the future. Normally each record in the
file is treated as one line for editing purposes. However, if
a record is longer than 400 data characters it is split by ZED
into two or more lines as necessary. This limit is a default
which can be changed by use of the MXLL command (see section
3.4.20).

Source input from Phoenix (TSO) terminals is terminated by a
line containing only the two characters /*. For command input
however, such a line is treated as a genuine input line. The
end of a ZED run is specified by one of the commands Q, W or
STOP when commands are from a terminal.

The following ddnames are used by ZED:

    VER

This ddname is used for the output of error messages,
reflections, and line verifications. If it is absent in a
Phoenix session, the output will be sent to the terminal. VER
is not opened if it is not required.

    EDITS

ZED commands are initially read from this dataset. WITH is an
alternate keyword for this dataset in the Phoenix command ZED.
If EDITS (or WITH) is not specified in the Phoenix command,
the terminal is used online (i.e. EDITS=* is set up). If EDITS
is absent it is treated as dummy.

    FROM

This is the ddname for the main source file.

    TO

This is the ddname for the main destination file. If, when
opened, it has no DCB characteristics associated with it,
those from the source will be copied.

    WORK

This is the ddname for the work file, used when more than one

                              15

pass is made through a source that does not fit in the
available store. If it is absent when needed, ZED will
allocate an anonymous file.

    LIST

This is the ddname for the optional listing file, to which a
listing of the output is sent (see section 3.3.9).

    EPRINT

This is the ddname for the optional edits printing file, to
which a copy of editing lines is sent (see section 3.3.9).

Other ddnames, chosen by the user, may be required in
applications involving multiple datasets. When datasets are
referred to by dsname, ZED allocated ddnames in the series
DD1, DD2, ... as necessary.

3.2 COMMAND SYNTAX

ZED commands consist of a command name followed by zero or
more arguments. One or more space characters may optionally
appear between a command name and the first argument, between
non-string arguments, and between commands. A space character
is only necessary in these places to separate successive items
which would otherwise be treated as one (e.g. two numbers).

A command is terminated by end of line (except in a few
special cases), by reaching the end of its arguments, or by
one of the characters semicolon, closing round bracket
(parenthesis), backslash or cent sign. The MVS codes X'E0' and
X'4A' are the standard EBCDIC codes for the backslash and cent
sign characters. In export versions of ZED different
characters or code values may be used.

Round brackets (parentheses) are used to delimit command
groups (see section 3.2.3).

Semicolon is used to separate commands that appear on the same
line of input, but it is only strictly necessary in cases of
ambiguity where a command has a variable number of arguments.
ZED always tries to read the longest possible command.

Backslash or cent sign introduce comment when they appear in
places where newline may appear, that is, at the end of a
command or adjacent to an operator in a search expression (see
section 3.2.2.4). The comment is terminated by the end of the
command input line.

Except where they appear as part of a character string, upper
and lower case letters are synonymous in ZED commands.


3.2.1 Command Names
A command name is either a sequence of letters or a single
special character (e.g. #). An alphabetic command name is
terminated by any non-letter; only the first four letters of

                              16

the name are significant. One or more spaces may appear
between command names and their arguments; at least one space
is required when an alphabetic name is followed by an argument
starting with a letter.


3.2.2 Arguments
Seven different types of argument are used with ZED commands:
strings, qualified strings, search expressions, names,
numbers, switch values and command groups.


3.2.2.1 Strings
A string is a sequence of up to 256 characters, enclosed in
DELIMITERS. An empty (null) string is allowed. The character
chosen to delimit a particular string may not appear in the
string. The terminating delimiter may be omitted if it is
immediately followed by the end of the command line.

The following characters are available for use as delimiters:

    /  !  .  +  -  ,  ?  '  "  : *

that is, common English punctuation characters (except ;) and
the four arithmetic operators.

Some examples of strings:

    /A/
    !Menai Bridge!
    ??
    +String with final delimiter omitted

In hexadecimal mode (see section 3.4.18) non-null strings must
contains an even number of hexadecimal digits together with an
arbitrary number of space characters (which are ignored).


3.2.2.2 Multiple Strings
Commands which take two string arguments use the same
delimiter for both, and do not double it between the
arguments. An example is the A command:

    A /King/The Red /

For all such commands the second string specifies replacement
text; if it is omitted the null string is used.


3.2.2.3 Qualified Strings
Commands which search for contexts, either in the current line
or scanning through the source, specify them by means of
QUALIFIED STRINGS. A qualified string is a string preceded by
zero or more QUALIFIERS. The qualifiers are single letters, an
unsigned number, or a pair of numbers enclosed in square
brackets or underline characters and separated by a comma.
They may appear in any order. For example:


                              17

    BN[4,10]/Abc/
    L2R_5,40_U/xyz/

Spaces may appear between the qualifiers, but are not
necessary. No individual qualifier may appear more than once
in a qualified string. The list of qualifiers is terminated by
any delimiter character. The available qualifiers are
described in section 3.3.6.

Square brackets are interpreted as the EBCDIC codes X'AD' and
X'BD' at Cambridge. In export versions of ZED only the syntax
using underline characters is normally used.


3.2.2.4 Search Expressions
Some conditional commands and commands which search for a
particular line in the source take a SEARCH EXPRESSION as an
argument. A search expression is either a single qualified
string, or a number of qualified strings separated by the AND
and OR operators (which are & and | ), and enclosed in round
brackets. Nested brackets may be used to alter the normal
precedence rule (& is more binding than | ). Examples of
search expressions:

    B/The/
    (B/The/ & N[2,99]/The/)

Spaces may be used anywhere to improve the layout, except of
course in the strings. Search expressions may extend over more
than one line of input, provided the line breaks occur
immediately before or after an operator. Comment may occur on
the intermediate lines. For example

    (NB/*/ &                      \not a comment and
    ([10,15]B/LA/ | [10,15]B/L /) \LA or L order
    )



3.2.2.5 Names
A name is a sequence of letters terminated by any non-letter.
Only the first four letters are significant.


3.2.2.6 Re-use of Last Search Expression
In commands which take a search expression or a qualified
string as an argument, the character & may be given instead of
that argument to specify re-use of the last obeyed search
expression. In the case of a qualified string certain
restrictions apply. Full details appear in section 3.5. The
character & may only appear in place of a complete argument;
it may not appear as part of a search expression. Some
examples of the use of & are

    F/dum/; N; F&
    F/dee/; E&/dum/
    IF (/cat/|/dog/) A&/fish/


                              18

3.2.2.7 Numbers
A number is a sequence of decimal digits. For some commands
which take numerical arguments, the character + is permitted
instead of a number. Its meaning depends on the context.

LINE NUMBERS are a special form of number and must always be
greater than zero. Wherever a line number may appear, the
characters . and * may appear instead. These are conventional
ways of representing "the current line" and "the end of the
source" respectively.

For the M (move) command only, there are two further
conventional line number arguments, the characters + and -.
These mean "the last line in store" and "the first line in
store" respectively. Further details are given in section
3.4.2.


3.2.2.8 Switch Values
Commands which alter ZED switches take a single character as
an argument. The character must be either + or -. For example

    V+

The character + indicates that the switch is to be turned on,
while - indicates that it is to be turned off.


3.2.3 Command Groups
Round brackets (parentheses) can be used to make a number of
individual ZED commands into a "command group". Command groups
may span more than one line of input, and may be nested to any
depth, subject only to available store. The conditional
commands can take a command group as their final argument, for
example

    IF /hatta/ (E/walrus/carpenter/;
                E/oyster//)



3.2.4 Command Repetition

Many commands may be preceded by an unsigned decimal number to
indicate repetition, for example

    24N

If a value of zero is given the command will not be obeyed at
all. Repeat counts are not allowed for commands for which
repetition is pointless.

Repeat counts may be specified for command groups in the same
way as for individual commands:

    12(F/handsome/; E/handsome/hansom/; 3N)

Command repetition may also be achieved by means of the RPT

                              19

command (see section 3.4.9.2).

3.3 ZED PROCESSING



3.3.1 Prompts
When ZED is being run interactively, that is, with both the
command and the verification datasets connected to a terminal,
it outputs a prompt when it is ready to read a new line of
commands unless the last command of the previous line caused
verification output.

If the current line has not been verified, or has been changed
since it was last verified, or if the position of the
operational window (see section 3.4.4.1) has changed, the
current line is verified in place of a prompt if the V switch
and either or both of the VN and VT switches are on (see
section 3.4.16). Otherwise a colon character (:) is output to
indicate that a new line of commands is required.

When a command group or search expression spanning more than
one line is read from the terminal, a plus character (+) is
used as a prompt for the second and subsequent lines.

However, prompts are never given for lines of insertion
material, whether inside a command group or not.

In export versions of ZED the prompt characters may be
different, and prompts may be given for inline insertion
material.


3.3.2 Attention Handling
An ATTENTION can be used to interrupt ZED processing from an
interactive session. The means of generating an attention
varies from terminal to terminal; most commonly there is a key
marked "BREAK" or "INTRPT". Certain types of network
connection may require interaction with a network processor in
order to send an attention signal to the host.

The system responds to an attention with the prompt

***ATTN (ZED):

The following strings are recognized by ZED when typed in
response to the prompt after an attention:

  V+ or V-

The verification switch is set or unset as appropriate, and
processing continues. Pending lines of verification output may
be lost.

  VJ+ or VJ-

The justification verify switch is set or unset as appropriate
and processing continues. Pending lines of verification output

                              20

may be lost.

  VG+ or VG-

The global change verify switch is set or unset as appropriate
and processing continues. Pending lines of verification output
may be lost.

Following V- VG- or VJ- one further line of verification may
be produced before ZED detects the changed switch value.

  <null>

This causes the current command line to be abandoned. If ZED's
current command file is attached to an interactive terminal, a
new line of commands is read. Otherwise ZED successively
abandons command files until either an interactive one is
found, or there are none left. In this case the ZED run is
abandoned with a non-zero return code.

In non-interactive sequences of edits, the effect of an
attention can be delayed by use of the BRK command (see
section 3.4.20).

When abandoning a command line because of an attention,
execution is stopped either immediately following a complete
command or, for commands which move about the source,
immediately after a new line has been made current. In
particular, an attention will not be taken during forward
movement until after all global operations (see section
3.4.13) have been applied to a new current line. In
exceptional circumstances an erroneous global command may
enter an unending loop; a second attention followed by a
<null> response can be used to interrupt this condition. This
may leave the current line with only some of the globals
applied.


3.3.3 Command Decoding
ZED reads and decodes a complete line of commands before
obeying any of them. In the case of command groups or search
expressions spanning line boundaries, more than one line is
read, and the phrase "line of commands" is extended to mean
"sequence of commands terminated by end of line not within a
command group or search expression". The length of a command
group is limited only by the available store. Syntax errors
are reported during decoding, and before any of the commands
have been obeyed. Commands following the one in error are not
parsed.


3.3.4 The Current Line
As ZED reads lines from the source and writes them to the
destination, the line which it has "in its hand" at any time
is called the CURRENT LINE. This is the line to which all
textual changes are made. New lines are always inserted before
the current line. When ZED is initialized, the current line is
the first line of the source. However, this line is not in

                              21

fact read until a command which requires a current line is
obeyed. This ensures that commands which affect the way in
which lines are read (e.g. MXLL, TR) apply to all lines of the
source if they appear at the start of the editing commands. A
list of commands which do not cause the first line to be read
is given in section 3.4.21.

There is an upper limit, MXLL, to the length of the current
line. Any longer lines which ZED encounters are split into two
or more lines. A warning message is generated. The value of
MXLL defaults to 400, but it can be changed by the MXLL
command (see section 3.4.20).


3.3.5 Line Numbers
Each line in the source is identified by a unique line number.
This is not part of the information stored in the file, but is
computed by counting the lines as they are read. Lines which
are moved to a different place in the source retain their line
numbers for verification purposes (the numbers are verified in
parentheses), but are no longer accessible by explicit line
number. New lines which are inserted into the source do not
have line numbers.

ZED distinguishes between ORIGINAL and NON-ORIGINAL lines. The
former are source lines which have not been split or moved
from their original order; the latter are split lines, moved
lines, and inserted lines. Commands which take line numbers as
arguments may only refer to original lines. As such lines are
by definition in order of line number, the direction of motion
implied by the command is obvious. Non-original lines are
passed over or deleted (as appropriate) in searches for a
given original line.

When . is used as a line number, it always refers to the
current line, whether original or non-original.

The = command (see section 3.4.20) can be used to renumber
lines in main storage. This ensures that all lines which
follow the current line are original.


3.3.6 Semantics of Qualified Strings
Qualified strings are used to specify contexts for which ZED
searches. The null string is permitted, and always matches at
the initial search position, which is the beginning of the
line except as specified below. In the absence of any
qualifiers, the given string may be found anywhere in a line.
Qualifiers specify additional conditions for the context, and
the following are defined:

    B

The string must be at the BEGINNING of the line. This
qualifier may not appear with E, L or P.


    E

                              22

The string must be at the END of the line. This qualifier may
not appear with B, L or P. If E appears with the null string
it matches at the end of the line.

    C

The string must match the control character in the line. This
qualifier requires that the string be exactly one character
long, and may not appear with B, E, P, W, L, U, S, the window
qualifier or R.

    L

The search for the string is to take place LEFTWARDS from the
end of the line instead of rightwards from the beginning. If
there is more than one occurrence of the string in a line,
this qualifier ensures that the LAST one is found instead of
the first. L may not appear with B, E or P. If L appears with
the null string it matches at the end of the line.

    P

The line must match the string PRECISELY and contain no other
characters. P must not appear with B, E or L. If P appears
with a null string it matches an empty line.

    W

The string consists of one or more WORDS, and must be preceded
and followed (in the line) by a character which is not a
letter or a digit, or by the start or end of line. It is
possible to specify which characters are to be treated as
"letters or digits" for this purpose by means of
the  WORD  command (see section 3.4.20). The default set is A-
Z, a-z and 0-9.

    U

The string match is to take place as though both the string
and the line were UPPERCASED before comparison.

    S

The line is to be considered as starting at the first
SIGNIFICANT (i.e. non-space) character, and any trailing
spaces are to be ignored. This qualifier may not appear with
C. Note that S does not imply B, as in some other text
editors. Both SB and SP are useful combinations. If S appears
with the null string it matches immediately after the last
leading space character.

    N

This qualifier NEGATES the result of the string match after
all the other context conditions have been considered. This
effectively inserts the word NOT at the beginning of the
description of the context. Thus, for example,


                              23

    NB/unicorn/

means "not beginning with 'unicorn'" rather than "containing
'unicorn' not at the beginning".

    [n,m]    or    _n,m_

This qualifier specifies a WINDOW, that is, it gives character
positions in a line within which the search for the string is
to take place. It can also be thought of as specifying a
column to be searched. The specification is inclusive. The
first character position in a line is numbered 1. If M is
greater than the number of characters in a line, then the line
length is used instead. If N is greater than the number of
characters in a line then the window contains the null text.

If N is omitted, a default of 1 is used. If M is omitted but
the comma is present, a default of 32767 is used. If both M
and the comma are omitted the window consists of a single
character position.

If B, E, P or S are used in conjunction with a window, then
they apply to the characters in the window rather than the
whole line. For example,

    B[10,16]/L/

matches a line containing L in column 10, while

    P[36,]//

matches a line with no text after column 35.

If the W qualifier is used in conjunction with a window the
edges of the window behave as "non letters or digits".

A window specified for a qualified string overrides any
operational or search window that may be in force (see section
3.4.4).

Square brackets are interpreted as the EBCDIC codes X'AD' and
X'BD' at Cambridge. In export versions of ZED different
characters or code values may be used.

    n

This qualifier, called the COUNT qualifier, specifies that the
Nth occurrence of the given string in the line is required. N
must be greater than or equal to 1. Occurrences are counted
from the left unless the L qualifier is also present, in which
case they are counted from the right and the nth last
occurrence is matched. If the line contains fewer than N
occurrences of the string the qualified string will not match.
Thus

    3/river/

and

                              24

    3L/river/

will both match a line containing at least three occurrences
of the string "river"; however, unless the line contains
exactly five occurrences they will refer to different
positions in the line.

If there are overlapping occurrences of the string in a line,
the count qualifier counts each occurrence. For example, if
the current line is

    ababa

then the qualified string

    2/aba/

matches the last three characters.

If the N qualifier is used with the count qualifier, the
qualified string will match lines containing fewer than N
occurrences.

The count qualifier is not permitted with the B, E, C or P
qualifiers.

    R

The string being matched is not taken as a literal string, but
is interpreted as a Regular Expression, as described below.
This provides a facility for very complex string matching. The
R qualifier may occur in conjunction with all other qualifiers
except C, and qualified strings containing R may appear
wherever a qualified string is permitted, for example

    F N2R/0-9#0-9/
    F (R/(A|B)~Z/ & NB/**/)
    E LR/cat#a-z/!!/
    SA [10,60]WUR/elephant#s/

The use of a Regular Expression involves a lot more processing
than a simple string match, since the string must be
interpreted character by character, and multiple possibilities
must be checked when searching a line. Regular Expressions
should therefore only be used when other facilities are
inadequate.

The syntax and semantics of Regular Expressions are now
described. All characters in a Regular Expression stand for
themselves except for









                              25

    "             double quote
    ?             question mark
    |             vertical bar
    (             opening round bracket
    )             closing round bracket
    -             minus sign
    #             sharp (hash) sign
    ~             twiddles

which have special meanings. Note that the Regular Expression
consists of the contents of the qualified string; the
delimiters are not part of the expression, and follow the
normal ZED rules.

The character " is a quoting character which is used to remove
the special meaning from any of the above. It is used
immediately before the character whose special meaning is to
be cancelled. For example, the qualified string

    R/long"-eared"?/

is equivalent to

    /long-eared?/

(but should not be used, since it requires more cpu time to
process). Note that the two occurrences of " in this example
are totally unrelated. The first removes the special meaning
from the character - and the second from the character ?.

The character ? is a "wild character" which matches any
character at all. It does not however match non-existent
characters at the end of a line. Thus

    WR/c?t/

matches any of "cat", "cot" or "cut" (and also "ctt", "cxt"
and so on).

The character | specifies alternation, that is, a choice of
alternatives.

    R/cat|dog/

matches either "cat" or "dog". Unlike the search expression

    (/cat/ |/dog/)

the Regular Expression is defined to match the first of "cat"
or "dog" in a line which contains both.

Round brackets (parentheses) are used for grouping, for
example to specify more complicated forms of alternation such
as

    R/c(a|o|u)t/

which matches "cat", "cot" or "cut". Without the brackets,

                              26

    R/ca|o|ut/

matches "ca", "o" or "ut". Brackets may be nested to any
depth.

Null alternatives are permitted whether in brackets or not;
for example:

  R/cat(astrophe|)/

matches "cat" or "catastrophe".

The character - is used between pairs of upper case (capital)
letters, lower case (small) letters, or digits, to specify a
range of characters. The two characters must be in
conventional collating order. For example

    R/0-9/

matches any digit. Only one character is matched. If - appears
other than as defined above it is an error. Thus, for example,
P-A, A-z, a-Z, a-9 and .-@ are all illegal. The alphabetic
ranges include letters only; they do NOT include other
characters whose EBCDIC code lies between the EBCDIC codes for
the start and end of the range.

The character # specifies arbitrary repetition for the
character, character range or bracketed item which follows it.
Zero occurrences are permitted. Thus

    R/#*/

matches a sequence of zero or more asterisks, while

    R/*#*/

matches a sequence of one or more asterisks. The qualified
string

    R/#a-z/

matches any sequence of lower case letters, while

    R/A-Z#(A-Z|0-9)/

matches a traditional "identifier". Note that

    R/#?/

matches an arbitrary number of any characters, that is, it
matches the whole line (within the operational window, as
always).

Finally, the character ~ is used before a single character or
character range to specify a mis-match. Thus

    R/~A-Z/


                              27

matches any single character that is not an upper case letter,
while

    R/~*~!~"?/

matches any three characters such that the first is not *, the
second is not !, and the third is not ?. If ~ appears other
than immediately before a (possibly quoted) character or
character range, it is an error. Thus expressions such as

    R/~(cat|panther)/

are illegal.

When attempting to match a REGULAR EXPRESSION, ZED scans the
line character by character from left to right, or, if the L
or E qualifier is present, from right to left. It keeps track
of all current possible matches simultaneously. If more than
one match is possible, the longest matched string is chosen.
For example

    R/cat|catapult/

matches "catapult" if it is present.

In the above example, the letters c, a and t are each tested
twice, as they appear independently in each match path. It is
more efficient to combine part strings where possible in order
to avoid this, for example

    R/cat(|apult)/


A formal definition of the syntax of Regular Expressions is
given below. Each right hand side is an alternative for the
entity named on the left hand side. Square brackets denote
optional items, while an asterisk denotes arbitrary repetition
of the preceding item.

<exp>::= [<prim>*] [| [<prim>*]]* but including at least one <prim>

<prim>  ::= (<exp>)
            ?
            #<prim>
            <ch>
            ~<ch>
            <range>
            ~<range>

<ch>    ::= "<any character>                ) in
            <any non-special character>     ) non

<range> ::= <upper case letter>-<upper case letter> ) hexadecimal
            <lower case letter>-<lower case letter> ) mode
            <digit>-<digit>

<ch> ::= <a pair of hex digits>             ) in hexadecimal
<range> ::= <ch>-<ch>                       ) mode

                              28

In each alternative for <range>, the second character must
appear later than the first in the conventional collating
sequence.


3.3.7 Semantics of Search Expressions
Search expressions are used as arguments for the find commands
F, DF and BF, and also for the conditional commands such as
IF. The & and | operators have their usual meanings (AND and
OR). Sufficient comparisons are done to determine whether the
result of the search on a given line is true or false;
redundant comparisons are omitted. The order in which the
comparisons is performed is not defined.

Qualified strings with the R qualifier (i.e. Regular
Expressions) may appear as part of search expressions.


3.3.8 Output Processing
Lines which are passed in a forward direction are not written
to the destination immediately, but instead are added to an
output queue in main store. When the store available for such
lines is used up, lines at the head of the queue are written
out as necessary. Until a line is actually written it is
possible to go backwards and make it the current line again.
Normally several hundred lines can be held in main store.

There is a command for directing output lines to one of 16 in-
store buffers instead of the destination output queue. Each
buffer can contain a queue of an arbitrary number of lines,
subject only to the available store. The contents of these
buffers can be inserted into the source at any point. By this
means blocks of lines can be moved around in the source.

Portions of the output may also be sent to destinations other
than TO. Selection of an alternative destination dataset
causes the queue of lines for the current output dataset to be
written out (see section 3.4.8.3).


3.3.9 Output and Edits Listing
If the ddname LIST exists, ZED writes to the associated
dataset a copy of every line that is output to any destination
dataset. At the start of each listing line the original line
number is inserted if appropriate; for inserted lines **** is
used, while for moved lines the number is enclosed in
brackets. Between the line number and the first data character
there are two character positions which are used to mark
deleted and changed lines. A - is printed in the first
position for any original line whose predecessor has been
deleted or moved. A + is printed in the second position for
any line whose contents have been changed. The total size of
the added information is seven characters, the same amount as
used by the LIST program. (This overflows if it is necessary
to output a line number greater than 99999 or one greater than
9999 enclosed in brackets.)



                              29

If a line contains the control character + the line number and
flag characters are replaced by spaces.

ZED does not distinguish between TO and alternative outputs in
the listing. All output lines are listed. If a rewind occurs
which necessitates writing to the destination, multiple
listing will occur.

If the ddname EPRINT exists, ZED writes to the associated
dataset a copy of each line of editing commands including the
OPT (PARM) line. Provided the blocksize of the dataset is not
too large, this can provide a useful means of recovery from
system crashes in the middle of long editing sessions. Editing
command lines can also be copied to the verification dataset
by means of the VE command (see section 3.4.17).

ZED makes no attempt at pagination, nor does it provide
headings for listing datasets. If these are required the
listing should be sent to a temporary file and post processed
with the LIST program.


3.3.10 End of File Handling
When ZED reaches the end of a source file, a dummy "end-of-
file" line becomes current. This has a line number one greater
than the number of lines in the file. Verification of this
line consists of the line number followed by an asterisk.

Commands which make changes to the current line, and commands
which move forward through the source provoke an error if
obeyed when the end-of-file line is current, unless they are
contained within an UTEOF group (see section 3.4.9.2).

If a string match is attempted on the end-of-file line (e.g.
via the IF command) the match fails or succeeds according as
the N qualifier is absent or present in the qualified string.

3.4 ZED COMMANDS

This section contains descriptions of all ZED commands, split
up by function. A summary and an alphabetic list of commands
appear in section 5.


3.4.1 Notation for Command Descriptions
In the descriptions which follow, the character / is used to
indicate a delimiter character. Command names are given in
upper case; lower case is used to indicate argument types as
follows:

    a, b          line numbers (or . or *)
    cg            command group
    m, n          numbers
    q             qualifier list (possibly empty)
    se            search expression
    s, t          strings of arbitrary characters
    sw            switch value (+ or -)
    name          name (up to four letters)

                              30

3.4.2 Selection of a Current Line Only
These commands have no function other than to select a new
current line. Lines that are passed in a forward direction are
added to the destination output queue or current in-store
buffer as appropriate. Lines which are passed in a backward
direction are stacked up for subsequent re-processing in a
forward direction.

    Ma

Move forward or backward to line a in the source. Only
original lines are accessible by line number (see section
3.3.5). If the argument a is equal to the current line number,
or is specified as '.', this command causes the operational
window to be reset (see section 3.4.4.1).

A special facility which applies only to the M command, and
not to other line number commands, is the ability to specify
the line number as one of the characters - or +. These mean
the first and the last lines currently in main store
respectively. Thus M- moves backward as far as possible in the
current output, while M+ moves forward to the line most
recently read from the current source.

    N

Move forward to the next line in the source. When the current
line is the last line of the source, executing an N command
does not cause an error. The line number is incremented and a
special end-of-file line is created. This can be tested for by
conditional commands (see section 3.4.9). Executing an N
command when already at the end of the source causes an error.

    P

Move back to the previous line. The number of previous lines
available depends on the amount of main store in the region in
which ZED is running.

    F se

Find the line specified by the search expression. The search
starts by default at the current line and moves forward
through the source. This is to cover the case where the
current line has been reached as a side effect of previous
commands such as line deletion. However, the command FN+ (see
section 3.4.20) can be used to set a mode in which F starts
its search on the line following the current line.

An F command with no argument searches using the last obeyed
search expression. In the case of lines longer than MXLL data
characters, F will treat each part line as a separate line.

    BF se

Backward find: this behaves like F, except that it moves
backward until a matching line is found. It starts its search
by default at the current line, but the command FN+ can be

                              31

used to set a mode in which it starts at the previous line.


3.4.3 Line Insertion and Deletion
A single new line may be inserted before the current line by
the command

    IS/s/       \insert string

The inserted line consists of the given string with the
default control character (space) added. The command

    IS//

inserts a blank line before the current line.

The current line itself may be replicated by the command

    IC          \insert current

which inserts a copy of the current line before the current
line.

The remaining commands in this section may select a new
current line as a side effect of their main function. Those
that are followed by in-line insertion material must be the
last command on a line (only comment may follow). The
insertion material is on successive lines, terminated by Z on
a line by itself. The Z command (see section 3.4.20) can be
used to change the terminator, which is recognized in either
upper or lower case.

    Ia
    <insertion material, as many
    lines as necessary>
    Z

Insert the insertion material before line a. If a is omitted
the material is inserted before the current line; otherwise
line a becomes the current line.

    Ia  BUFFn

Insert the lines contained in in-store buffer n (0<=n<=15)
before line a. This command leaves buffer n empty.

    Ia  COPYn

Insert a copy of the lines contained in in-store buffer n
before line a. This command leaves the contents of buffer n
intact.

    Ia  /s/

Insert the contents of the file whose ddname or dsname is s
before line a.



                              32

    Ra b
    <replacement material>
    Z

    Ra b BUFFn
    Ra b COPYn
    Ra b /s/

The R command is equivalent to D (see below) followed by I.
The second line number must be greater than or equal to the
first and may be omitted if only one line is being replaced
(i.e. if b=a). Both may be omitted if it is the current line
which is being replaced. The line following line b becomes the
new current line.

    Da b

Delete lines a to b inclusive. The second line number may be
omitted if only one line is being deleted (i.e. if b=a) and
both may be omitted if it is the current line which is being
deleted. The line following line b becomes the new current
line.

For both the D and R commands, if the second argument is
specified as the character . it still refers to the line which
is current at the time the command is obeyed. Thus for example

    M18; D9.

causes lines 9-18 inclusive to be deleted. The commands

    M18; D.9

cause an error because lines to be deleted must always be
specified in a forward direction.

    DF se

Delete Find: delete successive lines from the source until the
line specified by the search expression is found. This becomes
the new current line. A DF command with no argument searches
using the last obeyed search expression. Like F, the DF
command starts its search by default at the current line, but
the command FN+ can be used to set a mode in which it starts
at the next line. The current line is, however, still deleted.

    DREST

Delete the current line and the rest of the source which
follows. This command has the same effect D.*, except that it
does not actually read through the source. As a result it is
more efficient; its disadvantages are that the end-of-file
line which is current as a result of DREST may not have a line
number, and any halt that has been set up will be ignored (see
the H command in section 3.4.20).




                              33

3.4.4 Line Windowing


3.4.4.1 The Operational Window
ZED normally scans all the characters in a line when looking
for a given string unless a range of characters positions is
specified in the command (as a string qualifier). A default
range of character positions can be specified by the RV
(restrict view) command:

    RVn m

This command sets a WINDOW on all lines within which all
context operations take place unless explicitly requested
otherwise by the use of the window qualifier. Context
operations include string searches and character insertion and
deletion. The window consists of columns N to M inclusive.

The window for the current line, which may have been set by a
previous RV command or changed dynamically (see below), is
reset when an RV command is obeyed.

Characters outside the window are omitted from context
operations, and those to the right of it are kept in the same
character positions when a line is changed, by adding spaces
or deleting characters at the right hand window edge. An error
occurs if a character other than a space is deleted. As an
example, the command

    RV1 72

used when editing a file of card images, ensures that the
sequence numbers remain unchanged and in the correct position.

In all the descriptions of ZED context commands "the beginning
of the line" always means "the beginning of the operational
window", and "the end of the line" always means "the end of
the line or window, whichever comes first".

If the left hand edge of the window is past the end of the
line, the window contains the null string. If characters are
inserted in such a case, spaces are added to the line to bring
it up to the required length.

The characters . and * may be used instead of numbers as
arguments to the RV command. The former means "the current
value" and the latter means "the default value". If any
argument is omitted it defaults to *. Hence the command RV
with no arguments resets the window to its initial value,
which is positions 1 to 32767. It is equivalent to RV * *.

Whenever a current line is verified, the position of the
operational window is normally shown by the use of the
characters > and < underneath the line, for example

    26.
    This is line 26 this is.
           >       <

                              34

The operational window contains the characters "line 26" in
this case. The left hand indicator is omitted if it is at the
start of the line, and the right hand indicator is omitted if
it is past the end of the line. The VWL, VWR and VW switches
can be used to disable verification of the operational window
edges (see section 3.4.16).

For a current line, the edges of the operational window are
dynamically adjustable, the RV command specifying the initial
positions when the line becomes current. The left hand edge of
the window is also called the CHARACTER POINTER in this
context, and the following commands are available for moving
it:

    >

Move the pointer one character to the right; an error will
occur if an attempt is made to move it past the right hand
edge of the operational window or the maximum line length
(MXLL).

    <

Move the pointer one character to the left; an error will
occur if an attempt is made to move it past the initial
lefthand window specified in the most recent RV command
(defaulting to start of line).

    PR

Pointer reset: set the pointer to its initial value (as
specified in the most recent RV command).

    PA q/s/

Point after: the pointer is set so that the first character in
the window is the first character following the string. The C
and N qualifiers are not permitted. If q does not contain a
window qualifier, the search for the string takes place within
the current operational window. If the argument is omitted,
the last obeyed search expression is used. A window qualifier
and a null string can be used to set the pointer to an
absolute position. For example

    PA[36]//

moves the pointer from any current position to immediately
before column 36, while

    PA L//

moves the pointer to the end of the line.

    PB q/s/

Point before: as PA, but the string itself is also included in
the window.


                              35

The right hand edge of the operational window is dynamically
moved by the following commands:

    EWR

End window right: the right hand edge of the window is moved
one position to the right.

    EWL

End window left: the right hand edge of the window is moved
one position to the left. It cannot pass the left hand edge.

    EWA q/s/

End window after: the right hand edge of the window is set
immediately after the last character in the string. If q does
not contain a window qualifier, the search for the string
takes place within the current operational window. If the
argument is omitted, the last obeyed search expression is
used.

    EWB q/s/

End window before: the right hand edge of the window is set
immediately before the first character in the string.


3.4.4.2 Single Character Operations
The following two commands move the character pointer one
place to the right after forcing the case of the first
character in the window, if it is a letter. (If not, they are
equivalent to >.)

    $

Force lower case (Dollar for Down).

    %

Force upper case (Percent for uP). The command

    _             \(an underline character)

changes the first character in the window into a space
character, then moves the character pointer one place to the
right.

The command

    #

deletes the first character in the window. Normally the
remainder of the window moves one character to the left, thus
leaving the character pointer pointing at the next character
in the line. The command is exactly equivalent to

    E/s//

                              36

(see section 3.4.5.1) where s is the first character in the
window. A repeat count on the # command is treated specially.
If its value is N say, then the repeated command is equivalent
to the single command

    E/s//

where s is the first N characters in the window, or the whole
of the contents of the window, whichever is the shorter. A
sequence of # commands is treated in the same way as a single,
repeated # command. This means that such a sequence is able to
cross field boundaries (see section 3.4.11).

A combination of > % $ _ and # commands can be used to edit a
line character by character, the commands appearing under the
characters they affect. The following line of text and
commands illustrates this:

    o Oysters,, Come ANDDWALK with    us
    %>$$$$$$$#>>$$$$$$$$_$$$$$$$$$$###

The resulting line would be

    O oysters, come and walk with us

and the character pointer would be left immediately before the
word "us".


3.4.4.3 The Find Window
Normally the find commands F, BF and DF operate within the
operational window described in the preceding section unless
their arguments contain overriding window qualifiers. However,
there are sometimes requirements to select lines by context in
one field and to operate in another. An example of this is the
editing of card image files, where line selection is to be
done by sequence number. The command

    RFn m

specifies a window for all strings in find commands that do
not have explicit window qualifiers. When set, it acts
independently of the operational window. RF with no arguments
unsets the find window, and the find command then reverts to
using the operational window.

The characters . and * may be used as arguments for the RF
command. The character . means "the edge of the operational
window" (left or right hand as appropriate) while the
character * means "the default value". The second argument may
be omitted if it is *, and both arguments may be omitted if
they are both * (as described above).

The availability of . as an argument means that the find
window may be set according to the contents of a particular
line.



                              37

Use of a window with the DF command does not affect the
deleting operation; it still deletes whole lines, not just the
part that is windowed.


3.4.5 String Operations on the Current Line


3.4.5.1 Basic String Alterations
Three similar commands are available for altering parts of the
current line. The A, B and E commands insert their second
(string) argument after, before or in exchange for their first
argument respectively. The first argument may be qualified,
but the C and N qualifiers are forbidden. If the current line
were

    The Carpenter beseech

then the commands

    E U/carpenter/Walrus/       \exchange
    B/bese/did /                \insert string before
    A L//;/                     \insert string after

would change it to

    The Walrus did beseech;

A null second string in an E command causes removal of the
first string from the line; an A or B command with a null
second string does nothing (provided the first string is found
- an error will occur if it is not.) A null first string in
any of the three commands will match at the initial search
position. This is the beginning of the line unless either of
the E or L qualifiers is present, in which case it is the end
of the line.

If a window qualifier is present in an A, B or E command, the
whole operation takes place within the given window, and
characters outside it are not affected. The operational window
can be overridden by this means.

Regular Expressions (see section 3.3.6) may be used in A, B or
E commands to specify more complicated contexts for string
alterations. For example

    E R/(Walrus|Carpenter)/Oyster/

replaces whichever of the strings "Walrus" or "Carpenter"
occurs first on the line by "Oyster". The replacement string
is treated as a literal string and is not interpreted in any
way.


3.4.5.2 Pointing Variant
The AP, BP and EP commands have two arguments and act exactly
like A, B and E, with the additional feature that, when the
operation is complete, the character pointer is left pointing

                              38

to the first character following any text which participated
in the alteration. Thus

    AP/s/t/

is equivalent to

    A/s/t/; PA/st/

while

    BP/s/t/

is equivalent to

    B/s/t/; PA/ts/

and

    2EP U/tweadle/Tweedle/

would change

    tweadledum and TWEADLEdee

into

    Tweedledum and Tweedledee

leaving the character pointer just before "dee".


3.4.5.3 Deleting Parts of the Current Line
The commands DTA (delete till after) and DTB (delete till
before) are used to delete from the beginning of the line (or
character pointer) until a given context. The commands DFA
(delete from after) and DFB (delete from before) are used to
delete from a given context until the end of the line (or
window). If the current line were

    All the King's horses and all the King's men

then

    DTB L/King's/

would change it to

    King's men

while

    DTA/horses /

would change it to

    and all the King's men


                              39

If the argument for any of these commands is omitted, the last
obeyed search expression is used, provided that it is
suitable.


3.4.5.4 Case Changing
The case of alphabetic characters in a line may be changed
character by character as described in section 3.4.4.2. There
are also two commands for forcing the case of complete
strings:

    LC q/s/       \force lower case
    UC q/s/       \force upper case

The N and C qualifiers are not permitted. Alphabetic
characters in the matched string are forced to the relevant
case while non-alphabetic characters are unaltered. The
character pointer is not moved.

The case of the entire current line (within the operational
window) may be forced by the commands

    LCL           \lower case entire line
    UCL           \upper case entire line

These commands do not cause motion of the character pointer.
See also UCE and LCE in section 3.4.8.1.


3.4.5.5 Setting the Control Character
The CC command, which takes a string of length one as its
argument, is used to set the (carriage) control character for
the current line. The character should be one of the standard
ANSI set. Section 3.7 describes how ZED handles datasets with
the various different kinds of control character. When a
current line is verified, the control character is given
following the line number.

    CC/1/

Set the current line's control character to '1'.


3.4.5.6 Miscellaneous Current Line Commands
Whenever one of the string alteration commands A, AP, B, BP,
DFA, DFB, DTA, DTB, E, EP, LC or UC is obeyed it becomes the
current string alteration command and can be repeated by
obeying the ' command which has no arguments. Anomalous
effects occur if sequences such as

    E/castle/knight/; 4('; E/pawn/queen/)

are used; the second and subsequent executions of the '
command refer to a different command than the first.

Alterations that have been made to a current line, other than
those caused by margins or space compression (see sections
3.4.10 and 3.4.20), can be cancelled by the command

                              40

    UNDO

The current line is reset to what it was when it last became
current. Margin, space compression and global operations are
not undone, and splitting a line is equivalent to establishing
a new current line. UNDO also causes the operational window to
be reset.

The precise layout of a line may be ascertained by means of
the show column command

    SHC q/s/

This causes the column number of the first character of the
string to be written to the verification file. The N and C
qualifiers are forbidden.


3.4.6 Splitting and Joining Lines
ZED is primarily a line editor. Normal ZED editing commands do
not operate over line boundaries, but there are facilities for
splitting a line into more than one line, and for joining
together two or more successive lines.

    SB q/s/

Split the current line BEFORE the given context. The first
part of the line is sent to the output, and the remainder
becomes a new non-original current line. If any of the
remaining characters lie to the right of the operational
window in the original line, they are kept in the same
character positions by the insertion of spaces. This also
applies to any remaining characters to the right of any field
boundaries (see section 3.4.11). The effect is precisely as
though an exchange command with a null replacement string were
executed.

If the argument for SB is omitted, the last obeyed search
expression is used, provided that it is suitable.

    SA q/s/

Split the current line AFTER the given context.

    CL/s/

Concatenate line: a new current line is formed by
concatenating the current line, the given string, and the next
line from the source, in that order. The string may be omitted
from the command if it is null. The position of the
operational window is retained.

As an example of splitting and joining lines, consider the
text

    Humpty Dumpty sat on a wall; Humpty
    Dumpty had a
    great fall.

                              41

Assuming that the first line is the current line, the commands

    SA /; /; 2CL/ /

cause the line

    Humpty Dumpty sat on a wall;

to be output, and leave as the new current line

    Humpty Dumpty had a great fall.



3.4.7 Inspecting Parts of the Source
The following commands all cause ZED to advance through the
source, outputting the lines it passes to the verification
dataset as well as to the normal output (where relevant). As
these commands are most frequently used interactively, the
verb TYPE is used for them. This does not however mean that
they cannot be used for outputting to, say, a line printer.
After one of these commands has been obeyed the last line
typed becomes the new current line.

    Tn

Type N lines. If N is omitted, typing continues till the end
of the source. The first line typed is the current line, so
that, for example

    F /It's my own invention/; T6

types six lines starting with the one beginning "It's my own
invention".

    TLn


Type N lines as for T, but with line numbers added in the LIST
file format (see section 3.3.9).

Typing up to a given context can be done by using the T
command with one of the conditional looping commands (see
section 3.4.9.2).

To send a copy of the current line to the verification
dataset, the command T1 (or TL1) can be used. This form of the
command (with argument 1) is permitted in ON groups. The
verification differs from that produced by the ? command in
that the line number is omitted (or appears on the same line)
instead of being output on the line above.

The character + is permitted as an argument for the T and TL
commands. It causes typing to continue up to the line most
recently read from the source (c.f. M+ in section 3.4.2).

If VI+ is set (see section 3.4.16) then output from T and TL
is in the same format as that from the ! command (see section

                              42

3.4.16).


3.4.8 Control of Command, Input and Output Files
Files used by ZED are divided into four types: command, input,
output and verification. There are no commands for changing
the verification file.

ZED contains 16 in-store buffers which may be used for small
command, input and output files as described below. Any one
buffer may only be used for one thing at a time; for example,
it cannot simultaneously be used for both input and output.

A list of the non-empty buffers may be written to the
verification file by obeying the command

    SHBUFF

The list contains pairs of numbers in the form n/m, where N is
a buffer number and M is the number of lines in that buffer.

The contents of any of the 16 in-store buffers may be examined
by the command

    TBUFF n       \type buffer n

If the argument is omitted the contents of all non-empty
buffers are typed, each preceded by a line containing "Buffer
<n>". The command

    DBUFF n

deletes the lines contained in buffer N, leaving the buffer
empty. DBUFF with no argument deletes all lines in all
buffers.

When ZED is ending normally, a message is output if any of the
in-store buffers is not empty. For non-interactive use this is
treated as a warning, but for interactive use it is an error.
This allows the user to retrieve the material if it was left
in a buffer accidentally. This check (and others) may be
suppressed by the use of the WARN command (see section
3.4.20).


3.4.8.1 Command Files
When ZED is entered, commands are read from the PARM field,
followed by EDITS if present. The command

    C /s/

where s is a ddname or dsname, can be used to read commands
from another file. When the file is exhausted (or a Q command
obeyed) it is closed and control reverts to the command
following the C command. Thus

    C /DD1/


                              43

reads and obeys commands from the file allocated to ddname
DD1, while

    C /SPQR.EDS(A)/

reads commands from the named disc file.

The commands

    LCE sw        \force lower case for edits
    UCE sw        \force upper case for edits

can be used to force the case of any letters in lines of
editing commands. Lines of insertion material are also
included in this operation, which is applied to lines of
commands read from in-store buffers as well as to those read
from datasets. UCE+ implies LCE- and vice versa.

Commands can be read from any one of the 16 in-store buffers
by the commands

    C BUFF n
    C COPY n

where 0<=n<=15. The first of these leaves the buffer empty,
while the second leaves it intact. This facility allows
commands to be constructed whose content depends on the source
data.


3.4.8.2 Input Files
The I and R commands, which can be used to insert the entire
contents of a file or in-store buffer at a specific point in
the source, are described in section 3.4.3 above.

The FROM command may be used to associate the source file with
a dataset other than that with ddname FROM by using the form

    FROM /s/

where s is a ddname or dsname. In the latter case ZED
allocates and verifies a ddname which must be used in
subsequent references to the file. A FROM command with no
argument re-selects the original source file.

When a FROM command is obeyed, the current line remains
current; however the next line will come from the new source.
(An exception to this occurs if the current line is the end-
of-file line. In this case the first line of the new source
becomes current, but is not read until a command requiring a
current line is obeyed.) Any backed up lines will be held with
the previous source and can be subsequently accessed after
obeying another FROM command.

Each dataset has its own sequence of line numbers. Output
lines in store at the time of a switch may become non-original
lines in order to maintain a unique ascending sequence. An M,
D, I or R command which immediately follows a FROM command

                              44

referring to a dataset and which contains an explicit line
number always moves forwards (i.e. into the new source).

A source file is not closed when it ceases to be current, so
further lines can be read from it by later re-selection (by
ddname). The CF command must be used to close files that are
no longer required.

    CF /ddname/

CF with no arguments closes all closeable files (both input
and output). When ZED is interactive and V+ is set, the
ddnames of the files being closed are output to the
verification dataset.

An example of the use of the FROM command to merge lines from
two datasets follows:

    M10           \pass lines 1-9 from FROM
    FROM /DD1/    \select new input,
                  \line 10 remains current
    M6            \pass line 10 from FROM,
                  \lines 1-5 from DD1
    FROM          \re-select FROM
    M14           \pass line 6 from DD1,
                  \lines 11-13 from FROM
    FROM /DD1/    \re-select DD1
    M*            \pass line 14 from FROM,
                  \the rest of DD1
    FROM          \re-select FROM
    CF /DD1/      \close DD1
    M*            \pass the rest of FROM

Input may also be read a line at a time from any one of the 16
in-store buffers by means of the command

    FROM BUFF n

where 0<=n<=15. In this case all the lines are treated as
moved lines and have no line numbers. The M, D, I and R
commands may not be used with explicit line numbers while
input is being read from a buffer. Commands such as I., M*,
M+, M- and D.* are however allowed.

Margins and space compression are not applied to lines "read"
from buffers. A pseudo "end-of-file" is generated when the
buffer becomes empty. Moving backwards when the current source
is a buffer has the effect of adding lines onto the front of
the buffer.


3.4.8.3 Output Files
Output from ZED is normally sent to the dataset with ddname
TO. Output is not however immediate; lines which have been
passed are kept in a queue in main store as long as possible
in order to provide a capability for moving backwards in the
source (see section 3.4.2).


                              45

Output lines may be sent to one of 16 in-store buffers instead
of to the output queue. This facility is useful for shuffling
blocks of lines within the source.

    TO BUFF n

Select buffer N for subsequent output lines (0<=n<=15). Output
is redirected to the main output queue by the command

    TO

The following example illustrates the line shuffling facility:

    M45           \lines 1-44 to output queue
    TO BUFF3      \switch to buffer 3
    M50           \lines 45-49 now in buffer 3
    TO BUFF7      \switch to buffer 7
    M52           \lines 50-51 now in buffer 7
    TO            \revert to normal output
    M40           \back to line 40
    I BUFF3       \lines 45-49 before line 40
    I75 BUFF7     \lines 50-51 before line 75

The TO command can also be used to associate the output queue
with a dataset other than that with ddname TO by using the
form

    TO /s/

where s is a ddname or dsname. In the latter case ZED
allocates and verifies a ddname which must be used in
subsequent references to the file.

When a TO command that does not specify an in-store buffer is
obeyed, the existing queue of output lines is written out if
the output dataset is actually switched.

An output file is not closed when it ceases to be current, so
further lines can be added to it by later re-selection (by
ddname). The following example splits up the source between
the main destination TO and an alternate destination DD1.

    M11           \lines 1-10 to TO
    TO/DD1/       \switch output dataset
    M21           \lines 11-20 to DD1
    TO
    M31           \lines 21-30 to TO
    TO/DD1/
    M41           \lines 31-40 to DD1
    TO

If a file is required for re-use it must be explicitly closed.
The command

    CF /ddname/

closes the file of the given ddname. As an example of its use
is for moving part of the source file which is too big to hold

                              46

in an in-store buffer to a later place in the output:

    TO/DD1/       \output to DD1
    1000N         \advance through source
    TO            \revert to TO
    CF /DD1/      \close output file DD1
    I2000/DD1/    \re-use as input file

The use of CF on files that are completely finished with
minimizes the amount of store needed. CF with no argument
closes all closeable files (both input and output). When ZED
is interactive and V+ is set, the ddnames of the files being
closed are output to the verification dataset.


3.4.9 Conditional Commands and Loops


3.4.9.1 Conditional Commands
The IF command can be used to obey a command or command group
only if a given search expression matches the current line.
The syntax for the two forms is

    IF se THEN command
    IF se THEN cg

where the command or command group may have a repeat count if
required. The word THEN is optional, and may be omitted.

For example

    IF B/*/ THEN 99$

    IF (NB/*/ & [10,13]/MVCL/) (I
             BAL   LINK,SIM360
    Z
    )

The IF command may also optionally in addition specify a
command or command group to be obeyed when the search
expression does not match the current line:

    IF se THEN cg ELSE cg

For example

    IF /vorpal sword/ THEN e/sword/dagger/ ELSE (
       COMMENT /no vorpal sword/)

Note the use of command brackets to continue the command over
more than one line. An end of line not in parentheses always
terminates a ZED command (for the benefit of interactive
users). The only exception is when an I or R command is
followed by in-line insertion material. However if such a
command is required before ELSE, brackets must be used:




                              47

    IF /uffish/ THEN (I
    some text
    Z
    ) ELSE 3N

If the command brackets were not used, ZED would treat the end
of line following the insertion terminator as terminating the
IF command.

The UL (unless) command is the complement of IF. The THEN
command or command group is obeyed if the search expression
does NOT match the current line; the ELSE command or command
group is obeyed if it does.

A number of successive tests using IF and UL can be joined by
using the connectors ELIF (else if) and ELUL (else unless).
This reduces the number of brackets needed, and makes the
commands easier to read. For example


    IF /walrus/ THEN (
      COMM /animal/) ELIF /carpenter/ THEN (
      COMM /human/)  ELUL /oyster/ THEN (
      COMM /eh?/)    ELSE (
      COMM /bivalve/)

Two special commands are provided for detecting the end of the
source file, IFEOF and ULEOF. In their simplest form they take
only one argument, a command or command group:

    ULEOF B//  /

An alternate command group introduced by ELSE, ELIF or ELUL is
permitted:

    IFEOF THEN COMM /reached end/ ELIF /cabs/ E/cabs/taxis/



3.4.9.2 Loops
Many commands may be preceded by an unsigned decimal number to
indicate repetition, for example

    24N

Repeat counts may also be specified for command groups in the
same way as for individual commands:

    12(F/handsome/; E/handsome/hansom/; 3N)

A repeat count of zero causes the command or command group to
be skipped.

Indefinite repetition can be specified by the RPT command,
which takes as its argument a command or command group. For
example:

    RPT (F/queen/; IF/red/ E/queen/king/; N)

                              48

Two complementary commands, WH (while) and UT (until), can be
used to cause repetition while, or until, the current line
matches a given search expression.

    WH se cg
    UT se cg

For example

    WH /  / E/  / /

converts all sequences of spaces in the current line to a
single space.

    UT P// (B//  /; N)

indents lines until a blank line is reached.

The command UTEOF can be used to repeat a command or command
group until the end of the source is reached, for example

    UTEOF (N; B//*/)

The group of commands is repeatedly obeyed until a command
which is illegal at end-of-file is encountered when the end-
of-file line is current. In the above example, assuming that a
real line is current at the start, it is the B command which
will eventually cause the loop to exit. For the command

    UTEOF (N;?)

the N command will eventually fail following the execution of
the ? command for the end-of-file line.


3.4.9.3 Exceptional Flow of Control in Loops
The execution of any command group can be terminated by the
AGP (abandon group) command. If the group is an argument of
another command such as WH, that command is also terminated.
For example

    WH B/!/ (A/!/ /; N; IFEOF AGP)

inserts a space after the initial ! of successive lines until
either a line not beginning with ! or the end of the source is
reached.

A repeat count for the AGP command specifies the number of
textual levels of brackets to abandon. At the highest level,
AGP abandons the current line of commands.

If AGP appears in a procedure (see section 3.4.19) its effects
are limited to groups within that procedure.






                              49

3.4.10 Margins
Margins may be specified for source and verification files.
Control characters do not participate in margin operations.

    MAn m

Set margins for the source at positions N and M. Characters
before position N and after position M are removed from each
source line when it is read. Further processing, including the
application of windows, works on the transformed lines. The
application of margins does not cause line verification, and
it is not reversible via the UNDO command (see section 3.4.5).
Margins are automatically reset when a REWIND command is
obeyed.

    MAVn m

Set margins for the verification file at positions N and M.
This applies only to the verification of data lines, and its
effect is that only those characters appearing between
positions N and M (inclusive) are output.

The characters . and * may be used as arguments for the MA and
MAV commands. The character . means "the edge of the
operational window" (left or right as appropriate) while the
character * means "the default value". The second argument may
be omitted if it is *, and both arguments may be omitted if
they are both *. The default values are 1 and 32767 for the
first and second arguments respectively.

The availability of . as an argument means that margins may be
set according to the contents of a particular line.


3.4.11 Fixed Format Fields
The MF (mark fields) command is used to designate certain
character positions in source lines as the boundaries of fixed
format fields. Up to 255 such fields are permitted, specified
numerically:

    MF n1 n2 n3 ...

where the N's are in ascending order. The boundaries are
immediately before the character positions specified, and
start of line is also considered to be a field boundary. When
changes are made to the current line, the number of characters
in each field is kept constant, if possible, by the addition
or removal of spaces at the right hand side of fields during
each alteration. Note that this means that a command which
removes spaces at the right hand side of a field has no
effect. If a field overflows, a warning message is given, but
characters are not lost: the next field is shifted to the
right. This contrasts with the action when the operational
window overflows (see section 3.4.4.1).

A sequence of # commands or a # command with a repeat count
will act across a field boundary, since both are executed as a
single command (see section 3.4.4.2).

                              50

MF with no arguments cancels all field settings; the K command
temporarily suspends field settings during the processing of
the remaining commands on the same command line. It may appear
with an ordered list of field settings as arguments, or with
no arguments, in which case all fields are suspended.

A common example of the use of MF is for keeping Assembler
source code aligned during editing. This is usually in columns
beginning at positions 10, 16 and 36, with a continuation
marker in position 72. Because it is desirable to retain one
space character between the fields even if they overflow, the
command

    MF 9 15 35 72

should be used. Assuming this setting, if the current line
were

    LABEL    LA    R4,DATA             comment

then the commands

    8#; E/LA/L/; A/DATA/WORD/

would change it to

             L     R4,DATAWORD         comment

while

    E L/LA/LONGNAME/

would change it to

    LABEL    LONGNAME R4,DATA          comment

and give the "field overflow" warning message. The sequence

    K15; E L/LA/LONGNAME/

would result in

    LABEL    LONGNAME    R4,DATA       comment



3.4.12 Text Justification
ZED contains a facility for very basic text justification. The
result of justifying a sequence of lines is as though all the
lines had been concatenated, with one space between each, and
the result chopped up again into the largest sized pieces that
would fit into the output records, the new breaks always being
made immediately after a space character (which will
subsequently be removed for U and V format output). No attempt
is made to right justify, nor are spaces inserted or removed
in the body of the text.



                              51

A blank line, a line beginning with a space character
(indent), or a line containing a control character other than
space is taken as the start of a new paragraph. A line
containing the control character + is never joined to the
previous or following line, nor is it ever split. It is copied
without change, and a new paragraph is started with the
following line.

Justification takes place concurrently with other editing,
whenever a line is added to the output queue or an in-store
buffer during forward motion through the source. Note that
this means that inserted lines are also processed.
Justification is enabled/disabled by use of the J command.

    J+            \enable justification
    J-            \disable justification

J- is automatically set when the REWIND command is obeyed. The
length of output line produced can be controlled by the JL
(justification length) command. If this is not given the
effective LRECL of the main destination file (TO) is used.

    JL 58

specifies that the text is to be justified into lines of
maximum length 58 characters.

Indented text can be justified by use of the RJ (restrict
justification) command.

    RJn m

This sets a JUSTIFICATION WINDOW. Provided no characters in
the output lie outside the window, the lines are justified
normally, the N-space indent being retained. The value
specified for the output line length (via the JL command) must
include the indent.

The characters . and * may be used as arguments for the RJ
command. The character . means "the edge of the operational
window" (left or right as appropriate) while the character *
means "the default value". The second argument may be omitted
if it is *, and both may be omitted if they are both *. The
default values are 1 and 32767 for the first and second
arguments respectively.

The availability of . as an argument means that the
justification window may be set according to the contents of a
particular line.

Lines with characters to the left of the window are treated as
start of paragraph. Lines with characters to the right of the
window are output unchanged. The operational window does not
take part in justification operations.

If backward movement through the source occurs when
justification is on, the justified lines are retrieved. Those
that have been split become non-original lines, and are not

                              52

accessible by line number.

Justified lines may be verified as justification occurs by use
of the VJ command.

    VJ+           \enable justification verification
    VJ-           \disable justification verification

This switch is subject to the overall verification switch V
(see section 3.4.16), but not to any other verification
switches such as VT, etc.

To illustrate the effects of the justification commands, the
following piece of text has been justified in three different
ways. (All four samples are indented with respect to this
text, in keeping with other examples in this document and to
prevent their re-justification when it is edited.)

    This is a sample of text
    and so gobbledegook
    is
    quite in order while the quick brown fox
    jumps continuously and in ever-decreasing
    circles over the
    lazy dog.

        Indentation is frequently used
        to highlight particular
        parts of a text.
        However, the correct ZED commands are required
        in order to make it work
        as
        expected.
    *   The left hand margin
        can be used to
        indicate a new
        paragraph.

Using the commands JL40; J+ only:

    This is a sample of text and so
    gobbledegook is quite in order while the
    quick brown fox jumps continuously and
    in ever-decreasing circles over the lazy
    dog.

        Indentation is frequently used
        to highlight particular
        parts of a text.
        However, the correct ZED commands
    are required
        in order to make it work
        as
        expected. *   The left hand margin
        can be used to
        indicate a new
        paragraph.


                              53

Using (on the original text) the commands

    JL40; J+
    F BSU/indent/
    RJ5 40

    This is a sample of text and so
    gobbledegook is quite in order while the
    quick brown fox jumps continuously and
    in ever-decreasing circles over the lazy
    dog.

        Indentation is frequently used to
        highlight particular parts of a
        text.
        However, the correct ZED commands are required
        in order to make it work as
        expected.
    *   The left hand margin can be used to
        indicate a new paragraph.

Using (again on the original text) the commands

    JL40; J+
    F BSU/indent/
    PB SU/indent/; RJ.

    This is a sample of text and so
    gobbledegook is quite in order while the
    quick brown fox jumps continuously and
    in ever-decreasing circles over the lazy
    dog.

        Indentation is frequently used to
        highlight particular parts of a
        text. However, the correct ZED
        commands are required in order to
        make it work as expected.
    *   The left hand margin can be used to
        indicate a new paragraph.



3.4.13 Global Operations
Global operations are operations which take place
automatically as the source is scanned in a forward direction.
They are initiated and stopped by special commands. Care
should be exercised if global operations are enabled when
backward movement through the source occurs. Marginning, space
compression and justification may be viewed as pseudo global
operations.


3.4.13.1 Simple Character Changes
Three commands, GA, GB and GE are provided for simple string
changes on each line.



                              54

    GA q/s/t/
    GB q/s/t/
    GE q/s/t/

The C, N and count qualifiers are not allowed. When the B, E
or P qualifiers are NOT present, the effect of GA, GB or GE is
to apply an A, B or E command, as appropriate, to any
occurrence of the qualified string q/s/ in a new current line
after the operational window is initialized. The G commands
are also applied to the line which is current at the time the
command is obeyed.

The exact effect of, say, GA on any line can be defined in
terms of other commands thus:

    WH q/s/ AP q/s/t/; PR

provided q does not contain B, E or P. This definition ensures
that G commands do not re-scan their replacement text; for
example

    GE/Tiger Lily/Tiger Lily/

would not loop forever, but would have no visible effect on
any line. However, as a result of the "change", certain lines
would be verified.

When the B, E or P qualifiers are present in a G command, the
appropriate A, B or E command is applied once only to each
line which matches the qualified string. Thus, for example,

    GE BU/Begin/Start/

is equivalent to

    IF BU/Begin/ THEN E BU/Begin/Start/

applied to the current line and to every subsequent line as it
becomes current.

Global changes are applied to each new current line in the
order in which the global commands which set them up were
obeyed.


3.4.13.2 Complicated Cases
The ON command is used to set up a sequence of commands to be
obeyed when a line which matches a given search expression
becomes current:

    ON se cg

The command group may not contain any command which moves to a
new current line, nor any command which alters the current
globals. However, DG and EG (see section 3.4.13.4) are
permitted. The T and TL commands are permitted if their
argument has the value 1, but not otherwise. The command


                              55

    ON /king/ (WH/king/ EP/king/queen/; PR)

is exactly equivalent to

    GE/king/queen/

The WH command is necessary because ON is not a looping
command; it only tests the line once. ON groups are applied to
each new current line in the order in which the ON commands
were obeyed.

An ON command may also optionally specify a command or command
group to be obeyed when a line which does not match a given
search expression becomes current:

    ON se cg ELSE cg

GA, GB and GE commands are treated as shorthand notations for
ON groups, and if both appear they are ordered together. For
example, the commands

    GA W/kin/g/                 \command 1
    ON /knight/ 3#              \command 2
    GE /king/King/              \command 3

will be applied to each new current line in the order 1, 2, 3.

If a ' command (see section 3.4.5.5) occurs in an ON group it
is local to the group and must therefore follow a suitable
string alteration command. The operational window is not local
however, and changes made in an ON group persist after the
group has been obeyed. Thus for example a command such as

    ON /crown/ EP/crown/coronet/

alters the position of the character pointer whenever it
matches.


3.4.13.3 Cancelling Global Operations
All global operations are automatically cancelled when a
rewind (see section 3.4.20) occurs. The CG command can be used
to cancel individual commands at any time.

When a global operation is set up by one of the commands GA,
GB, GE or ON, it is allocated an identification number which
is output to the verification file if ZED is being run
interactively and V+ is set. The argument for CG is the number
of the global operation to be cancelled. If CG is obeyed with
no argument it cancels all globals and resets the global
counter so that the next global created will be numbered 1. CG
may also be specified with the character + as an argument, in
which case the most recently created global is cancelled.






                              56

3.4.13.4 Suspending Global Operations
Individual global operations can be suspended and later
resumed by use of the DG (disable global) and EG (enable
global) commands which take the global identification number
or the character + as their argument. If the argument is
omitted, all globals are disabled or enabled as appropriate.

DG and EG are the only global commands permitted inside an ON
group. Globals are applied to each new current line (during
forward motion) in the order of their identification numbers.
Hence it can be determined whether the disabled/enabled global
will or will not be applied to the current line which provoked
the ON group containing DG or EG.

If EG is obeyed outside an ON group the global(s) thereby
enabled are applied to the current line; inside an ON group
this action is not taken (to prevent recursion).


3.4.13.5 Looping Globals
It is not possible to detect looping globals in advance and
fault them when ZED commands are decoded, hence loops may
occur when globals are being obeyed. Because global operations
are not normally interrupted by an attention until all the
current globals have been applied to a line, it is necessary
to use two attentions (followed by <null>) to interrupt a
looping global. This may leave a line with only some globals
applied.

As a check against one form of looping, ZED counts the number
of times a global created by the GA, GB or GE commands is
applied to each line, and generates an error if the count
exceeds the number of characters in the line. A common example
of this form of loop is a command such as

    GE[10,12]/  //

where the spaces that are removed are replaced by others to
keep columns 13 onwards aligned.


3.4.14 Displaying the Program State
Several commands beginning with SH (for SHOW) output
information about the state of ZED to the verification file.

    SHD

Show Data: saved data values, such as the last search
expression, are displayed.

    SHF

Show files: the ddnames currently open are displayed.

    SHG

Show Globals: the current global commands are displayed,
together with their identification numbers. The number of

                              57

times each global search expression has matched is also given.
An individual global can be displayed by giving its number as
an argument to SHG.

    SHS

Show switches: the state of all ZED switches is displayed.


3.4.15 Terminating a ZED Run
The W command (windup) causes ZED to WIND THROUGH the rest of
the source. It is illegal if output is not currently directed
to TO. When the end is reached, all files are closed, the
store is relinquished, and ZED exits. Reaching the end of the
highest level command file has the same effect as W.

The in-store buffers should be empty before W is obeyed. If
any of them are not, an error occurs. This is a soft error for
non-interactive runs (return code 4), but a hard error when
interactive. It may be disabled by the command WARN- (see
section 3.4.20).

The STOP command causes ZED to stop immediately. No further
input or output is attempted. The return code is set to 8.

The Q command causes ZED to stop obeying the current command
file and to revert to the previous one. If encountered at the
outermost level it is synonymous with W.


3.4.16 Current Line Verification
The following circumstances can cause automatic verification
to occur:

(a)  Reading a new line of commands with a current line which
     has not been verified since it became current, or has
     been changed since it was last verified.

(b)  Moving past a line which has been changed, but has not
     been verified since the change.

(c)  Outputting an error message.

In cases (a) and (b) the verification only occurs if the V
switch is on. The command

    V sw

is used to change the setting of the V switch. It is
initialized ON (V+) if the initial state of ZED is interactive
(commands and verifications both connected to a terminal), and
to OFF (V-) otherwise.

When the V switch is in the ON state, further control of
automatic verification is possible by using the following
switches:

    VG sw

                              58

Controls verification due solely to changes made by global
operations. The default is VG+.

The format of verifications other than justified lines is also
controlled by switches:

    VN sw

Controls verification of the line number. The default is VN+.
As control characters are verified after, and on the same line
as, the line number, they will not appear when VN- is set.

    VT sw

Controls verification of the text of lines. The default is
VT+.

    VI sw

Controls whether character indicators are to be given with
verified lines. If VI+ is set, all verification, including
that produced by the T and TL commands and as a side effect of
global changes and justifications, appears in the format
described below for the ! command. The default setting is VI-.

    VX sw

This switch determines whether verification with character
indicators (as described for the ! command below) uses
hexadecimal or escape sequences for certain non-printing
characters. The default is VX-, which specifies that escapes
are to be used.

    VWR sw
    VWL sw

Control verification of the positions of the right hand and
lefthand edges of the operational window respectively. The
left hand edge is always omitted if it is at the start of the
line, and the right hand edge is omitted if it is past the end
of the line.

    VW sw

VW sets both VWR and VWL at the same time. The default is VW+.

The justification verification switch VJ (see section 3.4.12)
is also subject to the setting of V.

Verification of the current line may be explicitly requested
by the command

    ?

This command verifies the positions of the fixed format fields
using the character + as well as the window edges. The text of
the current line is always output, even if the VT switch is
off.

                              59

An alternate form of verification, useful for lines containing
non-printing characters, is provided by the command

    !

Verify the current line with character indicators. Two lines
of verification are produced. The first is the current line
with all non-graphic characters replaced by the first
character of their hexadecimal value and certain characters
with a Cambridge standard escape combination replaced by @,
see below. As verification output normally appears on a
terminal or line printer (eventually, if not immediately),
characters that are available on all these devices are not
escaped. If the VX switch is set, then escape combinations are
not used, and all "unusual" characters are given in their
hexadecimal representation.

The second line contains a minus sign in all positions
corresponding to uppercase letters, the second hexadecimal
digit in positions corresponding to non-graphic characters,
and the escape characters below any @'s. All other positions
contain space characters.

If the VN switch is on, the two lines are preceded by a line
containing the line number, a full stop character, and two
characters representing the line's control character as
translated according to the algorithm described above.

The output of the ! command is not affected by the hexadecimal
switch (see section 3.4.18) or the VT switch.

The escape combinations used are as follows:

Character  EBCDIC code   Name        Escape combination
 c|            4A            centsign        @%
 |             6A       split vertical bar   @|
 ^             71           circumflex       @F
 £             72           pound sign       @4
 `             79          grave accent      @G
 @             7C             at sign        @@
 ~ (EBCDIC)    A1          EBCDIC tilde      @~
 [             AD       open square bracket  @(
 ]             BD     closing square bracket @]
 {             C0      opening curly bracket @<
 }             D0      closing curly bracket @>
 \             E0            backlash        @/


N.B. The ASCII code for ~~ translates to the EBCDIC code for
logical not (~) but is printed as ~~ at Cambridge.



3.4.17 Edit Line Verification

    VE sw

Verify Edits: lines of editing commands are reflected on the

                              60

verification dataset as they are read when this option is
switched on. The default is VE-.


3.4.18 Processing Lines in Hexadecimal
Lines can be processed as sequences of hexadecimal digits
instead of ordinary characters. This option is switched on and
off by means of the command

    X sw

The default is X-. When hexadecimal is being used, lines are
verified in 8-digit groups (except as a result of the !
command). Qualified strings and replacement strings used in
commands must consist of an even number of hexadecimal digits,
as must all lines of in-line insertion material. Other
strings, such as the arguments for the COMM, TO and FROM
commands, are not affected. Space characters may appear in
hexadecimal strings to improve the layout. They are ignored
when the string is decoded.

The R (regular expression) qualifier is permitted for
qualified hexadecimal strings. For example

    R/12?(AB)#00|)2B-4D/

The only legal characters in this case are the regular
expression syntax characters, excluding ", and pairs of
hexadecimal digits. Space characters are not permitted. See
section 3.3.6 for further details of regular expressions.

Control characters other than space (X'40') are verified in
hexadecimal. The argument for the CC command is treated as a
replacement string and hence must consist of two hexadecimal
digits.

It should be noted that, because ZED decodes a complete line
of commands before obeying any of them, the effect of X on
string decoding does not begin until the line of commands
following the one containing X.

Qualified and replacement strings which are verified (as a
result of an error, or as a result of the SHPROC or SHD
commands for example) are verified in 8-digit hexadecimal
groups if the X switch is on.

When processing lines in hexadecimal, care must be taken with
the use of the character pointer and its related commands. The
> and < commands still move the pointer one character (byte)
position, but this occupies two printing positions in a line
verified in hexadecimal. Similarly, the # command deletes a
whole character.

The position of the operational window is correctly verified
in hexadecimal mode, with the left hand marker immediately
before the first digit of the first windowed character, and
the right hand marker immediately after the last digit of the
last windowed character.

                              61

Commands which are remembered by ZED (such as the string
alteration commands, global commands, and procedures) and
which are set up in hexadecimal mode can still be used on
return to the normal character handling mode. For example, the
sequence

    x+
    ge/42/ad/
    ge/43/bd/
    x-

sets up two global commands using hexadecimal strings and then
reverts to non-hexadecimal mode for subsequent processing.


3.4.19 Naming Groups of Commands
A facility is provided for giving a name to a group of
commands, and subsequently obeying the group by name. Such a
group is called a procedure. There are at present no
facilities for providing arguments to procedures.

    PROC name cg

This defines a procedure called "name", and fails if such a
procedure already exists. For example

    PROC castle (E/king/***/; E/rook/king/; E/***/rook/)

The commands of a given procedure can be examined by the
command

    SHPROC name

which writes to the verification file. If the name is omitted,
all existing procedures are given. A procedure can be
cancelled by the command

    CPROC name

Again, omission of the argument causes all procedures to be
cancelled. A procedure is obeyed by means of the command

    DO name

Procedures may be called from within procedures. Recursive
calls are permitted. Note that if the AGP command (see section
3.4.9.3) appears inside a procedure its effects are limited to
that procedure.


3.4.20 Miscellaneous Commands

    FN sw

If FN+ is set the F, DF and BF commands start their search on
the next or previous lines, as appropriate (DF still deletes
the current line). With the default setting, FN-, the searches
all start on the current line. This is appropriate for non-

                              62

interactive use when the line being searched for may already
have become current as a side-effect of previous commands.

    Z /s/

This command is used to change the terminator for inline
insertion material. The string may be of any length up to 16
characters, including zero. It is recognized in upper or lower
case; in effect the search for a terminator uses the qualified
string PU/s/.

    TR sw

ZED normally suppresses all trailing spaces. TR+ switches this
default off, and allows trailing spaces to remain on both
input and output lines.

    SQ  sw
    SQS sw

These switch on/off the placing of sequence numbers into
character positions 73-80 of output lines. SQ uses output line
numbers, SQS uses source line numbers, with asterisks for
inserted lines. Lines longer than 72 characters are truncated.
SQ- is synonymous with SQS-; SQ+ implies SQS- and SQS+ implies
SQ-.

    Ha

Halt at line a. ZED will refuse to move forwards past line a
until the limit is reset. If line a has been deleted an error
occurs. H* resets the limit to end-of-file. A limit by context
can be obtained by the use of ON, for example

    ON (/FUNCTION/ | /SUBROUTINE/) H.

as H. can apply to non-original lines. The halt limit is reset
if a rewind occurs.

    COMMENT /s/

The string is written to the verification dataset.

    COLS
    COLS n
    COLS +

This command generates a line of output on the verification
dataset of the form

    123456789 123456789 123456789 12345...

If no argument is given, the number of characters is equal to
the terminal width if verification is to a terminal, or 132
otherwise. If an explicit count is given, N characters are
output; if + is specified the length of the current line
determines the number of characters output.


                              63

    CS sw

Compress spaces: when this option is on, initial spaces are
removed and multiple spaces are converted to one space in each
source line, when it becomes current for the first time, and
in each insert line at the time of insertion. Recall that,
when ZED is mpoving forwards or backwards through the source,
each line becomes current "as it is passed", even though a
command may not be complete at that stage. This operation does
not cause verification of changed lines and is not reversible
via the UNDO command (c.f. margins). CS- is automatically set
when the REWIND command is obeyed.

    =n

Set the current line number to N. If backward movement through
the source has occurred, stacked up lines are also re-numbered
and become original lines. Previous lines still in the output
queue are not affected.

    BRK sw

When the BRK switch is on (the default) the break-in action
for a null response to the prompt generated by an attention is
taken immediately following the current command or immediately
after a new line has been made current (see section 3.3.2).
BRK- can be used to delay the break-in action over a series of
related commands. Any attention which occurs while the BRK
switch is off is taken immediately following the next BRK+
command. (This does not apply to an attention with other keys
such as V+; such attentions do not interrupt ZED's normal
processing and they are always obeyed immediately.) If a
second interrupting attention occurs while the BRK switch is
off it is taken immediately (thus providing a way of escaping
from infinite loops). The facility for delaying break-in is
useful when writing non-interactive sequences of commands (or
ZED procedures) to be called from an interactive command
stream and is it desired to limit the places at which an
attention may be taken.

    REWIND

This command is only permitted when output is directed to the
main destination dataset. The rest of the source is scanned
(for globals etc) and all globals are then cancelled. If the
source is sufficiently small that no output lines have
actually been written out, backward movement to the start of
the source takes place, followed by a renumbering of all the
lines. Otherwise, the lines are all written to the
destination, which is then closed and re-opened as a new
source. This is only possible when the destination is a disc
file. The original source is closed, and the WORK file is used
as a temporary destination if necessary after a rewind. Any
source margins previously set up by the MA command are
cancelled when REWIND is obeyed and the CS and J switches are
turned off.

    MXLL n

                              64

Set the maximum line length accepted by ZED to N. Lines longer
than MXLL are split up into two or more lines when they are
read. The default value for MXLL is 400 and it cannot be set
less than 40. Note that MXLL applies to lines of editing
commands as well as to lines of source and insert datasets.

    WORD /s/

The contents of the string specify which characters appear in
words, from the point of view of the W string qualifier (see
section 3.3.6). The character - is treated specially in the
string: it may be used between two upper case letters, two
lower case letters or two digits in order to specify a range
of characters. Thus the default state is given by

    WORD/A-Za-z0-9/

It is an error to specify - other than as described above. For
example, A-z, a-9 and <> are all illegal. In order to specify
that - may itself appear in words, it must be preceded by the
quoting character ", which must also be used when specifying "
itself. In fact, any character may be preceded by ", but it is
only necessary for " and -. This is the same rule as for
Regular Expressions. Thus the command

    WORD/0-9"-+.E/

defines "words" that are actually floating point numbers.

Although the WORD command defines which characters are
INCLUDED in words, the W qualifier still works by checking
that the characters preceding and following a matched string
are NOT in this set. Thus it is not necessary to use the WORD
command in order to obey

    F W/well-formed/

for example, which would correctly not match "swell-formed".
However, in order that

    F W/well/

should not match the first part of "well-formed" it is
necessary to obey

    WORD/A-Za-z"-/

previously. Note that this implementation means that

    WORD//

has the effect of disabling the W qualifier.

    WARN sw

If WARN- is set, the warning and soft errors



                              65

    Already selected
    Buffer n is empty
    Buffer n is not empty
    Field overflow

are suppressed. If WARN- is set in a non-interactive run when
one of the last three messages would have been given, no
return code is set. (The first warning never sets a return
code.) The default is WARN+.

    ERRSTOP sw

When ERRSTOP+ is set, which is the default state, ZED abandons
a non-interactive command sequence after any hard error. When
ERRSTOP- is set, ZED's behaviour after a hard error does not
depend on whether the current command sequence is interactive
or not. Details of error handling are given in section 3.6
below.

    SCC sw

Suppress control characters: SCC+ suppresses the error message
which normally occurs when a line containing a significant
control character is added to the output queue for a file
without control characters (see section 3.7). The default is
SCC-. The control characters themselves are not suppressed
during ZED processing.

    SO sw

Suppress overflow: if the SO switch is on, overflowing output
lines are not faulted (see section 3.6.4). Instead they are
split into as many lines as necessary when eventually written
to the output file.

    FLUSH

This command causes ZED to write the queue of output lines to
the relevant output file.

    STACK n

Set ZED's internal stack size to n bytes. The stack is an area
of store set aside for saving linkage information when nested
command groups or internal subroutines are called. The default
size is 800 bytes, which is adequate for many applications. If
the error message STACK OVERFLOW is encountered, this command
may be used to increase the stack size. It may be obeyed at
any time.

    MXSS n

Set the maximum store size for ZED's working storage to the
amount currently in use or n bytes, whichever is the greater.
***NOTE: the units of n are bytes, not kilobytes.

The minimum amount of working store used by ZED is 16K bytes,
and it increments this as necessary in multiples of 16K. The

                              66

initial maximum store size is 512000.

    STORE

This command is intended mainly as a debugging aid. It causes
ZED to write details of its store usage to the verification
dataset in the following format

    T=tK  L=l  D=d  S=s  F=f


where
 t =       number of kilobytes in use by ZED,
           excluding store for the program itself
 l =       number of bytes in use for holding lines
 d =       number of bytes in use for dynamic items, which
           include commands, strings, etc.
 s =       number of bytes in use for static items, which
           include output buffers, NIOP bases and basic work
           areas
 f =       number of bytes left on ZED's free queue

When ZED runs out of store it attempts to increase t by
requesting more store from the operating system, and only if
this fails does it start to write lines from the output queue.
Hence the value of t may increase during the course of a run.

    MS sw

Monitor store: this is another debugging command. When the
switch is on ZED outputs details of its store usage between
each line of commands. The format is the same as for the STORE
command.


3.4.21 Reading the First Line
When ZED is initialized it does not read the first line of the
source until a command which requires a current line is
obeyed. This allows commands such as MXLL, which affect the
reading of lines, to be obeyed before the first line is read.
The same state obtains after a REWIND command and when a FROM
command is obeyed when an end of file line is current.

The following commands, if encountered when ZED is in this
state, do not cause a line to be read:

(a)  All switch setting commands.

(b)  All "show" commands except SHC (show column).

(c)  Global commands: CG, DG, EG, GA, GB, GE, ON.

(d)  Unconditional flow control commands: AGP, C, DO, RPT,
     STOP, Q (unless Q => W).

(e)  Procedure commands: PROC, CPROC.



                              67

(f)  Margin, window, justification and field setting commands:

     MA, MAV, MF, RF, RJ, JL, K.

(g)  Store control commands: MXLL, MXSS, STORE, STACK, FLUSH.

(h)  I/O control commands: CF, DBUFF, FROM, TBUFF, TO.

(i)  Miscellaneous commands: COLS, COMM, WORD, Z.


3.4.22 Chinese ZED
The Cambridge version of ZED contains a special feature to
assist in the use of the experimental Chinese terminal which
has been constructed as part of a research project. The
character 'circumflex', when followed by certain specific
sequences of hexadecimal digits, becomes a valid ZED command.
This enables certain Chinese characters to be used directly as
ZED commands. Circumflex is not treated specially in any other
circumstance, and if it is encountered as a ZED command, but
NOT followed by a defined Chinese sequence, the usual error
message, "Unknown command" is given.

3.5 THE LAST SEARCH EXPRESSION

The last obeyed search expression may be re-used in subsequent
commands by writing the character & in place of a search
expression or qualified string (see section 3.2.2.6). Inside
an ON group & refers initially to the search expression of the
group. Obeying other search expressions in an ON group does
not affect the use of & outside the group.


3.5.1 & As a Search Expression
& is always valid as a search expression, provided that at
least one other search expression has previously been obeyed.
For example

    F N/manxome foe/; N; F&

finds the second line not containing "manxome foe". For
commands which take a single search expression argument,
omission of the argument is equivalent to specifying &. Thus

    DF

is equivalent to

    DF &

Where more than one argument is required, & may not of course
be omitted. For example

    F B/ /; WH&#     \delete leading spaces

Because & refers to the last obeyed search expression, it need
not appear in the same line of commands as the expression to
which it refers. However, anomalous effects occur in sequences

                              68

such as

    F/dum/; 3(N; F&; <other commands>; F/dee/)

The second and subsequent executions of F& use a different
search expression to the first (c.f. the ' command in section
3.4.5.5).


3.5.2 & As a Qualified String
Except in the case of the GA, GB and GE commands, & may be
used in place of a qualified string argument, provided that
the last execution of a search expression defined a single
appropriate qualified string. This means that
(a)  the execution ended in success, and

(b)  one and only one qualified string not containing the
     qualifiers N or C was matched during the execution.

For example, the following search expressions are suitable for
reference by & as a qualified string

    /shun/
    (/monstrous/ | /crow/)
    (/king/ & N/red/)

In cases where the | operator is used, such as the second
example above, it is not defined which of the alternatives
will be chosen if both appear in the same line. Some search
expressions may define a single qualified string by one of
their alternatives and not by another, for example

    (/Alice/ | (/Tweedledum/ & /Tweedledee/))

Again, it is not defined which alternative will be obeyed if
both match in any one line.

For commands which take a single qualified string argument,
omission of the argument is equivalent to specifying &. Thus

    F/plum pudding/; DTA

is equivalent to

    F/plum pudding/; DTA&

and both have the effect of

    F/plum pudding/; DTA/plum pudding/

Similar anomalous effects can occur for & used as a qualified
string to those described in section 3.5.1 above for & used as
a search expression.

Note that & may only be used to specify a complete qualified
string argument. It may not be used as a qualified string
forming part of a search expression.


                              69

3.5.3 Examples of the Use of &

    UTEOF (F/**/; WH& E&/*/)

This changes all occurrences of multiple asterisks into a
single asterisk. This could also be done concurrently with
other editing by

    ON /**/ (WH& E&/*/)

A common interactive use of & is for "find and exchange"
sequences, such as

    F/resisted/
    E&/rested/

while the use of the | operator is illustrated by

    UTEOF (F(BS/FUNCTION/ | BS/SUBROUTINE/)
           PA&
           IF BS/XYZ/ THEN (F BS/END/;N
              ) ELSE (DF BS/END/;D)
          )

The above command selects from a file containing Fortran
source all the routines whose names begin with the string
"XYZ".

3.6 ERROR HANDLING

ZED distinguishes three sorts of error, soft errors, hard
errors and disastrous errors. Certain errors are disastrous
during initialization, but merely hard thereafter. Others are
soft in non-interactive runs and hard in interactive runs.

All error messages are preceded by two asterisks. Some warning
messages are also output by ZED, without asterisks. The
command WARN- suppresses certain warnings and soft errors (see
section 3.4.20).

A non-zero return code is given by ZED if any errors have been
detected since the last time a line of ZED commands was read
from an interactive command file, or if the STOP command is
obeyed from any command file.


3.6.1 Soft Errors
Soft errors occur as a result of conditions which are well
understood, and which do not prevent further processing. ZED
writes a message to the verification file, sets a non-zero
return code, and continues.


3.6.2 Hard Errors
Hard errors include all errors detected while analyzing lines
of commands. A message is always written to the verification
file and the current line of commands is abandoned. (Recall
that the "current line of commands" may actually include

                              70

several physical lines of input if brackets have been used.)

If the command file and the verification file are attached to
an interactive terminal, or if ERRSTOP- is set (NOT the
default), ZED reads the next line of commands from command
file. Otherwise ZED successively abandons command files until
an interactive state is found, or there are none left, in
which case the ZED run is abandoned with a non-zero return
code.

When ZED continues with a non-interactive command file after
an error as a result of ERRSTOP-, a non-zero return code
remains set. This is cleared subsequently if control ever
reaches an interactive command file during the run.


3.6.3 Disastrous Errors
Disastrous errors include a number of internal consistency
failures, and insufficient store and OPEN errors during
initialization. A message is written to the verification file;
the return code is set to 16 for internal consistency failures
or 12 otherwise, and the ZED run is abandoned.


3.6.4 Overflows and Control Character Errors
During non-interactive processing, passing in a forward
direction a line which is either too long for the output file
for which it is being queued, or which has a significant
control character when the output file has no control
characters is treated as a soft error.

Reading an input line which is longer than the maximum line
length is also a soft error when non-interactive (see MXLL
command in section 3.4.20). The line is split up as necessary.

During interactive processing the above conditions are treated
as hard errors. After giving a message ZED stops at the
offending line if it is a source line, or after the current
command if the error is in an insert line. Further lines of
commands are then read from the terminal.

Output line overflow errors can be suppressed by means of the
SO switch; significant control character errors can be
suppressed by means of the SCC switch (see sections 3.4.20 and
3.7).

Overflow of a fixed format field is always treated as a soft
error.


3.6.5 Store Errors
A number of hard errors related to the use of main store may
occur, the most common being

    Insufficient store [for holding lines]

The parenthesized phrase is present when the store was
requested for holding a line of text.

                              71

The message

    Stack overflow

means that ZED has used up that part of the store which it
sets aside to hold linkage information when obeying nested
command groups or internal subroutines. The default amount of
space allocated to the stack is 800 bytes. This may be changed
by the STACK command (see section 3.4.20).

3.7 CONTROL CHARACTER HANDLING

ZED works internally in terms of ANSI control characters, and
converts lines on input and output if necessary. For files
that do not contain control characters, the conversion
consists of the addition of a space control character on
input, and the removal of the control character on output.

The control character is handled separately, and is not
treated as part of the data in a line. Normal string
operations, marginning, windows, etc. operate only on the data
portion. A special string qualifier C is provided to enable
particular control characters to be searched for, and a
special command CC is provided for setting control characters.

If a file containing control characters other than the default
(space) is being edited to a destination file which does not
contain control characters, the error message

    Control characters not present in output

is given when attempting to pass a line containing a
significant (non-space) control character during interactive
editing. ZED stops at the offending line and waits for further
command input. During non-interactive editing the message

    Significant control character(s) lost

appears, but editing proceeds with the control characters
being removed when the lines are eventually written to the
output file. A non-zero return code is set. In both cases, use
of the command

    SCC+

suppresses the error, and significant control characters are
then removed without any indication when the lines are written
out. Lines still in store on the output queue retain their
control characters.










                              72

                    4. FULL-SCREEN SUPPORT



Full screen editing facilities have been added to ZED as an
'add-on'to the existing line editing features. Full screen
editing is available from IBM 3270 terminals and Cifer 2632
terminals with firmware as customized for the Computer
Laboratory. Because the full screen support is still to some
extent experimental and subject to change, the specification
is available in the datasets SPEC.ZEDFS.INTRO & SPEC.ZEDFS.FULL.
















































                              73

                       5. COMMAND LIST



Argument abbreviations:

 a, b              line numbers (or . or *)
 cg                command group
 m, n              numbers
 q                 qualifier list (possibly empty)
 se                search expression
 s, t              strings of arbitrary characters
 sw                switch value (+ or -)
 name              sequence of letters (4 significant)

Qualifiers:

 B                 beginning
 E                 ending
 C                 control character
 L                 last
 P                 precisely
 W                 word
 U                 uppercase
 S                 significant
 N                 not
 R                 regular expression
 n                 count
 [n,m]             window
 _n,m_             window

Regular expression special characters:

 "                 quoting character
 ?                 wild character
 |                 alternation
 ( )               grouping
 -                 range
 #                 repetition
 ~                 negation

BY FUNCTION

Line Selection (3.4.2)

 Ma                move to line a
 M*                move to end-of-file
 M-                move back as far as possible
 M+                move forward to high water
 N                 move to next line
 P                 move to previous line
 F se              find (forward)
 BF se             backward find






                              74

Line Insertion and Deletion (3.4.3)

Insert material for the I and R commands may be any one of

  <in-line text, any number of lines terminated by Z on its own line>

  BUFF n           to insert an in-store buffer
  COPY n           to insert a copy of an in-store buffer
  /s/              to insert the file with ddname or dsname s

 IC                insert current line
 IS /s/            insert string
 Ia                insert before line a
 Ra b              replace lines a to b
 Da b              delete lines a to b
 DF se             delete find
 DREST             delete rest of source
 DBUFFn            delete contents of buffer n
 DBUFF             delete contents of all buffers

Line Windowing (3.4.4)

 RFn m             restrict find
 RVn m             restrict view
 >                 move character pointer to right
 <                 move character pointer to left
 PR                reset pointer to start
 PA q/s/           point after
 PB q/s/           point before
 EWR               end window right
 EWL               end window left
 EWA q/s/          end window after
 EWB q/s/          end window before

Single Character Operations (3.4.4.2)

 $                 force lower case
 %                 force upper case
_                  change character to space
 #                 delete character

Splitting and Joining (3.4.6)

 SA q/s/           split after
 SB q/s/           split before
 CL /s/            concatenate

Text Inspection (3.4.7)

 Tn                type n lines
 TLn               ditto, with line numbers
 T+                type to high water
 TL+               ditto, with line numbers
 TBUFFn            type buffer n





                              75

String Operations (3.4.5)

 A   q/s/t/        after
 AP  q/s/t/        after and point
 B   q/s/t/        before
 BP  q/s/t/        before and point
 E   q/s/t/        exchange
 EP  q/s/t/        exchange and point
 DFA q/s/          delete from after
 DFB q/s/          delete from before
 DTA q/s/          delete till after
 DTB q/s/          delete till before
 LC q/s/           force lower case
 LCL               force entire line to lower case
 UC q/s/           force upper case
 UCL               force entire line to upper case
 '                 repeat last string operation
 UNDO              undo current line
 SHC q/s/          show column
 CC/s/             set control character

File and Buffer Control (3.4.8)

 C /s/             commands from s
 C BUFF n          commands from buffer n (destructive)
 C COPY n          commands from buffer n
 LCE sw            force editing commands to lower case
 UCE sw            force editing commands to upper case
 FROM BUFF n       select buffer n as source
 TO BUFF n         select buffer n for output
 TBUFFn            type contents of buffer n
 DBUFFn            delete contents of buffer n
 DBUFF             delete contents of all buffers
 SHBUFF            show non-empty buffer numbers
 TO /s/            select dsname or ddname
 TO                select TO
 FROM /s/          select dsname or ddname
 FROM              select FROM
 CF                close all (closeable) files
 CF /s/            close file with ddname s


Conditionals and Loops (3.4.9)

Wherever ELSE may appear, the forms

    ELIF se THEN cg ELSE cg
    ELUL se THEN cg ELSE cg

may also appear.

 IF se THEN cg ELSE cg
 UL se THEN cg ELSE cg

 IFEOF cg ELSE cg  if end-of-file
 ULEOF cg ELSE cg  unless end-of-file
 WH se cg          while
 UT se cg          until

                              76

 UTEOF cg          until end-of-file
 RPT cg            repeat indefinitely
 AGP               abandon group

Margins (3.4.10)

 MAn m             source margins
 MAVn m            verification margins

Fixed Format Fields (3.4.11)

 MFn1 n2 ...       mark fields
 Kn1 n2 ...        temporarily suspend fields

Justification (3.4.12)

 JLn               set justification length
 J sw              enable/disable justification
 RJn m             restrict justification
 VJ sw             justification verification

Global Operations (3.4.13)

 GE q/s/t/         global exchange
 GA q/s/t/         global after
 GB q/s/t/         global before
 ON se cg ELSE cg  complicated global
 CGn               cancel global n
 DGn               disable global n
 EGn               enable global n
 SHGn              show global n
 VG sw             global change verification

State Display (3.4.14)

 SHD               show data
 SHF               show files
 SHG               show globals
 SHS               show switches

Termination (3.4.15)

 W                 windup
 Q                 quit (exit command level)
 STOP              sic (return code 8)

Chinese ZED (3.4.22)

 ^ (circumflex)    introduces Chinese command
Line Verification (3.4.16)

 V   sw            automatic verification
 VI  sw            verify with indicators
 VJ  sw            justification verification
 VG  sw            global change verification
 VN  sw            verify line numbers
 VT  sw            verify line texts
 VWR sw            verify right window

                              77

 VWL sw            verify left window
 VW sw             verify both windows
 VX sw             verify in hex for indicators
 VE sw             verify edits lines
 ?                 verify current line
 !                 ditto, with character indicators

Procedures (3.4.19)

 PROC name cg      define
 SHPROC name       show
 CPROC name        cancel
 DO name           obey

Hexadecimal Mode (3.4.18)

 X sw              switch hex mode on/off

Miscellaneous (3.4.20)

 FN sw             find next mode
 Z /s/             set insert terminator string
 TR sw             trailing spaces
 SQ sw             sequence numbers in output
 SQS sw            source sequence numbers
 Ha                halt at line a
 COMM /s/          comment to verification file
 COLS              )
 COLS n            )verify column numbers
 COLS +            )
 CS sw             compress spaces
 =n                set line number
 BRK sw            enable/disable break-in
 REWIND            sic
 MXLLn             max line length
 WORD /s/          set word characters
 WARN sw           warnings mode
 ERRSTOP sw        non-interactive error action
 SCC sw            suppress control characters
 SO sw             suppress overflow errors
 FLUSH             flush output queue
 STACK n           set stack size to n bytes
 MXSS n            set maximum store size to n bytes
 STORE             show store usage
 MS sw             monitor store usage














                              78

                      6. ALPHABETICALLY



 <                 move pointer left
 !                 verify with character indicators
 $                 force lower case
_                  exchange char for space
 ^ (circumflex)    introduces Chinese command
 %                 force upper case
 >                 move pointer right
 ?                 verify current line
 #                 delete first char
 '                 repeat string alteration
 =n                set line number

 A q/s/t/          after
 AGP               abandon group
 AP q/s/t          after and point

 B q/s/t/          before
 BF se             backwards find
 BP q/s/t/         before and point
 BRK sw            enable/disable break-in

 C /s/             commands from s
 C BUFF n          commands from buffer n (destructive)
 C COPY n          commands from buffer n
 CC /s/            set control char
 CF                close all (closeable) files
 CF /s/            close file s
 CG n              cancel global
 CL /s/            concatenate line
 COLS              )
 COLS n            )output column numbers
 COLS +            )
 COMMENT /s/       output string
 CPROC name        cancel procedure
 CS sw             compress spaces

 Da b              delete
 DBUFF             delete all buffers
 DBUFFn            delete buffer n
 DF se             delete find
 DFA q/s/          delete from after
 DFB q/s/          delete from before
 DG n              disable global
 DO name           obey procedure
 DREST             delete rest of source
 DTA q/s/          delete till after
 DTB q/s/          delete till before

 E q/s/t/          exchange
 EG n              enable global
 EP q/s/t/         exchange and point
 ERRSTOP sw        non-interactive error action
 EWA q/s/          end window after
 EWB q/s/          end window before

                              79

 EWL               end window left
 EWR               end window right

 F se              find
 FLUSH             flush output queue
 FN sw             find next mode
 FROM              select FROM
 FROM BUFF n       select buffer n
 FROM /s/          select alternate source file

 GA q/s/t/         global after
 GB q/s/t/         global before
 GE q/s/t/         global exchange

 Ha                halt at line a

 Ia                insert
 Ia BUFF n         insert buffer n
 Ia COPY n         insert copy of buffer n
 Ia /s/            insert dsname or ddname s
 IC                insert current
 IF se THEN cg ELSE cg if
 IFEOF cg ELSE cg  if end-of-file
 IS /s/            insert string

 J sw              justify
 JLn               justify length

 K n1 n2 ...       suspend fields

 LC q/s/           force lower case
 LCE sw            force editing commands to lower case
 LCL               force entire line to lower case

 Ma                move to line a
 MAn m             margins
 MAVn m            margins for verification
 MFn1 n2 n3 ...    mark fields
 MS sw             monitor store usage
 MXLLn             set max line length
 MXSS n            set maximum store size

 N                 next line

 ON se cg ELSE cg  complicated global

 P                 move to previous line
 PA q/s/           point after
 PB q/s/           point before
 PR                pointer reset
 PROC name cg      define procedure

 Q                 quit (exit command level)

 Ra b              replace
 Ra b BUFF n       replace with buffer n
 Ra b COPY n       replace with copy of buffer n
 Ra b /s/          replace with dataset

                              80

 REWIND            rewind source
 RFn m             restrict find
 RJn m             restrict justification
 RPT cg            repeat
 RVn m             restrict view

 SA q/s/           split after
 SB q/s/           split before
 SCC sw            suppress control chars
 SHBUFF            show non-empty buffer numbers
 SHC q/s/          show column
 SHD               show data
 SHF               show files
 SHG               show globals
 SHPROC name       show procedure
 SHS               show switches
 SO sw             suppress overflow errors
 SQ sw             sequence
 SQS sw            sequence with source line numbers
 STACK n           set stack size
 STOP              stop
 STORE             show store usage

 Tn                type
 TBUFF n           type buffer
 TLn               type with line numbers
 TO                select main output (TO)
 TO BUFF n         select in-store buffer n
 TO /s/            select alternate output file
 TR sw             trailing space control

 UC q/s/           force upper case
 UCE sw            force editing commands to upper case
 UCL               force entire line to upper case
 UL se THEN cg ELSE cg unless
 ULEOF cg ELSE cg  unless eof
 UNDO              undo current line
 UT se cg          until
 UTEOF cg          until end-of-file

 V sw              verify
 VE sw             verify edits
 VG sw             verify globals
 VI sw             verify with indicators
 VJ sw             verify justification
 VN sw             verify line numbers
 VT sw             verify text of lines
 VW sw             verify window
 VWL sw            verify left hand window
 VWR sw            verify right hand window
 VX sw             verify indicators in hex

 W                 windup
 WARN sw           set warning mode
 WH se cg          while
 WORD /s/          specify word characters

 X sw              hexadecimal

                              81

 Z /s/             set insert terminator

























































                              82

INDEX

. 10, 17

( 14, 17

+ 17

| 16, 27

& 16, 16, 27, 67

! 41, 58

$ 34

* 10, 17
**** 28
***ATTN 18

) 14, 17

- 17

/* 13

% 34

? 41, 58

: 14

' 55

= 63

[ 22

] 22

A 8, 36
after 8, 36
   and point 37
AND 16, 27
AP 37
arguments string 15
attention 18
ATTN 18

B 8, 20, 36
   qualifier 7, 20
backslash 14
backwards find 6, 30
Before 8
before 10, 20, 36
   and point 37
beginning qualifier 7
BF 6, 30
BP 37
bracket 14, 17
   square 22
brackets 11
BREAK 18
BRK 63
BUFF 31
buffers 31, 41

C 21, 42
   qualifier 21
cancelling globals 55
carriage control character 39
case changing 38
CC 39
ceiling 62
cent 14
CF 43, 45
CG 55
character changes 53
   control 39
   delete 35
   operations 34
   pointer 35
Chinese zed 67
CL 40
close file 45
COLS 62
column 22
command conditional 46
   control 41
   decoding 19
   files 42
   group 11, 17
   names 14
   repetition 17
   syntax 14
comment 11
COMMENT 62
compress spaces 62
concatenate line 40
conditional commands 46
control character 39, 71
   character errors 70
   characters 21
count qualifier 7, 9, 22
CPROC 61
CS 62
current line 5, 8, 10, 17, 29, 30

D 31
data show 56
DBUFF 42
decoding 19
delete 31
   buffer 42
   character 35
   from after 38
   from before 38
   lines 9
   part line 38
   till after 38
   till before 38
delimiter 6, 15
   characters 6
DF 67
DFA 38
DFB 38
DG 55
disable global 55
disasterous errors 70
DO 61
DREST 32
DTA 38
DTB 38

E 8, 20, 36
   qualifier 7, 20
edit verification 59
EDITS 13
EG 55
ELIF 46
ELSE 46
ELUL 46
empty string 7
enable global 55
end 20
   of dataset 10
   of file handling 28
   of source 10, 17
   window before 34
   window left 34
   window right 34
ending qualifier 7
EP 37
EPRINT 14
error control character 70
   disasterous 70
   handling 69
   hard 69
   messages 64
   soft 69
   store 70
ERRSTOP 65
escape combinations 59
EWA 34
EWB 34
EWL 34
EWR 34
exchange 8, 36
   and point 37
expression search 16

F 6, 30
fields fixed format 49
files show 56
find 6, 30
   backwards 6
   window 35
finishing 57
   instream data 10
first line 17, 66
fixed format fields 49
flow of control 48
FLUSH 65
FN 30, 61
FROM 13, 43, 66
   BUFF 44

GA 53
GB 53
GC 53
GE 53
global 53
   after 53
   before 53
   cancelling 55
   disable 55
   enable 55
   exchange 53
   looping 56
   show 56
   verification 57
group command 17

H 62
halt 62
hard errors 69
hexadecimal 60
   mode 15
   verification 58

I 43
IC 30
IF 46
index text 35
indicators verification 58
input files 41, 43
insert 43
   line 30
   lines 10
   single line 10
   string 30
instream data 10
   terminator 61
INTRPT 18
IS 10, 30

joining lines 39
justification text 50
justified lines verification 51

L 21
   qualifier 9, 21
last 9, 21
   line 17
   search expression 16
LC 38
LCE 42
LCL 38
left 21
leftwards 9
line counting 5
   current 5
   deleting 9
   deleting part 38
   deletion 30
   first in store 17
   insertion 30
   last in store 17
   length 30, 63
   next 5
   non-original 20
   number 17, 63
   number verification 57
   numbers 5
   original 20
   previous 6
   verification 57
   windowing 32
LIST 14
long lines 30
looping globals 56
loops 47
   flow of control 48
lower case 38, 42

M 5, 17, 29
MA 48
margins 48
   verification file 48
mark fields 49
MAV 48
maximum store size 65
MF 49
monitor store 66
move 5, 17, 29
MS 66
MXLL 20, 30, 63
MXSS 65

N 5, 21, 23, 29
   qualifier 7, 21, 23
name 16
negates 21
negating qualifier 7
next 29
   line 5
non-original lines 20
not 7, 21
   beginning 21
number 17
   line 5

ON 54
operational window 32
OR 16, 27
original lines 20
output files 41
   processing 27
overflow suppress 65
overflows 70

P 6, 21, 29
   qualifier 7, 21
PA 33
PB 34
point after 33
   before 34
pointer 33
   reset 33
PR 33
precisely 21
   qualifier 7
previous 29
   line 6
PROC 61
procedures 61
program state 56
prompts 18

Q 11, 57
qualified strings 7, 15
qualifier 7, 15
   B 7, 20
   C 21
   count 7, 9, 22
   E 7, 20
   L 9, 21
   N 7, 21, 23
   P 7, 21
   R 23
   S 8, 21
   U 21
   W 8, 21, 22
quit 11, 57

R 10, 23, 31, 43, 60
   qualifier 23
regular expression 23, 60
repeat 47
   counts 11
replace 10, 31, 43
restrict justification 51
   view 32
REWIND 63, 66
RF 36
RJ 51
RPT 17, 47
RV 32

\ 11, 14

S 21
   qualifier 8, 21
SA 40
SB 39
SCC 65, 71
search 6
   expression 16, 27
   expression last 16
   word 8
semicolon 14
sequence numbers 62
SHBUFF 41
SHC 39
SHD 56
SHF 56
SHG 56
show column 39
   data 56
   files 56
   globals 56
   switches 56
SHPROC 61
SHS 56
significant 8, 21
SO 65
soft errors 69
source end 17
spaces compress 62
   trailing 62
split after 40
   before 39
splitting lines 39
SQ 62
SQS 62
square bracket 22
STACK 65
STOP 57
stopping 57
   instream data 10
STORE 66
store errors 70
   monitor 66
   size 65
string 15
   alterations 36
   arguments 15
   delimiter 15
   qualified 15
suppress overflow 65
switch 17
   show 56
   verification 57

T 40
TBUFF 41
terminating 57
   a ZED run 11
   instream data 10
terminator 61
text justification 50
   verification 58
TL 41
TO 13, 44, 45
   BUFF 44
TR 62
trailing spaces 62
type 40
   line 41

U 21
   qualifier 8, 21
UC 38
UCE 42
UCL 38
UL 46
underline 35
UNDO 39
unless 46
UNTIL 47
upper case 21, 38, 42
   case qualifier 8
UT 47, 47
UTEOF 47

V 18, 57
VE 59
VER 13
verification 57
   file margins 48
   global 57
   hexadecimal 58
   indicators 58
   line 57
   line number 57
   text 58
verify edits 59
   justified lines 51
   window 58
VG 19, 57
VI 41, 58
VJ 18
VN 57, 59
VSAM 13
VT 58
VW 58
VWL 58
VWR 58
VX 58

W 11, 21, 22, 57
   qualifier 8, 21, 22
WARN 64
warning messages 64
WH 47, 55
while 47, 54
window 22
   after 34
   before 34
   end 34
   line 32
   operational 32
   verification 58
windup 11, 57
word 21
WORD 21, 64
word search 8
WORK 13

X 60

Z 10, 61

35

Return to CUCPS home page
Return to University of Cambridge home page


Contact: CUCPS Committee (soc-cucps-committee@lists.cam.ac.uk)
Last updated: $Date: 1998/11/19 22:32:05 $