mirror of
https://github.com/PDP-10/its.git
synced 2026-03-20 08:28:43 +00:00
EMACS 142 from TENEX or SUMEX or something.
This commit is contained in:
12481
src/e142/atsign.mid
Normal file
12481
src/e142/atsign.mid
Normal file
File diff suppressed because it is too large
Load Diff
74
src/e142/changes.142
Normal file
74
src/e142/changes.142
Normal file
@@ -0,0 +1,74 @@
|
||||
Changes to EMACS in version 142:
|
||||
|
||||
I believe this covers all of the visible changes; if you
|
||||
find any more PLEASE let me (Rubenstein) know so I can add
|
||||
it to the list. In addition to the following, the internal
|
||||
documentation has been cleaned up and simplified considerably,
|
||||
an attempt which is still going on. If you come across anything
|
||||
that you think is unclear, please let me know.
|
||||
|
||||
1. File visiting changed somewhat; C-X C-E command removed.
|
||||
See internal documentation for new behavior.
|
||||
|
||||
2. In autosave mode, C-X C-S does a normal save (i.e. with real
|
||||
filename). If given an argument, saves under autosave filename
|
||||
(i.e. sense of argument reversed).
|
||||
|
||||
3. C-X : (^R Set Column) removed.
|
||||
|
||||
4. The Count Lines command has been removed. In its place, C-X L
|
||||
(which normally counts lines on a page) can be given an argument,
|
||||
causing it to count lines in the whole buffer.
|
||||
|
||||
5. The command C-] has been changed from Macro Q-register to
|
||||
Abort Recursive Edit. This can be used as an emergency exit
|
||||
to commands which call EMACS recursively (e.g. Alter Options).
|
||||
|
||||
6. Comments which start with two comment start characters are
|
||||
aligned as if they were code. Triple comment character
|
||||
causes alignment at left margin. This will mostly interest
|
||||
lisp people.
|
||||
|
||||
7. M-K now kills next sentence, rather than duplicating M-D.
|
||||
|
||||
8. C-M-X runs Instant Extended Command. Like M-X with no
|
||||
arguments. See the internal doc.
|
||||
|
||||
9. All "Exchange" commands have been renamed "Transpose"
|
||||
|
||||
10. The "Lisp ) Hack" variable is now renamed to "Display matching
|
||||
Paren" and defaults ON.
|
||||
|
||||
11. Variable Apropos, List One File have been deleted.
|
||||
|
||||
12. Count Lines, Make Variable and Set Variable Comment have
|
||||
been made into subroutines.
|
||||
|
||||
13. Edit ..D has been renamed to Edit Syntax Table.
|
||||
|
||||
14. Get Date has been renamed to Insert Date.
|
||||
|
||||
15. Several new commands: Undo, Set Variable, Set Key, Delete File,
|
||||
Copy File, and Rename File. See internal documentation for
|
||||
description.
|
||||
|
||||
16. The Auto Save on exit now saves in the real filename.
|
||||
|
||||
17. Teleray 1061 and Heath terminals are now supported as
|
||||
terminal types 17 and 18. Anyone using a terminal
|
||||
other than a datamedia, please drop me a note... I'd
|
||||
like to know what other terminal support is required.
|
||||
|
||||
18. Redisplay is much smarter about tabs, when to use I/D char, etc.
|
||||
|
||||
19. Most minor mode commands (Auto Fill, Auto Save, Overwrite, etc)
|
||||
now toggle the mode if given no argument. They still turn the
|
||||
mode on with arg > 0 and off with arg <= 0.
|
||||
|
||||
20. Auto save mode now takes only one argument, turning it on or off.
|
||||
Number of versions and interval are now controlled by setting
|
||||
the variables Auto Save Max and Auto Save Interval.
|
||||
|
||||
21. Libraries may now contain a macro called & Kill <libname> Library
|
||||
which can do any necessary cleaning up if and when that library
|
||||
is killed.
|
||||
BIN
src/e142/chess._ej
Normal file
BIN
src/e142/chess._ej
Normal file
Binary file not shown.
969
src/e142/conv.
Normal file
969
src/e142/conv.
Normal file
@@ -0,0 +1,969 @@
|
||||
-*-Text-*-
|
||||
|
||||
File: CONV Node: Top Up: (DIR) Next: Init
|
||||
|
||||
Programming in TECO for EMACS
|
||||
|
||||
* Menu:
|
||||
|
||||
* Init Files: Init INIT files and what they can do.
|
||||
* Syntax: Syntax Syntax library source files to be compiled by
|
||||
the EMACS library compiler.
|
||||
* Libraries: Lib Other conventions for Libraries and sources.
|
||||
* Programming: Prog Conventions for TECO programs to be operated
|
||||
in the EMACS enviromnment.
|
||||
* Variables: Vars Named variable (QFoo, etc) conventions.
|
||||
* Major Modes: Major How to define new major modes.
|
||||
* Submodes:: How to define submodes.
|
||||
* Prefix:: Prefix characters, such as C-X.
|
||||
* Hooks:: Variables which EMACS will call at specific times.
|
||||
* Dump:: Dumping EMACS environments.
|
||||
* Build:: Building and dumping a new EMACS.
|
||||
* Wall Charts:: Making wall charts.
|
||||
* Q-registers: Qregs Conventions for use of Q-registers.
|
||||
* FS ^R PREV$: FS^RPREV Conventions for setting/examining FS ^R PREV.
|
||||
* Debugging: Debug Debugging aids in EMACS.
|
||||
|
||||
File: CONV Node: Init, Up: Top, Previous: Top, Next: Syntax
|
||||
|
||||
INIT Files.
|
||||
|
||||
Each user can have his own file of TECO commands for EMACS to
|
||||
execute each time he starts it up. EMACS looks for the file
|
||||
<hsname>;<user> EMACS and then for <hsname>;* EMACS, where <hsname>
|
||||
stands for the user's home directory. If neither file exists, the
|
||||
file EMACS;* EMACS (the default init file) is used instead.
|
||||
On Twenex, the init file is called EMACS.INIT in your login directory,
|
||||
and the default init file is <EMACS>EMACS.INIT.
|
||||
|
||||
You can cause an EMACS to read another user's init file by giving it
|
||||
that user's name as its XUNAME; just do <user>^S in DDT immediately
|
||||
before starting the EMACS.
|
||||
|
||||
Setting up the default ^R command definitions and named variables
|
||||
need not be done in an init file, since that is done before the EMACS
|
||||
environment is dumped out. As a result, your init file need only
|
||||
define those commands which you wish to change. Use MM Load Lib to
|
||||
load any additional libraries (or the :EJ command, for libraries which
|
||||
have no & Setup <library> Library macro). To obtain a function as a
|
||||
value so you can put it on a character, simply use M.M <name> . The
|
||||
U command can define a character, as in for example U..^RX which puts
|
||||
its argument on Meta-X. Use M.V to create and assign a variable, or
|
||||
better yet M.C to give it some documentation as well.
|
||||
|
||||
When the init file is started, all q-registers not used by EMACS
|
||||
(and described herein) will probably be zero. One exception is Q1,
|
||||
which contains the version number of [PURE], as a string. The default
|
||||
init file types this out as the "EMACS version number".
|
||||
|
||||
If you have no init file, EMACS runs the default init file, which is
|
||||
the init file on the EMACS directory. This does various things such
|
||||
as processing a command line from the superior, loading LISPT if
|
||||
necessary, printing the EMACS version number and offering help,
|
||||
checking for lower case characters on an upper-case only terminal, ...
|
||||
|
||||
Most people will find that they wish to perform the actions of the
|
||||
default init file after their own peculiar initializations.
|
||||
To do this, just end your own init file with
|
||||
|
||||
ER EMACS;* EMACS @Y ET@ > :M(HFX*)
|
||||
|
||||
(On Twenex, do EREMACS;EMACS INIT or ER<EMACS>EMACS.INIT instead)
|
||||
This practice is recommended because some of the things in the default
|
||||
init file are important for the proper functioning of EMACS.
|
||||
If you wish to override the default init file's offer of help, or the
|
||||
JCL processing, then instead of doing the :M with an empty buffer you
|
||||
should put in the buffer a string to be treated as if it were the JCL.
|
||||
|
||||
FJ
|
||||
Z"E I<what to use for JCL when there is none>'
|
||||
ZJ .F[VB
|
||||
ER EMACS;* EMACS ^Y ET@ >
|
||||
:M( HFX*( F]VB))
|
||||
|
||||
Putting just Altmode Space in the buffer when there is no JCL will
|
||||
prevent the default init file from offering help. For this, use
|
||||
Z"E I ' in the above example.
|
||||
|
||||
If you have enough of your own macros to have a private library of
|
||||
them, you need not have both the library and an init file to load the
|
||||
library. You can just call your library <user> EMACS and give it a
|
||||
~Filename~ of INIT and a & Setup INIT Library macro to perform the
|
||||
other initialization. The & Setup INIT Library macro should end by
|
||||
reading in the default init file, just as an ordinary init file
|
||||
should, but the calling convention is slightly different:
|
||||
|
||||
:I..9 ER EMACS;* EMACS @Y ET@ > :M(HFX*)
|
||||
|
||||
This section does not intend to be intelligible without reference to
|
||||
TECO ORDER and to the rest of this file.
|
||||
|
||||
File: CONV Node: Syntax, Up: Top, Previous: Init, Next: Lib
|
||||
|
||||
Syntactic Conventions for TECO Macro Files:
|
||||
|
||||
A source file of EMACS macros contains one macro on each page. Each
|
||||
macro has a name and documentation as well as its definition. These
|
||||
source files are processed by a compressor which deletes spaces and
|
||||
comments and performs other syntactic transformations before they are
|
||||
run. You can also ask to compress and install a single macro, for
|
||||
testing, by pointing at it and using MM Compile.
|
||||
|
||||
Every macro's definition begins with the macro name, which is
|
||||
preceded by a ! and followed by :!. You must not ever put a :!, even
|
||||
with spaces in between, in a macro source file except to end a macro
|
||||
name. The macro name must be the first thing on a page except for a
|
||||
CRLF which must follow the previous formfeed on pages after the first.
|
||||
The name conventions are that subroutine names start with "& " and
|
||||
names of commands intended to be put on characters start with "^R ".
|
||||
This is to keep them from limiting the user's ability to abbreviate
|
||||
the names of commands he wishes to type. Another convention is that
|
||||
"#" begins the names of commands which form a dispatch table. For
|
||||
example, in INFO, the command M causes # INFO M to be run. If you
|
||||
define a command named # INFO +, that will automatically give you an
|
||||
INFO command called +.
|
||||
|
||||
After the macro name comes a space, an !, and then the macro class.
|
||||
Then, after another space, the rest of the line is the "brief"
|
||||
documentation which is used when only a single line is wanted. It
|
||||
should be a complete sentence. The macro class should be the
|
||||
character C for a command which users should call by name, S for a
|
||||
command intended to be used as a subroutine, and ^R for a command
|
||||
intended to be placed on a character. The macro class does not
|
||||
restrict how the macro can actually be used; some of the
|
||||
documentation commands filter commands to be described by class.
|
||||
|
||||
The macro may have only the brief documentation. In this case, the
|
||||
brief documentation should be followed by an !. Otherwise, the lines
|
||||
following the brief documentation are the full documentation, which
|
||||
ends with the first !. The ! must be at the end of its line, and
|
||||
should not be an excuse to omit punctuation for the last sentence,
|
||||
since it will not be seen by the user. To put an ! in the text of the
|
||||
documentation, use control-^.
|
||||
|
||||
After the line ending with !, the next line contains the beginning
|
||||
of the macro definition proper. Usually, a blank line is put there to
|
||||
improve readability. You must remember that the definition will not
|
||||
be used as written, but will be processed syntactically first: all
|
||||
spaces and tabs, except those following a ^Q, will be deleted. all
|
||||
_'s not following a ^Q will be turned into spaces. !* is taken to
|
||||
start a comment and everything from there up to and including the
|
||||
following ! is deleted (again, a ^Q will prevent this). Double CRLFs
|
||||
are converted to single ones. Normally, you should use ^]^Q to do
|
||||
such quoting, since that is safe in all contexts. Inside search
|
||||
commands and file commands a ^Q by itself is enough.
|
||||
|
||||
Every macro definition should end with a CRLF, after which may come
|
||||
a ^L and the next macro definition. Macro definitions are separated
|
||||
only by CRLF ^L CRLF. A ^L in the middle of the line is just part of
|
||||
a macro. If you want to put CRLF ^L CRLF inside a macro, use CRLF
|
||||
^]^Q^L CRLF.
|
||||
|
||||
The major mode TECO Mode is useful for editing EMACS source files.
|
||||
Comments are defined to start with !* and end with !.
|
||||
Tab is set to the command ^R Indent Nested, which normally moves the
|
||||
current line to be under the previous line. With an argument, it
|
||||
takes the argument to be the number of levels "up" to go, where up
|
||||
means a lesser amount of indentation. Thus, Tab with an argument of 2
|
||||
or more is good for the first line after the end of a conditional or
|
||||
iteration. In addition, unindented lines and lines containing only
|
||||
comments are ignored. In addition, Meta-' is defined to move forward
|
||||
over a TECO conditional, and Meta-" to move back. You might wish to
|
||||
set the variable QFS CTLMTA to -1 in your TECO Mode Hook variable,
|
||||
thus making control-meta characters insert control characters. If you
|
||||
do this, you must also make QSwitch Modes Process Options locally
|
||||
nonzero.
|
||||
|
||||
File: CONV Node: Lib, Up: Top, Previous: Syntax, Next: Prog
|
||||
|
||||
Library File Conventions
|
||||
|
||||
The command Generate Library, in the library EMACS;PURIFY :EJ, is
|
||||
used to generate :EJ'able libraries from source files following the
|
||||
syntactic conventions. The operation has two logical subparts:
|
||||
compression, which removes spaces and comments, and extracts the
|
||||
documentation into separately named macros; and purification, which
|
||||
converts the intermediate form into a :EJ'able library. It is
|
||||
possible to divide the source for a large library into several
|
||||
subfiles, which will be compressed separately but purified together.
|
||||
This saves time if only some of the subfiles are modified, since the
|
||||
compressed versions are saved in separate files and reused if more
|
||||
recent than the sources. Generate Library handles such multi-file
|
||||
sources automatically if all the source files' names are given to it.
|
||||
|
||||
One of the source files going into a library should define a
|
||||
"command" named ~Filename~. The "definition" of this command should
|
||||
be some kind of identification for the file. It should usually be the
|
||||
same as the first filename of the library. The documentation for
|
||||
~Filename~ should describe the purpose of the library as a whole.
|
||||
|
||||
Generate Library automatically creates a ~Directory~ object which
|
||||
contains a list of all the macros in the file. A library should never
|
||||
contain two macros with the same name (~Filename~ is an exception:
|
||||
see below).
|
||||
|
||||
Sometimes it is desirable to merge several library sources into one
|
||||
:EJ file. If you always like to use, say, TAGS :EJ, and have a
|
||||
private library, you may save space and increase speed by including
|
||||
the source of TAGS when generating your private library. This,
|
||||
however, means that you need to be able to override the ~Filename~
|
||||
macro which comes from the source of TAGS. Generate Library solves
|
||||
this problem by deleting all but the first ~Filename~. Your private
|
||||
source file must come first, and contain a ~Filename~, to override the
|
||||
one in the TAGS source.
|
||||
|
||||
Libraries intended to be accessed via the Run Library command should
|
||||
contain a macro named <ENTRY>, which will be the default entry point,
|
||||
so that the user need not specify the entry point name. In addition,
|
||||
they MUST have a ~FILENAME~ which is identical to the actual first
|
||||
name of the file, so that Run Library can tell whether the library is
|
||||
already loaded.
|
||||
|
||||
If a library contains a macro named & Setup <libname> Library, where
|
||||
<libname> is the library's ~Filename~ name, then whenever the library
|
||||
is loaded with MM Load Library that macro will be called. It can be
|
||||
used to put some of the library's macros on ^R characters, for
|
||||
example. If it is used for that purpose, then it should allow the
|
||||
user to override it by setting up a named variable. For example, the
|
||||
TAGS library has an & Setup TAGS Library macro, which defines Meta-..
|
||||
However, if the variable TAGS Setup Hook is nonzero, & Setup TAGS
|
||||
Library executes that variable instead of its default actions. Thus,
|
||||
a user's init file can specify where the TAGS commands should go if
|
||||
TAGS is ever loaded, by defining TAGS Setup Hook.
|
||||
|
||||
In addition to the names of macros, there are several names that
|
||||
(usually or always) be found in purified files of EMACS macros. For
|
||||
every macro FOO, an object named ~DOC~ FOO is available, that contains
|
||||
FOO's documentation. In addition, ~DIRECTORY~ contains a list (one
|
||||
per line) of all the macros that the file wishes to advertise that it
|
||||
contains. Special things such as described in this section, and all
|
||||
commands with ~ in their names, are not included.
|
||||
|
||||
~INVERT~ is supposed to be a macro that is the inverse of the loader
|
||||
macro. That is, <object in file>,<pointer to file> fed to the
|
||||
~INVERT~ macro should return a string containing the name of the
|
||||
object. You should not have to be aware of ~INVERT~, because it will
|
||||
be provided automatically, and called by & Macro Get Full Name when
|
||||
necessary.
|
||||
|
||||
The BARE library, which contains definitions of the raw TECO ^R-mode
|
||||
commands, has a different loader macro and so must be generated in a
|
||||
special way. The command MM BARE Library Generatesource-file-name
|
||||
will generate and write out the BARE library. The difference in the
|
||||
loader macro is simply that if a macro's definition is three
|
||||
characters long or fewer then it is treated as the name of a ^R
|
||||
command character (as in .^RA for C-A) and that character's initial
|
||||
raw-TECO definition is returned instead. If the macro's definition as
|
||||
found in the ordinary way is longer than three characters, it really
|
||||
is the definition. This way, documentation strings act normally but
|
||||
the command names themselves can return the raw TECO commands as their
|
||||
definitions. BARE has a ~INVERT~ macro which knows how to find the
|
||||
names of raw TECO commands as well as strings in the library.
|
||||
However, & Macro Get Full Name has to know specially that such
|
||||
commands, which are positive numbers rather than strings, should be
|
||||
passed to the BARE library to invert.
|
||||
|
||||
File: CONV Node: Prog, Up: Top, Previous: Lib, Next: Vars
|
||||
|
||||
Programming Conventions
|
||||
|
||||
For good programming practise, every CRLF that is not
|
||||
part of a string argument should be followed by an indentation
|
||||
to a position that indicates the current depth in iterations
|
||||
and conditionals. Use of the Tab command will make this easy.
|
||||
|
||||
Since the FS S ERROR$ flag is normally set in EMACS, searches that
|
||||
are followed by ";" must always be given the ":" modifier; otherwise,
|
||||
they will cause errors when they fail, before noticing the ";". This
|
||||
is because, if FS S ERROR$ is not set, a user who types an iteration
|
||||
in the minibuffer and omits the ";" is likely to cause himself extreme
|
||||
lossage. The Tab TECO command is disabled in the EMACS environment,
|
||||
and is a no-op. Use 9I or I^]^Q<tab> to insert a tab.
|
||||
|
||||
Use named subroutines whenever convenient. The subroutine
|
||||
should usually have documentation beginning with "S "
|
||||
so that users doing a "List Commands" will not see it, and
|
||||
a name beginning with "& " so that it will not interfere with the
|
||||
user's attempt to abbreviate command names.
|
||||
Call the subroutine with M( M.M&_Subroutine$) (note the
|
||||
_ is used to get a space). MM&_Subroutine$ would work, but
|
||||
macros are not supposed to depend on having no-dot q-regs
|
||||
set up.
|
||||
|
||||
The normal EMACS command level is precisely the TECO ^R command,
|
||||
with characters redefined to run EMACS macros or user-supplied macros.
|
||||
All of the information in TECO ORDER on the ^R command, facilities
|
||||
available for macros which are definitions of ^R characters, and what
|
||||
values should be returned by such macros, are very important for
|
||||
anyone who writes macros which are to be placed on characters.
|
||||
|
||||
The mark is kept in TECO's "Ring buffer of point". It's value can
|
||||
be obtained with :^V with no argument; <arg>:^V will push a new value
|
||||
of the mark. ^V with no colon can be used to pop the mark (read TECO
|
||||
ORDER for details). One consequence of this scheme is that there is
|
||||
always a mark somewhere. Note that the ^W EMACS command POPS the
|
||||
mark, rather than leaving a useless mark at point.
|
||||
|
||||
Commands that take input should do M.I before actually reading it.
|
||||
That will prompt for the input. The user may redefine .I if he wishes
|
||||
to eliminate prompting, but even so he should still define all his
|
||||
macros to use M.I so that other users will receive the behavior they
|
||||
want.
|
||||
|
||||
Commands that call ^R on data that the user is likely not to regard
|
||||
as "the thing he is editing" should do 0[..F before the ^R, to turn
|
||||
off auto-saving, and inhibit window, buffer or file switching (either
|
||||
of which would cause garbage results if allowed to proceed). See the
|
||||
& Check Top Level subroutine. They should also bind the default
|
||||
filenames to GAZONK .DEL, which will prevent the user from screwing
|
||||
himself with a ^X^W.
|
||||
|
||||
No non-dotted Q-regs should be reserved by the macros, except for
|
||||
user interfaces like MM. Also, avoid using double-dot Q-regs except
|
||||
as defined in TECO ORDER. All temporary Q-regs should be pushed and
|
||||
popped. All macros should return with ^\ if possible.
|
||||
|
||||
When you wish to make a ^R command that checks for the
|
||||
presence of a ^U as an argument, the conditional to use is
|
||||
F^XF^Y"N, which succeeds if there was an explicit argument (^U or
|
||||
otherwise). This makes it convenient to use the macro as a
|
||||
subroutine, since then one can give it an argument of 1 to mean
|
||||
"^U", and no argument to mean "no ^U".
|
||||
|
||||
Anything that changes information which is displayed in the mode
|
||||
line should do 1FS MODE CHANGE so that FS MODE MACRO will eventually
|
||||
be run to update q-register ..J and thus the mode line.
|
||||
|
||||
If you wish to read input from the user, if it is only a few
|
||||
characters you can use M.I. But if it can be long or complicated
|
||||
then rather than writing your own editing facilities for the input
|
||||
you should use the minibuffer to read it. Simply call & Minibuffer
|
||||
with the buffer containing any initialization for the input, and on
|
||||
return take the contents of the buffer as the user's string. See
|
||||
the documentation of & Minibuffer for more details. Alternatively,
|
||||
you can read the input with & Read Line, but then the only editing
|
||||
available will be Rubout.
|
||||
|
||||
I suggest that, if you intend to do any significant programming, you
|
||||
do MM List Subroutines to find out what is available to you, and read
|
||||
some of the EMACS source code.
|
||||
|
||||
File: CONV Node: Vars, Up: Top, Previous: Prog, Next: Major
|
||||
|
||||
Named Variable Conventions
|
||||
|
||||
EMACS makes extensive use of named variables, and provides features
|
||||
for creating, destroying, editing, and listing them.
|
||||
|
||||
The basic way of getting the value of a named variable that already
|
||||
exists is to do Q<name>. See TECO ORDER for details. If you are
|
||||
not sure whether a variable exists, you can do <default> FO..Q <name>
|
||||
which will return the value if the variable exists, or <default> if
|
||||
the variable does not exist. :FO can be used to tell whether a
|
||||
variable exists. Any TECO command that can use a q-register, except
|
||||
for ^], can also use an existing named variable if it is given the
|
||||
name of the variable, surrounded by Altmodes, as the q-reg name.
|
||||
Although TECO allows unambiguous abbreviations of the name to be used,
|
||||
it is unwise to use abbreviations in a program.
|
||||
|
||||
To create a variable, do <value>M.V<name>. Unlike Q and FO, M.V
|
||||
does not manage to handle leading, trailing, or multiple spaces; any
|
||||
variable created with them in its name will be inaccessible (of
|
||||
course, in a library source file, spaces and tabs are deleted anyway,
|
||||
and to get a real space you must use "_"). If the variable already
|
||||
exists, its value will be set, and the old value will be returned.
|
||||
For a new variable, 0 is returned. A variable can have a comment as
|
||||
well as a name and a value. To create a variable and give it a
|
||||
comment, do <value>M.C<name><comment>. Aside from setting the
|
||||
comment, M.C is just like M.V.
|
||||
|
||||
Sometimes it is more efficient for changing a variable's value to
|
||||
redefine some command characters, instead of having one definition
|
||||
which always checks the value of the variable. Do this by providing a
|
||||
macro to be run whenever the variable's value is changed. This macro
|
||||
is supplied by making it the variable's comment. Whenever the comment
|
||||
begins with a "!" it is taken to be a macro to be run in this manner.
|
||||
|
||||
If you want a variable to be presented for editing by MM Alter
|
||||
Options, you should give the variable a comment which starts with a
|
||||
"*". If the variable is to have a macro to run when it changes, and
|
||||
so the comment must start with a "!", then the variable is an option
|
||||
if the comment starts with "!". NOTE: if you are not careful, the
|
||||
TECO code to set up such a variable will contain "!*" which will be
|
||||
taken as the beginning of a comment. Leaving a space (which will be
|
||||
removed by compression) between the "!" and the "*" will prevent such
|
||||
lossage. See where the file EINIT sets up such variables if this
|
||||
isn't clear.
|
||||
|
||||
You can examine the value, and comment if any, of a variable by
|
||||
doing MM Describe<name>, just as you would ask for the documentation
|
||||
of a macro.
|
||||
|
||||
Variables can be local to an individual buffer. To make a variable
|
||||
local to the current buffer, do <value>M.L<name>. From then on,
|
||||
setting the variable when the current buffer is selected will not
|
||||
affect its global value, which other buffers will continue to see,
|
||||
nor will changing that global value affect the local value. Each
|
||||
buffer in which the variable is made local has its own value for the
|
||||
variable, while all other buffers share one global value.
|
||||
Doing M.L has the side-effect of creating the variable globally
|
||||
with the value of 0 if it did not already exist globally. Local
|
||||
variables will be created automatically when a file is visited which
|
||||
contains a local modes specification at the end. They are also the
|
||||
way in which major modes perform their redefinitions.
|
||||
|
||||
There are two times when local variables are usually created: when
|
||||
a buffer is created, and when a major mode is specified. EMACS
|
||||
automatically creates several local variables for each new buffer;
|
||||
the Buffer Creation Hook variable will be executed and can create some
|
||||
more. These locals will remain permanently in existence. All local
|
||||
variables created after that time will be killed whenever the major
|
||||
mode is changed. This is how one major mode undoes the redefinitions
|
||||
performed by the previous major mode. A consequence is that any
|
||||
explicitly created local variables will also be lost when the major
|
||||
mode is specified (and, therefore, whenever a file is visited which
|
||||
specifies its mode).
|
||||
|
||||
Not only variables, but q-registers as well (including ^R command
|
||||
character definitions), can be made local. To make a q-register
|
||||
local, use the Make Local Q-register command, with the q-register name
|
||||
as a string argument: M.QA makes QA local, and M.Q.^RF makes the
|
||||
definition of Control-F local.
|
||||
|
||||
You can override the library definition of an M.M macro by defining
|
||||
a variable named "MM " followed by the macro name. M.M checks for
|
||||
such a variable before looking the name up in the loaded libraries.
|
||||
MM Compile installs the compiled macro in just this way. A few such
|
||||
MM variables are present in the default environment. This is to make
|
||||
calling certain key subroutines more efficient; M.M takes less time
|
||||
finding the variable than searching the libraries.
|
||||
|
||||
To see a list of all existing variables, do MM List Variables. Each
|
||||
variable's name and value (abbreviated if too long) will be shown.
|
||||
A list of variables whose names contain <string> can be seen by doing
|
||||
MM Variable Apropos<string>.
|
||||
|
||||
To destroy a variable, do M(M.M Kill_Variable)<name> to run
|
||||
MM Kill Variable. This is necessary only in special situations.
|
||||
|
||||
File: CONV Node: Major, Up: Top, Previous: Vars, Next: Submodes
|
||||
|
||||
Defining Major Modes.
|
||||
|
||||
Each major mode is embodied by a command, such as MM TECO Mode or
|
||||
MM Lisp Mode. A major mode can be created simply by defining an
|
||||
appropriate command. However, major mode commands must work in a
|
||||
particular way.
|
||||
|
||||
Major modes make all their redefinitions by creating local
|
||||
variables. This is how each buffer can have its own major mode.
|
||||
Buffer switching does not consciously "switch" modes; it just swaps the
|
||||
local variables, which has that effect.
|
||||
|
||||
The first thing which each major mode command must do is eliminate
|
||||
the local variables, if any, made by the previous major mode. This is
|
||||
done by calling M(M.M &_Init_Buffer_Locals). All local variables of
|
||||
the current buffer, except those made when the buffer was created, are
|
||||
killed, and the global values reassert themselves. In addition, &
|
||||
Init Buffer Locals leaves Q.Q bound to the Make Local Q-register
|
||||
command.
|
||||
|
||||
Then, the major mode macro should create any local variables and
|
||||
local q-registers that it wants. Supplying a 1, argument to M.L
|
||||
causes M.L to run much faster, assuming that the specified variable is
|
||||
not already local. Example: 1,(:I*;) M.L Comment_Start. This is
|
||||
recommended for major mode commands. Command characters can be
|
||||
redefined by using M.Q, since character definitions count as
|
||||
q-registers. Example: M.M ^R_Indent_for_Lisp M.Q ^^I makes the
|
||||
Tab character local to the current buffer, and redefines it for Lisp.
|
||||
|
||||
Finally, the major mode macro should do
|
||||
|
||||
1M(M.M &_Set_Mode_Line <mode name> ^\
|
||||
|
||||
& Set Mode Line makes the new mode appear in the mode line, and the 1
|
||||
as argument tells it to do everything else appropriate for finishing
|
||||
up the change of major mode: Setting the variable QMode, running
|
||||
the value of <Mode> Mode Hook if it is defined.
|
||||
|
||||
Exiting with ^\ causes the binding of Q.Q, left by & Init Buffer
|
||||
Locals, to be popped, as well as any other bindings made by the major
|
||||
mode macro.
|
||||
|
||||
File: CONV Node: Submodes, Up: Top, Previous: Major, Next: Prefix
|
||||
|
||||
Submodes and ..F
|
||||
|
||||
A submode is just a command which rebinds commands or variables and
|
||||
then calls ^R recursively on the same buffer. A submode's name
|
||||
usually starts with the word "Edit", as in "Edit Picture". Submodes
|
||||
are to be distinguished from commands such as Edit ..D which call ^R
|
||||
recursively on some other text.
|
||||
|
||||
For submodes to indicate that they are active, the variable Submode
|
||||
is provided. Binding QSubmode to FOO causes [FOO] to appear in the
|
||||
mode line after the name of the major mode. However, you must call
|
||||
& Set Mode Line yourself before entering ^R, and you must do an FN
|
||||
command to cause & Set Mode Line to be called on the way out (even if
|
||||
you come out via a throw or an MM Top Level). Usually, the Edit FOO
|
||||
submode will put FOO in the Submode variable.
|
||||
|
||||
Submodes need not bind ..F to zero. Because the buffer is not
|
||||
bound, it works reasonably well to switch files, buffers or windows
|
||||
inside a submode. However, you stay inside the submode when you
|
||||
switch, which you may not like. Someday there may be a different
|
||||
implementation of Submodes which makes them local to a buffer.
|
||||
|
||||
File: CONV Node: Prefix, Up: Top, Previous: Submodes, Next: Hooks
|
||||
|
||||
Defining Prefix Characters.
|
||||
|
||||
An EMACS environment can contain any number of prefix characters,
|
||||
although EMACS normally contains only one - C-X.
|
||||
|
||||
To define a prefix character, you must choose a single-dot
|
||||
q-register to hold the dispatch table for it. Call MM Make Prefix
|
||||
Character<q-reg name> which returns a string which is a definition
|
||||
of a prefix character which will look in the specified q-register for
|
||||
the dispatch table. Then put this string into the desired character's
|
||||
definition. Normally, dispatch tables are made 96 characters long.
|
||||
If you want Rubout to be available as a subcommand, you must make it
|
||||
128 characters long, which you can do by providing 128 as an argument
|
||||
to Make Prefix Character.
|
||||
|
||||
For example, a prefix character C-Y can be defined to dispatch
|
||||
through q-register .Y by doing
|
||||
|
||||
M(M.M Make Prefix Character).Y U.Y
|
||||
|
||||
After this, you can define individual subcommands by doing things like
|
||||
M.MFOO U:.Y(A) which puts MM FOO on C-Y A.
|
||||
|
||||
|
||||
How Prefix Characters Dispatch.
|
||||
|
||||
All prefix characters made by Make Prefix Character, including the
|
||||
initially present C-X, do their work by calling the contents of
|
||||
q-register .P, providing the dispatch table as an argument. .P reads
|
||||
the input character, extracts the definition of the subcommand, and
|
||||
returns it. The prefix character itself then calls whatever .value P
|
||||
returns. You are free to redefine .P to get different behavior, as
|
||||
long as you respect the interface conventions. Take a look at the
|
||||
source code for ^^ Prefix Character Driver, which is the default
|
||||
contents of .P.
|
||||
|
||||
|
||||
Making Self-documentation Work for Prefix Characters.
|
||||
|
||||
In order for Where Is and Apropos to list all the ways a command can
|
||||
be reached as a subcommand of a prefix character, all prefix
|
||||
characters must be listed in QPrefix Char List. This list has a
|
||||
very ugly format: there are six characters for each prefix
|
||||
character. The first two contain the 9-bit code for the prefix
|
||||
character; the top 2 bits in the first and the bottom 7 bits in the
|
||||
second. The next four characters are the name of the q-register which
|
||||
contains the dispatch table used by the prefix character. For
|
||||
example, the default EMACS value of QPrefix Char List is ".X ".
|
||||
|
||||
File: CONV Node: Hooks, Up: Top, Previous: Prefix, Next: Dump
|
||||
|
||||
Hooks Provided by EMACS
|
||||
|
||||
EMACS offers several hooks in the form of variables whose values
|
||||
will be executed if nonzero at specific times.
|
||||
|
||||
Buffer Creation Hook
|
||||
|
||||
This variable is executed when a new EMACS buffer is made by Select
|
||||
Buffer, just after that buffer has been selected. It might use M.L to
|
||||
add a local variable, in case you want a certain variable to be local
|
||||
in each buffer. If you do this, you might want to change the global
|
||||
value of Initial Local Count to the number of initial locals you
|
||||
expect most buffers to have. It works to have a different number, but
|
||||
such buffers are given local values of Iitial Local Count, which is
|
||||
wasteful if not necessary. But if you do change Initial Local Count
|
||||
globally, make sure you either create the additional locals in the
|
||||
Main buffer at the same time, or give that buffer a suitable local
|
||||
definition of Initial Local Count.
|
||||
|
||||
The Buffer Creation Hook is not run when a buffer is created by
|
||||
Append to Buffer. This is obviously wrong, but since the buffer thus
|
||||
created is never actually selected, there is no easy way to fix this.
|
||||
|
||||
Buffer Selection Hook
|
||||
|
||||
This variable is executed whenever a buffer has just been selected.
|
||||
It is most likely to be useful when made local to a particular buffer.
|
||||
|
||||
Buffer Deselection Hook
|
||||
|
||||
This variable is executed whenever a buffer is just about to be
|
||||
deselected. It is most likely to be useful when made local to a
|
||||
particular buffer.
|
||||
|
||||
Visit File Hook
|
||||
|
||||
This variable is executed whenever a file has been visited. All the
|
||||
normal actions of visiting are already complete.
|
||||
|
||||
Set Mode Line Hook
|
||||
|
||||
This variable is executed by & Set Mode Line. If it returns a
|
||||
string pointer as a value, that string will be stuck into the mode
|
||||
line just before the closeparen. The purpose of this variable is to
|
||||
allow libraries which have state variables to display them in the mode
|
||||
line. So that several libraries can do this without interfering with
|
||||
each other, each library should append its own hook to the variable
|
||||
Set Mode Line Hook instead of setting it, and each library's
|
||||
contribution must be able to accept an argument from a previous
|
||||
library's contribution and append onto it. For example, a reasonable
|
||||
string to add " FOO" into the mode line would be:
|
||||
|
||||
+0[1 FQ1"L :I1' :I* 1_FOO (]1)
|
||||
|
||||
This string, at the beginning of Set Mode Line Hook, would return a
|
||||
string containing just " FOO"; if preceded by another such hook, it
|
||||
would append the " FOO" onto what that other hook tried to return.
|
||||
|
||||
<libname> Setup Hook
|
||||
|
||||
Each library's & Setup <libname> Library macro should check for the
|
||||
existence of a <libname> Setup Hook variable, using 0FO..Q. If the
|
||||
variable exists and is nonzero, the setup macro should execute the
|
||||
variable INSTEAD of its normal actions.
|
||||
|
||||
<Mode> Mode Hook
|
||||
|
||||
Each major mode executes a mode hook variable after making its
|
||||
normal redefinitions, but before updating the mode line. Mode hooks
|
||||
can create additional local variables or local q-registers (including
|
||||
local ^R command redefinitions).
|
||||
|
||||
File: CONV Node: Dump, Up: Top, Previous: Hooks, Next: Build
|
||||
|
||||
Dumping an EMACS Environment.
|
||||
|
||||
Dumping an EMACS environment so that it can be loaded and run again
|
||||
is no simple feat. Since the environment, when dumped (with @EJ),
|
||||
contains absolute pointers into the main EMACS library, we must make
|
||||
sure that when the environment is run again the same version of that
|
||||
library will be at the same place in the address space. This is
|
||||
accomplished by the Dump Environment command in the PURIFY library.
|
||||
|
||||
The Dump Environment command in the PURIFY library has the ability
|
||||
to dump out an EMACS environment so that, when loaded, it will reload
|
||||
the same libraries that were loaded at dumping time - the same
|
||||
versions, even, if multiple versions of the libraries are maintained.
|
||||
Before calling Dump Environment, you must decide which of the loaded
|
||||
libraries are to be reloaded by the dump file. Given such a library,
|
||||
called (say) "Mumble", you must set up a variable QMumble Library
|
||||
Filename containing the filename to be used to reload that library.
|
||||
This filename can contain a version number, if you are interested in
|
||||
loading the same version as the dumped environment was made with (this
|
||||
is necessary if any pointers to macros in that library exist in
|
||||
q-registers or ^R character definitions, etc.).
|
||||
Only libraries for which such variables are created will be reloaded
|
||||
by the dumped environment. Not all loaded libraries must be included,
|
||||
but those which are must be contiguous, and include the first one
|
||||
loaded.
|
||||
|
||||
In addition, before calling Dump Environment you must specify the
|
||||
TECO commands to be executed when the dump file is reloaded. This is
|
||||
done by creating a variable named QMM & Startup Mumble, where Mumble
|
||||
stands for the contents of QEditor Name. For EMACS, it is
|
||||
called QMM & Startup EMACS. The contents of q-register ..L are NOT used
|
||||
when the dump file is started up, but they will reappear in ..L after
|
||||
start up so that they will be run if the restarted dump file is
|
||||
stopped and started again. The QMM & Startup Mumble variable is killed
|
||||
by Dump Environment, since it will be no use afterward. Actually, if
|
||||
you wish, you can have a command named just & Startup Mumble in one of
|
||||
the libraries to be reloaded by the dump file, instead.
|
||||
|
||||
The contents of q-register ..L when Dump Environment is called are
|
||||
NOT used to initialize the dump file when it is reloaded. However,
|
||||
they do persist in ..L when the reloaded dumped environment is
|
||||
running, and if that job is stopped and restarted again, the ..L will
|
||||
be used.
|
||||
|
||||
If your EMACS init file takes a long time to run, you can use Dump
|
||||
Environment yourself after running the init file. The QEMACS Library
|
||||
Filename variable remains set up, so you need not worry about getting
|
||||
the right version of it. Just set up variables for the other
|
||||
libraries that you want loaded, provide a suitable QMM & Startup
|
||||
EMACS, and call Dump Environment.
|
||||
|
||||
File: CONV Node: Build, Up: Top, Previous: Dump, Next: Wall Charts
|
||||
|
||||
How to Build and Dump a New EMACS.
|
||||
|
||||
Before building a new dumped EMACS, you must of course Generate
|
||||
up-to-date versions of the essential libraries. This can be done by
|
||||
|
||||
M-X RunEINIT? Generate
|
||||
|
||||
The visible procedure for building a new EMACS is simply to do
|
||||
|
||||
:NTECO EMACS;
|
||||
|
||||
which runs EMACS;.TECO. (INIT) in NTECO. This leaves you in the TECO
|
||||
top-level loop, typing TECO command strings, and should display an
|
||||
EMACS-style mode line. Then, to dump the EMACS, type
|
||||
|
||||
MMRunPURIFYDump<filename>
|
||||
|
||||
which will dump the environment you have built. Then kill the job.
|
||||
|
||||
|
||||
How Building and Dumping Work
|
||||
|
||||
Building a new EMACS environment has three phases: loading
|
||||
libraries, creating the "essential environment" necessary for EMACS
|
||||
macros to work at all, and making the default set of command bindings.
|
||||
Two other minor operations are the loading of the patch file, and the
|
||||
purification of variable names. The first phase is straightforward:
|
||||
it simply loads the latest version of [PURE] :EJ, and also the EINIT
|
||||
library which contains the code for performing the rest of the
|
||||
initialization.
|
||||
|
||||
Loading the essential environment is done by the & Load Essential
|
||||
Environment command in EINIT. This sets up things like q-registers
|
||||
.M, .L, .V, .A, etc. as well as the option variables which many
|
||||
commands assume the existence of. Part of loading the essential
|
||||
environment is loading the patch file EMACS;EPATCH >, which contains
|
||||
corrected versions of macros changed since [PURE] was generated. The
|
||||
format of EPATCH is just that of a library source file; EPATCH is
|
||||
read in and MM Compile One Macro is done on each page of it.
|
||||
|
||||
Loading the default EMACS environment is done by & Load Default
|
||||
Environment in EINIT. This is what defines C-N to run ^R Down Real.
|
||||
The reason why it and & Load Essential Environment are not combined is
|
||||
so that other command environments which use the EMACS execution
|
||||
environment can be easily built. Building such an environment would
|
||||
involve calling & Load Essential Environment, and then using something
|
||||
else instead of & Load Default Environment.
|
||||
|
||||
At the end of building the environment, the variable names are
|
||||
purified. In order to save a few hundred words of impure core for all
|
||||
users, the predefined variables' names and their comments are made to
|
||||
live inside the [PURE] file instead of in impure string space. The
|
||||
necessary strings are created in [PURE] by the special file VARS,
|
||||
which is included in the generation of the [PURE] library. It inserts
|
||||
the strings into the [PURE] file inside of another string, so that
|
||||
they are conveniently out of the way. Then, the Purify Variables
|
||||
command in EINIT is used to look at each variable and replace its
|
||||
impure name with the corresponding pure string, if there is one.
|
||||
|
||||
|
||||
How Stand-alone RMAIL and INFO are Built and Dumped.
|
||||
|
||||
Stand-alone INFO differs from an EMACS in that, on start-up, instead
|
||||
of running the user's or the default init file, a particular procedure
|
||||
(that of entering ^R-mode and then running MM INFO) is followed.
|
||||
INFO is built by an EMACS init file which calls Dump Environment,
|
||||
setting Editor Name to INFO and providing an appropriate MM & Startup
|
||||
INFO macro to be used to start up the dump file when it is reloaded.
|
||||
On the practical level, the EMACS init file for INFO actually
|
||||
dumps the INFO, instead of returning and letting the user dump it.
|
||||
|
||||
Stand-alone RMAIL is dumped by a TECO init file instead of an EMACS
|
||||
init file, because while stand-alone INFO contains the standard EMACS
|
||||
^R command definitions, stand-alone RMAIL contains the bare TECO ^R
|
||||
command definitions. It therefore cannot be built starting from a
|
||||
whole EMACS.
|
||||
|
||||
New versions of stand-alone RMAIL and INFO must be made for each new
|
||||
TECO or EMACS version, just like new versions of the EMACS dump file.
|
||||
The stand-alone RMAIL and INFO always load up the current version of
|
||||
the RMAIL and INFO libraries, rather than the version which was
|
||||
current when they were dumped, so new RMAIL and INFO dump files do not
|
||||
generally need to be made when new versions of those libraries are
|
||||
installed.
|
||||
|
||||
File: CONV Node: Wall Charts, Up: Top, Previous: Build, Next: Qregs
|
||||
|
||||
Making Wall Charts
|
||||
|
||||
Wall Charts are made by MM RunABSTRWall Chart<prefix chars>
|
||||
with an empty buffer. This produces a wall chart in the buffer,
|
||||
describing the environment as it exists. <prefix chars> is a list of
|
||||
names of prefix characters, each of which should get a page describing
|
||||
all of its subcommands. The prefix characters are named as if you
|
||||
were accessing their definitions as q-registers, such as ".X" for
|
||||
C-X. The names should be separated by Altmodes. Two Altmodes end the
|
||||
list of prefix character names.
|
||||
|
||||
|
||||
Writing the Documentation Files EMACS CHART and EMACS DOC.
|
||||
|
||||
These two files are produced from the self-documentation strings
|
||||
within EMACS by the macros in the library ABSTR. Simply doing
|
||||
|
||||
M-X RunEINIT? Document
|
||||
|
||||
will update them according to the current environment. Make sure that
|
||||
you do this as a user who does not have an init file! Otherwise, the
|
||||
files will reflect your command definitions rather than the default.
|
||||
|
||||
File: CONV Node: Qregs, Up: Top, Previous: Wall Charts, Next: FS^RPREV
|
||||
|
||||
Usage of Q-registers in EMACS and Macros Intended for EMACS
|
||||
|
||||
EMACS makes no use of non-dot q-regs except as saved and restored
|
||||
local variables, unless the user explicitly requests such use
|
||||
with (say) ^XB or ^XX, except for M and R, and even those are not
|
||||
depended on by the EMACS macros. User macros may use non-dot q-regs
|
||||
freely, but those intended for general use should not do so except as
|
||||
local variables (pushed and popped).
|
||||
|
||||
User macros should not use single or double dot q-regs except as
|
||||
listed here. If it is really essential, you should ask RMS to
|
||||
allocate another single-dot q-reg for a specific use. Normally, a
|
||||
named variable is just as good.
|
||||
|
||||
.A MM & Autoload. This macro loads a library temporarily
|
||||
and returns a pointer to a specified macro in it.
|
||||
For example, M.A DIREDClean Dir loads the DIRED
|
||||
library and returns a pointer to the Clean Dir macro
|
||||
in it. FS :EJPAGE is pushed and left on the stack,
|
||||
so that the library will be flushed when the macro
|
||||
which invoked M.A exits and unwinds the stack.
|
||||
.B The buffer table. This is a q-vector which is
|
||||
subdivided into a section for each EMACS named buffer.
|
||||
The details of the format are described in a comment
|
||||
at the front of the EMACS source file BUFFER.
|
||||
|
||||
.C Set Variable Comment.
|
||||
Like .V, but creates a comment for the variable.
|
||||
<val>M.C <var> <comment> creates <var> if necessary,
|
||||
giving it the comment <comment> and the value <val>.
|
||||
<val> defaults to 0. If the comment starts with
|
||||
"*", then the variable is an "option"
|
||||
and MM Alter Options will let the user edit it.
|
||||
.F The "normal" (top-level) contents of ..F.
|
||||
When .F and ..F are not the same, EMACS knows that
|
||||
it is not safe to switch buffers, windows or files.
|
||||
.F should not be zero; that would lose. See ..F.
|
||||
.H The horizontal position "goal" for ^N and ^P
|
||||
commands. If it is a small positive number, it
|
||||
is a temporary goal, which will be reset by
|
||||
each ^N or ^P not following another such. The
|
||||
other possible values in .H are 1000000. plus a
|
||||
small number, which indicates a semipermanent goal
|
||||
that was established by ^R Set Goal Column and
|
||||
which it alone can alter.
|
||||
.I ^^ Prepare for Input. Do M.I before doing an
|
||||
FI to read input. The second argument, if any
|
||||
is the character to prompt with (default is in Q..0).
|
||||
The first argument is bit-decoded: 1 means that
|
||||
the control and meta prefix characters should be
|
||||
noticed, and 2 suppresses prompting and echoing
|
||||
(acts as if the characater being read is an independent
|
||||
command).
|
||||
.L Make Local Variable. Do M.L <var> to make <var>
|
||||
into a local variable of the current buffer.
|
||||
If it already is local, nothing is changed. If
|
||||
<var> didn't exist at all, 0M.V <var> is implied.
|
||||
The global value of <var> is not changed; the local
|
||||
<var> starts off with that same value as well.
|
||||
If M.L is given a numeric argument, it becomes
|
||||
the new value of the (local) <var>.
|
||||
.M ^^ Macro Get. M.M<name>$ returns a pointer to
|
||||
the macro <name>. Normally, an error will
|
||||
occur if the name is undefined or ambiguous,
|
||||
but if 1, is given as argument, instead of an error,
|
||||
the value 0 or 1 will be returned. Independently,
|
||||
a pointer to a file can be given as an argument,
|
||||
and the macro will be looked for in that file.
|
||||
.N The ring buffer of minibuffer commands. All commands
|
||||
that use the minibuffer and execute its contents
|
||||
normally push their commands onto this ring,
|
||||
so you can run them again easily. Q.N is a q-vector
|
||||
whose 0th element is the most recent minibuffer.
|
||||
.P M.P is the driver for "prefix" ^R characters,
|
||||
which read another character and dispatch on it.
|
||||
Whatever you put in .P should work like what is
|
||||
usually put there: ^^ Prefix Character Driver.
|
||||
See Make Prefix Character.
|
||||
.V Named Variable maker. (Teco "altmode" Q-regs)
|
||||
.W Is a flag that determines whether the word commands
|
||||
refer to LISP atoms. It holds either a null string
|
||||
(if they do not) or an "@" (if they do).
|
||||
|
||||
..F normally holds the auto-filing secretary macro.
|
||||
Auto-saving is turned off by zeroing FS ^R MDLY,
|
||||
not by changing ..F. Normally, .F contains the
|
||||
same thing as ..F. Macros which call ^R recursively
|
||||
should bind ..F to 0, thus inhibiting auto-saving.
|
||||
Also, the fact that .F and ..F will then be different
|
||||
will serve as an indication that it is not safe to
|
||||
switch buffers, files or windows. If you use a
|
||||
modified version of the secretary macro, you must
|
||||
store it in both ..F and .F for proper operation.
|
||||
To turn off the secretary macro globally, you should
|
||||
not simply set .F and ..F to zero, because then the
|
||||
functions that bind ..F to zero will not make it
|
||||
different from .F. You must make a null string and
|
||||
put it in .F and ..F.
|
||||
..K A qvector used to hold strings of deleted text
|
||||
by the ^R Kill ... and ^R Un-kill commands.
|
||||
The elements are the strings, in the order they
|
||||
were killed. The beginning may be filled with zeros,
|
||||
if there are not enough remembered killed strings
|
||||
to use the whole qvector.
|
||||
..M holds the keyboard macro call stack.
|
||||
See the file KBDMAC.
|
||||
|
||||
File: CONV Node: FS^RPREV, Up: Top, Previous: Qregs, Next: Debug
|
||||
|
||||
FS ^R LAST / FS ^R PREV Convention
|
||||
|
||||
Some commands set FS ^R LAST to a special value not in
|
||||
the range of 9-bit characters, to make it possible to test
|
||||
whether the previous command was in a certain class without
|
||||
having to know which characters various macros are on.
|
||||
These are the values used:
|
||||
|
||||
512+27 is set at times in minibuffering, when the
|
||||
(1033 octal) most recent character was an altmode but a
|
||||
following altmode should not exit.
|
||||
|
||||
1001 (decimal) is set by deleting commands.
|
||||
This allows multiple consecutive deletions
|
||||
to be combined in the ..K ring.
|
||||
|
||||
1002 is set by the vertical-motion commands
|
||||
so that repeated vertical motion commands
|
||||
can use the same horizontal position as a goal.
|
||||
|
||||
1003 signals that it is OK for m-Y (^R Un-kill Pop)
|
||||
to work even though the current region is not
|
||||
on the kill-ring. This is used by commands like
|
||||
Fill Region which save the region then do a simple
|
||||
but possibly dangerous transformation to it.
|
||||
|
||||
File: CONV Node: Debug, Up: Top, Previous: FS^RPREV
|
||||
|
||||
Debugging
|
||||
|
||||
For debugging, make use of the macro MM TCompile, which compresses
|
||||
the definition of the macro you are pointing at and makes it available
|
||||
to M.M. This makes it possible to test a new version of a macro
|
||||
without purifying the whole file containing it. Insert a ^R command
|
||||
into the definition to make a "breakpoint" which will allow you to
|
||||
look around. Exiting the ^R will cause execution of the macro to
|
||||
resume. To test-compile the macro and put it on a character, give the
|
||||
name of the character as a q-register as an argument to MM Tcompile,
|
||||
as in MM TCompile.N to set C-N's definition. Any q-register name
|
||||
is allowed there.
|
||||
|
||||
The default EMACS error handler runs MM Backtrace after every
|
||||
error, if the first character you type is "?". This feature allows
|
||||
you to examine the stack, as well as all q-registers and other
|
||||
variables. MM DescribeBacktrace for details. If QDebug is
|
||||
nonzero, you can type "?" to get a backtrace after a quit as well as
|
||||
after an error.
|
||||
|
||||
*note TDEBUG: (TDEBUG)Top, for info on the superb TDEBUG package
|
||||
which allows you to step through the execution of a macro,
|
||||
and examine the macro and q-register pdls.
|
||||
|
||||
1162
src/e142/datamedia.
Normal file
1162
src/e142/datamedia.
Normal file
File diff suppressed because it is too large
Load Diff
1062
src/e142/datamedia._ej
Normal file
1062
src/e142/datamedia._ej
Normal file
File diff suppressed because it is too large
Load Diff
77
src/e142/datamedia.basic
Normal file
77
src/e142/datamedia.basic
Normal file
@@ -0,0 +1,77 @@
|
||||
Here's the barest minimum you need to get started with EMACS/Datamedia:
|
||||
|
||||
In EMACS as soon as you type any character, some action is
|
||||
performed, and you see the resulting buffer. Generally, graphic,
|
||||
printing characters insert themselves, while control characters do
|
||||
the editing. So, to insert some text, just type it. To make
|
||||
corrections, you use the control characters.
|
||||
|
||||
Control characters are designated by a prefix. "M-" stands for
|
||||
meta. To type meta characters, hold down the "edit" key as you type
|
||||
the character. "C-" stands for control. If the command has a "C-M-"
|
||||
prefix, hold down both the ctrl and edit keys as you type. Here is
|
||||
a simple description of what various control characters do:
|
||||
|
||||
M-> Move forward one character.
|
||||
M-< Move backward one character.
|
||||
M-D Delete next character.
|
||||
Rubout Delete last character.
|
||||
M-[ Move to beginning of this line.
|
||||
M-] Move to end of this line.
|
||||
M-lf Move to next line.
|
||||
M-^ Move to previous line.
|
||||
M-K Kill rest of line.
|
||||
M-N uN-kill what was just killed, inserting it
|
||||
into the buffer at the current position.
|
||||
M-M Mark this place in the buffer.
|
||||
C-M-K Kill from here to marked place.
|
||||
(M-N will uN-kill C-M-K-killed text too.)
|
||||
M-= Clear screen, redisplay buffer.
|
||||
C-G "Quit". Stops whatever EMACS is doing.
|
||||
C-C Exit from EMACS.
|
||||
|
||||
C-X or M-X
|
||||
Prefix character: follow with another character to
|
||||
make a 2-character C-X or M-X command. C-X and M-X
|
||||
are equivalent in every way.
|
||||
|
||||
C-X C-V Visit a file. See below.
|
||||
C-X C-S Save the file you are visiting.
|
||||
|
||||
An easy way to move text around is to kill it, move, then uN-kill.
|
||||
You can uN-kill any number of times to create copies in different
|
||||
places.
|
||||
|
||||
If you want to edit text and save it after one session, you must
|
||||
put it in a "file". To do this, type the C-X C-V command, followed by
|
||||
the name you would like to use for your file. When you have finished
|
||||
typing the filename, end it with a carriage-return ("<CR>", as we say).
|
||||
"(New File)" will be printed at the bottom of the screen, and the
|
||||
file's name will appear in the line which starts with "EMACS (" near
|
||||
the bottom. Now you are ready to type in the text of the file.
|
||||
|
||||
When you specify the name of a file, you should usually give only
|
||||
the filename and the extension. The directory will default to your
|
||||
own (or to that of the file you are already visiting). You need not
|
||||
specify the directory unless it is different.
|
||||
|
||||
After you have typed for a while, type C-X C-S to "save" what you
|
||||
have added to the file so far. The text doesn't really go into the
|
||||
file until you save it. After saving, you can edit some more and
|
||||
save again, etc. If the system crashes, you can't lose anything which
|
||||
you have saved already. Each save writes a new version of the file,
|
||||
with a larger version number, so that old saves do not go away.
|
||||
|
||||
When you want to switch to writing a different file, just use the
|
||||
C-X C-V command again. The same command allows you to make changes in
|
||||
an old file. If you do C-X C-V when you have made changes to a file
|
||||
but not saved them, EMACS will ask you whether to save them. You
|
||||
should type either "Y" or "N" as the answer. Or type C-G to quit,
|
||||
look around to decide what to do, save or not, and repeat the C-X C-V.
|
||||
Don't ever be afraid to quit.
|
||||
|
||||
If you need more help, you can get it by typing the Help
|
||||
character which you used in order to see this. You typed Help B;
|
||||
typing other things after Help gets other kinds of help.
|
||||
Remember that the Help character is the same as the "hold" key on
|
||||
the Datamedia terminal.
|
||||
178
src/e142/datamedia.chart
Normal file
178
src/e142/datamedia.chart
Normal file
@@ -0,0 +1,178 @@
|
||||
EMACS/DATAMEDIA COMMAND SET
|
||||
as of November 17, 1978
|
||||
(Parentheses indicate not implemented yet)
|
||||
|
||||
Ctrl or *Bare Edit Edit-Ctrl Edit-X
|
||||
---- -- ----- ---- --------- ------
|
||||
< Backward Character <
|
||||
> Forward Character >
|
||||
( Backward Word Backward End-of-Word (
|
||||
) Forward Word Forward End-of-Word )
|
||||
[ Beginning of Line Back to Indentation [
|
||||
] Prefix Meta End of Line (Move to Comment Column) ]
|
||||
^ Prefix Control Up Real Line Up Comment Line ^
|
||||
lf * Indent New Line Down Real Line Indent New Comment Line lf
|
||||
cr * insert CRLF Next Line Down Comment Line cr
|
||||
{ Goto Beginning Mark Beginning {
|
||||
} Goto End Mark End }
|
||||
+ View Previous Screen +
|
||||
\ Prefix Control-Meta View Next Screen \
|
||||
| Move to Screen Edge |
|
||||
~ Reposition Window ~
|
||||
= New Window Where am I =
|
||||
del * Delete Chars Bkwds Backward Kill Word Bkwd Kill to Word End del
|
||||
_ [hold] Describe _
|
||||
tab * insert tab Nested Indent Indent Rigidly tab
|
||||
* Multiply Arg by 4 *
|
||||
; Indent for Comment Set Comment Column ;
|
||||
esc * Prefix Meta Prefix Control-Meta esc
|
||||
/ Define Kbd Macro Call Last Kbd Macro /
|
||||
? Describe ?
|
||||
1 1 Window 1
|
||||
2 2 Windows 2
|
||||
@ Mark sentence Mark paragraph @
|
||||
A (Again) Append Next Kill A
|
||||
B Backward sentence Backward paragraph B
|
||||
C Exit Center line [^C] (Center Region) C
|
||||
D Delete Character Kill Word Kill to End-of-Word D
|
||||
E Exchange Characters Exchange Words (Exchange Lines) E
|
||||
F Forward sentence Forward paragraph F
|
||||
G Abort Go to Fixed Mark [^G] G
|
||||
H Set Bounds Region Set Bounds Full H
|
||||
I [tab] Insert CRLF after point [Edit-tab] I
|
||||
J [lf] [Edit-lf] J
|
||||
K Kill Line Kill Region Kill into Q-reg K
|
||||
L Insert Page Mark Lowercase Word Lowercase Region L
|
||||
M [cr] Set Fixed Mark [Edit-cr] M
|
||||
N No-op uNkill uNkill Pop Get Q-register N
|
||||
O Complement Overwrite Mode Other Window O
|
||||
P Go to Page Mark Page Set Bounds Page P
|
||||
Q Quote next char Fill Paragraph Fill Region Set Fill Column Q
|
||||
R Reverse Char Search Reverse Incr Search Query Replace R
|
||||
S Character Search Incremental Search TECO Search S
|
||||
T T
|
||||
U Uppercase Word Uppercase Region Uppercase Initial U
|
||||
V V
|
||||
W Bkwd Kill Word Copy Line Copy Region Put Q-register W
|
||||
X ^X Prefix ^X Prefix Execute MM Command Execute Minibuffer X
|
||||
Y Select Buffer List Buffers Y
|
||||
Z Quit Zap to Character Zap thru Character Z
|
||||
|
||||
COMMANDS REDEFINED IN LISP MODE:
|
||||
* indicates functions defined only in the INTERLISP-EMACS interface
|
||||
|
||||
Ctrl Edit Edit-Ctrl Edit-X
|
||||
---- ---- --------- ------
|
||||
|
||||
tab Indent for LISP tab
|
||||
@ Mark sexp (Mark list) (Mark up list) Mark DEFUN @
|
||||
A * ARGLIST A
|
||||
B Backward sexp Backward list Backward list Backward DEFUN B
|
||||
D Kill sexp D
|
||||
E Exchange sexps E
|
||||
F Forward sexp Forward list Forward up list Forward DEFUN F
|
||||
T * Print to Level * Prettyprint T
|
||||
Y * Up Eval Y
|
||||
Z * Exit to LISP Z
|
||||
|
||||
(See the file <BOYER>NEMACS.DOC for a description of the INTERLISP-EMACS interface.)
|
||||
|
||||
|
||||
|
||||
|
||||
COMMANDS REDEFINED IN SAIL MODE:
|
||||
|
||||
Ctrl Edit Edit-Ctrl Edit-X
|
||||
---- ---- --------- ------
|
||||
|
||||
@ (Mark List) (Mark Block) (Mark Statement) (Mark Procedure) F
|
||||
B Backward List (Backward Statement) Backward Block (Backward Procedure) B
|
||||
F Forward List Forward Statement Forward Block (Forward Procedure) F
|
||||
V Make BEGIN END Make Named BEGIN END V
|
||||
|
||||
|
||||
COMMANDS REDEFINED IN MACRO MODE:
|
||||
|
||||
Ctrl Edit Edit-Ctrl Edit-X
|
||||
---- ---- --------- ------
|
||||
|
||||
B Go to AC Field Go to Previous Label B
|
||||
F Go to Address Field Go to Next Label F
|
||||
|
||||
|
||||
COMMANDS REDEFINED IN TECO MODE:
|
||||
|
||||
Ctrl Edit Edit-Ctrl Edit-X
|
||||
---- ---- --------- ------
|
||||
|
||||
B Backward conditional Backward iteration B
|
||||
F Forward conditional Forward iteration F
|
||||
|
||||
|
||||
File commands:
|
||||
^X ^D Directory Display
|
||||
^X ^E Edit File
|
||||
^X ^F Find File
|
||||
^X ^Q Do Not Write File
|
||||
^X ^R Read File
|
||||
^X ^S Save File
|
||||
^X ^V Visit File
|
||||
^X ^W Write File
|
||||
|
||||
New macros written for this package:
|
||||
^R Forward Word: Move forward over one word.
|
||||
^R Forward End-of-Word: Move forward to the next word end.
|
||||
^R Backward End-of-Word: Like Backward Word, but moves to end of
|
||||
previous word.
|
||||
^R Kill Word: Kill next word and trailing delimiters.
|
||||
^R Kill to End-of-Word: Kill to next word end.
|
||||
^R Backward Kill to End-of-Word: Like Backward Kill Word,
|
||||
but kills to end of previous word.
|
||||
^R Complement Overwrite Mode:
|
||||
If Overwrite Mode is on, turn it off. If it is off,
|
||||
turn it on. When Overwrite Mode is on, typed non-meta characters
|
||||
will delete and overwrite characters in the buffer instead
|
||||
of being inserted. Meta characters still function normally.
|
||||
Goto Page: If no arg, go to top of next page.
|
||||
If arg is zero, go to top of page.
|
||||
If arg is negative, go to top of page, unless already at top,
|
||||
in which case go to top of preceding page.
|
||||
If arg is positive (+n), go to top of page n of buffer.
|
||||
If two args (m,n), go to line m of page whatever.
|
||||
^R Copy Lines: Like killing lines and getting them back,
|
||||
but doesn't mark buffer modified.
|
||||
^R Set Fixed Mark: If no arg, set "ring-of-point" mark.
|
||||
If arg is zero or positive, set corresponding fixed mark.
|
||||
There are 10 fixed marks, numbered 0 to 9. They contain character
|
||||
counts relative to the beginning of the buffer. Fixed marks may
|
||||
be changed only by this macro, and are unaffected by killing, etc.
|
||||
^R Goto Fixed Mark: If no arg, exchange point and "ring-of-point" mark.
|
||||
If negative arg, pop the "ring-of-point" mark.
|
||||
If zero or positive arg, set "ring-of-point" mark and goto fixed mark.
|
||||
^R Zap to Character: Kills text up to but not including a
|
||||
target character. Uses the macro ^R Character Search to obtain
|
||||
the target character from the keyboard and search for it.
|
||||
The search skips over the character pointed to.
|
||||
^R Zap thru Character: Kills text up to and including a
|
||||
target character. Uses the macro ^R Character Search to obtain
|
||||
the target character from the keyboard and search for it.
|
||||
^R No-op: Does nothing.
|
||||
^R TECO Search: Search, using the basic TECO string search facility.
|
||||
Special characters:
|
||||
^B matches any delimiter char.
|
||||
^N matches any char other than the char following it in the search
|
||||
string (i.e., "not"). ^N^B matches non-delimiters, and
|
||||
^N^X matches nothing. ^N^Q^B matches all but ^B, etc.
|
||||
^O divides the string into substrings searched for simultaneously.
|
||||
Any one of these strings, if found, satisfies the search.
|
||||
^Q quotes the following char, i.e., deprives it of special
|
||||
significance. (You must type ^Q twice in the minibuffer).
|
||||
Escape and rubout cannot be quoted.
|
||||
^X matches any char.
|
||||
Quit: Return to caller. Tries very hard to do the right thing
|
||||
whether returning to SNDMSG, LISP, the EXEC, or recursive ^R.
|
||||
^R Define Kbd Macro: Begin defining keyboad macro.
|
||||
After you type this command, until you type it again,
|
||||
everything you type becomes part of the accumulating keyboard
|
||||
macro as well as being executed.
|
||||
|
||||
195
src/e142/datamedia.conversion
Normal file
195
src/e142/datamedia.conversion
Normal file
@@ -0,0 +1,195 @@
|
||||
EMACS ^R-Command Chart (as of 06/20/78 23:44:32):
|
||||
DATAMEDIA EQUIVALENTS (as of 6 Aug 78)
|
||||
|
||||
Non-Control Non-Meta Characters:
|
||||
|
||||
M-< Backspace moves back one character (or several).
|
||||
Tab ^R Indent According to Mode
|
||||
Linefeed ^R Indent New Line
|
||||
Return ^R CRLF
|
||||
Altmode ^R Prefix Meta
|
||||
Rubout deletes characters backwards.
|
||||
|
||||
|
||||
Control Characters:
|
||||
|
||||
.. ^R Complement SAIL Mode
|
||||
M-< Backspace moves back one character (or several).
|
||||
Tab ^R Indent According to Mode
|
||||
Linefeed ^R Indent New Line
|
||||
Return ^R CRLF
|
||||
C-Z Altmode exits from ^R mode.
|
||||
M-M Space ^R Set/Pop Mark
|
||||
none % .. ^R Replace String
|
||||
- .. is part of the next command's argument.
|
||||
0 thru 9 is part of the next command's argument.
|
||||
M-; ; .. ^R Indent for Comment
|
||||
^X-{ < .. ^R Mark Beginning
|
||||
none = .. ^R Print Hpos
|
||||
^X-} > .. ^R Mark End
|
||||
M-M @ .. ^R Set/Pop Mark
|
||||
M-[ A .. ^R Beginning of Real Line
|
||||
M-< B .. moves back one character (or several).
|
||||
M-esc C .. ^R Prefix Control-Meta
|
||||
M-D D .. deletes one character (or several) forward.
|
||||
M-] E .. ^R End of Real Line
|
||||
M-> F .. moves forward one character (or several).
|
||||
G .. quits execution of any command.
|
||||
M-< H .. moves back one character (or several).
|
||||
I .. ^R Indent According to Mode
|
||||
J .. ^R Indent New Line
|
||||
M-K K .. ^R Kill Line
|
||||
M-= L .. ^R New Window
|
||||
cr M .. is bare TECO's Control-M
|
||||
M-lf N .. ^R Down Real Line
|
||||
M-I O .. inserts one CRLF (or several) after point.
|
||||
M-^ P .. ^R Up Real Line
|
||||
Q .. ^R Quoted Insert
|
||||
none R .. ^R Reverse Search (USE M-MINUS M-S)
|
||||
C-M-S S .. ^R Incremental Search
|
||||
M-E T .. ^R Exchange Characters
|
||||
M-* U .. ^R Universal Argument
|
||||
M-\ V .. ^R Next Screen
|
||||
C-M-K W .. ^R Kill Region
|
||||
M-X X .. is a prefix character. See below.
|
||||
M-N Y .. ^R Un-kill
|
||||
Z .. ^R Return to Superior
|
||||
esc \ .. ^R Prefix Meta
|
||||
] .. is bare TECO's Control-]
|
||||
^ .. ^R Prefix Control
|
||||
Rubout deletes backwards, turning tabs into spaces.
|
||||
Meta Characters:
|
||||
|
||||
lf Linefeed ^R Indent New Comment Line
|
||||
^X-[ Return ^R Back to Indentation
|
||||
Altmode ^R Execute Minibuffer
|
||||
# .. ^R Change Font Word
|
||||
C-M-R % .. ^R Query Replace
|
||||
none ( .. ^R Make ()
|
||||
none ) .. ^R Move Over )
|
||||
- .. is part of the next command's argument.
|
||||
. .. ^R Find Tag
|
||||
/ .. ^R Describe
|
||||
0 thru 9 is part of the next command's argument.
|
||||
; .. ^R Indent for Comment
|
||||
M-{ < .. ^R Goto Beginning
|
||||
= .. ^R Count Lines Region
|
||||
M-} > .. ^R Goto End
|
||||
? .. ^R Describe
|
||||
none @ .. ^R Mark Word
|
||||
M-B A .. ^R Backward Sentence
|
||||
M-( B .. ^R Backward Word
|
||||
^X-U C .. ^R Uppercase Initial
|
||||
C-M-D D .. ^R Kill Word
|
||||
M-F E .. ^R Forward Sentence
|
||||
^X-) F .. ^R Forward Word
|
||||
C-M-Q G .. ^R Fill Region
|
||||
C-M-@ H .. ^R Mark Paragraph
|
||||
tab I .. ^R Tab to Tab Stop
|
||||
^X-lf J .. ^R Indent New Comment Line
|
||||
^X-D K .. ^R Kill Word
|
||||
M-L L .. ^R Lowercase Word
|
||||
^X-[ M .. ^R Back to Indentation
|
||||
^X-cr N .. ^R Down Comment Line
|
||||
^X-^ P .. ^R Up Comment Line
|
||||
M-Q Q .. ^R Fill Paragraph
|
||||
M-| R .. ^R Move to Screen Edge
|
||||
M-C S .. ^R Center Line
|
||||
C-M-E T .. ^R Exchange Words
|
||||
U .. ^R Uppercase Word
|
||||
M-+ V .. ^R Previous Screen
|
||||
C-M-W W .. ^R Copy Region
|
||||
C-M-X X .. ^R Execute Completed MM Command
|
||||
C-M-N Y .. ^R Un-kill Pop
|
||||
C-M-B [ .. ^R Backward Paragraph
|
||||
M-D \ .. ^R Delete Horizontal Space
|
||||
C-M-F ] .. ^R Forward Paragraph
|
||||
none ^ .. ^R Delete Indentation
|
||||
none _ .. ^R Underline Word
|
||||
~ .. ^R Not Modified
|
||||
Rubout ^R Backward Kill Word
|
||||
Control-Meta Characters:
|
||||
|
||||
^X-@ Backspace ^R Mark Defun
|
||||
none Tab ^R Indent for LISP
|
||||
^X-lf Linefeed ^R Indent New Comment Line
|
||||
^X-[ Return ^R Back to Indentation
|
||||
C-M-B ( .. ^R Backward Up List
|
||||
C-M-F ) .. ^R Forward Up List
|
||||
- .. is part of the next command's argument.
|
||||
0 thru 9 is part of the next command's argument.
|
||||
none ; .. ^R Kill Comment
|
||||
hold ? .. ^R Documentation
|
||||
C-@ @ .. ^R Mark Sexp
|
||||
^X-B A .. ^R Beginning of DEFUN
|
||||
C-B B .. ^R Backward Sexp
|
||||
C .. exits from ^R mode.
|
||||
none D .. ^R Down List
|
||||
C-M-F E .. ^R End of DEFUN
|
||||
C-F F .. ^R Forward Sexp
|
||||
none G .. ^R Format Code
|
||||
C-M-@ H .. ^R Mark Defun
|
||||
none I .. ^R Indent for LISP
|
||||
^X-lf J .. ^R Indent New Comment Line
|
||||
C-D K .. ^R Kill Sexp
|
||||
^X-[ M .. ^R Back to Indentation
|
||||
M-F N .. ^R Forward List
|
||||
none O .. ^R Split Line
|
||||
M-B P .. ^R Backward List
|
||||
none Q .. ^R Indent SEXP
|
||||
M-~ R .. ^R Reposition Window
|
||||
C-E T .. ^R Exchange Sexps
|
||||
C-M-B U .. ^R Backward Up List
|
||||
M-A W .. ^R Append Next Kill
|
||||
X .. ^R Execute MM Command
|
||||
C-M-B [ .. ^R Beginning of DEFUN
|
||||
none \ .. ^R Indent Region
|
||||
C-M-F ] .. ^R End of DEFUN
|
||||
none ^ .. ^R Delete Indentation
|
||||
none Rubout ^R Backward Kill Sexp
|
||||
Control-X is an escape prefix command with these subcommands:
|
||||
|
||||
C-M-Y ^X ^B List Buffers
|
||||
C-Z ^X ^C ^R Return to Superior
|
||||
^X ^D ^R Directory Display
|
||||
^X ^E ^R Edit File
|
||||
^X ^F ^R Find File
|
||||
^X Tab ^R Indent Rigidly
|
||||
C-M-L ^X ^L ^R Lowercase Region
|
||||
^X ^N ^R Set Goal Column
|
||||
^X ^O ^R Delete Blank Lines
|
||||
C-M-P ^X ^P ^R Mark Page
|
||||
^X ^Q ^R Do Not Write File
|
||||
^X ^R ^R Read File
|
||||
^X ^S ^R Save File
|
||||
^X ^T ^R Mini Visited File
|
||||
C-M-U ^X ^U ^R Uppercase Region
|
||||
^X ^V ^R Visit File
|
||||
^X ^W Write File
|
||||
M-G ^X ^X ^R Exchange Point and Mark
|
||||
^X Altmode ^R Re-execute Minibuffer
|
||||
^X # ^R Change Font Region
|
||||
^X . ^R Set Fill Prefix
|
||||
^X 1 ^R One Window
|
||||
^X 2 ^R Two Windows
|
||||
^X 3 ^R View Two Windows
|
||||
^X : ^R Set Column
|
||||
^X ; ^R Set Comment Column
|
||||
^X = ^R Where am I
|
||||
^X A ^R Append to Buffer
|
||||
M-Y ^X B Select Buffer
|
||||
none ^X D ^R Dired
|
||||
^X-Q ^X F ^R Set Fill Column
|
||||
^X-N ^X G ^R Open Get Q-reg
|
||||
^X I ^R Info
|
||||
none ^X K Kill Buffer
|
||||
^X L ^R Count Lines Page
|
||||
^X M Mail
|
||||
M-H ^X N ^R Set Bounds Region
|
||||
^X O ^R Other Window
|
||||
^X P ^R Set Bounds Page
|
||||
^X R ^R RMAIL
|
||||
C-M-H ^X W ^R Set Bounds Full
|
||||
^X-W ^X X ^R Put Q-reg
|
||||
none ^X ^ ^R Grow Window
|
||||
^X _ ^R Underline Region
|
||||
63
src/e142/datamedia.doc
Normal file
63
src/e142/datamedia.doc
Normal file
@@ -0,0 +1,63 @@
|
||||
DATAMEDIA is a macro library that attempts to make EMACS more
|
||||
accessible to the SRI user. It does this in three ways:
|
||||
|
||||
1. The command set has been rearranged and regularized, making
|
||||
it easier to learn and easier to remember.
|
||||
2. The command set is optimized for the Datamedia keyboard.
|
||||
Maximal use is made of the keypad at the right side. Almost all
|
||||
editing commands use the edit-key, some use the control-key as well;
|
||||
there are very few commands that use the control-key alone.
|
||||
3. Some new functions have been added, and others have been
|
||||
modified, to provide additional capability.
|
||||
|
||||
If interest warrants, the EMACS documentation under the INFO subsys
|
||||
could be rewritten to reflect the new functions. But for the
|
||||
present, users new to EMACS should follow the following procedure:
|
||||
List yourself copies of <EMACS>DATAMEDIA.CHART (it's formatted for
|
||||
wide paper) and <EMACS>DATAMEDIA.CONVERSION. Start up EMACS, type ^_
|
||||
(the "hold" key) followed by "I" to get yourself into the INFO
|
||||
system, then follow directions. Whenever the documentation talks
|
||||
about a particular command, (for example C-F,) look in your listing
|
||||
of DATAMEDIA.CONVERSION to find the new equivalent (M-> in this
|
||||
example). Locate the new command in DATAMEDIA.CHART so you can see
|
||||
the relationship of this command to other commands.
|
||||
|
||||
Users already somewhat familiar with EMACS should find DATAMEDIA.CHART
|
||||
self-explanatory.
|
||||
|
||||
To use the new command set, use the command MM Load$DATAMEDIA. (Type
|
||||
Edit-X, "LOAD", escape, "DATAMEDIA", carriage return.) To have new
|
||||
new command set automatically load whenever you use EMACS, copy the
|
||||
file <AGIN>EMACS.INIT or the equivalent to your own directory.
|
||||
|
||||
Note that the commands that move forward and back by words or delete
|
||||
words always move to the beginnings of words. The same commands with
|
||||
a ^X prefix move to the ends of words. In the original EMACS it
|
||||
depended on which direction you approached from.
|
||||
|
||||
Ten "fixed marks" have been provided in addition to THE mark. "The
|
||||
region" is still defined by the pointer and THE mark; the additional
|
||||
fixed marks provide the capability of designating some particular
|
||||
spot in your file that stays put while you copy text elsewhere. With
|
||||
no arguments, the new command M-M sets THE mark and the command M-G
|
||||
goes to THE mark (Exchange Point and Mark). With a numeric argument
|
||||
(0-9) they set or go to the corresponding fixed mark.
|
||||
|
||||
C-X and M-X provide the identical function in the new command set.
|
||||
They are redundant for convenience in typing commands like C-X C-D
|
||||
(Directory Display) or M-X M-D (Kill Word) without shifting bits in
|
||||
mid-command.
|
||||
|
||||
The functions for editing LISP code sometimes double up on
|
||||
keystrokes. For example, M-F will either be Forward Sentence or
|
||||
Forward List depending on whether you are in LISP mode or some other
|
||||
mode. There are ties to the Interlisp/EMACS interface, which allows
|
||||
you to call EMACS directly from Interlisp to edit LISP functions and
|
||||
S-expressions. The interface is documented in the file
|
||||
<BOYER>NEMACS.DOC.
|
||||
|
||||
If you plan to make regular use of EMACS/Datamedia, send me a message
|
||||
so I can keep you up to date on changes.
|
||||
|
||||
Jerry Agin (AGIN@SRI-KL)
|
||||
|
||||
279
src/e142/datamedia.msg
Normal file
279
src/e142/datamedia.msg
Normal file
@@ -0,0 +1,279 @@
|
||||
30-Aug-78 12:52:43-PDT,180;000000000001
|
||||
Date: 30 Aug 1978 1252-PDT
|
||||
From: Agin
|
||||
Subject: EMACS Simplified
|
||||
To: system
|
||||
|
||||
Users and prospective users of the text editor EMACS should read
|
||||
<EMACS>DATAMEDIA.DOC
|
||||
-------
|
||||
1-Sep-78 10:32:54-PDT,1180;000000000001
|
||||
Date: 1 Sep 1978 1032-PDT
|
||||
From: Agin
|
||||
Subject: Changes to EMACS/Datamedia
|
||||
To: EMACS/Datamedia Users:
|
||||
|
||||
Commands have been set up to give the user several options in the
|
||||
setting of control and meta bits. There are three conventions:
|
||||
1. Use the Ctrl and Edit keys on the Datamedia Keyboard.
|
||||
2. Use Escape for Meta and either Edit-Escape or
|
||||
Escape-Escape for Control-Meta. This usage is
|
||||
similar to TVEDIT.
|
||||
3. Use the three unlabeled keys on the left of the keyboard
|
||||
(between ^L and ^A). The bottom key, ^^, is Prefix
|
||||
Control. The middle key, ^], is Prefix Meta. The
|
||||
top key, ^\, is Prefix Control-Meta.
|
||||
The Execute Minibuffer command has been moved to ^X-X to free M-escape.
|
||||
|
||||
The commands that exchange characters, words, etc. have been moved
|
||||
from "T" to "E", where they will be more mnemonic.
|
||||
|
||||
Back to Indentation has been assigned to ^X-[ .
|
||||
|
||||
A No-op macro has been implemented and assigned to C-N. Try it after
|
||||
documentation commands, ^C, etc.
|
||||
|
||||
Replace String is no longer assigned to M-R. It turns out that it
|
||||
replaces EVERY occurrence of the string. You can get that by typing
|
||||
"!" to Query Replace.
|
||||
|
||||
Jerry Agin
|
||||
-------
|
||||
7-Sep-78 13:51:17-PDT,499;000000000001
|
||||
Date: 7 Sep 1978 1351-PDT
|
||||
From: Agin
|
||||
Subject: ^Z Changes
|
||||
To: EMACS/Datamedia Users:
|
||||
|
||||
^Z had erroneously been assigned to Exit ^R Mode, instead of Return
|
||||
to Superior. This has now been fixed. The problem of accidentally
|
||||
hitting ^Z and finding yourself in TECO should not happen any more.
|
||||
|
||||
A new macro called ^R Save and Return to Superior has been
|
||||
implemented and assigned to ^X ^Z. This is the command to use to
|
||||
exit from EMACS when called from inside SNDMSG, LISP, etc.
|
||||
-------
|
||||
12-Sep-78 17:09:50-PDT,1632;000000000001
|
||||
Date: 12 Sep 1978 1709-PDT
|
||||
From: Agin
|
||||
Subject: Miscellaneous
|
||||
To: EMACS/Datamedia Users:
|
||||
|
||||
A new function, "TECO Search" has been defined and assigned to ^X S.
|
||||
This function uses some powerful features of the underlying TECO
|
||||
that just ain't available thru the fancied-up "Incremental Search"
|
||||
function. TECO Search uses the special character ^B to match any
|
||||
delimiter, and ^X to match any character. ^N is used to negate a
|
||||
match to the following character. ^O is an "or" function, dividing
|
||||
the search string into substrings to be searched for simultaneously.
|
||||
|
||||
Both TECO Search (^X S) and Query Replace (C-M-R) use the minibuffer
|
||||
to obtain their arguments. I'm thinking that it is a mistake to
|
||||
do it this way--they could just as easily obtain their arguments in
|
||||
the prompt area the way MM commands do. The price is that carriage
|
||||
return can't be part of any argument, but the advantage is that
|
||||
there's one unusual mode of input the user need not learn. Does
|
||||
anyone have reactions? If I don't hear objections, I'll make the
|
||||
changes soon.
|
||||
|
||||
Another troublesome matter concerns the various flavors of ^Z. I
|
||||
discovered that you need the original definition of ^Z (Exit ^R
|
||||
Mode) to get out of the "Edit Tab Stops" function. One fix is to
|
||||
redefine Edit Tab Stops so it temporarily re-assigns ^Z to the
|
||||
do what is necessary. This seems rather unclean, but on the other
|
||||
hand, a system where you need to remember three different exit
|
||||
functions that depend on what you're doing isn't very clean either.
|
||||
Comments anyone?
|
||||
|
||||
The "Where am I" function (^X =) now gives the page and line.
|
||||
|
||||
Jerry
|
||||
-------
|
||||
13-Sep-78 16:39:37-PDT,384;000000000001
|
||||
Date: 13 Sep 1978 1639-PDT
|
||||
From: Riseman
|
||||
Subject: EMACS Documenatation
|
||||
To: agin
|
||||
|
||||
Gerry,
|
||||
Is there any documentation file for EMACS which gives
|
||||
a nice summary of the basic commands. I have listed some
|
||||
of the nodes in INFO, but they are often long-winded and
|
||||
provide too much detail to start. I also have listed
|
||||
the Datamedia chart and conversion tables.
|
||||
--Ed--
|
||||
-------
|
||||
13-Sep-78 17:23:55-PDT,989;000000000001
|
||||
Date: 13 Sep 1978 1723-PDT
|
||||
From: Agin
|
||||
Subject: Re: EMACS Documenatation
|
||||
To: Riseman
|
||||
cc: AGIN
|
||||
|
||||
In response to your message sent 13 Sep 1978 1639-PDT
|
||||
|
||||
The node "Basic" in the INFO file is a reasonable summary of the basic
|
||||
commands (modulo conversion to the Datamedia command set). If you
|
||||
don't like poking thru windy explanations, you might prefer to use
|
||||
some of the self-documenting features of EMACS. ^_ is the help character;
|
||||
it is equivalent to the "hold" key. "^_ A FOO" will type the names
|
||||
of all commands that have FOO in their names. ("A" here stands for
|
||||
"Apropos".) "^_ D ^R DOWN LINE" types a complete description of the
|
||||
command "^R DOWN LINE". ("D" for describe.) "^_ C <any keystroke>"
|
||||
tells you what command is assigned to the key, and its description.
|
||||
The data base for all these features gets automatically updated
|
||||
whenever commands are changed, so it always corresponds to the version
|
||||
you have in core at that given moment.
|
||||
|
||||
Jerry
|
||||
-------
|
||||
18-Sep-78 10:54:35-PDT,1470;000000000001
|
||||
Date: 18 Sep 1978 1054-PDT
|
||||
From: Agin
|
||||
Subject: New features
|
||||
To: EMACS/Datamedia Users:
|
||||
cc: Boyer
|
||||
|
||||
Commands for editing LISP code have been added to the command set.
|
||||
See the latest edition of DATAMEDIA.CHART for where they go. I am
|
||||
indebted to Bob Boyer for supplying some redefinitions and character
|
||||
tables to make it edit Interlisp. See the file <BOYER>NEMACS.DOC for
|
||||
the description of a very nice interface that allows you to call EMACS
|
||||
directly from Interlisp to edit LISP functions and S-expressions.
|
||||
Note that editing commands get placed on different keys in the Datamedia
|
||||
environment than Boyer uses in the default environment. In particular,
|
||||
^Z is the return-to-LISP function.
|
||||
|
||||
^Z is now the universal pop-a-level character within the EMACS/Datamedia
|
||||
environment. You should use it to return to SNDMSG or LISP, and to
|
||||
return from recursive ^R. If you use it at any other time, it is
|
||||
equivalent to ^C. The implementation of ^Z requires that functions
|
||||
which invoke recursive ^R set up the return function. At present
|
||||
only Query Replace and Edit Tab Stops know about ^Z. If you use or
|
||||
know about other functions that call recursive ^R please let me know
|
||||
so I can set them up to use ^Z also.
|
||||
|
||||
Query Replace and TECO Search now take their arguments from the echo
|
||||
area rather than the minibuffer.
|
||||
|
||||
The Incremental Search function now recognizes M-S as equivalent to
|
||||
^S and M-R as equivalent to ^R.
|
||||
|
||||
Enjoy!
|
||||
Jerry
|
||||
-------
|
||||
6-Oct-78 09:30:35-PDT,497;000000000001
|
||||
Date: 6 Oct 1978 0930-PDT
|
||||
From: Agin
|
||||
Subject: Changes
|
||||
To: EMACS/Datamedia Users:
|
||||
|
||||
There's a new SAIL major mode for editing SAIL programs. Commands
|
||||
are summarized in the newest edition of DATAMEDIA.CHART. Very little
|
||||
of it is implemented now, but it'll grow.
|
||||
|
||||
The Help function is improved.
|
||||
|
||||
Buffer creation is smarter: It takes its major mode from whatever
|
||||
was in effect previously. Auto-filling is local to buffers now, and
|
||||
gets copied when a new buffer is created.
|
||||
-------
|
||||
25-Oct-78 09:23:23-PDT,2279;000000000001
|
||||
Date: 25 Oct 1978 0923-PDT
|
||||
From: Agin
|
||||
Subject: Changes
|
||||
To: EMACS/Datamedia Users:
|
||||
|
||||
The implementation of the Quit function (^Z) has been changed to
|
||||
avoid changing all the functions that call ^R recursively. The way
|
||||
it works now is that ^Z always leaves ^R mode--the smarts about
|
||||
buffer saving, returning to SNDMSG or LISP, etc, are in what called
|
||||
^R in the first place.
|
||||
^Z when you are at the top level (and not in SNDMSG or LISP)
|
||||
will save whatever file you are editing and exit to the EXEC.
|
||||
CONTINUE after ^Z will return you to the edit.
|
||||
To take advantage of this, you will need to change your
|
||||
EMACS.INIT file. Replace the cryptic last line of the file with the
|
||||
following:
|
||||
MM Startup Datamedia
|
||||
Alternatively, copy <AGIN>EMACS.INIT to your own directory.
|
||||
|
||||
More goodies in SAIL mode:
|
||||
Forward Statement and Forward Block now work. They both
|
||||
recognize comments (either the word COMMENT or a bare exclamation
|
||||
point) and quotes. M-F is now Forward Statement and C-M-F is Forward
|
||||
Block--they used to be the other way around.
|
||||
Backward Block does NOT understand comments or quotes.
|
||||
Someday I might get around to fixing it.
|
||||
Make BEGIN-END (M-V) creates a BEGIN END pair. The
|
||||
indentation level is determined by the position of the cursor at the
|
||||
time you call it. Make Labelled BEGIN-END (C-M-V) reads a block name
|
||||
from the echo area and puts it in quotes after the BEGIN and the END.
|
||||
With either function, a numeric argument will place a semicolon after
|
||||
the END.
|
||||
Edit-tab has been modified so that a negative argument will
|
||||
indent yay-many levels to the right of the preceding line's
|
||||
indentation. The number of spaces in one level is determined by the
|
||||
variable Indentation Increment. This variable may be set in your
|
||||
INIT file--see <AGIN>EMACS.INIT, for example. (Note that setting
|
||||
Indentation Increment must occur AFTER the call to MM Datamedia.)
|
||||
You can also change this variable using MM Alter Options. Its
|
||||
initial value is 1.
|
||||
|
||||
The default search pattern for Character Search is now kept
|
||||
separately from the default for incremental and string searches.
|
||||
|
||||
Forward and Back DEFUN have been added to LISP Mode.
|
||||
|
||||
TECO Mode has been modified to make M-F and M-B be Forward
|
||||
and Back TECO Conditional.
|
||||
|
||||
Enjoy!
|
||||
-------
|
||||
9-Nov-78 14:01:52-PST,2083;000000000001
|
||||
Date: 9 Nov 1978 1401-PST
|
||||
From: Agin
|
||||
Subject: New Goodies!
|
||||
To: EMACS/Datamedia Users:
|
||||
|
||||
A new EMACS was put up November 6. It's winningest new feature is
|
||||
Keyboard Macros!!! Your keystrokes can be remembered and played back
|
||||
just like TVEDIT strings. I've adapted them for Datamedia.
|
||||
To start a Keyboard macro definition, type M-/. The word
|
||||
"Defining" will appear in your mode line. Everything you type will
|
||||
be remembered, until you type another M-/ to end the definition.
|
||||
M-X / re-executes the last defined keyboard macro.
|
||||
Keyboard macros can be named and can also be assigned to
|
||||
keystrokes. Use MM Name Kbd Macro$. You will be prompted for "^R
|
||||
Command to define:" Type a control character (or M-X character).
|
||||
If you try to redefine certain characters, EMACS will complain.
|
||||
If you supply a text arg to MM Name Kbd Macro$ the keyboard
|
||||
macro will be given a name. If you name your macro FOO, then MM FOO
|
||||
will run it now.
|
||||
MM View Kbd Macro will display the contents of any keyboard
|
||||
macro. It needs either a control-character to which a keyboard macro
|
||||
has been assigned, or M-X /.
|
||||
|
||||
Autosave Filename is now defaulted to AUTOSAVE..1000nn, where nn is
|
||||
your job number, on your login directory. In this way, auto saving
|
||||
needn't fill up your directory with multiple deleted files. ^X ^S
|
||||
will write to the "permanent" file name rather than the Auto Save
|
||||
File, unless you give it an arg of 0. ^Z saves your file and cleans
|
||||
up (deletes) auto save files.
|
||||
|
||||
Goto Page (M-P) doesn't leave the mark behind any more.
|
||||
|
||||
Typing C-M-S in Incremental Search (C-M-S) will start a new search.
|
||||
Either C-S or M-S will repeat the previous search.
|
||||
|
||||
You'll find Overwrite Mode (C-M-O) is much nicer to use now.
|
||||
|
||||
Other miscellaneous improvements have been reported in past BBOARD
|
||||
messages from RMS@MIT-AI. Use MSG to peruse <BBOARD>MAIL.TXT.
|
||||
|
||||
I'm thinking of putting Reverse Character Search on M-R, Reverse
|
||||
Incremental Search on C-M-R, and moving Query Replace over to M-X R.
|
||||
Does anybody have any reactions or preferences?
|
||||
|
||||
Jerry Agin
|
||||
-------
|
||||
3
src/e142/datamedia.users
Normal file
3
src/e142/datamedia.users
Normal file
@@ -0,0 +1,3 @@
|
||||
EMACS/Datamedia Users: Agin, Barrow, Feiertag, Heathman, McGhie,
|
||||
Quam, Riseman, Untulis, McLure
|
||||
Rindfleisch@SUMEX-AIM, Rubenstein@SUMEX-AIM, Sweer@SUMEX-AIM
|
||||
BIN
src/e142/dired._ej
Normal file
BIN
src/e142/dired._ej
Normal file
Binary file not shown.
1167
src/e142/dmacs._ej
Normal file
1167
src/e142/dmacs._ej
Normal file
File diff suppressed because it is too large
Load Diff
363
src/e142/dmacs.teach
Normal file
363
src/e142/dmacs.teach
Normal file
@@ -0,0 +1,363 @@
|
||||
You are looking at the DMACS tutorial. Original authorship was by
|
||||
Rubenstein@Sumex-AIM and McLure@SRI-KL. This version has been
|
||||
adapted for the DMACS command set by Agin@SRI-KL.
|
||||
|
||||
DMACS commands are generally prefixed by the CONTROL key or the META
|
||||
(sometimes labelled EDIT) key. Rather than write out META or CONTROL
|
||||
each time we want you to prefix a character, we'll use the following
|
||||
abbreviations:
|
||||
|
||||
C-<char> means hold the CONTROL key down and type a character.
|
||||
M-<char> means hold the META key down while typing a character.
|
||||
|
||||
Thus, C-F would be hold the control key and type F. You will often
|
||||
be asked to type characters to see how they work; don't actually do
|
||||
this, however, until you see >> at the left of the screen.
|
||||
For instance:
|
||||
<<Blank lines inserted here by startup of TEACH-DMACS>>
|
||||
>> Now type M-\ (View next screen) to move to the next screen.
|
||||
(go ahead, do it by depressing the edit key and \ together).
|
||||
|
||||
Note that there is an overlap when going from screen to screen; this
|
||||
provides some continuity when moving through the file.
|
||||
|
||||
The first thing that you need to know is how to move around from
|
||||
place to place in the file. You already know how to move forward a
|
||||
screen, with M-\. To move backwards a screen, type M-+ (depress the
|
||||
edit key and type +.
|
||||
|
||||
>> Try typing M-\ and then M-+ to move back and forth a few times.
|
||||
|
||||
SUMMARY
|
||||
-------
|
||||
|
||||
The following commands are useful for viewing screenfuls:
|
||||
|
||||
M-\ Move forward one screenful
|
||||
M-+ Move backward one screenful
|
||||
M-= 'Refresh' the current screen.
|
||||
|
||||
>> Try M-= now. (You'll notice that it centers the screen where
|
||||
the cursor currently is. If this happens to move this text off the
|
||||
screen, just do a M-\ to see it again.) Do a M-= for refresh.
|
||||
|
||||
BASIC CURSOR CONTROL
|
||||
--------------------
|
||||
|
||||
Getting from screenful to screenful is useful, but how do you
|
||||
reposition yourself within a given screen to a specific place?
|
||||
There are several ways you can do this. One way (not the best, but
|
||||
the most basic) is to use the commands previous, backward, forward
|
||||
and next. As you can imagine these commands (which are given to
|
||||
DMACS as M-^, M-<, M->, and M-lf respectively) move the cursor from
|
||||
where it currently is to a new place in the given direction. Here,
|
||||
in a more graphical form are the commands:
|
||||
|
||||
Previous line, M-^
|
||||
:
|
||||
:
|
||||
Backward, M-< .... Current cursor position .... Forward, M->
|
||||
:
|
||||
:
|
||||
Next line, M-lf
|
||||
|
||||
These are the basic cursor positioning commands and you'll be using
|
||||
them ALL the time so it would be of great benefit if you learn them
|
||||
now.
|
||||
|
||||
>> Try doing a few M-lf's to bring the cursor down to this line.
|
||||
Move into the line with M-<'s and up with M-^'s. Now use
|
||||
these four commands to play around a little. Try moving off
|
||||
the top of this screen and see what happens.
|
||||
|
||||
When you go off the top or bottom of the screen, the text beyond
|
||||
the edge is shifted onto the screen so that your instructions can
|
||||
be carried out while keeping the cursor on the screen.
|
||||
|
||||
A faster way to move around is to move by words or even entire
|
||||
sentences. Here is a summary of simple moving operations including
|
||||
the word and sentence moving commands:
|
||||
|
||||
M-> Move forward a character
|
||||
M-< Move backward a character
|
||||
M-) Move forward a word
|
||||
M-( Move backward a word
|
||||
|
||||
M-lf Move to next line
|
||||
M-^ Move to previous line
|
||||
|
||||
M-[ Move to beginning of line
|
||||
M-] Move to end of line
|
||||
|
||||
M-B Move back to beginning of sentence
|
||||
M-F Move forward to end of sentence
|
||||
|
||||
M-{ Go to beginning of file
|
||||
M-} Go to end of file
|
||||
|
||||
>> Try all of these commands now a few times for practice.
|
||||
Since the last two will take you away from this screen,
|
||||
you can come back here with M-+'s and M-\'s. These are
|
||||
the most often used commands.
|
||||
|
||||
Like all other commands in DMACS, these commands can be given
|
||||
arguments which cause them to be executed repeatedly. The way you
|
||||
give arguments is by prefixing with M- the number of times you want
|
||||
it repeated. For instance, M-8 M-> moves forward eight characters.
|
||||
|
||||
>> Try giving a suitable argument to M-lf or M-^ to come as close
|
||||
as you can to this line in one jump.
|
||||
|
||||
The only apparent exception to this is the screen moving commands,
|
||||
M-\ and M-+. When given an argument, they scroll the screen up or
|
||||
down by that many lines, rather than screenfuls. This proves to be
|
||||
much more useful.
|
||||
|
||||
>> Try typing M-8 M-\ now.
|
||||
|
||||
Did it scroll the screen up by 8 lines? If you would like to
|
||||
scroll it down you can give an argument to M-+.
|
||||
|
||||
|
||||
INSERTING AND DELETING
|
||||
----------------------
|
||||
|
||||
If you want to type text, just do it. Characters which you can see,
|
||||
such as A, 7, *, etc. are taken by DMACS as text and inserted
|
||||
immediately. You can delete the last character you typed by doing
|
||||
<Delete>. More generally, <Delete> will delete the character immediately
|
||||
before the current cursor position.
|
||||
|
||||
>> Do this now, type a few characters and then delete them
|
||||
by typing <Delete> a few times.
|
||||
|
||||
Remember that most DMACS commands can be given a repeat count; Note
|
||||
that this includes characters which insert themselves.
|
||||
|
||||
>> Try that now -- type M-8 * and see what happens.
|
||||
|
||||
You've now learned the most basic way of typing something in
|
||||
DMACS and correcting errors. You can delete by words or lines
|
||||
as well. Here is a summary of the delete operations:
|
||||
|
||||
<Delete> delete the character just before the cursor
|
||||
M-D delete the next character after the cursor
|
||||
C-M-D kill the next word after the cursor
|
||||
M-K kill from the cursor position to end of line
|
||||
M-<Delete> kill the word immediately before the cursor
|
||||
|
||||
Now suppose you kill something, and then you decide that you want to
|
||||
get it back? Well, whenever you kill something bigger than a
|
||||
character, DMACS saves it for you. To uNkill it back, use M-N. Note
|
||||
that you don't have to be in the same place to do M-N; This is a
|
||||
good way to move text around. Also note that the difference between
|
||||
"Killing" and "Deleting" something is that "Killed" things can be
|
||||
uNkilled back, and "Deleted" things cannot.
|
||||
|
||||
For instance, type M-lf a couple times to postion the cursor
|
||||
at some line on this screen.
|
||||
|
||||
>> Do this now, move the cursor and kill that line with M-K.
|
||||
|
||||
Note that a single M-K will kill the contents of the line, and a
|
||||
second M-K will delete the line itself, and make all the other lines
|
||||
move up. If you give M-K a repeat count, it will delete that many
|
||||
lines AND their contents.
|
||||
|
||||
The text that has just disappeared is saved so that you can
|
||||
retrieve it. To retrieve the last killed text and put it where
|
||||
the cursor currently is type M-N.
|
||||
|
||||
>> Try it; type M-N to uNkill the text back.
|
||||
|
||||
Think of M-N as if you were uNkilling something back that someone
|
||||
took away from you. Notice that if you do several M-K's all at once
|
||||
the text that is killed is all saved for you so that if you want
|
||||
it back you can uNkill it back.
|
||||
|
||||
>> Do this now, type M-K several times.
|
||||
|
||||
Now to retrieve that killed text:
|
||||
|
||||
>> Move the cursor down a few lines and type M-N to retrieve the
|
||||
lines that you killed. This is how you move text from place
|
||||
to place. You can even make copies of a line by killing it
|
||||
and uNkilling it back as many times as you want. Remember
|
||||
that when you have just killed text, it stays with you so
|
||||
that if you move your cursor elsewhere in the text and
|
||||
then M-N to uNkill back the killed text, you will have
|
||||
a method for moving text around in a file.
|
||||
|
||||
|
||||
MODE LINE
|
||||
---------
|
||||
|
||||
If DMACS sees that you are typing commands slowly it shows them to
|
||||
you at the bottom of the screen in an area called the echo lines.
|
||||
This is just the last few lines at the bottom. The line immediately
|
||||
above these is called the MODE LINE. You may notice that it begins
|
||||
with DMACS (Text) ...more stuff... This is a very useful
|
||||
'information' line. To understand DMACS it is best to consider that
|
||||
it operates in a variety of modes. The default mode is Text which is
|
||||
what you are in now. There are modes for editing different languages
|
||||
and text, such as LISP mode, SAIL mode, etc. The mode line serves to
|
||||
show you various things about your current state. For instance, on
|
||||
the mode line here you'll notice that it says Main. DMACS operates
|
||||
with things called buffers. This is a place that it puts your file
|
||||
while you are editing it. There are names for buffers. The default
|
||||
buffer upon startup of DMACS is Main. You'll notice that after the
|
||||
Main and before the --nn%-- comes the filename DSK:<your directory>
|
||||
TEACH-DMACS.TUTORIAL. This is the name of your own temporary copy of
|
||||
the text of the DMACS tutorial; the file you are now visiting.
|
||||
|
||||
|
||||
SEARCHING
|
||||
---------
|
||||
|
||||
DMACS can do searches for strings (these are groups of
|
||||
contiguous characters or words) either forward through the
|
||||
file or backward through it. To search for the string
|
||||
means that you are trying to locate it somewhere in the
|
||||
file and have DMACS show you where the occurences of the
|
||||
string exist. This type of search is somewhat different
|
||||
from what you may be familiar with. It is a search that
|
||||
is performed as you type in the thing to search for. The
|
||||
command to inititate a search is C-M-S for forward search,
|
||||
and C-M-R for reverse search. BUT WAIT! Don't do them now.
|
||||
When you type C-M-S you'll notice that the mode line changes
|
||||
to 'I-Search' and below it you get 'Search:' This tells
|
||||
you that DMACS is in what is called an incremental search
|
||||
waiting for you to type the thing that you want to search
|
||||
for.
|
||||
|
||||
>> Now type C-M-S to start a search. SLOWLY, one letter at a time,
|
||||
type the word 'cursor', pausing after you type each
|
||||
character to notice what happens to the cursor.
|
||||
|
||||
Did you see what happened? DMACS, in an incremental search, tries
|
||||
to go to the occurence of the string that you've typed out so far.
|
||||
To go to the next occurence of 'cursor' just type M-S. If no
|
||||
such occurence exists DMACS beeps and tells you that it is a failing
|
||||
search. To get out of a search tell DMACS that you want to stop
|
||||
searching with <ESC>. More generally, DMACS can be told to stop
|
||||
whatever it is doing with C-G so you could also type C-G.
|
||||
|
||||
If you are in the middle of an incremental search and type <Delete>,
|
||||
you'll notice that the last character in the search string is erased
|
||||
and the search backs up to the previous occurence of that string. For
|
||||
instance, suppose you currently have typed 'cu' and you see that your
|
||||
cursor is at the first occurence of 'cu'. If you now type <Delete>,
|
||||
the 'u' on the search line is erased and you'll be repositioned in the
|
||||
text to the occurence of 'c' immediately before the first 'cu'. This
|
||||
provides a useful means for backing up while you are searching. Also,
|
||||
if you are in the middle of a search and happen to type a control
|
||||
character, the cursor will go back to the place where you originally
|
||||
started the search.
|
||||
|
||||
The C-M-S starts a search that looks for any occurence of the search
|
||||
string AFTER the current cursor position. But what if you want to
|
||||
search for something earlier in the text? To do this one should
|
||||
type C-M-R for Reverse search. Everything that applies to C-M-S applies
|
||||
to C-M-R except that the direction of the search is reversed.
|
||||
|
||||
|
||||
EXTENDING THE COMMAND SET
|
||||
-------------------------
|
||||
|
||||
There are many, many more DMACS commands than could possibly be put
|
||||
on all the control and meta characters. DMACS gets around this with
|
||||
the X (eXtend) command. This comes in two flavors:
|
||||
|
||||
C-X Character eXtend
|
||||
M-X Character eXtend
|
||||
|
||||
C-X or M-X is always followed by another character that tells what to
|
||||
do. The second character may or may not require the CONTROL key,
|
||||
depending on the command. But the META key never has any effect.
|
||||
|
||||
There are many C-X commands. The ones you need immediately are:
|
||||
|
||||
C-X C-V Visit file. This is how you read in a file
|
||||
to edit it. When you type this, DMACS asks
|
||||
you for a file name to visit. You would respond
|
||||
with the name of the file. Then DMACS brings it
|
||||
in for editing. If the file doesn't exist, then
|
||||
DMACS assumes that you are creating a new file.
|
||||
C-X C-S Save file. This is a command that tells DMACS
|
||||
to save the file you are currently looking at
|
||||
onto disk. It is recommended you give this
|
||||
ocassionally to prevent losing any work in the
|
||||
case of a system crash.
|
||||
|
||||
There is another way to extend the DMACS command set:
|
||||
|
||||
C-M-X Named command eXtend
|
||||
|
||||
Named eXtend commands are commands which are used even less
|
||||
frequently, or commands which are used only in certain modes. An
|
||||
example of this type of command is the Replace command. When you
|
||||
type C-M-X, DMACS will prompt you at the bottom of the screen with MM
|
||||
(DMACS calls named eXtend commands MM commands) and then you can
|
||||
type the name of the command you want to execute, in this case,
|
||||
"Replace String". Just type "REP<esc>" and DMACS will complete the
|
||||
command. Then you type the string that you want to replace, an
|
||||
<esc>, the string you want to replace it with, and a return.
|
||||
|
||||
>> Try this now; type C-M-X rep<esc>try<esc>you can do<return>
|
||||
See how the previous line changed? All the "try"s were
|
||||
changed to "you can do"
|
||||
|
||||
GETTING MORE HELP
|
||||
-----------------
|
||||
|
||||
In this tutorial we have tried to supply just enough information to
|
||||
get you started using DMACS. There is so much available in DMACS that
|
||||
it would be impossible to explain it all here. However, you may want
|
||||
to learn more about DMACS since it has numerous desirable features
|
||||
that you don't know about yet. DMACS has a great deal of internal
|
||||
documentation. All of these commands can be accessed through the HELP
|
||||
character, which is the <HOLD> key on Datamedia terminals. To use
|
||||
the HELP features, type the <HELP> character, and then a character
|
||||
saying what kind of help you want. If you are REALLY lost, type
|
||||
<HELP> ? and DMACS will tell you what kinds of help it can give.
|
||||
The options which are most useful are the following:
|
||||
|
||||
<HELP> C Character describe. You type in the character.
|
||||
Multi-character commands such as C-X C-Z
|
||||
and <ESC>V are also allowed.
|
||||
<HELP> D Describe a named command. You type in a command.
|
||||
<HELP> A Apropos. Type in a keyword and DMACS will
|
||||
list all the commands containing that keyword.
|
||||
More than one keyword can be specified,
|
||||
seperated by C-O
|
||||
<HELP> I Run the INFO program. INFO contains the
|
||||
complete documentation for DMACS, in
|
||||
great detail. Here is where you can find out
|
||||
about, for instance, special commands for editing
|
||||
LISP code, handling buffers, replacing text, filling
|
||||
and justifying text, etc.
|
||||
|
||||
>> Go ahead and try some of these. Type <HELP> C M-K. DMACS will tell
|
||||
you what that character does. Try typing <HELP> A WORD to find
|
||||
out all the commands that have to do with words. When DMACS
|
||||
prompts you with --MORE--, type a space to see more or a C-N
|
||||
to get your text back. INFO is a fairly sophisticated
|
||||
documentation finder and is somewhat complicated. It probably
|
||||
isn't a good idea to try to use INFO just yet. Use DMACS for
|
||||
a few days, gain some familiarity and confidence in giving
|
||||
commands. And then try INFO out.
|
||||
|
||||
Another really valuable help is the file <EMACS>DMACS.CHART. It
|
||||
lists all the commands available in DMACS. List the file on the line
|
||||
printer using the exec command LLIST instead of LIST, because it's
|
||||
formatted for wide paper. Don't try to learn everything on the chart
|
||||
at once, but when you learn a new command, DO see where it's
|
||||
mentioned in the chart to help fix the command in your mind.
|
||||
|
||||
CONCLUSION
|
||||
----------
|
||||
|
||||
You'll probably find that if you use DMACS for a few days you won't
|
||||
be able to give it up. Initially it may give you trouble. But remember
|
||||
that this is the case with any editor, especially one that can do many,
|
||||
many things. And DMACS can do practically everything.
|
||||
519
src/e142/einit.
Normal file
519
src/e142/einit.
Normal file
@@ -0,0 +1,519 @@
|
||||
!* -*-TECO-*-!
|
||||
|
||||
!~Filename~:! !Macros for installing a new EMACS.!
|
||||
EINIT
|
||||
|
||||
!? Generate EMACS:! !? Create EMACS :EJ file from sources.
|
||||
Compresses the source files that need compression,
|
||||
then concatenates the COMPRS files and purifies, writing
|
||||
the result out as EMACS;[PURE] >.!
|
||||
|
||||
1,m.m &_File_PURIFY_Loaded+1"G !* Load PURIFY if not loaded already.!
|
||||
m(m.m Load_Library)EMACS;PURIFY'
|
||||
fs osteco"e
|
||||
m(m.mGenerate_Library) EMACS;DSK:[PURE]_> EMACS1;DOC USRCOM !*
|
||||
! ^R BASE WRDLST INDENT SEARCH FILES !*
|
||||
! SUPPRT ISEARC WINDOW BUFFER CRL VARS
|
||||
m(m.mGenerate_Library) EMACS;DSK:[PRFY]_> EMACS1;PURIFY CCL
|
||||
m(m.m Generate_Library) EMACS;DSK:EINIT EMACS1;EINIT '
|
||||
"#
|
||||
m(m.mGenerate_Library) EMACS;DSK:[PURE]_> DOC USRCOM !*
|
||||
! ^R BASE WRDLST INDENT SEARCH FILES !*
|
||||
! SUPPRT ISEARC WINDOW BUFFER CRL VARS
|
||||
m(m.mGenerate_Library) EMACS;PURIFY PURIFY CCL
|
||||
m(m.m Generate_Library) EMACS;DSK:EINIT EINIT '
|
||||
|
||||
|
||||
!? Document EMACS:! !? Create EMACS DOC and EMACS CHART.!
|
||||
m(m.m Load_Lib)EMACS;ABSTR
|
||||
f[b bind f[d file
|
||||
m(m.mWall_Chart).X
|
||||
fs osteco"e
|
||||
ji;NOXGP
|
||||
;SKIP_1
|
||||
'
|
||||
et EMACS;EMACS_CHART eihpef
|
||||
hk
|
||||
fs osteco"e
|
||||
ji;NOXGP
|
||||
;SKIP_1
|
||||
'
|
||||
m(m.mAbstract_Redefinitions)
|
||||
m(m.mAbstract_File)_CEMACS
|
||||
m(m.mAbstract_File)_CTAGS
|
||||
m(m.mAbstract_File)_CTMACS
|
||||
m(m.mAbstract_File)_CSLOWLY
|
||||
m(m.mAbstract_File)_CWORDAB
|
||||
m(m.mAbstract_File)_CPICTUR
|
||||
m(m.mAbstract_File)_CABSTR
|
||||
m(m.mAbstract_File)_CPURIFY
|
||||
|
||||
et EMACS;EMACS_NDOC eihpef
|
||||
1:< ed EMACS_ODOC>
|
||||
1:< en EMACS_DOC EMACS_ODOC>
|
||||
en EMACS_NDOC EMACS_DOC
|
||||
|
||||
|
||||
!& Load Default Environment:! !S Create the default environment.
|
||||
Assuming that the pure files are already loaded
|
||||
and the "essential" environment is set up, set up the standard
|
||||
EMACS ^R command definitions, etc.!
|
||||
|
||||
[0 [1 [2
|
||||
|
||||
@:I*| FSECHO LINES-3"G
|
||||
3FSECHO LINES'
|
||||
| FS TTY MACRO !* Must not be a pure string or use M.M.!
|
||||
|
||||
M.M &_Toplevel_^R U..L !* Put a macro to handle G in ..L!
|
||||
M.M &_Secretary_Macro U..F !* ..F is nonzero when we aren't in an "inner ^R mode",!
|
||||
!* but it isn't used unless FS ^R MDLY$ is positive.!
|
||||
Q..FU.F !* Switching buffers, files or windows OK iff Q.F = Q..F.!
|
||||
M.M &_Real-time_Interrupt FS CLK MACRO
|
||||
|
||||
M.M &_Recursive_^R_Set_Mode FS ^R ENTER
|
||||
|
||||
M.M ^R_Backwards_Kill_Characters FS RUB MACRO
|
||||
-1UDisplay_Matching_Paren
|
||||
|
||||
:IR :,.F !* MR returns the region as two numbers.!
|
||||
|
||||
201.@FS ^R InitU1 255U0
|
||||
400.+A @FS ^R InitU2
|
||||
256< %0W !* Make all unassigned Meta characters into errors.!
|
||||
Q0#Q2"E Q1U0'
|
||||
>
|
||||
Q1U.T
|
||||
Q2U..I Q2U...L !* A few meta chars should self-insert.!
|
||||
Q2U..._
|
||||
|
||||
M.M ^R_Complement_SAIL_Mode U.B !* Control-Alpha !
|
||||
|
||||
FS ^R INIT UH
|
||||
M.M ^R_Indent_According_to_Mode UI
|
||||
M.M ^R_Indent_New_Line UJ
|
||||
M.M ^R_Indent_New_Comment_Line U..J Q..J U..J
|
||||
M.M ^R_CRLF UM
|
||||
|
||||
M.M ^R_Set/Pop_Mark U._ Q._ U.@
|
||||
M.M ^R_Replace_String U.%
|
||||
M.M ^R_Query_Replace U..%
|
||||
M.M ^R_Find_Tag U...
|
||||
M.M ^R_Indent_For_Comment U.; Q.; U..;
|
||||
M.M ^R_Kill_Comment U...;
|
||||
M.M ^R_Mark_Beginning U.<
|
||||
M.M ^R_Goto_Beginning U..<
|
||||
M.M ^R_Where_Am_I U.=
|
||||
M.M ^R_Count_Lines_Region U..=
|
||||
M.M ^R_Mark_End U.>
|
||||
M.M ^R_Goto_End U..>
|
||||
|
||||
M.M ^R_Describe U..? Q..?U../
|
||||
M.M ^R_Documentation F(U...? )FS HELPMAC
|
||||
M.M ^R_Kill_Line U.K
|
||||
M.M ^R_New_Window U.L
|
||||
M.M ^R_Down_Real_Line U.N
|
||||
M.M ^R_Down_Comment_Line U..N
|
||||
M.M ^R_Up_Real_Line U.P
|
||||
M.M ^R_Up_Comment_Line U..P
|
||||
M.M ^R_Quoted_Insert U.Q
|
||||
M.M ^R_Reverse_Search U.R
|
||||
M.M ^R_Move_To_Screen_Edge U..R
|
||||
M.M ^R_Reposition_Window U...R
|
||||
M.M ^R_Incremental_Search U.S
|
||||
M.M ^R_Transpose_Characters U.T
|
||||
M.M ^R_Universal_Argument U.U
|
||||
M.M ^R_Next_Screen U.V
|
||||
M.M ^R_Previous_Screen U..V
|
||||
M.M ^R_Scroll_Other_Window U...V
|
||||
M.M ^R_Kill_Region U.W
|
||||
M.M ^R_Copy_Region U..W
|
||||
M.M ^R_Append_Next_Kill U...W
|
||||
M.M ^R_Extended_Command U..X
|
||||
M.M ^R_Instant_Extended_Command U...X
|
||||
M.M ^R_Un-Kill U.Y
|
||||
M.M ^R_Un-Kill_Pop U..Y
|
||||
M.M ^R_Return_To_Superior U.Z
|
||||
M.M ^R_Prefix_Meta U
|
||||
33. FS ^R INIT U. Q. U...C
|
||||
M.M ^R_Execute_Mini U..
|
||||
433.^ FS ^R INIT U...
|
||||
M.M ^R_Prefix_Meta U.\
|
||||
M.M ^R_Prefix_Control U.^
|
||||
M.M ^R_Prefix_Control-Meta U.C
|
||||
M.M Abort_Recursive_Edit U.]
|
||||
M.M ^R_Buffer_Not_Modified U..~
|
||||
|
||||
!* NOT EXACTLY WORD, NOT EXACTLY LIST COMMANDS!
|
||||
|
||||
M.M ^R_Back_to_Indentation U..M Q..M U...M
|
||||
Q..M F( U..M ) U...M
|
||||
M.M ^R_Delete_Horizontal_Space U..\
|
||||
M.M ^R_Indent_Region U...\
|
||||
M.M ^R_Split_Line U...O
|
||||
|
||||
!* LOAD THE WORD COMMANDS!
|
||||
|
||||
M.M ^R_Change_Font_Word U..#
|
||||
M.M ^R_Upcase_Digit U..'
|
||||
M.M ^R_Mark_Word U..@
|
||||
M.M ^R_Backward_Sentence U..A
|
||||
M.M ^R_Backward_Word U..B
|
||||
M.M ^R_Uppercase_Initial U..C
|
||||
M.M ^R_Kill_Word U..D
|
||||
M.M ^R_Forward_Sentence U..E
|
||||
M.M ^R_Forward_Word U..F
|
||||
M.M ^R_Fill_Region U..G
|
||||
M.M ^R_Mark_Paragraph U..H
|
||||
M.M ^R_Tab_to_Tab_Stop U..I
|
||||
M.M ^R_Kill_Sentence U..K
|
||||
M.M ^R_Lowercase_Word U..L
|
||||
M.M ^R_Fill_Paragraph U..Q
|
||||
M.M ^R_Center_Line U..S
|
||||
M.M ^R_Transpose_Words U..T
|
||||
M.M ^R_Uppercase_Word U..U
|
||||
M.M ^R_Backward_Paragraph U..[
|
||||
M.M ^R_Forward_Paragraph U..]
|
||||
M.M ^R_Delete_Indentation U..^
|
||||
M.M ^R_Underline_Word U.._
|
||||
M.M ^R_Backward_Kill_Word U..
|
||||
|
||||
!* LOAD THE LIST COMMANDS!
|
||||
|
||||
M.M ^R_Make_() U..(
|
||||
M.M ^R_Move_Over_) U..)
|
||||
M.M ^R_Backward_Up_List U...( Q...( U...U
|
||||
M.M ^R_Forward_Up_List U...)
|
||||
M.M ^R_Mark_Sexp U...@
|
||||
M.M ^R_Backward_Sexp U...B
|
||||
M.M ^R_Down_List U...D
|
||||
M.M ^R_Forward_Sexp U...F
|
||||
M.M ^R_Format_Code U...G
|
||||
M.M ^R_Mark_Defun U...H Q...H U...H
|
||||
M.M ^R_Indent_for_Lisp U...I Q...I U...I
|
||||
M.M ^R_Kill_Sexp U...K
|
||||
M.M ^R_Forward_List U...N
|
||||
M.M ^R_Backward_List U...P
|
||||
M.M ^R_Indent_Sexp U...Q
|
||||
M.M ^R_Transpose_Sexps U...T
|
||||
M.M ^R_Beginning_of_Defun U...[ Q...[ U...A
|
||||
M.M ^R_End_of_Defun U...] Q...] U...E
|
||||
M.M ^R_Delete_Indentation U...^
|
||||
M.M ^R_Backward_Kill_Sexp U...
|
||||
|
||||
128M(M.M MAKE_PREFIX).X U.X
|
||||
:IPrefix_Char_List X.X__
|
||||
|
||||
M.M List_Buffers U:.X()
|
||||
M.M ^R_Return_to_Superior U:.X()
|
||||
M.M ^R_Directory_Display U:.X()
|
||||
M.M ^R_Command_^X_^E_Flushed U:.X()
|
||||
M.M Find_File U:.X()
|
||||
M.M ^R_Indent_Rigidly U:.X(9) !* ^X Tab.!
|
||||
M.M ^R_Lowercase_Region U:.X()
|
||||
M.M ^R_Set_Goal_Column U:.X()
|
||||
M.M ^R_Delete_Blank_Lines U:.X()
|
||||
M.M ^R_Mark_Page U:.X()
|
||||
M.M ^R_Do_Not_Write_File U:.X()
|
||||
M.M ^R_Read_File U:.X()
|
||||
M.M ^R_Save_File U:.X()
|
||||
M.M ^R_Transpose_Lines U:.X()
|
||||
M.M ^R_Uppercase_Region U:.X()
|
||||
M.M ^R_Visit_File U:.X()
|
||||
M.M Write_File U:.X()
|
||||
M.M ^R_Exchange_Point_And_Mark U:.X()
|
||||
M.M ^R_Re-execute_Mini U:.X()
|
||||
M.M ^R_Change_Font_Region U:.X(#)
|
||||
M.M ^R_Start_Kbd_Macro U:.X(()
|
||||
M.M ^R_Set_Fill_Prefix U:.X(.)
|
||||
M.M ^R_One_Window U:.X(1)
|
||||
M.M ^R_Two_Windows U:.X(2)
|
||||
M.M ^R_View_Two_Windows U:.X(3)
|
||||
M.M ^R_Modified_Two_Windows U:.X(4)
|
||||
M.M ^R_Set_Comment_Column U:.X(;)
|
||||
M.M ^R_Where_Am_I U:.X(=)
|
||||
M.M ^R_Append_to_Buffer U:.X(A)
|
||||
M.M Select_Buffer U:.X(B)
|
||||
M.M ^R_DIRED U:.X(D)
|
||||
M.M ^R_Set_Fill_Column U:.X(F)
|
||||
M.M ^R_Get_Q-reg U:.X(G)
|
||||
M.M ^R_Mark_Whole_Buffer U:.X(H)
|
||||
M.M ^R_Info U:.X(I)
|
||||
M.M Kill_Buffer U:.X(K)
|
||||
M.M ^R_Count_Lines_Page U:.X(L)
|
||||
M.M MAIL U:.X(M)
|
||||
M.M ^R_Set_Bounds_Region U:.X(N)
|
||||
M.M ^R_Other_Window U:.X(O)
|
||||
M.M ^R_Set_Bounds_Page U:.X(P)
|
||||
M.M Read_Mail U:.X(R)
|
||||
M.M ^R_Set_Bounds_Full U:.X(W)
|
||||
M.M ^R_Put_Q-reg U:.X(X)
|
||||
M.M ^R_Previous_Page U:.X([)
|
||||
M.M ^R_Next_Page U:.X(])
|
||||
M.M ^R_Grow_Window U:.X(^)
|
||||
M.M ^R_Underline_Region U:.X(_)
|
||||
M.M ^R_Backward_Kill_Sentence U:.X(127)
|
||||
|
||||
!* Make TWENEX changes!
|
||||
fs osteco"n
|
||||
@ft0
|
||||
M.M ^R_Prefix_Control-Meta U.Z
|
||||
33. FS ^R INIT U...Z
|
||||
M.M ^R_Return_To_Superior U:.X()
|
||||
37. FS HELP CHARW
|
||||
0"n
|
||||
M.M ^R_Exit_to_Exec U.C !* Make self-documentation!
|
||||
632. @FS ^R INIT U...C
|
||||
0U:.X() !* not confuse users!
|
||||
'
|
||||
'
|
||||
@ft1
|
||||
1FS TTMODEW
|
||||
1FS ^R SCANW
|
||||
1FS ^R ECHOW
|
||||
1FS RUB CRLFW !* ^D AND RUBOUT TREAT CRLF AS ONE CHARACTER.!
|
||||
0FS%TOPW !* WINDOWS ARE OK AS LONG AS CURSOR IS ON SCREEN!
|
||||
0FS%BOTTOMW
|
||||
35FS%ENDW !* WANT 35% BLANK SPACE WHEN DISPLAY NEAR END OF FILE!
|
||||
500FS ^R MDLYW
|
||||
M.M ^R_Auto-fill_Space FS ^R ECSD
|
||||
@ft2
|
||||
:I..J EMACS_ !* Set up ..J so that & Set Mode Line will correct it.!
|
||||
:I*EMACS M.V Editor_Name !* Name of this editor. For ..J hackery!
|
||||
|
||||
!*** Speed up calls to certain subroutines by putting them in ..Q!
|
||||
M.M &_Find_Buffer M.V MM_&_Find_Buffer
|
||||
M.M &_Find_File M.V MM_&_Find_File
|
||||
M.M &_Get_Library_Pointer M.V MM_&_Get_Library_Pointer
|
||||
M.M &_Kill_Text M.V MM_&_Kill_Text
|
||||
M.M &_Matching_Paren M.V MM_&_Matching_Paren
|
||||
M.M &_Process_File_Options M.V MM_&_Process_File_Options
|
||||
M.M &_Read_Line M.V MM_&_Read_Line
|
||||
M.M &_Set_Mode_Line M.V MM_&_Set_Mode_Line
|
||||
M.M Load_Library M.V MM_Load_Library
|
||||
@ft3
|
||||
!*** Now redo putting various functions in obscure places.!
|
||||
!*** This duplicates what & Load Essential Environment does.!
|
||||
!*** The reason is that these functions may be in the patch file,!
|
||||
!*** in which case the patched versions must be installed.!
|
||||
|
||||
M.M &_Autoload U.A
|
||||
M.M &_Set_Variable_Comment U.C
|
||||
M.M &_Prepare_For_Input U.I
|
||||
M.M Make_Local_Variable U.L
|
||||
M.M &_Macro_Execute UM
|
||||
M.M &_Macro_GetU.M
|
||||
M.M &_Prefix_Character_DriverU.P
|
||||
M.M &_Make_Variable U.V
|
||||
|
||||
M.M &_Set_Mode_Line FS MODE MAC
|
||||
FS OSTECO"E !* Only on ITS!
|
||||
M.M &_Default_FS_Superior FS SUPERIOR'
|
||||
|
||||
M.M &_F^K_Hook U*F_Hook*
|
||||
M.M &_Subset_Directory_Listing UDirectory_Lister
|
||||
@ft4
|
||||
!*** NOW SET UP EMACS'S ERROR HANDLER. SAVE IT FOR LAST, SINCE IF THERE IS AN ERROR!
|
||||
!*** AFTER SETTING IT UP, AND NOT ALL THE REST OF EMACS IS THERE, IT IS A SCREW.!
|
||||
M.M &_Error_Handler U..P
|
||||
|
||||
|
||||
!& Load Essential Environment:! !S Does what's needed for EMACS macros to work at all.
|
||||
A given environment (such as EMACS, TME, etc.) may set up
|
||||
other variables, and redefine ^R characters. That is all optional.
|
||||
But code may fail to work if these variables are missing.!
|
||||
|
||||
5FS Q VECTOR U..Q
|
||||
3U:..Q(0) !* We use 3 words per variable.!
|
||||
|
||||
1FS S ERROR !* Searches inside iterations can still fail.!
|
||||
-1FS^I DISABLE !* Tab is a no-op.!
|
||||
1FS _ DISABLE !* Don't allow backarrow.!
|
||||
-1FSFNAM SYNTAX !* FN2s default to ">'!
|
||||
1FSBOTHCASE !* Searches ignore case of letters.!
|
||||
-1FS ECHO FLUSH
|
||||
1FS ^L INSERT !* @Y should not discard ^L's.!
|
||||
1FS VAR MAC
|
||||
|
||||
0U.H !* No goal for ^P, ^N known.!
|
||||
:i.w !* Not in Atom Word Mode.!
|
||||
|
||||
10*5 FS Q VECTOR U..K !* Set up ..K, the kill vector.!
|
||||
Q..K[..O J 5D ]..O
|
||||
-1U0 9< 0U:..K(%0) >
|
||||
|
||||
5*5 FS Q VECTOR U..U !* Set up ..U, the Undo info vector. See Undo for doc.!
|
||||
0U:..U(0) 10000000U:..U(2) !* Set it up so Undo will complain.!
|
||||
|
||||
6*8 FS Q VECTOR U.N !* Set up .N as qvector 8 words long, with 1 word gap.!
|
||||
[..O Q.NU..O J 5D ]..O
|
||||
:I*[1 -1[2
|
||||
FQ.N/5< Q1 U:.N(%2)> !* Fill all words with null strings.!
|
||||
|
||||
!* If not in Lisp mode, don't do Lisp syntax hair, but do treat [,] and {,} as parens.!
|
||||
!"! 1M(M.M &_Alter_..D) [( ]) {( }) |A /A 'A
|
||||
!* Set up matching openparens for closeparens!
|
||||
!"! 2M(M.M &_Alter_..D) ][ )( >< }{ '" !'!
|
||||
|
||||
M.M &_Macro_Execute UM
|
||||
M.M &_Prepare_For_Input U.I
|
||||
M.M &_Prefix_Character_DriverU.P
|
||||
|
||||
M.M &_Autoload U.A
|
||||
M.M &_Make_Variable U.V
|
||||
M.M &_Set_Variable_Comment U.C
|
||||
|
||||
M.M &_Set_Mode_Line FS MODE MAC !* Say what to do about updating ..J!
|
||||
1FS MODE CHANGE !* and ask that it be done eventually.!
|
||||
|
||||
M.M &_F^K_Hook M.V *F_Hook*
|
||||
|
||||
!*** These MM variables are essential!
|
||||
M.M &_Check_Top_Level M.V MM_&_Check_Top_Level
|
||||
M.M &_Maybe_Push_Point M.V MM_&_Maybe_Push_Point
|
||||
M.M &_Maybe_Display_Directory M.V MM_&_Maybe_Display_Directory
|
||||
|
||||
0M.V Abort_Resumption_Message
|
||||
0M.C Atom_Word_Mode ! *_1_=>_word_commands_deal_with_LISP_atoms!
|
||||
:I.W "n :I.W@' 1FS MODE CH
|
||||
0M.C Auto_Directory_Display *_1_=>_display_dir_after_writes,_-1_=>_reads_too
|
||||
0M.C Auto_Fill_Mode ! *_1_=>_Auto_Fill_(break_long_lines_at_margin)!
|
||||
1FS MODE CH
|
||||
32FS ^R INIT U_ "E'
|
||||
M.M^R_Auto-Fill_SpaceU_
|
||||
500M.C Auto_Push_Point_Option *_Searches_moving_this_far_set_mark_at_old_point
|
||||
:I*_^@ M.C Auto_Push_Point_Notification *_Searches_setting_mark_type_this
|
||||
500M.C Auto_Save_Interval ! *_number_of_characters_between_auto-saves!
|
||||
fs^r mdlyw fs^r mcnt
|
||||
0M.C Auto_Save_Visited_File *_1 =>_auto_save_under_visited_filename
|
||||
0M.C Autoarg_Mode ! *_1_=>_digits_before_control_chars_set_arg!
|
||||
0 FS ^R INIT[2
|
||||
"N M.M ^R_AutoargU2'
|
||||
Q2-Q0"E '
|
||||
Q2U0 Q2U1 Q2U2 Q2U3 Q2U4
|
||||
Q2U5 Q2U6 Q2U7 Q2U8 Q2U9
|
||||
1M.C Case_Replace *_1_=>_Replace_commands_preserve_case
|
||||
0M.C Comment_Begin *_String_for_beginning_new_comments
|
||||
32M.C Comment_Column *_Column_to_start_comments_in
|
||||
0M.C Comment_Start *_String_that_indicates_the_start_of_a_comment
|
||||
:I* M.C Comment_End *_String_that_ends_comments
|
||||
:I*/8+1*8 M.C Comment_Rounding *_Hairy_-_see_code_for_^R_Indent_for_Comment
|
||||
0M.C Display_Matching_Paren ! *_Controls_action_of_)_in_showing_the_matching_(!
|
||||
"N M.M &_Matching_Paren' "#0' FS ^R PAREN
|
||||
70M.C Fill_Column ! *_Page_width_for_filling_and_grinding!
|
||||
FS ADLINE
|
||||
:I*.?! M.C Fill_Extra_Space_List *_punctuations_that_need_2_spaces
|
||||
:I* M.C Fill_Prefix *_String_to_put_before_each_line_when_filling
|
||||
0M.C Find_File_Inhibit_Write *_initializes_Inhibit_Write_for_Find_File
|
||||
0M.C FS_CTLMTA !! FS CTLMTA
|
||||
0M.C Inhibit_Write ! *_-1_=>_Never_save_automatically_on_switching_files!
|
||||
1FS MODE CH
|
||||
0M.C LISP_Indent_Offset *_See_^R_Indent_for_LISP
|
||||
0M.C Overwrite_Mode ! *_Overwrite_Mode_status_(see_MM_Overwrite_Mode)!
|
||||
1FS MODE CH
|
||||
FS ^R REPLACE
|
||||
:I* M.C Page_Delimiter *_Search_string_for_finding_page_boundaries
|
||||
:I*. _ M.C Paragraph_Delimiter *_Lines_starting_with_these_chars_start_paragraphs
|
||||
-1M.C Permit_Unmatched_Paren *_1_=>_allow_unmatched_),_-1_=>_only_in_Lispish_modes
|
||||
0M.C Read_Line_Delay Pausing_this_many_1/30_sec_causes_echoing
|
||||
5000 M.C Region_Query_Size *_Some_commands_need_confirmation_if_region_this_big
|
||||
:I* M.V Set_Mode_Line_Hook
|
||||
0M.C Space_Indent_Flag *_If_nonzero,_Auto_Fill_indents_new_lines
|
||||
:I*MEMO XGP @XGP UNFASL OUTPUT OLREC _ !*
|
||||
! M.C Temp_File_FN2_List *_Reap_File_deletes_these_FN2s
|
||||
:I*Fundamental M.C Mode Do_MM_FOO_to_enter_FOO_mode
|
||||
:I* M.C Submode !! 1FS MODE CH
|
||||
M.M &_Subset_Directory_Listing M.C Directory_Lister Macro_to_use_to_list_directories
|
||||
15FS Q VECTOR[1 Q1 M.V Search_Default_Ring
|
||||
:I:1(0) :I:1(1) :I:1(2) ]1
|
||||
:I..G Q..H"E MDirectory_Lister'
|
||||
|
||||
0 M.V Backtrace_Temp
|
||||
:I* M.V Editor_Name
|
||||
:I* M.V Editor_Type
|
||||
:I* M.V Prefix_Char_List
|
||||
|
||||
M.M &_Indent_with_Tabs M.V MM_&_Indent
|
||||
M.M &_Xindent_with_Tabs M.V MM_&_Xindent
|
||||
:I*________:_______:_______:_______:_______:_______:_______:_______:_______:_______:_______:_______: M.C Tab_Stop_Definitions *_Tab_stops_for_^R_Tab_to_Tab_Stop
|
||||
|
||||
!* Set up buffer table and related variables.!
|
||||
|
||||
0M.V Next_Bfr_Number
|
||||
9*5 FS Q VECTOR U.B
|
||||
9U:.B(0) !* Initialize the entry for the initial buffer.!
|
||||
:I*Main U:.B(1) !* Its name is B.!
|
||||
0U:.B(2) !* It contains no file.!
|
||||
:I*Fundamental U:.B(3) !* It starts in fundamental mode!
|
||||
Q..Z U:.B(4) !* It is the same one that TECO gave us to start with.!
|
||||
0U:.B(5) !* Don't need to init FS DFILE and FS WINDOW slots!
|
||||
0U:.B(6) !* Since they are used only when buffer not selected.!
|
||||
%Next_Bfr_NumberU:.B(7)
|
||||
0U:.B(8)
|
||||
|
||||
0M.V Buffer_Filenames
|
||||
Q:.B(1) M.V Buffer_Name
|
||||
0 M.V Buffer_Index
|
||||
Q:.B(1) M.V Previous_Buffer
|
||||
|
||||
FS OSTECO"E !* Only on ITS!
|
||||
M.M &_Default_FS_Superior FS SUPERIOR'
|
||||
M.M Make_Local_Variable U.L
|
||||
0M.V Auto_Save_Mode
|
||||
M.L Auto_Save_Mode
|
||||
0M.C Auto_Save_Default ! *_Default_value_of_Auto_Save_Mode_for_new_files!
|
||||
1FS MODE CH
|
||||
:I* M.C Auto_Save_Filenames *_Filename_for_Auto_Save_Files
|
||||
2M.C Auto_Save_Max *_#_of_saves_to_keep
|
||||
M.L Auto_Save_Delete
|
||||
M.L Auto_Save_Size
|
||||
M.L Auto_Save_Count
|
||||
M.L Inhibit_Write
|
||||
5M.V Initial_Local_Count !* This is the number of M.L's above!
|
||||
|
||||
|
||||
!Purify Variables:! !C Make var names in symtab pure.
|
||||
For each symbol, sees whether there is a pure string for
|
||||
its name, and if so makes the sym tab point at that pure string.!
|
||||
|
||||
[1 [2 [3
|
||||
m.m &&_Variable_Name_Listu2 !* Q2 has pure string before the first var name.!
|
||||
< q2+fq2+4u2 -fq2; !* Look at each available pure string.!
|
||||
:fo..q2u1 !* Look for a variable with that name.!
|
||||
q1"g f~:..q(q1)2"e !* If it exists and is an exact match,!
|
||||
q2u:..q(q1) !* stick the pure string in as the variable name.!
|
||||
q2+fq2+4u3 !* See if the next pure string matches that var's comment.!
|
||||
q:..q(q1+2)"n
|
||||
f~:..q(q1+2)3"e !* If so, purify the comment too.!
|
||||
q3u:..q(q1+2)'''
|
||||
!* Now, purify anything in .B which matches this string.!
|
||||
0u3
|
||||
fq.b/5< fq:.b(q3)"g f~:.b(q3)2"e
|
||||
q2u:.b(q3)''
|
||||
%3 >
|
||||
'>
|
||||
|
||||
|
||||
!& Load Patches:! !S Load patches (made since [pure] file) before dumping.
|
||||
Essentially, we do a Compile One Macro on each page of
|
||||
the patch file EMACS;PATnnn >!
|
||||
|
||||
f[b bind qEMACS_Version:\[1
|
||||
f[d file et emacs;pat1_>
|
||||
1:< er @y>"l ' !* Read in the patch file. Exit if there is none.!
|
||||
z"e ' !* Exit fast if it's empty.!
|
||||
@f
|
||||
k !* Kill extra CRLF and ^L at front of file.!
|
||||
f[:ej page
|
||||
m(m.m Load_Library)PURIFY !* Otherwise, temporarily load PURIFY!
|
||||
< m(m.m TCompile) !* and compile each macro in the patch file.!
|
||||
:s
|
||||
|
||||
; >
|
||||
hk
|
||||
|
||||
!*
|
||||
** Local Modes:
|
||||
** Compile Command: M(M.M Generate Library)EMACS;EINITEMACS1;EINIT
|
||||
** End:
|
||||
*!
|
||||
442
src/e142/einit._ej
Normal file
442
src/e142/einit._ej
Normal file
@@ -0,0 +1,442 @@
|
||||
xW
|
||||
[0+8+FQ(+4)[1
|
||||
0FO10F"G+Q1
|
||||
'W+FQ()+4U1
|
||||
FQ1"L0'
|
||||
,Q1:M(Q1+4(]1]0))
|
||||
)#2|/f/ozT^.e.o5,531z22j2}4V4b1X1e0m0z3x40O0Y0D0K5u5{? Generate EMACS81,m.m& File PURIFY Loaded+1"G
|
||||
m(m.mLoad Library)EMACS;PURIFY'
|
||||
fsosteco"e
|
||||
m(m.mGenerate Library)EMACS;DSK:[PURE] >EMACS1;DOCUSRCOM^RBASEWRDLSTINDENTSEARCHFILESSUPPRTISEARCWINDOWBUFFERCRLVARS
|
||||
m(m.mGenerate Library)EMACS;DSK:[PRFY] >EMACS1;PURIFYCCL
|
||||
m(m.mGenerate Library)EMACS;DSK:EINITEMACS1;EINIT'
|
||||
"#
|
||||
m(m.mGenerate Library)EMACS;DSK:[PURE] >DOCUSRCOM^RBASEWRDLSTINDENTSEARCHFILESSUPPRTISEARCWINDOWBUFFERCRLVARS
|
||||
m(m.mGenerate Library)EMACS;PURIFYPURIFYCCL
|
||||
m(m.mGenerate Library)EMACS;DSK:EINITEINIT'
|
||||
? Document EMACS>m(m.mLoad Lib)EMACS;ABSTR
|
||||
f[bbindf[dfile
|
||||
m(m.mWall Chart).X
|
||||
fsosteco"e
|
||||
ji;NOXGP
|
||||
;SKIP 1
|
||||
'
|
||||
etEMACS;EMACS CHARTeihpef
|
||||
hk
|
||||
fsosteco"e
|
||||
ji;NOXGP
|
||||
;SKIP 1
|
||||
'
|
||||
m(m.mAbstract Redefinitions)
|
||||
m(m.mAbstract File) CEMACS
|
||||
m(m.mAbstract File) CTAGS
|
||||
m(m.mAbstract File) CTMACS
|
||||
m(m.mAbstract File) CSLOWLY
|
||||
m(m.mAbstract File) CWORDAB
|
||||
m(m.mAbstract File) CPICTUR
|
||||
m(m.mAbstract File) CABSTR
|
||||
m(m.mAbstract File) CPURIFY
|
||||
etEMACS;EMACS NDOCeihpef
|
||||
1:<edEMACS ODOC>
|
||||
1:<enEMACS DOCEMACS ODOC>
|
||||
enEMACS NDOCEMACS DOC
|
||||
& Load Default Environment/[0[1[2
|
||||
@:I*|FSECHOLINES-3"G
|
||||
3FSECHOLINES'
|
||||
|FSTTYMACRO
|
||||
M.M& Toplevel ^RU..L
|
||||
M.M& Secretary MacroU..F
|
||||
Q..FU.F
|
||||
M.M& Real-time InterruptFSCLKMACRO
|
||||
M.M& Recursive ^R Set ModeFS^RENTER
|
||||
M.M^R Backwards Kill CharactersFSRUBMACRO
|
||||
-1UDisplay Matching Paren
|
||||
:IR:,.F
|
||||
201.@FS^RInitU1255U0
|
||||
400.+A@FS^RInitU2
|
||||
256<%0W
|
||||
Q0#Q2"EQ1U0'
|
||||
>
|
||||
Q1U.T
|
||||
Q2U..IQ2U...L
|
||||
Q2U..._
|
||||
M.M^R Complement SAIL ModeU.B
|
||||
FS^RINITUH
|
||||
M.M^R Indent According to ModeUI
|
||||
M.M^R Indent New LineUJ
|
||||
M.M^R Indent New Comment LineU..JQ..JU..J
|
||||
M.M^R CRLFUM
|
||||
M.M^R Set/Pop MarkU. Q. U.@
|
||||
M.M^R Replace StringU.%
|
||||
M.M^R Query ReplaceU..%
|
||||
M.M^R Find TagU...
|
||||
M.M^R Indent For CommentU.;Q.;U..;
|
||||
M.M^R Kill CommentU...;
|
||||
M.M^R Mark BeginningU.<
|
||||
M.M^R Goto BeginningU..<
|
||||
M.M^R Where Am IU.=
|
||||
M.M^R Count Lines RegionU..=
|
||||
M.M^R Mark EndU.>
|
||||
M.M^R Goto EndU..>
|
||||
M.M^R DescribeU..?Q..?U../
|
||||
M.M^R DocumentationF(U...?)FSHELPMAC
|
||||
M.M^R Kill LineU.K
|
||||
M.M^R New WindowU.L
|
||||
M.M^R Down Real LineU.N
|
||||
M.M^R Down Comment LineU..N
|
||||
M.M^R Up Real LineU.P
|
||||
M.M^R Up Comment LineU..P
|
||||
M.M^R Quoted InsertU.Q
|
||||
M.M^R Reverse SearchU.R
|
||||
M.M^R Move To Screen EdgeU..R
|
||||
M.M^R Reposition WindowU...R
|
||||
M.M^R Incremental SearchU.S
|
||||
M.M^R Transpose CharactersU.T
|
||||
M.M^R Universal ArgumentU.U
|
||||
M.M^R Next ScreenU.V
|
||||
M.M^R Previous ScreenU..V
|
||||
M.M^R Scroll Other WindowU...V
|
||||
M.M^R Kill RegionU.W
|
||||
M.M^R Copy RegionU..W
|
||||
M.M^R Append Next KillU...W
|
||||
M.M^R Extended CommandU..X
|
||||
M.M^R Instant Extended CommandU...X
|
||||
M.M^R Un-KillU.Y
|
||||
M.M^R Un-Kill PopU..Y
|
||||
M.M^R Return To SuperiorU.Z
|
||||
M.M^R Prefix MetaU
|
||||
33.FS^RINITU.Q.U...C
|
||||
M.M^R Execute MiniU..
|
||||
433.^FS^RINITU...
|
||||
M.M^R Prefix MetaU.\
|
||||
M.M^R Prefix ControlU.^
|
||||
M.M^R Prefix Control-MetaU.C
|
||||
M.MAbort Recursive EditU.]
|
||||
M.M^R Buffer Not ModifiedU..~
|
||||
M.M^R Back to IndentationU..MQ..MU...M
|
||||
Q..MF(U..M)U...M
|
||||
M.M^R Delete Horizontal SpaceU..\
|
||||
M.M^R Indent RegionU...\
|
||||
M.M^R Split LineU...O
|
||||
M.M^R Change Font WordU..#
|
||||
M.M^R Upcase DigitU..'
|
||||
M.M^R Mark WordU..@
|
||||
M.M^R Backward SentenceU..A
|
||||
M.M^R Backward WordU..B
|
||||
M.M^R Uppercase InitialU..C
|
||||
M.M^R Kill WordU..D
|
||||
M.M^R Forward SentenceU..E
|
||||
M.M^R Forward WordU..F
|
||||
M.M^R Fill RegionU..G
|
||||
M.M^R Mark ParagraphU..H
|
||||
M.M^R Tab to Tab StopU..I
|
||||
M.M^R Kill SentenceU..K
|
||||
M.M^R Lowercase WordU..L
|
||||
M.M^R Fill ParagraphU..Q
|
||||
M.M^R Center LineU..S
|
||||
M.M^R Transpose WordsU..T
|
||||
M.M^R Uppercase WordU..U
|
||||
M.M^R Backward ParagraphU..[
|
||||
M.M^R Forward ParagraphU..]
|
||||
M.M^R Delete IndentationU..^
|
||||
M.M^R Underline WordU.._
|
||||
M.M^R Backward Kill WordU..
|
||||
M.M^R Make ()U..(
|
||||
M.M^R Move Over )U..)
|
||||
M.M^R Backward Up ListU...(Q...(U...U
|
||||
M.M^R Forward Up ListU...)
|
||||
M.M^R Mark SexpU...@
|
||||
M.M^R Backward SexpU...B
|
||||
M.M^R Down ListU...D
|
||||
M.M^R Forward SexpU...F
|
||||
M.M^R Format CodeU...G
|
||||
M.M^R Mark DefunU...HQ...HU...H
|
||||
M.M^R Indent for LispU...IQ...IU...I
|
||||
M.M^R Kill SexpU...K
|
||||
M.M^R Forward ListU...N
|
||||
M.M^R Backward ListU...P
|
||||
M.M^R Indent SexpU...Q
|
||||
M.M^R Transpose SexpsU...T
|
||||
M.M^R Beginning of DefunU...[Q...[U...A
|
||||
M.M^R End of DefunU...]Q...]U...E
|
||||
M.M^R Delete IndentationU...^
|
||||
M.M^R Backward Kill SexpU...
|
||||
128M(M.MMAKE PREFIX).XU.X
|
||||
:IPrefix Char ListX.X
|
||||
M.MList BuffersU:.X()
|
||||
M.M^R Return to SuperiorU:.X()
|
||||
M.M^R Directory DisplayU:.X()
|
||||
M.M^R Command ^X ^E FlushedU:.X()
|
||||
M.MFind FileU:.X()
|
||||
M.M^R Indent RigidlyU:.X(9)
|
||||
M.M^R Lowercase RegionU:.X()
|
||||
M.M^R Set Goal ColumnU:.X()
|
||||
M.M^R Delete Blank LinesU:.X()
|
||||
M.M^R Mark PageU:.X()
|
||||
M.M^R Do Not Write FileU:.X()
|
||||
M.M^R Read FileU:.X()
|
||||
M.M^R Save FileU:.X()
|
||||
M.M^R Transpose LinesU:.X()
|
||||
M.M^R Uppercase RegionU:.X()
|
||||
M.M^R Visit FileU:.X()
|
||||
M.MWrite FileU:.X()
|
||||
M.M^R Exchange Point And MarkU:.X()
|
||||
M.M^R Re-execute MiniU:.X()
|
||||
M.M^R Change Font RegionU:.X(#)
|
||||
M.M^R Start Kbd MacroU:.X(()
|
||||
M.M^R Set Fill PrefixU:.X(.)
|
||||
M.M^R One WindowU:.X(1)
|
||||
M.M^R Two WindowsU:.X(2)
|
||||
M.M^R View Two WindowsU:.X(3)
|
||||
M.M^R Modified Two WindowsU:.X(4)
|
||||
M.M^R Set Comment ColumnU:.X(;)
|
||||
M.M^R Where Am IU:.X(=)
|
||||
M.M^R Append to BufferU:.X(A)
|
||||
M.MSelect BufferU:.X(B)
|
||||
M.M^R DIREDU:.X(D)
|
||||
M.M^R Set Fill ColumnU:.X(F)
|
||||
M.M^R Get Q-regU:.X(G)
|
||||
M.M^R Mark Whole BufferU:.X(H)
|
||||
M.M^R InfoU:.X(I)
|
||||
M.MKill BufferU:.X(K)
|
||||
M.M^R Count Lines PageU:.X(L)
|
||||
M.MMAILU:.X(M)
|
||||
M.M^R Set Bounds RegionU:.X(N)
|
||||
M.M^R Other WindowU:.X(O)
|
||||
M.M^R Set Bounds PageU:.X(P)
|
||||
M.MRead MailU:.X(R)
|
||||
M.M^R Set Bounds FullU:.X(W)
|
||||
M.M^R Put Q-regU:.X(X)
|
||||
M.M^R Previous PageU:.X([)
|
||||
M.M^R Next PageU:.X(])
|
||||
M.M^R Grow WindowU:.X(^)
|
||||
M.M^R Underline RegionU:.X(_)
|
||||
M.M^R Backward Kill SentenceU:.X(127)
|
||||
fsosteco"n
|
||||
@ft0
|
||||
M.M^R Prefix Control-MetaU.Z
|
||||
33.FS^RINITU...Z
|
||||
M.M^R Return To SuperiorU:.X()
|
||||
37.FSHELPCHARW
|
||||
0"n
|
||||
M.M^R Exit to ExecU.C
|
||||
632.@FS^RINITU...C
|
||||
0U:.X()
|
||||
'
|
||||
'
|
||||
@ft1
|
||||
1FSTTMODEW
|
||||
1FS^RSCANW
|
||||
1FS^RECHOW
|
||||
1FSRUBCRLFW
|
||||
0FS%TOPW
|
||||
0FS%BOTTOMW
|
||||
35FS%ENDW
|
||||
500FS^RMDLYW
|
||||
M.M^R Auto-fill SpaceFS^RECSD
|
||||
@ft2
|
||||
:I..JEMACS
|
||||
:I*EMACSM.VEditor Name
|
||||
M.M& Find BufferM.VMM & Find Buffer
|
||||
M.M& Find FileM.VMM & Find File
|
||||
M.M& Get Library PointerM.VMM & Get Library Pointer
|
||||
M.M& Kill TextM.VMM & Kill Text
|
||||
M.M& Matching ParenM.VMM & Matching Paren
|
||||
M.M& Process File OptionsM.VMM & Process File Options
|
||||
M.M& Read LineM.VMM & Read Line
|
||||
M.M& Set Mode LineM.VMM & Set Mode Line
|
||||
M.MLoad LibraryM.VMM Load Library
|
||||
@ft3
|
||||
M.M& AutoloadU.A
|
||||
M.M& Set Variable CommentU.C
|
||||
M.M& Prepare For InputU.I
|
||||
M.MMake Local VariableU.L
|
||||
M.M& Macro ExecuteUM
|
||||
M.M& Macro GetU.M
|
||||
M.M& Prefix Character DriverU.P
|
||||
M.M& Make VariableU.V
|
||||
M.M& Set Mode LineFSMODEMAC
|
||||
FSOSTECO"E
|
||||
M.M& Default FS SuperiorFSSUPERIOR'
|
||||
M.M& F^K HookU*F Hook*
|
||||
M.M& Subset Directory ListingUDirectory Lister
|
||||
@ft4
|
||||
M.M& Error HandlerU..P
|
||||
& Load Essential Environment2#5FSQVECTORU..Q
|
||||
3U:..Q(0)
|
||||
1FSSERROR
|
||||
-1FS^IDISABLE
|
||||
1FS_DISABLE
|
||||
-1FSFNAMSYNTAX
|
||||
1FSBOTHCASE
|
||||
-1FSECHOFLUSH
|
||||
1FS^LINSERT
|
||||
1FSVARMAC
|
||||
0U.H
|
||||
:i.w
|
||||
10*5FSQVECTORU..K
|
||||
Q..K[..OJ5D]..O
|
||||
-1U09<0U:..K(%0)>
|
||||
5*5FSQVECTORU..U
|
||||
0U:..U(0)10000000U:..U(2)
|
||||
6*8FSQVECTORU.N
|
||||
[..OQ.NU..OJ5D]..O
|
||||
:I*[1-1[2
|
||||
FQ.N/5<Q1U:.N(%2)>
|
||||
!"!1M(M.M& Alter ..D)[(]){(})|A/A'A
|
||||
!"!2M(M.M& Alter ..D)][)(><}{'"!'!
|
||||
M.M& Macro ExecuteUM
|
||||
M.M& Prepare For InputU.I
|
||||
M.M& Prefix Character DriverU.P
|
||||
M.M& AutoloadU.A
|
||||
M.M& Make VariableU.V
|
||||
M.M& Set Variable CommentU.C
|
||||
M.M& Set Mode LineFSMODEMAC
|
||||
1FSMODECHANGE
|
||||
M.M& F^K HookM.V*F Hook*
|
||||
M.M& Check Top LevelM.VMM & Check Top Level
|
||||
M.M& Maybe Push PointM.VMM & Maybe Push Point
|
||||
M.M& Maybe Display DirectoryM.VMM & Maybe Display Directory
|
||||
0M.VAbort Resumption Message
|
||||
0M.CAtom Word Mode!* 1 => word commands deal with LISP atoms!
|
||||
:I.W"n:I.W@'1FSMODECH
|
||||
0M.CAuto Directory Display* 1 => display dir after writes, -1 => reads too
|
||||
0M.CAuto Fill Mode!* 1 => Auto Fill (break long lines at margin)!
|
||||
1FSMODECH
|
||||
32FS^RINITU "E'
|
||||
M.M^R Auto-Fill SpaceU
|
||||
500M.CAuto Push Point Option* Searches moving this far set mark at old point
|
||||
:I* ^@M.CAuto Push Point Notification* Searches setting mark type this
|
||||
500M.CAuto Save Interval!* number of characters between auto-saves!
|
||||
fs^rmdlywfs^rmcnt
|
||||
0M.CAuto Save Visited File* 1=> auto save under visited filename
|
||||
0M.CAutoarg Mode!* 1 => digits before control chars set arg!
|
||||
0FS^RINIT[2
|
||||
"NM.M^R AutoargU2'
|
||||
Q2-Q0"E'
|
||||
Q2U0Q2U1Q2U2Q2U3Q2U4
|
||||
Q2U5Q2U6Q2U7Q2U8Q2U9
|
||||
1M.CCase Replace* 1 => Replace commands preserve case
|
||||
0M.CComment Begin* String for beginning new comments
|
||||
32M.CComment Column* Column to start comments in
|
||||
0M.CComment Start* String that indicates the start of a comment
|
||||
:I*M.CComment End* String that ends comments
|
||||
:I*/8+1*8M.CComment Rounding* Hairy - see code for ^R Indent for Comment
|
||||
0M.CDisplay Matching Paren!* Controls action of ) in showing the matching (!
|
||||
"NM.M& Matching Paren'"#0'FS^RPAREN
|
||||
70M.CFill Column!* Page width for filling and grinding!
|
||||
FSADLINE
|
||||
:I*.?!M.CFill Extra Space List* punctuations that need 2 spaces
|
||||
:I*M.CFill Prefix* String to put before each line when filling
|
||||
0M.CFind File Inhibit Write* initializes Inhibit Write for Find File
|
||||
0M.CFS CTLMTA!!FSCTLMTA
|
||||
0M.CInhibit Write!* -1 => Never save automatically on switching files!
|
||||
1FSMODECH
|
||||
0M.CLISP Indent Offset* See ^R Indent for LISP
|
||||
0M.COverwrite Mode!* Overwrite Mode status (see MM Overwrite Mode)!
|
||||
1FSMODECH
|
||||
FS^RREPLACE
|
||||
:I*M.CPage Delimiter* Search string for finding page boundaries
|
||||
:I*. M.CParagraph Delimiter* Lines starting with these chars start paragraphs
|
||||
-1M.CPermit Unmatched Paren* 1 => allow unmatched ), -1 => only in Lispish modes
|
||||
0M.CRead Line DelayPausing this many 1/30 sec causes echoing
|
||||
5000M.CRegion Query Size* Some commands need confirmation if region this big
|
||||
:I*M.VSet Mode Line Hook
|
||||
0M.CSpace Indent Flag* If nonzero, Auto Fill indents new lines
|
||||
:I*MEMOXGP@XGPUNFASLOUTPUTOLREC M.CTemp File FN2 List* Reap File deletes these FN2s
|
||||
:I*FundamentalM.CModeDo MM FOO to enter FOO mode
|
||||
:I*M.CSubmode!!1FSMODECH
|
||||
M.M& Subset Directory ListingM.CDirectory ListerMacro to use to list directories
|
||||
15FSQVECTOR[1Q1M.VSearch Default Ring
|
||||
:I:1(0):I:1(1):I:1(2)]1
|
||||
:I..GQ..H"EMDirectory Lister'
|
||||
0M.VBacktrace Temp
|
||||
:I*M.VEditor Name
|
||||
:I*M.VEditor Type
|
||||
:I*M.VPrefix Char List
|
||||
M.M& Indent with TabsM.VMM & Indent
|
||||
M.M& Xindent with TabsM.VMM & Xindent
|
||||
:I* : : : : : : : : : : : :M.CTab Stop Definitions* Tab stops for ^R Tab to Tab Stop
|
||||
0M.VNext Bfr Number
|
||||
9*5FSQVECTORU.B
|
||||
9U:.B(0)
|
||||
:I*MainU:.B(1)
|
||||
0U:.B(2)
|
||||
:I*FundamentalU:.B(3)
|
||||
Q..ZU:.B(4)
|
||||
0U:.B(5)
|
||||
0U:.B(6)
|
||||
%Next Bfr NumberU:.B(7)
|
||||
0U:.B(8)
|
||||
0M.VBuffer Filenames
|
||||
Q:.B(1)M.VBuffer Name
|
||||
0M.VBuffer Index
|
||||
Q:.B(1)M.VPrevious Buffer
|
||||
FSOSTECO"E
|
||||
M.M& Default FS SuperiorFSSUPERIOR'
|
||||
M.MMake Local VariableU.L
|
||||
0M.VAuto Save Mode
|
||||
M.LAuto Save Mode
|
||||
0M.CAuto Save Default!* Default value of Auto Save Mode for new files!
|
||||
1FSMODECH
|
||||
:I*M.CAuto Save Filenames* Filename for Auto Save Files
|
||||
2M.CAuto Save Max* # of saves to keep
|
||||
M.LAuto Save Delete
|
||||
M.LAuto Save Size
|
||||
M.LAuto Save Count
|
||||
M.LInhibit Write
|
||||
5M.VInitial Local Count
|
||||
Purify Variablesm[1[2[3
|
||||
m.m&& Variable Name Listu2
|
||||
<q2+fq2+4u2-fq2;
|
||||
:fo..q2u1
|
||||
q1"gf~:..q(q1)2"e
|
||||
q2u:..q(q1)
|
||||
q2+fq2+4u3
|
||||
q:..q(q1+2)"n
|
||||
f~:..q(q1+2)3"e
|
||||
q3u:..q(q1+2)'''
|
||||
0u3
|
||||
fq.b/5<fq:.b(q3)"gf~:.b(q3)2"e
|
||||
q2u:.b(q3)''
|
||||
%3>
|
||||
'>
|
||||
& Load Patches*f[bbindqEMACS Version:\[1
|
||||
f[dfileetemacs;pat1 >
|
||||
1:<er@y>"l'
|
||||
z"e'
|
||||
@f
|
||||
k
|
||||
f[:ejpage
|
||||
m(m.mLoad Library)PURIFY
|
||||
<m(m.mTCompile)
|
||||
:s
|
||||
|
||||
;>
|
||||
hk~Filename~ EINIT~DOC~ ~Filename~(Macros for installing a new EMACS.
|
||||
~DOC~ ? Generate EMACS<? Create EMACS :EJ file from sources.
|
||||
Compresses the source files that need compression,
|
||||
then concatenates the COMPRS files and purifies, writing
|
||||
the result out as EMACS;[PURE] >.
|
||||
~DOC~ ? Document EMACS)? Create EMACS DOC and EMACS CHART.
|
||||
$~DOC~ & Load Default Environment<S Create the default environment.
|
||||
Assuming that the pure files are already loaded
|
||||
and the "essential" environment is set up, set up the standard
|
||||
EMACS ^R command definitions, etc.
|
||||
&~DOC~ & Load Essential EnvironmentvS Does what's needed for EMACS macros to work at all.
|
||||
A given environment (such as EMACS, TME, etc.) may set up
|
||||
other variables, and redefine ^R characters. That is all optional.
|
||||
But code may fail to work if these variables are missing.
|
||||
~DOC~ Purify Variables"C Make var names in symtab pure.
|
||||
For each symbol, sees whether there is a pure string for
|
||||
its name, and if so makes the sym tab point at that pure string.
|
||||
~DOC~ & Load PatchesS Load patches (made since [pure] file) before dumping.
|
||||
Essentially, we do a Compile One Macro on each page of
|
||||
the patch file EMACS;PATnnn >
|
||||
~DIRECTORY~? Generate EMACS
|
||||
? Document EMACS
|
||||
& Load Default Environment
|
||||
& Load Essential Environment
|
||||
Purify Variables
|
||||
& Load Patches
|
||||
~INVERT~[1<Q1-1U1Q1FP;>Q1
|
||||
81
src/e142/emacs-133.changes
Normal file
81
src/e142/emacs-133.changes
Normal file
@@ -0,0 +1,81 @@
|
||||
Changes in EMACS version 133:
|
||||
|
||||
*) The self documentation features now know about names for the
|
||||
built-in TECO ^R command definitions. For example, Apropos of "Line"
|
||||
will now show ^R Open Line on C-O. You can't actually call those
|
||||
commands by those names, unless you load the library BARE; this
|
||||
library is temporarily loaded by the documentation commands that need
|
||||
it. MM& Load BARE loads BARE and causes BARE to remain loaded until
|
||||
its caller returns.
|
||||
|
||||
*) C-U C-Y differs from plain C-Y in that it leaves point before
|
||||
the un-killed text and the mark after.
|
||||
|
||||
*) C-U C-L causes the line point is on to be redisplayed.
|
||||
Actual numeric arguments (not just C-U) still specify
|
||||
a line to display point on.
|
||||
|
||||
*) C-; and M-; (^R Indent for Comment) now inserts the comment
|
||||
terminator as well as the comment starter, leaving point in between
|
||||
them. M-N and M-P (^R Down Comment Line, and .. Up ..), have been
|
||||
modified for this behavior.
|
||||
|
||||
*) M-G and M-Q (^R Fill Paragraph and ^R Fill Region) now by default
|
||||
remove excess spaces such as are produced by filling.
|
||||
|
||||
*) Return now will not gobble a blank line followed by a nonblank
|
||||
line.
|
||||
|
||||
*) C-K will now treat a blank line as if it were empty, killing
|
||||
through the CRLF instead of to it. More specifically, if point is
|
||||
followed by a CRLF with only whitespace in between, C-K will kill
|
||||
through the CRLF.
|
||||
|
||||
*) M-[ and M-] (^R Backward Paragraph, and ... Forward ...), now treat
|
||||
"\" at the front of a line just like "." and "-", for the sake of TEX
|
||||
files. This special treatment is that if those characters are
|
||||
declared (using QParagraph Delimiter) to start paragraphs, then
|
||||
whenever a paragraph starts for that reason, that paragraph is only
|
||||
one line long.
|
||||
|
||||
*) You can now put MM Query Replace on a character. It will read its
|
||||
arguments in the echo area.
|
||||
|
||||
*) Errors in auto-saving will type out "(Auto Save Error!)".
|
||||
|
||||
*) ^R Indent Nested (the definition of Tab in certain modes) now does
|
||||
something useful with negative arguments. It indents the line more
|
||||
than the previous line, (* (ABS ARGUMENT) (MAX 1 QIndent Increment))
|
||||
spaces more. QIndent Increment is not initially defined.
|
||||
|
||||
*) There is now an autoloading definition for C-X ( which loads in
|
||||
KBDMAC and transfers to it. People need no longer load KBDMAC in
|
||||
their init files. You will now see "Def" in the mode line while
|
||||
defining a keyboard macro.
|
||||
|
||||
*) Exiting from the top-level ^R invocation now returns to EMACS's
|
||||
superior. To exit from it back to TECO command level, do
|
||||
1MM Top Level. This will advise you to re-enter ^R mode by doing
|
||||
:M..L. Returning to the superior will now clear out the mode line
|
||||
completely.
|
||||
|
||||
*) Creating a new buffer initializes it in the same mode as the
|
||||
previous selected buffer. This uses the new @F^G command in TECO.
|
||||
|
||||
*) Making variables like QAuto Fill Mode local now works
|
||||
straightforwardly; it is no longer necessary to deal with the crock
|
||||
Switch Modes Process Options, which no longer exists. These variables
|
||||
have been equipped with macros which are run whenever their values
|
||||
change. Thus, simply doing 1UAuto Fill Mode is enough to turn on
|
||||
the mode. MM & Process Options no longer exists. A side effect of
|
||||
this is that buffer switching is much faster. This uses the new
|
||||
FS VAR MACRO feature of TECO. QProcess Options Hook no longer
|
||||
exists; instead, you must make macros to be run when your variables'
|
||||
values change. This will be documented in CONV later.
|
||||
|
||||
*) Instead of calling MM & Set Mode Line, macros should simply do
|
||||
1FS Mode Change, which will cause MM & Set Mode Line to be called
|
||||
when the mode line comes up for redisplay. Thus, multiple reasons for
|
||||
calling it will not cause it to be called more than once.
|
||||
QSet Mode Line Hook still exists and works as before.
|
||||
|
||||
BIN
src/e142/emacs._ej
Normal file
BIN
src/e142/emacs._ej
Normal file
Binary file not shown.
BIN
src/e142/emacs._ej.135
Normal file
BIN
src/e142/emacs._ej.135
Normal file
Binary file not shown.
25
src/e142/emacs.ctl
Normal file
25
src/e142/emacs.ctl
Normal file
@@ -0,0 +1,25 @@
|
||||
@midas teco
|
||||
*2
|
||||
*11.
|
||||
*12.
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*13.
|
||||
*
|
||||
*10.
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*17.
|
||||
@iddt
|
||||
*;yteco.sav
|
||||
*;wteco
|
||||
*purifygmmrunpurifydumpnemacs.savfsexit;h
|
||||
75
src/e142/emacs.init
Normal file
75
src/e142/emacs.init
Normal file
@@ -0,0 +1,75 @@
|
||||
!* -*-TECO-*- *!
|
||||
!* This is the default init file for EMACS.
|
||||
Anything in the buffer when you start this
|
||||
will be used instead of the JCL.
|
||||
*!
|
||||
Q..9"E Q..LU..9' !* ..9 is what to run on the way out.!
|
||||
!* Maybe same as ..L.!
|
||||
|
||||
FT
|
||||
NEMACS (emacs version 135) has been renamed to EMACS and the old
|
||||
version (133) to <OLDSYS>EMACS. The most recent version (142)
|
||||
has been brought up as <NEWSYS>EMACS. A summary of the changes
|
||||
(there are many) is available in <EMACS>CHANGES.142. In a week
|
||||
or two, <NEWSYS>EMACS.SAV;142 will go onto <SUBSYS>, so try out
|
||||
the new version before then. Any questions to <RUBENSTEIN>.
|
||||
|
||||
|
||||
FQ(0FO..QAuto Save Filenames)-1"L
|
||||
FS MSNAME:F6[0
|
||||
:I*DSK:0;Autosave > M.VAuto Save Filenames ]0'
|
||||
|
||||
FS XJNAME :F6 [J
|
||||
|
||||
FS MSNAME FS D SNAME !* Make connected dir default name!
|
||||
QFind File Inhibit Write UInhibit Write
|
||||
|
||||
!* On non-meta keyboards, allow Alt 1 2 to mean an arg of 12.!
|
||||
FS %TOFCI"E
|
||||
M.M ^R Autoarg[0 460.-1[1
|
||||
10< Q0,%1^ FS ^R CMAC> Q0U..-
|
||||
]1 ]0'
|
||||
|
||||
!* Process the JCL!
|
||||
0[0 0[1
|
||||
Z"E FJ' ZJ !* Get JCL, or use whatever previous init file left in buffer.!
|
||||
."N !* Process JCL command - extract filenames and commands!
|
||||
0,0A-
|
||||
"E -D' !* REMOVE LF AT END IF ANY *!
|
||||
J :S"N .,Z^ FX1 -D' !* IF COMMANDS TO EXECUTE, PUT THEM IN Q1!
|
||||
HFX0' !* IF FILE TO BE READ, PUT NAME IN Q0!
|
||||
'
|
||||
FS LISPT"N FS CCL FNAMU0
|
||||
0FS SUPERIOR !* Dont try to suck in LISPT.!
|
||||
0U1 F~JSNDMSG"E M(M.M TEXT MODE)''
|
||||
|
||||
qEMACS Version-132"G M(M.MLoad Library)PATCH'
|
||||
1fs Echo Errors
|
||||
8FS HELP CHAR
|
||||
Q0"E Q1"E !* If no commands / file to read, offer help.!
|
||||
HK FS Date FS FD Convert
|
||||
9J \ [4 HK
|
||||
FS Version :\ [2
|
||||
qEMACS Version:\[1 !* get version no. as string!
|
||||
Q4-12 "L FTGood Morning.'
|
||||
"# Q4-18 "L FTGood Afternoon.'
|
||||
"# FTGood Evening.''
|
||||
FT
|
||||
EMACS Editor, version 1.2 - type ^H for help.
|
||||
''
|
||||
FQ0-1"L Q1"N M1' !* No file specified => execute commands from JCL!
|
||||
0FS QP Unwind :M..9' !* and enter ^R mode.!
|
||||
|
||||
QInhibit Write,M(M.M Visit File)0 !* VISIT SPECIFIED FILE, USING ">' AS DEFAULT FN2!
|
||||
FSLISPT"N F~JSNDMSG"N !* If called by EXEC EDIT command...!
|
||||
QBuffer Filenames F[ DFILE
|
||||
0 FS DVERS !* Reset version number defaults.!
|
||||
FS DFILE UBuffer Filenames
|
||||
M(M.M& Set Mode Line)
|
||||
F]D FILE''
|
||||
|
||||
Q1"N M1' !* If JCL held commands, execute them.!
|
||||
f~JLISP"E M(M.MLoad Library)Intermacs !* if under a LISP then load Intermacs!
|
||||
FS Exit'
|
||||
|
||||
0FS QP Unwind :M..9
|
||||
100
src/e142/emacs.log
Normal file
100
src/e142/emacs.log
Normal file
@@ -0,0 +1,100 @@
|
||||
Tenex Batch System. Version 3.0
|
||||
Batch job number 246 Started Monday, November 26, 1979 16:17:23
|
||||
Maximum log length (lines): 1000
|
||||
Maximum elapsed time (minutes): 360
|
||||
Maximum CPU time (seconds): 3600
|
||||
Input file : <EMACS>EMACS.CTL;2;ASTAFF,26-Nov-79 14:46:11
|
||||
Output file : <EMACS>EMACS.LOG;1;ASTAFF,26-Nov-79 14:42:50
|
||||
|
||||
SUMEX-AIM Tenex 1.31.33, SUMEX-AIM Exec 1.54.22
|
||||
|
||||
!!! Hardware problems - save your files often. Running on 1 CPU !!!
|
||||
|
||||
@LOG SCHOEN STAFF
|
||||
Job 26 on TTY144 26-Nov-79 16:17
|
||||
Previous login: 26-Nov-79 16:12
|
||||
Tenex will go down Thu 11-29-79 1730 til Thu 11-29-79 2359
|
||||
for preventive maintenance
|
||||
@;end of COMAND.CMD
|
||||
@
|
||||
@connect emacs
|
||||
EMACS over allocation by 2041 pages.
|
||||
@usestat
|
||||
26-Nov-79 16:17, used 0:00:01 in 0:00:13, sched=10%, 1/23
|
||||
17!+22! Jobs, LA 4.49 6.34 6.70
|
||||
@<10/20-sources>midas
|
||||
******* [ 16:17:55 (PRIV) USED 0:00:02 IN 0:00:26 ] *******
|
||||
NOTPUR MIDAS.417
|
||||
*teco
|
||||
TECO
|
||||
END OF LOW IMPURE = 3341
|
||||
IIT JSYS TYPE (0 - NONE, 1 - BBN, 2 - SUMEX): 2
|
||||
GTTYP index for DM2500 = 11.
|
||||
GTTYP index for H1500 = 12.
|
||||
GTTYP index for VT52 =
|
||||
GTTYP index for DM1520 =
|
||||
GTTYP index for IMLAC =
|
||||
GTTYP index for VT05 =
|
||||
GTTYP index for TK4025 =
|
||||
GTTYP index for VT61 =
|
||||
GTTYP index for TL4041 =
|
||||
GTTYP index for FOX =
|
||||
GTTYP index for HP2645 = 13.
|
||||
GTTYP index for I400 =
|
||||
GTTYP index for TK4023 = 10.
|
||||
GTTYP index for ANNARB =
|
||||
GTTYP index for C100 =
|
||||
GTTYP index for IQ120 =
|
||||
GTTYP index for VT100 =
|
||||
GTTYP index for I100 =
|
||||
GTTYP index for TL1061 = 17.
|
||||
GTTYP index for H19 = 18.
|
||||
CHNTAB+3 35742 21. 316-061 .ICPOV Undefined in BLOCK
|
||||
CHNTAB+4 35743 21. 316-063 .ICTOD Undefined in BLOCK
|
||||
CHNTAB+5 35744 21. 316-065 .ICNXP Undefined in BLOCK
|
||||
TOP OF PURE = 41755
|
||||
TECO
|
||||
GOZ+20 4024 0. 20-044 .TICCC Undefined in literal
|
||||
SETTTM+1 4223 0. 24-005 .TICCG Undefined
|
||||
FSNQIT+11 20043 0. 141-085 .TICCG Undefined
|
||||
FSNQT2+2 20050 0. 141-090 .TICCG Undefined
|
||||
SETFRK+17 22317 0. 164-031 .TICCG Undefined
|
||||
RETFRK+4 22341 0. 164-056 .TICCG Undefined
|
||||
CHNTAB+3 35742 0. 316-061 .ICPOV Undefined in BLOCK
|
||||
CHNTAB+4 35743 0. 316-063 .ICTOD Undefined in BLOCK
|
||||
CHNTAB+5 35744 0. 316-065 .ICNXP Undefined in BLOCK
|
||||
Constants area inclusive
|
||||
From To
|
||||
3334 3341
|
||||
37700 41554
|
||||
Run time = 1:20.14
|
||||
5816 Symbols including initial ones (72% used)
|
||||
******* [ 16:24:54 EXEC USED 0:01:23 IN 0:07:25 ] *******
|
||||
@usestat
|
||||
26-Nov-79 16:24, used 0:01:22 in 0:07:21, sched=2%, 2/34
|
||||
15!+21!+1 Jobs, LA 4.61 5.16 5.91
|
||||
@iddt
|
||||
******* [ 16:24:59 IDDT USED 0:01:24 IN 0:07:29 ] *******
|
||||
|
||||
;yANK FILE: teco.sav;786
|
||||
|
||||
;wRITE SYMBOLS ON FILE: teco.SYMBOLS;785 [Confirm]
|
||||
|
||||
purify$$g[_TECO$:PURIFY]
|
||||
~`u~
|
||||
TECO&GETCHR+4/ LDB 15,TECO&BTAB(12) mmrun$pU urify$dU ump$nU emacs.sav$fU sexit$$;hU
|
||||
^C
|
||||
******* [ 16:27:28 EXEC USED 0:01:31 IN 0:09:59 ] *******
|
||||
@usestat
|
||||
26-Nov-79 16:27, used 0:01:30 in 0:09:55, sched=2%, 3/99
|
||||
18!+21! Jobs, LA 6.06 5.60 5.96
|
||||
@^C
|
||||
@LOGOUT
|
||||
[New mail from SYSTEM sent 26-Nov-79 16:26]
|
||||
EMACS over allocation by 2097 pages.
|
||||
[Confirm]
|
||||
|
||||
Tenex will go down Thu 11-29-79 1730 til Thu 11-29-79 2359
|
||||
for preventive maintenance
|
||||
KILLED JOB 26, USER SCHOEN, ACCT STAFF, TTY 144, AT 11/26/79 1628
|
||||
USED 0:1:32 IN 0:10:43
|
||||
2258
src/e142/emacs.odoc
Normal file
2258
src/e142/emacs.odoc
Normal file
File diff suppressed because it is too large
Load Diff
238
src/e142/emacs.old
Normal file
238
src/e142/emacs.old
Normal file
@@ -0,0 +1,238 @@
|
||||
This is the file <EMACS>EMACS.NEWS. It contains news about EMACS,
|
||||
recent news first. If you have anything you want to add, use the
|
||||
Post EMACS News command in the ENEWS library.
|
||||
|
||||
Format of this file is ^A<Date>^B<Author>^C<Subject>^DMessage^E
|
||||
|
||||
05/23/79 14:55:24RUBENSTEINPAGE library screwing up INFOThe PAGE library shouldn't be screwing up INFO any more. The problem
|
||||
was a complex one, based on the fact that PAGE's visit file hook
|
||||
didn't end with a ^\, so id didn't pop the q-register stack, which
|
||||
was pushed by Visit File, so & Info Select Node's q-registers were
|
||||
still on the stack when Visit File returned. Anyway, it should
|
||||
work fine now...
|
||||
|
||||
Stew
|
||||
04/21/79 23:32:55RUBENSTEINEMACS 133EMACS 133 is now the default version of EMACS. You can still get
|
||||
EMACS 131 for a little while by running <SUBSYS>OEMACS
|
||||
|
||||
Stew
|
||||
04/21/79 23:31:25RUBENSTEINFind File Inhibit WriteThis variable is used to determine whether you like ^X ^F, ^X ^V or
|
||||
^X ^E as your default file-visiting command. It is used by ^X ^F
|
||||
to determine which method to use, and it is also used to determine
|
||||
how to read in a file requested by the exec EDIT command. If you like
|
||||
^X ^E, do 0U$Find File Inhibit Write$ in your init file. ^X ^V and
|
||||
^X ^R are 1 and -1, respectively.
|
||||
|
||||
Stew
|
||||
04/14/79 16:39:42RUBENSTEINEMACS version 133Changes in EMACS version 133:
|
||||
|
||||
*) The self documentation features now know about names for the
|
||||
built-in TECO ^R command definitions. For example, Apropos of "Line"
|
||||
will now show ^R Open Line on C-O. You can't actually call those
|
||||
commands by those names, unless you load the library BARE; this
|
||||
library is temporarily loaded by the documentation commands that need
|
||||
it. MM& Load BARE loads BARE and causes BARE to remain loaded until
|
||||
its caller returns.
|
||||
|
||||
*) C-U C-Y differs from plain C-Y in that it leaves point before
|
||||
the un-killed text and the mark after.
|
||||
|
||||
*) C-U C-L causes the line point is on to be redisplayed.
|
||||
Actual numeric arguments (not just C-U) still specify
|
||||
a line to display point on.
|
||||
|
||||
*) C-; and M-; (^R Indent for Comment) now inserts the comment
|
||||
terminator as well as the comment starter, leaving point in between
|
||||
them. M-N and M-P (^R Down Comment Line, and .. Up ..), have been
|
||||
modified for this behavior.
|
||||
|
||||
*) M-G and M-Q (^R Fill Paragraph and ^R Fill Region) now by default
|
||||
remove excess spaces such as are produced by filling.
|
||||
|
||||
*) Return now will not gobble a blank line followed by a nonblank
|
||||
line.
|
||||
|
||||
*) C-K will now treat a blank line as if it were empty, killing
|
||||
through the CRLF instead of to it. More specifically, if point is
|
||||
followed by a CRLF with only whitespace in between, C-K will kill
|
||||
through the CRLF.
|
||||
|
||||
*) M-[ and M-] (^R Backward Paragraph, and ... Forward ...), now treat
|
||||
"\" at the front of a line just like "." and "-", for the sake of TEX
|
||||
files. This special treatment is that if those characters are
|
||||
declared (using QParagraph Delimiter) to start paragraphs, then
|
||||
whenever a paragraph starts for that reason, that paragraph is only
|
||||
one line long.
|
||||
|
||||
*) You can now put MM Query Replace on a character. It will read its
|
||||
arguments in the echo area.
|
||||
|
||||
*) Errors in auto-saving will type out "(Auto Save Error!)".
|
||||
|
||||
*) ^R Indent Nested (the definition of Tab in certain modes) now does
|
||||
something useful with negative arguments. It indents the line more
|
||||
than the previous line, (* (ABS ARGUMENT) (MAX 1 QIndent Increment))
|
||||
spaces more. QIndent Increment is not initially defined.
|
||||
|
||||
*) There is now an autoloading definition for C-X ( which loads in
|
||||
KBDMAC and transfers to it. People need no longer load KBDMAC in
|
||||
their init files. You will now see "Def" in the mode line while
|
||||
defining a keyboard macro.
|
||||
|
||||
*) Exiting from the top-level ^R invocation now returns to EMACS's
|
||||
superior. To exit from it back to TECO command level, do
|
||||
1MM Top Level. This will advise you to re-enter ^R mode by doing
|
||||
:M..L. Returning to the superior will now clear out the mode line
|
||||
completely.
|
||||
|
||||
*) Creating a new buffer initializes it in the same mode as the
|
||||
previous selected buffer. This uses the new @F^G command in TECO.
|
||||
|
||||
*) Making variables like QAuto Fill Mode local now works
|
||||
straightforwardly; it is no longer necessary to deal with the crock
|
||||
Switch Modes Process Options, which no longer exists. These variables
|
||||
have been equipped with macros which are run whenever their values
|
||||
change. Thus, simply doing 1UAuto Fill Mode is enough to turn on
|
||||
the mode. MM & Process Options no longer exists. A side effect of
|
||||
this is that buffer switching is much faster. This uses the new
|
||||
FS VAR MACRO feature of TECO. QProcess Options Hook no longer
|
||||
exists; instead, you must make macros to be run when your variables'
|
||||
values change. This will be documented in CONV later.
|
||||
|
||||
*) Instead of calling MM & Set Mode Line, macros should simply do
|
||||
1FS Mode Change, which will cause MM & Set Mode Line to be called
|
||||
when the mode line comes up for redisplay. Thus, multiple reasons for
|
||||
calling it will not cause it to be called more than once.
|
||||
QSet Mode Line Hook still exists and works as before.
|
||||
|
||||
04/02/79 15:07:56USECSA request fo a new featureWould it be possible to have a command to fork a new EXEC from emacs?
|
||||
Michael Toy
|
||||
03/30/79 11:58:37RUBENSTEINPDL overflows and other EMACS lossagesIf you get any of these, the best thing to do is save your core
|
||||
image and then give the START command. This will cause EMACS
|
||||
to re-initialize itself, but your buffers will still remain
|
||||
intact -- you won't lose any work. Then send me a message
|
||||
giving as many details as possible...
|
||||
|
||||
Stew
|
||||
03/30/79 11:54:13RUBENSTEIN^E "bug"C-E is redefined (in ALL modes) to do ^R Exchange Characters. This
|
||||
used to be on C-T. To get end of line, use C-M->. If you want, a couple
|
||||
of people have adopted the AI lab editor's convention of M-tab for
|
||||
end of line and M-^L for beginning (or reversed, I don't remember. I
|
||||
personally like to have those two commands self inserting, as they are
|
||||
in vanilla EMACS.
|
||||
|
||||
Stew
|
||||
03/26/79 12:55:27USECSNews featureI vote to keep the news. It seems to be an effective way for
|
||||
EMACS users to report bugs and also to find out about bugs that
|
||||
others have caught. I don't really like the # hack, but it is
|
||||
just a small irritation. I would rather have to invoke the news
|
||||
manually instead of having the first character I type echo
|
||||
incorrectly.
|
||||
Michael Toy
|
||||
03/25/79 22:14:06SCHOENanother bug
|
||||
Beware of pushdown overflow...I got one when trying to get INFO
|
||||
through the documentation package.
|
||||
|
||||
Eric03/25/79 09:25:53SCHOEN^E bug
|
||||
Watch out! At least in MIDAS mode, ^E doesn't go to the end of the line,
|
||||
but splits the carriage return-linefeed sequence separating the current
|
||||
line from the previous line around the first character of the current line,
|
||||
like:
|
||||
|
||||
start: reset
|
||||
move 17,[iowd....]
|
||||
becomes when ^E is typed on the second line:
|
||||
|
||||
start: reset^Mm^Jove 17,[iowd....]
|
||||
|
||||
|
||||
Eric03/20/79 22:54:36VANMELLEI second the motionThe users of this news facility so far are myself, SRISW, and
|
||||
Rubenstein; of these, SRISW and I hate it -- what's wrong with BBD
|
||||
anyway? If this feature is desirable, where are the users who like it?
|
||||
I say flush it if there is no great clamor for it.
|
||||
|
||||
SRISW's point about changing the system too often is also well taken. I
|
||||
have no objection to people developing and advertising macro libraries
|
||||
with new features. But changing the default system (in particular all
|
||||
the nonsense that has been creeping into <EMACS>EMACS.INIT) without definite
|
||||
user support is a bad idea. Publicize things and let people try them
|
||||
optionally (e.g. let them put something in their init), but don't do it
|
||||
in such a way that it is difficult or even impossible to avoid if the
|
||||
user deems the feature undesirable. Poll the community and see what
|
||||
they really want!!03/19/79 21:18:26SRISWEMACS changing too oftenIt would seem that SUMEX is having a problem with EMACS that other sites
|
||||
on the network have experienced. Specifically, the maintainer, in
|
||||
wanting to bring the most features and usefulness to the local EMACS,
|
||||
changes it too often thus rendering the entire EMACS user community
|
||||
angry and confused a great deal of the time. Let me suggest a simple
|
||||
solution. I maintain EMACS at SRI-KL and SRI-KA, and when I want to make
|
||||
a change or add a feature, I always send a note to the bulletin board
|
||||
and wait for the response. If at least 90% of the people approve of the
|
||||
change, then the new EMACS is generated and put on NEW:. If not, then
|
||||
the change is simply not put in. I keep these changes to a bare minimum
|
||||
and never take more than one poll a month. The results have been
|
||||
graitfying and you might do well to implement your scheme in this manner,
|
||||
including flushing this silly ENEWS frob. That is what bulletin boards
|
||||
are for, and your BBD system certainly should carry all these notes.
|
||||
Not some local software hack.03/19/79 10:59:31SCHOENI vote for consistency
|
||||
Sorry for sounding like an ass, but I say EMACS should remain the same
|
||||
for at least two days at a time....
|
||||
Eric
|
||||
03/17/79 16:12:18VANMELLEFlush the news!I agree with srisw. This news system is superfluous. There already
|
||||
exists a mechanism for communication among emacs users, viz. the
|
||||
bulletin board (BBD). Interested users can put the EMACS topic on their
|
||||
interest lists and use BBD or BBREAD to read them when they appear;
|
||||
they can also POST notices of interest to others.
|
||||
|
||||
Besides, I'd prefer not to add any more to the initial emacs startup
|
||||
time, and certainly not for this news system.
|
||||
|
||||
Bill03/17/79 12:59:48SRISWIll
|
||||
I think this news frob is somewhat ill and slightly dumb. If
|
||||
people want to send mail, they can do it with the mail system,
|
||||
not some non-standard thing03/17/79 11:07:59RUBENSTEINKEYPAD library no longer loaded by defaultA few users have objected to the idea that Sumex-AIM EMACS be any
|
||||
different from EMACS anywhere else, so I have decided to make
|
||||
the default EMACS not load the KEYPAD library by default. It can
|
||||
still, of course, be loaded with MM Load Library$KEYPAD$ either
|
||||
from your INIT file or explicitly.
|
||||
|
||||
I would appreciate hearing from users about this and other issues
|
||||
(on either side)... There will be a message when EMACS starts up
|
||||
to the effect that the KEYPAD lib is no longer loaded (unless you
|
||||
happen to have 1M.VKEYPAD Inhibit$ in your init file!) for a few days.
|
||||
Also, comments on the news facility would be appreciated. In fact,
|
||||
use M-X Run Library$ENEWS$Post to post your opinions!
|
||||
|
||||
Stew
|
||||
03/15/79 02:44:40RUBENSTEINWhen is the KEYPAD library NOT loaded?The KEYPAD library is not loaded if
|
||||
1) You are not on a datamedia, or
|
||||
2) You make Q$KEYPAD Inhibit$ non-zero in your INIT file.
|
||||
|
||||
Someone suggested to me that KEYPAD should NEVER be loaded by default
|
||||
although those who wished to have it loaded could put it in their
|
||||
INIT file.
|
||||
|
||||
Comments, anyone?
|
||||
|
||||
Stew
|
||||
|
||||
P.S. In case I never mentioned it, part of my job is to write INIT
|
||||
files at users request. If there's anything that you want loaded
|
||||
automatically, or any command that you want redefined, let me know.
|
||||
03/15/79 01:09:34RUBENSTEINEMACS News ServiceThe EMACS news file can be accessed via two commands in the
|
||||
ENEWS library:
|
||||
|
||||
Post EMACS News
|
||||
This command will ask for a subject, then let you type
|
||||
your news into a buffer. When you exit the recursive
|
||||
EMACS with C-M-C, your news will be posted.
|
||||
|
||||
Read EMACS News
|
||||
This command enables you to read recent EMACS news. It types
|
||||
the date, author, and subject of each news item, most recent
|
||||
first, and asks you if you want to see the rest. If you
|
||||
answer Y or <Space>, it types it at you and asks for the next.
|
||||
If you answer N or <delete>, it asks about the next without
|
||||
typing it. If you answer X or Q, it quits asking and returns.
|
||||
|
||||
Try it!
|
||||
|
||||
91
src/e142/emacs.timing
Normal file
91
src/e142/emacs.timing
Normal file
@@ -0,0 +1,91 @@
|
||||
!* -*-TECO-*- *!
|
||||
!* This is the default init file for EMACS.
|
||||
Anything in the buffer when you start this
|
||||
will be used instead of the JCL.
|
||||
*!
|
||||
0[y 0[X
|
||||
FTA qy ux FS Runtime uy qy-qx=
|
||||
Q..9"E Q..LU..9' !* ..9 is what to run on the way out.!
|
||||
!* Maybe same as ..L.!
|
||||
|
||||
FQ(0FO..QAuto Save Filenames)-1"L
|
||||
FS MSNAME:F6[0
|
||||
:I*DSK:0;Autosave > M.VAuto Save Filenames ]0'
|
||||
|
||||
FS XJNAME :F6 [J
|
||||
|
||||
FS MSNAME FS D SNAME !* Make connected dir default name!
|
||||
QFind File Inhibit Write UInhibit Write
|
||||
|
||||
!* On non-meta keyboards, allow Alt 1 2 to mean an arg of 12.!
|
||||
FS %TOFCI"E
|
||||
M.M ^R Autoarg[0 460.-1[1
|
||||
10< Q0,%1^ FS ^R CMAC> Q0U..-
|
||||
]1 ]0'
|
||||
|
||||
FTB qy ux FS Runtime uy qy-qx=
|
||||
!* Process the JCL!
|
||||
0[0 0[1
|
||||
Z"E FJ' ZJ !* Get JCL, or use whatever previous init file left in buffer.!
|
||||
."N !* Process JCL command - extract filenames and commands!
|
||||
0,0A-
|
||||
"E -D' !* REMOVE LF AT END IF ANY *!
|
||||
J :S"N .,Z^ FX1 -D' !* IF COMMANDS TO EXECUTE, PUT THEM IN Q1!
|
||||
HFX0' !* IF FILE TO BE READ, PUT NAME IN Q0!
|
||||
'
|
||||
FS LISPT"N FS CCL FNAMU0
|
||||
0FS SUPERIOR !* Dont try to suck in LISPT.!
|
||||
0U1 F~JSNDMSG"E M(M.M TEXT MODE)''
|
||||
|
||||
FTC qy ux FS Runtime uy qy-qx=
|
||||
1fs Echo Errors
|
||||
8FS HELP CHAR
|
||||
HK FS Date FS FD Convert
|
||||
9J \ [4 [3
|
||||
HK
|
||||
:I3
|
||||
FTD qy ux FS Runtime uy qy-qx=
|
||||
FS Rgetty-1"E !* If it's a DM!
|
||||
0fo..qKEYPAD Inhibit "E !* and he has not inhibited it!
|
||||
:I3Keypad
|
||||
M(M.MLoad Library)KEYPAD''
|
||||
FTE qy ux FS Runtime uy qy-qx=
|
||||
! FS MSNAME[0 F=0RUBENSTEIN "N
|
||||
! MMRUNRECORD' ]0
|
||||
FTF qy ux FS Runtime uy qy-qx=
|
||||
Q0"E Q1"E !* If no commands / file to read, offer help.!
|
||||
fs version :\ [2
|
||||
qEMACS Version:\[1 !* get version no. as string!
|
||||
Q4-12 "L FTGood Morning.'
|
||||
"# Q4-18 "L FTGood Afternoon.'
|
||||
"# FTGood Evening.''
|
||||
FT
|
||||
Sumex-AIM 3EMACS, version 1.2 - type ^H for help, # for news.
|
||||
|
||||
FTG qy ux FS Runtime uy qy-qx=
|
||||
ER<EMACS>EMACS.NEWS
|
||||
12FS IF FDB FS FD Convert EC ET@ >
|
||||
FTLast news written HT HK FT
|
||||
|
||||
FTH qy ux FS Runtime uy qy-qx=
|
||||
:FI-#"E
|
||||
FIW
|
||||
M(M.MRun Library)ENEWSRead EMACS News'
|
||||
]1 ]2
|
||||
''
|
||||
FQ0-1"L Q1"N M1' !* No file specified => execute commands from JCL!
|
||||
0FS QP Unwind FTI qy ux FS Runtime uy qy-qx= :M..9' !* and enter ^R mode.!
|
||||
|
||||
QInhibit Write,M(M.M Visit File)0 !* VISIT SPECIFIED FILE, USING ">' AS DEFAULT FN2!
|
||||
FSLISPT"N F~JSNDMSG"N !* If called by EXEC EDIT command...!
|
||||
QBuffer Filenames F[ DFILE
|
||||
0 FS DVERS !* Reset version number defaults.!
|
||||
FS DFILE UBuffer Filenames
|
||||
M(M.M& Set Mode Line)
|
||||
F]D FILE''
|
||||
|
||||
Q1"N M1' !* If JCL held commands, execute them.!
|
||||
f~JLISP"E M(M.MLoad Library)Intermacs !* if under a LISP then load Intermacs!
|
||||
FS Exit'
|
||||
|
||||
0FS QP Unwind :M..9
|
||||
28
src/e142/emacs.users
Normal file
28
src/e142/emacs.users
Normal file
@@ -0,0 +1,28 @@
|
||||
Current EMACS users:Achenbach,Barr,Bennett,Bonnet,Brutlag,Gilmurray,JFinger,
|
||||
Kennard,Rubenstein,Sacon,Schoen,Scott,Tajnai,Usecs,Vanmelle
|
||||
|
||||
EMACS users list as of 3/16/79
|
||||
|
||||
Name # times first last
|
||||
used time time
|
||||
Achenbach 31 3/1 3/16
|
||||
Barr 28 3/12 3/16
|
||||
Bennett 24 3/1 3/16
|
||||
Bonnet 11 3/12 3/16
|
||||
Brutlag 31 3/1 3/16
|
||||
Clayton 1 3/16 3/16
|
||||
Cower 2 3/14 3/14
|
||||
Decsys 1 3/8 3/8
|
||||
Gilmurray 11 3/1 3/14
|
||||
Hedberg 1 2/28 2/28
|
||||
JFinger 43 3/2 3/15
|
||||
Kennard 1 3/16 3/16
|
||||
Rubenstein ***** ***** *****
|
||||
Sacon 7 3/14 3/16
|
||||
Schoen 23 3/11 3/16
|
||||
Scott 1 3/1 3/1
|
||||
Srisw 1 3/3 3/3
|
||||
Tajnai 2 3/16 3/16
|
||||
Usecs 158 3/2 3/16
|
||||
Vanmelle 47 3/2 3/15
|
||||
Yeager 3 3/8 3/13
|
||||
54
src/e142/enews.
Normal file
54
src/e142/enews.
Normal file
@@ -0,0 +1,54 @@
|
||||
!~Filename~:! !Macros relating to the EMACS news file!
|
||||
ENEWS
|
||||
|
||||
!Post EMACS News:! !C Post news in the EMACS news file
|
||||
Asks for a subject, then gives you a buffer to type your news into.!
|
||||
|
||||
1,M(M.M&_ Read_ Line)Subject:_[0
|
||||
Q0"E <FG M(M.M&_ Read_ Line)Subject:_u0 -q0:;>'
|
||||
F[B Bind
|
||||
F+ FTType_your_news.__Exit_with_C-M-C_(M-<esc>_C).
|
||||
[..J :I..J Post_EMACS_News
|
||||
|
||||
[1 HFX1
|
||||
F[ D File
|
||||
ER<EMACS>EMACS.NEWS @Y
|
||||
S -C
|
||||
1I FS Date FS FD Convert
|
||||
2I FS HSNAME [0 I0 ]0
|
||||
3I G0
|
||||
4I G1
|
||||
5I
|
||||
@:EW<EMACS>EMACS.NEWS HP :EF
|
||||
@FT
|
||||
Your_News_has_been_posted.
|
||||
1fs Echo Active
|
||||
|
||||
|
||||
!Read EMACS news:! !Prints out EMACS news.
|
||||
Prints out subject, time, author for each news item and asks if the
|
||||
user wants to see more.!
|
||||
|
||||
F[ B Bind F[ D File [0
|
||||
ER <EMACS>EMACS.NEWS @Y
|
||||
< :S;
|
||||
FT
|
||||
News_posted_ .,(S).-1t FT_by_ .,(.+1,(S).FC).-1t FT.
|
||||
Subject:__ .,(S).-1T FT___Read_it?_
|
||||
FI :FC U0
|
||||
FT0
|
||||
|
||||
(Q0 - Q) * (Q0 - X) "E F+ '
|
||||
(Q0 - N) * (Q0 - ) "E !<!>'
|
||||
(Q0 - Y) * (Q0 - _) "E .,(S).-1T !<!>'
|
||||
(Q0 - ?) "E FT
|
||||
Q_or_X:_______Quit
|
||||
N_or_Delete:__Go_on_to_next_message
|
||||
Y_or_Space:___Type_this_message,_then_ask_about_next_message
|
||||
?:____________Type_this_message
|
||||
|
||||
-S'
|
||||
"# FG'
|
||||
> FT
|
||||
No_more_messages
|
||||
|
||||
57
src/e142/enews._ej
Normal file
57
src/e142/enews._ej
Normal file
@@ -0,0 +1,57 @@
|
||||
(W
|
||||
[0+8+FQ(+4)[1
|
||||
0FO10F"G+Q1
|
||||
'W+FQ()+4U1
|
||||
FQ1"L0'
|
||||
,Q1:M(Q1+4(]1]0))
|
||||
Y,6nw!
|
||||
P]mwbi4:Post EMACS Newsp1,M(M.M& Read Line)Subject: [0
|
||||
Q0"E<FGM(M.M& Read Line)Subject: u0-q0:;>'
|
||||
F[BBind
|
||||
F+FTType your news. Exit with C-M-C (M-<esc> C).
|
||||
[..J:I..JPost EMACS News
|
||||
|
||||
[1HFX1
|
||||
F[DFile
|
||||
ER<EMACS>EMACS.NEWS@Y
|
||||
S-C
|
||||
1IFSDateFSFDConvert
|
||||
2IFSHSNAME[0I0]0
|
||||
3IG0
|
||||
4IG1
|
||||
5I
|
||||
@:EW<EMACS>EMACS.NEWSHP:EF
|
||||
@FT
|
||||
Your News has been posted.
|
||||
1fsEchoActive
|
||||
Read EMACS newsUF[BBindF[DFile[0
|
||||
ER<EMACS>EMACS.NEWS@Y
|
||||
<:S;
|
||||
FT
|
||||
News posted .,(S).-1tFT by .,(.+1,(S).FC).-1tFT.
|
||||
Subject: .,(S).-1TFT Read it?
|
||||
FI:FCU0
|
||||
FT0
|
||||
|
||||
(Q0-Q)*(Q0-X)"EF+'
|
||||
(Q0-N)*(Q0-)"E!<!>'
|
||||
(Q0-Y)*(Q0- )"E.,(S).-1T!<!>'
|
||||
(Q0-?)"EFT
|
||||
Q or X: Quit
|
||||
N or Delete: Go on to next message
|
||||
Y or Space: Type this message, then ask about next message
|
||||
?: Type this message
|
||||
|
||||
-S'
|
||||
"#FG'
|
||||
>FT
|
||||
No more messages
|
||||
~Filename~ ENEWS~DOC~ ~Filename~,Macros relating to the EMACS news file
|
||||
~DOC~ Post EMACS NewsmC Post news in the EMACS news file
|
||||
Asks for a subject, then gives you a buffer to type your news into.
|
||||
~DOC~ Read EMACS newszPrints out EMACS news.
|
||||
Prints out subject, time, author for each news item and asks if the
|
||||
user wants to see more.
|
||||
~DIRECTORY~&Post EMACS News
|
||||
Read EMACS news
|
||||
~INVERT~[1<Q1-1U1Q1FP;>Q1
|
||||
62
src/e142/fork._ej
Normal file
62
src/e142/fork._ej
Normal file
@@ -0,0 +1,62 @@
|
||||
(W
|
||||
[0+8+FQ(+4)[1
|
||||
0FO10F"G+Q1
|
||||
'W+FQ()+4U1
|
||||
FQ1"L0'
|
||||
,Q1:M(Q1+4(]1]0))
|
||||
m6BSW
|
||||
dsW_FP;B39& Setup FORK Library!:i*Fork EXECm.VLastfork
|
||||
0Fork{1f[noquit
|
||||
[2[30[4[..o
|
||||
fFork name: :FCU2
|
||||
fq2"EQLastforku3
|
||||
q3"E@FTLast fork was killed
|
||||
''
|
||||
"#:i3Fork 2'
|
||||
f~3Fork EXEC"N
|
||||
FF"N0fo..q3f"N,0fz'0M.V3
|
||||
5,fq3:g3u2'
|
||||
0FO..Q3f"NU4
|
||||
q4fz'"#
|
||||
1:<fz<SUBSYS>2.SAVu4>"N
|
||||
1:<fz<USESYS>2.SAVu4>"N
|
||||
1:<fz2.SAVu4>"N
|
||||
fshsname[1
|
||||
fz<1>2.SAVu4]1'''
|
||||
q4M.V3'
|
||||
'"#fz
|
||||
:i3Fork EXEC'
|
||||
q3uLastfork'
|
||||
0 KForkE1f[noquit
|
||||
[2[3[..o
|
||||
fHandle name: :FCu2
|
||||
q2"E'
|
||||
fq2"N:i2Fork 2'"#
|
||||
QLastforku2
|
||||
Q2"E@FTLast fork already killed
|
||||
'
|
||||
@FTKill 21M(M.M& Yes or No)"E'''
|
||||
f~2Fork EXEC"E
|
||||
@FTCannot kill the EXEC fork!'
|
||||
0FO..Q2u3
|
||||
q3"E@FTNo such fork'
|
||||
q3,0fz
|
||||
0u2
|
||||
qLastfork"N
|
||||
F=Lastfork2"E0uLastfork''
|
||||
0~Filename~FORK~DOC~ ~Filename~(Command to go to an inferior fork.
|
||||
~DOC~ & Setup FORK Library*S Initialize for handling inferiors.
|
||||
~DOC~ ForkC Invoke an inferior process.
|
||||
Takes as string argument the name of the program to invoke. If a
|
||||
fork by that name already exists, it is resumed. If given an
|
||||
argument, kills the fork and restarts it. Name defaults to the last
|
||||
fork run. We look for the program on <SUBSYS>, <USESYS>, your
|
||||
connected directory, and your login directory, in that order. Use
|
||||
KFork command to kill the fork.
|
||||
~DOC~ KForkrC Kill an inferior process.
|
||||
Follow command with the name of the fork to kill.
|
||||
No name kills last fork run.
|
||||
~DIRECTORY~'& Setup FORK Library
|
||||
Fork
|
||||
KFork
|
||||
~INVERT~[1<Q1-1U1Q1FP;>Q1
|
||||
62
src/e142/fork._ej.2
Normal file
62
src/e142/fork._ej.2
Normal file
@@ -0,0 +1,62 @@
|
||||
(W
|
||||
[0+8+FQ(+4)[1
|
||||
0FO10F"G+Q1
|
||||
'W+FQ()+4U1
|
||||
FQ1"L0'
|
||||
,Q1:M(Q1+4(]1]0))
|
||||
m6BSW"gvZbIS>E6<& Setup FORK Library!:i*Fork EXECm.VLastfork
|
||||
0Fork1f[noquit
|
||||
[2[30[4[..o
|
||||
fFork name: :FCU2
|
||||
fq2"EQLastforku3
|
||||
q3"E@FTLast fork was killed
|
||||
''
|
||||
"#:i3Fork 2'
|
||||
@ft
|
||||
f~3Fork EXEC"N
|
||||
FF"N0fo..q3f"N,0fz'0M.V3
|
||||
5,fq3:g3u2'
|
||||
0FO..Q3f"NU4
|
||||
q4fz'"#
|
||||
1:<fz<SUBSYS>2.SAVu4>"N
|
||||
1:<fz<USESYS>2.SAVu4>"N
|
||||
1:<fz2.SAVu4>"N
|
||||
fshsname[1
|
||||
fz<1>2.SAVu4]1'''
|
||||
q4M.V3'
|
||||
'"#fz
|
||||
:i3Fork EXEC'
|
||||
q3uLastfork'
|
||||
0 KForkE1f[noquit
|
||||
[2[3[..o
|
||||
fHandle name: :FCu2
|
||||
q2"E'
|
||||
fq2"N:i2Fork 2'"#
|
||||
QLastforku2
|
||||
Q2"E@FTLast fork already killed
|
||||
'
|
||||
@FTKill 21M(M.M& Yes or No)"E'''
|
||||
f~2Fork EXEC"E
|
||||
@FTCannot kill the EXEC fork!'
|
||||
0FO..Q2u3
|
||||
q3"E@FTNo such fork'
|
||||
q3,0fz
|
||||
0u2
|
||||
qLastfork"N
|
||||
F=Lastfork2"E0uLastfork''
|
||||
0~Filename~FORK~DOC~ ~Filename~(Command to go to an inferior fork.
|
||||
~DOC~ & Setup FORK Library*S Initialize for handling inferiors.
|
||||
~DOC~ ForkC Invoke an inferior process.
|
||||
Takes as string argument the name of the program to invoke. If a
|
||||
fork by that name already exists, it is resumed. If given an
|
||||
argument, kills the fork and restarts it. Name defaults to the last
|
||||
fork run. We look for the program on <SUBSYS>, <USESYS>, your
|
||||
connected directory, and your login directory, in that order. Use
|
||||
KFork command to kill the fork.
|
||||
~DOC~ KForkrC Kill an inferior process.
|
||||
Follow command with the name of the fork to kill.
|
||||
No name kills last fork run.
|
||||
~DIRECTORY~'& Setup FORK Library
|
||||
Fork
|
||||
KFork
|
||||
~INVERT~[1<Q1-1U1Q1FP;>Q1
|
||||
62
src/e142/fork._ej.3
Normal file
62
src/e142/fork._ej.3
Normal file
@@ -0,0 +1,62 @@
|
||||
(W
|
||||
[0+8+FQ(+4)[1
|
||||
0FO10F"G+Q1
|
||||
'W+FQ()+4U1
|
||||
FQ1"L0'
|
||||
,Q1:M(Q1+4(]1]0))
|
||||
m6BSW#hw[bJT?F6<& Setup FORK Library!:i*Fork EXECm.VLastfork
|
||||
0Fork1f[noquit
|
||||
[2[30[4[..o
|
||||
fFork name: :FCU2
|
||||
fq2"EQLastforku3
|
||||
q3"E@FTLast fork was killed
|
||||
''
|
||||
"#:i3Fork 2'
|
||||
@ft
|
||||
f~3Fork EXEC"N
|
||||
FF"N0fo..q3f"N,0fz'0M.V3
|
||||
5,fq3:g3u2'
|
||||
0FO..Q3f"NU4
|
||||
q4fz'"#
|
||||
1:<fz<SUBSYS>2.SAVu4>"N
|
||||
1:<fz<USESYS>2.SAVu4>"N
|
||||
1:<fz2.SAVu4>"N
|
||||
fshsname[1
|
||||
fz<1>2.SAVu4]1'''
|
||||
q4M.V3'
|
||||
'"#fz
|
||||
:i3Fork EXEC'
|
||||
q3uLastfork'
|
||||
0 KForkE1f[noquit
|
||||
[2[3[..o
|
||||
fHandle name: :FCu2
|
||||
q2"E'
|
||||
fq2"N:i2Fork 2'"#
|
||||
QLastforku2
|
||||
Q2"E@FTLast fork already killed
|
||||
'
|
||||
@FTKill 21M(M.M& Yes or No)"E'''
|
||||
f~2Fork EXEC"E
|
||||
@FTCannot kill the EXEC fork!'
|
||||
0FO..Q2u3
|
||||
q3"E@FTNo such fork'
|
||||
q3,0fz
|
||||
0u2
|
||||
qLastfork"N
|
||||
F=Lastfork2"E0uLastfork''
|
||||
0~Filename~FORK~DOC~ ~Filename~(Command to go to an inferior fork.
|
||||
~DOC~ & Setup FORK Library*S Initialize for handling inferiors.
|
||||
~DOC~ ForkC Invoke an inferior process.
|
||||
Takes as string argument the name of the program to invoke. If a
|
||||
fork by that name already exists, it is resumed. If given an
|
||||
argument, kills the fork and restarts it. Name defaults to the last
|
||||
fork run. We look for the program on <SUBSYS>, <USESYS>, your
|
||||
connected directory, and your login directory, in that order. Use
|
||||
KFork command to kill the fork.
|
||||
~DOC~ KForkrC Kill an inferior process.
|
||||
Follow command with the name of the fork to kill.
|
||||
No name kills last fork run.
|
||||
~DIRECTORY~'& Setup FORK Library
|
||||
Fork
|
||||
KFork
|
||||
~INVERT~[1<Q1-1U1Q1FP;>Q1
|
||||
62
src/e142/fork._ej.4
Normal file
62
src/e142/fork._ej.4
Normal file
@@ -0,0 +1,62 @@
|
||||
(W
|
||||
[0+8+FQ(+4)[1
|
||||
0FO10F"G+Q1
|
||||
'W+FQ()+4U1
|
||||
FQ1"L0'
|
||||
,Q1:M(Q1+4(]1]0))
|
||||
m6BSW#hw[bJT?F6<& Setup FORK Library!:i*Fork EXECm.VLastfork
|
||||
0Fork1f[noquit
|
||||
[2[30[4[..o
|
||||
fFork name: :FCU2
|
||||
fq2"EQLastforku3
|
||||
q3"E@FTLast fork was killed
|
||||
''
|
||||
"#:i3Fork 2'
|
||||
@ft
|
||||
f~3Fork EXEC"N
|
||||
FF"N0fo..q3f"N,0fz'0M.V3
|
||||
5,fq3:g3u2'
|
||||
0FO..Q3f"NU4
|
||||
q4fz'"#
|
||||
1:<fz<SUBSYS>2.SAVu4>"N
|
||||
1:<fz<USESYS>2.SAVu4>"N
|
||||
1:<fz2.SAVu4>"N
|
||||
fshsname[1
|
||||
fz<1>2.SAVu4]1'''
|
||||
q4M.V3'
|
||||
'"#fz
|
||||
:i3Fork EXEC'
|
||||
q3uLastfork'
|
||||
0 KForkE1f[noquit
|
||||
[2[3[..o
|
||||
fHandle name: :FCu2
|
||||
q2"E'
|
||||
fq2"N:i2Fork 2'"#
|
||||
QLastforku2
|
||||
Q2"E@FTLast fork already killed
|
||||
'
|
||||
@FTKill 21M(M.M& Yes or No)"E'''
|
||||
f~2Fork EXEC"E
|
||||
@FTCannot kill the EXEC fork!'
|
||||
0FO..Q2u3
|
||||
q3"E@FTNo such fork'
|
||||
q3,0fz
|
||||
0u2
|
||||
qLastfork"N
|
||||
F=Lastfork2"E0uLastfork''
|
||||
0~Filename~FORK~DOC~ ~Filename~(Command to go to an inferior fork.
|
||||
~DOC~ & Setup FORK Library*S Initialize for handling inferiors.
|
||||
~DOC~ ForkC Invoke an inferior process.
|
||||
Takes as string argument the name of the program to invoke. If a
|
||||
fork by that name already exists, it is resumed. If given an
|
||||
argument, kills the fork and restarts it. Name defaults to the last
|
||||
fork run. We look for the program on <SUBSYS>, <USESYS>, your
|
||||
connected directory, and your login directory, in that order. Use
|
||||
KFork command to kill the fork.
|
||||
~DOC~ KForkrC Kill an inferior process.
|
||||
Follow command with the name of the fork to kill.
|
||||
No name kills last fork run.
|
||||
~DIRECTORY~'& Setup FORK Library
|
||||
Fork
|
||||
KFork
|
||||
~INVERT~[1<Q1-1U1Q1FP;>Q1
|
||||
BIN
src/e142/grind._ej
Normal file
BIN
src/e142/grind._ej
Normal file
Binary file not shown.
188
src/e142/intermacs.
Normal file
188
src/e142/intermacs.
Normal file
@@ -0,0 +1,188 @@
|
||||
|
||||
!~Filename~:! !Commands for Interlisp interface!
|
||||
INTERMACS
|
||||
|
||||
!Grind Sexp:! !C Grind the sexp after the pointer.
|
||||
A modification of the MIT Grind Sexp that recognizes that
|
||||
in Interlisp, % quotes a character, " starts a long
|
||||
string, and ; has no significance.
|
||||
Uses QMiser Column to decide where to start using "Miser" format,
|
||||
and QFill Column as the page width to aim for.
|
||||
Saves the old sexp on the kill ring.!
|
||||
|
||||
1:<
|
||||
FDL R !* Find the next list.!
|
||||
F[VB F[VZ FL FSBOUND !* Narrow bounds to that list.!
|
||||
F=MODELISP"N OConfirm'
|
||||
z-b-1000"g !Confirm! ^FTDo_you_really_want_to_Grind_this_s-expression?_(Y_or_N):
|
||||
FI :FC - Y( FS Echo Display C FS Echo Display)"N ''
|
||||
Z:
|
||||
M(M.M &_Save_Region_and_Query) !* No arg so no query, just save region.!
|
||||
W J
|
||||
[2 [3
|
||||
!*** Now normalize the expression; put it into the form PRIN1 would print.!
|
||||
[D 128*5,32:ID !* In QD make a dispatch that!
|
||||
11.*5:F D -D :M2 !* turns any whitespace into a single space,!
|
||||
15.*5:F D RK :M2 !* deletes CRLFs and the indentation after them,!
|
||||
12.*5:F D -D :M2
|
||||
%*5:F D C !* Handle %'s and "'s right.!
|
||||
"*5:F D R ^FLL
|
||||
(*5:F D :M3 !* Make sure no whitespace follows ('s and ''s!
|
||||
!"! '*5:F D :M3
|
||||
)*5:F D R M3 C !* or precedes )'s.!
|
||||
:I2 Z-.< 1A F_ :; D> 32I
|
||||
:I3 Z-.< 1A F_ :; D>
|
||||
HFD
|
||||
J .( 0FS VBW 0L .FS VB )J !* Include all of line, up to (, after B,!
|
||||
!* so that FS HPOS is accurate.!
|
||||
!*** Now decode the grinding parameters.!
|
||||
FS WIDTH-10[W !* Figure the width to aim at!
|
||||
FS WIDTH*2/3[C !* and the comment column.!
|
||||
0FO ..Q Fill_Column F"N UW
|
||||
QWUC'
|
||||
-1FO ..Q Comment_Column +1F"G -1UC'
|
||||
QC[M !* Figure the place to switch to Miser fmt.!
|
||||
-1FO ..Q Miser_Column +1F"G -1UM'
|
||||
[R :IR /8+1*8
|
||||
0FO ..Q Comment_Rounding F"N UR'
|
||||
M.M &_Indent [I
|
||||
!* G gets recursive macro to grind and pass 1 sexp.!
|
||||
!* It expects numerc arg = depth in parens.!
|
||||
[G ^:IG`
|
||||
[2 S' R !* Pass by all leading quotes.!
|
||||
1A-("N ^FWL ' !* Atoms, just skip over.!
|
||||
FL-.-QW++(FS HPOSU2 Q2)"L FLL ' !* Lists that fit in line, skip over.!
|
||||
C Q2-QM"L !* If not yet far enough for Miser fmt,!
|
||||
!"! 1A F';()"L ^FWL 1A-32"E C''' !* Skip 1st element, so get 2 on 1st line.!
|
||||
!* But if 1st element is a list, use miser fmt anyway.!
|
||||
FS HPOS U2 !* Q2 gets column to put rest of elements at.!
|
||||
!LP! 1a-32"E D O LP' !* Don't be confused by whitespace.!
|
||||
1A-)"E C ' !* Until end of this list,!
|
||||
FS HPOSU3
|
||||
Q3-Q2"N 13I 10I !* and for lists, indent to right place!
|
||||
Q2/8,9I Q2&7,32I'
|
||||
+1MG O LP !* and recursively grind.!
|
||||
`
|
||||
0MG !* DO IT!
|
||||
J 7F~ (DEFUN_"E !* Now, if list is (DEFUN FOO<cr>..., then!
|
||||
^FLL 8F=
|
||||
______"E
|
||||
8D .U3 L !* Get the thing after FOO onto first line,!
|
||||
Q3,. F~FEXPR
|
||||
*(Q3,. F~MACRO
|
||||
)"E !* and if it is a function property name,!
|
||||
-2D 6D''' !* get it on that line too.!
|
||||
J HU2U3
|
||||
> !* end errset!
|
||||
J Z: !* Leave region around the ground sexp.!
|
||||
Q3,Q2
|
||||
|
||||
!& LISP SUPERIOR:! !S Insert as directed by call from LISP.!
|
||||
[A
|
||||
[B
|
||||
[0
|
||||
.U0 ZJ Z-3"G
|
||||
0A-3"E -4D''
|
||||
Q0J !* We delete the four characters at the!
|
||||
!* end that are used to stop LISP from!
|
||||
!* reading too far!
|
||||
"N
|
||||
FSIFILEUA !* The most recently opened input file!
|
||||
QLISPFILEUB !* The EMACS.TEMP.FILE!
|
||||
FS UREAD"N !* If anything is open,!
|
||||
F~AB"N !* then if it's not EMACS.TEMP.FILE!
|
||||
E[ !* push the input!
|
||||
F[ D FILE !* push the default!
|
||||
FN E] !* pop the input on exit from here!
|
||||
ERB' !* and open up EMACS.TEMP.FILE!
|
||||
0FSIFACCESS' !* start reading at the beginning!
|
||||
FS UREAD"E !* if nothing is open!
|
||||
ERB' !* read EMACS.TEMP.FILE!
|
||||
U0
|
||||
"L -Q0U0' !* The absolute value of the arg in 0!
|
||||
"G MM^R_SET/POP_MARK
|
||||
ZJ'
|
||||
Q0FY
|
||||
"L
|
||||
.+,.FXA !* If the arg is negative we put!
|
||||
MA' !* the stuff in A, delete and macro it.!
|
||||
"G
|
||||
R
|
||||
.,ZFSBOUNDARIES'
|
||||
' !* We do nothing on a zero arg!
|
||||
+1"G F+ !* If arg nonnegative, clear screen and refresh.!
|
||||
:F'
|
||||
|
||||
|
||||
!^R UP EVAL:! !^R Return to LISP and evaluate sexp after point.!
|
||||
|
||||
1000MM^R_Exit_To_LISP
|
||||
|
||||
|
||||
!^R ARGLIST:! !^R Write into lower buffer arglist atom after point.
|
||||
Writes into lower buffer LISP arglist of function after point (or after
|
||||
open parenthesis after point.)!
|
||||
|
||||
1001MM^R_Exit_To_LISP
|
||||
|
||||
|
||||
!^R Pretty Print:! !^R Pretty print buffer (using LISP pretty printer).
|
||||
Leaves point close to where it was, namely after the rightmost close
|
||||
parenthesis before point.!
|
||||
[0
|
||||
0u0
|
||||
<-:S(; %0>
|
||||
1003MM^R_Exit_To_LISP
|
||||
.-B"E Q0:S('
|
||||
|
||||
|
||||
!^R Print to Level:! !^R Print sexp after point with PRINTLEVEL set.
|
||||
Prints sexpression after point into lower buffer with PRINTLEVEL
|
||||
set to EMACS.P.PRINT.LEVEL.!
|
||||
|
||||
1002MM^R_Exit_To_LISP
|
||||
|
||||
|
||||
!^R Exit To LISP:! !^R Simply return to LISP.
|
||||
Follows the protocol of closing the gap and
|
||||
leaving at the end of the buffer a string
|
||||
guaranteed to stop a LISP read.!
|
||||
[0
|
||||
.U0
|
||||
ZJ
|
||||
I_"
|
||||
1F? !* Close the gap, so LISP can!
|
||||
!* read from the buffer!
|
||||
Q0J
|
||||
FSEXIT
|
||||
|
||||
|
||||
!& Setup INTERMACS Library:! !S SETUP!
|
||||
[J
|
||||
1M.VLISPFILE
|
||||
FSJNAMEUJ
|
||||
F~JLISP"E
|
||||
FS MSNAME FS D SNAME
|
||||
EREMACS.TEMP.FILE.0
|
||||
FS I FILE ULISPFILE
|
||||
F~Editor_NameEMACS/Datamedia"E
|
||||
M.M^R_Pretty_PrintU...T
|
||||
M.M^R_Pretty_PrintU:.X(T)
|
||||
M.M^R_Print_To_Level U..T
|
||||
M.M^R_Exit_To_LISPM.VMM_Quit
|
||||
M.M^R_ARGLIST U.A
|
||||
M.M^R_Up_EVAL U.Y'
|
||||
"#M.M^R_Pretty_PrintU...P
|
||||
M.M^R_Print_To_Level U..P
|
||||
M.M^R_Exit_To_LISP U ..Z
|
||||
M.M^R_Exit_To_LISP U...Z
|
||||
M.M^R_ARGLIST U...?
|
||||
M.M^R_Up_EVAL U...Y'
|
||||
M.M&_LISP_SuperiorFSSUPERIOR'
|
||||
1m.vLISP_)_HACK
|
||||
mmLISP_MODE
|
||||
MM&_Process_Options
|
||||
:I..D_A____A____A____A____A____A____A____A____A______________A_________
|
||||
____A____A____A____A____A____A____A____A____A____A____A____A____A____A____A____A____A____A_________A____|____A___AA___A/____A____'____(____)____A____A____A____A___AA____A___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA____A____A____A____A____A____A____A___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA____A____A____A____A____A____A___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA___AA____A____A____A____A________
|
||||
|
||||
|
||||
178
src/e142/intermacs._ej
Normal file
178
src/e142/intermacs._ej
Normal file
@@ -0,0 +1,178 @@
|
||||
(W
|
||||
[0+8+FQ(+4)[1
|
||||
0FO10F"G+Q1
|
||||
'W+FQ()+4U1
|
||||
FQ1"L0'
|
||||
,Q1:M(Q1+4(]1]0))
|
||||
Q[dho_h&FPqx
|
||||
D
|
||||
Pp
|
||||
$gtAN
|
||||
g
|
||||
qpzbiTZGrind SexpW1:<
|
||||
FDLR
|
||||
F[VBF[VZFLFSBOUND
|
||||
F=MODELISP"NOConfirm'
|
||||
z-b-1000"g!Confirm!^FTDo you really want to Grind this s-expression? (Y or N):
|
||||
FI:FC-Y(FSEchoDisplayCFSEchoDisplay)"N''
|
||||
Z:
|
||||
M(M.M& Save Region and Query)
|
||||
WJ
|
||||
[2[3
|
||||
[D128*5,32:ID
|
||||
11.*5:FD-D:M2
|
||||
15.*5:FDRK:M2
|
||||
12.*5:FD-D:M2
|
||||
%*5:FDC
|
||||
"*5:FDR^FLL
|
||||
(*5:FD:M3
|
||||
!"!'*5:FD:M3
|
||||
)*5:FDRM3C
|
||||
:I2Z-.<1AF :;D>32I
|
||||
:I3Z-.<1AF :;D>
|
||||
HFD
|
||||
J.(0FSVBW0L.FSVB)J
|
||||
FSWIDTH-10[W
|
||||
FSWIDTH*2/3[C
|
||||
0FO..QFill ColumnF"NUW
|
||||
QWUC'
|
||||
-1FO..QComment Column+1F"G-1UC'
|
||||
QC[M
|
||||
-1FO..QMiser Column+1F"G-1UM'
|
||||
[R:IR/8+1*8
|
||||
0FO..QComment RoundingF"NUR'
|
||||
M.M& Indent[I
|
||||
[G^:IG`
|
||||
[2S'R
|
||||
1A-("N^FWL'
|
||||
FL-.-QW++(FSHPOSU2Q2)"LFLL'
|
||||
CQ2-QM"L
|
||||
!"!1AF';()"L^FWL1A-32"EC'''
|
||||
FSHPOSU2
|
||||
!LP!1a-32"EDOLP'
|
||||
1A-)"EC'
|
||||
FSHPOSU3
|
||||
Q3-Q2"N13I10I
|
||||
Q2/8,9IQ2&7,32I'
|
||||
+1MGOLP
|
||||
`
|
||||
0MG
|
||||
J7F~(DEFUN "E
|
||||
^FLL8F=
|
||||
"E
|
||||
8D.U3L
|
||||
Q3,.F~FEXPR
|
||||
*(Q3,.F~MACRO
|
||||
)"E
|
||||
-2D6D'''
|
||||
JHU2U3
|
||||
>
|
||||
JZ:
|
||||
Q3,Q2& LISP SUPERIOR[A
|
||||
[B
|
||||
[0
|
||||
.U0ZJZ-3"G
|
||||
0A-3"E-4D''
|
||||
Q0J
|
||||
"N
|
||||
FSIFILEUA
|
||||
QLISPFILEUB
|
||||
FSUREAD"N
|
||||
F~AB"N
|
||||
E[
|
||||
F[DFILE
|
||||
FNE]
|
||||
ERB'
|
||||
0FSIFACCESS'
|
||||
FSUREAD"E
|
||||
ERB'
|
||||
U0
|
||||
"L-Q0U0'
|
||||
"GMM^R SET/POP MARK
|
||||
ZJ'
|
||||
Q0FY
|
||||
"L
|
||||
.+,.FXA
|
||||
MA'
|
||||
"G
|
||||
R
|
||||
.,ZFSBOUNDARIES'
|
||||
'
|
||||
+1"GF+
|
||||
:F'
|
||||
^R UP EVAL1000MM^R Exit To LISP
|
||||
^R ARGLIST1001MM^R Exit To LISP
|
||||
^R Pretty Print@[0
|
||||
0u0
|
||||
<-:S(;%0>
|
||||
1003MM^R Exit To LISP
|
||||
.-B"EQ0:S('
|
||||
^R Print to Level1002MM^R Exit To LISP
|
||||
^R Exit To LISP.[0
|
||||
.U0
|
||||
ZJ
|
||||
I "
|
||||
1F?
|
||||
Q0J
|
||||
FSEXIT
|
||||
& Setup INTERMACS Library) [J
|
||||
1M.VLISPFILE
|
||||
FSJNAMEUJ
|
||||
F~JLISP"E
|
||||
FSMSNAMEFSDSNAME
|
||||
EREMACS.TEMP.FILE.0
|
||||
FSIFILEULISPFILE
|
||||
F~Editor NameEMACS/Datamedia"E
|
||||
M.M^R Pretty PrintU...T
|
||||
M.M^R Pretty PrintU:.X(T)
|
||||
M.M^R Print To LevelU..T
|
||||
M.M^R Exit To LISPM.VMM Quit
|
||||
M.M^R ARGLISTU.A
|
||||
M.M^R Up EVALU.Y'
|
||||
"#M.M^R Pretty PrintU...P
|
||||
M.M^R Print To LevelU..P
|
||||
M.M^R Exit To LISPU..Z
|
||||
M.M^R Exit To LISPU...Z
|
||||
M.M^R ARGLISTU...?
|
||||
M.M^R Up EVALU...Y'
|
||||
M.M& LISP SuperiorFSSUPERIOR'
|
||||
1m.vLISP ) HACK
|
||||
mmLISP MODE
|
||||
MM& Process Options
|
||||
:I..D A A A A A A A A A A
|
||||
A A A A A A A A A A A A A A A A A A A | A AA A/ A ' ( ) A A A A AA A AA AA AA AA AA AA AA AA AA AA A A A A A A A AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA A A A A A A AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA A A A A
|
||||
~Filename~
|
||||
INTERMACS~DOC~ ~Filename~&Commands for Interlisp interface
|
||||
~DOC~ Grind SexpZC Grind the sexp after the pointer.
|
||||
A modification of the MIT Grind Sexp that recognizes that
|
||||
in Interlisp, % quotes a character, " starts a long
|
||||
string, and ; has no significance.
|
||||
Uses QMiser Column to decide where to start using "Miser" format,
|
||||
and QFill Column as the page width to aim for.
|
||||
Saves the old sexp on the kill ring.
|
||||
~DOC~ & LISP SUPERIOR-S Insert as directed by call from LISP.
|
||||
~DOC~ ^R UP EVAL6^R Return to LISP and evaluate sexp after point.
|
||||
~DOC~ ^R ARGLIST#^R Write into lower buffer arglist atom after point.
|
||||
Writes into lower buffer LISP arglist of function after point (or after
|
||||
open parenthesis after point.)
|
||||
~DOC~ ^R Pretty Print^R Pretty print buffer (using LISP pretty printer).
|
||||
Leaves point close to where it was, namely after the rightmost close
|
||||
parenthesis before point.
|
||||
~DOC~ ^R Print to Level^R Print sexp after point with PRINTLEVEL set.
|
||||
Prints sexpression after point into lower buffer with PRINTLEVEL
|
||||
set to EMACS.P.PRINT.LEVEL.
|
||||
~DOC~ ^R Exit To LISP^R Simply return to LISP.
|
||||
Follows the protocol of closing the gap and
|
||||
leaving at the end of the buffer a string
|
||||
guaranteed to stop a LISP read.
|
||||
#~DOC~ & Setup INTERMACS Library
|
||||
S SETUP
|
||||
~DIRECTORY~ Grind Sexp
|
||||
& LISP SUPERIOR
|
||||
^R UP EVAL
|
||||
^R ARGLIST
|
||||
^R Pretty Print
|
||||
^R Print to Level
|
||||
^R Exit To LISP
|
||||
& Setup INTERMACS Library
|
||||
~INVERT~[1<Q1-1U1Q1FP;>Q1
|
||||
196
src/e142/kbdmac.
Normal file
196
src/e142/kbdmac.
Normal file
@@ -0,0 +1,196 @@
|
||||
!*-*-TECO-*-!
|
||||
|
||||
!* A keyboard macro's data is represented using two ascii characters
|
||||
to describe each 9-bit character. The first ascii character holds
|
||||
the top 2 bits of the 9-bit character, and the second ascii character
|
||||
holds the low 7 bits. When the macro is run, pairs of characters are
|
||||
converted back into single 9-bit characters.
|
||||
Keyboard macros are encapsulated in TECO macros by putting the 36 chars
|
||||
"<Excl>temp<Excl>m(m.m& Immediate Kbd Macro)" in front.
|
||||
This serves to make the TECO macro recognizable and to make
|
||||
it push the kbd macro when invoked.
|
||||
|
||||
The keyboard macro call stack is a qvector in q..m.
|
||||
It has three slots for each call on the stack.
|
||||
The first slot contains the macro string.
|
||||
This string includes the call to & Immediate Kbd Macro.
|
||||
The second slot contains the index at which we are fetching from the string.
|
||||
The initial value of this slot is 36.
|
||||
The third slot contains the repeat count.!
|
||||
|
||||
!~Filename~:! !Defining and calling keyboard macros.!
|
||||
KBDMAC
|
||||
|
||||
!& Setup KBDMAC Library:! !S Put commands on keys. Create execution stack.!
|
||||
|
||||
m.m ^R_Start_Kbd_Macro u:.x(()
|
||||
m.m ^R_End_Kbd_Macro u:.x())
|
||||
m.m ^R_Call_Last u:.x(E)
|
||||
m.m ^R_Kbd_Macro_Query u:.x(Q)
|
||||
:i* m.v Last_Kbd_Macro
|
||||
|
||||
20.*5fs q vectoru..m
|
||||
q..m[..o hk
|
||||
|
||||
!& Run Kbd Macro:! !S This is the FS TYI SOURCE for running keyboard macros.!
|
||||
|
||||
fq..m/5-3[2
|
||||
q:..m(q2)[0 !* Get innermost running keyboard macro string.!
|
||||
q:..m(%2)[1 !* Fetch and increment the index at which we are fetching.!
|
||||
q1:g0*200.+(%1:g0) fs reread !* Form next input character, from next!
|
||||
!* two elements of string.!
|
||||
%1u:..m(q2) !* Store back index into string.!
|
||||
q1-fq0"l 0' !* If string is exhausted,!
|
||||
q:..m(%2)-1u0 !* decrement repeat count,!
|
||||
q0f"nf"gu:..m(q2)' !* If not exhausted, decrement count unless it was 0!
|
||||
36u:..m(q2-1) 0' !* and anyway jump back to start of macro.!
|
||||
q..m[..o zj -15d !* Repeat count exhausted => pop it off the pdl,!
|
||||
z"e 0 fs tyi source' !* and if the pdl is empty we are no longer in a macro.!
|
||||
0 !* Return value for ^R, in case ^R is reading the char.!
|
||||
|
||||
!& Immediate Kbd Macro:! !S Push a kbd macro onto the execution stack of such.
|
||||
Supply the repeat count as pre-comma argument
|
||||
and a string pointer to the macro as post-comma argument.!
|
||||
|
||||
q..m[..o
|
||||
fs tyi source"e hk' !* If an error turned off macro execution,!
|
||||
!* clear out macro call stack.!
|
||||
zj 15,0i !* Make three more words in the call stack.!
|
||||
-1fsback str,.-15fs word !* Fill them with string, starting index, and rpt count.!
|
||||
36,.-10fs word
|
||||
,.-5fs word
|
||||
|
||||
m.m &_Run_Kbd_Macro fs tyi source
|
||||
0
|
||||
|
||||
!^R Call Last Kbd Macro:! !^R Run the last defined temporary keyboard macro.
|
||||
A numeric argument is a repeat count.!
|
||||
|
||||
:mLast_Kbd_Macro
|
||||
|
||||
!^R Start Kbd Macro:! !C Begin defining keyboad macro.
|
||||
After you type this command, everything you type becomes
|
||||
part of the accumulating keyboard macro as well as being executed.!
|
||||
|
||||
0 fs b consm.v Kbd_Macro_Defining_Body
|
||||
0 m.v Kbd_Macro_Defining_Index
|
||||
m.m &_Define_Kbd_Macro fs tyi sink
|
||||
1:<1fs mode ch>
|
||||
0
|
||||
|
||||
!& Define Kbd Macro:! !S FS TYI SINK for defining kbd macros.
|
||||
Takes characters typed and accumulates them in a buffer
|
||||
which will be formed into a keyboard macro when the definition is finished.!
|
||||
|
||||
qKbd_Macro_Defining_Body[..o zj !* Select the buffer we use to accumulate.!
|
||||
fs tyi beg-(fs tyi count-1)"e !* If this is 1st char of ^R command,!
|
||||
zuKbd_Macro_Defining_Index' !* update index in buffer of last such.!
|
||||
/200.i &177.i 0 !* Insert the two characters for this command character.!
|
||||
|
||||
!^R End Kbd Macro:! !C Terminate definition of a keyboard macro.
|
||||
All that you have typed since starting the definition,
|
||||
except this command itself, becomes the definition.
|
||||
An argument means re-execute the macro immediately, with the
|
||||
argument as repeat count, counting defining the macro as once.
|
||||
^R Call Last Kbd Macro re-executes the last macro defined.!
|
||||
|
||||
qKbd_Macro_Defining_Body[..o
|
||||
qKbd_Macro_Defining_Indexj .,zk !* Flush the End Kbd Macro command from the string.!
|
||||
j i !temp!m(m.m&_immediate_Kbd_Macro) !* Put command to call kbd macro at beginning.!
|
||||
hx* m.v Last_Kbd_Macro !* make mLast_Kbd_Macro call the macro.!
|
||||
Q..o( ]..o
|
||||
) fs bkill !* Flush the data structures used in defining.!
|
||||
0 fs tyi sink
|
||||
1:<1 fs mode ch>
|
||||
-1"e 0' !* If arg is 1, we are done.!
|
||||
f"g-1'mLast_Kbd_Macro' !* Else, repeat appropriate number of extra times.!
|
||||
0
|
||||
|
||||
!Name Kbd Macro:! !C Give a name to the last kbd macro defined.
|
||||
An MM command is created with the name you specify,
|
||||
which when invoked runs that keyboard macro.
|
||||
Then, you are asked to give the command character to
|
||||
put the macro on. Type Return or Rubout if you don't want
|
||||
to put it on any character. Otherwise, type a character
|
||||
which is undefined or is already a keyboard macro.
|
||||
Prefix characters such as Altmode and ^X may be used.!
|
||||
|
||||
1,fCommand_Name[1 !* Read name of MM command, and define it unless null.!
|
||||
fq1"g qLast_Kbd_Macro m.v MM_1'
|
||||
:i..0 ^R_Command_to_define:_
|
||||
m(m.m &_Read_Q-reg)[2 !* Ask what character to put it in.!
|
||||
f=2
|
||||
"e 0'
|
||||
f=2"e 0' !* If he said CR or rubout, don't.!
|
||||
q2m(m.m &_Check_Redefinition) !* Verify that this char is ok to redefine.!
|
||||
qLast_Kbd_Macrou2 !* Redefine it.!
|
||||
0
|
||||
|
||||
!View Kbd Macro:! !C Print definition of a keyboard macro.
|
||||
Supply a suffix string argument containing the command name.
|
||||
If the string argument is null, you will be asked to type
|
||||
the character which runs the macro.!
|
||||
|
||||
:i*[0 !* Get the string arg.!
|
||||
:i..0 Kbd_Macro_Command:_
|
||||
fq0"e m(m.m &_Read_Q-reg)u0' !* If null, read character from terminal.!
|
||||
q0[1 !* Get contents of string.!
|
||||
m.m ^R_Call_Last_Kbd-q1"e !* If it's the ^X^E command,!
|
||||
qLast_Kbd_Macrou1 !* get the macro it would run.!
|
||||
:i0Last_Kbd_Macro'
|
||||
f[b bind g1 !* Get the thing in a buffer.!
|
||||
j s) 0,.k !* Flush the call to & immediate kbd macro.!
|
||||
ft
|
||||
Definition_of_keyboard_macro_0:
|
||||
|
||||
|
||||
m.m&_Charprint[2
|
||||
j z/2< 1a*200.+(2c0a) m2 ft_>
|
||||
ft
|
||||
|
||||
0
|
||||
|
||||
!& Check Redefinition:! !S Verify that a certain command can be redefined.
|
||||
Do not allow a command to be redefined unless it is undefined,
|
||||
self-inserting, or a string starting with Temp.
|
||||
The command is specified with a q-register name in a string
|
||||
passed as a string pointer.!
|
||||
|
||||
[1
|
||||
q1[0 !* Q0 gets old definition.!
|
||||
fq0+1"g !* If old definition is a string not made by this macro,!
|
||||
f~(0,6:g0)!Temp!"n !* don't let user clobber useful command.!
|
||||
!lose! !"! :I*Can't_clobber_specified_character_1 fs err''
|
||||
"# Afs^r init-q0"n
|
||||
200.@ fs^rinit-q0"n !* Don't redefine built-ins except error and self-insert.!
|
||||
q0"n !* Undefined slots in dispatch prefix are 0.!
|
||||
o lose''''
|
||||
|
||||
|
||||
!^R Kbd Macro Query:! !^R Query and continue macro execution.
|
||||
If called from a macro, reads a character:
|
||||
Space continues execution.
|
||||
Rubout terminates this repetition of the macro.
|
||||
Altmode terminates all repetitions of the macro.
|
||||
. terminates after the end of this repetition of the macro.
|
||||
^R enters a recursive edit; when you exit, you are asked again.
|
||||
^L clears the screen and asks you again.
|
||||
Anything else exits all macros and is reread as a command.!
|
||||
|
||||
fs tyi source"e 0' !* if not from inside macro, do nothing!
|
||||
[0[1 [..j :i..j Kbd_Macro_Query
|
||||
0f[ tyi source 0f[ tyi sink
|
||||
!Read!
|
||||
2,m.i @:fiu1 fiu0 !* get character, really from tty!
|
||||
q0-"e f+ Oread'
|
||||
q0-"e 0 Oread'
|
||||
-2fsqpun !* pop tyi source and tyi sink!
|
||||
q0-32"e 0' !* space continues on!
|
||||
q0-."e 1u:..m(fq..m/5-1) 0' !* . ends after this, set rpt count to 1.!
|
||||
q0-"e 1u:..m(fq..m/5-1)' !* For Altmode, set rpt count to 1 so flush all repeats.!
|
||||
q0f:"l !* Both Rubout and Altmode end this repetition!
|
||||
fq:..m(fq..m/5-3)-2 !* by skipping up to the last char
|
||||
! u:..m(fq..m/5-2)
|
||||
fi ' !* and reading it, causing macro to be popped.!
|
||||
0fs tyi source !* Other characters quit macro execution!
|
||||
q1fs reread !* and are unread.!
|
||||
BIN
src/e142/kbdmac._ej
Normal file
BIN
src/e142/kbdmac._ej
Normal file
Binary file not shown.
BIN
src/e142/kbdmac._ej0531.7.txt
Normal file
BIN
src/e142/kbdmac._ej0531.7.txt
Normal file
Binary file not shown.
32
src/e142/maze.
Normal file
32
src/e142/maze.
Normal file
@@ -0,0 +1,32 @@
|
||||
:-:-:-:-:-: :-:-:-:-:-:-:-:-:-:
|
||||
| | | |
|
||||
: :-:-:-: :-: :-: : : :-:-:-:-:
|
||||
| | | | | | | |
|
||||
: : :-: :-: : :-:-: : :-: :-: :
|
||||
| | | | | | | | |
|
||||
:-:-: :-:-:-:-: : : :-: :-: : :
|
||||
| | | | | | | | |
|
||||
: :-:-: :-: : :-:-:-: : : :-: :
|
||||
| | | | | | |
|
||||
: :-:-:-:-:-: : :-: :-: :-: : :
|
||||
| | | | | | | |
|
||||
:-:-: : : : :-:-: :-:-:-: :-:-:
|
||||
| | | | | | |
|
||||
:-:-:-:-: :-:-: :-:-: : :-: :-:
|
||||
| | | | | | | | |
|
||||
: : :-: :-: : : : : : : : :-: :
|
||||
| | | | | | | | | | |
|
||||
: :-: :-:-:-: :-:-:-:-: : : : :
|
||||
| | | | | | | |
|
||||
:-:-:-: :-: :-: :-: :-: : :-: :
|
||||
| | | | | | | | |
|
||||
:-: :-:-: : : : : : : :-:-: : :
|
||||
| | | | | | | | | |
|
||||
: :-: :-:-:-:-:-:-:-: : : : : :
|
||||
| | | | | | | |
|
||||
:-:-:-:-: : :-: : :-:-: : : : :
|
||||
| | | | | | | | |
|
||||
: :-:-: :-: : :-:-:-: : : : :-:
|
||||
| | | | | |
|
||||
:-:-: :-:-:-:-:-:-:-:-:-:-:-:-:
|
||||
|
||||
BIN
src/e142/mazlib._ej
Normal file
BIN
src/e142/mazlib._ej
Normal file
Binary file not shown.
848
src/e142/monsym.
Normal file
848
src/e142/monsym.
Normal file
@@ -0,0 +1,848 @@
|
||||
;*****************************************
|
||||
;JSYS SPECIFIC ARGUMENTS
|
||||
;THE FOLLOWING ARE ORDERED ALPHABETICALLY BY JSYS NAME
|
||||
;******************************************
|
||||
|
||||
;ATTACH
|
||||
|
||||
AT%CCJ==:1B0 ;^C JOB WHEN ATTACHED
|
||||
AT%NAT==:1B1 ;NO ATTACH
|
||||
AT%TRM==:1B2 ;7 TERMINAL IN 4, NOT CONTROLLING TERM
|
||||
AT%DIR==:777777B35 ;DIRECTORY NUMBER
|
||||
|
||||
;CFORK
|
||||
|
||||
CR%MAP==:1B0 ;SET MAP FOR NEW FORK TO POINT TO
|
||||
; THIS PROCESS
|
||||
CR%CAP==:1B1 ;MAKE CAPABILITIES IDENTICAL
|
||||
CR%ACS==:1B3 ;SET ACS FROM BLOCK
|
||||
CR%ST==:1B4 ;START PROCESS AT PC
|
||||
CR%PCV==:777777B35 ;VALUE OF PC
|
||||
|
||||
;CHFDB
|
||||
|
||||
CF%NUD==:1B0 ;NO UPDATE DIRECTORY
|
||||
CF%DSP==:777B17 ;FDB DISPLACEMENT
|
||||
CF%JFN==:777777B35 ;JFN
|
||||
|
||||
;CLOSF
|
||||
|
||||
CO%NRJ==:1B0 ;NO RELEASE JFN
|
||||
CO%WCL==:1B1 ;TOPS20AN ;WAIT UNTIL MATCHING CLS IS RECEIVED
|
||||
CO%JFN==:777777B35 ;JFN
|
||||
|
||||
;CLZFF
|
||||
|
||||
CZ%NIF==:1B0 ;NO INFERIOR FORK FILES
|
||||
CZ%NSF==:1B1 ;NO SELF FORK FILES
|
||||
CZ%NRJ==:1B2 ;NO RELEASE JFN
|
||||
CZ%NCL==:1B3 ;NO CLOSE FILE
|
||||
CZ%UNR==:1B4 ;UNRESTRICT
|
||||
CZ%ARJ==:1B5 ;ALWAYS RELEASE JFN
|
||||
CZ%ABT==:1B6 ;ABORT
|
||||
CZ%NUD==:1B7 ;NO UPDATE DIRECTORY
|
||||
CZ%PRH==:777777B35 ;PROCESS HANDLE
|
||||
|
||||
;CNDIR
|
||||
|
||||
CN%CKP==:1B0 ;CHECK PASSWORD ONLY
|
||||
CN%NOC==:1B1 ;NO CONNECT
|
||||
CN%JOB==:1B2 ;DOING CONNECT FOR ANOTHER JOB
|
||||
CN%DIR==:777777B35 ;DIRECTORY NUMBER
|
||||
|
||||
;DELDF
|
||||
|
||||
DD%DTF==:1B0 ;DELETE TEMPORARY FILES
|
||||
DD%DNF==:1B1 ;DELETE NONEXISTENT FILES
|
||||
DD%RST==:1B2 ;REBUILD THE SYMBOL TABLE
|
||||
DD%CHK==:1B3 ;CHECK THE DIR FOR CONSISTENCY ONLY
|
||||
DD%DIR==777777B35 ;DIRECTORY NUMBER
|
||||
|
||||
;DELF
|
||||
|
||||
DF%NRJ==:1B0 ;DON'T RELEASE JFN
|
||||
DF%EXP==:1B1 ;EXPUNGE CONTENTS
|
||||
DF%FGT==:1B2 ;FORGET (EXPUNGE W/O DEASSIGNING ADDRESSES)
|
||||
DF%DIR==:1B3 ;DELETE, FORGET, AND EXPUNGE A DIRECTORY
|
||||
; FILE. (ONLY IF ^E-CREATE KILL FAILED)
|
||||
DF%JFN==777777B35 ;JFN
|
||||
|
||||
;DUMPI/DUMPO
|
||||
|
||||
DM%NWT==:1B0 ;NO WAIT FOR COMPLETION
|
||||
DM%FIN==:1B1 ;FINISH PREVIOUS REQUEST
|
||||
;***NOT INPLEMENTED YET***
|
||||
DM%PTR==:777777B35 ;POINTER TO COMMAND LIST
|
||||
|
||||
;DVCHR AND DVCH1 BIT DEFINITIONS
|
||||
|
||||
DV%OUT==:1B0 ;DEVICE CAN DO OUTPUT
|
||||
DV%IN==:1B1 ;DEVICE CAN DO INPUT
|
||||
DV%DIR==:1B2 ;DEVICE HAS A DIRECTORY
|
||||
DV%AS==:1B3 ;DEVICE IS ASSIGNABLE
|
||||
DV%MDD==:1B4 ;DEVICE IS A MULTIPLE DIRECTORY DEVICE
|
||||
DV%AV==:1B5 ;DEVICE IS AVAILABLE TO THIS JOB
|
||||
DV%ASN==:1B6 ;DEVICE IS ASSIGNED BY ASND
|
||||
DV%MDV==:1B7 ;DEVICE IS A MOUNTABLE DEVICE
|
||||
DV%MNT==:1B8 ;DEVICE IS MOUNTED
|
||||
DV%TYP==:777B17 ;DEVICE TYPE FIELD
|
||||
DV%MOD==:177777B35 ;DEVICE DATA MODE
|
||||
DV%M0==:1B35 ;DEVICE CAN BE OPENED IN MODE 0
|
||||
DV%M1==:1B34 ;DEVICE CAN BE OPENED IN MODE 1
|
||||
DV%M2==:1B33 ;DEVICE CAN BE OPENED IN MODE 2
|
||||
DV%M3==:1B32 ;DEVICE CAN BE OPENED IN MODE 3
|
||||
DV%M4==:1B31 ;DEVICE CAN BE OPENED IN MODE 4
|
||||
DV%M5==:1B30 ;DEVICE CAN BE OPENED IN MODE 5
|
||||
DV%M6==:1B29 ;DEVICE CAN BE OPENED IN MODE 6
|
||||
DV%M7==:1B28 ;DEVICE CAN BE OPENED IN MODE 7
|
||||
DV%M10==:1B27 ;DEVICE CAN BE OPENED IN MODE 10
|
||||
DV%M11==:1B26 ;DEVICE CAN BE OPENED IN MODE 11
|
||||
DV%M12==:1B25 ;DEVICE CAN BE OPENED IN MODE 12
|
||||
DV%M13==:1B24 ;DEVICE CAN BE OPENED IN MODE 13
|
||||
DV%M14==:1B23 ;DEVICE CAN BE OPENED IN MODE 14
|
||||
DV%M15==:1B22 ;DEVICE CAN BE OPENED IN MODE 15
|
||||
DV%M16==:1B21 ;DEVICE CAN BE OPENED IN MODE 16
|
||||
DV%M17==:1B20 ;DEVICE CAN BE OPENED IN MODE 17
|
||||
D1%SPL==:1B0 ;DEVICE IS SPOOLED
|
||||
D1%ALC==:1B1 ;DEVICE IS UNDER CONTROL OF ALLOCATOR
|
||||
D1%VVL==:1B2 ;VOLUME VALID
|
||||
|
||||
;DEVICE TYPE DEFINITIONS
|
||||
|
||||
.DVDSK==:0 ;DISK
|
||||
.DVMTA==:2 ;MAGTAPE
|
||||
.DVDTA==:3 ;DECTAPE
|
||||
.DVPTR==:4 ;PAPER TAPE READER
|
||||
.DVPTP==:5 ;PAPER TAPE PUNCH
|
||||
.DVDSP==:6 ;DISPLAY
|
||||
.DVLPT==:7 ;LINE PRINTER
|
||||
.DVCDR==:10 ;CARD READER
|
||||
.DVFE==:11 ;FRONT END DEVICE
|
||||
.DVTTY==:12 ;TERMINAL
|
||||
.DVPTY==:13 ;PTY
|
||||
.DVNUL==:15 ;NULL DEVICE
|
||||
.DVNET==:16 ;ARPA NETWORK
|
||||
.DVPLT==:17 ;PLOTTER
|
||||
|
||||
;FLOUT/DFOUT
|
||||
;FORMAT CONTROL WORD
|
||||
|
||||
FL%SGN==:3B1 ;FIRST FIELD SIGN CONTROL
|
||||
.FLDIG==:0 ;DIGIT
|
||||
.FLSPC==:1 ;SPACE
|
||||
.FLPLS==:2 ;PLUS SIGN
|
||||
.FLSPA==:3 ;SPACE
|
||||
FL%JUS==:3B3 ;FIRST FIELD JUSTIFICATION CONTROL
|
||||
.FLLSP==:0 ;LEADING SPACES
|
||||
.FLLZR==:1 ;LEADING ZEROS
|
||||
.FLLAS==:2 ;LEADING ASTERISKS
|
||||
.FLTSP==:3 ;TRAILING SPACES
|
||||
FL%ONE==:1B4 ;FIRST FIELD NONBLANK
|
||||
FL%DOL==:1B5 ;DOLLAR SIGN PREFIX
|
||||
FL%PNT==:1B6 ;DECIMAL POINT
|
||||
FL%EXP==:3B8 ;THIRD FIELD EXPONENT CONTROL
|
||||
.FLEXN==:0 ;NO EXPONENT
|
||||
.FLEXE==:1 ;E EXPONENT PREFIX
|
||||
.FLEXD==:2 ;D EXPONENT PREFIX
|
||||
.FLEXM==:3 ;*10^ EXPONENT PREFIX
|
||||
FL%ESG==:3B10 ;EXPONENT SIGN CONTROL
|
||||
.FLDGE==:0 ;DIGIT
|
||||
.FLPLE==:1 ;PLUS SIGN
|
||||
.FLSPE==:2 ;SPACE
|
||||
.FLDGT==:3 ;DIGIT
|
||||
FL%OVL==:1B11 ;COLUMN OVERFLOW
|
||||
FL%RND==:37B17 ;DIGIT POSITION FOR ROUNDING
|
||||
FL%FST==:77B23 ;FIRST FIELD WIDTH
|
||||
FL%SND==:77B29 ;SECOND FIELD WIDTH
|
||||
FL%THD==:77B35 ;THIRD FIELD WIDTH
|
||||
|
||||
;GDSTS
|
||||
|
||||
;SEE MTOPR FOR CARD READER AND LINE PRINTER STATUS BITS
|
||||
;SEE GENERAL FIELD AND VALUE SECTION FOR MAGTAPE STATUS BITS
|
||||
;SEE TOPS20AN SECTION FOR NETWORK STATUS BITS
|
||||
|
||||
.GDFSM==:17B3 ;TOPS20AN ;FINITE MACHINE STATE
|
||||
|
||||
;GET
|
||||
|
||||
GT%ADR==1B19 ;USE ADDRESS LIMITS IN AC2
|
||||
|
||||
;GFRKS
|
||||
|
||||
GF%GFH==:1B0 ;GET RELATIVE FORK HANDLES
|
||||
GF%GFS==:1B1 ;GET FORK STATUS
|
||||
|
||||
;GTJFN DEFINITIONS
|
||||
|
||||
;FLAGS PROVIDED TO GTJFN ON CALL
|
||||
GJ%FOU==:1B0 ;FILE IS FOR OUTPUT USE
|
||||
GJ%NEW==:1B1 ;NEW FILE ONLY
|
||||
GJ%OLD==:1B2 ;OLD FILE ONLY
|
||||
GJ%MSG==:1B3 ;PRINT AN APPROPRIATE MESSAGE
|
||||
GJ%CFM==:1B4 ;CONFIRMATION IS REQUIRED
|
||||
GJ%TMP==:1B5 ;TEMPORARY
|
||||
GJ%NS==:1B6 ;DONT SEARCH SEARCH LISTS
|
||||
GJ%ACC==:1B7 ;NO ACCESS BY OTHER FORKS
|
||||
GJ%DEL==:1B8 ;IGNORE "DELETED" BIT
|
||||
GJ%JFN==:3B10 ;JFN USE FIELD
|
||||
.GJDNU==:0 ;DO NOT USE JFN PROVIDED
|
||||
.GJERR==:2 ;ERROR IF CANNOT USE JFN PROVIDED
|
||||
.GJALT==:3 ;USE ALTERNATE IF CANNOT USE GIVEN JFN
|
||||
GJ%IFG==:1B11 ;ACCEPT INPUT FILE GROUP DESCRIPTORS
|
||||
GJ%OFG==:1B12 ;ACCEPT OUTPUT FILE GROUP DESCRIPTORS
|
||||
GJ%FLG==:1B13 ;RETURN FLAGS
|
||||
GJ%PHY==:1B14 ;PHYSICAL DEVICE ONLY
|
||||
GJ%XTN==:1B15 ;EXTENDED FORMAT (E+11 EXISTS)
|
||||
GJ%FNS==:1B16 ;ACCUMULATOR 2 CONTAINS JOB FILE NUMBERS
|
||||
GJ%SHT==:1B17 ;SHORT CALL FORMAT
|
||||
|
||||
|
||||
;FLAGS PROVIDED TO GTJFN (IN SECOND FLAG WORD)
|
||||
|
||||
G1%RND==:1B0 ;RETURN ON NULL(IN ALTERNATE FLAG WORD)
|
||||
G1%RBF==:1B1 ;^R BUFFER IS DISJOINT
|
||||
G1%NLN==:1B2 ;NO LONG NAMES
|
||||
G1%RCM==:1B3 ;RETURN CONFIRM MESSAGE
|
||||
|
||||
|
||||
;FLAGS RETURNED BY GTJFN
|
||||
|
||||
GJ%DEV==:1B0 ;ASTERISK WAS GIVEN FOR DEVICE
|
||||
GJ%UNT==:1B1 ;ASTERISK WAS GIVEN FOR UNIT
|
||||
GJ%DIR==:1B2 ;ASTERISK WAS GIVEN FOR DIRECTORY
|
||||
GJ%NAM==:1B3 ;ASTERISK WAS GIVEN FOR NAME
|
||||
GJ%EXT==:1B4 ;ASTERISK WAS GIVEN FOR EXTENSION
|
||||
GJ%VER==:1B5 ;ASTERISK WAS GIVEN FOR GENERATION
|
||||
GJ%UHV==:1B6 ;USE HIGHEST GENERATION
|
||||
GJ%NHV==:1B7 ;USE NEXT HIGHER GENERATION
|
||||
GJ%ULV==:1B8 ;USE LOWEST GENERATION
|
||||
GJ%PRO==:1B9 ;PROTECTION GIVEN
|
||||
GJ%ACT==:1B10 ;ACCOUNT GIVEN
|
||||
GJ%TFS==:1B11 ;TEMPORARY FILE SPECIFIED (;T)
|
||||
GJ%GND==:1B12 ;COMPLEMENT OF GJ%DEL ON CALL
|
||||
|
||||
;GTJFN TABLE OFFSETS
|
||||
|
||||
.GJGEN==:0 ;FLAGS ,, GENERATION
|
||||
.GJDEF==:0 ;DEFAULT GENERATION
|
||||
.GJNHG==:-1 ;NEXT HIGHER GENERATION
|
||||
.GJLEG==:-2 ;LOWEST EXISTING GENERATION
|
||||
.GJALL==:-3 ;ALL GENERATIONS (I.E., ;*)
|
||||
.GJSRC==:1 ;SOURCE JFN ,, OUTPUT JFN
|
||||
.GJDEV==:2 ;DEFAULT DEVICE
|
||||
.GJDIR==:3 ;DEFAULT DIRECTORY
|
||||
.GJNAM==:4 ;DEFAULT NAME
|
||||
.GJEXT==:5 ;DEFAULT EXTENSTION
|
||||
.GJPRO==:6 ;DEFAULT PROTECTION
|
||||
.GJACT==:7 ;DEFAULT ACCOUNT
|
||||
.GJJFN==:10 ;DESIRED JFN
|
||||
.GJF2==:11 ;SECOND GROUP FLAGS,,COUNT
|
||||
.GJCPP==:12 ;COPY BUFFER POINTER
|
||||
.GJCPC==:13 ;COPY BUFFER COUNT
|
||||
.GJRTY==:14 ;RETYPE (^R) POINTER
|
||||
.GJBFP==:15 ;TOP OF BUFFER POINTER
|
||||
|
||||
;GNJFN - FLAGS RETURNED
|
||||
|
||||
GN%DIR==:1B14 ;DIRECTORY CHANGED
|
||||
GN%NAM==:1B15 ;NAME CHANGED
|
||||
GN%EXT==:1B16 ;EXTENSION CHANGED
|
||||
|
||||
;GTRPW
|
||||
|
||||
PF%USR==:1B0 ;PAGE FAIL WORD - USER MODE REFERENCE
|
||||
PF%WRT==:1B5 ; " - WRITE REFERENCE
|
||||
TSW%RD==:1B14 ;TRAP STATUS WORD - READ
|
||||
TSW%WT==:1B15 ; " - WRITE
|
||||
TSW%WR==:1B15 ; (ANOTHER NAME FOR ABOVE)
|
||||
TSW%EX==:1B16 ; " - EXECUTE
|
||||
TSW%MN==:1B17 ; " - MONITOR MODE REFERENCE
|
||||
|
||||
;GTSTS BITS RETURNED IN 2
|
||||
|
||||
GS%OPN==:1B0 ;FILE IS OPEN
|
||||
GS%RDF==:1B1 ;IF OPEN, FILE IS OPEN FOR READ
|
||||
GS%WRF==:1B2 ;IF OPEN, FILE IS OPEN FOR WRITE
|
||||
GS%XCF==:1B3 ;IF OPEN, FILE IS OPEN FOR EXECUTE
|
||||
GS%RND==:1B4 ;OK TO RESET BYTE POINTER
|
||||
; (FILE IS NOT APPEND)
|
||||
GS%APT==:1B5 ;ACCESS PER PAGE TABLE
|
||||
; (NOT IMPLEMENTED -- OBSOLETE)
|
||||
GS%CAL==:1B6 ;OK TO CALL AS A PROCEDURE
|
||||
; (NOT IMPLEMENTED -- OBSOLETE)
|
||||
GS%LNG==:1B7 ;FILE IS LONG
|
||||
GS%EOF==:1B8 ;AT END OF FILE ON READ
|
||||
GS%ERR==:1B9 ;FILE MAY BE IN ERROR
|
||||
GS%NAM==:1B10 ;FILE HAS A NAME (JFN EXISTS)
|
||||
GS%AST==:1B11 ;ONE OR MORE FIELDS OF NAME
|
||||
; IS WILD
|
||||
GS%ASG==:1B12 ;JFN IS BEING ASSIGNED
|
||||
GS%HLT==:1B13 ;TERMINATE ON I/O ERROR
|
||||
GS%FRK==:1B17 ;FILE IS RESTRICTED TO SOME FORK
|
||||
GS%MOD==:17B35 ;DATA MODE
|
||||
.GSNRM==:0 ;NORMAL MODE
|
||||
.GSIMG==:10 ;IMAGE (BINARY) MODE
|
||||
.GSDMP==:17 ;DUMP MODE
|
||||
|
||||
;IDCNV (ALSO IDTNC AND ODCNV)
|
||||
|
||||
IC%DSA==:1B0 ;DAYLIGHT SAVINGS IF APPROPRIATE
|
||||
IC%ADS==:1B1 ;APPLY DAYLIGHT SAVINGS
|
||||
IC%UTZ==:1B2 ;USE TIME ZONE GIVEN
|
||||
IC%TMZ==:77B17 ;TIME ZONE
|
||||
IC%TIM==777777B35 ;LOCAL TIME
|
||||
|
||||
;IDTIM & IDTNC
|
||||
|
||||
IT%NDA==:1B0 ;NO DATE
|
||||
IT%NNM==:1B1 ;NO NUMERIC MONTH
|
||||
IT%SNM==:1B2 ;SECOND NUMBER IS MONTH
|
||||
IT%ERR==:1B3 ;ERROR IF NUMBERS ARE NOT IN SPECIFIED
|
||||
; ORDER
|
||||
IT%NTI==:1B6 ;NO TIME
|
||||
IT%NIS==:1B7 ;NO SECONDS
|
||||
IT%AIS==:1B8 ;ALWAYS INCLUDE SECONDS
|
||||
IT%NAC==:1B9 ;NO COLON ALLOWED BETWEEN HH AND MM
|
||||
IT%AAC==:1B10 ;ALWAYS ALLOW COLON
|
||||
IT%AMS==:1B11 ;ALWAYS INTERPERET ONE COLON AS HHMM:SS
|
||||
IT%AHM==:1B12 ;ALWAYS INTERPRET ONE COLON AS HH:MM
|
||||
IT%N24==:1B14 ;NO 24-HOUR FORMAT
|
||||
IT%NTM==:1B15 ;NO TIME MODIFIER (AM, PM)
|
||||
IT%NTZ==:1B16 ;NO TIME ZONE
|
||||
|
||||
;JFNS
|
||||
|
||||
JS%DEV==7B2 ;DEVICE FIELD OUTPUT CONTROL
|
||||
JS%DIR==:7B5 ;DIRECTORY FIELD OUTPUT CONTROL
|
||||
JS%NAM==:7B8 ;NAME FIELD OUTPUT CONTROL
|
||||
JS%TYP==:7B11 ;FILE TYPE FIELD OUTPUT CONTROL
|
||||
JS%GEN==:7B14 ;GENERATION FIELD OUTPUT CONTROL
|
||||
JS%PRO==:7B17 ;PROTECTION FIELD OUTPUT CONTROL
|
||||
JS%ACT==:7B20 ;ACCOUNT FIELD OUTPUT CONTROL
|
||||
;VALUES FOR ABOVE 7 FIELDS:
|
||||
.JSNOF==:0 ;NEVER OUTPUT FIELD
|
||||
.JSAOF==:1 ;ALWAYS OUTPUT FIELD
|
||||
.JSSSD==:2 ;SUPPRESS IF SYSTEM DEFAULT
|
||||
JS%TMP==:1B21 ;RETURN ;T IF TEMP FILE
|
||||
JS%SIZ==:1B22 ;RETURN SIZE
|
||||
JS%CDR==:1B23 ;RETURN CREATION DATE
|
||||
JS%LWR==:1B24 ;RETURN LAST WRITE
|
||||
JS%LRD==:1B25 ;RETURN LAST READ
|
||||
JS%PTR==:1B26 ;AC 2 HOLDS STRING POINTER NOT JFN
|
||||
JS%PSD==:1B32 ;PUCTUATE SIZE AND DATE
|
||||
JS%TBR==:1B33 ;TAB BEFORE FIELDS RETURNED
|
||||
JS%TBP==:1B34 ;TAB BEFORE POSSIBLE FIELDS
|
||||
JS%PAF==:1B35 ;PUNCTUATE ALL FIELDS
|
||||
|
||||
;MTOPR - FUNCTION CODES
|
||||
|
||||
.MOCLE==:0 ;CLEAR ERRORS
|
||||
.MONOP==:31 ;NOP (WAIT FOR ACTIVITY TO STOP)
|
||||
.MOREW==:1 ;REWIND
|
||||
.MOEOF==:3 ;WRITE EOF
|
||||
.MODTE==:4 ;ASSIGN FE DEVICE TO A DTE
|
||||
.MOFWR==:6 ;FORWARD SPACE RECORD
|
||||
.MOBKR==:7 ;BACKSPACE RECORD
|
||||
.MORUL==:11 ;REWIND AND UNLOAD
|
||||
.MOERS==:13 ;ERASE TAPE
|
||||
.MOFWF==:16 ;FORWARD SPACE FILE
|
||||
.MOBKF==:17 ;BACKSPACE FILE
|
||||
.MOSPD==:26 ;SET TTY SPEED (FOR KL ONLY)
|
||||
.MORSP==:27 ;READ LINE SPEED (FOR KL ONLY)
|
||||
.MOSDR==:2 ;SET READ DIRECTION
|
||||
.MORDR==:26 ;READ READ DIRECTION
|
||||
.MOEOT==:10 ;SKIP TO LOGICAL END OF TAPE
|
||||
.MOSRS==:5 ;SET RECORD SIZE
|
||||
.MORRS==:15 ;READ RECORD SIZE
|
||||
.MOSDN==:24 ;SET DENSITY
|
||||
.MORDN==:12 ;READ DENSITY
|
||||
.MOSDM==:4 ;SET DATA MODE
|
||||
.MORDM==:14 ;READ DATA MODE
|
||||
.MOSPR==:20 ;SET PARITY
|
||||
.MORPR==:21 ;READ PARITY
|
||||
.MONRB==:22 ;GET NUMBER OF REMAINING BYTES IN RECORD
|
||||
.MOFOU==:23 ;FORCE OUT RECORD
|
||||
.MOINF==:25 ;GET INFORMATION ABOUT TAPE
|
||||
.MOICT==:0 ;COUNT OF ARGUMENTS TO BE RETURNED
|
||||
.MOITP==:1 ;MAGTAPE TYPE CODE
|
||||
.MTT16==:1 ;MAGTAPE TYPE TU16
|
||||
.MTT45==:2 ;MAGTAPE TYPE TU45
|
||||
.MOIID==:2 ;MAGTAPE REEL ID
|
||||
.MOISN==:3 ;CHAN,CONTROLLER,UNIT ,, SERIAL #
|
||||
.MOIRD==:4 ;# OF READS DONE
|
||||
.MOIWT==:5 ;# OF WRITES DONE
|
||||
.MOIRC==:6 ;RECORD # FROM BOT
|
||||
.MOIFC==:7 ;FILE COUNT ON TAPE
|
||||
.MOISR==:10 ;# OF SOFT READ ERRORS
|
||||
.MOISW==:11 ;# OF SOFT WRITE ERRORS
|
||||
.MOIHR==:12 ;# OF HARD READ ERRORS
|
||||
.MOIHW==:13 ;# OF HARD WRITE ERRORS
|
||||
.MOPSI==:27 ;SET ERROR PSI FOR LPT AND CDR
|
||||
MO%MSG==:1B0 ;SUPPRESS STANDARD CTY MESSAGES
|
||||
.MOSID==:27 ;SET REEL I.D.
|
||||
.MOIEL==:30 ;INHIBIT ERROR LOGGING
|
||||
.MOLVF==:32 ;LOAD DEVICE'S VFU
|
||||
.MORVF==:33 ;READ VFU FILE NAME
|
||||
.MOLTR==:34 ;LOAD TRANSLATION RAM
|
||||
.MORTR==:35 ;READ RAM FILE NAME
|
||||
.MOSTS==:36 ;SET SOFTWARE STATUS
|
||||
.MORST==:37 ;READ SOFTWARE STATUS
|
||||
MO%LPC==1 ;PAGE COUNTER OVERFLOW
|
||||
MO%LCI==2 ;CHARACTER INTERRUPT (HARD ERROR)
|
||||
MO%LVF==4 ;VFU ERROR. PAPER MUST BE RE-ALIGNED
|
||||
MO%LVU==20 ;LINE PRINTER HAS OPTICAL VFU
|
||||
MO%RPE==40 ;RAM PARITY ERROR
|
||||
|
||||
MO%RCK==:1 ;READ CHECK
|
||||
MO%PCK==:2 ;PICK CHECK
|
||||
MO%SCK==:4 ;STACK CHECK
|
||||
MO%HEM==:10 ;HOPPER EMPTY
|
||||
MO%SFL==:20 ;STACKER FULL
|
||||
|
||||
MO%FNX==:1B17 ;NON-EXISTENT DEVICE
|
||||
MO%OL==:1B16 ;DEVICE IS OFF-LINE
|
||||
MO%HE==:1B15 ;HARDWARE ERROR
|
||||
MO%SER==:1B14 ;SOFTWARE ERROR
|
||||
MO%IOP==:1B13 ;I/O IN PROGRESS
|
||||
MO%EOF==:1B12 ;END OF FILE
|
||||
; 1B11 ;RESERVED
|
||||
MO%FER==:1B10 ;FATAL ERROR
|
||||
MO%LCP==:1B0 ;LOWER CASE PRINTER
|
||||
.MOFLO==:40 ;FLUSH OUTPUT
|
||||
|
||||
;SEE SETJB FOR VARIOUS ARGUMENT VALUES
|
||||
|
||||
;NET MTOPR NUMBERS
|
||||
|
||||
.MOACP==:20 ;TOPS20AN ;ACCEPT CONNECTION ON SOCKET IN .NSRCR STATE
|
||||
.MOSND==:21 ;TOPS20AN ;SEND ALL CURENTLY BUFFERED BYTES
|
||||
.MOSIN==:22 ;TOPS20AN ;SEND INS/INR COMMAND
|
||||
.MOAIN==:24 ;TOPS20AN ;ASSIGN INS/INR AND FSM PSI CHANNELS
|
||||
MO%NIN==:77B5 ;TOPS20AN ;INS/INR SOFTWARE INTERRUPT CHANNEL
|
||||
MO%FSM==:77B17 ;TOPS20AN ;FSM CHANGE OF STATE INTERRUPT CHANNEL
|
||||
|
||||
;NOUT
|
||||
|
||||
NO%MAG==:1B0 ;OUTPUT MAGNITUDE
|
||||
NO%SGN==:1B1 ;OUTPUT SIGN
|
||||
NO%LFL==:1B2 ;LEADING FILLER
|
||||
NO%ZRO==:1B3 ;FILL WITH ZERO'S
|
||||
NO%OOV==:1B4 ;OUTPUT ON COLUMN OVERFLOW
|
||||
NO%AST==:1B5 ;OUTPUT ASTERISKS ON OVERFLOW
|
||||
NO%COL==:177B17 ;NUMBER OF COLUMNS TO USE
|
||||
NO%RDX==:777777 ;RADIX
|
||||
|
||||
;ODCNV -- SEE IDCNV FOR BITS
|
||||
|
||||
;ODTIM
|
||||
OT%NDA==:1B0 ;DO NOT OUTPUT DATE
|
||||
OT%DAY==:1B1 ;OUTPUT DAY OF WEEK
|
||||
OT%FDY==:1B2 ;OUTPUT NUMERIC MONTH
|
||||
OT%NMN==:1B3 ;OUTPUT NUMERIC MONTH
|
||||
OT%FMN==:1B4 ;OUTPUT MONTH IN FULL
|
||||
OT%4YR==:1B5 ;OUTPUT 4-DIGIT YEAR
|
||||
OT%DAM==:1B6 ;OUTPUT DAY AFTER MONTH
|
||||
OT%SPA==:1B7 ;OUTPUT SPACES IN DATE
|
||||
OT%SLA==:1B8 ;OUTPUT SLASHES IN DATE
|
||||
OT%NTM==:1B9 ;DO NOT OUTPUT TIME
|
||||
OT%NSC==:1B10 ;DO NOT OUTPUT SECONDS
|
||||
OT%12H==:1B11 ;OUTPUT 12-HOUR FORMAT
|
||||
OT%NCO==:1B12 ;DO NOT OUTPUT COLON
|
||||
OT%TMZ==:1B13 ;OUTPUT TIME ZONE
|
||||
OT%SCL==:1B17 ;SUPPRESS COLUMNIZATION
|
||||
|
||||
;ODTNC -- SEE IDCNV FOR BITS
|
||||
|
||||
;OPENF
|
||||
|
||||
OF%BSZ==:77B5 ;BYTE SIZE
|
||||
OF%MOD==:17B9 ;MODE
|
||||
OF%HER==:1B18 ;HALT ON IO ERROR
|
||||
OF%RD==:1B19 ;READ
|
||||
OF%WR==:1B20 ;WRITE
|
||||
OF%EX==:1B21 ;EXECUTE
|
||||
OF%APP==:1B22 ;APPEND
|
||||
OF%THW==:1B25 ;THAWED
|
||||
OF%AWT==:1B26 ;ALWAYS WAIT
|
||||
OF%PDT==:1B27 ;PRESERVE DATES
|
||||
OF%NWT==:1B28 ;NEVER WAIT
|
||||
OF%RTD==:1B29 ;RESTRICTED
|
||||
OF%PLN==:1B30 ;SET TO DISABLE LINE NUMBER CHECKING FOR
|
||||
; NON-LINE NUMBER FILES
|
||||
|
||||
;PMAP BIT DEFINITIONS
|
||||
|
||||
PM%RD==:1B2 ;READ
|
||||
PM%WT==:1B3 ;WRITE
|
||||
PM%WR==:1B3 ; (ANOTHER NAME FOR ABOVE)
|
||||
PM%EX==:1B4 ;EXECUTE
|
||||
PM%RWX==:7B4 ;CONVENIENT ABBREV FOR RD+WT+EX
|
||||
PM%PLD==:1B5 ;PRELOAD PAGES BEING MAPPED
|
||||
PM%CPY==:1B9 ;COPY ON WRITE
|
||||
|
||||
|
||||
;RFSTS
|
||||
|
||||
RF%FRZ==:1B0 ;PROCESS IS FROZEN
|
||||
RF%STS==:377777B17 ;PROCESS STATUS CODE
|
||||
.RFRUN==:0 ;RUNABLE
|
||||
.RFIO==:1 ;DISMISSED FOR I/O
|
||||
.RFHLT==:2 ;HALTED
|
||||
.RFFPT==:3 ;FORCED PROCESS TERMINATION
|
||||
.RFWAT==:4 ;WAITING FOR INFERIOR PROCESS
|
||||
.RFSLP==:5 ;SLEEP
|
||||
.RFTRP==:6 ;7 JSYS trapped
|
||||
RF%SIC==:777777B35 ;SOFTWARE INTERRUPT CHANNNEL
|
||||
|
||||
;RMAP
|
||||
|
||||
RM%RD==1B2 ;READ ACCESS ALLOWED
|
||||
RM%WR==:1B3 ;WRITE ACCESS ALLOWED
|
||||
RM%EX==:1B4 ;EXECUTE ACCESS ALLOWED
|
||||
RM%PEX==:1B5 ;PAGE EXISTS
|
||||
RM%CPY==:1B9 ;COPY ON WRITE
|
||||
|
||||
;RPACS/SPACS BIT DEFINITIONS
|
||||
|
||||
PA%RD==:1B2 ;READ ACCESS ALLOWED
|
||||
PA%WT==:1B3 ;WRITE ACCESS ALLOWED
|
||||
PA%WR==:1B3 ; (ANOTHER NAME FOR ABOVE)
|
||||
PA%EX==:1B4 ;EXECUTE ACCESS ALLOWED
|
||||
PA%PEX==:1B5 ;PAGE EXISTS
|
||||
PA%IND==:1B6 ;INDIRECT POINTER
|
||||
PA%TPU==:1B8 ;TRAP TO USER
|
||||
; (NOT IMPLEMENTED -- OBSOLETE)
|
||||
PA%CPY==:1B9 ;COPY ON WRITE
|
||||
PA%PRV==:1B10 ;PRIVATE
|
||||
P1%RD==:1B20 ;READ ACCESS ALLOWED IN 1ST POINTER
|
||||
P1%WR==:1B21 ;WRITE ACCESS ALLOWED IN 1ST POINTER
|
||||
P1%WT==:1B21 ; (ANOTHER NAME FOR ABOVE)
|
||||
P1%EX==:1B22 ;EXECUTE ACCESS ALLOWED IN 1ST POINTER
|
||||
P1%PEX==:1B23 ;PAGE EXISTS IN 1ST POINTER
|
||||
P1%CPY==:1B27 ;COPY-ON-WRITE IN 1ST POINTER
|
||||
|
||||
|
||||
;RTIW
|
||||
|
||||
RT%DIM==:1B0 ;DEFFERED TERMINAL INTERRUPT MASK GIVEN
|
||||
RT%PRH==:377777B35 ;PROCESS HANDLE
|
||||
|
||||
;SCVEC
|
||||
|
||||
.SVEAD==:0 ;ENTRY ADDRESS
|
||||
.SVINE==:1 ;INITIAL ENTRY FOR SETUP
|
||||
.SVGET==:2 ;ENTRY ADDRESS FOR GET SHARE FILE ROUTINE
|
||||
.SV40==:3 ;ADDRESS TO GET LOCATION 40
|
||||
.SVRPC==:4 ;ADDRESS TO GET RETURN PC
|
||||
.SVMAK==:5 ;ENTRY FOR MAKE SHARE FILE ROUTINE
|
||||
.SVCST==:6 ;2 WORD BLOCK FOR CONTROL-C/START PROCESSING
|
||||
|
||||
;SSAVE
|
||||
|
||||
SS%NNP==777777B17 ;NEGATIVE NUMBER OF PAGES
|
||||
SS%CPY==:1B18 ;ALLOW COPY-ON-WRITE
|
||||
SS%UCA==:1B19 ;USE CURRENT ACCESS
|
||||
SS%RD==:1B20 ;ALLOW READ ACCESS
|
||||
SS%WR==:1B21 ;ALLOW WRITE ACCESS
|
||||
SS%EXE==:1B22 ;ALLOW EXECUTE ACCESS
|
||||
SS%FPN==:777B37 ;FIRST PAGE NUMBER
|
||||
|
||||
;STDIR
|
||||
|
||||
ST%DIR==:1B0 ;FILES ONLY DIRECTORY
|
||||
ST%ANA==:1B1 ;ALPHANUMERIC ACCOUNTS
|
||||
ST%RLM==:1B2 ;REPEAT LOGIN MESSAGE
|
||||
|
||||
;STIW
|
||||
|
||||
ST%PRH==:777777B35 ;PROCESS HANDLE
|
||||
|
||||
;TLINK
|
||||
|
||||
TL%CRO==:1B0 ;CLEAR REMOTE TO OBJECT LINK
|
||||
TL%COR==:1B1 ;CLEAR OBJECT TO REMOTE LINK
|
||||
TL%EOR==:1B2 ;ESTABLIST OBJECT TO REMOTE LINK
|
||||
TL%ERO==:1B3 ;ESTABLISH REMOTE TO OBJECT LINK
|
||||
TL%SAB==:1B4 ;SET ACCEPT BIT FOR OBJECT
|
||||
TL%ABS==:1B5 ;ACCEPT BIT STATE
|
||||
TL%STA==:1B6 ;SET OR CLEAR ADVICE
|
||||
TL%AAD==1B7 ;ACCEPT ADVICE
|
||||
TL%OBJ==:777777B35 ;OBJECT DESIGNATOR
|
||||
|
||||
;***********************************************
|
||||
;GENERAL FIELD AND VALUE DEFINITIONS
|
||||
;USED BY MANY JSYS'S
|
||||
;***********************************************
|
||||
|
||||
;GENERAL FORK HANDLES
|
||||
|
||||
.FHSLF==:400000 ;SELF
|
||||
.FHSUP==:-1 ;SUPERIOR
|
||||
.FHTOP==:-2 ;TOP IN JOB
|
||||
.FHSAI==:-3 ;SELF AND INFERIORS
|
||||
.FHINF==:-4 ;INFERIORS
|
||||
.FHJOB==:-5 ;ALL IN JOB
|
||||
|
||||
;FIELDS OF JFN MODE WORD
|
||||
|
||||
TT%OSP==:1B0 ;OUTPUT SUPPRESS
|
||||
TT%MFF==:1B1 ;MECHANICAL FORMFEED PRESENT
|
||||
TT%TAB==:1B2 ;MECHANICAL TAB PRESENT
|
||||
TT%LCA==:1B3 ;LOWER CASE CAPABILITIES PRESENT
|
||||
TT%LEN==:177B10 ;PAGE LENGTH
|
||||
TT%WID==:177B17 ;PAGE WIDTH
|
||||
TT%WAK==:77B23 ;WAKEUP FIELD
|
||||
TT%WK0==:1B18 ;WAKEUP CLASS 0 (UNUSED)
|
||||
TT%WK1==:1B19 ;WAKEUP CLASS 1 (UNUSED)
|
||||
TT%WKF==:1B20 ;WAKEUP ON FORMATING CONTROL CHARS
|
||||
TT%WKN==:1B21 ;WAKEUP ON NON-FORMATTING CONTROLS
|
||||
TT%WKP==:1B22 ;WAKEUP ON PUNCTUATION
|
||||
TT%WKA==:1B23 ;WAKEUP ON ALPHANUMERICS
|
||||
TT%ECO==:1B24 ;ECHOS ON
|
||||
TT%ECM==:1B25 ;ECHO MODE
|
||||
TT%ALK==:1B26 ;ALLOW LINKS
|
||||
TT%AAD==:1B27 ;ALLOW ADVICE (NOT IMPLEMENTED)
|
||||
TT%DAM==:3B29 ;DATA MODE
|
||||
.TTBIN==:0 ;BINARY
|
||||
.TTASC==:1 ;ASCII
|
||||
.TTATO==:2 ;ASCII AND TRANSLATE OUTPUT ONLY
|
||||
.TTATE==:3 ;ASCII AND TRANSLATE ECHOS ONLY
|
||||
TT%UOC==:1B30 ;UPPER CASE OUTPUT CONTROL
|
||||
TT%LIC==:1B31 ;LOWER CASE INPUT CONTROL
|
||||
TT%DUM==:3B33 ;DUPLEX MODE
|
||||
.TTFDX==:0 ;FULL DUPLEX
|
||||
.TT0DX==:1 ;NOT USED, RESERVED
|
||||
.TTHDX==:2 ;HALF DUPLEX (CHARACTER)
|
||||
.TTLDX==:3 ;LINE HALF DUPLEX
|
||||
TT%PGM==:1B34 ;PAGE MODE
|
||||
TT%CAR==:1B35 ;CARRIER STATE
|
||||
|
||||
;DIRECTORY PROTECTION DEFINITIONS (3 6-BIT FIELDS: OWNER, GROUP, WORLD)
|
||||
|
||||
DP%RD==:40 ;READING DIRECTORY IS ALLOWED
|
||||
DP%CN==:10 ;CONNECT TO DIR, OR CHANGE PROT/ACCOUNT
|
||||
DP%CF==:4 ;CREATING FILES IN DIR IS ALLOWED
|
||||
|
||||
;FILE PROTECTION DEFINITIONS (3 6-BIT FIELDS: OWNER, GROUP, WORLD)
|
||||
|
||||
FP%DIR==:2 ;DIRECTORY LISTING
|
||||
FP%APP==:4 ;APPEND
|
||||
FP%EX==:10 ;EXECUTE
|
||||
FP%WR==:20 ;WRITE
|
||||
FP%RD==:40 ;READ
|
||||
|
||||
|
||||
;INPUT AND OUTPUT IDENTIFIERS
|
||||
|
||||
.PRIIN==:100 ;PRIMARY INPUT
|
||||
.PRIOU==:101 ;PRIMARY OUTPUT
|
||||
.NULIO==:377777 ;NULL DESIGNATOR
|
||||
.CTTRM==:777777 ;JOB'S CONTROLLING TERMINAL
|
||||
.DVDES==:600000 ;UNIVERSAL DEVICE CODE
|
||||
.TTDES==:400000 ;UNIVERSAL TERMINAL CODE
|
||||
|
||||
;MAGTAPE DEVICE STATUS BITS
|
||||
|
||||
MT%ILW==:1B18 ;ILLEGAL WRITE
|
||||
MT%DVE==:1B19 ;DEVICE ERROR
|
||||
MT%DAE==:1B20 ;DATA ERROR
|
||||
MT%SER==:1B21 ;SUPPRESS ERROR RECOVERY PROCEDURES
|
||||
MT%EOF==:1B22 ;EOF (FILE MARK)
|
||||
MT%IRL==:1B23 ;INCORRECT RECORD LENGTH
|
||||
MT%BOT==:1B24 ;BEGINNING OF TAPE
|
||||
MT%EOT==:1B25 ;END OF TAPE
|
||||
MT%EVP==:1B26 ;EVEN PARITY
|
||||
MT%DEN==:3B28 ;DENSITY (0 IS 'NORMAL')
|
||||
.MTLOD==:1 ;LOW DENSITY (200 BPI)
|
||||
.MTMED==:2 ;MEDIUM DENSITY (556 BPI)
|
||||
.MTHID==:3 ;HIGH DENSITY (800 BPI)
|
||||
MT%CCT==:7B31 ;CHARACTER COUNTER
|
||||
|
||||
;DEVICE DATA MODES
|
||||
|
||||
.DMASC==:1 ;ASCII
|
||||
.DMIMG==:10 ;IMAGE
|
||||
.DMIMB==:13 ;IMAGE BINARY
|
||||
.DMBIN==:14 ;BINARY
|
||||
|
||||
;DEFINED PSI CHANNELS
|
||||
|
||||
RADIX 5+5
|
||||
|
||||
.ICAOV==:6 ;ARITHMETIC OVERFLOW
|
||||
.ICFOV==:7 ;FLOATING OVERFLOW
|
||||
.ICPOV==:9 ;PDL OVERFLOW
|
||||
.ICEOF==:10 ;END OF FILE
|
||||
.ICDAE==:11 ;DATA ERROR
|
||||
.ICTOD==:14 ;TIME OF DAY (NOT IMPLEMENTED)
|
||||
.ICILI==:15 ;ILLEG INSTRUCTION
|
||||
.ICIRD==:16 ;ILLEGAL READ
|
||||
.ICIWR==:17 ;ILLEGAL WRITE
|
||||
.ICIEX==:18 ;ILLEGAL EXECUTE (NOT IMPLEMENTED)
|
||||
.ICIFT==:19 ;INFERIOR FORK TERMINATION
|
||||
.ICMSE==:20 ;MACHINE SIZE EXCEEDED
|
||||
.ICTRU==:21 ;TRAP TO USER (NOT IMPLEMENTED)
|
||||
.ICNXP==:22 ;NONEXISTENT PAGE REFERENCED
|
||||
|
||||
;TERMINAL TYPE NUMBERS
|
||||
|
||||
.TT33==:0 ;MODEL 33
|
||||
.TT35==:1 ;MODEL 35
|
||||
.TT37==:2 ;MODEL 37
|
||||
.TTEXE==:3 ;EXECUPORT
|
||||
.ttdm==:11 ; Datamedia
|
||||
.tthp==:6 ; [SRI] HP2640A
|
||||
.TTDEF==:8 ;DEFAULT
|
||||
.TTIDL==:9 ;IDEAL
|
||||
.TTV05==:10 ;VT05
|
||||
.TTL30==:12 ;LA30
|
||||
.TTG40==:13 ;GT40
|
||||
.TTL36==:14 ;LA36
|
||||
.TTV52==:15 ;VT52
|
||||
|
||||
|
||||
;DEFINED TERMINAL CODES
|
||||
|
||||
.TICBK==:0 ;BREAK
|
||||
.TICCA==:1 ;^A
|
||||
.TICCB==:2 ;^B
|
||||
.TICCC==:3 ;^C
|
||||
.TICCD==:4 ;^D
|
||||
.TICCE==:5 ;^E
|
||||
.TICCF==:6 ;^F
|
||||
.TICCG==:7 ;^G
|
||||
.TICCH==:8 ;^H
|
||||
.TICCI==:9 ;^I
|
||||
.TICCJ==:10 ;^J
|
||||
.TICCK==:11 ;^K
|
||||
.TICCL==:12 ;^L
|
||||
.TICCM==:13 ;^M
|
||||
.TICCN==:14 ;^N
|
||||
.TICCO==:15 ;^O
|
||||
.TICCP==:16 ;^P
|
||||
.TICCQ==:17 ;^Q
|
||||
.TICCR==:18 ;^R
|
||||
.TICCS==:19 ;^S
|
||||
.TICCT==:20 ;^T
|
||||
.TICCU==:21 ;^U
|
||||
.TICCV==:22 ;^V
|
||||
.TICCW==:23 ;^W
|
||||
.TICCX==:24 ;^X
|
||||
.TICCY==:25 ;^Y
|
||||
.TICCZ==:26 ;^Z
|
||||
.TICES==:27 ;ESC
|
||||
.TICRB==:28 ;RUBOUT
|
||||
.TICSP==:29 ;SPACE
|
||||
.TICRF==:30 ;CARRIER OFF
|
||||
|
||||
RADIX 8
|
||||
|
||||
;CAPABILITIES
|
||||
|
||||
SC%CTC==:1B0 ;CONTROL-C
|
||||
SC%GTB==:1B1 ;GETAB
|
||||
SC%MMN==:1B2 ;MAP MONITOR
|
||||
SC%LOG==:1B3 ;LOGGING FUNCTIONS
|
||||
SC%MPP==:1B4 ;MAP PRIVILEGED PAGES
|
||||
SC%SDV==:1B5 ;SPECIAL DEVICES
|
||||
|
||||
SC%SUP==:1B9 ;SUPERIOR ACCESS
|
||||
|
||||
SC%FRZ==:1B17 ;FREEZE ON TERMINATING CONDITIONS
|
||||
|
||||
SC%WHL==:1B18 ;WHEEL
|
||||
SC%OPR==:1B19 ;OPERATOR
|
||||
SC%CNF==:1B20 ;CONFIDENTIAL INFORMATION ACCESS
|
||||
SC%MNT==:1B21 ;MAINTENANCE
|
||||
SC%IPC==:1B22 ;IPCF PRIVILEGES
|
||||
SC%ENQ==:1B23 ;ENQ/DEQ PRIVILEGES
|
||||
SC%NWZ==:1B24 ;TOPS20AN ;NET WIZARD PRIVILEGES (ASNSQ, ETC.)
|
||||
SC%NAS==:1B25 ;TOPS20AN ;NETWORK ABSOLUTE SOCKET PRIVILEGE
|
||||
|
||||
;DDBMOD WORD BIT DEFINITIONS
|
||||
|
||||
MD%FO==:1B0 ;FILES ONLY DIRECTORY
|
||||
MD%SA==:1B1 ;STRING ACCOUNT ALLOWED
|
||||
MD%RLM==:1B2 ;REPEAT LOGIN MESSAGE
|
||||
|
||||
;FDB DEFINITIONS
|
||||
|
||||
FB%TMP==:1B0 ;FILE IS TEMPORARY
|
||||
FB%PRM==:1B1 ;FILE IS PERMANENT
|
||||
FB%NEX==:1B2 ;FILE DOES NOT HAVE AN EXTENSION YET
|
||||
FB%DEL==:1B3 ;FILE IS DELETED
|
||||
FB%NXF==:1B4 ;FILE IS NONEXISTENT
|
||||
FB%LNG==:1B5 ;FILE IS A LONG FILE
|
||||
FB%SHT==:1B6 ;FILE HAS COMPRESSED PAGE TABLE
|
||||
|
||||
FB%DIR==:1B7 ;FILE IS A DIRECTORY FILE
|
||||
FB%NOD==:1B8 ;FILE IS NOT TO BE DUMPED BY BACKUP SYSTEM
|
||||
FB%BAT==:1B9 ;FILE HAS AT LEAST ONE BAD PAGE
|
||||
|
||||
;6 Begin addition
|
||||
fb%eph==1b17
|
||||
fb%und==1b10
|
||||
;6 End
|
||||
; IN IT
|
||||
FB%FCF==:17B17 ;FILE CLASS FIELD
|
||||
.FBNRM==:0 ;NON-RMS
|
||||
.FBRMS==:1 ;RMS FILES
|
||||
|
||||
.FBHDR==:0 ;HEADER WORD
|
||||
.FBCTL==:1 ;FLAGS
|
||||
.FBEXL==:2 ;LINK TO FDB OF NEXT EXTENSION
|
||||
.FBADR==:3 ;DISK ADDRESS OF INDEX BLOCK
|
||||
.FBPRT==:4 ;PROTECTION OF THE FILE
|
||||
.FBCRE==:5 ;TIME AND DATE OF LAST WRITE
|
||||
.FBUSE==:6 ;LAST WRITER ,, AUTHOR
|
||||
.FBGEN==:7 ;GENERATION ,, DIR #
|
||||
FB%GEN==:777777B17 ;GENERATION NUMBER
|
||||
.FBDRN==:7 ;GENERATION ,, DIR #
|
||||
FB%DRN==:777777 ;DIR NUMBER
|
||||
.FBACT==:10 ;ACCOUNT
|
||||
.FBBYV==:11 ;RETENTION+BYTE SIZE+MODE ,, # OF PAGES
|
||||
FB%RET==:77B5 ;RETENTION COUNT
|
||||
FB%BSZ==:77B11 ;BYTE SIZE
|
||||
FB%MOD==:17B17 ;LAST OPENF MODE
|
||||
FB%PGC==:777777 ;PAGE COUNT
|
||||
.FBSIZ==:12 ;EOF POINTER
|
||||
.FBCRV==:13 ;TIME AND DATE OF CREATION OF FILE
|
||||
.FBWRT==:14 ;TIME AND DATE OF LAST USER WRITE
|
||||
.FBREF==:15 ;TIME AND DATE OF LAST NON-WRITE ACCESS
|
||||
.FBCNT==:16 ;# OF WRITES ,, # OF REFERENCES
|
||||
.FBBK0==:17 ;BACKUP WORDS (5)
|
||||
.FBBK1==:20
|
||||
.FBBK2==:21
|
||||
.FBBK3==:22
|
||||
.FBBK4==:23
|
||||
.FBUSW==:24 ;USER SETTABLE WORD
|
||||
|
||||
.FBLEN==:25 ;LENGTH OF THE FDB
|
||||
|
||||
|
||||
;***********************************************
|
||||
;GENERAL FIELD AND VALUE DEFINITIONS
|
||||
;USED BY TOPS20AN JSYS'S
|
||||
;***********************************************
|
||||
|
||||
;STATES OF A CONNECTION IN ARPANET NCP
|
||||
; RETURNED IN B0-B3 OF GDSTS ON A NET CONNECTION
|
||||
; ALSO AVAILABLE IN A GETAB, BUT THAT'S NOT THE PREFERRED WAY
|
||||
; TO READ THEM, IF YOU HAVE A JFN FOR THE CONNECTION.
|
||||
|
||||
.NSCZD==:01 ;CLOSED
|
||||
.NSPND==:02 ;PENDING
|
||||
.NSLSN==:03 ;LISTENING
|
||||
.NSRCR==:04 ;REQUEST FOR CONNECTION RECEIVED
|
||||
.NSCW1==:05 ;CLOSE WAIT SUB ONE (NCP CLOSE)
|
||||
.NSRCS==:06 ;REQUEST FOR CONNECTION SENT
|
||||
.NSOPN==:07 ;OPENED
|
||||
.NSCSW==:10 ;CLOSE WAIT (NCP CLOSE)
|
||||
.NSDTW==:11 ;FINAL DATA WAIT
|
||||
.NSRF1==:12 ;RFNM WAIT SUB ONE (NORMAL NCP CLOSE)
|
||||
|
||||
.NSCSW==:13 ;CLOSE WAIT (PROGRAM CLOSE)
|
||||
.NSRF2==:14 ;RFNM WAIT SUB TWO (UNEXPECTED NCP CLOSE)
|
||||
|
||||
.NSFRE==:16 ;FREE
|
||||
BIN
src/e142/mqrepl._ej
Normal file
BIN
src/e142/mqrepl._ej
Normal file
Binary file not shown.
BIN
src/e142/nabstr._ej
Normal file
BIN
src/e142/nabstr._ej
Normal file
Binary file not shown.
1071
src/e142/nemacs.
Normal file
1071
src/e142/nemacs.
Normal file
File diff suppressed because it is too large
Load Diff
785
src/e142/nemacs.com
Normal file
785
src/e142/nemacs.com
Normal file
@@ -0,0 +1,785 @@
|
||||
(FILECREATED " 3-Feb-79 15:21:46" ("compiled on " <RUBENSTEIN>NEMACS.;11) (2 . 2
|
||||
))
|
||||
(FILECREATED " 3-Feb-79 15:21:16" <RUBENSTEIN>NEMACS.;11 29497 changes to:
|
||||
START.EMACS previous date: "27-Jan-79 17:19:41" <RUBENSTEIN>NEMACS.;9)
|
||||
,, BINARY
|
||||
-. (B ,>,> GBx,^/,,~(VARIABLE-VALUE-CELL X . 3)
|
||||
(VARIABLE-VALUE-CELL Y . 7)
|
||||
(MKN BHC ENTERF)h`
|
||||
BINARYMODE BINARY
|
||||
-.^" ,>,>^"(BF,>,>^" @@#+ + + ABx,^/ ,^/@$+ + + Z,~0(KNIL BHC ENTER0)
|
||||
8
|
||||
CF BINARY
|
||||
-.ZB,~(VARIABLE-VALUE-CELL NAME . 3)
|
||||
EMACS.GETDEF
|
||||
(ENTERF)
|
||||
CP BINARY
|
||||
|
||||
-.Z2B+ZXBZ,<,<$Z3B+-,+,<ZDZ3B+3B+-,+,<,<,,<Z D,<ZD,<[
|
||||
,B,<ZD ,~,<D
|
||||
,~Z+MX(VARIABLE-VALUE-CELL X . 37)
|
||||
(VARIABLE-VALUE-CELL LASTWORD . 8)
|
||||
(VARIABLE-VALUE-CELL EMACS.TEMP.FILE . 41)
|
||||
PRINT
|
||||
"(SETPROPLIST "
|
||||
PRIN3
|
||||
QUOTE
|
||||
PRIN4
|
||||
1
|
||||
SPACES
|
||||
DUMPX
|
||||
")
|
||||
|
||||
"
|
||||
DOWN
|
||||
"No editable property list: "
|
||||
ERROR
|
||||
(ALIST2 LIST2 SKNNM SKLA KT KNIL ENTERF)
|
||||
`80
|
||||
CV BINARY
|
||||
-.Z2B+ZXBZ,<,<$ZB3B+,<ZDZ,<ZD,<Z
|
||||
DZ BB,<ZD ,~Z
|
||||
,<,<$,~t5l`(VARIABLE-VALUE-CELL X . 34)
|
||||
(VARIABLE-VALUE-CELL LASTWORD . 8)
|
||||
(VARIABLE-VALUE-CELL EMACS.TEMP.FILE . 30)
|
||||
PRINT
|
||||
GETTOPVAL
|
||||
NOBIND
|
||||
"(RPAQQ "
|
||||
PRIN3
|
||||
PRIN4
|
||||
1
|
||||
SPACES
|
||||
DUMPX
|
||||
")
|
||||
|
||||
"
|
||||
DOWN
|
||||
" has no value."
|
||||
ERROR
|
||||
(KT KNIL ENTERF)`0
|
||||
DISPLAY.IN.ECHO.AND.DIVE BINARY
|
||||
|
||||
-.
|
||||
,<ZDZ,<ZD,<ZD,<
|
||||
ZD,<
|
||||
,<$,~<(VARIABLE-VALUE-CELL LIST . 8)
|
||||
(VARIABLE-VALUE-CELL EMACS.TEMP.FILE . 14)
|
||||
"MM^R Two Windows
|
||||
MMSELECT BUFFERPRINT
|
||||
HK
|
||||
I"
|
||||
PRIN3
|
||||
CONCAT
|
||||
APPLY
|
||||
"
|
||||
0J
|
||||
QWINDOW 2 SIZE-3%"N 3-QWINDOW 2 SIZEMM^R GROW WINDOW'
|
||||
MM^R OTHER WINDOW
|
||||
MM& MULTI-WINDOW REFRESH"
|
||||
DOWN
|
||||
((DOWN T) . 0)
|
||||
RETEVAL
|
||||
(ENTERF)
|
||||
DOWN BINARY
|
||||
1&0-.0&@*,~Z,,XB ,<Z3B+ " $+
|
||||
Z,,\ BZ,<,<*$+^" ,>&,>Z2B+^" $+, ,^/@+ + + Z,<,<,<,<+,<*,XB ,Z1B+#,<-,<$-,<.".Z,<,<,<,<,<*,XB
|
||||
+ /ZB/Z,~DD)\ (VARIABLE-VALUE-CELL NEGATE.ARG.FLG . 12)
|
||||
(VARIABLE-VALUE-CELL EMACS.TEMP.FILE . 23)
|
||||
(VARIABLE-VALUE-CELL EMACS.ARG.LOC . 10)
|
||||
(VARIABLE-VALUE-CELL CLEAR.SCREEN.NUMBER . 30)
|
||||
(VARIABLE-VALUE-CELL LASTEMACS . 69)
|
||||
(VARIABLE-VALUE-CELL EMACS.EXTRAC . 54)
|
||||
(VARIABLE-VALUE-CELL DUMP.SCREEN.AMOUNT . 72)
|
||||
(NIL VARIABLE-VALUE-CELL TEMP . 19)
|
||||
0
|
||||
SETFILEPTR
|
||||
START
|
||||
SUBSYS2
|
||||
GET.EMACS.BUFFER
|
||||
"
|
||||
Illegal exit from EMACS. Exit from EMACS only with meta-Z.
|
||||
(The gap is not closed.) Returning to EMACS.
|
||||
"
|
||||
PRIN1
|
||||
3000
|
||||
DISMISS
|
||||
EMACS.RETURN
|
||||
DUMP.SCREEN
|
||||
(ASZ KT BHC GUNBOX FIXT KNIL MKN FGFPTR ENTERF) H0`" !xPH
|
||||
DUMP.SCREEN BINARY
|
||||
%$-.@ ,~Z3B+ !Z2B+^" ,>,>Z2B+^" $+, ,^/@+ + + ZB"XB ,>,> ,^//,XB,<,<"$#3B+Z"XBZ,<,<Z,<ZH#Z,~2D@@(VARIABLE-VALUE-CELL N . 37)
|
||||
(VARIABLE-VALUE-CELL DISPLAYTERMFLG . 6)
|
||||
(VARIABLE-VALUE-CELL FANCY.DRIBBLE.FILE . 51)
|
||||
(VARIABLE-VALUE-CELL CLEAR.SCREEN.NUMBER . 16)
|
||||
(NIL VARIABLE-VALUE-CELL TEMP . 56)
|
||||
(NIL VARIABLE-VALUE-CELL TEMP1 . 54)
|
||||
DRIBBLEFILE
|
||||
GETEOFPTR
|
||||
0
|
||||
LESSP
|
||||
COPYBYTES
|
||||
(KT ASZ MKN BHC GUNBOX FIXT KNIL ENTERF)X@0`
|
||||
DUMPX BINARY
|
||||
! -.Z-,+Z2B+[-,+[[2B+[Z-,+[Z[-,+[
|
||||
Z[[2B+,<ZD[ZZ,<ZD,<ZD[Z[ZB
|
||||
,<
|
||||
ZD,~ZB
|
||||
,~d"
|
||||
H(VARIABLE-VALUE-CELL X . 52)
|
||||
(VARIABLE-VALUE-CELL EMACS.TEMP.FILE . 49)
|
||||
DEFINEQ
|
||||
"(DEFINEQ ("
|
||||
PRIN3
|
||||
PRIN4
|
||||
" "
|
||||
DUMPX1
|
||||
"))
|
||||
|
||||
"
|
||||
(KNIL SKLST ENTERF)x 0
|
||||
DUMPX1 BINARY
|
||||
Q>O-.>,<A"A,<@B ,~,<AZ,<,,Z,XBXB`,<D,<D,<@E`+5ZZFXBZBG,<@G +3,<GZ,<,,Z,XBXB`,<I,<D,<@E`+*ZZFXB,<J"J3B+!@K+!Z,<,<K,<K,<L(JZ,~+(ZLZ,,<@@ +(Z,<,<KZFMZ,~Zw}XB8Z,~2B+,ZMXB[`XB,<GZ`Z[DNZ,3B+2 N,~Z`,~ZwXB8Z,~2B+7ZMXB0[`XB-,<AZ`Z[DNZ73B+= N,~Z`,~TVU6O%bb(VARIABLE-VALUE-CELL X . 74)
|
||||
(VARIABLE-VALUE-CELL DEF . 77)
|
||||
(VARIABLE-VALUE-CELL RESETVARSLST . 112)
|
||||
(VARIABLE-VALUE-CELL EMACS.TEMP.FILE . 27)
|
||||
(VARIABLE-VALUE-CELL PRETTYPRINTMACROS . 68)
|
||||
79
|
||||
LINELENGTH
|
||||
(VARIABLE-VALUE-CELL OLDVALUE . 34)
|
||||
NIL
|
||||
NIL
|
||||
(NIL VARIABLE-VALUE-CELL RESETSTATE . 118)
|
||||
((DUMMY) . 0)
|
||||
INTERNAL
|
||||
(0 . 1)
|
||||
(0 . 1)
|
||||
(0 . 1)
|
||||
ERRORSET
|
||||
OUTFILE
|
||||
(VARIABLE-VALUE-CELL OLDVALUE . 0)
|
||||
NIL
|
||||
NIL
|
||||
(NIL VARIABLE-VALUE-CELL RESETSTATE . 0)
|
||||
((DUMMY) . 0)
|
||||
PPRIND
|
||||
GETD
|
||||
(1000 VARIABLE-VALUE-CELL FORCEIN . 0)
|
||||
0
|
||||
(((* . GETCOMMENT) (QUOTE . MAKE.QUOTE)) . 0)
|
||||
((* . GETCOMMENT) . 0)
|
||||
PRINTDEF
|
||||
ERROR
|
||||
APPLY
|
||||
ERROR!
|
||||
(KT CF KNIL CONS CONSNL LIST2 ENTERF)5(
|
||||
<h18(p#Hx0
|
||||
DWN BINARY
|
||||
-.Z,<,<$,<ZD ,~X(VARIABLE-VALUE-CELL EMACS.TEMP.FILE . 8)
|
||||
0
|
||||
SETFILEPTR
|
||||
"
|
||||
|
||||
"
|
||||
PRIN3
|
||||
DOWN
|
||||
(ENTER0)
|
||||
E! BINARY
|
||||
3)2-.)Z-,+@++Z"XB ,>(,> ,^/3b+Z`,~ , .",XB++'@,+'Z,,XB,<ZB-B-,A"?,>(,>ZB..Bx,^/."[A" 0B+Zp+ZB.+/Z,,,<Z,<,</$/D03B+&Z,<ZD0 ,+,~,<1"1,~"!h
|
||||
`@(VARIABLE-VALUE-CELL N . 14)
|
||||
(VARIABLE-VALUE-CELL EMACS.MAP.FILE . 71)
|
||||
(VARIABLE-VALUE-CELL EMACS.READ.TABLE . 44)
|
||||
(VARIABLE-VALUE-CELL EMACS.Z . 64)
|
||||
NIL
|
||||
(NIL VARIABLE-VALUE-CELL I . 26)
|
||||
E.
|
||||
(NIL VARIABLE-VALUE-CELL OLDLOC . 73)
|
||||
PEEKC
|
||||
CHCON1
|
||||
GETREADTABLE
|
||||
READC
|
||||
4
|
||||
DIFFERENCE
|
||||
LESSP
|
||||
SETFILEPTR
|
||||
((8) . 0)
|
||||
PACKC
|
||||
(IUNBOX KNIL FGFPTR MKN BHC ASZ SKNM ENTERF)P8
|
||||
XhX0
|
||||
E. BINARY
|
||||
S?P-. ?@A+>@B+Z,<ZDB,~XB,<C,<ZFC,<D"D,<@E +",<DZ,<,,Z,XBXB`,<G,<G,<@H`+ZZIXBZ,<,<$JZw~XB8Z,~2B+ZJXB[`XB,<DZ`Z[DKZ3B+! K,~Z`,~ZBLXB",<L"D,<@M +=,<DZ
|
||||
,<,,Z,XB)XB`,<O,<G,<@H`+4ZZIXBZ#,<,<$JZw~XB8Z,~2B+6ZJXB
|
||||
[`XB*,<DZ`Z[DKZ53B+< K,~Z`,~Z0,~,<O"P,~"',*Dak5!(VARIABLE-VALUE-CELL EMACS.MAP.FILE . 9)
|
||||
(VARIABLE-VALUE-CELL EMACS.READ.TABLE . 11)
|
||||
(VARIABLE-VALUE-CELL LISPXHISTORY . 17)
|
||||
(VARIABLE-VALUE-CELL RESETVARSLST . 109)
|
||||
(NIL VARIABLE-VALUE-CELL TEMP . 122)
|
||||
(T VARIABLE-VALUE-CELL NORMALCOMMENTSFLG . 0)
|
||||
READ
|
||||
_
|
||||
PROMPTCHAR
|
||||
((3 . 4) . 0)
|
||||
PRINTLEVEL
|
||||
(VARIABLE-VALUE-CELL OLDVALUE . 79)
|
||||
NIL
|
||||
NIL
|
||||
(NIL VARIABLE-VALUE-CELL RESETSTATE . 115)
|
||||
((DUMMY) . 0)
|
||||
INTERNAL
|
||||
(0 . 1)
|
||||
(0 . 1)
|
||||
(0 . 1)
|
||||
ERRORSET
|
||||
PRINT
|
||||
ERROR
|
||||
APPLY
|
||||
ERROR!
|
||||
LISPXEVAL
|
||||
((3 . 4) . 0)
|
||||
(VARIABLE-VALUE-CELL OLDVALUE . 0)
|
||||
NIL
|
||||
NIL
|
||||
(NIL VARIABLE-VALUE-CELL RESETSTATE . 0)
|
||||
((DUMMY) . 0)
|
||||
((8) . 0)
|
||||
PACKC
|
||||
(KT CF CONS CONSNL LIST2 KNIL ENTER0)@2/P0*x;P-0
|
||||
EDIT.DRIBBLE.FILE BINARY
|
||||
-. B,<,<,<&,<
|
||||
ZD
|
||||
Z,<ZD
|
||||
,<ZD
|
||||
,<",~45(VARIABLE-VALUE-CELL EMACS.TEMP.FILE . 17)
|
||||
(VARIABLE-VALUE-CELL FANCY.DRIBBLE.FILE . 12)
|
||||
DRIBBLE
|
||||
IOFILE
|
||||
"MMSelect BufferDRIBBLE
|
||||
ER"
|
||||
PRIN3
|
||||
"HK
|
||||
^A
|
||||
ZJ
|
||||
-1MM^R New Window"
|
||||
DOWN
|
||||
(KT ENTER0)(@
|
||||
EMACS. BINARY
|
||||
-.ZB,< D,~@(VARIABLE-VALUE-CELL DUMP.SCREEN.AMOUNT . 3)
|
||||
DUMP.SCREEN
|
||||
DOWN
|
||||
E.
|
||||
RETFROM
|
||||
(ENTER0)
|
||||
EMACS.?= BINARY
|
||||
5-4-.-@.,~Z,<ZD.XB2B/+ Z,<ZD.XBB/3B+*Z,<B0-,+Z
|
||||
B0,+&Z
|
||||
B0,<,<,<,<Zw~-,+Zw+&,<@0 +Z,<[2B+Z+Z1,,,~XBp-,+$Zw3B+ ZpQD+!ZpXBw [2D+"XBw[w~XBw~+/,<Z1,D2Z2,,++Z3,B3Z,~(!0$@ 3 (VARIABLE-VALUE-CELL EMACS.MAP.FILE . 13)
|
||||
(VARIABLE-VALUE-CELL EMACS.READ.TABLE . 15)
|
||||
(NIL VARIABLE-VALUE-CELL NAME . 30)
|
||||
RATOM
|
||||
%(
|
||||
GETD
|
||||
ARGLIST
|
||||
(VARIABLE-VALUE-CELL ARGLIST . 47)
|
||||
","
|
||||
"]"
|
||||
NCONC
|
||||
"["
|
||||
"Not a function."
|
||||
DISPLAY.IN.ECHO.AND.DIVE
|
||||
(CONS21 BHC SKLST CONSS1 CONSNL SKNLST KNIL ENTER0) pX(,p8
|
||||
-@
|
||||
(
|
||||
|
||||
EMACS.GETDEF BINARY
|
||||
ZHW-.H@J(
|
||||
,~Z2B+ZXBZ,<,<$LZBMXB-,+,<MZ,<,<,,BN N,~Z
|
||||
,<,<O$O3B+,<MZ,<,<,<O$O,,BN N,~ZBPZXB3B+F,<,<P$OXB2B+%,<Z,<,<Q$OZ[,<,<,<(QZ,<,<P$OXBZ,<Z",<,<P$O[Z[Z[[DRXB3B+DZ&,<,<Q$OZ[XB-,<,<$L,<RZDS,<SZ2DSZ0,<Z4DS,<TZ6DS[+Z,<Z7DS,<TZ:DS[8[,<[<ZDU,<Z;DS,<UZ@DS,<"N,~,<VZ%DV+G,<WZDDVZ,~ S
|
||||
d,FA@IAZ4j](VARIABLE-VALUE-CELL NAME . 141)
|
||||
(VARIABLE-VALUE-CELL LASTWORD . 11)
|
||||
(VARIABLE-VALUE-CELL EMACS.TEMP.FILE . 131)
|
||||
(NIL VARIABLE-VALUE-CELL DEF . 17)
|
||||
(NIL VARIABLE-VALUE-CELL FILE . 106)
|
||||
(NIL VARIABLE-VALUE-CELL SPOT . 124)
|
||||
(NIL VARIABLE-VALUE-CELL MAP . 73)
|
||||
(NIL VARIABLE-VALUE-CELL WHEREIS . 0)
|
||||
PRINT
|
||||
VIRGINFN
|
||||
DEFINEQ
|
||||
DUMPX
|
||||
DOWN
|
||||
EXPR
|
||||
GETP
|
||||
WHEREIS
|
||||
FILEMAP
|
||||
FILEDATES
|
||||
LOADFNS
|
||||
ASSOC
|
||||
"[0E[FNE]ZJ.U0
|
||||
I(DEFINEQ "
|
||||
PRIN3
|
||||
"ER"
|
||||
"
|
||||
"
|
||||
"FSIFACCESS"
|
||||
DIFFERENCE
|
||||
"FY
|
||||
I)
|
||||
|
||||
|
||||
0FSDVERSION
|
||||
Q0J
|
||||
.,ZFSBOUNDARIES
|
||||
F+
|
||||
0:F
|
||||
:F
|
||||
"
|
||||
"No Definition Found For"
|
||||
ERROR
|
||||
"No Definition Found. "
|
||||
(ALIST2 LIST2 SKLST KT KNIL ENTERF)X
|
||||
C "x -(P
|
||||
EMACS.P BINARY
|
||||
4$2-.($,<'ZD'@(+!ZB(,<@) ,~,<(Z,<,,Z,XB
|
||||
XB`,<+,<+,<@,`+ZZ-XB@.+Z,<ZD.,~,<ZD'Zw~XB8Z,~2B+Z/XB[`XB,<(Z`Z[D/Z3B+ 0,~Z`,~,<0ZD',<1,<1$2,~*
|
||||
*AD&(VARIABLE-VALUE-CELL EMACS.TEMP.FILE . 67)
|
||||
(VARIABLE-VALUE-CELL EMACS.P.PRINT.LEVEL . 9)
|
||||
(VARIABLE-VALUE-CELL RESETVARSLST . 53)
|
||||
(VARIABLE-VALUE-CELL EMACS.MAP.FILE . 36)
|
||||
(VARIABLE-VALUE-CELL EMACS.READ.TABLE . 38)
|
||||
"MM^R Two Windows
|
||||
MMSELECT BUFFERPRINT
|
||||
HK
|
||||
I"
|
||||
PRIN3
|
||||
(T VARIABLE-VALUE-CELL PLVLFILEFLG . 0)
|
||||
PRINTLEVEL
|
||||
(VARIABLE-VALUE-CELL OLDVALUE . 16)
|
||||
NIL
|
||||
NIL
|
||||
(NIL VARIABLE-VALUE-CELL RESETSTATE . 59)
|
||||
((DUMMY) . 0)
|
||||
INTERNAL
|
||||
(0 . 1)
|
||||
(0 . 1)
|
||||
(0 . 1)
|
||||
ERRORSET
|
||||
(T VARIABLE-VALUE-CELL NORMALCOMMENTSFLG . 0)
|
||||
READ
|
||||
ERROR
|
||||
APPLY
|
||||
ERROR!
|
||||
"
|
||||
0J
|
||||
QWINDOW 2 SIZE-3%"N 3-QWINDOW 2 SIZEMM^R GROW WINDOW'
|
||||
MM^R OTHER WINDOW
|
||||
MM& MULTI-WINDOW REFRESH"
|
||||
DOWN
|
||||
((DOWN T) . 0)
|
||||
RETEVAL
|
||||
(KT CF KNIL CONS CONSNL LIST2 ENTER0)p`8(
|
||||
EMACS.PP BINARY
|
||||
D1B-.(1Z,<ZD3@4+/Z,,XB,<ZB5B6,A"?,>0,>ZB6.Bx,^/."[A" 0B+Zp+ZB7+/Z,,,<Z,<,<7$8D83B+-Z,<ZD3,<9,<,<@9`+!ZZ;XBZ,<ZD;+XB2B+),<<,<$<,<="=Z,<,<>$3,<>,<?$?+Z!B@Z%B@Z*B@+,<>,<A$?,~,<A"B,~P
|
||||
@:(#sz_0(VARIABLE-VALUE-CELL EMACS.MAP.FILE . 62)
|
||||
(VARIABLE-VALUE-CELL EMACS.BEGV . 5)
|
||||
(VARIABLE-VALUE-CELL EMACS.READ.TABLE . 64)
|
||||
(VARIABLE-VALUE-CELL EMACS.Z . 42)
|
||||
(VARIABLE-VALUE-CELL EMACS.TEMP.FILE . 87)
|
||||
SETFILEPTR
|
||||
(NIL VARIABLE-VALUE-CELL OLDLOC . 51)
|
||||
(NIL VARIABLE-VALUE-CELL TEMP . 83)
|
||||
(T VARIABLE-VALUE-CELL NORMALCOMMENTSFLG . 0)
|
||||
PEEKC
|
||||
CHCON1
|
||||
GETREADTABLE
|
||||
READC
|
||||
4
|
||||
DIFFERENCE
|
||||
LESSP
|
||||
((DUMMY) . 0)
|
||||
(0 . 1)
|
||||
(0 . 1)
|
||||
(0 . 1)
|
||||
ERRORSET
|
||||
READ
|
||||
"Unbalanced Sexpression!
|
||||
"
|
||||
PRIN1
|
||||
3000
|
||||
DISMISS
|
||||
0
|
||||
DOWN
|
||||
((DOWN) . 0)
|
||||
RETEVAL
|
||||
DUMPX
|
||||
TERPRI
|
||||
((DOWN) . 0)
|
||||
((8) . 0)
|
||||
PACKC
|
||||
(KT CONSNL CF BHC IUNBOX KNIL MKN FGFPTR ENTER0)H h8
|
||||
#HpH
|
||||
EMACS.RETURN BINARY
|
||||
-.Z,<ZD[B,~ (VARIABLE-VALUE-CELL EMACS.FSEXIT.ARG . 3)
|
||||
(VARIABLE-VALUE-CELL EMACS.RETURN.ALIST . 5)
|
||||
SASSOC
|
||||
EVAL
|
||||
(ENTER0)
|
||||
ENABLE.CONTROL.C.CAPABILITY BINARY
|
||||
-.,<Z,<,<,<,<$H,~x(VARIABLE-VALUE-CELL OURPROCESS . 4)
|
||||
105
|
||||
0
|
||||
131072
|
||||
,,
|
||||
JSYS
|
||||
(ENTER0)
|
||||
FLUSH.EMACS BINARY
|
||||
=/;-.0/Z2Z7@7ZZ-,+ Z2Z7@7ZZB3Z3Z7@7Z3B4+Z-,+B43B+ZB5Z5Z7@7Z3B4+Z-,+B43B+ZB5Z6Z7@7Z3B4+
|
||||
Z-,+
|
||||
B43B+
|
||||
,<"6,<7,<,<@7`+'ZZ9XBZ,,<ZD9Z,~,<:,<,<@7`+/ZZ9XBZ,,<,<:$9+,~VVkJC(VARIABLE-VALUE-CELL EMACS.MAP.FILE . 31)
|
||||
(VARIABLE-VALUE-CELL EMACS.TEMP.FILE . 46)
|
||||
(VARIABLE-VALUE-CELL FANCY.DRIBBLE.FILE . 55)
|
||||
(VARIABLE-VALUE-CELL OUR.BLOCK.START . 72)
|
||||
(VARIABLE-VALUE-CELL EMACS.BLK.SIZE . 75)
|
||||
(VARIABLE-VALUE-CELL EMACS.AC.BLK.START . 88)
|
||||
LASTEMACS
|
||||
KFORK
|
||||
EMACS.MAP.FILE
|
||||
NOBIND
|
||||
OPENP
|
||||
CLOSEF
|
||||
EMACS.TEMP.FILE
|
||||
FANCY.DRIBBLE.FILE
|
||||
DRIBBLE
|
||||
((DUMMY) . 0)
|
||||
(0 . 1)
|
||||
(0 . 1)
|
||||
(0 . 1)
|
||||
ERRORSET
|
||||
RELBLK
|
||||
((DUMMY) . 0)
|
||||
1
|
||||
(CONSNL KT GUNBOX CF KNIL SKLA SKI KNOB ENTER0)/'-X8#)!
|
||||
hxP`X(8@
|
||||
GET.EMACS.BUFFER BINARY
|
||||
-.( Z,<ZDZ,<ZD3B+
|
||||
Z,<ZDZXBZ,<ZD,~E(VARIABLE-VALUE-CELL EMACS.BEG . 4)
|
||||
(VARIABLE-VALUE-CELL EMACS.Z . 18)
|
||||
(VARIABLE-VALUE-CELL EMACS.MAP.FILE.EOF . 19)
|
||||
(VARIABLE-VALUE-CELL EMACS.MAP.FILE . 20)
|
||||
(VARIABLE-VALUE-CELL EMACS.PT . 22)
|
||||
SET.EMACS.VARS
|
||||
MAP.BYTES
|
||||
GREATERP
|
||||
SETFILEPTR
|
||||
(KNIL ENTER0)
|
||||
HK BINARY
|
||||
-.,<",~"HK"
|
||||
TECO
|
||||
(ENTER0)
|
||||
INFO BINARY
|
||||
-.,<",~"MMINFO"
|
||||
TECO
|
||||
(ENTER0)
|
||||
MAKE.QUOTE BINARY
|
||||
|
||||
-.[-,+ [Z-,+ [[2B+ ,<[ZD,~Z
|
||||
[,,~J(VARIABLE-VALUE-CELL X . 20)
|
||||
'
|
||||
PACK*
|
||||
QUOTE
|
||||
(CONS KNIL SKLA SKLST ENTERF)
|
||||
MAP.BYTES BINARY
|
||||
-.@,~ZBXB ,>,>ZB, ,^/3b+Z`,~Z,<ZD2B+Z,<Z,<ZFZZ,XB .",XB+I(VARIABLE-VALUE-CELL START . 6)
|
||||
(VARIABLE-VALUE-CELL END . 12)
|
||||
(VARIABLE-VALUE-CELL MAPPED.PAGES . 37)
|
||||
(VARIABLE-VALUE-CELL LASTEMACS . 28)
|
||||
(VARIABLE-VALUE-CELL EMACS.MAP.FILE.JFN . 32)
|
||||
NIL
|
||||
(NIL VARIABLE-VALUE-CELL I . 41)
|
||||
PAGE.OF.BYTE
|
||||
MEMBER
|
||||
MAP.PROCESS.TO.FILE
|
||||
(MKN CONS KNIL BHC IUNBOX ENTERF)
|
||||
MAP.PROCESS.TO.FILE BINARY
|
||||
-.,<Z,<ZD,<Z,<ZD,<,<,<$H,<Z,<ZD,<Z,<Z
|
||||
D,<,<,<$H,~B|!<(VARIABLE-VALUE-CELL PROCESS . 24)
|
||||
(VARIABLE-VALUE-CELL PAGE . 26)
|
||||
(VARIABLE-VALUE-CELL JFN . 19)
|
||||
46
|
||||
,,
|
||||
61440
|
||||
0
|
||||
JSYS
|
||||
61440
|
||||
(ENTERF)
|
||||
PAGE.OF.BYTE BINARY
|
||||
|
||||
-.@,~ &",XB &" ,XB0B+
|
||||
."+
|
||||
(B{,,~(VARIABLE-VALUE-CELL BYTE . 10)
|
||||
(NIL VARIABLE-VALUE-CELL QUO . 20)
|
||||
(NIL VARIABLE-VALUE-CELL REM . 14)
|
||||
(ASZ MKN ENTERF)x
|
||||
PUTSTRING BINARY
|
||||
1*0-.*@+ +(ZXBZ"XBZ,<ZB-,.",D-3B+Z`,~Z"XB@.+#Z"XB 1b+Z`,~ (B,XB ,>),>Z,<ZB-D-3B+^"+Z,<ZD/B/,GBx,^/,XB .",XB .",XB + ,< (B,\ B #.",XB&+Z,~
|
||||
|
||||
5 (VARIABLE-VALUE-CELL STR . 50)
|
||||
(VARIABLE-VALUE-CELL ADDR . 81)
|
||||
NIL
|
||||
(NIL VARIABLE-VALUE-CELL LOC . 79)
|
||||
(NIL VARIABLE-VALUE-CELL WORD . 72)
|
||||
(NIL VARIABLE-VALUE-CELL CHAR . 64)
|
||||
NCHARS
|
||||
GREATERP
|
||||
NIL
|
||||
(NIL VARIABLE-VALUE-CELL J . 68)
|
||||
NTHCHAR
|
||||
CHCON1
|
||||
(BHC KNIL MKN IUNBOX ASZ ENTERF) "0 hP
|
||||
READ.AC BINARY
|
||||
-.Z2B+^" $+,,>,>Z2B+ ^" $+ , ,^/@8+ + + ,>,> GBx,^/ ,,~(H@(VARIABLE-VALUE-CELL ACN . 30)
|
||||
(VARIABLE-VALUE-CELL PROCESS . 3)
|
||||
(VARIABLE-VALUE-CELL EMACS.AC.BLK.START . 27)
|
||||
(MKN BHC GUNBOX FIXT KNIL ENTERF)8 Hx
|
||||
SET.EMACS.VARS BINARY
|
||||
-. ,XB ,XB ,XB ,XB ,XB ,XB ,XB,<ZDXB,~
|
||||
(VARIABLE-VALUE-CELL EMACS.BEG.LOC . 3)
|
||||
(VARIABLE-VALUE-CELL EMACS.BEG . 6)
|
||||
(VARIABLE-VALUE-CELL EMACS.BEGV.LOC . 7)
|
||||
(VARIABLE-VALUE-CELL EMACS.BEGV . 10)
|
||||
(VARIABLE-VALUE-CELL EMACS.PT.LOC . 11)
|
||||
(VARIABLE-VALUE-CELL EMACS.PT . 14)
|
||||
(VARIABLE-VALUE-CELL EMACS.ZV.LOC . 15)
|
||||
(VARIABLE-VALUE-CELL EMACS.ZV . 18)
|
||||
(VARIABLE-VALUE-CELL EMACS.Z.LOC . 19)
|
||||
(VARIABLE-VALUE-CELL EMACS.Z . 22)
|
||||
(VARIABLE-VALUE-CELL EMACS.EXTRAC.LOC . 23)
|
||||
(VARIABLE-VALUE-CELL EMACS.EXTRAC . 26)
|
||||
(VARIABLE-VALUE-CELL EMACS.MODIFF.LOC . 27)
|
||||
(VARIABLE-VALUE-CELL EMACS.MODIFF . 30)
|
||||
(VARIABLE-VALUE-CELL LASTEMACS . 32)
|
||||
(VARIABLE-VALUE-CELL EMACS.FSEXIT.ARG . 34)
|
||||
3
|
||||
READ.AC
|
||||
(MKN ENTER0)x
|
||||
8 x8
|
||||
SETUP.FANCY.DRIBBLE BINARY
|
||||
-. 3B+Z,XB,~,<"
|
||||
B
|
||||
XBBZBZ,<,<,<&,~P@(VARIABLE-VALUE-CELL FANCY.DRIBBLE.FILE . 17)
|
||||
DRIBBLEFILE
|
||||
LISP.DRIBBLE;-1;T
|
||||
OUTFILE
|
||||
OUTPUT
|
||||
CLOSEF
|
||||
IOFILE
|
||||
DRIBBLE
|
||||
(KT CONSNL KNIL ENTER0)0
|
||||
0
|
||||
SFCOC BINARY
|
||||
-.^" @@%+ + + ,,<^" @@%+ + + ,,,<Z3B+,<,<Z,<[ZH,\,~B(VARIABLE-VALUE-CELL TUPLE . 31)
|
||||
75
|
||||
65
|
||||
JSYS
|
||||
(KNIL ALIST2 MKN ENTERF)
|
||||
h
|
||||
|
||||
START.EMACS BINARY
|
||||
?:-.x@!,~ZB"XB,<#,<#F$,<$,<$,<"%D%,<ZF$Z3B+ &,<&"'B'XB,<ZD(,<(Z
|
||||
D)ZB) ?+ + + ,B*B*XB,<+"+,<(",,XB,<,,<,<,<,<*-XB
|
||||
Z3B++ B+,<(",,XB,<-ZD.XB #(B{,,<Z$,<,<.$/,(B{,D/3B+,Z"XB+-Z"XB+B,,XB@0 +DZ"XBZ`-,+3+CZXBZ4,<Z1,< .,>,>^",>,> &ABx,^/GBx,^/,D/ ,\,[`XB` 5.",XB@+1Z`,~Z",< 9(B{,D22B+I^"+I,,>,>Z,< 6(B{,D22B+O^"+P, ,^/,>,>,>,>,<2,<3$22B+W^"+W, ,^/,^/+ + + Z-,<,<-$/3B+xZD,< E(B{.",D22B+d^"+e,,>,>ZJ,< K(B{.",D22B+k^"+l, ,^/,>,>,>,>,<3,<3$22B+s^"+s, ,^/,^/+ + + Z_2B+z^"+{,,>,>,<(Z`,<,<4$/D22B+^"+, ,^/ B+ + + ,<4"'B'XBB)ZB5Z"XBZB5XBZXBZ,<,<6$6 7Z,,<,<($7,<"8Z
|
||||
,<,<8,<9&9Z,<,<8,<9&9Z,~_2>p7H'eE(0 (
|
||||
B] P
|
||||
uTj:D4s@(VARIABLE-VALUE-CELL FILERDTBL . 6)
|
||||
(VARIABLE-VALUE-CELL EMACS.READ.TABLE . 18)
|
||||
(VARIABLE-VALUE-CELL LASTEMACS . 240)
|
||||
(VARIABLE-VALUE-CELL EMACS.TEMP.FILE . 298)
|
||||
(VARIABLE-VALUE-CELL MAX.EMACS.INPUT . 29)
|
||||
(VARIABLE-VALUE-CELL EMACS.AC.BLK.START . 67)
|
||||
(VARIABLE-VALUE-CELL EMACS.BUFFER.BLOCK . 249)
|
||||
(VARIABLE-VALUE-CELL EMACS.BLK.SIZE . 184)
|
||||
(VARIABLE-VALUE-CELL OUR.BLOCK.START . 206)
|
||||
(VARIABLE-VALUE-CELL OURPROCESS . 204)
|
||||
(VARIABLE-VALUE-CELL EMACS.MAP.FILE . 293)
|
||||
(VARIABLE-VALUE-CELL EMACS.MAP.FILE.EOF . 275)
|
||||
(VARIABLE-VALUE-CELL EMACS.MAP.FILE.JFN . 278)
|
||||
(VARIABLE-VALUE-CELL MAPPED.PAGES . 280)
|
||||
(VARIABLE-VALUE-CELL CLEAR.SCREEN.NUMBER . 281)
|
||||
(NIL VARIABLE-VALUE-CELL TEMP . 0)
|
||||
(NIL VARIABLE-VALUE-CELL NAME . 60)
|
||||
(NIL VARIABLE-VALUE-CELL RSCAN.BLK . 286)
|
||||
COPYREADTABLE
|
||||
3
|
||||
((MACRO IMMEDIATE (LAMBDA (FL RDTBL) (ERROR "End of EMACS buffer!"))) . 0)
|
||||
SETSYNTAX
|
||||
'
|
||||
GETREADTABLE
|
||||
GETSYNTAX
|
||||
FLUSH.EMACS
|
||||
EMACS.TEMP;-1;T
|
||||
OUTFILE
|
||||
OUTPUT
|
||||
SETFILEPTR
|
||||
1
|
||||
SPACES
|
||||
CLOSEF
|
||||
SIXBIT
|
||||
MKATOM
|
||||
LISP
|
||||
SETNM
|
||||
GETBLK
|
||||
<SUBSYS>EMACS.SAV
|
||||
SUBSYS2
|
||||
2
|
||||
READ.AC
|
||||
9
|
||||
PLUS
|
||||
EQP
|
||||
((EMACS.BEG.LOC EMACS.BEGV.LOC EMACS.PT.LOC EMACS.GPT.LOC EMACS.ZV.LOC
|
||||
EMACS.Z.LOC EMACS.EXTRAC.LOC EMACS.RESTART.LOC EMACS.ARG.LOC EMACS.MODIFF.LOC) .
|
||||
0)
|
||||
NIL
|
||||
(NIL VARIABLE-VALUE-CELL VAR . 105)
|
||||
(NIL VARIABLE-VALUE-CELL I . 132)
|
||||
,,
|
||||
53248
|
||||
0
|
||||
53248
|
||||
7
|
||||
EMACS.MAP;-1;T
|
||||
IOFILE
|
||||
OPNJFN
|
||||
REAL
|
||||
ECHOCONTROL
|
||||
SETUP.FANCY.DRIBBLE
|
||||
RELBLK
|
||||
TERPRI
|
||||
CLOSEALL
|
||||
NO
|
||||
WHENCLOSE
|
||||
(GUNBOX SET BHC SKNLST ASZ IUNBOX MKN KNIL KT ENTER0)8vXn(Y
|
||||
=@0 1X,8t
|
||||
HeP )i(MpB`/ & hy j8_
|
||||
`N +XH8(
|
||||
STIW BINARY
|
||||
-.^"}@@=+ + + ,,<Z3B+^"},>,>Z2B+^" $+
|
||||
, ,^/@>+ + + ,\,~(H(VARIABLE-VALUE-CELL W . 19)
|
||||
(BHC GUNBOX FIXT KNIL MKN ENTERF)pXH0
|
||||
SUBSYS1 BINARY
|
||||
UBR-.(B@E,~Z-,+ GZXB GXB HXB+
|
||||
ZXB[ZXB[ [ZXBZ
|
||||
BG,<@H ,~,<GZ,<,,Z,XBXB`,<J,<K,<@K`+9ZZMXBZBH,<@M +7,<HZ,<,,Z,XBXB`,<O,<K,<@K`+.ZZMXBZ3B+' PZ ,<Z,<Z,<ZHP@G@H,Zw|XB8Z,~2B+0ZQXB[`XB
|
||||
,<HZ`Z[DQZ03B+6 R,~Z`,~Zw~XB8Z,~2B+;ZQXB4[`XB1,<GZ`Z[DQZ;3B+A R,~Z`,~2P$*+5F`1 1 @(VARIABLE-VALUE-CELL THREE . 22)
|
||||
(VARIABLE-VALUE-CELL INCOMFILE . 80)
|
||||
(VARIABLE-VALUE-CELL OUTCOMFILE . 82)
|
||||
(VARIABLE-VALUE-CELL ENTRYPOINTFLG . 84)
|
||||
(VARIABLE-VALUE-CELL BINARYMODE . 74)
|
||||
(VARIABLE-VALUE-CELL RESETVARSLST . 120)
|
||||
(NIL VARIABLE-VALUE-CELL FORK . 78)
|
||||
(NIL VARIABLE-VALUE-CELL TIW . 26)
|
||||
(NIL VARIABLE-VALUE-CELL COC . 50)
|
||||
ENABLE.CONTROL.C.CAPABILITY
|
||||
STIW
|
||||
SFCOC
|
||||
(VARIABLE-VALUE-CELL OLDVALUE . 57)
|
||||
NIL
|
||||
NIL
|
||||
(NIL VARIABLE-VALUE-CELL RESETSTATE . 126)
|
||||
((DUMMY) . 0)
|
||||
INTERNAL
|
||||
(0 . 1)
|
||||
(0 . 1)
|
||||
(0 . 1)
|
||||
ERRORSET
|
||||
(VARIABLE-VALUE-CELL OLDVALUE . 0)
|
||||
NIL
|
||||
NIL
|
||||
(NIL VARIABLE-VALUE-CELL RESETSTATE . 0)
|
||||
((DUMMY) . 0)
|
||||
BINARYMODE
|
||||
SUBSYS0
|
||||
ERROR
|
||||
APPLY
|
||||
ERROR!
|
||||
(KT ALIST3 CF KNIL CONS CONSNL LIST2 SKLA ENTERF).-$:X/h"h
|
||||
0h
|
||||
SUBSYS2 BINARY
|
||||
$#-.(@!,~Z,<Z,<Z,<Z,<ZJ!XB ,>,>Z2B+
|
||||
^" $+
|
||||
,@@.+ + + ABx,^/1B+@@@<+ + + ,<"""Z
|
||||
,<,<,<,<,<*!XB+Z,~ ,$(VARIABLE-VALUE-CELL THREE . 6)
|
||||
(VARIABLE-VALUE-CELL INCOMFILE . 8)
|
||||
(VARIABLE-VALUE-CELL OUTCOMFILE . 10)
|
||||
(VARIABLE-VALUE-CELL ENTRYPOINTFLG . 12)
|
||||
(VARIABLE-VALUE-CELL BINARYMODE . 14)
|
||||
(NIL VARIABLE-VALUE-CELL FORKTHREE . 57)
|
||||
SUBSYS1
|
||||
1000
|
||||
DISMISS
|
||||
(KT BHC GUNBOX FIXT KNIL ENTERF)80`P0
|
||||
TECO BINARY
|
||||
|
||||
|
||||
-.
|
||||
@,~,<ZDZ,<ZD,<ZD,<"
|
||||
Z,~#((VARIABLE-VALUE-CELL MESS . 9)
|
||||
(VARIABLE-VALUE-CELL EMACS.TEMP.FILE . 14)
|
||||
(NIL VARIABLE-VALUE-CELL DISPLAYTERMFLG . 0)
|
||||
"
|
||||
F+
|
||||
0:F
|
||||
:F
|
||||
"
|
||||
PRIN3
|
||||
"
|
||||
MM^R Exit To LISP"
|
||||
DOWN
|
||||
(KNIL KT ENTERF)
|
||||
|
||||
WRITE.RSCAN BINARY
|
||||
-.Z,<ZD
|
||||
(B ,>,> GBx,^/@@ + + + ,,~A`P(VARIABLE-VALUE-CELL STR . 3)
|
||||
(VARIABLE-VALUE-CELL RSCAN.BLK . 11)
|
||||
PUTSTRING
|
||||
(MKN BHC ENTERF)
|
||||
(PRETTYCOMPRINT NEMACSCOMS)
|
||||
(RPAQQ NEMACSCOMS ((FNS * NEMACSFNS) (VARS * NEMACSVARS) (P (PUTD (QUOTE SUBSYS0
|
||||
) (VIRGINFN (QUOTE SUBSYS)))) (ADDVARS (ERRORTYPELST (16 (COND ((AND (NEQ (QUOTE
|
||||
NOBIND) (GETATOMVAL (QUOTE EMACS.MAP.FILE))) (EQ (CADR ERRORMESS)
|
||||
EMACS.MAP.FILE)) (ERROR "End of EMACS buffer!")) ((AND (NEQ (QUOTE NOBIND) (
|
||||
GETATOMVAL (QUOTE EMACS.TEMP.FILE))) (EQ (CADR ERRORMESS) EMACS.TEMP.FILE)) (
|
||||
ERROR "End of EMACS temporary file!")))))) (DECLARE: DONTEVAL@LOAD
|
||||
DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML)))))
|
||||
(RPAQQ NEMACSFNS (,, BINARYMODE CF CP CV DISPLAY.IN.ECHO.AND.DIVE DOWN
|
||||
DUMP.SCREEN DUMPX DUMPX1 DWN E! E. EDIT.DRIBBLE.FILE EMACS. EMACS.?=
|
||||
EMACS.GETDEF EMACS.P EMACS.PP EMACS.RETURN ENABLE.CONTROL.C.CAPABILITY
|
||||
FLUSH.EMACS GET.EMACS.BUFFER HK INFO MAKE.QUOTE MAP.BYTES MAP.PROCESS.TO.FILE
|
||||
PAGE.OF.BYTE PUTSTRING READ.AC SET.EMACS.VARS SETUP.FANCY.DRIBBLE SFCOC
|
||||
START.EMACS STIW SUBSYS1 SUBSYS2 TECO WRITE.RSCAN))
|
||||
(RPAQQ NEMACSVARS ((DUMP.SCREEN.AMOUNT 500) EMACS.P.PRINT.LEVEL
|
||||
EMACS.RETURN.ALIST OURPROCESS MAX.EMACS.INPUT (LASTEMACS NIL) (
|
||||
CLEAR.SCREEN.NUMBER 30) (BL (CHARACTER CLEAR.SCREEN.NUMBER))))
|
||||
(RPAQ DUMP.SCREEN.AMOUNT 500)
|
||||
(RPAQQ EMACS.P.PRINT.LEVEL (2 . 7))
|
||||
(RPAQQ EMACS.RETURN.ALIST ((1000 EMACS.) (1001 EMACS.?=) (1002 EMACS.P) (1003
|
||||
EMACS.PP)))
|
||||
(RPAQQ OURPROCESS 131072)
|
||||
(RPAQQ MAX.EMACS.INPUT 896000)
|
||||
(RPAQ LASTEMACS NIL)
|
||||
(RPAQ CLEAR.SCREEN.NUMBER 30)
|
||||
(RPAQ BL (CHARACTER CLEAR.SCREEN.NUMBER))
|
||||
(PUTD (QUOTE SUBSYS0) (VIRGINFN (QUOTE SUBSYS)))
|
||||
(ADDTOVAR ERRORTYPELST (16 (COND ((AND (NEQ (QUOTE NOBIND) (GETATOMVAL (QUOTE
|
||||
EMACS.MAP.FILE))) (EQ (CADR ERRORMESS) EMACS.MAP.FILE)) (ERROR
|
||||
"End of EMACS buffer!")) ((AND (NEQ (QUOTE NOBIND) (GETATOMVAL (QUOTE
|
||||
EMACS.TEMP.FILE))) (EQ (CADR ERRORMESS) EMACS.TEMP.FILE)) (ERROR
|
||||
"End of EMACS temporary file!")))))
|
||||
(PRETTYCOMPRINT NEMACSCOMS)
|
||||
(RPAQQ NEMACSCOMS ((FNS * NEMACSFNS) (VARS * NEMACSVARS) (P (PUTD (QUOTE SUBSYS0
|
||||
) (VIRGINFN (QUOTE SUBSYS)))) (ADDVARS (ERRORTYPELST (16 (COND ((AND (NEQ (QUOTE
|
||||
NOBIND) (GETATOMVAL (QUOTE EMACS.MAP.FILE))) (EQ (CADR ERRORMESS)
|
||||
EMACS.MAP.FILE)) (ERROR "End of EMACS buffer!")) ((AND (NEQ (QUOTE NOBIND) (
|
||||
GETATOMVAL (QUOTE EMACS.TEMP.FILE))) (EQ (CADR ERRORMESS) EMACS.TEMP.FILE)) (
|
||||
ERROR "End of EMACS temporary file!")))))) (DECLARE: DONTEVAL@LOAD
|
||||
DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA)))))
|
||||
NIL
|
||||
334
src/e142/nemacs.doc
Normal file
334
src/e142/nemacs.doc
Normal file
@@ -0,0 +1,334 @@
|
||||
Documentation of an interface between EMACS and INTERLISP.
|
||||
|
||||
Robert Boyer, August 1978
|
||||
(MMCM provided the solutions to most of the hard problems.)
|
||||
|
||||
0. Advertisement
|
||||
|
||||
Why would anyone want to use EMACS together with Interlisp?
|
||||
|
||||
a. When you are typing to Interlisp, you are already using
|
||||
a text editor, one of the world's worst: it has only delete,
|
||||
control-U, control-W, and control-R (which works poorly).
|
||||
If you use EMACS, you get far more control over your type-in
|
||||
because you can arbitrarily backup and edit. But far more
|
||||
importantly, it becomes very difficult to make parenthesis
|
||||
mistakes: if you type line feed instead of carriage return,
|
||||
the next line is indented to the correct place; when you
|
||||
type a close parenthesis, you see displayed automatically
|
||||
the open parenthesis to which it corresponds.
|
||||
|
||||
b. When you use EDITF, you have to keep doing P commands to
|
||||
see where you are and what you have done. That is probably
|
||||
just right for a 100 baud teletype. But it is silly for a
|
||||
9600 baud display, with its ability to keep constantly
|
||||
before your eyes what you are working on. Until EMACS came,
|
||||
however, the only available display oriented editors working
|
||||
on Datamedia's were for text, not code. Working on LISP
|
||||
code with, say, TV or TVEDIT commands, is arguably worse
|
||||
than using EDITF which knows so much about the structure of
|
||||
LISP sexpressions. But EMACS is approximately as informed
|
||||
about the structure of LISP as is EDITF. And EMACS, besides
|
||||
keeping your work right before your eyes, is far better at
|
||||
the character and single parenthesis level than EDITF. Read
|
||||
about all the control-meta commands in the EMACS
|
||||
documentation. The TECO under EMACS really knows the syntax
|
||||
of LISP (including ', %, and ").
|
||||
|
||||
1. User's Guide To Use The Interface
|
||||
|
||||
To use the interface, start LISP and load the file
|
||||
<BOYER>NEMACS.COM into LISP and call (START.EMACS). When
|
||||
that returns (it takes a cpu second or two), you can edit
|
||||
functions, variables, and property lists with EMACS. To
|
||||
edit a function, invoke the function CF on the name of the
|
||||
function (for example CF(FOO)). The function definition is
|
||||
written into the EMACS buffer surrounded in a (DEFINEQ...).
|
||||
The virtual buffer boundaries are narrowed to the contents
|
||||
of the definition. You are placed in EMACS, where you may
|
||||
edit away. To return to LISP, type meta-z. But first
|
||||
put point at the beginning of the
|
||||
"(DEFINEQ", which can usually be gotten to by control-meta-a
|
||||
or control-<. When you return to LISP nothing has yet
|
||||
happened to your function. But if you execute the function
|
||||
E. (that's E followed by a period to remind you of the TECO
|
||||
point) of no arguments (e.g. "E.]"), then the (modified)
|
||||
DEFINEQ is executed. When you return to LISP, your display
|
||||
is refreshed to contain some of the text it held before the
|
||||
descent into CF. You may resume ordinary LISP interaction
|
||||
now, or you can call CF on another function and it will also
|
||||
be inserted in the buffer (and you will be put down into
|
||||
EMACS again). Again you edit, exit with meta-z, and then
|
||||
you can execute E. if you want. If you wish to pop up to
|
||||
LISP in the middle of an edit, then type meta-z and return
|
||||
to EMACS by invoking (DOWN).
|
||||
|
||||
To edit a variable, use CV. To edit a property list, use
|
||||
CP.
|
||||
|
||||
The foregoing is all you need to know to edit. It may be
|
||||
useful to know a little more. To get rid of an EMACS
|
||||
interface, call (FLUSH.EMACS). To get EMACS to insert into
|
||||
its buffer anything you want, simply write to the file that
|
||||
is the value of the variable EMACS.TEMP.FILE. Then call
|
||||
(DOWN) and the stuff written to the temp file will appear in
|
||||
the buffer at the end (as with the A command). The virtual
|
||||
buffer is narrowed to the text that is inserted. (If
|
||||
nothing has been written to EMACS.TEMP.FILE since the last
|
||||
return to LISP, (DOWN) simply returns you to the state in
|
||||
which you last left EMACS. are returned to lisp. If you
|
||||
execute E.], then the sexp Repeated E.]'s will evaluate
|
||||
through the buffer. If you want to read from the buffer
|
||||
yourself, feel free: the file is named EMACS.MAP.FILE.
|
||||
Upon return to LISP, the file pointer of EMACS.MAP.FILE
|
||||
is set to the point of the EMACS buffer.
|
||||
|
||||
Warning: never close EMACS.TEMP.FILE or EMACS.MAP.FILE "by
|
||||
hand." Use FLUSH.EMACS to get rid of them. CLOSEALL()
|
||||
will not close them, but CLOSEF and CLOSEALL(T) will. A
|
||||
dribble file is used by the interface to refresh the screen.
|
||||
If you are using DRIBBLE when you start using NEMACS, or
|
||||
if you start using DRIBBLE after you start using NEMACS,
|
||||
then the screen refreshment will not occur.
|
||||
|
||||
If you call (DOWN T), then instead of being inserted, the
|
||||
text that would have been inserted upon entry to EMACS is
|
||||
executed (as TECO code, of course).
|
||||
|
||||
|
||||
2. Guide to the implementation.
|
||||
|
||||
START.EMACS creates a fork (via SUBSYS) and opens up two
|
||||
files, the values of the variables EMACS.MAP.FILE and
|
||||
EMACS.TEMP.FILE. EMACS is passed the instruction MMLOAD
|
||||
LIB<BOYER>INTERMACSFSEXIT via the FJ (RSCAN) command.
|
||||
The library INTERMACS contains several EMACS ^R commands.
|
||||
The library initialization initializes the communication
|
||||
between the two forks. The EMACS fork handle is the CAR of
|
||||
LASTEMACS. Whenever control is passed to the EMACS fork,
|
||||
(by a call to DOWN), a teco macro in FS SUPERIOR is invoked,
|
||||
given a single numeric argument. The number's absolute
|
||||
value is the file pointer of EMACS.TEMP.FILE at the time of
|
||||
descent. If the number is positive, then the FSSUPERIOR
|
||||
macro inserts the contents of EMACS.TEMP.FILE (up to the
|
||||
file pointer) at the end of the buffer, narrows the virtual
|
||||
buffer boundaries to the test inserted, and refreshes the
|
||||
screen. If the arg is negative, the stuff that would have
|
||||
been inserted is macroed (in q-register a). Nothing happens
|
||||
if the arg is 0 except that the screen is refreshed. When
|
||||
the FSSUPERIOR macro exits, you are in ordinary EMACS
|
||||
control-r mode.
|
||||
|
||||
Before returning to LISP, the command meta-z closes the gap.
|
||||
Upon return to LISP, we make sure that every page of the
|
||||
current EMACS buffer is PMAPed into a page of EMACS.MAP.FILE
|
||||
(the same page numbers for both). We further set the
|
||||
variables EMACS.BEG, EMACS.PT, and EMACS.Z to the appropriate
|
||||
numbers so that they can serve as file pointers into EMACS.MAP.FILE
|
||||
for the beginning, point, and end of the EMACS buffer.
|
||||
We set the file pointer of EMACS.MAP.FILE to EMACS.PT. That's
|
||||
why E. reads from point. But you can read anywhere from EMACS.BEG
|
||||
to EMACS.Z. You should read with EMACS.READ.TABLE (or a
|
||||
modification thereof that leaves the handling of control-c
|
||||
the same) to catch reading past the end of the buffer by
|
||||
mistake. We place a sequence of four characters (space,
|
||||
control-c, double quote mark, control-c) at the bottom of the
|
||||
buffer (and delete them upon return) to catch unbalanced
|
||||
expression reading. The file pointer of EMACS.TEMP.FILE is
|
||||
set to 0 upon return to LISP.
|
||||
|
||||
The full details of the hook EMACS has for doing these
|
||||
things are found in the last few pages of <INFO>TECORD.
|
||||
|
||||
|
||||
3. Miscellaneous Notes on IO
|
||||
|
||||
The variable DUMP.SCREEN.AMOUNT controls how many characters
|
||||
of the dribble file are written to the screen after
|
||||
returning to LISP from EMACS. Nothing is written unless
|
||||
DISPLAYTERMFLG is non-NIL.
|
||||
|
||||
In the file INTERMACS, the delimiter table (what's in ..D)
|
||||
is fixed to reflect Interlisp (as opposed to the default
|
||||
Maclisp). In particular,
|
||||
|
||||
all control characters except tab, carriage return, and
|
||||
line feed are "OTHER" (i.e. just like ordinary alphabetic letters);
|
||||
|
||||
% quotes the next character,
|
||||
|
||||
" delimits strings (it takes the place of | in Maclisp,
|
||||
which has no strings (on DEC machines), but uses | to
|
||||
delimit weird atoms);
|
||||
|
||||
/,|, and ; have no significance.
|
||||
|
||||
Square brackets mean nothing to EMACS. If you (SETQ #RPARS
|
||||
NIL), then the Interlisp pretty printer (PRINTDEF) will not
|
||||
use square brackets for parentheses, even during MAKEFILE.
|
||||
You can still type them in to LISP. But you should set
|
||||
#RPARS (in your init file, perhaps) because often CF gets
|
||||
the text of a function from your files, where MAKEFILE might
|
||||
have written square brackets. The function would still
|
||||
be editable in EMACS, but the parenthesis commands of
|
||||
EMACS would not respect the square brackets.
|
||||
|
||||
When you are down in EMACS, you can pretty print expressions
|
||||
in two ways. ^R Format Code (on control-meta-g, which may
|
||||
be entered by typing hold-g) will pretty print the
|
||||
expression after point. It works well on small expressions,
|
||||
less well on large. On large expressions, (particularly the
|
||||
on the result of editing previously reasonably formatted
|
||||
expressions), ^R Indent Sexp (control-meta-q) works well.
|
||||
The reason it works well is that it inserts no carriage
|
||||
returns at all, but merely fixes the number of leading
|
||||
spaces on each line. ^R Format Code is a version of the ITS
|
||||
grinder modified to know about %, ", etc.
|
||||
|
||||
If you set NORMALCOMMENTSFLG to NIL and if you print to
|
||||
EMACS.TEMP.FILE yourself, be sure to readjust
|
||||
PRETTYPRINTMACROS by consing (* . GETTCOMMENT) on or you'll
|
||||
get your comments mapped into the EMACS temp file.
|
||||
|
||||
If you set NORMALCOMMENTSFLG to NIL and if you read from
|
||||
EMACS.MAP.FILE yourself, then you should bind
|
||||
NORMALCOMMENTSFLG to NIL during the read.
|
||||
|
||||
When typing into EMACS, your close parentheses will cause
|
||||
the cursor to bounce back to the balancing open parentheses.
|
||||
The cursor will stay there 1 second or until you type
|
||||
another character. To suppress this feature, execute
|
||||
0m.vLISP ) Hack$ in a minibuffer. To get a longer delay,
|
||||
use the integral number of seconds you want instead of 0.
|
||||
To get bouncing to occur only when the corresponding
|
||||
open parenthesis is on the screen, use the
|
||||
negative of the number of seconds.
|
||||
|
||||
|
||||
4. Specification of the Interlisp commands
|
||||
|
||||
START.EMACS[] creates a new fork containing the EMACS editor
|
||||
and returns to LISP.
|
||||
|
||||
DOWN[NEGATE.ARG.FLG] passes control to the EMACS fork. If
|
||||
negate.arg.flg is NIL, then EMACS will insert at the end of
|
||||
the buffer everything in the file EMACS.TEMP.FILE from 0 to
|
||||
the current file pointer. If there is something to insert,
|
||||
then the virtual buffer boundaries are narrowed to what is
|
||||
inserted. (The buffer boundaries can be widened to the
|
||||
whole buffer with ^R Set Bound Full (on control-x-w)). The
|
||||
screen is refreshed. If negate.arg.flg is non-NIL the text
|
||||
that would have been inserted is put in q-register a and
|
||||
executed.
|
||||
All of the following commands that descend to EMACS do so
|
||||
through calls to DOWN. Upon return to LISP, the file pointer
|
||||
of EMACS.TEMP.FILE is set to 0. The screen is refreshed
|
||||
with the last DUMP.SCREEN.AMOUNT characters from the in the
|
||||
dribble file. All the pages of EMACS containing the current
|
||||
EMACS buffer are mapped into the file EMACS.MAP.FILE.
|
||||
EMACS.BEG, EMACS.PT, EMACS.Z, and EMACS.MODIFF are set to
|
||||
the corresponding values in the buffer block (see
|
||||
<INFO>TECORD). EMACS.PT is an appropriate file pointer to
|
||||
use to read from EMACS.MAP.FILE starting at the point. The
|
||||
file pointer of EMACS.MAP.FILE is set to EMACS.PT. An error
|
||||
is caused if EMACS returns to LISP without first closing the
|
||||
gap. (The proper return is via meta-z, but 1F? FSEXIT is
|
||||
sufficient if you want to do it yourself.)
|
||||
|
||||
E.[] executes the sexpression starting at the current point
|
||||
in the EMACS buffer. The execution is recorded as an event
|
||||
on the history list just as if it had been typed into the
|
||||
top level read-print-eval loop. The appearance of the execution
|
||||
on the dribble file is "faked" by printing it to a shallow
|
||||
depth so that when the screen is refreshed, it looks vaguely
|
||||
like you typed something in. But the event is really there,
|
||||
so that ??, REDO, UNDO, etc. all work.
|
||||
|
||||
E![N] executes sexpressions starting at the current point
|
||||
in the EMACS buffer using E. (above). If N is a number,
|
||||
then N sexpressions are read and executed. If N is NIL,
|
||||
then all the sexpressions in the buffer after point are
|
||||
executed.
|
||||
|
||||
CF[FNNAME] writes the definition of a function into the end
|
||||
of the EMACS buffer and dives down to EMACS with point at
|
||||
the beginning of the insertion. The definition is inside a
|
||||
DEFINEQ and hence suitable for later execution with E.[].
|
||||
The definition of the function is fetched much the way that
|
||||
EDITF does except that no spelling correction is attempted.
|
||||
In particular, if fnname is NIL, lastword is used. If
|
||||
fnname has an expr definition, the unadvised, unbroken
|
||||
version is used. If fn does not have a expr definition but
|
||||
does have an EXPR property, that is used. Otherwise, the
|
||||
definition of the function in the first file said to contain
|
||||
it is used. (Using WHEREIS to find it and using filemaps to
|
||||
get it quickly into the EMACS buffer without going through
|
||||
LISP). When CF returns, the function has not been changed at
|
||||
all; to cause the redefinition, use E., E!, (or C-M-Y from
|
||||
TECO).
|
||||
|
||||
CV[X] writes a variable name and definition inside an RPAQQ
|
||||
into the EMACS buffer at the end and descends to EMACS. The
|
||||
variable has not been affected when you return to LISP; to
|
||||
cause the resetting, use E., E!, (or C-M-Y from TECO).
|
||||
|
||||
CP[X] writes a litatom and its property list inside a
|
||||
SETPROPLIST into the EMACS buffer at the end and descends to
|
||||
EMACS. The property list has not been changed when you
|
||||
return to EMACS; to set the property list, use E., E!,
|
||||
(or C-M-Y from TECO).
|
||||
|
||||
TECO[STR] runs the lower level EMACS on the result
|
||||
of PRIN1ing STR and then exits. For example, TECO(HK)
|
||||
clear the EMACS buffer and returns to LISP.
|
||||
|
||||
EDIT.DRIBBLE.FILE[] runs EMACS on the Lisp dribble
|
||||
file in a buffer called DRIBBLE.
|
||||
|
||||
INFO[] runs the INFO program.
|
||||
|
||||
5. The commands available in the EMACS fork.
|
||||
|
||||
Besides the ordinary control-meta commands that are
|
||||
part of EMACS and the linefeed and LISP ) hack that
|
||||
come with EMACS lisp mode, there are a few other commands
|
||||
useful in the Interlisp EMACS interface.
|
||||
|
||||
Meta-z runs the macro ^R Exit to LISP. Simply returns
|
||||
control to LISP after control has been passed to EMACS
|
||||
by DOWN (or CF, CV, or CP which call DOWN). Closes the
|
||||
gap so that LISP can read from the buffer. Places the
|
||||
sequence space, control-c, ", control-c at the end of
|
||||
the buffer to stop reading beyond the end of the buffer.
|
||||
If the new release of TOPS-20 permits the effective
|
||||
setting of the end of file pointer for a file without
|
||||
the necessity of closing it, these characters will not be
|
||||
inserted (eventually).
|
||||
|
||||
Control-p runs the macro ^R Print to Level. Prints into
|
||||
a second window what EDITF prints for the P command. Useful
|
||||
if the current sexpression is bigger than a screen full.
|
||||
To get rid of a second window, you can call ^R One Window,
|
||||
which is hung on ^X-1.
|
||||
|
||||
Control-meta-? runs the macro ^R ARGLIST. Prints into
|
||||
a second window the arglist of the function after point
|
||||
(or after the ( after point if there is one.) On a datamedia,
|
||||
this command is entered by typing hold (control-_) followed
|
||||
by ?. To get rid of a second window, you can call ^R One Window,
|
||||
which is hung on ^X-1.
|
||||
|
||||
Control-meta-y runs the macro ^R UP EVAL. Does an exit
|
||||
up to lisp and then E.'s the expression after point and
|
||||
retfrom's DOWN. Approximately identical to meta-z followed
|
||||
by E.
|
||||
|
||||
Currently, the above 3 commands all work by calling ^R Exit
|
||||
to LISP with an argument. That argument is deposited in
|
||||
AC3 when EMACS exits. When DOWN gets control back, it
|
||||
retrieves the argument and sassoc's down the alist
|
||||
EMACS.RETURN.ALIST. If a pair is found, then the CDR of the
|
||||
pair is LISPXEVALED. After evaluation, or if no pair is
|
||||
found, DOWN refreshes the LISP screen and exits.
|
||||
Control-meta-y, for example does the E. and then retfrom's
|
||||
DOWN.
|
||||
1045
src/e142/nemacs.kl
Normal file
1045
src/e142/nemacs.kl
Normal file
File diff suppressed because it is too large
Load Diff
36
src/e142/newwin.
Normal file
36
src/e142/newwin.
Normal file
@@ -0,0 +1,36 @@
|
||||
!~Filename~:! !New Windowing command!
|
||||
NEWWIN
|
||||
|
||||
!& Setup NEWWIN Library:! !S Setup lib!
|
||||
M.M^R_ New_ Universal_ Argument u.U
|
||||
M.M^R_ Scroll_ Screen/Lines u.V
|
||||
0
|
||||
|
||||
!^R New Universal Argument:! !^R Sets argument or multiplies it by four.
|
||||
Followed by digits, uses them to specify the
|
||||
argument for the command after the digits.
|
||||
Not followed by digits, multiplies the argument by four.!
|
||||
[0 :i0 [1 0fs ^r last !* Set flag to say this is arg-setting command.!
|
||||
< 4,m.i !* loop, reading as many argument characters as follow.!
|
||||
:fi--"e fq0-1; !* Allow a minus sign as first character only.!
|
||||
fs ^R argp # 4 fs ^R argp
|
||||
fi
|
||||
!<!>'
|
||||
:fi f 0123456789-:;
|
||||
fiu1 :i001 > !* Accumulate them as string in Q0.!
|
||||
!* Get here on 1st non-arg char.!
|
||||
fq0 (fs ^R argp & 4)"e
|
||||
fs ^r argp 1 fs ^r argp !* If no digits, act like built-in ^U.!
|
||||
fs ^r expt +1 fs ^r expt '
|
||||
m0 fs ^r arg !* If got some digits, set arg value from them.!
|
||||
fq0 "N fs ^R argp 3 fs ^r argp'
|
||||
|
||||
|
||||
!^R Scroll Screen/lines:! !^R Scrolls forward one screen
|
||||
If given an argument of just "-", scrolls backward 1 screen
|
||||
any other arg scrolls by lines!
|
||||
|
||||
FS ^R ARGP & 6 - 4 "E :@M(M.M^R_ Previous_ Several_ Screens)'
|
||||
FF "E :@M(M.M^R_ Next_ Several_ Screens)'
|
||||
@M(M.M^R_ Next_ Screen)
|
||||
|
||||
38
src/e142/newwin._ej
Normal file
38
src/e142/newwin._ej
Normal file
@@ -0,0 +1,38 @@
|
||||
(W
|
||||
[0+8+FQ(+4)[1
|
||||
0FO10F"G+Q1
|
||||
'W+FQ()+4U1
|
||||
FQ1"L0'
|
||||
,Q1:M(Q1+4(]1]0))
|
||||
m6Chvhu3:Wgocs?I3:bh& Setup NEWWIN LibraryIM.M^R New Universal Argumentu.U
|
||||
M.M^R Scroll Screen/Linesu.V
|
||||
0^R New Universal Argumentc[0:i0[10fs^rlast
|
||||
<4,m.i
|
||||
:fi--"efq0-1;
|
||||
fs^Rargp#4fs^Rargp
|
||||
fi
|
||||
!<!>'
|
||||
:fif0123456789-:;
|
||||
fiu1:i001>
|
||||
fq0(fs^Rargp&4)"e
|
||||
fs^rargp1fs^rargp
|
||||
fs^rexpt+1fs^rexpt'
|
||||
m0fs^rarg
|
||||
fq0"Nfs^Rargp3fs^rargp'
|
||||
^R Scroll Screen/lines}FS^RARGP&6-4"E:@M(M.M^R Previous Several Screens)'
|
||||
FF"E:@M(M.M^R Next Several Screens)'
|
||||
@M(M.M^R Next Screen)
|
||||
~Filename~
|
||||
NEWWIN~DOC~ ~Filename~New Windowing command
|
||||
~DOC~ & Setup NEWWIN LibraryS Setup lib
|
||||
#~DOC~ ^R New Universal ArgumentD^R Sets argument or multiplies it by four.
|
||||
Followed by digits, uses them to specify the
|
||||
argument for the command after the digits.
|
||||
Not followed by digits, multiplies the argument by four.
|
||||
~DOC~ ^R Scroll Screen/lines^R Scrolls forward one screen
|
||||
If given an argument of just "-", scrolls backward 1 screen
|
||||
any other arg scrolls by lines
|
||||
~DIRECTORY~O& Setup NEWWIN Library
|
||||
^R New Universal Argument
|
||||
^R Scroll Screen/lines
|
||||
~INVERT~[1<Q1-1U1Q1FP;>Q1
|
||||
235
src/e142/page.
Normal file
235
src/e142/page.
Normal file
@@ -0,0 +1,235 @@
|
||||
!~Filename~:! !Commands for handling pages intelligently. -*-TECO-*-!
|
||||
PAGE
|
||||
|
||||
!& Setup PAGE Library:! !S Put macros on appropriate characters.!
|
||||
|
||||
0FO..Q PAGE_Setup_Hook[0
|
||||
fq0"G M0'
|
||||
"#
|
||||
M.M^R_Insert_Pagemark u:.X(P) !* Insert Pagemark on ^X P!
|
||||
M.M^R_Goto_Next_Page u:.X(]) !* Goto Next Page on C-X ]!
|
||||
M.M^R_Goto_Previous_Page u:.X([) !* Goto Prev Page on C-X [!
|
||||
M.M^R_Join_Next_Page u:.X(J) !* Join Pages on ^X J !
|
||||
M.M^R_Widen_Bounds u:.X(W) !* Widen Bounds on ^X W !
|
||||
M.M^R_Incremental_Search [0
|
||||
M.M^R_String_Search [1
|
||||
(q.S-q0)*(q.S-Q1)"E !* if Search is on C-S !
|
||||
q.S M.V Real_Search_Macro
|
||||
M.M^R_PAGE_Search u.S !* Then PAGE Search on C-S !
|
||||
M.M^R_PAGE_Reverse_Search u.R !* Reverse Search on C-R!
|
||||
'"# (q..S-q0)*(q..S-q1)"E !* else if Search is on M-S!
|
||||
q..S M.V Real_Search_Macro
|
||||
M.M^R_PAGE_Search u..S !* then PAGE Search on M-S !
|
||||
M.M^R_PAGE_Reverse_Search u..R !* Reverse Search on M-R !
|
||||
'"# FTCannot_find_Search!!!__Send_a_note_to_Rubenstein.''
|
||||
M.M^R_Go_To_Page U..G !* Go to page on C-X C-P !
|
||||
M.M^R_Fill_Region U...G !* Fill Region on C-M-G !
|
||||
'
|
||||
|
||||
0M.LPAGE_Flush_Crlf
|
||||
0M.LCurrent_Page
|
||||
qSet_Mode_Line_Hook[1
|
||||
:i*1 M(M.M&_Set_PAGE_Mode_Line) uSet_Mode_Line_Hook
|
||||
0fo..q TECO_ mode_ hook F"E
|
||||
M.VTECO_ mode_ hook
|
||||
:i*'u1
|
||||
:i*1
|
||||
1uPAGE_ Flush_ Crlf
|
||||
|
||||
uTECO_ mode_ hook
|
||||
|
||||
0fo..q Visit_ File_ Hookf"E
|
||||
M.VVisit_ File_ Hook
|
||||
:i*'u1
|
||||
:i*1
|
||||
M.LCurrent_Page
|
||||
0fo..q PAGE_ Flush_ Crlf M.LPAGE_Flush_Crlf
|
||||
|
||||
uVisit_File_Hook
|
||||
|
||||
0
|
||||
|
||||
!& Set PAGE Mode Line:! !S Add Page <n> onto the mode line, maybe.
|
||||
If given a string argument, appends Page <n> onto the end of the
|
||||
string, if there are buffer bounds in effect, and returns the
|
||||
new string.!
|
||||
|
||||
|
||||
qCurrent_Page"E ' !* if Current Page is 0, return argument!
|
||||
"E :i*' "#' [1 !* if no argument, cons up a blank string!
|
||||
qCurrent_Page :\ [2
|
||||
:I*1_Page_2 (]1 ]2)
|
||||
|
||||
|
||||
!^R Insert Pagemark:! !^R Insert a page mark, leaving new second page current
|
||||
Inserts a formfeed and a crlf, sets the virtual buffer
|
||||
boundaries to be the second half of the old page.!
|
||||
|
||||
13i 10i 12i !* insert a pagemark!
|
||||
qCurrent_Page"N
|
||||
%Current_Page
|
||||
0:M(M.M^R_Goto_Next_Page)'
|
||||
|
||||
!^R Goto Next Page:! !^R Make the next page current.
|
||||
Set the virtual buffer boundaries to the next page. If given
|
||||
a negative argument, goes to previous page.!
|
||||
|
||||
[0 .[1
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
qCurrent_Page"E !* if no virtual bounds then!
|
||||
FF "E 0U0' !* if no args then narrow to current page!
|
||||
0[3
|
||||
0j <%3 !* increment counter!
|
||||
qPAGE_Flush_Crlf"E
|
||||
:s
|
||||
'"#:s
|
||||
|
||||
'; !* Search for page delim, throw ifn found!
|
||||
.-3-Q1;> !* if past point then we're there!
|
||||
q3 uCurrent_Page ]3
|
||||
q1j'
|
||||
qCurrent_Page+q0 [2
|
||||
q2:"G !* if page num is not positive then!
|
||||
0M(M.M^R_Goto_Next_Page) !* set bounds to this page!
|
||||
@FENIB Fs Err' !* generate an error!
|
||||
q0 M(M.M^R_Mark_Page)
|
||||
q2 uCurrent_Page !* Update page number!
|
||||
z-."E M(M.M^R_Widen_Bounds) !* If at end (tried to go to far)!
|
||||
0M(M.M^R_Goto_Next_Page) !* Set bounds to this page!
|
||||
@FENIB FS Err' !* Generate a "NOT IN BUFFER" error!
|
||||
."'N & qPAGE_flush_Crlf"N2c' !* if not at beginning then skip crlf!
|
||||
.(W): !* exchange point and mark!
|
||||
z-."N -3c' !* if not end then back over crlf and ^L!
|
||||
M(M.M^R_Set_Bounds_Region) !* set bounds to this region!
|
||||
1:<q1J>"N BJ' !* go back to where we were if we can!
|
||||
]2 ]1 ]0
|
||||
M(M.M&_Set_Mode_Line)
|
||||
0
|
||||
|
||||
!^R Go to Page:! !^R Go to a specific page, arg is page number.
|
||||
If no arg then go to next page!
|
||||
|
||||
"L -1[0' !* Negative arg -=> Goto previous page!
|
||||
"# FF"N !* if explicit argument!
|
||||
-1[0
|
||||
M(M.M^R_Set_Bounds_Full) !* widen the bounds!
|
||||
1uCurrent_Page
|
||||
0j' !* Jump to the beginning!
|
||||
"# 1[0''
|
||||
Q0 M(M.M^R_Goto_Next_Page) !* get to the right page!
|
||||
0
|
||||
|
||||
!^R PAGE Search:! !C Search that crosses virtual buffer boundaries.
|
||||
Uses ^R Incremental Search or ^R String Search, whichever you had on C-S
|
||||
or M-S when you loaded the PAGE library. See the documentation of
|
||||
whichever search you use for details. You can change the search used by
|
||||
doing, for instance, M.M^R String Search$ u$Real Search Macro$.!
|
||||
|
||||
QReal_ Search_ Macro, @:M(M.M&_ Macro_ on_ Whole_ Buffer)
|
||||
|
||||
!& Macro on whole buffer:! !S Macros its precomma arg on the whole buffer.
|
||||
The post-comma argument and @ flag are passed on to the macro.
|
||||
If Q$Current Page$ is non-zero, then the bounds are widened, the argument
|
||||
is macroed, and the bounds are narrowed again to the current page. Thus,
|
||||
the way to do, say, a search is:
|
||||
M.M^R Incremental Search$, @M(M.M& Macro on Whole Buffer$)!
|
||||
|
||||
F F & 2 "E @FEWNA FS Err' !* if no pre-comma arg, then explode!
|
||||
qCurrent_ Page"E
|
||||
F F & 8 "N @:M()' "# :M()''
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
F F & 8 "N @M()' "# M()'
|
||||
0uCurrent_Page
|
||||
@M(M.M^R_Goto_Next_Page)
|
||||
0
|
||||
|
||||
!^R PAGE Reverse Search:! !C Reverse Search that crosses virtual buffer
|
||||
boundaries. See documentation of ^R PAGE Search for details.!
|
||||
|
||||
-1:M(M.M^R_PAGE_Search)
|
||||
|
||||
!& File Directory:! !S Returns a string pointer to the file directory!
|
||||
|
||||
.[1 0[2 0[3 0[4 [5 [6 [7 [c
|
||||
FS V Z+B "N FS Boundaries u2 u3 !* Remember if we had any bounds!
|
||||
@M(M.M^R_Set_Bounds_Full)'
|
||||
0j
|
||||
q..o [A !* remember our buffer!
|
||||
FS B Cons [B !* and make a scratch buffer!
|
||||
< .,(@f
|
||||
_ L %4 !* Advance over CRLF's, increment page no.!
|
||||
3,Q4 :\ u5
|
||||
1X6
|
||||
QPAGE_ Flush_ Crlf "E
|
||||
:S
|
||||
' "# :S
|
||||
|
||||
'uc
|
||||
qc"E zj').FS Boundaries
|
||||
M(M.MCount_Lines) u7
|
||||
4,q7 :\ u7
|
||||
qB u..o
|
||||
I5_7__6 !* Print the page number!
|
||||
qA u..O
|
||||
0,fs z FS Boundaries
|
||||
qc;>
|
||||
Q1J
|
||||
q2"N Q3, Q2 FS Boundaries'
|
||||
qb u..o HFX* (qA u..o qB FS B Kill)
|
||||
|
||||
|
||||
!Print File Directory:! !C Prints a directory of the file
|
||||
Prints out the first non-blank line on each page, preceded by its
|
||||
page number.!
|
||||
|
||||
M(M.M&_ File_ Directory) [0
|
||||
FTPage__#_Lines___First_Non-blank_Line
|
||||
0
|
||||
]0 0
|
||||
|
||||
|
||||
!Make File Directory:! !Inserts a directory of the file at the beginning
|
||||
Prints out the first non-blank line on each page, preceded by its
|
||||
page number. If given an argument, puts Q$Comment Start$ at the start
|
||||
of each line and Q$Comment End$ at the end!
|
||||
|
||||
M(M.M&_ File_ Directory) [0
|
||||
BJ
|
||||
I0
|
||||
|
||||
FF"N
|
||||
.[1 BJ
|
||||
QComment_ Start [2
|
||||
QComment_ End [3
|
||||
<G2 :L G3 2c .-q1"'L;>
|
||||
]3 ]2 ]1'
|
||||
]0 b,.
|
||||
|
||||
!^R Widen Bounds:! !^R Widen the virtual buffer bounds to include the whole file
|
||||
Calls ^R Set Bounds Full and clears the page number from the mode line.!
|
||||
|
||||
@M(M.M^R_Set_Bounds_Full) !* widen the bounds!
|
||||
0uCurrent_Page
|
||||
:M(M.M&_Set_Mode_Line)
|
||||
|
||||
|
||||
!^R Goto Previous Page:! !^R Make the previous page current.
|
||||
Set the virtual buffer boundaries to the previous page. If given
|
||||
a negative argument, goes to the next page.!
|
||||
|
||||
FF "E -1'"#-' :M(M.M^R_Goto_Next_Page) !* go do it!
|
||||
|
||||
!^R Join Next Page:! !^R Combine two pages together
|
||||
Combines this page with next. If given negative arg,
|
||||
combines previous page with this one.!
|
||||
|
||||
"L BJ
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
."E @FENIB FS Err'
|
||||
"# -3D''
|
||||
"# ZJ
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
Z-."E @FENIB FS Err'
|
||||
"# 3D''
|
||||
0M(M.M^R_Goto_Next_Page)
|
||||
0
|
||||
235
src/e142/page..75
Normal file
235
src/e142/page..75
Normal file
@@ -0,0 +1,235 @@
|
||||
!~Filename~:! !Commands for handling pages intelligently. -*-TECO-*-!
|
||||
PAGE
|
||||
|
||||
!& Setup PAGE Library:! !S Put macros on appropriate characters.!
|
||||
|
||||
0FO..Q PAGE_Setup_Hook[0
|
||||
fq0"G M0'
|
||||
"#
|
||||
M.M^R_Insert_Pagemark u:.X(P) !* Insert Pagemark on ^X P!
|
||||
M.M^R_Goto_Next_Page u:.X(]) !* Goto Next Page on C-X ]!
|
||||
M.M^R_Goto_Previous_Page u:.X([) !* Goto Prev Page on C-X [!
|
||||
M.M^R_Join_Next_Page u:.X(J) !* Join Pages on ^X J !
|
||||
M.M^R_Widen_Bounds u:.X(W) !* Widen Bounds on ^X W !
|
||||
M.M^R_Incremental_Search [0
|
||||
M.M^R_String_Search [1
|
||||
(q.S-q0)*(q.S-Q1)"E !* if Search is on C-S !
|
||||
q.S M.V Real_Search_Macro
|
||||
M.M^R_PAGE_Search u.S !* Then PAGE Search on C-S !
|
||||
M.M^R_PAGE_Reverse_Search u.R !* Reverse Search on C-R!
|
||||
'"# (q..S-q0)*(q..S-q1)"E !* else if Search is on M-S!
|
||||
q..S M.V Real_Search_Macro
|
||||
M.M^R_PAGE_Search u..S !* then PAGE Search on M-S !
|
||||
M.M^R_PAGE_Reverse_Search u..R !* Reverse Search on M-R !
|
||||
'"# FTCannot_find_Search!!!__Send_a_note_to_Rubenstein.''
|
||||
M.M^R_Go_To_Page U..G !* Go to page on C-X C-P !
|
||||
M.M^R_Fill_Region U...G !* Fill Region on C-M-G !
|
||||
'
|
||||
|
||||
0M.LPAGE_Flush_Crlf
|
||||
0M.LCurrent_Page
|
||||
qSet_Mode_Line_Hook[1
|
||||
:i*1 M(M.M&_Set_PAGE_Mode_Line) uSet_Mode_Line_Hook
|
||||
0fo..q TECO_ mode_ hook F"E
|
||||
M.VTECO_ mode_ hook
|
||||
:i*'u1
|
||||
:i*1
|
||||
1uPAGE_ Flush_ Crlf
|
||||
|
||||
uTECO_ mode_ hook
|
||||
|
||||
0fo..q Visit_ File_ Hookf"E
|
||||
M.VVisit_ File_ Hook
|
||||
:i*'u1
|
||||
:i*1
|
||||
M.LCurrent_Page
|
||||
0fo..q PAGE_ Flush_ Crlf M.LPAGE_Flush_Crlf
|
||||
|
||||
uVisit_File_Hook
|
||||
|
||||
0
|
||||
|
||||
!& Set PAGE Mode Line:! !S Add Page <n> onto the mode line, maybe.
|
||||
If given a string argument, appends Page <n> onto the end of the
|
||||
string, if there are buffer bounds in effect, and returns the
|
||||
new string.!
|
||||
|
||||
|
||||
qCurrent_Page"E ' !* if Current Page is 0, return argument!
|
||||
"E :i*' "#' [1 !* if no argument, cons up a blank string!
|
||||
qCurrent_Page :\ [2
|
||||
:I*1_Page_2 (]1 ]2)
|
||||
|
||||
|
||||
!^R Insert Pagemark:! !^R Insert a page mark, leaving new second page current
|
||||
Inserts a formfeed and a crlf, sets the virtual buffer
|
||||
boundaries to be the second half of the old page.!
|
||||
|
||||
13i 10i 12i !* insert a pagemark!
|
||||
qCurrent_Page"N
|
||||
%Current_Page
|
||||
0:M(M.M^R_Goto_Next_Page)'
|
||||
|
||||
!^R Goto Next Page:! !^R Make the next page current.
|
||||
Set the virtual buffer boundaries to the next page. If given
|
||||
a negative argument, goes to previous page.!
|
||||
|
||||
[0 .[1
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
qCurrent_Page"E !* if no virtual bounds then!
|
||||
FF "E 0U0' !* if no args then narrow to current page!
|
||||
0[3
|
||||
0j <%3 !* increment counter!
|
||||
qPAGE_Flush_Crlf"E
|
||||
:s
|
||||
'"#:s
|
||||
|
||||
'; !* Search for page delim, throw ifn found!
|
||||
.-3-Q1;> !* if past point then we're there!
|
||||
q3 uCurrent_Page ]3
|
||||
q1j'
|
||||
qCurrent_Page+q0 [2
|
||||
q2:"G !* if page num is not positive then!
|
||||
0M(M.M^R_Goto_Next_Page) !* set bounds to this page!
|
||||
@FENIB Fs Err' !* generate an error!
|
||||
q0 M(M.M^R_Mark_Page)
|
||||
q2 uCurrent_Page !* Update page number!
|
||||
z-."E M(M.M^R_Widen_Bounds) !* If at end (tried to go to far)!
|
||||
0M(M.M^R_Goto_Next_Page) !* Set bounds to this page!
|
||||
@FENIB FS Err' !* Generate a "NOT IN BUFFER" error!
|
||||
."'N & qPAGE_flush_Crlf"N2c' !* if not at beginning then skip crlf!
|
||||
.(W): !* exchange point and mark!
|
||||
z-."N -3c' !* if not end then back over crlf and ^L!
|
||||
M(M.M^R_Set_Bounds_Region) !* set bounds to this region!
|
||||
1:<q1J>"N BJ' !* go back to where we were if we can!
|
||||
]2 ]1 ]0
|
||||
M(M.M&_Set_Mode_Line)
|
||||
0
|
||||
|
||||
!^R Go to Page:! !^R Go to a specific page, arg is page number.
|
||||
If no arg then go to next page!
|
||||
|
||||
"L -1[0' !* Negative arg -=> Goto previous page!
|
||||
"# FF"N !* if explicit argument!
|
||||
-1[0
|
||||
M(M.M^R_Set_Bounds_Full) !* widen the bounds!
|
||||
1uCurrent_Page
|
||||
0j' !* Jump to the beginning!
|
||||
"# 1[0''
|
||||
Q0 M(M.M^R_Goto_Next_Page) !* get to the right page!
|
||||
0
|
||||
|
||||
!^R PAGE Search:! !C Search that crosses virtual buffer boundaries.
|
||||
Uses ^R Incremental Search or ^R String Search, whichever you had on C-S
|
||||
or M-S when you loaded the PAGE library. See the documentation of
|
||||
whichever search you use for details. You can change the search used by
|
||||
doing, for instance, M.M^R String Search$ u$Real Search Macro$.!
|
||||
|
||||
QReal_ Search_ Macro, @:M(M.M&_ Macro_ on_ Whole_ Buffer)
|
||||
|
||||
!& Macro on whole buffer:! !S Macros its precomma arg on the whole buffer.
|
||||
The post-comma argument and @ flag are passed on to the macro.
|
||||
If Q$Current Page$ is non-zero, then the bounds are widened, the argument
|
||||
is macroed, and the bounds are narrowed again to the current page. Thus,
|
||||
the way to do, say, a search is:
|
||||
M.M^R Incremental Search$, @M(M.M& Macro on Whole Buffer$)!
|
||||
|
||||
F F & 2 "E @FEWNA FS Err' !* if no pre-comma arg, then explode!
|
||||
qCurrent_ Page"E
|
||||
F F & 8 "N @:M()' "# :M()''
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
F F & 8 "N @M()' "# M()'
|
||||
0uCurrent_Page
|
||||
@M(M.M^R_Goto_Next_Page)
|
||||
0
|
||||
|
||||
!^R PAGE Reverse Search:! !C Reverse Search that crosses virtual buffer
|
||||
boundaries. See documentation of ^R PAGE Search for details.!
|
||||
|
||||
-1:M(M.M^R_PAGE_Search)
|
||||
|
||||
!& File Directory:! !S Returns a string pointer to the file directory!
|
||||
|
||||
.[1 0[2 0[3 0[4 [5 [6 [7 [c
|
||||
FS V Z+B "N FS Boundaries u2 u3 !* Remember if we had any bounds!
|
||||
@M(M.M^R_Set_Bounds_Full)'
|
||||
0j
|
||||
q..o [A !* remember our buffer!
|
||||
FS B Cons [B !* and make a scratch buffer!
|
||||
< .,(@f
|
||||
_ L %4 !* Advance over CRLF's, increment page no.!
|
||||
3,Q4 :\ u5
|
||||
1X6
|
||||
QPAGE_ Flush_ Crlf "E
|
||||
:S
|
||||
' "# :S
|
||||
|
||||
'uc
|
||||
qc"E zj').FS Boundaries
|
||||
M(M.MCount_Lines) u7
|
||||
4,q7 :\ u7
|
||||
qB u..o
|
||||
I5__7__6 !* Print the page number!
|
||||
qA u..O
|
||||
0,fs z FS Boundaries
|
||||
qc;>
|
||||
Q1J
|
||||
q2"N Q3, Q2 FS Boundaries'
|
||||
qb u..o HFX* (qA u..o qB FS B Kill)
|
||||
|
||||
|
||||
!Print File Directory:! !C Prints a directory of the file
|
||||
Prints out the first non-blank line on each page, preceded by its
|
||||
page number.!
|
||||
|
||||
M(M.M&_ File_ Directory) [0
|
||||
FTPage__#_Lines___First_Non-blank_Line
|
||||
0
|
||||
]0 0
|
||||
|
||||
|
||||
!Make File Directory:! !Inserts a directory of the file at the beginning
|
||||
Prints out the first non-blank line on each page, preceded by its
|
||||
page number. If given an argument, puts Q$Comment Start$ at the start
|
||||
of each line and Q$Comment End$ at the end!
|
||||
|
||||
M(M.M&_ File_ Directory) [0
|
||||
BJ
|
||||
I0
|
||||
|
||||
FF"N
|
||||
.[1 BJ
|
||||
QComment_ Start [2
|
||||
QComment_ End [3
|
||||
<G2 :L G3 2c .-q1"'L;>
|
||||
]3 ]2 ]1'
|
||||
]0 b,.
|
||||
|
||||
!^R Widen Bounds:! !^R Widen the virtual buffer bounds to include the whole file
|
||||
Calls ^R Set Bounds Full and clears the page number from the mode line.!
|
||||
|
||||
@M(M.M^R_Set_Bounds_Full) !* widen the bounds!
|
||||
0uCurrent_Page
|
||||
:M(M.M&_Set_Mode_Line)
|
||||
|
||||
|
||||
!^R Goto Previous Page:! !^R Make the previous page current.
|
||||
Set the virtual buffer boundaries to the previous page. If given
|
||||
a negative argument, goes to the next page.!
|
||||
|
||||
FF "E -1'"#-' :M(M.M^R_Goto_Next_Page) !* go do it!
|
||||
|
||||
!^R Join Next Page:! !^R Combine two pages together
|
||||
Combines this page with next. If given negative arg,
|
||||
combines previous page with this one.!
|
||||
|
||||
"L BJ
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
."E @FENIB FS Err'
|
||||
"# -3D''
|
||||
"# ZJ
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
Z-."E @FENIB FS Err'
|
||||
"# 3D''
|
||||
0M(M.M^R_Goto_Next_Page)
|
||||
0
|
||||
236
src/e142/page..76
Normal file
236
src/e142/page..76
Normal file
@@ -0,0 +1,236 @@
|
||||
!~Filename~:! !Commands for handling pages intelligently. -*-TECO-*-!
|
||||
PAGE
|
||||
|
||||
!& Setup PAGE Library:! !S Put macros on appropriate characters.!
|
||||
|
||||
0FO..Q PAGE_Setup_Hook[0
|
||||
fq0"G M0'
|
||||
"#
|
||||
M.M^R_Insert_Pagemark u:.X(P) !* Insert Pagemark on ^X P!
|
||||
M.M^R_Goto_Next_Page u:.X(]) !* Goto Next Page on C-X ]!
|
||||
M.M^R_Goto_Previous_Page u:.X([) !* Goto Prev Page on C-X [!
|
||||
M.M^R_Join_Next_Page u:.X(J) !* Join Pages on ^X J !
|
||||
M.M^R_Widen_Bounds u:.X(W) !* Widen Bounds on ^X W !
|
||||
M.M^R_Incremental_Search [0
|
||||
M.M^R_String_Search [1
|
||||
(q.S-q0)*(q.S-Q1)"E !* if Search is on C-S !
|
||||
q.S M.V Real_Search_Macro
|
||||
M.M^R_PAGE_Search u.S !* Then PAGE Search on C-S !
|
||||
M.M^R_PAGE_Reverse_Search u.R !* Reverse Search on C-R!
|
||||
'"# (q..S-q0)*(q..S-q1)"E !* else if Search is on M-S!
|
||||
q..S M.V Real_Search_Macro
|
||||
M.M^R_PAGE_Search u..S !* then PAGE Search on M-S !
|
||||
M.M^R_PAGE_Reverse_Search u..R !* Reverse Search on M-R !
|
||||
'"# FTCannot_find_Search!!!__Send_a_note_to_Rubenstein.''
|
||||
M.M^R_Go_To_Page U..G !* Go to page on C-X C-P !
|
||||
M.M^R_Fill_Region U...G !* Fill Region on C-M-G !
|
||||
'
|
||||
|
||||
0M.LPAGE_Flush_Crlf
|
||||
0M.LCurrent_Page
|
||||
qSet_Mode_Line_Hook[1
|
||||
:i*1 M(M.M&_Set_PAGE_Mode_Line) uSet_Mode_Line_Hook
|
||||
0fo..q TECO_ mode_ hook F"E
|
||||
M.VTECO_ mode_ hook
|
||||
:i*'u1
|
||||
:i*1
|
||||
1uPAGE_ Flush_ Crlf
|
||||
|
||||
uTECO_ mode_ hook
|
||||
|
||||
0fo..q Visit_ File_ Hookf"E
|
||||
M.VVisit_ File_ Hook
|
||||
:i*'u1
|
||||
:i*1
|
||||
M.LCurrent_Page
|
||||
0fo..q PAGE_ Flush_ Crlf M.LPAGE_Flush_Crlf
|
||||
|
||||
uVisit_File_Hook
|
||||
|
||||
0
|
||||
|
||||
!& Set PAGE Mode Line:! !S Add Page <n> onto the mode line, maybe.
|
||||
If given a string argument, appends Page <n> onto the end of the
|
||||
string, if there are buffer bounds in effect, and returns the
|
||||
new string.!
|
||||
|
||||
|
||||
qCurrent_Page"E ' !* if Current Page is 0, return argument!
|
||||
"E :i*' "#' [1 !* if no argument, cons up a blank string!
|
||||
qCurrent_Page :\ [2
|
||||
:I*1_Page_2 (]1 ]2)
|
||||
|
||||
|
||||
!^R Insert Pagemark:! !^R Insert a page mark, leaving new second page current
|
||||
Inserts a formfeed and a crlf, sets the virtual buffer
|
||||
boundaries to be the second half of the old page.!
|
||||
|
||||
13i 10i 12i !* insert a pagemark!
|
||||
qCurrent_Page"N
|
||||
%Current_Page
|
||||
0:M(M.M^R_Goto_Next_Page)'
|
||||
|
||||
!^R Goto Next Page:! !^R Make the next page current.
|
||||
Set the virtual buffer boundaries to the next page. If given
|
||||
a negative argument, goes to previous page.!
|
||||
|
||||
[0 .[1
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
qCurrent_Page"E !* if no virtual bounds then!
|
||||
FF "E 0U0' !* if no args then narrow to current page!
|
||||
0[3
|
||||
0j <%3 !* increment counter!
|
||||
qPAGE_Flush_Crlf"E
|
||||
:s
|
||||
'"#:s
|
||||
|
||||
'; !* Search for page delim, throw ifn found!
|
||||
.-3-Q1;> !* if past point then we're there!
|
||||
q3 uCurrent_Page ]3
|
||||
q1j'
|
||||
qCurrent_Page+q0 [2
|
||||
q2:"G !* if page num is not positive then!
|
||||
0M(M.M^R_Goto_Next_Page) !* set bounds to this page!
|
||||
@FENIB Fs Err' !* generate an error!
|
||||
q0 M(M.M^R_Mark_Page)
|
||||
q2 uCurrent_Page !* Update page number!
|
||||
z-."E M(M.M^R_Widen_Bounds) !* If at end (tried to go to far)!
|
||||
0M(M.M^R_Goto_Next_Page) !* Set bounds to this page!
|
||||
@FENIB FS Err' !* Generate a "NOT IN BUFFER" error!
|
||||
."'N & qPAGE_flush_Crlf"N2c' !* if not at beginning then skip crlf!
|
||||
.(W): !* exchange point and mark!
|
||||
z-."N -3c' !* if not end then back over crlf and ^L!
|
||||
M(M.M^R_Set_Bounds_Region) !* set bounds to this region!
|
||||
1:<q1J>"N BJ' !* go back to where we were if we can!
|
||||
]2 ]1 ]0
|
||||
M(M.M&_Set_Mode_Line)
|
||||
0
|
||||
|
||||
!^R Go to Page:! !^R Go to a specific page, arg is page number.
|
||||
If no arg then go to next page!
|
||||
|
||||
"L -1[0' !* Negative arg -=> Goto previous page!
|
||||
"# FF"N !* if explicit argument!
|
||||
-1[0
|
||||
M(M.M^R_Set_Bounds_Full) !* widen the bounds!
|
||||
1uCurrent_Page
|
||||
0j' !* Jump to the beginning!
|
||||
"# 1[0''
|
||||
Q0 M(M.M^R_Goto_Next_Page) !* get to the right page!
|
||||
0
|
||||
|
||||
!^R PAGE Search:! !C Search that crosses virtual buffer boundaries.
|
||||
Uses ^R Incremental Search or ^R String Search, whichever you had on C-S
|
||||
or M-S when you loaded the PAGE library. See the documentation of
|
||||
whichever search you use for details. You can change the search used by
|
||||
doing, for instance, M.M^R String Search$ u$Real Search Macro$.!
|
||||
|
||||
QReal_ Search_ Macro, @:M(M.M&_ Macro_ on_ Whole_ Buffer)
|
||||
|
||||
!& Macro on whole buffer:! !S Macros its precomma arg on the whole buffer.
|
||||
The post-comma argument and @ flag are passed on to the macro.
|
||||
If Q$Current Page$ is non-zero, then the bounds are widened, the argument
|
||||
is macroed, and the bounds are narrowed again to the current page. Thus,
|
||||
the way to do, say, a search is:
|
||||
M.M^R Incremental Search$, @M(M.M& Macro on Whole Buffer$)!
|
||||
|
||||
F F & 2 "E @FEWNA FS Err' !* if no pre-comma arg, then explode!
|
||||
qCurrent_ Page"E
|
||||
F F & 8 "N @:M()' "# :M()''
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
F F & 8 "N @M()' "# M()'
|
||||
0uCurrent_Page
|
||||
@M(M.M^R_Goto_Next_Page)
|
||||
0
|
||||
|
||||
!^R PAGE Reverse Search:! !C Reverse Search that crosses virtual buffer
|
||||
boundaries. See documentation of ^R PAGE Search for details.!
|
||||
|
||||
-1:M(M.M^R_PAGE_Search)
|
||||
|
||||
!& File Directory:! !S Returns a string pointer to the file directory!
|
||||
|
||||
.[1 0[2 0[3 0[4 [5 [6 [7 [c
|
||||
FS V Z+B "N FS Boundaries u2 u3 !* Remember if we had any bounds!
|
||||
@M(M.M^R_Set_Bounds_Full)'
|
||||
0j
|
||||
q..o [A !* remember our buffer!
|
||||
FS B Cons [B !* and make a scratch buffer!
|
||||
< .,(@f
|
||||
_ L %4 !* Advance over CRLF's, increment page no.!
|
||||
3,Q4 :\ u5
|
||||
1X6
|
||||
QPAGE_ Flush_ Crlf "E
|
||||
:S
|
||||
' "# :S
|
||||
|
||||
'uc
|
||||
qc"E zj').FS Boundaries
|
||||
M(M.MCount_Lines) u7
|
||||
4,q7 :\ u7
|
||||
qB u..o
|
||||
I5_7__ !* Print the page number!
|
||||
0,(fswidth-10)g6
|
||||
qA u..O
|
||||
0,fs z FS Boundaries
|
||||
qc;>
|
||||
Q1J
|
||||
q2"N Q3, Q2 FS Boundaries'
|
||||
qb u..o HFX* (qA u..o qB FS B Kill)
|
||||
|
||||
|
||||
!Print File Directory:! !C Prints a directory of the file
|
||||
Prints out the first non-blank line on each page, preceded by its
|
||||
page number.!
|
||||
|
||||
M(M.M&_ File_ Directory) [0
|
||||
FTPage_Lines__First_Non-blank_Line
|
||||
0
|
||||
]0 0
|
||||
|
||||
|
||||
!Make File Directory:! !Inserts a directory of the file at the beginning
|
||||
Prints out the first non-blank line on each page, preceded by its
|
||||
page number. If given an argument, puts Q$Comment Start$ at the start
|
||||
of each line and Q$Comment End$ at the end!
|
||||
|
||||
M(M.M&_ File_ Directory) [0
|
||||
BJ
|
||||
I0
|
||||
|
||||
FF"N
|
||||
.[1 BJ
|
||||
QComment_ Start [2
|
||||
QComment_ End [3
|
||||
<G2 :L G3 2c .-q1"'L;>
|
||||
]3 ]2 ]1'
|
||||
]0 b,.
|
||||
|
||||
!^R Widen Bounds:! !^R Widen the virtual buffer bounds to include the whole file
|
||||
Calls ^R Set Bounds Full and clears the page number from the mode line.!
|
||||
|
||||
@M(M.M^R_Set_Bounds_Full) !* widen the bounds!
|
||||
0uCurrent_Page
|
||||
:M(M.M&_Set_Mode_Line)
|
||||
|
||||
|
||||
!^R Goto Previous Page:! !^R Make the previous page current.
|
||||
Set the virtual buffer boundaries to the previous page. If given
|
||||
a negative argument, goes to the next page.!
|
||||
|
||||
FF "E -1'"#-' :M(M.M^R_Goto_Next_Page) !* go do it!
|
||||
|
||||
!^R Join Next Page:! !^R Combine two pages together
|
||||
Combines this page with next. If given negative arg,
|
||||
combines previous page with this one.!
|
||||
|
||||
"L BJ
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
."E @FENIB FS Err'
|
||||
"# -3D''
|
||||
"# ZJ
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
Z-."E @FENIB FS Err'
|
||||
"# 3D''
|
||||
0M(M.M^R_Goto_Next_Page)
|
||||
0
|
||||
238
src/e142/page..77
Normal file
238
src/e142/page..77
Normal file
@@ -0,0 +1,238 @@
|
||||
!~Filename~:! !Commands for handling pages intelligently. -*-TECO-*-!
|
||||
PAGE
|
||||
|
||||
!& Setup PAGE Library:! !S Put macros on appropriate characters.!
|
||||
|
||||
0FO..Q PAGE_Setup_Hook[0
|
||||
fq0"G M0'
|
||||
"#
|
||||
M.M^R_Insert_Pagemark u:.X(P) !* Insert Pagemark on ^X P!
|
||||
M.M^R_Goto_Next_Page u:.X(]) !* Goto Next Page on C-X ]!
|
||||
M.M^R_Goto_Previous_Page u:.X([) !* Goto Prev Page on C-X [!
|
||||
M.M^R_Join_Next_Page u:.X(J) !* Join Pages on ^X J !
|
||||
M.M^R_Widen_Bounds u:.X(W) !* Widen Bounds on ^X W !
|
||||
M.M^R_Incremental_Search [0
|
||||
M.M^R_String_Search [1
|
||||
(q.S-q0)*(q.S-Q1)"E !* if Search is on C-S !
|
||||
q.S M.V Real_Search_Macro
|
||||
M.M^R_PAGE_Search u.S !* Then PAGE Search on C-S !
|
||||
M.M^R_PAGE_Reverse_Search u.R !* Reverse Search on C-R!
|
||||
'"# (q..S-q0)*(q..S-q1)"E !* else if Search is on M-S!
|
||||
q..S M.V Real_Search_Macro
|
||||
M.M^R_PAGE_Search u..S !* then PAGE Search on M-S !
|
||||
M.M^R_PAGE_Reverse_Search u..R !* Reverse Search on M-R !
|
||||
'"# FTCannot_find_Search!!!__Send_a_note_to_Rubenstein.''
|
||||
M.M^R_Go_To_Page U..G !* Go to page on C-X C-P !
|
||||
M.M^R_Fill_Region U...G !* Fill Region on C-M-G !
|
||||
'
|
||||
|
||||
0M.LPAGE_Flush_Crlf
|
||||
0M.LCurrent_Page
|
||||
qSet_Mode_Line_Hook[1
|
||||
:i*1 M(M.M&_Set_PAGE_Mode_Line) uSet_Mode_Line_Hook
|
||||
0fo..q TECO_ mode_ hook F"E
|
||||
M.VTECO_ mode_ hook
|
||||
:i*'u1
|
||||
:i*1
|
||||
1uPAGE_ Flush_ Crlf
|
||||
|
||||
uTECO_ mode_ hook
|
||||
|
||||
0fo..q Visit_ File_ Hookf"E
|
||||
M.VVisit_ File_ Hook
|
||||
:i*'u1
|
||||
:i*1
|
||||
M.LCurrent_Page
|
||||
0fo..q PAGE_ Flush_ Crlf M.LPAGE_Flush_Crlf
|
||||
|
||||
uVisit_File_Hook
|
||||
|
||||
0
|
||||
|
||||
!& Set PAGE Mode Line:! !S Add Page <n> onto the mode line, maybe.
|
||||
If given a string argument, appends Page <n> onto the end of the
|
||||
string, if there are buffer bounds in effect, and returns the
|
||||
new string.!
|
||||
|
||||
|
||||
qCurrent_Page"E ' !* if Current Page is 0, return argument!
|
||||
"E :i*' "#' [1 !* if no argument, cons up a blank string!
|
||||
qCurrent_Page :\ [2
|
||||
:I*1_Page_2 (]1 ]2)
|
||||
|
||||
|
||||
!^R Insert Pagemark:! !^R Insert a page mark, leaving new second page current
|
||||
Inserts a formfeed and a crlf, sets the virtual buffer
|
||||
boundaries to be the second half of the old page.!
|
||||
|
||||
13i 10i 12i !* insert a pagemark!
|
||||
qCurrent_Page"N
|
||||
%Current_Page
|
||||
0:M(M.M^R_Goto_Next_Page)'
|
||||
|
||||
!^R Goto Next Page:! !^R Make the next page current.
|
||||
Set the virtual buffer boundaries to the next page. If given
|
||||
a negative argument, goes to previous page.!
|
||||
|
||||
[0 .[1
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
qCurrent_Page"E !* if no virtual bounds then!
|
||||
FF "E 0U0' !* if no args then narrow to current page!
|
||||
0[3
|
||||
0j <%3 !* increment counter!
|
||||
qPAGE_Flush_Crlf"E
|
||||
:s
|
||||
'"#:s
|
||||
|
||||
'; !* Search for page delim, throw ifn found!
|
||||
.-3-Q1;> !* if past point then we're there!
|
||||
q3 uCurrent_Page ]3
|
||||
q1j'
|
||||
qCurrent_Page+q0 [2
|
||||
q2:"G !* if page num is not positive then!
|
||||
0M(M.M^R_Goto_Next_Page) !* set bounds to this page!
|
||||
@FENIB Fs Err' !* generate an error!
|
||||
q0 M(M.M^R_Mark_Page)
|
||||
q2 uCurrent_Page !* Update page number!
|
||||
z-."E M(M.M^R_Widen_Bounds) !* If at end (tried to go to far)!
|
||||
0M(M.M^R_Goto_Next_Page) !* Set bounds to this page!
|
||||
@FENIB FS Err' !* Generate a "NOT IN BUFFER" error!
|
||||
."'N & qPAGE_flush_Crlf"N2c' !* if not at beginning then skip crlf!
|
||||
.(W): !* exchange point and mark!
|
||||
z-."N -3c' !* if not end then back over crlf and ^L!
|
||||
M(M.M^R_Set_Bounds_Region) !* set bounds to this region!
|
||||
1:<q1J>"N BJ' !* go back to where we were if we can!
|
||||
]2 ]1 ]0
|
||||
M(M.M&_Set_Mode_Line)
|
||||
0
|
||||
|
||||
!^R Go to Page:! !^R Go to a specific page, arg is page number.
|
||||
If no arg then go to next page!
|
||||
|
||||
"L -1[0' !* Negative arg -=> Goto previous page!
|
||||
"# FF"N !* if explicit argument!
|
||||
-1[0
|
||||
M(M.M^R_Set_Bounds_Full) !* widen the bounds!
|
||||
1uCurrent_Page
|
||||
0j' !* Jump to the beginning!
|
||||
"# 1[0''
|
||||
Q0 M(M.M^R_Goto_Next_Page) !* get to the right page!
|
||||
0
|
||||
|
||||
!^R PAGE Search:! !C Search that crosses virtual buffer boundaries.
|
||||
Uses ^R Incremental Search or ^R String Search, whichever you had on C-S
|
||||
or M-S when you loaded the PAGE library. See the documentation of
|
||||
whichever search you use for details. You can change the search used by
|
||||
doing, for instance, M.M^R String Search$ u$Real Search Macro$.!
|
||||
|
||||
QReal_ Search_ Macro, @:M(M.M&_ Macro_ on_ Whole_ Buffer)
|
||||
|
||||
!& Macro on whole buffer:! !S Macros its precomma arg on the whole buffer.
|
||||
The post-comma argument and @ flag are passed on to the macro.
|
||||
If Q$Current Page$ is non-zero, then the bounds are widened, the argument
|
||||
is macroed, and the bounds are narrowed again to the current page. Thus,
|
||||
the way to do, say, a search is:
|
||||
M.M^R Incremental Search$, @M(M.M& Macro on Whole Buffer$)!
|
||||
|
||||
F F & 2 "E @FEWNA FS Err' !* if no pre-comma arg, then explode!
|
||||
qCurrent_ Page"E
|
||||
F F & 8 "N @:M()' "# :M()''
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
F F & 8 "N @M()' "# M()'
|
||||
0uCurrent_Page
|
||||
@M(M.M^R_Goto_Next_Page)
|
||||
0
|
||||
|
||||
!^R PAGE Reverse Search:! !C Reverse Search that crosses virtual buffer
|
||||
boundaries. See documentation of ^R PAGE Search for details.!
|
||||
|
||||
-1:M(M.M^R_PAGE_Search)
|
||||
|
||||
!& File Directory:! !S Returns a string pointer to the file directory!
|
||||
|
||||
.[1 0[2 0[3 0[4 [5 [6 [7 [c
|
||||
FS V Z+B "N FS Boundaries u2 u3 !* Remember if we had any bounds!
|
||||
@M(M.M^R_Set_Bounds_Full)'
|
||||
0j
|
||||
q..o [A !* remember our buffer!
|
||||
FS B Cons [B !* and make a scratch buffer!
|
||||
< .,(@f
|
||||
_ L %4 !* Advance over CRLF's, increment page no.!
|
||||
3,Q4 :\ u5
|
||||
1X6
|
||||
QPAGE_ Flush_ Crlf "E
|
||||
:S
|
||||
' "# :S
|
||||
|
||||
'uc
|
||||
qc"E zj').FS Boundaries
|
||||
M(M.MCount_Lines) u7
|
||||
4,q7 :\ u7
|
||||
qB u..o
|
||||
I5_7__ !* Print the page number!
|
||||
0,(fswidth-11)g6
|
||||
i
|
||||
|
||||
qA u..O
|
||||
0,fs z FS Boundaries
|
||||
qc;>
|
||||
Q1J
|
||||
q2"N Q3, Q2 FS Boundaries'
|
||||
qb u..o HFX* (qA u..o qB FS B Kill)
|
||||
|
||||
|
||||
!Print File Directory:! !C Prints a directory of the file
|
||||
Prints out the first non-blank line on each page, preceded by its
|
||||
page number.!
|
||||
|
||||
M(M.M&_ File_ Directory) [0
|
||||
FTPage_Lines__First_Non-blank_Line
|
||||
0
|
||||
]0 0
|
||||
|
||||
|
||||
!Make File Directory:! !Inserts a directory of the file at the beginning
|
||||
Prints out the first non-blank line on each page, preceded by its
|
||||
page number. If given an argument, puts Q$Comment Start$ at the start
|
||||
of each line and Q$Comment End$ at the end!
|
||||
|
||||
M(M.M&_ File_ Directory) [0
|
||||
BJ
|
||||
I0
|
||||
|
||||
FF"N
|
||||
.[1 BJ
|
||||
QComment_ Start [2
|
||||
QComment_ End [3
|
||||
<G2 :L G3 2c .-q1"'L;>
|
||||
]3 ]2 ]1'
|
||||
]0 b,.
|
||||
|
||||
!^R Widen Bounds:! !^R Widen the virtual buffer bounds to include the whole file
|
||||
Calls ^R Set Bounds Full and clears the page number from the mode line.!
|
||||
|
||||
@M(M.M^R_Set_Bounds_Full) !* widen the bounds!
|
||||
0uCurrent_Page
|
||||
:M(M.M&_Set_Mode_Line)
|
||||
|
||||
|
||||
!^R Goto Previous Page:! !^R Make the previous page current.
|
||||
Set the virtual buffer boundaries to the previous page. If given
|
||||
a negative argument, goes to the next page.!
|
||||
|
||||
FF "E -1'"#-' :M(M.M^R_Goto_Next_Page) !* go do it!
|
||||
|
||||
!^R Join Next Page:! !^R Combine two pages together
|
||||
Combines this page with next. If given negative arg,
|
||||
combines previous page with this one.!
|
||||
|
||||
"L BJ
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
."E @FENIB FS Err'
|
||||
"# -3D''
|
||||
"# ZJ
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
Z-."E @FENIB FS Err'
|
||||
"# 3D''
|
||||
0M(M.M^R_Goto_Next_Page)
|
||||
0
|
||||
238
src/e142/page..78
Normal file
238
src/e142/page..78
Normal file
@@ -0,0 +1,238 @@
|
||||
!~Filename~:! !Commands for handling pages intelligently. -*-TECO-*-!
|
||||
PAGE
|
||||
|
||||
!& Setup PAGE Library:! !S Put macros on appropriate characters.!
|
||||
|
||||
0FO..Q PAGE_Setup_Hook[0
|
||||
fq0"G M0'
|
||||
"#
|
||||
M.M^R_Insert_Pagemark u:.X(P) !* Insert Pagemark on ^X P!
|
||||
M.M^R_Goto_Next_Page u:.X(]) !* Goto Next Page on C-X ]!
|
||||
M.M^R_Goto_Previous_Page u:.X([) !* Goto Prev Page on C-X [!
|
||||
M.M^R_Join_Next_Page u:.X(J) !* Join Pages on ^X J !
|
||||
M.M^R_Widen_Bounds u:.X(W) !* Widen Bounds on ^X W !
|
||||
M.M^R_Incremental_Search [0
|
||||
M.M^R_String_Search [1
|
||||
(q.S-q0)*(q.S-Q1)"E !* if Search is on C-S !
|
||||
q.S M.V Real_Search_Macro
|
||||
M.M^R_PAGE_Search u.S !* Then PAGE Search on C-S !
|
||||
M.M^R_PAGE_Reverse_Search u.R !* Reverse Search on C-R!
|
||||
'"# (q..S-q0)*(q..S-q1)"E !* else if Search is on M-S!
|
||||
q..S M.V Real_Search_Macro
|
||||
M.M^R_PAGE_Search u..S !* then PAGE Search on M-S !
|
||||
M.M^R_PAGE_Reverse_Search u..R !* Reverse Search on M-R !
|
||||
'"# FTCannot_find_Search!!!__Send_a_note_to_Rubenstein.''
|
||||
M.M^R_Go_To_Page U..G !* Go to page on C-X C-P !
|
||||
M.M^R_Fill_Region U...G !* Fill Region on C-M-G !
|
||||
'
|
||||
|
||||
0M.LPAGE_Flush_Crlf
|
||||
0M.LCurrent_Page
|
||||
qSet_Mode_Line_Hook[1
|
||||
:i*1 M(M.M&_Set_PAGE_Mode_Line) uSet_Mode_Line_Hook
|
||||
0fo..q TECO_ mode_ hook F"E
|
||||
M.VTECO_ mode_ hook
|
||||
:i*'u1
|
||||
:i*1
|
||||
1uPAGE_ Flush_ Crlf
|
||||
|
||||
uTECO_ mode_ hook
|
||||
|
||||
0fo..q Visit_ File_ Hookf"E
|
||||
M.VVisit_ File_ Hook
|
||||
:i*'u1
|
||||
:i*1
|
||||
M.LCurrent_Page
|
||||
0fo..q PAGE_ Flush_ Crlf M.LPAGE_Flush_Crlf
|
||||
|
||||
uVisit_File_Hook
|
||||
|
||||
0
|
||||
|
||||
!& Set PAGE Mode Line:! !S Add Page <n> onto the mode line, maybe.
|
||||
If given a string argument, appends Page <n> onto the end of the
|
||||
string, if there are buffer bounds in effect, and returns the
|
||||
new string.!
|
||||
|
||||
|
||||
qCurrent_Page"E ' !* if Current Page is 0, return argument!
|
||||
"E :i*' "#' [1 !* if no argument, cons up a blank string!
|
||||
qCurrent_Page :\ [2
|
||||
:I*1_Page_2 (]1 ]2)
|
||||
|
||||
|
||||
!^R Insert Pagemark:! !^R Insert a page mark, leaving new second page current
|
||||
Inserts a formfeed and a crlf, sets the virtual buffer
|
||||
boundaries to be the second half of the old page.!
|
||||
|
||||
13i 10i 12i !* insert a pagemark!
|
||||
qCurrent_Page"N
|
||||
%Current_Page
|
||||
0:M(M.M^R_Goto_Next_Page)'
|
||||
|
||||
!^R Goto Next Page:! !^R Make the next page current.
|
||||
Set the virtual buffer boundaries to the next page. If given
|
||||
a negative argument, goes to previous page.!
|
||||
|
||||
[0 .[1
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
qCurrent_Page"E !* if no virtual bounds then!
|
||||
FF "E 0U0' !* if no args then narrow to current page!
|
||||
0[3
|
||||
0j <%3 !* increment counter!
|
||||
qPAGE_Flush_Crlf"E
|
||||
:s
|
||||
'"#:s
|
||||
|
||||
'; !* Search for page delim, throw ifn found!
|
||||
.-3-Q1;> !* if past point then we're there!
|
||||
q3 uCurrent_Page ]3
|
||||
q1j'
|
||||
qCurrent_Page+q0 [2
|
||||
q2:"G !* if page num is not positive then!
|
||||
0M(M.M^R_Goto_Next_Page) !* set bounds to this page!
|
||||
@FENIB Fs Err' !* generate an error!
|
||||
q0 M(M.M^R_Mark_Page)
|
||||
q2 uCurrent_Page !* Update page number!
|
||||
z-."E M(M.M^R_Widen_Bounds) !* If at end (tried to go to far)!
|
||||
0M(M.M^R_Goto_Next_Page) !* Set bounds to this page!
|
||||
@FENIB FS Err' !* Generate a "NOT IN BUFFER" error!
|
||||
."'N & qPAGE_flush_Crlf"N2c' !* if not at beginning then skip crlf!
|
||||
.(W): !* exchange point and mark!
|
||||
z-."N -3c' !* if not end then back over crlf and ^L!
|
||||
M(M.M^R_Set_Bounds_Region) !* set bounds to this region!
|
||||
1:<q1J>"N BJ' !* go back to where we were if we can!
|
||||
]2 ]1 ]0
|
||||
M(M.M&_Set_Mode_Line)
|
||||
0
|
||||
|
||||
!^R Go to Page:! !^R Go to a specific page, arg is page number.
|
||||
If no arg then go to next page!
|
||||
|
||||
"L -1[0' !* Negative arg -=> Goto previous page!
|
||||
"# FF"N !* if explicit argument!
|
||||
-1[0
|
||||
M(M.M^R_Set_Bounds_Full) !* widen the bounds!
|
||||
1uCurrent_Page
|
||||
0j' !* Jump to the beginning!
|
||||
"# 1[0''
|
||||
Q0 M(M.M^R_Goto_Next_Page) !* get to the right page!
|
||||
0
|
||||
|
||||
!^R PAGE Search:! !C Search that crosses virtual buffer boundaries.
|
||||
Uses ^R Incremental Search or ^R String Search, whichever you had on C-S
|
||||
or M-S when you loaded the PAGE library. See the documentation of
|
||||
whichever search you use for details. You can change the search used by
|
||||
doing, for instance, M.M^R String Search$ u$Real Search Macro$.!
|
||||
|
||||
QReal_ Search_ Macro, @:M(M.M&_ Macro_ on_ Whole_ Buffer)
|
||||
|
||||
!& Macro on whole buffer:! !S Macros its precomma arg on the whole buffer.
|
||||
The post-comma argument and @ flag are passed on to the macro.
|
||||
If Q$Current Page$ is non-zero, then the bounds are widened, the argument
|
||||
is macroed, and the bounds are narrowed again to the current page. Thus,
|
||||
the way to do, say, a search is:
|
||||
M.M^R Incremental Search$, @M(M.M& Macro on Whole Buffer$)!
|
||||
|
||||
F F & 2 "E @FEWNA FS Err' !* if no pre-comma arg, then explode!
|
||||
qCurrent_ Page"E
|
||||
F F & 8 "N @:M()' "# :M()''
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
F F & 8 "N @M()' "# M()'
|
||||
0uCurrent_Page
|
||||
@M(M.M^R_Goto_Next_Page)
|
||||
0
|
||||
|
||||
!^R PAGE Reverse Search:! !C Reverse Search that crosses virtual buffer
|
||||
boundaries. See documentation of ^R PAGE Search for details.!
|
||||
|
||||
-1:M(M.M^R_PAGE_Search)
|
||||
|
||||
!& File Directory:! !S Returns a string pointer to the file directory!
|
||||
|
||||
.[1 0[2 0[3 0[4 [5 [6 [7 [c
|
||||
FS V Z+B "N FS Boundaries u2 u3 !* Remember if we had any bounds!
|
||||
@M(M.M^R_Set_Bounds_Full)'
|
||||
0j
|
||||
q..o [A !* remember our buffer!
|
||||
FS B Cons [B !* and make a scratch buffer!
|
||||
< .,(@f
|
||||
_ L %4 !* Advance over CRLF's, increment page no.!
|
||||
3,Q4 :\ u5
|
||||
.,(:l).X6
|
||||
QPAGE_ Flush_ Crlf "E
|
||||
:S
|
||||
' "# :S
|
||||
|
||||
'uc
|
||||
qc"E zj').FS Boundaries
|
||||
M(M.MCount_Lines) u7
|
||||
4,q7 :\ u7
|
||||
qB u..o
|
||||
I5__7___ !* Print the page number!
|
||||
0,(fswidth-13)g6
|
||||
i
|
||||
|
||||
qA u..O
|
||||
0,fs z FS Boundaries
|
||||
qc;>
|
||||
Q1J
|
||||
q2"N Q3, Q2 FS Boundaries'
|
||||
qb u..o HFX* (qA u..o qB FS B Kill)
|
||||
|
||||
|
||||
!Print File Directory:! !C Prints a directory of the file
|
||||
Prints out the first non-blank line on each page, preceded by its
|
||||
page number.!
|
||||
|
||||
M(M.M&_ File_ Directory) [0
|
||||
FTPage_Lines__First_Non-blank_Line
|
||||
0
|
||||
]0 0
|
||||
|
||||
|
||||
!Make File Directory:! !Inserts a directory of the file at the beginning
|
||||
Prints out the first non-blank line on each page, preceded by its
|
||||
page number. If given an argument, puts Q$Comment Start$ at the start
|
||||
of each line and Q$Comment End$ at the end!
|
||||
|
||||
M(M.M&_ File_ Directory) [0
|
||||
BJ
|
||||
I0
|
||||
|
||||
FF"N
|
||||
.[1 BJ
|
||||
QComment_ Start [2
|
||||
QComment_ End [3
|
||||
<G2 :L G3 2c .-q1"'L;>
|
||||
]3 ]2 ]1'
|
||||
]0 b,.
|
||||
|
||||
!^R Widen Bounds:! !^R Widen the virtual buffer bounds to include the whole file
|
||||
Calls ^R Set Bounds Full and clears the page number from the mode line.!
|
||||
|
||||
@M(M.M^R_Set_Bounds_Full) !* widen the bounds!
|
||||
0uCurrent_Page
|
||||
:M(M.M&_Set_Mode_Line)
|
||||
|
||||
|
||||
!^R Goto Previous Page:! !^R Make the previous page current.
|
||||
Set the virtual buffer boundaries to the previous page. If given
|
||||
a negative argument, goes to the next page.!
|
||||
|
||||
FF "E -1'"#-' :M(M.M^R_Goto_Next_Page) !* go do it!
|
||||
|
||||
!^R Join Next Page:! !^R Combine two pages together
|
||||
Combines this page with next. If given negative arg,
|
||||
combines previous page with this one.!
|
||||
|
||||
"L BJ
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
."E @FENIB FS Err'
|
||||
"# -3D''
|
||||
"# ZJ
|
||||
M(M.M^R_Set_Bounds_Full)
|
||||
Z-."E @FENIB FS Err'
|
||||
"# 3D''
|
||||
0M(M.M^R_Goto_Next_Page)
|
||||
0
|
||||
216
src/e142/page._ej
Normal file
216
src/e142/page._ej
Normal file
@@ -0,0 +1,216 @@
|
||||
PW
|
||||
[0+8+FQ(+4)[1
|
||||
0FO10F"G+Q1
|
||||
'W+FQ()+4U1
|
||||
FQ1"L0'
|
||||
,Q1:M(Q1+4(]1]0))
|
||||
I h rhv'$0it6B~dqR]
|
||||
|
||||
M ZBK6@GOTaEV8G"GU|]h-&4yLX
|
||||
j
|
||||
t
|
||||
_
|
||||
f^d& Setup PAGE LibraryU0FO..QPAGE Setup Hook[0
|
||||
fq0"GM0'
|
||||
"#
|
||||
M.M^R Insert Pagemarku:.X(P)
|
||||
M.M^R Goto Next Pageu:.X(])
|
||||
M.M^R Goto Previous Pageu:.X([)
|
||||
M.M^R Join Next Pageu:.X(J)
|
||||
M.M^R Widen Boundsu:.X(W)
|
||||
M.M^R Incremental Search[0
|
||||
M.M^R String Search[1
|
||||
(q.S-q0)*(q.S-Q1)"E
|
||||
q.SM.VReal Search Macro
|
||||
M.M^R PAGE Searchu.S
|
||||
M.M^R PAGE Reverse Searchu.R
|
||||
'"#(q..S-q0)*(q..S-q1)"E
|
||||
q..SM.VReal Search Macro
|
||||
M.M^R PAGE Searchu..S
|
||||
M.M^R PAGE Reverse Searchu..R
|
||||
'"#FTCannot find Search!!! Send a note to Rubenstein.''
|
||||
M.M^R Go To PageU..G
|
||||
M.M^R Fill RegionU...G
|
||||
'
|
||||
0M.LPAGE Flush Crlf
|
||||
0M.LCurrent Page
|
||||
qSet Mode Line Hook[1
|
||||
:i*1M(M.M& Set PAGE Mode Line)uSet Mode Line Hook
|
||||
0fo..qTECO mode hookF"E
|
||||
M.VTECO mode hook
|
||||
:i*'u1
|
||||
:i*1
|
||||
1uPAGE Flush Crlf
|
||||
|
||||
uTECO mode hook
|
||||
0fo..qVisit File Hookf"E
|
||||
M.VVisit File Hook
|
||||
:i*'u1
|
||||
:i*1
|
||||
M.LCurrent Page
|
||||
0fo..qPAGE Flush CrlfM.LPAGE Flush Crlf
|
||||
|
||||
uVisit File Hook
|
||||
0& Set PAGE Mode LineVqCurrent Page"E'
|
||||
"E:i*'"#'[1
|
||||
qCurrent Page:\[2
|
||||
:I*1 Page 2(]1]2)^R Insert PagemarkN13i10i12i
|
||||
qCurrent Page"N
|
||||
%Current Page
|
||||
0:M(M.M^R Goto Next Page)'^R Goto Next Page_[0.[1
|
||||
M(M.M^R Set Bounds Full)
|
||||
qCurrent Page"E
|
||||
FF"E0U0'
|
||||
0[3
|
||||
0j<%3
|
||||
qPAGE Flush Crlf"E
|
||||
:s
|
||||
'"#:s
|
||||
|
||||
';
|
||||
.-3-Q1;>
|
||||
q3uCurrent Page]3
|
||||
q1j'
|
||||
qCurrent Page+q0[2
|
||||
q2:"G
|
||||
0M(M.M^R Goto Next Page)
|
||||
@FENIBFsErr'
|
||||
q0M(M.M^R Mark Page)
|
||||
q2uCurrent Page
|
||||
z-."EM(M.M^R Widen Bounds)
|
||||
0M(M.M^R Goto Next Page)
|
||||
@FENIBFSErr'
|
||||
."'N&qPAGE flush Crlf"N2c'
|
||||
.(W):
|
||||
z-."N-3c'
|
||||
M(M.M^R Set Bounds Region)
|
||||
1:<q1J>"NBJ'
|
||||
]2]1]0
|
||||
M(M.M& Set Mode Line)
|
||||
0^R Go to Pagex"L-1[0'
|
||||
"#FF"N
|
||||
-1[0
|
||||
M(M.M^R Set Bounds Full)
|
||||
1uCurrent Page
|
||||
0j'
|
||||
"#1[0''
|
||||
Q0M(M.M^R Goto Next Page)
|
||||
0^R PAGE Search:QReal Search Macro,@:M(M.M& Macro on Whole Buffer)& Macro on whole buffer.FF&2"E@FEWNAFSErr'
|
||||
qCurrent Page"E
|
||||
FF&8"N@:M()'"#:M()''
|
||||
M(M.M^R Set Bounds Full)
|
||||
FF&8"N@M()'"#M()'
|
||||
0uCurrent Page
|
||||
@M(M.M^R Goto Next Page)
|
||||
0^R PAGE Reverse Search-1:M(M.M^R PAGE Search)& File Directory .[10[20[30[4[5[6[7[c
|
||||
FSVZ+B"NFSBoundariesu2u3
|
||||
@M(M.M^R Set Bounds Full)'
|
||||
0j
|
||||
q..o[A
|
||||
FSBCons[B
|
||||
<.,(@f
|
||||
L%4
|
||||
3,Q4:\u5
|
||||
.,(:l).X6
|
||||
QPAGE Flush Crlf"E
|
||||
:S
|
||||
'"#:S
|
||||
|
||||
'uc
|
||||
qc"Ezj').FSBoundaries
|
||||
M(M.MCount Lines)u7
|
||||
4,q7:\u7
|
||||
qBu..o
|
||||
I5 7
|
||||
0,(fswidth-13)g6
|
||||
i
|
||||
|
||||
qAu..O
|
||||
0,fszFSBoundaries
|
||||
qc;>
|
||||
Q1J
|
||||
q2"NQ3,Q2FSBoundaries'
|
||||
qbu..oHFX*(qAu..oqBFSBKill)Print File DirectoryMM(M.M& File Directory)[0
|
||||
FTPage Lines First Non-blank Line
|
||||
0
|
||||
]00Make File DirectoryM(M.M& File Directory)[0
|
||||
BJ
|
||||
I0
|
||||
|
||||
FF"N
|
||||
.[1BJ
|
||||
QComment Start[2
|
||||
QComment End[3
|
||||
<G2:LG32c.-q1"'L;>
|
||||
]3]2]1'
|
||||
]0b,.^R Widen BoundsI@M(M.M^R Set Bounds Full)
|
||||
0uCurrent Page
|
||||
:M(M.M& Set Mode Line)^R Goto Previous Page+FF"E-1'"#-':M(M.M^R Goto Next Page)^R Join Next Page"LBJ
|
||||
M(M.M^R Set Bounds Full)
|
||||
."E@FENIBFSErr'
|
||||
"#-3D''
|
||||
"#ZJ
|
||||
M(M.M^R Set Bounds Full)
|
||||
Z-."E@FENIBFSErr'
|
||||
"#3D''
|
||||
0M(M.M^R Goto Next Page)
|
||||
0~Filename~PAGE~DOC~ ~Filename~=Commands for handling pages intelligently. -*-TECO-*-
|
||||
~DOC~ & Setup PAGE Library-S Put macros on appropriate characters.
|
||||
~DOC~ & Set PAGE Mode Line=S Add Page <n> onto the mode line, maybe.
|
||||
If given a string argument, appends Page <n> onto the end of the
|
||||
string, if there are buffer bounds in effect, and returns the
|
||||
new string.
|
||||
~DOC~ ^R Insert Pagemark'^R Insert a page mark, leaving new second page current
|
||||
Inserts a formfeed and a crlf, sets the virtual buffer
|
||||
boundaries to be the second half of the old page.
|
||||
~DOC~ ^R Goto Next Page^R Make the next page current.
|
||||
Set the virtual buffer boundaries to the next page. If given
|
||||
a negative argument, goes to previous page.
|
||||
~DOC~ ^R Go to PageS^R Go to a specific page, arg is page number.
|
||||
If no arg then go to next page
|
||||
~DOC~ ^R PAGE SearchOC Search that crosses virtual buffer boundaries.
|
||||
Uses ^R Incremental Search or ^R String Search, whichever you had on C-S
|
||||
or M-S when you loaded the PAGE library. See the documentation of
|
||||
whichever search you use for details. You can change the search used by
|
||||
doing, for instance, M.M^R String Search$ u$Real Search Macro$.
|
||||
!~DOC~ & Macro on whole bufferlS Macros its precomma arg on the whole buffer.
|
||||
The post-comma argument and @ flag are passed on to the macro.
|
||||
If Q$Current Page$ is non-zero, then the bounds are widened, the argument
|
||||
is macroed, and the bounds are narrowed again to the current page. Thus,
|
||||
the way to do, say, a search is:
|
||||
M.M^R Incremental Search$, @M(M.M& Macro on Whole Buffer$)
|
||||
~DOC~ ^R PAGE Reverse SearchqC Reverse Search that crosses virtual buffer
|
||||
boundaries. See documentation of ^R PAGE Search for details.
|
||||
~DOC~ & File Directory6S Returns a string pointer to the file directory
|
||||
~DOC~ Print File DirectorywC Prints a directory of the file
|
||||
Prints out the first non-blank line on each page, preceded by its
|
||||
page number.
|
||||
~DOC~ Make File DirectorymInserts a directory of the file at the beginning
|
||||
Prints out the first non-blank line on each page, preceded by its
|
||||
page number. If given an argument, puts Q$Comment Start$ at the start
|
||||
of each line and Q$Comment End$ at the end
|
||||
~DOC~ ^R Widen Bounds^R Widen the virtual buffer bounds to include the whole file
|
||||
Calls ^R Set Bounds Full and clears the page number from the mode line.
|
||||
|
||||
~DOC~ ^R Goto Previous Page^R Make the previous page current.
|
||||
Set the virtual buffer boundaries to the previous page. If given
|
||||
a negative argument, goes to the next page.
|
||||
~DOC~ ^R Join Next Page^R Combine two pages together
|
||||
Combines this page with next. If given negative arg,
|
||||
combines previous page with this one.
|
||||
~DIRECTORY~
|
||||
& Setup PAGE Library
|
||||
& Set PAGE Mode Line
|
||||
^R Insert Pagemark
|
||||
^R Goto Next Page
|
||||
^R Go to Page
|
||||
^R PAGE Search
|
||||
& Macro on whole buffer
|
||||
^R PAGE Reverse Search
|
||||
& File Directory
|
||||
Print File Directory
|
||||
Make File Directory
|
||||
^R Widen Bounds
|
||||
^R Goto Previous Page
|
||||
^R Join Next Page
|
||||
~INVERT~[1<Q1-1U1Q1FP;>Q1
|
||||
64
src/e142/patch.
Normal file
64
src/e142/patch.
Normal file
@@ -0,0 +1,64 @@
|
||||
!* -*-Teco-*-!
|
||||
!~Filename~:! !Patches to EMACS macros!
|
||||
PATCH
|
||||
|
||||
!Select Buffer:! !C Select or create buffer, given its name.
|
||||
If called from a ^R character, read the buffer name from the terminal
|
||||
or should be given a buffer number as a numeric arg.
|
||||
As a subroutine, needs a buffer number (or buffer name pointer) as a
|
||||
prefix arg, or a buffer name as a string arg.
|
||||
If there is a buffer with that name, it is selected.
|
||||
Otherwise, a buffer with that name is created and selected.
|
||||
When a new buffer is selected the first time, if QBuffer Creation Hook
|
||||
is nonzero, it is run after the buffer is selected.!
|
||||
|
||||
MMM_&_Check_Top_Levelbuffers
|
||||
[..h [4 0[3 !* Make sure we can display the bfr we switch to.!
|
||||
FF&1"N U3' !* Numeric arg => use it as buffer or buffer # to select.!
|
||||
"# "E :F"G :i3'' !* No postcomma arg or precomma arg => read string arg.!
|
||||
Q3"E M.M List_BuffersF[HELPMAC !* Else must read from tty.!
|
||||
"N u4' !* Precomma arg is prompt string to use.!
|
||||
"# :i4 Select_Buffer'
|
||||
QPrevious_Buffer[3 !* Get name of default new buffer to put in prompt.!
|
||||
1,Q3M(M.M &_Find_Buffer)"L Q:.B(1)U3'
|
||||
3,m(m.m &_Read_Line)4_(3):_u3'' !* Read name of buffer to select.!
|
||||
Q3[5 !* Save name (or buffer #) in Q5.!
|
||||
FQ3"E QPrevious_BufferU3' !* Null string means previous buffer.!
|
||||
1,Q3 M(M.M&_Find_Buffer)[1 !* Get index in buffer table of this name or number.!
|
||||
Q1u4 !* Q4 remains negative, for a new buffer.!
|
||||
Q1"L !* No such buffer => make one now.!
|
||||
FQ3"L :I*No_such_buffer FS ERR' !* Refuse to create buffer if bfr number spec'd.!
|
||||
FQ5"E 0U1 0U4' !* If ^XB<cr> and prev bfr non ex, use 1st buffer instead.!
|
||||
"# Q3 M(M.M &_Create_Buffer)U1'' !* Else create the specified buffer.!
|
||||
QBuffer_IndexU3
|
||||
Q1-Q3"E 0'
|
||||
1F[Noquit !* Prevent quitting half-switched.!
|
||||
0FO..Q Buffer_Deselection_Hook[5
|
||||
Q5"N M5'
|
||||
Q.B[..O ZJ 0K ]..O !* Get gap in buffer table out of the way.!
|
||||
Q3,9F.B !* Swap old buffer's locals back into its entry.!
|
||||
QBuffer_FilenamesU:.B(Q3+2) !* Stick its filenames back into entry.!
|
||||
QMode U:.B(Q3+3) !* Stick selected mode into entry.!
|
||||
|
||||
!* Simultaneously swap out old buffer's TECO default filenames
|
||||
and window address, and swap in the new buffer's.!
|
||||
Q:.B(Q1+6) FS WINDOW U:.B(Q3+6)
|
||||
Q:.B(Q1+5)F"E W' FS D FILE U:.B(Q3+5)
|
||||
|
||||
!* We now are "between buffers".!
|
||||
Q:.B(Q1+2) UBuffer_Filenames !* Get filenames of new buffer.!
|
||||
Q:.B(Q1+1)UBuffer_Name !* For our records, save its name!
|
||||
Q:.B(Q1+3)UMode
|
||||
Q1 UBuffer_Index !* and its index, for when we deselect it.!
|
||||
Q:.B(Q3+1) UPrevious_Buffer !* remember previously selected buffer's name.!
|
||||
Q:.B(Q1+3) U3
|
||||
Q1,9F.B !* Get new buffer's local variable values.!
|
||||
1FSMODE CHANGE !* Recompute mode line eventually.!
|
||||
Q:.B(Q1+4) U..O !* Now really switch to this buffer.!
|
||||
0FO..Q Buffer_Selection_HookF"N [..N'
|
||||
Q:.B(Q1+5)"N ' !* If buffer has been selected before, that's all.!
|
||||
Q:.B(Q1+1)U4
|
||||
FS OS TECO "E F64'"#Q4' FS DFN1 !* If buffer selected for 1st time, set default fn1 from name.!
|
||||
0FO..QBuffer_Creation_HookU4 !* If buffer selecetd for 1st time, maybe run user's hook.!
|
||||
Q4"N M4'
|
||||
|
||||
63
src/e142/patch._ej
Normal file
63
src/e142/patch._ej
Normal file
@@ -0,0 +1,63 @@
|
||||
(W
|
||||
[0+8+FQ(+4)[1
|
||||
0FO10F"G+Q1
|
||||
'W+FQ()+4U1
|
||||
FQ1"L0'
|
||||
,Q1:M(Q1+4(]1]0))
|
||||
E"+<D'2
|
||||
MSSelect Buffer0MMM & Check Top Levelbuffers
|
||||
[..h[40[3
|
||||
FF&1"NU3'
|
||||
"#"E:F"G:i3''
|
||||
Q3"EM.MList BuffersF[HELPMAC
|
||||
"Nu4'
|
||||
"#:i4Select Buffer'
|
||||
QPrevious Buffer[3
|
||||
1,Q3M(M.M& Find Buffer)"LQ:.B(1)U3'
|
||||
3,m(m.m& Read Line)4 (3): u3''
|
||||
Q3[5
|
||||
FQ3"EQPrevious BufferU3'
|
||||
1,Q3M(M.M& Find Buffer)[1
|
||||
Q1u4
|
||||
Q1"L
|
||||
FQ3"L:I*No such bufferFSERR'
|
||||
FQ5"E0U10U4'
|
||||
"#Q3M(M.M& Create Buffer)U1''
|
||||
QBuffer IndexU3
|
||||
Q1-Q3"E0'
|
||||
1F[Noquit
|
||||
0FO..QBuffer Deselection Hook[5
|
||||
Q5"NM5'
|
||||
Q.B[..OZJ0K]..O
|
||||
Q3,9F.B
|
||||
QBuffer FilenamesU:.B(Q3+2)
|
||||
QModeU:.B(Q3+3)
|
||||
Q:.B(Q1+6)FSWINDOWU:.B(Q3+6)
|
||||
Q:.B(Q1+5)F"EW'FSDFILEU:.B(Q3+5)
|
||||
Q:.B(Q1+2)UBuffer Filenames
|
||||
Q:.B(Q1+1)UBuffer Name
|
||||
Q:.B(Q1+3)UMode
|
||||
Q1UBuffer Index
|
||||
Q:.B(Q3+1)UPrevious Buffer
|
||||
Q:.B(Q1+3)U3
|
||||
Q1,9F.B
|
||||
1FSMODECHANGE
|
||||
Q:.B(Q1+4)U..O
|
||||
0FO..QBuffer Selection HookF"N[..N'
|
||||
Q:.B(Q1+5)"N'
|
||||
Q:.B(Q1+1)U4
|
||||
FSOSTECO"EF64'"#Q4'FSDFN1
|
||||
0FO..QBuffer Creation HookU4
|
||||
Q4"NM4'
|
||||
~Filename~ PATCH~DOC~ ~Filename~Patches to EMACS macros
|
||||
~DOC~ Select BufferC Select or create buffer, given its name.
|
||||
If called from a ^R character, read the buffer name from the terminal
|
||||
or should be given a buffer number as a numeric arg.
|
||||
As a subroutine, needs a buffer number (or buffer name pointer) as a
|
||||
prefix arg, or a buffer name as a string arg.
|
||||
If there is a buffer with that name, it is selected.
|
||||
Otherwise, a buffer with that name is created and selected.
|
||||
When a new buffer is selected the first time, if QBuffer Creation Hook
|
||||
is nonzero, it is run after the buffer is selected.
|
||||
~DIRECTORY~Select Buffer
|
||||
~INVERT~[1<Q1-1U1Q1FP;>Q1
|
||||
BIN
src/e142/pl1lib._ej
Normal file
BIN
src/e142/pl1lib._ej
Normal file
Binary file not shown.
22
src/e142/qp.
Normal file
22
src/e142/qp.
Normal file
@@ -0,0 +1,22 @@
|
||||
!~Filename~:! !QP Printer -*-TECO-*-!
|
||||
QP
|
||||
|
||||
!<Entry>:! !C print QP!
|
||||
M(M.M Qprint)
|
||||
|
||||
!Qprint:! !Print Q-reg PDL!
|
||||
fs qp ptr [0 -1[1 [2 [3
|
||||
q0< %1 :\ u2
|
||||
q1 FS QP Home u3
|
||||
ft2__3__
|
||||
Q1 FS QP Slot u3
|
||||
q3 FP u2
|
||||
q2 "L Q3 :='
|
||||
"# Q2 "E FT<Buffer>'
|
||||
"# Q2-1 "E FT<Q-Vector>'
|
||||
"# Q2-100 "E Q3 M(M.M&_ Macro_ Get_ Full_ Name) U3
|
||||
FT[Purstr]__3'
|
||||
"# FT[String] "3"''''''''
|
||||
FT
|
||||
>
|
||||
]3]2]1]0
|
||||
28
src/e142/qp._ej
Normal file
28
src/e142/qp._ej
Normal file
@@ -0,0 +1,28 @@
|
||||
(W
|
||||
[0+8+FQ(+4)[1
|
||||
0FO10F"G+Q1
|
||||
'W+FQ()+4U1
|
||||
FQ1"L0'
|
||||
,Q1:M(Q1+4(]1]0))
|
||||
Y,2:?
|
||||
`hpxHR>E<Entry>M(M.MQprint)
|
||||
Qprint~fsqpptr[0-1[1[2[3
|
||||
q0<%1:\u2
|
||||
q1FSQPHomeu3
|
||||
ft2 3
|
||||
Q1FSQPSlotu3
|
||||
q3FPu2
|
||||
q2"LQ3:='
|
||||
"#Q2"EFT<Buffer>'
|
||||
"#Q2-1"EFT<Q-Vector>'
|
||||
"#Q2-100"EQ3M(M.M& Macro Get Full Name)U3
|
||||
FT[Purstr] 3'
|
||||
"#FT[String]"3"''''''''
|
||||
FT
|
||||
>
|
||||
]3]2]1]0~Filename~QP~DOC~ ~Filename~QP Printer -*-TECO-*-
|
||||
~DOC~ <Entry>C print QP
|
||||
~DOC~ QprintPrint Q-reg PDL
|
||||
~DIRECTORY~<Entry>
|
||||
Qprint
|
||||
~INVERT~[1<Q1-1U1Q1FP;>Q1
|
||||
24
src/e142/record.
Normal file
24
src/e142/record.
Normal file
@@ -0,0 +1,24 @@
|
||||
!~Filename~:! !appends name to file -*-Teco-*-!
|
||||
RECORD
|
||||
|
||||
!<ENTRY>:! !append the name to <EMACS>Startup.;1!
|
||||
|
||||
F[ B Bind [0
|
||||
"E ER<EMACS>STARTUP.;1'
|
||||
"# -1 "E ER<RUBENSTEIN>PAGE-USERS.;1'
|
||||
"# -2 "E ER<EMACS>DM-USERS.;1'
|
||||
"# :I*URF Unknown_ RECORD_ filename FS ERR'''
|
||||
@Y EC
|
||||
z[1 ZJ
|
||||
FS Date FS FD Convert
|
||||
FS MSname :F6 u1
|
||||
i__1
|
||||
|
||||
"E @:EW<EMACS>STARTUP.;1'
|
||||
"# -1 "E @:EW<RUBENSTEIN>PAGE-USERS.;1'
|
||||
"# -2 "E ER<EMACS>DM-USERS.;1'
|
||||
"# :I*URF Unknown_ RECORD_ filename FS ERR'''
|
||||
HP
|
||||
:EF
|
||||
ET<1>Foo.;0
|
||||
|
||||
30
src/e142/record._ej
Normal file
30
src/e142/record._ej
Normal file
@@ -0,0 +1,30 @@
|
||||
(W
|
||||
[0+8+FQ(+4)[1
|
||||
0FO10F"G+Q1
|
||||
'W+FQ()+4U1
|
||||
FQ1"L0'
|
||||
,Q1:M(Q1+4(]1]0))
|
||||
E"(07vjq>D<ENTRY>F[BBind[0
|
||||
"EER<EMACS>STARTUP.;1'
|
||||
"#-1"EER<RUBENSTEIN>PAGE-USERS.;1'
|
||||
"#-2"EER<EMACS>DM-USERS.;1'
|
||||
"#:I*URF Unknown RECORD filenameFSERR'''
|
||||
@YEC
|
||||
z[1ZJ
|
||||
FSDateFSFDConvert
|
||||
FSMSname:F6u1
|
||||
i 1
|
||||
|
||||
"E@:EW<EMACS>STARTUP.;1'
|
||||
"#-1"E@:EW<RUBENSTEIN>PAGE-USERS.;1'
|
||||
"#-2"EER<EMACS>DM-USERS.;1'
|
||||
"#:I*URF Unknown RECORD filenameFSERR'''
|
||||
HP
|
||||
:EF
|
||||
ET<1>Foo.;0
|
||||
~Filename~
|
||||
RECORD~DOC~ ~Filename~%appends name to file -*-Teco-*-
|
||||
~DOC~ <ENTRY>*append the name to <EMACS>Startup.;1
|
||||
~DIRECTORY~
|
||||
<ENTRY>
|
||||
~INVERT~[1<Q1-1U1Q1FP;>Q1
|
||||
46
src/e142/sa.
Normal file
46
src/e142/sa.
Normal file
@@ -0,0 +1,46 @@
|
||||
In the past, I have been involved in several different areas of both Chemistry and
|
||||
Computer Science. Ideally, I would like to find a topic for research (and,
|
||||
eventually, a career) which encompasses aspects of both of those interests.
|
||||
|
||||
My interest in both chemistry and computer science goes back to high school, where my
|
||||
chemistry instructor, Dr. George Biehl, sparked not only my initial interest in
|
||||
chemistry, but also served as my instructor when I enrolled in a lunch-time
|
||||
minicourse in computer programming. The following year, as my interest increased, I
|
||||
actually taught the course, with Dr. Biehl serving as my adviser.
|
||||
|
||||
For some time, I was undecided as to whether to specialize in chemistry or computer
|
||||
science; my first technically oriented job was actually in computers: operator and,
|
||||
later, systems programmer for the Stanford University Medical Experimental center for
|
||||
Artificial Intelligence in Medicine (SUMEX-AIM). I was primarily responsible for
|
||||
improving and maintaining the file backup system and other systems and user-support
|
||||
programming. This job gave me considerable exposure to current research activities,
|
||||
such as Lederberg's "Dendral" programs for structure enumeration and elucidation and
|
||||
Wipke's "Strategic Evaluation off Chemical Synthesis (SECS)" program.
|
||||
|
||||
My second technical position, which I continue to hold, is that of a member of the
|
||||
technical staff of the medical/analytical instrumentation division of Hewlett/Packard
|
||||
laboratories. In this diverse group of scientists and engineers, I have been
|
||||
carrying out research towards the development of new instrumentation. Specifically,
|
||||
I have worked with another organic chemist and an optical engineer in a study of the
|
||||
feasibility of using visible ATR spectroscopy and surface bound indicators in a
|
||||
device for rapid blood pH determination. My contribution to this project consisted
|
||||
of the synthesis and characterization of several models for surface bound indicators,
|
||||
such as N-substituted sulfonamides of phenolsulfonphthaleins. More recently, I have
|
||||
been working with a physical chemist studying the effect of oxygen on room
|
||||
temperature phosphorescence, with the idea of using that effect to rapidly measure
|
||||
atmospheric and/or dissolved (blood) oxygen. I have been preparing dyes which show
|
||||
phosphorescence while adsorbed to a surface such as silica gel or filter paper for
|
||||
testing of their usefulness in such a device.
|
||||
|
||||
Finally, I am presently engaged in research with Dr. E. E. van Tamelen. Here, I am
|
||||
continuing work begun by one of his graduate students, developing a total synthesis
|
||||
of the natural products Triptolide and Stemolide.
|
||||
|
||||
At the present time, I have not formulated a detailed plan of study and research. If
|
||||
ind synthetic organic chemistry very interesting and challenging, but I hope not to
|
||||
restrict myself to that relatively narrow field. I believe that computers are going
|
||||
to become increasingly more useful to the chemist; particularly interesting are
|
||||
Artificial Intelligence applications, such as Dr. Corey's work in computer aided
|
||||
synthesis. While computer controlled instrumentation is becoming increasingly
|
||||
commonplace, very few of these systems are actually "smart" about the chemistry which
|
||||
is being controlled.
|
||||
BIN
src/e142/teach-emacs.ai_s-init
Normal file
BIN
src/e142/teach-emacs.ai_s-init
Normal file
Binary file not shown.
626
src/e142/teach-emacs.txt
Normal file
626
src/e142/teach-emacs.txt
Normal file
@@ -0,0 +1,626 @@
|
||||
Things to put in:
|
||||
Lesson 2:
|
||||
Mode line, searching, point/mark already in. What else?
|
||||
Lesson 3:
|
||||
Need Init files, Two window mode, buffers descriptions. What else?
|
||||
Autosave mode
|
||||
|
||||
DOCOND declarations for operating-system dependencies:
|
||||
{Alternatives:ITS,Tops20,Sumex}
|
||||
{Flag:?Sumex}
|
||||
{Flag:?ITS}
|
||||
{Flag:?Tops20}
|
||||
{Replace:+ITS=>C-Z->C-C}
|
||||
{Replace:+ITS=><Esc>-><Alt>}
|
||||
{Replace:+ITS=><delete>-><Rubout>}
|
||||
{end}
|
||||
You are looking at the EMACS tutorial. Comments should be sent to
|
||||
Rubenstein@Sumex-AIM and McLure@SRI-KL.
|
||||
|
||||
EMACS commands are generally prefixed by the CONTROL key or the META
|
||||
(EDIT on datamedias) key (<ESC> if you don't have META or EDIT on your
|
||||
keyboard). Rather than write out META or CONTROL each time we want
|
||||
you to prefix a character, we'll use the following abbreviations:
|
||||
|
||||
C-<char> means hold the CONTROL key down and type a character.
|
||||
M-<char> means hold the META key down while typing a character.
|
||||
if you don't have a META or EDIT key, then type <ESC>,
|
||||
release it, then type the character.
|
||||
|
||||
Thus, C-F would be hold the control key and type F. You will often
|
||||
be asked to type characters to see how they work; don't actually do
|
||||
this, however, until you see >> at the left of the screen. For instance:
|
||||
<<Blank lines inserted here by startup of TEACH-EMACS>>
|
||||
>> Now type C-V (View next screen) to move to the next screen.
|
||||
(go ahead, do it by depressing the control key and V together).
|
||||
From now on, you'll be expected to do this whenever you finish
|
||||
reading the screen.
|
||||
|
||||
Note that there is an overlap when going from screen to screen; this
|
||||
provides some continuity when moving through the file.
|
||||
|
||||
The first thing that you need to know is how to move around from place
|
||||
to place in the file. You already know how to move forward a screen,
|
||||
with C-V. To move backwards a screen, type M-V (depress the META or
|
||||
EDIT key and type V, <ESC>V if you don't have a META or EDIT key}).
|
||||
|
||||
>> Try typing M-V and C-V to move back and forth a few times.
|
||||
|
||||
SUMMARY
|
||||
-------
|
||||
|
||||
The following commands are useful for viewing screenfuls:
|
||||
|
||||
C-V View next screenful
|
||||
M-V View previous screenful
|
||||
C-L 'Refresh' the current screen.
|
||||
|
||||
>> Try C-L now. (You'll notice that it centers the screen where
|
||||
the cursor currently is. If this happens to move this text off the
|
||||
screen, just do C-V's or M-V's to see it again.) Do a C-L for refresh.
|
||||
|
||||
BASIC CURSOR CONTROL
|
||||
--------------------
|
||||
|
||||
Getting from screenful to screenful is useful, but how do you
|
||||
reposition yourself within a given screen to a specific place?
|
||||
There are several ways you can do this. One way (not the best, but
|
||||
the most basic) is to use the commands previous, backward, forward
|
||||
and next. As you can imagine these commands (which are given to
|
||||
EMACS as {+Sumex:M-^, M-<, M->, M-<lf>}{-Sumex:C-P, C-B, C-F, and C-N} respectively) move the cursor from
|
||||
where it currently is to a new place in the given direction. {-Sumex:Here,
|
||||
in a more graphical form are the commands:
|
||||
|
||||
Previous line, C-P
|
||||
:
|
||||
:
|
||||
Backward, C-B .... Current cursor position .... Forward, C-F
|
||||
:
|
||||
:
|
||||
Next line, C-N
|
||||
|
||||
You'll probably find it easy to think of these by letter. P for
|
||||
previous, N for next, B for backward and F for forward. These are
|
||||
the basic cursor positioning commands and you'll be using them ALL
|
||||
the time so it would be of great benefit if you learn them now.
|
||||
}{+Sumex:Note
|
||||
that these commands are placed in the logical place on the Datamedia
|
||||
keypad.}
|
||||
|
||||
>> Try doing a few {-Sumex:C-N}{+Sumex:M-<lf>}'s to bring the cursor down to this line.
|
||||
Move into the line with {-Sumex:C-F}{+Sumex:M->}'s and up with {-Sumex:C-P}{+Sumex:M-^}'s. Now use
|
||||
these four commands to play around a little. Try moving off
|
||||
the top of this screen and see what happens.
|
||||
|
||||
When you go off the top or bottom of the screen, the text beyond
|
||||
the edge is shifted onto the screen so that your instructions can
|
||||
be carried out while keeping the cursor on the screen.
|
||||
|
||||
A faster way to move around is to move by words or even entire
|
||||
sentences. Here is a summary of simple cursor moving operations
|
||||
including the word and sentence moving commands:
|
||||
|
||||
{-Sumex:C-F}{+Sumex:M->} Move forward a character
|
||||
{-Sumex:C-B}{+Sumex:M-<} Move backward a character
|
||||
|
||||
M-{-Sumex:F}{+Sumex:)} Move forward a word
|
||||
M-{-Sumex:B}{+Sumex:(} Move backward a word
|
||||
|
||||
{-Sumex:C-N}{+Sumex:M-<lf>} Move to next line
|
||||
{-Sumex:C-P}{+Sumex:M-^} Move to previous line
|
||||
|
||||
{-Sumex:C-A}{+Sumex:M-<esc> M-<} Move to beginning of line
|
||||
{-Sumex:C-E}{+Sumex:M-<esc> M->} Move to end of line
|
||||
|
||||
{-Sumex:M-A}{+Sumex:M-<esc> M-(} Move back to beginning of sentence
|
||||
{-Sumex:M-E}{+Sumex:M-<esc> M-)} Move forward to end of sentence
|
||||
|
||||
M-{-Sumex:<}{+Sumex:{*Brace:}} Go to beginning of file
|
||||
M-{-Sumex:>}{+Sumex:}} Go to end of file
|
||||
{+Sumex:
|
||||
|
||||
Just as the <esc> key means "Add the EDIT key to the next command,"
|
||||
typing M-<esc> or <esc><esc> means "Add both the EDIT and the CONTROL
|
||||
keys to the next command." Generally, if C-A does something, M-A will
|
||||
do it bigger, and C-M-A will do it even bigger.
|
||||
|
||||
}
|
||||
>> Try all of these commands now a few times for practice.
|
||||
Since the last two will take you away from this screen,
|
||||
you can come back here with M-V's and C-V's. These are
|
||||
the most often used commands.
|
||||
|
||||
Like all other commands in EMACS, these commands can be given
|
||||
arguments which cause them to be executed repeatedly. The way you
|
||||
give arguments is by prefixing with M-<number> or C-U<number>. For
|
||||
instance, C-U 12 C-V scrolls forward twelve lines, and M-8
|
||||
M-{+Sumex:)}{-Sumex:F} moves forward eight words. Use whichever of
|
||||
these methods is more convenient for you.
|
||||
|
||||
>> Try giving a suitable argument to {-Sumex:C-N or C-P}{+Sumex:M-^ or M-Lf} to come as close
|
||||
as you can to this line in one jump.
|
||||
|
||||
The only apparent exception to this is the screen moving commands,
|
||||
C-V and M-V. When given an argument, they scroll the screen up or
|
||||
down by that many lines, rather than screenfuls. This proves to be
|
||||
much more useful.
|
||||
|
||||
>> Try typing M-8 C-V now.
|
||||
|
||||
Did it scroll the screen up by 8 lines? If you would like to
|
||||
scroll it down you can give an argument to M-V.
|
||||
|
||||
|
||||
INSERTING AND DELETING
|
||||
----------------------
|
||||
|
||||
If you want to type text, just do it. Characters which you can see,
|
||||
such as A, 7, *, etc. are taken by EMACS as text and inserted
|
||||
immediately. You can delete the last character you typed by doing
|
||||
<Delete>. More generally, <Delete> will delete the character immediately
|
||||
before the current cursor position.
|
||||
|
||||
>> Do this now, type a few characters and then delete them
|
||||
by typing <Delete> a few times.
|
||||
|
||||
Remember that most EMACS commands can be given a repeat count; Note
|
||||
that this includes characters which insert themselves.
|
||||
|
||||
>> Try that now -- type M-8 * and see what happens.
|
||||
|
||||
You've now learned the most basic way of typing something in
|
||||
EMACS and correcting errors. You can delete by words or lines
|
||||
as well. Here is a summary of the delete operations:
|
||||
|
||||
C-D delete the next character after the cursor
|
||||
<Delete> delete the character just before the cursor
|
||||
M-D kill the next word after the cursor
|
||||
M-<Delete> kill the word immediately before the cursor
|
||||
C-K kill from the cursor position to end of line
|
||||
|
||||
Note that C-K kills text ONLY TO THE RIGHT of the cursor; if you put
|
||||
the cursor in the middle of the line, C-K will delete the right half
|
||||
of the line. Another C-K will delete the CRLF and join the next line
|
||||
to the end of the current one.
|
||||
|
||||
Now suppose you kill something, and then you decide that you want to
|
||||
get it back? Well, whenever you kill something bigger than a
|
||||
character, EMACS saves it for you. To yank it back, use C-Y. Note
|
||||
that you don't have to be in the same place to do C-Y; This is a
|
||||
good way to move text around. Also note that the difference between
|
||||
"Killing" and "Deleting" something is that "Killed" things can be
|
||||
yanked back, and "Deleted" things cannot.
|
||||
|
||||
For instance, type {-Sumex:C-N}{+Sumex:M-Linefeed} a couple of times to
|
||||
postion the cursor at some line on this screen.{*Refill:}
|
||||
|
||||
>> Do this now, move the cursor and kill that line with C-K.
|
||||
|
||||
Note that a single C-K will kill the contents of the line, and a
|
||||
second C-K will delete the line itself, and make all the other lines
|
||||
move up. If you give C-K a repeat count, it will delete that many
|
||||
lines AND their contents.
|
||||
|
||||
The text that has just disappeared is saved so that you can retrieve
|
||||
it. To retrieve the last killed text and put it where the cursor
|
||||
currently is type C-Y.
|
||||
|
||||
>> Try it; type C-Y to yank the text back.
|
||||
|
||||
Think of C-Y as if you were yanking something back that someone took
|
||||
away from you. Notice that if you do several C-K's all at once the
|
||||
text that is killed is all saved for you so that if you want it back
|
||||
you can yank it back.
|
||||
|
||||
>> Do this now, type C-K several times.
|
||||
|
||||
Now to retrieve that killed text:
|
||||
|
||||
>> Move the cursor down a few lines and type C-Y to retrieve the
|
||||
lines that you killed. This is how you move text from place
|
||||
to place. You can even make copies of a line by killing it
|
||||
and yanking it back as many times as you want. Remember
|
||||
that when you have just killed text, it stays with you so
|
||||
that if you move your cursor elsewhere in the text and
|
||||
then C-Y to yank back the killed text, you will have
|
||||
a method for moving text around in a file.
|
||||
|
||||
EXTENDING THE COMMAND SET
|
||||
-------------------------
|
||||
|
||||
There are many, many more EMACS commands than could possibly be put
|
||||
on all the control and meta characters. EMACS gets around this with
|
||||
the X (eXtend) command. This comes in three flavors:
|
||||
|
||||
C-X Character eXtend
|
||||
M-X Named command eXtend
|
||||
{-Sumex:M-<esc>}{+Sumex:C-M-X} TECO extend
|
||||
|
||||
These are commands that are generally useful but used less than the
|
||||
commands you have already learned about. As an example, one command
|
||||
that is used infrequently is the command to tell EMACS that you'd
|
||||
like to stop editing. The command to do this is C-X C-Z.{-ITS: Think of
|
||||
it as Z for zapping yourself.}
|
||||
|
||||
There are many C-X commands. The ones you need immediately are:
|
||||
|
||||
C-X C-V Visit file. This is how you read in a file
|
||||
to edit it. When you type this, EMACS asks
|
||||
you for a file name to visit. You would respond
|
||||
with the name of the file. Then EMACS brings it
|
||||
in for editing. If the file doesn't exist, then
|
||||
EMACS assumes that you are creating a new file.
|
||||
C-X C-S Save file. This is a command that tells EMACS
|
||||
to save the file you are currently looking at
|
||||
onto disk. It is recommended you give this
|
||||
ocassionally to prevent losing any work in the
|
||||
case of a system crash.
|
||||
C-X C-Z Quit EMACS. This does NOT automatically save your
|
||||
file. If given any argument, it will save your
|
||||
file before exiting. Thus, the standard way to
|
||||
save and exit is C-U C-X C-Z. If you don't like
|
||||
this, there is a way to have EMACS save your buffer
|
||||
at frequent intervals and when you exit. This is
|
||||
called "Auto Save Mode", and is explained below.
|
||||
|
||||
Named eXtend commands are commands which are used even less
|
||||
frequently, or commands which are used only in certain modes. An
|
||||
example of this type of command is the Replace command. When you type
|
||||
M-X, EMACS will prompt you at the bottom of the screen with MM (EMACS
|
||||
calls named eXtend commands MM commands) and then you can type the
|
||||
name of the command you want to execute, in this case, "Replace
|
||||
String". Just type "REP<esc>" and EMACS will complete the command.
|
||||
Then you type the string that you want to replace, an <esc>, the
|
||||
string you want to replace it with, and a return.
|
||||
|
||||
>> Try this now; type M-X rep<esc>try<esc>you can do<return>
|
||||
See how the previous line changed? All the "try"s were
|
||||
changed to "you can do"
|
||||
|
||||
The last kind of extend command is the TECO extend. If you type
|
||||
{+Sumex:C-M-X}{-Sumex:M-<esc>}, then you can type TECO commands,
|
||||
terminated with <esc><esc>. You probably will never have to use this,
|
||||
but it's there if you do.{*Refill:}
|
||||
|
||||
|
||||
CONCLUSION
|
||||
----------
|
||||
|
||||
This is the end of the first lesson in Teach{-ITS:-}Emacs. You now
|
||||
know all the commands that you really need to edit a file. To learn
|
||||
some more about Searching, doing things with arbitrary regions of
|
||||
text, special context oriented commands relating to paragraphs, pages,
|
||||
LISP S-expressions or lists, you should run Teach{-ITS:-}Emacs
|
||||
again and go through the intermediate lesson. For now, you ought to
|
||||
get some practice editing files.{*Refill:}
|
||||
In this lesson, you will learn about some of the additional things
|
||||
that EMACS can help you do. If you need to review what was in the
|
||||
previous lesson, please do so. This lesson is an intermediate level
|
||||
description of some more advanced and useful features.
|
||||
|
||||
MODE LINE
|
||||
---------
|
||||
|
||||
If EMACS sees that you are typing commands slowly it shows them to you
|
||||
at the bottom of the screen in an area called the echo lines. This is
|
||||
just the last few lines at the bottom. The line immediately above
|
||||
these is called the MODE LINE. You may notice that it begins with
|
||||
EMACS (Fundamental) ...more stuff... This is a very useful
|
||||
'information' line. To understand EMACS it is best to consider that
|
||||
it operates in a variety of modes. The default mode is Fundamental
|
||||
which is what you are in now. There are modes for editing different
|
||||
languages and text, such as LISP mode, Text mode, etc. The mode line
|
||||
serves to show you various things about your current state. For
|
||||
instance, on the mode line here you'll notice that it says Main.
|
||||
EMACS operates with things called buffers. This is a place that it
|
||||
puts your file while you are editing it. There are names for buffers.
|
||||
The default buffer upon startup of EMACS is Main. You'll notice that
|
||||
after the Main comes the filename
|
||||
{-ITS:DSK:<your-directory>TEACH-EMACS.TUTORIAL}{+ITS:your-directory;
|
||||
machine: TEACH TEXT}. This is the name of your own temporary copy of
|
||||
the text of the EMACS tutorial; the file you are now visiting.
|
||||
After the name of the file comes --64%--. This indicates that you are
|
||||
64% of the way through the file. When you are at the top or the
|
||||
bottom of the file, EMACS will say --TOP-- or --BOT--, respectively.{*Refill:}
|
||||
|
||||
|
||||
SEARCHING
|
||||
---------
|
||||
|
||||
EMACS can do searches for strings (these are groups of contiguous
|
||||
characters or words) either forward through the file or backward
|
||||
through it. To search for the string means that you are trying to
|
||||
locate it somewhere in the file and have EMACS show you where the
|
||||
occurences of the string exist. EMACS searches are somewhat different
|
||||
from what you may be familiar with. The usual search is called
|
||||
"Incremental Search" -- it is performed as you type in the thing to
|
||||
search for. The command to inititate an incremental search is C-S for
|
||||
forward search, and C-R for reverse search. BUT WAIT! Don't do them
|
||||
now. When you type C-S you'll notice that the mode line changes to
|
||||
'I-Search' and below it you get 'Search:' This tells you that EMACS is
|
||||
in incremental search mode, waiting for you to type the thing that you
|
||||
want to search for.{*Refill:}
|
||||
|
||||
>> Now type C-S to start a search. SLOWLY, one letter at a time,
|
||||
type the word 'cursor', pausing after you type each
|
||||
character to notice what happens to the cursor.
|
||||
|
||||
Did you see what happened? EMACS, in an incremental search, tries
|
||||
to go to the occurence of the string that you've typed out so far.
|
||||
To go to the next occurence of 'cursor' just type C-S again. If no
|
||||
such occurence exists EMACS beeps and tells you that it is a failing
|
||||
search. To get out of Incremental Search Mode, type any EMACS command
|
||||
except C-Q, C-R or C-S. C-Q can be used to "quote" control characters
|
||||
so that you can include them in search strings. C-S and C-R repeat
|
||||
the search in the specified direction.{*Refill:}
|
||||
|
||||
If you are in the middle of an incremental search and type <Delete>,
|
||||
you'll notice that the last character in the search string is erased
|
||||
and the search backs up to the previous occurence of that string. For
|
||||
instance, suppose you currently have typed 'cu' and you see that your
|
||||
cursor is at the first occurence of 'cu'. If you now type <Delete>,
|
||||
the 'u' on the search line is erased and you'll be repositioned in the
|
||||
text to the occurence of 'c' immediately before the first 'cu'. This
|
||||
provides a useful means for backing up while you are searching.{*Refill:}
|
||||
|
||||
The C-S starts a search that looks for any occurence of the search
|
||||
string AFTER the current cursor position. But what if you want to
|
||||
search for something earlier in the text? To do this one should type
|
||||
C-R for Reverse search. Everything that applies to C-S applies to C-R
|
||||
except that the direction of the search is reversed.{*Refill:}
|
||||
|
||||
|
||||
POINT, MARK and REGION
|
||||
----------------------
|
||||
|
||||
Another useful facility would be the ability to perform editing
|
||||
operations on arbitrary regions of text within the buffer. In EMACS,
|
||||
this facility is available in the form of many commands which operate
|
||||
on "the region" or "between point and mark." "Point" is simply where
|
||||
the cursor currently is (cf. the assembly language programmer's "."
|
||||
meaning the current location). The "mark" is another place in the
|
||||
file that, for some reason, EMACS is remembering. This "mark" can be
|
||||
set in many ways. The simplest way is for you to give the command
|
||||
C-@{+Sumex: (That is, <NULL>)}, which places the mark at the current
|
||||
point. Also, you may have noticed that after terminating an
|
||||
Incremental Search, EMACS typed out ^@ in the echo region. This
|
||||
indicates that the mark has been set at the point where you started
|
||||
searching. This mark is not set (and ^@ is not typed out) if you
|
||||
didn't move very far in your search.
|
||||
|
||||
Suppose you moved the cursor to the beginning of this line and placed
|
||||
the mark with the above command and then moved the cursor elsewhere in
|
||||
the file. The area between the mark and the point is called the
|
||||
"region". This is a very important notion within EMACS. It enables
|
||||
one to do wonderous manipulations of text within your buffer, often
|
||||
doing enormous amounts of work within a very small amount of time. We
|
||||
will discuss this region concept at great length.{*Refill:}
|
||||
|
||||
At any time, if you want to reassure yourself of where the mark is
|
||||
currently placed, you can use the C-X C-X (exchange point and mark)
|
||||
command. What happens when you give this command is that the point is
|
||||
relocated to the location of the mark and vice versa. For instance,
|
||||
if you had the mark at the beginning of the buffer and the point
|
||||
somewhere in the middle, you could say C-X C-X and your point would go
|
||||
to the beginning of the buffer and the mark would be placed in the
|
||||
middle of the file, where you had just come from.{*Refill:}
|
||||
|
||||
>> Try this; Move the cursor somewhere on the screen, give the Set
|
||||
Mark command ({-Sumex:C-@}{+Sumex:<NULL>}), move the cursor somewhere
|
||||
else on the screen, and then give the command C-X C-X.
|
||||
|
||||
The following commands are useful for delimiting, manipulating and
|
||||
performing other various and sundry actions on the region:
|
||||
|
||||
Setting the mark and/or region:
|
||||
{+Sumex:<NULL>}{-Sumex:C-@} Place the mark where the cursor currently is
|
||||
C-X C-X Interchange mark and point.
|
||||
M-@ Set mark after end of next word.
|
||||
C-< Set mark at beginning of buffer.
|
||||
C-> Set mark at end of buffer.
|
||||
M-H Put region around current paragraph.
|
||||
C-X C-P Put region around current page.
|
||||
C-X H Put region around entire buffer.
|
||||
|
||||
Doing things to the region:
|
||||
C-W Kill region (can be retrieved with C-Y)
|
||||
M-W Copy region (Just puts the region where C-Y
|
||||
can get it later)
|
||||
|
||||
|
||||
TEXT HANDLING COMMANDS
|
||||
----------------------
|
||||
|
||||
There are a number of other commands useful for specialized kinds of
|
||||
files. Some of the most general commands are those used to handle
|
||||
text. Some of the commands which you have already learned, such as
|
||||
the sentence handling commands {+Sumex:M-<esc> M-(}{-Sumex:M-A} and
|
||||
{+Sumex:M-<esc> M-)}{-Sumex:M-E}, are particularly useful for text. Here
|
||||
are some others:{*Refill:}
|
||||
|
||||
M-U Uppercase word -- converts words to all upper case
|
||||
M-L Lowercase word
|
||||
M-C Capitalize word
|
||||
C-X C-U Uppercase region
|
||||
C-X C-L Lowercase region
|
||||
|
||||
M-[ Backwards paragraph
|
||||
M-] Forwards paragraph
|
||||
M-H Mark paragraph
|
||||
M-Q Fill paragraph
|
||||
|
||||
M-G Fill Region. Given a positive argument, the fill
|
||||
commands will justify too. A negative argument will
|
||||
cause it to remove extra spaces before filling
|
||||
(de-justifying).
|
||||
|
||||
INIT FILES
|
||||
----------
|
||||
|
||||
Not yet written
|
||||
|
||||
MULTIPLE BUFFERS, TWO WINDOW MODE
|
||||
---------------------------------
|
||||
|
||||
Not yet written.
|
||||
|
||||
GETTING MORE HELP
|
||||
-----------------
|
||||
|
||||
In this tutorial we have tried to supply just enough information to
|
||||
get you started using EMACS. There is so much available in EMACS that
|
||||
it would be impossible to explain it all here. However, you may want
|
||||
to learn more about EMACS since it has numerous desirable features
|
||||
that you don't know about yet. EMACS has a great deal of internal
|
||||
documentation. All of these commands can be accessed through the HELP
|
||||
character. If there is no key labelled "HELP" on your keyboard, you
|
||||
can type the <HELP> character as {+ITS:C-_ H (two
|
||||
keystrokes)}{+Sumex:^H}{+Tops20:^_}. To use the HELP features, type
|
||||
the <HELP> character, and then a character saying what kind of help
|
||||
you want. If you are REALLY lost, type <HELP> ? and EMACS will tell
|
||||
you what kinds of help it can give. The options which are most useful
|
||||
are the following:{*Refill:}
|
||||
|
||||
<HELP> C Character describe. You type in the character.
|
||||
Multi-character commands such as C-X C-Z
|
||||
and (if you have no META or EDIT key) <ESC>V
|
||||
are also allowed.
|
||||
<HELP> D Describe a named command. You type in a command.
|
||||
<HELP> A Apropos. Type in a keyword and EMACS will
|
||||
list all the commands containing that keyword.
|
||||
More than one keyword can be specified,
|
||||
seperated by C-O
|
||||
<HELP> I Run the INFO program. INFO contains the
|
||||
complete documentation for EMACS, in
|
||||
great detail. Here is where you can find out
|
||||
about, for instance, special commands for editing
|
||||
LISP code, handling buffers, replacing text, filling
|
||||
and justifying text, etc.
|
||||
|
||||
>> Go ahead and try some of these. Type <HELP> C C-K. EMACS will tell
|
||||
you what that character does. Try typing <HELP> A WORD to find
|
||||
out all the commands that have to do with words. When EMACS
|
||||
prompts you with --MORE--, type a space to see more or a C-L
|
||||
to get your text back. INFO is a fairly sophisticated
|
||||
documentation finder and is somewhat complicated. It probably
|
||||
isn't a good idea to try to use INFO just yet. Use EMACS for
|
||||
a few days, gain some familiarity and confidence in giving
|
||||
commands. And then try INFO out.
|
||||
TV users guide to EMACS
|
||||
-----------------------
|
||||
|
||||
This is meant as a tutorial to introduce the veteran TV user to EMACS,
|
||||
an editor written at MIT. It has many advantages over TV in terms of
|
||||
capabilities and flexibility; some of these will be detailed below. It
|
||||
also has a few drawbacks, but I think you'll find that the advantages to
|
||||
be gained are worth it.
|
||||
|
||||
In order to get TVUSER EMACS loaded automatically when you start up EMACS
|
||||
(it's loaded right now, by the way, so this will get you the same EMACS you
|
||||
are running now), I have copied the file <EMACS>TVUSER.INIT into your
|
||||
directory as <your-directory>EMACS.INIT. When EMACS starts up, it will read
|
||||
in and execute the TECO commands in this file, which will load the TVUSER
|
||||
library. The TVUSER library contains many things suggested by and for TV
|
||||
users who are trying to switch over to EMACS. Many of the commands are
|
||||
exactly the same in TVUSER EMACS as in TV. If in doubt (at least when reading
|
||||
this file), try it. You'll learn later how to check what a character does.
|
||||
|
||||
>> Go ahead and do [W] to move to the next window.
|
||||
You'll be expected to do [W] when necessary to window forward...
|
||||
|
||||
The notation used in this document will be pretty much a hodge-podge --
|
||||
You are certainly familiar with the [X] notation for characters typed
|
||||
with the EDIT key held down, and with the ^X notation for control
|
||||
characters. In EMACS, there is a distinction between control characters
|
||||
(ascii codes 0-37, 177) and characters with the Control modifier bit
|
||||
(exactly like the EDIT bit). This means, for instance, that the
|
||||
character Control-> is possible in EMACS, althugh it has no ascii
|
||||
representation. At MIT, where EMACS was written, and at SU-AI, the
|
||||
keyboards have two "EDIT" keys, called Control and Meta. These were
|
||||
BOTH true modifier bits, so you could meaningfully talk about Control->.
|
||||
For Tenex and Tops-20 sites, the Meta key is exactly the same as the
|
||||
EDIT key on Datamedias, and every effort is made to insure that ^X will
|
||||
have the same effect as C-X. In EMACS, you will often see the notation
|
||||
C-X to mean ^X and M-X to mean [X]. Usually a direct translation will
|
||||
be sufficient, but if you hold down the control key and type ">", for
|
||||
instance, you will get a Control-uparrow, because Datamedias can only
|
||||
generate ASCII codes plus the EDIT bit, and C-> is not an ASCII
|
||||
character. In any case, M-X may be typed by holding down the edit key
|
||||
and typing "X", or by typing <ESC> or <ALTMODE> and then typing "X". ^X
|
||||
may be typed by either holding down the control key and typing "X" or
|
||||
typing ^^ (that's control-uparrow) and then typing "X". There is even
|
||||
Control-Meta-X, which you type by holding down BOTH the control and edit
|
||||
keys while typing "X", or typing M-$ (that is, hold down the edit key
|
||||
and type <ESC> or <ALTMODE>) and then typing "X", or by typing <ESC>
|
||||
twice and then typing X. In summary (if you're still with us):
|
||||
|
||||
Character How to type it
|
||||
--------- --------------
|
||||
C-X, ^X Hold down the control key while typing "X"
|
||||
or Type C-^ (the bottom unlabeled key on DM'S) and then "X"
|
||||
|
||||
M-X, [X] Hold down the "edit" key while typing "X"
|
||||
or Type <ESC>or <ALTMODE> and then type "X"
|
||||
|
||||
C-M-X, [^X] Hold down both the EDIT and CONTROL keys while typing "X"
|
||||
or Hold down the EDIT key and type <ESC> X (that is [$X] OR [$]X)
|
||||
or Type <ESC> twice and then type "X" (That is, $$X)
|
||||
|
||||
|
||||
Advantages of EMACS: a quick rundown.
|
||||
-------------------------------------
|
||||
|
||||
EMACS permits handling of numerous files at once. Also permits you to
|
||||
view two files at once on the same screen for comparison purposes, or to
|
||||
move text between them. EMACS has commands for justifying and filling
|
||||
text, and automatically breaking long lines on typein ("autofill" mode).
|
||||
|
||||
EMACS has good self-documentation. You can find out what any given
|
||||
command does while in EMACS, or ask for a command that does a certain
|
||||
thing given a keyword.
|
||||
|
||||
It is possible to put any EMACS function on any character. It is this
|
||||
ability that permits the TV library described below, and you can further
|
||||
change even these settings to suit your own preferences. If you know
|
||||
TECO (which, unfortunately, tends to be incomprehensible to all but MIT
|
||||
hackers), you can extend the command set almost arbitrarily.
|
||||
|
||||
EMACS processes input and screen updating asynchronously, hence often is
|
||||
much better about not writing more than it needs to; TVEDIT makes you
|
||||
wait for display to be completed before obeying the next command. E.g.
|
||||
if you type two window commands in quick succession in TV, it will
|
||||
completely display the first before moving on to the second. In EMACS,
|
||||
as soon as it has processed the second command it knows you want to see
|
||||
a different window, and it will stop writing the first one and go right
|
||||
on to the second.
|
||||
|
||||
EMACS has commands for string substitution.
|
||||
|
||||
|
||||
Disadvantages of EMACS, or things TVEDIT does better:
|
||||
----------------------------------------------------
|
||||
|
||||
EMACS does not remember which file you edited last, or where you were
|
||||
in the file (though you can continue after quitting out of emacs and
|
||||
your file will still be there; this only applies to starting up EMACS
|
||||
afresh).
|
||||
|
||||
EMACS does not view pages very specially. Due to some fundamental
|
||||
limitation, it can't tell you what page it is on, though it can find
|
||||
pages (i.e. there is a "go to next page" command). It does not maintain
|
||||
a directory like TVEDIT does, so locating an arbitrary page in the file
|
||||
may take longer (I have no data on this; emacs seems as fast as TV in
|
||||
most operations). However, there is a library of commands to treat
|
||||
pages in a manner similar to SU-AI's E editor, called the PAGE library.
|
||||
|
||||
While EMACS is smart about your typeahead, it often updates the screen
|
||||
after changes less than perfectly optimally. This is usually not a
|
||||
problem, but can be annoying at times.
|
||||
|
||||
EMACS so far has no good commands for refreshing portions of the screen
|
||||
if your display gets trashed by line noise or system messages.
|
||||
|
||||
|
||||
Differences that you need to know about between TV and TVUSER EMACS
|
||||
-------------------------------------------------------------------
|
||||
|
||||
184
src/e142/teco.files
Normal file
184
src/e142/teco.files
Normal file
@@ -0,0 +1,184 @@
|
||||
|
||||
This is a list of all the files composing EMACS as distributed,
|
||||
what they do, where they belong on a Twenex system,
|
||||
and where they are copied from on the MIT-AI machine.
|
||||
|
||||
-- FOR EMACS --
|
||||
|
||||
Files on SYS:
|
||||
|
||||
TECO.EXE ;Runnable bare ITS TECO
|
||||
;(optional; need not be kept around at all).
|
||||
EMACS.EXE ;The runnable EMACS
|
||||
XINFO.EXE ;A stand-alone INFO program
|
||||
TAGS.EXE ;The runnable TAGS program
|
||||
|
||||
Files on <EMACS>
|
||||
|
||||
Those without homes on AI.
|
||||
|
||||
INFO..TECO. ;TECO init file used in building stand-alone INFO
|
||||
TECPUR.EXE ;The shared portions of TECO
|
||||
TAGS.FAI ;The source for the Twenex TAGS program
|
||||
EMACS.CHART ;EMACS "wall chart" command list
|
||||
EMACS.DOC ;Complete printout of EMACS self-documentation
|
||||
;EMACS.CHART and EMACS.DOC are not the same
|
||||
;on Twenex as on ITS. They should be generated
|
||||
;afresh on Twenex (using ABSTR), not copied.
|
||||
|
||||
Those with homes on AI:.TECO.;
|
||||
|
||||
TECO.FILES ;This file.
|
||||
TECO.nnn ;TECO source
|
||||
TECO.ARCHIV ;TECO changes (documentation)
|
||||
TWENEX.DIFS ;Differences between EMACS on ITS and EMACS on Twenex
|
||||
TWENEX.INSTALL ;Instructions for installing EMACS on Twenex.
|
||||
EMACS.CTL ;Batch file for assembling TECO and building EMACS.
|
||||
|
||||
Those with homes on AI:EMACS;
|
||||
|
||||
EMACS.INIT ;Default EMACS init file. Home on AI is TWENEX.INIT.
|
||||
ABSTR.:EJ ;Macros for generating EMACS.CHART and EMACS.DOC
|
||||
BASIC.EMACS ;Help B prints this file.
|
||||
CONV ;INFO documentation on EMACS internals.
|
||||
DIRED.:EJ ;Directory editor. No home on AI.
|
||||
;The home is on <EMACS> on the pumpkin.
|
||||
DOCOND.:EJ ;Document conditionalizer and macro processor.
|
||||
EINIT.:EJ ;Library of commands used for building EMACS.
|
||||
EPATCH ;File of patches to be loaded in when building EMACS.
|
||||
GRIND.:EJ ;Commands for grinding Lisp and Macsyma code.
|
||||
INFO.:EJ ;the TECO code for INFO.
|
||||
INFO.EMACS ;EMACS change announcements in chronological order.
|
||||
INFO.OEMACS ;More change announcements.
|
||||
IVORY.:EJ ;An alternate purifier used for WORDAB, PL1LIB, TMACS.
|
||||
LUNAR.:EJ ;Some macros that might be useful.
|
||||
MAZLIB.:EJ ;Commands for solving mazes.
|
||||
MQREPL.:EJ ;Commands to perform several Query Replaces over several files.
|
||||
PICTUR.:EJ ;Commands for editing pictures made out of characters.
|
||||
PL1LIB.:EJ ;Commands for editing PL/1
|
||||
PURIFY.:EJ ;Commands for building :EJ files from sources.
|
||||
TAGS.:EJ ;Commands for finding labels fast using tag tables.
|
||||
TDEBUG.:EJ ;Commands for debugging new EMACS macros.
|
||||
TEMACS.:EJ ;Miscelaneous commands.
|
||||
TMACS.:EJ ;Miscelaneous commands.
|
||||
TWENEX.:EJ ;Commands only for Twenex.
|
||||
VARG.:EJ ;Makes the arrow keys and numeric keypad work on VT52's.
|
||||
WORDAB.:EJ ;Implements Word Abbreviation Mode.
|
||||
[PURE] ;The fundamental EMACS macro library.
|
||||
|
||||
Those with homes on AI:EMACS1;
|
||||
Unless otherwise noted, these are sources for the
|
||||
similarly named :EJ files, or, if no :EJ file is
|
||||
mentioned above, part of the source of EMACS.:EJ.
|
||||
|
||||
ABSTR
|
||||
BASIC-EMACS.TXT ;DOCOND source from which BASIC.EMACS is made.
|
||||
;Home on AI is EMACS1;BASIC EMACS
|
||||
BUFFER
|
||||
CCL ;Part of the source for PURIFY.:EJ
|
||||
CRL
|
||||
DIRED ;No home on AI. Home is on <EMACS> on pumpkin.
|
||||
DOC
|
||||
DOCOND
|
||||
EINIT
|
||||
FILES
|
||||
INDENT
|
||||
INFO
|
||||
ISEARC
|
||||
MQREPL
|
||||
PICTUR
|
||||
PURIFY
|
||||
SEARCH
|
||||
SUPPRT
|
||||
TAGS
|
||||
TWENEX
|
||||
USRCOM
|
||||
VARS
|
||||
WINDOW
|
||||
WRDLST
|
||||
^RBASE
|
||||
|
||||
Other random sources that belong on <EMACS>
|
||||
|
||||
TDEBUG ;Home on MC:EMACS;
|
||||
GRIND ;Home on MC:EMACS;
|
||||
LUNAR ;Home on MC:MOON;. Note that the Twiddle
|
||||
;macros are exact, superfluous duplicates
|
||||
;of the Exchange macros built into EMACS.
|
||||
WORDAB ;Home on MC:ECC;. Must be purified with IVORY.
|
||||
PL1LIB ;Home on MC:ECC;. Must be purified with IVORY.
|
||||
TMACS ;Home on MC:ECC;. Must be purified with IVORY.
|
||||
VARG ;Home on MC:BAK;
|
||||
|
||||
Even more random:
|
||||
sample init files, to give you an idea of how it's done.
|
||||
|
||||
MMCM.INIT ;MMCM's EMACS.INIT file, as a sample.
|
||||
;Home is AI:MMCM;.EMACS (INIT).
|
||||
RMS.INIT ;RMS's EMACS.INIT file.
|
||||
;Home is AI:RMS;.EMACS (INIT).
|
||||
HENRY.INIT ;HENRY's EMACS.INIT library.
|
||||
;Home is AI:HENRY;.EMACS (INIT).
|
||||
HENRY. ;Source for HENRY's library.
|
||||
;Home is AI:HENRY;.EMACS >
|
||||
Also, MOON's init file is essentially LUNAR.:EJ.
|
||||
|
||||
|
||||
-- The INFO hierarchy --
|
||||
Unless otherwise noted, each file documents the
|
||||
program or :EJ library of the same name.
|
||||
|
||||
ATSIGN ;Info on the ATSIGN program (v.i.)
|
||||
DIR ;INFO Directory. Do NOT copy this from ITS!
|
||||
DOCOND
|
||||
EMACS
|
||||
INFO
|
||||
MIDAS
|
||||
MIDAS.ARCHIV ;Chronological MIDAS change announcements.
|
||||
PL1LIB
|
||||
TAGS
|
||||
TDEBUG
|
||||
TECORD ;Info on TECO. Not really part of the INFO
|
||||
;hierarchy, but on <INFO> for MM Tecdoc to find.
|
||||
TMACS
|
||||
WORDAB
|
||||
|
||||
|
||||
-- FOR MIDAS --
|
||||
MIDAS is the assembler used to assemble TECO, @, and MIDAS.
|
||||
|
||||
These files can live wherever it is convenient for you.
|
||||
|
||||
MIDAS ;Source of MIDAS. Home on AI:MIDAS;.
|
||||
TSRTNS ;More of source of MIDAS. Home on AI:MIDAS;.
|
||||
XJSYS ;Convenient interface to JSYS's (no fixed ACs).
|
||||
MIDAS.REL ;REL file for MIDAS.
|
||||
MIDAS.EXE ;Executable MIDAS.
|
||||
|
||||
These have their homes on AI:SYS;.
|
||||
They should be somewhere on SYS: when
|
||||
assembling TECO (or MIDAS, etc.)
|
||||
|
||||
ITSDFS.MID ;Definitions of ITS system calls.
|
||||
ITSBTS.MID ;Definitions of arguments to ITS system calls.
|
||||
DECDFS.MID ;Similar definitions for Bottoms-10.
|
||||
DECBTS.MID
|
||||
TWXDFS.MID ;Similar definitions for Twenex.
|
||||
TWXBTS.MID ;This is the only one needed for TECO itself
|
||||
|
||||
|
||||
-- FOR @ --
|
||||
@ is a program used for making multiple-file
|
||||
cross-reference listings. Use @ when you would
|
||||
expect to make an assembly listing.
|
||||
|
||||
These files can live wherever is convenient for you.
|
||||
|
||||
ATSIGN.MID ;Source of @. Home is AI:QUUX;@ >
|
||||
ATSIGN.EXE ;Runnable @ program.
|
||||
|
||||
|
||||
-- FOR FUN --
|
||||
|
||||
EMACS.LETTER ;Letter to sites receiving EMACS. Home is on AI:.TECO.;
|
||||
JARGON.TXT ;MIT-Stanford glossary of jargon. Home is AI:GLS;JARGON >
|
||||
69
src/e142/teco.init
Normal file
69
src/e142/teco.init
Normal file
@@ -0,0 +1,69 @@
|
||||
!* -*-TECO-*- *!
|
||||
|
||||
!* This is the TECO INIT for EMACS. It sets up the EMACS environment
|
||||
necessary for dumping a new EMACS EJ file. *!
|
||||
ft entering teco.init
|
||||
-1fs^Idisablew !* do this first for comments!
|
||||
:ejDSK:EMACS;EMACS :EJu0 !* load in the EMACS library!
|
||||
er ec fs i fileu1 fs if versionu2 !* save filename and version of!
|
||||
1u4 !* EMACS library!
|
||||
fs osteco"n !* Twenex!
|
||||
:ejDSK:<EMACS>TWENEX.:EJw !* load in the TWENEX library!
|
||||
er ec fs i fileu3 !* save filename of TWENEX library!
|
||||
'
|
||||
:i*& Macro Get,q0m(q0+4)u.m !* call the loader in the EMACS library!
|
||||
!* to find .M!
|
||||
f[ :ej page !* save :EJ page for flushing EINIT!
|
||||
:ejDSK:EMACS;EINIT :EJw !* load EINIT library!
|
||||
2u4
|
||||
m(m.m& Load Essential Environment)
|
||||
3u4
|
||||
q1m.vEMACS Library Filename !* save EMACS library filename!
|
||||
q2m.vEMACS Versionw !* version no. too!
|
||||
fs osteco"n !* Twenex!
|
||||
q3m.vTWENEX Library Filenamew' !* save TWENEX library filename!
|
||||
4u4
|
||||
m(m.m& Load Patches) !* Load fixes written since [PURE] was made!
|
||||
5u4
|
||||
m.vMM ^R Exit to EXEC
|
||||
m(m.m& Load Default Environment)
|
||||
6u4
|
||||
m(m.mPurify Variables) !* smash variable names to point to pure!
|
||||
!* space if there is a copy there!
|
||||
f] :ej page !* flush EINIT!
|
||||
7u4
|
||||
!* Now create a Startup to be called from the ..L!
|
||||
fsosteco"e @:i*| !* ITS!
|
||||
etDSK:EMACS !* set device name and FN2!
|
||||
fs hsname fs dsnamew !* fill in directory!
|
||||
fs xuname fs dfn1w !* and FN1!
|
||||
1:<er>"l
|
||||
1:<er*>"l
|
||||
erEMACS;*''
|
||||
fs d file[2 et@ >
|
||||
!** end of system-dependent code!
|
||||
fs msname fs dsname
|
||||
qEMACS Version:\u1 !* sigh, still need this!
|
||||
@y 1a-127"n ]2 :m(.,zfx*)' !* if init doesnt begin with rubout then!
|
||||
!* execute it as TECO commands!
|
||||
hk 1,m(m.mLoad Library)2 !* else load it as a library,!
|
||||
!* saving the filename!
|
||||
]2 :m..l
|
||||
|m.vMM & Startup EMACS'
|
||||
"# @:i*| !* Twenex!
|
||||
etDSK:EMACS.INIT fs hsname fs dsname
|
||||
1:<er>"l erDSK:<EMACS>'
|
||||
fs d file[2 et foo..
|
||||
!** end of system-dependent code!
|
||||
fs msname fs dsname
|
||||
qEMACS Version:\u1 !* sigh, still need this!
|
||||
@y 1a-127"n ]2 :m(.,zfx*)' !* if init doesnt begin with rubout then!
|
||||
!* execute it as TECO commands!
|
||||
hk 1,m(m.mLoad Library)2 !* else load it as a library!
|
||||
!* saving the filename!
|
||||
]2 :m..l
|
||||
|m.vMM & Startup EMACS'
|
||||
0u4
|
||||
0u0 0u1 0u2 0u3 !* zero the q-regs we've used!
|
||||
|
||||
hk
|
||||
21685
src/e142/teco.mid
Normal file
21685
src/e142/teco.mid
Normal file
File diff suppressed because it is too large
Load Diff
21705
src/e142/teco.mid.783
Normal file
21705
src/e142/teco.mid.783
Normal file
File diff suppressed because it is too large
Load Diff
23050
src/e142/teco.mid.886
Normal file
23050
src/e142/teco.mid.886
Normal file
File diff suppressed because it is too large
Load Diff
BIN
src/e142/teco.symbols
Normal file
BIN
src/e142/teco.symbols
Normal file
Binary file not shown.
BIN
src/e142/teco.symbols.783
Normal file
BIN
src/e142/teco.symbols.783
Normal file
Binary file not shown.
BIN
src/e142/teco.symbols.784
Normal file
BIN
src/e142/teco.symbols.784
Normal file
Binary file not shown.
54
src/e142/tecord.differences
Normal file
54
src/e142/tecord.differences
Normal file
@@ -0,0 +1,54 @@
|
||||
DIFFERENCES BETWEEN ITS TECO AND TWENEX TECO, VERSION 589
|
||||
|
||||
|
||||
EG does not insert a 3-digit number with leap year information,
|
||||
but rather a blank line.
|
||||
|
||||
EO (set dumped on tape bit) does not exist.
|
||||
|
||||
EQ (create link) does not exist.
|
||||
|
||||
<n>ER is the same as ER.
|
||||
|
||||
EX<file>$
|
||||
if a file is open for output, does EE<file>$, then instructs the EXEC
|
||||
to repeat the last CCL type command (load, execute, compile, debug).
|
||||
|
||||
FS CCL FNAME$
|
||||
a string, in the same format as FS D FILE$, of the jfn given in AC1 if
|
||||
TECO was started at the CCL entry point; or zero if it was not or the
|
||||
filename has already been read.
|
||||
|
||||
FS D VERSION$
|
||||
-1 has its usual meaning, since all versions are numeric.
|
||||
|
||||
FS FDCONVERT$
|
||||
when given two args, will use the first as the ODTIM format. When given
|
||||
no arg, will do an IDTIM from the buffer, and can thus parse formats
|
||||
other than those created by FS FDCONV$ with an arg.
|
||||
|
||||
FS HELP MAC$
|
||||
there is no way to input a HELP on 20X.
|
||||
|
||||
FS OS TECO$
|
||||
returns the operating system TECO is running on, 0 for ITS, 1 for 20X.
|
||||
|
||||
FS UPTIME$
|
||||
returns its value in milliseconds, rather than 30ths of seconds.
|
||||
|
||||
|
||||
|
||||
|
||||
SIXBIT quantities.
|
||||
|
||||
commands which return a SIXBIT word as a value, actually return string
|
||||
pointers on twenex. The F6 commands do not convert strings to sixbit,
|
||||
but just pass strings through, so that the difference can be made trans-
|
||||
parent by using them after any command that returns a SIXBIT quantity.
|
||||
|
||||
filenames.
|
||||
|
||||
TECO attempts to convert as much as possible ITS style filenames to
|
||||
20X style, including quoting special characters, to allow many more
|
||||
macros to work without conversion.
|
||||
|
||||
67
src/e142/tvedit.
Normal file
67
src/e142/tvedit.
Normal file
@@ -0,0 +1,67 @@
|
||||
!* -*-TECO-*- !
|
||||
|
||||
!~Filename~:! !Commands for somewhat TVEDIT like EMACS environment.!
|
||||
EMACS
|
||||
|
||||
!& Setup EMACS Library:! !S Set up for TVEDIT environment.!
|
||||
|
||||
0fo..q TVEDIT_setup_hook[0
|
||||
fq0"g m0 ' !* Run users macro if any.!
|
||||
|
||||
m.m^R_Exchange_Characters u.T
|
||||
m.m^R_Down_Real_Line u..J
|
||||
16.fs ^R init u..M
|
||||
m.m^R_Up_Real_Line u..^
|
||||
m.m^R_Forward_Word u..)
|
||||
m.m^R_Backward_Word u..(
|
||||
m.m^R_TVEDIT_Next_page u..N
|
||||
m.m^R_TVEDIT_Previous_page u..P
|
||||
2fs ^R init u..<
|
||||
6fs init u..>
|
||||
q..>, 440.fs ^R c macro
|
||||
q..<, 577.fs ^R c macro
|
||||
m.m^R_Goto_Beginning u..{
|
||||
m.m^R_Goto_End u..}
|
||||
m.m^R_End_of_Real_Line u..]
|
||||
m.m^R_Beginning_of_Real_Line u..[
|
||||
4fs ^R init u..K
|
||||
m.m^R_TVEDIT_Return_to_superior u:.X()
|
||||
q.Z u:.X()
|
||||
er<emacs>emacs.init @y :m(hfx*)
|
||||
|
||||
!^R TVEDIT Next Page:! !^R Move to the next page in the buffer.!
|
||||
|
||||
1m(m.m^R_Set_Bounds_Page)
|
||||
0,fs z fs bound
|
||||
|
||||
|
||||
!^R TVEDIT Previous Page:! !^R Move to the previous page in the buffer.!
|
||||
|
||||
-1m(m.m^R_Set_Bounds_Page)
|
||||
0,fs z fs bound
|
||||
|
||||
|
||||
!& Read Filename:! !S Read a filename from the tty.
|
||||
A non-zero argument means file will be use for output
|
||||
(for version number defaulting). The prompt should be
|
||||
supplied as a string argument, without trailing colon or
|
||||
space. Returns a string of the filename read.!
|
||||
|
||||
:I*[1 !* Read prompt argument.!
|
||||
ET:<>FOO..0 ET !* Clear all defaults.!
|
||||
|
||||
FN FS RGETTY"N !* Set up for when done (in case ^G).!
|
||||
0FO..QFlush_Prompts"N !* Maybe erase what just happened.!
|
||||
FS ECHO DIS
|
||||
CFS ECHO DIS ''
|
||||
"# FS ECHO LINES-1"N !* Else at least a crlf.!
|
||||
^ FT !* Provided it wont erase it.!
|
||||
''
|
||||
|
||||
FS LISTEN"E !* Prompt unless user's starting typing.!
|
||||
FS RGETTY"N
|
||||
FS ECHO DIS CFS ECHO DIS' !* Clear echo area.!
|
||||
^ FT 1:_' !* Give prompt.!
|
||||
|
||||
"N 400000.+' 60000. :ET !* Get filename from tty.!
|
||||
FS D FILE !* And return a string of it.!
|
||||
41
src/e142/tvedit._ej
Normal file
41
src/e142/tvedit._ej
Normal file
@@ -0,0 +1,41 @@
|
||||
(W
|
||||
[0+8+FQ(+4)[1
|
||||
0FO10F"G+Q1
|
||||
'W+FQ()+4U1
|
||||
FQ1"L0'
|
||||
,Q1:M(Q1+4(]1]0))
|
||||
@I9E]kkrZfy/GZ3='."(& Setup TVEDIT`0fo..qTVEDIT setup hook[0
|
||||
fq0"gm0'
|
||||
m.m^R Down Real Lineu..J
|
||||
m.m^R Up Real Lineu..^
|
||||
m.m^R Forward Wordu..)
|
||||
m.m^R Backward Wordu..(
|
||||
m.m^R TVEDIT Next pageu..N
|
||||
m.m^R TVEDIT Previous pageu..P
|
||||
2fs^Rinitu..<
|
||||
6fsinitu..>
|
||||
q..>,440.fs^Rcmacro
|
||||
q..<,577.fs^Rcmacro
|
||||
m.m^R Goto Beginningu..{
|
||||
m.m^R Goto Endu..}
|
||||
m.m^R End of Real Lineu..]
|
||||
m.m^R Beginning of Real Lineu..[
|
||||
4fs^Rinitu..K
|
||||
m.m^R TVEDIT Return to superioru.Z
|
||||
q.Zu:.X()
|
||||
0^R TVEDIT Next Page11m(m.m^R Set Bounds Page)
|
||||
0,fszfsbound
|
||||
^R TVEDIT Previous Page2-1m(m.m^R Set Bounds Page)
|
||||
0,fszfsbound
|
||||
^R TVEDIT Return to Superior'f+
|
||||
fm(m.m^R Return to Superior)~Filename~
|
||||
TVEDIT~DOC~ ~Filename~:Commands for somewhat TVEDIT like EMACS environment.
|
||||
~DOC~ & Setup TVEDIT&S Set up for TVEDIT environment.
|
||||
~DOC~ ^R TVEDIT Next Page-^R Move to the next page in the buffer.
|
||||
!~DOC~ ^R TVEDIT Previous Page1^R Move to the previous page in the buffer.
|
||||
&~DOC~ ^R TVEDIT Return to Superior!^R Clears the screen first.
|
||||
~DIRECTORY~`& Setup TVEDIT
|
||||
^R TVEDIT Next Page
|
||||
^R TVEDIT Previous Page
|
||||
^R TVEDIT Return to Superior
|
||||
~INVERT~[1<Q1-1U1Q1FP;>Q1
|
||||
216
src/e142/tvlib.chart
Normal file
216
src/e142/tvlib.chart
Normal file
@@ -0,0 +1,216 @@
|
||||
EMACS ^R-Command Chart (as of 03/10/79 11:05:44):
|
||||
|
||||
Non-Control Non-Meta Characters:
|
||||
|
||||
Backspace moves back one character (or several).
|
||||
Tab ^R Tab to Tab Stop
|
||||
Linefeed ^R Indent New Line
|
||||
Return ^R CRLF
|
||||
Altmode ^R Prefix Meta
|
||||
Rubout deletes characters backwards.
|
||||
|
||||
Control Characters:
|
||||
|
||||
.. ^R Complement SAIL Mode
|
||||
Backspace moves back one character (or several).
|
||||
Tab ^R Tab to Tab Stop
|
||||
Linefeed ^R Indent New Line
|
||||
Return ^R CRLF
|
||||
Altmode exits from ^R mode.
|
||||
Space ^R Set/Pop Mark
|
||||
% .. ^R Replace String
|
||||
- .. is part of the next command's argument.
|
||||
0 thru 9 is part of the next command's argument.
|
||||
; .. ^R Indent for Comment
|
||||
< .. ^R Mark Beginning
|
||||
= .. ^R Where Am I
|
||||
> .. ^R Mark End
|
||||
@ .. ^R Set/Pop Mark
|
||||
A .. ^R Backward Sentence
|
||||
B .. moves back one character (or several).
|
||||
C .. ^R Prefix Control-Meta
|
||||
D .. ^R Backward Kill Word
|
||||
E .. ^R Forward Sentence
|
||||
F .. moves forward one character (or several).
|
||||
G .. quits execution of any command.
|
||||
H .. moves back one character (or several).
|
||||
I .. ^R Tab to Tab Stop
|
||||
J .. ^R Indent New Line
|
||||
K .. ^R Kill Line
|
||||
L .. ^R Next Screen
|
||||
M .. is bare TECO's Control-M
|
||||
N .. ^R Down Comment Line
|
||||
O .. inserts one CRLF (or several) after point.
|
||||
P .. ^R Up Real Line
|
||||
Q .. ^R Quoted Insert
|
||||
R .. ^R Reverse Search
|
||||
S .. ^R Incremental Search
|
||||
U .. ^R Universal Argument
|
||||
V .. ^R Quote Control Char
|
||||
W .. ^R Backward Kill Word
|
||||
X .. is a prefix character. See below.
|
||||
Y .. ^R Un-kill
|
||||
Z .. ^R Prefix Control-Meta
|
||||
\ .. ^R Half Window Up
|
||||
] .. ^R Half Window Down
|
||||
^ .. ^R Prefix Control
|
||||
Rubout deletes backwards, turning tabs into spaces.
|
||||
Meta Characters:
|
||||
|
||||
Tab ^R End of Real Line
|
||||
Linefeed ^R Down Real Line
|
||||
Return moves to the beginning of the next line.
|
||||
Altmode ^R Prefix Control-Meta
|
||||
Space moves forward one character (or several).
|
||||
# .. ^R Change Font Word
|
||||
% .. ^R Query Replace
|
||||
' .. ^R Upcase Digit
|
||||
( .. ^R Backward Word
|
||||
) .. ^R Forward Word
|
||||
, .. ^R Kill Region
|
||||
- .. is part of the next command's argument.
|
||||
. .. ^R Copy Region
|
||||
/ .. ^R Describe
|
||||
0 thru 9 is part of the next command's argument.
|
||||
; .. ^R Indent for Comment
|
||||
< .. moves back one character (or several).
|
||||
= .. ^R Where Am I
|
||||
> .. moves forward one character (or several).
|
||||
? .. ^R Describe
|
||||
@ .. ^R Mark Word
|
||||
A .. ^R Repeat Skip/Zap
|
||||
B .. ^R Reverse Skip
|
||||
C .. ^R Uppercase Initial
|
||||
D .. ^R Kill Word
|
||||
E .. ^R Forward Sentence
|
||||
F .. ^R Forward Word
|
||||
G .. ^R Nth Page
|
||||
H .. ^R Mark Paragraph
|
||||
J .. ^R Indent New Comment Line
|
||||
K .. deletes one character (or several) forward.
|
||||
L .. ^R Lowercase Word
|
||||
M .. ^R Mark Paragraph
|
||||
N .. ^R Refresh Line
|
||||
P .. ^R Nth Page
|
||||
Q .. ^R Fill Paragraph
|
||||
R .. ^R Move to Screen Edge
|
||||
S .. ^R Skip to Character
|
||||
T .. ^R Exchange Words
|
||||
U .. ^R Uppercase Word
|
||||
V .. ^R Previous Screen
|
||||
W .. ^R Next Window
|
||||
X .. ^R Execute Completed MM Command
|
||||
Y .. ^R Un-kill Pop
|
||||
Z .. ^R Zap to Character
|
||||
[ .. ^R Backward Paragraph
|
||||
\ .. ^R Delete Horizontal Space
|
||||
] .. ^R Forward Paragraph
|
||||
^ .. ^R Up Real Line
|
||||
_ .. ^R Indent Rigidly
|
||||
{ .. ^R Goto Beginning
|
||||
} .. ^R Goto End
|
||||
Rubout moves back one character (or several).
|
||||
Control-Meta Characters:
|
||||
|
||||
Backspace ^R Mark Defun
|
||||
Tab ^R Indent for LISP
|
||||
Linefeed ^R Down Real Line
|
||||
Return ^R Back to Indentation
|
||||
( .. ^R Beginning of Real Line
|
||||
) .. ^R End of Real Line
|
||||
- .. is part of the next command's argument.
|
||||
0 thru 9 is part of the next command's argument.
|
||||
; .. ^R Kill Comment
|
||||
< .. ^R Beginning of Real Line
|
||||
= .. ^R Indicate Page/line
|
||||
> .. ^R End of Real Line
|
||||
? .. ^R Documentation
|
||||
@ .. ^R Set/Pop Mark
|
||||
A .. ^R Backward Kill Sentence
|
||||
B .. ^R Backward Sexp
|
||||
C .. exits from ^R mode.
|
||||
D .. ^R Kill Sentence
|
||||
E .. ^R End of DEFUN
|
||||
F .. ^R TV Return to Superior
|
||||
G .. ^R Format Code
|
||||
H .. ^R Mark Defun
|
||||
I .. ^R Indent for LISP
|
||||
J .. ^R Down Real Line
|
||||
K .. ^R Kill Line
|
||||
L .. ^R Beginning of Real Line
|
||||
M .. ^R Mark Sentence
|
||||
N .. ^R New Window
|
||||
O .. ^R Split Line
|
||||
P .. ^R Backward List
|
||||
Q .. ^R Fill Region
|
||||
R .. ^R Reposition Window
|
||||
S .. ^R Center Line
|
||||
T .. ^R Exchange Sexps
|
||||
U .. ^R Backward Up List
|
||||
V .. ^R Scroll Other Window
|
||||
W .. ^R Scroll Other Window
|
||||
X .. ^R Execute Minibuffer
|
||||
Y .. ^R Append Next Kill
|
||||
Z .. exits from ^R mode.
|
||||
[ .. ^R Beginning of DEFUN
|
||||
\ .. ^R Bottom of Screen
|
||||
] .. ^R End of DEFUN
|
||||
^ .. ^R Top of Screen
|
||||
Rubout ^R Backward Kill Sexp
|
||||
|
||||
Control-X is an escape prefix command with these subcommands:
|
||||
|
||||
^X ^B List Buffers
|
||||
^X ^C ^R Return to Superior
|
||||
^X ^D ^R Directory Display
|
||||
^X ^E ^R Edit File
|
||||
^X ^F ^R Find File
|
||||
^X Tab ^R Toggle Overwrite Mode
|
||||
^X ^L ^R Lowercase Region
|
||||
^X ^N ^R Set Goal Column
|
||||
^X ^O ^R Delete Blank Lines
|
||||
^X ^P ^R Mark Page
|
||||
^X ^Q ^R Do Not Write File
|
||||
^X ^R ^R Read File
|
||||
^X ^S ^R Save File
|
||||
^X ^T ^R Mini Visited File
|
||||
^X ^U ^R Uppercase Region
|
||||
^X ^V ^R Visit File
|
||||
^X ^W Write File
|
||||
^X ^X ^R Exchange Point and Mark
|
||||
^X ^Z ^R TV Return to Superior
|
||||
^X Altmode ^R Re-execute Minibuffer
|
||||
^X # ^R Change Font Region
|
||||
^X ( ^R Define Keyboard Macro
|
||||
^X . ^R Set Fill Prefix
|
||||
^X 1 ^R One Window
|
||||
^X 2 ^R Two Windows
|
||||
^X 3 ^R View Two Windows
|
||||
^X 4 ^R Modified Two Windows
|
||||
^X : ^R Set Column
|
||||
^X ; ^R Set Comment Column
|
||||
^X = ^R Where Am I
|
||||
^X A ^R Append to Buffer
|
||||
^X B Select Buffer
|
||||
^X D ^R Dired
|
||||
^X F ^R Set Fill Column
|
||||
^X G ^R Get Q-reg
|
||||
^X H ^R Mark Whole Buffer
|
||||
^X I ^R Toggle Overwrite Mode
|
||||
^X K Kill Buffer
|
||||
^X L ^R Count Lines Page
|
||||
^X M Mail
|
||||
^X N ^R Set Bounds Region
|
||||
^X O ^R Other Window
|
||||
^X P ^R Set Bounds Page
|
||||
^X R ^R RMAIL
|
||||
^X W ^R Set Bounds Full
|
||||
^X X ^R Put Q-reg
|
||||
^X [ ^R Previous Page
|
||||
^X ] ^R Next Page
|
||||
^X ^ ^R Grow Window
|
||||
^X _ ^R Underline Region
|
||||
^X { ^R Mark Beginning
|
||||
^X } ^R Mark End
|
||||
^X ~ ^R Not Modified
|
||||
^X Rubout ^R Backward Kill Sentence
|
||||
65
src/e142/twenex.instal
Normal file
65
src/e142/twenex.instal
Normal file
@@ -0,0 +1,65 @@
|
||||
@. Note: The file TECO.FILES describes all of the files and what
|
||||
they are used for.
|
||||
|
||||
A. TECO
|
||||
The TECO that supports EMACS is written in MIDAS, a dialect
|
||||
of assembly language; assembling will require the MIDAS
|
||||
assembler, MIDAS.EXE, and the JSYS bit definitions,
|
||||
TWXBTS.MID, in addition to the source file, TECO.nnn.
|
||||
[Note: since the MIDAS assembler doesn't understand TWENEX
|
||||
version numbers, the version number of the source of TECO
|
||||
must be contained in the file's extension. It must be there,
|
||||
in order for TECO dump files to appropriately point to one
|
||||
another.]
|
||||
|
||||
1. <EMACS> vs EMACS: and <INFO> vs INFO:
|
||||
If the system configuration does not include an <EMACS>
|
||||
directory, and one cannot be easily setup, it is possible to
|
||||
have TECO translate references to this directory to the
|
||||
correspondingly named device, which can then point to any
|
||||
directory. If the assembly switch EMCSDV is set non-zero,
|
||||
this translation is enabled; the batch control file,
|
||||
EMACS.CTL has the correct provisions for setting this
|
||||
switch. Likewise INFODV will cause tranlation of the INFO
|
||||
directory.
|
||||
If your system has more than one structure, then you should
|
||||
also setup system logical names for EMACS: and INFO:, in order
|
||||
that files will be found that are on PS:, even when you are
|
||||
connected to another structure, and turn on these switches.
|
||||
|
||||
2. Terminal types
|
||||
TECO has display support for various common terminal types,
|
||||
which are conditionally assembled and assigned to GTTYP
|
||||
indices. On pass 1, the assembler will type a prompt for
|
||||
each known terminal type and expect either the GTTYP index
|
||||
for that terminal type (which can be the corresponding JSYS
|
||||
mnemonic), or just a CR to assemble out that terminal type
|
||||
altogether. The batch control file shows assembly for DEC
|
||||
VT52s and VT05s, and blank lines for other types, and should
|
||||
be appropriately modified to correspond to the system
|
||||
configuration.
|
||||
|
||||
3. Files produced
|
||||
After the assembly, starting the resultant program at
|
||||
symbolic location PURIFY will generate two binary files,
|
||||
TECO.EXE.nnn, and TECPUR.EXE.nnn, the former is a stand
|
||||
alone version of the TECO, and need not be kept around
|
||||
after EMACS.EXE and INFO.EXE have been made, and
|
||||
the latter the binary file that EMACS will load when started
|
||||
up.
|
||||
|
||||
B. EMACS
|
||||
The NEMACS.EXE produced by the DUMP macro (see batch control
|
||||
file) should be installed as SYS:EMACS.EXE, perhaps after
|
||||
verifying that it basically runs. Other EMACS binary files
|
||||
live in either <EMACS> or EMACS: depending on the
|
||||
configuration (vide supra).
|
||||
|
||||
C. INFO
|
||||
In addition to EMACS' self documenting features, the INFO
|
||||
library provides a means of perusing the EMACS documentation
|
||||
(or any documentation suitably formatted for that matter).
|
||||
Most files are of the form <INFO>SUBJECT.., but see above
|
||||
about INFO:. <INFO>TECORD.nnn is the complete documentation
|
||||
of the TECO itself that supports EMACS.
|
||||
|
||||
BIN
src/e142/varg._ej
Normal file
BIN
src/e142/varg._ej
Normal file
Binary file not shown.
1055
src/e142/wordab.
Normal file
1055
src/e142/wordab.
Normal file
File diff suppressed because it is too large
Load Diff
BIN
src/e142/wordab._ej
Normal file
BIN
src/e142/wordab._ej
Normal file
Binary file not shown.
820
src/e142/wordab._ej.547
Normal file
820
src/e142/wordab._ej.547
Normal file
@@ -0,0 +1,820 @@
|
||||
pW[0 +8+fq(+4)[1
|
||||
0fo10 f"g +q1 '
|
||||
+fq()+4u1
|
||||
fq1"l 0'
|
||||
,q1:m(q1+4(]1 ]0))]T^8H mw3(32:c:u::n{ t ~5?-=)
|
||||
))6)B)b)r!n!}1~2
|
||||
22)/:/H11GR&y'%0&&alu$7+3m3z(](h8!8-(#(x5=5J#6p2N2\u!DRN`Te$g$v"I"W.:!/!>ijV)V6KKA[AdA8ADdd i.iCh/hB;o;YY*OON\NkA A^F^U_#_2``Z4ZFb4bEbVbh`saazbG%G3\\ GjGx[k[{GGGUII==*MM)dBdR]|^
|
||||
ff C'C<C4C<KcKyee%?
|
||||
? @'@<b}c>@>OTaTsRqSPmQO+O@[$[6Z_ZpB1BAYRYd;D;N;8;?nOnU& Setup WORDAB LibraryQ[1[2
|
||||
6*5fsQVectoru.e
|
||||
m.m& WRDAB Mode or Global Expandu:.e(0)
|
||||
m.m& Expandu:.e(1)
|
||||
0u:.e(2)
|
||||
0u:.e(3)
|
||||
0u:.e(4)
|
||||
0u:.e(5)
|
||||
1,m.m& Setup Compressed WORDAB Librariesu1
|
||||
q1"n fm1'
|
||||
0fo..qWORDAB SETUP HOOKu1
|
||||
q1"n m1'
|
||||
m.m& WRDAB Set Mode Line Hooku1
|
||||
0fo..qSet Mode Line Hooku2
|
||||
q2"e q1'"# :i*21'm.vSet Mode Line Hookw
|
||||
&Old Word Abbrev Character Describe}[0[1
|
||||
1,(:i*Type word abbrev key to describe: )m.i
|
||||
@fiu0
|
||||
q0fs^RCMacro-(m.m^R Abbrev Expand And Call Old Char)"n
|
||||
q0m(m.m& Charprint)
|
||||
ft does not run ^R Abbrev Expand And Call Old Char. It runs
|
||||
q0fs^RCMacro :m(m.mDescribe)'
|
||||
8[..e q0:\u1 ]..e
|
||||
qMM # WRDAB Old 1u1
|
||||
ftAfter possibly expanding, q0m(m.m& Charprint) ft runs
|
||||
q1:m(m.mDescribe) ^R Abbrev Expand OnlyB!^R Abbrev Expand !
|
||||
.(
|
||||
0,0a"c m:.e(0)'
|
||||
)-."e ff"g fg'' 1&^R Abbrev Expand And Call Old Charu!^R Abbrev Expand !
|
||||
ff"E
|
||||
0,0a"c m:.e(0)''
|
||||
[.1 8[..e q..0fs^RIndirect:\u.1 ]..e
|
||||
f @:mMM # WRDAB Old .1$^R Abbrev Expand And Self-InsertU!^R Abbrev Expand !
|
||||
ff"e 0,0a"c m:.e(0)''
|
||||
f@:m(q..0fs^RIndirectfs^Rinit)!& WRDAB Mode or Global Expand`-fwx*[.1 qMode[.2
|
||||
:fo..qX .1 .2 Abbrevf"lw :fo..qX .1 * Abbrevf"lw''u.2
|
||||
:m:.e(1)& Global Expand7-fwx*[.1
|
||||
:fo..qX .1 * Abbrevf"lw'[.2
|
||||
:m:.e(1)& Expand+[..0
|
||||
q:..q(q.2+2)[.3
|
||||
q.3fp-101"N :i:..q(q.2+2)1'
|
||||
"# .(g.3)j .(\+1:\u:..q(q.2+2))j fq.3d'
|
||||
-fq.1d
|
||||
0,0a--"E
|
||||
-1fo..qWord Abbrev Prefix Mark+1-."E
|
||||
:i.1-.1
|
||||
-d''
|
||||
.u:.e(3)
|
||||
.[.4
|
||||
g:..q(q.2+1)
|
||||
.[.5
|
||||
-1[.7
|
||||
fq.1[.8
|
||||
<%.7-q.8;
|
||||
q.7 :g.1"a0;'>
|
||||
q.7 :g.1"u
|
||||
q.4j :fwl
|
||||
1 @fc
|
||||
q.8-1 :g.1"u
|
||||
0fo..qWordab All Caps"e
|
||||
0u.3
|
||||
:< 2:fwl .-q.5; %.3w
|
||||
1 @fc >w
|
||||
q.3"e q.4,q.5 @fc''
|
||||
"#
|
||||
q.4,q.5 @fc''
|
||||
'
|
||||
q.1u:.e(2)
|
||||
:i:.e(5)
|
||||
q.5j
|
||||
q.4,q.5 f
|
||||
ff-1"G oUPDATE '
|
||||
0fo..qAuto Fill Mode"E oUPDATE '
|
||||
0fo..qFill Columnf"e w fsWidth-10'u.1
|
||||
fsSHpos-q.1-2"l oUPDATE'
|
||||
m.m^R Indent New Comment Line[I
|
||||
q.5(:fx.5
|
||||
)-q.4f<!OUT!
|
||||
fsSHpos-q.1-2:;
|
||||
<.-1,(0l.):fb "e f;OUT'
|
||||
q.1-fsHpos;>
|
||||
.-q.4"L .u:.e(3)
|
||||
.,q.4x:.e(5)
|
||||
.u.4'
|
||||
@f k
|
||||
:fx.3
|
||||
@mIw
|
||||
:0L.,(:2Lg.3).f>
|
||||
:l .(g.5)j
|
||||
!UPDATE!
|
||||
|
||||
q.4,.x:.e(4)
|
||||
^R Unexpand Last Word>z-.[.4
|
||||
fn z-q.4j
|
||||
q:.e(2)"e fg @ft
|
||||
No last expansion 0fsEchoActivew 1 '
|
||||
q:.e(2)[.1
|
||||
q:.e(4)[.3
|
||||
0,1 :g.1 [.2
|
||||
.2--"E
|
||||
1,fq.1 :g.1 u.1'
|
||||
"# :i.2'
|
||||
q:.e(3)[.5
|
||||
1:<q.5j>"N zj'
|
||||
fq.3f~.3"n fg @ft
|
||||
No last expansion 0fsEchoActivew 1 '
|
||||
fq.3d
|
||||
.,(g:.e(5)
|
||||
g.2
|
||||
g.1). f
|
||||
:i*Fundamental fo..qMODEu.2
|
||||
:fo..qX .1 .2 Abbrevf"G u.2'
|
||||
"# :fo..qX .1 * Abbrevf"G u.2''
|
||||
q:..q(q.2+2)[.3
|
||||
.(g.3)j .(\-1:\u:..q(q.2+2))j fq.3d
|
||||
1 Word Abbrev Mode
|
||||
WORDAB= [.2[.3
|
||||
ff&1"E 1u.3'
|
||||
"# "'N,0u.3'
|
||||
q.3m.vWord Abbrev Modew
|
||||
ff&2"n "n m.m& Global Expandu:.e(0)'
|
||||
"# m.m& WRDAB Mode or Global Expandu:.e(0)''
|
||||
|
||||
0fo..qWord Abbrev Hooku.2
|
||||
q.2"N q.3 m.2'
|
||||
q.3"E
|
||||
q.2"E 0u:.x(U)
|
||||
0u:.x()
|
||||
0u:.x()
|
||||
0u:.x(-)
|
||||
0u:.x(+)'
|
||||
m(m.m& Set Mode Line)
|
||||
'
|
||||
0fo..qWORDAB Ins Chars"E
|
||||
:i*!~@#;$%^&*-_=+[]()\|:`"'{},<.>/?
|
||||
m.vWORDAB Ins Charsw
|
||||
:i* m.vWORDAB Old Charsw'
|
||||
q.2"E
|
||||
m.m^R Unexpand Last Word u:.x(U)
|
||||
m.m^R Add Mode Word Abbrev u:.x()
|
||||
m.m^R Inverse Add Mode Word Abbrev u:.x()
|
||||
m.m^R Add Global Word Abbrev u:.x(+)
|
||||
m.m^R Inverse Add Global Word Abbrev u:.x(-)
|
||||
m.m^R Abbrev Expand Only u... w
|
||||
m.m^R Word Abbrev Prefix Mark(!"!) u..'
|
||||
ff&2"n q:.x()(q:.x(+)u:.x())u:.x(+)
|
||||
q:.x()(q:.x(-)u:.x())u:.x(-)''
|
||||
:m(m.m& Set Mode Line)Define Word Abbrevs[.1[.2[.4
|
||||
g(q..o(f[BBindw))
|
||||
bj 0s <:s;ric>
|
||||
zj i
|
||||
|
||||
bj
|
||||
< .-z;
|
||||
:s:; -d
|
||||
0fx.1
|
||||
@f k
|
||||
0,1a-("E d :flfx.2 d'
|
||||
"# :i.2*'
|
||||
@f k
|
||||
@f0123456789 fx.4
|
||||
fq.4"E :i.40'
|
||||
@f k
|
||||
0,1a-34"N :i*No quote to start expansionfsErr
|
||||
'
|
||||
d i:i*
|
||||
0s" !'! <:s"e :i*No quote to end expansionfsErr'
|
||||
0,1a-":@; c> !'!
|
||||
0,1a-15."n :i*Possible unquoted " in expansion -- final " not at end of linefsErr !''!'
|
||||
-d
|
||||
iM.VX .1 .2 Abbrevw
|
||||
i M.CX .1 .2 Abbrev.4
|
||||
l>
|
||||
j 0s"" <:s; -d>
|
||||
m( hx* )
|
||||
List Word Abbrevsr[.1 f[BBindw
|
||||
m(m.mInsert Word Abbrevs)
|
||||
bj i
|
||||
abbrev: (mode) count "expansion"
|
||||
|
||||
|
||||
ht ft
|
||||
Done.
|
||||
Insert Word Abbrevs [1[2[3[4[5[6
|
||||
q..ou1
|
||||
f[BBind q..ou6 [..o
|
||||
:fo..qX u2
|
||||
q2"L -q2u2'
|
||||
q1u..o i
|
||||
|
||||
-l
|
||||
fq..q/5-q2/3(
|
||||
q2-1u2
|
||||
)< q:..Q(%2)u3
|
||||
q:..Q(%2)u4
|
||||
q:..Q(%2)u5
|
||||
q4fp"L oNEXT'
|
||||
f~(0,2:g3)X "N oNEXT'
|
||||
f~(fq3-7,fq3:g3) Abbrev"N oNEXT'
|
||||
2,fq3-7g3
|
||||
-s d i:
|
||||
1a-*"E d'"# i( :l i)'
|
||||
9i g5 i " !'!
|
||||
"f4:"l q6u..o g4
|
||||
j 0s" <:s; i"> !''! hx4 q1u..o' !'!
|
||||
g4 i"
|
||||
!'!
|
||||
!NEXT! >
|
||||
Make Word Abbrevr:i*( :i*( :i*[.3)[.2)[.1
|
||||
fq.3"E qMODEu.3'
|
||||
q.1,q.2 m(m.m& Check And Make Word Abbrev).3
|
||||
w 1 & Check And Make Word Abbrev`:i*[2 [1 [3
|
||||
q1[4 [5
|
||||
fq1< 0,1:g4u5
|
||||
5"b fg @ft
|
||||
Break chars not allowed in abbrev 0fsEchoActivew 1 '
|
||||
1,fq4:g4u4>
|
||||
m.m& Shorten String[S
|
||||
0fo..qX 1 2 Abbrevu4
|
||||
q4"N f=34"N FG
|
||||
q4mSu4
|
||||
@ftRedefine "1" from "4"? !''''!
|
||||
1m(m.m& Yes or No)"E @ftNot redefined.
|
||||
0fsEchoActivew 1 ''
|
||||
"# @ftAlready so defined.
|
||||
0fsEchoActivew 1 ''
|
||||
q3m.vX 1 2 Abbrevw
|
||||
m.cX 1 2 Abbrev0
|
||||
@:i*|m.m& Make Non-Usage Abbrev Variable[V
|
||||
q..q[..o
|
||||
| fo..qLately Changed Abbrevsu4
|
||||
q3m(m.m& Teco Quote String)u3
|
||||
@:i*|4
|
||||
MVX 1 2 Abbrev30|(
|
||||
)m.vLately Changed Abbrevsw
|
||||
&Write Incremental Word Abbrev File[1
|
||||
e[e\ fne^e] f[DFile 1f[FNamSyntax
|
||||
etDSK: fsHSNamefsDSNamew etINCABS >
|
||||
4,fIncremental Filef"e w'u1
|
||||
f[BBind g(:i* fo..qLately Changed Abbrevs)
|
||||
z"e :i*No incremental abbrevs to write fsErr'
|
||||
eihpef1
|
||||
er fsIFileu1 ec @ft
|
||||
Written: 1
|
||||
0fsEchoActivew 1%Read Incremental Word Abbrev FileJ[1 f[DFile
|
||||
e[ fne] f[DFile 1f[FNamSyntax
|
||||
etDSK: fsHSNamefsDSNamew etINCABS >
|
||||
4,fIncremental word abbrev filef"e w'u1
|
||||
et1
|
||||
f[BBindw er @y
|
||||
m( hx*f(m.vLately Changed Abbrevsw) )
|
||||
& Teco Quote String3f[BBind g()
|
||||
bm(m.m& Teco Quote Area)
|
||||
hx* & Teco Quote Area).-z(
|
||||
< .,:fb; ir >
|
||||
)+zj #^R Inverse Add Mode Word AbbrevQqMode[.4
|
||||
.-z[.0
|
||||
-:fwl
|
||||
-fwx*[.1
|
||||
1,m(m.m& Read Line)Expansion for .4 abbrev ".1": [.2 !''!
|
||||
q.2"e 1'
|
||||
fq.2"e 1'
|
||||
m(m.mMake Word Abbrev).1.2
|
||||
@m(m.m^R Abbrev Expand Only)f
|
||||
q.0+zj
|
||||
1%^R Inverse Add Global Word AbbrevH.-z[.0
|
||||
-:fwl
|
||||
-fwx*[.1
|
||||
1,m(m.m& Read Line)Expansion for global abbrev ".1": [.2 !''!
|
||||
q.2"e 1'
|
||||
fq.2"e 1'
|
||||
m(m.mMake Word Abbrev).1.2*
|
||||
@m(m.m^R Abbrev Expand Only)f
|
||||
q.0+zj
|
||||
1^R Add Mode Word Abbrev"L f @:m(m.m^R Kill Mode Word Abbrev) '
|
||||
:i*FUNDAMENTAL fo..qMODE [.1
|
||||
f @m(m.m& Add Word Abbrev).1.1 Abbrev
|
||||
w 1 ^R Add Global Word Abbreve"L f @:m(m.m^R Kill Global Word Abbrev) '
|
||||
f @m(m.m& Add Word Abbrev)*Global Abbrev
|
||||
w 1 & Add Word Abbrev+:i* [.2
|
||||
[.3[.4[.5.[.6 fnq.6j
|
||||
1:<fs^RMark+1f"G-1 u.3 1;'
|
||||
"E .(:f(j)u.3)j 1;'
|
||||
"N -fwl .u.3 fwl 1;'
|
||||
>"N FG F*w 1 '
|
||||
Q.3,. fx.3
|
||||
m.m& Shorten String[S
|
||||
m.m& Read Line[R
|
||||
q.3mSu.4
|
||||
1,mR for ".4": [.1 !''!
|
||||
q.1"E 1 '
|
||||
q.1,q.3 m(m.m& Check And Make Word Abbrev).2
|
||||
1
|
||||
|
||||
0fo..qAbbrev Auto Save Mode"N
|
||||
0fo..qAbbrev Auto Save Count+1u.4
|
||||
q.4-(20fo..qAbbrev Auto Save Delay)"G
|
||||
0m.vAbbrev Auto Save Countw
|
||||
@ft
|
||||
(Abbrev Auto Save) m(m.mWrite Word Abbrev File)
|
||||
0fsEchoActive
|
||||
'"# q.4m.vAbbrev Auto Save Countw''
|
||||
1 & Shorten Stringb[.3[.4[.5
|
||||
fq.3-40"G
|
||||
0,16:g.3u.4
|
||||
fq.3-16,fq.3:g.3u.5
|
||||
:i.4.4.....5'
|
||||
"# q.3u.4'
|
||||
q.4 ^R Word Abbrev Prefix Marka!^R Abbrev Expand !
|
||||
ff"E
|
||||
0,0a"c m:.e(0)''
|
||||
. m.vWord Abbrev Prefix Markw
|
||||
.,(i-).
|
||||
& WRDAB Set Mode Line Hook+0(fsQPPtr[Q
|
||||
)[.0
|
||||
m(m.m& WRDAB Process Options Hook)
|
||||
0fo..qWord Abbrev Mode"N
|
||||
q.0"E :i.0 Abbrev'"# :i.0.0 Abbrev''
|
||||
q.0( qQfsQPUnwindw
|
||||
)^R Kill Mode Word Abbrev
|
||||
:i*Fundamental fo..qMODE[.2
|
||||
1, m(m.m& Read Line)Kill .2 Abbrev: [.1
|
||||
q.1"E '
|
||||
0fo..qX .1 .2 Abbrev"E
|
||||
0fo..qX .1 * Abbrev"E
|
||||
FG @ft".1" is neither .2 mode nor global abbrev. !''!
|
||||
0fsEchoActivew 1 '
|
||||
"# FG @ft".1" is not a .2 mode abbrev, but is a global abbrev.
|
||||
Kill it? !''!
|
||||
1m(m.m& Yes Or No)"E
|
||||
@ft Not killed. 0fsEchoActivew 1 '
|
||||
:i.2*''
|
||||
m(m.mKill Variable)X .1 .2 Abbrev
|
||||
:i* fo..qLately Changed Abbrevsu.4
|
||||
@:i*|.4
|
||||
m(m.mKill Variable)X .1 .2 Abbrev| m.vLately Changed Abbrevsw
|
||||
w 1 ^R Kill Global Word Abbrev61, m(m.m& Read Line)Kill Global Abbrev: [.1
|
||||
q.1"E '
|
||||
0fo..qX .1 * Abbrev"E
|
||||
FG @ft".1" is not a global abbrev.
|
||||
0fsEchoActivew 1 !''! '
|
||||
m(m.mKill Variable)X .1 * Abbrev
|
||||
:i* fo..qLately Changed Abbrevsu.4
|
||||
@:i*|.4
|
||||
m(m.mKill Variable)X .1 * Abbrev| m.vLately Changed Abbrevsw
|
||||
w 1 Kill All Word Abbrevs8[.1[.2[.3
|
||||
q..q[..o zj
|
||||
:f<!DONE! 15r
|
||||
1<
|
||||
0,2:g(.fsWord)u.3
|
||||
f~.3X f"N "L f;DONE'
|
||||
1;'
|
||||
.fsWordu.3
|
||||
.+5fsWordu.2
|
||||
q.2fp:;
|
||||
fq.3-7,fq.3 :g.3 u.3
|
||||
f~.3 Abbrev"E 15d'
|
||||
>
|
||||
>
|
||||
Edit Word Abbrevs3@:i*| 1m.vAbort Edit Word Abbrevsw
|
||||
fs^RExitw |[.G
|
||||
0m.vAbort Edit Word Abbrevsw
|
||||
f[BBind
|
||||
m(m.mInsert Word Abbrevs) bj
|
||||
:i*Edit Word Abbrevs[..J
|
||||
|
||||
fsEchoDisw CfsEchoDisw
|
||||
0fo..qAbort Edit Word Abbrevs"E
|
||||
m(m.mKill All Word Abbrevs)
|
||||
m(m.mDefine Word Abbrevs)
|
||||
@ftWord abbrevs redefined.
|
||||
0fsEchoActivew
|
||||
'
|
||||
"# FG @ftWord abbrevs NOT redefined.
|
||||
0fsEchoActivew'
|
||||
m(m.mKill Variable)Abort Edit Word Abbrevs
|
||||
Sort Word AbbrevsEbj < .-z;
|
||||
.-(:l)."E k'"# l'>
|
||||
:
|
||||
:s"$f"Lw
|
||||
-fwl \'!'!
|
||||
l
|
||||
& WRDAB Off PO Check@-1[.4[.5
|
||||
< %.4-fq.1;
|
||||
q.4:g.1u.5
|
||||
q.5-q.6"E q.5m.7' >
|
||||
& WRDAB On PO Check@-1[.4[.5
|
||||
< %.4-fq.1;
|
||||
q.4:g.1u.5
|
||||
q.5-q.6"N q.5m.7' >
|
||||
& WRDAB Process Options Hook[.0[.1[.6[.7[.8
|
||||
0fo..qMM ^R Abbrev Expand for Tabf"EoRST'u.0
|
||||
0fo..qWord Abbrev Mode"N
|
||||
qI-q.0"n
|
||||
qIm(m(m.m& Global or Local)I)MM # WRDAB Old 11
|
||||
q.0uI'
|
||||
0fo..qMM & WRDAB On PO Checkf"EoRST'u.0
|
||||
0fo..qMM & WRDAB Turn On Ins Charf"EoRST'u.7
|
||||
0fo..qMM & WRDAB Turn On Old Charf"EoRST'u.8
|
||||
'
|
||||
"# qI-q.0"E
|
||||
qMM # WRDAB Old 11uI'
|
||||
0fo..qMM & WRDAB Off PO Checkf"EoRST'u.0
|
||||
0fo..qMM & WRDAB Turn Off Ins Charf"EoRST'u.7
|
||||
0fo..qMM & WRDAB Turn Off Old Charf"EoRST'u.8
|
||||
'
|
||||
0fo..qWORDAB Ins Charsu.1
|
||||
q.1"E :i.1'
|
||||
0fo..qMM ^R Abbrev Expand And Self-Insertf"EoRST'u.6
|
||||
m.0
|
||||
0fo..qWORDAB Old Charsu.1
|
||||
q.1"E :i.1'
|
||||
0fo..qMM ^R Abbrev Expand And Call Old Charf"EoRST'u.6
|
||||
q.8u.7
|
||||
m.0
|
||||
|
||||
!RST!
|
||||
m.m& WRDAB Process Options Hookm.vMM & WRDAB Process Options Hookw
|
||||
m.m^R Abbrev Expand for Tabm.vMM ^R Abbrev Expand for Tabw
|
||||
m.m& WRDAB On PO Checkm.vMM & WRDAB On PO Checkw
|
||||
m.m& WRDAB Turn On Ins Charm.vMM & WRDAB Turn On Ins Charw
|
||||
m.m& WRDAB Turn On Old Charm.vMM & WRDAB Turn On Old Charw
|
||||
m.m& WRDAB Off PO Checkm.vMM & WRDAB Off PO Checkw
|
||||
m.m& WRDAB Turn Off Ins Charm.vMM & WRDAB Turn Off Ins Charw
|
||||
m.m& WRDAB Turn Off Old Charm.vMM & WRDAB Turn Off Old Charw
|
||||
m.m^R Abbrev Expand And Self-Insertm.vMM ^R Abbrev Expand And Self-Insertw
|
||||
m.m^R Abbrev Expand And Call Old Charm.vMM ^R Abbrev Expand And Call Old Charw
|
||||
|
||||
f:m(m.m& WRDAB Process Options Hook)
|
||||
& WRDAB Turn On Ins Char[.0
|
||||
q.0[.4
|
||||
q.4fp"L
|
||||
m.m^R Abbrev Expand And Self-Insertu.0
|
||||
'
|
||||
f~.4!^R Abbrev Expand -19"e '
|
||||
qWORDAB Ins Chars[.1
|
||||
f.1[.2
|
||||
0,q.2:g.1[.3
|
||||
q.2+1,fq.1:g.1u.1
|
||||
:iWORDAB Ins Chars.3.1
|
||||
qWORDAB Old Charsu.1
|
||||
:i.2
|
||||
:iWORDAB Old Chars.1.2
|
||||
m.m^R Abbrev Expand And Call Old Charu.0
|
||||
[.6 8[..e :\u.6 ]..e
|
||||
q.4m(m(m.m& Global or Local).0)MM # WRDAB Old .6
|
||||
& WRDAB Turn On Old Char@[.0
|
||||
q.0[.1
|
||||
q.1fp"G
|
||||
f~.1!^R Abbrev Expand -19"E
|
||||
''
|
||||
m.m^R Abbrev Expand And Call Old Charu.0
|
||||
[.6 8[..e :\u.6 ]..e
|
||||
q.1m(m(m.m& Global or Local).0)MM # WRDAB Old .6
|
||||
& WRDAB Turn Off Ins Char[.0
|
||||
fs^RInitu.0 & WRDAB Turn Off Old CharJ[.6 8[..e :\u.6 ]..e
|
||||
0fo..qMM # WRDAB Old .6[.1
|
||||
[.2
|
||||
q.1u.2 ^R Abbrev Expand for Tab!^R Abbrev Expand !
|
||||
0,0a[.1
|
||||
.,.f
|
||||
f@mMM # WRDAB Old 11f
|
||||
0,0a"B q.1"C
|
||||
ff"E
|
||||
-@f k
|
||||
0,0a"c m:.e(0)'
|
||||
f @mMM # WRDAB Old 11f'''
|
||||
1& Global or Localv[1[2[3[9
|
||||
[ -1:fsQPHome(]*w)u3
|
||||
qBuffer Indexu9 q9+8u2
|
||||
q:.b(q9)-9/2u1
|
||||
q1< q:.b(%2)-q3"e q.L ' %2w >
|
||||
q.V Read Word Abbrev Filef[DFile 1f[FnamSyntax
|
||||
0fo..qLast Word Abbrev Filef"n fsDFilew'
|
||||
"#w etDSK:WORDAB DEFNS fsHSnamefsDSnamew'
|
||||
4,fWord Abbrev Filef"ew'fsDFilew
|
||||
fsDFilem.vLast Word Abbrev Filew
|
||||
f[BBind er @y
|
||||
10f~m.m& Make "n
|
||||
fsDFile[1
|
||||
m(m.mRun Library)WABCONConvert Old Word Abbrev File1
|
||||
er @y hx*m.vQWABL Definitionsw
|
||||
'
|
||||
hx* m.vQWABL Definitionsw
|
||||
mQWABL definitions Write Word Abbrev File/[.0[.1[.2[.3[.4[.5 f[DFile
|
||||
1f[FnamSyntax
|
||||
0fo..qLast Word Abbrev Filef"n fsDFilew'
|
||||
"#w etDSK:WORDAB DEFNS fsHSnamefsDSnamew'
|
||||
4,fWord Abbrev Filef"ew'u.0
|
||||
et.0 fsDFileu.0
|
||||
q.0m.vLast Word Abbrev Filew
|
||||
f[BBind
|
||||
m.m& Teco Quote Area[Q
|
||||
:fo..qX u.2
|
||||
q.2"L -q.2u.2'
|
||||
ff&1"E
|
||||
^i|m.m& Make Usage Abbrev Variable[V
|
||||
|'"#
|
||||
^i|m.m& Make Non-Usage Abbrev Variable[V
|
||||
|'
|
||||
iq..q[..o
|
||||
|
||||
fq..q/5-q.2/3(
|
||||
q.2-1u.2
|
||||
)< q:..Q(%.2)u.3
|
||||
q:..Q(%.2)u.4
|
||||
q:..Q(%.2)u.5
|
||||
q.4fp"L oNEXT'
|
||||
f~(0,2:g.3)X "N oNEXT'
|
||||
f~(fq.3-7,fq.3:g.3) Abbrev"N oNEXT'
|
||||
iMV.3
|
||||
.(g.4)mQ i
|
||||
ff&1"E g.5 i'
|
||||
i
|
||||
|
||||
!NEXT! >
|
||||
hx* m.vQWABL Definitionsw
|
||||
1,m(m.m Write File).0
|
||||
Word Abbrev Apropos.:i*[0[1
|
||||
f[BBindw
|
||||
0fo..qQWABL Definitionsu1
|
||||
q1"n g1 j 2:k'
|
||||
0fo..qLately Changed Abbrevsu1
|
||||
q1"n .(g1)j 2:k'
|
||||
j <:s
|
||||
m(m.mKill Variable)X ; 2r .,(:lr).x1
|
||||
0lk fsZ-.fsVZw
|
||||
j<:s
|
||||
MV1; 0l .,(3s).k>
|
||||
0fsVZw >
|
||||
bj <:s
|
||||
MVX ;
|
||||
|
||||
>
|
||||
bj l
|
||||
< :s0;
|
||||
-s
|
||||
|
||||
fkc .,(fwl).t ft:
|
||||
c 0,1a-*"N
|
||||
ft( .,(s Abbrev fkc).t ft)'
|
||||
ft "!'!
|
||||
s Abbrev
|
||||
.,(sr).t
|
||||
ft"
|
||||
!'!
|
||||
:s
|
||||
|
||||
; >
|
||||
ftDone.
|
||||
|
||||
& Make Usage Abbrev Variable
|
||||
:i*[.1
|
||||
:i*[.2
|
||||
:i*[.0
|
||||
:FO..Q.1[.3
|
||||
Q.3"L -Q.3*5J 15,0I 15R q.1,.FSWORDW 0,.+10FSWORDW
|
||||
-Q.3U.3'
|
||||
q.3+1*5j q.2,.fswordw
|
||||
5c q.0,.fswordw $& Make Non-Usage Abbrev Variable:i*[.1
|
||||
:i*[.2
|
||||
:FO..Q.1[.3
|
||||
Q.3"L -Q.3*5J 15,0I 15R q.1,.FSWORDW 0,.+10FSWORDW
|
||||
-Q.3U.3'
|
||||
q.3+1*5j q.2,.fswordw
|
||||
|
||||
~FILENAME~
|
||||
WORDAB~DOC~ ~FILENAME~CWord Abbrev Mode package. Documentation in INFO under EMACS.
|
||||
~DOC~ & Setup WORDAB Library*S Run when WORDAB is loaded. Calls a hook.
|
||||
Calls WORDAB SETUP HOOK, if it exists. That can do things like
|
||||
auto-loading a file of abbreviations.
|
||||
Then appends & WRDAB Set Mode Line Hook to Set Mode Line Hook.
|
||||
Thus, anything put on those hook variables should not return by ^\.
|
||||
,~DOC~ Old Word Abbrev Character Describe+C Tell what char does after expanding.
|
||||
This command will ask you to type a character, e.g. Space, which runs the
|
||||
word abbrev expander and then calls the old definition for that
|
||||
character. The description for that old definition will be given, e.g.
|
||||
the description for ^R Auto-Fill Space.
|
||||
|
||||
~DOC~ ^R Abbrev Expand Onlyv^R Expand last word, but insert nothing after it.
|
||||
If given an argument, will feep if last word isn't an abbrev.
|
||||
,~DOC~ ^R Abbrev Expand And Call Old Char
|
||||
^R Expand last word, then run old char.
|
||||
The "old" function run by the character after the expansion check may be
|
||||
described by MM Old Word Abbrev Character Describe which will ask you to
|
||||
type the character to describe.
|
||||
Explicit ARG inhibits expanding.
|
||||
*~DOC~ ^R Abbrev Expand And Self-InsertS Expand last word if an abbrev.
|
||||
Giving an explicit numeric argument inhibits expansion, just inserting that
|
||||
many copies of char that ran this.
|
||||
'~DOC~ & WRDAB Mode or Global Expand6S Expand previous word if mode or global abbrev.
|
||||
~DOC~ & Global Expand.S Expand previous word if global abbrev.
|
||||
~DOC~ & ExpandS .1 is abbrev, .2 is ..Q offset
|
||||
A pre-comma ARG inhibits auto-filling. (Since ^^M, e.g. is called by
|
||||
some to insert CRLF but not auto-fill.)
|
||||
|
||||
~DOC~ ^R Unexpand Last WordL^R Undo last expansion, leaving the abbrev.
|
||||
If there was a prefix that was glued onto the expansion, it will be separated
|
||||
from the abbrev by a hyphen.
|
||||
The abbrev's usage-count is decremented.
|
||||
~DOC~ Word Abbrev Mode~DOC~ WORDABRC Mode for expanding word-abbrevs.
|
||||
No arg or non-zero arg sets the mode, Word Abbrev Mode.
|
||||
0 arg clears the mode.
|
||||
Runs Word Abbrev Hook if any, with arg of new mode setting. If none,
|
||||
the following keys are set:
|
||||
^X ^A runs ^R Add Mode Word Abbrev,
|
||||
^X ^H runs ^R Inverse Add Mode Word Abbrev,
|
||||
^X + runs ^R Add Global Word Abbrev,
|
||||
^X - runs ^R Inverse Add Global Word Abbrev,
|
||||
M-' runs ^R Word Abbrev Prefix Mark,
|
||||
C-M-Space runs ^R Abbrev Expand Only, and
|
||||
^XU runs ^R Unexpand Last Word.
|
||||
Giving this command 1 as a pre-comma argument means that you only use global
|
||||
abbrevs, and things are set up to be faster (e.g. faster expansion
|
||||
checking since it doesn't have to check both global and local abbrevs).
|
||||
Each of the following chars:
|
||||
~@#;$%^&*()-_=+[]\|:'`"{},<.>/?!, Space, Return,
|
||||
will run ^R Abbrev Expand And Self-Insert, or ^R Abbrev Expand And Call Old
|
||||
Char.
|
||||
Tab runs ^R Abbrev Expand for Tab.
|
||||
~DOC~ Define Word Abbrevs(C Define word abbrevs from buffer.
|
||||
~DOC~ List Word Abbrevs*C List abbrevs and their expansions.
|
||||
~DOC~ Insert Word AbbrevsC Insert abbrevs defined and their expansions.
|
||||
Format is acceptable to MM Define Word Abbrevs.
|
||||
In particular, any double-quotes (the '"' character) in an expansion will be
|
||||
quoted with another double-quote. E.g. HE SAID "HELLO" becomes HE SAID
|
||||
""HELLO"".
|
||||
~DOC~ Make Word AbbrevfC Make first string argument expand to second one.
|
||||
After doing MM Make Word Abbrevfoofind outer otter, typing "foo" will
|
||||
automatically expand to "find outer otter".
|
||||
3rd string argument, if any, is the mode for the abbrev.
|
||||
No 3rd string argument means use the current mode.
|
||||
3rd string argument = "*" means this make a global abbrev.
|
||||
This command defines just one abbrev, as compared to Define Word
|
||||
Abbrevs which defines several abbrevs from a list in the buffer.
|
||||
&~DOC~ & Check And Make Word Abbrev
|
||||
S ARG1 abbrev, ARG2 expn, string arg mode.
|
||||
String argument is "*" or space-modename, e.g. " TECO".
|
||||
Checks for break characters in abbrev (not allowed).
|
||||
,~DOC~ Write Incremental Word Abbrev File5C Write file of changed abbrevs.
|
||||
Writes to file given by string argument.
|
||||
(This does not reset the default filename for Write Word Abbrev File and
|
||||
Read Word Abbrev File. I'm not sure of the correctness of this, though.)
|
||||
Defaults to home directory, INCABS >.
|
||||
See Read Incremental Word Abbrev File.
|
||||
+~DOC~ Read Incremental Word Abbrev FilefC Load some abbrevs that changed.
|
||||
String argument is filename that contains incremental abbrev definitions,
|
||||
e.g. written by Write Incremental Word Abbrev File.
|
||||
Default is home directory, INCABS >.
|
||||
(This does not reset the default filename for Write Word Abbrev File and
|
||||
Read Word Abbrev File. I'm not sure of this, but it seems correct.)
|
||||
~DOC~ & Teco Quote String9S Takes string as NUMARG, returns with ^]^]s, ^]s.
|
||||
~DOC~ & Teco Quote Area-S Quote altmodes and ^]s in ARG1,point.
|
||||
)~DOC~ ^R Inverse Add Mode Word AbbrevZ^R Define expansion for word before point.
|
||||
Numeric argument n means nth word before point is to be an abbrev (e.g.
|
||||
you thought it already was, and you are now n words beyond).
|
||||
No numeric argument means the word just before point, same as argument
|
||||
of 1.
|
||||
Reads a one-line expansion for the abbrev, defines it, and expands it.
|
||||
+~DOC~ ^R Inverse Add Global Word Abbrev]^R Define expansion for word before point.
|
||||
Numeric argument n means nth word before point is to be an abbrev (e.g.
|
||||
you thought it already was, and you are now n words beyond).
|
||||
No numeric argument means the word just before point, same as argument
|
||||
of 1.
|
||||
Calls & Read Line to get the expansion for that abbrev. (No multi-line.)
|
||||
Defines that abbrev, and then expands the abbrev before point.
|
||||
Aborts if & Read Line is aborted, or if the expansion is null.
|
||||
!~DOC~ ^R Add Mode Word Abbrev@^R Reads mode abbrev for words before point.
|
||||
Negative ARG means to delete the word abbrev. (If there is no such mode
|
||||
abbrev, but there is a global, it asks if it should kill the global.)
|
||||
Positive ARG (>0) means expansion is last ARG words.
|
||||
Zero ARG means expansion is between point and MARK.
|
||||
If FS ^R Mark set, then for any ARG expansion between . and FS ^RMark.
|
||||
The abbrev is only effective when in the current mode (e.g. LISP).
|
||||
#~DOC~ ^R Add Global Word Abbrevl^R Reads global abbrev for words before point.
|
||||
Negative ARG means to delete the word abbrev,
|
||||
calls ^R Kill Global Word Abbrev.
|
||||
Positive ARG (>0) means expansion is last ARG words.
|
||||
Zero ARG means expansion is between point and MARK.
|
||||
If FS ^R Mark set, then for any ARG expansion between . and FS ^RMark.
|
||||
The abbrev is effective in all major modes.
|
||||
~DOC~ & Add Word AbbrevMS Reads an abbrev for words before point.
|
||||
Stringarg1 is "*" for global abbrev, and space-modename for a mode abbrev,
|
||||
e.g. " TECO".
|
||||
Stringarg2 is & Read Line prompt.
|
||||
Calls & Read Line to read the abbrev.
|
||||
ARG non-0 means expansion is last ARG words. (Includes breaks in between
|
||||
words, but not those before first or after last word.)
|
||||
ARG 0 means expansion is between point and MARK.
|
||||
If FS ^R Mark set, then for any ARG expansion between . and FS ^RMark.
|
||||
If the abbrev is already defined, user is asked if redefinition wanted.
|
||||
The abbrev must not contain any break characters.
|
||||
Abbrev variable is constructed: X abbreviation <mode/*> Abbrev. It
|
||||
contains a string which is the expansion.
|
||||
~DOC~ & Shorten StringPS Produce a short string, showing beginning/end.
|
||||
ARG is a string pointer.
|
||||
$~DOC~ ^R Word Abbrev Prefix Mark!^R Mark point as end of a prefix.
|
||||
Expansion of the prefix may occur unless an ARG is given.
|
||||
Sets Word Abbrev Prefix Mark to point and inserts a hyphen.
|
||||
$~DOC~ & WRDAB Set Mode Line Hook2S Tell & Set Mode Line if display " Abbrev".
|
||||
"~DOC~ ^R Kill Mode Word Abbrevg^R Causes mode abbrev typed to be expunged.
|
||||
Same as ^R Add Mode Word Abbrev with a negative ARG.
|
||||
$~DOC~ ^R Kill Global Word Abbrevk^R Causes global abbrev typed to be expunged.
|
||||
Same as ^R Add Global Word Abbrev with a negative ARG.
|
||||
|
||||
~DOC~ Kill All Word Abbrevs/C No word abbrevs are defined after this.
|
||||
~DOC~ Edit Word Abbrevs9C Go into ^R mode, editing word abbrev definitions.
|
||||
Note that any '"'s are doubled so that the syntax is unambiguous. E.g.
|
||||
if the abbrev 'xsay' is to expand to 'He said "Hello"', then it will be:
|
||||
xsay: 1 "He said ""Hello"""
|
||||
^R mode is entered. When exited normally, (e.g. by ^C^C) the buffer will
|
||||
be considered as new definitions of word abbrevs.
|
||||
^G will abort MM Edit Word Abbrevs, leaving word abbrevs untouched.
|
||||
~DOC~ Sort Word AbbrevsxC Sort a word abbrev list in the buffer by count.
|
||||
The most-frequently used abbrevs appear at the top of the list.
|
||||
~DOC~ & WRDAB Off PO CheckS Check list of chars for expanders, fix.
|
||||
q.1: List of characters.
|
||||
q.6: ^R Macro to check against.
|
||||
q.7: Subroutine to call if char runs .6.
|
||||
~DOC~ & WRDAB On PO Check$S Check list of expand characters for changes and fix.
|
||||
q.1: List of characters.
|
||||
q.6: ^R Macro to check against.
|
||||
q.7: Subroutine to call if change.
|
||||
&~DOC~ & WRDAB Process Options Hook9S Check for characters to change.
|
||||
Calls a subroutine to see-if/do any expand characters need updating.
|
||||
Is a little slow for someone who makes Word Abbrev Mode local. Could fix.
|
||||
"~DOC~ & WRDAB Turn On Ins CharlS Make a ^R Abbrev Expand And Self-Insert key.
|
||||
ARG: 9-bit of key to use.
|
||||
If is FS^RInit, then becomes expand-ins.
|
||||
Otherwise becomes a call-old expander, and character is moved from WORDAB
|
||||
Ins Chars to WORDAB Old Chars.
|
||||
"~DOC~ & WRDAB Turn On Old CharQS Make a ^R Abbrev Expand And Call Old Char key.
|
||||
ARG: 9-bit of key to use.
|
||||
#~DOC~ & WRDAB Turn Off Ins Char"S Reset char ARG to builtin.
|
||||
#~DOC~ & WRDAB Turn Off Old Char*S Reset char ARG to what was before.
|
||||
"~DOC~ ^R Abbrev Expand for Tab ^R Expands abbrevs when Tab inserts at point.
|
||||
If Tab will not insert any whitespace at point, no expansion is attempted.
|
||||
(E.g. the Tab is reindenting the line, but point is mid-line.)
|
||||
Old Tab is in MM # WRDAB Old 11.
|
||||
Explicit ARG inhibits expanding.
|
||||
~DOC~ & Global or LocalES Return Q.L if argument is a local q-register. Q.V otherwise.
|
||||
|
||||
~DOC~ Read Word Abbrev FileC Define word abbrevs from a file of definitions.
|
||||
Stringarg is word abbrev definition file. Default is <homedir>;WORDAB DEFNS.
|
||||
~DOC~ Write Word Abbrev FileZC Write a definition file for all defined abbrevs.
|
||||
Stringarg filename. Default is WORDAB DEFNS.
|
||||
Argument present means do not write out usage counts.
|
||||
Default filenames come from last definition filename used.
|
||||
~DOC~ Word Abbrev AproposC List abbrevs or expansions containing stringarg.
|
||||
String argument is some pattern to find, either in abbrev, modename, or
|
||||
expansion. It is a standard Teco search string; e.g. you can do:
|
||||
MM Word Abbrev Apropos$foo^Obar$ which will match foo OR bar.
|
||||
Currently this command only works "approximately" -- it may miss definitions
|
||||
that have changed via Edit Word Abbrevs, or were only defined by Define
|
||||
Word Abbrevs. It will however catch all definitions read in from a file
|
||||
or defined one by one by the user.
|
||||
&~DOC~ & Make Usage Abbrev VariableXS Like .V and .C combined, for speed.
|
||||
STRARG1 is abbrev variable name.
|
||||
STRARG2 is abbrev expansion with altmodes, ^]s quoted with ^]s.
|
||||
STRARG3 is usage-count string.
|
||||
Assumes ..Q is selected as buffer (..O).
|
||||
*~DOC~ & Make Non-Usage Abbrev VariableyS Like .V and .C combined, for speed.
|
||||
STRARG1 is abbrev variable name string.
|
||||
STRARG2 is abbrev expansion string.
|
||||
~DIRECTORY~ & Setup WORDAB Library
|
||||
Old Word Abbrev Character Describe
|
||||
^R Abbrev Expand Only
|
||||
^R Abbrev Expand And Call Old Char
|
||||
^R Abbrev Expand And Self-Insert
|
||||
& WRDAB Mode or Global Expand
|
||||
& Global Expand
|
||||
& Expand
|
||||
^R Unexpand Last Word
|
||||
Word Abbrev Mode
|
||||
WORDAB
|
||||
Define Word Abbrevs
|
||||
List Word Abbrevs
|
||||
Insert Word Abbrevs
|
||||
Make Word Abbrev
|
||||
& Check And Make Word Abbrev
|
||||
Write Incremental Word Abbrev File
|
||||
Read Incremental Word Abbrev File
|
||||
& Teco Quote String
|
||||
& Teco Quote Area
|
||||
^R Inverse Add Mode Word Abbrev
|
||||
^R Inverse Add Global Word Abbrev
|
||||
^R Add Mode Word Abbrev
|
||||
^R Add Global Word Abbrev
|
||||
& Add Word Abbrev
|
||||
& Shorten String
|
||||
^R Word Abbrev Prefix Mark
|
||||
& WRDAB Set Mode Line Hook
|
||||
^R Kill Mode Word Abbrev
|
||||
^R Kill Global Word Abbrev
|
||||
Kill All Word Abbrevs
|
||||
Edit Word Abbrevs
|
||||
Sort Word Abbrevs
|
||||
& WRDAB Off PO Check
|
||||
& WRDAB On PO Check
|
||||
& WRDAB Process Options Hook
|
||||
& WRDAB Turn On Ins Char
|
||||
& WRDAB Turn On Old Char
|
||||
& WRDAB Turn Off Ins Char
|
||||
& WRDAB Turn Off Old Char
|
||||
^R Abbrev Expand for Tab
|
||||
& Global or Local
|
||||
Read Word Abbrev File
|
||||
Write Word Abbrev File
|
||||
Word Abbrev Apropos
|
||||
& Make Usage Abbrev Variable
|
||||
& Make Non-Usage Abbrev Variable
|
||||
~INVERT~[1 <Q1-1U1 Q1FP;> Q1
|
||||
BIN
src/e142/xworda._ej
Normal file
BIN
src/e142/xworda._ej
Normal file
Binary file not shown.
Reference in New Issue
Block a user