From 90f2294be85e5f1a2fdbc6826c6cb8d10965b7ac Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Sun, 4 May 2025 17:45:04 +0300 Subject: added the original "TECO Manual V4" (Video TECO User's Guide) - just for archival purposes I haven't updated it with any of the changes I did since Paul Cantrell put it online in 2007. Original source: https://www.copters.com/teco.html --- doc/TECO Manual V4.html | 4840 ++++++++++++++++++++++++++++++ doc/TECO Manual V4_files/teco_0EB.gif | Bin 0 -> 14862 bytes doc/TECO Manual V4_files/teco_EP.gif | Bin 0 -> 4458 bytes doc/TECO Manual V4_files/teco_layout.gif | Bin 0 -> 16871 bytes 4 files changed, 4840 insertions(+) create mode 100644 doc/TECO Manual V4.html create mode 100644 doc/TECO Manual V4_files/teco_0EB.gif create mode 100644 doc/TECO Manual V4_files/teco_EP.gif create mode 100644 doc/TECO Manual V4_files/teco_layout.gif (limited to 'doc') diff --git a/doc/TECO Manual V4.html b/doc/TECO Manual V4.html new file mode 100644 index 0000000..39e51eb --- /dev/null +++ b/doc/TECO Manual V4.html @@ -0,0 +1,4840 @@ + + +TECO Manual V4

+Video TECO User's Guide

+First Edition August 1986

+Revision 2.0 May 1987

+Revision 2.1 March 1988

+Revision 2.2 September 1988

+Revision 2.3 February 1989

+Revision 2.4 October 1993

+COPYRIGHT (c) 1985 - 1993 BY

+PAUL CANTRELL & J. M. NISHINAGA

+SUDBURY, MA 01776

+ALL RIGHTS RESERVED

+Information in this document is subject to change without notice and +does not represent a commitment on the part of the authors. The software +described in this document is furnished under a license agreement or +nondisclosure agreement. The software may be used or copied only in accordance +with the terms of the agreement. This software or any other copies thereof, may +not be provided or otherwise made available to anyone other than the licensee. +Title to and ownership of this software remains with the author.

+

+

Table of Contents

+ +

+Chapter 1 +

+1. +INTRODUCTION +

+TECO is a text editing program that runs on most Digital Equipment Corporation +operating systems. Versions currently exist for the PDP-8, PDP-11, PDP-10, and +VAX[1] computers systems. While there are +some differences between various versions of TECO, they are, in general, quite +compatible with each other.

+TECO has been a popular text editor not only because its command set is elegant +and powerful, but because TECO commands provide for an extension language that +allows the user to accomplish very complex editing tasks in the same commands +that he uses for normal editing.

+Several TECO editors in the past have had extensions made so that TECO +macros could control the terminal screen. The resulting screen editors +did not have TECO syntax while in the screen edit mode. Typically they had one +syntax for interactive editing with immediate feedback on the screen, and then +a sub-mode which allowed access to TECO commands.

+Video TECO is an attempt to create a much better screen based version of TECO. +It was designed to be an interactive screen based version of TECO from the +start, and therefore can provide immediate interactive execution of TECO +commands unlike previous screen based TECO editors.

+Another difference between Video TECO and other versions of TECO is the way it +buffers files. The original TECO editors were created when computer systems +were very memory limited, and were therefore optimized to run in small memory +configurations. One way that this was accomplished was that TECO was a +pipeline editor. Text was read from the input file into an edit buffer, +and then written out to the output buffer. The only part of the file which was +resident was the edit buffer, and this was typically kept quite small. Once +text was paged out to the output file, it could not be called up again without +writing out the entire contents of the files, and then re-reading to the point +in question.

+Because modern computer systems are not normally memory limited, Video TECO has +adopted the more current approach of keeping the entire file in memory at once. +This allows much more flexibility in the way the user can edit his file. +Indeed, unlike other TECO editors, Video TECO allows you to have multiple files +loaded for editing simultaneously, and these are all kept in memory while the +editor is active.

+This manual is intended to provide both a reference and tutorial for the +inexperienced user, and also to provide a guide for the experienced TECO user +who wishes to determine the differences between Video TECO and classic TECO +editors.

+Video TECO is currently ported to the following computer systems:

+ * UNIX (MASSCOMP RTU(TM))

+ * UNIX (Integrated Solutions 4.2 BSD)

+ * UNIX (Sun Microsystems)

+ * UNIX (Alliant Computer Systems' CONCENTRIX(TM))

+ * UNIX (Apple Computer's AUX(TM))

+ * UNIX (Digital Equipment Corporation ULTRIX)

+ * UNIX (System V.3, V.4)

+ * UNIX (HPUX)

+ * UNIX (OSF)

+ * MAC OS (Apple Computer's native MacIntosh(TM) Operating System)

+ * VAX/VMS (Digital Equipment Corporation) +

+1.1. +Conventions Used In This Manual +

+There are several conventions used in this manual that the user should be aware +of. Some of the characters used in TECO are not normally printable characters, +and are often printed in some equivalent form. For instance, TECO commands are +terminated with the ESCAPE character, ASCII code 27(decimal). Since the ESCAPE +character does not have a printable representation, historically it has always +been echoed in TECO as a dollar sign. Therefore, when you see a dollar sign in +this manual, it should be interpreted as an escape character, not a dollar +sign.

+Control characters are another example of characters which do not have +printable representations. The standard practice for printable representation +of control codes is to print them as a caret followed by the printable +character code. Thus Control-A is printed as ^A, Control-B as ^B, etc. In some +cases the reader will have to detect this by the context of the paragraph, +however every attempt will be made to explicitly mention when this is the case. +

+1.2. +Input Control Codes +

+Video TECO responds to certain control codes in an immediate fashion outside of +the command parser. These are necessarily operating system dependent. However, +at this time Video TECO is ported to both VMS and Unix, and the behavior is +identical on both of them. +

+1.2.1. +The Rubout Character Code +

+The rubout code (ASCII 127) causes the previous character to be deleted, as if +it had never been typed. +

+1.2.2. +The Rubout Word Code +

+The rubout word code (^W) deletes a word of input, where word is +typically delineated by some white space such as a space, tab, or newline. +However, when rubbing out TECO commands, the ^W also stops at TECO command +boundaries. +

+1.2.3. +The Rubout Line Code +

+The rubout line code (^U) deletes the last line of input. +

+1.2.4. +The Interrupt Code +

+The interrupt code (^C) causes complex operations such as iterations, searches, +and macro executions to terminate at the end of the current command, and return +Video TECO to command input mode. If Video TECO should become hung for some +reason, four of these characters typed in a row will exit the editor (but all +editing will be lost). +

+1.2.5. +The Suspend Code +

+The suspend code (^Z) is used to put Video TECO in the background and return +the user to operating system command level. This command is operating system +specific, and currently only works under Unix and VMS.

+To use this feature with VMS, the user must start Video TECO up using the +/SPAWN modifier. This causes Video TECO to spawn another process to run the +editor. When ^Z is typed, the user is reattached to the original process. After +^Z, the user may return to the Video TECO process by using the DCL +attach command. +

+1.3. +Starting up TECO +

+To edit a file or multiple files with the Video TECO editor, the user must +specify a command line to his operating system. While this may vary from +operating system to operating system, the basic form is:

+% vteco file1 file2 ... filen

+Video TECO will load each file into a successive edit buffer, +and then start with the first edit buffer showing. +

+1.4. +Screen Layout +

+The Video TECO screen has four distinct areas. These are (from bottom to top), +the echo line, the message line, the status line, and the +buffer area. Here is an example Video TECO screen:

+

+ +

+

+1.4.1. +Echo Line +

+The line on the very bottom is the echo line. The echo line +automatically wraps when you exceed the right hand margin, so it will always +hold the most recent user input. The current echo position is indicated by a +non-flashing cursor. On terminals below 2400 baud this may not appear, since +the overhead in maintaining two cursors may make the editor too slow. Although +most characters are echoed in their normal representation, there are a few +which are treated specially:

+The escape character is echoed as a dollar sign, since escape itself is +interpreted as a non printing control character with special meaning by +terminals.

+The tab character is normally echoed in Video TECO as a position to the +next tab stop. This means that the amount of white space inserted is dependent +on the horizontal position of the tab character. Since the echo line wraps to +arbitrary positions, Video TECO displays the tab character as a sequence of +four spaces.

+The carriage return character normally causes a new line to begin. +However, since we want to display as much input as possible on the echo line, +carriage returns are echoed as the sequence <CR>. +

+1.4.2. +Message Line +

+The message line is used when Video TECO wants to inform the user of an +error or unusual condition. In the example above, the message line contains the +string:

+?Cannot find 'something useful'

+because the search operation has failed. There are also several +commands which the user can use to place output into the message area. +

+1.4.3. +Status Line +

+The status line is a reverse video line which contains several fields, +each displaying information of use to the user.

+The first field always contains the string TECO, to identify this as the +Video TECO editor.

+The second field identifies which number edit buffer is currently selected. It +has the form: <BUFFER n > , where n is the number +of the current buffer.

+The third field displays the name of the edit buffer. In Video TECO, the name +of the buffer is the same as the name of the file.

+The fourth field is not always displayed. If the current edit buffer has been +modified, the word (modified) appears in this field. If the current edit +buffer is a readonly version of a file, the word (READONLY) appears in +this field. For more information on readonly buffers, see the EV command. +

+1.4.4. +Buffer Area +

+The buffer area is the area of the screen where the file being edited +is displayed. Its size will always be the size of the terminal or window minus +the three lines required for the echo, message, and status lines. The +terminal's flashing cursor will be in this area to indicated the current edit +position (dot ). +

+1.5. +Format of TECO commands +

+TECO commands consist of three parts: one or two optional numeric arguments, +the command name, and one or more trailing string arguments. An example of a +TECO command which has all of these present would be a constrained +find/substitute command:

+* QB,ZFSsome text$other text$$

+In this example, the string "QB,Z" is a double numeric +argument, the string "FS" is the command name, the string "some +text" is the first string argument and the string "other text" is +the final string argument.

+At the other side of the spectrum is the move line command:

+* L$$

+In this example, there are no numeric arguments at all, and so the +command will default to moving by one line. There are also no string +arguments because the move line command does not accept string +arguments.

+If no leading numeric argument is specified, then TECO defaults the argument to +the number one. If two arguments are to be specified, they are +separated by a comma.

+Only some commands allow the trailing string argument. If the trailing string +argument is specified, it is normally terminated by an escape. An exception to +this is if the user uses the @ modifier, in which case the string is surrounded +by delimiters.

+In a classic TECO editor, the user would specify many commands in a row, and +the TECO editor would not execute any of them until two escapes in a row were +typed. Video TECO executes most commands immediately. These commands can be +erased if an error occurs. When a double escape is detected by Video TECO, the +commands are determined to be completed, and they can no longer be undone by +rubbing them out.

+Some commands are either so complex, or so final, that Video TECO does not +perform them until a double escape is seen. An example of this would be the +exit command. Since there is no way that it can be undone (because at the +completion of the command, the editor is no longer running), Video TECO does +not execute it immediately. Rather, it waits for the user to type the double +escape before the exit command is processed. +

+1.6. +Exiting TECO +

+To exit the Video TECO editor, you use the EX, or exit command. +This will return you to the operating system prompt. If you have modified +buffers and you have not written them out, this command may fail with the error +message "modified files exist". In this event, you can either write out +the file using the EW command, if that is what you intended, or you can +supply a minus one argument to the EX command (-1ex ) to exit +without writing modified buffers.

+

+Chapter 2 +

+2. +Simple Editing +

+

+2.1. +The Edit Buffer +

+Every TECO editor has the concept of the edit buffer . The edit buffer +is that area of memory which holds the text which is currently being edited. In +a classic TECO editor, the edit buffer might contain only a portion of the file +at any one time because these editors were typically designed to run on a +memory limited machine.

+The edit buffer in Video TECO always contains the entire file being edited. +Although this uses more memory than a classic TECO editor, it is a more +accepted method of operation for recently developed editors.

+Since TECO is a character-oriented editor, it is important for the novice user +to understand the concept of the buffer pointer. The buffer pointer is a +pointer to the character position in the buffer that the next editing command +will affect. The buffer pointer in TECO does not point directly to a single +character, but actually points between character positions. Depending on +the command issued by the user, the characters which are affected may be to the +left or to the right of the buffer pointer.

+The idea that the pointer actually points between characters is especially +confusing in Video TECO since on the screen display the flashing cursor +does appear over a character. This is a side effect of the way that +terminals operate. In most cases, the user won't really need to make this +distinction in his mind, but there are cases when remembering that this is how +TECO numbers buffer positions will make a seemingly ambiguous case +non-ambiguous.

+An easy way to remember how buffer positions work in TECO is that a buffer +position refers to the number of characters to the left of the pointer. If +there are a total of ten characters in the buffer, there are eleven legal +buffer positions. Position zero is the position at the top of the +buffer, i.e., there are no characters to the left of this position. Position +ten in this case would be the final position in the buffer. If you +wanted to append text to the buffer, you would want to insert text at position +ten. An example of an edit buffer with ten characters, with the positions +labeled follows:

+0V1I2D3E4O5 6T7E8C9010

+Some TECO commands allow you to specify a range or block of buffer +positions. The way that this is done is by supplying two numeric arguments to +the command, separated by a comma. For example, the range 0,10 would +specify all the characters from position zero through position ten. In the +above example, this would refer to all the characters in the buffer. If you +wanted to refer only to the positions associated with the word TECO, you +would specify 6,10. Finally, if you wanted to refer to all the +positions associated with the word VIDEO, you would specify 0,5 +(or 5,0 for that matter). This would rapidly get very tedious, so TECO +provides some easy ways for you to refer to some common buffer positions. +

+2.1.1. +The Current Edit Buffer Position +

+The current edit position changes as you execute TECO commands which move it. +Since it would be very difficult for a human to remember what edit position he +was now at, TECO syntax supplies the dot operand. This operand is +actually typed as a period character ('.'). The dot operand evaluates to +the number of the current edit position. To specify a range of characters which +included all the characters preceding the current edit position, you +would type 0,. . Likewise, to specify all the characters following + the current edit position, you would type .,xx where xx was the +number of the final buffer position. +

+2.1.2. +The End Of Buffer Position +

+The final legal position in the edit buffer at any given time depends on how +many characters are in the edit buffer. In fact, because the buffer position is +zero based, the number of the position following the final character in the +buffer is the same as the count of characters in the buffer. Therefore, this +number is doubly useful as a position and as a count of +characters.

+TECO provides a shortcut character similar to dot, except that instead +of specifying the current edit position, it specifies the final buffer +position. This character is Z, and it can be used in expressions +whenever you want to refer to the end of the buffer or to the number of +characters in the buffer. For example, the expression 0,Z would specify +all of the characters in the buffer, and .,Z would specify all the +characters from the current edit position to the end of the buffer. +

+2.1.3. +The Entire Buffer Range +

+The final shortcut operand is the H operand. This is actually just a +compound of 0,Z, so H is just a way of specifying the entire buffer to a +TECO command. For example, probably the most common usage for H is in the HK +command. This has the effect of deleting all the characters in the buffer. +It is the fastest way to clear the edit buffer back to an empty state. +

+2.2. +Changing The Current Edit Position +

+In order to perform any editing other than simply inserting sequential +characters, the user needs to be able to move the current edit position +(dot) around. TECO provides many different ways to do this in order to +provide a flexible convenient way under different editing conditions. +

+2.2.1. +Moving DOT with the C Command +

+The C command moves the current edit position by the specified number of +characters relative to the current position. For example, the command 1C +moves the current edit position one position forward, while the command +10C would move the current edit position 10 positions forward.

+If you specify a negative argument to the C command, it moves dot +backward the specified number of positions. Therefore, the command +-10C would move the current edit position backward by ten positions.

+If you don't specify an argument to the C command, it defaults to 1C, so +typing repeated C commands in a row has the effect of moving the edit position +forward one character each time you type C. +

+2.2.2. +Moving DOT with the R Command +

+The R command works exactly like the C command, except in the opposite +direction. The commands 1R and R both have the effect of moving +the edit position backward exactly one position. The command 10R would move the +edit position backward 10 characters, and the command -10R would move the edit +position 10 characters forward (because a negative argument to R +actually means forward). +

+2.2.3. +Moving DOT with the W Command +

+The W command is a Video TECO unique command which moves the edit +position by words. Words, in this case, are defined as collections of +characters surrounded by whitespace such as spaces, tabs, and newlines.

+Depending on whether you are moving forward or backward with the W command, +dot will be left at a different location within the word. While moving +forward, the edit position gets left immediately before the first character of +the word. While moving backward, the edit position gets left immediately after +the last character of the word.

+As with the other positioning commands, the W command with no arguments implies +moving by one word, while specifying an argument tells how many words to move +by. +

+2.2.4. +Moving DOT with the L Command +

+The L command allows you to move the edit position by lines. The +L command always leaves you at the beginning of a line. The argument +specifies how many lines it should move over. If you specify 1L or just +L, dot will be left at the beginning of the next line.

+Negative arguments move dot backward, so the command -1L or just +-L will leave dot at the beginning of the line which precedes the line +dot is currently on.

+An argument of zero will leave dot at the beginning of the current line. +

+2.2.5. +Moving DOT with the J Command +

+While the C, R, W, and L commands have all been relative positioning commands, +i.e. they move relative to dot, the J command allows you to set the edit +position absolutely. The command takes one argument, which is the edit buffer +position to which dot should be set.

+To move the edit position to the top of the buffer, you could perform the +command 0J. This would set dot to edit buffer position zero, which is +the top of the file. The command ZJ would set dot to the end of the file +since position Z always follows the final character in the edit +buffer.

+The J command with no arguments is the same as 0J, i.e., it sets dot to the top +of the file. +

+2.2.6. +Moving DOT by Searching +

+During editing, a user often wants to position dot by searching for an +occurrence of a string within the file. The S command allows him to do +this. The S command has several forms. The most basic is:

+Stext$

+This will cause Video TECO to search forward from the current edit +position for the specified text string. If the text string is found, dot is +left at the position following the text string. Also, the default search string +is updated to be text. If the user then issues another search command +with no text argument (i.e. the escape character immediately follows the S +character), the search command will search for the default search string.

+If you specify a single argument to the search string, that argument tells the +search command how many occurrences of the text string should be searched for. +By default, the S command with no arguments means search for one occurrence of +the string. However, if the user were to issue the command:

+2Stext$

+the search command would search for the second occurrence of +text after the current edit position. If the argument is negative, this +tells the search command to search backward from the current buffer +position. The search command with two arguments is a constrained search, +and will not be covered in this chapter.

+The behavior of Video TECO when the string cannot be found is different from +that of classic TECO editors. Classic TECO editors would leave dot at the end +of the edit buffer. This behavior is not desirable in a screen editor, so Video +TECO leaves dot unchanged in this case, and simply issues an error message. +

+2.3. +Deleting Text +

+There are two commands for deleting text from the TECO edit buffer. These are +the D and K commands. There are an additional two commands which +use searching to specify the characters to be deleted: the FD and +FK commands. +

+2.3.1. +Deleting Text with the D command +

+The D command is very similar to the C command in operation, +except that instead of moving over buffer positions, it deletes them. The +command 1D or just D causes the character following dot to be +deleted. The command -1D or simply -D causes the single character +preceding dot to be deleted. +

+2.3.2. +Deleting Text with the K command +

+The K (for kill) command deletes lines of text, and has two basic +forms. The first form takes one argument, which is the number of lines of text +to be deleted. This works exactly like the L command except that instead +of moving over the lines, the lines are deleted. Thus, the 1K or simply +K command will delete from the current editing position up to and +including the next carriage return. The 0K command causes the text from +the beginning of the line to the current edit position to be deleted. Thus the +command sequence 0KK will always delete the entire contents of the +current line, regardless of where dot is positioned on the line.

+If the argument to the K command is negative, it causes the K command to delete +the specified number of lines which precede the current edit position. +Thus -1K or simply -K will delete from the current edit position back to and +including the line which precedes the current line.

+The second form of the K command takes two numeric arguments: n,mK. This +form will delete all the characters between edit buffer position n and +edit buffer position m. One example of this command would be deleting +all the characters from the beginning of the file to the current edit +position:

+1,.K

+Another example would be to delete all the characters in the buffer. +There are two ways to do this, with the second being the shortcut way:

+0,ZK or simply HK +

+2.3.3. +Deleting Text with the FD command +

+The FD command words exactly like the S (search) command, except +that when it finds the specified occurrence of the text, it deletes it. Thus +the command:

+FDtext$

+searches for the string text and then removes it from the edit +buffer. If an argument is supplied to the FD command, it specifies which +occurrence of the string should be deleted. The FD command updates the default +search string just as the S command does, and an FD command with no string +argument will search for and delete the default search string. +

+2.3.4. +Deleting Text with the FK Command +

+The FK command is another search-and-then-delete command, but it +works slightly differently from the FD command. The FK command remembers the +current edit position (dot), searches for the specified occurrence of +the specified string (or the default if no string is specified). It then +deletes all the text from the remembered dot, up to but not including +the specified text string. The reason that the deletion is not inclusive is +that firstly there are many cases where this is the action you would prefer, +and secondly, if you also wanted the searched for text to be deleted the +default search string is properly set up so that you simply issue an FD command +with no string argument and this will remove that text. +

+2.4. +Inserting Text +

+So far we have only been dealing with making changes to an existing file. +However, in reality, the most common operation is the insert operation. +This is where you want to type characters and have them appear within the file. +The insert command in TECO is the I command. It has the form:

+Ithe text to be inserted$

+A minor variation of the insert command is that you can initiate it by +simply typing the tab character. In this form, the tab itself is +inserted and the command then proceeds normally until you type the terminating +escape character. This is a very minor shortcut, but it does exist in all +classic TECO editors.

+Another form of the insert command is when you specify a single argument to the +I command. In this form, the character whose ASCII code was supplied as the +argument is inserted. In this form, the command does not take a string +argument, so the character which follows the I will be taken as the +beginning of the next command. The following command string:

+65I66I67I68I

+would insert the string ABCD into the edit buffer at the current +position (because 65 is the ASCII code for 'A', etc.). +

+2.4.1. +Changing Text with Find / Substitute +

+Video TECO has two commands to search for a given string and change it to a +different string. These are the FS and FR commands. +

+2.4.2. +Changing Text with the FS Command +

+The FS command searches for the specified occurrence of the specified +string, and replaces it with the second string. For the searching aspect, FS +behaves just like the other searching commands, with the argument specifying +which occurrence should be searched for, a negative argument meaning search +backward, and a null string argument meaning search for the default search +argument. An example of the FS command is:

+nFSfirst-string$second-string$

+where n is the numeric argument, first-string is the string to be +searched for, and second-string is the string which will replace the first. If +the second string is null, then the effect of the FS command is identical to +that of the FD command. +

+2.4.3. +Changing Text with the FR Command +

+The FR command is identical to the FS command except in its actions if +the second string argument is null. Rather than replace the search string with +a null string as FS would do, FR replaces it with the last (default) replace +string. Thus the sequence:

+FRstring_one$string_two$FR$$

+actually will replace string_one with string_two twice, because +in the second FR command both the search string and the replace string will +default to the previous settings from the earlier command.

+Chapter 3 +

+3. +Buffer Management +

+

+3.1. +Multiple Buffer Editing +

+Classic TECO editors only allowed the user to edit one file at a time. This +made moving text between files, or making changes to multiple files very +difficult. Video TECO maintains multiple edit buffers which the user can switch +between to edit multiple files simultaneously. +

+3.1.1. +Creating Edit Buffers with the EB Command +

+The EB command is used to create edit buffers and to switch between +them. The command has two basic forms. However, only one of them can be used to +create new edit buffers. The command:

+EBfilename.ext$

+will cause an edit buffer named filename.ext to be created, +and loaded with the contents of filename.ext. If the edit buffer of that +name had already existed, the result would have been to simply make that edit +buffer be the current edit buffer. Wildcards are supported by the EB command.

+The other form of the EB command can only be used to switch between edit +buffers that already exist. If you try to switch to a buffer which does not +exist, an error will occur. This form of the command takes a single numeric +argument, which is the number of the edit buffer to switch to. Each edit buffer +in Video TECO has a number associated with it strictly for this purpose. To +switch to the second edit buffer, the command of this form would look like:

+2EB

+Notice that there is no terminating escape. In this form, the command +completes immediately after the EB has been typed. Both forms of the command +can be undone. If you rub out the EB command, Video TECO will switch back to +the previous edit buffer.

+Video TECO numbers the edit buffers that you create with the EB command +sequentially from one. Video TECO also creates edit buffers for internal use, +such as q-registers. These are numbered sequentially with negative numbers +starting with minus one. Finally, edit buffer zero is a special edit buffer +which contains a list of the current edit buffers. +

+3.1.2. +Listing Active Edit Buffers +

+The 0EB command causes Video TECO to switch to edit buffer zero. Edit buffer +zero is special in that each time you switch to it, Video TECO creates a list +of all active edit buffers, and inserts it in this edit buffer. An example of +such a list follows:

+ +

+

+ + 3.1.3. +Creating a Readonly Edit Buffer +

+The EV command is identical to the EB command except in one respect. If it is +used to create a buffer, that buffer will be set readonly. The effect of +a readonly buffer is that you can modify its contents, but you cannot write it +out. If the buffer already exists, the EV command simply switches to it, and +does not change its readonly status. +

+3.1.4. +Writing Buffers to Disk with EW +

+The EW command is used to write the contents of the current edit buffer +to the disk. It takes one string argument. Normally, this argument should be +specified as null by immediately following the EW with an escape character. +This will cause the current edit buffer to be written to a disk file with the +same name as the edit buffer. If you specify a string to the EW command such +as:

+EWfilename.ext$$

+then Video TECO will write the contents of the current edit buffer to +the file specified in the EW command. In any case, the modified flag for +the buffer will be cleared, and this will be indicated on the status line.

+Note that in the example above, the command was terminated with two escape +characters. This is because the EW command cannot be undone (once a file is +written to the disk, we can't unwrite it). In cases like this, Video TECO +forces you to use the double escape to complete the command. +

+3.1.5. +Deleting Edit Buffers with EF +

+The EF command is used to remove the current edit buffer. All storage +associated with the edit buffer is freed. If the edit buffer has been modified, +the EF command will fail. This can be overridden by specifying an argument of +-1 to the EF command. The EF command cannot currently be undone.

+Chapter 4 +

+4. +Advanced Editing Techniques +

+

+4.1. +Command Modifiers +

+There are two characters which can be used to modify the behavior of TECO +commands. The at-sign ('@') and colon (':') commands are put in front of any +arguments to a command, and change the way the commands work. +

+4.1.1. +AT-SIGN Modifier +

+The @ modifier typically allows the user to specify text strings to Video TECO +in a different manner. Instead of being an escape terminated string, the @ +command causes the string to be surrounded by two delimiters. The character +which follows the TECO command byte is the opening delimiter, and the text +string continues until a second delimiter character is seen.

+As an example, assume that the user wants to input text including escape +characters, probably because he is typing in a TECO macro. If he used the +normal form of the insert command, he would have to quote every escape with the +quote (^V) command. Instead, he could use the @I command like this:

+@I/this$has$escapes$in$it/

+Notice a couple of things. The character which follows the @I is a +slash ('/') character. This could actually be any character the user wanted to +specify as a delimiter. The text string then continues until another slash (or +whatever the user decides to use) is typed. This terminates the insert command +just as the escape character would normally. +

+4.1.2. +Colon Modifier +

+The colon modifier is more dependent on the command it is found with than the +AT-SIGN modifier. In general, it means execute the TECO command in an alternate +way, where alternate way depends on the command being executed.

+All searching commands use the colon modifier to mean that the command should +return a value which indicates whether the search was successful or not. This +can then be used as an argument to another TECO command, typically a +conditional operator. An example would be:

+:Sfred$"S0KK'

+This command would search for the string 'fred', and delete the entire +line if it was found.

+Here there should be a discussion about another command affected by the : +command, yet it should be one we have already described... +

+4.2. +Q-registers +

+Q-registers are data storage registers available to the TECO user. There are 36 +Q-registers in TECO corresponding to the 36 characters 0-9 and A-Z. Each +Q-register can hold a block of text and a single integer simultaneously. +Whether the user is referring to the text contents or the integer contents if +resolved by the command he used to access the data.

+Video TECO implements Q-registers as internal edit buffers, so that in addition +to the Q-register commands that most TECO editors provide, Video TECO also +allows you to make a Q-register be the current edit buffer. +

+4.2.1. +Loading Text into Q-registers with the X command +

+Text is stored in a Q-register using the X command. The X command +consists one or two arguments, the X character, and the single letter +Q-register name. Since the Q-register name is only a single character, and not +a full string, a terminating escape is not required.

+If the X command is issued with no argument, or with one argument, the argument +refers to the number of lines of text from 'dot' which should be saved in the +Q-register. No argument defaults to saving one line. A negative argument saves +n lines before the edit buffer pointer. An argument of zero means +save all the text from the beginning of the line up to 'dot' in the specified +Q-register.

+The X command with two arguments operates on a range of edit buffer positions +in a similar manner to the K command. In the following example:

+n,mX1

+all the characters from edit buffer position n through m +are copied into Q-register 1.

+In all cases, the X command is non-destructive to the data in the edit buffer. +The text that is copied into the Q-register remains in the edit buffer. If the +user wishes to cut the text such that it is moved into the Q-register, +and removed from the edit buffer, he must follow the X command with a matching +K command. The X command is destructive in the sense that it deletes any +previous contents of the Q-register before the specified text is loaded into +it.

+An alternate version of the X command is :X (modified by the colon argument). +This version of the X command works identically, except that the text in the +Q-register is not deleted, but rather appended to. +

+4.2.2. +Retrieving Text from Q-registers with the G command +

+The G command causes the text contents of the specified Q-register to be +copied into the current edit buffer at 'dot'. 'dot' is left pointing just past +the inserted text. The Q-register remains unaffected by the command.

+ This command takes no leading arguments, and is simply followed by the single +character Q-register name, as in:

+G1

+which would copy the text contents of Q-register 1 into the edit +buffer. +

+4.2.3. +Loading Numeric Values into Q-registers with the U command +

+Q-registers hold signed numeric data as well as textual data. The U command +must be proceeded by a single numeric value which is then loaded into the +number store area of the Q-register whose single letter name immediately +follows the U command.. Any text contents of the Q-register are unaffected. The +previous value which was stored in the Q-register is lost. +

+4.2.4. +Retrieving Numeric Values from Q-registers with the Q command +

+The Q command allows you to retrieve the single number stored in the +number area of the Q-register. The Q command returns a value which can be used +as part of an arithmetic expression, possibly as part of an argument to another +TECO command. Thus the Q command allows you to use Q-registers as temporary +variables in complex TECO command strings. The format of the Q command is +simply 'Q' followed by the single letter name of the Q-register:

+Q1

+returns as its value the numeric contents of Q-register '1'. +

+4.2.5. +Using a Q-register as an Edit Buffer +

+There are two ways you can switch into a Q-register for editing. One would be +to use the EB command and either specify the name of the Q-register +(Q-registers have names like TECO-A and TECO-1), or by specifying the edit +buffer number for the Q-register (Q-registers have negative buffer numbers). To +find out the name or buffer number, you should use the 0EB command.

+A second, preferable method is to use the eq command with no string argument. +This is an enhancement to Video TECO which does not exist in classic TECO +editors. Thus:

+EQ1$

+causes the editor to make Q-register 1 be the current edit buffer.

+There are some restrictions to what you can do when using a Q-register as the +main edit buffer:

+* You can't use the Q-register you are in as the target of an X command (i.e. +XA is illegal if you are editing in Q-register A).

+* You can't use the Q-register you are in as the target of a G command (i.e. GA +is illegal if you are editing in Q-register A).

+* You can't use the Q-register you are in as the target of a POP command (i.e. +]A is illegal if you are editing in Q-register A).

+* You can't use the Q-register you are in as the target of an asterisk command +to save the last command in the Q-register (i.e. *A is illegal when editing in +Q-register A).

+* You can't use the EQqfilename$ command with the target being the Q-register +you are editing in.

+Most of these are common sense, as they would obliterate the Q-register you are +in, and the Q-register would be in some undefined state during the command. +Using a Q-register this way would be very unusual, and so you probably won't +encounter it in any normal editing session. +

+4.2.6. +Q-registers that have special meaning +

+There are several Q-registers which have special meanings. This is typically +done to allow you access to internal Video TECO data as part of a macro. +

+1, +Underscore Q-register +

+The '_' Q-register text buffer holds the current default search string. The +main advantage to doing this is that a TECO macro can save and restore the +default search string so that searches within the macro do not change what the +user had as a default search string. The typical way to do this would be to +include a

+[_ and ]_

+command at the beginning and end of each macro which contains search +commands. The numeric side of the underscore Q-register is reserved for future +use. +

+2, +Minus-Sign Q-register +

+The '-' Q-register text buffer holds the current search replace string. This +allows all the same sorts of macro handling as is possible with the search +string. The numeric side of the underscore Q-register is reserved for future +use. +

+3, +Asterisk Q-register +

+The numeric side of the Asterisk Q-register (*) contains the number of the +current edit buffer. This allows macros which must switch edit buffers to save +the current buffer number so that they can switch back to it when finished.

+The text side of the Asterisk Q-register contains the pathname of the current +edit buffer. If you are editing /usr/teco/file.1, the G* command would insert +'/usr/teco/file.1' into the buffer at the current edit position.

+Loading the text side of Q-register * renames the current edit buffer. If you +are editing /usr/teco/file.1 and you use the X command to load text into the +asterisk Q-register, the pathname of the edit buffer will be changed. +

+4.3. +Arithmetic Expressions +

+As a first step in taking full advantage of the power of TECO, the user should +realize that arguments to TECO commands are arithmetic expressions. Besides +simple statements like:

+4K

+you can specify complex statements such as:

+(Q1*2)+(Q2/7)-(Z-./2)K

+are possible. Note that the 'Q', 'Z', and '.' commands are all being +used here to return values which are part of the expression. By using +Q-registers as integer variables, it is simple to write quite complex programs +with TECO. +

+4.3.1. +Rules for Expression Evaluation +

+Classic TECO editors do not support the normal operator precedence rules that +are common in most languages. This is because of the simplicity of their +parsers. These versions simply evaluated expressions left to right unless +modified by explicit parenthesis.

+Video TECO, on the other hand, supports operator precedence just as you would +expect from a normal language. While this may cause compatibility problems with +existing TECO macros, it does show that the authors really have their act +together in the parser department...

+In any case, unary operators have the highest precedence, followed by multiply +and divide (* and /), followed by addition and subtraction (+ and -). This can +be overridden by the use of parenthesis where needed. +

+4.3.2. +Checking Expression Evaluation with the = Command +

+One very useful command when performing complex expression is the equals +command ('='). This command will print the decimal equivalent of the expression +in the message area of the screen. Thus the command:

+2+3*4=

+would print the value '14' in the message line. This is also useful +for determining the current numeric contents of a Q-registers.

+Two equals commands in a row will print the results in octal, while +three equals commands in a row will print the results in hexadecimal. Thus:

+1,==

+would print the value 0xF, i.e. 15 in base 16. +

+4.4. +Iterations +

+Iterations are one of the first advanced editing skills the average user should +learn. The most common usage for an iteration is to implement a global +find/substitute. By enclosing an FS command in an iteration, it will +change all occurrences of the string following 'dot'.

+Iterations are enclosed in angle brackets '<>'. They may be nested up to +255 levels deep in Video TECO. If an argument is supplied to the open angle +bracket, this specifies how many times the iteration is to execute. Thus:

+4.4.1.

+is a somewhat inefficient way of achieving

+5L

+because the body of the iteration (the 'L' command) will be executed 5 +separate times. If an iteration has no argument supplied, it will loop forever, +unless jumped out of on some condition. The semi-colon command provides that +capability. +

+4.4.2. +Breaking out of Iterations with the Semi-Colon Command +

+The semi-colon command provides the user with an easy way to break out of an +iteration under certain conditions. The semi-colon command can only be used +within an iteration. Attempts to use it otherwise will result in an error +message being generated. If an argument is supplied to the semi-colon command, +it will break out of the current iteration if the argument is TBS. The more +normal use of the semi-colon command, however, is with no arguments supplied. +In this case, the semi-colon command bases it's decision to break out of the +iteration on whether or not the last search command found an occurrence of the +search string. If the string was not found, the semi-colon command causes the +rest of the instructions in the iteration to be skipped, and the iteration +exited. The following example finds all occurrences of 'foo' and appends the +string 'bar' to it:

+<SFOO$;IBAR$>

+An easier way to do the same thing would be:

+<FSFOO$FOOBAR$;>

+In the first case, the insert command to insert the string 'BAR' is +executed each time the search command successfully finds 'FOO'. The final time +when 'FOO' cannot be found, the semi-colon command causes the insert command to +be skipped, and the iteration to be cleanly exited.

+Likewise, the second example executes the FS command repeatedly changing all +occurrences of 'FOO' to 'FOOBAR'. Then, when the FS command cannot find another +occurrence of 'FOO', the semi-colon command causes the iteration to terminate. +

+4.5. +MACROS +

+TECO provides a macro capability by allowing the text contents of a +Q-register to be interpreted as a string of TECO commands. The M command +causes TECO to execute a Q-register in this fashion. The execution proceeds as +if the commands had been typed at the keyboard. Thus a macro is very similar to +a subroutine call in other languages. The advantage of macros is that complex +strings of TECO commands can be loaded into the Q-register, and then executed +by simply typing:

+Mq

+where q is the single letter name of the Q-register. Arguments +can be passed to macros. If you typed the command:

+5Mq

+and the Q-register q had as the first command:

+UA

+then the numeric side of Q-register A would contain the argument +value 5, and this could be used throughout the macro. +

+4.5.1. +Loading Default Macros with TECO INI +

+When Video TECO is first started up, it looks for an initialization file +containing default contents for Q-registers. The name is operating system +dependent. On UNIX systems the name is '.teco_ini'. On VMS it is +'TECO.INI'. Each entry in this file has a single letter Q-register name +followed by a delimiter character, an arbitrary text string followed by a +second occurrence of the delimiter character.

+Video TECO loads the Q-registers with the initial text strings specified in the +TECO init file. After they have all been loaded, if Q-register '0' has been +loaded it is automatically executed before any user commands are input. This +allows the user to customize Video TECO and to set up the initial conditions of +the editor. +

+4.5.2. +Saving the Last Command with * +

+A simple way to create a macro is by simply typing it in as a command. TECO +provides a way to store the previous command string into Q-register after it +has been completed. The asterisk command should be typed only after a +double-escape sequence has completed the previous command. The format of the +command is:

+*q

+where q is the single letter name of the Q-register where the +text will be stored. The previous contents of the Q-register are lost.

+Classic TECO editors typically require the *q command to be the first +command typed after a double escape. Video TECO allows *q anywhere within a +command line, and the result is that the previous command string gets saved to +the specified Q-register. +

+4.6. +Conditional Operators +

+Conditional operators in TECO work exactly as conditional operators in many +high level programming languages. They allow you to test a value or expression +and conditionally execute commands based on the outcome of the test. +

+4.6.1. +The Double Quote 'IF' command +

+In TECO, the double quote character is the conditional IF +operator. The double quote is followed by a single letter which determines the +actual test to be applied. The argument to the conditional operator is the +single argument which precedes the double quote character.

+If the condition specified is true, the commands which follow the conditional +operator are executed normally. However, if the condition specified is false, +TECO skips over all the following commands until it encounters an else +clause, or the close of the conditional code which is marked by a single quote. +An example of a conditional expression follows:

+!LOOP!Q1-1U1Q1"GOLOOP$'

+This command loops decrementing the value in Q-register 1 as long as +it contains a value greater than zero ("G). When the value is no +longer greater than zero, the OLOOP command is not executed, and the +conditional falls through the single quote command to the next command which is +typed. +

+4.6.2. +The Vertical Bar 'Else' command +

+If the Vertical Bar character ('|') is encountered within a conditional +expression, it represents the beginning of the else clause of the +conditional. The else clause is optional in TECO conditionals. An example of an +else clause follows:

+:SFRED$"SIFound Fred$|ICan't find Fred$'

+If fred is found, the command inserts 'Found Fred', ELSE +it inserts 'Can't find Fred'. +

+4.6.3. +Conditional Operators +

+The following is a table of the available conditional operators:

+ Operator Meaning "C" equivalent

+ G Greater Than Zero > 0

+ L Less Than Zero < 0

+ T True < 0

+ S Successful < 0

+ E Equal To Zero == 0

+ F TBS == 0

+ U TBS == 0

+ N Not Equal To Zero != 0

+ C Symbol Constituent TBS

+ D Digit isdigit(x)

+ A Alphanumeric isalpha(x)

+ V Lower Case islower(x)

+ W Upper Case isupper(x)

+Note that you can only test arithmetic values against zero. Thus if you wanted +to test for a specific value such as 1234, you have to do it like this:

+Q1-1234"E

+such that the equal to zero test only works when the original value +(Q1 in this example) is equal to 1234.

+Chapter 5 +

+5. +Advanced Searching +

+

+5.1. +Default Search Rules +

+Searching is used extensively in TECO to position the edit cursor. Normally, +the string that the user specifies to the search command contains a list of +normal characters. Each character specified in the search string must be +matched by a similar character in the edit buffer.

+Video TECO searches default to case insensitive searches. This means +that characters in the edit buffer are considered to match characters in the +search string even if one is upper case and the other is lower case. +

+5.2. +Wildcard Searching +

+Wildcard searches allow the user to embed special character sequences within +the search string which match a class of character or string rather than +a single character. This allows you to create very complex search operations +without having to resort to conditional expressions to test for different +occurrences.

+Perhaps the simplest wildcard to use as an example is the ^X wildcard. This is +actually the ASCII code 24, Control-X. It tells Video TECO to match any +character in this position. The user should understand that ^X requires +some character to be there, it just doesn't matter what code it is. Thus +the command:

+SA^XB$

+Would match the strings A+B, A-B, A*B, A/B, as well as many other +strings. While this is only moderately useful during normal editing, it becomes +invaluable when writing macros to accomplish complex editing tasks. +

+5.2.1. +The ^X Wildcard +

+As already described, the ^X wildcard will match any single character, with the +requirement that the character must exist. For instance, if the last three +characters in the edit buffer were the letters 'foo', the search +string

+Sfoo^X$

+would not find them because it would require that some character +follow the second 'o' character. However, if the last four characters in +the buffer were the letters 'foot', then the search command would have +found this occurrence. +

+5.2.2. +The ^N Wildcard +

+The Control-N wildcard matches any character except the one which +follows the ^N in the search string. Thus the search command:

+Sfoo^Nt$

+would find strings such as food, or fool, but not +foot.. +

+5.2.3. +The ^ED Wildcard +

+The ^ED wildcard matches numeric digits. Thus the search string will skip over +any number of characters from the set {0,1,2,3,4,5,6,7,8,9}. There must, +however, be at least one numeric character for the search to +succeed. Note that commands like:

+S^ED1$

+will always fail, since the ^ED eats up all the numeric digits +insuring that there is never a '1' to match the '1' in the search +string. +

+5.2.4. +The ^ES Wildcard +

+The ^ES wildcard matches any number of spaces and tabs. +

+5.2.5. +The ^E^E Wildcard +

+The ^E^E string is not actually a wildcard, but instead a modifier or mode +setting string. It causes the search operator which is normally case +insensitive to become case sensitive. Thus:

+Snow is the ^E^ETIME$

+would match the strings 'NOW IS THE TIME', 'Now Is The TIME', but not +'now is the time', because the final four characters are all required to match +case exactly. +

+5.2.6. +The ^EA Wildcard +

+The ^EA wildcard matches any alphabetic character, i.e. any upper or lower case +letter from A-Z. +

+5.2.7. +The ^EB Wildcard +

+The ^EB wildcard matches any separator character, where separator is defined as +any non-alphanumeric character. +

+5.2.8. +The ^EC Wildcard +

+The ^EC wildcard matches any symbol constituent. Although symbols vary from +computer to computer, this is currently defined to be alphanumeric plus period +(.), Dollar sign ($) and underscore (_), regardless of platform. +

+5.2.9. +The ^EG Wildcard +

+The ^EGq wildcard matches any character currently in the text side of +Q-register q. Note that this is a fairly slow operation, since the +evaluation must be done at run time, rather than parse time. In an iteration, +for instance, the search table cannot be specified at parse time, but rather +must be built each time through the iteration in case the contents of the +Q-register have been changed. The ^E[ construct is generally a more efficient +mechanism. +

+5.2.10. +The ^EL Wildcard +

+The ^EL wildcard matches any line terminator character. This is defined as +newline, carriage return, or form feed. +

+5.2.11. +The ^EM Wildcard +

+The ^EM wildcard causes any number of the following token to be matched. For +instance, ^EMA would match A, AA, or AAA. ^EM^EC would cause any number of +symbol constituents to match, thus ^EM^EC could match "long_symbol_name_9". +

+5.2.12. +The ^ER Wildcard +

+The ^ER wildcard matches any alphanumeric character. +

+5.2.13. +The ^EU Wildcard +

+The ^EUq wildcard matches the ASCII code contained in Q-register +q. Thus the sequence 32UA S^EUA$ would be a rather roundabout +way to search for a space. +

+5.2.14. +The ^EV Wildcard +

+The ^EV wildcard matches any single lowercase letter. +

+5.2.15. +The ^EW Wildcard +

+The ^EW wildcard matches any single upper case letter. +

+5.2.16. +The ^E[] Wildcard +

+The ^E[a,b,c] wildcard matches any of the tokens a,b,c. Note that the +tokens can generally include wildcards, so a sequence such as +S^E[a,b,c,^ES,^EL] would search for any of the characters a,b,c, any +number of whitespace characters (^ES) or any line terminator character (^EL). +

+5.2.17. +The ^E<> Wildcard +

+The ^E<nnn> wildcard matches the numeric code nnn. Unlike +classic TECO which just assumes the code is octal radix, Video TECO assumes +that a leading zero means octal (i.e. 010 is octal 10), a leading 0x means hex, +

+5.3. +Search Modifiers +

+Both the AT-SIGN and COLON modifiers work with all forms of the search command. +

+5.3.1. +The Colon Modifier +

+The colon modifier affects all searching commands the same way. It causes them +to return a value, depending on whether or not the specified string was +found.

+In the presence of the colon modifier, search strings will return zero if the +string was not found, or minus one if the string was found. Thus, the +command:

+:Sfred$=

+would either print 0 or -1 on the message line, depending on whether +or not the string 'fred' was found. +

+5.3.2. +The AT-SIGN Modifier +

+The AT-SIGN ('@') modifier affects how strings are specified to the search +strings. Instead of being escape terminated strings, the strings are specified +by the user by surrounding them with delimiter characters. This allows escape +to be included in the string. An example of the search command using this +modifier is:

+@S?string?

+where the question mark character ('?') is the delimiter. Note that if +the delimiters have no intervening characters such as:

+1,?

+Then the specified string is null, which means to use the default +search string.

+In the case of commands which take multiple strings, such as FS, the format +is:

+@FS/string1/string2/

+Note that there are not two sets of strings with separate delimiters. +This means that the delimiter for the replace string cannot be different from +the delimiter for the search string. +

+5.4. +Default Search String +

+When a user types a search command such as s, n, fs, fd, fr, etc., if he +types the search string, TECO searches for the specified search string. +However, if he does not supply a search string, TECO uses the last search +string he specified.

+Video TECO remembers the default search string by storing it in Q-register '_' +(underscore). This is an enhancement which does not exist in regular TECO. This +allows the advanced Video TECO user to do some useful things. +

+5.4.1. +Preserving the Default Search String across Macro Executions +

+By pushing the '_' (underscore) Q-register onto the Q-register pushdown list at +the beginning of a macro, and popping it back at the end of the macro, a macro +can use searching within the body of the TECO macro without changing the user's +default search string. +

+5.4.2. +Examining the Default Search String +

+A user can examine the current search string by either switching to Q-register +'_' (for instance, he could type EQ_$), or he can insert it into his current +buffer with the G command, as well as several other ways. +

+5.4.3. +Setting the Search String Directly +

+Instead of affecting the default search string by using a searching command, +the user can set it by simply loading Q-register '_'. This has the effect of +loading the search string, but not actually performing any search. The user +needs to keep in mind the limitation that search strings cannot exceed 256 +characters. Although it is possible to switch into the '_' Q-register and edit +the search string using regular TECO commands, the user will get rather strange +results if he tries to use search commands within the search Q-register. The +better method is to switch to some other buffer, get the contents of the search +string using the G command, edit the text, and then copy it back using the X_ +command.

+

+Chapter 6 +

+6. +Programming TECO +

+

+6.1. +Other Features +

+Chapter 7 +

+7. +TECO REFERENCE +

+The following section lists each TECO command. +

+7.1. +'A' Command +

+

+7.1.1. +With No Arguments +

+In classic TECO editors, the A command without an argument meant append. +The action performed was to append more data from the file into the edit +buffer. Since Video TECO always reads the entire file in, this function has no +meaning, and is reserved for future use. An error occurs if an attempt to use +the command in this format is made. +

+7.1.2. +With One Argument +

+This command returns the ASCII code of the character in the buffer offset +argument from the current edit position. Thus, this command with an +argument of zero will return the code of the character following dot, +while -1A would return the code of the character immediately preceding dot. +

+7.1.3. +With Two Arguments +

+This command does not take two arguments, and an error will occur if it is +attempted. +

+7.2. +'B" Command +

+In classic TECO editors, this was a shorthand for the beginning of the buffer. +It actually meant zero, since zero always is the character position of the +beginning of the buffer. Thus B,Z meant all characters in the buffer. Given +that almost every single letter command is already assigned in TECO, and since +B saves no keystrokes over typing '0', Video TECO does not recognize this +command as classic TECO editors, and instead has reserved it as a future +command. An error will occur if the user attempt to execute it.

+Currently, the B command is equivalent to -L, i.e. it moves backward over lines +the same way that the L command moves forward over them. +

+7.3. +'C' Command +

+The 'C' command moves the current edit position (dot) a relative number +of positions. If the command would result in the edit position being moved +outside of the edit buffer, an error results, and the current position is left +unaffected. +

+7.3.1. +With No Arguments +

+With no arguments, the C command defaults to moving the edit position forward +one. Thus, "C" is equivalent to "1C". +

+7.3.2. +With One Argument +

+The single argument specifies the number of character positions to move +dot by. If the argument is positive, dot gets moved forward. If the +argument is negative, dot is moved backward. +

+7.3.3. +With Two Arguments +

+This command does not take two arguments, and an error will occur if it is +attempted. +

+7.4. +'D' Command +

+The 'D' command deletes the specified number of characters, relative to the +current edit position. +

+7.4.1. +With No Arguments +

+With no arguments, the D command deletes the single character following the +current edit position. If the edit position is currently set to the end of the +buffer, and error occurs. +

+7.4.2. +With One Argument +

+A single argument to the D command specifies how many characters relative to +the current edit position should be deleted. If the argument is greater than +zero, characters following the current edit position are deleted. If the +argument is negative, characters before the current edit position are deleted. +

+7.4.3. +With Two Arguments +

+This command does not take two arguments, and an error will occur if it is +attempted. +

+7.5. +'E' Command +

+The E character leads into a two character command sequence: +

+7.6. +'EB' Command +

+The EB command is used to select an edit buffer for editing. There are +two forms of the command: +

+7.6.1. +With No Arguments +

+This form of the command takes one string argument which is the name of the +disk file to be edited. An edit buffer is created with the same name as the +disk file, and this edit buffer becomes the current edit buffer. If the edit +buffer already exists when the command is issued, Video TECO simply makes it +the current edit buffer.

+EBfilename.ext$

+Edit buffers created in this manner are numbered with sequential +positive integers. +

+7.6.2. +With One Argument +

+If the EB command is specified with one argument, it is an immediate execute +command to switch to a pre-existing edit buffer. An error occurs if the +argument specifies a non-existent edit buffer.

+Edit buffers with positive numbers contains user files. Edit buffers with +negative numbers are TECO Q-registers. Edit buffer zero is a special buffer +which lists all the current edit buffers. +

+7.6.3. +With Two Arguments +

+Illegal +

+7.7. +'EC' Command +

+The EC command allows you to execute non-interactive operating system commands. +

+7.7.1. +With No Arguments +

+This is the only legal form of the command. It takes a trailing string argument +which is the entire operating system command to be executed:

+ECgrep -l enum *.c$

+The output of the command is inserted into the edit buffer at the +current edit position. Although the command can be undone, only the insertion +of output into the buffer can actually be undone. Obviously, the effect the +command has had on the computer system cannot be undone by Video TECO. +

+7.7.2. +With One Argument +

+Illegal. +

+7.7.3. +With Two Arguments +

+Illegal. +

+7.8. +'EF' Command +

+The EF command closes an edit buffer. An error occurs if the buffer is modified. +

+7.8.1. +With No Arguments +

+ With no numeric arguments, the EF command expects a trailing string argument. +If the string argument is null, the current edit buffer is deleted. Otherwise, +the string specifies which existing edit buffer is to be deleted. An error +occurs if no buffer of that name currently exists, or if the specified buffer +has been modified. +

+7.8.2. +With One Argument +

+In this form, the single numeric argument specifies which edit buffer is to be +deleted. No string argument is expected. An error occurs if no buffer of that +number exists, or if the buffer is modified.

+If an argument of -1 is specified, the command will complete even if the buffer +has been modified. This also means that it is impossible to delete internal +buffer -1 with this form of the command. +

+7.8.3. +With Two Arguments +

+Illegal. +

+7.9. +'EJ' Command +

+The EF command allows the user to set certain values in the editor. The EJ +command takes two numeric arguments. The first selects what is being set, and +the second argument is what it should be set to. +

+7.9.1. +First Argument as 1 +

+When the first argument is one, the second argument is set to be an alternate +escape character. This is provided mostly for keyboards which either don't have +an ESCape key, or for those that have it in a cumbersome position. The +command:

+1,126EJ

+would set Tilde (ASCII code 126) to act as an ESCape character. Note +that the substitution takes place early in the character processing of the +editor. +

+7.9.2. +First Argument as 2 +

+When the first argument is two, the second argument is taken to be the number +of lines (i.e. the height) of the screen. This is useful if you have resized +the window since startup, but window resize is not working. (At startup you can +specify -y <n> or -h <n>). If 2,<n>EJ works but seems to go +away again after certain operations, automatic window resizing may be +interfering. +

+7.9.3. +First Argument as 3 +

+When the first argument is three, the second argument is taken to be the number +of columns (i.e. the width) of the screen. This is useful if you have resized +the window since startup, but window resize is not working. (At startup you can +specify -x <n> or -w <n>). If 2,<n>EJ works but seems to go +away again after certain operations, automatic window resizing may be +interfering. +

+7.9.4. +First Argument as 4 +

+When the first argument is four, the second argument is the ASCII value of an +alternate delete character. This allows you to set two different characters to +act as a rubout. Commonly the delete and Control-h codes might be both useful +as rubout. +

+7.10. +'EP' Command +

+ +

+The EP command allows you to split the current window into two windows, each +containing a different edit buffer, or to collapse two windows back down into +one. +

+7.10.1. +With Two Numeric Arguments +

+This form of the command splits the current window into two windows. The +command:

+m,nEP

+Splits the current window, such that a new window of m lines is +created, and edit buffer n is displayed in it. The current window must +be large enough to have m lines removed from it, and still be a viable +edit window.

+Currently, Video TECO's screen optimizer breaks if any two windows are +displaying the same edit buffer. Therefore, you should be careful never to let +this situation occur. +

+7.10.2. +With No Numeric Argument +

+If the EP command is specified with no numeric argument, the current window is +collapsed, and the screen space is given to one of the other visible windows. +You cannot issue this command if there is only one window showing. +

+7.10.3. +With One Numeric Argument +

+Illegal +

+7.11. +'EQ' Command +

+The EQ command either switches the current edit buffer to a Q-register, or +fills a Q-register with a file, depending on how it is executed. The EQ +command never takes a numeric argument. +

+7.11.1. +With Trailing String Argument +

+This form of the command reads the file specified by the trailing string +argument into the specified Q-register:

+EQqfilename.ext$

+Reads the file filename.ext and places it in Q-register +q. The current edit buffer is left unchanged. +

+7.11.2. +With No Trailing String Argument +

+If the EQ command is specified as:

+EQq$

+it has the effect of making Q-register q become the current +edit buffer. +

+7.12. +'ER' Command +

+The ER command reads the specified file into the edit buffer at the current +edit point. The current edit position is left immediately following the +inserted file. The previous contents of the edit buffer are not disturbed +during the insertion. +

+7.12.1. +With No Arguments +

+This is the only legal form of the command. The command expects a trailing +string argument which is the name of the file to be read into the current edit +buffer. The contents of the file are inserted into the edit buffer as if a +single I (insert) command had been issued, i.e., the rest of the buffer is left +intact, and the current edit position is left following the inserted file.

+ERfilename.ext$ +

+7.12.2. +With One Argument +

+Illegal. +

+7.12.3. +With Two Arguments +

+Illegal. +

+7.13. +'ES' Command +

+The ES command allows you to scroll the screen up or down a specified number of +lines. This is useful for fine positioning text to be viewed. +

+7.13.1. +With No Arguments +

+This is equivalent to 1ES. +

+7.13.2. +With One Argument +

+This form of the command scrolls the screen by the specified number of lines. +There is a restriction that when the scroll is complete, the current edit +position (dot) must still be visible. If the scroll operation causes dot +to move off of the screen, the scroll operation will not have the intended +result, and instead either will not function, or the screen will be refreshed +with dot at the center of the screen.

+The screen is scrolled up when positive numbers are supplied, and down when +negative numbers are supplied. This is consistent with the way the screen moves +when L commands cause the screen to scroll. For example, the following command +would cause five more lines following those already displayed to become +visible:

+5ES +

+7.13.3. +With Two Arguments +

+Illegal. +

+7.14. +'ET' Command +

+This command causes the screen to be refreshed. +

+7.14.1. +With No Arguments +

+This is the only legal form of the command. This command is not normally +required during most interactive editing, since the screen is automatically +refreshed at the end of each keystroke anyway. However, during iterations and +macro executions, many commands are executed, but the screen is only refreshed +after all the commands are complete. By inserting the ET command into an +iteration or macro, the user can see the state of the file as the commands +execute.

+For example, if the user typed the following command:

+<FSstring1$string2$;>$$

+all occurrences of string1 would be replaced with +string2. However, the user would normally see only the first replacement +occur. Then, as he closed the iteration and typed two escapes, the iteration +would run to completion before the screen would be updated. This is often the +desirable behavior. The user gets to see the first time through the iteration, +giving him a chance to be sure that things are working the way he wants, then +the editor continues the iteration as fast as possible, until it is complete. +Suppose, however, that the user is worried that some unintended strings might +get mistakenly replaced by this command. Rather than have to issue one FS +command after another, he could just issue:

+ <FSstring1$string2$;ET>$$

+This would cause the screen to be repainted each time a string is replaced, +giving him a chance to see each string replacement occur. +

+7.14.2. +With One Argument +

+Illegal. +

+7.14.3. +With Two Arguments +

+Illegal. +

+7.15. +'EV' Command +

+The EV command is used to select an edit buffer for editing. It is +identical to the EB command, except that if a new edit buffer is created, it is +created readonly. Readonly edit buffers are flagged by the word +READONLY on the status line. Edit buffers created this way cannot be +written out. There are two forms of the command: +

+7.15.1. +With No Arguments +

+This form of the command takes one string argument which is the name of the +disk file to be viewed. A readonly edit buffer is created with the same name as +the disk file, and this edit buffer becomes the current edit buffer. If the +edit buffer already exists when the command is issued, Video TECO simply makes +it the current edit buffer without having any effect on it's readonly +status.

+EVfilename.ext$

+Edit buffers created in this manner are numbered with sequential +positive integers. +

+7.15.2. +With One Argument +

+If the EV command is specified with one argument, it is an immediate execute +command to switch to a pre-existing edit buffer. An error occurs if the +argument specifies a non-existent edit buffer.

+Edit buffers with positive numbers contains user files. Edit buffers with +negative numbers are TECO Q-registers. Edit buffer zero is a special buffer +which lists all the current edit buffers.

+Since this form of the command requires that the buffer already exist, it will +not create a readonly buffer. Thus this form of the command is identical to +this form of the EB command in every respect. +

+7.15.3. +With Two Arguments +

+Illegal. +

+7.16. +'EW' Command +

+This command is used to the write the current contents of an edit buffer to the +disk. The command is not immediate execute, so it requires two escapes to be +issued before it will execute. +

+7.16.1. +With No Arguments +

+This is the only legal form of the command. The command expects a trailing +string argument to be specified. If the string is null, the file which is +written is written to the same name as that of the edit buffer. Otherwise, the +string specifies the name of the file to be written:

+EWfilename.ext$$

+This command clears the modified status of an edit buffer. +

+7.16.2. +With One Argument +

+Illegal. +

+7.16.3. +With Two Arguments +

+Illegal. +

+7.17. +'EX' Command +

+The EX command causes Video TECO to exit, returning the user to the operating +system command interpreter. Since exiting cannot be undone, the command +requires a double escape before it will be executed. +

+7.17.1. +With No Arguments +

+In this form, the EX command will cause the editor to exit as long as none of +the positively numbered (non-internal) edit buffers are modified. If any +are modified, Video TECO will issue an error message and refuse to exit. +This is to prevent you from editing by mistake without writing out all files +which you have made changes to. +

+7.17.2. +With One Argument +

+If the EX command is supplied with a single numeric argument of minus one:

+-1EX

+the editor will exit regardless of whether or not any of the edit +buffers are modified. This form of the command should be used carefully, for +the obvious reasons. A good rule of thumb would be to always execute a 0EB +command first to identify which edit buffers are modified, and that you indeed +do not want those written to the disk. +

+7.17.3. +With Two Arguments +

+Illegal. +

+7.18. +'FD' Command +

+This command searches for the specified string, and then deletes it. It follows +all the rules of the searching commands regarding arguments, wildcards, etc. +

+7.18.1. +With No Arguments +

+With no numeric arguments, the FD command expects a trailing string argument +which specifies the search string. The first occurrence of the search string is +found and deleted. If no occurrences of the string can be found, an error +message is generated to that effect. If the search string specified is zero +length, the default search string is searched for.

+FDstring$ +

+7.18.2. +With One Argument +

+Specifying a single numeric argument to the FD command sets which +occurrence of the search string should be deleted. If the argument is negative, +it indicates that the search should proceed in a reverse direction. The command +still expects a trailing string argument to specify the search string:

+2FDstring$

+would delete the second occurrence of string. +

+7.18.3. +With Two Arguments +

+With two numeric arguments, the search for the string is constrained between +the two buffer locations specified by the two arguments.

+If the first argument is smaller than the second, it indicates that the search +should proceed forward from the buffer position as specified by the first +argument to the buffer position as specified by the second argument.

+If the first argument is larger than the second, it indicates that the search +should proceed backward from the buffer position as specified by the second +argument to the buffer position as specified by the first argument.

+One use of this command would be to find occurrences of a string only +within a single subroutine in a source file. If the beginning and end of the +subroutine were loaded into Q-registers one and two respectively, the following +command would find string only within the subroutine:

+Q1,Q2FDstring$

+Care would have to be taken in the case of an iteration to delete +all occurrences of string from the subroutine, since the end of +the subroutine moves up by the length of string each time an occurrence +is deleted. The following iteration would work properly for that case (assuming +Q1 and Q2 already set up):

+<ZU3Q1,Q2FDstring$;Q2-(Q3-Z)U2>$$

+because it decrements Q2 by the length of string each time it +is found by recording Z and then computing how many characters were deleted. +

+7.19. +'FK' Command +

+This command deletes all the characters from the current edit position up to +but not including the search string. +

+7.19.1. +With No Arguments +

+With no numeric arguments, the FK command expects a trailing string argument +which specifies the search string. The first occurrence of the search string is +found and deleted. If no occurrences of the string can be found, an error +message is generated to that effect. If the search string specified is zero +length, the default search string is searched for.

+FKstring$ +

+7.19.2. +With One Argument +

+Specifying a single numeric argument to the FK command sets which +occurrence of the search string should be found. If the argument is negative, +it indicates that the search should proceed in a reverse direction. The command +still expects a trailing string argument to specify the search string:

+2FKstring$

+would delete all the text up to be not including the second occurrence +of string. +

+7.19.3. +With Two Arguments +

+With two numeric arguments, the search for the string is constrained between +the two buffer locations specified by the two arguments.

+If the first argument is smaller than the second, it indicates that the search +should proceed forward from the buffer position as specified by the first +argument to the buffer position as specified by the second argument.

+If the first argument is larger than the second, it indicates that the search +should proceed backward from the buffer position as specified by the second +argument to the buffer position as specified by the first argument. +

+7.20. +'FR' Command +

+This command searches for the specified string, and then replaces it with the +second string. It is identical to the FS command except for its behavior when +the replacement string is specified as null. It follows all the rules of the +searching commands regarding arguments, wildcards, etc. +

+7.20.1. +With No Arguments +

+With no numeric arguments, the FR command expects two trailing string arguments +which specifies the search string and replacement string respectively. The +first occurrence of the search string is found and replaced with the replace +string. If no occurrences of the string can be found, an error message is +generated to that effect. If the search string specified is zero length, the +default search string is searched for. If the replacement string is specified +as zero length, the default replace string is used. The command:

+FRstring1$string2$FR$$

+would have the effect of replacing string1 with string2 twice, +because the second FR command will default both the search and replace strings +to those as specified in the first FR command. +

+7.20.2. +With One Argument +

+Specifying a single numeric argument to the FR command sets which +occurrence of the search string should be replaced. If the argument is +negative, it indicates that the search should proceed in a reverse direction. +The command still expects two trailing string arguments to be supplied:

+2FR$$

+would delete the second occurrence of the default search string with +the default replace string. +

+7.20.3. +With Two Arguments +

+With two numeric arguments, the search for the string is constrained between +the two buffer locations specified by the two arguments.

+If the first argument is smaller than the second, it indicates that the search +should proceed forward from the buffer position as specified by the first +argument to the buffer position as specified by the second argument.

+If the first argument is larger than the second, it indicates that the search +should proceed backward from the buffer position as specified by the second +argument to the buffer position as specified by the first argument. +

+7.21. +'FS' Command +

+This command searches for the specified string, and then replaces it. It +follows all the rules of the searching commands regarding arguments, wildcards, +etc. +

+7.21.1. +With No Arguments +

+With no numeric arguments, the FS command expects two trailing string arguments +which specify the search and replacement strings. The first occurrence of the +search string is found and replaced with the second argument. If no occurrences +of the string can be found, an error message is generated to that effect. If +the search string specified is zero length, the default search string is +searched for. If the replacement string is specified as zero length, the effect +of the command is similar to that of the FD command. The following command +changes the first occurrence of string1 to string2:

+FSstring1$string2$ +

+7.21.2. +With One Argument +

+Specifying a single numeric argument to the FS command sets which +occurrence of the search string should be replaced. If the argument is +negative, it indicates that the search should proceed in a reverse direction. +The command still expects two trailing string arguments to specify the search +and replace strings:

+2FSstring1$string2$

+would replace the second occurrence of string1 with +string2. +

+7.21.3. +With Two Arguments +

+With two numeric arguments, the search for the string is constrained between +the two buffer locations specified by the two arguments.

+If the first argument is smaller than the second, it indicates that the search +should proceed forward from the buffer position as specified by the first +argument to the buffer position as specified by the second argument.

+If the first argument is larger than the second, it indicates that the search +should proceed backward from the buffer position as specified by the second +argument to the buffer position as specified by the first argument.

+One use of this command would be to replace occurrences of a string only +within a single subroutine in a source file. If the beginning and end of the +subroutine were loaded into Q-registers one and two respectively, the following +command would replace string only within the subroutine:

+Q1,Q2FSstring$new-string$

+Care would have to be taken in the case of an iteration to delete +all occurrences of string from the subroutine, since the end of +the subroutine moves each time a replacement happens, since the two strings are +of different length. The following iteration would work properly for that case +(assuming Q1 and Q2 already set up):

+<ZU3Q1,Q2FSstring$;Q2+(Z-Q3)U2>$$

+because it modifies Q2 by the number of characters being added or +deleted to the buffer each time a replacement operation happens by recording Z +and then computing how many characters were added or deleted to the subroutine. +

+7.22. +'G' Command +

+The G command retrieves text from a Q-register and inserts it at the current +edit position. +

+7.22.1. +With No Arguments +

+This is the only legal form of the command. The command takes a single trailing +character argument which is the name of the Q-register to be accessed. For +example, to retrieve the contents of Q-register A, one could issue the +following command:

+GA

+No trailing ESCape is required since the trailing argument is always a +single character, not a string. An error occurs if the character either +specifies a Q-register which is not legal in Video TECO, or a Q-register which +has not be loaded yet. +

+7.22.2. +With One Argument +

+Illegal. +

+7.22.3. +With Two Arguments +

+Illegal. +

+7.23. +'H' Command +

+This is not actually a command, but rather a shorthand argument. It is +identical to typing 0,Z as the two numeric arguments to a command. It is useful +for commands which take a range of buffer positions when you want to specify +the entire buffer. For example, the normal way to delete the entire contents of +a buffer would be:

+HK

+since this tells the K (kill) command to delete all the +characters from the first buffer position to the last. Another common use would +be to load the entire edit buffer into a Q-register. For example, the +command:

+HXA

+would load the entire contents of the buffer into Q-register A. +

+7.24. +'I' Command +

+The I command is used to insert characters into the current edit buffer. There +are two different forms of the insert command: +

+7.24.1. +With No Arguments +

+This is the normal insert command which is almost always used. The command +takes a trailing string argument which is the text to be inserted:

+Inew-text-to-be-inserted$

+The insert command can be modified using the atsign modifier so that +the trailing string argument is delineated by characters specified by the user, +rather than being terminated by an escape. This can be handy when text with +escapes is going to be inserted. The following example is a different way of +accomplishing the previous example:

+@I/new-text-to-be-inserted/

+Note that there is no trailing escape required to complete the +command, the command terminates when the matching delimiter is seen.

+Another way to insert escapes is to use the quote character (^V) before each +escape which is to be inserted. +

+7.24.2. +With One Argument +

+This form of the command is used to insert the character whose ASCII code is +specified in the numeric argument. No trailing string argument is accepted in +this form of the command. The following example would insert the letters ABCD +into the edit buffer:

+65I66I67I68I +

+7.24.3. +With Two Arguments +

+Illegal. +

+7.25. +'J' Command +

+The J command allows you to absolutely position (jump) the current edit +position anywhere within the edit buffer. An error occurs if the specified +position does not exist. +

+7.25.1. +With No Arguments +

+In this case, the command defaults to 0J, which positions to the top of the +edit buffer. +

+7.25.2. +With One Argument +

+This form of the command lets you specify a buffer position to jump to. It +would be extremely unlikely that during normal editing you would actually type +an absolute buffer position to the J command, since buffer positions would be +very difficult to keep track of. However, by storing buffer positions in +Q-registers, it is then easy to refer to the buffer positions using the +Q-register. For example, if Q-register A had previously been loaded the +location of an interesting piece of text, you could return to it by issuing the +command:

+QAJ

+Another very command use of this command is to get to the end of the +edit buffer. Since the Z argument always contains the number of characters in +the edit buffer, the command:

+ZJ

+is the normal way of positioning at the end of the buffer. +

+7.25.3. +With Two Arguments +

+Illegal. +

+7.26. +'K' Command +

+The K command deletes lines of text relative to the current edit position. +

+7.26.1. +With No Arguments +

+With no arguments, the K commands defaults to 1K, deleting text from the +current edit position through the following carriage return character. +

+7.26.2. +With One Argument +

+This form of the command allows you to specify how many lines of text to +delete. The command deletes text from the current edit position through the +nth carriage return character as specified in the single numeric +argument.

+If the argument is negative, the command deletes text back through the +preceding nth carriage return.

+If the argument is zero, text from the current edit position back to the +beginning of the line is deleted. +

+7.26.3. +With Two Arguments +

+In this form, the two arguments specify beginning and ending buffer positions. +The entire range of buffer positions is deleted. +

+7.27. +'L' Command +

+The L command allows you to move the current edit position by lines, relative +to its current position. In all cases, the L command leaves the current edit +position at the beginning of a line. +

+7.27.1. +With No Arguments +

+With no arguments, the L command defaults to 1L, moving the current edit +position forward to the next beginning of a line. +

+7.27.2. +With One Argument +

+The single argument specifies how many lines to move the current edit position +by. It is moved forward over n carriage return characters, where n is +the single numeric argument to the command.

+If the argument is zero, the current edit position is moved to the beginning of +the current line.

+If the argument is negative, the current edit position is moved backward over +the specified number of carriage returns. +

+7.27.3. +With Two Arguments +

+Illegal +

+7.28. +'M' Command +

+The M command allows you to execute TECO macros. You may pass a numeric +argument to a macro, if the first command in the macro expects an argument, it +will get the argument passed to the macro.

+There is currently no way for a macro to determine how many arguments +have been passed, so it is impossible to write macros which have optional +arguments. +

+7.28.1. +With No Arguments +

+The M command takes a single trailing character argument which specifies which +Q-register is to be executed as a macro. The text within the Q-register is +interpreted as TECO commands. The following command would execute the contents +of Q-register A as a macro:

+MA

+Video TECO executes macros in immediate mode, even if the command +contained in the Q-register would normally not execute immediately during +interactive execution. For example, although iterations normally require a +double escape, making it impossible to undo by rubbing out, a macro executes +immediately even if it contains iterations. The resulting changes can be undone +by rubbing out the macro command. +

+7.28.2. +With One Argument +

+Illegal. +

+7.28.3. +With Two Arguments +

+Illegal. +

+7.29. +'N' Command +

+The N command is a modified version of the search command. Although there was +an N command in classic TECO editors, Video TECO's N command is a little +different.

+In classic TECO editors, the N command would automatically page in and out +portions of the file being edited. Thus, if the entire file did not fit into +the edit buffer, N would still search the entire file.

+Since Video TECO always reads the entire file into the edit buffer, there is no +need for an N search such as classic TECO editors had. However, since Video +TECO supports multiple edit buffers, the N command was defined to search across +buffer (file) boundaries. The N command only searches through the normal edit +buffers, not through the Q-register edit buffers.

+Although the numeric arguments to the N command are different from those of the +normal search command, the trailing string arguments work exactly the same way +as the normal search command. If a null trailing string argument is supplied, +the N command will use the same default search string as the other search +commands. +

+7.29.1. +With No Numeric Arguments +

+With no numeric arguments, the N command searches for the first occurrence of +the search string, starting at the current position in the current edit buffer, +and searches to the end of the edit buffer. If it hasn't found the string by +the end of the buffer, it automatically switches to the next edit buffer. It +then searches the entire new buffer. It keeps on switching to the next buffer +and searching until it reaches the highest numbered edit buffer. It then +switches to the lowest positive numbered edit buffer, and continues searching +through the edit buffers until it returns to the original edit buffer where the +command started. When it reaches the original edit buffer again, it searches +from the top of that edit buffer down until it gets to the original buffer +position that the command started at. If after all that, it still hasn't found +the string, a normal search failure message is displayed.

+A string will not be found if it crosses an edit buffer boundary. The +string must reside entirely within one of the edit buffers. +

+7.29.2. +With One Numeric Argument +

+With a single numeric argument, the N command attempts to find the Nth +occurrence of the string within the set of all edit buffers. If it does not +find all N occurrences, it fails and the current position is not changed. +

+7.29.3. +With Two Numeric Arguments +

+With two numeric arguments the N command starts searching from the edit buffer +specified by the first argument, up to and including the edit buffer specified +by second argument.

+Thus if the user types the command:

+5,9Nstring$

+the editor will search edit buffers 5, 6, 7, 8, and 9 looking for the +string. If there were 12 edit buffers, and the user typed the command:

+9,5Nstring$

+the editor would search edit buffers 9, 10, 11, 12, 1, 2, 3, 4, 5, in +that order. Note that with two arguments, the editor always stops at the first +occurrence of the search string.

+Normally, the editor starts searching from the top of the edit buffer specified +in the first argument. However, if the first argument specifies the number of +the edit buffer which happens to be the current edit buffer, the search will +start from the current position, instead of from the top. This is intended to +make it easier for a macro to operate on all occurrences within a set of +buffers (otherwise it would keep finding the first occurrence in the buffer).

+To write an iteration which finds all occurrences of a string in all the +buffers, and appends 'string' to it, the following would work assuming there +are 15 buffers in all:

+1EBJ <Q*,15Nsearch-string$;Istring$>

+because Q* always evaluates to the current edit buffer, so it always +continues searching from the present position towards the end of the final edit +buffer. +

+7.30. +'O' Command +

+The O command allows you to execute GOTO commands within a sequence of TECO +commands. Video TECO currently only supports one form of the command: +

+7.30.1. +With No Arguments +

+In this form, the O command takes a trailing string argument which is the name +of the label to go to. For examples a simple loop can be constructed as +follows:

+!tag!Otag$

+where !tag! is a TECO label. Note that TECO labels must be +delineated by exclamation marks. An error occurs if the GOTO command is +executed, but the label as specified does not exist.

+In the case of a macro execution, the destination label must be within the same +Q-register that the macro is being executed out of. +

+7.30.2. +With One Argument +

+Illegal. +

+7.30.3. +With Two Arguments +

+Illegal. +

+7.31. +'P' Command +

+The P command changes from the current display window to the next one. Thus +typing repeated P commands steps through all the windows displayed on the +screen. +

+7.31.1. +With No Arguments +

+This is the only legal form of the command. +

+7.31.2. +With One Argument +

+Illegal. +

+7.31.3. +With Two Arguments +

+Illegal. +

+7.32. +'Q' Command +

+The Q command retrieves the numeric contents of a Q-register. The value can +then be applied as an argument to a TECO command. +

+7.32.1. +With No Arguments +

+The Q command takes a single trailing character argument, where that character +specifies which Q-register is to be accessed. An error occurs if an illegal +Q-register is specified, or if the Q-register specified does not currently +exist. +

+7.32.2. +With One Argument +

+Illegal. +

+7.32.3. +With Two Arguments +

+Illegal. +

+7.32.4. +Special Case +

+If the Q-register specified is the asterisk character ('*'), the command +returns the number of the current edit buffer. This is a Video TECO enhancement +and is not compatible with other TECO editors. +

+7.33. +'R' Command +

+The R command works exactly like the C command, except in reverse. It +allows the user to move the current edit position by character positions +relative to its current location. +

+7.33.1. +With No Arguments +

+With no arguments, the R command defaults to 1R, moving dot backward by +one character position. +

+7.33.2. +With One Argument +

+The argument to this command tells it how many buffer positions to move the +current edit position by. If the argument is positive, the current edit +position is moved forward. If the argument is negative, the current edit +position is moved backward. +

+7.33.3. +With Two Arguments +

+Illegal. +

+7.34. +'S' Command +

+This command is used to position the current edit position (dot) by +searching for strings. +

+7.34.1. +With No Arguments +

+The S command takes a single trailing string argument which specifies the +string to be searched for. The string is normally terminated by an escape, +although using the ATSIGN ('@') modifier allows you instead to enclose the +search string with delimiters of your choice.

+Certain character sequences within the search string are reserved as wildcard +specifiers so that complex string expressions may be found easily.

+With no numeric arguments, the S command searches forward for the next +occurrence of the string, and leaves dot immediately following the string which +was found. Format of the command is:

+Sstring1$ +

+7.34.2. +With One Argument +

+Specifying a single numeric argument to the S command sets how many +occurrences of the search string should be searched for. If the argument is +negative, it indicates that the search should proceed in a reverse direction.

+2Sstring1$

+would search for the second occurrence of string1 following the +current edit position. +

+7.34.3. +With Two Arguments +

+With two numeric arguments, the search for the string is constrained between +the two buffer locations specified by the two arguments.

+If the first argument is smaller than the second, it indicates that the search +should proceed forward from the buffer position as specified by the first +argument to the buffer position as specified by the second argument.

+If the first argument is larger than the second, it indicates that the search +should proceed backward from the buffer position as specified by the second +argument to the buffer position as specified by the first argument. +

+7.35. +'T' Command +

+Currently, Video TECO uses this command to cause a screen repaint after the +screen has become corrupted, perhaps by an operator broadcast. It is expected +to change in the near future. Screen repaints can be done by using the +CONTROL-L (^L) command. +

+7.35.1. +With No Arguments +

+This is the only form of the command. The screen is cleared, and then refreshed. +

+7.35.2. +With One Argument +

+Illegal. +

+7.35.3. +With Two Arguments +

+Illegal. +

+7.36. +'U' Command +

+The U command allows you to load a single integer into the numeric storage of a +Q-register. The text portion of the Q-register remains unaffected. +

+7.36.1. +With No Arguments +

+Illegal. +

+7.36.2. +With One Argument +

+The U command takes a single character trailing argument which specifies which +Q-register is to be loaded. The single numeric argument is loaded into the +Q-register. +

+7.36.3. +With Two Arguments +

+Illegal. +

+7.37. +'V' Command +

+The V command is experimentally set to be a delete-word-forward command. It +affects the current edit position the same way the W command does, but instead +of simply moving over the data it deletes it. +

+7.37.1. +With No Arguments +

+With no argument, the V command deletes a single word. +

+7.37.2. +With One Argument +

+With one argument, the V command deletes the specified number of words. +

+7.37.3. +With Two Arguments +

+Illegal. +

+7.38. +'W' Command +

+The W command allows you to move the edit position by words relative to its +current location. Words in this case are defined as collections of characters +surrounded by whitespace or vertical motion characters. +

+7.38.1. +With No Arguments +

+With no numeric arguments, the W command defaults to 1W, moving dot +forward by one word. +

+7.38.2. +With One Argument +

+In this form, the single numeric argument specifies how many word positions to +move by. If the argument is positive, movement is forward, otherwise if the +argument is negative, movement is backward. +

+7.38.3. +With Two Arguments +

+Illegal. +

+7.39. +'X' Command +

+The X command allows you to load text into a Q-register. The command takes a +single trailing character argument which specifies which Q-register is to be +loaded. The contents of the edit buffer are unaffected. Normally the previous +contents of the Q-register are deleted before the new text is inserted. +However, if the command is used with the colon modifier, the new text is +appended to the previous contents of the Q-register. +

+7.39.1. +With No Arguments +

+In this case, the command defaults to 1Xq where q is the name of +the Q-register to be loaded, and the 1 indicates that one line of text will be +loaded. A more accurate way of stating that is that all the text from the +current edit position up through one carriage return character will be loaded +into the specified Q-register. +

+7.39.2. +With One Argument +

+In this case, the single argument specifies how many lines of text to load into +the Q-register. If the number is negative, it indicates that the text +preceding the current edit position should be loaded into the specified +Q-register. +

+7.39.3. +With Two Arguments +

+In this form, the two arguments specify a range of buffer positions to +be loaded into the destination Q-register. Some examples of this would be +HXq which loads the entire current edit buffer into Q-register q, +or .,.+100Xq which loads the 100 characters following dot into +the specified Q-register. +

+7.40. +'Y' Command +

+The Y command is experimentally set to be a delete-word-backward command. It +affects the current edit position the same way the -W command does, but instead +of simply moving over the data it deletes it. +

+7.40.1. +With No Arguments +

+With no arguments, the Y command deletes the single word preceding the current +edit position. +

+7.40.2. +With One Argument +

+With a single numeric argument, the Y command deletes the specified number of +words preceding the current edit position. +

+7.40.3. +With Two Arguments +

+Illegal. +

+7.41. +'Z' Command +

+This is not actually a command, but rather a shorthand argument. The Z command +always returns a value equal to the number of characters in the edit buffer. +This also happens to correspond to the buffer position of the end of the +buffer. Thus the command:

+ZJ

+is always a good way to position at the end of the edit buffer. +

+7.42. +'!' Command +

+The exclamation character is used to enclose labels which can be the target of +the goto command. It can also be used to place comments inside of macros. +Examples:

+!label!istuff$Olabel$

+loops inserting the string 'stuff' into the buffer. Since it is an +infinite loop, this will soon do bad things. An example of using the command to +insert comments:

+!Labels can be used as comments as well! +

+7.43. +'%' Operator +

+The % operator adds a value to a Q-register numeric register, and returns the +new numeric value as the value of the expression. +

+7.43.1. +With No Arguments +

+With no arguments, the % operator increments the specified Q-register by one, +and then returns the new contents. Thus if Q-register A has the value 5, the +expression:

+%AUB

+changes the contents of Q-register A to be 6, and returns the value 6. +This is then passed to the U command, which stores the value 6 into the numeric +register of Q-register B. +

+7.43.2. +With One Argument +

+In this case, the single argument tells the % operator how much +to add to the specified Q-register. Thus:

+10%A+17UB

+adds 10 to Q-register A, and returns the new value (15 using the +example above) to the rest of the expression. So 17 is then added to the 15, +and this is placed in Q-register B by the U command. +

+7.43.3. +With Two Arguments +

+Illegal. +

+7.44. +Double Quote " Command +

+The double quote character starts a conditional expression. The double quote +character is immediately followed by a character which specifies the +conditional test to be performed. The character must be one of the following:

+ Operator Meaning "C" equivalent

+ G Greater Than Zero > 0

+ L Less Than Zero < 0

+ T True < 0

+ S Successful < 0

+ E Equal To Zero == 0

+ F TBS == 0

+ U TBS == 0

+ N Not Equal To Zero != 0

+ C Symbol Constituent TBS

+ D Digit isdigit(x)

+ A Alphanumeric isalpha(x)

+ V Lower Case islower(x)

+ W Upper Case isupper(x) +

+7.45. +Vertical Bar | Command +

+The vertical bar character begins the else clause of the current +conditional command. The commands which follow will only be executed if the +conditional test failed. +

+7.45.1. +With No Arguments +

+This is the only legal form of the command. +

+7.45.2. +With One Argument +

+Illegal +

+7.45.3. +With Two Arguments +

+Illegal. +

+7.46. +Single Quote ' Command +

+The single quote character terminates a conditional expression. It is required +that every conditional expression be terminated. +

+7.46.1. +With No Arguments +

+This character takes no arguments. +

+7.46.2. +With One Argument +

+Illegal +

+7.46.3. +With Two Arguments +

+Illegal. +

+7.47. +'()' Parenthesis Operators +

+The open and close parenthesis characters are used to change the default +precedence of an arithmetic expression. +

+7.47.1. +With No Arguments +

+This is the only legal form, the () operators do not take arguments. Since +Video TECO supports operator precedence, the following expression:

+3+4*5

+would evaluate as 23, since it is calculated as 3+ (4*5). The user can +change these default precedence rules by explicit use of the parenthesis. Thus, +the previous example could be changed to:

+(3+4)*5

+which would result in a value of 35.

+Parenthesis can be nested up to a maximum depth of 255. +

+7.47.2. +With One Argument +

+Illegal. +

+7.47.3. +With Two Arguments +

+Illegal. +

+7.48. +'<>' Iteration Operators +

+TECO iterations are enclosed in angle brackets. The TECO commands enclosed +within the brackets are repeatedly executed. +

+7.48.1. +With No Arguments +

+This form of iteration continues to loop until something inside the iteration +causes it to halt (see the semi-colon command). The command:

+<FSstring1$string2$;>

+loops changing all occurrences of string1 to string2. +The command would loop forever, given an unlimited supply of string1's. +

+7.48.2. +With One Argument +

+In this case, the argument tells how many times the iteration should loop. +Thus:

+5<FSstring1$string2$;>

+will replace the first 5 occurrences of string1 it can find. +

+7.48.3. +With Two Arguments +

+Illegal. +

+7.49. +'[ and ]' Commands +

+The push ('[') and pop (']') commands push and pop Q-registers onto the +Q-register pushdown list. When a Q-register is pushed, both the text and +numeric portions are saved. When the contents of the Q-register pushdown list +are popped, the previous contents of both the numeric and text parts of the +target Q-register are lost. +

+7.49.1. +With No Arguments +

+The push command looks like this:

+[A

+pushes the current contents of Q-register A onto the pushdown list. +Q-register A is left intact: only a copy is placed on the pushdown list.

+After the previous push Q-register command, if the user issued the following +pop command:

+]B

+the previous contents of Q-register B are lost, and are replaced with +the contents from the pushdown list (in this case, the pushed contents of +Q-register A).

+These commands are very useful when you wish to use a Q-register for temporary +storage, but do not want to lose the current contents. This often happens in +macros which need Q-registers for temporary variable, but do not want to alter +the contents outside the scope of the macro. +

+7.49.2. +With Arguments +

+The push and pop commands pass any arguments through to the following command. +This is so that at the beginning of a macro, the macro can push the Q-registers +it is going to modify, but still be able to get access to the argument passed +to the macro. The following macro:

+[A[B[CUA.UBZUC (commands) ]C]B]A

+saves Q-registers A, B, and C. It then loads Q-register A with the +argument to the macro, Q-register B with the current buffer location (dot), and +Q-register C with the number of bytes in the edit buffer. Assuming +(commands) implements some useful function, when it completes the +contents of Q-registers C, B, and A are restored to the contents they had +before the macro was executed. +

+7.49.3. +0EB display +

+The 0EB buffer map display tells you how many Q-registers are currently on the +pushdown list. Following the list of buffers, if there are any Q-registers on +the pushdown list you will see a message to the effect:

+Q register push down list contains 3 registers, 195 bytes +

+7.50. +'{ and }' Commands +

+The push-command-line ({) and pop-command-line (}) commands are experimental +commands which allow you to use Teco commands to edit the current command +string. For example, suppose you are typing an involved command, and as you +reach the end you realize that you should have first saved the original edit +position in a numeric Q-register so that you could hop back there after the +command is complete. Normally you would have to rub the entire command out, and +then re-type it. By using the push-command-line and pop-command-line commands +you can place the entire command line in a special edit buffer, do a JI.UX$ to +insert a command at the beginning to save the current edit position in +Q-register X, and then you can re-execute the command in its new form.

+These commands are still in their experimental form, and can still cause Video +TECO to exit with an exception. +

+7.50.1. +With No Arguments +
+7.50.2. +With Arguments +

+

+7.51. +'\' Command +

+The backslash command allows radix representations of numbers to be inserted +into or read out of the edit buffer. +

+7.51.1. +With No Arguments +

+With no numeric arguments, backslash converts the numeric characters following +the current edit position into a numeric representation, typically decimal. For +instance, if the current edit position is in front of the four characters +"1234" and the backslash command is issued, the current edit position is moved +forward over the four characters, and the numeric result of the backslash +command would be decimal 1234. The command "\U1" would move the edit position +over those four characters, and load decimal 1234 into Q-register 1.

+You can cause backslash to use octal or hexidecimal by issuing ^o\ or ^x\ +respectively. +

+7.51.2. +With Arguments +

+If backslash is issued with a single numeric argument, a decimal (base 10) +representation is inserted into the current edit buffer at the current edit +position. The edit position is left pointing after the inserted characters.

+If two arguments are supplied, the first is the number to be inserted, and the +second is the arbitrary radix to insert the number as. For instance, 5,2\ +would insert 101 because 101 is the binary (Base 2) representation of decimal +5. Radix should be 2-36 inclusive. +

+7.52. +Space and Newline Commands +

+The space and newline characters are noops to allow macros to be prettied up a +bit. Remember not to use tab because that acts as an insert +command in TECO.

+Appendix A +

+8. +Differences between Video TECO and classic TECO +

+This section assumes that you are familiar with a classic TECO editor from +Digital Equipment Corporation. It attempts to quickly tell you what you need to +know to begin editing with Video TECO. It is not intended to be exhaustive, but +to tell you just enough to get going. The reference section describes each +command in detail.

+This section also does not go into great detail describing features which are +better than classic TECO but do not affect the way the user issues commands. +For instance, Video TECO parses everything first, so syntax errors are +immediately reported, rather than when that command gets executed. Since this +does not seem necessary for the user to understand this different behavior, +items like this won't be discussed in this section. Only differences which must +be understood to properly use the editor will be covered. +

+8.1. +Single character ends lines +

+This is probably the most controversial issue in the authors' minds. The editor +was originally written under Unix, where it is typical to have a single +character, LINEFEED, terminate lines. Video Teco uses this convention even +though classic Teco editors ended lines with a two character sequence, +CARRIAGE-RETURN LINEFEED. Because compatibility is important, we have thought +about changing the behavior. Unfortunately, the single terminating character is +easier to deal with in normal editing, because the common command to get to the +end of the line is a character shorter in Video TECO (LR instead of L2R). +

+8.2. +Multiple Edit Buffers +

+Video TECO allows you to have multiple edit buffers simultaneously. Multiple +files can thus be edited, either by specifying all the filenames on the initial +command line, using the EB command to load more files, or both. +

+8.3. +Q-registers Can Be Edit Buffers +

+Video TECO treats edit buffers and Q-registers identically. This allows a user +to switch into a Q-register and use normal TECO commands to edit the contents. +The TECO syntax does not allow normal edit buffers to be the target of a +Q-register command (such as X and G), but the internal representation is +identical. +

+8.4. +Edit Buffer Contents +

+There are two major differences to a Video TECO edit buffer compared to that in +a classic TECO.

+The first is that the entire file is always read into the edit buffer. The +upper bound on the number of bytes which Video TECO can handle is driven by the +wordsize of the machine. Thus, on a typical 32 bit machine Video TECO allows up +to 2 Gigabytes per edit buffer. Each line is limited by the size of an int on +the machine, so the typical 32 bit machine has a limit of 2 Gigabytes bytes per +line.

+There is no limit on the number of edit buffers Video TECO can support at any +given time.

+The second major difference to buffer contents in Video TECO is that lines are +terminated with a single line feed, Unix style. All classic TECO editors +terminate each line with two characters; the CRLF sequence. The author has +considered changing Video TECO to be compatible with the rest of the TECOs many +times, but so far has wimped out on each occasion. +

+8.5. +Arithmetic Expression Parsing +

+The classic TECO editors did simple left to right evaluation of arithmetic +expressions, with no regard to operator precedence. The parser was the first +module of Video TECO written, and at the time the author wanted to outdo +classic TECOs in every way, so the parser was written to correctly perform +operator precedence. In retrospect, this was probably not wise, since +compatibility is quite important. With enough feedback, the author could be +convinced that the behavior should revert to that of classic TECO. +

+8.6. +Missing Commands +

+Several commands are missing from Video TECO, either because they don't make +sense given some of the differences, or the author just hasn't gotten around to +them yet. +

+8.6.1. +B Command +

+In a classic TECO editor, the B command returns the beginning of the buffer. In +all DEC TECOs that the author is aware of, the B command always returns 0. In +MIT TECO, when using buffer narrowing, the B command might return something +else. Since Video TECO doesn't support buffer narrowing, the B command is +currently unused, although it may be used for an enhanced command in the near +future. +

+8.6.2. +V Command +

+In some of the classic TECO editors, the V command was equivalent to 0TT, i.e. +it printed out the current line. This is not particularly useful in a video +editor, and this command will be used for a enhanced command in the near future. +

+8.6.3. +Y Command +

+The Y command was used in classic TECO editors as the yank command. It +was used to read in the next buffer worth of data from the file being edited. +Since Video TECO always reads the entire file into the edit buffer, this +command is not required and will be used for an enhanced command in the near +future. +

+8.6.4. +Underscore Command +

+The underscore command was a form of the search command which would perform +yanks as required to bring in portions of the file. Since Video TECO always +reads the entire file into the edit buffer, this command is not required and +will be used for an enhanced command in the near future. +

+8.6.5. +# Command +

+This arithmetic operator is used in classic TECO to perform bitwise operations. +Video TECO does not currently support it, but plans to in the near future. +

+8.6.6. +& Command +

+This arithmetic operator is used in classic TECO to perform bitwise operations. +Video TECO does not currently support it, but plans to in the near future. +

+8.6.7. +? Command +

+The question mark command in classic TECO is a debugging aid which causes macro +commands to be printed out as the command executes. Video TECO plans to support +this feature in the future. +

+8.6.8. +F> and F< Commands +

+The flow commands are used in some classic TECO editors to jump to the +beginning or end of the current iteration. Video TECO plans to implement these +commands in the future. +

+8.6.9. +^ Command +

+The caret command causes the next character to be interpreted as a control +code, i.e. typing caret X would be the same as typing the CONTROL-X code. +

+8.7. +Commands which have slightly different behavior +

+The following section lists the commands which are different in some way from +the corresponding command in a classic TECO editor. +

+8.7.1. +A Command +

+In Video TECO, the behavior of the A command with no numeric arguments is +different from the append feature found in classic TECO editors. In +those editors, the A command would cause the next section of the file to be +appended to the edit buffer. Since Video TECO always reads the entire buffer +into memory, this feature is not required. +

+8.7.2. +EB Command +

+The EB command is enhanced in several ways in order to deal with the multiple +buffer edit capability of Video TECO. nEB switches you to buffer number +n. EBfilespec$ switches you to existing file filespec, or +creates a new edit buffer and loads that file. 0EB prints a list of all the +buffers currently in the editor. Refer to the reference page for a complete +description. +

+8.7.3. +EC Command +

+The EC command is a completely different enhancement which takes a following +string argument, and executes this in a subprocess. The output from the command +is inserted into the edit buffer at the current location. Refer to the +reference page for a complete description. +

+8.7.4. +EF Command +

+The EF command is enhanced to a have a different meaning than that normally +found in a classic TECO editor. In Video TECO, the EF command causes the +current edit buffer to be deleted. The memory is reclaimed, and the user is +left in a different edit buffer. +

+8.7.5. +EI Command +

+In Video TECO, the EI command can be used to turn off immediate execution of +commands. It is intended as a debugging aid and might be removed at any time. +

+8.7.6. +EP Command +

+In Video TECO, the EP command is used to create and delete windows, thus +allowing the available screen space to be divided among different edit buffers. +

+8.7.7. +ES Command +

+In Video TECO, the ES command is used to scroll the edit buffer up and down in +order to position the buffer for optimal viewing by the user. There is a +restriction that the current edit position must always be on the screen, thus +the command has limited authority. +

+8.7.8. +ET Command +

+In Video TECO, the ET command is used to cause the screen to be refreshed when +it might not normally be done. An example would be in an iteration, usually +only the final state is seen, i.e. the screen isn't updated until the iteration +is complete. This is often what is desired, since displaying each iteration +slows down the speed of the editor. However, the user may want to see the state +of the edit buffer during different portions of the iteration. He can do this +by inserting ET commands within the iteration at the points he wishes the +screen to be refreshed. +

+8.7.9. +EV Command +

+In Video TECO, the EV command is identical to the EB command in every way +except that if a new edit buffer is created, it is created as readonly. The +resulting buffer cannot be written out. +

+8.7.10. +EX Command +

+In Video TECO, the EX command may fail if there are modified buffers. Since +classic TECO editors only have one buffer, this is not typically a problem. +Video TECO acts this way to alert you that information may be lost. This +behavior may be overridden by supplying a -1 argument to the EX command in +which case Video TECO will unconditionally exit. +

+8.7.11. +FK Command +

+In some classic TECO editors, the FK command deletes from the current position, +up to and including the string which was found. The author thought that +this was not optimal behavior. A common use is to specify the string you want +preserved, and have everything before it deleted. Since the search +string is now set up, a simple FD$ command will clobber the string which was +found. Thus it is felt that the Video TECO behavior is more flexible and useful. +

+8.7.12. +FR Command +

+This is a Video TECO enhancement. The FS command if supplied a null first +string searches for the default search string. If the second string is null, +the result is the same as an FD command, i.e. the searched string is replaced +with the null string. There is no way in classic TECO to default the replace +string, even though this is a highly desirable feature. Thus if a null replace +string is specified to the Video TECO FR command, the searched for string is +replaced with the last string specified in a FS or FR command. +

+8.7.13. +FS Command +

+When two numeric arguments are specified to the Video TECO FS command, it is +used to constrain the search between the buffer positions specified by the +first and second argument. Also, to be found, the entire string must +reside within those two positions, not just the beginning of the string as in +some TECO editors. If the argument is negative, or in the case of two numeric +arguments if the first argument is less than the second, the command searches +backward. +

+8.7.14. +N Command +

+In a classic TECO editor, the N command would automatically page the file +through the edit buffer while searching for the string, thus insuring that the +entire file was searched. Since the entire file is always resident in Video +TECO, this behavior is not required. The command was enhanced to search across +edit buffers. Refer to the reference section for a complete description. +

+8.7.15. +P Command +

+In a classic TECO editor, the P command caused the current contents of the edit +buffer to be written out to the output file, and the next section of the file +to be read into the edit buffer. Since the entire file is always resident in +Video TECO, this behavior is not required. The command was enhanced to switch +between screen windows. +

+8.7.16. +S Command +

+When two numeric arguments are specified to the Video TECO S command, it is +used to constrain the search between the buffer positions specified by the +first and second argument. Also, to be found, the entire string must +reside within those two positions, not just the beginning of the string as in +some TECO editors. If the argument is negative, or in the case of two numeric +arguments if the first argument is less than the second, the command searches +backward. +

+8.7.17. +T Command +

+In a classic TECO editor, the T command is used to type out contents of the +edit buffer. Since a screen editor doesn't require this, Video TECO reserves +this command for future use. Currently, the T command causes the screen to be +redrawn incase of corruption. However, this has been replaced by the ^L command +(which is used by most Unix programs for this purpose). +

+8.7.18. +W Command +

+In Video TECO, the W command is used to move among words. A positive argument +tells the editor to move forward by that many words, while a negative argument +tells it to move backwards by that many words.

+Appendix B +

+9. +Features which are not yet supported, but are planned +

+* A way to tell how many arguments are passed to a macro.

+* The EU command to undo stuff after a $$ has already been issued.

+* Command line edit which takes the current command line, opens a buffer to +edit it, and when the buffer is closed, the command is executed. Just for those +times when you have lots of good stuff, but realize that you messed up one of +the early parts of the command.

+Done - see { and }

+* Full implementation of TECO search strings, including combinations +like ^N^ES would would match anything EXCEPT whitespace.

+Done

+* Flow commands ala TECO-11 (F> goes to end of iteration, F< goes +to beginning).

+* Long Q-register names, .ie. x(astring) references Q-register 'astring'.

+* Multiple simultaneous windows. (in, but problems exist)

+Done - problems mostly fixed. Only remaining problem is that there is only +a single "dot" for an edit buffer, thus moving dot in one window moves it in +the other windows. This is usually not what you want.

+* The ? command for debugging macros

+* Input ^T command so macros can request input.

+* Support for input radix so we can type in hex, octal, etc.

+Done - octal ^o and hexadecimal ^h are supported

+* Interactive Shell buffers.

+* Port to the mac. (done, but a better implementation needs to be done)

+* More extensive termcap for VMS

+* Add the rest of the operators like # and &

+* Buffer marks (that move as insertion / deletion happens)

+* proper erase character operation for unix (not wired to delete as it is +now).

+* Backward Line command (B)

+Done

+* Delete Word command (Y and V)

+Done

+* G* return the filespec of the buffer

+Done

+* Support for ~ and other wildcards in filespecs

+Done

+* Bitwise operators # and &

+* Immediate execution iterations

+Done

+* search/replace command which takes no arguments

+Done

+* insert/delete character support in screen optimizer

+* filespec completion

+Appendix C +

+10. +Bug List +

+* ^V in insert strings does not seem to be working. The escape terminates the +insert, rather than being inserted itself.

+Fixed

+* EF does not work as advertised. The only form that seems to work +properly is EF$ to delete the current edit buffer. EFbuffername$ and 2EF both +do the wrong thing. Also EF seems to leave some dangling info.

+* FR gets confused in several cases

+* Multiple windows messes up if several copies of the same file are displayed. +But this is a very useful capability.

+Fixed

+Appendix D +

+11. +Error messages +
+

+ \ No newline at end of file diff --git a/doc/TECO Manual V4_files/teco_0EB.gif b/doc/TECO Manual V4_files/teco_0EB.gif new file mode 100644 index 0000000..99a81c3 Binary files /dev/null and b/doc/TECO Manual V4_files/teco_0EB.gif differ diff --git a/doc/TECO Manual V4_files/teco_EP.gif b/doc/TECO Manual V4_files/teco_EP.gif new file mode 100644 index 0000000..74412be Binary files /dev/null and b/doc/TECO Manual V4_files/teco_EP.gif differ diff --git a/doc/TECO Manual V4_files/teco_layout.gif b/doc/TECO Manual V4_files/teco_layout.gif new file mode 100644 index 0000000..b7c4500 Binary files /dev/null and b/doc/TECO Manual V4_files/teco_layout.gif differ -- cgit v1.2.3