Google
 

Trailing-Edge - PDP-10 Archives - custsupcuspmar86_bb-x130b-sb - sos23.man
There are 3 other files named sos23.man in the archive. Click here to see a list.

















                            SOS


          (an advanced line-oriented text editor)


                        User's Guide















     This document reflects version 21 of the software.















         (with an appendix for version 23 features)
                                                      Page 2

















Reprinted with the  permission  of  Applied  Data  Research,
Inc..





Copyright (C) October 1971 by Applied  Data  Research,  Inc.
All rights reserved.  This manual, or parts thereof, may not
be reproduced in any form without the written permission  of
Applied Data Research, Inc.


Updated by U.C.I.  Computing Facility May 28, 1975.  Updated
by I.P.C.  Digital Equipment Corporation December 10, 1976
                                                                Page 3


                               CONTENTS



                                                                   Page
INTRODUCTION TO SOS                                                 5
TYPOGRAPHIC CONVENTIONS                                             6
COMMAND FORMAT NOTATION                                             7

PART I         SOS SIMPLIFIED

CHAPTER 1      INPUT MODE                                           8

        1.1    Accessing SOS                                        8
        1.2    Storing the file: The End Command - "E"              9
        1.3    Correcting errors                                    9

CHAPTER 2      EDIT MODE                                           10

        2.1    Entering edit mode                                  10
        2.2    Indicating line numbers                             10
        2.3    Edit mode commands                                  11
        2.3.1     The Delete Command - "D"                         11
        2.3.2     The Insert Command - "I"                         11
        2.3.3     The Replace Command - "R"                        12
        2.3.4     The Print Command - "P"                          12
        2.3.5     The Find Command - "F"                           13
        2.3.6     The Alter Command (Intraline Edit Mode) - "A"    13
        2.3.7     The Substitute Command - "S"                     15
        2.3.8     The Copy Command - "C"                           16
        2.3.9     The Transfer Command - "T"                       16
        2.3.10    The Number Command - "N"                         17
        2.3.11    The End Command - "E"                            17
        2.3.12    The Save World Command - "W"                     18
        2.3.13    The Go Command - "G"                             18
        2.3.14    The Help Command - "H"                           19

CHAPTER 3      READ-ONLY MODE                                      19

PART II        SOS ADVANCED

CHAPTER 4      FILES                                               20

        4.1    Backup and temporary files                          20
        4.2    Standard text files                                 21

CHAPTER 5      LINE NUMBERS, PAGES                                 22

CHAPTER 6      EDIT MODE COMMANDS                                  24

        6.1    The Mark Command - "M"                              24
        6.2    The Kill Command - "K"                              24
        6.3    The Delete Command -"D"                             24
        6.4    The Insert Command - "I"                            25
        6.5    The Replace Command - "R"                           27
                                                                Page 4


        6.6    The Print Command - "P"                             28
        6.7    The List Command - "L"                              29
        6.8    The Find Command - "F"                              30
        6.9    The Alter Command (Intraline Edit Mode) - "A"       32
        6.10   The Extend Command - "X"                            36
        6.11   The Substitute Command - "S"                        37
        6.12   The Copy Command - "C"                              39
        6.13   The Transfer Command - "T"                          40
        6.14   The Join Command - "J"                              41
        6.15   The Number Command - "N"                            41
        6.16   The Justify Command - "JU"                          43
        6.17   The Justify Left Command - "JL"                     44
        6.18   The Justify Right Command - "JR"                    44
        6.19   The Justify Center Command - "JC"                   44
        6.20   The Justify Word Command - "JW"                     44
        6.21   The Set Command - "_"                               45
        6.22   The Give Information Command - "="                  46
        6.23   Line contents specification - all commands          47
        6.24   The End Command - "E"                               48
        6.25   The Save World Command - "W"                        50
        6.26   The Go Command - "G"                                50
        6.27   The Position Command - "."                          51
        6.28   The Help Command - "H"                              51

CHAPTER 7      READ-ONLY MODE                                      51

CHAPTER 8      INDIRECT COMMANDS                                   52

CHAPTER 9      UPPER AND LOWER CASE REPRESENTATION                 52

        9.1    C128 and C64 modes                                  53
        9.2    Upper and lower case                                53
        9.3    Combining modes and cases                           53
        9.4    Model 37 Teletype: 37 mode                          55
        9.5    Ascertaining mode and case: The Give
                  Information Command                              55
        9.6    Special considerations: Find and
                  Substitute Commands                              56
        9.7    Special "matching" characters: Find and
                  Substitute Commands                              56


Appendix A:    Error messages                                      59
Appendix B:    Summary of commands                                 60
Appendix C:    Default values                                      63
Appendix D:    ASCII character table                               64
Appendix E:    SOS switches                                        66
Appendix F:    SOS Help file                                       68
Appendix G:    Version 23 Features                                 73
                                                                Page 5


                         INTRODUCTION TO SOS


SOS is a line-oriented text editor that operates on  sequenced  files.
SOS provides the following features:

      1.  Simple,  but  powerful,  commands.   Each  command   usually
          consists  of  a single-lettered "verb", followed by a number
          or range of numbers indicating  the  line(s)  on  which  the
          command is to perform.

      2.  An  "indirect  command"  file.    The   user   can   put   a
          frequently-used  sequence of commands into a file.  When the
          file is called, SOS will then perform the commands.

      3.  The  full  ASCII   character   set,   including   lower-case
          characters.

      4.  A search facility.  This enables the user to search  through
          a file with strings of text instead of line numbers.

      5.  Text-justifying commands.

This manual is divided into two  parts:   Simplified  uses  of  common
editing  commands are presented in Part I, which should be read in its
entirety before any text-editing is attempted.  Part II, on the  other
hand,  describes  every  command  in  greater detail, emphasizing more
sophisticated usage.  Most of this advanced  material  is  unnecessary
for ordinary editing problems;  there are instances, however, in which
these commands can be quite useful.
                                                                Page 6


                       TYPOGRAPHIC CONVENTIONS


The following typographic conventions  are  used  throughout  the  SOS
Manual.

      *   In an example, text which is underscored is produced by  SOS
          or  the DECsystem-10 Monitor.  Text which is not underscored
          represents information typed by the user.

      *   The (CR) notation appearing after most lines in the examples
          represents  the carriage return key (RETURN) on the terminal
          keyboard.  The DECsystem-10 supplies a  linefeed  with  each
          carriage return.

      *   The (LF) notation represents the linefeed key (LINEFEED)  on
          the terminal keyboard.

      *   The  (FF)  notation  indicates  a   formfeed   obtained   by
          depressing CTRL-L (see below).

      *    $  is used to indicate the ESCAPE key.  Note that SOS  only
          prints the $ without the circle.

      *   Characters following  a  circumflex  represent  the  control
          (CTRL)  key  and  an  alphabetic  character  - e.g., ^U.  To
          obtain  the  control  character,   depress   the   specified
          alphabetic   while   holding   down   the   CTRL  key.   The
          DECsystem-10 will generally print an up-arrow and the  typed
          character  to  indicate  that  it  has  received  a  control
          character.

      *   A vertical  bar   represents  the  condition  "or"  -  e.g.,
          LMAR  RMAR means either the left or right margin.

      *   On some terminals an underscore character (_) is represented
          as  a  backarrow  and  a circumflex (^) is represented as an
          uparrow.

      *   Although the messages typed by SOS are typed to the user  in
          upper  and lower case letters, this manual types them in all
          upper case letters since most users  are  using  upper  case
          terminals.
                                                                Page 7


                       COMMAND FORMAT NOTATION










The following notation is used in SOS command formats:

      *   Command names appear in capital letters;  arguments in lower
          case.

      *   There are no spaces between SOS command names and arguments.

      *   Angle brackets <> enclosing lower-case  letters  indicate  a
          string  of text consisting of any characters on the terminal
          (as  long  as  these  characters   satisfy   the   specified
          conditions) - e.g., <range> or <filename>.

      *   Brackets [] indicate an option which may be used or  omitted
          as desired.
-SOS-                                                           Page 8


                                PART I

                            SOS SIMPLIFIED



1.0  INPUT MODE



1.1  ACCESSING SOS

The user can call SOS by typing the following command to the monitor:

          .R SOS(CR)

SOS then will request the name of a file  by  printing  "FILE:";   the
user-supplied name should be typed on the same line as this request.

          FILE: <filename>(CR)

<filename> consists of a 1-6 character alphanumeric  name  (required),
which  may  be  followed  by  a  period  and a 1-3 character extension
(optional).

Alternatively, the user may type the filename directly on the  command
line and omit the initial conversation with SOS:

          .R SOS-<filename>

The following examples are equivalent ways to call SOS:

          .R SOS-EXAMPL.FOR(CR)

               or

          .R SOS(CR)
          FILE:  EXAMPL.FOR(CR)

Note that ".R SOS EXAMPL(CR)" is illegal.

If there is no disk file with the supplied  name,  SOS  will  indicate
that  it  is  prepared  to  accept  input  beginning  with line 100 by
printing:

          INPUT:  <filename>
          00100

After printing the line number, SOS waits  for  the  user  to  type  a
string  of  text  followed  by  a (CR);  SOS then prints the next line
number, incrementing by 100 each time.  When there are no  more  lines
to  input,  the ALTMODE or ESCAPE key (abbreviated  $ ) should be used
after the next line number  is  printed.   The  printing  of  sequence
numbers  is  terminated,  and  the user is at the SOS command level as
indicated by the asterisk in the left margin.
-SOS-                                                           Page 9


          .R SOS-EXAMPL.FOR(CR)
          INPUT: EXAMPL.FOR
          00100 THIS IS LINE 1.(CR)
          00200 THIS IS LINE 2.(CR)
          00300  $
          *



1.2  STORING THE FILE:  THE END COMMAND - "E"

Instead of editing immediately after the file is created, the user may
want to store the file on the disk.  To do so, he uses the End command
as follows:

          *E(CR)

The file will be stored under the name assigned to  it  when  SOS  was
called.  SOS then returns the user to monitor mode after printing:

          [DSKB:<filename>]

The E command is also used at the  end  of  an  editing  session  (see
Section 2.3.11).



1.3  CORRECTING ERRORS

