EMACS-11 distribution
fred fish
fnf at unisoft.UUCP
Wed Nov 14 16:59:01 AEST 1984
Well, here is an EMACS-11 distribution. This is my first
posting to net.sources so if I did something wrong please
don't crisp me. Is there any advantage to breaking this
up into smaller pieces and posting separately?.
#--------CUT---------CUT---------CUT---------CUT--------#
#########################################################
# #
# This is a shell archive file. To extract files: #
# #
# 1) Make a directory for the files. #
# 2) Write a file, such as "file.shar", containing #
# this archive file into the directory. #
# 3) Type "sh file.shar". Do not use csh. #
# #
#########################################################
#
#
echo Extracting README:
sed 's/^Z//' >README <<\STUNKYFLUFF
Z(1) Well folks, you asked for it and here it is. Unfortunately it
Z has been a couple years since I used any of this stuff so I'm a
Z little rusty about what the various pieces are. The following
Z represents my best guess, going from memory and looking at some
Z of the pieces.
Z
Z(2) The following are considered to be a minimal usable distribution
Z suitable for transmission over the net. Note that there are two
Z distinct flavors, one for VAX using VT100 and one for PDP-11 using
Z VT52.
Z
Z
Z File Size Usage
Z -------------- ------ -----------------------------------
Z
Z README xxxxx This file.
Z
Z emacs.txt 10659 "Quick reference" guide to EMACS-11
Z commands.
Z
Z emacs.doc 65034 EMACS-11 documentation ready for
Z printing.
Z
Z emacs.src 61032 EMACS-11 macro source file. Use
Z "vaxbld.tec" to compact into an
Z executable macro file "emacs.tec".
Z Use on VAX/VMS with VT100's.
Z
Z vaxbld.tec 1615 Used to compact "emacs.src" file into
Z executable macro file "emacs.tec".
Z Use on VAX/VMS with VT100.
Z
Z emacs11.tec 61166 Slightly modified version of "emacs.src".
Z Use "bldemacs.tec" to compact into
Z executable macro file "teco.tec".
Z Use on PDP-11's with VT52's.
Z
Z bldemacs.tec 1558 TECO command file to compact the
Z EMACS-11 macro source file "emacs11.tec"
Z into an executable TECO macro file
Z "teco.tec" by removing all extraneous
Z characters. Use on PDP-11's.
Z
Z
Z(3) The following files are available in the tape distribution only:
Z
Z
Z File Size Usage
Z -------------- ------ -----------------------------------
Z
Z MITemacs.doc 666989 Machine readable form of EMACS
Z documentation for the TOPS-20
Z version of EMACS. (Available
Z on tape distribution only)
Z
Z ema.odl 1183 Some kind of command file for one
Z of the DEC operating systems.
Z (I told you I was rusty!!!)
Z
Z ema.tkb 2778 Command file for building TECO
Z under RSX-11 and/or VAX/VMS
Z
Z emacs.rno 54116 EMACS-11 manual in RUNOFF form.
Z
Z emacs.tec 4941 Compacted form of emacs.src
Z
Z emacs11.doc 40088 Earlier form of emacs.doc
Z
Z teco.doc 711649 Machine readable form of documentation
Z for TECO.
Z
Z teco.tec 4915 Compacted form of emacs11.tec
Z
Z tioasm.cmd 497 Another mysterious command file
Z
Z
Z
Z(4) Some possibly helpful hints.
Z
Z I seem to remember that the TECO source was modified slightly
Z to look for "teco.tec" (or whatever you want to call the
Z compacted macro file) in a special startup directory. Thus
Z when the TECO executable was copied to "ema" and invoked with
Z the name "ema", it would automatically start up with the compacted
Z macro file, otherwise you would get normal TECO. It is possible
Z to load the compacted macro file manually and start it up by
Z hand each time, but I forget the exact procedure.
Z
Z I think there are a couple terminal dependencies wired into
Z the macro package, one for VT52 and one for VT100.
Z
Z There were some problems with VMS trapping certain control
Z characters that I was never able to completely fix.
Z
Z The macro sources are in "structured TECO" (and I'll bet
Z you thought TECO was an editor instead of a programming
Z language!!).
Z
Z Note that there are a couple embedded ESCAPE characters
Z near the end of the macro source files "emacs11.tec" and
Z "emacs.src".
Z
Z HAVE FUN AND GOOD LUCK.
Z
Z
Z Fred Fish
Z UniSoft Systems Inc,
Z Berkeley, Ca
Z 1-415-644-1230 ext 242
STUNKYFLUFF
set `sum README`
if test 21825 != $1
then
echo README: Checksum error. Is: $1, should be: 21825.
fi
#
#
echo Extracting bldemacs.tec:
sed 's/^Z//' >bldemacs.tec <<\STUNKYFLUFF
Z! EMACSBLD.TEC --- TECO command file to strip the EMACS11.TEC !
Z! File of all extraneous characters such as !
Z! comments, blanks, tabs, and CRLF's. This !
Z! results in TECO macro file called !
Z! TECO.TEC which is of minimum possible size. !
Z
Z! NOTE: This file contains two non-printing characters; !
Z! a pair of ESC's at the end !
Z
Z1^_&ED#2ED ! ^ means control in searchs; no yank prot !
ZET#64ET ! Run in detached mode !
Z at ER/EMACS11.TEC/ ! Open source file !
Z at EW/TECO.TEC/ ! Open destination file !
Z at _/!* START !/ ! Find the code start point !
Z0L
ZK
Z@^UI|
Z A
Z <
Z .UB
Z @^A%Removing comments%
Z 13^T
Z 10^T
Z <
Z @:S/!*/
Z ;
Z 2R
Z K
Z >
Z QBJ
Z @^A%Replacing CRLFs with blanks%
Z 13^T
Z 10^T
Z <
Z @:S/^EL/
Z ;
Z -1A-10"E
Z -2D
Z @I/ /
Z '
Z >
Z QBJ
Z @^A%Compressing blanks and tabs%
Z 13^T
Z 10^T
Z <
Z @:FS/^ES/ /
Z ;
Z >
Z QBJ
Z @^A%Restructuring lines%
Z 13^T
Z 10^T
Z <
Z Z-.-80U2
Z Q2"G
Z 80C
Z @:-FS/ //
Z ;
Z 13 at I//
Z 10 at I//
Z '
Z -Q2;
Z >
Z ^N"N
Z @^A%EOF found%
Z 13^T
Z 10^T
Z 0;
Z '
Z @^A%Getting next page%
Z 13^T
Z 10^T
Z A
Z >
Z|
ZMI
ZEC
Z at EB/TECO.TEC/
ZMI
ZJ
Z@^A%Final blank compression%
Z13^T
Z10^T
Z<
Z @:FS/ //
Z ;
Z>
Z1ET
Z27^T
Z7^T
Z@^A% Done !!!%
Z13^T
Z10^T
ZEX
Z ! Close files and exit !
STUNKYFLUFF
set `sum bldemacs.tec`
if test 58310 != $1
then
echo bldemacs.tec: Checksum error. Is: $1, should be: 58310.
fi
#
#
echo Extracting emacs.doc:
sed 's/^Z//' >emacs.doc <<\STUNKYFLUFF
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z E M A C S 1 1
Z
Z
Z U S E R S M A N U A L
Z
Z
Z Screen oriented text editor
Z
Z
Z
Z
Z Version 1.4 (Vax/RSX)
Z
Z
Z by Fred Fish
Z
Z
Z
Z
Z (Preliminary)
Z
Z
Z 18-Jun-82
Z
Z
Z
Z
Z
Z
Z CHAPTER 1
Z
Z INTRODUCTION
Z
Z
Z
Z
Z EMACS11 implements a small but powerful subset of the popu-
Z lar EMACS editor originally developed at M.I.T. This is a
Z screen oriented editor, which unlike some others (VT52 or VTEDIT
Z for example), does not make use of the auxilary keypad. All
Z command keys are placed where they are the most convenient,
Z under the user's fingertips, via the use of control characters
Z and escape sequences. Cursor keys are fine for some applica-
Z tions but moving the entire hand eight inches to reach them is
Z not conducive to high speed editing.
Z
Z The EMACS11 command set is easily learned; beginners can be
Z doing useful editing in a matter of hours with only a dozen or
Z so commands. Since the source code is readily available (in the
Z form of TECO macros) internal user modifications and extensions
Z are easily implemented.
Z
Z
Z
Z
Z
Z
Z CHAPTER 2
Z
Z THE EMACS11 ENVIRONMENT
Z
Z
Z
Z 2.1 EMACS11 versus EMACS
Z
Z
Z All references to EMACS are to the full scale version of
Z the EMACS editor. References to EMACS11 are to the PDP-11 sub-
Z set written in TECO.
Z
Z
Z
Z 2.2 NOTES FOR VAX USERS
Z
Z
Z Due to VMS's trapping of a wide variety of control char-
Z acters, certain commands have been transported to other control
Z characters until a VAX guru tells me how to turn off this inhos-
Z pitable trait. In particular, the VAX version uses:
Z
Z 1. ^H for ^X
Z
Z 2. ^I for ^Q
Z
Z 3. ^T for ^S
Z
Z 4. ^U for ^Y
Z
Z Be warned that you may experience difficulities with multi-
Z ple command sequences on the VAX if any of the above listed
Z characters are involved.
Z
Z LATE NEWS FLASH ... Just found out about the SET TERMINAL
Z /PASSALL command (what can I say, I'm new to VAX). This will
Z let EMACS11 get all the characters you type but has the disad-
Z vantage of making your interaction with the operating system a
Z royal pain. Now maybe someone will show me how to do the equi-
Z valent from a moving program.
Z
Z The easiest way I have found to use the PASSALL and NOPAS-
Z SALL terminal characteristics is to include the following lines
Z in my LOGIN.COM file:
Z
Z
Z PA :== SET TERMINAL PASSALL
Z NP :== SET TERMINAL NOPASSALL
Z
Z
ZTHE EMACS11 ENVIRONMENT Page 2-2
Z
Z
Z
Z
Z Then before invoking EMACS use the PA command and immediately
Z after exiting use the NP command.
Z
Z
Z
Z 2.3 CONVENTIONS
Z
Z
Z This section describes some of the conventions used to des-
Z cribe the EMACS11 command set and the command operations.
Z
Z
Z
Z 2.3.1 Control characters
Z
Z
Z All references to control characters will use the carat
Z character ("^"), followed by the corresponding letter, to indi-
Z cate a control character. For example "^A" stands for the con-
Z trol/A character, which is typed by simultaneously depressing
Z the "CTRL" key and the "A" key.
Z
Z
Z
Z 2.3.2 Escape character
Z
Z
Z The escape character, produced by depressing the "ESC" key,
Z will be symbolized by the "$" symbol. The "dollars character"
Z occurs seldom enough that confusion is not usually a problem.
Z Thus "$X" stands for a two character sequence which is typed by
Z first depressing the "ESC" key and then the "X" key. Note that
Z both keys ARE NOT depressed simultaneously.
Z
Z
Z
Z 2.4 COMMAND CLASSES
Z
Z
Z EMACS11 commands are divided up into a basically hierarchi-
Z al structure with the following classes:
Z
Z 1. Control character commands
Z
Z 2. Escape character commands
Z
Z 3. ^X commands
Z
Z 4. $X commands
Z
Z
Z
ZTHE EMACS11 ENVIRONMENT Page 2-3
Z
Z
Z
Z
Z 2.5 DEFINITIONS
Z
Z
Z This section defines some of the terms for which precise
Z definitions are required, in order to insure proper command op-
Z eration or clarify their descriptions.
Z
Z
Z
Z 2.5.1 Cursor
Z
Z
Z The cursor is the flashing underscore which appears beneath
Z displayed text buffer characters (or flashing box which overlays
Z characters). The cursor is considered to be "at" the character
Z under which it is currently located.
Z
Z
Z
Z 2.5.2 Pointer
Z
Z
Z The text buffer pointer is considered to be located between
Z the character where the cursor is at, and the previous char-
Z acter, if any. Note that EMACS11 displays a graphics character
Z to indicate the end of the text buffer. This character is not
Z actually in the text buffer, even though the cursor may be posi-
Z tioned to it. When the cursor is at this special graphics char-
Z acter, the pointer is at the end of the text buffer.
Z
Z
Z
Z 2.5.3 Word
Z
Z
Z A word is any non-null string of characters which contains
Z no imbedded blanks, tabs, line feeds, carriage returns, or form
Z feeds. Thus "++??" is just as valid a word as "cat". Note
Z that any punctuation at either end of a word is also considered
Z to be part of the word.
Z
Z
Z
Z 2.5.4 Sentence
Z
Z
Z A sentence is any non-null string of words with the last
Z character of the last word being one of the following punctua-
Z tion symbols:
Z
Z 1. Period => "."
Z
Z 2. Exclaimation mark => "!"
Z
ZTHE EMACS11 ENVIRONMENT Page 2-4
Z
Z
Z
Z
Z 3. Question mark => "?"
Z
Z
Z
Z 2.5.5 Paragraph
Z
Z
Z A paragraph is any non-null string of sentences which has
Z one of the following paragraph delimiters at each end:
Z
Z 1. Two or more successive CRLFs (carriage return line
Z feed sequences)
Z
Z 2. A form feed
Z
Z 3. The top of the text buffer
Z
Z 4. The bottom of the text buffer
Z
Z
Z
Z 2.5.6 Page
Z
Z
Z A page is any text (may be null, or no text) which has one
Z of the following page delimiters at each end:
Z
Z 1. A form feed
Z
Z 2. An imaginary "beginning of file mark"
Z
Z 3. An end of file
Z
Z Note that a page may be so large that it cannot all fit
Z into the text buffer at one time, in which case EMACS11 commands
Z which input or output pages treat the text currently in the text
Z buffer as one page, and the text in the input or output file as
Z another page. Conversely, several small pages may fit into the
Z text buffer simultaneously. Normal TECO treatment of formfeeds
Z applies to EMACS11 commands except where noted.
Z
Z
Z
Z 2.5.7 Mark
Z
Z
Z The mark is an imaginary "place holder" which may be moved
Z about in the text buffer at will. It is initially at the top of
Z the text buffer, until explicitly moved somewhere else. Certain
Z EMACS11 commands, such as those which move pages in and out of
Z the text buffer, affect the location of the mark even though
Z they are not mark manipulation commands.
Z
Z
Z
ZTHE EMACS11 ENVIRONMENT Page 2-5
Z
Z
Z
Z
Z 2.5.8 Region
Z
Z
Z A region is any text which is delimited by the mark and the
Z current pointer. Such text is commonly refered to as a "marked
Z region".
Z
Z
Z
Z 2.6 DISPLAY CHARACTERISTICS
Z
Z
Z
Z
Z 2.6.1 The status line
Z
Z
Z When you first invoke EMACS11, via the EMA[cs] RSX11M sys-
Z tem command, your terminal's screen will be cleared and a status
Z line will appear in the next to the last line at the bottom.
Z This line, maintained by EMACS11, contains various information
Z about the current state of the editor, including the version
Z number, the mode, and the current input or output file. If no
Z input or output file is open, the file specification is omitted.
Z If only an input file is open, the file specification for the
Z input file is shown. If both an input and output file are open,
Z the file specification for the output file is shown.
Z
Z
Z
Z 2.6.2 The prompt line
Z
Z
Z The last line of the screen is used as a combination prompt
Z line and error message line. Very few EMACS11 commands will
Z prompt for input since EMACS11 is designed to be command driven,
Z not ask you a bunch of questions. Those that do will use the
Z last line. Other commands will also use this line to confirm
Z that an operation has been done, if such an operation does not
Z cause a visible change in the text buffer (such as setting a
Z mark).
Z
Z
Z
Z 2.6.3 Viewing information
Z
Z
Z Certain EMACS11 commands allow you to "view" various types
Z of information. The view mode is characterized by three steps;
Z (1) the screen being cleared, (2) the desired information being
Z shown, and (3) the text buffer window being restored. View type
Z commands do not change the text buffer or the current pointer
Z location. EMACS11 discards the character used to end step 2
ZTHE EMACS11 ENVIRONMENT Page 2-6
Z
Z
Z
Z
Z (any key depression except S or Q while screen is being writ-
Z ten).
Z
Z
Z NOTE
Z
Z If a given view commands seems to perform erratically,
Z sometimes working and sometimes not, it is probably
Z because if the requested information does not exist,
Z the command is ignored.
Z
Z
Z
Z
Z
Z 2.7 REPEAT COUNTS
Z
Z
Z Most commands for which a repeat count makes sense can be
Z preceded with a repeat count of the form $<digits>. For exam-
Z ple, $10N will move the pointer down 10 lines. Also, $100XE
Z will execute the previously defined macro 100 times.
Z
Z
Z NOTE
Z
Z In particular, "commands" which do nothing except in-
Z sert their character into the text buffer (such as the
Z "A" command) can also be preceded with a repeat count.
Z This the command $80* will insert 80 "*" characters
Z into the text buffer at the current pointer location.
Z
Z
Z
Z
Z
Z 2.8 UNIMPLEMENTED COMMANDS
Z
Z
Z It is possible that this manual may describe EMACS commands
Z which have not yet been inplemented in the EMACS11 macros. If
Z this occurs, it is because it was felt that no self-respecting
Z subset should be without that particular command, or that it was
Z important enough to "reserve" it's future implementation's name
Z by including it in this manual. Note that any unimplemented
Z command will simply be ignored (while also ringing the
Z terminal's bell). As of the current date only a small percen-
Z tage of the commands in this manual have yet to be implemented.
Z
Z
Z
Z
Z
Z
Z CHAPTER 3
Z
Z INSTALLING EMACS11
Z
Z
Z
Z
Z The EMACS11 distribution kit includes all files necessary
Z to build a version of TECO which has been slightly modified to
Z support EMACS11. The TECO source files are from the TECO ver-
Z sion 35 distribution kit.
Z
Z
Z
Z 3.1 MODIFYING TECO; VERSION 35
Z
Z
Z One of the things which must be modified in TECO is the
Z display of the new task size when an extend task is successful.
Z This causes a hardware scrolling of the VT52, which has the ef-
Z fect of moving the status line up into the text area, and gener-
Z ally screwing up the display. The modification simply comments
Z out the code responsible for displaying the new task size.
Z
Z
Z
Z 3.2 REQUIRED TECO MACRO FILES
Z
Z
Z The following TECO macro files are used:
Z
Z 1. EMACS11.TEC -- This is the source file for the EMACS
Z editor, in the form of TECO macros. It must be pro-
Z cessed (purified) by BLDEMACS.TEC before it is useful
Z as a macro file.
Z
Z 2. BLDEMACS.TEC -- This macro file purifies the
Z EMACS11.TEC file by stripping out all extraneous char-
Z acters such as comments, blanks, and tabs. The result-
Z ing macro code is approximate 4K characters and is the
Z EMACS11 editor.
Z
Z
Z
Z 3.3 DEVIATIONS FROM EMACS
Z
Z
Z The realities of implementing an EMACS subset on
Z the PDP-11, along with restrictions imposed by the TECO
Z "programming language", have resulted in various minor
Z deviations of some EMACS11 commands from their equiva-
ZINSTALLING EMACS11 Page 3-2
Z
Z
Z
Z
Z lent EMACS operation. In general though, such devia-
Z tions are quite minor, and only apparent to those who
Z are intimately familiar with the EMACS command set.
Z
Z One area where deviations or extensions are very
Z apparent is in the handling of file I/O. The EMACS im-
Z plementation is usually capable of handling a file in
Z its entirity, with any required paging operations invi-
Z sible to the user. The EMACS11 command set includes
Z some commands which manipulate pages.
Z
Z
Z
Z
Z
Z
Z CHAPTER 4
Z
Z CONTROL CHARACTER COMMANDS
Z
Z
Z
Z
Z Control character commands are invoked by simultaneously
Z holding down the "CTRL" key and the desired command key.
Z
Z
Z
Z 4.1 ^A -- Go to start of line
Z
Z
Z The ^A command moves the pointer to the beginning of the
Z current line on the screen. If the pointer is already at the
Z beginning, it has no effect.
Z
Z
Z
Z 4.2 ^B -- Go back one character
Z
Z
Z The ^B command moves the pointer back one character in the
Z text. Note that the end of the line delimiter which is input
Z with the RETURN key actually consists of two characters, a car-
Z riage return (CR) and a line feed (LF). Thus if you are at the
Z beginning of the line and issue the ^B command, the pointer will
Z be placed between the CR and the LF characters, which can cause
Z some confusion for beginners since the cursor will seem to jump
Z to the beginning of the previous line on the first ^B and then
Z the end of that line on the second ^B. (No you didn't find your
Z first bug...sorry.)
Z
Z
Z
Z 4.3 ^D -- Delete next character
Z
Z
Z The ^D command deletes the character immediately after the
Z current pointer location. If there is no character there, when
Z at the end of the buffer for example, it is ignored. Note that
Z this operation is different than that produced by the DELETE
Z key, which deletes the character before the current pointer lo-
Z cation. In general you will find that both commands are equally
Z useful, and the appropriate command usage becomes second nature
Z with time.
Z
Z
Z
ZCONTROL CHARACTER COMMANDS Page 4-2
Z
Z
Z
Z
Z 4.4 ^E -- Go to end of line
Z
Z
Z The ^E command moves the pointer to the end of the current
Z line, just prior to the CRLF (carriage return/line feed). If
Z the pointer is already positioned before a CRLF, the command is
Z ignored.
Z
Z
Z
Z 4.5 ^F -- Go forward one character
Z
Z
Z The ^F command moves the pointer forward one character.
Z When at the end of the text buffer this command is ignored.
Z Note that the comments for the complimentary command ^B apply to
Z the ^F command.
Z
Z
Z
Z 4.6 ^G -- PANIC BUTTON
Z
Z
Z The ^G command is your PANIC BUTTON. It is generally use-
Z ful in getting you out of places you don't want to be. It can
Z be used at any time you are not at TECO level, and will abort
Z any half entered commands. The terminal's bell is used to con-
Z firm your ^G has been recognized.
Z
Z
Z
Z 4.7 ^K -- Kill to end of line
Z
Z
Z The ^K command performs one of two functions depending upon
Z the current pointer position. When the pointer is not at the
Z end of the current line (immediately before the CRLF) then the
Z rest of the line up to, but not including, the CRLF is erased
Z from the text buffer and either placed into the kill buffer
Z (successive kills without cursor movement commands append to
Z anything currently in the kill buffer). When the pointer is at
Z the end of the current line, only the CRLF is killed.
Z
Z
Z
Z 4.8 ^N -- Go down to next line
Z
Z
Z The ^N command attempts to move the cursor directly down-
Z wards to the same relative location in the next line. This will
Z not always be successful, if for example the next line is short-
Z er or contains tabs below the current position. See the com-
Z ments in the complementary command ^P
ZCONTROL CHARACTER COMMANDS Page 4-3
Z
Z
Z
Z
Z 4.9 ^O -- Open blank line
Z
Z
Z The ^O command "opens" a blank line for insertion.
Z Actually, all it does is insert a CRLF at the current pointer
Z position, but unlike simply entering a CRLF with the RETURN key,
Z leaves the pointer positioned before the CRLF, just where you
Z want it for insertion of text. When used at the beginning of
Z the current line, the effect seen by the user is that a blank
Z line is created by moving the current line downwards. When used
Z inside a line, the effect seen is that the rest of the line is
Z moved downwards to a new line by itself, and the user can then
Z finish the current line with different text.
Z
Z
Z *** NOT OPERABLE ON VAX ***
Z
Z
Z
Z 4.10 ^P -- Go up to previous line
Z
Z
Z The ^P command attempts to move the pointer directly up-
Z wards to the save relative position in the previous line. If
Z this fails, when the previous line is shorter that the current
Z line for example, the pointer is positioned as far to the right
Z as possible without passing the location in the original line.
Z Tabs and different line lengths will effect where the pointer
Z ends up. Experiment with the command for further information.
Z
Z
Z
Z 4.11 ^Q -- Quote next character
Z
Z
Z The ^Q command tells EMACS11 to use the next character
Z typed as text. The control and escape characters can be entered
Z into the text buffer by simply preceding them with a ^Q command.
Z Note that like most other commands, the ^Q command can be pre-
Z ceded with a repeat count of the form ESC<digits>.
Z
Z
Z *** Is ^I on VAX ***
Z
Z
Z
Z 4.12 ^R -- Reverse search
Z
Z
Z The ^R command does a reverse incremental search. Reverse
Z means that the search progresses backwards from the current po-
Z inter location. Incremental means that the search begins as
Z soon as the first character after the ^R is typed, and continues
ZCONTROL CHARACTER COMMANDS Page 4-4
Z
Z
Z
Z
Z as each search string character is input. That is, ^R then an
Z "A" would position the pointer to immediately before the first
Z "A" character preceding the current pointer location. Typing
Z another "A" character would search for an position the pointer
Z immediately before the first "AA" string preceding the original
Z pointer location (not current pointer location). This type of
Z searching may sound rather confusing on paper but in practice is
Z extremely useful, since only the smallest number of characters
Z required to locate a given string need be entered.
Z
Z The ^R search sequence is terminated by the first control
Z character entered (I.E. an EMACS11 command) which is not anoth-
Z er ^R or a ^S, or by the first ESC. Note that if an ESC is
Z used, it DOES NOT count as the first character in an EMACS11 es-
Z cape sequence command. It simply terminates the search and
Z leaves the pointer at it's current position.
Z
Z The ^G command has a special significance inside the ^R
Z search operation. It aborts the search and leaves the pointer
Z at its original location, before invocation of the ^R command,
Z and not at the current search location. So if you don't find
Z what you are looking for, use the ^G command to abort the search
Z and put you back where you started from. Note that in this
Z usage the ^G does not ring the terminal bell.
Z
Z If the first character after a ^R command is another ^R
Z then the previous successful EMACS11 search string is resurrect-
Z ed and used for the current search. If any characters intervene
Z between the ^R which starts the search, and the second ^R, then
Z the current search string is reused which has the effect of
Z finding the next occurance of that string. I.E. if you input a
Z sequence of the form "^R A B O ^R ^R ^R" then, assuming that you
Z had some "ABO" strings to look for, the pointer will end up im-
Z mediately prior to the fourth occurance backwards from the ori-
Z ginal location. Again, experimentation will fix these concepts
Z in mind much firmly than a lengthy discourse. These featurers
Z are mentioned for completeness of the command definition and to
Z make the reader aware of their existence.
Z
Z
Z NOTE
Z
Z The ^R command is not yet full functional, however the
Z forward search command ^S is.
Z
Z
Z
Z
Z
ZCONTROL CHARACTER COMMANDS Page 4-5
Z
Z
Z
Z
Z 4.13 ^S -- Forward search
Z
Z
Z The ^S command functions identically to the ^R command with
Z the exception that the search procedes in the FORWARD direction
Z and the pointer is left AFTER the search string. See the com-
Z ments in the ^R command definition for further information.
Z
Z
Z
Z 4.14 ^V -- Move window down
Z
Z
Z The ^V command moves the window into the text buffer down-
Z wards by the appropriate number of lines to cause a two line
Z overlap with the previous window. The cursor is left at the be-
Z ginning of the 14th line in the window, or at the end of the
Z buffer if there is nothing else left to display.
Z
Z
Z
Z 4.15 ^W -- Kill marked region
Z
Z The ^W command kills the currently marked region (see REGIONS
Z section for defintion) and puts it into, or appends it to, the
Z kill buffer. One way to move large blocks of text around is to
Z place the text in a marked region, kill it with the ^W command,
Z go to the new location, and unkill it with the ^Y (yank kill
Z buffer) command. If the text buffer is very full this command
Z is the frequent source of "memory overflow" aborts back to TECO
Z level. If this occurs, then use the "M I ESC ESC" command to
Z return to EMACS11, and the appropriate EMACS11 commands to write
Z out portions of your text buffer to the output file.
Z
Z
Z
Z 4.16 ^Y -- Unkill previous kill
Z
Z
Z The ^Y command performs the "unkill" operation by restoring
Z the contents of the kill buffer at the current location. Note
Z that the kill buffer is not effected, so one way of duplicating
Z a block of text is to kill it with the ^K or ^W commands, and
Z then unkill it a number of times with the ^Y command. The po-
Z inter is left after the unkilled text. If the unkilled text
Z consists of a large number of lines, successive ^Y commands may
Z appear to have no effect (since the screen does not change) but
Z appearances can be deceiving. (Ya been warned!)
Z
Z
Z
Z
Z
Z
Z CHAPTER 5
Z
Z SINGLE CHARACTER ESCAPE COMMANDS
Z
Z
Z
Z
Z These commands are invoked by first hitting the ESC key and
Z THEN the given command key. DO NOT hold the ESC key down while
Z simultaneously pressing the command key.
Z
Z
Z
Z 5.1 $A -- Go back to sentence beginning
Z
Z
Z The $A command searches backwards, from the current pointer
Z position, for the first occurance of a sentence delimiter (see
Z DEFINITIONS section for exact definition of a sentence delim-
Z iter), or the top of the text buffer, whichever occurs first.
Z The pointer is then moved to immediately before the next alpha-
Z betic character (A-Z or a-z), provided it would no move beyond
Z the original location, in which case the command is aborted.
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 5.2 $B -- Go back one word
Z
Z
Z The $B command searches backwards, from the current pointer
Z position, for the first occurance of a word delimiter (see DE-
Z FINITIONS section for exact definition of a word delimiter), or
Z the top of the text buffer, whichever occurs first. The pointer
Z is then moved to immediately before the next alphabetic char-
Z acter (A-Z or a-z), provided it would not move beyond the origi-
Z nal location, in which case the command is aborted.
Z
Z
Z
Z 5.3 $C -- Capitalize next word
Z
Z
Z The $C command searches forward for the next word, and if
Z found moves the pointer to just before its first character.
Z That character is then converted to upper case. If no next word
Z exists the command is aborted.
Z
Z
ZSINGLE CHARACTER ESCAPE COMMANDS Page 5-2
Z
Z
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 5.4 $D -- Delete next word
Z
Z
Z The $D command searches forward for the next word, and if
Z found deletes it, and any blanks or tabs which precede it. If
Z the pointer is currently positioned inside a word, after the
Z first character, then the search does not begin until the end of
Z that word. If the seach fails, the pointer is left unchanged.
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 5.5 $E -- Go forward to sentence beginning
Z
Z
Z The $E command searches forward for the next occurance of
Z the beginning of a sentence, and if found, positions the cursor
Z on the first character of that sentence which is not a white-
Z space character. If the search fails, the pointer is left un-
Z changed.
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 5.6 $F -- Go forward one word
Z
Z
Z The $F command searches forward for the next word, and if
Z found positions the cursor on its first character. If the
Z search fails the pointer is left unchanged.
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 5.7 $G -- Go to specified line number
Z
Z
Z The $G command moves the pointer to the beginning of the
Z line specified by the repeat argument. I.E., for this command,
Z the repeat argument is used to furnish the line number to move
Z to. If the repeat argument is omitted, the default value of 1
Z is used. This command is not a standard EMACS command.
Z
Z
Z
ZSINGLE CHARACTER ESCAPE COMMANDS Page 5-3
Z
Z
Z
Z
Z 5.8 $H -- Mark paragraph
Z
Z
Z The $H command causes the mark to be positioned before the
Z first character of the current paragraph (the one which the po-
Z inter is currently in) and the pointer to be positioned after
Z the last character of the current paragraph.
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 5.9 $K -- Kill word
Z
Z
Z The $K command searches forward for the next word, and if
Z found kills it from the text buffer. If the pointer must move
Z to get to start of the next word, then the word replaces the
Z current kill buffer contents, otherwise it is appended to the
Z kill buffer.
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 5.10 $L -- Lower case next word
Z
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 5.11 $N -- Go to next page
Z
Z
Z The $N command first insures that both an input and output
Z file is open, and if so, writes out the current text buffer and
Z reads in the next page from the input file. Normal TECO han-
Z dling of formfeeds is used, that is, if a form feed occurs the
Z read is terminated and the form feed is NOT put in the buffer
Z (it IS appended to the current buffer contents on the next pag-
Z ing operation).
Z
Z
Z
Z 5.12 $S -- Center text in screen
Z
Z
Z
Z *** NOT YET IMPLEMENTED ***
ZSINGLE CHARACTER ESCAPE COMMANDS Page 5-4
Z
Z
Z
Z
Z 5.13 $T -- Exchange words
Z
Z
Z The $T command exchanges the words before and after the po-
Z inter, and leaves the pointer at the end of the second word.
Z The net effect is as if the pointer "dragged" the word before it
Z though the word after it. If the pointer is not currently at
Z the end of a word, it is backed up until it finds the end of a
Z word. If no end of a word is found, the command is aborted and
Z the pointer is returned to its original location.
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 5.14 $U -- Upper case next word
Z
Z
Z
Z
Z 5.15 $V -- Move window up
Z
Z
Z The $V command tries to move the window into the text
Z buffer up by sufficient number of lines so that there is a 2
Z line overlap with the previous window. When the current window
Z is near the top of the buffer this may not be possible, in which
Z case the window is moved so that it displays the top 23 lines in
Z the text buffer.
Z
Z
Z
Z 5.16 $W -- Kill marked region
Z
Z
Z The $W command kills the current marked region and either
Z appends it the current top of the kill stack, or pushes it onto
Z the kill stack, depending upon whether the pointer has not
Z moved, or has moved since the last kill.
Z
Z
Z
Z 5.17 $Y -- Pop kill stack and unkill
Z
Z
Z When used immediately after a ^Y command, the $Y command
Z wipes the last resurrected text from the buffer, pops the kill
Z stack, and resurrects the second most recent kill. When used at
Z any other time this command is ignored. Note that the most re-
Z cent kill, which was popped off the kill stack, is discarded and
Z thus lost forever. Also note that at this time the kill stack
Z is only two kills deep.
ZSINGLE CHARACTER ESCAPE COMMANDS Page 5-5
Z
Z
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 5.18 $Z -- Return to TECO level
Z
Z
Z The $Z command provides a "clean" way to return to TECO
Z level. Once at TECO level you can issue whatever TECO commands
Z you wish then return to EMACS level with the MI$$ command.
Z
Z
Z NOTE
Z
Z While at TECO level you must not change the contents
Z of any of the alphabetic Q-registers (A-Z) or unpred-
Z ictable results will occur when you try to restart
Z EMACS. Also, any changes you make via TECO will be
Z totally unknown to EMACS. Particularly dangerous
Z changes are those which open files, close files, or
Z change any of TECO's status words. Those which simply
Z change the pointer or the text buffer contents are
Z safe.
Z
Z
Z
Z
Z
Z 5.19 $^Y -- Insert last TECO command
Z
Z
Z The $^Y command pulls the most recently defined TECO com-
Z mand (defined via the $$ command) into the text buffer. The
Z TECO command is not effected. This can be useful for interac-
Z tively testing TECO macros and when the correct operation is ob-
Z tained, pulling them into the text buffer and then writing them
Z out to a file via the commands which append or prepend defined
Z regions to a specific file.
Z
Z
Z
Z 5.20 $^W -- Append next kill
Z
Z
Z The $^W command is provided to override the EMACS mechanism
Z which causes the kill stack to be pushed when a new kill should
Z replace the most recent kill. This occurs any time the pointer
Z has been moved since the last kill command. By killing text in
Z one location, moving the pointer to another location, issueing
Z the $^W command, and killing some more text, you can concatenate
Z text, from two or more different areas of the text buffer, in
Z the top of the kill stack.
Z
Z
Z
ZSINGLE CHARACTER ESCAPE COMMANDS Page 5-6
Z
Z
Z
Z
Z 5.21 $$ -- Enter TECO command
Z
Z
Z The $$ command prompts for a TECO command line to be en-
Z tered, and then executes it. The current version of TECO will
Z cause the terminal to perform hardware scrolling if the TECO
Z command line contains any character which causes a new line
Z (such as form feed or line feed). This will mess up the status
Z line and you will need to trigger a screen refresh with the ^L
Z command.
Z
Z
Z
Z 5.22 $@ -- Set mark
Z
Z
Z The $@ command in EMACS11 is equivalent to the ^@ command
Z in EMACS. Since ^@ is actually the NULL character (ASCII 0),
Z which is ignored by TECO, this command had to be moved. $@ was
Z available (not defined in EMACS) and seemed like the logical
Z choice.
Z
Z The $@ command sets the mark equal to the current pointer
Z location. At present there is only one mark. Moving the mark
Z destroys the previous mark, which is initially at the top of the
Z buffer.
Z
Z
Z
Z 5.23 $* -- View last TECO command
Z
Z
Z The $* command tests to see if any TECO command has been
Z previously defined. If so, the screen is cleared and that com-
Z mand is displayed starting at the top of the screen. Pressing
Z any key erases the screen again and redisplays the text buffer
Z window. The text buffer is no effected and the character used
Z to complete the command is discarded.
Z
Z
Z
Z 5.24 $% -- Query replace
Z
Z
Z The $% command searches forward from the current pointer
Z location to find the next occurance of the specified search
Z string (prompted for). The screen is then updated to show the
Z current pointer position and EMACS11 waits for the next char-
Z acter to be input. If it is a blank (space bar depressed) then
Z the target string is replaced with the specified replacement
Z string (which is also prompted for). Depressing any other key
Z aborts the current replacement and the next occurance of the
Z string is searched for. The command can be aborted at any time
ZSINGLE CHARACTER ESCAPE COMMANDS Page 5-7
Z
Z
Z
Z
Z with a ^G command, which returns the pointer to the location it
Z was at when the $% command was invoked.
Z
Z
Z
Z 5.25 $? -- Describe next command
Z
Z
Z The $? command tells EMACS to search the appropriate files
Z for a definition of the EMACS command which follows it. For ex-
Z ample, the command sequence "$?^A" will view documentation of
Z the ^A command. If the command sequence which follows the $?
Z command is not recognized, the help command is aborted.
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 5.26 $[ -- Go to beginning of paragraph
Z
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 5.27 $] -- Go to end of paragraph
Z
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 5.28 $< -- Go to beginning of text buffer
Z
Z
Z The $< command moves the pointer to the top of the current
Z text buffer. If the pointer is already at the top, it has no
Z effect.
Z
Z
Z
Z 5.29 $> -- Go to end of text buffer
Z
Z
Z The $> command moves the pointer to the bottom of the cur-
Z rent text buffer. If the pointer is already at the bottom, it
Z has no effect.
Z
Z
Z
Z
Z
Z
Z CHAPTER 6
Z
Z CONTROL X COMMANDS
Z
Z
Z
Z
Z The ^X command sequences consist of the ^X command followed
Z by another character.
Z
Z
Z NOTE
Z
Z On the VAX, ^X has temporarily been transported to the
Z ^H character. Substitute ^H for all occurances of ^X.
Z
Z
Z
Z
Z
Z 6.1 ^X^L -- Lower case marked region
Z
Z
Z The ^X^L command converts all alphabetic characters (A-Z)
Z in the
Z
Z
Z
Z 6.2 ^X^N -- Get next page; with overlap
Z
Z
Z The ^X^N command moves all text above the currently displa-
Z yed window to the output file, then reads in the next page of
Z the input file. If a form feed is needed between pages, it is
Z inserted into the text buffer. This command is particularly
Z useful for editing near page boundries, where you may need to
Z jump back and forth between pages.
Z
Z
Z
Z 6.3 ^X^O -- Delete blank lines
Z
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
ZCONTROL X COMMANDS Page 6-2
Z
Z
Z
Z
Z 6.4 ^X^P -- Mark current page
Z
Z
Z The ^X^P command puts the pointer at the top of the buffer
Z or after the first form feed backwards from the current pointer
Z location, and puts the mark at the end of the buffer or after
Z the next form feed forwards from the current pointer location.
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 6.5 ^X^R -- Read in file
Z
Z
Z The ^X^R command causes the specified file to be opened for
Z input only. To open an output file you must use the ^X^W com-
Z mand, or make some change in the buffer and then try to exit
Z EMACS, at which point you will be given the option of saving the
Z buffer.
Z
Z
Z
Z 6.6 ^X^S -- Save file
Z
Z
Z The ^X^S command writes to the output file the current text
Z buffer contents and any remaining pages from the input file. It
Z then closes the input and output files, reopens the output file
Z with backup, and reads in the first page.
Z
Z
Z
Z 6.7 ^X^U -- Upper case marked region
Z
Z
Z The ^X^U command converts all alphabetic characters (A-Z)
Z in the
Z
Z
Z
Z 6.8 ^X^V -- Visit file
Z
Z
Z The ^X^V command opens a file, with backup, for both input
Z and output. I.E., the output file specification is the same as
Z the input file specification except that the version number of
Z the output file is one greater than that of the input file.
Z
Z
Z
ZCONTROL X COMMANDS Page 6-3
Z
Z
Z
Z
Z 6.9 ^X^W -- Write file
Z
Z
Z The ^X^W command closes any currently open output file and
Z opens the specified file for output. It performs no other ac-
Z tion. This slightly different than the normal EMACS definition
Z of the ^X^W command.
Z
Z
Z
Z 6.10 ^X^X -- Exchange mark and pointer
Z
Z
Z The ^X^X command exchanges the current mark and pointer.
Z If the mark has not yet been set it defaults to the top of the
Z buffer. This command is particularly useful for verifying that
Z a marked region is really where you expect it to be. A second
Z ^X^X restores the original mark and pointer locations.
Z
Z
Z
Z 6.11 ^XA -- Append next page to buffer
Z
Z
Z The ^XA command simply appends the next page of the input
Z file to the current buffer. If no input file is currently open
Z then this command is ignored.
Z
Z
Z
Z 6.12 ^XE -- Execute last EMACS11 macro
Z
Z
Z The ^XE command re-executes the last EMACS macro defined
Z with the ^X( and ^X) commands. This command may be preceded by
Z a repeat count but be aware that EMACS macros execute relatively
Z slowly. This does not mean you should not use them, since they
Z are one of the most powerful features of EMACS, just that you
Z should not expect quick results. Note the use of the ^XT com-
Z mand to toggle a screen update after each execution.
Z
Z
Z NOTE
Z
Z At the present time EMACS macros CANNOT be nested.
Z That is, one macro cannot define another.
Z Indeterminate results will occur if you try to nest
Z EMAC macros.
Z
Z
Z
Z
Z
ZCONTROL X COMMANDS Page 6-4
Z
Z
Z
Z
Z 6.13 ^XI -- Insert file at pointer
Z
Z
Z The ^XI command inserts the specified file at the current
Z pointer location. In order to insure that a memory overflow
Z does not occur it effectively performs a simultaneous ^X^S
Z EMACS11 command, so an output file must be open. If not, the
Z ^XI command is simply ignored.
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 6.14 ^XN -- Output text above window
Z
Z
Z The ^XN command first insures that an output file exists,
Z and if so, writes all text in the buffer above the current win-
Z dow to the output file. This is very handy for making some room
Z in the buffer when a significant portion is above the current
Z window. If no output file exists, the command is ignored.
Z
Z
Z
Z 6.15 ^XQ -- Query inside EMACS11 macro
Z
Z
Z When encountered inside an EMACS macro, the ^XQ command
Z halts execution and waits for the next character from the key-
Z board. Pressing the space bar allows the current macro to con-
Z tinue but does not flush any repeat count. A ^G will abort the
Z current macro and also any remaining repeat count. Any other
Z key will simply abort the current macro but leave the remaining
Z repeat count uneffected. This is useful for selectively execut-
Z ing the rest of a macro once part of it has been executed, as in
Z a search and replace operation.
Z
Z
Z
Z 6.16 ^XT -- Toggle redisplay inside macro
Z
Z
Z The ^XT command causes the terminal screen to be updated
Z after each execution of a keyboard macro. In normal operation,
Z the screen is not updated until after all requested repetitions
Z of a macro have been executed. This can be very unsettling for
Z long running macros since the user may become paranoid about
Z what the macro is doing to his files. By refreshing the screen
Z after each execution, the results are displayed after each exe-
Z cution of the macro, so that the user can follow the macros pro-
Z gress through the file. The tradeoff is that use of the ^XT
Z command signicantly increases macro execution time. When not
ZCONTROL X COMMANDS Page 6-5
Z
Z
Z
Z
Z inside a macro, the ^XT command is simply ignored.
Z
Z
Z NOTE
Z
Z The ^XT command is not a normal EMACS command. There
Z is no command currently defined in the EMACS command
Z set which supplies this function.
Z
Z
Z
Z
Z
Z 6.17 ^X( -- Begin EMACS11 macro collection
Z
Z
Z The ^X( command tells EMACS11 that all following commands
Z until the matching ^X) command are to be collected in a buffer
Z and remembered as a macro. Note that the commands ARE EXECUTED
Z at the same time, so you can see the effects of the macro as you
Z define it. This is very convenient for long complicated macros.
Z Hint: be sure the pointer ends up in a convenient place for
Z macro repetitions. At the current time, macros CANNOT be nest-
Z ed. Nasty things may occur if you try it. Also note that the
Z status line mode word changes to "Learn" while you are inside a
Z macro definition. Some versions of EMACS do this and some
Z don't.
Z
Z
Z
Z 6.18 ^X) -- End EMACS11 macro collection
Z
Z
Z The ^X) command terminates an EMACS11 macro collection. If
Z no macro collection is in progress, the command is ignored.
Z
Z
Z
Z 6.19 ^X* -- View last EMACS11 macro
Z
Z
Z
Z
Z 6.20 ^X= -- Display location information
Z
Z
Z The ^X= command displays information about the current lo-
Z cation of the pointer. At present, it displays the line number
Z that the pointer is located in, and the number of characters to
Z the left of the pointer, in the current line.
Z
Z
Z
ZCONTROL X COMMANDS Page 6-6
Z
Z
Z
Z
Z 6.21 ^X -- Kill back to start of sentence
Z
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 6.22 ^X$ -- Re-execute last TECO command
Z
Z
Z The ^X$ command re-executes the last TECO command defined
Z with the EMACS11 $$ command. It will NOT re-execute the last
Z TECO command executed at the TECO level.
Z
Z
Z
Z
Z
Z
Z CHAPTER 7
Z
Z ESCAPE X COMMANDS
Z
Z
Z
Z 7.1 $XA -- Append marked region to file
Z
Z
Z The $XA command creates a new version of the specified
Z file, transfers all text from the old version to the new ver-
Z sion, and then appends the current marked region to that file
Z before closing it. If the specified file does not exist, the
Z command is ignored.
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 7.2 $XC -- Enter/exit see-all mode
Z
Z
Z See-all mode is a display mode in which ALL characters,
Z both printing and normally non-printing, are displayed on the
Z terminal. The non-printing characters are displayed as special
Z graphics characters. This is very handy for finding imbedding
Z non-printing characters in text files. (Compilers are usually
Z good at that also, but not as nice about it.)
Z
Z
Z
Z 7.3 $XD -- Insert system date
Z
Z
Z The $XD command inserts the current system date at the po-
Z inter location in the form MM-DD-YY. The pointer is left posi-
Z tioned after the inserted date.
Z
Z
Z
Z 7.4 $XI -- Insert a file at pointer
Z
Z
Z The $XI command inserts the specified file at the current
Z pointer location. In order to insure that a memory overflow
Z does not occur it effectively performs a simultaneous ^X^S
Z EMACS11 command, so an output file must be open. If not, the
Z $XI command is simply ignored.
Z
Z
ZESCAPE X COMMANDS Page 7-2
Z
Z
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 7.5 $XL -- Load EMACS11 macro from file
Z
Z
Z The $XL command loads the EMACS11 macro buffer from the
Z specified file.
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 7.6 $XO -- View occurances of string
Z
Z
Z This command will view all lines, from the current pointer
Z location to the end of the text buffer, which contain a specific
Z string. As with other view commands, it is terminated with any
Z single keystroke. If there are no occurances of the specified
Z string, the command is aborted.
Z
Z
Z
Z 7.7 $XP -- Prepend marked region to file
Z
Z
Z The $XP command creates a new version of the specified
Z file, writes out the marked region to that file, and then
Z transfers all text in the old version to the new version. If
Z the specified file does not exist, the command is ignored.
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z 7.8 $XR -- Replace a given string
Z
Z
Z The $XR command prompts for a string, and it replacement.
Z Then, from the current pointer position to the end of the
Z buffer, the string is replaced. The pointer is left after the
Z last replacement made, if any.
Z
Z
Z
ZESCAPE X COMMANDS Page 7-3
Z
Z
Z
Z
Z 7.9 $XS -- Save EMACS11 macro in file
Z
Z
Z The $XS command saves the current EMACS11 macro buffer con-
Z tents in the specified file.
Z
Z
Z
Z 7.10 $XT -- Insert system time
Z
Z
Z The $XT command inserts the current system time into the
Z text buffer in the format HH:MM:SS, where HH is in the range of
Z 0-23, and both MM and SS are in the range of 0-59.
Z
Z
Z
Z 7.11 $XW -- Write marked region to file
Z
Z
Z The $XW command opens a new file with the specified files-
Z pec and then writes out the marked region to it. The file is
Z then closed. This is done independently of any other primary
Z input or primary output files which may be open.
Z
Z
Z *** NOT YET IMPLEMENTED ***
Z
Z
Z
Z
Z
Z
Z CHAPTER 8
Z
Z COMMAND SUMMARY
Z
Z
Z
Z This chapter contains a summary, by logical function, of all
Z commands.
ZCOMMAND SUMMARY Page 8-2
Z
Z
Z
Z
Z Pointer movement cmds:
Z ---------------------
Z
Z
Z ^A => Go to beginning of current line.
Z
Z ^B => Go back one character.
Z
Z ^E => Go to end of line.
Z
Z ^F => Go forward one character.
Z
Z ^N => Go to same place in next line.
Z
Z ^P => Go to same place in previous line.
Z
Z ^V => Move window down.
Z
Z $A => Go backward to start of sentence.
Z [Not yet implemented]
Z
Z $B => Go back one word.
Z
Z $E => Go forward to start of next sentence.
Z [Not yet implemented]
Z
Z $F => Go forward one word.
Z
Z $G => Go to specified line number in current
Z buffer. (precede command with line number
Z as $<digits>)
Z
Z $V => Move window up.
Z
Z $[ => Go to beginning of paragraph.
Z [Not yet implemented]
Z
Z $] => Go to end of paragraph.
Z [Not yet implemented]
Z
Z $< => Go to beginning of buffer.
Z
Z $> => Go to end of buffer.
Z
Z ^X^X => Exchange mark and pointer
Z
Z ^X= => Displays information about current position in
Z buffer.
ZCOMMAND SUMMARY Page 8-3
Z
Z
Z
Z
Z Buffer page commands
Z --------------------
Z
Z
Z $N => Write current buffer to output file, clear
Z buffer, and read in next page from input file.
Z
Z ^XA => Append next page to buffer. Inserts form
Z feed if last read found a form feed.
Z
Z ^X^N => Write all text in buffer above the current
Z window to the output file and read in next
Z page from input file. (Useful for editing
Z near page boundries.)
Z
Z ^XN => Same as ^X ^N but does not read in next
Z page. Useful for making some room in the
Z buffer.
ZCOMMAND SUMMARY Page 8-4
Z
Z
Z
Z
Z Search commands:
Z ----------------
Z
Z
Z ^S => Incremental forward search. Searches for
Z string as each character is input. Can only
Z be exited with:
Z
Z (1) An escape to signify stay at current
Z location after string found.
Z
Z (2) ^G to abort and return to original
Z location.
Z
Z Notes:
Z
Z 1. "DELETE" removes characters from
Z search string.
Z 2. When search string is null (empty) a 2nd
Z ^S within a search operation uses the most
Z recent successful search string.
Z 3. A 2nd ^S at any other time within a
Z search operation finds the next occurance of
Z the current search string.
Z
Z ^R => Incremental reverse search. Same as ^S
Z except search progresses backwards. Leaves
Z pointer at beginning of string found.
Z
Z [Not yet implemented]
Z
Z
Z containing a specified string.
ZCOMMAND SUMMARY Page 8-5
Z
Z
Z
Z
Z Kill and delete commands:
Z -------------------------
Z
Z Kill operations either initialize the kill buffer with the
Z removed text, or append the removed text to the current kill
Z buffer contents, depending upon whether or not the pointer has
Z moved since the last kill operation. (appends if hasn't moved)
Z Delete operations remove the affected text and discard it.
Z
Z ^D => Delete next character.
Z
Z ^K => Kill to end of line / kill line
Z terminator.
Z
Z ^W => Kill marked region.
Z
Z ^Y => Yank back last kill. (insert text stored
Z in kill buffer)
Z
Z $D => Delete next word. [Not yet implemented]
Z
Z $K => Kill to end of sentence.
Z [Not yet implemented]
Z
Z $W => Copy region between mark and pointer to
Z kill buffer, superceding existing text.
Z
Z $Y => If used immediately after ^Y replaces
Z the text just "unkilled" with the text
Z that was the 2nd most recent victim.
Z [Not yet implemented]
Z
Z $^Y => Yanks (pulls) last defined TECO command
Z into text buffer.
Z
Z $^W => Append next kill to text already in kill
Z buffer (if any). This command is nullified
Z by any pointer movement or text insertion.
Z
Z ^X^O => Delete blank lines from current pointer to
Z next non-blank line.
Z [Not yet implemented]
Z
Z ^X => Kill backwards to start of sentence.
Z [Not yet implemented]
Z
Z "DELETE" => Delete character before pointer.
Z KEY
ZCOMMAND SUMMARY Page 8-6
Z
Z
Z
Z
Z TECO related cmds:
Z ------------------
Z
Z
Z $$ => Enter TECO commands. Terminate with
Z double $ or abort with ^G.
Z
Z MI$$ => Restart EMACS from TECO level.
Z
Z $^Y => Insert last defined TECO command into
Z
Z $Z => Return to TECO level. (can restart
Z EMACS with MI$$
Z
Z $* => View last TECO command
Z
Z ^X$ => Re-execute TECO command most recently entered
Z with $$ command.
Z
ZCOMMAND SUMMARY Page 8-7
Z
Z
Z
Z
Z Miscellaneous cmds:
Z -------------------
Z
Z ^C => Return to TECO level. (can restart EMACS
Z with MI$$)
Z
Z ^G => *** THIS IS THE PANIC BUTTON ***
Z Gets you out of almost anything as long as
Z EMACS is not "hung".
Z
Z ^O => Open blank line for insertion.
Z
Z ^Q => Use next character as text. (inserts cmds
Z as text)
Z
Z $S => Center text in current line. Uses a default
Z of 80 characters per line or can be preceded
Z with an argument of form $<digits> which
Z defines number of characters in line.
Z [Not yet implemented]
Z
Z $T => Exchange words before and after pointer
Z (does nothing if pointer is inside a word).
Z [Not yet implemented]
Z
Z $% => "Query replace" --- Prompt for search string
Z and its replacement, then from current
Z pointer to end of file, find string and query
Z user as follows:
Z (1) Space bar: go ahead and replace this
Z occurance.
Z (3) Any other key: don't replace, find next.
Z
Z ^XI => Insert file at current pointer position.
Z First executes a ^X^N to make room in the
Z [Not yet implemented]
Z
Z $XC => Enter/exit "see-all" mode (shows ALL char
Z in a file, even non-printing ones, with
Z special graphics)
Z
Z $XD => Insert current date in text buffer in form
Z MM-DD-YR
Z
Z $XR => "Replace" --- Prompt for search string and
Z its replacement, then from current pointer
Z to end of buffer, replace all occurances.
Z
ZCOMMAND SUMMARY Page 8-8
Z
Z
Z
Z
Z Miscellaneous cmds (CONT.):
Z ---------------------------
Z
Z
Z $XT => Insert current time in text buffer in form
Z HH:MM:SS
Z
Z ^_ => "Help on tap" --- Interactive help processor.
Z [Not yet implemented]
Z
Z $? => "Describe" --- Describe function of next
Z command without executing it.
Z [Not yet implemented]
ZCOMMAND SUMMARY Page 8-9
Z
Z
Z
Z
Z File related commands:
Z ----------------------
Z
Z
Z ^X^R => "Read file" Reads in first page of a
Z given file after closing the currently
Z
Z ^X^S => "Save file" Writes buffer and rest of
Z currently open input file to currently
Z open output file, closes and reopens
Z file, and reads first page back in.
Z
Z ^X^V => "Visit file" Opens a given file for
Z both input and output after closing
Z the currently open output file (if any).
Z
Z ^X^W => "Write file" Sets output file to that
Z specified, after closing any currently
Z open output file (if any).
Z
Z ^Z^F => "Get file name" Insert most recently
Z specified output filename into text
Z buffer.
Z
Z ^Z^Z => "Close files and exit" Close all
Z files and exit EMACS.
ZCOMMAND SUMMARY Page 8-10
Z
Z
Z
Z
Z Keyboard macro cmds:
Z --------------------
Z
Z
Z ^X( => Start EMACS macro collection.
Z
Z ^X) => Terminate EMACS macro collection.
Z
Z ^X* => "View last macro" --- Clears screen
Z and displays last defined EMACS macro.
Z Pressing any key returns to edit mode.
Z Note some "commands" such as CRLF
Z are displayed in image mode. This is
Z built into TECO.
Z
Z ^XT => "Toggle update" --- Forces screen update
Z at current command inside a macro. Useful
Z for verifying macro is executing properly
Z by viewing results at specific
Z points, buts slows down execution
Z considerably.
Z
Z ^XE => Execute most recently collected EMACS macro.
Z
Z ^XQ => When used inside a macro halts execution
Z and waits for
Z
Z (1) press space bar to continue with
Z (2) use ^G to abort this macro and all
Z macro repeats pending.
Z (3) press any other key to exit current
Z macro, without effecting any pending
Z macro repeats.
Z
Z $XS => "Save macro" --- Saves current EMACS macro
Z in a specified file. Prompts for file name.
Z [Not yet implemented]
Z
Z $XL => "Load macro" --- Loads EMACS macro from a
Z specified file. Prompts for file name.
Z [Not yet implemented]
Z
ZCOMMAND SUMMARY Page 8-11
Z
Z
Z
Z
Z The "mark" and region cmds:
Z ---------------------------
Z
Z
Z $H => Mark paragraph. Puts mark at beginning of
Z paragraph, pointer at end.
Z [Not yet implemented]
Z
Z ^X^P => Mark page --- Put mark at top of page,
Z defined to be immediately after first form
Z feed backwards from current pointer, or top
Z of buffer, whichever is first.
Z Put pointer at bottom of page, defined to
Z be immediately after next form feed forwards
Z from current pointer, or bottom of buffer,
Z whichever is first.
Z [Not yet implemented]
Z
Z ^X^X => Exchange mark and pointer; useful to verify
Z where current region is.
Z
Z $@ => Set mark at current pointer (is EMACS ^@).
Z
Z $XA => Append currently defined region to an
Z existing file. Prompts for file name.
Z [Not yet implemented]
Z
Z $XP => Prepend currently defined region to an
Z existing file. Prompts for file name.
Z [Not yet implemented]
Z
Z $XW => Write currently defined region to a new
Z file. Prompts for file name.
Z [Not yet implemented]
Z
ZCOMMAND SUMMARY Page 8-12
Z
Z
Z
Z
Z Case conversion cmds:
Z ---------------------
Z
Z
Z $C => Capitalize next word.
Z [Not yet implemented]
Z
Z $L => Lower case next word.
Z [Not yet implemented]
Z
Z $U => Upper case next word.
Z [Not yet implemented]
Z
Z ^X^L => Lower case marked region.
Z
Z ^X^U => Upper case marked region.
ZCOMMAND SUMMARY Page 8-13
Z
Z
Z
Z
Z Misc. notes:
Z ------------
Z
Z 1. Most commands can be preceded with a repeat count of the
Z form $<digits>. Even "commands" which are self-insertions,
Z I.E. $20H inserts 20 "H"s in text buffer.
Z
Z 2. Commands which "view information" (such as $ X O or ^X =)
Z wait for the user to press any key and then return the
Z screen to its normal window mode into the text buffer. The
Z character input by the single key stroke is discarded. The
Z text buffer is not affected by the view operation.
STUNKYFLUFF
set `sum emacs.doc`
if test 43879 != $1
then
echo emacs.doc: Checksum error. Is: $1, should be: 43879.
fi
#
#
echo Extracting emacs.src:
sed 's/^Z//' >emacs.src <<\STUNKYFLUFF
Z EMACS.SRC --- EMACS command compatable editor for
Z PDP-11 and VAX systems which have
Z TECO, version 35 or later.
Z
Z Written by: Fred Fish
Z
Z Last modified: 16:41:18 06-17-82 by Fred Fish
Z
Z
Z Q register usage:
Z
Z Note: For each Q register number there are TWO
Z storage areas, one for numeric data and one for
Z text. They are refered to here as QnN and
Z QnT respectively, where "n" is the Q register
Z number.
Z
Z In general, low alphabetic Q registers are
Z used for local storage and high alphabetic
Z Q registers are used for global storage and
Z macros.
Z
Z
Z QMN => Marked location pointer. Contains numeric
Z pointer to last character location at which
Z a mark was set.
Z
Z QNN => Current pointer save.
Z
Z QON => Repeat count. For commands which support using
Z a repeat count preceding the command of the
Z form <ESC><digits>, the count is stored in
Z this register.
Z
Z QQN => Abort back to highest level if set to 0
Z
Z QWN => Last column number of a ^N or ^P command
Z
Z QTN => Current command character ascii value
Z
Z QXN => Macro repeat count
Z
Z QYN => Emacs macro command fetch down counter
Z
Z QZN => Control flags word
Z
Z QHT => Macro to move cursor to a given line,
Z erase that line, leave cursor at beginning
Z of that line, and make TECO forget it did
Z anything to screen.
Z
Z QIT => Contains most of the run time macros which
Z make up the specific commands for EMACS.
Z Overwrite this and you've wiped out the
Z editor!
Z
Z QKT => Primary input file full file-spec
Z
Z QLT => Search prompt.
Z
Z QMT => Contains terminal image mode macro.
Z
Z QNT => Contains string input macro
Z
Z QOT => Editor status line update macro
Z
Z QPT => Macro to get next character from terminal
Z
Z QQT => TECO command minibuffer.
Z
Z QRT => Macro to find screen line number as num arg
Z
Z QST => String fetched by prompt/string input macro
Z
Z QTT => Output filespec for currently open output file
Z
Z QUT => Macro to allow option of saving modified
Z buffer when no output file is open.
Z
Z QVT => Last successful EMACS search string
Z
Z QWT => Emacs macro command string
Z
Z QXT => Macro to fetch next command from terminal
Z stream or EMACS macro stream (calls QPT macro)
Z
Z QYT => Kill buffer 2 (contains next most recent kill)
Z
Z QZT => Kill buffer 1 (contains most recent kill)
Z
Z LABEL POINTS:
Z
Z A =>
Z
Z B =>
Z
Z F =>
Z
Z M => ^N and ^P common processing point.
Z
Z QR => Query replace / replace common processing
Z
Z S => Search execution start point
Z
Z X => Start point for ^X macros.
Z
Z $ => Start point for ESC- macros.
Z
Z $X => Start point for ESC-X- macros.
Z
Z Editor status word (QZN) bits:
Z Meaning if bit set
Z
Z 32 => Enable macro collection
Z
Z 16 => Inhibit screen update during cmd input
Z
Z 8 => Primary output stream file is open
Z
Z 4 => Primary input stream file is open
Z
Z 2 => Current primary file has been modified
Z
Z 1 => Append next kill to kill buffer 1
Z
Z!* START !
Z
ZEI !*Close off the input file !
ZHK !*Purge the buffer !
ZGZ !*Pull in the command line from QZT !
ZJ !*Jump back to beginning !
Z^D
Z128,0ET !*Reset abort on error bit !
Z-1,5:W !*Set terminal to hold whole screen !
Z^[ !*Discard numeric argument returned by :W cmd !
Z22,2:W !*Protect the bottom 2 status lines from update !
Z^[ !*Discard numeric argument returned by :W cmd !
Z
Z!* Preload QHT with macro to erase a given line on screen, leave cursor !
Z!* at that line, and make TECO forget it did anything to the terminal. !
Z
Z@^UH~ !* QHT <= macro between the "~" s !
Z [A !* Push QAT and QAN onto Q register stack !
Z UA !* QAN <= input line number !
Z 0,1ET !* Enable image mode output !
Z 27^T !* Send escape to terminal !
Z ^^[^T
ZQA\
Z^YT
Z^YK
Z^^H^T
Z 1,0ET !* Disable image mode output !
Z ^^KMM !* Kill the current lines contents !
Z 32768W !* Make TECO forget we messed with screen !
Z ]A !* Pop QAT and QAN off the Q register stack !
Z~ !* End of macro load into QHT !
Z
Z!*Preload QMT with macro to output characters to terminal in image mode !
Z!*Q registers affected by an MM: QAN !
Z
Z@^UM~ !*QMT <= macro between "~" s !
Z UA !*QAN <= macro's argument (char to output) !
Z 0,1ET !*Set image mode bit !
Z 27^T !*Send ESC to terminal for special sequence !
Z^^[^T
Z QA^T !*Send the saved character to terminal !
Z 1,0ET !*Reset back to non image mode !
Z~ !*End of image mode macro load in QMT !
Z
Z!*Preload QUT with macro to optionally save a modified buffer !
Z!*Q register affected by MU: QLT, QAN, QST, QAN, QTN, QQN, QYN, QXN, !
Z!*QWT !
Z
Z@^UU~ !*QUT <= all characters between the "~" s !
Z < !*Begin loop to save buffer !
Z @^UL%Save% !*QLT <= "Save" !
Z @32:^UL%% !*QLT <= "Save " !
Z @:^UL%modified% !*QLT <= "Save modified" !
Z @32:^UL%% !*QLT <= "Save modified " !
Z @:^UL%buffer% !*QLT <= "Save modified buffer?" !
Z @32:^UL%% !*QLT <= "Save modified buffer? " !
Z @:^UL%(Y/N)% !*QLT <= "Save modified buffer? (Y/N)" !
Z MN !*Get response from user !
Z UA !*Save returned success/abort code !
Z QA; !*Abort function if string fetch failed !
Z GS !*Get the response string !
Z -1A-^^N"E !*If response is "N" then !
Z -1UA !*QAN <= code for successful execution !
Z HK !*Purge the current buffer !
Z 0; !*Abort iteration and go to terminal code !
Z ' !*End of "N" processing !
Z -1A-^^Y"E !*If response is "Y" then !
Z ^YK !*Delete response from text buffer !
Z @^UL%File:% !*QLT <= "File:" !
Z @32:^UL%% !*QLT <= "File: " !
Z MN !*Get response from user !
Z UA !*Save returned success/abort code !
Z QA; !*Abort function if string fetch failed !
Z @^UA%@EW/% !*QAT <= "@EW/" !
Z GS !*Pull file name string into buffer !
Z ^Y:XA !*QAT <= "@EW/<filename>" !
Z ^YK !*Delete from buffer in case we bomb !
Z @:^UA%/% !*QAT <= "@EW/<filename>/" !
Z MA !*Open the file to save current buffer in !
Z EC !*Write out buffer and close file !
Z HK !*Purge the buffer !
Z 0; !*Abort iteration and go to terminal code !
Z ' !*End of "Y" processing !
Z ^YK !*Delete previous response from text buffer !
Z > !*End loop to save buffer !
ZQA !*Return success code !
Z~
Z
Z!*Preload QPT with macro to get next char from terminal stream !
Z!*Q registers affected by MP: QTN, QYN, QXN, QQN !
Z
Z@^UP~ !*QPT <= everything between "~" s !
Z 0,32ET !*Set read with no wait for pending commands !
Z ^TUT !*QTN <= next pending command (-1 if none) !
Z QT"L !*If no pending commands then !
Z 32,0ET !*Reset read with no wait bit to get user input !
Z 16&QZ"E !*If screen update is not inhibited then !
Z -1W !*Update the terminal screen !
Z ' !*End of screen update test !
Z ^TUT !*QTN <= next command from user !
Z ' !*End of no pending commands execution !
Z QT-7"E !*If input from terminal is a ^G then !
Z 0UY !*Reset counter to exit current macro !
Z 0UX !*Reset counter to exit pending macros !
Z 0UQ !*Reset word to cause abort to highest level !
Z ' !*End of ^G from terminal processing !
Z QQ !*Return ^G abort code as numerical argument !
Z~ !*End of QPT macro load !
Z
Z!* Preload QOT with macro to update editor status line (line 23) !
Z
Z@^UO~ !* QOT <= all characters between the "~" s !
Z 23MH !* Go ready the editor status line !
Z @^A%EMACS% !* First entry on editor status line !
Z 32^T !* Send blank to terminal !
Z @^A%Ver% !* Second entry on editor status line !
Z 32^T !* Send blank to terminal !
Z @^A%1.4% !* Third entry on editor status line !
Z 32^T !* Send blank to terminal !
Z 32^T !* Send blank to terminal !
Z QZ&32"N !* If LEARN mode is enabled then !
Z @^A%(Learn)% !* Show learn prompt !
Z | !* Else if not learn mode !
Z @^A%(Fundamental)% !* Show fundamental mode !
Z ' !* End of mode entry on status line !
Z 32^T !* Send blank to terminal !
Z 32^T !* Send blank to terminal !
Z 12&QZ"N !* If a primary file is open then !
Z 32^T !* Send another blank to terminal !
Z @^A%File:% !* Filespec is last entry on status line !
Z 8&QZ"N !* If primary output file stream is open then !
Z :GT !* Get the output file spec !
Z | !* Else input file must be open !
Z :GK !* Get input file spec !
Z ' !* End of file spec test !
Z ' !* End of filespec insertion !
Z 32768W !* Forget we did anything to screen !
Z~ !* End of status line update macro !
Z
Z!*Preload QXT with macro to fetch next command character !
Z!*Q registers affected by MX: QTN, QYN, QXN, QQN, QWT, !
Z
Z@^UX~ !*QXT <= all characters between the "~" s !
Z QY"E !*If no EMACS macro commands to execute then !
Z MP !*Get next command from command stream !
Z 32&QZ"N !*If learn mode is enabled then !
Z @QT:^UW%% !*Append the command to the macro buffer !
Z ' !*End of macro collection test !
Z ' !*End of no EMACS macro commands execution !
Z QY"L !*If EMACS macro commands to execute then !
Z GW !*Pull macro commands into buffer !
Z QYAUT !*QTN <= EMACS command extracted from string !
Z ^YK !*Kill string in buffer !
Z %Y !*Increment macro command counter !
Z "E !*If was last EMACS macro command then !
Z %X !*Increment macro repeat counter !
Z "L !*If more repeat loops to be done then !
Z -:QWUY !*Restore command counter contents !
Z ' !*End of macro command counter restore !
Z ' !*End of last repeat loop test !
Z ' !*End of EMACS macro command fetch !
Z QQ !*Return abort code as argument !
Z~ !*End of QXT macro load !
Z
Z!*Preload QNT with macro to input strings !
Z!*Q registers affected by MN: QST, QAN, QTN, QQN, QYN, QXN, QWT !
Z
Z@^UN~ !*QNT <= All characters between the "~" s !
Z 0,0XS !*QST <= null string (clear it) !
Z 24MH !*Go ready the prompt line !
Z :GL !*Display prompt in QLT on terminal !
Z 16#QZUZ !*Set screen update inhibit bit !
Z -1UA !*QAN <= no exit on esc value !
Z < !*Begin infinite iteration to input string !
Z MX !*QTN <= next character from command stream !
Z ; !*If input was a ^G then abort function !
Z QT-10"N !*If input was not line feed then !
Z QT^T !*Echo character to terminal !
Z ' !*End of scroll producing character trap !
Z @QT:^US%% !*Append input character to QST string !
Z QT-10"E !*If input was LF character then !
Z 0; !*Exit the input iteration !
Z ' !*End of LF execution !
Z QT-127"E !*If input was a "DELETE" character !
Z GS !*Pull string into text buffer !
Z ^Y-1XS !*Push back into QST minus "DELETE" character !
Z :QS"N !*If not all characters deleted !
Z ^Y-2XS !*Push back string minus char and "DELETE" !
Z ' !*End of non-null string character delete !
Z ^YK !*Delete from text buffer !
Z 24MH !*Erase old prompt string !
Z :GL !*Display prompt string !
Z :GS !*Display current input string !
Z -1UA !*QAN <= no double esc flag !
Z F< !*Go get the next input !
Z ' !*End of DELETE character processing !
Z QT-27"E !*If input was an ESC character then !
Z QA; !*Exit input iteration if double ESC set !
Z 0UA !*Set to cause exit on next ESC !
Z F< !*Go get the next input !
Z ' !*End of ESC input processing !
Z -1UA !*QAN <= no double esc flag !
Z > !*End of infinite iteration to input characters !
Z 24MH !*Erase the prompt line !
Z QQ"S !*If successful string fetch then !
Z GS !*Pull final string into text buffer !
Z ^Y-2XS !*Strip off $$ or CRLF terminator !
Z ^YK !*Delete from text buffer !
Z ' !*End of terminator removal !
Z 16^_&QZUZ !*Reset screen update inhibit bit !
Z QQ !*Return success or failure code !
Z~ !*End of string input macro !
Z
Z!*LOAD TEXT Q REGISTER I WITH INFINITE ITERATION WHICH IS THE "ROOT" !
Z!*OF THE EXECUTION COMMANDS !
Z
Z@^UI~ !*QUI <= main editor macro between "~" char !
Z ^D !*Set numeric radix to decimal !
Z 225,30ET !*No abort; attached; wait; not-image mode !
Z !*Cancel ^O; no-echo, lower-case; scope !
Z 16ED !*Yank prot; ^ means ctrl; srch fail anchor !
Z 16^_&QZUZ !*Insure terminal update inhibit bit gets reset !
Z ^^HMM !*Send cursor home !
Z ^^JMM !*Clear entire screen !
Z MO !*Update the status line !
Z 32^T !*Force TECO to update screen on next -1W cmd !
Z < !*Begin edit execution macro !
Z !A! !*Label point !
Z 0UW !*QWN <= 0 (Initialize up/down line loc save) !
Z !B! !*Label point !
Z -1UQ !*QQN <= success (reset abort value) !
Z 1UO !*QO <= 1 (Initialize repeat count) !
Z 16^_&QZUZ !*Reset screen update inhibit bit !
Z MX !*Get the next EMACS command !
Z
Z!*BEGIN EXECUTION OF THE CURRENT COMMAND !
Z
Z !V! !*Start execution of command !
Z
Z QT-8"E !*FOR VAX !
Z 24UT !*MAP ^H to ^X !
Z '
Z
Z QT-20"E !*FOR VAX !
Z 19UT !*MAP ^T to ^S !
Z '
Z
Z QT-21"E !*FOR VAX !
Z 25UT !*MAP ^U to ^Y !
Z '
Z
Z QT at O/AI,CA,CB,CC,CD,CE,CF,CG,AI,AI,AI,CK,CL,AI,CN,CO,CP,CQ,CR,CS/
Z QT-20 at O/AI,AI,CV,CW,CX,CY,CZ,$/
Z
Z QT-127"E !*If command is a "delete" character then !
Z QO< !*Do by number of repeat counts !
Z -.; !*Abort iteration if at buffer beginning !
Z -D !*Delete back one character !
Z > !*End of repeat iteration !
Z 1^_&QZ#2UZ !*No kill append; buffer modified !
Z F< !**** Go get another user command !
Z ' !*End of "delete" char execution !
Z
Z !AI! !*Auto insert the cmd char as text !
Z QO<QT at I%%> !*Do an auto insert !
Z 1^_&QZ#2UZ !*No kill append; buffer modified !
Z F< !**** Go get next command !
Z
Z !CA! !*Begin ^A execution !
Z 0L !*Set pointer to beginning of current line !
Z 1^_&QZUZ !*No kill append; !
Z F< !**** Go get another user command !
Z
Z !CB! !*Begin ^B execution !
Z QO< !*Repeat by repeat count !
Z -.; !*Exit iteration if at buffer beginning !
Z R !*Backup one character !
Z > !*End of repeat iteration !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get another user command !
Z
Z !CC! !*Begin ^C execution !
Z 0; !*Return to teco level (can restart with MI) !
Z
Z !CD! !*Begin ^D execution !
Z QO< !*Repeat by repeat count in QON !
Z .-Z; !*Exit iteration if at buffer end !
Z D !*Delete one character !
Z > !*End of iteration !
Z 1^_&QZ#2UZ !*No kill append; buffer modified !
Z F< !**** Go get next user command !
Z
Z !CE! !*Begin ^E execution !
Z L !*Go to end of current line !
Z ."N !*If not at beginning of buffer then !
Z -1A-10"E !*If previous character is a LF then !
Z 2R !*Back up over CRLF characters !
Z ' !*End of CRLF backover operation !
Z ' !*End of buffer beginning check !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get next user command !
Z
Z !CF! !*Begin ^F execution !
Z QO< !*Do by repeat count !
Z .-Z; !*Exit iteration if at buffer end !
Z C !*Go forward one character !
Z > !*End of iteration !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get next user command !
Z
Z !CG! !*Begin ^G execution !
Z 0UX !*Abort any pending macro repeats !
Z 0UY !*Abort any pending commands in a current macro !
Z 16#32^_&QZUZ !*Reset screen inhibit and macro collection bits!
Z 7MM !*Ring terminal's bell (no dirty thoughts now!) !
Z MO !*Refresh status line !
Z F< !**** Go get next user command !
Z
Z !CK! !*Begin ^K execution !
Z QO< !*Do the number of kills specified by repeat !
Z .-Z; !*If at end of buffer then exit kill !
Z 0AUA !*QAN <= ascii code of next char in buffer !
Z QA-13"E !*If it is a CR then kill the CRLF only !
Z QZ&1"N !*If append bit is set then append kill !
Z .,.+2:XZ !*Append CRLF to kill buffer 1 !
Z | !*Else if append bit is not set then !
Z GZ !*Pull kill buffer 1 contents into text buffer !
Z ^YXY !*QTY <= second most recent kill !
Z ^YK !*Delete second most recent kill from text buffr!
Z .,.+2XZ !*QTZ <= CRLF from end of line !
Z QZ#1UZ !*Set the append bit for further kills !
Z ' !*End of CRLF kill in non-append mode !
Z 2D !*Delete CRLF from buffer !
Z | !*Else if not at end of line then !
Z .-Z; !*Exit the kill command if at buffer end !
Z .UA !*Save current pointer position !
Z L !*Go to end of current line (after CRLF) !
Z -.; !*If at top of buffer then exit kill command !
Z -1A-10"E !*If previous char is LF then !
Z 2R !*Back up over CRLF !
Z ' !*End of backup check !
Z QZ&1"N !*If append bit is set then append kill !
Z QA,.:XZ !*Append kill to buffer 1 !
Z | !*Else if append bit is not set then !
Z GZ !*Pull kill buffer 1 contents into text buffer !
Z ^YXY !*QTY <= second most recent kill !
Z ^YK !*Delete second most recent kill from text buffr!
Z QA,.XZ !*QTZ <= current line up to CRLF !
Z QZ#1UZ !*Set the append bit for further kills !
Z ' !*End of non-EOL non-append !
Z QA,.K !*Kill the line up to CRLF !
Z ' !*End of non-EOL kill !
Z > !*End of kill iteration !
Z 2#QZUZ !*Set buffer modified bit !
Z F< !**** Go get next command !
Z
Z !CL! !*Begin ^L execution !
Z ^^HMM !*Send cursor to home position !
Z ^^JMM !*Erase the entire screen (including last lines)!
Z 0,5:W !*Turn off hold mode temporarily !
Z ^[ !*Discard numeric argument returned by :W cmd !
Z -1W !*Update the screen !
Z -1,5:W !*Turn hold mode back on !
Z MO !*Put status line back in !
Z F< !**** Go get next command !
Z
Z !CN! !*Begin ^N execution !
Z 1UA !*Set up for down one line !
Z @O!M! !**** Go do the move !
Z
Z !CO! !*Begin ^O execution !
Z QO< !*Repeat by count !
Z 13 at I%% !*Insert a CR character !
Z 10 at I%% !*Insert a LF character !
Z 2R !*Back up over the CRLF !
Z > !*End of repeat loop !
Z 1^_&QZ#2UZ !*No kill append; buffer modified !
Z F< !**** Go get next command !
Z
Z !CP! !*Begin ^P execution !
Z -1UA !*Set up for UP one line !
Z !M! !*^N and ^P move start label point !
Z QO*QAUO !*QON <= Number of lines to jump !
Z QW"E !*If position # unknown from previous then !
Z 0UD !*QD <= zero !
Z .UA !*QA <= current pointer loc !
Z 0L !*Go to beginning of current line !
Z QA-.%W< !*Repeat for # of char to original pointer loc !
Z 0A-32"L !*If next buffer char is not printable char !
Z 0A-27"N !*If next buffer char is not ESC then !
Z 0A-9"E !*If next bffer char is a tab then !
Z 6-(QD&7)%W^[ !* !
Z -2UD !* !
Z ' !* !
Z %D !*Increment char counter !
Z 1%W !*Increment char loc for the "^" char !
Z ' !*End of non-ESC test !
Z ' !*End of non-printable test !
Z C !*Move over one character !
Z %D !*Increment character counter !
Z > !*End of char location in line computation !
Z ' !*End of unknown location processing !
Z QOL !*Go to start of destination line !
Z -QWUC !*Initialize pointer location counter !
Z 0UD !*Clear character counter !
Z QW< !*Begin iteration to go to character location !
Z .-Z; !*If reached end of buffer then exit iteration !
Z 0A-32"L !*If next char is non-printable char then !
Z 0A-13"E !*If next char is also a CR then !
Z 0; !*Exit iteration; reached end of line !
Z ' !*End of CR processing !
Z 0A-27"N !*If next char is NOT an ESC then !
Z 0A-9"E !*If next char is a TAB then !
Z 6-(QD&7)%C^[!* !
Z -2UD !* !
Z ' !* !
Z %D !*Increment character counter !
Z 1%C !*Increment location counter !
Z ' !*End of non-ESC non-printable char processing !
Z ' !*End of non-printable char processing !
Z C !*Move over one character in line !
Z %D !*Increment character counter !
Z 1%C !*Increment location counter !
Z "G !*If we over ran the location then !
Z R !*Backup one character !
Z ' !*End of over run correction !
Z QC; !*If have reached location then exit iteration !
Z > !*End of new line move iteration !
Z 1^_&QZUZ !*No kill append !
Z @O!B! !**** Go get next command !
Z
Z !CQ! !*Begin ^Q execution !
Z MX !*Get the next input character !
Z ^[ !*Discard any returned numeric value !
Z QO< !*Repeat by count !
Z QT at I%% !*Insert the character !
Z > !*End of repeat loop !
Z 1^_&QZ#2UZ !*No append of next kill; buffer modified !
Z F< !**** Go get next command !
Z
Z !CS! !*Begin ^R or ^S execution !
Z QT-18"E !*If command is ^R then !
Z -QOUO !*Reverse search count !
Z ' !*End of search count negation for ^R command !
Z .UE !*QEN <= original pointer position !
Z 0,0XA !*QAT <= null string (initialize search string) !
Z < !*Begin infinite search iteration loop !
Z MX !*Get next command from command stream !
Z ^[ !*Discard any returned numeric value !
Z QT-7"E !*If command is ^G then !
Z QEJ !*Jump back to original pointer location !
Z 24MH !*Flush the current prompt line !
Z 0; !*Exit the search iteration !
Z ' !*End of ^G processing inside ^S loop !
Z QT-18"E !*If input char is a ^R then !
Z :QA"E !*If search string is null then !
Z GV !*Pull previous successful search string in !
Z ^YXA !*QAT <= previous search string !
Z ^YK !*Delete string from text buffer !
Z @O!S! !*Go search for new string !
Z | !*Else if string is not null then !
Z .UF !*QFN <= last successful search pointer loc !
Z @O!S2! !*Go do search but start from current location !
Z ' !*End of non-null ^R processing !
Z ' !*End of ^R processing inside ^S loop !
Z QT-19"E !*If input char is a ^S then !
Z :QA"E !*If search string is null then !
Z GV !*Pull previous successful search string in !
Z ^YXA !*QAT <= previous search string !
Z ^YK !*Delete string from text buffer !
Z @O!S! !*Go search for new string !
Z | !*Else if string is not null then !
Z .UF !*QFN <= last successful search pointer loc !
Z @O!S2! !*Go do search but start from current location !
Z ' !*End of non-null ^S processing !
Z ' !*End of ^S processing inside ^S loop !
Z QT-27"E !*If input char is ESC then !
Z 0; !*Exit search loop !
Z ' !*End of ESC processing inside ^S loop !
Z QT-127"E !*If input is DELETE char then !
Z :QA"N !*If search string is not null then !
Z GA !*Pull string into text buffer !
Z ^Y-1XA !*QAT <= truncated search string !
Z ^YK !*Kill search string in text buffer !
Z 24MH !*Flush the current prompt line !
Z ' !*End of non-null DELETE processing !
Z @O!S! !*Jump to search begin point !
Z ' !*End of DELETE char processing !
Z @QT:^UA%% !*Append input character to QAT !
Z !S! !*Search label point !
Z .UF !*QFN <= last successful search pointer loc !
Z QEJ !*Start search from original location !
Z !S2! !*Label point for search starting from current !
Z 16^_&QZUZ !*Reset screen update inhibit bit !
Z QO:@S%^EQA% !*Search for occurance specified by QON !
Z "U !*If search was not successful then !
Z QFJ !*Go back to last successful location !
Z 24MH !*Go ready the prompt line !
Z @^UB%Not% !*QBT <= "Not" !
Z @32:^UB%% !*QBT <= "Not " !
Z @:^UB%Found:% !*QBT <= "Not Found:" !
Z @32:^UB%% !*QBT <= "Not Found: " !
Z :GB !*Show "Not Found: " to user !
Z :GA !*Show search string to user !
Z 32768W !*Tell TECO to forget we messed with screen !
Z QY"N !*If inside an EMACS macro then !
Z 0UX !*Flush macro repeat count to abort macros !
Z 0UY !*Abort any commands left in the current macro !
Z 24MH !*Flush the prompt line !
Z 0; !*Exit the search iteration !
Z | !*Else if not inside macro !
Z 16#QZUZ !*Set terminal update inhibit bit !
Z ' !*End of EMACS macro test !
Z | !*Else if the search was successful then !
Z QO"L !*If search is reverse then !
Z .+^SJ !*Jump to beginning of string !
Z ' !*End of reverse search pointer adjustment !
Z GA !*Get the successful search string !
Z ^YXV !*QVT <= most recent successful search string !
Z ^YK !*Delete string from text buffer !
Z 1^_&QZUZ !*Reset append next kill bit !
Z ' !*End of search success test !
Z > !*End of search loop !
Z 16^_&QZUZ !*Insure terminal update inhibit gets reset !
Z QE-."N !*If final position is not same as initial then !
Z 1^_&QZUZ !*Reset append next kill bit !
Z ' !*End of pointer movement test !
Z F< !**** Go get next command !
Z
Z !CV! !*Begin ^V execution !
Z 20*QOL !*Jump down that many windows !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get next command !
Z
Z !CW! !*Begin ^W execution !
Z QZ&1"N !*If append mode then !
Z QM,.:XZ !*Append the marked region to kill buffer 1 !
Z ' !*End of append !
Z QZ&1"E !*If non-append mode then !
Z GZ !*Pull kill buffer 1 contents into text buffer !
Z ^YXY !*QTY <= second most recent kill !
Z ^YK !*Delete second most recent kill from text buffr!
Z QM,.XZ !*QZT <= Currently marked region !
Z QZ#1UZ !*Set append bit in QNZ !
Z ' !*End of non append kill save !
Z QM,.K !*Kill from last mark to current point !
Z 2#QZUZ !*Mark buffer modified !
Z F< !**** Go get next command !
Z
Z !CY! !*Begin ^Y execution !
Z :QZ"N !*If kill buffer length is not zero then !
Z QO<GZ> !*Get current kill buffer 1 contents !
Z 1^_&QZ#2UZ !*No append on next kill; buffer modified !
Z ' !*End of unkill operation !
Z F< !**** Go get next command !
Z
Z
Z!*ESC COMMAND MACROS START HERE !
Z
Z !$! !*Begin input of 2nd char in 2 char cmd !
Z MX !*Get 2nd char from user !
Z
Z ^[ !*Discard any returned numeric value !
Z
Z QT-7"E !*If command is an ESC-^G then !
Z F< !**** Go get next command !
Z ' !*End off ESC-^G execution !
Z
Z QT"D !*If input was a numeric arg then !
Z 0UO !*QO <= 0 (clear repeat count) !
Z 16#QZUZ !*Set inhibit screen update during input bit !
Z -1UA !*QAN <= -1 (no loop exit) !
Z < !*Begin infinite numeric fetch loop !
Z QA; !*Exit when input was not digit !
Z QO*10+QT-^^0UO !*Build numeric value !
Z MX !*Get next char !
Z ^[ !*Discard any returned numeric value !
Z QT-7"E !*If input is ^G then !
Z 1UO !*Reset repeat count to 1 !
Z 0; !*Exit the iteration !
Z ' !*End of ^G trap !
Z 0UA !*Set up to cause loop exit !
Z QT"D !*If was a digit in then !
Z -1UA !*Set up to stay in loop !
Z ' !*End of digit test !
Z > !*End of infinite numeric loop !
Z 16^_&QZUZ !*Reset inhibit screen update during input bit !
Z @O!V! !**** Go execute next command !
Z ' !*End of numeric arg input !
Z
Z QT"V !*If 2nd char is lower case alpha then !
Z QT-32UT !*Convert to upper case !
Z ' !*End of case conversion !
Z
Z QT-^^X"E !*If command is an ESC-X- command then !
Z @O!$X! !**** Go to ESC-X macros !
Z ' !*End of ESC-X test !
Z
Z QT-23"E !*If command is ESC-^W then !
Z 1#QZUZ !*Append next kill to kill buffer !
Z F< !**** Go get next command !
Z ' !*End of ESC-^W execution !
Z
Z QT-25"E !*If command is ESC ^Y then !
Z G9 !*Yank in the TECO minibuffer contents !
Z 1^_&QZ#2UZ !*No append next kill; buffer modified !
Z F< !**** Go get next command !
Z ' !*End of ESC ^Y execution !
Z
Z QT-27"E !*If command is ESC-ESC then !
Z @^UL%Command:% !*QLT <= Minibuffer prompt !
Z @32:^UL%% !*QLT <= "Command: " !
Z MN !*Get input string from user !
Z "U !*If string fetch was unsuccessful then !
Z 32768W !*Tell TECO to forget we fiddled with screen !
Z F< !**** Go get next command !
Z ' !*End of fetch failed test !
Z GS !*Pull string into buffer !
Z ^YXQ !*Push string into QQT !
Z ^YK !*Delete string from buffer !
Z @27:^UQ%% !*Append ESC to QQT !
Z @27:^UQ%% !*Append ESC to QQT !
Z MQ !*Execute TECO command !
Z F< !**** Go get next command !
Z ' !*End of ESC-ESC command execution !
Z
Z QT-^^B"E !*If command is ESC-B then !
Z QO< !*Do according to repeat count !
Z .UA !*Save current pointer !
Z @0,-1:S%^ES% !*Scan backwards for tabs & blanks !
Z "U !*If unsuccessful then !
Z J !*Jump to beginning of buffer !
Z 0; !*Exit the iteration !
Z ' !*End "no more" test !
Z .-QA+1"G !*If pointer didn't move backwards then !
Z < !*Begin iteration to move pointer back !
Z -.; !*Done if at beginning !
Z R !*Back up one character !
Z -.; !*Done if at beginning !
Z 0A-32"N !*If not a blank then !
Z 0A-9"N !*If not a tab then !
Z 0A-13"N !*If not a CR then !
Z 0A-10"N !*If not a LF then !
Z 0; !*Backup is done !
Z ' !*End of LF test !
Z ' !*End of CR test !
Z ' !*End of TAB test !
Z ' !*End of BLANK test !
Z > !*End of backup iteration !
Z @0,-1:S%^ES% !*Scan for 2nd occurance backwards !
Z "U !*If unsuccessful then !
Z J !*Jump to buffer beginning !
Z ' !*End of no 2nd occurance test !
Z ' !*End of pointer didn't move test !
Z > !*End of ESC-B iteration !
Z 1^_&QZUZ !*No append for next kill !
Z F< !**** Go get next command !
Z ' !*End of ESC-B command execution !
Z
Z QT-^^F"E !*If command is ESC-F then !
Z QO< !*Do according to repeat count !
Z .UA !*QAN <= current pointer position !
Z @0,1:S%^EL% !*Look for next line terminator !
Z .UB !*QBN <= possible line terminator pntr !
Z QAJ !*Return to original location !
Z @0,1:S%^ES% !*Scan rest of buffer for tabs & blanks !
Z .UC !*QCN <= possible tab/blank string pntr !
Z QB-QA"G !*If line terminator was also found !
Z QC-QB"G !*If line terminator was first then !
Z QBJ !*Go to it instead !
Z ' !*End of line term first test !
Z ' !*End of line term also found test !
Z .-QA"E !*If no move was made then !
Z 0; !*Exit the iteration if no more !
Z ' !*End of no more moves test !
Z > !*End of ESC-F iteration !
Z 1^_&QZUZ !*No append for next kill !
Z F< !**** Go get next command !
Z ' !*End of ESC-F command execution !
Z
Z QT-^^G"E !*If command is ESC G then !
Z .UA !*Save initial pointer location !
Z J !*Jump to buffer beginning !
Z QO-1L !*Go down specified number of lines-1 !
Z QA-."N !*If not back where we started then !
Z 1^_&QZUZ !*No append next kill !
Z ' !*End of pointer movement test !
Z F< !**** Go get next command !
Z ' !*End of ESC G command !
Z
Z QT-^^N"E !*If command is ESC-N then !
Z QOP !*Jump to that page !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get next command !
Z ' !*End of ESC-N command execution !
Z
Z QT-^^V"E !*If command is ESC-V then !
Z -20*QOL !*Jump back up that many windows !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get next command !
Z ' !*End of ESC-V command execution !
Z
Z QT-^^W"E !*If command is a ESC-W then !
Z GZ !*Pull kill buffer 1 contents into text buffer !
Z ^YXY !*QTY <= second most recent kill !
Z ^YK !*Delete second most recent kill from text buffr!
Z QM-."G !*If mark is ahead of pointer then !
Z .,QMXZ !*QZT <= region from pointer+1 to mark !
Z | !*Else if mark is behind pointer then !
Z QM,.XZ !*QZT <= region from mark+1 to pointer !
Z ' !*End of mark+1 to pointer region save !
Z 1^_&QZUZ !*Set no append !
Z F< !**** Go get next command !
Z ' !*End of ESC-W execution !
Z
Z QT-^^Z"E !*If command is ESC-Z then !
Z 0; !*Exit to teco level !
Z ' !*End of ESC-Z command execution !
Z
Z QT-^^%"E !*If command is ESC % then !
Z 1UB !*Enable query !
Z !QR! !*Query replace / replace common point !
Z @^UL%Replace:% !*QLT <= "Replace:" !
Z @32:^UL%% !*QLT <= "Replace: " !
Z MN !*Get the input string !
Z "U !*If failed then !
Z F< !**** Go get next command !
Z ' !*End of string fetch abort test !
Z GS !*Get the string that was input !
Z ^YXA !*QAT <= string to replace !
Z ^YK !*Delete string from buffer !
Z @^UL%With:% !*QLT <= "With:" !
Z @32:^UL%% !*QLT <= "With: " !
Z MN !*Get the input string !
Z "U !*If failed then !
Z F< !**** Go get next command !
Z ' !*End of string fetch abort test !
Z < !*Begin query replace loop !
Z 0,1:@S%^EQA% !*Find string to replace !
Z ; !*If search failed then exit !
Z 1^_&QZUZ !*Reset append next kill bit since pointer moved!
Z 32UT !*Fake a confirm by user !
Z QB"N !*If query is enabled then !
Z MP !*Get response from terminal stream !
Z ; !*If abort then exit loop !
Z ' !*End of user query !
Z QT-32"E !*If space bar was pressed then !
Z ^YK !*Kill the last found string !
Z GS !*Replace with replacement string !
Z 2#QZUZ !*Set buffer modified bit !
Z 1^_&QZUZ !*Reset append next kill bit !
Z ' !*End of positive replacement response test !
Z > !*End of query replace loop !
Z F< !**** Go get next command !
Z ' !*End of ESC % command processing !
Z
Z QT-^^*"E !*If command is ESC * then !
Z :QQ"N !*If length of last TECO cmd is not zero then !
Z ^^HMM !*Send cursor to home position !
Z ^^JMM !*Clear the screen !
Z :GQ !*Show the contents of the TECO minibuffer !
Z 16#QZUZ !*Disable screen update during command fetch !
Z MX !*Get the next command character (ignored) !
Z ^[ !*Discard any returned numeric value !
Z 16^_&QZUZ !*Enable screen updates again !
Z MO !*Refresh the status line !
Z 32^T !*Force TECO to update screen !
Z ' !*End of non null TECO cmd processing !
Z F< !**** Go get next command !
Z ' !*End of ESC * command execution !
Z
Z QT-^^<"E !*If command is ESC-< then !
Z 0J !*Jump to top of buffer !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get next command !
Z ' !*End of ESC-< command execution !
Z
Z QT-^^>"E !*If command is ESC-> then !
Z ZJ !*Jump to end of buffer !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get next command !
Z ' !*End of ESC-> command execution !
Z
Z QT-^^@"E !*If command is ESC-@ then !
Z .UM !*Set mark at current point !
Z 24MH !*Go ready the prompt line !
Z @^A%Set.% !*Tell user mark is set !
Z 32768W !*Tell TECO to forget we messed with screen !
Z F< !**** Go get next command !
Z ' !*End of ESC-@ command execution !
Z
Z 7MM !*ESC command not found; ring bell !
Z 32768W !*Forget that we rang terminal's bell (she did) !
Z F< !**** Go get next command !
Z
Z
Z!*^X COMMAND MACROS !
Z
Z !CX! !*^X commands start here !
Z MX !*Get the 2nd char in the ^X command !
Z
Z ^[ !*Discard any returned numeric value !
Z
Z QT-7"E !*If command is an ^X-^G then !
Z F< !**** Go get next command !
Z ' !*End off ^X-^G execution !
Z
Z QT"V !*If 2nd char is lower case alpha then !
Z QT-32UT !*Convert to upper case !
Z ' !*End of case conversion !
Z
Z QT-12"E !*If command is ^X ^L then !
Z .UC !*QCN <= current pointer location !
Z QMUA !*QAN <= Region start (mark location initially) !
Z .UB !*QBN <= Region end (pointer loc initially) !
Z QB-QA"L !*If mark is after pointer then !
Z QMUB !*QBN <= mark location !
Z .UA !*QAN <= pointer location !
Z ' !*End of mark/pointer reversal !
Z QAJ !*Jump to start of region !
Z QB-QA< !*For number of characters in region !
Z 0A"W !*If next character is uppercase then !
Z 0A+32 at I%% !*Insert matching lower case character !
Z D !*Delete the uppercase character !
Z R !*Back up over the new lower case character !
Z 2#QZUZ !*Set buffer modified bit !
Z ' !*End of case conversion !
Z C !*Go check next character !
Z > !*End of case conversion !
Z QCJ !*Jump back to start location !
Z F< !**** Go get next command !
Z ' !*End of ^X ^L processing !
Z
Z QT-14"E !*If command is ^X ^N then !
Z 6:W-1UA !*QAN <= buffer loc of char before home position!
Z QA"N !*If home position is not top of buffer then !
Z 8&QZ"N !*If output file is open then !
Z B,QAP !*Output from top to home to output file !
Z .-QAUE !*Adjust pointer to current loc BEFORE delete !
Z B,QAD !*Delete from buffer !
Z QEJ !*Jump to adjusted buffer loc (same rel pos) !
Z ^E"N !*If previous read found form feed then !
Z ZJ !*Jump to buffer end !
Z 12 at I%% !*Insert a form feed character !
Z QEJ !*Jump back to original location !
Z ' !*End of form feed append if necessary !
Z A !*Append a new page to current page !
Z ' !*End of output file open processing !
Z ' !*End of across page boundry append !
Z 1^_&QZUZ !*No append next kill !
Z F< !**** Go get next command !
Z ' !*End of ^X^N processing !
Z
Z QT-18"E !*If command is ^X-^R then !
Z @^UL%Read% !*QLT <= "Read" !
Z @32:^UL%% !*QLT <= "Read " !
Z @:^UL%file:% !*QLT <= "Read file:" !
Z @32:^UL%% !*QLT <= "Read file: " !
Z MN !*Go get input string !
Z "U !*If string fetch was unsuccessful then !
Z F< !**** Go get next command !
Z ' !*End of zero-length string test !
Z GS !*Pull file string into buffer !
Z ^YXB !*Put in QBT for safe keeping !
Z ^YK !*Purge from buffer !
Z 8&QZ"N !*If output file is open then !
Z 2&QZ"N !*If buffer has been modified then !
Z EC !*Move buffer to file and close file !
Z | !*Else if buffer has not been modified then !
Z EK !*Kill the output file !
Z ' !*End of output file open processing !
Z | !*Else if output file is not open then !
Z 2&QZ"N !*If buffer has been modified then !
Z MU !*Take action to save the buffer or delete it !
Z "U !*If aborted then !
Z F< !**** Go get next command !
Z ' !*End of abort trap !
Z ' !*End of buffer modified processing !
Z ' !*End of output file open/closed processing !
Z 2#8^_&QZUZ !*Reset modified and output file open bits !
Z @^UA%@:ER/% !*QTA <= all characters between "%" s !
Z GB !*Get the file string !
Z ^Y:XA !*Append it to EB command !
Z @:^UA%/% !*Append all char between "%" s to QTA !
Z HK !*Purge current buffer !
Z 4^_&QZUZ !*Reset input file open bit !
Z MA !*Try to open an old file for read only !
Z "S !*If successful open then !
Z G* !*Pull file file-spec into buffer !
Z ^YXK !*QKT <= primary input filespec !
Z HK !*Purge buffer !
Z A !*Pull in first page of the file !
Z 4#QZUZ !*Set input file open !
Z ' !*End of successful open execution !
Z 1#2^_&QZUZ !*No kill append; buffer not modified !
Z MO !*Update the status line !
Z F< !**** Go get next command !
Z ' !*End of ^X-^R execution !
Z
Z QT-19"E !*If command is ^X ^S then !
Z 8&QZ"N !*If output file is open then !
Z EC !*Move out rest of input file and close output !
Z 2#8^_&QZUZ !*Reset modified and output file open bits !
Z @^UA%@EB/% !*QAT <= "@EB/" !
Z GT !*Pull output file spec into text buffer !
Z ^S+.J !*Jump back to beginning of string (revs bug) !
Z .UA !*QAN <= loc before first filespec character !
Z @S%;% !*Search FORWARD for first ; character !
Z QA,.-1:XA !*Append filename minus the version number !
Z @:^UA%/% !*QAT <= "@EB/<filename>/" !
Z HK !*Purge current buffer !
Z MA !*Open the previous file for both input & output!
Z G* !*Get the new file spec !
Z ^YXT !*QTT <= new output file spec !
Z ^YXK !*QKT <= new input file spec !
Z HKA !*Purge buffer and pull in first page of file !
Z 1#4#8#QZUZ !*No kill append, output and input files open !
Z ' !*End of file save for open output file !
Z MO !*Update the status line to show new filename !
Z F< !**** Go get next command !
Z ' !* End of ^X ^S execution !
Z
Z QT-21"E !*If command is ^X ^U then !
Z .UC !*QCN <= current pointer location !
Z QMUA !*QAN <= Region start (mark location initially) !
Z .UB !*QBN <= Region end (pointer loc initially) !
Z QB-QA"L !*If mark is after pointer then !
Z QMUB !*QBN <= mark location !
Z .UA !*QAN <= pointer location !
Z ' !*End of mark/pointer reversal !
Z QAJ !*Jump to start of region !
Z QB-QA< !*For number of characters in region !
Z 0A"V !*If next character is lowercase then !
Z 0A-32 at I%% !*Insert matching uppercase character !
Z D !*Delete the lowercase character !
Z R !*Back up over the new uppercase character !
Z 2#QZUZ !*Buffer modified !
Z ' !*End of case conversion !
Z C !*Go look at next character !
Z > !*End of case conversion !
Z QCJ !*Jump back to start location !
Z F< !**** Go get next command !
Z ' !*End of ^X ^U processing !
Z
Z QT-22"E !*If command is ^X-^V then !
Z @^UL%Visit% !*QLT <= "Visit" !
Z @32:^UL%% !*QLT <= "Visit " !
Z @:^UL%file:% !*QLT <= "Visit file:" !
Z @32:^UL%% !*QLT <= "Visit file: " !
Z MN !*Go get input string !
Z "U !*If string fetch was unsuccessful then !
Z F< !**** Go get next command !
Z ' !*End of zero-length string test !
Z GS !*Pull file string into buffer !
Z ^YXB !*Put in QBT for safe keeping !
Z ^YK !*Purge from buffer !
Z 8&QZ"N !*If output file is open then !
Z 2&QZ"N !*If buffer has been modified then !
Z EC !*Move the new buffer to output file & close it !
Z | !*Else if buffer has not been modified then !
Z EK !*Kill the output file !
Z ' !*End of kill unmodified buffer & kill file !
Z | !*Else if output file is not open then !
Z 2&QZ"N !*If buffer has been modified then !
Z MU !*Take action to save the buffer !
Z "U !*If aborted then !
Z F< !**** Go get next command !
Z ' !*End of abort trap !
Z ' !*End of buffer modified processing !
Z ' !*End of output file is open/closed processing !
Z 2#8^_&QZUZ !*Reset modified and output file open bits !
Z @^UA%@:EB/% !*QTA <= all characters between "%" s !
Z GB !*Get the file string !
Z ^Y:XA !*Append it to EB command !
Z @:^UA%/% !*Append all char between "%" s to QTA !
Z HK !*Purge buffer !
Z MA !*Try to open an old file with backup !
Z "S !*If successful open then !
Z G* !*Pull complete filespec into buffer !
Z ^YXT !*QTT <= new output filespec !
Z ^YXK !*QKT <= new input filespec !
Z HKA !*Kill current buffer and pull in next !
Z 4#8#QZUZ !*Set input file open & output file open bit !
Z | !*Else if not successful open with backup then !
Z @^UA%@EW/% !*QTA <= all char between "%" s !
Z GS !*Pull file name back into buffer !
Z ^Y:XA !*Append the file string to QTA !
Z ^YK !*Kill file name in case it bombs !
Z @:^UA%/% !*Append the final commands to QTA !
Z MA !*Open a new file !
Z G* !*Pull output filespec into buffer !
Z ^YXT !*QTT <= new output file spec !
Z HK !*Purge the buffer !
Z 8#QZUZ !*Set output file open bit !
Z ' !*End of open file execution !
Z 1#2^_&QZUZ !*No kill append; buffer not modified !
Z MO !*Update status line !
Z F< !**** Go get next command !
Z ' !*End of ^X-^V execution !
Z
Z QT-23"E !*If command is ^X-^W then !
Z @^UL%Write% !*QLT <= "Write" !
Z @32:^UL%% !*QLT <= "Write " !
Z @:^UL%file:% !*QLT <= "Write file:" !
Z @32:^UL%% !*QLT <= "Write file: " !
Z MN !*Go get input string !
Z "U !*If string fetch was unsuccessful then !
Z F< !**** Go get next command !
Z ' !*End of zero-length string test !
Z 8&QZ"N !*If output file is open then !
Z EF !*Close the output file with no output !
Z 8^_&QZUZ !*Reset output file open bit !
Z ' !*End of output file is open processing !
Z @^UA%@:EW/% !*QTA <= all characters between "%" s !
Z GS !*Get the file string !
Z ^Y:XA !*Append it to EW command !
Z ^YK !*Delete file string from text buffer !
Z @:^UA%/% !*Append all char between "%" s to QTA !
Z MA !*Open a new output file !
Z "S !*If successful open then !
Z G* !*Pull in complete file spec !
Z ^YXT !*QTT <= output filespec !
Z ^YK !*Kill filespec from buffer !
Z 2#8#QZUZ !*Mark as modified; output file open !
Z ' !*End of open success test !
Z MO !*Update the status line !
Z F< !**** Go get next command !
Z ' !*End of ^X-^W execution !
Z
Z QT-24"E !*If command is a ^X-^X then !
Z .UN !*QN <= current pointer loc (next mark) !
Z QMJ !*Jump to marked position !
Z QNUM !*Set mark at previous pointer loc !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get next user command !
Z ' !*End of ^X-^X command execution !
Z
Z QT-27"E !*If command is ^X-ESC then !
Z MQ !*Re-execute TECO macro in Q9 !
Z F< !**** Go get next command !
Z ' !*End of ^X-ESC command execution !
Z
Z QT-^^A"E !*If command is ^X A then !
Z 4&QZ"N !*If input file is open then !
Z ^E"N !*If previous read found a form feed then !
Z .UA !*QAN <= current pointer position !
Z ZJ !*Jump to end of buffer !
Z 12 at I%% !*Insert a form feed !
Z QAJ !*Jump back to original point !
Z ' !*End of form feed append if necessary !
Z A !*Append from input file !
Z ' !*End of append !
Z F< !**** Go get next command !
Z ' !*End of ^X A command execution !
Z
Z QT-^^E"E !*If command is ^X-E then !
Z -:QWUY !*Initialize up-counter for # of commands !
Z -QOUX !*Initialize macro repeat count !
Z F< !**** Go get next command !
Z ' !*End of ^X-E execution !
Z
Z QT-^^N"E !*If command is ^XN then !
Z .UE !*QEN <= Current pointer location !
Z MR !*Get cursor line number !
Z -1UB !*QBT <= # lines to get to home position !
Z -QBL !*Jump to start of first line on screen !
Z .UA !*QAN <= Char pointer value at home position !
Z QEJ !*Jump back to original location !
Z QA"N !*If home position is not top of buffer then !
Z 8&QZ"N !*If output file is open then !
Z .-QAUE !*Adjust pointer to current location before del !
Z B,QAP !*Output from top to home to output file !
Z B,QAD !*Delete from buffer !
Z QEJ !*Go to original location !
Z ' !*End of output file open processing !
Z ' !*End of make room execution !
Z F< !**** Go get next command !
Z ' !*End of ^XN processing !
Z
Z QT-^^Q"E !*If command is ^X-Q then !
Z QY"L !*If macro command fetch in progress then !
Z MP !*Get next command from terminal stream only !
Z QQ"E !*If response is ^G then !
Z F< !**** Go get next command !
Z ' !*End of ^G response processing !
Z QT-32"N !*If next input is not space char then !
Z 0UY !*Set macro fetch counter to zero to force exit !
Z %X !*Increment macro repeat counter !
Z "L !*If more macro loops left to be done then !
Z -:QWUY !*Restore command counter contents !
Z ' !*End of macro command counter restore !
Z ' !*End of macro abort test !
Z ' !*End of macro command query operation !
Z F< !**** go get next command !
Z ' !*End of ^X-Q execution !
Z
Z QT-^^T"E !*If command is ^X T then !
Z QY"L !*If macro command fetch in progress then !
Z -1W !*Update terminal screen !
Z ' !*End of commmand fetch in progress execution !
Z F< !**** Go get next command !
Z ' !*End of ^X T execution !
Z
Z QT-^^*"E !*If command is ^X-* !
Z :QW"N !*If macro string is not null then !
Z ^^HMM !*Send cursor home !
Z ^^JMM !*Clear the screen !
Z :GW !*Show user the current macro string !
Z 16#QZUZ !*Inhibit screen update !
Z MX !*Get the next character !
Z ^[ !*Discard any returned numeric value !
Z 16^_&QZUZ !*Reset screen update inhibit bit !
Z MO !*Refresh the status line !
Z 32^T !*Force TECO to update screen !
Z ' !*End of non null macro string processing !
Z F< !**** Go get next command !
Z ' !*End of X-* processing !
Z
Z QT-^^("E !*If command is ^X-( then !
Z 32#QZUZ !*Set macro collection bit in control word !
Z 0,0XW !*Purge previous macro (if any) !
Z MO !*Update the status line !
Z F< !**** Go get next command !
Z ' !*End of ^X-( execution !
Z
Z QT-^^)"E !*If command is ^X-) then !
Z 32&QZ"N !*If macro collection bit is set !
Z GW !*Get the current EMACS macro !
Z ^Y-2XW !*Push back minus the ^X and ) char !
Z ^YK !*Delete from text buffer !
Z 32^_&QZUZ !*Reset macro collection bit in control word !
Z MO !*Update the status line !
Z ' !*End of macro collection termination !
Z F< !**** Go get next command !
Z ' !*End of ^X-) execution !
Z
Z QT-^^="E !*If command is ^X = then !
Z .UA !*QAN <= current pointer position !
Z J !*Jump to beginning of buffer !
Z 1UB !*QBN <= initial line number !
Z < !*Start line count iteration !
Z L !*Go down one line !
Z .-QA; !*If past original start point then exit iter !
Z %B !*Increment the line count !
Z > !*End of line count iteration !
Z ."G !*If buffer is not empty then !
Z .-QA"E !*If at original start point then !
Z -1A-10"E !*If previous character is a LF then !
Z %B !*Increment the line count again !
Z ' !*End of CRLF test !
Z ' !*End of past start point test !
Z ' !*End of buffer not empty test !
Z QAJ !*Jump back to original start point !
Z 0L !*Go to start of that line !
Z QA-.UC !*QCN <= number of characters over !
Z QAJ !*Jump back to original start point !
Z ^^HMM !*Send cursor to home position !
Z ^^JMM !*Clear the screen !
Z @^A%Line% !*Show line number header !
Z 32^T !*Send blank to terminal !
Z QB= !*Show value to user !
Z @^A%After% !*Send char number header !
Z 32^T !*Send blank to terminal !
Z @^A%character% !*Send rest of char number header !
Z 32^T !*Send another blank to terminal !
Z QC= !*Show value to user !
Z 16#QZUZ !*Inhibit screen update during next cmd fetch !
Z MX !*Get next char from command stream (ignored) !
Z ^[ !*Discard any returned numeric value !
Z 16^_QZUZ !*Enable screen updates again !
Z MO !*Refresh the status line !
Z 32^T !*Force TECO to update screen on next -1W !
Z F< !**** Go get next command !
Z ' !*End of ^X = command execution !
Z
Z 7MM !*^X command not found; ring bell !
Z 32768W !*Forget that we rang terminal's bell (she did) !
Z F< !**** Go get next command !
Z
Z
Z!* ESC-X MACROS START HERE !
Z
Z !$X! !*Begin ESC-X macros !
Z MX !*Get next command character !
Z
Z ^[ !*Discard any returned numeric value !
Z
Z QT"V !*If char is lower case alpha then !
Z QT-32UT !*Convert to upper case !
Z ' !*End of case conversion !
Z
Z QT-7"E !*If command is an ESC-X-^G then !
Z F< !**** Go get next command !
Z ' !*End off ESC-X-^G execution !
Z
Z QT-^^C"E !*If command is an ESC X C then !
Z 3:W"E !*If see-all mode is off then !
Z 1,3:W !*Turn see-all mode on !
Z | !*Else if see-all mode is on then !
Z 0,3:W !*Turn see-all mode off !
Z ' !*End of see-all state flip-flop !
Z F< !**** Go get next command !
Z ' !*End of ESC X C processing !
Z
Z QT-^^D"E !*If command is an ESC X D then !
Z ^BUA !*QAN <= code for current date !
Z QA/512UB !*QBN <= current year !
Z QA-(QB*512)/32UC !*QCN <= current month !
Z QA-(QA/32*32)UD !*QDN <= current day !
Z QC-10"L !*If month is less than 10 then !
Z @I%0% !*Insert a leading 0 in text buffer !
Z ' !*End of leading zero insertion !
Z QC\ !*Insert month in text buffer !
Z @I%-% !*Insert "-" character in text buffer !
Z QD-10"L !*If day is less than 10 then !
Z @I%0% !*Insert a leading zero !
Z ' !*End of leading zero insertion !
Z QD\ !*Insert day in text buffer !
Z @I%-% !*Insert a "-" in text buffer !
Z QB-10"L !*If year is less than 10 then !
Z @I%0% !*Insert a "0" in text buffer !
Z ' !*End of leading zero insertion !
Z QB\ !*Insert year in text buffer !
Z 1^_&QZ#2UZ !*No append next kill; buffer modified !
Z F< !**** Go get next command !
Z ' !*End of ESC X D execution !
Z
Z QT-^^O"E !*If command is an ESC X O then !
Z @^UL%String:% !*QLT <= "String:" !
Z @32:^UL%% !*QLT <= "String: " !
Z MN !*Get the search string !
Z "U !*If string fetch failed then !
Z 32768W !*Tell TECO to forget we fiddled with screen !
Z F< !**** Go get next command !
Z ' !*End of fetch failed trap !
Z .UE !*Save current buffer pointer !
Z @:S%^EQS% !*Find an occurance of string (if any) !
Z "S !*If there is at least one then !
Z ^^HMM !*Send cursor home !
Z ^^JMM !*Erase screen !
Z < !*Begin iteration to display occurances !
Z 0L !*Go to start of line containing occurance !
Z T !*Show line to user !
Z L !*Resume search at next line !
Z @:S%% !*Look for next occurance !
Z ; !*Exit iteration when no more found !
Z > !*End of search & show loop !
Z QEJ !*Return to original location !
Z 16#QZUZ !*Inhibit screen update during input !
Z MX !*Get next character from input stream !
Z ^[ !*Discard any returned numeric value !
Z 16^_&QZUZ !*Enable screen updates again !
Z MO !*Refresh status line !
Z 32^T !*Force TECO to update screen on next -1W !
Z ' !*End of occurances display when string found !
Z F< !**** Go get next command !
Z ' !*End of ESC X O processing !
Z
Z QT-^^R"E !*If command is an ESC X R !
Z 0UB !*Disable query !
Z @O!QR! !*Jump to query replace / replace common !
Z ' !*End of ESC X R processing !
Z
Z QT-^^T"E !*If command is an ESC X T then !
Z ^HUA !*QAN <= # seconds since midnight / 2 !
Z QA/1800UB !*QBN <= # hours since midnight !
Z QA-(QB*1800)/30UC !*QCN <= # minutes in current hour !
Z QA-(QA/30*30)*2UD !*QDN <= # seconds in current minute !
Z QB-10"L !*If # hours is less than 10 then !
Z @I%0% !*Insert a "0" in text buffer !
Z ' !*End of leading zero insertion !
Z QB\ !*Insert # hours in text buffer !
Z @I%:% !*Insert a ":" in text buffer !
Z QC-10"L !*If # minutes is less than 10 then !
Z @I%0% !*Insert a leading 0 in text buffer !
Z ' !*End of leading zero insertion !
Z QC\ !*Insert # minutes in text buffer !
Z @I%:% !*Insert ":" character in text buffer !
Z QD-10"L !*If # seconds is less than 10 then !
Z @I%0% !*Insert a leading zero !
Z ' !*End of leading zero insertion !
Z QD\ !*Insert # seconds in text buffer !
Z 1^_&QZ#2UZ !*No append next kill; buffer modified !
Z F< !**** Go get next command !
Z ' !*End of ESC X T execution !
Z
Z 7MM !*ESC-X command not found; ring bell !
Z 32768W !*Forget that we rang terminal's bell (she did) !
Z F< !**** Go get next command !
Z
Z
Z!*^Z MACROS START HERE !
Z
Z !CZ! !*Begin ^Z macros !
Z MX !*Get next command character !
Z
Z ^[ !*Discard any returned numeric value !
Z
Z QT"V !*If 2nd char is lower case alpha then !
Z QT-32UT !*Convert to upper case !
Z ' !*End of case conversion !
Z
Z QT-6"E !*If command is ^Z-^F then !
Z GT !*Get filename !
Z 1^_&QZ#2UZ !*No append; modified !
Z F< !**** Go get next command !
Z ' !*End of ^Z-^F execution !
Z
Z QT-7"E !*If command is an ^Z-^G then !
Z F< !**** Go get next command !
Z ' !*End off ^Z-^G execution !
Z
Z QT-26"E !*If command is ^Z-^Z then close files and exit !
Z 8&QZ"N !*If output file is open then !
Z 2&QZ"N !*If buffer has been modified then !
Z EC !*Move rest of file to output and close file !
Z | !*Else if buffer has not been modified then !
Z EK !*Kill the output file !
Z ' !*End of output open processing !
Z | !*Else if output file is not open then !
Z 2&QZ"N !*If buffer has been modified then !
Z MU !*Take steps to save or purge buffer !
Z "U !*If aborted then !
Z F< !**** Go get next command !
Z ' !*End of abort trap !
Z ' !*End of modified buffer test !
Z ' !*End of output file open/closed processing !
Z ^^HMM !*Send cursor home !
Z ^^JMM !*Erase screen !
Z HK !*Purge the buffer to insure exit capability !
Z EX !*Exit the editor !
Z ' !*End of ^Z-^Z execution !
Z
Z 7MM !*ESC-X command not found; ring bell !
Z 32768W !*Forget that we rang terminal's bell (she did) !
Z F< !**** Go get next command !
Z
Z > !* !
Z~
Z
Z!* END OF MACRO LOADS INTO Q REGISTERS !
Z
ZHK !*Purge the buffer !
ZMI !*Begin execution of infinite iteration !
Z!BY! !*Jump in point for non-EMACS bypass !
Z
STUNKYFLUFF
set `sum emacs.src`
if test 43403 != $1
then
echo emacs.src: Checksum error. Is: $1, should be: 43403.
fi
#
#
echo Extracting emacs.txt:
sed 's/^Z//' >emacs.txt <<\STUNKYFLUFF
Z Instructions Summary
Z --------------------
Z
ZPointer movement cmds:
Z---------------------
Z
Z ^A => Go to beginning of current line.
Z
Z ^B => Go back one character.
Z
Z ^E => Go to end of line.
Z
Z ^F => Go forward one character.
Z
Z ^N => Go to same place in next line.
Z
Z ^P => Go to same place in previous line.
Z
Z ^V => Move window down.
Z
Z ESC A => Go backward to start of sentence.
Z [Not yet implemented]
Z
Z ESC B => Go back one word.
Z
Z ESC E => Go forward to start of next sentence.
Z [Not yet implemented]
Z
Z ESC F => Go forward one word.
Z
Z ESC G => Go to specified line number in current buffer.
Z (precede command with line number as ESC<digits>)
Z
Z ESC V => Move window up.
Z
Z ESC [ => Go to beginning of paragraph.
Z [Not yet implemented]
Z
Z ESC ] => Go to end of paragraph.
Z [Not yet implemented]
Z
Z ESC < => Go to beginning of buffer.
Z
Z ESC > => Go to end of buffer.
Z
Z ^X ^X => Exchange mark and pointer
Z
Z ^X = => Displays information about current position in
Z buffer.
Z Instructions Summary (cont).
Z ----------------------------
Z
ZBuffer page commands
Z--------------------
Z
Z
Z ESC N => Write current buffer to output file, clear buffer,
Z and read in next page from input file.
Z
Z ^X A => Append next page to buffer. Inserts form feed if
Z last read found a form feed.
Z
Z ^X ^N => Write all text in buffer above the current window
Z to the output file and read in next page from
Z input file. (Useful for editing near page boundries.)
Z
Z ^X N => Same as ^X ^N but does not read in next page. Useful
Z for making some room in the buffer.
Z Instructions Summary (cont).
Z ----------------------------
Z
Z
ZSearch commands:
Z----------------
Z
Z ^S => Incremental forward search. Searches for string
Z as each character is input. Can only be exited with:
Z
Z (1) ESC to signify stay at current location after
Z string found.
Z
Z (2) ^G to abort and return to original location.
Z
Z Notes: 1. "DELETE" removes characters from search
Z string.
Z 2. When search string is null (empty) a 2nd
Z ^S within a search operation uses the most
Z recent successful search string.
Z 3. A 2nd ^S at any other time within a search
Z operation finds the next occurance of the
Z current search string.
Z
Z ^R => Incremental reverse search. Same as ^S except search
Z progresses backwards. Leaves pointer at beginning of
Z string found.
Z [Not yet implemented]
Z
Z
Z ESC X O => "Occurances". Display all lines containing a specified
Z string.
Z
Z Instructions Summary (cont).
Z ----------------------------
Z
ZKill and delete commands:
Z-------------------------
Z
Z Kill operations either initialize the kill buffer with the removed
Z text, or append the removed text to the current kill buffer contents,
Z depending upon whether or not the pointer has moved since the last
Z kill operation. (appends if hasn't moved)
Z
Z Delete operations remove the affected text and discard it.
Z
Z
Z ^D => Delete next character.
Z
Z ^K => Kill to end of line / kill line terminator.
Z
Z ^W => Kill marked region.
Z
Z ^Y => Yank back last kill. (insert text stored in kill buffer)
Z
Z ESC D => Delete next word.
Z [Not yet implemented]
Z
Z ESC K => Kill to end of sentence.
Z [Not yet implemented]
Z
Z ESC W => Copy region between mark and pointer to kill buffer,
Z superceding existing text.
Z
Z ESC Y => If used immediately after ^Y replaces the text just
Z "unkilled" with the text that was the 2nd most recent
Z victim.
Z [Not yet implemented]
Z
Z ESC ^Y => Yanks (pulls) last defined TECO command into text
Z buffer.
Z
Z ESC ^W => Append next kill to text already in kill buffer (if any).
Z (nullified by any pointer movement or text insertion)
Z
Z ^X ^O => Delete blank lines from current pointer to next non-blank
Z line.
Z [Not yet implemented]
Z
Z ^X # => Kill backwards to start of sentence.
Z [Not yet implemented]
Z
Z "DELETE" => Delete character before pointer.
Z KEY
Z Instructions Summary (cont).
Z ----------------------------
Z
Z
ZTECO related cmds:
Z------------------
Z
Z
Z ESC ESC => Enter TECO commands. Terminate with double ESC or
Z abort with ^G.
Z
Z MI ESC ESC => Restart EMACS from TECO level.
Z
Z ESC ^Y => Insert last defined TECO command into text buffer.
Z
Z ESC Z => Return to TECO level. (can restart EMACS with MI$$)
Z
Z ESC * => View last TECO command
Z
Z ^X ESC => Re-execute TECO command most recently entered with
Z ESC ESC command.
Z
Z
Z
Z
Z Instructions Summary (cont).
Z ----------------------------
Z
Z
Z
ZMiscellaneous cmds:
Z-------------------
Z
Z ^C => Return to TECO level. (can restart EMACS with MI$$)
Z
Z ^G => *** THIS IS THE PANIC BUTTON ***
Z Gets you out of almost anything as long as EMACS is
Z not "hung".
Z
Z ^O => Open blank line for insertion.
Z
Z ^Q => Use next character as text. (inserts cmds as text)
Z
Z ESC S => Center text in current line. Uses a default of
Z 80 characters per line or can be preceded with
Z an argument of form ESC<digits> which defines
Z number of characters in line.
Z [Not yet implemented]
Z
Z ESC T => Exchange words before and after pointer (does
Z nothing if pointer is inside a word).
Z [Not yet implemented]
Z
Z ESC % => "Query replace" --- Prompt for search string and its
Z replacement, then from current pointer to end of file,
Z find string and query user as follows:
Z (1) Space bar: go ahead and replace this occurance.
Z (2) ^G : abort query replace.
Z (3) Any other key: don't replace, find next.
Z
Z ^X I => Insert file at current pointer position. First executes
Z a ^X ^N to make room in the buffer.
Z [Not yet implemented]
Z
Z ESC X C => Enter/exit "see-all" mode (shows ALL char in a file,
Z even non-printing ones, with special graphics)
Z
Z ESC X D => Insert current date in text buffer in form MM-DD-YR
Z
Z ESC X R => "Replace" --- Prompt for search string and its
Z replacement, then from current pointer to end of buffer,
Z replace all occurances.
Z
Z ESC X T => Insert current time in text buffer in form HH:MM:SS
Z
Z ^_ => "Help on tap" --- Interactive help processor.
Z [Not yet implemented]
Z
Z ESC ? => "Describe" --- Describe function of next command
Z without executing it.
Z [Not yet implemented]
Z Instructions Summary (cont).
Z ----------------------------
Z
ZFile related commands:
Z----------------------
Z
Z ^X-^R => "Read file"
Z Reads in first page of a given file after closing the
Z currently open file (if any).
Z
Z ^X-^S => "Save file"
Z Writes buffer and rest of currently open input file to
Z currently open output file, closes and reopens file, and
Z reads first page back in.
Z
Z ^X-^V => "Visit file"
Z Opens a given file for both input and output after closing
Z the currently open output file (if any).
Z
Z ^X-^W => "Write file"
Z Sets output file to that specified, after closing any
Z currently open output file (if any).
Z
Z ^Z-^F => "Get file name"
Z Insert most recently specified output filename into text
Z buffer.
Z
Z ^Z-^Z => "Close files and exit"
Z Close all files and exit EMACS.
Z Instructions Summary (cont).
Z ----------------------------
Z
Z
Z
ZKeyboard macro cmds:
Z--------------------
Z
Z ^X ( => Start EMACS macro collection.
Z
Z ^X ) => Terminate EMACS macro collection.
Z
Z ^X-* => "View last macro" --- Clears screen and displays
Z last defined EMACS macro. Pressing any key returns
Z to edit mode. Note some "commands" such as CRLF
Z are displayed in image mode. This is built into TECO.
Z
Z ^X T => "Toggle update" --- Forces screen update at current
Z command inside a macro. Useful for verifying macro
Z is executing properly by viewing results at specific
Z points, buts slows down execution considerably.
Z
Z ^X E => Execute most recently collected EMACS macro.
Z
Z ^X Q => When used inside a macro halts execution and waits for
Z the user to either:
Z (1) press space bar to continue with current macro.
Z (2) use ^G to abort this macro and all macro repeats
Z pending.
Z (2) press any other key to exit current macro, without
Z effecting any pending macro repeats.
Z
Z ESC X S => "Save macro" --- Saves current EMACS macro in a specified
Z file. Prompts for file name.
Z [Not yet implemented]
Z
Z ESC X L => "Load macro" --- Loads EMACS macro from a specified file.
Z Prompts for file name.
Z [Not yet implemented]
Z
Z Instructions Summary (cont).
Z ----------------------------
Z
Z
ZThe "mark" and region cmds:
Z---------------------------
Z
Z
Z ESC H => Mark paragraph. Puts mark at beginning of paragraph,
Z pointer at end.
Z [Not yet implemented]
Z
Z ^X ^P => Mark page --- Put mark at top of page, defined to be
Z immediately after first form feed backwards from
Z current pointer, or top of buffer, whichever is first.
Z Put pointer at bottom of page, defined to be immediately
Z after next form feed forwards from current pointer, or
Z bottom of buffer, whichever is first.
Z [Not yet implemented]
Z
Z ^X ^X => Exchange mark and pointer; useful to verify where
Z current region is.
Z
Z ESC @ => Set mark at current pointer (is EMACS ^@).
Z
Z ESC X A => Append currently defined region to an existing file.
Z Prompts for file name.
Z [Not yet implemented]
Z
Z ESC X P => Prepend currently defined region to an existing file.
Z Prompts for file name.
Z [Not yet implemented]
Z
Z ESC X W => Write currently defined region to a new file. Prompts
Z for file name.
Z [Not yet implemented]
Z
Z
Z Instructions Summary (cont).
Z ----------------------------
Z
Z
ZCase conversion cmds:
Z---------------------
Z
Z
Z ESC C => Capitalize next word.
Z [Not yet implemented]
Z
Z ESC L => Lower case next word.
Z [Not yet implemented]
Z
Z ESC U => Upper case next word.
Z [Not yet implemented]
Z
Z ^X ^L => Lower case marked region.
Z
Z ^X ^U => Upper case marked region.
Z
Z Instructions Summary (cont).
Z ----------------------------
Z
Z
Z
ZMisc. notes:
Z------------
Z
Z 1. Most commands can be preceded with a repeat count of the form
Z ESC<digits>. Even "commands" which are self-insertions, I.E.
Z ESC20H inserts 20 "H"s in text buffer.
Z
Z 2. Commands which "view information" (such as ESC X O or ^X =)
Z wait for the user to press any key and then return the screen
Z to its normal window mode into the text buffer. The character
Z input by the single key stroke is discarded. The text buffer
Z is not affected by the view operation.
Z
STUNKYFLUFF
set `sum emacs.txt`
if test 16227 != $1
then
echo emacs.txt: Checksum error. Is: $1, should be: 16227.
fi
#
#
echo Extracting emacs11.tec:
sed 's/^Z//' >emacs11.tec <<\STUNKYFLUFF
Z EMACS11.TEC --- EMACS command compatable editor for
Z PDP-11 and VAX systems which have
Z TECO, version 35 or later.
Z
Z Last modified: 05-24-82 17:13:52 by Fred Fish
Z
Z
Z Q register usage:
Z
Z Note: For each Q register number there are TWO
Z storage areas, one for numeric data and one for
Z text. They are refered to here as QnN and
Z QnT respectively, where "n" is the Q register
Z number.
Z
Z In general, low alphabetic Q registers are
Z used for local storage and high alphabetic
Z Q registers are used for global storage and
Z macros.
Z
Z
Z QMN => Marked location pointer. Contains numeric
Z pointer to last character location at which
Z a mark was set.
Z
Z QNN => Current pointer save.
Z
Z QON => Repeat count. For commands which support using
Z a repeat count preceding the command of the
Z form <ESC><digits>, the count is stored in
Z this register.
Z
Z QQN => Abort back to highest level if set to 0
Z
Z QWN => Last column number of a ^N or ^P command
Z
Z QTN => Current command character ascii value
Z
Z QXN => Macro repeat count
Z
Z QYN => Emacs macro command fetch down counter
Z
Z QZN => Control flags word
Z
Z QHT => Macro to move cursor to a given line,
Z erase that line, leave cursor at beginning
Z of that line, and make TECO forget it did
Z anything to screen.
Z
Z QIT => Contains most of the run time macros which
Z make up the specific commands for EMACS.
Z Overwrite this and you've wiped out the
Z editor!
Z
Z QKT => Primary input file full file-spec
Z
Z QLT => Search prompt.
Z
Z QMT => Contains terminal image mode macro.
Z
Z QNT => Contains string input macro
Z
Z QOT => Editor status line update macro
Z
Z QPT => Macro to get next character from terminal
Z
Z QQT => TECO command minibuffer.
Z
Z QRT => Macro to find screen line number as num arg
Z
Z QST => String fetched by prompt/string input macro
Z
Z QTT => Output filespec for currently open output file
Z
Z QUT => Macro to allow option of saving modified
Z buffer when no output file is open.
Z
Z QVT => Last successful EMACS search string
Z
Z QWT => Emacs macro command string
Z
Z QXT => Macro to fetch next command from terminal
Z stream or EMACS macro stream (calls QPT macro)
Z
Z QYT => Kill buffer 2 (contains next most recent kill)
Z
Z QZT => Kill buffer 1 (contains most recent kill)
Z
Z LABEL POINTS:
Z
Z A =>
Z
Z B =>
Z
Z F =>
Z
Z M => ^N and ^P common processing point.
Z
Z QR => Query replace / replace common processing
Z
Z S => Search execution start point
Z
Z X => Start point for ^X macros.
Z
Z $ => Start point for ESC- macros.
Z
Z $X => Start point for ESC-X- macros.
Z
Z Editor status word (QZN) bits:
Z Meaning if bit set
Z
Z 32 => Enable macro collection
Z
Z 16 => Inhibit screen update during cmd input
Z
Z 8 => Primary output stream file is open
Z
Z 4 => Primary input stream file is open
Z
Z 2 => Current primary file has been modified
Z
Z 1 => Append next kill to kill buffer 1
Z
Z
Z!* START !
Z!* FIRST TEST TO SEE IF COMMAND STRING BEGAN WITH "EMACS" !
Z
ZHK !*Purge the buffer !
ZGZ !*Pull in the command line from QZT !
ZJ !*Jump back to beginning !
Z@::S%EMA% !*Test for command name starts with "EMA" !
Z"U !*If not successful then skip EMACS startup !
Z @O!BY! !*Branch past EMACS boot !
Z' !*End of EMACS startup check !
Z^D !*Set radix to decimal !
Z128,0ET !*Reset abort on error bit !
Z-1,5:W !*Set terminal to hold whole screen !
Z^[ !*Discard numeric argument returned by :W cmd !
Z22,2:W !*Protect the bottom 2 status lines from update !
Z^[ !*Discard numeric argument returned by :W cmd !
Z
Z!* Preload QHT with macro to erase a given line on screen, leave cursor !
Z!* at that line, and make TECO forget it did anything to the terminal. !
Z
Z@^UH~ !* QHT <= macro between the "~" s !
Z [A !* Push QAT and QAN onto Q register stack !
Z UA !* QAN <= input line number !
Z 0,1ET !* Enable image mode output !
Z 27^T !* Send escape to terminal !
Z ^^Y^T !* Turn on direct access mode !
Z QA+31^T !* Access line 1 through 24 (QA is 1...24) !
Z 32^T !* Access first column in the given line !
Z 1,0ET !* Disable image mode output !
Z ^^KMM !* Kill the current lines contents !
Z 32768W !* Make TECO forget we messed with screen !
Z ]A !* Pop QAT and QAN off the Q register stack !
Z~ !* End of macro load into QHT !
Z
Z!*Preload QMT with macro to output characters to terminal in image mode !
Z!*Q registers affected by an MM: QAN !
Z
Z@^UM~ !*QMT <= macro between "~" s !
Z UA !*QAN <= macro's argument (char to output) !
Z 0,1ET !*Set image mode bit !
Z 27^T !*Send ESC to terminal for special sequence !
Z QA^T !*Send the saved character to terminal !
Z 1,0ET !*Reset back to non image mode !
Z~ !*End of image mode macro load in QMT !
Z
Z!*Preload QUT with macro to optionally save a modified buffer !
Z!*Q register affected by MU: QLT, QAN, QST, QAN, QTN, QQN, QYN, QXN, !
Z!*QWT !
Z
Z@^UU~ !*QUT <= all characters between the "~" s !
Z < !*Begin loop to save buffer !
Z @^UL%Save% !*QLT <= "Save" !
Z @32:^UL%% !*QLT <= "Save " !
Z @:^UL%modified% !*QLT <= "Save modified" !
Z @32:^UL%% !*QLT <= "Save modified " !
Z @:^UL%buffer% !*QLT <= "Save modified buffer?" !
Z @32:^UL%% !*QLT <= "Save modified buffer? " !
Z @:^UL%(Y/N)% !*QLT <= "Save modified buffer? (Y/N)" !
Z MN !*Get response from user !
Z UA !*Save returned success/abort code !
Z QA; !*Abort function if string fetch failed !
Z GS !*Get the response string !
Z -1A-^^N"E !*If response is "N" then !
Z -1UA !*QAN <= code for successful execution !
Z HK !*Purge the current buffer !
Z 0; !*Abort iteration and go to terminal code !
Z ' !*End of "N" processing !
Z -1A-^^Y"E !*If response is "Y" then !
Z ^YK !*Delete response from text buffer !
Z @^UL%File:% !*QLT <= "File:" !
Z @32:^UL%% !*QLT <= "File: " !
Z MN !*Get response from user !
Z UA !*Save returned success/abort code !
Z QA; !*Abort function if string fetch failed !
Z @^UA%@EW/% !*QAT <= "@EW/" !
Z GS !*Pull file name string into buffer !
Z ^Y:XA !*QAT <= "@EW/<filename>" !
Z ^YK !*Delete from buffer in case we bomb !
Z @:^UA%/% !*QAT <= "@EW/<filename>/" !
Z MA !*Open the file to save current buffer in !
Z EC !*Write out buffer and close file !
Z HK !*Purge the buffer !
Z 0; !*Abort iteration and go to terminal code !
Z ' !*End of "Y" processing !
Z ^YK !*Delete previous response from text buffer !
Z > !*End loop to save buffer !
ZQA !*Return success code !
Z~
Z
Z!*Preload QPT with macro to get next char from terminal stream !
Z!*Q registers affected by MP: QTN, QYN, QXN, QQN !
Z
Z@^UP~ !*QPT <= everything between "~" s !
Z 0,32ET !*Set read with no wait for pending commands !
Z ^TUT !*QTN <= next pending command (-1 if none) !
Z QT"L !*If no pending commands then !
Z 32,0ET !*Reset read with no wait bit to get user input !
Z 16&QZ"E !*If screen update is not inhibited then !
Z -1W !*Update the terminal screen !
Z ' !*End of screen update test !
Z ^TUT !*QTN <= next command from user !
Z ' !*End of no pending commands execution !
Z QT-7"E !*If input from terminal is a ^G then !
Z 0UY !*Reset counter to exit current macro !
Z 0UX !*Reset counter to exit pending macros !
Z 0UQ !*Reset word to cause abort to highest level !
Z ' !*End of ^G from terminal processing !
Z QQ !*Return ^G abort code as numerical argument !
Z~ !*End of QPT macro load !
Z
Z!* Preload QOT with macro to update editor status line (line 23) !
Z
Z@^UO~ !* QOT <= all characters between the "~" s !
Z 23MH !* Go ready the editor status line !
Z @^A%EMACS11% !* First entry on editor status line !
Z 32^T !* Send blank to terminal !
Z @^A%Ver% !* Second entry on editor status line !
Z 32^T !* Send blank to terminal !
Z @^A%1.4% !* Third entry on editor status line !
Z 32^T !* Send blank to terminal !
Z 32^T !* Send blank to terminal !
Z QZ&32"N !* If LEARN mode is enabled then !
Z @^A%(Learn)% !* Show learn prompt !
Z | !* Else if not learn mode !
Z @^A%(Fundamental)% !* Show fundamental mode !
Z ' !* End of mode entry on status line !
Z 32^T !* Send blank to terminal !
Z 32^T !* Send blank to terminal !
Z 12&QZ"N !* If a primary file is open then !
Z 32^T !* Send another blank to terminal !
Z @^A%File:% !* Filespec is last entry on status line !
Z 8&QZ"N !* If primary output file stream is open then !
Z :GT !* Get the output file spec !
Z | !* Else input file must be open !
Z :GK !* Get input file spec !
Z ' !* End of file spec test !
Z ' !* End of filespec insertion !
Z 32768W !* Forget we did anything to screen !
Z~ !* End of status line update macro !
Z
Z!*Preload QXT with macro to fetch next command character !
Z!*Q registers affected by MX: QTN, QYN, QXN, QQN, QWT, !
Z
Z@^UX~ !*QXT <= all characters between the "~" s !
Z QY"E !*If no EMACS macro commands to execute then !
Z MP !*Get next command from command stream !
Z 32&QZ"N !*If learn mode is enabled then !
Z @QT:^UW%% !*Append the command to the macro buffer !
Z ' !*End of macro collection test !
Z ' !*End of no EMACS macro commands execution !
Z QY"L !*If EMACS macro commands to execute then !
Z GW !*Pull macro commands into buffer !
Z QYAUT !*QTN <= EMACS command extracted from string !
Z ^YK !*Kill string in buffer !
Z %Y !*Increment macro command counter !
Z "E !*If was last EMACS macro command then !
Z %X !*Increment macro repeat counter !
Z "L !*If more repeat loops to be done then !
Z -:QWUY !*Restore command counter contents !
Z ' !*End of macro command counter restore !
Z ' !*End of last repeat loop test !
Z ' !*End of EMACS macro command fetch !
Z QQ !*Return abort code as argument !
Z~ !*End of QXT macro load !
Z
Z!*Preload QNT with macro to input strings !
Z!*Q registers affected by MN: QST, QAN, QTN, QQN, QYN, QXN, QWT !
Z
Z@^UN~ !*QNT <= All characters between the "~" s !
Z 0,0XS !*QST <= null string (clear it) !
Z 24MH !*Go ready the prompt line !
Z :GL !*Display prompt in QLT on terminal !
Z 16#QZUZ !*Set screen update inhibit bit !
Z -1UA !*QAN <= no exit on esc value !
Z < !*Begin infinite iteration to input string !
Z MX !*QTN <= next character from command stream !
Z ; !*If input was a ^G then abort function !
Z QT-10"N !*If input was not line feed then !
Z QT^T !*Echo character to terminal !
Z ' !*End of scroll producing character trap !
Z @QT:^US%% !*Append input character to QST string !
Z QT-10"E !*If input was LF character then !
Z 0; !*Exit the input iteration !
Z ' !*End of LF execution !
Z QT-127"E !*If input was a "DELETE" character !
Z GS !*Pull string into text buffer !
Z ^Y-1XS !*Push back into QST minus "DELETE" character !
Z :QS"N !*If not all characters deleted !
Z ^Y-2XS !*Push back string minus char and "DELETE" !
Z ' !*End of non-null string character delete !
Z ^YK !*Delete from text buffer !
Z 24MH !*Erase old prompt string !
Z :GL !*Display prompt string !
Z :GS !*Display current input string !
Z -1UA !*QAN <= no double esc flag !
Z F< !*Go get the next input !
Z ' !*End of DELETE character processing !
Z QT-27"E !*If input was an ESC character then !
Z QA; !*Exit input iteration if double ESC set !
Z 0UA !*Set to cause exit on next ESC !
Z F< !*Go get the next input !
Z ' !*End of ESC input processing !
Z -1UA !*QAN <= no double esc flag !
Z > !*End of infinite iteration to input characters !
Z 24MH !*Erase the prompt line !
Z QQ"S !*If successful string fetch then !
Z GS !*Pull final string into text buffer !
Z ^Y-2XS !*Strip off $$ or CRLF terminator !
Z ^YK !*Delete from text buffer !
Z ' !*End of terminator removal !
Z 16^_&QZUZ !*Reset screen update inhibit bit !
Z QQ !*Return success or failure code !
Z~ !*End of string input macro !
Z
Z!*LOAD TEXT Q REGISTER I WITH INFINITE ITERATION WHICH IS THE "ROOT" !
Z!*OF THE EXECUTION COMMANDS !
Z
Z@^UI~ !*QUI <= main editor macro between "~" char !
Z ^D !*Set numeric radix to decimal !
Z 225,30ET !*No abort; attached; wait; not-image mode !
Z !*Cancel ^O; no-echo, lower-case; scope !
Z 16ED !*Yank prot; ^ means ctrl; srch fail anchor !
Z 16^_&QZUZ !*Insure terminal update inhibit bit gets reset !
Z ^^HMM !*Send cursor home !
Z ^^JMM !*Clear entire screen !
Z MO !*Update the status line !
Z 32^T !*Force TECO to update screen on next -1W cmd !
Z < !*Begin edit execution macro !
Z !A! !*Label point !
Z 0UW !*QWN <= 0 (Initialize up/down line loc save) !
Z !B! !*Label point !
Z -1UQ !*QQN <= success (reset abort value) !
Z 1UO !*QO <= 1 (Initialize repeat count) !
Z 16^_&QZUZ !*Reset screen update inhibit bit !
Z MX !*Get the next EMACS command !
Z
Z!*BEGIN EXECUTION OF THE CURRENT COMMAND !
Z
Z !V! !*Start execution of command !
Z
Z QT at O/AI,CA,CB,CC,CD,CE,CF,CG,AI,AI,AI,CK,CL,AI,CN,CO,CP,CQ,CS,CS/
Z QT-20 at O/AI,AI,CV,CW,CX,CY,CZ,$/
Z
Z QT-127"E !*If command is a "delete" character then !
Z QO< !*Do by number of repeat counts !
Z -.; !*Abort iteration if at buffer beginning !
Z -D !*Delete back one character !
Z > !*End of repeat iteration !
Z 1^_&QZ#2UZ !*No kill append; buffer modified !
Z F< !**** Go get another user command !
Z ' !*End of "delete" char execution !
Z
Z !AI! !*Auto insert the cmd char as text !
Z QO<QT at I%%> !*Do an auto insert !
Z 1^_&QZ#2UZ !*No kill append; buffer modified !
Z F< !**** Go get next command !
Z
Z !CA! !*Begin ^A execution !
Z 0L !*Set pointer to beginning of current line !
Z 1^_&QZUZ !*No kill append; !
Z F< !**** Go get another user command !
Z
Z !CB! !*Begin ^B execution !
Z QO< !*Repeat by repeat count !
Z -.; !*Exit iteration if at buffer beginning !
Z R !*Backup one character !
Z > !*End of repeat iteration !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get another user command !
Z
Z !CC! !*Begin ^C execution !
Z 0; !*Return to teco level (can restart with MI) !
Z
Z !CD! !*Begin ^D execution !
Z QO< !*Repeat by repeat count in QON !
Z .-Z; !*Exit iteration if at buffer end !
Z D !*Delete one character !
Z > !*End of iteration !
Z 1^_&QZ#2UZ !*No kill append; buffer modified !
Z F< !**** Go get next user command !
Z
Z !CE! !*Begin ^E execution !
Z L !*Go to end of current line !
Z ."N !*If not at beginning of buffer then !
Z -1A-10"E !*If previous character is a LF then !
Z 2R !*Back up over CRLF characters !
Z ' !*End of CRLF backover operation !
Z ' !*End of buffer beginning check !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get next user command !
Z
Z !CF! !*Begin ^F execution !
Z QO< !*Do by repeat count !
Z .-Z; !*Exit iteration if at buffer end !
Z C !*Go forward one character !
Z > !*End of iteration !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get next user command !
Z
Z !CG! !*Begin ^G execution !
Z 0UX !*Abort any pending macro repeats !
Z 0UY !*Abort any pending commands in a current macro !
Z 16#32^_&QZUZ !*Reset screen inhibit and macro collection bits!
Z 7MM !*Ring terminal's bell (no dirty thoughts now!) !
Z MO !*Refresh status line !
Z F< !**** Go get next user command !
Z
Z !CK! !*Begin ^K execution !
Z QO< !*Do the number of kills specified by repeat !
Z .-Z; !*If at end of buffer then exit kill !
Z 0AUA !*QAN <= ascii code of next char in buffer !
Z QA-13"E !*If it is a CR then kill the CRLF only !
Z QZ&1"N !*If append bit is set then append kill !
Z .,.+2:XZ !*Append CRLF to kill buffer 1 !
Z | !*Else if append bit is not set then !
Z GZ !*Pull kill buffer 1 contents into text buffer !
Z ^YXY !*QTY <= second most recent kill !
Z ^YK !*Delete second most recent kill from text buffr!
Z .,.+2XZ !*QTZ <= CRLF from end of line !
Z QZ#1UZ !*Set the append bit for further kills !
Z ' !*End of CRLF kill in non-append mode !
Z 2D !*Delete CRLF from buffer !
Z | !*Else if not at end of line then !
Z .-Z; !*Exit the kill command if at buffer end !
Z .UA !*Save current pointer position !
Z L !*Go to end of current line (after CRLF) !
Z -.; !*If at top of buffer then exit kill command !
Z -1A-10"E !*If previous char is LF then !
Z 2R !*Back up over CRLF !
Z ' !*End of backup check !
Z QZ&1"N !*If append bit is set then append kill !
Z QA,.:XZ !*Append kill to buffer 1 !
Z | !*Else if append bit is not set then !
Z GZ !*Pull kill buffer 1 contents into text buffer !
Z ^YXY !*QTY <= second most recent kill !
Z ^YK !*Delete second most recent kill from text buffr!
Z QA,.XZ !*QTZ <= current line up to CRLF !
Z QZ#1UZ !*Set the append bit for further kills !
Z ' !*End of non-EOL non-append !
Z QA,.K !*Kill the line up to CRLF !
Z ' !*End of non-EOL kill !
Z > !*End of kill iteration !
Z 2#QZUZ !*Set buffer modified bit !
Z F< !**** Go get next command !
Z
Z !CL! !*Begin ^L execution !
Z ^^HMM !*Send cursor to home position !
Z ^^JMM !*Erase the entire screen (including last lines)!
Z 0,5:W !*Turn off hold mode temporarily !
Z ^[ !*Discard numeric argument returned by :W cmd !
Z -1W !*Update the screen !
Z -1,5:W !*Turn hold mode back on !
Z MO !*Put status line back in !
Z F< !**** Go get next command !
Z
Z !CN! !*Begin ^N execution !
Z 1UA !*Set up for down one line !
Z @O!M! !**** Go do the move !
Z
Z !CO! !*Begin ^O execution !
Z QO< !*Repeat by count !
Z 13 at I%% !*Insert a CR character !
Z 10 at I%% !*Insert a LF character !
Z 2R !*Back up over the CRLF !
Z > !*End of repeat loop !
Z 1^_&QZ#2UZ !*No kill append; buffer modified !
Z F< !**** Go get next command !
Z
Z !CP! !*Begin ^P execution !
Z -1UA !*Set up for UP one line !
Z !M! !*^N and ^P move start label point !
Z QO*QAUO !*QON <= Number of lines to jump !
Z QW"E !*If position # unknown from previous then !
Z 0UD !*QD <= zero !
Z .UA !*QA <= current pointer loc !
Z 0L !*Go to beginning of current line !
Z QA-.%W< !*Repeat for # of char to original pointer loc !
Z 0A-32"L !*If next buffer char is not printable char !
Z 0A-27"N !*If next buffer char is not ESC then !
Z 0A-9"E !*If next bffer char is a tab then !
Z 6-(QD&7)%W^[ !* !
Z -2UD !* !
Z ' !* !
Z %D !*Increment char counter !
Z 1%W !*Increment char loc for the "^" char !
Z ' !*End of non-ESC test !
Z ' !*End of non-printable test !
Z C !*Move over one character !
Z %D !*Increment character counter !
Z > !*End of char location in line computation !
Z ' !*End of unknown location processing !
Z QOL !*Go to start of destination line !
Z -QWUC !*Initialize pointer location counter !
Z 0UD !*Clear character counter !
Z QW< !*Begin iteration to go to character location !
Z .-Z; !*If reached end of buffer then exit iteration !
Z 0A-32"L !*If next char is non-printable char then !
Z 0A-13"E !*If next char is also a CR then !
Z 0; !*Exit iteration; reached end of line !
Z ' !*End of CR processing !
Z 0A-27"N !*If next char is NOT an ESC then !
Z 0A-9"E !*If next char is a TAB then !
Z 6-(QD&7)%C^[!* !
Z -2UD !* !
Z ' !* !
Z %D !*Increment character counter !
Z 1%C !*Increment location counter !
Z ' !*End of non-ESC non-printable char processing !
Z ' !*End of non-printable char processing !
Z C !*Move over one character in line !
Z %D !*Increment character counter !
Z 1%C !*Increment location counter !
Z "G !*If we over ran the location then !
Z R !*Backup one character !
Z ' !*End of over run correction !
Z QC; !*If have reached location then exit iteration !
Z > !*End of new line move iteration !
Z 1^_&QZUZ !*No kill append !
Z @O!B! !**** Go get next command !
Z
Z !CQ! !*Begin ^Q execution !
Z MX !*Get the next input character !
Z ^[ !*Discard any returned numeric value !
Z QO< !*Repeat by count !
Z QT at I%% !*Insert the character !
Z > !*End of repeat loop !
Z 1^_&QZ#2UZ !*No append of next kill; buffer modified !
Z F< !**** Go get next command !
Z
Z !CS! !*Begin ^R or ^S execution !
Z QT-18"E !*If command is ^R then !
Z -QOUO !*Reverse search count !
Z ' !*End of search count negation for ^R command !
Z .UE !*QEN <= original pointer position !
Z 0,0XA !*QAT <= null string (initialize search string) !
Z < !*Begin infinite search iteration loop !
Z MX !*Get next command from command stream !
Z ^[ !*Discard any returned numeric value !
Z QT-7"E !*If command is ^G then !
Z QEJ !*Jump back to original pointer location !
Z 24MH !*Flush the current prompt line !
Z 0; !*Exit the search iteration !
Z ' !*End of ^G processing inside ^S loop !
Z QT-18"E !*If input char is a ^R then !
Z :QA"E !*If search string is null then !
Z GV !*Pull previous successful search string in !
Z ^YXA !*QAT <= previous search string !
Z ^YK !*Delete string from text buffer !
Z @O!S! !*Go search for new string !
Z | !*Else if string is not null then !
Z .UF !*QFN <= last successful search pointer loc !
Z @O!S2! !*Go do search but start from current location !
Z ' !*End of non-null ^R processing !
Z ' !*End of ^R processing inside ^S loop !
Z QT-19"E !*If input char is a ^S then !
Z :QA"E !*If search string is null then !
Z GV !*Pull previous successful search string in !
Z ^YXA !*QAT <= previous search string !
Z ^YK !*Delete string from text buffer !
Z @O!S! !*Go search for new string !
Z | !*Else if string is not null then !
Z .UF !*QFN <= last successful search pointer loc !
Z @O!S2! !*Go do search but start from current location !
Z ' !*End of non-null ^S processing !
Z ' !*End of ^S processing inside ^S loop !
Z QT-27"E !*If input char is ESC then !
Z 0; !*Exit search loop !
Z ' !*End of ESC processing inside ^S loop !
Z QT-127"E !*If input is DELETE char then !
Z :QA"N !*If search string is not null then !
Z GA !*Pull string into text buffer !
Z ^Y-1XA !*QAT <= truncated search string !
Z ^YK !*Kill search string in text buffer !
Z 24MH !*Flush the current prompt line !
Z ' !*End of non-null DELETE processing !
Z @O!S! !*Jump to search begin point !
Z ' !*End of DELETE char processing !
Z @QT:^UA%% !*Append input character to QAT !
Z !S! !*Search label point !
Z .UF !*QFN <= last successful search pointer loc !
Z QEJ !*Start search from original location !
Z !S2! !*Label point for search starting from current !
Z 16^_&QZUZ !*Reset screen update inhibit bit !
Z QO:@S%^EQA% !*Search for occurance specified by QON !
Z "U !*If search was not successful then !
Z QFJ !*Go back to last successful location !
Z 24MH !*Go ready the prompt line !
Z @^UB%Not% !*QBT <= "Not" !
Z @32:^UB%% !*QBT <= "Not " !
Z @:^UB%Found:% !*QBT <= "Not Found:" !
Z @32:^UB%% !*QBT <= "Not Found: " !
Z :GB !*Show "Not Found: " to user !
Z :GA !*Show search string to user !
Z 32768W !*Tell TECO to forget we messed with screen !
Z QY"N !*If inside an EMACS macro then !
Z 0UX !*Flush macro repeat count to abort macros !
Z 0UY !*Abort any commands left in the current macro !
Z 24MH !*Flush the prompt line !
Z 0; !*Exit the search iteration !
Z | !*Else if not inside macro !
Z 16#QZUZ !*Set terminal update inhibit bit !
Z ' !*End of EMACS macro test !
Z | !*Else if the search was successful then !
Z QO"L !*If search is reverse then !
Z .+^SJ !*Jump to beginning of string !
Z ' !*End of reverse search pointer adjustment !
Z GA !*Get the successful search string !
Z ^YXV !*QVT <= most recent successful search string !
Z ^YK !*Delete string from text buffer !
Z 1^_&QZUZ !*Reset append next kill bit !
Z ' !*End of search success test !
Z > !*End of search loop !
Z 16^_&QZUZ !*Insure terminal update inhibit gets reset !
Z QE-."N !*If final position is not same as initial then !
Z 1^_&QZUZ !*Reset append next kill bit !
Z ' !*End of pointer movement test !
Z F< !**** Go get next command !
Z
Z !CV! !*Begin ^V execution !
Z 20*QOL !*Jump down that many windows !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get next command !
Z
Z !CW! !*Begin ^W execution !
Z QZ&1"N !*If append mode then !
Z QM,.:XZ !*Append the marked region to kill buffer 1 !
Z ' !*End of append !
Z QZ&1"E !*If non-append mode then !
Z GZ !*Pull kill buffer 1 contents into text buffer !
Z ^YXY !*QTY <= second most recent kill !
Z ^YK !*Delete second most recent kill from text buffr!
Z QM,.XZ !*QZT <= Currently marked region !
Z QZ#1UZ !*Set append bit in QNZ !
Z ' !*End of non append kill save !
Z QM,.K !*Kill from last mark to current point !
Z 2#QZUZ !*Mark buffer modified !
Z F< !**** Go get next command !
Z
Z !CY! !*Begin ^Y execution !
Z :QZ"N !*If kill buffer length is not zero then !
Z QO<GZ> !*Get current kill buffer 1 contents !
Z 1^_&QZ#2UZ !*No append on next kill; buffer modified !
Z ' !*End of unkill operation !
Z F< !**** Go get next command !
Z
Z
Z!*ESC COMMAND MACROS START HERE !
Z
Z !$! !*Begin input of 2nd char in 2 char cmd !
Z MX !*Get 2nd char from user !
Z
Z ^[ !*Discard any returned numeric value !
Z
Z QT-7"E !*If command is an ESC-^G then !
Z F< !**** Go get next command !
Z ' !*End off ESC-^G execution !
Z
Z QT"D !*If input was a numeric arg then !
Z 0UO !*QO <= 0 (clear repeat count) !
Z 16#QZUZ !*Set inhibit screen update during input bit !
Z -1UA !*QAN <= -1 (no loop exit) !
Z < !*Begin infinite numeric fetch loop !
Z QA; !*Exit when input was not digit !
Z QO*10+QT-^^0UO !*Build numeric value !
Z MX !*Get next char !
Z ^[ !*Discard any returned numeric value !
Z QT-7"E !*If input is ^G then !
Z 1UO !*Reset repeat count to 1 !
Z 0; !*Exit the iteration !
Z ' !*End of ^G trap !
Z 0UA !*Set up to cause loop exit !
Z QT"D !*If was a digit in then !
Z -1UA !*Set up to stay in loop !
Z ' !*End of digit test !
Z > !*End of infinite numeric loop !
Z 16^_&QZUZ !*Reset inhibit screen update during input bit !
Z @O!V! !**** Go execute next command !
Z ' !*End of numeric arg input !
Z
Z QT"V !*If 2nd char is lower case alpha then !
Z QT-32UT !*Convert to upper case !
Z ' !*End of case conversion !
Z
Z QT-^^X"E !*If command is an ESC-X- command then !
Z @O!$X! !**** Go to ESC-X macros !
Z ' !*End of ESC-X test !
Z
Z QT-23"E !*If command is ESC-^W then !
Z 1#QZUZ !*Append next kill to kill buffer !
Z F< !**** Go get next command !
Z ' !*End of ESC-^W execution !
Z
Z QT-25"E !*If command is ESC ^Y then !
Z G9 !*Yank in the TECO minibuffer contents !
Z 1^_&QZ#2UZ !*No append next kill; buffer modified !
Z F< !**** Go get next command !
Z ' !*End of ESC ^Y execution !
Z
Z QT-27"E !*If command is ESC-ESC then !
Z @^UL%Command:% !*QLT <= Minibuffer prompt !
Z @32:^UL%% !*QLT <= "Command: " !
Z MN !*Get input string from user !
Z "U !*If string fetch was unsuccessful then !
Z 32768W !*Tell TECO to forget we fiddled with screen !
Z F< !**** Go get next command !
Z ' !*End of fetch failed test !
Z GS !*Pull string into buffer !
Z ^YXQ !*Push string into QQT !
Z ^YK !*Delete string from buffer !
Z @27:^UQ%% !*Append ESC to QQT !
Z @27:^UQ%% !*Append ESC to QQT !
Z MQ !*Execute TECO command !
Z F< !**** Go get next command !
Z ' !*End of ESC-ESC command execution !
Z
Z QT-^^B"E !*If command is ESC-B then !
Z QO< !*Do according to repeat count !
Z .UA !*Save current pointer !
Z @0,-1:S%^ES% !*Scan backwards for tabs & blanks !
Z "U !*If unsuccessful then !
Z J !*Jump to beginning of buffer !
Z 0; !*Exit the iteration !
Z ' !*End "no more" test !
Z .-QA+1"G !*If pointer didn't move backwards then !
Z < !*Begin iteration to move pointer back !
Z -.; !*Done if at beginning !
Z R !*Back up one character !
Z -.; !*Done if at beginning !
Z 0A-32"N !*If not a blank then !
Z 0A-9"N !*If not a tab then !
Z 0A-13"N !*If not a CR then !
Z 0A-10"N !*If not a LF then !
Z 0; !*Backup is done !
Z ' !*End of LF test !
Z ' !*End of CR test !
Z ' !*End of TAB test !
Z ' !*End of BLANK test !
Z > !*End of backup iteration !
Z @0,-1:S%^ES% !*Scan for 2nd occurance backwards !
Z "U !*If unsuccessful then !
Z J !*Jump to buffer beginning !
Z ' !*End of no 2nd occurance test !
Z ' !*End of pointer didn't move test !
Z > !*End of ESC-B iteration !
Z 1^_&QZUZ !*No append for next kill !
Z F< !**** Go get next command !
Z ' !*End of ESC-B command execution !
Z
Z QT-^^F"E !*If command is ESC-F then !
Z QO< !*Do according to repeat count !
Z .UA !*QAN <= current pointer position !
Z @0,1:S%^EL% !*Look for next line terminator !
Z .UB !*QBN <= possible line terminator pntr !
Z QAJ !*Return to original location !
Z @0,1:S%^ES% !*Scan rest of buffer for tabs & blanks !
Z .UC !*QCN <= possible tab/blank string pntr !
Z QB-QA"G !*If line terminator was also found !
Z QC-QB"G !*If line terminator was first then !
Z QBJ !*Go to it instead !
Z ' !*End of line term first test !
Z ' !*End of line term also found test !
Z .-QA"E !*If no move was made then !
Z 0; !*Exit the iteration if no more !
Z ' !*End of no more moves test !
Z > !*End of ESC-F iteration !
Z 1^_&QZUZ !*No append for next kill !
Z F< !**** Go get next command !
Z ' !*End of ESC-F command execution !
Z
Z QT-^^G"E !*If command is ESC G then !
Z .UA !*Save initial pointer location !
Z J !*Jump to buffer beginning !
Z QO-1L !*Go down specified number of lines-1 !
Z QA-."N !*If not back where we started then !
Z 1^_&QZUZ !*No append next kill !
Z ' !*End of pointer movement test !
Z F< !**** Go get next command !
Z ' !*End of ESC G command !
Z
Z QT-^^N"E !*If command is ESC-N then !
Z QOP !*Jump to that page !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get next command !
Z ' !*End of ESC-N command execution !
Z
Z QT-^^V"E !*If command is ESC-V then !
Z -20*QOL !*Jump back up that many windows !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get next command !
Z ' !*End of ESC-V command execution !
Z
Z QT-^^W"E !*If command is a ESC-W then !
Z GZ !*Pull kill buffer 1 contents into text buffer !
Z ^YXY !*QTY <= second most recent kill !
Z ^YK !*Delete second most recent kill from text buffr!
Z QM-."G !*If mark is ahead of pointer then !
Z .,QMXZ !*QZT <= region from pointer+1 to mark !
Z | !*Else if mark is behind pointer then !
Z QM,.XZ !*QZT <= region from mark+1 to pointer !
Z ' !*End of mark+1 to pointer region save !
Z 1^_&QZUZ !*Set no append !
Z F< !**** Go get next command !
Z ' !*End of ESC-W execution !
Z
Z QT-^^Z"E !*If command is ESC-Z then !
Z 0; !*Exit to teco level !
Z ' !*End of ESC-Z command execution !
Z
Z QT-^^%"E !*If command is ESC % then !
Z 1UB !*Enable query !
Z !QR! !*Query replace / replace common point !
Z @^UL%Replace:% !*QLT <= "Replace:" !
Z @32:^UL%% !*QLT <= "Replace: " !
Z MN !*Get the input string !
Z "U !*If failed then !
Z F< !**** Go get next command !
Z ' !*End of string fetch abort test !
Z GS !*Get the string that was input !
Z ^YXA !*QAT <= string to replace !
Z ^YK !*Delete string from buffer !
Z @^UL%With:% !*QLT <= "With:" !
Z @32:^UL%% !*QLT <= "With: " !
Z MN !*Get the input string !
Z "U !*If failed then !
Z F< !**** Go get next command !
Z ' !*End of string fetch abort test !
Z < !*Begin query replace loop !
Z 0,1:@S%^EQA% !*Find string to replace !
Z ; !*If search failed then exit !
Z 1^_&QZUZ !*Reset append next kill bit since pointer moved!
Z 32UT !*Fake a confirm by user !
Z QB"N !*If query is enabled then !
Z MP !*Get response from terminal stream !
Z ; !*If abort then exit loop !
Z ' !*End of user query !
Z QT-32"E !*If space bar was pressed then !
Z ^YK !*Kill the last found string !
Z GS !*Replace with replacement string !
Z 2#QZUZ !*Set buffer modified bit !
Z 1^_&QZUZ !*Reset append next kill bit !
Z ' !*End of positive replacement response test !
Z > !*End of query replace loop !
Z F< !**** Go get next command !
Z ' !*End of ESC % command processing !
Z
Z QT-^^*"E !*If command is ESC * then !
Z :QQ"N !*If length of last TECO cmd is not zero then !
Z ^^HMM !*Send cursor to home position !
Z ^^JMM !*Clear the screen !
Z :GQ !*Show the contents of the TECO minibuffer !
Z 16#QZUZ !*Disable screen update during command fetch !
Z MX !*Get the next command character (ignored) !
Z ^[ !*Discard any returned numeric value !
Z 16^_&QZUZ !*Enable screen updates again !
Z MO !*Refresh the status line !
Z 32^T !*Force TECO to update screen !
Z ' !*End of non null TECO cmd processing !
Z F< !**** Go get next command !
Z ' !*End of ESC * command execution !
Z
Z QT-^^<"E !*If command is ESC-< then !
Z 0J !*Jump to top of buffer !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get next command !
Z ' !*End of ESC-< command execution !
Z
Z QT-^^>"E !*If command is ESC-> then !
Z ZJ !*Jump to end of buffer !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get next command !
Z ' !*End of ESC-> command execution !
Z
Z QT-^^@"E !*If command is ESC-@ then !
Z .UM !*Set mark at current point !
Z 24MH !*Go ready the prompt line !
Z @^A%Set.% !*Tell user mark is set !
Z 32768W !*Tell TECO to forget we messed with screen !
Z F< !**** Go get next command !
Z ' !*End of ESC-@ command execution !
Z
Z 7MM !*ESC command not found; ring bell !
Z 32768W !*Forget that we rang terminal's bell (she did) !
Z F< !**** Go get next command !
Z
Z
Z!*^X COMMAND MACROS !
Z
Z !CX! !*^X commands start here !
Z MX !*Get the 2nd char in the ^X command !
Z
Z ^[ !*Discard any returned numeric value !
Z
Z QT-7"E !*If command is an ^X-^G then !
Z F< !**** Go get next command !
Z ' !*End off ^X-^G execution !
Z
Z QT"V !*If 2nd char is lower case alpha then !
Z QT-32UT !*Convert to upper case !
Z ' !*End of case conversion !
Z
Z QT-12"E !*If command is ^X ^L then !
Z .UC !*QCN <= current pointer location !
Z QMUA !*QAN <= Region start (mark location initially) !
Z .UB !*QBN <= Region end (pointer loc initially) !
Z QB-QA"L !*If mark is after pointer then !
Z QMUB !*QBN <= mark location !
Z .UA !*QAN <= pointer location !
Z ' !*End of mark/pointer reversal !
Z QAJ !*Jump to start of region !
Z QB-QA< !*For number of characters in region !
Z 0A"W !*If next character is uppercase then !
Z 0A+32 at I%% !*Insert matching lower case character !
Z D !*Delete the uppercase character !
Z R !*Back up over the new lower case character !
Z 2#QZUZ !*Set buffer modified bit !
Z ' !*End of case conversion !
Z C !*Go check next character !
Z > !*End of case conversion !
Z QCJ !*Jump back to start location !
Z F< !**** Go get next command !
Z ' !*End of ^X ^L processing !
Z
Z QT-14"E !*If command is ^X ^N then !
Z 6:W-1UA !*QAN <= buffer loc of char before home position!
Z QA"N !*If home position is not top of buffer then !
Z 8&QZ"N !*If output file is open then !
Z B,QAP !*Output from top to home to output file !
Z .-QAUE !*Adjust pointer to current loc BEFORE delete !
Z B,QAD !*Delete from buffer !
Z QEJ !*Jump to adjusted buffer loc (same rel pos) !
Z ^E"N !*If previous read found form feed then !
Z ZJ !*Jump to buffer end !
Z 12 at I%% !*Insert a form feed character !
Z QEJ !*Jump back to original location !
Z ' !*End of form feed append if necessary !
Z A !*Append a new page to current page !
Z ' !*End of output file open processing !
Z ' !*End of across page boundry append !
Z 1^_&QZUZ !*No append next kill !
Z F< !**** Go get next command !
Z ' !*End of ^X^N processing !
Z
Z QT-18"E !*If command is ^X-^R then !
Z @^UL%Read% !*QLT <= "Read" !
Z @32:^UL%% !*QLT <= "Read " !
Z @:^UL%file:% !*QLT <= "Read file:" !
Z @32:^UL%% !*QLT <= "Read file: " !
Z MN !*Go get input string !
Z "U !*If string fetch was unsuccessful then !
Z F< !**** Go get next command !
Z ' !*End of zero-length string test !
Z GS !*Pull file string into buffer !
Z ^YXB !*Put in QBT for safe keeping !
Z ^YK !*Purge from buffer !
Z 8&QZ"N !*If output file is open then !
Z 2&QZ"N !*If buffer has been modified then !
Z EC !*Move buffer to file and close file !
Z | !*Else if buffer has not been modified then !
Z EK !*Kill the output file !
Z ' !*End of output file open processing !
Z | !*Else if output file is not open then !
Z 2&QZ"N !*If buffer has been modified then !
Z MU !*Take action to save the buffer or delete it !
Z "U !*If aborted then !
Z F< !**** Go get next command !
Z ' !*End of abort trap !
Z ' !*End of buffer modified processing !
Z ' !*End of output file open/closed processing !
Z 2#8^_&QZUZ !*Reset modified and output file open bits !
Z @^UA%@:ER/% !*QTA <= all characters between "%" s !
Z GB !*Get the file string !
Z ^Y:XA !*Append it to EB command !
Z @:^UA%/% !*Append all char between "%" s to QTA !
Z HK !*Purge current buffer !
Z 4^_&QZUZ !*Reset input file open bit !
Z MA !*Try to open an old file for read only !
Z "S !*If successful open then !
Z G* !*Pull file file-spec into buffer !
Z ^YXK !*QKT <= primary input filespec !
Z HK !*Purge buffer !
Z A !*Pull in first page of the file !
Z 4#QZUZ !*Set input file open !
Z ' !*End of successful open execution !
Z 1#2^_&QZUZ !*No kill append; buffer not modified !
Z MO !*Update the status line !
Z F< !**** Go get next command !
Z ' !*End of ^X-^R execution !
Z
Z QT-19"E !*If command is ^X ^S then !
Z 8&QZ"N !*If output file is open then !
Z EC !*Move out rest of input file and close output !
Z 2#8^_&QZUZ !*Reset modified and output file open bits !
Z @^UA%@EB/% !*QAT <= "@EB/" !
Z GT !*Pull output file spec into text buffer !
Z ^S+.J !*Jump back to beginning of string (revs bug) !
Z .UA !*QAN <= loc before first filespec character !
Z @S%;% !*Search FORWARD for first ; character !
Z QA,.-1:XA !*Append filename minus the version number !
Z @:^UA%/% !*QAT <= "@EB/<filename>/" !
Z HK !*Purge current buffer !
Z MA !*Open the previous file for both input & output!
Z G* !*Get the new file spec !
Z ^YXT !*QTT <= new output file spec !
Z ^YXK !*QKT <= new input file spec !
Z HKA !*Purge buffer and pull in first page of file !
Z 1#4#8#QZUZ !*No kill append, output and input files open !
Z ' !*End of file save for open output file !
Z MO !*Update the status line to show new filename !
Z F< !**** Go get next command !
Z ' !* End of ^X ^S execution !
Z
Z QT-21"E !*If command is ^X ^U then !
Z .UC !*QCN <= current pointer location !
Z QMUA !*QAN <= Region start (mark location initially) !
Z .UB !*QBN <= Region end (pointer loc initially) !
Z QB-QA"L !*If mark is after pointer then !
Z QMUB !*QBN <= mark location !
Z .UA !*QAN <= pointer location !
Z ' !*End of mark/pointer reversal !
Z QAJ !*Jump to start of region !
Z QB-QA< !*For number of characters in region !
Z 0A"V !*If next character is lowercase then !
Z 0A-32 at I%% !*Insert matching uppercase character !
Z D !*Delete the lowercase character !
Z R !*Back up over the new uppercase character !
Z 2#QZUZ !*Buffer modified !
Z ' !*End of case conversion !
Z C !*Go look at next character !
Z > !*End of case conversion !
Z QCJ !*Jump back to start location !
Z F< !**** Go get next command !
Z ' !*End of ^X ^U processing !
Z
Z QT-22"E !*If command is ^X-^V then !
Z @^UL%Visit% !*QLT <= "Visit" !
Z @32:^UL%% !*QLT <= "Visit " !
Z @:^UL%file:% !*QLT <= "Visit file:" !
Z @32:^UL%% !*QLT <= "Visit file: " !
Z MN !*Go get input string !
Z "U !*If string fetch was unsuccessful then !
Z F< !**** Go get next command !
Z ' !*End of zero-length string test !
Z GS !*Pull file string into buffer !
Z ^YXB !*Put in QBT for safe keeping !
Z ^YK !*Purge from buffer !
Z 8&QZ"N !*If output file is open then !
Z 2&QZ"N !*If buffer has been modified then !
Z EC !*Move the new buffer to output file & close it !
Z | !*Else if buffer has not been modified then !
Z EK !*Kill the output file !
Z ' !*End of kill unmodified buffer & kill file !
Z | !*Else if output file is not open then !
Z 2&QZ"N !*If buffer has been modified then !
Z MU !*Take action to save the buffer !
Z "U !*If aborted then !
Z F< !**** Go get next command !
Z ' !*End of abort trap !
Z ' !*End of buffer modified processing !
Z ' !*End of output file is open/closed processing !
Z 2#8^_&QZUZ !*Reset modified and output file open bits !
Z @^UA%@:EB/% !*QTA <= all characters between "%" s !
Z GB !*Get the file string !
Z ^Y:XA !*Append it to EB command !
Z @:^UA%/% !*Append all char between "%" s to QTA !
Z HK !*Purge buffer !
Z MA !*Try to open an old file with backup !
Z "S !*If successful open then !
Z G* !*Pull complete filespec into buffer !
Z ^YXT !*QTT <= new output filespec !
Z ^YXK !*QKT <= new input filespec !
Z HKA !*Kill current buffer and pull in next !
Z 4#8#QZUZ !*Set input file open & output file open bit !
Z | !*Else if not successful open with backup then !
Z @^UA%@EW/% !*QTA <= all char between "%" s !
Z GS !*Pull file name back into buffer !
Z ^Y:XA !*Append the file string to QTA !
Z ^YK !*Kill file name in case it bombs !
Z @:^UA%/% !*Append the final commands to QTA !
Z MA !*Open a new file !
Z G* !*Pull output filespec into buffer !
Z ^YXT !*QTT <= new output file spec !
Z HK !*Purge the buffer !
Z 8#QZUZ !*Set output file open bit !
Z ' !*End of open file execution !
Z 1#2^_&QZUZ !*No kill append; buffer not modified !
Z MO !*Update status line !
Z F< !**** Go get next command !
Z ' !*End of ^X-^V execution !
Z
Z QT-23"E !*If command is ^X-^W then !
Z @^UL%Write% !*QLT <= "Write" !
Z @32:^UL%% !*QLT <= "Write " !
Z @:^UL%file:% !*QLT <= "Write file:" !
Z @32:^UL%% !*QLT <= "Write file: " !
Z MN !*Go get input string !
Z "U !*If string fetch was unsuccessful then !
Z F< !**** Go get next command !
Z ' !*End of zero-length string test !
Z 8&QZ"N !*If output file is open then !
Z EF !*Close the output file with no output !
Z 8^_&QZUZ !*Reset output file open bit !
Z ' !*End of output file is open processing !
Z @^UA%@:EW/% !*QTA <= all characters between "%" s !
Z GS !*Get the file string !
Z ^Y:XA !*Append it to EW command !
Z ^YK !*Delete file string from text buffer !
Z @:^UA%/% !*Append all char between "%" s to QTA !
Z MA !*Open a new output file !
Z "S !*If successful open then !
Z G* !*Pull in complete file spec !
Z ^YXT !*QTT <= output filespec !
Z ^YK !*Kill filespec from buffer !
Z 2#8#QZUZ !*Mark as modified; output file open !
Z ' !*End of open success test !
Z MO !*Update the status line !
Z F< !**** Go get next command !
Z ' !*End of ^X-^W execution !
Z
Z QT-24"E !*If command is a ^X-^X then !
Z .UN !*QN <= current pointer loc (next mark) !
Z QMJ !*Jump to marked position !
Z QNUM !*Set mark at previous pointer loc !
Z 1^_&QZUZ !*No kill append !
Z F< !**** Go get next user command !
Z ' !*End of ^X-^X command execution !
Z
Z QT-27"E !*If command is ^X-ESC then !
Z MQ !*Re-execute TECO macro in Q9 !
Z F< !**** Go get next command !
Z ' !*End of ^X-ESC command execution !
Z
Z QT-^^A"E !*If command is ^X A then !
Z 4&QZ"N !*If input file is open then !
Z ^E"N !*If previous read found a form feed then !
Z .UA !*QAN <= current pointer position !
Z ZJ !*Jump to end of buffer !
Z 12 at I%% !*Insert a form feed !
Z QAJ !*Jump back to original point !
Z ' !*End of form feed append if necessary !
Z A !*Append from input file !
Z ' !*End of append !
Z F< !**** Go get next command !
Z ' !*End of ^X A command execution !
Z
Z QT-^^E"E !*If command is ^X-E then !
Z -:QWUY !*Initialize up-counter for # of commands !
Z -QOUX !*Initialize macro repeat count !
Z F< !**** Go get next command !
Z ' !*End of ^X-E execution !
Z
Z QT-^^N"E !*If command is ^XN then !
Z .UE !*QEN <= Current pointer location !
Z MR !*Get cursor line number !
Z -1UB !*QBT <= # lines to get to home position !
Z -QBL !*Jump to start of first line on screen !
Z .UA !*QAN <= Char pointer value at home position !
Z QEJ !*Jump back to original location !
Z QA"N !*If home position is not top of buffer then !
Z 8&QZ"N !*If output file is open then !
Z .-QAUE !*Adjust pointer to current location before del !
Z B,QAP !*Output from top to home to output file !
Z B,QAD !*Delete from buffer !
Z QEJ !*Go to original location !
Z ' !*End of output file open processing !
Z ' !*End of make room execution !
Z F< !**** Go get next command !
Z ' !*End of ^XN processing !
Z
Z QT-^^Q"E !*If command is ^X-Q then !
Z QY"L !*If macro command fetch in progress then !
Z MP !*Get next command from terminal stream only !
Z QQ"E !*If response is ^G then !
Z F< !**** Go get next command !
Z ' !*End of ^G response processing !
Z QT-32"N !*If next input is not space char then !
Z 0UY !*Set macro fetch counter to zero to force exit !
Z %X !*Increment macro repeat counter !
Z "L !*If more macro loops left to be done then !
Z -:QWUY !*Restore command counter contents !
Z ' !*End of macro command counter restore !
Z ' !*End of macro abort test !
Z ' !*End of macro command query operation !
Z F< !**** go get next command !
Z ' !*End of ^X-Q execution !
Z
Z QT-^^T"E !*If command is ^X T then !
Z QY"L !*If macro command fetch in progress then !
Z -1W !*Update terminal screen !
Z ' !*End of commmand fetch in progress execution !
Z F< !**** Go get next command !
Z ' !*End of ^X T execution !
Z
Z QT-^^*"E !*If command is ^X-* !
Z :QW"N !*If macro string is not null then !
Z ^^HMM !*Send cursor home !
Z ^^JMM !*Clear the screen !
Z :GW !*Show user the current macro string !
Z 16#QZUZ !*Inhibit screen update !
Z MX !*Get the next character !
Z ^[ !*Discard any returned numeric value !
Z 16^_&QZUZ !*Reset screen update inhibit bit !
Z MO !*Refresh the status line !
Z 32^T !*Force TECO to update screen !
Z ' !*End of non null macro string processing !
Z F< !**** Go get next command !
Z ' !*End of X-* processing !
Z
Z QT-^^("E !*If command is ^X-( then !
Z 32#QZUZ !*Set macro collection bit in control word !
Z 0,0XW !*Purge previous macro (if any) !
Z MO !*Update the status line !
Z F< !**** Go get next command !
Z ' !*End of ^X-( execution !
Z
Z QT-^^)"E !*If command is ^X-) then !
Z 32&QZ"N !*If macro collection bit is set !
Z GW !*Get the current EMACS macro !
Z ^Y-2XW !*Push back minus the ^X and ) char !
Z ^YK !*Delete from text buffer !
Z 32^_&QZUZ !*Reset macro collection bit in control word !
Z MO !*Update the status line !
Z ' !*End of macro collection termination !
Z F< !**** Go get next command !
Z ' !*End of ^X-) execution !
Z
Z QT-^^="E !*If command is ^X = then !
Z .UA !*QAN <= current pointer position !
Z J !*Jump to beginning of buffer !
Z 1UB !*QBN <= initial line number !
Z < !*Start line count iteration !
Z L !*Go down one line !
Z .-QA; !*If past original start point then exit iter !
Z %B !*Increment the line count !
Z > !*End of line count iteration !
Z ."G !*If buffer is not empty then !
Z .-QA"E !*If at original start point then !
Z -1A-10"E !*If previous character is a LF then !
Z %B !*Increment the line count again !
Z ' !*End of CRLF test !
Z ' !*End of past start point test !
Z ' !*End of buffer not empty test !
Z QAJ !*Jump back to original start point !
Z 0L !*Go to start of that line !
Z QA-.UC !*QCN <= number of characters over !
Z QAJ !*Jump back to original start point !
Z ^^HMM !*Send cursor to home position !
Z ^^JMM !*Clear the screen !
Z @^A%Line% !*Show line number header !
Z 32^T !*Send blank to terminal !
Z QB= !*Show value to user !
Z @^A%After% !*Send char number header !
Z 32^T !*Send blank to terminal !
Z @^A%character% !*Send rest of char number header !
Z 32^T !*Send another blank to terminal !
Z QC= !*Show value to user !
Z 16#QZUZ !*Inhibit screen update during next cmd fetch !
Z MX !*Get next char from command stream (ignored) !
Z ^[ !*Discard any returned numeric value !
Z 16^_QZUZ !*Enable screen updates again !
Z MO !*Refresh the status line !
Z 32^T !*Force TECO to update screen on next -1W !
Z F< !**** Go get next command !
Z ' !*End of ^X = command execution !
Z
Z 7MM !*^X command not found; ring bell !
Z 32768W !*Forget that we rang terminal's bell (she did) !
Z F< !**** Go get next command !
Z
Z
Z!* ESC-X MACROS START HERE !
Z
Z !$X! !*Begin ESC-X macros !
Z MX !*Get next command character !
Z
Z ^[ !*Discard any returned numeric value !
Z
Z QT"V !*If char is lower case alpha then !
Z QT-32UT !*Convert to upper case !
Z ' !*End of case conversion !
Z
Z QT-7"E !*If command is an ESC-X-^G then !
Z F< !**** Go get next command !
Z ' !*End off ESC-X-^G execution !
Z
Z QT-^^C"E !*If command is an ESC X C then !
Z 3:W"E !*If see-all mode is off then !
Z 1,3:W !*Turn see-all mode on !
Z | !*Else if see-all mode is on then !
Z 0,3:W !*Turn see-all mode off !
Z ' !*End of see-all state flip-flop !
Z F< !**** Go get next command !
Z ' !*End of ESC X C processing !
Z
Z QT-^^D"E !*If command is an ESC X D then !
Z ^BUA !*QAN <= code for current date !
Z QA/512UB !*QBN <= current year !
Z QA-(QB*512)/32UC !*QCN <= current month !
Z QA-(QA/32*32)UD !*QDN <= current day !
Z QC-10"L !*If month is less than 10 then !
Z @I%0% !*Insert a leading 0 in text buffer !
Z ' !*End of leading zero insertion !
Z QC\ !*Insert month in text buffer !
Z @I%-% !*Insert "-" character in text buffer !
Z QD-10"L !*If day is less than 10 then !
Z @I%0% !*Insert a leading zero !
Z ' !*End of leading zero insertion !
Z QD\ !*Insert day in text buffer !
Z @I%-% !*Insert a "-" in text buffer !
Z QB-10"L !*If year is less than 10 then !
Z @I%0% !*Insert a "0" in text buffer !
Z ' !*End of leading zero insertion !
Z QB\ !*Insert year in text buffer !
Z 1^_&QZ#2UZ !*No append next kill; buffer modified !
Z F< !**** Go get next command !
Z ' !*End of ESC X D execution !
Z
Z QT-^^O"E !*If command is an ESC X O then !
Z @^UL%String:% !*QLT <= "String:" !
Z @32:^UL%% !*QLT <= "String: " !
Z MN !*Get the search string !
Z "U !*If string fetch failed then !
Z 32768W !*Tell TECO to forget we fiddled with screen !
Z F< !**** Go get next command !
Z ' !*End of fetch failed trap !
Z .UE !*Save current buffer pointer !
Z @:S%^EQS% !*Find an occurance of string (if any) !
Z "S !*If there is at least one then !
Z ^^HMM !*Send cursor home !
Z ^^JMM !*Erase screen !
Z < !*Begin iteration to display occurances !
Z 0L !*Go to start of line containing occurance !
Z T !*Show line to user !
Z L !*Resume search at next line !
Z @:S%% !*Look for next occurance !
Z ; !*Exit iteration when no more found !
Z > !*End of search & show loop !
Z QEJ !*Return to original location !
Z 16#QZUZ !*Inhibit screen update during input !
Z MX !*Get next character from input stream !
Z ^[ !*Discard any returned numeric value !
Z 16^_&QZUZ !*Enable screen updates again !
Z MO !*Refresh status line !
Z 32^T !*Force TECO to update screen on next -1W !
Z ' !*End of occurances display when string found !
Z F< !**** Go get next command !
Z ' !*End of ESC X O processing !
Z
Z QT-^^R"E !*If command is an ESC X R !
Z 0UB !*Disable query !
Z @O!QR! !*Jump to query replace / replace common !
Z ' !*End of ESC X R processing !
Z
Z QT-^^T"E !*If command is an ESC X T then !
Z ^HUA !*QAN <= # seconds since midnight / 2 !
Z QA/1800UB !*QBN <= # hours since midnight !
Z QA-(QB*1800)/30UC !*QCN <= # minutes in current hour !
Z QA-(QA/30*30)*2UD !*QDN <= # seconds in current minute !
Z QB-10"L !*If # hours is less than 10 then !
Z @I%0% !*Insert a "0" in text buffer !
Z ' !*End of leading zero insertion !
Z QB\ !*Insert # hours in text buffer !
Z @I%:% !*Insert a ":" in text buffer !
Z QC-10"L !*If # minutes is less than 10 then !
Z @I%0% !*Insert a leading 0 in text buffer !
Z ' !*End of leading zero insertion !
Z QC\ !*Insert # minutes in text buffer !
Z @I%:% !*Insert ":" character in text buffer !
Z QD-10"L !*If # seconds is less than 10 then !
Z @I%0% !*Insert a leading zero !
Z ' !*End of leading zero insertion !
Z QD\ !*Insert # seconds in text buffer !
Z 1^_&QZ#2UZ !*No append next kill; buffer modified !
Z F< !**** Go get next command !
Z ' !*End of ESC X T execution !
Z
Z 7MM !*ESC-X command not found; ring bell !
Z 32768W !*Forget that we rang terminal's bell (she did) !
Z F< !**** Go get next command !
Z
Z
Z!*^Z MACROS START HERE !
Z
Z !CZ! !*Begin ^Z macros !
Z MX !*Get next command character !
Z
Z ^[ !*Discard any returned numeric value !
Z
Z QT"V !*If 2nd char is lower case alpha then !
Z QT-32UT !*Convert to upper case !
Z ' !*End of case conversion !
Z
Z QT-6"E !*If command is ^Z-^F then !
Z GT !*Get filename !
Z 1^_&QZ#2UZ !*No append; modified !
Z F< !**** Go get next command !
Z ' !*End of ^Z-^F execution !
Z
Z QT-7"E !*If command is an ^Z-^G then !
Z F< !**** Go get next command !
Z ' !*End off ^Z-^G execution !
Z
Z QT-26"E !*If command is ^Z-^Z then close files and exit !
Z 8&QZ"N !*If output file is open then !
Z 2&QZ"N !*If buffer has been modified then !
Z EC !*Move rest of file to output and close file !
Z | !*Else if buffer has not been modified then !
Z EK !*Kill the output file !
Z ' !*End of output open processing !
Z | !*Else if output file is not open then !
Z 2&QZ"N !*If buffer has been modified then !
Z MU !*Take steps to save or purge buffer !
Z "U !*If aborted then !
Z F< !**** Go get next command !
Z ' !*End of abort trap !
Z ' !*End of modified buffer test !
Z ' !*End of output file open/closed processing !
Z ^^HMM !*Send cursor home !
Z ^^JMM !*Erase screen !
Z HK !*Purge the buffer to insure exit capability !
Z EX !*Exit the editor !
Z ' !*End of ^Z-^Z execution !
Z
Z 7MM !*ESC-X command not found; ring bell !
Z 32768W !*Forget that we rang terminal's bell (she did) !
Z F< !**** Go get next command !
Z
Z > !* !
Z~
Z
Z!* END OF MACRO LOADS INTO Q REGISTERS !
Z
ZHK !*Purge the buffer !
ZMI !*Begin execution of infinite iteration !
Z!BY! !*Jump in point for non-EMACS bypass !
ZEI
STUNKYFLUFF
set `sum emacs11.tec`
if test 48995 != $1
then
echo emacs11.tec: Checksum error. Is: $1, should be: 48995.
fi
#
#
echo Extracting vaxbld.tec:
sed 's/^Z//' >vaxbld.tec <<\STUNKYFLUFF
Z! VAXBLD.TEC --- TECO command file to strip the [FISH.EMACS]EMACS.SRC !
Z! File of all extraneous characters such as !
Z! comments, blanks, tabs, and CRLF's. This !
Z! results in TECO macro file called !
Z! [FISH.EMACS]EMACS.TEC which is of minimum possible size. !
Z
Z! NOTE: This file contains two non-printing characters; !
Z! a pair of ESC's at the end !
Z
Z1^_&ED#2ED ! ^ means control in searchs; no yank prot !
ZET#64ET ! Run in detached mode !
Z at ER/[FISH.EMACS]EMACS.SRC/ ! Open source file !
Z at EW/[FISH.EMACS]EMACS.TEC/ ! Open destination file !
Z at _/!* START !/ ! Find the code start point !
Z0L
ZK
Z@^UI|
Z A
Z <
Z .UB
Z @^A%Removing comments%
Z 13^T
Z 10^T
Z <
Z @:S/!*/
Z ;
Z 2R
Z K
Z >
Z QBJ
Z @^A%Replacing CRLFs with blanks%
Z 13^T
Z 10^T
Z <
Z @:S/^EL/
Z ;
Z -1A-10"E
Z -2D
Z @I/ /
Z '
Z >
Z QBJ
Z @^A%Compressing blanks and tabs%
Z 13^T
Z 10^T
Z <
Z @:FS/^ES/ /
Z ;
Z >
Z QBJ
Z @^A%Restructuring lines%
Z 13^T
Z 10^T
Z <
Z Z-.-80U2
Z Q2"G
Z 80C
Z @:-FS/ //
Z ;
Z 13 at I//
Z 10 at I//
Z '
Z -Q2;
Z >
Z ^N"N
Z @^A%EOF found%
Z 13^T
Z 10^T
Z 0;
Z '
Z @^A%Getting next page%
Z 13^T
Z 10^T
Z A
Z >
Z|
ZMI
ZEC
Z at EB/[FISH.EMACS]EMACS.TEC/
ZMI
ZJ
Z@^A%Final blank compression%
Z13^T
Z10^T
Z<
Z @:FS/ //
Z ;
Z>
Z1ET
Z27^T
Z7^T
Z@^A% Done !!!%
Z13^T
Z10^T
ZEX
Z ! Close files and exit !
STUNKYFLUFF
set `sum vaxbld.tec`
if test 47133 != $1
then
echo vaxbld.tec: Checksum error. Is: $1, should be: 47133.
fi
echo ALL DONE BUNKY!
exit 0
More information about the Comp.sources.unix
mailing list