Google
 

Trailing-Edge - PDP-10 Archives - decus_20tap5_198111 - decus/20-0145/ante.doc
There are 2 other files named ante.doc in the archive. Click here to see a list.


                          A Nother Text Editor





     


     


                               Highlights


     


    ANTE is a flexible, general-purpose text editor.  It does not impose

a  particular  structure  on  text  (for  example,  lines)  or require a

particular editing technique  (for  example,  video  editing).    It  is

programmable,  however,  and  may  be  made  to do such things as handle

specially formatted text and perform video editing.  It is based on both

TOPS-10 and TENEX TECO,  combining  features  from  both  versions  (and

running  identically  on  TOPS-10,  TENEX,  and  TOPS-20).   It has been

deliberately kept simple, offering a powerful, symmetric set of commands

rather than a cluttered set of special purpose ones.


    In addition to supporting TECO-style editing, ANTE provides a number

of new features.  The more important ones are described here.


    The most significant new feature is the addition of multiple editing

environments.  This substantially increases editing flexibility -- parts

of a file may be separated and edited independently and then  merged,  a

number  of files may be edited at once and merged, and several files may

be consulted while one is being edited.  This has been  accomplished  by

extending  q-registers with the slight additional machinery necessary to

make each a separate, complete enviroment.  The editing  environment  is
                      A Nother Text Editor, Page 2

changed  via  the  A  command  to  a  given  q-register, after which all

commands operate on the q-register as if it were the  main  text  buffer

(the  main  text  buffer  is  in  fact nothing but a q-register with the

special name "*").  See EP, FA, FP, FQ, FX.


    After a sequence of commands is executed one usually  wants  to  see

the result.  ANTE eliminates the need for ending a command stream with a

typeout  command  by  automatically  performing  one.    The  V  command

implicitly terminates a command stream unless the last  command  in  the

stream  is  a  typeout  command,  in  which  case  the  explicit command

overrides the implicit one.  See FV, FW.


    When editing documents it is useful to have word-oriented  commands.

ANTE  has  a  positioning  command, N, and a delete command, O, that are

word-oriented.  nN moves the position  pointer  (the  TECO  .  value)  n

words, and nO deletes n words.  See ^L, ^N, ^W.


    In  an  effort to avoid the mangling of text with a mistyped command

stream, ANTE scans the stream twice.  On the first pass the  correctness

of  the  stream's  syntax  is  verified,  and  if  an  error is detected

processing is aborted.  If the syntax  is  proper  then  the  stream  is

scanned  again and the commands are executed.  An aborted command stream

may be saved in a q-register with the B command.  See ^F.


    To aid programming, ANTE uses a goto-less block  control  structure.

Blocks,  indicated  by  [  and  ],  define  control scopes (which may be

nested), and are conditionally exited (any number of levels) with the FC

command.  They are closely related to the < > iterator.
                      A Nother Text Editor, Page 3

                         Command Input Controls


^A              delete the last character
^E              print the command stream
^F              delete and save the command stream (two in succession)
^G              delete the command stream (two in succession)
^H              delete the last character
^R              print the current line
^U              delete the current line
^W              delete the last word
^V              insert the next character into the command stream
<rubout>        delete the last character
<escape>        terminate command stream input (two in succession)
^H              equivalent to -LV$$ if first character
<line feed>     equivalent to LV$$ if first character
^L              equivalent to -NV$$ if first character
^N              equivalent to NV$$ if first character


                                Commands


                Values may occur wherever n or m occur.
                Integers in braces are default values.
                Valid Qregs are 0 through 9, A through Z, and *.


                                 Values


<digits>        integer
+<value>{1}     unary sign
-<value>{1}     unary sign
<value>+<value> addition
<value>-<value> subtraction
.               the pointer position
Z               the number of characters in the buffer
:               to the end of the line (equivalent to .UaL-2C.UbQaJ.,Qb)
H               all text (equivalent to 0,Z)
                the value-producing commands Q, W, FN, FO, FTI, FZ, F*, F/, #


                        Characters, Words, Lines


<n>{1}C         move pointer n characters
<n>{1}D         delete n characters
<n>{0}J         jump to the nth character
<n>{1}<,m>K     delete n lines (or from characters n to m)
<n>{1}L         move the pointer n lines
<n>{1}N         move the pointer n words
<n>{1}O         delete n words
<n>{1}<,m>T     print n lines (or from characters n to m)
<n>{1}<,m>V     equivalent to -(n-1)T FTS~$ nT (m is the print mode)
                      A Nother Text Editor, Page 4

                                Strings


I[string]       insert text (<tab> is equivalent)
<n>{1}R[string1][string2]
                replace the nth instance of s1 with s2
                (a null second string simply deletes the first string)
<n>{1}S[string] search n times for the string


                              Q-registers