Typographical errors can be corrected in an input line, provided  they
are noticed before (CR) is typed.

   1.  RUBOUT.  To delete  individual  chatacters,  RUBOUT  should  be
       depressed  once  for every character being deleted, back to and
       including the error.  The deleted characters  are  enclosed  in
       single backslashes ("\"):

          00100 THIS IS TI\I\HE FIRST LINE

       In the above example, the user typed RUBOUT once after he typed
       the  "I" of "TI".  "\I" is printed to indicate that SOS deleted
       the "I".  The next  character  typed  in  (other  than  another
       RUBOUT) is accompanied by the second backslash - "\H".

   2.  CTRL-U.  To delete  the  entire  input  line,  strike  U  while
       holding  down the CTRL key -  ^U .  SOS will perform a carriage
       return/linefeed, but will not print a new line number;  instead
       it  will  wait for input which will be associated with the last
       number.

          00100 THIS IS TEH ^U
          THIS IS LINE 1.(CR)
          00200 
-SOS-                                                          Page 10


2.0  EDIT MODE



2.1  ENTERING EDIT MODE

There are two ways to enter edit mode.  During the input sequence,  if
an  existing file is specified, SOS will recognize the filename, print
an asterisk, and wait  for  user  commands.   Any  editing,  then,  is
performed on the named file.

          .R SOS(CR)
          FILE:  <filename>(CR)
          EDIT:  <filename>
          *

               or

          .R SOS-<filename>(CR)
          EDIT:  <filename>
          *

To complete the editing of a new file, on the  other  hand,  the  user
should  strike the ALTMODE key ( $ ) at the end of the input sequence;
this places him at the SOS command level.  He  can  either  store  the
file  for  subsequent  editing  by using the E command, or else he can
utilize any of the editing commands listed below and in Part II.

          .R SOS-EXAMPL.FOR(CR)
          INPUT: EXAMPL.FOR
          00100 THIS IS LINE 1.(CR)
          00200 THIS IS LINE 2.(CR)
          .
          .
          .
          00600  $
          *



2.2  INDICATING LINE NUMBERS

SOS recognizes certain abbreviations which can be employed in commands
requiring  line  numbers.   The Print command is used in the following
examples to illustrate these abbreviations:

   1.  A colon between two numbers is used  to  indicate  a  range  of
       lines between, and including, the two endpoints.

          *P100:200(CR)            Print lines 100 through 200 
                                   inclusive.
-SOS-                                                          Page 11


   2.  A period is used to represent the current line,  as  determined
       by the last command which actually specified a line.

          *P100:.(CR)              Print line 100 through the current
                                   line.

   3.  An asterisk represents the last line of the file.

          *P.:*(CR)                Print the current line through the
                                   last line of the file.

   4.  A circumflex represents the first line of the file.

          *P^:*(CR)                Print the first line through the
                                   last line of the file.



2.3  EDIT MODE COMMANDS



2.3.1  The Delete Command - "D"

The D command corrects an error by deleting an entire line or lines.

          *D200(CR)                Delete line 200.

          *D100:200(CR)            Delete lines 100 through 200
                                   inclusive.

The Delete command will inform the user of the number  of  lines  that
were deleted as well as the range:  "n LINES (<range>) DELETED".



2.3.2  The Insert Command - "I"

The Insert command  is  used  to  indicate  that  new  lines  will  be
inserted, beginning at the stated sequence number.  The line increment
is 100 by default, unless specifically changed.

          *I200(CR)                Accept  input  lines  beginning  at
                                   line    200,   with   the   default
                                   increment of 100.

The increment is changed as follows:

          *I200,50(CR)             Accept input lines  beginning  with
                                   line  200,  using  the increment of
                                   50.   The  default  increment   for
                                   subsequent  I commands will also be
                                   50.

If there already is a line with the  specified  sequence  number,  SOS
-SOS-                                                          Page 12


will  determine  a  different line number for the insert by adding the
line number specified in the command to the current increment.   If  a
line  exists  between  the  line specified by the command and the next
line determined by the increment (e.g., "*I200,50(CR)"  and  line  210
exists), SOS will choose a line number halfway between these two lines
(i.e., line 205).  If  any  subsequent  line  being  inserted  already
exists,  or  if  an  existing line in the file falls between two lines
determined by the Insert command,  then  the  insertion  process  will
terminate and the user will return to SOS command level.  The sequence
of line numbers may be terminated at any time using  the  ESCAPE  key,
which will return the user to command level.

          00200 THIS IS INSERTED.
          00250  $
          *



2.3.3  The Replace Command - "R"

The Replace  command  is  a  combination  of  the  Delete  and  Insert
commands.

          *R200(CR)                Delete line 200  and  accept  input
                                   beginning at that line.

          *R200:300,50(CR)         Delete  lines   200   through   300
                                   inclusive,  and  accept input to be
                                   inserted in lines 200 through  300,
                                   with an increment of 50.

SOS responds with the number of the first line to be replaced.



2.3.4  The Print Command - "P"

The Print command tells SOS to print specified  lines  on  the  user's
terminal.

          *P(CR)                   Print the next 16 lines of the
                                   file.

          *P200(CR)                Print line 200.

          *P100:200(CR)            Print lines 100 through 200
                                   inclusive.

          *P^:*(CR)                Print all the lines of the file.

          *P.:*(CR)                Print the current line through the
                                   last line of the file.

If SOS is ready to accept a command, striking (LF) will cause the next
line  of  the  file  to  be printed, while striking  $  will cause the
-SOS-                                                          Page 13


previous line to be printed.



2.3.5  The Find Command - "F"

SOS can locate an arbitrary text string within a file  without  having
the line number specified:

          *F<text>  $  (CR)        Search for the first occurrence  of
                                   the  given  string of text starting
                                   with the line following the current
                                   line.

Note that immediately after  the  file  is  opened  for  editing,  the
"current" line is the beginning of the file.

It is also possible to search through a range of line numbers for  the
first occurrence of a given text string:

          *F<text>  $  100:350(CR) Search for the first occurrence  of
                                   the  string  of  text  in lines 100
                                   through 350 inclusive.

If the specified text is located, the line and line  number  where  it
first  occurred will be printed.  If the specified text does not exist
within the given (or implied) range, SOS will indicate that the search
has failed and return the user to command level.  The current position
is left at the same position previous to the failing search.

          %SEARCH FAILS
          *

Giving another F command with no arguments will continue the search in
the  stated  range  and  cause SOS to print the next occurrence of the
given text string (line number and content).  If  there  is  no  other
occurrence,  SOS  will  print  "%SEARCH  FAILS"  and return to command
level.  For example:

          *FOLD  $  100:500(CR)       Search for the first occurrence
          00150 THIS IS AN OLD LINE.  of "OLD" in  lines  100  through
                                      500.

          *F(CR)                      Search for the next occurrence
          0200 THERE WAS AN OLD MAN.  of  "OLD"  after  line  150  and
                                      through line 500.



2.3.6  The Alter Command (Intraline Edit Mode) - "A"

It is possible to specify a  line  to  be  modified  using  the  Alter
command.

          *A200(CR)                Alter line 200.
-SOS-                                                          Page 14


The A command places the user in  a  special  intraline  editing  mode
which  has  its  own  commands  (described  below).  In this mode, the
commands themselves will not echo on a full-duplex terminal,  although
any accompanying user-supplied text will.

The intraline edit mode maintains a pointer within the line indicating
the next character in the line that the next command will affect.

1.  Moving the Pointer (Space Bar and Rubout)

    To advance the pointer one position to the right, strike the space
    bar  once.   The  character  that is passed over is printed on the
    terminal.  If the pointer is already at the extreme right  of  the
    line, this command is ignored.

    To move the  pointer  to  the  left,  use  RUBOUT  once  for  each
    character  being  passed  over.   (Note  that this does not delete
    anything as it would in input mode.) The character(s) passed  over
    are  printed  between  single  backslashes  (\XX\).   (The  second
    backslash is printed when the next non-RUBOUT command  is  given).
    If  the  pointer  is  already  at  the extreme left of the line, a
    carriage return/linefeed is  automatically  performed.   The  line
    number  will be reprinted, and the pointer will again point to the
    beginning of the line.

2.  The "D" Command (Delete)

    To delete the  character  pointed  to,  type  "D"  once  for  each
    character being deleted.  The deleted character(s) will be printed
    within double backslashes (\\X\\).  (The second  double  backslash
    is printed when the next non-D command is given.) The pointer then
    will point to the  right  of  the  last  character  deleted.   The
    command  is  ignored if the pointer is at the extreme right of the
    line.

3.  The "I" Command (Insert)

    To insert text use the I command as follows:

          I<text>  $

    Only the inserted text is printed on the  terminal.   The  pointer
    then will be at the end of the inserted material.

4.  Terminating Intraline Editing:  (CR) and the Quit Command

    When no more editing is necessary, the user  should  strike  (CR).
    This  causes  that portion of the line to the right of the pointer
    to be printed and ends the intraline edit mode.  SOS then  returns
    to command level.

    The Q command terminates intraline editing mode without making any
    of  the  indicated intraline changes.  SOS then returns to command
    level.
-SOS-                                                          Page 15


5.  ^U (RESTART)

    To reedit a line, type U while holding down the  CTRL  key  -  ^U.
    The  line  will  be  restored to its original state, and intraline
    editing can be resumed as soon as the line  number  is  reprinted.
    This  is  equivalent  to  typing a Q command during intraline edit
    mode and then issuing an Alter command followed by a period (after
    the SOS command asterisk):

          <line>Q
          *A.(CR)

6.  The "S" Command (Skip)

    The S command will  skip  over  the  characters  up  to  the  next
    occurrence of the specified character:

          S<character>

    Every  character  passed  over  will  be  printed.   The   current
    character  is automatically passed over and is not compared to the
    character specified in the command.

    If the character does not occur in the remainder of the line,  the
    pointer will move to the extreme right.

    The following example illustrates intraline edit mode and  pointer
    movement.   Remember  that  user  commands  are not printed on the
    full-duplex terminal when this mode is utilized.

          *A200(CR)

                SX D   IW  $  (CR)  User Input

           00200 LET\\X\\W=A+B+C    SOS Printout

    The user wants to alter line 200 ("LET X=A+B+C").  The pointer  is
    at  the  first  character of the line ("L").  After "SX" is typed,
    the pointer skips to "X", and SOS prints "LET"  on  the  terminal.
    To  delete  the "X", the user issues a D command.  SOS then prints
    "\\X", and moves the pointer to the  charater  which  follows  the
    deleted character (that is, to the "=").  Typing "IW $ " completes
    the deletion process by printing another "\\";  "W" is inserted to
    the  left of the pointer and printed on the terminal.  (CR) causes
    the rest of the line to be printed and returns the user to command
    level.



2.3.7  The Substitute Command - "S"

Sometimes the same string of text occurs frequently in a file, and  it
would  be  time-consuming for the user to perform intraline editing in
every line that the string is found.   SOS  provides  a  command  that
allows  the  user  to substitute one string of text for another within
-SOS-                                                          Page 16


some range in the file:


*S<oldtext> $ <newtext> $ 100:350(CR)   Substitute the  <newtext>  for
                                        the  <oldtext>  in  the  range
                                        specified.

                                 NOTE

               If no range is included in the  command,
               substitution  will  be only done for one
               line.



2.3.8  The Copy Command - "C"

To duplicate some line or group of lines within a file, use  the  Copy
command.   This  command  acts  like  an  Insert  command;   the lines
specified are copied but not printed on the terminal.

          *C200,100(CR)            Copy the contents of line 100 to  a
                                   new line numbered 200.

          *C1000,100:500,50(CR)    Copy a portion of the  file  (lines
                                   100  through 500) to a new location
                                   beginning with line 1000.  As  each
                                   line   is   copied,  the  increment
                                   between lines will be 50.

If a specified increment is too large for  the  specified  range,  SOS
automatically  will indicate that it has chosen a smaller increment by
typing:

          INC1=<number>

If SOS cannot choose a small enough increment, it will use  the  given
increment  and copy as many lines a possible into the available space.
As a result, only part of the text will be  copied  and  an  "%OUT  OF
ORDER" error message will be given.  To finish copying the rest of the
specified range, edit mode must be terminated  with  an  End  command.
During the next editing session, the file must be resequenced and then
the copy can be completed.



2.3.9  The Transfer Command - "T"

The Transfer command moves a set of lines from one part of a  file  to
another.   It  is similar to the Copy command, but it also deletes the
original range immediately after the transfer is completed.
-SOS-                                                          Page 17


          *T1000,100:500,50(CR)    Copy lines 100 through 500 into the
                                   location  beginning with line 1000,
                                   using  the  increment   50;    then
                                   delete lines 100 through 500.



2.3.10  The Number Command - "N"

The Number command alters the numbers of currently existing lines;  it
should be used if an "%OUT OF ORDER" or a "%WRAP AROUND" error message
occurs.

          *N50,100:500,1000(CR)    Renumber  lines  100  through  500,
                                   starting  at  line  1000,  with the
                                   increment of 50.

          *N50,100:500(CR)         Renumber  lines  100  through  500,
                                   starting   at   line  50,  with  an
                                   increment of 50.

          *N100(CR)                Resequence the entire file starting
             or                    at line 100 with an increment of
          *N(CR)                   100.



2.3.11  The End Command - "E"

The End command causes the edit session to terminate  and  writes  the
output file.

          *E(CR)

To differentiate an edited file from the original, the new version may
be  filed  separately  under a different name by using the End command
and the new filename.

          *E:<filename>(CR)

This leaves the original file  under  its  original  name.   SOS  then
returns the user to the monitor:

          [DSKB:<filename>]

          .

Should the user realize that the current editing session is worthless,
the  Quit  option  will  return  him to the monitor without saving the
edited version of the file:

          *EQ(CR)

The original file (if there was one) is still intact  after  the  Quit
option.
-SOS-                                                          Page 18


The user should be aware that SOS creates backup files.  These  backup
files  may  sometimes  be  helpful  in  retrieving  lost  information.
However, backup files should be deleted when not in use since the user
is  charged  for  the  disk  space.  For more information about backup
files, check section 4.1.



2.3.12  The Save World Command - "W"

The Save World command is the same as the E  command  except  that  it
leaves  the  user  in  command  mode  rather than returning him to the
monitor.  This is used to save the current version of the file in case
the system crashes, and should be done every fifteen minutes while the
user is in edit mode.  If the system does crash, the  user  will  lose
only the editing that was done since the last W command was issued.

It is also possible to use a new name for the edited version with  the
W  command  (just as in the extension of the E command).  The new name
only has to be given once, any subsequent W commands will  recall  the
new filename.

          *W(CR)

            or

          *W:<filename>(CR)



2.3.13  The Go Command - "G"

The G command is used  after  the  user  issues  a  program  execution
command  such  as EXECUTE, LOAD, COMPILE, etc., and then edits a file.
A filename that has been given to SOS is saved, so  that  calling  SOS
(".R SOS(CR)") again with no filename will immediately put the user in
edit mode for the last file specified.

Once editing is completed, the G command will write the file onto  the
disk  (like  the  E  command)  and  will  cause  the  previous program
execution command to be repeated.

The following debugging sequence illustrates G command usage:

          .R SOS-EXAMPL.CBL(CR)    SOS assumes input mode and is ready
          INPUT:  EXAMPL.CBL       to accept lines of text beginning
          00100                    with line 100 (SOS also "remembers"
             .                     the name EXAMPL.CBL).
             .
             .
          nnnnn $                  End input and give command to user.
          *E(CR)                   The E command will save the input
          [DSKB:EXAMPL.CBL]        under the filename EXAMPL.CBL.

          .EXECUTE EXAMPL.CBL(CR)  The user issues the Monitor command
-SOS-                                                          Page 19


             .                     "EXECUTE EXAMPL.CBL".
             .
             .                     The program did not execute
             .                     correctly;  the user must edit the
             .                     source file.
             .
          .R SOS(CR)               SOS "remembers" EXAMPL.CBL, because
          EDIT:  EXAMPL.CBL        it was the last filename used, and,
          *                        therefore, assumes edit mode.
             .
             .
             .
          *G(CR)                   The user performs some editing in
             .                     the program.  The G command will
             .                     save the file as E did and will
             .                     begin compilation, loading, and
             .                     execution of EXAMPL.CBL.
             .
          .R SOS(CR)               More execution problems.
          EDIT:  EXAMPL.CBL        Edit EXAMPL.CBL again.
          *
             .
             .
             .
          *G(CR)                   EXECUTE again.
             .
             .
             .


2.3.14  The Help command - "H"

The Help command  prints  out  the  useful  information  in  the  file
"HLP:SOS.HLP".  (See Appendix F.)

          *H


3.0  READ-ONLY MODE

SOS allows the user to access  his  file  in  a  "read-only"  mode  if
"/READONLY" (or "/REA") is included in the input sequence.

          .R SOS(CR)
          FILE:  <filename>/READONLY(CR)

               or

          .R SOS-<filename>/READONLY(CR)

This mode permits the user to find information in his file,  but  does
not allow him to perform any editing.
-SOS-                                                          Page 20


                               PART II

                             SOS ADVANCED



4.0  FILES



4.1  BACKUP AND TEMPORARY FILES

Consider the following situation.  After a  file  is  created,  it  is
stored  on  the  disk  under  a  specified  name such as PROG.FOR (See
Section 1.1).

When the user is editing this file and gives an End, Save World, or Go
command,  a  backup  file  is  created.  This backup file contains the
original contents of PROG.FOR, while the newly edited version will  be
named PROG.FOR.  A backup file is created with the extension .Qxx;  xx
represents the last two characters of the original  file's  extension.
If  an  "old"  file is requested (/OLD or _OLD), the first backup file
created will have the extension .Zxx;  any subsequent backup file will
have  the  .Qxx  extension.  If no backup file is requested (/NOBAK or
_NOBAK) no backup file will be created and any existing .Qxx file will
be deleted.

If the E, W, or G command specifies a  filename,  no  backup  file  is
created.   The original copy of the file will still be named PROG.FOR;
the edited version will have the new filename as its name.

During the editing  process,  SOS  copies  the  file  as  the  editing
progresses  through the file.  In input mode, if lines are inserted in
the correct sequence order, the file can be written out as needed with
no  wrap around to the start of the file.  If material is inserted out
of order, however, it may be necessary for SOS to  wrap  around.   SOS
does  this  by copying the file over from the beginning of the file to
the location specified in the command.  With subsequent commands,  SOS
will recopy additional portions of the file.

When editing an already-existing file, SOS  is  careful  not  to  make
changes  in  the  old version until the new version is complete.  When
wrap around is required, three files may  exist  simultaneously:   the
original;  a partially-edited copy which contains the entire file with
all changes up to the last wrap around (".TMP" file - see below);  and
a partial copy of that file up to the current position (".TEM" file).

SOS  is  always  writing  this  partial  copy  into  a   file   called
"nnnSOS.TEM"  (where "nnn" is the user's job number).  If recopying is
necessary, SOS will rename the file "nnnSOS.TMP" and use it as  input.
At  any  time during an edit, SOS will read either the user's original
file or the "nnnSOS.TMP" file.  Thus, if an "nnnSOS.TMP" file  exists,
it is complete up to the last time SOS had to recopy the partial edit.

When an "E", "G", or "W" command is given, SOS will finish copying the
-SOS-                                                          Page 21


edit  into  the  "nnnSOS.TEM"  file  and  rename  it  either  the name
specified in the "E", "G", or "W" command, or the original name  given
when editing began.

During an edit, SOS prints "EXIT" and returns the user to the  monitor
whenever one of the following error messages occurs:

     Error message                      Explanation

%NO DISK AVAILABLE                 The disk which the  user  requested
                                   is not available.

%TEMPORARY EDIT FILE IN USE        The file name which SOS assigns  to
                                   the temporary file is already being
                                   used.  This  situation  should  not
                                   occur.  If it does, the user should
                                   issue  the  Monitor  command   "DEL
                                   *.TMP,*.TEM(CR)"   to   delete  all
                                   temporary  files.    Users   should
                                   check that there are no other users
                                   on the same  account  or  they  may
                                   delete   some  files  that  do  not
                                   belong to them.

%DEVICE OUTPUT ERROR               Output error - no recovery will  be
                                   attempted.

%DEVICE INPUT ERROR                Input error - no recovery  will  be
                                   attempted.

%INTERNAL CONFUSION                SOS has just encountered an
     or                            internal conflict - a systems 
%ILLEGAL UUO                       programmer will be needed.

Although "EXIT" is called and the edit is lost, the original  file  is
not  harmed.   If  a Save World command had been given prior to any of
these errors, however, the original file  would  contain  all  editing
changes performed before the W command was issued.

If the error message, "%ILLEGAL LINE FORMAT" occurs  during  an  edit,
the file probably has a line with a carriage return but no linefeed or
vice versa.  Issuing a Replace command for that line will correct  the
situation.



4.2  STANDARD TEXT FILES

SOS utilizes a Standard Text File, containing Standard Text Lines  and
Standard  Page  Marks.   Standard  Text  Line  format is a line number
composed of a string of five seven-bit ASCII digits, left-justified in
a  single  word with a 1 in bit 35.  This line number is followed by a
TAB and the text (500 or fewer ASCII  characters,  not  including  the
carriage  return/linefeed).  Each disk file word is left-justified and
consists of five ASCII characters and  a  0  in  bit  35.   The  first
-SOS-                                                          Page 22


character  which  follows  the  line  number is a TAB and the last two
characters are (CR)(LF).  The  characters  NULL  and  RUBOUT  may  not
appear  in  the  text.   If necessary, the last disk file word for the
line is filled with NULLs to make a complete word.

A  Standard  Page  Mark  is  a  word  containing   5   ASCII   spaces,
left-justified  in  a  word  with  a  1  in bit 35, followed by a word
containing the characters (CR),(FF),NULL,NULL,NULL, with a  0  in  bit
35.  Standard Page Mark usage is discussed in Chapters 5 and 6.

Lines are never broken across physical disk block boundaries, and  all
unused words in a disk block are 0.

If the specified file was created by using an  editor  that  does  not
assign line numbers, SOS will assign a number to each line as it reads
the file, beginning with 100 and incrementing by 100.



5.0  LINE NUMBERS, PAGES

Throughout Part I, it was assumed that a file was  entirely  contained
in  one continuous group.  This is a feasible way to structure a file;
however, when a file is large, it may be  advantageous  to  divide  it
into   pages.    For   every  command  that  includes  a  line  number
specification, a page qualifier may be included.  Thus, a single  line
(<line>)  may  be specified by both the line number and page number as
follows:

          <line number>/<page number>

The line number must be in the range 0 to 99999;  the first page is 1,
and there is essentially no upper limit.  A range has the form:

          <line number>/<page number>:<line number>/<page number>

A range includes all text within the range, including the endpoints.

Instead of a number, the symbol "." may be used to denote  either  the
current  line  or  the  current  page, depending on whether it appears
before or after the "/".  Therefore, "100/." means line number 100  on
the current page and "./2" means the line on page 2 which has the same
number as the current line number.  The  current  line  and  page  are
determined  by  the last command which was executed (or, generally, by
the last line on which an operation was  performed  and  the  page  on
which that line appears).

The symbol "*" may be used to specify the last line on the  page,  but
it  may  also  specify  the last page if the "*" follows the "/".  The
symbol "^" may be used to specify the first line  of  a  page  or  the
first  page  of  a  file, depending on the position with regard to the
"/".
-SOS-                                                          Page 23


Line and page specifications may be further abbreviated as follows:

          Abbreviated Specification     Full Specification

                100                         100/.

                100:500                     100/.:500/.

                100/2:500                   100/2:500/2

                /2                          ^/2:*/2

                /2:/5                       ^/2:*/5

                ^/1:.                       ^/1:./1

Addition  and  subtraction  can  also  be  used  in  line   and   page
specifications.   While  the arithmetic is straight forward for pages,
it is not for lines because of varying increments  and  prior  editing
changes.   A  count either goes forward or backward from the indicated
line to include the number of lines specified.  Another  form  of  the
range specification extends the ability to use the counting technique.
The starting line is specified  in  one  of  the  above  ways  and  is
followed by an "!" and the number of lines desired.

Line specifications using arithmetic  cannot  cross  page  boundaries,
except  those  with  the  "!"  which  may  cross  page  boundaries  if
necessary.

Special Specification    Equivalent Specification

     100+2               the second line after line 100

     100!3               line 100 and the two subsequent lines

     /5-3                /2 or page 2

     /.+2                the second page after the current page

     /.-1                the previous page

     .-1:.+1             three lines, including the current line

     *+2                 *

     0-5                 0

     *!2                 */.:0+1/.+1 last line on current page and
                         first line on next page
-SOS-                                                          Page 24


6.0  EDIT MODE COMMANDS



6.1  THE MARK COMMAND - "M"

The Mark command will insert a page mark into  the  text,  immediately
before  the  line  specified.  Note that page mark 1 is always assumed
when input begins.

          *M<line number>/<page number>(CR)

If the line that is specified does not exist, the page  mark  will  be
inserted immediately after the line with the next lower number on that
page.  If the line specified is the first on that page, the  new  page
mark  will be placed immediately after the already-existing page mark;
therefore,  the  page  that  already  existed  will   not   have   any
accompanying  text.   If  the page specified in the M command does not
exist, the error message "%NO SUCH PAGE" will be printed and  no  page
mark  will  be  inserted.  Note that the page mark always precedes the
related text.

Inserting a page mark causes renumbering of all subsequent pages.  The
current  line  is set to zero;  the current page is considered the one
just created.  When the user is inserting text, the command:

          *M99999(CR)

will place a page mark at the end of the current work,  and  the  next
insertion will go on the next page.



6.2  THE KILL COMMAND - "K"

The Kill command allows a user to remove the specified page mark.

          *K/2(CR)                 Delete page mark 2.

If line numbers are out of order because a page mark is  removed,  the
user  will be warned.  He must then renumber the page using the Number
command.

Page mark 1, or any page  mark  which  does  not  exist,  may  not  be
deleted.   If deletion is attempted, the error message "%NO SUCH PAGE"
will be printed.



6.3  THE DELETE COMMAND - "D"

The Delete command will delete all the lines of a specified range:

          *D<range>(CR)
-SOS-                                                          Page 25


If there are no lines in the specified range, SOS  will  respond  with
the error message "%NO SUCH LINE(S)".

Lines in a range are specified in the usual manner.

On deletions of entire pages or deletions which span pages,  SOS  will
ask,  "MASSIVE  DELETE OK?", to which you may type "Y" or "N".  Expert
mode does not ask for this confirmation.

All lines on a page may be deleted as follows:

          *D/2(CR)                 Delete all lines on page 2.
          MASSIVE DELETE OK?  Y

The current line and page will be set to the last line deleted on  the
specified page.

The "D" command will inform the user of the number of lines that  were
deleted as well as the range:  "n LINES (<range>) DELETED".



6.4  THE INSERT COMMAND - "I"

The Insert command, which is used to insert new  lines  into  a  file,
accepts a single line specifier (line number/page number) as its first
argument and begins inserting at that line.  The  Insert  command  may
also be used to change the current default increment between lines, in
which case the increment is preceded by a comma.

          *I[<line>][,<increment>](CR)

                    or

          *I[<line>][;<increment>](CR)

                    or

          *I[<line>][;!<number>](CR)

Thus,

          *I100/2,50(CR)           Insert lines starting with line 100
                                   on  page  2  and  set  the  current
                                   increment to 50.

          *I100/2;50(CR)           Insert lines starting with line 100
                                   on  page  2.   Use the increment of
                                   50.     NOTE:     The    semi-colon
                                   indicates  that  50  is a temporary
                                   increment to  be  used  only  while
                                   this  command  is  in  effect.  The
                                   current   increment   will   remain
                                   unchanged  and  will  be used again
                                   for the next command.
-SOS-                                                          Page 26


          *I100/2(CR)              Insert lines starting with line 100
                                   on   page   2   using  the  current
                                   increment (since  no  increment  is
                                   specified).     NOTE:     At    the
                                   beginning of edit mode, the current
                                   increment is 100.

          *I/2(CR)                 Insert a page mark at  the  end  of
                                   page  2 and start inserting text on
                                   page 3.

          *I100;!2(CR)             Insert two lines starting  at  line
                                   100.

After a specified line is actually inserted, SOS will  add  that  line
number  to the correct increment to obtain the number of the next line
to be inserted.

If there already is a line with the same number as the specified  line
number,  the  line number of the existing line is added to the correct
increment and insertion begins there.  If  there  already  is  a  line
located  between  the two line numbers (or at the second line number),
SOS will select a line number that is halfway  between  the  indicated
line number and the next line in the file.  For the next insertion, if
a line already exists at the location determined by the increment,  or
if  it  is  necessary  to  pass over a line which already exists, then
insertion mode will terminate and the user will be returned to command
level.

In the following example,  lines  100  and  200  already  exist;   the
current increment is 100:

        *I100(CR)
        00150   THIS IS A LINE(CR) SOS  selects  line  150  to   begin
                                   insertion.

        *                          The user  is  returned  to  command
                                   level since line 200 already exists
                                   and must be  passed  over  (200  is
                                   between 150 and 250).

If a line insertion is terminated with an  $ , the text preceding  the
 $  is inserted, and the user is returned to command mode.  If nothing
has been inserted and  $  is used, an empty line will not be inserted,
although the user will be returned to command level.

The current line  number  and  page  become  the  last  line  actually
inserted,  not the empty line terminated with  $ .  In addition, after
 $  is typed, SOS will remember the line number and page of  the  next
line  to  be  inserted;   these will be used if the I command is given
later with no argument.   The  increment  will  be  the  same  as  the
increment  used  in the most recent, complete command, including those
commands with the temporary (";") construction.
-SOS-                                                          Page 27


          *I100;100(CR)
          00100 THIS IS LINE 1.(CR)
          00200 THIS IS LINE 2.(CR)
          00300  $
          *P100(CR)
          00100 THIS IS LINE 1.
          *I(CR)
          00300 THIS IS LINE 3.(CR)
          00400        .
                       .
                       .

If a page which does not exist is specified,  SOS  will  respond  with
"%NO SUCH PAGE".

If an attempt is made to insert a line which contains  more  than  500
characters  (not  including  the return/linefeed at the end), SOS will
print "%LINE TOO LONG".  The line will not be inserted, and  SOS  will
return to command mode.

If the next line to be inserted has a line number greater than  99999,
insertion will terminate and the user will be in command mode.

An increment of zero  will  result  in  the  error  message  "%ILLEGAL
COMMAND".



6.5  THE REPLACE COMMAND - "R"

The Replace command is the same as the Delete command followed  by  an
Insert  command.   Replace  accepts  a range specifier and an optional
increment, which can be either temporary  (";")  or  an  actual  (",")
update of the current increment.

          *R<range>[;<increment>](CR)

                    or

          *R<range>[,<increment>](CR)

                    or

          *R<range>[;!<number>](CR)

The deletion is performed on the specified range, and insertion begins
with the first line indicated by that range.  If the first line is not
stated explicitly, the line number of the first line deleted  will  be
used as the starting point for insertion.

          *R/2,50(CR)              Replace all lines  on  page  2  and
                                   insert  new  lines,  beginning with
                                   the first line  deleted,  using  an
                                   increment of 50.
-SOS-                                                          Page 28


          *R100;!2(CR)             Replace two line beginning at  line
                                   100.

          *R/2(CR)                 Delete all the lines on page 2  and
                                   begin insertion.

Insertion may be terminated by depressing  $  after  SOS  has  printed
the  next line number.  As in the Insert command, if  $  is used after
some of the text has been  typed,  that  text  will  be  inserted  and
command mode will be reinstated.

The "R" command will inform the user of the number and  the  range  of
the lines deleted, "n LINES <range> DELETED".


6.6  THE PRINT COMMAND - "P"

The Print command will print out on  the  user's  terminal  the  lines
specified in a range, including the line numbers.

          *P[<range>][,<options>](CR)

If the range includes the boundary between two pages,  "PAGE  n"  also
will be printed to indicate the position of the page mark.

          *P100/1:100/2
          00100 THIS IS A LINE
          00200 THIS IS A LINE
            .
            .
            .
          PAGE 2
          00100 THIS IS A LINE

The second argument,  if  given,  consists  of  one  or  more  of  the
following options, separated by commas.

     <Option>                      Explanation

     N Number pages                Print page numbers at the bottom of
                                   the page.

     S Suppress line #s            Don't print line numbers  and  page
                                   numbers  and  suppress the asterisk
                                   indicating that SOS  is  ready  for
                                   the next command.

     E Eject                       Eject at the bottom of a page.

     W Wait                        At the bottom, wait for a line.

     F Final Copy                  Equivalent to S, E, and  W  options
                                   combined.

The "bottom of the page" is determined by a page mark or  an  exceeded
-SOS-                                                          Page 29


length (the default is 55 lines).

"Wait for a line" means that SOS will wait at the bottom of each  page
while  the  user  types  an  additional  line,  followed by a carriage
return, or a return only (if no line is added).   Typing  a  "G"  only
will  suppress  the  wait  option  in  the  remainder of the printout.
Typing a "Q" only will stop  the  printout  and  return  the  user  to
command  mode.  Typing  ^O  will suppress printout in progress.  Since
SOS is still moving the output to a buffer  area,  typing  another  ^O
will  resume  the  printout at some later point in the output.  If all
output has been passed to the buffer area, the  user  is  returned  to
command level.

Common abbreviations used with Print are as follows:

     *P(CR)                        Print 16 lines (or  the  number  of
                                   lines    specified    in   PLINES),
                                   beginning    with    the    current
                                   position;       the     same     as
                                   "*P.!16(CR)".

     *(LF)                         Print the next line of the file.

     * $                           Print  the  previous  line  of  the
                                   file.

     *P/.(CR)                      Print all the lines of the  current
                                   page;  the same as "*P:*/.(CR)".

The current line number and page  are  determined  by  the  last  line
actually printed.

If there are no lines in the specified range, SOS will print the error
message, "%NO SUCH LINE(S)".



6.7  THE LIST COMMAND - "L"

It is also possible to have the file, or a part of it, printed out  on
the line printer:

          *L[<range>][,S](CR)

If no range is specified, the entire file will  be  listed.   The  "S"
option  for suppressing line numbers and headings is the same as the S
option used in the Print command.  In this case, however, the asterisk
will not be suppressed, and SOS will indicate that it is ready for the
next command.

As with Print, the List command determines the current line number and
page by the last line printed.  Line printer output will have suitable
page headings on the top of each page.  These include the name of  the
file,  the  time  and  date of the printing, and the page given in the
form "M-N".  "M" is the actual SOS page on  which  this  text  can  be
-SOS-                                                          Page 30


found;   "N"  denotes  the  Nth page of line printer output comprising
page M.

The user must issue a ".PRINT *.LPT" command at the monitor  level  to
actually cause the listing to be printed.



6.8  THE FIND COMMAND - "F"

The Find command is used to locate a given string  of  text  within  a
stated range (note that the options are discussed separately below).

          *F[[<string>] $ [<range>][,<options>]](CR)

SOS will find the first occurrence of the  string  in  the  range  and
print  the  line  containing  that string.  If the range includes more
than one page and if the string is found on  a  page  other  than  the
first one of the range, SOS will print "PAGE n" before the line number
to indicate on which page the line is located.  If the string does not
occur in the specified range, SOS will print "%SEARCH FAILS".

To find the first occurrence of a  given  text  on  a  specific  page,
simply precede the page number with a "/" as follows:

     *FLINE $ /2(CR)               Find and print out the  first  line
                                   on page 2 containing "LINE".

To locate the same string specified in the last Find command, use only
the range argument.

     *F $ /3(CR)                   Find and print out the  first  line
                                   on  page  3 containing "LINE" (from
                                   the previous Find command).

If no previous Find command was issued, SOS  will  print  "%NO  STRING
GIVEN" since no string had been specified.

If the range is omitted, then SOS will begin its search  at  the  line
following the current line and continue through the end of the file.

     *FALWAYS $ (CR)               Find  the   first   occurrence   of
                                   "ALWAYS"  beginning  with  the line
                                   following the current line  through
                                   the end of the file.

To indicate a range beginning with the next line through  a  specified
location,  it  is  necessary  only  to  specify the second half of the
range.

     *FALWAYS $ :/5(CR)            Find  the   first   occurrence   of
                                   "ALWAYS" in the range from the next
                                   line through  the  end  of  page  5
                                   (assuming  the  current position is
                                   before page 5).
-SOS-                                                          Page 31


Note that if this particular range  specification  were  used  in  any
other  command  (except  Substitute),  SOS  would  print  the  message
"%ILLEGAL COMMAND".

When the Find command is given repeatedly,  it  is  not  necessary  to
specify  the  text and range when referring to the same text and range
given in the last complete Find command.

          *F(CR)                   Continue   to   find    the    text
                                   (specified previously).  The search
                                   begins with the line after the last
                                   line  that  was  found;  the end of
                                   the range is the endpoint specified
                                   in the last complete Find command.

          *F $ (CR)                Continue   to   find    the    text
                                   (specified  previously) through the
                                   end of the file (since no range had
                                   been specified).

The current line will be set to the last  one  found.   If  the  error
message  "%SEARCH  FAILS"  is printed, the string cannot be located in
the remaining portion of the range.  In this instance the value of the
current location will be unchanged.

It is possible to use an extended form of the Find command to find  up
to  six  strings  of  text.   The  carriage  return separates the text
strings:

     *F<string1>(CR)               Search for any occurrence of any of
     <string2>(CR)                 the strings (totalling fewer than
          .                        200 characters) in the range
          .                        specified.
          .
     <stringn> $ <range>(CR)



OPTIONS

The complete Find command format including options, is as follows:

          *F[[<string>] $ [<range>][,A ,N][,E][,<number>]](CR)

Find command options are defined below:

          A         Enter intraline edit mode automatically  when  the
                    string is found.  This moves the intraline pointer
                    to  the  first  character  of  the   string.    If
                    intraline  editing  is  complete  and  "*F(CR)" is
                    issued, the A option  will  still  be  in  effect.
                    (This  is  the  same  for  the  N  and  E  options
                    discussed below).
-SOS-                                                          Page 32


          N         Find just the line numbers of the locations  of  a
                    given  string.   N follows the range specification
                    and cannot be used with  the  A  option.   N  will
                    still be in effect if an "*F(CR)" is issued.

          E         Do not treat upper and lower case letters as being
                    equivalent.   E  follows  the  range, or A or N if
                    either is present.  E will still be in  effect  if
                    an "*F(CR)" is issued.

          <number>  "<number>" specifies the number  of  lines  to  be
                    found  -  99999  usually will find them all.  This
                    option can be used instead of  repeating  "*F(CR)"
                    until the string no longer can be found within the
                    range  specified  in  the  first   complete   Find
                    command.



6.9  THE ALTER COMMAND (INTRALINE EDIT MODE) - "A"

The Alter command (referred to by the Find command) is  used  to  make
changes  within  a  line without having to retype the line.  The Alter
command accepts  a  range  specifier  indicating  those  lines  to  be
altered.

          *A<range>(CR)

For each of the lines in the range, SOS prints the  line  number,  and
then  enters a special intraline edit mode which has its own commands.
A pointer, maintained within the line, points to the next character in
the  line  that  will  be  affected  by the next command.  The special
intraline edit commands are not echoed on the user's terminal.   Thus,
the  line  shown  on  the terminal at the end of the intraline edit is
exactly the same as it is in the file (except for the backslashes  and
the  characters  between  them).   Any  command  in  this  mode may be
preceded by a number (positive  or  negative)  which  will  cause  the
command to be repeated for that number of characters.  The line number
of the next line in the range will be typed out automatically as  soon
as intraline editing is completed on the present line.

The current line is determined by the last line edited.

If there are no lines in the specified range, SOS will print the error
message "%NO SUCH LINE(S)".



INTRALINE COMMANDS

SPACE             This will advance the pointer one  position  to  the
                  right.  The character that is passed over is printed
                  on the terminal.  If the pointer is already  at  the
                  extreme right of the line, this command is ignored.
-SOS-                                                          Page 33


RUBOUT            This moves the pointer one character  to  the  left.
                  This does not delete anything as it would ordinarily
                  in  input  mode.   The  characters  moved  over  are
                  printed  between single backslashes (\XXX\).  If the
                  pointer is already at the extreme left of the  line,
                  a  (CR)(LF)  is  automatically  performed.  The line
                  number will be reprinted, and the pointer will again
                  point to the beginning of the line.

C<character>      This causes SOS to accept the  next  character  from
                  the  terminal.   The  character  pointed  to will be
                  replaced by the new character, and the pointer  will
                  be  moved one character to the right.  The character
                  accepted from the terminal is printed on the line in
                  place of the one that is deleted.  If the pointer is
                  at the extreme right of the  line,  the  command  is
                  ignored.   During  this  command, any RUBOUT that is
                  used will be ignored.  (LF),(CR), and  $  will abort
                  the remainder of the command.

D                 This will delete  the  character  pointed  to.   The
                  character(s)  deleted  will  be surrounded by double
                  backslashes (\\XXX\\).  The pointer  will  point  to
                  the  right  of  the  last  character  deleted.   The
                  command is ignored if the pointer is at the  extreme
                  right of the line.

I<string> $       This will insert the  given  string  into  the  line
                  immediately   before  the  character  to  which  the
                  pointer points.  The pointer remains pointing to the
                  character  to the right of the inserted string.  The
                  characters being  inserted  are  typed  out  on  the
                  terminal.

                  If  RUBOUT  is  typed  before  the   $ ,  the   last
                  character that is inserted will be deleted.  If more
                  RUBOUTs are  typed  than  characters  inserted,  the
                  characters  to  the  left of the insert are deleted.
                  The characters  deleted  are  surrounded  by  single
                  backslashes.   If  enough characters are inserted to
                  make the line exceed  500  characters,  the  message
                  "%LINE TOO LONG" is printed, and SOS will return the
                  user to command mode without performing any  of  the
                  alterations specified for that line.

                  If a (CR) is typed before the  $ , the  insert  will
                  be  terminated;  intraline edit will terminate as in
                  the (CR) command.

                  If a (LF) is typed before the   $ ,  a  (CR)(LF)  is
                  inserted  at  that  point.   This creates a new line
                  consisting of any subsequently  inserted  characters
                  and  the  rest  of  the old line to the right of the
                  pointer.  The number of the new line  is  determined
                  as follows:
-SOS-                                                          Page 34


                  1.  If the I command is preceded by a  number,  this
                      number  acts  like  a temporary increment and is
                      added to the current line number to  obtain  the
                      new line number.

                  2.  If the I command is not preceded  by  a  number,
                      then the new line number is determined by adding
                      the  current  increment  to  the  current   line
                      number.  The new line is inserted at this number
                      unless it would be out of order.

                  3.  If the new line would be out  of  order  in  (2)
                      above,  the  new  line  number  will  be halfway
                      between the current line  number  and  the  next
                      line  number.   If  the next line number is only
                      one more than the current line number, an  "%OUT
                      OF  ORDER"  error  message will be printed.  SOS
                      will retype the line number and the contents  of
                      the line to the left of the pointer.  It is then
                      possible to insert more characters.

                  If no errors occur while making the  new  line,  the
                  pointer will be left pointing to the first character
                  of the new line, and the current line will be set to
                  the new line just created.

(CR)              If there is no more editing to be done, that portion
                  of  the  line  to  the  right of the pointer will be
                  printed out;  intraline  editing  is  completed  for
                  that  line  and  command returns to the user, unless
                  there are more lines in the Alter command  range  to
                  be edited.

E                 This has the same effect as  the  (CR)  key,  except
                  that  the  rest  of  the  line is not printed on the
                  terminal.

Q                 The  Quit  command  terminates   intraline   editing
                  without  making  any  changes  in the line presently
                  being altered.  SOS returns to command mode.

^U                This restarts intraline editing on  the  same  line.
                  The line will be restored to its original state, and
                  intraline editing can be started as soon as the line
                  number is reprinted.

S<character>      The Skip command will accept one character from  the
                  user's  terminal (without printing it) and will move
                  the pointer to the right until the  next  occurrence
                  of that character.  Every character passed over will
                  be printed.  The character that is  currently  being
                  pointed  to  also  will  be  printed  without  being
                  compared to the character specified in the  command.
                  If  the  character does not occur in the rest of the
                  line, the pointer will be moved to the extreme right
-SOS-                                                          Page 35


                  of the line.

K<character>      The Kill command is the same  as  the  Skip  command
                  except  that  it  deletes  all the characters passed
                  over.  If there are  no  other  occurrences  of  the
                  specified  character  in a line, the command will be
                  ignored (rather than the remainder of the line being
                  deleted).

R                 The Replace command is the same as a Delete  command
                  followed  by an Insert (even if a number is included
                  before R).

L                 The Line command prints the remainder of the line to
                  the  right  of  the  pointer,  performs  a (CR)(LF),
                  prints the number of the  line,  and  continues  the
                  intraline  editing  with the pointer pointing to the
                  first character of the line.

P                 This prints the remainder of the line to  the  right
                  of the pointer, performs a (CR)(LF), prints the line
                  number, and moves the pointer  to  the  right;   the
                  characters passed over are printed until the pointer
                  reaches the same position it had before the  command
                  was issued.

J                 This Justify command inserts a  (CR)(LF)  where  the
                  pointer  is currently pointing, and concatenates the
                  portion of the line to the right of the pointer onto
                  the  beginning  of  the next line.  The current line
                  number is set to the new line number.

                  The error message "%LINE TOO LONG" will be given  if
                  the  new line that is created contains more than 500
                  characters.  The error message "%NO NEXT LINE"  will
                  be printed if this line is the last one on the page.
                  Either of these two errors will cause the J  command
                  to  be  ignored;  the line number and the portion of
                  the line to the left of the pointer  will  be  typed
                  out again.

W                 The Word command moves the  pointer  to  the  right,
                  passes  over  blanks  and  tabs, then over the first
                  "word" encountered, and then over subsequent  blanks
                  and  tabs (until the next word).  Everything that is
                  passed over is printed.

                  A "word" is defined as any  collection  of  letters,
                  numbers,  and the separators ".", "%", and "$".  The
                  other separators which delimit a word will cause the
                  scan  to  stop  after the word and subsequent blanks
                  and tabs are passed over.  (See also Section 6.21 to
                  set separators.)
-SOS-                                                          Page 36


X<string> $       The X command moves  the  pointer  over  blanks  and
                  tabs,  deleting  them  as it moves, and then deletes
                  the next "word" and the following blanks  and  tabs.
                  After  the deletion, a string of text is inserted to
                  replace the word and subsequent  blanks  which  were
                  deleted.

^I                A control-I (or TAB) moves the pointer to the end of
                  the current line.

Any other character, used as a command in intraline  edit  mode,  will
cause a bell to be echoed and the command will be ignored.

All echoing of deleted text in intra-line edit mode is  suppressed  if
the user is in "EXPERT" mode (see Section 6.21).



6.10  THE EXTEND COMMAND - "X"

The Extend command is another way to enter intraline edit mode.

          *X<range>(CR)

With this command, however, the pointer is moved  immediately  to  the
extreme  right  of the line, the characters passed over are printed on
the terminal, and the user is  in  the  intraline  insert  mode.   The
desired text should then be typed in followed by (CR).

          <text>(CR)

If a (LF) is typed instead of a (CR), a  return,  linefeed  occurs  at
that  point.   This  creates a new line consisting of anything that is
subsequently typed in, since the user is still in  insert  mode.   The
number  of  the  new  line  is  determined by the methods described in
Section 6.9.  Note that a (CR) must be  used  eventually  to  end  the
insertion, unless the sequence of line numbers does not permit another
line.  In this case, the user will be returned to SOS command level.

If an  $  is typed before the (CR), the user may then issue any of the
intraline edit mode commands.

          <text> $ (CR)

The following form of the command will suppress the  type-out  of  the
original line:

          *X<range>,S(CR)

Only the characters that the user types  for  the  insertion  will  be
printed on the terminal.
-SOS-                                                          Page 37


6.11  THE SUBSTITUTE COMMAND - "S"

The Substitute command will substitute "newstring" for all occurrences
of  "oldstring" in the specified range and print every line in which a
substitution has been made.  (Note  that  the  options  are  discussed
separately below.)

          *S[<oldstring> $ <newstring>] $ [<range>][<options>](CR)

If the first line with  a  substitution  is  not  on  the  first  page
specified in the range, or if a subsequent line with a substitution is
not on the same page as a previous line,  "PAGE  n"  will  be  printed
before the appropriate line.

To substitute the same strings specified in the last S  command,  omit
the strings and one  $  from the command:

     *SOLD $ NEW $ 100/1:100/2(CR) Substitute    "NEW"     for     all
                                   occurrences   of   "OLD"   in   the
                                   specified range.

     *S $ /3(CR)                   Change "OLD" to "NEW" (as specified
                                   previously) on page 3.

The "S" command with no arguments performs the  substitution  only  on
the first line found.

If the strings are omitted and no previous S command had  been  given,
SOS will print the error message "%NO STRING GIVEN".

If the entire range is omitted, SOS will assume a range from the  line
after the current line through the end of the file.  If the first part
of the range is omitted, it is  assumed  to  be  the  line  after  the
current  line.   The  current  line is set to the last line in which a
substitution took place.  If a substitution did not occur,  the  value
of the current line will not be updated.

It is also possible to perform several substitutions at one time.  All
text  to be located and changed is specified first, followed by an  $ 
and all the text to be substituted, followed by the range.

The form of this command is:

          S<oldstring1>(CR)
          <oldstring2>(CR)
               .
               .
               .
          <oldstringn> $ <newstring1>(CR)
          <newstring2>(CR)
               .
               .
               .
          <newstringn> $ <range>(CR)
-SOS-                                                          Page 38


If  there  are  fewer  "newstrings"  than   "oldstrings",   the   last
"newstring"  is  substituted  for  the  extra "oldstrings".  Up to six
oldstring and six newstrings (containing 200 characters in all) may be
used;   if either is exceeded, one of the following error messages may
appear:  "%TOO MANY STRINGS" or "%STRING TOO LONG".



OPTIONS

The complete Substitute  command  format,  including  options,  is  as
follows:

*S[<oldstring> $ <newstring>] $ [<range>][,D ,N][,E][,<number>](CR)

Substitute command options are defined below:

D         By specifying this option, the user can look  at  each  line
          after  the substitutions have been made in order to "decide"
          if he prefers the new line or the old one.  After each  line
          is  printed,  SOS  will wait for the user to type one of the
          following characters:

          RUBOUT The indicated substitutions will not  be  made;   the
                old  version  of  the line will be retained.  SOS will
                then print the next line and, when  found,  will  wait
                for another "D" command character.

          E     SOS will return immediately to  command  mode  without
                performing the substitutions.

          G     SOS will use the modified line to replace the original
                line;    Decide   mode  will  be  halted  and  further
                substitutions will be made automatically.

          A     SOS  will  enter  intraline   edit   mode   with   the
                substititions  already  made;  the user then can issue
                one of the following  (or  any  other  Intraline  Edit
                Command):

                ^U    Restore the original line.

                (CR)  Leave   intraline   edit   mode   and   continue
                substitution.

          Q     Abort the entire process by returning SOS  to  command
                mode.

A space will automatically cause the new line to replace the old  line
and substitution to continue.

N               This option will suppress the printing of those  lines
                in which a substitution has been made.

E               This option will cause upper and lower case letters to
-SOS-                                                          Page 39


                be treated as non-identical in the "old" string.  This
                should come after D or N, if  either  is  present,  or
                after the range.  See Chapter 9.

<number>        "<number>" specifies the number of lines  of  a  given
                string  to be substituted - 99999 usually will include
                them all.



6.12  THE COPY COMMAND - "C"

The Copy command will insert a  copy  of  existing  text  at  a  given
location.  Its format is:

  *C<destination line number>,<source range>[,<inc1>[,<inc2>]](CR)

The Copy command acts as if an Insert command  had  been  done  for  a
given  location,  and  then  as  if  all of the lines specified by the
source range had been typed in, using the specified increment  between
destination  line  numbers.   If  the increment is too large, SOS will
print "%OUT OF ORDER" or "%WRAP AROUND", and  then  choose  a  smaller
increment, which is indicated as follows:

      INC1=<number>

If, for some reason, SOS cannot choose a small  enough  increment,  it
will print

          INC1=ORDER or INC1=WAR

The specified increment will be used, and SOS will copy as many  lines
as possible into the available space.

Since all the text to be copied must be contained in core at one time,
copying  large  blocks  of  text  may  result  in  the  error  message
"%INSUFFICIENT CORE AVAILABLE".  The only solution is to copy  several
smaller blocks of text.

If the source lines contain page marks, the renumbering  of  lines  at
the  destination  using  the first increment will cease when the first
page mark is reached;  then all lines between the first and last  page
marks  will  be  inserted with original numbers.  Lines after the last
page mark will be inserted with the original numbers, unless a  second
increment  (<inc2>)  for  the destination line numbers is specified in
the command.

If the second increment is too  large,  SOS  will  print  one  of  the
following error messages:  "%OUT OF ORDER" or "%WRAP AROUND".

If the second increment is not specified and renumbering is not  done,
SOS will print "%OUT OF ORDER".

In both cases, SOS will try to use a different increment, as indicated
by:
-SOS-                                                          Page 40


          INC2=<number>

If SOS cannot find a suitable increment, it will print:

          INC2=ORDER

SOS then will use  the  specified  increment  (or  the  original  line
numbers if a second increment had not been stated in the command), and
will insert as many lines as possible  into  the  remaining  available
space.

The Copy command will enable the user to copy lines from a file  other
than  the  one  presently  being  edited.  If the line numbers of this
other file are unknown, then the user will first type:

          *C<destination line number><source filename>/S(CR)

                              or

          *C<destination line number>=<source filename>/S(CR)

This will cause SOS to respond with a "C*".  "/S" places the indicated
source  file  in read-only mode.  The desired lines are found by using
the Print, List, or Find commands.  After the lines have  been  found,
type:

          C*E(CR)

SOS will reply

          SOURCE LINES=

At this point, the rest of the Copy command should be typed.

          <source range>[,<inc1>[,<inc2>]](CR)

The current line will be set to the last line copied.



6.13  THE TRANSFER COMMAND - "T"

The Transfer command moves a set of lines from one location in a  file
to another.

  *T<destination line number>,<source range>[,<inc1>[,<inc2>]](CR)

The Transfer command is the same as  a  Copy  command  followed  by  a
Delete command.  With the Transfer command (unlike the Copy command):

   1.  The source range must be in the file currently being edited.
-SOS-                                                          Page 41


   2.  The error  message  "%ILLEGAL  TRANSFER  DESTINATION"  will  be
       printed when the destination is inside the source range, as in:

          *T100/3,/2:/5(CR)

If an "%OUT OF ORDER" error message is printed because of the  removal
of  a  page mark, SOS then will reinsert one page mark and print "PAGE
MARK INSERTED TO PREVENT ORDER ERROR".

If the specified destination is on a page which does  not  exist,  SOS
will  insert  the text at the end of the file and print "TEXT INSERTED
AT END OF FILE".  SOS also will insert a page mark to prevent an "%OUT
OF ORDER" error message.

Note that <inc2> must be used if line numbers other than the  original
are desired for the last page.



6.14  THE JOIN COMMAND - "J"

The Join command joins two consecutive lines by deleting the  carriage
return/linefeed  sequence  at  the end of one line and the line number
and TAB of the next line.

          *J<line>(CR)

<line> is the first of the pair of  lines  to  be  joined.   The  line
number  of the new line that is created will be the same as this first
line.

If there are no errors, the current line is the line that is created.

The lines will not be joined if SOS prints the  error  message  "%LINE
TOO LONG".

If the line specified as the argument is the last line  on  the  page,
SOS will give the error message "%NO NEXT LINE".



6.15  THE NUMBER COMMAND - "N"

After an "%OUT OF ORDER"  message  (or  at  any  other  time),  it  is
possible  to renumber the file, or portions of it, by using the Number
command:

          *N[A P]<increment>[,<range>[,<starting number>]](CR)

The first argument is the increment to be used in the renumbered file.
The  first  line  that  is renumbered is given this number, unless the
third argument is specified.  Each succeeding line  will  be  given  a
number  that  is  the sum of the increment and the previously assigned
line number.
-SOS-                                                          Page 42


If renumbering crosses a page mark, the first line  on  the  new  page
will  be given the "starting number" - i.e., either the third argument
or the first argument (if the third is omitted).  For example,

BEFORE RENUMBERING:

          PAGE 2    115     126     137     150

          PAGE 3    900     911     952     999

          *N10,/2:/3(CR)

AFTER RENUMBERING:

          PAGE 2    10      20      30      40

          PAGE 3    10      20      30      40

If  the  second  argument  is  absent  (indicating  the  range  to  be
renumbered),  the  entire  file  will  be renumbered.  If there are no
lines in the specified range, SOS will print the  error  message  "%NO
SUCH LINE(S)".

The Number command is useful in renumbering a  page  before  the  page
mark is deleted in order to avoid an "%OUT OF ORDER" error message.

If the user deletes the page mark before renumbering, he should  issue
the  Number  command  with  the  "/." range specification, the desired
increment, and starting point, if desired.

          *N10,/.(CR)              Renumber the current page  with  an
                                   increment and starting point of 10.

          *NA10,.!3(CR)            Renumber the next  three  lines  by
                                   adding 10 to the line numbers.

          *NP(CR)                  Renumber the entire file and do not
                                   reset  line  numbers  when crossing
                                   page   boundaries.    This   allows
                                   continuously     increasing    line
                                   numbers   throughout    the    file
                                   regardless of page marks.

After renumbering, the current number and page  will  be  set  to  the
number  of the last renumbered line.  An increment of 0 will result in
the error message "%ILLEGAL COMMAND".  If the specified  increment  is
so  large  that  it causes some line numbers to be greater than 99999,
the high-order digits of these line numbers will be dropped.  SOS will
then  print  the  error  message "%WRAP AROUND" along with the page on
which the problem occurred.  The page will be out of order and  should
be renumbered with a smaller increment.
-SOS-                                                          Page 43


6.16  THE JUSTIFY COMMAND - "JU"

The JUstify command  justifies  the  text  in  a  specified  range  by
ignoring all line numbers, returns, and linefeeds:

          *JU<range>(CR)

Line numbers, returns, linefeeds, and blanks are then inserted so that
the  line  length  is the difference between the right (RMAR) and left
(LMAR) margins plus one:

          RMAR-LMAR+1=line length

Inserting any additional characters will result in  unjustified  text.
Note  that  the  default  values  of  "RMAR"  and  "LMAR" are 64 and 1
respectively.

If the right margin is less than the left,  SOS  will  print  "%MARGIN
ERROR".

In this case, use the Set command to reset either or both margins.

SOS inserts extra blanks between words,  starting  from  the  left  or
right on alternate lines, to make the line length "RMAR-LMAR+1".

A word is anything between blanks.  (The end of the original  line  is
considered  a  blank.)  A  word that ends with ".", "?", or "!" may be
followed by two blanks;  otherwise, only one blank is allowed, and all
other blanks will be ignored.

SOS inserts blanks at the beginning of the new line equivalent to  the
value  of the left margin minus 1.  The new line number is the same as
the number derived by the Number command:

          *N<increment>,<range>(CR)

A page mark automatically will be inserted if  the  next  line  number
exceeds  the  maximum  line number (MAXLN) whose default is 99999.  If
this occurs, the user will be informed.

Paragraphing will cause exceptions to the above procedures.   The  end
of a paragraph is indicated by one of the following conditions:

     1.  Tab in the first character position

     2.  Blank line

     3.  Page mark

     4.  Beginning or end of specified range

When one of these conditions is encountered, the line that immediately
precedes  the  end  of the paragraph is not expanded (unless it is the
beginning of the range).  The line, however, is placed  at  the  LMAR,
with leading blanks inserted if necessary.
-SOS-                                                          Page 44


If the paragraph begins with a tab (8 spaces,  entered  during  Insert
mode by CTRL-I), the tab is merely inserted into the text.  Otherwise,
the paragraph will  begin  with  the  paragraph  margin  (PMAR)  whose
default is 1, rather than the LMAR.



6.17  THE JUSTIFY LEFT COMMAND - "JL"

The Justify Left command removes leading blanks from lines of a  range
and inserts LMAR-1 blanks to move the lines to the left margin.

          *JL<range>(CR)

The first line of a paragraph is treated as in  the  JUstify  command.
No chopping, filling, or renumbering, however, is done.



6.18  THE JUSTIFY RIGHT COMMAND - "JR"

It is also possible to right justify a range of text:

          *JR<range>(CR)

Enough blanks are inserted at the beginning of the line  so  that  the
right  end  of  the  line  is  at  the  right margin.  If any tabs are
present, the  required  blanks  are  inserted  to  the  right  of  the
rightmost tab in the line.



6.19  THE JUSTIFY CENTER COMMAND - "JC"

The Justify Center command centers the lines of a  range  between  the
left and right margins:

          *JC<range>(CR)

JC is like the JR command, except that only half as  many  blanks  are
inserted to make the line centered between LMAR and RMAR.



6.20  THE JUSTIFY WORD COMMAND - "JW"

The Justify Word command, like the  JUstify  command  (Section  6.16),
justifies a line of text.  In this case, SOS includes as many words as
possible between LMAR and RMAR without adding blanks  or  hyphenating.

---------------
WARNING:  After a line that exceeds RMAR-LMAR+1, SOS  will  print  the
error message "%LINE TOO LONG".  The text, when printed, may not be as
expected;  the margins should be  reset  and  the  command  should  be
reissued.
-SOS-                                                          Page 45


The text, therefore, appears as typewritten text without  a  justified
right margin.

The format of the JW command is as follows:

          *JW<range>(CR)



6.21  THE SET COMMAND - "_"

The Set command sets (or changes) parameters in SOS:

          *<parameter>[=<number>](CR)

For example, after SOS has been used for a while, the  user  may  want
shorter forms of error messages.  By typing:

          *EXPERT(CR)

all error messages will be abbreviated to five characters or less (see
Appendix A).  This is reversed by typing:

          *NOVICE(CR)

Note that SOS begins in _NOVICE mode.

For the intraline edit mode W and  X  commands,  the  per  cent  sign,
dollar sign, and period are considered part of the word.  To use these
as separators or delimiters, type:

          *SEPARATOR(CR)

This is reversed by typing "*NONSEPARATOR(CR)", the default condition
when SOS began edit mode.

The parameters used in the family of  Justify  commands  (LMAR,  RMAR,
PMAR,  MAXLN), the increment parameter (INC), and the LENGTH parameter
(Print option) may be assigned new values as follows:

          * LMAR=5(CR)        *MAXLN=1000(CR)

          * RMAR=65(CR)       *INC=50(CR)

          * PMAR=10(CR)       *LENGTH=60(CR)

The newly-assigned values are only valid  while  editing  the  current
file.

It is possible to change the name of the resultant edited file:

          *NAME=<filename>(CR)

The name of the program to be run for the "G" command may  be  changed
by the following command:
-SOS-                                                          Page 46


          *RUN=[dev:]<filename>[<path>]



6.22  THE GIVE INFORMATION COMMAND - "="

Any time the user is in command mode, he may request the  value  of  a
parameter by using the Give Information command:

          *=<parameter>(CR)

Possible Give parameters are:

*=INC(CR)       Print the current increment.

*=.(CR)         Print <current line number>/<current page>.

*=LMAR(CR)      Print the current value for the left margin.

*=PMAR(CR)      Print   the   current   value   used   for   paragraph
                indentation.

*=RMAR(CR)      Print the current value for the right margin.

*=MAXLN(CR)     Print the  maximum  line  number  allowed  in  the  JU
                command.

*=BIG(CR)       Print the page number of the largest page in the file.

*=ERROR(CR)     Print the last error message - in the long form,  even
                if "_EXPERT" is in effect.

*=STRING(CR)    Print the string  used  by  the  Find  and  Substitute
                commands:

                     SEARCH:
                <Find command string(s)>
                     SUBSTITUTE:
                <Substitute command newstring(s)>
                     FOR:
                <Substitute command oldstring(s)>

*=CASE(CR)      Print whether SEPARATOR (or other words  described  in
                Chapter 9) have been set.

*=NAME(CR)      Print the name of the resultant output file.

*=LENGTH(CR)    Print the length used for determining the end  of  the
                page in the Print command options.
-SOS-                                                          Page 47


6.23  LINE CONTENTS SPECIFICATION - ALL COMMANDS

In SOS it is possible to address lines by content,  rather  than  line
numbers.   This  is  done by replacing each <line number> field of any
command with:

           $ <string> $ (CR)

The rest of the original command string continues on  the  next  line.
This   may   be  another  " $ <string> $ (CR)"  or  (CR)  alone  which
terminates the entire  command.   For  example,  to  print  everything
between  a line containing "ONE" and a line containing "TWO", type the
command:

          *P $ ONE $ (CR)
          : $ TWO $ (CR)
          (CR)
          *

Note that three carriage returns are required:  one for each string of
text and one for terminating the Print command.

If the string between two  $ 's is null, then the string last used  in
this  context  will  be  used  again.   (Strings  from  the  Find  and
Substitute commands do NOT qualify.) Normally, the search begins  with
the  current  position  and  continues through the end of the file.  A
range, however, may be specified as follows:

           $ [<string>] $ [<range>][,D ,N][,E][,<number>](CR)

<range> may be specified as a group  of  line  numbers,  or  the  line
contents  specification  described  above  may be substituted.  In the
latter case, <range> provides the outer  boundaries  for  the  search.
<range> may be nested a maximum of three times.

          *P $ C $ (CR)            Print all the lines between, and
          : $ B $  $ D $ (CR)      including, the first occurrence of
          : $ G $ (CR)             C and the first occurrence of B.
          (CR)                     Only  use  that  portion  of   text
                                   between  the first occurrences of D
                                   and G.

Where the sample text is:

     00300     B   _current line
     00400     C
     00500     D
     00600     B                        Search through this area
     00700     C                        for lines C and B.
     00800     A   Print these 3 lines
     00900     B
     01000     G

Adding either the ",D" or ",N"  option  will  cause  the  entire  line
(",D")  or  the line number (",N") of the first occurrence of the text
-SOS-                                                          Page 48


to be printed.  SOS then will print an "*".  If the user types  RUBOUT
at  this  point, SOS will search for the next line containing the text
and then print the line or line number.  Typing  any  other  character
will terminate the search for the particular text.

The ",E" option specifies that upper and lower case characters are not
equivalent (see Chapter 9).

<number> indicates a number of times the string occurs.  SOS will skip
to  the last occurrence of this specification and use that line as the
starting point for its search.

          *P $ 1 $ ,D,3(CR)   SOS would print all the lines between,
          : $ 4 $ (CR)        and including, the first occurrence of
          (CR)                1  and  the  first  occurrence   of   4;
                              however, 3 in the number field indicates
                              that SOS should use the third occurrence
                              of 1 as its starting point.

Where the sample text is:

          1
          2
          1
          2
          1 _starting point
          2
          3
          4
          1
          2

                                NOTE:

               RUBOUT, when used with the ",D" or  ",N"
               option,  may only be repeated "number-1"
               times.






6.24  THE END COMMAND - "E"

The End command is used to terminate the current edit.

          *E[S B D Q][:<filename>[<path>]](CR)

If a filename is not specified, the original copy of  the  file  being
edited  will  be  renamed  to  <filename>.Qxx;   then the newly edited
version will be stored under the original filename.

If a name is specified, it will be assigned to the edited version.  If
the  user  specifies  a  filename  which  already exists, SOS will ask
-SOS-                                                          Page 49


"OUTPUT FILE EXISTS-DELETE?  (Y OR N):" and wait on the same line  for
a response:

          Y - Delete old file and substitute new file

          N - Do not delete old file 

If "N", SOS will respond with "FILE:" and wait for a new  name  to  be
typed;  this will be assigned to the edited file.

If "Y" and if the old file cannot be deleted SOS  will  respond  "FILE
WRITE  PROTECTED.   TRY  ANOTHER NAME".  The user will be prompted for
another file name.

Instead of using the End command to specify the filename  under  which
the  edited  version  will  be  stored,  the  user, when beginning the
editing session, may specify the new filename as follows:

          .R SOS-<new filename>=<old filename>(CR)

SOS will enter edit mode for <old filename>.  "*E(CR)" at the  end  of
the editing will then cause the edited version to be stored under <new
filename>.  The user may also add "/READONLY" or "/RO" to the command;
this  will  put  the <old filename> in read-only mode.  Thus, the file
named <old filename> will not be overwritten.

Should the user realize that his editing is useless, he may return  to
the monitor without saving the edited version of the file by using the
Quit option:

          *EQ(CR)

SOS will respond by returning him to the monitor.

If the user desires  to  output  the  file  without  sequence  numbers
(either  to  save  disk  space or to allow processing by programs that
cannot handle sequence numbers) he should use the "S" option:

          *ES(CR)

In order to suppress the creation of a backup file the user should use
the "B" option:

          *EB(CR)

The user may also request that the original input file be  deleted  by
specifying the "D" option:

          *ED:FILE.EXT(CR)
-SOS-                                                          Page 50


6.25  THE SAVE WORLD COMMAND - "W"

The Save World command:

          *W[S B][:<filename>[<path>]](CR)

is similar to the End command except that parameters set  by  the  Set
command are not returned to their standard settings (i.e., they remain
as they were before the command), and the user is returned to  command
mode  rather  than  to  the  monitor.   This  is useful for saving the
current version of the file in case the system crashes, and should  be
done  every  fifteen  minutes  while  in  edit mode.  Then, if the the
system does crash, only the editing done since the last W command  was
issued will be lost.

If a filename is used with this command, the edited  version  will  be
saved  under  that  name.  If the W command is issued again during the
save editing session and no filename is specified,  then  the  current
version is saved with the name last given in a previous W command.

If the system crashes and a W command has not  been  issued  recently,
the  user  may  be  able  to recover his editing by typing the Monitor
command:

          .RENAME <filename not in use>=nnnSOS.TMP(CR)

(where "nnn" is the user's job number).

This will attach the user to a temporary file which  may  be  the  one
that  SOS  was  using  when  the system died.  It is then necessary to
enter edit mode with the new filename.  If this  is  not  the  correct
file,  delete  it  and  try  again using another temporary file (e.g.,
nnnSOS.TEM).  A system DIRectory command may be issued to see if there
are any temporary files.



6.26  THE GO COMMAND - "G"

It is possible to edit a program source file  with  SOS  and  then  to
issue  a compile-class Monitor command (EXECUTE, LOAD, COMPILE, etc.).
SOS can be reentered after the EXECUTE, LOAD, or COMPILE is  done  and
can determine the name of the last file edited;  thus, typing:

          .R SOS(CR)

---------------
WARNING:  CTRL-C (^C) should be used with caution.  In response  to  a
^C SOS will type "Yes?  (Type H for help)".
          C   Continues
          E   Ends the session and closes the file
          Q   Quits (deletes temp files)
          M   Returns to the monitor
          R   Reenters (terminates a losing search, etc.)
-SOS-                                                          Page 51


will put the user immediately into edit  mode  within  the  last  file
specified.  Then, once the first DECsystem-10 Monitor command has been
given, and SOS has been entered a second time the Go command  (instead
of  End)  will  write the file onto the disk, exit from SOS, and cause
the previous compile-class Monitor command to be repeated.

          *G(CR)

A filename may also be specified with a Go command:

          *G[S B D Q][:<filename>[<path>]](CR)

This simply renames the edited version;  the name will  be  saved  for
the  next Go command.  Thus, a G command alone will store a file under
a previously-specified name;  a G command which  includes  a  filename
will store the file under that new name.

The Suffixes for the Go command are the same modifiers  as  those  for
the End command.



6.27  THE POSITION COMMAND - "."

The position command sets the line pointer to the position indicated.

          *.<position>



6.28  THE HELP COMMAND - "H" The Help command prints out a list of SOS
commands.  The reader should refer to Appendix F for more details.

          *H



7.0  READ-ONLY MODE

As indicated earlier, once a file is created it may be called  by  SOS
in  read-only  mode  by  the addition of "/READONLY" or "/RO" when the
file is named in the initial conversation with SOS:

          .R SOS(CR)
          FILE:  EXAMPL.FOR/READONLY(CR)

          READ:  EXAMPL.FOR

               or

          .R SOS-EXAMPL.FOR/READONLY(CR)

          READ:  EXAMPL.FOR
-SOS-                                                          Page 52


The user will not be allowed to perform any editing in the named  file
(i.e., "EXAMPL.FOR").

In read-only mode, only the following commands may  be  used:   Print,
Find, End, Go and List.



8.0  INDIRECT COMMANDS

If a particular  sequence  of  commands  is  used  frequently,  it  is
possible  to  insert  these  commands  in  a  file.   Then  SOS can be
instructed to read commands  from  the  file,  rather  than  from  the
terminal keyboard.  The command:

          *@<filename>(CR)

will do this, provided the list of commands  is  found  in  the  named
file.   When  SOS sees this command, it will begin taking its commands
from the file.  Only the following  will  be  printed  on  the  user's
terminal:

          1.  Error messages

          2.  Printout from the P command

          3.  Items found by the F command

          4.  Substitutions made by the S command

          5.  Lines altered by the A command

If the user includes the Substitute command with the Decide option  in
his  file,  he must type in the decision character when the Substitute
command is executed (see Section 6.11).

When SOS has executed the last command in the  indirect-command  file,
the user will be returned to command mode.

When the user is inserting commands into the  file,  he  may  have  to
enter such characters as  $  or a (CR) without the (LF) (see Chapter 9
on SOS character sets).



9.0  UPPER AND LOWER CASE REPRESENTATION

SOS has been designed to allow its use at a variety of terminals  with
different  character  sets.   The  following explanations describe the
most common terminal characteristics.
-SOS-                                                          Page 53


9.1  C128 and C64 modes

Model 33 and 35 Teletypes employ  only  upper-case  letters  and  some
special  symbols,  totaling  64  characters  in  all.  SOS is capable,
however, of using the full ASCII 128-character set.  Since  edit  mode
assumes  the  64-character set, it is necessary to specify "C128" mode
in order to represent lower-case  letters  and  the  additional  ASCII
symbols.  This C128 mode is indicated in a Set command:

          *C128(CR)

From Appendix D it is obvious that upper-case letters  are  input  the
same  in  both  C64 and C128 modes, except for the '.  In C128 mode, a
single ' has no meaning whatsoever;  it is  necessary,  therefore,  to
type '' in this mode to represent a single '.

To return to C64 mode, again use a Set command:

          *C64(CR)

In C64 mode, only the characters on the terminal may be input.



9.2  UPPER AND LOWER CASES

SOS initially assumes that all characters are upper  case.   Thus,  in
C128  mode  it  is necessary to precede any character considered lower
case with a '.  The user, then, can intersperse the two cases  in  his
text in this manner to obtain all alphabetic characters.

When the text primarily is  composed  of  lower-case  letters,  it  is
easier  to assume that all characters are lower case.  Then, a special
configuration (i.e., the ') will indicate upper case.  The Set command
is used to indicate the dominance of lower case.

          *LOWER(CR)

To represent upper-case characters, precede each character with  a  '.
To revert back to the original upper-case mode, type

          *UPPER(CR)



9.3  COMBINING MODES AND CASES

The following examples illustrate how  SOS  modes  and  cases  can  be
combined:
-SOS-                                                          Page 54


            Text                               Explanation

*I100
00100       IT'S A LINE                        Inserted in C64 UPPER.
*P.
00100       IT'S A LINE                        Printed in C64 UPPER.
*LOWER
*P.
00100       IT'S A LINE                        Printed in C64 LOWER.
*C128
*UPPER
*P.
00100       IT''S A LINE                       Printed in C128 UPPER.
*LOWER
*P.
00100       'I'T'''S 'A 'L'I'N'E               Printed in C128 LOWER.
*C64
*I200
00200       IT ISN'T HARD                      Inserted in C64 LOWER.
*UPPER
*P.
00200       IT ISN'T HARD                      Printed in C64 UPPER.
*LOWER
*P.
00200       IT ISN'T HARD                      Printed in C64 LOWER.
*C128
*UPPER
*P.
00200       'I'T 'I'S'N'''T 'H'A'R'D           Printed in C128 UPPER.
*LOWER
*P.
00200       IT ISN''T HARD                     Printed in C128 LOWER.
*UPPER
*I300
00300       DON''T YOU LIKE IT?                Inserted in C128 UPPER.
*P.
00300       DON''T YOU LIKE IT?                Printed in C128 UPPER.
*LOWER
*P.
00300       'D'O'N'''T 'Y'O'U 'L'I'K'E 'I'T?   Printed in C128 LOWER.
*C64
*UPPER
*P.
00300       DON'T YOU LIKE IT?                 Printed in C64 UPPER.
*LOWER
*P.
00300       DON'T YOU LIKE IT?                 Printed in C64 LOWER.
*C128
*I400
00400       IT''S THE END                      Inserted in C128 LOWER.
*UPPER
*P.
00400       'I'T'''S 'T'H'E 'E'N'D             Printed in C128 UPPER.
*LOWER
*P.
-SOS-                                                          Page 55


00400       IT''S THE END                      Printed in C128 LOWER.
*C64
*UPPER
*P.
00400       IT'S THE END                       Printed in C64 UPPER.
*LOWER
*P.
00400       IT'S THE END                       Printed in C64 LOWER.



9.4  MODEL 37 TELETYPE:  37 MODE

The Model 37 Teletype has the full ASCII 128-character set;   it  can,
therefore, input these characters directly to SOS.  To type lower-case
letters on terminals such as the Model 37, it is  necessary  to  issue
the system command:

          .TTY LC(CR)     or     .SET TTY LC(CR)

Then, to allow SOS to output lower-case characters to  this  terminal,
the user types:

          *M37(CR)

This is reversed by  another  Set  command  ("*M33(CR)")  which  will
essentially  make  the  Model  37  Teletype act as if it were either a
Model 33 or 35  -  i.e.,  2-character  equivalents  must  be  used  as
described in Section 9.2.



9.5  ASCERTAINING MODE AND CASE:  THE GIVE INFORMATION COMMAND

If there is any doubt as to which case and mode are employed, issue  a
"Give information" command.

          *=CASE(CR)

For C64 mode, SOS will print

          C64 UPPER

             or

          C64 LOWER

For C128 mode, SOS will print

          UPPER

           or

          LOWER
-SOS-                                                          Page 56


For C64 mode on a Model 37 teletype, SOS will print

          MODEL 37 C64 UPPER

                 or

          MODEL 37 C64 LOWER

For C128 mode on a Model 37 teletype, SOS will print

          MODEL 37 UPPER

               or

          MODEL 37 LOWER



9.6  SPECIAL CONSIDERATIONS:  FIND AND SUBSTITUTE COMMANDS

For a Find command<string>, upper and lower-case  characters  will  be
considered  the  same unless the E option is used.  For the Substitute
command,  upper  and  lower-case  will  be  considered  equivalent  in
<oldstring> only.



9.7  SPECIAL "MATCHING" CHARACTERS:  FIND AND SUBSTITUTE COMMANDS

If C128 mode has been specified or if a Model  37  teletype  is  used,
there  are a few special characters which "match" some other character
in the Find and Substitute command <strings>.

          Representation Explanation

                ':       Matches a SEPARATOR which  is  any  character
                         other  than a letter, a number, a ".", a "%",
                         or a "$".  See Section 6.21 on Separators.

                '/       Matches any character.


                '%       The   subsequent   character   matches    any
                         character  which it would not normally match.
                         A'%BC will be matched by AAC, ACC, ADC, etc.,
                         but  not by ABC (or abc unless the "E" option
                         is specified with Find or Substitute).
-SOS-                                                          Page 57


Combinations of the above 3 codes include:

                         '%':  Matches any  letter,  number,  etc.   -
                         i.e., not a SEPARATOR.

                         '%'/ Matches only the beginning or end  of  a
                         line.   For example, '%'/OLD finds only those
                         occurrences of "OLD" at the  beginning  of  a
                         line.

                '7       Quotes the next character.   When  used  with
                         another  special character, '7 will find that
                         character and not its match:

                         '7'% Searches for the  actual  occurrence  of
                         '%.

                         '7'7 Searches for '7.

                         '%'7'% Matches any character except '%.

                ')       Indicates  "any  number  of"  the  particular
                         character  that  follows  it.   For  example,
                         A')BC Matches AC, ABC, ABBC, etc.  In case of
                         ambiguity, the shortest string is found.  For
                         the above example, A')BC will find AC  rather
                         than ABC.

                         ')'%'7'% Matches  any  number  of  characters
                         which are not '%'s.

Two other special characters may be used in  the  <newstring>  of  the
Substitute  command  when  one  of the special constructions discussed
above has been specified in <oldstring>:

                '*       Specifies that a match which occurs by  using
                         one  of the above special constructions is to
                         be used for a later substitution.

                         '*1'* A stand-in for  whatever  was  actually
                         matched  first  by  a  special  construction.
                         '*2'* is for the second match, etc.

                         For example, suppose all occurrences  of  OLD
                         are  to  be  replaced by NEW, but COLD, FOLD,
                         etc., also exist in the  file.   OLD  can  be
                         given  for  the  oldstring,  but  how can the
                         SEPARATORs    be    replaced?     The    "'*"
                         construction is used as follows:

                         *S':OLD': $ '*1'*NEW'*2'* $ <range>(CR)
-SOS-                                                          Page 58


                '"       In more complicated specifications,  '"  will
                         replace  successive  recurrences  of  the  '*
                         construction when they  appear  in  the  same
                         order that they were matched.

                         For example, as the file is scanned  for  the
                         <oldstring>,  the  matches  with  the special
                         constructions  are  actually   numbered   and
                         stored  on  the disk.  (The first is 1, etc.)
                         Then,   when   the   <newstring>   is   being
                         substituted,  these  numbered  matches can be
                         named for use with '*1'*, '*2'*, etc.   -  if
                         they  occur  in  order, '" can be substituted
                         for '*<number>'*.

The constructions make it possible to isolate unknown portions of text
by  manipulating  what  comes  immediately  before  and  after.  NOTE:
Certain strings which can be formed  with  the  above  characters  are
illegal and will produce the message "%ILLEGAL SEARCH STRING".

Since the strings are not checked when  the  command  is  issued,  the
message  will  only  be  given  when  an  attempt is made to match the
special construction.  If '%'), or  '7  is  not  followed  by  another
character, or if '% is followed by '), SOS will print "%ILLEGAL SEARCH
STRING".

Because some of these special searches involve  recursion  or  require
the  use  of  table  space inside SOS, it is possible to get the error
message, "%SEARCH STRING TOO COMPLEX".  If this occurs, try a  simpler
string.

Example 1

Exchange two arguments of a function:

          function (A,B) => function (B,A)

where A and B may be any  string  not  including  the  left  or  right
parenthesis or a comma.

  *Sfunction(')'/,')'/) $ function('*2'*,'*1'*) $ <range>(CR)

Example 2

Change all  READ (3,#)list  to  READ (5,#) list

          *SREAD')'%(3, $ READ'"(5, $ <range>(CR)

NOTE:   This  will  not  match  "READ(4,#)  A(3,5)"  but  will   match
"READ(3,".
-SOS-                                                          Page 59


                              APPENDIX A

                            ERROR MESSAGES


     EXPERT    NOVICE

     %DDE      %DEVICE OUTPUT ERROR
     %DIE      %DEVICE INPUT ERROR
     %DNA      %DISK NOT AVAILABLE
     %FNF      %FILE NOT FOUND
     %ICN      %INTERNAL CONFUSION
     %ILC      %ILLEGAL COMMAND
     %ILFMT    %ILLEGAL LINE FORMAT
     %ILR      %ILLEGAL REPLACEMENT ON INSERT
     %ILUUO    %ILLEGAL UUO
     %IRS      %ILLEGAL REPLACEMENT STRING
     %ISS      %ILLEGAL SEARCH STRING
     %ITD      %ILLEGAL TRANSFER DESTINATION
     %LTL      %LINE TOO LONG
     %NEC      %INSUFFICIENT CORE AVAILABLE
     %NLN      %NO SUCH LINE(S)
     %NNN      %NO NEXT LINE
     %NSG      %NO STRING GIVEN
     %NSP      %NO SUCH PAGE
     %ORDER    %OUT OF ORDER
     %STC      %STRING TOO COMPLEX
     %STL      %STRING TOO LONG
     %UNA      %DEVICE NOT AVAILABLE
     %TMS      %TOO MANY STRINGS
     %WAR      %WRAP AROUND
     %SRF      %SEARCH FAILS
     %CMERR    %INDIRECT READ ERROR
     %CMEND    %INDIRECT END-OF-FILE
     %MAR      %MARGIN ERROR
-SOS-                                                          Page 60


                              APPENDIX B

                         SUMMARY OF COMMANDS


ALTER

     *A<range>(CR)

          Next Character - SPACE
          Last Character - RUBOUT
          Change - C<character>
          Delete - D
          Insert - I<string> $
          End Alter Mode - (CR)
          End Alter Mode - E (without printout)
          Quit - Q
          Start Over -  ^U
          Skip - S<character>
          Kill - K<character>
          Replace - R
          Line - L
          Print - P
          Justify - J
          Word - W
          Delete Word and Insert Text - X<string> $

COPY

     *C<destination line number>,<source range>[,<inc1>[<inc2>]](CR)

     *C<destination line number><source filename>/S(CR)

     *C<destination line number>=<source filename>/S(CR)

DELETE

          *D<range>(CR)

END
          *E[B D Q S][:<filename>][<path>](CR)

EXTEND

          *X<range>[,S](CR)

          <text>[ $  (LF)](CR)

FIND
          *F[[<string>] $ [<range>][,A ,N][,E][,<number>]](CR)

GIVE

*=INC BIG CASE ERROR STRING . LMAR PMAR RMAR MAXLN
        LENGTH NAME LOCATION(CR)
-SOS-                                                          Page 61


GO

          *G[B D Q S][:<filename>][<path>](CR)

INSERT

          *I<position>[,<increment>](CR)
                       or
          *I<position>[;<increment>](CR)

JOIN

          *J<line>(CR)

JUSTIFY

          *JU<range>(CR)

JUSTIFY CENTER

          *JC<range>(CR)

JUSTIFY LEFT

          *JL<range>(CR)

JUSTIFY RIGHT

          *JR<range>(CR)

JUSTIFY WORD

          *JW<range>(CR)

KILL

          K/<page>

LINE CONTENTS SPECIFICATION - ALL COMMANDS

          line number field =
           $ <string> $ (CR)

LIST

          *L[<range>][,S](CR)

MARK

          *M<line number>/<page number>(CR)

NUMBER

          *N[A P]<increment>[,<range>[,<starting number>]](CR)
-SOS-                                                          Page 62


POSITION

          *.<position>(CR)

PRINT

          *P[<range>][,<options>](CR)


REPLACE

          *R<range>[,<increment>](CR)
                       or
          *R<range>[;<increment>](CR)

SAVE WORLD

          *W[S B][:<filename>][<path>](CR)

SET

          *<parameter>(CR)

          parameter =
               UPPER/LOWER
               M33/M37
               C64/C128
               NOVICE/EXPERT
               NONSEPARATOR/SEPARATOR

          *<parameter>=<number>(CR)

          parameter =
               INC LMAR PMAR RMAR MAXLN LENGTH PLINES

          *NAME=<filename>(CR)

          *RUN=[dev:]file.ext[<path>]

SUBSTITUTE

  *S[<oldstring> $ <newstring>] $ [<range>][,D ,N][,E][,<number>](CR)

TRANSFER

 *T<destination line number>,<source range>[,<inc1>[,<inc2>]](CR)

Commands may be aborted by typing  two  bells  (^G's)  in  succession.
This  feature allows you to return to SOS command level from any level
except ALTER mode.  This feature may also be used to delete back  past
an ESCAPE typed for an "F" or "S" command.
-SOS-                                                          Page 63


                              APPENDIX C

                            DEFAULT VALUES


If certain parameters are not assigned values by the Set command, they
will assume a default value:

          INC=100
          LMAR=1
          PMAR=1
          RMAR=64
          MAXLN=99999
          LENGTH=55
          PLINES=16

Also, the following parameters are "modes" in which SOS begins:

          UPPER,M33,C64,NOVICE,NONSEPARATOR

These can be reversed by using the  Set  command  with  the  following
parameters:

          LOWER,M37,C128,EXPERT,SEPARATOR

All SOS parameters may be specified in the initial command  string  as
switches.   They  may also occur in the SWITCH.INI file.  See Appendix
E.  All command string switches and parameters  may  be  specified  by
their unique initial letters.
-SOS-                                                          Page 64


                              APPENDIX D

                        ASCII CHARACTER TABLE






























INSERT PAGE 1 HERE
-SOS-                                                          Page 65


INSERT PAGE 2 HERE
-SOS-                                                          Page 66


                              APPENDIX E

                             SOS SWITCHES

All SOS parameters may be specified as switches  on  the  initial  SOS
command or in the user's SWITCH.INI file.  The following are the legal
switches for SOS:

/BASIC            If the file being edited does not have system  style
                  sequence  numbers  but has at least one digit as the
                  first non-blank character, the file will be read  in
                  the following format:
                       1.  All leading blanks and tabs will be
                              stripped off.
                       2.  If the first non-digit is a space,
                              replace it with a tab.
                       3.  If the first non-digit is a tab, leave
                              it in place.
                       4.  If the first non-digit is anything
                              else then insert a tab.

          In addition, the "/R" switch  in  a  COPY  command
          will cause the file to be read in BASIC mode.

          If the UNSEQUENCE option  is  used,  the  sequence
          number will be converted to a 5-digit string;  the
          following tab will be converted into a space  upon
          exit.

/START:n          Allows the user to  specify  the  starting  sequence
                  number.   The  starting  sequence number defaults to
                  100.  If /START is omitted, it defaults to the value
                  specified in /STEP.

/STEP:n           Allows the user to specify  the  starting  increment
                  used   in   determining   sequence  numbers.   /STEP
                  defaults to 100.

/SAVE:n           Causes an automatic W after every  n  commands  that
                  modify the file.

/ISAVE:n          Invokes an automatic W command after every  n  lines
                  input.

          When either counter goes  to  zero,  the  message:
          "[Doing auto-save, please wait.]" will be printed,
          then the edit session will continue.  If the final
          file  is  to  be  UNSEQUENCED,  the  user  will be
          warned, "[Warning:  sequence numbers preserved]".
-SOS-                                                          Page 67


/DECIDE           Permanently sets the ",D" option on  the  substitute
                  command.  A space is the only character that permits
                  a modified line to be accepted.

/NODECIDE         Negation of /DECIDE.

/NONUMBER         Causes  the  suppression  of  sequence  numbers   on
                  typeout.

/NUMBER           The inverse of /NONUMBER.

/CHECK            This switch causes SOS to verify  that  enough  disk
                  space  exists before every output.  It will allow an
                  overdraw of 100 blocks if possible.  If  your  quota
                  is  exceeded the message:  "[Insufficient disk space
                  to do output]" will be  printed  on  your  terminal.
                  SOS will then wait for you to type "G", "T", "R", or
                  "W" which mean:
                       G   Do the output (now and forever).
                       T   Test disk space and do output if
                             space is available.
                       R   Give resources and do output if space
                             is available.
                       W   Wait until either space appears or you type
                             a different response.
-SOS-                                                              Page 68


                                APPENDIX F

SOS files:

 1. HLP:SOS.HLP        This file.
 2. DOC:SOS23.DOC      Changes from version 21 to version 23.
 3. DOC:SOS.MAN        User's manual for version 23E
 4. SYS:SOS.EXE        The editor.


SOS %23(221)    Help file    13-Jan-77


Summary of SOS commands:

Cmd    Meaning            [Parameters]

P    Print               [<range>,<poptions>]
<LF> Print next line
$    Print preceeding line
I    Insert              [<position>,<increment>]
D    Delete              [<range>]
R    Replace             [<range>,<increment>]
F    Find                [<string>$<range>,<foptions>]
S    Substitute          [<old string>$<new string>$<range>,<soptions>]
N    ReNumber lines      [<increment>,<range>,<start1>,<start2>]
 NA  Add <increment> to <range>
 NP  Preserve line numbers over page marks
C    Copy                [<dest-position>,<range>]
        or               [<dest-position>=<filespec>,<range>]
T    Transfer            [<dest-position>,<range>]
A    Alter               [<range>,<aoptions>]
X    eXtend              [<range>,<xoptions>]
E    End SOS editing session & return to Monitor
 ES  Unsequence resulting output file
 EN    (Same as ES)
 ET  Remove sequence numbers and Form Feeds from output file
 EB  Suppress backup file creation
 EQ  Quit (leaves file in unedited state)
 ED  Delete file being written or read
 EX  Same as "E" command (for TECO compatability)
G    Go (End SOS editing session & run specified program)
W    Save World (saves current version of edited file)
M    Insert page Mark    [<position>]
K    Kill page mark      [/<page number>][:/<page number>]
VV   InVert case         [<range>,<voptions>]
VU   ConVert to Upper case [<range>,<voptions>]
VL   ConVert to Lower case [<range>,<voptions>]
B    Position to first line of file
BP   Position to first line of current page
.    Position to given line [<position>]
J    Join                [<position>]
L    List (on LPT)       [<range>]
/    Set SOS parameter   [<parameter>]
=    Print SOS parameter [<parameter>]
@    Invoke indirect command file [<filespec>]
;    Comment line          [<any text>]
-SOS-                                                              Page 69


JU   Justify       [<range>]
JL   Justify left  [<range>]
JR   Justify right [<range>]
JC   Justify center[<range>]
JW   Justify word  [<range>]
H    Help (prints this text)

^G^G Cancel command being entered
^C^C Interrupt current command (enters dialog)
Alter Command operations:

   nC<ch>      Change n characters
  -nD          Delete next/last n characters
    E          Finish line with no printing
   nI<text>$   Insert with temp increment n
    J          Break line and stick rest at front of next
  -nK<ch>      Delete to n occurrences of <ch>
    L          Print line and reposition to start of line
    P          Print line and reprint to current position
    B          Reposition to start of line
    Q          Quit ALTER (restore original line)
  -nR<text>$   Delete n characters then insert (0I)
  -nS<ch>      Skip forward/backward n occurrences of <ch>
   nW          Skip forward n words
   nU          Delete n words
    T<text>$   Delete word then insert text (0I)
  -n<SP>       Space forward/backward n characters
    <CR>       Print rest of line & finish it
   n<RUB>      Backspace n characters
   n<BS>       Backspace n characters
   -<HT>       Skip to end/start of line
   -X          Insert characters at start/end of line
  -n^          Like <SP>, except inverts case of letters
  -n<          Like <SP>, except converts letters to upper case
  -n>          Like <SP>, except converts letters to lower case
   nV          Invert case of letters
  -n@<cmd><ch> Execute <cmd> through n'th occurrence of <ch>
    ^U         Restore original condition of current line
    ^R         Print current line status
    $          End text insertion; cancel repeat count




Special functions of the "I" command:

I<CR>       Resume previous insertion (I or R command stopped by $)

I/<page>    Insert page mark at end of <page>, followed by text inserted
            on empty <page>+1.

I<pos>;!n   Select increment from table of aesthetic values to permit
            insertion of at least n lines of text.
-SOS-                                                              Page 70



SOS Parameters:

Name         Set  Print  Default Value          What

ADM3A         Y     CASE    Off            Type of CRT-sets CRT mode
 .            N     Y       ---            Current <position>
BAK           Y     Y       On             Create backup file <.Qxx>
BASIC         I     N       Off (unless *.BAS) Read BASIC file
BIG           N     Y       ---            Largest page #
BLOCK         I     Y       On             Output file line-blocked
C64           Y     CASE    On             64 character set
C128          Y     CASE    Off (uses "?") 128 character set
CASE          N     CASE    C64 M33 UPPER  Give case information
CHECK         Y     Y       Off            Do quota checking
COLUMN        N     Y       ---            Print terminal column #'s
COMPRESS      I     BLOCK   Off            Output file compressed
CORE          I     N       1.5K           Set size of edit buffer
CREATE        I     NAME    Off            Create new file
DECIDE        Y     Y       Off            Auto ",D"
DELETE        Y     Y       Off            Delete input file
DISK          N     Y       ---            Current quota information
 DSK           (Same as DISK)
DPY           N     CASE    Off            Use specific CRT switch
EDIT          I     NAME    On             Normal edit/create mode
ERROR         N     Y       ---            Print text of last error msg
EXACT         Y     Y       Off            Exact letter comparisons
EXPERT        Y     N       Off            Fancy features & short msgs
INCREMENT     Y     Y       100            Default line increment
ISAVE         Y     Y       None           Controls auto-W on inserts
LENGTH        Y     Y       55             Used by Justify cmds
LMAR          Y     Y       1              Used by Justify cmds
LOCATION      N     Y       ---            First line in edit buffer
LOWER         Y     CASE    Off            Default lower case
MAXLN         Y     Y       99999          Used by Justify cmds
M33           Y     CASE    On             Upper-case only terminal
M37           Y     CASE    Off            Upper/lower case terminal
NAME          S     Y       ---            Output file spec
NOBAK         Y     BAK     Off            No backup file
 N             (Same as NOBAK)
NOBASIC       I     N       On (unless *.BAS) Read SOS-format file
NOCHECK       Y     CHECK   On             No quota checking
NODECIDE      Y     DECIDE  On             No auto ",D"
NODELETE      Y     DELETE  On             Don't delete input file
NOEXACT       Y     EXACT   On             Folded letter comparisons
NONSEPARATOR  Y     CASE    On             Don't treat %,$,. as alphanum
NONUMBER      Y     N       Off            Suppress printing line #'s
NOVICE        Y     N       On             Normal mode
NUMBER        Y     N       On             Print line numbers
OLD           Y     BAK     Off            Create "old" file (.Zxx)
OPTION        I     N       ---            Read "SWITCH.INI" file
PLINES        Y     Y       16             Used by "P<CR>"
PMAR          Y     Y       1              Used by Justify cmds
READONLY      I     NAME    Off            Prevent file modification
 R             (Same as READONLY)
 RONLY         (Same as READONLY)
RMAR          Y     Y       69             Used by Justify cmds
-SOS-                                                              Page 71


RUN           Y     Y       "SYS:COMPIL"   Set program to run (G cmd)
SAVE          Y     Y       None           Controls auto-W on commands
SEPARATOR     Y     N       Off            Treat %,$,. as alphanumeric
SEQUENCE      Y     Y       On             Sequence #'s on output file
START         Y     Y       100            Starting sequence #
STEP          Y     Y       100            Increment for unseq. files
STRING        N     Y       ---            Current F & S strings
TEXT          Y     N       Off            Continuous text output file
UNSEQUENCE    Y     SEQUENCE  Off          Unsequence output file
UPPER         Y     CASE    On             Default upper case
VT05          Y     CASE    Off            Type of CRT-sets CRT mode
VT52          Y     CASE    Off            Type of CRT-sets CRT mode

User option file "SWITCH.INI" is read to set parameter defaults before
SOS command string is parsed.  "Y" in "Set" column means parameter may
be set via SOS command, SOS "SWITCH.INI" entry, or "/" Set command;  "I"
means parameter must be set with SOS command or "SWITCH.INI" entry;  and
"S" means parameter must be set with "/" Set command.
SOS Special Characters:

Replacement:   ^B  ?"    Next match string
               ^O  ?*    ?*<number>?* is n'th match string
               ^^  ?7    Quote next character

Match:         ^E  ?%    Not next character
               ^X  ?9    Any alphameric (0-9, A-Z, a-z)
               ^A  ?!    Any letter (A-Z, a-z)
               ^F  ?&    Any upper-case letter (A-Z)
               ^W  ?2    Any lower-case letter (a-z)
               ^P  ?+    Any decimal digit (0-9)
               ^\  ?<    Space or Horizontal Tab
                |  ?:    Any separator
               ^T  ?/    Any character 
               ^]  ?>    End of line 
               ^N  ?)    "Zero or more of" next character
               ^V  ?1    "One or more of" next character

Positions:     .    Present line or page
               ^    First line or page
               *    Last line or page

Symbolic       BF:...    Beginning of file
   ranges:     BF!...      (Same)
               ...:EF    End of file
                 EF      Entire file
               BF:EF       (Same)

SOS definitions and meanings:

<range>    ::= <pos>[!<number> or
                     :<pos>]

<pos>      ::= [<line>][/<page>]

<line>     ::= [<number> or
                . or * or ^][(+-)<number>]
-SOS-                                                              Page 72


<page>     ::= [<number> or
                . or * or ^][(+-)<number>]

<number>   ::= any positive integer

<filespec> ::= [dev:]name[.ext][<path>]

SOS Monitor Command format:

.EDIT command
.CREATE command    or    .R SOS - command
.SOS command

<command> ::= <spec> or <speco>=<speci>
                    where: <spec>  = file to create/edit
                           <speco> = output file
                           <speci> = input file

<spec>
<speci> ::= [dev:]name[.ext][<path>][<nnn>][<psw>][/switches]
<speco>

<path>  ::=  [-]              Default path
             [,]              User's own PPN
             [PR,PG]          PPN only
             [PR,PG,SFD,...]  Full path spec
             [,,SFD,...]      Use own PPN

<nnn>  ::=   Usual three-digit protection code, as in <157>

<psw>  ::=   (1-20 alphameric characters) Encryption password

/switches  ::=  One or more settable SOS parameters, as given above


[End of SOS.HLP]
-SOS-                                                              Page 73


                                APPENDIX G

                           Version 23 Features


1                 The commands "B" and "BP", which  position  you  to  the
      beginning  of  the  file  or  the  beginning  of  the  current page,
      respectively, have been implemented.

2                 The number of simultaneous search strings  that  may  be
      given  in  a  single "F" or "S" command has been increased from 6 to
      10.

3                 SOS provides an encryption feature  for  sensitive  text
      files.   Encryption  is  requested  by specifying an encryption code
      (1-20 alphameric characters) enclosed in parenthesis  following  the
      name of the file to be edited.  Thus, command

          .SOS   TEXT.FIL(SECRET)

      would either  create  or  edit  a  file  named  "TEST.FIL"  with  an
      encryption code "SECRET".  To encrypt a previously-created file, the
      command

          .SOS   CODED.FIL(KEYWORD)=PLAIN.FIL

      would read the unencrypted file "PLAIN.FIL"  and  write  the  edited
      file  "CODED.FIL"  using  the encryption code "KEYWORD".  To reverse
      the process, the command

          .SOS   PLAIN.FIL=CODED.FIL(KEYWORD)

      would similarly write the unencrypted file "PLAIN.FIL" as the edited
      version of the encrypted "CODED.FIL".

      At present, SOS can  either  read  or  write  encrypted  files.

            IMPORTANT:   It is the user's responsibility  to
            remember   the  encryption  codes  for  all  his
            encrypted files.  If a user cannot determine the
            encryption  code,  the  encrypted  file  will be
            unreadable.

4                 The Alter command ("A") has been improved in a  number
      of useful ways:

      4.1   In Alter mode, the command "^R" types out the  current  line
            from the left margin to the current position.  This type-out
            closely approximates the normal ^R output.  Note that ^R may
            be  typed  anytime  in Alter mode, even while inserting text
            into a line with the Alter-mode  "I"  or  "R"  commands,  or
            while  typing  arguments  to the Alter-mode "C", "S", or "K"
            commands.

      4.2   Similarly, the command "^U" will always be  taken  in  Alter
-SOS-                                                              Page 74


            mode to restart the current line, even following a "I", "R",
            "C", "S", or "K" operation.

            Note that "^U" will produce an unexpected effect when  typed
            in  as  text  for the Extend ("X") command.  Because the "X"
            command is implemented as an Alter mode  operation  with  an
            automatic  insertion  at end of line, typing "^U" terminates
            the insertion and  then  puts  you  in  Alter  mode  at  the
            beginning of the line.

      4.3   The Backspace character (^H) is now completely equivalent to
            the  Rubout  character  (also  known  as  the  Delete or Del
            character, 177 octal, sometimes written as "<RO>") in  Alter
            mode.   This  means that Backspace, like Rubout, deletes the
            previous character as  an  "I"  or  "R"  command  character,
            terminates  the "C", "S", or "K" command operation, or as an
            Alter command backs up the current character position.

      4.4   The  Alter-mode  commands  "^",  "<",  and  ">"  have   been
            implemented.   These commands modify the case of the current
            character, if it is a letter,  and  then  move  the  current
            character  position one space to the right.  The "^" command
            inverts the case, "<" sets it to upper case, and ">" sets it
            to  lower case.  If a repeat count has been specified, these
            commands  operate  on  that  number  of  characters.   If  a
            negative  sign  ("-")  has  been  specified,  these commands
            operate on the previous character and then move the  current
            character position one space to the left.  A negative repeat
            count is also legal.

      4.5   The Alter-mode command "B" immediately positions you to  the
            beginning  of  the  current line.  This command differs from
            "L", which also  positions  you  at  the  beginning  of  the
            current  line, in that it does not type the remainder of the
            line before repositioning.

      4.6   An ALTMODE (Escape, or ESC  character)  in  Alter  mode  now
            clears  the  accumulated  repeat count and negative sign, if
            any, without ringing the terminal's audible alarm (bell).

      4.7   A greater number of Alter-mode commands  may  be  used  with
            negative repeat counts.  These include " " (space forwards),
            Rubout or Backspace (space backwards), "@" (execute  command
            forwards  -  see  4.15,  below),  "D" (delete forwards), "R"
            (delete forwards and then insert),  "S"  (search  forwards),
            "K"  (kill  next characters), "<HT>" (space to end of line),
            and "X" (insert at end of line).  When a negative sign ("-")
            or  negative  repeat count ("-nn") is given the direction in
            which a command operates is  reversed,  e.g.,  "-D"  deletes
            backwards  instead of forwards, "-X" inserts at the start of
            the line, etc.   Note  in  the  previous  version  "^U"  was
            illegal  following  a  minus  sign, which prevented the user
            from restoring  the  original  line  under  certain  command
            sequences.

      4.8   As for other  SOS  modes,  typing  two  Bell  characters  in
            succession ("^G^G") will now terminate alter mode and return
-SOS-                                                              Page 75


            you to SOS command mode (i.e., a "*" will  be  typed).   The
            line currently being altered will remain intact.

      4.9   Control characters typed  during  Alter  mode  will  now  be
            echoed as such (as "^<char>").

      4.10  For the "C", "S", and "K" commands, the Carriage Return <CR>
            character will now terminate the Alter-mode operation on the
            current  line,  just  as  Carriage  Return  now   terminates
            operations  on  the  "I"  and  "R" commands.  Similarly, the
            ALTMODE (Escape, or ESC character) will terminate  the  "C",
            "S", or "K" operation, just as Backspace or Rubout does, but
            leaves you in Alter mode on the current line at the  current
            position.

      4.11  For the "S" and "K" commands, the initial character position
            may  be  thought  of  as  being  before  the first character
            position on the line, so that an S  command  for  the  first
            character  in the line will find it, and a K command for the
            first character will not kill any  characters.   This  makes
            Alter mode operations more consistent since, for example, in
            a FORTRAN program, a search for a horizontal  tab  character
            (e.g.,  typing  "S<HT>")  at  the beginning of the line will
            always put you at column 7, whether or not the  line  has  a
            FORTRAN statement number.

      4.12  The "T", "W", "U", and "X"  Alter-mode  commands  have  been
            changed from prior versions to provide greater word-handling
            capability and to make Alter mode more consistent with other
            SOS commands.  "W" retains its present meaning of "skip next
            word";  a word is defined  as  any  collection  of  letters,
            numbers,  and  the  three  separator-type special characters
            ".", "%", and "$".  In version 23(220),  "T"  means  "delete
            next  word  and insert text";  "U" means "delete next word";
            "X" means "skip to end of line and insert  text",  analogous
            to  the  normal  "X"  (Extend) command.  Note that "-X" is a
            legal command meaning "skip to beginning of line and  insert
            text".   For  both  "T"  and  "X"  text is inserted until an
            Altmode" or <CR> is typed.

            This implementation replaces the prior version in which  "X"
            meant  "delete word and insert text" (current "T" function )
            and "T" and "U" were errors.

      4.13  In Expert mode, text backspaced across  (in  response  to  a
            "<RO>",  "-<SP>",  or  "-S"  command)  is not typed when the
            result would be that the character pointer will  be  at  the
            start  of the line.  Instead, the line number is again typed
            to indicate this result.

      4.14  For the "K", "S", and "C" commands, the Line-feed  character
            ("<LF>")  has  been  given  a special meaning "end of line".
            Thus, "K<LF>" kills all characters to end of line (beginning
            of  line  if  "-K");   and  "S"  searches to the end of line
            (beginning of line if "-S").  Changing a character to a line
            feed  with  "C<LF>"  now  inserts an <CR><LF> and copies the
            remaining text to a new line, analogous the insertion  of  a
-SOS-                                                              Page 76


            <LF> with the "I", "R", "T", or "X" command.

      4.15  An important extension to the Alter  mode  command  facility
            has been implemented.  This is the "Execute through" command
            ("@"), which has the syntax

                  [-]  [nn]  @  <cmd>  <char>

            and specifies to execute  the  Alter  mode  command  "<cmd>"
            through  the  "nn"th  occurrence  of  "<char>".  The command
            searches backwards if the minus sign has been specified  and
            if  minus  is legal for the specified "<cmd>".  This command
            supports the following command characters:  " "  ("@ <char>"
            is  equivalent  to  "S<char>"),  "C",  "^",  ">",  "<",  "D"
            ("@D<char>" is equivalent to "K<char>"), and "V" (see  4.19,
            below).   All  commands  except  "C"  and  "V" may search in
            either direction;  only the " " command  may  be  used  when
            searching a /READONLY file.  The "@" command follows the new
            convention for initial character position described in  4.11
            and   obeys  the  added  special-character  conventions  for
            Carriage Return, Altmode, Backspace, Rubout, Line Feed,  ^R,
            and ^U described in 4.1, 4.2, 4.3, 4.10, and 4.14, above.

      4.16  The Alter mode character-matching facility, used by the "S",
            "K", and "@" commands, has been improved.

            First, letter comparisons will be either exact  (upper  case
            distinct  from  lower  case) or folded (upper case and lower
            case are equal) depending on the  setting  of  the  "/EXACT"
            switch  and  the  ",E"  argument,  as  described in item 28,
            below.

            Second, all pattern match special characters as described in
            item 29, below, except "any number of" and "one or more of",
            may be used as target characters.  This means, for  example,
            that  the  command  "K?:" when in /C128 mode will delete all
            characters through the next "Separator".

      4.17  The  "^R"  function  now  prints  the  correct   number   of
            characters when following a "-D" command.

      4.18  The Join function ("J") when given while positioned  at  the
            beginning  of  a  line  now  deletes  the  first  line while
            appending the text of that line to the beginning of the next
            line.   This  was  done to facilitate alignment of text into
            evenly spaced lines.

      4.19  The "V" command (Stanford case inversion command)  has  been
            implemented  for  Alter mode.  If the current character is a
            letter, the "V" command inverts  its  case  and  spaces  one
            character  to the left.  Otherwise, the "V" command performs
            no action.  A repeat count may be specified, to  permit  the
            case  of  consequitive  letters to be inverted;  or the same
            effect may be achieved by  using  the  "V"  command  as  the
            subject  of  the "@" command.  However, the "V" command only
            works left-to-right;  a minus sign (negative  repeat  count)
            may not be given.
-SOS-                                                              Page 77


5     The following changes have been made to  SOS's  handling  of  data
      files and file specifications:

      5.1   SOS now uses that PATH.  UUO to verify  that  a  LOOKUP  has
            found the desired file in the specified disk area.  This may
            occur when the user's search list has /LIB,  /SYS,  or  /NEW
            set.   Specifically,  in the normal SOS operation, when only
            one file is specified and /READONLY is not  in  effect,  the
            specified  file  must be found in the disk area requested in
            order to be edited.  This means that if you attempt to  edit
            a  file,  which exists in your library area (i.e., on LIB:),
            the file will be created in your area and  not  edited  from
            LIB:.   To  edit a file from LIB:, you must specify the file
            as "LIB:file.ext".

      5.2   In the normal SOS operation, when only one file is specified
            and /READONLY is not in effect, if you have requested that a
            file be edited that is not in either your  default  path  or
            your own disk area, SOS treats that as a request to read the
            file from the specified  disk  area  and  write  the  edited
            version  onto  your default path.  This is an "implied copy"
            operation.

            When  SOS  does  an  implied  copy,   it   uses   the   file
            specification  "DSK:file.ext[-]".   SOS  follows  the normal
            rules,  as  given  in  5.3,  below,  for  setting  the  file
            protection on the resulting output file.  To edit a file "in
            place" in another disk area, you must give  the  other  disk
            area as both the input and output file specifications.

            Because  this  feature  is  designed  to   keep   the   less
            experienced    SOS   user   from   getting   into   trouble,
            installations serving the more experienced user may  disable
            this   feature  with  the  "FTIMPCPY"  conditional  assembly
            switch.

      5.3   Whenever you give a file spec to SOS, you  may  now  include
            the  protection  to  be associated with that file as part of
            the  file  specification,  as  in  "SAMPLE.CBL<157>".    The
            protection last typed as part of the file spec on either the
            input or output side of the initial  command  line,  as  the
            argument to /NAME, or as the new file name on the "E" or "W"
            commands will set the protection for the edited output file.
            If   no   protection   is   specified,   SOS  will  use  the
            system-standard  protection  when  creating  files  and  the
            file's current protection when editing existing files.

      5.4   Whenever SOS types a file specification out, for example  at
            the  end  of  an  editing session, it will only type out the
            device if  it  is  not  DSK:   (or  a  file  structure  name
            equivalent  to  DSK:), only type out the protection if it is
            not the system standard, and only type the file's path if it
            is not your default path.  A file structure is equivalent to
            DSK:  when it is in the  system  search  list  (i.e.,  is  a
            public  structure),  when  it  is  the only structure in the
            user's active search list, and when it has the  normal  file
            structure /WRITE and /CREATE attributes.
-SOS-                                                              Page 78


      5.5   When editing from one file to another, SOS will type out the
            file specifications as

                  Edit: <old file>  as  <new file>

            to inform you that a copy operation is being performed as  a
            part  of  the editing process.  If /CREATE has been set, the
            message is typed as

                  Edit: <old file>  creating  <new file>

            to indicate this.  Note that a copy operation may be implied
            from  a  single  file spec accessing a file not in your disk
            area or on your default path,  as  described  in  item  5.2,
            above.

      5.6   All SOS output files are written in ASCII Line mode (mode 1)
            to better indicate their contents.

      5.7   SOS file specifications may now be placed on the  same  line
            as  the  RUN  or  R command initiating SOS by preceeding the
            file specifications with a "-".  Thus the command

                  .R   SOS  -  TEST.F4

            would be equivalent to the commands

                  .R   SOS

                  File:  TEST.F4

            but is simpler to type.  If you  have  previously  edited  a
            file,  and you wish to run SOS to edit or create a different
            file, typing a dash ("-") following the  RUN  or  R  command
            without  a file name will cause SOS to ignore the remembered
            file name.  (Note that this  is  a  new  description  of  an
            existing feature of SOS version 21(122).)

      5.8   SOS does not echo the name of the file being edited when the
            user  entered  the  file  name explicitly in response to the
            "File: "  prompt.   This  was  eliminated  since   in   that
            particular  case  the  user already knows what file is being
            edited.

      5.9   A "save" operation, caused either by the "W" command  or  an
            auto-save  operation  requested  by  the "/SAVE" or "/ISAVE"
            parameters, may now be done where the  desired  output  file
            protection  is  <400>  or greater.  In this case, the file's
            protection is set to <3xx> by the save operation  but  reset
            to  the desired protection at the end of the editing session
            ("E" or "G" commands).

      5.10  All SOS operations reading  or  writing  files  from  ersatz
            devices  (e.g.,  NEW:,  OLD:,  HLP:,  LIB:,  etc.) will work
            correctly.  When accessing ersatz devices, SOS  will  ignore
            any  PPNs  specified  by  the  user  since  the  device name
            overrides the PPN.
-SOS-                                                              Page 79


      5.11  The effect of the "/DELETE" switch or the "ED"  command  has
            been  modified when SOS has a specified output file which is
            not the same as the input file.  This  situation  can  occur
            when the user has typed an SOS command such as

                  .SOS  FILE.NEW = FILE.OLD

            or when the user has set a new output file with the  "/NAME"
            command.   When  this  occurs,  SOS will delete only the new
            file (FILE.NEW in the above example) and only when  SOS  has
            written  a  new copy of that file.  Thus, when only one file
            has  been  specified  (the   so-called   "browse-and-delete"
            function)  /DELETE  will  delete that file;  when both input
            and output files have been given /DELETE  will  delete  only
            the output file and never the input file.

      5.12  WARNING:  PLANETS users  should  be  aware  of  a  potential
            naming conflict between SOS backup files (*.Q??) and PLANETS
            quarterly data banks (*.QTR).  To prevent the  PLANETS  data
            banks  from  being  deleted  by  the  DELETE  command (as in
            ".DELETE  *.Q*"), the  data  banks  should  be  given  <5xx>
            protection.   If you use the KJOB command "/S" option (as in
            ".KJOB/S" or ".K/S") any protection  <100>  or  higher  will
            protect the data banks from deletion while logging out.

      5.13  When set in "/NOBAK" mode, SOS will  not  delete  previously
            existing backup files (*.Q??) when saving a new version of a
            source file.  This permits a user to access  a  backup  file
            created  by  SOS  when  a source file was edited in "/NOBAK"
            mode after the same file had been  edited  in  "/BAK"  mode.
            This  change  also  makes  SOS  slightly more efficient when
            operating in "/NOBAK" mode.

            Although the standard default for the "/BAK /NOBAK /OLD" set
            of  switches  is "/BAK", a user may change what default with
            an SOS SWITCH.INI entry;  an  installation  may  now  change
            that  default  by  reassembly  of  SOS  after  changing  the
            "DEFBAK" conditional assembly switch.

      5.14  Because prior SOS code would not recover from  "No  room  on
            disk"  error  while  writing  output  files,  SOS  now  sets
            "DSKFUL PAUSE" during editing sessions.   When  the  no-room
            error then occurs, SOS would then return to Monitor level to
            permit the user to eliminate the error  condition  and  then
            resume  editing  with  the  Monitor "CONTINUE" command.  SOS
            resets the "DSKFUL" setting to the user's prior setting upon
            exit.

            In addition, the user still may request SOS  to  check  that
            adequate  disk  space  exists before writing each block of a
            file by setting the /CHECK parameter.  If  no  room  exists,
            SOS  enters  a  dialog with the user to permit correction of
            the error.

      5.15  The  format  of  the  "=DISK"  message  and   the   "/CHECK"
            diagnostic warning has been slightly reworded to clarify its
            meaning.
-SOS-                                                              Page 80


      5.16  To conform to normal DECsystem-10 conventions, SOS now looks
            for  the "SWITCH.INI" option file on the user's default path
            ("[-]") and uses the user's PPN ("[,]") for the "???EDS.TMP"
            and  "???EDT.TMP"  command files.  Writing the command files
            in the user's own area assures that SOS commands will remain
            remembered  when the user changes his default path and makes
            SOS perform consistently whether the files  are  written  on
            disk or in TMPCOR.

      5.17  Where an input file can be read, but not renamed or  deleted
            by SOS, SOS now assumes the file is to read as /READONLY and
            types an appropriate warning message.

      5.18  When editing existing files, SOS attempts to  optimize  disk
            file  allocation  by  taking the actual size of the old file
            and passing that size to the Monitor as  an  estimated  file
            size  of  the  new  file being created.  Where disk space is
            available, this means that the new version of the file  will
            get  contiguous  allocated disk space.  This tends to reduce
            overall disk space fragmentation and increase the  speed  at
            which  the  new  file  may be read.  However, no extra space
            will be used if the new file is shorter than the  old;   nor
            will  anything bad happen if the new file is longer than the
            old or if not enough contiguous space is available.

            This optimization is done by using extended LOOKUP and ENTER
            UUOs.   Similarly,  SOS now used the CHKACC UUO to determine
            access privileges for all files being read or written.  When
            SOS  detects  that  it cannot write a file to a certain disk
            area, it gives the fatal message

                  ? Insufficient privileges to write file

            and exits to the Monitor.  No  editing  work  will  be  lost
            because  this  condition will be detected at the start of an
            editing session.

            This change should mean that SOS will never be able  to  get
            in  the  situation when exiting that the user cannot respond
            the the message

                  ?File write-protected.  Try another name.
                  File:

            because SOS has written a temporary file in a disk area with
            a  protection  which  prevents SOS from renaming or changing
            the protection of the file.  Determining  access  privileges
            with the CHKACC UUO means that [1,2] users may edit files in
            any disk area regardless of their protection.

      5.19  Because SOS remembers that the file being  edited  has  been
            changed to determine whether to write a new copy of the file
            when wrapping around to the beginning, when saving the  file
            ("W"  command),  or when exiting ("E" or "G" command), logic
            has been added so that changing a line to  itself  will  not
            count as a change to the file.
-SOS-                                                              Page 81


            In a related improvement, the Save command  ("W")  will  not
            write  a new copy of the file or reposition to the beginning
            of  the  file  when  the  file   has   not   been   changed.
            Furthermore, commands that change the file to itself are not
            counted by the /SAVE auto-save feature.

            These changes will reduce SOS overhead.

6     The SOS mode /UPPER or /LOWER now is effective to invert the  case
      when  in  /C128  mode.   This  makes  more  sense  that  the prior
      implementation, because if the user is working  on  an  upper-case
      only  (/M33) terminal (s)he has no control over case in /C64 mode.
      In contrast, if the user is working  on  upper/lower  case  (/M37)
      terminals in /C64 mode typing characters out in inverted case when
      the terminal can display both upper  and  lower  case  letters  is
      likely  to be confusing.  This means that /LOWER mode controls the
      inversion of only /C128 (not /C64) upper or lower case letters.

7     Indirect command files may now invoke other indirect command files
      with  the  "@"  command.  Note that this invokation is a permanent
      transfer of control to the next indirect file, and is not  in  the
      nature of a subroutine call.

      As a convenience for the user,  reaching  an  end-of-file  on  the
      indirect  command  file  will  now  not clear further SOS commands
      typed ahead on the terminal.

8     When an "=" command is read from an  indirect  command  file,  the
      name  of  the requested variable is typed out to indicate the user
      what is being displayed.

9     When reading commands from  an  indirect  file,  the  ^O  terminal
      status  is  not  cleared  between  commands,  so that the user may
      easily suppress all typed output.

10    The "implied ." convention has been implemented.  This means  that
      where  you would use a "." to indicate the current line number (as
      in ".+1"), you may omit the "." and SOS will  assume  it  for  you
      (i.e., the above example ".+1" may also be given as "+1").

      Normally, when SOS is in Novice mode (the default) SOS will assume
      the  "."  only  in  the  middle  of  the  command, as in "I;10" or
      "D:500".  When in Expert mode, the SOS  commands  "D",  "R",  "X",
      "M",  "K",  "A",  "JU",  "J", ".", "VV", "VU", and "VL" when typed
      without any arguments, as in "D<CR>" or "A<CR>", will  specify  an
      operation  on  the  current  line.  Thus, the examples given if in
      Expert mode will, respectively, delete and alter the current line.

      However, the commands "P", "I", "L", and  "N"  will  retain  their
      current  implementation  for  an  unspecified  range.  The command
      "P<CR>" will print "PLINES" of text starting at the current  line;
      "I<CR>"  will continue the previous insert operation;  and "L<CR>"
      will list the entire  file.   Also,  a  null  range  for  the  "N"
      command, as in "N<CR>" or "N50<CR>" will renumber the entire file.
-SOS-                                                              Page 82

11    For compatability between the "T" and  "C"  commands  as  compared
      with  the  "I" and "R" commands, the "T" and "C" commands will now
      accept the increment delimited by a semi-colon as well as a comma.

12    For the "I" and "R" commands, you may now specify  the  number  of
      lines to be inserted with a "!" as well as with a ";!" delimiter.

      Care must be taken for the "R" command.  The command "Rn!m"  means
      "delete  'm'  lines starting at line 'n' and then insert using the
      current increment" NOT  "delete  line  'n'  and  insert  using  an
      increment that will permit 'm' lines of insertion." To specify the
      latter, the command  would  have  to  be  "Rn;!m",  with  the  ";"
      specifying  that  the  "!m"  is an insertion count and not a range
      specification.   However,  the  command  "Rn!m!k"  is  legal   and
      specifies  the deletion of 'm' lines starting at line 'n' followed
      by an insertion with an increment which will permit 'k'  lines  of
      text.

      When  you  specify  the  number  of  lines  to  be  inserted,  SOS
      automatically  computes  the largest reasonable increment that may
      be used to insert that number of lines at that place in the  file.
      The  increment  is selected from the list (1, 2, 4, 5, 10, 20, 25,
      40, 50, 100) but cannot exceed your current permanent increment.

13    When an "I" or "R"  command  terminates,  SOS  now  remembers  the
      increment  being  used,  as well as the position, for use with the
      next "I<CR>" command.

14    When in Novice mode,  the  message  giving  the  number  of  lines
      deleted  for  the  "R"  command now appears before the replacement
      lines are inserted, and not afterward as before.  Also, a  similar
      message is produced when lines are deleted by the "T" command.

15    The 128-character-set mode (C128) escape character has been made a
      user  parameter.  It may be set to any printing special character;
      the default is "?", which is compatible  with  older  versions  of
      SOS.  It is believed  that  "?"  is  a  preferred escape character
      over "'",  because  "'"  has  syntactic  meaning  in  many  common
      programming languages, among them MACRO, FORTRAN, and COBOL, while
      "?" does not have such a wide-spread meaning.  In any event,  this
      implementation  permits  an  installation  to  change  the default
      escape character by setting the assembly parameter  "DFC128",  and
      permits  each user to have his default set via SWITCH.INI.  To set
      the escape character, the command

            /C128:<character>

      is used, where "<character>" is the desired C128 escape character.
      The command

            /C128

      with no argument sets C128 mode but does  not  change  the  escape
      character,  and  the  command  "=CASE"  displays  the current C128
      escape character when SOS is in C128 mode.
-SOS-                                                              Page 83


      The rules for C128 character mapping are consistent  with  current
      implementation;   the  current  C128  escape character always maps
      into itself for input or output while all other characters  follow
      the current C128 mappings.  Item 51, below, describes the addition
      of Rubout as a new /C128 character.

      If "?" is the current C128 escape character while  "/C128"  is  in
      effect  typing "??" on input would supply one "?" while one "?" in
      a text file would type out as "??".   As  a  further  convenience,
      both  of  the  characters  "?"  and  "'",  if  not the C128 escape
      character, map into <BELL> (^G) so  that  that  character  may  be
      entered  with  either "?" or "'" as the escape character, e.g., as
      "?'" or "'?", respectively.  Note that setting  the  /C128  escape
      character  to  any  special character other than "?" or "'", while
      legal, will preempt the normal use of a /C128 character value.

16    The renumber command  ("N")  has  been  improved.   If  the  first
      argument   (the  increment)  is  omitted,  the  current  permanent
      increment is used.  This makes "N" consistent with "I", "R",  "T",
      and "C".

      Second, to prevent the  creation  of  "Order"  errors,  the  error
      message  "%Illegal  starting line number" ("%ISLN" in Expert mode)
      is given if the specified starting line number for the first  page
      is not greater than the preceeding line.

      Third, the starting line number for subsequent pages (i.e., when a
      "N"  command  renumbers  more  than  one  page) is taken to be the
      specified increment if one was specified, or the "START" parameter
      if  none  was  given.   (See 17, below.) Furthermore, the user may
      specify the starting line  number  for  subsequent  pages  with  a
      newly-added fourth parameter to the renumber command.

      Fourth, and  perhaps  most  important,  when  the  third  argument
      (starting  line number for the first page) is omitted, it defaults
      to the specified first line number of the renumbering  range  when
      there  is  a  previous line on the same page, and otherwise to the
      starting line number for subsequent pages.  This change means,  as
      a  practical matter, the user never has to specify a starting line
      number for normal renumbering operations.

17    The SOS parameters "START", "STEP", and "INCR" will always be used
      for determining line numbers.  START defines the first line number
      on a new page, where a page is being created or does not have  any
      lines;   STEP  defines  the increment to use when reading existing
      unsequenced ASCII files;  and INCR is the increment  to  use  when
      creating or copying lines.

18    The file-specification on the Copy command ("C") when copying from
      another file will now default to the previous file from which text
      was copied.  If no  previous  copy-from-file  operation  has  been
      performed, attempting to default the file specification will be an
      illegal command.  The file specification is defaulted by  omitting
      it  from  the  normal  copy command.  When a file specification is
      defaulted, SOS  will  indicate  the  file  being  used  by  typing
      "Copy: <file spec>"  to  the user.  If the default is not desired,
      typing "EQ" will terminate the command  if  the  search  mode  (/S
-SOS-                                                              Page 84


      option)  has  been  taken.  This feature should facilitate copying
      multiple pieces of text from the same file.

19    Several improvements have been made to the Transfer ("T") and Copy
      ("C") commands.  First, the informational messages indicating that
      an increment has been chosen (the "INC1="  and  "INC2="  messages)
      will  be  suppressed  when  it  was  not  necessary  to  choose an
      increment, even though the user did  not  supply  one.   This  can
      occur  when  a  single line is inserted between two lines, or when
      during a multiple-page insertion  the  last  page  transferred  is
      given a page of its own.

      Second, when it is necessary to choose an increment, and the  user
      did  not  supply  one,  SOS will apply the same algorithm used for
      insertions (see 12, above) and select either the current increment
      or  the largest rounded increment that will permit all lines to be
      inserted.   Also,  when  selecting  an  increment  SOS  will   now
      reasonably generate the first line number of the inserted text.

      Third, if during a Copy or Transfer operation while SOS is  moving
      all  text  to  be  inserted  to free core it runs out of core, the
      "%Not Enough Core" ("%NEC") error message will indicate  the  line
      and  page number at which core was exceeded.  This will permit the
      user to break the Copy or Transfer operation into smaller chunks.

20    The definition of the Print command with  no  arguments  ("P<CR>")
      has  been  "print 'PLINE' lines starting at the current line".  To
      assist the user in paging down through the file with this command,
      SOS  will  not  reprint  the  current  line  of successive "P<CR>"
      commands;  rather, the first such command  will  print  as  before
      while  all  successive  commands  will  start printing at the next
      line.  This means that lines will not get typed twice  when  doing
      successive "P<CR>" commands.

21    The bug that any "save" operation, either  a  "W"  command  or  an
      auto-save  function  requested  by  the /SAVE or /ISAVE parameter,
      while reading an indirect command  file  resulted  in  an  "IO  to
      unassigned channel" error has been fixed.

22    The Move command (".<line number>"), which sets the  current  line
      number  to the specified line, has been made more flexible.  It no
      longer requires that the specified line exist;  if  is  does  not,
      the  current  line is set to the next line following the specified
      line.  Also, the command "./n" will set the current line to be the
      first  line on page 'n', or to line 'START' (see 17, above) if the
      page is empty.

23    SOS now has the "/CREATE" and "/EDIT" switches.   "/CREATE"  tells
      SOS not to read an existing file and to give the user an option to
      rename his created file or delete the existing file  of  the  same
      name  before writing the new version of that file.  "/EDIT" causes
      SOS  to  operate  as  it  previously  always  did,   reading   and
      superceding  existing  files  but  permitting  the  user to create
      nonexistent files.  "/EDIT" is the default when SOS is run by  the
      RUN  UUO,  or  by the RUN, R, SOS, or EDIT commands;  "/CREATE" is
      the default when SOS is run with the  CREATE  command.   "/CREATE"
      and  "/EDIT"  switches override the /READONLY switch;  those three
-SOS-                                                              Page 85


      switches are mutually exclusive.  These switches may only be given
      on the initial command line or in SWITCH.INI.

      When SOS is in a "/CREATE" mode, the "=NAME" command will now type
      "Creating  <file spec>"  to indicate this.  Similarly, when SOS is
      in  /READONLY  mode,  the  "=NAME"  command  will  type   "Reading
      <file spec>".

24    Some changes to internal text buffer handling have  made  the  new
      SOS more efficient than earlier versions.  While some improvements
      apply  to  all  commands  which  operate  on  text,  the   largest
      improvements  will be seen for Insert, Replace, Copy, and Transfer
      commands.  At the extreme, a 44% reduction in CPU  time  has  been
      observed while doing a large (50 textual page) Copy operation.

25    As a convenience to  the  user,  and  to  conform  SOS  to  normal
      DECsystem-10  command scanning, the user may now omit the trailing
      "]" on file specifications when that would be the  last  character
      of the line.

26    On certain types of terminals (Texas Instruments Silent 700 at 300
      baud, for example) the "<LF>" command (print next line) overprints
      part of the sequence number of the line printed, due to a  Monitor
      design  deficiency  in terminal character handling.  To assist the
      users when the happens, the "/DPY" mode may  be  set.   Note  that
      "/DPY"  is  designed  to  produce  terminal  output compressed for
      display terminals (CRTs) and this  added  benefit  is  unintended.
      For  example,  "/DPY" mode also suppresses the blank line normally
      typed before the "Page n" output.

27    The "Decide" option for the Substitute command ("S"), for the Find
      command  ("F"  - see item 47, below), and for context line numbers
      ("$<string>$<CR>" as a line number) has been improved.

      First, when SOS is waiting for a user decision, it will clear  the
      terminal's  ^O  status,  type  the  line  to be accepted, and then
      prompt with the characters "D*".

      Second, when an incorrect response has been typed for  the  Decide
      input,  SOS  will  type  "? ",  clear  type-ahead,  and  ring  the
      terminal's audible alarm (bell) to indicate the  error.   It  will
      then wait for a correct input.

      Third, when the "Rubout" or "Delete" response is typed to indicate
      that the changes or the line is not accepted or when "E" or "Q" is
      typed to terminate a Find or Substitute command, when you are  not
      in Expert mode SOS will type an appropriate confirmation.

      Fourth, the global SOS parameter "/DECIDE" will now be applied  to
      context  line  number  searches  as  well  as  Find and Substitute
      commands.

      Fifth,  the  effect  of  the  ",D"  parameter  for  the  Find  and
      Substitute  commands  and  for  context line number searches is to
      invert the setting of "/DECIDE".  Thus, if "/DECIDE" is  set,  the
      ",D"  parameter will tell SOS not to perform the command in Decide
      mode.
-SOS-                                                              Page 86


28    The  Exact-match  parameter  ",E",  on  the  Find  and  Substitute
      commands, and on the context line number search, has been extended
      to have features analogous to the Decide option described  in  27,
      above.

      First, for the Alter command ("A")  and  for  the  Extend  command
      ("X")  the  exact-match  parameter  (",E")  has  been added.  This
      permits the user the control whether  the  case  of  a  letter  is
      considered  when doing character comparisons for the "S", "K", and
      "@" Alter-mode commands, as described in 4.16, above.

      Second,  the  parameters  "/EXACT"  and   "/NOEXACT"   have   been
      implemented  to  control  the  default  for character comparisons.
      /EXACT implies that upper case letters  are  distinct  from  lower
      case  letters;   /NOEXACT  treats  upper and lower case letters as
      equivalent when comparing characters.  The command  "=EXACT"  will
      display  the  "/EXACT"  switch  setting;  the initial condition is
      "/NOEXACT".

      Third, the definition of the ",E" parameter has  been  changed  to
      make ",E" invert the current "/EXACT" default value.

      Fourth, the bug which caused the ",E" parameters on the  Find  and
      Substitute commands to interact has been eliminated.

29    Several  new  pattern  matching  special   functions   have   been
      implemented,  so  that  SOS and TECO Version 23 would have similar
      capabilities.   These  functions  are   implemented   as   special
      characters,  similar to the existing pattern matching functions in
      SOS;  these characters may be entered  as  either  "/C128"  double
      characters  or  by typing the appropriate control characters.  All
      pattern-matching special characters are now as follows:
-SOS-                                                              Page 87


      Character C128 rep New?  Use?               Description
      --------- -------- ----  ----     --------------------------------
         ^^       ?7     No   Any       "Quote" next character;  the
                                        next character is taken for
                                        itself without any special
                                        interpretation
         ^E       ?%     No   Pattern   "Not" next character
         ^X       ?9     Yes  Pattern   Any alphameric (0-9, A-Z, a-z)
         ^A       ?!     Yes  Pattern   Any letter (A-Z, a-z)
         ^F       ?&     Yes  Pattern   Any upper-case letter (A-Z)
         ^W       ?2     Yes  Pattern   Any lower-case letter (a-z)
         ^P       ?+     Yes  Pattern   Any decimal digit (0-9)
         ^\       ?<     Yes  Pattern   Space or Horizontal Tab
          |       ?:     No   Pattern   Any separator (Note this
                                        character is vertical bar, 174
                                        octal, not back slash as
                                        produced on some line printers.)
         ^T(*)    ?/     No   Pattern   Any character (equivalent to
                                        "Not End of line")
         ^]       ?>     Yes  Pattern   End of line (equivalent to "Not
                                        Any Character")
         ^N       ?)     No   F,S       "Any number of" next character
                                        (zero or more occurrences)
         ^V       ?1     Yes  F,S       "One or more of" the next
                                        character
         ^O       ?*     No   String    Substitute string number
                                        delimiter
         ^B       ?"     No   String    Next substitute string

       (*) Needs "SET TTY RTCOMPATABILITY" to be available for SOS use.

      Notice that all characters identified as "Pattern"  usage  may  be
      used  as  arguments  for Alter mode character-comparison commands;
      and all characters identified as either "Pattern" or  "F,S"  usage
      may be used in context line search strings.

      A brief description of the SOS pattern-matching algorithm might be
      in  order  here:   The  SOS pattern-matching algorithm will always
      match the shortest, leftmost string that corresponds to the  given
      pattern.   (This is the same algorithm the SNOBOL languages use.) 
      This affects the user in several  significant  ways:   First,  the
      "any  number  of"  operator  likes to match zero characters, since
      that is the shortest possible string.  When  "any  number  of"  is
      used  as the first or last match in a pattern it will always match
      zero characters;  in those positions  it  is  redundant!   Second,
      since the "end of line" operator may match either the beginning or
      the end of a line, when it is given first in  a  pattern  it  will
      match  the  beginning  and  when given last it will match the end.
      Obviously, when it is given in the middle of a pattern other  than
      one  consisting  of "any number of" operators collapsing  to zero,
      that pattern will never successfully match anything.

30    The optional modifiers (",E", ",D", ",nnn",  etc.)  which  may  be
      specified  on the Find, Substitute, Print, and Extend commands and
      on the context line search string may  now  be  specified  in  any
      order.   However,  each  modifier may only be specified once.  For
      the syntax of the Find command, see item 47, below.
-SOS-                                                              Page 88


      For the Substitute ("S") command, if ",N" (suppress  printing  the
      changed line) is typed and Decide mode is in effect because either
      "/DECIDE" has been set or the ",D" option was given, the effect is
      to  perform substitutions using the normal Decide operations until
      the "G" reply (leave Decide mode)  is  given,  at  which  time  no
      further  substitutions  are  typed.  This could be very useful for
      "debugging" a Substitute command before  performing  a  number  of
      substitutions.

31    Changes have been made in the default range and repeat counts  for
      the Find and Substitute commands, and for the context line search,
      to make the defaults more consistent and rational.

      For the Find command, the default when a search  string  has  been
      given without a range or count (i.e., a command like "F<string>$",
      the normal case) is to search from the current line to the end  of
      the  file  for the next single occurrence of the string.  When the
      search string is not given, either for a "F" or "F$" command,  the
      default  is search from the next line to the end of the preceeding
      Find command range (which could be to  the  end  of  file  by  the
      preceeding  default)  for the next single occurrence of the search
      string given in the preceeding Find command.

      For the Substitute command, the  default  when  the  old  and  new
      strings have been given without a range or count is to search from
      the current line to the end of the file  and  make  a  replacement
      only  in  the first line found which contains the matching string.
      When no search strings have been specified,  as  in  "S<CR>",  the
      default  is  to  search  from  the  next  line  to  the end of the
      preceeding Substitute range (which might also  have  defaulted  to
      end of file) and make the substitution on the next single matching
      line.  This is done to make "S"  function  similarly  to  the  "F"
      command,   and  to  minimize  the  harm  done  if  one  types  "S"
      accidently.  However, to permit the user to perform a  potentially
      large  number of pre-specified substitutions, the default for "S$"
      command is to search  from  the  next  line  to  the  end  of  the
      preceeding Substitute range and make all substitutions.

      The context line search follows the same conventions as  the  Find
      command.

      Starting the search range with the current line whenever the  user
      types  a  new  search  string  (rather  than defaulting the search
      string with "F$...<CR>", "F<CR>", "S$...<CR>", or "S<CR>") assures
      that  SOS  will  never miss a potentiallly matching line.  Because
      the  improvement  is  an  obvious  external  change  to  the   SOS
      specifications,  this  improvement  is  under  the  control of the
      "DEFCRL" conditional assembly switch.

32    The output produced by the "=STRING" command has been  limited  to
      display  only the Find, Substitute, or context line search strings
      that the user has actually previously defined.

33    The "/NAME" command has been made illegal when "/READONLY"  is  in
      effect,  so  that the user is prohibited from making a name change
      on the file being read and to simplify some internal logic.  /NAME
      is  also  illegal  on  the initial command line or as a SWITCH.INI
-SOS-                                                              Page 89


      parameter for much the same reasons.

34    As a convenience for users running SOS on slow terminals,  and  as
      an  efficiency  improvement,  SOS will not type out the Horizontal
      Tab following the sequence number when typing a null line.

35    To assist users in documenting SOS indirect command files, and  to
      permit  annotation of SOS terminal sessions, SOS now has a comment
      command (";").  When ";" is typed as  an  SOS  command,  any  text
      following  the  ";"  through the next Carriage Return or Line Feed
      character is ignored.

36    Several options have been added to the Exit  ("E")  and  Go  ("G")
      commands.   These are "N" to unsequence (as in "EN" or "GN", which
      is identical to "ES" or "GS"  but  is  consistent  with  PIP's  /N
      unsequencing  switch);   "X" to exit (as in "EX" or "GX", which is
      identical to "E" or "G" but could help out the user familiar  with
      TECO);   and  the  new  facility "T".  The "ET" or "GT" command is
      designed to produce  continuous  textual-format  output  files  in
      which  both the SOS sequence numbers and Page Marks (including the
      Form Feed characters) have been removed.

      This continuous-text output option may also  be  selected  by  the
      "/TEXT" command.  Since "/TEXT", "/SEQUENCE" and "/UNSEQUENCE" are
      mutually exclusive options, the setting of "/TEXT" is displayed by
      the "=SEQUENCE" command.

37    Some additional support for users editing BASIC programs with  SOS
      has been provided.

      First, the default for editing  or  creating  any  file  with  the
      extension  'BAS' is now "/BASIC".  However, this may be overridden
      by the "/NOBASIC"  switch  on  the  initial  command  line  or  in
      SWITCH.INI.

      Second, the default processor  to  run  for  a  "G"  command  when
      "/BASIC" is set is now "SYS:BASIC".

      Third, because the SOS sequence number is part of  the  syntax  of
      the  BASIC  language,  the  Renumber,  Copy, or Transfer commands,
      which will modify the existing  sequence  numbering,  produce  the
      query  "Destroy numbering in BASIC file?" when not in Expert mode.
      The user may reply "Y" or "N" to the  question;   the  "N"  answer
      aborts the command and no harm is done.

      Fourth, for compatability with BASIC, SOS will not given the "?Bad
      BASIC  file  format"  error when a Form-Feed character is the last
      character in a BASIC file.  Instead, the Form Feed is ignored.

39    To permit the user to  trade  off  response  time  and  core  size
      against  the amount of text in core and file wrap-around time, the
      "/CORE:nn" switch may be given on the initial command line.   This
      permits the user to specify the minimum amount of core ("nn") in K
      (1024 words = 1 K) that SOS will  reserve  for  the  in-core  text
      buffer.    SOS  will  actually  allocate  the  minimum  core  size
      specified and then utilize all available core up to the next K (or
      P)  boundary.   The default minimum core size is 1.5K, which turns
-SOS-                                                              Page 90


      out to be equivalent to a "/CORE:1"  specification.   The  default
      text  buffer  size  may  be  changed  be  redefining  the assembly
      parameter "DEFCOR".

      Users may determine the first line number currently in  core  with
      the  "=LOC" command and may determine the current core used by SOS
      with the Monitor's ^T command.   The  "/CORE"  switch  allows  SOS
      users  on  Virtual  Memory systems to keep larger sections of text
      files in core.

40    The ^C trapping implementation has been improved.  First, when SOS
      is at command level (an asterisk prompt has been typed), typing ^C
      followed by either a "C" (continue) or "R" (reenter) response will
      now reprompt with another asterisk.

      Second, when typing commands or text into SOS, typing ^C  followed
      by   either   "R"   (reenter)  or  "E"  (exit)  will  take  effect
      immediately.  In the prior implementation, the user had to type  a
      Carriage Return for the reentry or exit to occur.

      Third, the explanatory text typed in  response  to  "H"  has  been
      re-written to make it easier to understand by the casual SOS user.

41    As a user-selected option, SOS will now  produce  a  more  compact
      file  format  for  sequence-numbered  output  files.  In this file
      format, lines are not line-blocked;  there is no wasted  space  in
      the file for zero "space-filler" words except that the last single
      word in a block might be zero to prevent a  sequence  number  word
      and  its  following  Horizontal  Tab  from being split between two
      blocks.  In one test of a  fifty-block  MACRO  source  file,  this
      option  resulted  in  a  4%  reduction  in  file size.  The actual
      reduction in size depends on the contents of the data  file  being
      compressed  and  the  cluster  size of file structure on which the
      file is written.  Whatever size reduction is achieved will also be
      reflected  in  a corresponding decrease in the transfer time every
      time the file is subsequently read.

      This option may  be  selected  by  the  "/BLOCK"  and  "/COMPRESS"
      switches,  which may be given only on the initial SOS command line
      or in SWITCH.INI.   "/BLOCK"  specifies  that  line-blocking,  the
      previous SOS file format, should be written;  this is the default.
      "/COMPRESS" specifies the new compressed  file  format  should  be
      written.  These switches only apply to the format of files written
      by SOS (including temporary work files);  all versions of SOS will
      read  files  written  in either file format.  The command "=BLOCK"
      will display the file format in which the file is  being  written.
      The  default  switch  value  is  set with the conditional assembly
      switch "DEFBLK".

      We believe that all processors will accept both  line-blocked  and
      compressed  SOS  files without change;  however, because not every
      processor has been tested the default has been  set  to  "/BLOCK".
      For  example,  we  have  confirmed  that  FILCOM will not find any
      differences between line-blocked and compressed  versions  of  one
      sequence-numbered  file.   If  a  user  determines  that  all  the
      programs that (s)he runs will accept compressed  SOS  files,  that
      user's  own  default  may  be changed with a SWITCH.INI parameter.
-SOS-                                                              Page 91

42    The correct range of deleted lines is reported in Novice mode  for
      the  "D",  "R", and "T" commands, when the range spanned more than
      one page and no lines were deleted on the first page.

43    The range definition for the Delete ("D") command has been changed
      to  correspond  to  that  of  the  Transfer  ("T")  and Copy ("C")
      commands.  This change only affects Delete operations in which the
      first  line number as not been specified, as in "D/2" or "D/3:/5".
      In these cases, the Delete command now deletes both the Page  Mark
      preceeding  the  specified  page  (before  page  2,  and  page  3,
      respectively in the examples) as  well  as  the  contents  of  the
      specified  pages.   Thus,  the  first  example  would  delete  the
      contents of page 2 as well as the Page  Mark  preceeding  page  2,
      while  the  second  example would delete the contents of, and Page
      Marks preceeding, Pages 3, 4, and 5.  This would be the same  text
      which would be moved if the range specifier was used as the source
      lines of a Transfer or Copy command.  This change also means  that
      the  confirmation  message  "Massive  delete ok?" is produced only
      when SOS is going to delete one or more Page Marks from  the  file
      being edited.

44    Bugs  have  been  fixed  with  the   Replace   command   so   that
      multiple-page  replacements will never be inserted so as to create
      an Order error.

45    The Kill Page-Mark command  ("K")  has  been  extended  to  permit
      multiple  Page  Marks  to  be  killed  with a single command.  The
      syntax of the K command is now "K/n:/m", where  "n"  is  the  page
      number  of  the  first  Page Mark to be killed and "m" is the page
      number of the last Page Mark to be killed.  As  before,  only  one
      Page Mark may be removed, as in "K/2".

      In SOS notation, the "/n" Page Mark is  the  one  preceeding  page
      "n".  Because there is no Page Mark preceeding the first page of a
      file (SOS treats the beginning of the file as if it  were  a  Page
      Mark),  the  command  "K/1"  (or  the  equivalent  "K/^") can't do
      anything.  However, for consistency, the command "K/1"  is  legal;
      furthermore,  "/1"  may be used as the first page of range of Page
      Marks to be deleted.  Thus, for example, the command "K/1:/*" will
      delete  all  Page  Marks  in a file.  To prevent order errors when
      deleting Page Marks, use the command "NP" first  to  monotonically
      renumber the affected pages of the file.

46    To eliminate one potential  source  of  confusion,  SOS  will  not
      permit   users   to  number  a  line  as  "00000",  by  insertion,
      replacement, transfer, copy, or renumbering.  If users attempt  to
      do so, SOS will start the first line number at the increment being
      used for the operation.

47    Three significant extensions have been  made  to  the  Find  ("F")
      command.

      First, a  "find not"  option  (",-")  has  been  added;   when  in
      "find not"  mode  the  Find  command reports a match on every line
-SOS-                                                              Page 92


      which does not contain the given pattern.  We expect this facility
      to be most useful for applications such as finding all non-comment
      lines in a FORTRAN program.

      Second, a Decide option (",D")  has  been  added;   this  is  very
      similar to the Decide option of the Substitute command.

      Third, the number of operations that may  be  performed  on  lines
      found by a Find command has been increased from one (Alter) to six
      (Alter, Insert after, Replace, Delete, Mark, and  Extend).   These
      operations  may be permanently set on the Find command (as in ",A"
      for Alter), or if none has been specified on the command  one  may
      be selected as a Decide option reply (as in "A" to alter the found
      line,  similar   to   the   Substitute   command   Decide   option
      implementation).

      Thus, the complete Find command syntax is as follows:

                                                         [,A]
                                                         [,I]
                                                         [,R]
            F <string> $ [<range>] [,nnn] [,E] [,N] [,D] [,K] [,-]
                                                         [,M]
                                                         [,X]

      By item 30,  above,  the  command  modifiers  (optional  arguments
      preceeded  by  a  comma)  may  be  given  in  any order and in any
      combination.  However, only one of the  operations  (Alter,  etc.)
      may  be specified on a single Find command.  Also, notice that the
      Delete operation is specified with the letter "K", because "D"  is
      used for the Decide option.

      The effect of each of these new options is as follows:

         Decide (",D"):  The found line is typed (only the  line  number
      if ",N" parameter has been given) and the "D*" prompt is given, as
      described in item 27, above.  The legal responses are " "  (accept
      the  line),  Rubout  (reject  the line), "E" or "Q" (terminate the
      Find command), "G" (accept the line and terminate Decide  option),
      and  if  no  operation  has  been  specified  any operation may be
      requested using the operation letter ("A", "I", "R", "K", "M",  or
      "X").   The  Decide option was primarily implemented to permit the
      user to control what lines were  operated  on  by  a  pre-selected
      operation.   However,  it  is  also  useful to exploring a file by
      giving a large range and high repeat count on  the  Find  command,
      and  then  terminating the Find or operating on the found lines by
      the proper Decide reply.

         Insert (",I"):  The found line is typed and a  sequence  number
      is  chosen  and  typed  to permit insertion of a single line right
      after the found line.

         Replace (",R"):  The found line is typed and then deleted.   In
      Novice mode, the "Line deleted" message is typed.  Then the line's
      sequence number is typed to permit insertion of a single  line  at
      the same place.
-SOS-                                                              Page 93


         Delete (",K"):  The found line is typed and then  deleted.   In
      Novice mode, the "Line deleted" message is typed.

         Mark (",M"):  The found line is typed and a Page Mark  inserted
      before  the  found  line,  thus  making it the first line on a new
      page.  Unless "/NONUMBER" is set, the new page number is typed.

         Extend (",X"):  The found line is typed in Alter  mode  (unless
      ",N"  has  been specified) and the user can type extra text on the
      end of the line.

         Alter (",A"):  Functions as presently implemented.   In  normal
      operation, the Alter-mode cursor is positioned before the matching
      search string in the found line;  in "find not"  mode  the  cursor
      remains positioned at the left margin (see item 4.11, above).

      Note for both Insert and Replace, if an Altmode ("$") is typed  as
      the  first character of the line nothing is inserted.  However, if
      an Altmode is used to terminate the line of inserted  text,  there
      is no special action.

48    The "find not" facility (described in 47, above) may also be  used
      for a context line search.  The (",-") operator is used to specify
      "find not" for a context line search, just as it is used  for  the
      Find command.

49    SOS will now permit switches to be given  in  the  command  string
      between the input and output file specifications, as in

            .SOS  FILE.NEW/UNSEQ=FILE.OLD

      However, the user should  be  aware  that  SOS  switches  are  not
      file-specific,  i.e.,  the  switch  is  not  associated  with  the
      filespec it follows;  rather, this change merely permits the  user
      to type SOS command strings with more flexibility.

50    The Stanford-type case inversion commands ("VV", "VU",  and  "VL")
      have  been  implemented.  These commands take as arguments a range
      of lines, optionally followed by ",S" to  suppress  printing  line
      numbers, and operate on the case of all letters found on all lines
      within the range;  all the lines in  the  range  are  typed.   The
      commands  are  "VV",  invert  case;  "VU", set to upper case;  and
      "VL", set to lower case.

51    In /C128 mode, the Rubout character (177 octal) may now be entered
      into  text  or  used as a search character by typing the character
      pair "?\".  As before, Rubout will type out in C128 mode as "?\".

52    When in /NONUMBER mode, SOS will now suppress the next "*" command
      following  a  "P"  or case-inversion ("VV", "VU", or "VL") command
      when the ",S" option is typed.

53    As an aid to users who enter primarily lower-case  text  with  SOS
      via  both upper and upper-lower case ASCII terminals, SOS will now
      force /UPPER as well as /M37 when run from  a  terminal  that  has
      "SET TTY LC"  in  effect.   This change permits such users to have
      /LOWER set in their SOS SWITCH.INI  files,  so  that  /LOWER  will
-SOS-                                                              Page 94


      apply when using SOS from upper-case-only ASCII terminals, such as
      the Teletype Model 33, but /UPPER will be set for upper/lower case
      ASCII  terminals,  since  the  user  can  control  case  with that
      terminal's shift key.  If this feature is not  desired,  the  user
      may override it by setting the /M37 switch.

54    SOS now supports the SAIL compiler's syntax-error interface.  This
      feature  gives  the SAIL user the option, when a SAIL syntax error
      is detected, of immediately editing the erroneous file,  beginning
      at the line where the error was detected.

55    To compensate for terminal output timing problems, SOS now  has  a
      special  routine  which makes sure all output generated by SOS has
      been typed or suppressed before ^O  terminal  status  is  cleared.
      SOS  clears  ^O  before  typing  the  "*"  prompt,  before  typing
      any  error  messages,  and  before  typing  any messages that will
      require a response from the user.

56    As a safety measure to prevent the accidental deletion  of  edited
      files,  the  ED  command  (Exit  with  deletion)  now  asks  for a
      confirmation by typing

            Really delete the file? (Y or N)

      If you type "N", SOS ignores  the  "ED"  command  and  returns  to
      asterisk  level.  If you type "Y", SOS deletes the file and exits,
      as before.  See item 5.11, above, for a description of the  effect
      of the "ED" command.

57    To assist users in aligning text  to  specific  columns  within  a
      file,  SOS  now  has  the "=RULER"  command.  This command types a
      template,  showing  column  numbers,  across  the  width  of   the
      terminal.   The  width  of  the  terminal  is  determined  by  the
      "SET TTY WIDTH" command (initially set to 72 by  the  Monitor  for
      most terminals).  The column template has the format

            123456789 123456789 123456789 123456789 123...etc.

      and respects the /NONUMBER switch, which causes  sequence  numbers
      to be suppressed.

58    As an  abbreviation  for  common  range  specifications,  SOS  now
      recognizes certain symbolic ranges.  These are as follows:

           Symbolic range     Replacing        Meaning
               BF:...         ^/^:...        Beginning of file
               BF!...         ^/^!...          (Same)
               ...:EF         ...:*/*        End of file
                 EF           ^/^:*/*        Entire file
               BF:EF          ^/^:*/*          (Same)

      These  symbolic  ranges  may  be  used  as  part  of   any   range
      specification (e.g., on a Find command).  However, they may not be
      used as a line number (e.g., on an Insert command), with  line  or
      page  number  arithmetic  (e.g.,  EF-10), or any combination other
      than as shown (BF, EF:..., EF!..., ...:BF are all illegal.)
-SOS-                                                              Page 95


      The symbolic range specifications differ from the "^/^" and  "*/*"
      line numbers in that "BF" and "EF" represent the lowest or highest
      lines that possibly could be in a file while the "^" and "*" forms
      represent  the  current  lowest or highest lines.  This means that
      symbolic ranges are more efficient  since  they  do  not  have  to
      inspect  the file to find an actual lowest or highest line number.
      Thus, use of the "BF" and "EF" range  specifications  may  prevent
      unnecessary wrap-arounds of the file being edited.

59    The error message  "% Illegal when READONLY"  ("%IRO"  in  /EXPERT
      mode)  has  been  added to better identify the error message given
      when an SOS command which would modify the file (C, D, I,  J,  JU,
      JR, JL, JC, JW, K, M, N, R, S, T, VV, VL, VU, W, X) is typed while
      in /READONLY mode.   Previously,  this  error  was  identified  as
      "% Illegal command" (%ILC).