Google
 

Trailing-Edge - PDP-10 Archives - bb-m836d-bm - tools/sed/sed.rnm
There are 13 other files named sed.rnm in the archive. Click here to see a list.
.PS 60 68 .autop
.VAR OLDTAB A B
.VAR DOTAB A B
.VAR TOPS20 A B
.FLAG MACRO {
.DEFINE DATE   August 1983
.DEFINE TERMNL VT100 and [VT52]
.DEFINE ENTER  PF1 [KEYPAD-BLUE]
.DEFINE CURLFT LEFT
.DEFINE CURRGT RIGHT
.DEFINE CURUP  UP
.DEFINE CURDWN DOWN
.DEFINE CURHOM PF3 [KEYPAD-BLACK]
.DEFINE ROLBKP _^A
.DEFINE ROLBKL _^W
.DEFINE SRCBAK _^E
.DEFINE SRCFWD _^R
.DEFINE ROLFWL _^T
.DEFINE ROLFWP _^Y
.DEFINE INSSPS _^K
.DEFINE DELSPS _^L
.DEFINE INSLIN _^D
.DEFINE DELLIN _^F
.DEFINE PUT    _^G
.DEFINE SETFIL _^B
.DEFINE TAB    _^I
.DEFINE ENTCCH _^O
.DEFINE PERCGO _^P
.DEFINE CLRLIN not implemented
.DEFINE EXECUT _^X
.DEFINE EXIT   _^Z
.DEFINE ABORT  _^C
.DEFINE RECALL PF2 [KEYPAD-RED]
.DEFINE INSMOD KEYPAD-ENTER
.DEFINE DELCHR BACKSPACE
.DEFINE REALTB KEYPAD-0
.DEFINE MARK   KEYPAD-7
.DEFINE LINE   not implemented
.DEFINE CASE   KEYPAD-9
.DEFINE WINDOW KEYPAD-1
.DEFINE ERSLIN _^J
.DEFINE RESET  RUBOUT or DELETE
.DEFINE UPTAB  KEYPAD-8
.DEFINE DWNTAB KEYPAD-2
.DEFINE REWRIT KEYPAD-5
.DEFINE HELPER KEYPAD-3
.DEFINE SAVER  PF4 [_^__]
.DEFINE BEGLIN KEYPAD-4
.DEFINE ENDLIN KEYPAD-6
.DEFINE ERASWD KEYPAD-.
.DEFINE SUBSTI _^~
.DEFINE TBSET  ESC-S
.DEFINE JUSTI  ESC-J
.DEFINE MARKER ESC-M
.IFNOT OLDTAB
.DEFINE PICK   _^V
.DEFINE BAKTAB _^U
.DEFINE SWITCH _^N
.DEFINE SLDLFT KEYPAD-- [ESC-L]
.DEFINE SLDRGT KEYPAD-, [ESC-T]
.ELSE OLDTAB
.DEFINE PICK   _^K
.DEFINE BAKTAB _^N
.DEFINE SWITCH _^V
.DEFINE SLDLFT _^L
.DEFINE SLDRGT _^U
.ENDIF OLDTAB
.IF TOPS20
.DEFINE PUSHER _^_\
.ENDIF TOPS20
.HEADER BOTTOM
.IF DOTAB
.TA 0 TABLE OF CONTENTS
.ENDIF DOTAB
.C;TUTORIAL FOR THE SED SCREEN EDITOR
.C;A Christopher Hall - {DATE

.IFNOT TOPS20
.C;(Operating system:  TOPS-10#--#Terminal described: {TERMNL)
.ELSE TOPS20
.C;(Operating system:  TOPS-20#--#Terminal described: {TERMNL)
.ENDIF TOPS20

.LIT
                         TABLE OF CONTENTS

1.0  GETTING ACQUAINTED WITH SED   . . . . . . . . . . . . . . .  3
       1.1  The Viewing Window Concept   . . . . . . . . . . . .  3
       1.2  The Cursor - Where It's At   . . . . . . . . . . . .  3
       1.3  How to Talk to the Editor  . . . . . . . . . . . . .  3
2.0  HOW TO START WRITING A FILE   . . . . . . . . . . . . . . .  5
       2.1  Running the Editor   . . . . . . . . . . . . . . . .  5
       2.2  Exiting the Editor   . . . . . . . . . . . . . . . .  5
       2.3  Moving the Cursor Around   . . . . . . . . . . . . .  5
       2.4  Putting Text in the File   . . . . . . . . . . . . .  6
       2.5  Inserting and Deleting Characters  . . . . . . . . .  6
       2.6  Moving the Screen Forward and Backward in the File .  7
3.0  EDITING AN EXISTING FILE, PART 1  . . . . . . . . . . . . .  8
       3.1  Introduction to Commands and Parameters  . . . . . .  8
       3.2  On-line Help   . . . . . . . . . . . . . . . . . . .  9
       3.3  Getting Back Into Last Time's File   . . . . . . . .  9
       3.4  Rolling the Screen a Long Distance   . . . . . . . .  9
       3.5  Moving to the Beginning and End of the File  . . . . 10
       3.6  Inserting and Deleting Lines and Spaces  . . . . . . 10
       3.7  Copying or Moving Lines of Text  . . . . . . . . . . 11
4.0  EDITING AN EXISTING FILE, PART 2  . . . . . . . . . . . . . 13
       4.1  Compiling After Exiting  . . . . . . . . . . . . . . 13
       4.2  Searches   . . . . . . . . . . . . . . . . . . . . . 13
       4.3  Setting Tabs - Word-wise Tab and Backtab   . . . . . 13
       4.4  Inserting Text in the File Using <PUT>   . . . . . . 14
       4.5  Changing Files while Editing   . . . . . . . . . . . 15
       4.6  Recovering Deleted Stuff . . . . . . . . . . . . . . 16
5.0  EDITOR GOODIES  . . . . . . . . . . . . . . . . . . . . . . 17
       5.1  Defining Parameters by Moving the Cursor   . . . . . 17
       5.2  Moving a Given Percent of the Way Through the File . 18
       5.3  <SWITCH>: Setting Switches or Querying Status  . . . 18
       5.4  <ERASE-LINE>: Erase from Cursor to End of Line   . . 20
       5.5  How to Edit Parameters   . . . . . . . . . . . . . . 20
6.0  MORE EDITOR GOODIES   . . . . . . . . . . . . . . . . . . . 21
       6.1  Marking Positions in the File  . . . . . . . . . . . 21
       6.2  Rectangular Insert/Delete Spaces   . . . . . . . . . 21
       6.3  Tokens   . . . . . . . . . . . . . . . . . . . . . . 21
       6.4  Picking or Deleting a Lot of Stuff   . . . . . . . . 22
       6.5  Scanning   . . . . . . . . . . . . . . . . . . . . . 22
       6.6  Changing the Case of Characters  . . . . . . . . . . 22
       6.7  Setting or Clearing the Split-Screen Window  . . . . 23
       6.8  Erasing Words From the File  . . . . . . . . . . . . 23
       6.9  Substituting (Search and Replace)  . . . . . . . . . 23
7.0  USEFUL COMMANDS FOR SPECIAL CASES   . . . . . . . . . . . . 25
       7.1  What to Do if the File is Wide   . . . . . . . . . . 25
       7.2  How to Put Control Characters in the File  . . . . . 25
       7.3  Many Ways to Save the File   . . . . . . . . . . . . 25
       7.4  Repairing a Fragged Screen   . . . . . . . . . . . . 26
       7.5  Justifying Text  . . . . . . . . . . . . . . . . . . 26
       7.6  Repeating Commands or Inventing Your Own   . . . . . 27
.EL
.IFNOT TOPS20
.LIT
       7.7  Setting Up Default Switches in SWITCH.INI, SED.INI . 26
.EL
.ELSE TOPS20
.LIT
       7.7  Setting Up Default Switches in SED.INIT  . . . . . . 26
       7.8  Calling the EXEC from SED  . . . . . . . . . . . . . 26
.EL
.ENDIF TOPS20
.PG
.PS 58 68
.I0
.HL 1 GETTING ACQUAINTED WITH SED

This document describes the screen editor SED. It is a tutorial which
introduces a new editor user gradually to the features of the editor.
The first sections give only as much information as you need to
get started; later sections introduce you to the full power of SED.

This tutorial does not give a complete description of SED. In fact, if you
never go beyond it you will miss a lot of the interesting and useful editor
features. The reference manual, DOC:SED.DOC, is a complete description of all
the editor functions. When you have mastered the contents of this tutorial
you should consult the reference manual.

.I0
.HL 2 THE VIEWING WINDOW CONCEPT

SED thinks of a text file as if it were a scroll of writing -
lots and lots of lines of text, one line after another. The CRT terminal
screen is like a magnifying glass held over the scroll: it shows a certain
number of lines and a certain number of characters per line, but the file
may extend beyond the limits of the glass on all sides. Like the magnifying
glass, the terminal screen can be moved forward, backward, left, or right
over the file.

The terminal screen is called the "viewing window" into the file. Moving
the window forward or backward in the file is called "rolling" the window,
and moving it left or right is called "sliding".

.I0
.HL 2 THE CURSOR - WHERE IT'S AT

The cursor is the blot or blinking dash that is always present on the
terminal screen. It represents your position in the file you are editing. If
you type a character it appears where the cursor is and the cursor moves one
space to the right. You can move the cursor anywhere you like on the screen.

.I0
.HL 2 HOW TO TALK TO THE EDITOR

You can do three types of things with SED: put text in the file, move
the cursor around, and issue editor commands. Editor commands do such things
as insert blank lines or spaces into the text, move the viewing window
around, and search for things. Descriptions of the various commands make up
the bulk of this tutorial.

You issue a command by typing a control character, a special key, or
an escape sequence. You type a control character by holding down the
button labeled "CTRL" and pressing a letter key (for example, to get a
_^T press "CTRL" and "T").

Special keys are keys which are off to the side of the normal keyboard. Not
all terminals have them, and how many and where they are vary from terminal
to terminal. The program you are running can say what action will be taken
when a special key is pressed. The editor understands special keys to be
commands. But which commands depends on the installation. See the
terminal-dependent information or ask a systems person.

You get an escape sequence by typing the "ESCAPE" or "ALTMODE" character
followed by some other character. For example, the command <INSERT-MODE>
might be invoked by the sequence ESC Q, meaning that the user should
type the two characters ESCAPE and "Q" to get the <INSERT-MODE> command.

.PG
.HL 1 HOW TO START WRITING A FILE

To get started with SED you only need to know how to put text into
your file and how to reach parts of the file which are below the bottom
or above the top of the screen. This section covers the following topics:

.S1 .LIT
        RUNNING AND EXITING THE EDITOR
        MOVING THE CURSOR AROUND
        TYPING TEXT INTO THE FILE
        INSERTING AND DELETING CHARACTERS
        MOVING THE SCREEN FORWARD AND BACKWARD IN THE FILE
.EL

.I0
.HL 2 RUNNING THE EDITOR

Run SED by typing:

.IFNOT TOPS20
.S1 .LIT
        .R SED;FILE.EXT         or
        .R SED;FILE.EXT=
.EL
.ELSE TOPS20
.S1 .LIT
        @SED FILE.EXT           or
        @SED FILE.EXT=
.EL
.ENDIF TOPS20

Either form will find the given file (in this case, FILE.EXT) if it exists.
If the file does not exist, the first form will give you a "File not found"
error message; the second form will create the file and let you edit it.

Also, switches can be included along with the filespecs. The switches
are described under the <SWITCH> command, which comes later. In any case, the
syntax is
.IFNOT TOPS20
".R SED;FILE.EXT/SWITCH/SWITCH".
.ELSE TOPS20
"@SED FILE.EXT/SWITCH/SWITCH".
.ENDIF TOPS20

.I0
.HL 2 EXITING THE EDITOR

Exit SED by typing <EXIT> ({EXIT) to save your editing session or <ABORT>
({ABORT) to forget it.

<EXIT> will save all the changes you have made in your file. The file will
be "backed up", that is, a copy of the file the way it was before the
editing session will be saved. The backup file has the same name as the
regular file, and the extension .BAK.

<ABORT> exits the editor and leaves the file the way it was before editing
began.

.I0
.HL 2 MOVING THE CURSOR AROUND

The cursor is the blinking dash or blot on the screen. If you type a character
it appears where the cursor is and the cursor moves one place to the right.
While editing the cursor can be moved anywhere on the screen without changing
your file. Then when a character is typed it will appear where the cursor is,
both on the screen and in the file.

The cursor can be moved up, down, left, and right by typing one of the
keys with an arrow on it. The direction of the arrow indicates the direction
which the cursor will move. There is also a way to move the cursor
"home", which means the upper left corner of the screen; type {CURHOM.

There are other cursor moving commands. <RETURN> (or <CARRIAGE-RETURN>) moves
the cursor to the start of the next line. The <TAB> key (and {TAB) moves to
the next tab stop (tab stops are set to be every 8 characters). And <BACKTAB>
({BAKTAB) moves to the previous tab stop.

There are four more cursor movers. <BEG-LINE> ({BEGLIN) and <END-LINE>
({ENDLIN) move to the beginning and end of the line, respectively. <UP-TAB>
({UPTAB) moves up six lines as if you typed six <CURSOR-UP>s. And <DOWN-TAB>
({DWNTAB) moves down six lines.

Some implementations of SED may use the <LINE> command ({LINE) in place of
<BEG-LINE> and <END-LINE>. <LINE> moves the cursor to the start of the line
it is on. If the cursor already is at the start of the line, <LINE> will
move it to the end of the line. So <LINE><LINE> will usually get you to
the end of the line.

.I0
.HL 2 PUTTING TEXT IN THE FILE

To put text in the file, just type it. The text will appear where the
cursor is. Use the cursor movement commands described above to move the
cursor to the location on the screen where you want the text to be.
The editor makes sure that the screen and the file always look the same.

To replace one character with another, move the cursor to the offending
character and type the correct one on top of it. That's all there is to it.

There are ways of inserting words in the middle of lines you have already
typed, of breaking a line in two or combining two lines into one, of
inserting blank lines, and of deleting lines or characters that are not
wanted. All of these, and a lot more besides, will be covered in later
sections of this tutorial.

.I0
.HL 2 INSERTING AND DELETING CHARACTERS

If you want to insert a word between two other words type <INSERT-MODE>
({INSMOD). Then characters you type, instead of replacing the ones in the
file, will be inserted where the cursor is. The rest of the line will
move to the right as you type.

You can get out of insert mode and back into replace mode by typing
<INSERT-MODE> again.

You can delete the character you just typed by typing <DELETE-CHARACTER>
({DELCHR). The character to the left of the cursor will be deleted from
the line. If that character is a tab, the entire tab is deleted. If the
cursor is at the start of a line, <DELETE-CHARACTER> has no effect.

There are other ways both to insert and to delete text. These will be
covered later.

.I0
.HL 2 MOVING THE SCREEN FORWARD AND BACKWARD IN THE FILE

If you type on the bottom line of the screen and then type a carriage
return the screen will roll one line. That is, the top line disappears,
the other lines move up, and a blank line appears at the bottom. The top
line has not been deleted; it is simply above the viewing window.

You can get the lines above the viewing window back by typing
<ROLL-BACKWARD-LINES> ({ROLBKL). This command does the opposite of the above:
lines disappear from the bottom, the remaining lines roll down, and lines
which were above the screen appear at the top. <ROLL-BACKWARD-LINES> will
attempt to roll about 8 lines, but it won't go farther than the beginning
of the file (so if you're at the start of the file and type the command
nothing will happen).

Similarly, you can roll the screen forward about 8 lines by typing the
<ROLL-FORWARD-LINES> command ({ROLFWL).

.PG
.HL 1 EDITING AN EXISTING FILE, PART 1

The preceding section did nothing more than get you started. You can do a lot
more than just typing, inserting, and deleting text. This section gives you
a taste of the full power of SED.

These topics are covered in this section:

.S1 .LIT
        INTRODUCTION TO COMMANDS AND PARAMETERS
        ON-LINE HELP
        EDITING LAST TIME'S FILE
        ROLLING THE SCREEN A LONG DISTANCE
        MOVING TO THE BEGINNING AND END OF THE FILE
        INSERTING OR DELETING LINES OR SPACES
        COPYING OR MOVING LINES OF TEXT
.EL

.I0
.HL 2 INTRODUCTION TO COMMANDS AND PARAMETERS

You know how do roll the screen: just type one of the <ROLL-LINES> commands,
{ROLFWL for <ROLL-FORWARD-LINES> or {ROLBKL for <ROLL-BACKWARD-LINES>.
Actually, there's more to the general command format than that.

Each command takes a parameter, which is a value or string used by the
command. For example, the parameter for the <ROLL-LINES> commands above is
the number of lines to roll. Initially there is a default parameter, in this
case, 8 lines. But you can change the parameter to be any (positive) value
you want; the screen will then roll that many lines until you change the
value again.

To give a parameter to a command, type

.S1 .LIT
        <ENTER><parameter><COMMAND>
.EL .S1
The word <ENTER> means that you press the <ENTER-PARAMETER> key ({ENTER).
By doing so you tell SED that what you are about to type is a command
parameter, not a piece of text.

<Parameter> is whatever value you want to give to the command (don't type
the angle brackets). It could be the number of lines or spaces to do something
with, the key to search for, or the text to insert, depending on what the
command expects. As each command is explained its parameters will be
described.

<COMMAND> is the command; the control character, special key, or escape
sequence which does the job you want.

You can even edit parameters. <CURSOR-LEFT> will delete the most recent
character typed; <BACKTAB> ({BAKTAB) will delete the latest word; and
<ERASE-LINE> ({ERSLIN) will delete the entire parameter. To kill the entire
parameter and get out of ENTER mode, type the <RESET> command ({RESET).

So if you want the screen to roll 4 lines at a time, type

.S1 .LIT
        <ENTER>4<ROLL-FORWARD-LINES>
.EL .S1
where <ENTER> is {ENTER and <ROLL-FORWARD-LINES> is {ROLFWL. The screen will
roll 4 lines. If you want to roll another 4 lines, just type

.S1 .LIT
        <ROLL-FORWARD-LINES>
.EL

Certain pairs of commands share a single parameter. If you set up to roll
forward 4 lines at a time, you will roll backward 4 lines too. This sharing
is done where it is natural and expected, like the key for searching forward
or back, the number of lines to insert or delete.

.I0
.HL 2 ON-LINE HELP

You can get information about any command while you are editing. Type <HELP>
({HELPER), or <ENTER> twice, then the command you want help with. Try it.

<HELP><HELP> gives a diagram of how SED's commands are laid out on the
terminal.

.I0
.HL 2 GETTING BACK INTO LAST TIME'S FILE

You don't have to tell SED which file you want to edit every time. Say
you were editing THING.GIG and you exited, then later you want to make some
more changes to THING.GIG. You only have to type

.IFNOT TOPS20
.S1 .LIT
        .R SED
.EL .S1
.ELSE TOPS20
.S1 .LIT
        @SED
.EL .S1
.ENDIF TOPS20
and you will be back in THING.GIG. In fact, you will be set up at the
exact page and cursor position that you were at when you exited. You
don't have to start at the beginning of the file each time you edit it.

.I0
.HL 2 ROLLING THE SCREEN A LONG DISTANCE

You can now roll the screen forward or backward any number of lines you want.
However, if the file is long and you want to get to a place several
screens-full away, it would be awkward to figure out how many lines to roll.
There are two other commands for long-distance rolls: <ROLL-FORWARD-PAGES>
and <ROLL-BACKWARD-PAGES> ({ROLFWP and {ROLBKP). A page is defined as one
screen-full of lines (about 24).

So if you type <ROLL-FORWARD-PAGES> the entire screen will be rewritten,
and the new line at the top of the screen will be the one beneath the
line previously at the bottom of the screen.

The parameter to the <ROLL-PAGES> commands is, naturally, the number of pages
to roll. It is shared by the two commands (ie, setting it for one sets it for
the other, too).

.I0
.HL 2 MOVING TO THE BEGINNING AND END OF THE FILE

There are easy ways to get to the beginning and the end of your file.
To get to the beginning type

.S1 .LIT
        <ENTER>0<PERCENT-GOTO>
.EL .S1
where the <PERCENT-GOTO> command is {PERCGO. To get to the end type

.S1 .LIT
        <ENTER><PERCENT-GOTO>
.EL .S1
that is, just <ENTER> and the command, with no parameter.

The full implications of the <PERCENT-GOTO> command will be covered later.

.I0
.HL 2 INSERTING AND DELETING LINES AND SPACES

So far, as long as you have been typing stuff into your file things have
been all right. But suppose you wanted to add a word, or even a line of
text, in the middle of what you'd already done? This section shows you
two commands, <INSERT-SPACES> and <INSERT-LINES>, which add air holes to
your file, and two commands, <DELETE-SPACES> and <DELETE-LINES>, which remove
unwanted stuff from the file.

The <INSERT-SPACES> command is {INSSPS. It inserts a space in your file where
the cursor is. The parameter to <INSERT-SPACES> is the number of spaces to
insert.

<DELETE-SPACES> ({DELSPS) deletes characters (not just spaces) where the cursor
is. It shares its parameter with <INSERT-SPACES>.

The <INSERT-LINES> command ({INSLIN) inserts a blank line where the cursor
is. If the cursor is not at the left margin the line it is on will be
broken in two at the cursor position. The parameter to <INSERT-LINES> is the
number of lines to insert.

<DELETE-LINES> ({DELLIN) does the opposite of <INSERT-LINES>, and shares its
parameter. If you delete something accidentally using <DELETE-LINES>, you
can get it back by typing

.S1 .LIT
        <ENTER><PUT>
.EL .S1
where the <PUT> command is {PUT. <PUT> does a lot of things; it will be
described in gruesome detail later.

.S1 .I0
EXAMPLES

Say the cursor is at the "f" of "five" and you type <INSERT-SPACES>:

.S1 .LIT
BEFORE:         Pack my box with five dozen liquor jugs.

AFTER:          Pack my box with  five dozen liquor jugs.
.EL

You then type <ENTER>3<DELETE-SPACES>:

.S1 .LIT
AFTER:          Pack my box with ve dozen liquor jugs.
.EL

You type <INSERT-LINES>:

.S1 .LIT
AFTER:          Pack my box with
                ve dozen liquor jugs.
.EL

Then you type a <CARRIAGE-RETURN> to get to the "v" and type
<ENTER>2<INSERT-LINES>:

.S1 .LIT
AFTER:          Pack my box with


                ve dozen liquor jugs.
.EL

.I0
.HL 2 COPYING OR MOVING LINES OF TEXT

SED has two buffers which hold text from the file: the delete buffer
and the pick buffer. "Deleting" text means removing it from the file and
putting it in the delete buffer; "picking" text means loading it into the
pick buffer without changing the edited file. The contents of either buffer
can be inserted anywhere in the file, or in another file if you wish.

You have already met the delete command: <DELETE-LINES> ({DELLIN). Its
parameter is the number of lines to remove (you can remove parts of lines,
too. See the reference manual, but don't worry about it until you are
comfortable with the editor). You can put those lines back in the file by
typing <ENTER><PUT> (the <PUT> command is {PUT).

To pick up lines of the file, that is, to load the pick buffer but not affect
the file, use the <PICK> command ({PICK). As with <DELETE-LINES>, the
parameter is the number of lines to pick. To insert the lines back in the
file, type just <PUT>.

Thus <PUT> is the command which writes out the pick or delete buffer. <PUT>
writes the pick buffer and <ENTER><PUT> writes the delete buffer. Use the
<PICK> command to duplicate lines from your file; use <DELETE-LINES> to move
stuff from one place to another.
.PG
.HL 1 EDITING AN EXISTING FILE, PART 2

This section describes more useful commands, plus a couple of new features
of commands you already know. Wir handlen:

.S1 .LIT
        COMPILING AFTER EXITING
        SEARCHES
        SETTING TABS - WORD-WISE TAB AND BACKTAB
        INSERTING TEXT IN THE FILE USING <PUT>
        CHANGING FILES WHILE EDITING
        RECOVERING DELETED STUFF
.EL

.I0
.HL 2 COMPILING AFTER EXITING

If you exit by typing <ENTER><EXIT> SED will save your file and execute
your latest compile-class command (COMPILE, LOAD, DEBUG, EXECUTE, etc.).

.I0
.HL 2 SEARCHES

You can search for any text string by typing

.S1 .LIT
        <ENTER><string><SEARCH-FORWARD>
.EL .S1
where <string> is your search key (without the brackets) and <SEARCH-FORWARD>
is {SRCFWD. The file will be searched from the cursor position to the
end (if necessary), and the cursor will be positioned at the start of the
next occurrence of <string>. Similarly you can search from the cursor
position backwards to the beginning of the file using the <SEARCH-BACKWARD>
command ({SRCBAK).

You can abort a losing search by typing RUBOUT.

You can set up the current search key as a parameter by typing <ENTER>S<RECALL>
(<RECALL> is {RECALL). You can then edit the key and use it for another
search (or as the parameter for any other command). Likewise, typing
<ENTER>O<RECALL> will get back the previous search key.

.S1 .I0
Hint: Searches will go faster if the first character of the key is infrequent
in the file. If you want to look for "EXEC" in a large file, try "XEC"
instead.

.I0
.HL 2 SETTING TABS - WORD-WISE TAB AND BACKTAB

Tab stops are set every 8 positions. You can change them to be any constant
interval by typing <ENTER>T:n<SWITCH> (where n is the interval and <SWITCH>
is {SWITCH). You can also set or clear a tab in any column. To set the tab,
move the cursor to the column and type <TAB-SET> (<TAB-SET> is {TBSET). To
clear the tab, type <ENTER><TAB-SET>.

(<ENTER>D<TAB-SET> displays a ruler containing the current tab settings
on the bottom line of the screen).

<TAB> and <BACKTAB> can also be set up to move to the start of the next (or
previous) word or to the end of a line. To set up these "word-wise" tabs,
type

.S1 .LIT
        <ENTER>T:W<SWITCH>
.EL .S1
where "T:W" are the three characters T, :, W; and <SWITCH> is {SWITCH.
<SWITCH> is a command which sets editor switches, and you are telling it
that you want word-wise tabs. You can get regular tabs back by typing
<ENTER>T<SWITCH> or <ENTER>T:R<SWITCH>.

When you have set up word-wise tabs, you will get the following effects:

.S1 .LIT
CURSOR AT:           <TAB> MOVES TO:         <BACKTAB> MOVES TO:

within the line      start of next word      start of previous word
start of line        start of next word      end of previous line
last word of line    end of line             start of previous word
beyond end of line   next 8-space tab stop   start of last word of line
.EL .S1
Word-wise tabs are a lot more fun than regular tabs.

.I0
.HL 2 INSERTING TEXT IN THE FILE USING <PUT>

You can already insert text by using <INSERT-MODE> or by opening up a hole
using <INSERT-SPACES> and then typing the text over the hole. However, the
easiest way is to use the <PUT> command. Type

.S1 .LIT
        <ENTER><string><PUT>
.EL .S1
where <string> is whatever you want to insert and <PUT> is {PUT. This has the
same effect as opening spaces and typing over them. The string is inserted
where the cursor is.

Furthermore, the editor remembers the string, so if you want to put it
somewhere else you can move there and type <PUT> and the same string will be
inserted at the new location.

.I0
.HL 2 CHANGING FILES WHILE EDITING

If you are editing a file and you want to do something to a second file, you
can get to it by typing

.S1 .LIT
        <ENTER><file2><SET-FILE>
.EL .S1
where <file2> is the filespecs for your second file and the <SET-FILE> command
is {SETFIL. SED will save the first file (but remember where you
are) and display the first page of the second file for editing. You can
return to the first file by typing just <SET-FILE>. Then you can get back to
the second file by typing another <SET-FILE>.

You can even toggle back and forth between two positions in the same file.

When you exit SED your positions in both files are remembered.

If you do not give an extension in your filespecs SED will try several
as defaults. First it will try to find the file with no extension.
.IFNOT TOPS20
If that fails it will use the device as the extension (so if your filespec
is "HLP:DIRECT" SED will try "HLP:DIRECT.HLP". If you don't give
a device (or if the device is DSK:) this step is skipped.
.ENDIF TOPS20

Next SED will try the extension of the file you were last editing.
If you were editing FOO.BAR and your filespec is "SAND" SED will look
for "SAND.BAR". Thus you can jump around among a family of files by
typing only the file name.

If all this fails SED will try each of the following extensions:
MAC, TXT, RNO, FOR, CBL, DAT. If all of these fail you will (finally)
get the "File not found" error message.

.IFNOT TOPS20
<SET-FILE> understands SFD's, and has it's own way of deciding SFD defaults
(as described in the reference manual).
.ENDIF TOPS20

The name of the file being edited can be changed using the /OUT: switch.
For example, typing

.S1 .LIT
        <ENTER>FOO.BAR/OUT:FUBAR.MAC<SET-FILE>
.EL .S1
will set up FOO.BAR for editing. The file will be saved (on exit, another
<SET-FILE>, the <SAVE-FILE> command, or incremental saves) as FUBAR.MAC.
Also, the name of the current file can be changed, for example, by:

.S1 .LIT
        <ENTER>OUT:THING.GIG<SWITCH>
.EL .S1
(<SWITCH> is {SWITCH). This will change the name of the current file to
THING.GIG.

There are also other switches which apply to <SET-FILE>, and other useful
features. See the <SET-FILE> and <SWITCH> sections of the reference manual,
DOC:SED.DOC, for details.

.I0
.HL 2 RECOVERING DELETED STUFF

The commands <DELETE-LINES> ({DELLIN), <DELETE-SPACES> ({DELSPS),
<ERASE-LINE> ({ERSLIN), <ERASE-WORD> ({ERASWD), and <DELETE-CHARACTER>
({DELCHR) remove text from the file. If you delete text accidentally using any
of these commands, you can get it back. <DELETE-LINES> can be recovered from
by typing <ENTER><PUT>, as described in a previous section. The text from the
other four commands can be recovered by typing <ENTER><HELP>.

.PG
.HL 1 EDITOR GOODIES

Now you know nearly all the essentials of SED. The rest of this
tutorial deals with things that can make your life a lot easier, but which do
not give you anything really new. There's even more fun stuff that isn't
covered here. See the editor reference manual for all the bells and whistles.

Here you will find:

.S1 .LIT
        DEFINING PARAMETERS BY MOVING THE CURSOR
        MOVING A GIVEN PERCENT OF THE WAY THROUGH THE FILE
        <SWITCH>: SETTING SWITCHES OR QUERYING STATUS
        ERASING TO THE END OF A LINE
        HOW TO EDIT PARAMETERS
.EL

.I0
.HL 2 DEFINING PARAMETERS BY MOVING THE CURSOR

You don't need to know how to count in order to issue editor commands.
Instead of typing, say, <ENTER>7<DELETE-SPACES>, you could type <ENTER> and
then move the cursor over the characters you want to delete (using <TAB>
or <CURSOR-RIGHT>). Then type <DELETE-SPACES>, and the stuff between where the
cursor started and where it ended will be deleted. This method of passing
a parameter to a command is called "cursor movement." It is often
a lot easier to use than counting.

When you initiate cursor movement the editor will type "Parm defined by
cursor movement" at the bottom of the screen as a reminder.

Cursor movement works across a span of lines, too, and often can cover a
change of both lines and spaces. For example, if the cursor were at the "b"
in "box" and you typed <ENTER><CARRIAGE-RETURN><TAB><TAB><INSERT-LINES>, you
would insert one blank line and 16 spaces into the file:

.S1 .LIT
BEFORE: Pack my box with five dozen liquor jugs.
        This is the thing of the gig
        and the gig is where it's at.

AFTER:  Pack my
                box with five dozen liquor jugs.
        This is the thing of the gig
        and the gig is where it's at.
.EL

In this example the same thing could have been done by typing
<ENTER><CURSOR-DOWN><INSERT-LINES>.

Any key that moves the cursor can be used for a cursor movement parameter.
SED looks only at where the cursor starts and where it ends up; It does not
know how the cursor gets there. It does not matter what the cursor passes
over on the way. So the quickest way of getting the cursor where you want it
is the best (an easy way to get to the bottom of the screen is to type
<HOME><CURSOR-UP>).

.I0
.HL 2 MOVING A GIVEN PERCENT OF THE WAY THROUGH THE FILE

The <PERCENT-GOTO> command ({PERCGO) was touched upon as the means of getting
to the start or the end of the file. Actually, it can be used to move to any
amount of the way through the file. Typing

.S1 .LIT
        <ENTER>37<PERCENT-GOTO>
.EL .S1
will display a page of the file that is about 37% of the way through it. The
beginning of the file is 0%; the end is 100%. A shorthand way of asking for
the end of the file is to type simply

.S1 .LIT
        <ENTER><PERCENT-GOTO>
.EL

.I0
.HL 2 <SWITCH>: SETTING SWITCHES OR QUERYING STATUS

The <SWITCH> command ({SWITCH) has two uses. The first is to set switches to
get SED to perform the way you want it to. You have already seen the
/TABS switch, which sets up word-wise or regular tabs. The other function of
<SWITCH> is to display information about the file you are editing or the
setting of the nominal parameters.

.IFNOT TOPS20
Switches can also be given when running SED, or in SWITCH.INI or SED.INI.
.ELSE TOPS20
Switches can also be given when running SED, or in SED.INIT.
.ENDIF TOPS20

To get file status information, just type <SWITCH> without a parameter. The
editor will write on the bottom of the screen a line which looks like:

.IFNOT TOPS20
.S1 .LIT
FILE: *SED.RNO[100,105]  LINE: 534(67%) POS'N: 1 ALT: FOO.BAR[100,105]
.EL .S1
.ELSE TOPS20
.S1 .LIT
FILE: *SED.RNO  LINE: 534(67%) POS'N: 1 ALT: <CHALL>FOO.BAR
.EL .S1
.ENDIF TOPS20
This line says that the current file is SED.RNO (the "*" indicates that
SED.RNO has been modified), the cursor is at the
start of the 534th line, which is 67% through the file, and the alternate
file is FOO.BAR.

To find out what the nominal parameters are set to, type <ENTER><SWITCH>.
This will give you a line like:

.S1 .LIT
RL:8 RP:1 PC:2 SL:8 IL:1 IS:8 PK:3,8 CS:1 SU:5 TB:8; KEY:th SUB:FOO
.EL
.PG

This message tells you that the following values are set:

.S1 .LIT
        LINES TO ROLL:         8
        PAGES TO ROLL:         1
        PERCENT-GOTO:          2
        SLIDE:                 8
        INSERT/DELETE LINES:   1 LINE AND 0 SPACES
        INSERT/DELETE SPACES:  8
        PICK:                  3 LINES AND 8 SPACES
        CHANGE-CASE PARAMETER: 1
        NUMBER OF SUBSTITUTES: 5
        TAB SIZE:              8
        SEARCH KEY:            th
        SUBSTITUTE STRING:     FOO
.EL

So if you type a <PERCENT-GOTO> command with no parameter you will go
to the 2% point, a <DELETE-LINES> will delete 1 line (and <INSERT-LINES>
will insert 1 line), and a <PICK> will pick up 3 lines.

There are a number of switches which you can set to tailor SED
to your own tastes. Here are the most useful ones. See the editor
reference manual, DOC:SED.DOC, for a description of all the switches.

.S1 .LIT
AGAIN:n edit the same file again, n percent through
BACKUP  make a backup file on exit
CASE    make searches case-dependent ("THE" is different from "the")
CREATE  always create file if not found with <SET-FILE> or RUN command
GOTO:n  on a SET-FILE or initial run, start n percent into the file
LENG:n  make SED think the terminal is n lines long
QUICK   don't display the file on startup or <SET-FILE>
READ    make the file read-only (file-altering commands are illegal)
ISAVE:n do an incremental save every n commands
RESET   reset parameters to their starting values after each command
SAVE:n  do an incremental save every n characters of type-in
STRIP   strip off SOS line numbers before editing a file
TABS:n  set tabs to be every n spaces, or set up word-wise tabs
WIDTH:n make SED think the terminal is n spaces wide
.EL

SED starts with BACKUP/CASE/NOISAVE/NOSAVE/NOSTRIP/TABS:8. LENGTH and
WIDTH are the dimensions of your terminal.

Typing NOSWITCH will negate the effect described above. NOBACK will cause
no backup file to be made, and NOCASE will make searches be case-independent.
NOGOTO doesn't make sense, but probably parses as the same as GOTO.

Ideas: /TABS:W is more fun than /TABS. If you don't like the
clutter of .BAK files, set /NOBACK in
.IFNOT TOPS20
SWITCH.INI or SED.INI.
.ELSE TOPS20
SED.INIT.
.ENDIF TOPS20
Then set /BACK only when
you are editing a file and you want an unedited copy. To look at a file and
ensure it won't be changed use /READ in the <SET-FILE> or monitor run
command.

.I0
.HL 2 <ERASE-LINE>: ERASE FROM CURSOR TO END OF LINE

The <ERASE-LINE> command ({ERSLIN) deletes all characters from the cursor
position to the end of the line. It performs exactly as if you typed
<ENTER>1000<DELETE-SPACES>.

In a parameter <ERASE-LINE> can be used to delete the entire parameter
or cancel cursor movement.

Typing <ENTER><HELP> will recover an erroneously erased line.

.I0
.HL 2 HOW TO EDIT PARAMETERS

If you make a mistake while typing a parameter you can correct it in a
number of ways. In a parameter,

.S1 .I0 .NOFILL
TO DELETE THE        TYPE                (KEY:)
    latest character   <CURSOR-LEFT>         {CURLFT
                       <DELETE-CHARACTER>    {DELCHR
    latest word        <BACKTAB>             {BAKTAB
                       <ERASE-WORD>          {ERASWD
    entire parameter   <ERASE-LINE>          {ERSLIN
.FILL .S1
Also, to forget the parameter entirely type <RESET> ({RESET).

Here's another useful feature: Suppose you type

.S1 .LIT
        <ENTER>LABEL1:<SEARCH-FORWARD>
.EL .S1
and then realize you wanted to search for "LABEL", not "LABEL:". You can
abort the search by typing RUBOUT (for your information). Then type the
<RECALL> command ({RECALL), which displays on the bottom line

.S1 .LIT
        >LABEL1:
.EL .S1
You can then type a <CURSOR-LEFT> to get rid of the ":" and <SEARCH-FORWARD>
to go hunt for "LABEL".

Thus the <RECALL> command acts just as if you typed <ENTER> followed by the
latest parameter you typed. It is useful in three instances: when you typed
an almost-right parameter, when you typed the right parameter but the wrong
command, and when you want to see what the heck that last parameter was.

.PG
.HL 1 MORE EDITOR GOODIES

Here are a couple more conveniences that you will wonder how you ever got
along without:

.S1 .LIT
	MARKING POSITIONS IN THE FILE
        RECTANGULAR INSERT/DELETE SPACES
        TOKEN PARAMETERS
        <PICK>ING OR <DELETE>ING A LOT OF STUFF
        SCANNING
        CHANGING THE CASE OF CHARACTERS OR STRINGS
        SETTING OR CLEARING THE SPLIT-SCREEN WINDOW
        ERASING WORDS FROM THE FILE
        SUBSTITUTING (SEARCH AND REPLACE)
.EL

.I0
.HL 2 MARKING POSITIONS IN THE FILE

If you are reading a listing and want to look up a subroutine in another part
of the program, you might put a bookmark at your current position. In SED,
you'd use the <MARKER> command ({MARKER).

<MARKER> is also used to move to a previously-set marker, and to name, delete
(kill), and list the names of the current markers.

There are 11 markers. All except one (the "default" marker) must be
named. The default marker is easy to work with but doesn't have a name.

.S1 .LIT
Type:                 To:
  <MARKER>              Set the default marker at current position
  <ENTER><MARKER>       Go to the default marker
  <ENTER>Sname<MARKER>  Set marker named "name" at current position
  <ENTER>Gname<MARKER>  Go to marker "name"
  <ENTER>Kname<MARKER>  Kill (delete) marker "name"
  <ENTER>K*<MARKER>     Kill all markers
  <ENTER>N<MARKER>      List the currently-defined marker names
.EL

If you add or delete text in the file the marker may move a little;
if so, it will usually be earlier in the file that you expect.

.I0
.HL 2 RECTANGULAR INSERT/DELETE SPACES

Say you have a diagram which you want to move to the right. You could
do an <INSERT-SPACES> command on each line the diagram is on. Or you could
save yourself some typing by opening a rectangle of spaces, as follows.

Move the cursor to the first line and type <ENTER>. Move the cursor right
as many spaces as you want to open (this is, of course, a cursor movement
parameter). Move the cursor down past all the lines you want to act upon
(they must all be on the screen). Then type <INSERT-SPACES>.

You defined a rectangle whose opposite corners were the starting and ending
positions of the cursor, and that rectangle got filled up with spaces,
pushing everything over.

The same sort of thing happens with <DELETE-SPACES>, except, of course,
the interior of the rectangle is deleted from the file.

.I0
.HL 2 TOKEN PARAMETERS

Sometimes the parameter you want is looking up at you from the terminal
screen. Instead of typing it you can have pick the parameter up from the
file. Such a parameter is called a token.

To get a token parameter, position the cursor at the start of the thing you
want and type <ENTER><COMMAND> (fill in the desired command). Either the
"word" at the cursor location or the length of that word will be taken as the
command's parameter. A "word" is defined to be the text starting at the
cursor and extending to the first non-alphanumeric character.

If the command takes a numeric parameter the size of the token is used,
otherwise the actual string will be used. For example, to delete a
word from the file, position to it and type <ENTER><DELETE-SPACES>.
To search for the word at the cursor position type <ENTER><SEARCH-FORWARD>.

Not all commands allow token parameters. You've seen the <PERCENT-GOTO> and
<PUT> commands, where <ENTER><COMMAND> has a special non-token meaning.
However, in general if a token makes sense for a command it is legal.
Experiment and see what happens.

.I0
.HL 2 PICKING OR DELETING A LOT OF STUFF

Using the <MARK> ({MARK) command, you can mark your current position in
the file, move forward or backward to any other position, and do a <PICK> or
<DELETE-LINES> which will affect all of the text between the mark and the
ending cursor position. You can use <ROLLS>, <SEARCHES>, <PERCENT-GOTO>, or
any other command which does not modify the file, to get to the other end of
the text you want to work with. The <PICK>ed or <DELETE>d text can be <PUT>
back in the file in the normal fashion (by typing <PUT> or <ENTER><PUT>).

The MARK command thus changes the action of the <PICK> and <DELETE-LINES>
(with no parameter) commands. After <MARK> is typed and until the file is
modified, <PICK> or <DELETE-LINES> will work with the mark, not with the current
parameter. After the <PICK> or <DELETE-LINES> is done the mark goes away.

So if the nominal lines to pick is 1, and you type

.S1 .LIT
        <MARK>
        <ENTER><PERCENT-GOTO>
        <PICK>
.EL .S1
you will pick up all the text from where the mark is to the end of the file.
If you do another <PICK> you will pick up one line.

.I0
.HL 2 SCANNING

Scanning is where SED will to a <ROLL-FORWARD-LINES> or <ROLL-BACKWARD-LINES>,
wait a little, then roll again. It will keep rolling and waiting until you
tell it to stop.

To start scanning type <ENTER><ROLL-FORWARD-LINES> (or <-BACK->). To stop
type any character or RUBOUT.

.I0
.HL 2 CHANGING THE CASE OF CHARACTERS OR STRINGS

The <CASE> command ({CASE) changes the case of the letters starting where
the cursor is. Two switches control way <CASE> works: /INVRT and /RAISE
(use the <SWITCH> command, {SWITCH, to set or clear switches). If /INVRT is
set (which is the default) then the case of all the letters is inverted:
upper is changed to lower and lower to upper.

If /NOINVRT is set then the setting of /RAISE is used. If /RAISE is set
(default), lower case characters at the cursor will be changed to upper
case. Upper case and non-alphabetic characters are unaffected. Likewise, if
/NORAISE is set, upper case characters are changed to lower case.

The parameter to <CASE> is the number of characters to look at and maybe
change the case of. You can use cursor movement to make <CASE> work for
more than one line. For example, suppose the cursor is on the "b" and you
type <ENTER><DOWN><CASE>:

.S1 .LIT
BEFORE: Pack my box with five dozen liquor jugs.
        Pack my box with five dozen liquor jugs.

AFTER:  Pack my BOX WITH FIVE DOZEN LIQUOR JUGS.
        PACK MY box with five dozen liquor jugs.
.EL

.I0
.HL 2 SETTING OR CLEARING THE SPLIT-SCREEN WINDOW

The <WINDOW> command ({WINDOW) allows you to divide the terminal screen into
upper and lower halves and display (and edit) a file in each half. If
windowing is in effect, typing <WINDOW> again will bring the screen back to
the normal single-file mode.

After <WINDOW> is typed the file you are currently editing will appear in
the top half of the screen and the bottom half will be blank. If you do a
<SET-FILE> (with or without a parameter), the top window will remain
unchanged and the new file will appear in the bottom window. You can then
use <SET-FILE>s to toggle between the two windows or to change the file
which appears in the window.

.I0
.HL 2 ERASING WORDS FROM THE FILE

The <ERASE-WORD> command ({ERASWD) deletes the
.IFNOT TOPS20
TOPS-10
.ELSE TOPS20
TOPS-20
.ENDIF TOPS20
style word which ends at the cursor position.

<ERASE-WORD> also can be used to erase words in parameters.

Typing <ENTER><HELP> will recover an erroneously erased word.

.I0
.HL 2 SUBSTITUTING (SEARCH AND REPLACE)

The <SUBSTITUTE> command ({SUBSTI) searches forward from the cursor
position for a string (the key) and substitutes another string (the
substitute string) for it. You can tell <SUBSTITUTE> how many times
to repeat the process.

There are three types of parameters to <SUBSTITUTE>:

.S1 .LIT
  <ENTER>Sstring1  <ENTER>Rstring2  <ENTER>number
.EL

The first sets up string1 as the search key. The string must be preceded by
the letter "S" (or "s"). The search key is shared with the <SEARCH-FORWARD>
and <SEARCH-BACKWARD> commands.

The second parameter sets up string2 as the entity to replace occurrences
of string1. The string must be preceded by the letter "R" (or "r"). String2
may be null, meaning that string1 will be deleted wherever it is found.

The third parameter tells how many times to perform the search and substitute.

Searching is done the same as for the <SEARCH> commands, so wild characters,
case independence, and aborting the command with RUBOUT all work.

One, two, or all three of these parameters may be given at once, in any order.
The command

.S1 .LIT
        <ENTER>SFOO<ENTER>Rfoo<ENTER>1000<SUBSTITUTE>
.EL .S1
will change all occurrences of "FOO" to "foo" from the cursor to the end of
the file (well, 1000 times, anyway). Following the above command with

.S1 .LIT
        <ENTER>SFUBAR<ENTER>1000<SUBSTITUTE>
.EL .S1
will change all occurrences of "FUBAR" to "foo". Note that the substitute key
was not given, so it defaulted to its latest setting.

Sometimes it is useful to set up the parameters, think about them, and
perform the substitute when everything looks right. If the numeric parameter
is omitted, them <SUBSTITUTE> will set up the key and substitute string,
but will not execute. Thus the commands

.S1 .LIT
        <ENTER>SGIG<ENTER>RTHING<SUBSTITUTE>
        <ENTER>1<SUBSTITUTE>
        <SUBSTITUTE>
        <ENTER>10<ENTER>STHIS<SUBSTITUTE>
        <SUBSTITUTE>

works as follows:

1) Only sets up the parameters.
2) Does one <SUBSTITUTE> since there was a numeric parameter.
3) Also does one <SUBSTITUTE>.
4) Changes the search key to "THIS" and does 10 iterations.
5) Also does 10 iterations.
.EL
.PG
.HL 1 USEFUL COMMANDS FOR SPECIAL CASES

This last section describes commands which are not used very much, but which
come in handy when they are needed. For example, files will usually be
less than 80 characters wide, but if you are editing a lineprinter file
you will want to know how to reach the part of it that is off the right of
the viewing window. Topics covered here are:

.S1 .LIT
        WHAT TO DO IF THE FILE IS WIDE
        HOW TO PUT CONTROL CHARACTERS IN THE FILE
        MANY WAYS TO SAVE THE FILE
        REPAIRING A FRAGGED SCREEN
        JUSTIFYING TEXT
        REPEATING COMMANDS OR INVENTING YOUR OWN
.EL
.IFNOT TOPS20
.LIT
        SETTING UP DEFAULT SWITCHES IN SWITCH.INI OR SED.INI
.EL
.ELSE TOPS20
.LIT
        SETTING UP DEFAULT SWITCHES IN SED.INIT
        CALLING THE EXEC FROM SED
.EL
.ENDIF TOPS20
.I0
.HL 2 WHAT TO DO IF THE FILE IS WIDE

The <SLIDE-LEFT> ({SLDLFT) and <SLIDE-RIGHT> ({SLDRGT) commands move
the viewing window left and right. Note that you are sliding the window
over the file, so <SLIDE-RIGHT> shows you higher-numbered columns.

The parameter to the <SLIDE> commands is the number of columns to slide.

.I0
.HL 2 HOW TO PUT CONTROL CHARACTERS IN THE FILE

Type <ENTER-CONTROL-CHARACTER> ({ENTCCH) and the actual character. To
insert a CONTROL-L in the file, type <ENTER-C-C> followed by the character L.
This command can be used within a parameter, too.

Useful control characters to insert are tab (CONTROL-I) and formfeed
or page mark (CONTROL-L).

The <REAL-TAB> command ({REALTB) can also be used to put a tab in the file.
It acts exactly as if you typed "<ENTER-C-C>I". Note that the <REAL-TAB>
command puts a tab character in the file, whereas the <TAB> command causes
the cursor to move but does not actually modify the file.

.I0
.HL 2 MANY WAYS TO SAVE THE FILE

The file you are editing is saved when you type <EXIT> or <SET-FILE> (and not
saved  when you exit using <ABORT>). You can set the /SAVE: and /ISAVE:
switches so that the file is saved automatically every so many commands or
characters of type-in. See the section about the <SWITCH> command (or, better
yet, Appendix D in the reference manual, DOC:SED.DOC). There's also a
command, <SAVE-FILE> ({SAVER) which saves the file when you type it.

BEWARE: <SAVE-FILE><ABORT> can leave nulls in the file so if you've changed
a file be sure to end the editing session with <EXIT>.

.I0
.HL 2 REPAIRING A FRAGGED SCREEN

If your terminal screen has been messed up by a system message or something
(or any time you're not confident that the display is correct) you can force
the screen to be rewritten by typing <REWRITE> ({REWRIT). <ENTER>_^<RESET>
(that's the up-arrow or caret character) also rewrites the screen. The
<RESET> command is {RESET.

.I0
.HL 2 JUSTIFYING TEXT

The <JUSTIFY> command ({JUSTI) justifies or centers text within the left
and right margins. The number of spaces to indent a new paragraph may also
be given (positive, negative, or zero; the default is zero), as well as a
string to be removed from the start of each raw line and added to each
justified line. The text can be made flush against the right margin
("filled") or ragged.

<JUSTIFY> works from the start or the line the cursor is on for the number
of lines given explicitly of using cursor movement. If <ENTER><JUSTIFY> is
typed the range of the command is from the line where the cursor is to the
end of the paragraph.

The end of a paragraph is signaled by a blank line or a line which begins
with spaces or tabs. The line the cursor is on is always the start of a
paragraph; the last line of the range is always the end of a paragraph.

A new paragraph in the justified test begins with a blank line and the
indentation given by /PIND:.

To center the line the cursor is on, type <ENTER>C<JUSTIFY>. The line will
be centered between the left and right margins.

.S1 .LIT
Switches used by <JUSTIFY>:

    /JPRE:s     delete string s from each input line;
                begin each output line with string s.
    /LMAR:n     set the left margin to be column n.
    /RMAR:n     set the right margin to be column n.
    /PIND:n     set the paragraph indentation to be n columns.
    /FILL       make a straight right margin (/NOFILL == ragged).
.EL

.I0
.HL 2 REPEATING COMMANDS OR INVENTING YOUR OWN

If you have a sequence of commands which you want to repeat many times (like
doing a search and substitute, for example, or removing the first 16
characters of every line of the file) you can store that sequence in a
buffer in the editor and then execute it as many times as you like.

You can also use these buffers to define new editor commands and attach
them to terminal keys. The buffers can be saved and read from disk or
set up in
.IFNOT TOPS20
SWITCH.INI or SED.INI.
.ELSE TOPS20
SED.INIT.
.ENDIF TOPS20

The command which does these things is <EXECUTE> ({EXECUT). There are too
many details to describe here. Suffice it to say that SED has a language
which includes all the commands plus several constructs such as DO WHILE
and IF CHARACTER or POSITION, and that you can write and run "programs" in
that language. The reference manual, DOC:SED.DOC, contains all the details.

.IFNOT TOPS20
.I0
.HL 2 SETTING UP DEFAULT SWITCHES IN SWITCH.INI OR SED.INI

The file SWITCH.INI can contain starting switch settings for a number of
programs. If you include in SWITCH.INI a line like

.S1 .LIT
        SED/NBA/T:W
.EL .S1
then SED will set those switches when it begins to run. In this example the
"no backup file" and "word-wise tabs" switches will be set.

SWITCH.INI can also be used to set up execute buffers. For example,

.S1 .LIT
        /X:NAME,^[X:$gig^PT^RT
.EL .S1
sets up a buffer named "NAME" which does a <PUT> and a carriage return, and
causes it to be invoked when you type ESCAPE-X. That won't make much sense
unless you've read up on the <EXECUTE> command in the reference manual
(DOC:SED.DOC), but hopefully it will make you curious.

SED.INI works the same as SWITCH.INI except that SED is the only program
that reads it. Lines in SED.INI do not have to begin with "SED".

.ELSE TOPS20
.I0
.HL 2 SETTING UP DEFAULT SWITCHES IN SED.INIT

When SED begins it tries to find your user default switch file, SED.INIT on
your logged-in directory. If it fails it looks for SED.INIT on your
connected directory. If SED.INIT contains a line like

.S1 .LIT
        /NBA/T:W
.EL .S1
then SED will set those switches when it begins to run. In this example the
"no backup file" and "word-wise tabs" switches will be set.

SED.INIT can also be used to set up execute buffers. For example,

.S1 .LIT
        /X:NAME,^[X:$gig^PT^RT
.EL .S1
sets up a buffer named "NAME" which does a <PUT> and a carriage return, and
causes it to be invoked when you type ESCAPE-X. That won't make much sense
unless you've read up on the <EXECUTE> command in the reference manual
(DOC:SED.DOC), but hopefully it will make you curious.

.I0
.HL 2 CALLING THE EXEC FROM SED

The <PUSH> command ({PUSHER) creates a fork under SED and runs the EXEC.
Popping from the EXEC will return you to the editing session as you left
it.
.ENDIF TOPS20
.PG
.PS 56 68
.C;EXAMPLE I
.C;VT52 TERMINAL KEYBOARD LAYOUT

The VT52 has a numeric keypad to the right of the normal keyboard. Four
cursor movement keys are at the right of that keypad and there are three
colored buttons above the pad. The leftmost (blue) button is the <ENTER>
command, the rightmost one (BLACK) is <HOME>, and the center one (RED) is
<RECALL>. The number keys in the pad invoke SED commands. Do not use the
red ESC (SEL) key at the upper left of the keyboard.

.S2 .LIT
VT52 EDITOR KEYBOARD

.____.____.____.____.____.____.____.____.____.____.____.____.____.____.
!    !    !    !    !    !    !    !    !    !    !    !    !    !ERAS!
! !  ! @  ! #  ! $  ! %  ! ^  ! &  ! *  ! (  ! )  ! _  ! +  !SUBS!CHAR!
! 1  ! 2  ! 3  ! 4  ! 5  ! 6  ! 7  ! 8  ! 9  ! 0  ! -  ! =  ! ~` !back!
!____!____!____!____!____!____!____!____!____!____!____!____!____!____!_.
  !xon !ROLL!SRCH!SRCH!ROLL!ROLL!BACK!    !ENTR!PERC!    !    !ERAS!RE- !
  !    !BK L!BACK!FWD !FW L!FW P!TAB !TAB !CCH !GOTO! ]  ! |  !LINE!SET !
  ! q  ! w  ! e  ! r  ! t  ! y  ! u  ! i  ! o  ! p  ! [  ! \  !lnfd! del!
  !____!____!____!____!____!____!____!____!____!____!____!____!____!____!_.
    !ROLL!xoff!INS !DEL !    !CUR !ERAS!INS !DEL !    !    !    !         !
    !BK P!    !LINE!LINE!PUT !LEFT!LINE!SPAC!SPAC! :  ! "  ! }  ! RETURN  !
    ! a  ! s  ! d  ! f  ! g  ! h  ! j  ! k  ! l  ! ;  ! ,  ! {  !         !
.___!____!____!____!____!____!____!____!____!____!____!____!____!_________!
!     !    !    !    !    !SET !    !RE- !    !    !MRKR!       !    !    !
!shift!EXIT!EXCT!ABRT!PICK!FILE!SWCH!TURN! <  ! >  ! ?  ! shift !rept!copy!
!     ! z  ! x  ! c  ! v  ! b  ! n  ! m  ! ,  ! .  ! /  !       !    !    !
!_____!____!____!____!____!____!____!____!____!____!____!_______!____!____!

        NUMERIC PAD AT RIGHT     .____.____.____.____.
        OF NORMAL KEYBOARD:      !    !RE- !    !CUR !
                                 !ENTR!CALL!HOME! UP !
                                 !blue!red !blck! /\ !
                                 !____!____!____!____!
                                 !    !UP- !    !CUR !
                                 !MARK!TAB !CASE!DOWN!
                                 !  7 ! 8  ! 9  ! \/ !
                                 !____!____!____!____!
                                 !BEG-!RE- !END-!CUR !
                                 !LINE!WRIT!LINE!RGHT!
                                 ! 4  ! 5  ! 6  ! -> !
                                 !____!____!____!____!
                                 !WIN-!DOWN!    !CUR !
                                 !DOW !TAB !HELP!LEFT!
In addition:                     ! 1  ! 2  ! 3  ! <- !
                                 !____!____!____!____!
  ESCAPE-L is <SLIDE-LEFT>       !   REAL  !ERAS!INS !
  ESCAPE-T is <SLIDE-RIGHT>      !   TAB   !WORD!MODE!
  ESCAPE-S is <TAB-SET>          !    0    ! .  !entr!
  ESCAPE-J is <JUSTIFY>          !_________!____!____!
.EL
.PG
.PS 56 68
.C;EXAMPLE II
.C;VT100 TERMINAL KEYBOARD LAYOUT

.S2 .LIT
VT100 KEYBOARD LAYOUT

._____.                                               .____.____.____.____.
!set- !                                               !    !    !    !    !
! up  !                                               ! /\ ! \/ ! <- ! -> !
!     !                                               ! UP !DOWN!LEFT!RGHT!
!___._!__.____.____.____.____.____.____.____.____.____!____!____!____!____!
!   !    !    !    !    !    !    !    !    !    !    !    !    !    !ERAS!
!esc! !  ! @  ! #  ! $  ! %  ! ^  ! &  ! *  ! (  ! )  ! _  ! +  !SUBS!CHAR!
!   ! 1  ! 2  ! 3  ! 4  ! 5  ! 6  ! 7  ! 8  ! 9  ! 0  ! -  ! =  ! ~` !back!
!___!____!____!____!____!____!____!____!____!____!____!____!____!____!____!_.
!     !xon !ROLL!SRCH!SRCH!ROLL!ROLL!BACK!    !ENTR!PERC!    !JUST!    !RE- !
! TAB !    !BK L!BACK!FWRD!FW L!FW P! TAB!TAB !CCH !GOTO! {  ! }  !    !SET !
!     ! q  ! w  ! e  ! r  ! t  ! y  ! u  ! i  ! o  ! p  ! [  ! ]  !    ! del!
!_____!____!____!____!____!____!____!____!____!____!____!____!____!    !____!
!       !ROLL!xoff!INS !DEL !    !CUR !ERAS!INS !DEL !    !    !       !    !
! caps  !FW P!    !LINE!LINE!PUT !LEFT!LINE!SPAC!SPAC! :  ! "  ! RETURN! |  !
! lock  ! a  ! s  ! d  ! f  ! g  ! h  ! j  ! k  ! l  ! ;  ! ,  !       ! \  !
!___.___!____!____!____!____!____!____!____!____!____!____!____!_______!____!
!         !    !    !    !    !SET-!    !RE- !    !    !MRKR!         !ERAS!
! shift   !EXIT!EXCT!ABRT!PICK!FILE!SWCH!TURN! <  ! >  ! ?  !  shift  !LINE!
!         ! z  ! x  ! c  ! v  ! b  ! n  ! m  ! ,  ! .  ! /  !         ! lf !
!_________!____!____!____!____!____!____!____!____!____!____!_________!____!

        NUMERIC PAD AT RIGHT     .____.____.____.____.
        OF NORMAL KEYBOARD:      !    !RE- !    !SAVE!
                                 !ENTR!CALL!HOME!FILE!
                                 ! pf1! pf2! pf3! pf4!
                                 !____!____!____!____!
                                 !    !UP- !    !SLID!
                                 !MARK!TAB !CASE!LEFT!
                                 ! 7  ! 8  ! 9  ! -  !
                                 !____!____!____!____!
                                 !BEG-!RE- !END-!SLID!
                                 !LINE!WRIT!LINE!RGHT!
                                 ! 4  ! 5  ! 6  ! ,  !
                                 !____!____!____!____!
                                 !WIN-!DOWN!    !INS !
                                 !DOW !TAB !HELP!MODE!
                                 ! 1  ! 2  ! 3  ! e  !
                                 !____!____!____! n  !
                                 !         !ERAS! t  !
                                 !REAL-TAB !WORD! e  !
                                 !    0    ! .  ! r  !
                                 !_________!____!____!

In addition: ESCAPE-S is <TAB-SET>
             ESCAPE-J is <JUSTIFY>

.EL
.IF DOTAB
.PG
.DO TABLE
.ENDIF DOTAB