A[Qreg]         change the editing context to the Qreg (initially Qreg *)
B[Qreg]         save the last command in the Qreg
                (the command is inserted if the Qreg is the one being edited;
                otherwise the command replaces the Qreg's contents)
G[Qreg]         get the text from the Qreg
<n><,m>M[Qreg]  execute the text in the Qreg (n and m are passed as arguments)
<n>{1}<,m>P[Qreg]
                put n lines into the Qreg (or from characters n to m)
Q[Qreg]         get the value from the Qreg
<n>{0}U[Qreg]   put the value into the Qreg
<n>{1}<,m>X[Qreg]
                equivalent to <n><,m>P <n><,m>K
<n>{1}%[Qreg]   add n to the value in the Qreg


                              Input-Output


EG[string]      write the file, exit and go
EE              exit without writing a file
EN[string]      set the default file name used by EG, ER, EW, EX
EP[Qreg][string]
                put the file into the Qreg
ER[string]      read the file
EW[string]      write the file
EX[string]      write the file and exit


                               Iteration


<n>{infinity}<  iterate n times
>               end the body of an iteration
<n>{1}[         iterate n times (like < but with default of 1)
]               end the body of an iteration (like >)


                             Other Commands


<n>=            print n
W(B|I|S)        return the specified saved pointer position
                (B: before last search, I: start of insert, S: start of search)
FA              return to the Qreg last edited
                      A Nother Text Editor, Page 5

<n>{10}FB       change the base of numeric input/output
<n>{0}<,m>{1}FC<E|N|G|L>
                if n satisfies the given relation
                then exit m iteration levels
                (E:n=0, N:n#0, G:n>0, L:n<0) (the innermost level is 1)
<n>{1}FD[string]
                delete n instances of the string
                (equivalent to <n><R[string]>)
FG[Qreg]        print the text in the Qreg (equivalent to @FTS[Qreg])
<n>{" "}FI      insert n as a character at .
FK[Qreg]        eliminate the contents of the Qreg
FM[Qreg][Qreg]  copy the contents of the first Qreg into the second Qreg
<n>{1}FN[string]
                search (like S) and return value (0 for success)
FO              get the value of the character at .
<n>{1}<,m>FP[Qreg]
                insert n lines into the Qreg (or from characters n to m)
FQ              list the status of all nonempty Qregs
<n>{1}FS[string1][string2]
                replace n instances of s1 with s2
                (equivalent to <n><R[string1][string2]>)
<n>{0}FTE       set echo mode (1:monitor, 0:every char, -1:efficient)
FTI             input a character from the terminal
<n>{" "}<,m>FTO output n as a character to the terminal (with print mode m)
<n>{0}FTP       set the print mode (-1:direct, 0:terse, 1:verbose)
<n>FTS[string]  output the string to the terminal (with print mode n)
FV[string]      set the pointer indicator string used by the V command
<n>{0}FW        set <n> as the window size for the automatically executed V
<n>{1}<,m>FX[Qreg]
                equivalent to <n><,m>FP <n><,m>K
FZ[Qreg]        get the Z value from the Qreg
<n,m>F*         multiply n by m
<n,m>F/         divide n by m
#[char]         produce the character's value
?               print commands as they are executed
![string]       comment
;               accept and discard arguments
                      A Nother Text Editor, Page 6

                                 Notes


String arguments:
                They are normally terminated with an <escape>.  They may
                be  delimited  instead,  in  which  case the / prefix is
                used.  The command format  is  /  <command>  <delimiter>
                [string]  <delimiter>,  for  example  /I'a string'.  The
                contents of a  Qreg  may  also  be  used  as  a  string,
                indicated  by  @.    The  command  format is @ <command>
                [Qreg], for example @SX.

Searches:        The default search string (the string argument  to  the
                S, FD, and FN commands, and the first string argument to
                the R and FS commands) is the last one given. Except for
                the  FN  command, if a search within an iteration fails,
                the iteration is terminated.    There  is  one  wildcard
                character,  ^X,  which  matches  everything.    Note the
                differences between R, FS, and FD.

Qregs:           The * Qreg is the default for primary editing.  A  Qreg
                may hold text and a value simultaneously.  Note that for
                the  P,  X, and FM commands the original contents of the
                target Qreg are lost, for the FP  and  FX  commands  the
                given  text  is  inserted  into  the  target's  original
                contents, and for the  EP  command  the  input  text  is
                appended to the target's contents.

File names:       Each  Qreg  has  a default file name. It is set to the
                last file name given to the last ER, EW, or  EN  command
                executed  in  that  Qreg.   If the EN command is given a
                null argument the default is removed.  Note that the  EP
                command does not change the default.

Terminal print modes:
                In  direct  mode (-1) all control characters are sent to
                the terminal without translation.   In  terse  mode  (0)
                some control characters are output directly and the rest
                are  converted  to  printing characters preceded by "^".
                In verbose mode (1) some control characters are sent  as
                text  strings  (<cr>,  <lf>, <escape>, <rubout>) and the
                rest as in terse.

Terminal echo modes:
                In monitor mode (1) all characters  are  echoed  by  the
                monitor.    In character mode (0) they are all echoed by
                ANTE.  In efficient mode (-1) those that require special
                treatment are echoed  by  ANTE,  while  all  others  are
                echoed by the monitor.

Integers:        Integers that begin with 0 are always octal.