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.