mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-16 09:14:18 +00:00
Release 18.59
This commit is contained in:
parent
cd645247b0
commit
802cdf3d4b
782 changed files with 223638 additions and 37686 deletions
94
ChangeLog
Normal file
94
ChangeLog
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
Fri Oct 30 19:36:38 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* Version 18.59 released.
|
||||
|
||||
Wed Oct 28 19:30:14 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* vmsdist.com: Don't copy vaxcrtl.olb into distribution.
|
||||
Assume VMS version 5.5 or newer.
|
||||
|
||||
Sat Oct 3 01:32:44 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* build-install: Use sh -c pwd, not just pwd.
|
||||
|
||||
Fri Oct 2 19:14:07 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* Makefile (install.xenix): Delete spurious space.
|
||||
|
||||
Tue Aug 25 18:04:27 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* Makefile (src/paths.h): Use just `sed', not `/bin/sed'.
|
||||
|
||||
Sun Jun 7 14:21:01 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* Makefile (install): Get rid of -s from install commands.
|
||||
|
||||
Thu Feb 13 14:53:26 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* Makefile (install): Use INSTALL to install programs.
|
||||
(INSTALL): New variable.
|
||||
|
||||
Sun Feb 9 21:41:17 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* Makefile (mkdir): Create BINDIR and MANDIR if nec.
|
||||
Don't chmod LIBDIR.
|
||||
|
||||
* build-install: Use normal convention for EMACS dir.
|
||||
Fix syntax in directory name comparison.
|
||||
Install emacsclient. Deleted the chmod for executables.
|
||||
Start with #! to force use of sh.
|
||||
|
||||
Sat Feb 1 17:40:30 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* install.sh: New file.
|
||||
|
||||
Fri Jan 31 23:46:51 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* Makefile (clean, distclean): Clean oldXMenu subdir.
|
||||
|
||||
Mon Jan 27 16:29:53 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* Makefile (install): Remove `B' from tar xf command.
|
||||
|
||||
* Makefile (CLEANDIR): Add oldXMenu.
|
||||
|
||||
Sat Jan 25 00:06:59 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* build-install: Finish updating to sh syntax.
|
||||
|
||||
Fri Jan 17 22:56:27 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* Makefile (LIBDIR): Change back to /usr/local/emacs.
|
||||
(It got changed recently but I don't know why.)
|
||||
|
||||
Sat Mar 9 23:21:20 1991 Richard Stallman (rms at mole.ai.mit.edu)
|
||||
|
||||
* Makefile (clean): Use /bin/pwd, not pwd.
|
||||
|
||||
Fri Sep 28 22:36:32 1990 Richard Stallman (rms at mole.ai.mit.edu)
|
||||
|
||||
* Makefile (install, install.sysv, install.xenix):
|
||||
Install wakeup instead of loadst. No need for setuid or setgid.
|
||||
|
||||
Tue Aug 7 13:19:35 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* Makefile (clean): Clean etc if that's not the installation dir.
|
||||
|
||||
Thu Apr 26 13:36:18 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* Makefile (paths.h): Make sed alter each name in the path.
|
||||
|
||||
Tue Aug 30 13:43:43 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* Makefile (install.sysv): Use cpio, not tar.
|
||||
|
||||
Wed Aug 3 19:20:13 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* Makefile (lockdir): Rename `lock' target.
|
||||
Depend on it from install*, not from `all'.
|
||||
|
||||
Mon May 16 02:08:08 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
|
||||
|
||||
* Makefile: Changed LIBDIR and BINDIR back to /usr/local/{emacs,bin}
|
||||
to match build-install and paths.h.
|
||||
|
||||
|
|
@ -1,84 +0,0 @@
|
|||
-*- text -*-
|
||||
Getting GNU Software, 19 Sep 90
|
||||
Copyright (C) 1986, 1987, 1988, 1989, 1990 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to anyone to make or distribute
|
||||
verbatim copies of this document provided that the
|
||||
copyright notice and this permission notice are preserved.
|
||||
|
||||
* GNU and the Free Software Foundation
|
||||
|
||||
Project GNU is organized as part of the Free Software Foundation, Inc.
|
||||
The Free Software Foundation has the following goals:
|
||||
1) to create GNU as a full development/operating system.
|
||||
2) to distribute GNU and other useful software with source code and
|
||||
permission to copy and redistribute.
|
||||
|
||||
Further information on the rationale for GNU is in file
|
||||
/pub/gnu/etc/GNU (All files referred to are on the Internet host
|
||||
prep.ai.mit.edu.
|
||||
|
||||
Information on GNU Internet mailing lists and gnUSENET newsgroupscan
|
||||
be found in file /pub/gnu/etc/MAILINGLISTS.
|
||||
|
||||
* How To Get The Software
|
||||
|
||||
The easiest way to get a copy of the distribution is from someone else
|
||||
who has it. You need not ask for permission to do so, or tell any one
|
||||
else; just copy it. The second easiest is to ftp it over the
|
||||
Internet. The third easiest way is to uucp it. Ftp and uucp
|
||||
information is in file /pub/gnu/etc/FTP.
|
||||
|
||||
If you cannot get a copy any of these ways, or if you would feel more
|
||||
confident getting copies straight from us, or if you would like to get
|
||||
some funds to us to help in our efforts, you can order one from the
|
||||
Free Software Foundation. See file /pub/gnu/etc/DISTRIB.
|
||||
|
||||
* Available Software
|
||||
|
||||
** GNU Emacs
|
||||
|
||||
The GNU Emacs distribution includes:
|
||||
- manual source in TeX format.
|
||||
- an enhanced regex (regular expression) library.
|
||||
|
||||
See file /pub/gnu/etc/MACHINES for the status of porting Emacs to
|
||||
various machines and operating systems.
|
||||
|
||||
** C Scheme - a block structured dialect of LISP.
|
||||
|
||||
The Free Software Foundation distributes C Scheme for the MIT Scheme
|
||||
Project on it tapes. A partial ftp distribution can be found on
|
||||
prep.ai.mit.edu. The full ftp distribution can be found on
|
||||
zurich.ai.mit.edu.
|
||||
|
||||
Problems with the C Scheme distribution and it's ftp distribution
|
||||
should be referred to: <bug-cscheme@prep.ai.mit.edu>. There are two
|
||||
general mailing lists: <scheme@mc.lcs.mit.edu> and
|
||||
<info-cscheme@prep.ai.mit.edu>. Requests to join either list to:
|
||||
<info-cscheme-request@prep.ai.mit.edu> or
|
||||
<scheme-request@mc.lcs.mit.edu>.
|
||||
|
||||
** Other GNU Software
|
||||
|
||||
A fuller list of available software are in the files
|
||||
/pub/gnu/etc/DISTRIB and /pub/gnu/etc/FTP.
|
||||
|
||||
* No Warranties
|
||||
|
||||
We distribute software in the hope that it will be useful, but without
|
||||
any warranty. No author or distributor of this software accepts
|
||||
responsibility to anyone for the consequences of using it or for
|
||||
whether it serves any particular purpose or works at all, unless he
|
||||
says so in writing.
|
||||
|
||||
* If You Like The Software
|
||||
|
||||
If you like the software developed and distributed by the Free
|
||||
Software Foundation, please express your satisfaction with a donation.
|
||||
Your donations will help to support the foundation and make our future
|
||||
efforts successful, including a complete development and operating
|
||||
system, called GNU (Gnu's Not Un*x), which will run Un*x user
|
||||
programs. For more information on GNU and the Foundation, contact us
|
||||
at Internet address <gnu@prep.ai.mit.edu> or the foundation's US Mail
|
||||
address found in file /pub/gnu/etc/DISTRIB.
|
||||
208
INSTALL
Normal file
208
INSTALL
Normal file
|
|
@ -0,0 +1,208 @@
|
|||
GNU Emacs Installation Guide
|
||||
Copyright (c) 1988 Free software Foundation, Inc.
|
||||
|
||||
Permission is granted to anyone to make or distribute verbatim copies
|
||||
of this document as received, in any medium, provided that the
|
||||
copyright notice and permission notice are preserved,
|
||||
and that the distributor grants the recipient permission
|
||||
for further redistribution as permitted by this notice.
|
||||
|
||||
Permission is granted to distribute modified versions
|
||||
of this document, or of portions of it,
|
||||
under the above conditions, provided also that they
|
||||
carry prominent notices stating who last changed them,
|
||||
and that any new or changed statements about the activities
|
||||
of the Free Software Foundation are approved by the Foundation.
|
||||
|
||||
|
||||
PREPARATION
|
||||
|
||||
0) Make sure your system has enough swapping space allocated
|
||||
to handle a program whose pure code is 400k bytes or
|
||||
and whose data area is at least 150k and can reach 600k
|
||||
bytes or much more. If the swapping space is insufficient, you
|
||||
will get an error in the command temacs -l loadup inc dump,
|
||||
found in $BUILD/src/ymakefile, or possibly when running the
|
||||
final dumped Emacs.
|
||||
|
||||
1) Choose a place in the file structure for the main directory
|
||||
of Emacs code to reside. This will ultimately have
|
||||
subdirectories named src, lisp, etc, etc. Call this name
|
||||
$EMACS. Let $BUILD stand for the name the directory has now.
|
||||
|
||||
2) Copy $BUILD/src/config.h-dist to $BUILD/src/config.h,
|
||||
and edit it to set the right options for your system. The file
|
||||
$BUILD/etc/MACHINES may help you decide what to put there.
|
||||
If you need to override any of the definitions in the s- and m-
|
||||
files for your system and machine, do so by editing config.h,
|
||||
not by changing the s- and m- files. Occasionally you may
|
||||
need to redefine parameters used in etc/movemail.c.
|
||||
|
||||
3) Declare the place in the file system where Emacs will
|
||||
be once installed. This is done in the file `src/paths.h'.
|
||||
But you don't have to change it yourself. `build-install' and `make'
|
||||
edit `src/paths.h' automatically.
|
||||
|
||||
If you are using the shell-script `build-install'
|
||||
edit the assignment that sets the variable `EMACS'.
|
||||
If you are using `make' in the main Emacs directory to do
|
||||
the installation, edit the definition of `LIBDIR' in `Makefile'
|
||||
in that directory.
|
||||
|
||||
If you are doing the building by hand (not using `build-install' or
|
||||
`make') then you yourself must copy $BUILD/src/paths.h-dist to
|
||||
paths.h, and edit it to contain the correct directory names:
|
||||
$EMACS/lisp for the directory for Lisp libraries, and $EMACS/etc for
|
||||
the directory for executables and text files.
|
||||
|
||||
Emacs will use these names once it has been built.
|
||||
During building, Emacs searches the directory ../lisp for
|
||||
Lisp files before the directories specified in paths.h, and
|
||||
executable files are found in ../etc. So the main Emacs
|
||||
directory $BUILD can be anywhere while Emacs is built, but
|
||||
must be renamed to $EMACS afterwards in order for Emacs to
|
||||
work properly.
|
||||
|
||||
4) Look at $BUILD/lisp/paths.el; if some of those values
|
||||
are not right for your system, create a file
|
||||
$BUILD/lisp/site-init.el containing Lisp code to override them.
|
||||
You would use the Lisp function `setq'. For example,
|
||||
|
||||
(setq news-inews-program "/usr/bin/inews")
|
||||
|
||||
is how you would override the default value of the
|
||||
variable news-inews-program (which is "/usr/local/inews").
|
||||
|
||||
5) Put into $BUILD/lisp/site-init.el any Lisp code
|
||||
you want loaded into Emacs before it is dumped out.
|
||||
|
||||
This file is nonexistent in the distribution.
|
||||
You do not need to create it, if you have nothing
|
||||
to put in it.
|
||||
|
||||
6) Decide what compiler switches to use.
|
||||
For example, if you would like to compile with optimization,
|
||||
you might want to change the definition of CFLAGS in
|
||||
the file $BUILD/src/ymakefile to use C_OPTIMIZE_SWITCH
|
||||
instead of C_DEBUG_SWITCH.
|
||||
|
||||
Note that many Unix compilers have bugs that affect -O; if you use
|
||||
-O, be prepared to recompile without -O if you have any trouble.
|
||||
|
||||
Note that many (most?) versions of debuggers
|
||||
other than GDB do not know how to handle programs like Emacs
|
||||
that use raw or cbreak mode, change other terminal status bits,
|
||||
and use asynchronous SIGIO signals for terminal input.
|
||||
However, most debuggers may work if Emacs uses a separate terminal
|
||||
from the one being used by the debugger, or if Emacs is using
|
||||
its own X window.
|
||||
|
||||
If you do have a debugger that works, it is probably best to use `-g'
|
||||
so that you are not helpless in the face of a problem.
|
||||
|
||||
With GCC, you can use -O and -g together. The easiest way to do this
|
||||
is to change C_DEBUG_SWITCH to include both -O and -g. GCC is probably
|
||||
more reliable with -O than without, as it is tested more with -O.
|
||||
|
||||
The way to specify use of GCC is to set the environment variable CC
|
||||
to `gcc' before you do `make install'
|
||||
|
||||
7) If you wish to compile with GCC, you may need to use -traditional
|
||||
or run fixincludes. This is needed if your system's header files
|
||||
are incompatible with ANSI C. If your system header files are designed
|
||||
for ANSI C, then GCC should handle them properly. For more info, refer
|
||||
the INSTALL file of GCC.
|
||||
|
||||
If your system header files are non-ANSI and you don't use -traditional
|
||||
or fixincludes to compensate, the usual effect is that the ioctl
|
||||
system call does not work. The result is an Emacs that almost completely
|
||||
fails to work.
|
||||
|
||||
8) Refer to the file $BUILD/etc/TERMS for information on
|
||||
fields you may wish to add to various termcap entries.
|
||||
|
||||
9) Run `make install' in the main directory of the Emacs distribution
|
||||
to finish building and installing Emacs in the standard way.
|
||||
You are done!
|
||||
|
||||
(On system V, you need to use `make install.sysv' instead of `make install'.
|
||||
On Xenix, use `make install.xenix'.
|
||||
On AIX, use `make install.aix'.
|
||||
You can also try `make INSTALL=./install.sh install'
|
||||
on any kind of system.)
|
||||
|
||||
The last step of building Emacs involves running Emacs in a special
|
||||
way. At this time, if the directories that Emacs will refer to during
|
||||
use for Lisp code and executables do not already exist, Emacs will
|
||||
print a warning to this effect. If you plan to have `make' create
|
||||
these directories while it installs Emacs, then do not be alarmed by
|
||||
the warnings.
|
||||
|
||||
The shell script `build-install' is an alternative to `make install'.
|
||||
It is a little less sophisticated than the makefile, but probably
|
||||
easier to customize for nonstandard kinds of installation. If you
|
||||
want to install in precisely the usual fashion, we recommend using
|
||||
`make' rather than `build-install'.
|
||||
|
||||
|
||||
BUILDING GNU EMACS
|
||||
`make install' and its variants start with these steps to compile Emacs.
|
||||
|
||||
1) Cd to $BUILD/etc and run `make'.
|
||||
This creates files named `ctags' and `etags' and `wakeup'
|
||||
and `make-docfile' and `digest-doc' and `test-distrib'. And others.
|
||||
|
||||
2) Cd to $BUILD/src and Run `make'
|
||||
This refers to files in the $BUILD/lisp and $BUILD/etc subdirectories
|
||||
using names ../lisp and ../etc.
|
||||
|
||||
This creates a file $BUILD/src/xemacs which is the runnable Emacs,
|
||||
assigning it a new version number by incrementing the version
|
||||
stored in $BUILD/lisp/version.el.
|
||||
|
||||
It also creates a file in $BUILD/etc, whose name is
|
||||
DOC followed by the current Emacs version.
|
||||
This file contains documentation strings for all the
|
||||
functions in Emacs. Each time you run make to make a new xemacs,
|
||||
a new DOC file with a new name is made. You must keep
|
||||
the DOC file for an Emacs version as long as you keep using
|
||||
that Emacs version.
|
||||
|
||||
|
||||
INSTALLATION
|
||||
|
||||
After compilation, `make install' and its variants continue with these steps
|
||||
to install the Emacs already compiled.
|
||||
|
||||
0) Move files from $BUILD to $EMACS if they are not the same directory.
|
||||
The files that you need include at least the subdirectories
|
||||
lisp, etc and info. After this, the directory in which you said
|
||||
(in paths.h) Emacs would be installed actually contains the necessary
|
||||
parts of Emacs.
|
||||
|
||||
1) Move the file $EMACS/xemacs to /usr/local/bin/emacs,
|
||||
or some other name in users' search paths.
|
||||
`xemacs' has an alternate name $EMACS/src/emacs-EMACSVERSION;
|
||||
you may wish to make a symbolic link
|
||||
named /usr/local/bin/emacs pointing to that alternate name,
|
||||
as an easy way of installing different versions.
|
||||
|
||||
You can delete $EMACS/src/temacs.
|
||||
|
||||
3) Move the programs ctags, etags and emacsclient from $EMACS/etc
|
||||
to /usr/local/bin. These programs are run by users as shell commands.
|
||||
|
||||
The program $EMACS/etc/wakeup is invoked by Emacs when appropriate.
|
||||
|
||||
The programs $EMACS/etc/make-docfile and $EMACS/etc/test-distrib
|
||||
are not used any more; they were used in building Emacs.
|
||||
|
||||
$EMACS/etc/digest-doc can be used to convert DOC into a
|
||||
file for users to read. There is no important reason to move it.
|
||||
|
||||
4) The files in $EMACS/src subdirectory, except for xemacs,
|
||||
are not used by Emacs once it is built.
|
||||
|
||||
|
||||
See the file PROBLEMS in this directory for a list of various
|
||||
problems sometimes encountered, and what to do about them.
|
||||
150
Makefile
Normal file
150
Makefile
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
# make all to compile and build Emacs
|
||||
# make install to install it
|
||||
# make install.sysv to install on system V.
|
||||
# make install.xenix to install on Xenix
|
||||
# make install.aix to install on AIX.
|
||||
# make tags to update tags tables
|
||||
#
|
||||
# make distclean to delete everything that wasn't in the distribution
|
||||
# This is a very dangerous thing to do!
|
||||
# make clean
|
||||
# This is a little less dangerous.
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
# Where to install things
|
||||
# Note that on system V you must change MANDIR to /use/local/man/man1.
|
||||
# This got changed in late 1991 to say /usr/local/lib/emacs,
|
||||
# but there was no explanation of why, so it seems better to keep this stable.
|
||||
LIBDIR= /usr/local/emacs
|
||||
BINDIR= /usr/local/bin
|
||||
MANDIR= /usr/local/man/man1
|
||||
|
||||
# Flags passed down to subdirectory makefiles.
|
||||
MFLAGS=
|
||||
|
||||
# Command used for installation.
|
||||
# If `install' doesn't work on your system, try `./install.sh'.
|
||||
INSTALL=install
|
||||
|
||||
# Subdirectories to make recursively. `lisp' is not included
|
||||
# because the compiled lisp files are part of the distribution
|
||||
# and you cannot remake them without installing Emacs first.
|
||||
SUBDIR= etc src
|
||||
|
||||
# Subdirectories to install
|
||||
COPYDIR= etc info lisp
|
||||
|
||||
# Subdirectories to clean
|
||||
CLEANDIR= ${COPYDIR} lisp/term oldXMenu
|
||||
|
||||
all: src/paths.h ${SUBDIR}
|
||||
|
||||
src/paths.h: Makefile src/paths.h-dist
|
||||
sed 's;/usr/local/emacs;${LIBDIR};g' < src/paths.h-dist > src/paths.h
|
||||
|
||||
src: etc
|
||||
|
||||
.RECURSIVE: ${SUBDIR}
|
||||
|
||||
${SUBDIR}: FRC
|
||||
cd $@; make ${MFLAGS} all
|
||||
|
||||
install: all mkdir lockdir
|
||||
# B option to tar xf removed because some systems don't have it.
|
||||
# It should work without that as long as the same tar program
|
||||
# is running on both sides of the pipe.
|
||||
-if [ `/bin/pwd` != `(cd ${LIBDIR}; /bin/pwd)` ] ; then \
|
||||
tar cf - ${COPYDIR} | (cd ${LIBDIR}; umask 0; tar xf - ) ;\
|
||||
for i in ${CLEANDIR}; do \
|
||||
(rm -rf ${LIBDIR}/$$i/RCS; \
|
||||
rm -f ${LIBDIR}/$$i/\#*; \
|
||||
rm -f ${LIBDIR}/$$i/*~); \
|
||||
done \
|
||||
else true; \
|
||||
fi
|
||||
$(INSTALL) -c etc/emacsclient ${BINDIR}/emacsclient
|
||||
$(INSTALL) -c etc/etags ${BINDIR}/etags
|
||||
$(INSTALL) -c etc/ctags ${BINDIR}/ctags
|
||||
$(INSTALL) -c -m 1755 src/xemacs ${BINDIR}/xemacs
|
||||
$(INSTALL) -c -m 444 etc/emacs.1 ${MANDIR}/emacs.1
|
||||
-rm -f ${BINDIR}/emacs
|
||||
mv ${BINDIR}/xemacs ${BINDIR}/emacs
|
||||
|
||||
install.sysv: all mkdir lockdir
|
||||
-if [ `/bin/pwd` != `(cd ${LIBDIR}; /bin/pwd)` ] ; then \
|
||||
find ${COPYDIR} -print | cpio -pdum ${LIBDIR} ;\
|
||||
for i in ${CLEANDIR}; do \
|
||||
(rm -rf ${LIBDIR}/$$i/RCS; \
|
||||
rm -f ${LIBDIR}/$$i/\#*; \
|
||||
rm -f ${LIBDIR}/$$i/*~); \
|
||||
done \
|
||||
else true; \
|
||||
fi
|
||||
-cpset etc/emacsclient ${BINDIR}/emacsclient 755 bin bin
|
||||
-cpset etc/etags ${BINDIR}/etags 755 bin bin
|
||||
-cpset etc/ctags ${BINDIR}/ctags 755 bin bin
|
||||
-cpset etc/emacs.1 ${MANDIR}/emacs.1 444 bin bin
|
||||
-/bin/rm -f ${BINDIR}/emacs
|
||||
-cpset src/xemacs ${BINDIR}/emacs 1755 bin bin
|
||||
|
||||
install.xenix: all mkdir lockdir
|
||||
if [ `pwd` != `(cd ${LIBDIR}; pwd)` ] ; then \
|
||||
tar cf - ${COPYDIR} | (cd ${LIBDIR}; umask 0; tar xpf - ) ;\
|
||||
for i in ${CLEANDIR}; do \
|
||||
(rm -rf ${LIBDIR}/$$i/RCS; \
|
||||
rm -f ${LIBDIR}/$$i/\#*; \
|
||||
rm -f ${LIBDIR}/$$i/*~); \
|
||||
done \
|
||||
else true; \
|
||||
fi
|
||||
cp etc/etags etc/ctags etc/emacsclient ${BINDIR}
|
||||
chmod 755 ${BINDIR}/etags ${BINDIR}/ctags ${BINDIR}/emacsclient
|
||||
cp etc/emacs.1 ${MANDIR}/emacs.1
|
||||
chmod 444 ${MANDIR}/emacs.1
|
||||
-mv -f ${BINDIR}/emacs ${BINDIR}/emacs.old
|
||||
cp src/xemacs ${BINDIR}/emacs
|
||||
chmod 1755 ${BINDIR}/emacs
|
||||
-rm -f ${BINDIR}/emacs.old
|
||||
|
||||
install.aix: all mkdir lockdir
|
||||
-if [ `/bin/pwd` != `(cd ${LIBDIR}; /bin/pwd)` ] ; then \
|
||||
tar cf - ${COPYDIR} | (cd ${LIBDIR}; umask 0; tar xBf - ) ;\
|
||||
for i in ${CLEANDIR}; do \
|
||||
(rm -rf ${LIBDIR}/$$i/RCS; \
|
||||
rm -f ${LIBDIR}/$$i/\#*; \
|
||||
rm -f ${LIBDIR}/$$i/*~); \
|
||||
done \
|
||||
else true; \
|
||||
fi
|
||||
install -f ${BINDIR} etc/emacsclient
|
||||
install -f ${BINDIR} etc/etags
|
||||
install -f ${BINDIR} etc/ctags
|
||||
install -M 1755 -f ${BINDIR} src/xemacs
|
||||
install -M 444 -f ${MANDIR} etc/emacs.1
|
||||
-rm -f ${BINDIR}/emacs
|
||||
mv ${BINDIR}/xemacs ${BINDIR}/emacs
|
||||
|
||||
mkdir: FRC
|
||||
-mkdir ${LIBDIR} ${BINDIR} ${MANDIR}
|
||||
|
||||
distclean:
|
||||
for i in ${SUBDIR}; do (cd $$i; make ${MFLAGS} distclean); done
|
||||
cd oldXMenu; make ${MFLAGS} distclean
|
||||
|
||||
clean:
|
||||
cd src; make clean
|
||||
cd oldXMenu; make ${MFLAGS} clean
|
||||
if [ `/bin/pwd` != `(cd ${LIBDIR}; /bin/pwd)` ] ; then \
|
||||
cd etc; make clean; \
|
||||
else true; \
|
||||
fi
|
||||
|
||||
lockdir:
|
||||
-mkdir ${LIBDIR}/lock
|
||||
-chmod 777 ${LIBDIR}/lock
|
||||
|
||||
FRC:
|
||||
|
||||
tags: etc
|
||||
cd src; ../etc/etags *.[ch] ../lisp/*.el ../lisp/term/*.el
|
||||
771
PROBLEMS
Normal file
771
PROBLEMS
Normal file
|
|
@ -0,0 +1,771 @@
|
|||
This file describes various problems that have been encountered
|
||||
in compiling, installing and running GNU Emacs.
|
||||
|
||||
* If you have trouble building Emacs in Solaris, it is likely to be
|
||||
that you've put /usr/ucb ahead of /usr/ccs/bin in PATH. Try changing
|
||||
that for building Emacs. (The problem may really come from
|
||||
/usr/ucb/ld.)
|
||||
|
||||
* M-x manual command does not work on Solaris when you specify a
|
||||
manual section number. You can make it work by setting manual-program
|
||||
to "/usr/ucb/man".
|
||||
|
||||
* On some variants of SVR4, Emacs does not work at all with X.
|
||||
|
||||
Try defining BROKEN_FIONREAD in your config.h file. If this solves
|
||||
the problem, please send a bug report to tell us this is needed; be
|
||||
sure to say exactly what type of machine and system you are using.
|
||||
|
||||
* On some MIPS systems, division by zero crashes Emacs.
|
||||
|
||||
Some operating systems on MIPS machines give SIGTRAP for division by
|
||||
zero instead of the usual signals. The only real solution is to fix
|
||||
the system to give a proper signal.
|
||||
|
||||
In the meantime, you can change init_data in data.c if you wish.
|
||||
Change it to handle SIGTRAP as well as SIGFPE. But this will have a
|
||||
great disadvantage: you will not be able to run Emacs under a
|
||||
debugger. I think crashing on division by zero is a lesser problem.
|
||||
|
||||
* Linking says that the functions insque and remque are undefined.
|
||||
|
||||
Change oldXMenu/Makefile by adding insque.o to the variable OBJS.
|
||||
|
||||
* Emacs fails to understand most Internet host names, even though
|
||||
the names work properly with other programs on the same system.
|
||||
|
||||
This typically happens on Suns and other systems that use shared
|
||||
libraries. The cause is that the site has installed a version of the
|
||||
shared library which uses a name server--but has not installed a
|
||||
similiar version of the unshared library which Emacs uses.
|
||||
|
||||
The result is that most programs, using the shared library, work with
|
||||
the nameserver, but Emacs does not.
|
||||
|
||||
The fix is to install an unshared library that corresponds to what you
|
||||
installed in the shared library, and then relink Emacs.
|
||||
|
||||
* On a Sun running SunOS 4.1.1, you get this error message from GNU ld:
|
||||
|
||||
/lib/libc.a(_Q_sub.o): Undefined symbol __Q_get_rp_rd referenced from text segment
|
||||
|
||||
The problem is in the Sun shared C library, not in GNU ld.
|
||||
|
||||
The solution is to install Patch-ID# 100267-03 from Sun.
|
||||
|
||||
* Self documentation messages are garbled.
|
||||
|
||||
This means that the file `etc/DOC-...' doesn't properly correspond
|
||||
with the Emacs executable. Redumping Emacs and then installing the
|
||||
corresponding pair of files should fix the problem.
|
||||
|
||||
* M-x shell immediately responds "Process shell exited abnormally with code 1".
|
||||
|
||||
This is often due to inability to run the program `env'.
|
||||
This should be in the `etc' subdirectory of the directory
|
||||
where Emacs is installed, and it should be marked executable.
|
||||
|
||||
* Trouble using ptys on AIX.
|
||||
|
||||
People often instll the pty devices on AIX incorrectly.
|
||||
Use `smit pty' to reinstall them properly.
|
||||
|
||||
* Shell mode on HP/UX gives the message, "`tty`: Ambiguous".
|
||||
|
||||
christos@theory.tn.cornell.edu says:
|
||||
|
||||
The problem is that in your .cshrc you have something that tries to
|
||||
execute `tty`. If you are not running the shell on a real tty then
|
||||
tty will print "not a tty". Csh expects one word in some places,
|
||||
but tty is giving it back 3.
|
||||
|
||||
The solution is to add a pair of quotes around `tty` to make it a single
|
||||
word:
|
||||
|
||||
if (`tty` == "/dev/console")
|
||||
|
||||
should be changed to:
|
||||
|
||||
if ("`tty`" == "/dev/console")
|
||||
|
||||
Even better, move things that set up terminal sections out of .cshrc
|
||||
and into .login.
|
||||
|
||||
* Using X Windows, control-shift-leftbutton makes Emacs hang.
|
||||
|
||||
Use the shell command `xset bc' to make the old X Menu package work.
|
||||
|
||||
* Emacs running under X Windows does not handle mouse clicks.
|
||||
* `emacs -geometry 80x20' finds a file named `80x20'.
|
||||
|
||||
One cause of such problems is having (setq term-file-prefix nil) in
|
||||
your .emacs file. Another cause is a bad value of EMACSLOADPATH in
|
||||
the environment.
|
||||
|
||||
* Emacs gets error message from linker on Sun.
|
||||
|
||||
If the error message says that a symbol such as `f68881_used' or
|
||||
`ffpa_used' or `start_float' is undefined, this probably indicates
|
||||
that you have compiled some libraries, such as the X libraries,
|
||||
with a floating point option other than the default.
|
||||
|
||||
It's not terribly hard to make this work with small changes in
|
||||
crt0.c together with linking with Fcrt1.o, Wcrt1.o or Mcrt1.o.
|
||||
However, the easiest approach is to build Xlib with the default
|
||||
floating point option: to decide at run time what hardware is
|
||||
available.
|
||||
|
||||
* Emacs fails to get default settings from X Windows server.
|
||||
|
||||
The X library in X11R4 has a bug; it interchanges the 2nd and 3rd
|
||||
arguments to XGetDefaults. Define the macro XBACKWARDS in config.h to
|
||||
tell Emacs to compensate for this.
|
||||
|
||||
I don't believe there is any way Emacs can determine for itself
|
||||
whether this problem is present on a given system.
|
||||
|
||||
* Keyboard input gets confused after a beep when using a DECserver
|
||||
as a concentrator.
|
||||
|
||||
This problem seems to be a matter of configuring the DECserver to use
|
||||
7 bit characters rather than 8 bit characters.
|
||||
|
||||
* M-x shell persistently reports "Process shell exited abnormally with code 1".
|
||||
|
||||
This happened on Suns as a result of what is said to be a bug in Sunos
|
||||
version 4.0.x. The only fix was to reboot the machine.
|
||||
|
||||
* Programs running under terminal emulator do not recognize `emacs'
|
||||
terminal type.
|
||||
|
||||
The cause of this is a shell startup file that sets the TERMCAP
|
||||
environment variable. The terminal emulator uses that variable to
|
||||
provide the information on the special terminal type that Emacs
|
||||
emulates.
|
||||
|
||||
Rewrite your shell startup file so that it does not change TERMCAP
|
||||
in such a case. You could use the following conditional which sets
|
||||
it only if it is undefined.
|
||||
|
||||
if ( ! ${?TERMCAP} ) setenv TERMCAP ~/my-termcap-file
|
||||
|
||||
Or you could set TERMCAP only when you set TERM--which should not
|
||||
happen in a non-login shell.
|
||||
|
||||
* Error compiling sysdep.c, "sioctl.h: no such file or directory".
|
||||
|
||||
Among USG systems with TIOCGWINSZ, some require sysdep.c to include
|
||||
the file sioctl.h; on others, sioctl.h does not exist. We don't know
|
||||
how to distinguish these two kind of systems, so currently we try to
|
||||
include sioctl.h on all of them. If this #include gets an error, just
|
||||
delete it.
|
||||
|
||||
* X Windows doesn't work if DISPLAY uses a hostname.
|
||||
|
||||
People have reported kernel bugs in certain systems that cause Emacs
|
||||
not to work with X Windows if DISPLAY is set using a host name. But
|
||||
the problem does not occur if DISPLAY is set to `unix:0.0'. I think
|
||||
the bug has to do with SIGIO or FIONREAD.
|
||||
|
||||
You may be able to compensate for the bug by doing (set-input-mode nil nil).
|
||||
However, that has the disadvantage of turning off interrupts, so that
|
||||
you are unable to quit out of a Lisp program by typing C-g.
|
||||
|
||||
The easy way to do this is to put
|
||||
|
||||
(setq x-sigio-bug t)
|
||||
|
||||
in your site-init.el file.
|
||||
|
||||
* Problem with remote X server on Suns.
|
||||
|
||||
On a Sun, running Emacs on one machine with the X server on another
|
||||
may not work if you have used the unshared system libraries. This
|
||||
is because the unshared libraries fail to use YP for host name lookup.
|
||||
As a result, the host name you specify may not be recognized.
|
||||
|
||||
* Watch out for .emacs files and EMACSLOADPATH environment vars
|
||||
|
||||
These control the actions of Emacs.
|
||||
~/.emacs is your Emacs init file.
|
||||
EMACSLOADPATH overrides which directories the function
|
||||
"load" will search.
|
||||
|
||||
If you observe strange problems, check for these and get rid
|
||||
of them, then try again.
|
||||
|
||||
* Shell mode ignores interrupts on Apollo Domain
|
||||
|
||||
You may find that M-x shell prints the following message:
|
||||
|
||||
Warning: no access to tty; thus no job control in this shell...
|
||||
|
||||
This can happen if there are not enough ptys on your system.
|
||||
Here is how to make more of them.
|
||||
|
||||
% cd /dev
|
||||
% ls pty*
|
||||
# shows how many pty's you have. I had 8, named pty0 to pty7)
|
||||
% /etc/crpty 8
|
||||
# creates eight new pty's
|
||||
|
||||
* Fatal signal in the command temacs -l loadup inc dump
|
||||
|
||||
This command is the final stage of building Emacs. It is run by the
|
||||
Makefile in the src subdirectory, or by build.com on VMS.
|
||||
|
||||
It has been known to get fatal errors due to insufficient swapping
|
||||
space available on the machine.
|
||||
|
||||
On 68000's, it has also happened because of bugs in the
|
||||
subroutine `alloca'. Verify that `alloca' works right, even
|
||||
for large blocks (many pages).
|
||||
|
||||
* test-distrib says that the distribution has been clobbered
|
||||
* or, temacs prints "Command key out of range 0-127"
|
||||
* or, temacs runs and dumps xemacs, but xemacs totally fails to work.
|
||||
* or, temacs gets errors dumping xemacs
|
||||
|
||||
This can be because the .elc files have been garbled. Do not be
|
||||
fooled by the fact that most of a .elc file is text: these are
|
||||
binary files and can contain all 256 byte values.
|
||||
|
||||
In particular `shar' cannot be used for transmitting GNU Emacs.
|
||||
It typically truncates "lines". What appear to be "lines" in
|
||||
a binary file can of course be of any length. Even once `shar'
|
||||
itself is made to work correctly, `sh' discards null characters
|
||||
when unpacking the shell archive.
|
||||
|
||||
I have also seen character \177 changed into \377. I do not know
|
||||
what transfer means caused this problem. Various network
|
||||
file transfer programs are suspected of clobbering the high bit.
|
||||
|
||||
The only verified ways to transfer GNU Emacs are `tar', kermit (in
|
||||
binary mode on Unix), and rcp or internet ftp between two Unix systems,
|
||||
or chaosnet cftp using raw mode.
|
||||
|
||||
If you have a copy of Emacs that has been damaged in its
|
||||
nonprinting characters, you can fix them:
|
||||
|
||||
1) Record the names of all the .elc files.
|
||||
2) Delete all the .elc files.
|
||||
3) Recompile alloc.c with a value of PURESIZE twice as large.
|
||||
You might as well save the old alloc.o.
|
||||
4) Remake xemacs. It should work now.
|
||||
5) Running xemacs, do Meta-x byte-compile-file repeatedly
|
||||
to recreate all the .elc files that used to exist.
|
||||
You may need to increase the value of the variable
|
||||
max-lisp-eval-depth to succeed in running the compiler interpreted
|
||||
on certain .el files. 400 was sufficient as of last report.
|
||||
6) Reinstall the old alloc.o (undoing changes to alloc.c if any)
|
||||
and remake temacs.
|
||||
7) Remake xemacs. It should work now, with valid .elc files.
|
||||
|
||||
* temacs prints "Pure Lisp storage exhausted"
|
||||
|
||||
This means that the Lisp code loaded from the .elc and .el
|
||||
files during temacs -l loadup inc dump took up more
|
||||
space than was allocated.
|
||||
|
||||
This could be caused by
|
||||
1) adding code to the preloaded Lisp files
|
||||
2) adding more preloaded files in loadup.el
|
||||
3) having a site-init.el or site-load.el which loads files.
|
||||
Note that ANY site-init.el or site-load.el is nonstandard;
|
||||
if you have received Emacs from some other site
|
||||
and it contains a site-init.el or site-load.el file, consider
|
||||
deleting that file.
|
||||
4) getting the wrong .el or .elc files
|
||||
(not from the directory you expected).
|
||||
5) deleting some .elc files that are supposed to exist.
|
||||
This would cause the source files (.el files) to be
|
||||
loaded instead. They take up more room, so you lose.
|
||||
6) a bug in the Emacs distribution which underestimates
|
||||
the space required.
|
||||
|
||||
If the need for more space is legitimate, change the definition
|
||||
of PURESIZE in config.h.
|
||||
|
||||
But in some of the cases listed above, this problem is a consequence
|
||||
of something else that is wrong. Be sure to check and fix the real
|
||||
problem.
|
||||
|
||||
* Changes made to .el files do not take effect.
|
||||
|
||||
You may have forgotten to recompile them into .elc files.
|
||||
Then the old .elc files will be loaded, and your changes
|
||||
will not be seen. To fix this, do M-x byte-recompile-directory
|
||||
and specify the directory that contains the Lisp files.
|
||||
|
||||
* The dumped Emacs (xemacs) crashes when run, trying to write pure data.
|
||||
|
||||
Two causes have been seen for such problems.
|
||||
|
||||
1) On a system where getpagesize is not a system call, it is defined
|
||||
as a macro. If the definition (in both unexec.c and malloc.c) is wrong,
|
||||
it can cause problems like this. You might be able to find the correct
|
||||
value in the man page for a.out (5).
|
||||
|
||||
2) Some systems allocate variables declared static among the
|
||||
initialized variables. Emacs makes all initialized variables in most
|
||||
of its files pure after dumping, but the variables declared static and
|
||||
not initialized are not supposed to be pure. On these systems you
|
||||
may need to add "#define static" to the m- or the s- file.
|
||||
|
||||
* Compilation errors on VMS.
|
||||
|
||||
You will get warnings when compiling on VMS because there are
|
||||
variable names longer than 32 (or whatever it is) characters.
|
||||
This is not an error. Ignore it.
|
||||
|
||||
VAX C does not support #if defined(foo). Uses of this construct
|
||||
were removed, but some may have crept back in. They must be rewritten.
|
||||
|
||||
There is a bug in the C compiler which fails to sign extend characters
|
||||
in conditional expressions. The bug is:
|
||||
char c = -1, d = 1;
|
||||
int i;
|
||||
|
||||
i = d ? c : d;
|
||||
The result is i == 255; the fix is to typecast the char in the
|
||||
conditional expression as an (int). Known occurrences of such
|
||||
constructs in Emacs have been fixed.
|
||||
|
||||
* rmail gets error getting new mail
|
||||
|
||||
rmail gets new mail from /usr/spool/mail/$USER using a program
|
||||
called `movemail'. This program interlocks with /bin/mail using
|
||||
the protocol defined by /bin/mail.
|
||||
|
||||
There are two different protocols in general use. One of them uses
|
||||
the `flock' system call. The other involves creating a lock file;
|
||||
`movemail' must be able to write in /usr/spool/mail in order to do
|
||||
this. You control which one is used by defining, or not defining,
|
||||
the macro MAIL_USE_FLOCK in config.h or the m- or s- file it includes.
|
||||
IF YOU DON'T USE THE FORM OF INTERLOCKING THAT IS NORMAL ON YOUR
|
||||
SYSTEM, YOU CAN LOSE MAIL!
|
||||
|
||||
If your system uses the lock file protocol, and fascist restrictions
|
||||
prevent ordinary users from writing the lock files in /usr/spool/mail,
|
||||
you may need to make `movemail' setgid to a suitable group such as
|
||||
`mail'. You can use these commands (as root):
|
||||
|
||||
chgrp mail movemail
|
||||
chmod 2755 movemail
|
||||
|
||||
* Emacs won't work with X-windows if the value of DISPLAY is HOSTNAME:0.
|
||||
* GNUs can't make contact with the specified host for nntp.
|
||||
|
||||
Some people have found that Emacs was unable to connect to the local
|
||||
host by name, as in DISPLAY=prep:0 if you are running on prep, but
|
||||
could handle DISPLAY=unix:0. Here is what tale@rpi.edu said:
|
||||
|
||||
Seems as
|
||||
though gethostbyname was bombing somewhere along the way. Well, we
|
||||
had just upgrade from SunOS 3.5 (which X11 was built under) to SunOS
|
||||
4.0.1. Any new X applications which tried to be built with the pre
|
||||
OS-upgrade libraries had the same problems which Emacs was having.
|
||||
Missing /etc/resolv.conf for a little while (when one of the libraries
|
||||
was built?) also might have had a hand in it.
|
||||
|
||||
The result of all of this (with some speculation) was that we rebuilt
|
||||
X and then rebuilt Emacs with the new libraries. Works as it should
|
||||
now. Hoorah.
|
||||
|
||||
If you have already installed the name resolver in the file libresolv.a,
|
||||
then you need to compile Emacs to use that library. The easiest way to
|
||||
do this is to add to config.h a definition of LIBS_SYSTEM, LIBS_MACHINE
|
||||
or LIB_STANDARD which uses -lresolv. Watch out! If you redefine a macro
|
||||
that is already in use in your configuration to supply some other libraries,
|
||||
be careful not to lose the others.
|
||||
|
||||
Thus, you could start by adding this to config.h:
|
||||
|
||||
#define LIBS_SYSTEM -lresolv
|
||||
|
||||
Then if this gives you an error for redefining a macro, and you see that
|
||||
the s- file defines LIBS_SYSTEM as -lfoo -lbar, you could change config.h
|
||||
again to say this:
|
||||
|
||||
#define LIBS_SYSTEM -lresolv -lfoo -lbar
|
||||
|
||||
* Emacs spontaneously displays "I-search: " at the bottom of the screen.
|
||||
|
||||
This means that Control-S/Control-Q "flow control" is being used.
|
||||
C-s/C-q flow control is bad for Emacs editors because it takes away
|
||||
C-s and C-q as user commands. Since editors do not output long streams
|
||||
of text without user commands, there is no need for a user-issuable
|
||||
"stop output" command in an editor; therefore, a properly designed
|
||||
flow control mechanism would transmit all possible input characters
|
||||
without interference. Designing such a mechanism is easy, for a person
|
||||
with at least half a brain.
|
||||
|
||||
There are three possible reasons why flow control could be taking place:
|
||||
|
||||
1) Terminal has not been told to disable flow control
|
||||
2) Insufficient padding for the terminal in use
|
||||
3) Some sort of terminal concentrator or line switch is responsible
|
||||
|
||||
First of all, many terminals have a set-up mode which controls
|
||||
whether they generate flow control characters. This must be
|
||||
set to "no flow control" in order for Emacs to work. Sometimes
|
||||
there is an escape sequence that the computer can send to turn
|
||||
flow control off and on. If so, perhaps the termcap `ti' string
|
||||
should turn flow control off, and the `te' string should turn it on.
|
||||
|
||||
Once the terminal has been told "no flow control", you may find it
|
||||
needs more padding. The amount of padding Emacs sends is controlled
|
||||
by the termcap entry for the terminal in use, and by the output baud
|
||||
rate as known by the kernel. The shell command `stty' will print
|
||||
your output baud rate; `stty' with suitable arguments will set it if
|
||||
it is wrong. Setting to a higher speed causes increased padding. If
|
||||
the results are wrong for the correct speed, there is probably a
|
||||
problem in the termcap entry. You must speak to a local Unix wizard
|
||||
to fix this. Perhaps you are just using the wrong terminal type.
|
||||
|
||||
For terminals that lack a "no flow control" mode, sometimes just
|
||||
giving lots of padding will prevent actual generation of flow control
|
||||
codes. You might as well try it.
|
||||
|
||||
If you are really unlucky, your terminal is connected to the computer
|
||||
through a concentrator which sends flow control to the computer, or it
|
||||
insists on sending flow control itself no matter how much padding you
|
||||
give it. You are screwed! You should replace the terminal or
|
||||
concentrator with a properly designed one. In the mean time,
|
||||
some drastic measures can make Emacs semi-work.
|
||||
|
||||
One drastic measure to ignore C-s and C-q, while sending enough
|
||||
padding that the terminal will not really lose any output.
|
||||
Ignoring C-s and C-q can be done by using keyboard-translate-table
|
||||
to map them into an undefined character such as C-^ or C-\. Sending
|
||||
lots of padding is done by changing the termcap entry. Here is how
|
||||
to make such a keyboard-translate-table:
|
||||
|
||||
(let ((the-table (make-string 128 0)))
|
||||
;; Default is to translate each character into itself.
|
||||
(let ((i 0))
|
||||
(while (< i 128)
|
||||
(aset the-table i i)
|
||||
(setq i (1+ i))))
|
||||
;; Swap C-s with C-\
|
||||
(aset the-table ?\C-\\ ?\C-s)
|
||||
(aset the-table ?\C-s ?\C-\\)
|
||||
;; Swap C-q with C-^
|
||||
(aset the-table ?\C-^ ?\C-q)
|
||||
(aset the-table ?\C-q ?\C-^)
|
||||
(setq keyboard-translate-table the-table))
|
||||
|
||||
An even more drastic measure is to make Emacs use flow control.
|
||||
To do this, evaluate the Lisp expression (set-input-mode nil t).
|
||||
Emacs will then interpret C-s and C-q as flow control commands. (More
|
||||
precisely, it will allow the kernel to do so as it usually does.) You
|
||||
will lose the ability to use them for Emacs commands. Also, as a
|
||||
consequence of using CBREAK mode, the terminal's Meta-key, if any,
|
||||
will not work, and C-g will be liable to cause a loss of output which
|
||||
will produce garbage on the screen. (These problems apply to 4.2BSD;
|
||||
they may not happen in 4.3 or VMS, and I don't know what would happen
|
||||
in sysV.) You can use keyboard-translate-table, as shown above,
|
||||
to map two other input characters (such as C-^ and C-\) into C-s and
|
||||
C-q, so that you can still search and quote.
|
||||
|
||||
I have no intention of ever redisigning the Emacs command set for
|
||||
the assumption that terminals use C-s/C-q flow control. This
|
||||
flow control technique is a bad design, and terminals that need
|
||||
it are bad merchandise and should not be purchased. If you can
|
||||
get some use out of GNU Emacs on inferior terminals, I am glad,
|
||||
but I will not make Emacs worse for properly designed systems
|
||||
for the sake of inferior systems.
|
||||
|
||||
* Control-S and Control-Q commands are ignored completely.
|
||||
|
||||
For some reason, your system is using brain-damaged C-s/C-q flow
|
||||
control despite Emacs's attempts to turn it off. Perhaps your
|
||||
terminal is connected to the computer through a concentrator
|
||||
that wants to use flow control.
|
||||
|
||||
You should first try to tell the concentrator not to use flow control.
|
||||
If you succeed in this, try making the terminal work without
|
||||
flow control, as described in the preceding section.
|
||||
|
||||
If that line of approach is not successful, map some other characters
|
||||
into C-s and C-q using keyboard-translate-table. The example above
|
||||
shows how to do this with C-^ and C-\.
|
||||
|
||||
* Control-S and Control-Q commands are ignored completely on a net connection.
|
||||
|
||||
Some versions of rlogin (and possibly telnet) do not pass flow
|
||||
control characters to the remote system to which they connect.
|
||||
On such systems, emacs on the remote system cannot disable flow
|
||||
control on the local system.
|
||||
|
||||
One way to cure this is to disable flow control on the local host
|
||||
(the one running rlogin, not the one running rlogind) using the
|
||||
stty command, before starting the rlogin process. On many systems,
|
||||
"stty start u stop u" will do this.
|
||||
|
||||
Some versions of tcsh will prevent even this from working. One way
|
||||
around this is to start another shell before starting rlogin, and
|
||||
issue the stty command to disable flow control from that shell.
|
||||
|
||||
* Screen is updated wrong, but only on one kind of terminal.
|
||||
|
||||
This could mean that the termcap entry you are using for that
|
||||
terminal is wrong, or it could mean that Emacs has a bug handing
|
||||
the combination of features specified for that terminal.
|
||||
|
||||
The first step in tracking this down is to record what characters
|
||||
Emacs is sending to the terminal. Execute the Lisp expression
|
||||
(open-termscript "./emacs-script") to make Emacs write all
|
||||
terminal output into the file ~/emacs-script as well; then do
|
||||
what makes the screen update wrong, and look at the file
|
||||
and decode the characters using the manual for the terminal.
|
||||
There are several possibilities:
|
||||
|
||||
1) The characters sent are correct, according to the terminal manual.
|
||||
|
||||
In this case, there is no obvious bug in Emacs, and most likely you
|
||||
need more padding, or possibly the terminal manual is wrong.
|
||||
|
||||
2) The characters sent are incorrect, due to an obscure aspect
|
||||
of the terminal behavior not described in an obvious way
|
||||
by termcap.
|
||||
|
||||
This case is hard. It will be necessary to think of a way for
|
||||
Emacs to distinguish between terminals with this kind of behavior
|
||||
and other terminals that behave subtly differently but are
|
||||
classified the same by termcap; or else find an algorithm for
|
||||
Emacs to use that avoids the difference. Such changes must be
|
||||
tested on many kinds of terminals.
|
||||
|
||||
3) The termcap entry is wrong.
|
||||
|
||||
See the file etc/TERMS for information on changes
|
||||
that are known to be needed in commonly used termcap entries
|
||||
for certain terminals.
|
||||
|
||||
4) The characters sent are incorrect, and clearly cannot be
|
||||
right for any terminal with the termcap entry you were using.
|
||||
|
||||
This is unambiguously an Emacs bug, and can probably be fixed
|
||||
in termcap.c, tparam.c, term.c, scroll.c, cm.c or dispnew.c.
|
||||
|
||||
* Output from Control-V is slow.
|
||||
|
||||
On many bit-map terminals, scrolling operations are fairly slow.
|
||||
Often the termcap entry for the type of terminal in use fails
|
||||
to inform Emacs of this. The two lines at the bottom of the screen
|
||||
before a Control-V command are supposed to appear at the top after
|
||||
the Control-V command. If Emacs thinks scrolling the lines is fast,
|
||||
it will scroll them to the top of the screen.
|
||||
|
||||
If scrolling is slow but Emacs thinks it is fast, the usual reason is
|
||||
that the termcap entry for the terminal you are using does not
|
||||
specify any padding time for the `al' and `dl' strings. Emacs
|
||||
concludes that these operations take only as much time as it takes to
|
||||
send the commands at whatever line speed you are using. You must
|
||||
fix the termcap entry to specify, for the `al' and `dl', as much
|
||||
time as the operations really take.
|
||||
|
||||
Currently Emacs thinks in terms of serial lines which send characters
|
||||
at a fixed rate, so that any operation which takes time for the
|
||||
terminal to execute must also be padded. With bit-map terminals
|
||||
operated across networks, often the network provides some sort of
|
||||
flow control so that padding is never needed no matter how slow
|
||||
an operation is. You must still specify a padding time if you want
|
||||
Emacs to realize that the operation takes a long time. This will
|
||||
cause padding characters to be sent unnecessarily, but they do
|
||||
not really cost much. They will be transmitted while the scrolling
|
||||
is happening and then discarded quickly by the terminal.
|
||||
|
||||
Most bit-map terminals provide commands for inserting or deleting
|
||||
multiple lines at once. Define the `AL' and `DL' strings in the
|
||||
termcap entry to say how to do these things, and you will have
|
||||
fast output without wasted padding characters. These strings should
|
||||
each contain a single %-spec saying how to send the number of lines
|
||||
to be scrolled. These %-specs are like those in the termcap
|
||||
`cm' string.
|
||||
|
||||
You should also define the `IC' and `DC' strings if your terminal
|
||||
has a command to insert or delete multiple characters. These
|
||||
take the number of positions to insert or delete as an argument.
|
||||
|
||||
A `cs' string to set the scrolling region will reduce the amount
|
||||
of motion you see on the screen when part of the screen is scrolled.
|
||||
|
||||
* Your Delete key sends a Backspace to the terminal, using an AIXterm.
|
||||
|
||||
The solution is to include in your .Xdefaults the lines:
|
||||
|
||||
*aixterm.Translations: #override <Key>BackSpace: string(0x7f)
|
||||
aixterm*ttyModes: erase ^?
|
||||
|
||||
This makes your Backspace key send DEL (ASCII 127).
|
||||
|
||||
* You type Control-H (Backspace) expecting to delete characters.
|
||||
|
||||
Put `stty dec' in your .login file and your problems will disappear
|
||||
after a day or two.
|
||||
|
||||
The choice of Backspace for erasure was based on confusion, caused by
|
||||
the fact that backspacing causes erasure (later, when you type another
|
||||
character) on most display terminals. But it is a mistake. Deletion
|
||||
of text is not the same thing as backspacing followed by failure to
|
||||
overprint. I do not wish to propagate this confusion by conforming
|
||||
to it.
|
||||
|
||||
For this reason, I believe `stty dec' is the right mode to use,
|
||||
and I have designed Emacs to go with that. If there were a thousand
|
||||
other control characters, I would define Control-h to delete as well;
|
||||
but there are not very many other control characters, and I think
|
||||
that providing the most mnemonic possible Help character is more
|
||||
important than adapting to people who don't use `stty dec'.
|
||||
|
||||
If you are obstinate about confusing buggy overprinting with deletion,
|
||||
you can redefine Backspace in your .emacs file:
|
||||
(global-set-key "\b" 'delete-backward-char)
|
||||
You may then wish to put the function help-command on some
|
||||
other key. I leave to you the task of deciding which key.
|
||||
|
||||
* Editing files through RFS gives spurious "file has changed" warnings.
|
||||
It is possible that a change in Emacs 18.37 gets around this problem,
|
||||
but in case not, here is a description of how to fix the RFS bug that
|
||||
causes it.
|
||||
|
||||
There was a serious pair of bugs in the handling of the fsync() system
|
||||
call in the RFS server.
|
||||
|
||||
The first is that the fsync() call is handled as another name for the
|
||||
close() system call (!!). It appears that fsync() is not used by very
|
||||
many programs; Emacs version 18 does an fsync() before closing files
|
||||
to make sure that the bits are on the disk.
|
||||
|
||||
This is fixed by the enclosed patch to the RFS server.
|
||||
|
||||
The second, more serious problem, is that fsync() is treated as a
|
||||
non-blocking system call (i.e., it's implemented as a message that
|
||||
gets sent to the remote system without waiting for a reply). Fsync is
|
||||
a useful tool for building atomic file transactions. Implementing it
|
||||
as a non-blocking RPC call (when the local call blocks until the sync
|
||||
is done) is a bad idea; unfortunately, changing it will break the RFS
|
||||
protocol. No fix was supplied for this problem.
|
||||
|
||||
(as always, your line numbers may vary)
|
||||
|
||||
% rcsdiff -c -r1.2 serversyscall.c
|
||||
RCS file: RCS/serversyscall.c,v
|
||||
retrieving revision 1.2
|
||||
diff -c -r1.2 serversyscall.c
|
||||
*** /tmp/,RCSt1003677 Wed Jan 28 15:15:02 1987
|
||||
--- serversyscall.c Wed Jan 28 15:14:48 1987
|
||||
***************
|
||||
*** 163,169 ****
|
||||
/*
|
||||
* No return sent for close or fsync!
|
||||
*/
|
||||
! if (syscall == RSYS_close || syscall == RSYS_fsync)
|
||||
proc->p_returnval = deallocate_fd(proc, msg->m_args[0]);
|
||||
else
|
||||
{
|
||||
--- 166,172 ----
|
||||
/*
|
||||
* No return sent for close or fsync!
|
||||
*/
|
||||
! if (syscall == RSYS_close)
|
||||
proc->p_returnval = deallocate_fd(proc, msg->m_args[0]);
|
||||
else
|
||||
{
|
||||
|
||||
* ld complains because `alloca' is not defined on your system.
|
||||
|
||||
Alloca is a library function in 4.2bsd, which is used very heavily by
|
||||
GNU Emacs. Use of malloc instead is very difficult, as you would have
|
||||
to arrange for the storage to be freed, and do so even in the case of
|
||||
a longjmp happening inside a subroutine. Many subroutines in Emacs
|
||||
can do longjmp.
|
||||
|
||||
If your system does not support alloca, try defining the symbol
|
||||
C_ALLOCA in the m-...h file for that machine. This will enable the use
|
||||
in Emacs of a portable simulation for alloca. But you will find that
|
||||
Emacs's performance and memory use improve if you write a true
|
||||
alloca in assembler language.
|
||||
|
||||
alloca (N) should return the address of an N-byte block of memory
|
||||
added dynamically to the current stack frame.
|
||||
|
||||
* Vax C compiler bugs affecting Emacs.
|
||||
|
||||
You may get one of these problems compiling Emacs:
|
||||
|
||||
foo.c line nnn: compiler error: no table entry for op STASG
|
||||
foo.c: fatal error in /lib/ccom
|
||||
|
||||
These are due to bugs in the C compiler; the code is valid C.
|
||||
Unfortunately, the bugs are unpredictable: the same construct
|
||||
may compile properly or trigger one of these bugs, depending
|
||||
on what else is in the source file being compiled. Even changes
|
||||
in header files that should not affect the file being compiled
|
||||
can affect whether the bug happens. In addition, sometimes files
|
||||
that compile correctly on one machine get this bug on another machine.
|
||||
|
||||
As a result, it is hard for me to make sure this bug will not affect
|
||||
you. I have attempted to find and alter these constructs, but more
|
||||
can always appear. However, I can tell you how to deal with it if it
|
||||
should happen. The bug comes from having an indexed reference to an
|
||||
array of Lisp_Objects, as an argument in a function call:
|
||||
Lisp_Object *args;
|
||||
...
|
||||
... foo (5, args[i], ...)...
|
||||
putting the argument into a temporary variable first, as in
|
||||
Lisp_Object *args;
|
||||
Lisp_Object tem;
|
||||
...
|
||||
tem = args[i];
|
||||
... foo (r, tem, ...)...
|
||||
causes the problem to go away.
|
||||
The `contents' field of a Lisp vector is an array of Lisp_Objects,
|
||||
so you may see the problem happening with indexed references to that.
|
||||
|
||||
* 68000 C compiler problems
|
||||
|
||||
Various 68000 compilers have different problems.
|
||||
These are some that have been observed.
|
||||
|
||||
** Using value of assignment expression on union type loses.
|
||||
This means that x = y = z; or foo (x = z); does not work
|
||||
if x is of type Lisp_Object.
|
||||
|
||||
** "cannot reclaim" error.
|
||||
|
||||
This means that an expression is too complicated. You get the correct
|
||||
line number in the error message. The code must be rewritten with
|
||||
simpler expressions.
|
||||
|
||||
** XCONS, XSTRING, etc macros produce incorrect code.
|
||||
|
||||
If temacs fails to run at all, this may be the cause.
|
||||
Compile this test program and look at the assembler code:
|
||||
|
||||
struct foo { char x; unsigned int y : 24; };
|
||||
|
||||
lose (arg)
|
||||
struct foo arg;
|
||||
{
|
||||
test ((int *) arg.y);
|
||||
}
|
||||
|
||||
If the code is incorrect, your compiler has this problem.
|
||||
In the XCONS, etc., macros in lisp.h you must replace (a).u.val with
|
||||
((a).u.val + coercedummy) where coercedummy is declared as int.
|
||||
|
||||
This problem will not happen if the m-...h file for your type
|
||||
of machine defines NO_UNION_TYPE. That is the recommended setting now.
|
||||
|
||||
* C compilers lose on returning unions
|
||||
|
||||
I hear that some C compilers cannot handle returning
|
||||
a union type. Most of the functions in GNU Emacs return
|
||||
type Lisp_Object, which is currently defined as a union.
|
||||
|
||||
This problem will not happen if the m-...h file for your type
|
||||
of machine defines NO_UNION_TYPE. That is the recommended setting now.
|
||||
|
||||
42
README
Normal file
42
README
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
This directory holds the latest distribution version of GNU Emacs.
|
||||
The subdirectory `src' holds the C code,
|
||||
`lisp' holds the Lisp code for the editing commands,
|
||||
`etc' holds various associated documentation files
|
||||
and programs that Emacs runs,
|
||||
`info' holds the Info documentation tree.
|
||||
`man' holds the source of the Emacs manual.
|
||||
`cpp' holds a C preprocessor for use instead of the installed one
|
||||
when the installed one fails to distinguish more than 8 characters
|
||||
in a symbol name.
|
||||
`shortnames' holds programs and data files for creating files of #define's
|
||||
used to convert long symbol names to distinct short ones
|
||||
for C compiles that cannot distinguish more than 8 characters.
|
||||
|
||||
The file INSTALL in this directory says how to bring up
|
||||
GNU Emacs on Unix, once you have loaded the entire subtree of this
|
||||
directory.
|
||||
|
||||
The files `build-install' and `Makefile' help automate the process of
|
||||
building and installing emacs. The former is a shell script. See
|
||||
INSTALL for more info.
|
||||
|
||||
The file PROBLEMS contains information on many common
|
||||
problems that occur in building, installing and running Emacs.
|
||||
|
||||
The `etc' subdirectory contains several other files,
|
||||
named in capital letters, which you should look at
|
||||
when installing GNU Emacs.
|
||||
|
||||
The file 'emacs.com' in this directory is for VMS. It defines
|
||||
logical names and commands such as `emacs', so you must edit
|
||||
it to specify the file and directory names used on your machine.
|
||||
This file must be executed in each session to enable you to run
|
||||
the installed Emacs. It should be executed by your `login.com' file,
|
||||
or else perhaps it can be executed once at system boot time.
|
||||
|
||||
The file `kepteditor.com' in this directory is also for VMS.
|
||||
When a user says to run Emacs, it really runs this command file.
|
||||
|
||||
See the files VMSINSTALL and VMSNOTES for more information on VMS use.
|
||||
|
||||
|
||||
129
VMSINSTALL
Normal file
129
VMSINSTALL
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
* Installing GNU Emacs from a VMS install kit
|
||||
|
||||
If you receive a VMS distribution tape containing an install kit, you
|
||||
can restore Emacs and run it immediately on any VMS system 4.2 or newer.
|
||||
The installation command file will automatically rename certain files
|
||||
whose names must vary according to the version of VMS in use.
|
||||
|
||||
However, it is not certain we will have the install kit developed
|
||||
soon, so until that is done, you may receive an ordinary BACKUP
|
||||
saveset instead.
|
||||
|
||||
* Installing GNU Emacs from an ordinary VMS BACKUP saveset
|
||||
|
||||
If you receive a VMS distribution tape in VMS BACKUP interchange
|
||||
format you can restore Emacs and run it on VMS versions 4.2 or newer
|
||||
after executing a few commands. What you must do depends on the
|
||||
VMS version (one procedure for VMS 4.2 or 4.3; another procedure
|
||||
for newer VMS versions).
|
||||
|
||||
For VMS versions 4.4 and up, make sure the file
|
||||
SYS$SYSTEM:RIGHTSLIST.DAT has WORLD:R access. Emacs reads this file
|
||||
to check file access.
|
||||
|
||||
In order to compile Emacs with the VMS C compiler, you will need a
|
||||
pagefile quota of around 22000 pages, plus enough swap space to handle
|
||||
that. (This was in VMS 5.1-1, with 5 meg of physical memory.) See
|
||||
HELP SYSGEN CREATE and HELP SYSGEN INSTALL for more information.
|
||||
|
||||
Choose a directory to restore to, say DEV:[LIB]. Do:
|
||||
|
||||
$ mount/foreign mta0:
|
||||
$ backup/log mta0: dev:[lib...]
|
||||
|
||||
Now, if you are using VMS version 4.4 or later, set your default to
|
||||
the directory DEV:[LIB.EMACS] and run the command file
|
||||
DEV:[LIB.EMACS]ALLRENAME.COM:
|
||||
|
||||
$ set default dev:[lib.emacs]
|
||||
$ @allrename [...] "_" "-"
|
||||
|
||||
This renames all files in the Emacs distribution from their old-VMS
|
||||
names (containing `_' characters) to their new-VMS names (containing
|
||||
`-' instead).
|
||||
|
||||
Now, edit DEV:[LIB.EMACS]EMACS.COM. Replace the definition of
|
||||
EMACS_LIBRARY with the appropriate device and directory. The
|
||||
definition initially reads as follows:
|
||||
|
||||
$ define /translation=concealed emacs_library sys$device:[emacs.]
|
||||
|
||||
You would replace this with:
|
||||
|
||||
$ define /translation=concealed emacs_library dev:[lib.emacs.]
|
||||
|
||||
Now execute the command file DEV:[LIB.EMACS]EMACS.COM. This defines
|
||||
a command EMACS that runs a suspendable permanent Emacs. To
|
||||
fully install Emacs, you must arrange for users to run this file
|
||||
on login, or arrange for this file to be run when the system boots.
|
||||
|
||||
The distribution contains an Emacs executable in
|
||||
DEV:[LIB.EMACS]EMACS.EXE. It uses DEV:[LIB.EMACS]EMACS.DUMP every time
|
||||
it runs. The EMACS.EXE has been linked with the non-sharable C
|
||||
library, so it should run on any VMS V4.4+ system, whether or not the
|
||||
C compiler exists. The .OBJ files are all there, so you can relink
|
||||
with /debug if you want to have fun.
|
||||
|
||||
A few C source files contain compilation conditionals that depend
|
||||
on the version of VMS. We have compiled these files specially for
|
||||
VMS version 4.2 (or 4.3) in object files with extension .JBO.
|
||||
So to run on VMS 4.2, rename all the .JBO files to .OBJ, then
|
||||
link and build Emacs as described in DEV:[LIB.EMACS.SRC]VMSBUILD.
|
||||
|
||||
$ set def [.src]
|
||||
$ rename *.jbo *.obj
|
||||
$ @precomp
|
||||
$ @link
|
||||
$ @build
|
||||
$ rename temacs.exe [-]emacs.exe
|
||||
$ rename temacs.dump [-]emacs.dump
|
||||
|
||||
To be clean, you should also edit the file [.SRC]CONFIG.H to #include
|
||||
the file S_VMS4_2.H. Then the proper conditionals will be activated
|
||||
if you ever recompile.
|
||||
|
||||
* Moving a Unix distribution to VMS.
|
||||
|
||||
Moving a Unix distribution to VMS is mostly a matter of transferring
|
||||
the files to the VMS system, but with old versions of VMS (prior to
|
||||
4.4) it is a little more complicated because some of the file names
|
||||
used on Unix are not supported by VMS. Every `-' in a Unix file name
|
||||
must be changed to a `_' on VMS. (In VMS versions 4.4 and up, this is
|
||||
not necessary, since `-' is allowed in file names.)
|
||||
|
||||
A few other changes must be made regardless of the version of VMS:
|
||||
|
||||
1) Copy the file [.SRC]VMSPATHS.H to [.SRC]PATHS.H, replacing any existing
|
||||
file PATHS.H in that directory.
|
||||
|
||||
2) Delete any file [.SRC]CONFIG.H and replace it with a copy of
|
||||
CONFIG.H-DIST. Then edit this file so it specifies `m-vax.h' as the
|
||||
second include file and for the first include file one of
|
||||
`s-vms4-0.h', `s-vms4-2.h', `s-vms4-4.h' or `s-vms5-5.h'. (Use the
|
||||
highest version not greater than the VMS version you are running. For
|
||||
VMS versions prior to 4.4, the `-' characters must be replaced with
|
||||
`_'.)
|
||||
|
||||
You can now compile, link, build and install Emacs as described in
|
||||
[.SRC]VMSBUILD..
|
||||
|
||||
* Moving a VMS distribution to Unix.
|
||||
|
||||
Delete all .OBJ files, and PATHS.H and CONFIG.H. Then copy the
|
||||
remaining files, changing each `_' in a file name to `-`. Unix will
|
||||
allow filenames with `_' but Emacs will not work with them!
|
||||
|
||||
Names which on VMS end in a period (have a null extension) should
|
||||
have no period on Unix. Thus, "YMAKEFILE." becomes "ymakefile".
|
||||
|
||||
VMS file names are case-insensitive. On Unix, case is significant.
|
||||
Most of the file names must be in lower case or they will not work.
|
||||
There are only a few exceptions:
|
||||
|
||||
1) CHANGELOG. becomes ChangeLog
|
||||
2) MAKEFILE. becomes Makefile
|
||||
3) TAGS. becomes TAGS
|
||||
4) Files of English text with null extensions keep their names
|
||||
in upper case. For example, README. becomes README and
|
||||
[.ETC]GNU. becomes GNU
|
||||
|
||||
70
VMSNOTES
Normal file
70
VMSNOTES
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
See the file VMSINSTALL for VMS installation information.
|
||||
|
||||
* Deficiencies of VMS GNU Emacs
|
||||
|
||||
All GNU Emacs features which on Unix work by running a Unix utility
|
||||
in a subprocess currently do not work on VMS.
|
||||
|
||||
These include reading and sending mail, reading and posting netnews,
|
||||
spelling correction, displaying the time and load in the mode line,
|
||||
and the `sort-columns' command. (dired and sending output to printers
|
||||
don't work in version 18, but will in version 19.) Naturally, the
|
||||
commands to view Unix manual pages and execute Unix shell commands
|
||||
also do not work.
|
||||
|
||||
It is not possible to fix these problems in a general way on VMS
|
||||
because they involve interfaces to parts of the operating system which
|
||||
work very differently on VMS. Each feature must be reimplemented
|
||||
individually.
|
||||
|
||||
I hope that someone will send me an implementation for directory listing
|
||||
on VMS. This should not be very hard to do. Most of the code you need
|
||||
is already provided in [.src]dired.c.
|
||||
|
||||
The normal commands for running an inferior shell or lisp with I/O
|
||||
through an Emacs buffer do not work on VMS in Emacs version 18, but
|
||||
will work in version 19. For the meanwhile, you can create a DCL
|
||||
subprocess which does I/O through an Emacs buffer and get a similar
|
||||
effect. See the file [.lisp]vms-patch.el.
|
||||
|
||||
* Specifying terminal type.
|
||||
|
||||
To specify a terminal type for Emacs that is not known to VMS,
|
||||
define the logical name EMACS_TERM with the terminal type as value.
|
||||
Terminal types are looked up in the termcap data base, which is
|
||||
found as the file `[etc]termcap.dat' in the Emacs distribution.
|
||||
|
||||
* Specifying file names.
|
||||
|
||||
GNU Emacs accepts both Unix and VMS file name syntax. Most Lisp
|
||||
code that runs in Emacs uses Unix syntax so it can run everywhere.
|
||||
Users on VMS will generally type file names with VMS syntax.
|
||||
|
||||
The EMACSLOADPATH logical name, if you use it, should contain
|
||||
directory names in Unix syntax, separated by commas.
|
||||
|
||||
find-file prompts with the current directory. You can then type a
|
||||
relative directory spec to get somewhere else in the hirearchy. For
|
||||
instance:
|
||||
|
||||
Find File: emacs_library:[src][-.lisp]startup.el
|
||||
|
||||
is converted to emacs_library:[lisp]startup.el by
|
||||
expand-file-name. The basic rule is:
|
||||
][- is treated like /.. (dir:[file.sub][-.other] ==> dir:[file.other],
|
||||
dir:[file.sub][-] ==> dir:[file])
|
||||
][. elides the ][ (dir:[file][.sub] ==> dir:[file.sub])
|
||||
][alpha backs up to the previous [ (dir:[file][other] ==> dir:[other])
|
||||
a colon appearing after a ] forces a new "root" disk.
|
||||
(dev:[file]dev2:[other] ==> dev2:[other])
|
||||
expand-file-name also tries to be smart about decnet node names,
|
||||
but this is not yet known to work.
|
||||
|
||||
* A possible problem.
|
||||
|
||||
For VMS versions 4.4 and up, make sure the file
|
||||
SYS$SYSTEM:RIGHTSLIST.DAT has WORLD:R access. Emacs reads this file
|
||||
to check file access. If this file does not have appropriate access,
|
||||
Emacs may think that you cannot write any files.
|
||||
|
||||
|
||||
39
allrename.com
Normal file
39
allrename.com
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
$! Command file to rename many files at once
|
||||
$! performing a global string substitution on each name.
|
||||
$!Example:
|
||||
$! @allrename [...] "-" "_"
|
||||
$!changes each `-' in a name into a `_'.
|
||||
$!
|
||||
$!The device and directory names are not altered.
|
||||
$!
|
||||
$ p2_length = f$length (p2)
|
||||
$ p3_length = f$length (p3)
|
||||
$
|
||||
$file_loop:
|
||||
$ full_name = f$search("''p1'*.*;*")
|
||||
$ if ("''full_name'" .eqs. "") then goto done
|
||||
$ original_device = f$parse("''full_name'",,,"DEVICE")
|
||||
$ original_dir = f$parse("''full_name'",,,"DIRECTORY")
|
||||
$ original_file_name = f$parse("''full_name'",,,"NAME")
|
||||
$ original_file_type = f$parse("''full_name'",,,"TYPE")
|
||||
$ original_file_version = f$parse("''full_name'",,,"VERSION")
|
||||
$ original_file = original_file_name -
|
||||
+ original_file_type + original_file_version
|
||||
$ new_file = original_file
|
||||
$ something_done = "false"
|
||||
$name_loop:
|
||||
$ max_length = f$length(new_file)
|
||||
$ index = f$locate("''p2'", new_file)
|
||||
$ if (index .ge. max_length) then goto end_of_name
|
||||
$ something_done = "true"
|
||||
$ new_file = f$extract (0,index,new_file) + p3 -
|
||||
+ f$extract(index+p2_length,max_length-index,new_file)
|
||||
$ goto name_loop
|
||||
$end_of_name:
|
||||
$ original_file = original_device + original_dir + original_file
|
||||
$ new_file = original_device + original_dir + new_file
|
||||
$ if (something_done) then -
|
||||
rename 'original_file' 'new_file'
|
||||
$ goto file_loop
|
||||
$done:
|
||||
$ exit
|
||||
38
build-install
Executable file
38
build-install
Executable file
|
|
@ -0,0 +1,38 @@
|
|||
#!/bin/sh
|
||||
# Shell script for building and installing Emacs.
|
||||
# This is an alternative to `make install',
|
||||
# and it still exists just because it always has.
|
||||
set -x
|
||||
|
||||
EMACS=/usr/local/emacs
|
||||
BIN=/usr/local/bin
|
||||
|
||||
/bin/sed "s;/usr/local/emacs;$EMACS;" < src/paths.h-dist > src/paths.h
|
||||
|
||||
(cd etc; make) || exit 1
|
||||
(cd src; make) || exit 1
|
||||
|
||||
# The double quotes prevent an error from sh on Suns
|
||||
# when the directory does not exist yet.
|
||||
# We use sh -c pwd instead of just pwd because on some systems (Suns?)
|
||||
# plan pwd tends to give back the specified name sometimes.
|
||||
if [ `sh -c pwd` != "`(cd $EMACS; sh -c pwd)`" ]
|
||||
then
|
||||
mv `pwd` $EMACS
|
||||
if [ $? != '0' ]
|
||||
then
|
||||
mkdir $EMACS
|
||||
echo mv `pwd` to $EMACS failed--using tar to copy.
|
||||
tar cf - . | (cd $EMACS; umask 0; tar xf -)
|
||||
if [ $? != '0' ]
|
||||
then
|
||||
echo tar-copying `pwd` to $EMACS failed.
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
cp $EMACS/etc/[ce]tags $BIN
|
||||
cp $EMACS/etc/emacsclient $BIN
|
||||
mv $EMACS/src/xemacs $BIN/emacs
|
||||
rm $EMACS/src/temacs
|
||||
20
cpp/Makefile
Normal file
20
cpp/Makefile
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# Makefile for cccp in the Emacs distribution only.
|
||||
# Here we assume that you are using sys V.0
|
||||
# (since cccp is used by Emacs only to deal with shortnames lossage).
|
||||
# Therefore, we add -DEMACS to CFLAGS and add -lPW to linking.
|
||||
|
||||
CFLAGS=-g -I. -DEMACS
|
||||
cpp: cccp
|
||||
-rm cpp
|
||||
ln cccp cpp
|
||||
cccp: cccp.o y.tab.o
|
||||
cc -o cccp -g cccp.o y.tab.o -lPW
|
||||
testexp: y.tab.c
|
||||
cc -g -DTEST_EXP_READER y.tab.c -o testexp
|
||||
y.tab.c: cexp.y
|
||||
echo expect 40 shift/reduce conflicts
|
||||
yacc cexp.y
|
||||
cccp.o: cccp.c
|
||||
y.tab.o: y.tab.c
|
||||
lint: y.tab.c
|
||||
lint -p y.tab.c cccp.c
|
||||
2483
cpp/cccp.c
Normal file
2483
cpp/cccp.c
Normal file
File diff suppressed because it is too large
Load diff
591
cpp/cexp.y
Normal file
591
cpp/cexp.y
Normal file
|
|
@ -0,0 +1,591 @@
|
|||
/* Parse C expressions for CCCP.
|
||||
Copyright (C) 1986 Free Software Foundation.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
BECAUSE THIS PROGRAM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
|
||||
NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT
|
||||
WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
|
||||
RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE THIS PROGRAM "AS IS"
|
||||
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY
|
||||
AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
|
||||
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
|
||||
CORRECTION.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
|
||||
STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
|
||||
WHO MAY MODIFY AND REDISTRIBUTE THIS PROGRAM AS PERMITTED BELOW, BE
|
||||
LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR
|
||||
OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
|
||||
DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR
|
||||
A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) THIS
|
||||
PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
|
||||
|
||||
GENERAL PUBLIC LICENSE TO COPY
|
||||
|
||||
1. You may copy and distribute verbatim copies of this source file
|
||||
as you receive it, in any medium, provided that you conspicuously
|
||||
and appropriately publish on each copy a valid copyright notice
|
||||
"Copyright (C) 1986 Free Software Foundation"; and include
|
||||
following the copyright notice a verbatim copy of the above disclaimer
|
||||
of warranty and of this License.
|
||||
|
||||
2. You may modify your copy or copies of this source file or
|
||||
any portion of it, and copy and distribute such modifications under
|
||||
the terms of Paragraph 1 above, provided that you also do the following:
|
||||
|
||||
a) cause the modified files to carry prominent notices stating
|
||||
that you changed the files and the date of any change; and
|
||||
|
||||
b) cause the whole of any work that you distribute or publish,
|
||||
that in whole or in part contains or is a derivative of this
|
||||
program or any part thereof, to be licensed at no charge to all
|
||||
third parties on terms identical to those contained in this
|
||||
License Agreement (except that you may choose to grant more extensive
|
||||
warranty protection to some or all third parties, at your option).
|
||||
|
||||
c) You may charge a distribution fee for the physical act of
|
||||
transferring a copy, and you may at your option offer warranty
|
||||
protection in exchange for a fee.
|
||||
|
||||
Mere aggregation of another unrelated program with this program (or its
|
||||
derivative) on a volume of a storage or distribution medium does not bring
|
||||
the other program under the scope of these terms.
|
||||
|
||||
3. You may copy and distribute this program (or a portion or derivative
|
||||
of it, under Paragraph 2) in object code or executable form under the terms
|
||||
of Paragraphs 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of
|
||||
Paragraphs 1 and 2 above; or,
|
||||
|
||||
b) accompany it with a written offer, valid for at least three
|
||||
years, to give any third party free (except for a nominal
|
||||
shipping charge) a complete machine-readable copy of the
|
||||
corresponding source code, to be distributed under the terms of
|
||||
Paragraphs 1 and 2 above; or,
|
||||
|
||||
c) accompany it with the information you received as to where the
|
||||
corresponding source code may be obtained. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form alone.)
|
||||
|
||||
For an executable file, complete source code means all the source code for
|
||||
all modules it contains; but, as a special exception, it need not include
|
||||
source code for modules which are standard libraries that accompany the
|
||||
operating system on which the executable file runs.
|
||||
|
||||
4. You may not copy, sublicense, distribute or transfer this program
|
||||
except as expressly provided under this License Agreement. Any attempt
|
||||
otherwise to copy, sublicense, distribute or transfer this program is void and
|
||||
your rights to use the program under this License agreement shall be
|
||||
automatically terminated. However, parties who have received computer
|
||||
software programs from you with this License Agreement will not have
|
||||
their licenses terminated so long as such parties remain in full compliance.
|
||||
|
||||
In other words, you are welcome to use, share and improve this program.
|
||||
You are forbidden to forbid anyone else to use, share and improve
|
||||
what you give them. Help stamp out software-hoarding!
|
||||
|
||||
Adapted from expread.y of GDB by Paul Rubin, July 1986.
|
||||
|
||||
/* Parse a C expression from text in a string */
|
||||
|
||||
%{
|
||||
#include <setjmp.h>
|
||||
/* #define YYDEBUG 1 */
|
||||
|
||||
static int yylex ();
|
||||
static yyerror ();
|
||||
int expression_value;
|
||||
|
||||
static jmp_buf parse_return_error;
|
||||
|
||||
/* some external tables of character types */
|
||||
extern unsigned char is_idstart[], is_idchar[];
|
||||
|
||||
%}
|
||||
|
||||
%union {
|
||||
long lval;
|
||||
int voidval;
|
||||
char *sval;
|
||||
}
|
||||
|
||||
%type <lval> exp exp1 start
|
||||
%token <lval> INT CHAR
|
||||
%token <sval> NAME
|
||||
%token <lval> ERROR
|
||||
|
||||
%left ','
|
||||
%left OR
|
||||
%left AND
|
||||
%left '|'
|
||||
%left '^'
|
||||
%left '&'
|
||||
%left EQUAL NOTEQUAL
|
||||
%left '<' '>' LEQ GEQ
|
||||
%left LSH RSH
|
||||
%left '+' '-'
|
||||
%left '*' '/' '%'
|
||||
%right UNARY
|
||||
|
||||
%%
|
||||
|
||||
start : exp1
|
||||
{ expression_value = $1; }
|
||||
;
|
||||
|
||||
/* Expressions, including the comma operator. */
|
||||
exp1 : exp
|
||||
| exp1 ',' exp
|
||||
{ $$ = $3; }
|
||||
;
|
||||
|
||||
/* Expressions, not including the comma operator. */
|
||||
exp : '-' exp %prec UNARY
|
||||
{ $$ = - $2; }
|
||||
| '!' exp %prec UNARY
|
||||
{ $$ = ! $2; }
|
||||
| '~' exp %prec UNARY
|
||||
{ $$ = ~ $2; }
|
||||
| '(' exp1 ')'
|
||||
{ $$ = $2; }
|
||||
;
|
||||
|
||||
/* Binary operators in order of decreasing precedence. */
|
||||
exp : exp '*' exp
|
||||
{ $$ = $1 * $3; }
|
||||
| exp '/' exp
|
||||
{ $$ = $1 / $3; }
|
||||
| exp '%' exp
|
||||
{ $$ = $1 % $3; }
|
||||
| exp '+' exp
|
||||
{ $$ = $1 + $3; }
|
||||
| exp '-' exp
|
||||
{ $$ = $1 - $3; }
|
||||
| exp LSH exp
|
||||
{ $$ = $1 << $3; }
|
||||
| exp RSH exp
|
||||
{ $$ = $1 >> $3; }
|
||||
| exp EQUAL exp
|
||||
{ $$ = ($1 == $3); }
|
||||
| exp NOTEQUAL exp
|
||||
{ $$ = ($1 != $3); }
|
||||
| exp LEQ exp
|
||||
{ $$ = ($1 <= $3); }
|
||||
| exp GEQ exp
|
||||
{ $$ = ($1 >= $3); }
|
||||
| exp '<' exp
|
||||
{ $$ = ($1 < $3); }
|
||||
| exp '>' exp
|
||||
{ $$ = ($1 > $3); }
|
||||
| exp '&' exp
|
||||
{ $$ = ($1 & $3); }
|
||||
| exp '^' exp
|
||||
{ $$ = ($1 ^ $3); }
|
||||
| exp '|' exp
|
||||
{ $$ = ($1 | $3); }
|
||||
| exp AND exp
|
||||
{ $$ = ($1 && $3); }
|
||||
| exp OR exp
|
||||
{ $$ = ($1 || $3); }
|
||||
| exp '?' exp ':' exp
|
||||
{ $$ = $1 ? $3 : $5; }
|
||||
| INT
|
||||
{ $$ = yylval.lval; }
|
||||
| CHAR
|
||||
{ $$ = yylval.lval; }
|
||||
| NAME
|
||||
{ $$ = 0; }
|
||||
;
|
||||
%%
|
||||
|
||||
/* During parsing of a C expression, the pointer to the next character
|
||||
is in this variable. */
|
||||
|
||||
static char *lexptr;
|
||||
|
||||
/* Take care of parsing a number (anything that starts with a digit).
|
||||
Set yylval and return the token type; update lexptr.
|
||||
LEN is the number of characters in it. */
|
||||
|
||||
/* maybe needs to actually deal with floating point numbers */
|
||||
|
||||
static int
|
||||
parse_number (olen)
|
||||
int olen;
|
||||
{
|
||||
register char *p = lexptr;
|
||||
register long n = 0;
|
||||
register int c;
|
||||
register int base = 10;
|
||||
register len = olen;
|
||||
char *err_copy;
|
||||
|
||||
extern double atof ();
|
||||
|
||||
for (c = 0; c < len; c++)
|
||||
if (p[c] == '.') {
|
||||
/* It's a float since it contains a point. */
|
||||
yyerror ("floating point numbers not allowed in #if expressions");
|
||||
return ERROR;
|
||||
|
||||
/* ****************
|
||||
yylval.dval = atof (p);
|
||||
lexptr += len;
|
||||
return FLOAT;
|
||||
**************** */
|
||||
}
|
||||
|
||||
if (len >= 3 && (!strncmp (p, "0x", 2) || !strncmp (p, "0X", 2))) {
|
||||
p += 2;
|
||||
base = 16;
|
||||
len -= 2;
|
||||
}
|
||||
else if (*p == '0')
|
||||
base = 8;
|
||||
|
||||
while (len-- > 0) {
|
||||
c = *p++;
|
||||
n *= base;
|
||||
if (c >= '0' && c <= '9')
|
||||
n += c - '0';
|
||||
else {
|
||||
if (c >= 'A' && c <= 'Z') c += 'a' - 'A';
|
||||
if (base == 16 && c >= 'a' && c <= 'f')
|
||||
n += c - 'a' + 10;
|
||||
else if (len == 0 && c == 'l')
|
||||
;
|
||||
else {
|
||||
yyerror ("Invalid number in #if expression");
|
||||
return ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lexptr = p;
|
||||
yylval.lval = n;
|
||||
return INT;
|
||||
}
|
||||
|
||||
struct token {
|
||||
char *operator;
|
||||
int token;
|
||||
};
|
||||
|
||||
#define NULL 0
|
||||
|
||||
static struct token tokentab2[] = {
|
||||
{"&&", AND},
|
||||
{"||", OR},
|
||||
{"<<", LSH},
|
||||
{">>", RSH},
|
||||
{"==", EQUAL},
|
||||
{"!=", NOTEQUAL},
|
||||
{"<=", LEQ},
|
||||
{">=", GEQ},
|
||||
{NULL, ERROR}
|
||||
};
|
||||
|
||||
/* Read one token, getting characters through lexptr. */
|
||||
|
||||
static int
|
||||
yylex ()
|
||||
{
|
||||
register int c;
|
||||
register int namelen;
|
||||
register char *tokstart;
|
||||
register struct token *toktab;
|
||||
|
||||
retry:
|
||||
|
||||
tokstart = lexptr;
|
||||
c = *tokstart;
|
||||
/* See if it is a special token of length 2. */
|
||||
for (toktab = tokentab2; toktab->operator != NULL; toktab++)
|
||||
if (c == *toktab->operator && tokstart[1] == toktab->operator[1]) {
|
||||
lexptr += 2;
|
||||
return toktab->token;
|
||||
}
|
||||
|
||||
switch (c) {
|
||||
case 0:
|
||||
return 0;
|
||||
|
||||
case ' ':
|
||||
case '\t':
|
||||
case '\n':
|
||||
lexptr++;
|
||||
goto retry;
|
||||
|
||||
case '\'':
|
||||
lexptr++;
|
||||
c = *lexptr++;
|
||||
if (c == '\\')
|
||||
c = parse_escape (&lexptr);
|
||||
yylval.lval = c;
|
||||
c = *lexptr++;
|
||||
if (c != '\'') {
|
||||
yyerror ("Invalid character constant in #if");
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
return CHAR;
|
||||
|
||||
case '/': /* possible comment */
|
||||
if (*lexptr != '*')
|
||||
return c;
|
||||
for (;;) {
|
||||
while (*lexptr != '\0') {
|
||||
if (*lexptr++ == '*' && *lexptr == '/') {
|
||||
lexptr++;
|
||||
goto retry;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* some of these chars are invalid in constant expressions;
|
||||
maybe do something about them later */
|
||||
case '+':
|
||||
case '-':
|
||||
case '*':
|
||||
case '%':
|
||||
case '|':
|
||||
case '&':
|
||||
case '^':
|
||||
case '~':
|
||||
case '!':
|
||||
case '@':
|
||||
case '<':
|
||||
case '>':
|
||||
case '(':
|
||||
case ')':
|
||||
case '[':
|
||||
case ']':
|
||||
case '.':
|
||||
case '?':
|
||||
case ':':
|
||||
case '=':
|
||||
case '{':
|
||||
case '}':
|
||||
case ',':
|
||||
lexptr++;
|
||||
return c;
|
||||
|
||||
case '"':
|
||||
yyerror ("double quoted strings not allowed in #if expressions");
|
||||
return ERROR;
|
||||
}
|
||||
if (c >= '0' && c <= '9') {
|
||||
/* It's a number */
|
||||
for (namelen = 0;
|
||||
c = tokstart[namelen], is_idchar[c] || c == '.';
|
||||
namelen++)
|
||||
;
|
||||
return parse_number (namelen);
|
||||
}
|
||||
|
||||
if (!is_idstart[c]) {
|
||||
yyerror ("Invalid token in expression");
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
/* It is a name. See how long it is. */
|
||||
|
||||
for (namelen = 0; is_idchar[tokstart[namelen]]; namelen++)
|
||||
;
|
||||
|
||||
lexptr += namelen;
|
||||
return NAME;
|
||||
}
|
||||
|
||||
|
||||
/* Parse a C escape sequence. STRING_PTR points to a variable
|
||||
containing a pointer to the string to parse. That pointer
|
||||
is updated past the characters we use. The value of the
|
||||
escape sequence is returned.
|
||||
|
||||
A negative value means the sequence \ newline was seen,
|
||||
which is supposed to be equivalent to nothing at all.
|
||||
|
||||
If \ is followed by a null character, we return a negative
|
||||
value and leave the string pointer pointing at the null character.
|
||||
|
||||
If \ is followed by 000, we return 0 and leave the string pointer
|
||||
after the zeros. A value of 0 does not mean end of string. */
|
||||
|
||||
static int
|
||||
parse_escape (string_ptr)
|
||||
char **string_ptr;
|
||||
{
|
||||
register int c = *(*string_ptr)++;
|
||||
switch (c)
|
||||
{
|
||||
case 'a':
|
||||
return '\a';
|
||||
case 'b':
|
||||
return '\b';
|
||||
case 'e':
|
||||
return 033;
|
||||
case 'f':
|
||||
return '\f';
|
||||
case 'n':
|
||||
return '\n';
|
||||
case 'r':
|
||||
return '\r';
|
||||
case 't':
|
||||
return '\t';
|
||||
case 'v':
|
||||
return '\v';
|
||||
case '\n':
|
||||
return -2;
|
||||
case 0:
|
||||
(*string_ptr)--;
|
||||
return 0;
|
||||
case '^':
|
||||
c = *(*string_ptr)++;
|
||||
if (c == '\\')
|
||||
c = parse_escape (string_ptr);
|
||||
if (c == '?')
|
||||
return 0177;
|
||||
return (c & 0200) | (c & 037);
|
||||
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
{
|
||||
register int i = c - '0';
|
||||
register int count = 0;
|
||||
while (++count < 3)
|
||||
{
|
||||
if ((c = *(*string_ptr)++) >= '0' && c <= '7')
|
||||
{
|
||||
i *= 8;
|
||||
i += c - '0';
|
||||
}
|
||||
else
|
||||
{
|
||||
(*string_ptr)--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return i;
|
||||
}
|
||||
default:
|
||||
return c;
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
yyerror (s)
|
||||
char *s;
|
||||
{
|
||||
error (s);
|
||||
longjmp (parse_return_error, 1);
|
||||
}
|
||||
|
||||
/* This page contains the entry point to this file. */
|
||||
|
||||
/* Parse STRING as an expression, and complain if this fails
|
||||
to use up all of the contents of STRING. */
|
||||
int
|
||||
parse_c_expression (string)
|
||||
char *string;
|
||||
{
|
||||
lexptr = string;
|
||||
|
||||
if (lexptr == 0 || *lexptr == 0) {
|
||||
error ("empty #if expression");
|
||||
return 0; /* don't include the #if group */
|
||||
}
|
||||
|
||||
/* if there is some sort of scanning error, just return 0 and assume
|
||||
the parsing routine has printed an error message somewhere.
|
||||
there is surely a better thing to do than this. */
|
||||
if (setjmp(parse_return_error))
|
||||
return 0;
|
||||
|
||||
if (yyparse ())
|
||||
return 0; /* actually this is never reached
|
||||
the way things stand. */
|
||||
if (*lexptr)
|
||||
error ("Junk after end of expression.");
|
||||
|
||||
return expression_value; /* set by yyparse() */
|
||||
}
|
||||
|
||||
#ifdef TEST_EXP_READER
|
||||
/* main program, for testing purposes. */
|
||||
main()
|
||||
{
|
||||
int n;
|
||||
char buf[1024];
|
||||
extern int yydebug;
|
||||
/*
|
||||
yydebug = 1;
|
||||
*/
|
||||
initialize_random_junk ();
|
||||
|
||||
for (;;) {
|
||||
printf("enter expression: ");
|
||||
n = 0;
|
||||
while ((buf[n] = getchar()) != '\n')
|
||||
n++;
|
||||
buf[n] = '\0';
|
||||
printf("parser returned %d\n", parse_c_expression(buf));
|
||||
}
|
||||
}
|
||||
|
||||
/* table to tell if char can be part of a C identifier. */
|
||||
char is_idchar[256];
|
||||
/* table to tell if char can be first char of a c identifier. */
|
||||
char is_idstart[256];
|
||||
/* table to tell if c is horizontal space. isspace() thinks that
|
||||
newline is space; this is not a good idea for this program. */
|
||||
char is_hor_space[256];
|
||||
|
||||
/*
|
||||
* initialize random junk in the hash table and maybe other places
|
||||
*/
|
||||
initialize_random_junk()
|
||||
{
|
||||
register int i;
|
||||
|
||||
/*
|
||||
* Set up is_idchar and is_idstart tables. These should be
|
||||
* faster than saying (is_alpha(c) || c == '_'), etc.
|
||||
* Must do set up these things before calling any routines tthat
|
||||
* refer to them.
|
||||
*/
|
||||
for (i = 'a'; i <= 'z'; i++) {
|
||||
++is_idchar[i - 'a' + 'A'];
|
||||
++is_idchar[i];
|
||||
++is_idstart[i - 'a' + 'A'];
|
||||
++is_idstart[i];
|
||||
}
|
||||
for (i = '0'; i <= '9'; i++)
|
||||
++is_idchar[i];
|
||||
++is_idchar['_'];
|
||||
++is_idstart['_'];
|
||||
|
||||
/* horizontal space table */
|
||||
++is_hor_space[' '];
|
||||
++is_hor_space['\t'];
|
||||
}
|
||||
|
||||
error (msg)
|
||||
{
|
||||
printf("error: %s\n", msg);
|
||||
}
|
||||
#endif
|
||||
19
emacs.com
Normal file
19
emacs.com
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
$ ! VMS command file to make the definitions needed to run the installed Emacs.
|
||||
$ ! You must edit the file names herein when you install Emacs.
|
||||
$ ! You must execute this in each session in order to run Emacs
|
||||
$ ! or else it must be executed by the system at each boot.
|
||||
$ ! To execute at boot time, specify "/SYSTEM" as the first parameter.
|
||||
$
|
||||
$ ! The following line must be changed according to where
|
||||
$ ! in the file system you install Emacs.
|
||||
$
|
||||
$ define 'p1' /translation=concealed emacs_library sys$sysdevice:[emacs.]
|
||||
$
|
||||
$ ! These should no longer be needed, because everything
|
||||
$ ! is now written to use emacs_library.
|
||||
$ ! define 'p1' emacs_lisplib emacs_library:[lisp]
|
||||
$ ! define 'p1' emacs_etc emacs_library:[etc]
|
||||
$ ! define 'p1' emacs_lock emacs_library:[lock]
|
||||
$ ! define 'p1' termcap emacs_library:[etc]termcap.dat
|
||||
$ runemacs :== $emacs_library:[000000]emacs -map emacs_library:[000000]emacs.dump
|
||||
$ emacs :== @emacs_library:[000000]kepteditor emacs
|
||||
75
etc/3B-MAXMEM
Normal file
75
etc/3B-MAXMEM
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
Date: Mon, 16 Feb 87 15:04:41 EST
|
||||
From: katinsky@gauss.rutgers.edu (David Katinsky)
|
||||
To: rms@prep.ai.mit.edu
|
||||
Subject: 3b2 procedure to raise MAXMEM
|
||||
|
||||
Below is the procedure I followed to allow enough memory for GnuEmacs to run
|
||||
on my 3b2/400. The end result of this is that a process can snarf up to 2Mb
|
||||
of memory. This can be a bit dangerous on a 2Mb machine, but I tried it and
|
||||
it worked ok.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
In the simplest case, these are the procedures to reconfigure a 3bx kernel.
|
||||
|
||||
|
||||
|
||||
1] cd /etc/master.d
|
||||
|
||||
`ls` shows the files to be:
|
||||
|
||||
README ctc* hdelog idisk ipc iuart kernel mau
|
||||
mem msg ports* prf sem shm stubs sxt
|
||||
sys xt
|
||||
|
||||
2] Edit the file which contains the parameter[s] you wish to change.
|
||||
In the following excerpt from /etc/master.d/kernel the value MAXMEM
|
||||
was raised from 256 to 1024.
|
||||
|
||||
In V.3.0 and later releases, the parameter in question is MAXUMEM
|
||||
instead of MAXMEM.
|
||||
|
||||
|
||||
*
|
||||
* The following entries form the tunable parameter table.
|
||||
*
|
||||
|
||||
|
||||
NCALL = 30
|
||||
NPROC = 60
|
||||
NTEXT = 58
|
||||
NCLIST = 188
|
||||
* maxmem is number of pages (2K) was 256 --dmk
|
||||
MAXMEM = 1024
|
||||
MAXUP = 25
|
||||
* hashbuf must be a power of 2
|
||||
NHBUF = 128
|
||||
NPBUF = 8
|
||||
|
||||
3] cd /boot
|
||||
|
||||
4] mkboot -k KERNEL
|
||||
|
||||
5] shutdown -i5 -g0 -y
|
||||
|
||||
This will take the machine down and bring it back up into firmware
|
||||
mode. When you see that the machine has reached this state, type the
|
||||
firmware password (default=mcp). The machine will ask for the name of
|
||||
a program to execute. At this prompt enter /etc/system . The machine
|
||||
should start to boot and display its configuration data.
|
||||
|
||||
|
||||
|
||||
8701271222 dmk
|
||||
|
||||
[katinsky@topaz.rutgers.edu]
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
I do not feel that having the default firmware password is a
|
||||
problem... but if you wish to edit it out, feel free.
|
||||
|
||||
dmk
|
||||
|
||||
|
||||
218
etc/AIX.DUMP
Normal file
218
etc/AIX.DUMP
Normal file
|
|
@ -0,0 +1,218 @@
|
|||
The following text was written by someone at IBM to describe an older
|
||||
version of the code for dumping on AIX.
|
||||
|
||||
I (rms) couldn't understand the code, and I can't fully understand
|
||||
this text either. I rewrote the code to use the same basic
|
||||
principles, as far as I understood them, but more cleanly. This
|
||||
rewritten code does not always work. In fact, the basic method
|
||||
seems to be intrinsically flawed.
|
||||
|
||||
Since then, someone else implemented a different way of dumping on
|
||||
the RS/6000, which does seem to work. None of the following
|
||||
applies to the way Emacs now dumps on the 6000. However, the
|
||||
current method fails to use shared libraries. Anyone who might be
|
||||
interested in trying to resurrect the previous method might still
|
||||
find the following information useful.
|
||||
|
||||
|
||||
It seems that the IBM dumping code was simply set up to detect when
|
||||
the dumped data cannot be used, and in that case to act approximately
|
||||
as if CANNOT_DUMP had been defined all along. (This is buried in
|
||||
paragraph 1.) It seems simpler just to define CANNOT_DUMP, since
|
||||
Emacs is not set up to decide at run time whether there is dumping or
|
||||
not, and doing so correctly would be a lot of work.
|
||||
|
||||
Note that much of the other information, such as the name and format
|
||||
of the dumped data file, has been changed.
|
||||
|
||||
|
||||
--rms
|
||||
|
||||
|
||||
|
||||
A different approach has been taken to implement the
|
||||
"dump/load" feature of GNU Emacs for AIX 3.1. Traditionally the
|
||||
unexec function creates a new a.out executable file which contains
|
||||
preloaded Lisp code. Executing the new a.out file (normally called
|
||||
xemacs) provides rapid startup since the standard suite of Lisp code
|
||||
is preloaded as part of the executable file.
|
||||
|
||||
AIX 3.1 architecture precludes the use of this technique
|
||||
because the dynamic loader cannot guarantee a fixed starting location
|
||||
for the process data section. The loader loads all shared library
|
||||
data BEFORE process data. When a shared library changes its data
|
||||
space, the process initial data section address (_data) will change
|
||||
and all global process variables are automatically relocated to new
|
||||
addresses. This invalidates the "dumped" Emacs executable which has
|
||||
data addresses which are not relocatable and now corrupt. Emacs would
|
||||
fail to execute until rebuilt with the new libraries.
|
||||
|
||||
To circumvent the dynamic loader feature of AIX 3.1, the dump process
|
||||
has been modified as follows:
|
||||
|
||||
1) A new executable file is NOT created. Instead, both pure and
|
||||
impure data are saved by the dump function and automatically
|
||||
reloaded during process initialization. If any of the saved data
|
||||
is unavailable or invalid, loadup.el will be automatically loaded.
|
||||
|
||||
2) Pure data is defined as a shared memory segment and attached
|
||||
automatically as read-only data during initialization. This
|
||||
allows the pure data to be a shared resource amoung all Emacs
|
||||
processes. The shared memory segment size is PURESIZE bytes.
|
||||
If the shared memory segment is unavailable or invalid, a new
|
||||
shared memory segment is created and the impure data save file
|
||||
is destroyed, forcing loadup.el to be reloaded.
|
||||
|
||||
3) The ipc key used to create and access Emacs shared memory is
|
||||
SHMKEY and can be overridden by the environment symbol EMACSSHMKEY.
|
||||
Only one ipc key is allowed per system. The environment symbol
|
||||
is provided in case the default ipc key has already been used.
|
||||
|
||||
4) Impure data is written to the ../bin/.emacs.data file by the
|
||||
dump function. This file contains the process' impure data
|
||||
at the moment of load completion. During Emacs initialization,
|
||||
the process' data section is expanded and overwritten
|
||||
with the .emacs.data file contents.
|
||||
|
||||
The following are software notes concerning the GNU Emacs dump function under AIX 3.1:
|
||||
|
||||
1) All of the new dump/load code is activated by the #ifdef SHMKEY
|
||||
conditional.
|
||||
|
||||
2) The automatic loading of loadup.el does NOT cause the dump function
|
||||
to be performed. Therefore once the pure/impure data is discarded,
|
||||
someone must remake Emacs to create the saved data files. This
|
||||
should only be necessary when Emacs is first installed or whenever
|
||||
AIX is upgraded.
|
||||
|
||||
3) Emacs will exit with an error if executed in a non-X environment
|
||||
and the dump function was performed within a X window. Therefore
|
||||
the dump function should always be performed in a non-X
|
||||
environment unless the X environment will ALWAYS be available.
|
||||
|
||||
4) Emacs only maintains the lower 24 bits of any data address. The
|
||||
remaining upper 8 bits are reset by the XPNTR macro whenever any
|
||||
Lisp object is referenced. This poses a serious problem because
|
||||
pure data is stored in segment 3 (shared memory) and impure data
|
||||
is stored in segment 2 (data). To reset the upper 8 address bits
|
||||
correctly, XPNTR must guess as to which type of data is represented
|
||||
by the lower 24 address bits. The technique chosen is based upon
|
||||
the fact that pure data offsets in segment 3 range from
|
||||
0 -> PURESIZE-1, which are relatively small offsets. Impure data
|
||||
offsets in segment 2 are relatively large (> 0x40000) because they
|
||||
must follow all shared library data. Therefore XPNTR adds segment
|
||||
3 to each data offset which is small (below PURESIZE) and adds
|
||||
segment 2 to all other offsets. This algorithm will remain valid
|
||||
as long as a) pure data size remains relatively small and b) process
|
||||
data is loaded after shared library data.
|
||||
|
||||
To eliminate this guessing game, Emacs must preserve the 32-bit
|
||||
address and add additional data object overhead for the object type
|
||||
and garbage collection mark bit.
|
||||
|
||||
5) The data section written to .emacs.data is divided into three
|
||||
areas as shown below. The file header contains four character
|
||||
pointers which are used during automatic data loading. The file's
|
||||
contents will only be used if the first three addresses match
|
||||
their counterparts in the current process. The fourth address is
|
||||
the new data segment address required to hold all of the preloaded
|
||||
data.
|
||||
|
||||
|
||||
.emacs.data file format
|
||||
|
||||
+---------------------------------------+ \
|
||||
| address of _data | \
|
||||
+---------------------------------------+ \
|
||||
| address of _end | \
|
||||
+---------------------------------------+ file header
|
||||
| address of initial sbrk(0) | /
|
||||
+---------------------------------------+ /
|
||||
| address of final sbrk(0) | /
|
||||
+---------------------------------------+ /
|
||||
\ \
|
||||
\ \
|
||||
all data to be loaded from
|
||||
_data to _end
|
||||
\ \
|
||||
\ \
|
||||
+---------------------------------------+
|
||||
\ \
|
||||
\ \
|
||||
all data to be loaded from
|
||||
initial to final sbrk(0)
|
||||
\ \
|
||||
+---------------------------------------+
|
||||
|
||||
|
||||
Sections two and three contain the preloaded data which is
|
||||
resotred at locations _data and initial sbrk(0) respectively.
|
||||
|
||||
The reason two separate sections are needed is that process
|
||||
initialization allocates data (via malloc) prior to main()
|
||||
being called. Therefore _end is several kbytes lower than
|
||||
the address returned by an initial sbrk(0). This creates a
|
||||
hole in the process data space and malloc will abort if this
|
||||
region is overwritten during the load function.
|
||||
|
||||
One further complication with the malloc'd space is that it
|
||||
is partially empty and must be "consumed" so that data space
|
||||
malloc'd in the future is not assigned to this region. The malloc
|
||||
function distributed with Emacs anticipates this problem but the
|
||||
AIX 3.1 version does not. Therefore, repeated malloc calls are
|
||||
needed to exhaust this initial malloc space. How do you know
|
||||
when malloc has exhausted its free memroy? You don't! So the
|
||||
code must repeatedly call malloc for each buffer size and
|
||||
detect when a new memory page has been allocated. Once the new
|
||||
memory page is allocated, you can calculate the number of free
|
||||
buffers in that page and request exactly that many more. Future
|
||||
malloc requests will now be added at the top of a new memory page.
|
||||
|
||||
One final point - the initial sbrk(0) is the value of sbrk(0)
|
||||
after all of the above malloc hacking has been performed.
|
||||
|
||||
|
||||
The following Emacs dump/load issues need to be addressed:
|
||||
|
||||
1) Loadup.el exits with an error message because the xemacs and
|
||||
emacs-xxx files are not created during the dump function.
|
||||
|
||||
Loadup.el should be changed to check for the new .emacs.data
|
||||
file.
|
||||
|
||||
2) Dump will only support one .emacs.data file for the entire
|
||||
system. This precludes the ability to allow each user to
|
||||
define his/her own "dumped" Emacs.
|
||||
|
||||
Add an environment symbol to override the default .emacs.data
|
||||
path.
|
||||
|
||||
3) An error message "error in init file" is displayed out of
|
||||
startup.el when the dumped Emacs is invoked by a non-root user.
|
||||
Although all of the preloaded Lisp code is present, the important
|
||||
purify-flag has not been set back to Qnil - precluding the
|
||||
loading of any further Lisp code until the flag is manually
|
||||
reset.
|
||||
|
||||
The problem appears to be an access violation which will go
|
||||
away if the read-write access modes to all of the files are
|
||||
changed to rw-.
|
||||
|
||||
4) In general, all file access modes should be changed from
|
||||
rw-r--r-- to rw-rw-rw-. They are currently setup to match
|
||||
standard AIX access modes.
|
||||
|
||||
5) The dump function is not invoked when the automatic load of
|
||||
loadup.el is performed.
|
||||
|
||||
Perhaps the command arguments array should be expanded with
|
||||
"dump" added to force an automatic dump.
|
||||
|
||||
6) The automatic initialization function alloc_shm will delete
|
||||
the shared memory segment and .emacs.data file if the "dump"
|
||||
command argument is found in ANY argument position. The
|
||||
dump function will only take place in loadup.el if "dump"
|
||||
is the third or fourth command argument.
|
||||
|
||||
Change alloc_shm to live by loadup.el rules.
|
||||
|
||||
39
etc/APOLLO
Normal file
39
etc/APOLLO
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
The Apollo has a bizarre operating system which does not permit
|
||||
Emacs to be dumped with preloaded pure Lisp code. Therefore, each
|
||||
time you start Emacs on this system, the standard Lisp code is loaded
|
||||
into it. Expect it to take a long time. You can prevent loading of
|
||||
the standard Lisp code by specifying the -nl switch. It must
|
||||
come at the beginning of the command line; only the -t and -batch
|
||||
switches may come before it.
|
||||
|
||||
You must use m-apollo.h in the config.h file, together with
|
||||
s-bsd4.2.h.
|
||||
|
||||
There is one remaining problem on the Apollo. You must replace
|
||||
the CPP line in src/Makefile with "CPP = /usr/lib/cpp".
|
||||
The C preprocessor lives there rather than in /lib/cpp because the
|
||||
Aegis OS uses the /lib directory as the repository for shared libraries.
|
||||
|
||||
|
||||
Here is a design for a method of dumping and reloading the relevant
|
||||
necessary impure areas of Emacs.
|
||||
|
||||
On dumping, you need to dump only the array `pure' plus the
|
||||
locations that contain values of forwarded Lisp variables or that are
|
||||
protected for garbage collection. The former can be found by a
|
||||
garbage- collection-like technique, and the latter are in the
|
||||
staticprolist vector (see alloc.c for both things).
|
||||
|
||||
Reloading would work in an Emacs that has just been started; except
|
||||
when a switch is specified to inhibit this, it would read the dump
|
||||
file and set all the appropriate locations. The data loaded must be
|
||||
relocated, but that's not hard. Those locations that are of type
|
||||
Lisp_Object can be found by a technique like garbage-collection, and
|
||||
those of them that point to storage can be relocated. The other data
|
||||
read from the file will not need to be relocated.
|
||||
|
||||
The switch to inhibit loading the data base would be used when it
|
||||
is time to dump a new data base.
|
||||
|
||||
This would take a few seconds, which is much faster than loading
|
||||
the Lisp code of Emacs from scratch.
|
||||
57
etc/APPLE
Normal file
57
etc/APPLE
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
|
||||
@unnumbered Special Report: Apple's New Look and Feel
|
||||
|
||||
You might have read about the new look-and-feel copyright lawsuit,
|
||||
Apple vs. Hewlett Packard and Microsoft. Apple claims the power to
|
||||
stop people from writing any program that works even vaguely like a
|
||||
Macintosh. If they and other look-and-feel plaintiffs triumph, they
|
||||
will use this new power over the public to put an end to free software
|
||||
that could substitute for commercial software.
|
||||
|
||||
In the weeks after the suit was filed, USENET reverberated with
|
||||
condemnation for Apple. GNU supporters Richard Stallman, John Gilmore, and
|
||||
Paul Rubin decided to take action against Apple's no-longer-deserved
|
||||
reputation as a force for progress. Apple's reputation comes from having
|
||||
made better computers; but now, Apple is working to make all non-Apple
|
||||
computers worse. If this deprives the public of the future work of many
|
||||
companies, the harm done would be many times the good that any one company
|
||||
does. Our hope was that if the user community realizes how destructive
|
||||
Apple's present actions are, Apple would lose customers and have more
|
||||
trouble finding employees.
|
||||
|
||||
Our method of action was to print 5000 buttons that say ``Keep Your Lawyers
|
||||
Off My Computer'' and hand them out at the West Coast Computer Faire. The
|
||||
center of the button shows the rainbow-apple logo with a Gigeresque mouth
|
||||
full of ferocious teeth. The picture was drawn by Etienne Suvasa, who also
|
||||
drew the cover for the GNU Emacs manual. We call the picture ``Apple's New
|
||||
Look and Feel''.
|
||||
|
||||
We gave out nearly 4000 buttons at the show (saving the rest for
|
||||
afterwards). The result was a great success: the extent of anger at Apple
|
||||
was apparent to everyone at the show. Many of the invited speakers at the
|
||||
show wore our buttons, spoke about them, or even waved them from the
|
||||
podium. The press noticed this: at least one Macintosh user's magazine
|
||||
carried a photo of the button afterwards.
|
||||
|
||||
Some of you may be considering using, buying, or recommending Macintoshes;
|
||||
you might even be writing programs for them or thinking about it. Please
|
||||
think twice and look for an alternative. Doing those things means more
|
||||
success for Apple, and this could encourage Apple to persist in its
|
||||
aggression. It also encourages other companies to try similar
|
||||
obstructionism.
|
||||
|
||||
[It is because of this boycott that we don't include support for Macintosh
|
||||
Unix in GNU software.]
|
||||
|
||||
You might think that your current project ``needs'' a Macintosh now. If
|
||||
you find yourself thinking this way, consider the far future. You probably
|
||||
plan to be alive a year or two from now, and working on some other project.
|
||||
You will want to get good computers for that, too. But an Apple monopoly
|
||||
could easily make the price of such computers at that time several times
|
||||
what it would otherwise be. Your decision to use some other kind of
|
||||
machine, or to defer your purchases now, might make sure that the machines
|
||||
your next project needs are affordable when you need them.
|
||||
|
||||
Newspapers report that Macintosh clones will be available soon. If
|
||||
you must buy a Macintosh-like machine, buy a clone. Don't feed the
|
||||
lawyers!
|
||||
127
etc/BABYL
Normal file
127
etc/BABYL
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
>From rlk@think.COM (Robert Krawitz) Mon Nov 30 10:56:46 1987
|
||||
|
||||
Let's see if I remember my BNF for babyl files; this corresponds to
|
||||
version 5:
|
||||
|
||||
|
||||
File := <header>
|
||||
<message>* ; Some say there must be at least one message.
|
||||
|
||||
Header := Babyl Options:\n
|
||||
<header-option>*
|
||||
|^_
|
||||
|
||||
Header-option := <header-token> ; See note [5]
|
||||
: *
|
||||
<value>
|
||||
|
||||
header-token := [^\000-\017:\177-\377]* ; Not these characters [tab is OK]
|
||||
header-value := ditto, if a list, each element separated by a comma and
|
||||
a space.
|
||||
|
||||
message := \^L\n
|
||||
[01], ; See note [1] below
|
||||
( <attribute>,)* ; Note space before and comma after token
|
||||
,
|
||||
( <label>,)* ; ditto, see note [4] below
|
||||
\n
|
||||
<header>* ; See note [1] and [2] below
|
||||
*** EOOH ***\n
|
||||
<header>* ; See note [2] below
|
||||
\n
|
||||
<body>
|
||||
\^_
|
||||
|
||||
attribute := unseen |
|
||||
last | ; Not all programs implement this. It
|
||||
; generally only gets used internally, and
|
||||
; isn't written out to a file.
|
||||
>last | ; Babyl uses this for a deleted message at the
|
||||
; end. It shouldn't be written out to a file.
|
||||
deleted |
|
||||
recent | ; Not all programs implement this. It refers
|
||||
; to a message in the last batch of new mail;
|
||||
; thus it probably shouldn't be written out to
|
||||
; a file during a normal save although it
|
||||
; makes sense to write it out in an emergency save.
|
||||
filed |
|
||||
answered |
|
||||
forwarded |
|
||||
redistributed |
|
||||
badheader | ; Not all programs implement this
|
||||
filed ; Not all programs implement this
|
||||
|
||||
label := [^\000-\020,\177-\377]* ; No control chars,
|
||||
; whitespace, commas, rubout, or high bit set
|
||||
|
||||
header := [^\000-\020:\177-\377]*:
|
||||
<header-line>
|
||||
<header-line>*
|
||||
|
||||
header-line := [ \t][^\n]*\n ; Continuation lines must be indented
|
||||
|
||||
body := (.*\n)* ; See note [3] below
|
||||
|
||||
|
||||
[1] A zero means that the headers have not been cleaned up,
|
||||
reprocessed, toggled, or whatever. In this case there should be no
|
||||
headers before the EOOH line. A one means that the headers have been
|
||||
reprocessed. In this case, the original headers will typically be
|
||||
before the EOOH line and the reformatted or whatever subset of headers
|
||||
that the user should see will be after it. Note that in this case
|
||||
it's permissible to garbage collect all headers before the EOOH line.
|
||||
No one's defined what it means to garbage collect SOME of the headers
|
||||
before this line, or what that means.
|
||||
|
||||
[2] It's apparently permissible to add headers of the program's own
|
||||
choosing before the EOOH line. Or at least, Rmail does so (it caches
|
||||
a summary line) and nothing seems to object. There's no particular
|
||||
guarantee that something else won't step all over it, though. Headers
|
||||
after the EOOH line can be reformatted as the program wishes (e. g.
|
||||
indent the header lines to the same distance, canonicalize machine
|
||||
names) for display to the user. It's generally best for programs that
|
||||
read a babyl file to look at the headers before the EOOH line if they
|
||||
exist, since these should be untouched by the user. Remember, the
|
||||
user can edit anything after the EOOH line.
|
||||
|
||||
[3] A \^_ at the beginning of a line should be quoted somehow. The
|
||||
normal way seems to be to decompose it into 2 characters: a ^ and a _.
|
||||
Strictly speaking, it doesn't always have to be, since the following
|
||||
text would have to be parsable as a message, but some programs don't
|
||||
try to use that much intelligence. Oh well.
|
||||
|
||||
[4] Labels, or keywords as they are often called, are generally
|
||||
defined by the user, although it's not entirely impermissible for a
|
||||
program to use these for its own purpose (e. g. a keyword named
|
||||
RemindMe might be used to automatically find important messages).
|
||||
Some people also want these used to cache other state implemented by
|
||||
certain programs; this use is undefined. Note that all keywords used
|
||||
should be inserted in a header-option named Keywords:. Can a keyword
|
||||
have the same name as an attribute? Who knows? It's probably not a
|
||||
good idea, since some programs use the concept of <labels> =
|
||||
<keywords> + <attributes>. Sigh.
|
||||
|
||||
[5] Some tokens are standardized in meaning. Common tokens are Mail
|
||||
inboxes, babyl file version number, which is currently 5, labels used
|
||||
in messages, window format for Zmail, anything else you want to be
|
||||
associated with a file. Be warned that labels should be a complete
|
||||
list of all user-defined keywords used in the file, so if you add a
|
||||
new label to a message, you should add it to this list. You should
|
||||
also have a Babyl version: 5 file attribute (look in a babyl file for
|
||||
details).
|
||||
|
||||
Anyone know if there actually is a "formal" standard? This was done
|
||||
quickly from memory and a Zmail manual, but there are at least three
|
||||
programs around that use Babyl files (zmail, babyl, and emacs/rmail)
|
||||
and someone at SIPB was going to write a command-based mail reader
|
||||
similar to Unix Mail but operating on babyl files, and someone (of
|
||||
course not me :-)) should probably write xbabyl :-)
|
||||
|
||||
References:
|
||||
|
||||
ITS/Tops-20 INFO file on babyl (who wrote it? ECC? GZ?)
|
||||
|
||||
Zmail manual (the MIT version was written by RMS; ECC wrote the
|
||||
section on Babyl file format)
|
||||
--
|
||||
|
||||
159
etc/CCADIFF
Normal file
159
etc/CCADIFF
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
Differences between GNU Emacs and CCA Emacs.
|
||||
Copyright (c) 1985 Richard M. Stallman
|
||||
|
||||
Permission is granted to anyone to make or distribute verbatim copies
|
||||
of this document as received, in any medium, provided that the
|
||||
copyright notice and permission notice are preserved,
|
||||
and that the distributor grants the recipient permission
|
||||
for further redistribution as permitted by this notice.
|
||||
|
||||
* GNU Emacs Lisp vs CCA Elisp.
|
||||
|
||||
GNU Emacs Lisp does not have a distinction between Lisp functions
|
||||
and Emacs functions, or between Lisp variables and Emacs variables.
|
||||
The Lisp and the editor are integrated. A Lisp function defined
|
||||
with defun is callable as an editor command if you put an
|
||||
interactive calling spec in it; for example,
|
||||
(defun forward-character (n)
|
||||
(interactive "p")
|
||||
(goto-char (+ (point) n)))
|
||||
defines a function of one argument that moves point forward by
|
||||
a specified number of characters. Programs could call this function,
|
||||
as in (forward-character 6), or it could be assigned to a key,
|
||||
in which case the "p" says to pass the prefix numeric arg as
|
||||
the function's argument. As a result of this feature, you often
|
||||
need not have two different functions, one to be called by programs
|
||||
and another to read arguments from the user conveniently; the same
|
||||
function can do both.
|
||||
|
||||
CCA Elisp tries to be a subset of Common Lisp and tries to
|
||||
have as many Common Lisp functions as possible (though it is still
|
||||
only a small fraction of full Common Lisp). GNU Emacs Lisp
|
||||
is somewhat similar to Common Lisp just because of my Maclisp
|
||||
and Lisp Machine background, but it has several distinct incompatibilities
|
||||
in both syntax and semantics. Also, I have not attempted to
|
||||
provide many Common Lisp functions that you could write in Lisp,
|
||||
or others that provide no new capability in the circumstances.
|
||||
|
||||
GNU Emacs Lisp does not have packages, readtables, or character objects
|
||||
(it uses integers to represent characters).
|
||||
|
||||
On the other hand, windows, buffers, relocatable markers and processes
|
||||
are first class objects in GNU Emacs Lisp. You can get information about them
|
||||
and do things to them in a Lispy fashion. Not so in CCA Emacs.
|
||||
|
||||
In GNU Emacs Lisp, you cannot open a file and read or write characters
|
||||
or Lisp objects from it. This feature is painful to support, and
|
||||
is not fundamentally necessary in an Emacs, because instead you
|
||||
can read the file into a buffer, read or write characters or
|
||||
Lisp objects in the buffer, and then write the buffer into the file.
|
||||
|
||||
On the other hand, GNU Emacs Lisp does allow you to rename, delete, add
|
||||
names to, and copy files; also to find out whether a file is a
|
||||
directory, whether it is a symbolic link and to what name, whether
|
||||
you can read it or write it, find out its directory component,
|
||||
expand a relative pathname, find completions of a file name, etc.,
|
||||
which you cannot do in CCA Elisp.
|
||||
|
||||
GNU Emacs Lisp uses dynamic scope exclusively. This enables you to
|
||||
bind variables which affect the execution of the editor, such as
|
||||
indent-tabs-mode.
|
||||
|
||||
GNU Emacs Lisp code is normally compiled into byte code. Most of the
|
||||
standard editing commands are written in Lisp, and many are
|
||||
dumped, pure, in the Emacs that users normally run.
|
||||
|
||||
GNU Emacs allows you to interrupt a runaway Lisp program with
|
||||
Control-g.
|
||||
|
||||
* GNU Emacs Editing Advantages
|
||||
|
||||
GNU Emacs is faster for many things, especially insertion of text
|
||||
and file I/O.
|
||||
|
||||
GNU Emacs allows you to undo more than just the last command
|
||||
with the undo command (C-x u, or C-_). You can undo quite a ways back.
|
||||
Undo information is separate for each buffer; changes in one buffer
|
||||
do not affect your ability to undo in another buffer.
|
||||
|
||||
GNU Emacs commands that want to display some output do so by putting
|
||||
it in a buffer and displaying that buffer in a window. This
|
||||
technique comes from Gosling Emacs. It has both advantages and
|
||||
disadvantages when compared with the technique, copied by CCA Emacs
|
||||
from my original Emacs which inherited it from TECO, of having "type
|
||||
out" which appears on top of the text in the current window but
|
||||
disappears automatically at the next input character.
|
||||
|
||||
GNU Emacs does not use the concept of "subsystems". Instead, it uses
|
||||
highly specialized major modes. For example, dired in GNU Emacs has
|
||||
the same commands as dired does in other versions of Emacs, give or
|
||||
take a few, but it is a major mode, not a subsystem. The advantage
|
||||
of this is that you do not have to "exit" from dired and lose the
|
||||
state of dired in order to edit files again. You can simply switch
|
||||
to another buffer, and switch back to the dired buffer later. You
|
||||
can also have several dired buffers, looking at different directories.
|
||||
|
||||
It is still possible to write a subsystem--your own command loop--
|
||||
in GNU Emacs, but it is not recommended, since writing a major mode
|
||||
for a special buffer is better.
|
||||
|
||||
Recursive edits are also rarely used, for the same reason: it is better
|
||||
to make a new buffer and put it in a special major mode. Sending
|
||||
mail is done this way.
|
||||
|
||||
GNU Emacs expects everyone to use find-file (C-x C-f) for reading
|
||||
in files; its C-x C-v command kills the current buffer and then finds
|
||||
the specified file.
|
||||
|
||||
As a result, users do not need to think about the complexities
|
||||
of subsystems, recursive edits, and various ways to read in files
|
||||
or what to do if a buffer contains changes to some other file.
|
||||
|
||||
GNU Emacs uses its own format of tag table, made by the "etags"
|
||||
program. This format makes finding a tag much faster.
|
||||
|
||||
Dissociated Press is supported.
|
||||
|
||||
|
||||
* GNU Emacs Editing Disadvantages.
|
||||
|
||||
GNU Emacs does not display the location of the mark.
|
||||
|
||||
GNU Emacs does not have a concept of numbers of buffers,
|
||||
or a permanent ordering of buffers, or searching through multiple
|
||||
buffers. The tags-search command provides a way to search
|
||||
through several buffers automatically.
|
||||
|
||||
GNU Emacs does not provide commands to visit files without
|
||||
setting the buffer's default directory. Users can write such
|
||||
commands in Lisp by copying the code of the standard file
|
||||
visiting commands and modifying them.
|
||||
|
||||
GNU Emacs does not support "plus options" in the command
|
||||
arguments or in buffer-selection commands, except for line numbers.
|
||||
|
||||
GNU Emacs does not support encryption. Down with security!
|
||||
|
||||
GNU Emacs does not support replaying keystroke files,
|
||||
and does not normally write keystroke files.
|
||||
|
||||
|
||||
* Neutral Differences
|
||||
|
||||
GNU Emacs uses TAB, not ESC, to complete file names, buffer names,
|
||||
command names, etc.
|
||||
|
||||
GNU Emacs uses ESC to terminate searches, instead of
|
||||
the C-d uses by CCA Emacs. (Actually, this character is controlled
|
||||
by a parameter in GNU Emacs.) C-M-s in GNU Emacs is an interactive
|
||||
regular expression search, but you can get to a noninteractive
|
||||
one by typing ESC right after the C-M-s.
|
||||
|
||||
In GNU Emacs, C-x s asks, for each modified file buffer, whether
|
||||
to save it.
|
||||
|
||||
GNU Emacs indicates line continuation with "\" and line
|
||||
truncation (at either margin) with "$".
|
||||
|
||||
The command to resume a tags-search or tags-query-replace in
|
||||
GNU Emacs is Meta-Comma.
|
||||
54
etc/CHARACTERS
Normal file
54
etc/CHARACTERS
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
Ideas for extending GNU Emacs to deal with arbitrary character sets.
|
||||
|
||||
I would like GNU Emacs to be extended to handle all the world's alphabets
|
||||
and word signs. I don't expect to have time to do such a thing in the next
|
||||
few years, so here are my ideas on the best way to do it.
|
||||
|
||||
* Each graphic is represented by a sequence of ordinary 8-bit characters.
|
||||
|
||||
* All the characters that make up such a sequence have codes >= 0200.
|
||||
|
||||
* The first character of such a sequence is between 0200 and 0237.
|
||||
|
||||
* The remaining characters of such a sequence are all 0240 or higher.
|
||||
|
||||
* The first character of the sequence determines the number of characters
|
||||
in the sequence. Thus, 0200...0207 could start two-character sequences,
|
||||
0210...0227 could start three-character sequences, and 0230 could start
|
||||
four-character sequences. (Codes 0231...0237 would be reserved.)
|
||||
|
||||
* Several common alphabets, and some mathematical symbols, would get
|
||||
two-character sequences. (Probably Greek, Russian, Hebrew(?), Arabic(?),
|
||||
Korean, and Japanese kana). The remaining alphabets, and some versions of
|
||||
Chinese, would get three-character sequences. Other sets of Chinese
|
||||
characters would get four-character sequences.
|
||||
|
||||
Each country that uses Chinese characters has its own standard character
|
||||
set, and it is not easy to correlate them to avoid overlap. So there may
|
||||
need to be several sets of Chinese characters. That is why they need so
|
||||
much code space.
|
||||
|
||||
True support for Hebrew and Arabic requires dealing with the problem of
|
||||
writing direction for mixed text; I don't know what to do for that.
|
||||
|
||||
* The functions that use syntax table would determine the
|
||||
syntax of a sequence from its first character.
|
||||
|
||||
* Functions in indent.c for computing widths and columns would
|
||||
determine the width of a sequence from its first character.
|
||||
So would display routines.
|
||||
|
||||
* Only a few other editing routines would need any change. In
|
||||
particular, searching and regexp matching might not need any change.
|
||||
|
||||
* Most of the work required would be in redisplay. The only case that
|
||||
needs to be supported is with X windows, since ordinary terminals
|
||||
can't display all these characters anyway.
|
||||
|
||||
* There might need to be code to translate files from this format
|
||||
to whatever format is typically stored on disk.
|
||||
|
||||
|
||||
I would be very unhappy with half-measures, such as support for
|
||||
Japanese only.
|
||||
|
||||
157
etc/COOKIES
Normal file
157
etc/COOKIES
Normal file
|
|
@ -0,0 +1,157 @@
|
|||
[Someone sent this in from California, and we decided to extend
|
||||
our campaign against information hoarding to recipes as well
|
||||
as software. (Recipes are the closest thing, not involving computers,
|
||||
to software.)
|
||||
|
||||
The story appears to be a myth, according to the Chicago Tribune,
|
||||
which says that Mrs Fields Cookies hoards the information completely.
|
||||
Therefore, this recipe can be thought of as a compatible replacement.
|
||||
We have reports that the cookies it makes are pretty good.]
|
||||
|
||||
Someone at PG&E called the Mrs. Fields Cookie office
|
||||
and requested the recipe for her cookies. They asked
|
||||
her for her charge card number, and she gave it to them
|
||||
thinking the cost would be $15 to $25. It turned out
|
||||
to be $200!
|
||||
|
||||
Therefore, this person is giving the recipe to anyone
|
||||
and everyone she knows (and doesn't know) so that
|
||||
someone can get use of her $200. Anyway, just keep
|
||||
passing it on.
|
||||
|
||||
Cream together: 2 cups butter
|
||||
2 cups sugar
|
||||
2 cups brown sugar
|
||||
|
||||
Add: 4 eggs
|
||||
2 tsp. vanilla
|
||||
|
||||
Mis together in
|
||||
separate bowl: 4 cups flour
|
||||
5 cups oatmeal (put small
|
||||
amounts of oatmeal in blender until it turns to
|
||||
powder. Measure out 5 cups of oatmeal and only
|
||||
"powderize" that, NOT 5 cups "powderized" oatmeal)
|
||||
|
||||
1 tsp salt
|
||||
2 tsp baking powder
|
||||
2 tsp baking soda
|
||||
|
||||
Mix: All of the above
|
||||
|
||||
Add: 24 oz. bag of chocolate chips and
|
||||
1 finely grated 8 oz Hershey bar (plain)
|
||||
|
||||
Add: 3 cups chopped nuts (any kind)
|
||||
|
||||
Bake on greased cookie sheet (make golf ball sized balls) and
|
||||
bake about two inches apart. Bake at 350 degrees for 8 - 10
|
||||
minutes. DO NOT OVERBAKE. Makes 112.
|
||||
|
||||
From: ucdavis!lll-lcc!hplabs!parcvax!bane@ucbvax.berkeley.edu (John R. Bane)
|
||||
Subject: Re: free cookie foundation?
|
||||
|
||||
Hi! I "stole" your very expensive cookie recipe off the net. If you
|
||||
want to send me your SnailMail address, I'll be glad to send you a
|
||||
dollar (I would like to suggest this to the net, but I think there is
|
||||
some netiquette rule against asking for money - or is that only money
|
||||
for oneself?) to help defray the cost (it's not much, but if EVERYone
|
||||
who took the recipe sent you a dollar, it would help).
|
||||
|
||||
Here also is another cookie recipe which I'm very fond of.
|
||||
|
||||
Makes 6-8 dozen
|
||||
Bake at 375 degrees for ~10 min.
|
||||
|
||||
Cream together:
|
||||
|
||||
1 cup shortening (I use Weight Watcher's Reduced Calorie Margarine!)
|
||||
1/4 cup peanut butter (I recommend the non-sugared kind)
|
||||
1/2 cup sugar
|
||||
1/2 cup brown sugar
|
||||
2 eggs
|
||||
1 teaspoon vanilla
|
||||
|
||||
Add:
|
||||
|
||||
1/2 cup flour
|
||||
1 teaspoon soda
|
||||
1/2 teaspoon salt
|
||||
2 cups rolled oats (I use the 5-min variety)
|
||||
1-2 cups chocolate chips (I use 2 cups semi-sweet - ummmm!)
|
||||
1 cup nuts (I use pecan pieces - don't get them crushed, or the extra
|
||||
oil will make greasy cookies)
|
||||
1 cup shredded or flaked coconut
|
||||
|
||||
(The nuts were listed as optional and I added the coconut myself, but
|
||||
I really love them there! You could also add things like m&m's, or
|
||||
raisons (I don't care for raisons in cookies, but you might). I've
|
||||
always wanted to try banana chips.)
|
||||
|
||||
Mix well. Drop by teaspoonfuls on greased cookie sheet (I use pam).
|
||||
Bake at 375 degrees for approx. 10 min.
|
||||
|
||||
My aunt found this recipe in an Amish book called something like
|
||||
"Eating Well When The Whole World Is Starving," and although I thought
|
||||
a cookie recipe was a bit odd for a book like that, they are about the
|
||||
healthiest a cookie is ever likely to get.
|
||||
|
||||
They are also very easy to make (no blending, sifting, rolling, etc.)
|
||||
and extrememly delicious. I get rave reviews and recipe requests whenever
|
||||
I make them.
|
||||
|
||||
- rene
|
||||
|
||||
Chocolate Chip Cookies - Glamorous, crunchy, rich with chocolate bits & nuts.
|
||||
|
||||
Also known as "Toll House" Cookies ... from Kenneth and Ruth Wakefield's
|
||||
charming New England Toll House on the outskirts of Whitman, Massachusetts.
|
||||
These cookies were first introduced to American homemakers in 1939 through
|
||||
our series of radio talks on "Famous Foods From Famous Eating Places."
|
||||
|
||||
Mix Thoroughly :
|
||||
2/3 cup soft shortening ( part butter )
|
||||
1/2 cup granulated sugar
|
||||
1/2 cup brown sugar ( packed )
|
||||
1 egg
|
||||
1 tsp vanilla
|
||||
|
||||
Sift together and stir in :
|
||||
1-1/2 cups sifted flour (*)
|
||||
1/2 tsp soda
|
||||
1/2 tsp salt
|
||||
|
||||
Stir in :
|
||||
1/2 cup cut-up nuts
|
||||
6 oz package of semi-sweet chocolate pieces ( about 1-1/4 cups )
|
||||
|
||||
|
||||
(*) for a softer, more rounded cookie, use 1-3/4 cups sifted flour.
|
||||
|
||||
|
||||
Drop rounded teaspoonfuls about 2" apart on ungreased baking sheet. Bake until
|
||||
delicately browned ... cookies should still be soft. Cool slightly before you
|
||||
remove them from the baking sheet.
|
||||
|
||||
Temperature: 375 F. ( modern oven )
|
||||
Time: bake 8 - 10 minutes
|
||||
Amount: 4 - 5 dozen 2" cookies
|
||||
|
||||
|
||||
=====
|
||||
|
||||
Personal comments :
|
||||
|
||||
I find it tastes better with a mixture of shortening and butter, as they say.
|
||||
|
||||
You don't need << all >> of that sugar, and it can be whatever color you want.
|
||||
|
||||
The nuts are optional. Feel free to play with the recipe. I put oatmeal in it,
|
||||
reducing flour accordingly, and sometimes cinnamon.
|
||||
|
||||
I also find it useful to grease the cookie sheets.
|
||||
|
||||
I think I'm going to go bake some now ...
|
||||
|
||||
-- richard
|
||||
|
||||
249
etc/COPYING
Normal file
249
etc/COPYING
Normal file
|
|
@ -0,0 +1,249 @@
|
|||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 1, February 1989
|
||||
|
||||
Copyright (C) 1989 Free Software Foundation, Inc.
|
||||
675 Mass Ave, Cambridge, MA 02139, USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The license agreements of most software companies try to keep users
|
||||
at the mercy of those companies. By contrast, our General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. The
|
||||
General Public License applies to the Free Software Foundation's
|
||||
software and to any other program whose authors commit to using it.
|
||||
You can use it for your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Specifically, the General Public License is designed to make
|
||||
sure that you have the freedom to give away or sell copies of free
|
||||
software, that you receive source code or can get it if you want it,
|
||||
that you can change the software or use pieces of it in new free
|
||||
programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of a such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must tell them their rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any program or other work which
|
||||
contains a notice placed by the copyright holder saying it may be
|
||||
distributed under the terms of this General Public License. The
|
||||
"Program", below, refers to any such program or work, and a "work based
|
||||
on the Program" means either the Program or any work containing the
|
||||
Program or a portion of it, either verbatim or with modifications. Each
|
||||
licensee is addressed as "you".
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's source
|
||||
code as you receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice and
|
||||
disclaimer of warranty; keep intact all the notices that refer to this
|
||||
General Public License and to the absence of any warranty; and give any
|
||||
other recipients of the Program a copy of this General Public License
|
||||
along with the Program. You may charge a fee for the physical act of
|
||||
transferring a copy.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion of
|
||||
it, and copy and distribute such modifications under the terms of Paragraph
|
||||
1 above, provided that you also do the following:
|
||||
|
||||
a) cause the modified files to carry prominent notices stating that
|
||||
you changed the files and the date of any change; and
|
||||
|
||||
b) cause the whole of any work that you distribute or publish, that
|
||||
in whole or in part contains the Program or any part thereof, either
|
||||
with or without modifications, to be licensed at no charge to all
|
||||
third parties under the terms of this General Public License (except
|
||||
that you may choose to grant warranty protection to some or all
|
||||
third parties, at your option).
|
||||
|
||||
c) If the modified program normally reads commands interactively when
|
||||
run, you must cause it, when started running for such interactive use
|
||||
in the simplest and most usual way, to print or display an
|
||||
announcement including an appropriate copyright notice and a notice
|
||||
that there is no warranty (or else, saying that you provide a
|
||||
warranty) and that users may redistribute the program under these
|
||||
conditions, and telling the user how to view a copy of this General
|
||||
Public License.
|
||||
|
||||
d) You may charge a fee for the physical act of transferring a
|
||||
copy, and you may at your option offer warranty protection in
|
||||
exchange for a fee.
|
||||
|
||||
Mere aggregation of another independent work with the Program (or its
|
||||
derivative) on a volume of a storage or distribution medium does not bring
|
||||
the other work under the scope of these terms.
|
||||
|
||||
3. You may copy and distribute the Program (or a portion or derivative of
|
||||
it, under Paragraph 2) in object code or executable form under the terms of
|
||||
Paragraphs 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of
|
||||
Paragraphs 1 and 2 above; or,
|
||||
|
||||
b) accompany it with a written offer, valid for at least three
|
||||
years, to give any third party free (except for a nominal charge
|
||||
for the cost of distribution) a complete machine-readable copy of the
|
||||
corresponding source code, to be distributed under the terms of
|
||||
Paragraphs 1 and 2 above; or,
|
||||
|
||||
c) accompany it with the information you received as to where the
|
||||
corresponding source code may be obtained. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form alone.)
|
||||
|
||||
Source code for a work means the preferred form of the work for making
|
||||
modifications to it. For an executable file, complete source code means
|
||||
all the source code for all modules it contains; but, as a special
|
||||
exception, it need not include source code for modules which are standard
|
||||
libraries that accompany the operating system on which the executable
|
||||
file runs, or for standard header files or definitions files that
|
||||
accompany that operating system.
|
||||
|
||||
4. You may not copy, modify, sublicense, distribute or transfer the
|
||||
Program except as expressly provided under this General Public License.
|
||||
Any attempt otherwise to copy, modify, sublicense, distribute or transfer
|
||||
the Program is void, and will automatically terminate your rights to use
|
||||
the Program under this License. However, parties who have received
|
||||
copies, or rights to use copies, from you under this General Public
|
||||
License will not have their licenses terminated so long as such parties
|
||||
remain in full compliance.
|
||||
|
||||
5. By copying, distributing or modifying the Program (or any work based
|
||||
on the Program) you indicate your acceptance of this license to do so,
|
||||
and all its terms and conditions.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the original
|
||||
licensor to copy, distribute or modify the Program subject to these
|
||||
terms and conditions. You may not impose any further restrictions on the
|
||||
recipients' exercise of the rights granted herein.
|
||||
|
||||
7. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of the license which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
the license, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
8. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
Appendix: How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to humanity, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these
|
||||
terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest to
|
||||
attach them to the start of each source file to most effectively convey
|
||||
the exclusion of warranty; and each file should have at least the
|
||||
"copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) 19yy <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 1, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) 19xx name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the
|
||||
appropriate parts of the General Public License. Of course, the
|
||||
commands you use may be called something other than `show w' and `show
|
||||
c'; they could even be mouse-clicks or menu items--whatever suits your
|
||||
program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
program `Gnomovision' (a program to direct compilers to make passes
|
||||
at assemblers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
294
etc/ChangeLog
Normal file
294
etc/ChangeLog
Normal file
|
|
@ -0,0 +1,294 @@
|
|||
Wed Oct 21 18:21:39 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* Makefile: Emacstool and other Sun-only targets replaced.
|
||||
* emacstool.c: New file.
|
||||
|
||||
Sat Aug 22 03:09:48 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* emacsclient.c (main): Set IPC_CREAT in msgget call.
|
||||
|
||||
Thu Aug 20 01:09:32 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* etags.c (TEX_funcs): Keep just 1 of two redundant nested loops.
|
||||
(TEX_decode_env): Make `tab' one element longer.
|
||||
|
||||
Sat May 9 16:24:08 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* etags.c (getit): Allow _ and $ in fortran symbol.
|
||||
|
||||
Thu May 7 16:11:26 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* movemail.c [POP]: Get user name via getpwuid.
|
||||
|
||||
Sat Mar 28 15:59:12 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* movemail.c: Allocate tempname dynamically.
|
||||
|
||||
Sun Mar 22 23:21:21 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* server.c: Include sys/types.h before signal.h.
|
||||
|
||||
Thu Mar 12 16:45:36 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* termcap.dat: Added vt101*, vt102*, vt131* and vt300.
|
||||
|
||||
Sat Jan 25 16:20:41 1992 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* env.c: Include errno.h.
|
||||
|
||||
Sun Jan 19 11:29:00 1992 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
|
||||
|
||||
* etags-vmslib.c (fn_exp): Add type cast.
|
||||
|
||||
Tue Dec 31 16:16:05 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
|
||||
|
||||
* server.c: Include sys/signal.h before config.h.
|
||||
|
||||
Sat Dec 7 17:04:17 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
|
||||
|
||||
* movemail.c: Copied from Emacs 19.
|
||||
(pfatal_and_delete): New function.
|
||||
(main, popmail): Use it.
|
||||
(popmail): Close output before deleting messages.
|
||||
Check for error on close and on fsync.
|
||||
Use `fatal' where appropriate.
|
||||
(main): Remove (void).
|
||||
(MAIL_USE_MMDF): New compilation flag
|
||||
(main): Report failure of flock.
|
||||
|
||||
Fri Oct 25 14:43:33 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
|
||||
|
||||
* server.c (msgcatch): Declare return type void.
|
||||
|
||||
* make-docfile.c: Fix comment on #endif.
|
||||
|
||||
Tue Sep 17 18:15:42 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
|
||||
|
||||
* etags.c (main): Don't make actions depend on programmer name.
|
||||
|
||||
Sat Sep 14 01:42:39 1991 Richard Stallman (rms@mole.gnu.ai.mit.edu)
|
||||
|
||||
* etags.c (C_entries): Clear tydef and next_token_is_func at start.
|
||||
(consider_token): Move next_token_is_func to global.
|
||||
|
||||
Mon Sep 2 16:22:04 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
|
||||
|
||||
* server.c, emacsclient.c [not SERVER_HOME_DIR]:
|
||||
Include host name in the name of the socket.
|
||||
|
||||
Tue Jul 30 17:03:41 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
|
||||
|
||||
* wakeup.c: Terminate if parent goes away.
|
||||
|
||||
Fri Mar 29 19:00:10 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu)
|
||||
|
||||
* server.c [USG]: Terminate if msgrcv fails.
|
||||
|
||||
Sun Mar 3 22:05:52 1991 Richard Stallman (rms at mole.ai.mit.edu)
|
||||
|
||||
* server.c [BSD]: Check for errors on stdin after scanf.
|
||||
|
||||
Tue Feb 26 15:55:07 1991 Richard Stallman (rms at mole.ai.mit.edu)
|
||||
|
||||
* etags.c (TEX_mode): Skip comment line at beg of file.
|
||||
|
||||
Mon Dec 31 17:52:55 1990 Richard Stallman (rms at mole.ai.mit.edu)
|
||||
|
||||
* refcard.tex: Change am fonts to cm.
|
||||
|
||||
Thu Nov 29 17:34:14 1990 Richard Stallman (rms at mole.ai.mit.edu)
|
||||
|
||||
* movemail.c (mbx_delimit_begin): Put space before `unseen'.
|
||||
|
||||
Sun Nov 18 17:09:07 1990 Richard Stallman (rms at mole.ai.mit.edu)
|
||||
|
||||
* server.c, emacsclient.c [BSD]: Put socket in /tmp.
|
||||
|
||||
Tue Nov 13 00:01:54 1990 Richard Stallman (rms at mole.ai.mit.edu)
|
||||
|
||||
* movemail.c (error): Handle 3 args.
|
||||
(main): Don't check input access if using pop.
|
||||
|
||||
Tue Oct 30 12:38:39 1990 David J. MacKenzie (djm at apple-gunkies)
|
||||
|
||||
* emacs.1: Give the mouse bindings for X11 instead of X10.
|
||||
|
||||
Tue Oct 16 14:04:05 1990 Richard Stallman (rms at mole.ai.mit.edu)
|
||||
|
||||
* etags.c (find_entries): Check for numbers after Scheme suffix.
|
||||
|
||||
Sun Oct 14 18:46:21 1990 Richard Stallman (rms at mole.ai.mit.edu)
|
||||
|
||||
* termcap.dat (vt200-80): Fix ke and ks to frob flag 1.
|
||||
|
||||
Tue Oct 9 15:22:16 1990 Richard Stallman (rms at mole.ai.mit.edu)
|
||||
|
||||
* Makefile (nemacstool, xvetool): New targets.
|
||||
|
||||
Wed Sep 26 18:42:18 1990 Richard Stallman (rms at mole.ai.mit.edu)
|
||||
|
||||
* emacsclient.c (errno): Declare it explicitly.
|
||||
|
||||
Tue Aug 14 21:34:50 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* emacsclient.c [USG]: Pass msgsnd only 4 args.
|
||||
|
||||
Tue Aug 7 13:17:58 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* Makefile (clean): New target.
|
||||
|
||||
Sun Jul 8 18:18:00 1990 Richard Stallman (rms at geech)
|
||||
|
||||
* emacsclient.c [BSD]: Include errno.h.
|
||||
Declare sys_nerr and sys_errlist.
|
||||
|
||||
Wed Jul 4 15:40:33 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* wakeup.c: New file.
|
||||
* Makefile (wakeup): New rule.
|
||||
|
||||
Wed May 30 15:40:59 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* emacsclient.c: Print program name in error messages.
|
||||
Handle failure of getwd.
|
||||
Handle +LINE arguments in SYSVIPC case.
|
||||
These are most of the changes already in the version 19 file.
|
||||
|
||||
Mon May 28 21:54:59 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* loadst.c (main): Conditional to get load average on Apollo.
|
||||
|
||||
Sun Dec 24 23:54:28 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* etags.c (readline): Separate out init of `pend'.
|
||||
|
||||
Thu Jun 15 12:53:43 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* movemail.c [USG]: Define F_OK, etc., if not in header.
|
||||
|
||||
Fri May 12 22:08:09 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* etags.c (readline): Split call to xrealloc for 3b1 cc bug.
|
||||
|
||||
Tue Apr 18 21:31:25 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* loadst.c: on bsd4.3, use gettimeofday instead of CPUSTATES.
|
||||
|
||||
Thu Mar 16 13:43:07 1989 Randall Smith (randy at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* MACHINES: m-sequent.h works for symmetry also.
|
||||
|
||||
Mon Mar 13 17:03:06 1989 Randall Smith (randy at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* MACHINES: Added note mentioning m-news3.0.h.
|
||||
|
||||
Tue Feb 21 12:58:55 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* movemail.c: On sysv, include unistd.h.
|
||||
|
||||
Tue Jan 3 13:29:46 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* movemail.c: Check access before doing real work.
|
||||
Check that outfile is in a writable directory.
|
||||
On fatal error, delete the lock file.
|
||||
|
||||
Fri Dec 30 16:37:27 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* movemail.c: Use `access' to check input and output files.
|
||||
|
||||
Wed Dec 28 23:16:28 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* emacsclient.c [USG]: Don't append cwd if abs pathname is spec'd.
|
||||
|
||||
Wed Nov 30 15:21:13 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* movemail.c: Do fsync before closing output.
|
||||
|
||||
Tue Nov 29 09:59:54 1988 Richard Mlynarik (mly at pickled-brain.ai.mit.edu)
|
||||
|
||||
* movemail.c: Better error message when can't create tempname.
|
||||
This file needs a great deal of extra error-checking and lucid reporting...
|
||||
|
||||
Tue Nov 15 10:00:21 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* movemail.c: Close output and check errors before deleting input.
|
||||
|
||||
Thu Aug 4 19:42:45 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* emacsclient.c: Args like +DIGITS are passed through unchanged.
|
||||
|
||||
Tue Jul 12 22:08:00 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* server.c: If both BSD and HAVE_SYSVIPC, use the latter.
|
||||
* emacsclient.c: Likewise.
|
||||
In the HAVE_SYSVIPC alternative, if BSD, use getwd instead of getcwd.
|
||||
|
||||
Thu Jun 23 08:40:53 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* etags.c: Handle `typedef struct foo {' (price@mcc.com).
|
||||
(istoken) New string-comparison macro.
|
||||
(consider_token): New arg `level'. New state `tag_ok' in `tydef'.
|
||||
|
||||
Tue Jun 14 04:25:58 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* etags.c: Changes for VMS.
|
||||
Always define ETAGS on VMS.
|
||||
Define macros GOOD and BAD for success and failure exit codes.
|
||||
(begtk, intk): Allow `$' in identifiers
|
||||
(main): Don't support -B, -F or -u on VMS.
|
||||
Alternate loop for scanning filename arguments.
|
||||
(system): Delete definition of this function.
|
||||
|
||||
* etags-vmslib.c (system): Undefine this; VMS now provides it.
|
||||
|
||||
Wed Jun 8 08:18:21 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
|
||||
|
||||
* loadst.c: Prevent multiple-def errors on BSD and BSD4_3
|
||||
around include of param.h. (Like fns.c.)
|
||||
|
||||
Mon May 16 01:06:26 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
|
||||
|
||||
* loadst.c (load_average): Move load-average code to this new fn.
|
||||
Add conditionals to compute load ave on UMAX.
|
||||
|
||||
Sat May 14 01:24:53 1988 Richard Stallman (rms at lucky-charms.ai.mit.edu)
|
||||
|
||||
* loadst.c: Change DK_HEADER_FILE to DKSTAT_HEADER_FILE
|
||||
with opposite sense.
|
||||
|
||||
Fri May 13 18:09:39 1988 Chris Hanson (cph at kleph)
|
||||
|
||||
* emacsclient.c: Delete references to unused variable `out'. This
|
||||
caused a bus error when used under hp-ux.
|
||||
|
||||
Fri May 6 10:42:31 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
|
||||
|
||||
* loadst.c: Control dk.h conditional with DK_HEADER_FILE.
|
||||
|
||||
Wed May 4 16:08:43 1988 Richard Stallman (rms at rice-krispies.ai.mit.edu)
|
||||
|
||||
* etags.c (find_entries): `.t' or `.sch' means scheme code.
|
||||
|
||||
Fri Apr 29 00:22:26 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
|
||||
|
||||
* loadst.c: Add BSD4_3 conditional for file dk.h instead of dkstat.h.
|
||||
|
||||
Thu Apr 28 08:55:46 1988 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
|
||||
|
||||
* movemail.c: #undef close, since config can #define it on V.3.
|
||||
* emacsclient.c, fakemail.c, loadst.c, server.c: likewise.
|
||||
|
||||
Tue Apr 26 07:33:01 1988 Richard Stallman (rms at lucky-charms.ai.mit.edu)
|
||||
|
||||
* etags.c (TEX_mode, etc.): Remove superfluous backslashes from
|
||||
invalid escape sequences such as `\{'.
|
||||
|
||||
* loadst.c: Add `sequent' conditional for file dk.h.
|
||||
|
||||
Sun Mar 20 13:17:13 1988 Richard M. Stallman (rms at wilson)
|
||||
|
||||
* server.c [not BSD and not HAVE_SYSVIPC]: fix error message.
|
||||
|
||||
* loadst.c (main) [XENIX]: use /usr/spool/mail, not /usr/mail.
|
||||
|
||||
|
||||
113
etc/DEBUG
Normal file
113
etc/DEBUG
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
Debugging GNU Emacs
|
||||
Copyright (c) 1985 Richard M. Stallman.
|
||||
|
||||
Permission is granted to anyone to make or distribute verbatim copies
|
||||
of this document as received, in any medium, provided that the
|
||||
copyright notice and permission notice are preserved,
|
||||
and that the distributor grants the recipient permission
|
||||
for further redistribution as permitted by this notice.
|
||||
|
||||
Permission is granted to distribute modified versions
|
||||
of this document, or of portions of it,
|
||||
under the above conditions, provided also that they
|
||||
carry prominent notices stating who last changed them.
|
||||
|
||||
On 4.2 you will probably find that dbx does not work for
|
||||
debugging GNU Emacs. For one thing, dbx does not keep the
|
||||
inferior process's terminal modes separate from its own.
|
||||
For another, dbx does not put the inferior in a separate
|
||||
process group, which makes trouble when an inferior uses
|
||||
interrupt input, which GNU Emacs must do on 4.2.
|
||||
|
||||
dbx has also been observed to have other problems,
|
||||
such as getting incorrect values for register variables
|
||||
in stack frames other than the innermost one.
|
||||
|
||||
The Emacs distribution now contains GDB, the new source-level
|
||||
debugger for the GNU system. GDB works for debugging Emacs.
|
||||
GDB currently runs on vaxes under 4.2 and on Sun 2 and Sun 3
|
||||
systems.
|
||||
|
||||
|
||||
** Some useful techniques
|
||||
|
||||
`Fsignal' is a very useful place to stop in.
|
||||
All Lisp errors go through there.
|
||||
|
||||
It is useful, when debugging, to have a guaranteed way
|
||||
to return to the debugger at any time. If you are using
|
||||
interrupt-drived input, which is the default, then Emacs is using
|
||||
RAW mode and the only way you can do it is to store
|
||||
the code for some character into the variable stop_character:
|
||||
|
||||
set stop_character = 29
|
||||
|
||||
makes Control-] (decimal code 29) the stop character.
|
||||
Typing Control-] will cause immediate stop. You cannot
|
||||
use the set command until the inferior process has been started.
|
||||
Put a breakpoint early in `main', or suspend the Emacs,
|
||||
to get an opportunity to do the set command.
|
||||
|
||||
If you are using cbreak input (see the Lisp function set-input-mode),
|
||||
then typing Control-g will cause a SIGINT, which will return control
|
||||
to the debugger immediately unless you have done
|
||||
|
||||
ignore 3 (in dbx)
|
||||
or handle 3 nostop noprint (in gdb)
|
||||
|
||||
You will note that most of GNU Emacs is written to avoid
|
||||
declaring a local variable in an inner block, even in
|
||||
cases where using one would be the cleanest thing to do.
|
||||
This is because dbx cannot access any of the variables
|
||||
in a function which has even one variable defined in an
|
||||
inner block. A few functions in GNU Emacs do have variables
|
||||
in inner blocks, only because I wrote them before realizing
|
||||
that dbx had this problem and never rewrote them to avoid it.
|
||||
|
||||
I believe that GDB does not have such a problem.
|
||||
|
||||
|
||||
** If GDB does not run and your debuggers can't load Emacs.
|
||||
|
||||
On some systems, no debugger can load Emacs with a symbol table,
|
||||
perhaps because they all have fixed limits on the number of symbols
|
||||
and Emacs exceeds the limits. Here is a method that can be used
|
||||
in such an extremity. Do
|
||||
|
||||
nm -n temacs > nmout
|
||||
strip temacs
|
||||
adb temacs
|
||||
0xd:i
|
||||
0xe:i
|
||||
14:i
|
||||
17:i
|
||||
:r -l loadup (or whatever)
|
||||
|
||||
It is necessary to refer to the file `nmout' to convert
|
||||
numeric addresses into symbols and vice versa.
|
||||
|
||||
It is useful to be running under a window system.
|
||||
Then, if Emacs becomes hopelessly wedged, you can create
|
||||
another window to do kill -9 in. kill -ILL is often
|
||||
useful too, since that may make Emacs dump core or return
|
||||
to adb.
|
||||
|
||||
|
||||
** Debugging incorrect screen updating.
|
||||
|
||||
To debug Emacs problems that update the screen wrong, it is useful
|
||||
to have a record of what input you typed and what Emacs sent to the
|
||||
screen. To make these records, do
|
||||
|
||||
(open-dribble-file "~/.dribble")
|
||||
(open-termscript "~/.termscript")
|
||||
|
||||
The dribble file contains all characters read by Emacs from the
|
||||
terminal, and the termscript file contains all characters it sent to
|
||||
the terminal. The use of the directory `~/' prevents interference
|
||||
with any other user.
|
||||
|
||||
If you have unreproduceable display problems, put those two expressions
|
||||
in your ~/.emacs file. When the problem happens, exit the Emacs that
|
||||
you were running, kill it, and rename the two files. Then you can start
|
||||
another Emacs without clobbering those files, and use it to examine them.
|
||||
779
etc/DIFF
Normal file
779
etc/DIFF
Normal file
|
|
@ -0,0 +1,779 @@
|
|||
How is this Emacs different from all other Emacses? -*-Outline-*-
|
||||
(Actually, from Twenex Emacs)
|
||||
|
||||
* Copyright (c) 1985 Richard M. Stallman
|
||||
|
||||
Permission is granted to anyone to make or distribute verbatim copies
|
||||
of this document as received, in any medium, provided that the
|
||||
copyright notice and permission notice are preserved,
|
||||
and that the distributor grants the recipient permission
|
||||
for further redistribution as permitted by this notice.
|
||||
|
||||
Permission is granted to distribute modified versions
|
||||
of this document, or of portions of it,
|
||||
under the above conditions, provided also that they
|
||||
carry prominent notices stating who last changed them.
|
||||
|
||||
* Fundamental concepts.
|
||||
|
||||
** There is no concept of "typeout" in GNU Emacs.
|
||||
|
||||
Any time that a command wants to display some output,
|
||||
it creates a buffer (usually with a name surrounded by asterisks)
|
||||
and displays it in a window.
|
||||
|
||||
This provides some advantages:
|
||||
you can edit some more while looking at the output;
|
||||
you can copy parts of the output into other buffers.
|
||||
|
||||
It also has a disadvantage that you must type a command
|
||||
in order to make the output disappear.
|
||||
You can use C-x 1 to get rid of all windows except the
|
||||
selected one. To be more selective, you can switch to
|
||||
the window you want to get rid of and then type C-x 0
|
||||
(delete-window).
|
||||
|
||||
You also need to type a command to scroll the other
|
||||
window if not all the output fits in it. Meta-Control-v
|
||||
will usually do the job.
|
||||
|
||||
** There is no concept of a "subsystem" in GNU Emacs.
|
||||
|
||||
Where Twenex Emacs would use a subsystem, GNU Emacs
|
||||
instead creates a buffer and redefines commands in it.
|
||||
|
||||
For example, when you send mail in GNU Emacs, you use
|
||||
a buffer named *mail* which is in Mail Mode. You can
|
||||
switch away from this buffer to any other buffer and
|
||||
resume normal editing; then switch back and resume
|
||||
composing mail. You do not have to "exit" from
|
||||
composing mail in order to do ordinary editing.
|
||||
|
||||
This has many advantages, but it also has a disadvantage:
|
||||
Subsystems in Emacs tend to have "exit" commands that return you
|
||||
to whatever you were doing before entering the subsystem.
|
||||
In GNU Emacs the idea of what to return to is not well defined,
|
||||
so it is not clear what an "exit" command should do.
|
||||
The only way to "exit" in general is to type C-x b, C-x C-f, or
|
||||
some other suitable command to switch buffers. Some
|
||||
subsystem-like major modes, such as Info and Mail mode, provide
|
||||
commands to "exit" by switching to the previously selected
|
||||
buffer.
|
||||
|
||||
** Files are always visited in their own buffers.
|
||||
|
||||
Beginning users of Twenex Emacs were told how to edit
|
||||
using a single buffer and reading one file after another
|
||||
into that buffer. Use of a new buffer for each file was
|
||||
regarded as a more advanced mode.
|
||||
|
||||
In GNU Emacs, the idea of using a single buffer for various
|
||||
files, one by one, has been dropped, given that the address
|
||||
space is expected to be large enough for many buffers. C-x
|
||||
C-f (find-file), which behaves nearly the same as in Twenex
|
||||
Emacs, is in GNU Emacs the canonical way for all users to
|
||||
visit files.
|
||||
|
||||
Various commands need to read files into Emacs in the course
|
||||
of their execution. In Twenex Emacs the user must tell them
|
||||
whether to reuse buffers or create new ones, using the variable
|
||||
Tags Find File. In GNU Emacs, these commands always use
|
||||
C-x C-f.
|
||||
|
||||
The command C-x C-v does still exist; it kills the current
|
||||
buffer and reads the specified file into a new buffer.
|
||||
It is equivalent to kill-buffer followed by find-file.
|
||||
|
||||
Since there is no reusing of buffers, there is no point in
|
||||
calling the initial buffer "main". So the initial buffer
|
||||
in GNU Emacs is called "*scratch*" and is intended for typing
|
||||
Lisp expressions to be evaluated.
|
||||
|
||||
** File name defaulting.
|
||||
|
||||
GNU Emacs records a separate working directory for each buffer.
|
||||
Normally this is the directory on which the buffer's file
|
||||
resides; for buffers not visiting any file, it is copied from
|
||||
the buffer that was current when it was created. The current buffer's
|
||||
working directory can be printed with M-x pwd and set with M-x cd.
|
||||
|
||||
GNU Emacs shows you the default directory by inserting it in
|
||||
the minibuffer when a file name is being read. You can type
|
||||
the filename you want at the end of the default as if the
|
||||
default were not there, or you can edit and alter the default.
|
||||
|
||||
If you want file /lose/big when the default /foo/defaultdir/
|
||||
has been inserted for you, you need not kill the default; simply
|
||||
type at the end of it: /foo/defaultdir//lose/big. Such a file
|
||||
name is not ordinarily considered valid, but GNU Emacs
|
||||
considers it equivalent to /lose/big.
|
||||
|
||||
Likewise, if you want file quux in your home directory, just add
|
||||
~/quux to the end of the supplied text, to get
|
||||
/foo/defaultdir/~/quux. GNU Emacs sees "/~" and throws away
|
||||
everything before the "~".
|
||||
|
||||
You can refer to environment variables also within file names.
|
||||
$ followed by the environment variable name is replaced by the
|
||||
variable's value. The variable name should either be followed
|
||||
by a nonalphanumeric character (which counts as part of the
|
||||
file name) or be surrounded by braces {...} (which do not count
|
||||
as part of the file name). Thus, if variable USER has value "rms",
|
||||
"x/$USER-foo" is expanded to "x/rms-foo", and "x${USER}foo"
|
||||
is expanded to "xrmsfoo". Note that this substitution is not
|
||||
performed by the primitive file operation functions of GNU Emacs,
|
||||
but rather by the interactive file name reader. It is also
|
||||
available as a separate primitive, in the function
|
||||
substitute-in-file-name.
|
||||
|
||||
** Exit commands C-z, C-x C-c and C-x C-z.
|
||||
|
||||
There are two ways to exit GNU Emacs: killing and suspending.
|
||||
Killing is like what Control-c does to ordinary Unix programs.
|
||||
In GNU Emacs, you type C-x C-c to kill it. (This offers to
|
||||
save any modified file buffers before really killing Emacs.)
|
||||
Suspending is like what Control-z does to ordinary Unix programs.
|
||||
To suspend GNU Emacs, type C-x C-z, or type just C-z.
|
||||
Note that C-z suspends ordinary programs instantly, but
|
||||
Emacs does not suspend until it reads the C-z.
|
||||
|
||||
Usually it is better to suspend: once a system is smart
|
||||
enough to have job control, why ever kill an editor?
|
||||
You'll just have to make a new one in a minute.
|
||||
This is why the convenient command C-z is provided for
|
||||
suspending.
|
||||
|
||||
C-c is used as a prefix key for mode-specific commands and for users'
|
||||
own commands. We deliberately do not make C-c ever kill Emacs,
|
||||
because it should not be so easy to do something irreversible.
|
||||
|
||||
** Quitting with C-g.
|
||||
|
||||
If you type C-g while GNU Emacs is waiting for input, it
|
||||
is an ordinary command (which is defined to beep). If you
|
||||
type C-g while Lisp code is executing, it sets a flag which
|
||||
causes a special signal, nearly the same as an error, to
|
||||
happen atthe next safe place in Lisp execution. This usually
|
||||
has the effect of aborting the current command in a safe way.
|
||||
|
||||
Because at times there have been bugs causing GNU Emacs to loop
|
||||
without checking the quit flag, a special feature causes
|
||||
GNU Emacs to be suspended immediately if you type a second C-g
|
||||
while the flag is already set. So you can always get out
|
||||
of GNU Emacs. Normally GNU Emacs recognizes and clears the quit flag
|
||||
quickly enough to prevent this from happening.
|
||||
|
||||
When you resume GNU Emacs after a suspension caused by multiple C-g, it
|
||||
asks two questions before resuming execution:
|
||||
Checkpoint?
|
||||
Dump core?
|
||||
Answer each one with `y' or `n' and a Return.
|
||||
`y' to Checkpoint? causes immediate auto-saving of all
|
||||
buffers in which auto-saving is enabled.
|
||||
`y' to Dump core? causes an illegal instruction to be executed.
|
||||
This is to enable a wizard to figure out why GNU Emacs was
|
||||
looping without checking for quits. Execution does not continue
|
||||
after a core dump. If you answer `n', execution continues.
|
||||
With luck, GNU Emacs will ultimately check the quit flag,
|
||||
and quit normally. If not, and you type another C-g, it
|
||||
is suspended again.
|
||||
|
||||
If GNU Emacs is not really hung, just slow, you may invoke
|
||||
the double C-g feature without really meaning to. Then just
|
||||
resume and answer `n' to both questions, and you will
|
||||
arrive at your former state. Presumably the quit you
|
||||
wanted will finish happening soon.
|
||||
|
||||
These questions are not asked if you suspend GNU Emacs with the C-z
|
||||
command. Continuing GNU Emacs after a C-z takes you straight back
|
||||
into editing.
|
||||
|
||||
** Undoing with C-x u or C-_
|
||||
|
||||
You can undo many commands--up to 10,000 characters worth.
|
||||
Each time you type C-x u or C-_, another command or batch of change
|
||||
is undone. Undo information is stored per buffer, and the undo
|
||||
command always applies to the current buffer. A numeric argument
|
||||
serves as a repeat count.
|
||||
|
||||
Consecutive self-inserting characters are undone in groups of twenty.
|
||||
|
||||
** Different character set.
|
||||
|
||||
GNU Emacs does not expect anyone ever to have a keyboard in which
|
||||
the Control key sets an independent bit which may accompany any
|
||||
character. The only control characters that can exist are the
|
||||
ASCII control characters.
|
||||
|
||||
There is, as a result, no "control prefix" character.
|
||||
|
||||
** Control-h is the Help character.
|
||||
|
||||
I'm amazed it took me so long to get this idea. In Twenex Emacs, C-h
|
||||
and C-b are equivalent commands, making C-h redundant. C-h is not
|
||||
only easy to type, it is mnemonic for "Help". So in GNU Emacs the
|
||||
Help character is C-h.
|
||||
|
||||
** Completion is done by TAB, not ESC.
|
||||
|
||||
ESC in the minibuffer is a Meta prefix, same as at top level.
|
||||
|
||||
** The string-argument reader is the minibuffer is an editor window.
|
||||
|
||||
In GNU Emacs, the line at the bottom of the screen is the minibuffer.
|
||||
Commands that want string arguments always use this line to read them,
|
||||
and you can use the ordinary Emacs editing commands to edit the
|
||||
input. You can terminate input with Return because Return is defined
|
||||
as the exit-minibuffer command when in the minibuffer. If you
|
||||
are using a command that needs several arguments, terminate each
|
||||
one with Return. You cannot separate arguments with Escape
|
||||
the way you would in Twenex Emacs.
|
||||
|
||||
The minibuffer window does not overlay other editor windows;
|
||||
it is a nearly ordinary editor window which lacks a mode line
|
||||
and is "turned off" when not in use. While it IS in use, you
|
||||
can switch windows to and from the minibuffer, kill text in other
|
||||
windows and yank in the minibuffer, etc.
|
||||
|
||||
You can even issue a command that uses the minibuffer while in the
|
||||
minibuffer. This gets you temporarily into a recursive minibuffer.
|
||||
However, this is allowed only if you enable it, since it could be
|
||||
confusing for beginners.
|
||||
|
||||
When you exit the minibuffer, the cursor immediately moves back to
|
||||
column zero of the minibuffer line, to show you that the exit
|
||||
command has been obeyed. The minibuffer contents remain on the screen
|
||||
until the end of the command, unless some other text is displayed there.
|
||||
|
||||
A single Control-g exits the minibuffer.
|
||||
|
||||
** There are no &'s or ^R's or spaces in function names.
|
||||
|
||||
For example, the function which is called ^R Forward Word
|
||||
in Twenex Emacs is called forward-word in GNU Emacs.
|
||||
|
||||
** The extension language is Lisp rather than TECO.
|
||||
|
||||
Libraries must be written in Lisp. Meta-ESC reads a Lisp
|
||||
expression, evaluates it, and prints the result. Note that
|
||||
Meta-ESC is "disabled" by default, so that beginning users
|
||||
do not get into the minibuffer by accident in a confusing way.
|
||||
|
||||
Data types available include integers (which double as characters),
|
||||
strings, symbols, lists, vectors, buffers, buffer pointers,
|
||||
windows, and process channels.
|
||||
|
||||
For now, to learn about writing Lisp code for GNU Emacs, read some of
|
||||
the source code, which is in directory ../lisp. Also, all Lisp
|
||||
primitives have self-documentation you can read with C-h f.
|
||||
|
||||
** Enabling the error handler.
|
||||
|
||||
GNU Emacs has a Lisp debugger/stepper/trace package, but normally
|
||||
errors do not enter the debugger because that is slow, and unlikely to
|
||||
be of interest to most users. Set the variable debug-on-error to t to
|
||||
cause errors to invoke the debugger. Set debug-on-quit to cause quit
|
||||
signals (caused by C-g) to invoke the debugger.
|
||||
|
||||
* Other changes.
|
||||
|
||||
** More than two windows are allowed.
|
||||
|
||||
C-x 2 splits the current window into two windows,
|
||||
one above the other. Initially they both display
|
||||
the same buffer.
|
||||
|
||||
C-x 2 now accepts a numeric argument to specify the number of
|
||||
lines to give to the uppermost of the two windows it makes.
|
||||
|
||||
C-x 0 kills the current window, making all others larger.
|
||||
C-x 1 kills all windows except the current one.
|
||||
C-x O switches to the next window down.
|
||||
It rotates from the bottom one to the top one.
|
||||
An argument serves as a repeat count; negative arguments
|
||||
circulate in the reverse order.
|
||||
|
||||
If the same buffer is displayed in several windows,
|
||||
changes made in it are redisplayed in all of them.
|
||||
|
||||
** Side by side windows are supported.
|
||||
|
||||
The command C-x 5 splits the current window into
|
||||
two side-by-side windows.
|
||||
|
||||
C-x } makes the selected window ARG columns wider at the
|
||||
expense of the windows at its sides. C-x { makes the selected
|
||||
window ARG columns narrower. An argument to C-x 5 specifies
|
||||
how many columns to give to the leftmost of the two windows made.
|
||||
|
||||
** Horizontal scrolling of the lines in a window is implemented.
|
||||
|
||||
C-x < (scroll-left) scrolls all displayed lines left,
|
||||
with the numeric argument (default 1) saying how far to scroll.
|
||||
When the window is scrolled left, some amount of the beginning
|
||||
of each nonempty line is replaced by an "$".
|
||||
C-x > scrolls right. If a window has no text hidden at the left
|
||||
margin, it cannot be scrolled any farther right than that.
|
||||
When nonzero leftwards scrolling is in effect in a window.
|
||||
lines are automatically truncated at the window's right margin
|
||||
regardless of the value of the variable truncate-lines in the
|
||||
buffer being displayed.
|
||||
|
||||
** Return key does not use up empty lines.
|
||||
|
||||
In Twenex Emacs, the Return command advances over an existing
|
||||
empty line in some cases. In GNU Emacs, the Return command always
|
||||
makes inserts a newline. Twenex Emacs was designed at a time when
|
||||
most display terminals did not have the ability to scroll part
|
||||
of the screen, and using existing empty lines made redisplay faster.
|
||||
Nowadays, terminals that cannot scroll part of the screen are rare,
|
||||
so there is no need to make Return behave in a more complicated manner.
|
||||
|
||||
** Help m.
|
||||
|
||||
Typing C-h m displays documentation of the current major mode.,
|
||||
telling you what special commands and features are available
|
||||
and how to use them or get more information on them.
|
||||
|
||||
This is simply the documentation, as a function, of the
|
||||
symbol which is the value of major-mode. Each major mode
|
||||
function has been given documentation intended for C-h m.
|
||||
|
||||
** Display-hiding features.
|
||||
|
||||
*** Hiding indented lines
|
||||
|
||||
The command C-x $ with numeric argument N causes lines indented by N
|
||||
or more columns to become invisible. All you see is " ..." appended
|
||||
to the previous line, in place of any number of consecutive invisible
|
||||
lines.
|
||||
|
||||
*** Outline Mode.
|
||||
|
||||
Outline mode is designed for editing outline-structured
|
||||
files, such as this one.
|
||||
|
||||
Headings should be lines starting with one or more asterisks.
|
||||
Major headings have one asterisk, subheadings two, etc.
|
||||
Lines not starting with asterisks are body text.
|
||||
|
||||
You can make the body under a heading, or the subheadings
|
||||
under a heading, temporarily invisible, or visible again.
|
||||
Invisible lines are attached to the end of the previous line
|
||||
so they go with it if you kill it and yank it back.
|
||||
|
||||
Commands:
|
||||
Meta-} next-visible-heading move by visible headings
|
||||
Meta-{ previous-visible-heading move by visible headings
|
||||
|
||||
Meta-x hide-body make all body text invisible (not headings).
|
||||
Meta-x show-all make everything in buffer visible.
|
||||
|
||||
The remaining commands are used when dot is on a heading line.
|
||||
They apply to some of the body or subheadings of that heading.
|
||||
C-c C-h hide-subtree make text and subheadings invisible.
|
||||
C-c C-s show-subtree make text and subheadings visible.
|
||||
C-c C-i show-children make direct subheadings visible.
|
||||
No effect on body, or subheadings 2 or more levels down.
|
||||
With arg N, affects subheadings N levels down.
|
||||
M-x hide-entry make immediately following body invisible.
|
||||
M-x show-entry make it visible.
|
||||
M-x hide-leaves make text under heading and under its subheadings invisible.
|
||||
The subheadings remain visible.
|
||||
M-x show-branches make all subheadings at all levels visible.
|
||||
|
||||
** C mode is fancy.
|
||||
|
||||
C mode assumes that you put the initial open-brace of
|
||||
a function definition at the beginning of a line.
|
||||
If you use the popular indenting style that puts this
|
||||
open-brace at the end of a line containing a type declaration,
|
||||
YOU WILL LOSE: C mode does not know a function starts there.
|
||||
|
||||
Open-brace at the beginning of a line makes it possible
|
||||
for C mode to find function boundaries with total reliability;
|
||||
something I consider vital and which cannot be done
|
||||
if the other style is used.
|
||||
|
||||
The Tab command indents C code very cleverly.
|
||||
I know of only one cases in which Tab does not indent C code nicely:
|
||||
Expressions continued over several lines with few parentheses.
|
||||
Tab does not know the precedences of C operators, so it does
|
||||
not know which lines of the expression should go where.
|
||||
Using parentheses to indicate the nesting of operators
|
||||
except within a line makes this problem go away.
|
||||
|
||||
The indenting algorithm is entirely written in Lisp.
|
||||
|
||||
Tab with a numeric argument in Twenex Emacs indents
|
||||
that many lines. It is different in GNU Emacs: it means
|
||||
to shift all the lines of a bracketed expression by the
|
||||
same amount as the line being indented. For example, if you have
|
||||
if (foo)
|
||||
{
|
||||
hack ();
|
||||
/** Well? */
|
||||
}
|
||||
and type C-u Tab on the line with the open brace, you get
|
||||
if (foo)
|
||||
{
|
||||
hack ();
|
||||
/* Well? */
|
||||
}
|
||||
from indenting the brace line and then shifting the
|
||||
lines within the braces rigidly with the first one.
|
||||
|
||||
Meta-Control-q works as in Lisp mode; it should be
|
||||
used with dot just before a bracketed grouping, and
|
||||
indents each line INSIDE that grouping using Tab.
|
||||
If used instead of C-u Tab in the previous example, it makes
|
||||
if (foo)
|
||||
{
|
||||
hack ();
|
||||
/* Well? */
|
||||
}
|
||||
|
||||
Meta-Control-h puts mark at the end of the current C function
|
||||
and puts dot before it.
|
||||
|
||||
Most other Meta-Control commands intended for Lisp expressions
|
||||
work usefully in C mode as well.
|
||||
|
||||
** Meta-g (fill-region) is different.
|
||||
|
||||
In Twenex Emacs, Meta-g fills the region with no paragraph
|
||||
boundaries except for blank and indented lines. In GNU Emacs,
|
||||
it divides the region into paragraphs in the same manner as
|
||||
Meta-], and fills each paragraph separately. There is also
|
||||
the function fill-region-as-paragraph which fills the region
|
||||
regarding at as a single paragraph regardless even of blank
|
||||
or indented lines.
|
||||
|
||||
** Indented Text Mode instead of Edit Indented Text.
|
||||
|
||||
Twenex Emacs has a command Edit Indented Text which temporarily
|
||||
alters some commands for editing indented paragraphs.
|
||||
GNU Emacs has instead a separate major mode, Indented Text Mode,
|
||||
which is different from ordinary Text Mode in just the same
|
||||
alterations. Specifically, in Indented Text Mode,
|
||||
Tab runs the function indent-relative, and auto filling indents
|
||||
the newly created lines.
|
||||
|
||||
** But rectangle commands are implemented.
|
||||
|
||||
C-x r stores the rectangle described by dot and mark
|
||||
into a register; it reads the register name from the keyboard.
|
||||
C-x g, the command to insert the contents of a register,
|
||||
can be used to reinsert the rectangle elsewhere.
|
||||
|
||||
Other rectangle commands include
|
||||
open-rectangle:
|
||||
insert a blank rectangle in the position and size
|
||||
described by dot and mark, at its corners;
|
||||
the existing text is pushed to the right.
|
||||
clear-rectangle:
|
||||
replace the rectangle described by dot ane mark
|
||||
with blanks. The previous text is deleted.
|
||||
delete-rectangle:
|
||||
delete the text of the specified rectangle,
|
||||
moving the text beyond it on each line leftward.
|
||||
kill-rectangle
|
||||
like delete-rectangle but also stores the text of
|
||||
the rectangle in the "rectangle kill buffer".
|
||||
More precisely, it stores the text as a list of strings
|
||||
(one string for each line) in the variable killed-rectangle.
|
||||
yank-rectangle
|
||||
inserts the text of the last killed rectangle.
|
||||
extract-rectangle and delete-extract-rectangle
|
||||
these functions return the text of a rectangle
|
||||
as a list of strings. They are for use in writing
|
||||
other functions that operate on rectangles.
|
||||
|
||||
** Keyboard Macros
|
||||
|
||||
The C-x ( command for defining a keyboard macro can in GNU Emacs
|
||||
be given a numeric argument, which means that the new macro
|
||||
starts out not empty but rather as the same as the last
|
||||
keyboard macro entered. In addition, that last keyboard
|
||||
macro is replayed when the C-x ( is typed. C-x ( with an
|
||||
argument is thus equivalent to typing plain C-x ( and then
|
||||
retyping the last keyboard macro entered.
|
||||
|
||||
The command write-kbd-macro and append-kbd-macro can be used to
|
||||
save a keyboard macro definition in a file. It is represented as
|
||||
a Lisp expression which, when evaluated, will define the keyboard
|
||||
macro. write-kbd-macro writes the specified file from scratch,
|
||||
whereas append-kbd-macro adds to any existing text in the file.
|
||||
Both expect the keyboard macro to be saved to be specified by
|
||||
name; this means you must use the command name-last-kbd-macro to
|
||||
give the macro a name before you can save it.
|
||||
|
||||
** The command to resume a terminated tags-search or tags-query-replace
|
||||
|
||||
is Meta-comma in GNU Emacs.
|
||||
|
||||
** Auto Save is on by default.
|
||||
|
||||
Auto Save mode is enabled by default in all buffers
|
||||
that are visiting files.
|
||||
|
||||
The file name used for auto saving is made by prepending
|
||||
"#" to the file name visited.
|
||||
|
||||
** Backup files.
|
||||
|
||||
Since Unix stupidly fails to have file version numbers,
|
||||
GNU Emacs compensates slightly in the customary fashion:
|
||||
when a file is modified and saved for the first time in
|
||||
a particular GNU Emacs run, the original file is renamed,
|
||||
appending "~" to its name. Thus, foo.c becomes foo.c~.
|
||||
|
||||
Emacs can also put a version number into the name of the backup file,
|
||||
as in foo.c.~69~ for version number 69. This is an optional feature
|
||||
that the user has to enable.
|
||||
|
||||
** Mode Line differences.
|
||||
|
||||
Each window in GNU Emacs has its own mode line, which always
|
||||
displays the status of that window's buffer and nothing else.
|
||||
The mode line appears at the bottom of the window. It is
|
||||
full of dashes, to emphasize the boundaries between windows,
|
||||
and is displayed in inverse video if the terminal supports it.
|
||||
The information usually available includes:
|
||||
|
||||
** Local Modes feature changed slightly.
|
||||
|
||||
GNU Emacs supports local mode lists much like those in Twenex Emacs,
|
||||
but you can only set variables, not commands. You write
|
||||
|
||||
Local variables:
|
||||
tab-width: 10
|
||||
end:
|
||||
|
||||
in the last page of a file, if you want to make tab-width be ten in a
|
||||
file's buffer. The value you specify must be a Lisp object!
|
||||
It will be read, but not evaluated. So, to specify a string,
|
||||
you MUST use doublequotes. For "false", in variables whose
|
||||
meanings are true or false, you MUST write nil .
|
||||
|
||||
Two variable names are special: "mode" and "eval".
|
||||
Mode is used for specifying the major mode (as in Twenex Emacs).
|
||||
|
||||
mode: text
|
||||
|
||||
specifies text mode. Eval is used for requesting the evaluation
|
||||
of a Lisp expression; its value is ignored. Thus,
|
||||
|
||||
eval: (set-syntax-table lisp-mode-syntax-table)
|
||||
|
||||
causes Lisp Mode syntax to be used.
|
||||
|
||||
|
||||
Note that GNU Emacs looks for the string "Local variables:"
|
||||
whereas Twenex Emacs looks for "Local modes:". This incompatibility
|
||||
id deliberate, so that neither one will see local settings
|
||||
intended for the other.
|
||||
|
||||
** Lisp code libraries.
|
||||
|
||||
Libraries of commands, and init files, are written in Lisp.
|
||||
libraries conventionally have names ending in .el, while the
|
||||
init file is named .emacs and is in your home directory.
|
||||
|
||||
Use Meta-x load-library to load a library. Most standard libraries
|
||||
load automatically if you try to use the commands in them.
|
||||
|
||||
Meta-x byte-compile-file filename
|
||||
compiles the file into byte code which loads and runs faster
|
||||
than Lisp source code. The file of byte code is given a name
|
||||
made by appending "c" to the end of the input file name.
|
||||
|
||||
Meta-x byte-recompile-directory directoryname
|
||||
compiles all files in the specified directory (globbing not allowed)
|
||||
which have been compiled before but have been changed since then.
|
||||
|
||||
Meta-x load-library automatically checks for a compiled file
|
||||
before loading the source file.
|
||||
|
||||
Libraries once loaded do not retain their identity within GNU
|
||||
Emacs. Therefore, you cannot tell just what was loaded from a
|
||||
library, and you cannot un-load a library. Normally, libraries
|
||||
are written so that loading one has no effect on the editing
|
||||
operations that you would have used if you had not loaded the
|
||||
library.
|
||||
|
||||
** Dired features.
|
||||
|
||||
You can do dired on partial directories --- any pattern
|
||||
the shell can glob. Dired creates a buffer named after
|
||||
the directory or pattern, so you can dired several different
|
||||
directories. If you repeat dired on the same directory or
|
||||
pattern, it just reselects the same buffer. Use Meta-x Revert
|
||||
on that buffer to read in the current contents of the directory.
|
||||
|
||||
** Directory listing features.
|
||||
|
||||
C-x C-d now uses the default output format of `ls',
|
||||
which gives just file names in multiple columns.
|
||||
C-u C-x C-d passes the -l switch to `ls'.
|
||||
|
||||
Both read a directory spec from the minibuffer. It can
|
||||
be any pattern that the shell can glob.
|
||||
|
||||
** Compiling other programs.
|
||||
|
||||
Meta-x compile allows you to run make, or any other compilation
|
||||
command, underneath GNU Emacs. Error messages go into a buffer whose
|
||||
name is *compilation*. If you get error messages, you can use the
|
||||
command C-x ` (that is a backquote) to find the text of the next
|
||||
error message.
|
||||
|
||||
You must specify the command to be run as an argument to M-x compile.
|
||||
A default is placed in the minibuffer; you can kill it and start
|
||||
fresh, edit it, or just type Return if it is what you want.
|
||||
The default is the last compilation command you used; initially,
|
||||
it is "make -k".
|
||||
|
||||
** Searching multiple files.
|
||||
|
||||
Meta-x grep searches many files for a regexp by invoking grep
|
||||
and reading the output of grep into a buffer. You can then
|
||||
move to the text lines that grep found, using the C-x ` command
|
||||
just as after M-x compile.
|
||||
|
||||
** Running inferior shells.
|
||||
|
||||
Do Meta-x shell to make an inferior shell together with a buffer
|
||||
which serves to hold "terminal" input and output of the shell.
|
||||
The shell used is specified by the environment variable ESHELL,
|
||||
or by SHELL if ESHELL is not set.
|
||||
|
||||
Use C-h m whilst in the *shell* buffer to get more detailed info.
|
||||
|
||||
The inferior shell loads the file .emacs_csh or.emacs_sh
|
||||
(or similar using whatever name the shell has) when it starts up.
|
||||
|
||||
M-! executes a shell command in an inferior shell
|
||||
and displays the output from it. With a prefix argument,
|
||||
it inserts the output in the current buffer after dot
|
||||
and sets the mark after the output. The shell command
|
||||
gets /dev/null as its standard input.
|
||||
|
||||
M-| is like M-! but passes the contents of the region
|
||||
as input to the shell command. A prefix argument makes
|
||||
the output from the command replace the contents of the region.
|
||||
|
||||
** Sending mail.
|
||||
|
||||
Once you enter Mail Mode using C-x m or C-x 4 m or M-x mail,
|
||||
C-c becomes a prefix character for mail-related editing commands.
|
||||
C-c C-s is vital; that's how you send the message. C-c C-c sends
|
||||
and then switches buffers or kills the current window.
|
||||
Use C-h m to get a list of the others.
|
||||
|
||||
** Regular expressions.
|
||||
|
||||
GNU Emacs has regular expression facilities like those of most
|
||||
Unix editors, but more powerful:
|
||||
|
||||
*** -- + --
|
||||
|
||||
+ specifies repetition of the preceding expression 1 or more
|
||||
times. It is in other respect like *, which specifies repetition
|
||||
0 or more times.
|
||||
|
||||
*** -- ? --
|
||||
|
||||
? is like * but matches at most one repetition of the preceding
|
||||
expression.
|
||||
|
||||
*** -- \| --
|
||||
|
||||
\| specifies an alternative. Two regular expressions A and B with \| in
|
||||
between form an expression that matches anything that either A or B will
|
||||
match. Thus, "foo\|bar" matches either "foo" or "bar" but no other
|
||||
string.
|
||||
|
||||
\| applies to the larges possible surrounding expressions. Only a
|
||||
surrounding \( ... \) grouping can limit the grouping power of \|.
|
||||
|
||||
Full backtracking capability exists when multiple \|'s are used.
|
||||
|
||||
*** -- \( ... \) --
|
||||
|
||||
\( ... \) are a grouping construct that serves three purposes:
|
||||
|
||||
1. To enclose a set of \| alternatives for other operations.
|
||||
Thus, "\(foo\|bar\)x" matches either "foox" or "barx".
|
||||
2. To enclose a complicated expression for * to operate on.
|
||||
Thus, "ba\(na\)*" matches "bananana", etc., with any number
|
||||
of na's (zero or more).
|
||||
3. To mark a matched substring for future reference.
|
||||
|
||||
Application 3 is not a consequence of the idea of a parenthetical
|
||||
grouping; it is a separate feature which happens to be assigned as a
|
||||
second meaning to the same \( ... \) construct because there is no
|
||||
conflict in practice between the two meanings. Here is an explanation
|
||||
of this feature.
|
||||
|
||||
-- \digit --
|
||||
|
||||
After the end of a \( ... \) construct, the matcher remembers the
|
||||
beginning and end of the text matched by that construct. Then, later on
|
||||
in the regular expression, you can use \ followed by a digit to mean,
|
||||
``match the same text matched this time by the \( ... \) construct.''
|
||||
The first nine \( ... \) constructs that appear in a regular expression
|
||||
are assigned numbers 1 through 9 in order of their beginnings. \1
|
||||
through \9 can be used to refer to the text matched by the corresponding
|
||||
\( ... \) construct.
|
||||
|
||||
For example, "\(.*\)\1" matches any string that is composed of two
|
||||
identical halves. The "\(.*\)" matches the first half, which can be
|
||||
anything, but the \1 that follows must match the same exact text.
|
||||
|
||||
*** -- \` --
|
||||
|
||||
Matches the empty string, but only if it is at the beginning of the buffer.
|
||||
|
||||
*** -- \' --
|
||||
|
||||
Matches the empty string, but only if it is at the end of the buffer.
|
||||
|
||||
*** -- \b --
|
||||
|
||||
Matches the empty string, but only if it is at the beginning or end of
|
||||
a word. Thus, "\bfoo\b" matches any occurrence of "foo" as a separate word.
|
||||
"\bball\(s\|\)\b" matches "ball" or "balls" as a separate word.
|
||||
|
||||
*** -- \B --
|
||||
|
||||
Matches the empty string, provided it is NOT at the beginning or end of
|
||||
a word.
|
||||
|
||||
*** -- \< --
|
||||
|
||||
Matches the empty string, provided it is at the beginning of a word.
|
||||
|
||||
*** -- \> --
|
||||
|
||||
Matches the empty string, provided it is at the end of a word.
|
||||
|
||||
*** -- \w --
|
||||
|
||||
Matches any word-constituent character. The editor syntax table determines
|
||||
which characters these are.
|
||||
|
||||
*** -- \W --
|
||||
|
||||
Matches any character that is not a word-constituent.
|
||||
|
||||
*** -- \s<code> --
|
||||
|
||||
Matches any character whose syntax is <code>. <code> is a letter that
|
||||
represents a syntax code: thus, "w" for word constituent, "-" for
|
||||
whitespace, "(" for open-parenthesis, etc. Thus, "\s(" matches any
|
||||
character with open-parenthesis syntax.
|
||||
|
||||
*** -- \S<code> --
|
||||
|
||||
Matches any character whose syntax is not <code>.
|
||||
427
etc/DISTRIB
Normal file
427
etc/DISTRIB
Normal file
|
|
@ -0,0 +1,427 @@
|
|||
-*- text -*-
|
||||
The prices on the order form below EXPIRE on 30 June 1992
|
||||
|
||||
GNU Emacs availability information, January 1992
|
||||
Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to anyone to make or distribute
|
||||
verbatim copies of this document provided that the
|
||||
copyright notice and this permission notice are preserved.
|
||||
|
||||
GNU Emacs is legally owned by the Free Software Foundation, but we
|
||||
regard the foundation actually as its custodian on behalf of the
|
||||
public, since all software ought to be the common property of mankind.
|
||||
|
||||
The foundation permits everyone to have and run copies of GNU Emacs,
|
||||
at no charge, and to redistribute copies under certain conditions
|
||||
which are designed to make sure that that all modified versions of GNU
|
||||
Emacs remain as free as the versions we distribute. These conditions
|
||||
are stated in the document "GNU Emacs General Public License," a copy
|
||||
of which is required to be distributed with every copy of GNU Emacs.
|
||||
It is usually in a file named COPYING in the same directory as this
|
||||
file.
|
||||
|
||||
If you do not know anyone to get a copy of GNU Emacs from, you can
|
||||
order a tape from the Free Software Foundation. We distribute Emacs
|
||||
version 18 on mag tape in different formats for many machines. We also
|
||||
distribute nicely typeset copies of the Emacs user manual, Emacs Lisp
|
||||
Reference Manual, the Emacs reference card, etc. See the order form at
|
||||
the end of this file.
|
||||
|
||||
If you have Internet access, you can copy the latest Emacs
|
||||
distribution from host prep.ai.mit.edu. There are several ways to do
|
||||
this; see the file `FTP' in the same directory as this file for more
|
||||
information. Even better, get the latest version of the file from
|
||||
`/pub/gnu/GNUinfo/FTP' on prep.ai.mit.edu for the most current
|
||||
arrangements. It may also be possible to copy Emacs via uucp; the
|
||||
file `FTP' contains information on that too.
|
||||
|
||||
Emacs has been run on both Berkeley Unix and System V Unix, on a
|
||||
variety of types of cpu. It also works on VMS and on Apollo
|
||||
computers, though with some deficiencies that reflect problems in
|
||||
these operating systems. See the file MACHINES in this directory for
|
||||
a full list of machines that GNU Emacs has been tested on, with
|
||||
machine-specific installation notes and warnings.
|
||||
|
||||
Note that there is significant variation between Unix systems
|
||||
supposedly running the same version of Unix; it is possible that what
|
||||
works in GNU Emacs for me does not work on your system due to such an
|
||||
incompatibility. Since I must avoid reading Unix source code, I
|
||||
cannot even guess what such problems may exist.
|
||||
|
||||
GNU Emacs is distributed with no warranty (see the General Public
|
||||
License for full details, in the file COPYING in this directory), and
|
||||
neither I nor the Free Software Foundation promises any kind of
|
||||
support or assistance to users. The foundation keeps a list of people
|
||||
who are willing to offer support and assistance for hire. It is
|
||||
usually in a file named SERVICE in the same directory as this file.
|
||||
You get the latest version of the file from `/pub/gnu/GNUinfo/SERVICE' on
|
||||
prep.ai.mit.edu.
|
||||
|
||||
However, we plan to continue to improve GNU Emacs and keep it
|
||||
reliable, so please send me any complaints and suggestions you have.
|
||||
I will probably fix anything that I consider a malfunction. I may
|
||||
make improvements that are suggested, but I may choose not to.
|
||||
Improving Emacs is not my highest priority now.
|
||||
|
||||
If you are on the Internet, report bugs to
|
||||
bug-gnu-emacs@prep.ai.mit.edu; on UUCP, use the address
|
||||
...!uunet!prep.ai.mit.edu!bug-gnu-emacs. Otherwise, phone the
|
||||
foundation at the number listed below, or write to the address listed
|
||||
below. General questions about the GNU Project can be asked of
|
||||
gnu@prep.ai.mit.edu.
|
||||
|
||||
If you are a computer manufacturer, I encourage you to ship a copy of
|
||||
GNU Emacs with every computer you deliver. The same copying
|
||||
permission terms apply to computer manufacturers as to everyone else.
|
||||
You should consider making a donation to help support the GNU project;
|
||||
if you estimate what it would cost to distribute some commercial
|
||||
product and divide it by five, that is a good amount.
|
||||
|
||||
If you like GNU Emacs, please express your satisfaction with a
|
||||
donation: send me or the Foundation what you feel Emacs has been worth
|
||||
to you. If you are glad that I developed GNU Emacs and distribute it
|
||||
as freeware, rather than following the obstructive and antisocial
|
||||
practices typical of software developers, reward me. If you would
|
||||
like the Foundation to develop more free software, contribute.
|
||||
|
||||
Your donations will help to support the development of more useful
|
||||
software to be distributed on the same basis as GNU Emacs. Eventually
|
||||
we will have a complete imitation of the Unix operating system, called
|
||||
GNU (Gnu's Not Unix), which will run Unix user programs. For more
|
||||
information on GNU, see the file GNU in this directory.
|
||||
|
||||
Richard M Stallman
|
||||
Chief GNUisance,
|
||||
President of the Free Software Foundation
|
||||
|
||||
Free Software Foundation Order Form
|
||||
|
||||
This order form is effective 1 January 1992 - 30 June 1992
|
||||
|
||||
Prices and contents may change without notice.
|
||||
|
||||
Please allow six weeks for delivery (though it won't usually take that long).
|
||||
|
||||
All software and publications are distributed with permission to copy and to
|
||||
redistribute.
|
||||
|
||||
Texinfo source for each manual is on the appropriate tape. The prices for
|
||||
tapes do not include printed manuals.
|
||||
|
||||
All software and documentation from the Free Software Foundation is provided
|
||||
on an "as is" basis, with no warranty of any kind.
|
||||
|
||||
Contents of Tapes:
|
||||
|
||||
GNU Emacs Tape
|
||||
|
||||
The tape includes source code for:
|
||||
* GNU Emacs (the extensible, customizable, self-documenting, real-time display
|
||||
editor)
|
||||
* The GNU Emacs Manual, as Texinfo source
|
||||
* The GNU Termcap Manual, as Texinfo source (the GNU termcap library is
|
||||
included with GNU Emacs)
|
||||
* The GNU Emacs Lisp Reference Manual, as Texinfo source
|
||||
* Calc (the extensible, advanced desk calculator and mathematical tool that
|
||||
runs as part of GNU Emacs)
|
||||
* The Calc Manual, as Texinfo source
|
||||
* MIT Scheme (a dialect of Lisp)
|
||||
* T (Yale's implementation of Scheme)
|
||||
* Texinfo (beta-test of an enhanced Texinfo. Texinfo is GNU's structured
|
||||
documentation system, included with GNU Emacs. Texinfo is used to produce
|
||||
both on-line and printed documents.)
|
||||
* The Texinfo Manual, as Texinfo source
|
||||
* texi2roff (for printing Texinfo source with [nt]roff)
|
||||
* Data Compression Software (to uncompress source on the tape)
|
||||
|
||||
GNU Languages Tape
|
||||
|
||||
The tape includes source code for:
|
||||
* GCC 1 (the GNU C Compiler, including COFF support)
|
||||
* The GCC Manual, as Texinfo source (not yet on our order form)
|
||||
* G++ (the C++ front end to GCC)
|
||||
* The GNU G++ Users Guide, as Texinfo source (not yet published on paper)
|
||||
* libg++ (the G++ class library)
|
||||
* NIH Class Library (formerly known as OOPS)
|
||||
* Gas (the GNU Assembler)
|
||||
* GNU binary file utilities (ar, gprof, ld, nm, size, strip, & ranlib)
|
||||
* dld (a dynamic linker)
|
||||
* COFF support for GNU software tools
|
||||
* Flex (Vern Paxson's fast rewrite of lex)
|
||||
* Bison (a free, compatible replacement for yacc)
|
||||
* The Bison Manual, as Texinfo source
|
||||
* GDB 3.5 (The GNU source-level C debugger)
|
||||
* The GDB Manual, as Texinfo source
|
||||
* GNU make
|
||||
* The GNU Make Manual, as Texinfo source
|
||||
* GNU indent
|
||||
* Gawk (the GNU implementation of the AWK programming language)
|
||||
* The Gawk Manual, as Texinfo source
|
||||
* GNU Smalltalk (the GNU implementation of this programming language system)
|
||||
* Perl (a programming language interpreter)
|
||||
* gperf (a perfect hash-table generator)
|
||||
* ae (works with GCC to produce more complete profiling information)
|
||||
* f2c (a FORTRAN to C translator)
|
||||
* gdbm library (GNU implementation of the standard dbm & ndbm libraries)
|
||||
* texi2roff (for printing Texinfo source with [nt]roff)
|
||||
* Data Compression Software (to uncompress source on the tape)
|
||||
|
||||
GNU Experimental Tape
|
||||
|
||||
This tape will not be ready until March 1992. The tape's source code
|
||||
will include:
|
||||
* GCC 2 (the GNU C/C++/Objective-C Compiler with many new features)
|
||||
* GDB 4 (The GNU source-level C debugger)
|
||||
* BFD ((Binary File Descriptor Library)
|
||||
* GNU C Library (POSIX.1 compliant, upward compatible with 4.3 BSD & System V)
|
||||
* GNU Graphics (graph, plot, plot2ps, et al.)
|
||||
|
||||
GNU Utilities Tape
|
||||
|
||||
The tape includes source code for:
|
||||
* Bash (GNU's Bourne Again SHell)
|
||||
* Groff (GNU troff & pic, eqn, tbl, refer; -man, -ms, -mm macros; & drivers)
|
||||
* GNU tar & cpio
|
||||
* GNU diff, grep, egrep, fgrep
|
||||
* patch
|
||||
* RCS (Revision Control System)
|
||||
* CVS (Concurrent Version System)
|
||||
* GNU fileutils (chgrp, chmod, chown, cp, dd, df, du, install, ln, ls, mkdir,
|
||||
mkfifo, mknod, mv, mvdir, rm, rmdir, & touch)
|
||||
* GNU shellutils (basename, date, dirname, env, expr, groups, id, logname,
|
||||
nice, nohup, pathchk, printenv, printf, sleep, stty, tee, test, tty, uname,
|
||||
whoami, & yes)
|
||||
* GNU textutils (cat, cmp, comm, csplit, cut, expand, fold, head, join, paste,
|
||||
pr, sort, split, sum, tac, tail, unexpand, uniq, & wc)
|
||||
* Ghostscript (a Postscript interpreter)
|
||||
* Gnuplot (an interactive mathematical plotting program)
|
||||
* GNU m4, sed, & find
|
||||
* elvis (a clone of the vi/ex Unix editor)
|
||||
* screen (a terminal multiplexor that allows you to handle several independent
|
||||
``screens'' (ttys) on a single physical terminal)
|
||||
* GNU time & tput
|
||||
* ms (MandelSpawn, a parallel Mandelbrot program for the X window system)
|
||||
* GNU Chess (a chess playing program with an interface to X)
|
||||
* Nethack (a rogue-like game)
|
||||
* GNU GO (the GNU implementation of the game of GO)
|
||||
* the freed files from the 4.3BSD-Tahoe distribution
|
||||
* GNU make
|
||||
* The GNU Make Manual, as Texinfo source
|
||||
* texi2roff (for printing Texinfo source with [nt]roff)
|
||||
* Data Compression Software (to uncompress source on the tape)
|
||||
|
||||
X11R5 Required Tape
|
||||
|
||||
This tape has source code for the required MIT X Window System X11R5,
|
||||
including core software and documentation, and contributed client software.
|
||||
|
||||
X11R5 Optional Tape
|
||||
|
||||
This tape has source code for the optional MIT X Window System X11R5,
|
||||
including contributed software, libraries, games, Andrew and toolkits.
|
||||
|
||||
Quantity Price Item
|
||||
|
||||
|
||||
For Unix systems, on 1600 bpi reel-to-reel 9-track 1/2" tape in Unix tar format
|
||||
(tape contents described above):
|
||||
|
||||
________ $200 GNU Emacs Tape
|
||||
|
||||
________ $200 GNU Languages Tape
|
||||
|
||||
________ $200 GNU Experimental Tape (not ready until March 1992)
|
||||
|
||||
________ $200 GNU Utilities Tape
|
||||
|
||||
________ $200 X11R5 Required Tape
|
||||
|
||||
________ $200 X11R5 Optional Tape
|
||||
|
||||
|
||||
For Suns and some other Unix Systems, on QIC-24 DC300XLP 1/4 inch
|
||||
cartridge tape, Unix tar format (tape contents described above):
|
||||
|
||||
________ $210 GNU Emacs Tape
|
||||
|
||||
________ $210 GNU Languages Tape
|
||||
|
||||
________ $210 GNU Experimental Tape (not ready until March 1992)
|
||||
|
||||
________ $210 GNU Utilities Tape
|
||||
|
||||
________ $210 X11R5 Required Tape
|
||||
|
||||
________ $210 X11R5 Optional Tape
|
||||
|
||||
|
||||
For HP Systems, on 16-track DC600HC 1/4 inch cartridge tape, Unix tar format
|
||||
(tape contents described above):
|
||||
|
||||
________ $230 GNU Emacs Tape
|
||||
|
||||
________ $230 GNU Languages Tape
|
||||
|
||||
________ $230 GNU Experimental Tape (not ready until March 1992)
|
||||
|
||||
________ $230 GNU Utilities Tape
|
||||
|
||||
________ $230 X11R5 Required Tape
|
||||
|
||||
________ $230 X11R5 Optional Tape
|
||||
|
||||
|
||||
For IBM RS/6000 Systems, on DC600A 1/4 inch cartridge tape Unix tar format
|
||||
(tape contents described above) (the GNU Languages Tape is not yet available
|
||||
for the RS/6000):
|
||||
|
||||
________ $215 GNU Emacs Tape, plus executable files of Emacs
|
||||
|
||||
________ $215 GNU Experimental Tape (not ready until March 1992)
|
||||
|
||||
________ $215 GNU Utilities Tape
|
||||
|
||||
________ $215 X11R5 Required Tape
|
||||
|
||||
________ $215 X11R5 Optional Tape
|
||||
|
||||
|
||||
For VMS systems, on 1600 bpi reel-to-reel 9-track 1/2" tape in VMS BACKUP (aka
|
||||
interchange format):
|
||||
|
||||
________ $195 GNU Emacs source code and binaries. None of the other
|
||||
software on the GNU Emacs Tape, described above, is included.
|
||||
|
||||
________ $195 GNU C compiler source code and binaries. Includes Bison and
|
||||
GAS. None of the other software on the GNU Languages Tape,
|
||||
described above, is included.
|
||||
|
||||
|
||||
The following manuals are all bound to lie open, flat on a table:
|
||||
|
||||
________ $20 GNU Emacs manual, unit price for 1 to 5 copies.
|
||||
~280 pages with a reference card, phototypeset and
|
||||
offset printed.
|
||||
|
||||
________ $13 GNU Emacs manuals, unit price for 6 or more.
|
||||
|
||||
________ $50 A single GNU Emacs Lisp Reference Manual, ~550 pages,
|
||||
offset printed, spiral bound.
|
||||
|
||||
________ $200 A box of 5 GNU Emacs Lisp Reference Manuals.
|
||||
|
||||
________ $50 Calc Manual, ~590 pages. Calc is an extensible, advanced desk
|
||||
calculator and mathematical tool that runs under GNU Emacs.
|
||||
|
||||
________ $15 GDB Manual, ~170 pages, with a reference card.
|
||||
|
||||
________ $15 Texinfo Manual, ~220 pages. Texinfo is GNU's structured
|
||||
documentation system, included with GNU Emacs. Texinfo is
|
||||
used to produce both on-line and printed documents. This
|
||||
manual describes how to write Texinfo documents.
|
||||
|
||||
________ $10 Termcap Manual, ~60 pages. Documents the termcap library and
|
||||
GNU's extensions to it. The GNU termcap library is included
|
||||
with GNU Emacs.
|
||||
|
||||
________ $10 Bison Manual, ~100 pages.
|
||||
|
||||
________ $15 Gawk Manual, ~200 pages.
|
||||
|
||||
________ $15 Make Manual, ~120 pages.
|
||||
|
||||
|
||||
The following reference cards:
|
||||
|
||||
________ $1 One GNU Emacs reference card, without the manual.
|
||||
|
||||
________ $5 Packet of ten GNU Emacs reference cards.
|
||||
|
||||
________ $1 One GDB reference card, without the manual.
|
||||
|
||||
________ $5 Packet of ten GDB reference cards.
|
||||
|
||||
|
||||
________ Subtotal
|
||||
--------
|
||||
|
||||
________ In Massachusetts: add 5% sales tax, or give tax exempt number.
|
||||
|
||||
We pay for shipping via UPS ground transportation in the contiguous 48 states
|
||||
and Canada.
|
||||
|
||||
________ In Alaska, Hawaii, or Puerto Rico, for shipping:
|
||||
- For Emacs Lisp Reference and Emacs Calc manuals, add $5 each,
|
||||
or $20 per box. For all other items, add $5 base charge,
|
||||
then $1 per item except reference cards.
|
||||
|
||||
If outside of U.S., Canada and Puerto Rico, for shipping costs:
|
||||
- for tapes or unboxed manuals, please add $15 base
|
||||
charge, and then add $15 more for each tape or unboxed
|
||||
manual (not reference cards) in the order:
|
||||
________ Shipping cost for tapes and unboxed manuals = $15 + $15 * n;
|
||||
- for each box of Emacs Lisp Reference manuals,
|
||||
________ please add $70.
|
||||
|
||||
________ Optional tax deductible donation.
|
||||
|
||||
|
||||
________ Total paid
|
||||
--------
|
||||
|
||||
Orders are filled upon receipt of check or money order. We do not have the
|
||||
staff to handle the billing of unpaid orders. Please help keep our lives
|
||||
simple by including your payment with your order.
|
||||
|
||||
Please make checks payable to: "Free Software Foundation".
|
||||
|
||||
Please mail orders to:
|
||||
|
||||
Free Software Foundation, Inc.
|
||||
675 Massachusetts Avenue
|
||||
Cambridge, MA 02139
|
||||
USA
|
||||
|
||||
+1 617-876-3296
|
||||
|
||||
|
||||
This Order Form is EFFECTIVE 1 January 1992 - 30 June 1992
|
||||
|
||||
|
||||
|
||||
Name:
|
||||
----------------------------------------------------------------
|
||||
|
||||
Mail Stop/Dept. Name
|
||||
-------------------------------------------------
|
||||
|
||||
Organization:
|
||||
--------------------------------------------------------
|
||||
|
||||
Street Address:
|
||||
------------------------------------------------------
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
City / State / Province:
|
||||
---------------------------------------------
|
||||
|
||||
Zip Code / Postal Code / Country:
|
||||
------------------------------------
|
||||
|
||||
In case of a problem with your order, or for overseas customs agents,
|
||||
please add your voice telephone number (not your FAX number):
|
||||
|
||||
|
||||
----------------------------------------
|
||||
|
||||
For orders outside the US: Orders MUST be paid in US dollars. You are
|
||||
responsible for paying all duties, tariffs, and taxes. If you refuse
|
||||
to pay the charges, the shipper will return or abandon your order.
|
||||
|
||||
Please write the telephone number that you want custom agents to call
|
||||
in the space provided above.
|
||||
|
||||
This Order Form is EFFECTIVE 1 January 1992 - 30 June 1992
|
||||
266
etc/FTP
Normal file
266
etc/FTP
Normal file
|
|
@ -0,0 +1,266 @@
|
|||
-*- text -*-
|
||||
How to get GNU Software by Internet FTP or by UUCP. Last updated 20 Jan 92.
|
||||
|
||||
* No Warranties
|
||||
|
||||
We distribute software in the hope that it will be useful, but
|
||||
without any warranty. No author or distributor of this software
|
||||
accepts responsibility to anyone for the consequences of using it or
|
||||
for whether it serves any particular purpose or works at all, unless
|
||||
he says so in writing.
|
||||
|
||||
* Updates
|
||||
|
||||
If you find this file in the Emacs distribution, there is a chance
|
||||
it is out of date. If you plan to FTP files from prep.ai.mit.edu,
|
||||
you might as well start by FTPing the current version of this file,
|
||||
which is `/pub/gnu/GNUinfo/FTP'.
|
||||
|
||||
* FTPing GNU Software
|
||||
|
||||
** GNU Emacs and How To FTP It
|
||||
|
||||
If you are on the Internet (see also "** Alternative Internet FTP
|
||||
Sources" below), you can at present copy the latest distribution
|
||||
version of GNU Emacs from the file /pub/gnu/emacs-M.N.tar on host
|
||||
prep.ai.mit.edu (or the file /pub/gnu/emacs-M.N.tar.Z which has been
|
||||
run through compress after tar). M and N standard for version
|
||||
numbers; look at a listing of the directory through ftp to see what
|
||||
version is available. These files are about 11 and 4 megabytes long,
|
||||
respectively. After you unpack the distribution, be sure to look at
|
||||
the files README and INSTALL.
|
||||
|
||||
Because of difficulties in transferring large files, sometimes a split
|
||||
version of the tar file is created. This is a directory named
|
||||
/pub/gnu/emacs-M.N.tar-split or perhaps
|
||||
/pub/gnu/emacs-M.N.tar.Z-split, containing files of 100000 characters
|
||||
each. There is generally no trouble in ftping files of this size.
|
||||
They can be combined with cat to make a tar file or compressed tar
|
||||
file.
|
||||
|
||||
ALWAYS USE BINARY/IMAGE MODE TO TRANSFER THESE FILES!
|
||||
Text mode does not work for tar files or compressed files.
|
||||
|
||||
Some ftp'ers have found it necessary for successful file transfer:
|
||||
- to explicitly use prep.ai.mit.edu internet address:
|
||||
18.71.0.38 (as of 11 April 89)
|
||||
|
||||
Files of differences from previous widely distributed GNU Emacs
|
||||
versions to the present version are also available on prep.ai.mit.edu
|
||||
under names of the form emacs.diff-OO.OO-NN.NN in directory /pub/gnu.
|
||||
These are made with diff -rc2. Sometimes there are compressed
|
||||
versions of these difference files as well; their names have .Z
|
||||
appended.
|
||||
|
||||
The Emacs manual in source form is included in the distribution.
|
||||
The dvi file produced by TeX is not included, but a copy may be
|
||||
available for ftp under the name /pub/gnu/emacs.dvi.
|
||||
|
||||
The Emacs Lisp Reference Manual is in a separate file:
|
||||
/pub/gnu/lispref.tar.Z.
|
||||
|
||||
** VMS versions of GNU Emacs and How To FTP It.
|
||||
You can anonymously ftp a VMS version of GNU emacs from:
|
||||
- ddvax.llnl.gov.
|
||||
- VMSA.OAC.UCI.EDU or VMSD.OAC.UCI.EDU.
|
||||
- RIGEL.EFD.LTH.SE [130.235.48.3].
|
||||
- ctrsci.cc.utah.edu. The 00readme.txt file gives details.
|
||||
- cc.utah.edu [128.110.8.24]. User anonymous, pass guest. It
|
||||
has already been compiled and linked so it is ready to run. You will
|
||||
need to ftp the reblock.for program to reblock the saveset so that the
|
||||
backup utility can restore that saveset. Do a backup/list on the
|
||||
ftp'd saveset and catch the header info that backup puts out. It
|
||||
contains the correct block size to reblock the file to. Remember to
|
||||
ftp it in binary mode.
|
||||
|
||||
** A VMS version of G++ and How To FTP It.
|
||||
|
||||
mango.rsmas.miami.edu has a VMS version of the G++ compiler. Contact
|
||||
angel@flipper.miami.edu (angel li) for details.
|
||||
|
||||
** A VMS version of GCC and How To FTP It.
|
||||
|
||||
Jonathan Corbet has made the "bootstrap files" for the GNU C compiler
|
||||
available for pseudo-anonymous FTP on rdss.ucar.edu. The full gcc
|
||||
sources are also available, for anybody who wants to start from scratch.
|
||||
|
||||
Jonathan Corbet also requests that you please limit your access to
|
||||
outside the hours of 8-6 (mountain time) on weekdays. RDSS is a
|
||||
*very* busy machine during the day. Jonathan notes, "I don't think I
|
||||
have to tell you what will happen if my users feel they are being
|
||||
slowed down by outside people grabbing software."
|
||||
|
||||
The procedure is this: FTP to rdss.ucar.edu (128.117.80.1), and log in
|
||||
with a username of FTP, password FTP. Cd into the [.gcc] directory,
|
||||
and grab either or both of these files:
|
||||
bootstrap.bck The bootstrap files -- not much more than the
|
||||
.exe files. About 1.3 mb.
|
||||
gcc.bck The full-blown gcc source code. About 5mb.
|
||||
Both of these files are backup savesets, and should thus be grabbed
|
||||
in binary mode.
|
||||
|
||||
SPAN people can grab the same files from rdss::du:[ftp.gcc]. If your
|
||||
node database does not know about rdss, use 9452 instead.
|
||||
|
||||
Jonathan Corbet is with the
|
||||
National Center for Atmospheric Research, Field Observing Facility
|
||||
Internet: corbet@rdss.ucar.edu
|
||||
SPAN: rdss::corbet (rdss = 9452)
|
||||
Usenet: ...!ncar!rdss!corbet
|
||||
|
||||
** Other GNU Software and How To FTP It.
|
||||
|
||||
This software is available on prep.ai.mit.edu under directory
|
||||
/pub/gnu. Files containing diff from previous versions are often
|
||||
available. Compressed versions of the tar or diff files are often
|
||||
available (indicated by a .Z suffix). Much of this software is in
|
||||
beta test (probably still buggy), and is being made available for use
|
||||
by hackers who like to test software. M.N indicates a version number.
|
||||
diff files to convert between versions (like those used for GNU
|
||||
Emacs), exist for some of these programs. Some programs have misc
|
||||
suport files as well. Have a look on prep.ai.mit.edu to see which
|
||||
ones.
|
||||
|
||||
GNU Assembler (gas) gas-M.N.tar.Z Released
|
||||
GNU Bash bash-M.N.tar.Z BETA TEST
|
||||
GNU Bison bison-M.N.tar.Z Released
|
||||
GNU C Compiler (gcc) gcc.tar-M.N.Z Late BETA TEST
|
||||
GNU C++ Compiler (g++) g++.tar-M.N.Z BETA TEST
|
||||
GNU C++ Library libg++-M.N.tar.Z BETA TEST
|
||||
GNU cpio cpio-M.N.tar.Z BETA TEST
|
||||
GNU Emacs Lisp Reference Manual lispref.tar.Z Released
|
||||
GNU AWK (gawk) gawk-M.N.tar.Z Released
|
||||
GNU debugger (gdb) gdb-M.N.tar.Z Released
|
||||
GNU Make make-M.N.tar.Z Released
|
||||
GNU ld, ar, gprof, size, nm and strip
|
||||
binutils.tar.Z Released
|
||||
GNU cat chmod cmp cp cut dd dir du head install ln ls
|
||||
mkdir mkfifo mv paste rm rmdir tac tail touch vdir
|
||||
fileutils-M.N.tar.Z BETA TEST
|
||||
GNU Diff diff-M.N.tar.Z Released
|
||||
GNU e?grep grep-M.N.tar.Z Released
|
||||
GNU fgrep fgrep-M.N.tar.Z BETA TEST
|
||||
GNU find find-M.N.tar.Z BETA TEST
|
||||
GNU finger finger-M.N.tar.Z BETA TEST
|
||||
GNU Ghostscript ghostscript-M.N.tar.Z
|
||||
& font ghostscript*tar.Z files BETA TEST
|
||||
GNU gdbm gdbm-M.N.tar.Z BETA TEST
|
||||
GNU Go gnugo-M.N.tar.Z BETA TEST
|
||||
GNU groff groff-M.N.tar.Z BETA TEST
|
||||
GNU indent indent-M.N.tar.Z BETA TEST
|
||||
GNU malloc malloc.tar.Z BETA TEST
|
||||
GNU tar (to unpacl .tar files) tar-M.N.tar.Z
|
||||
and tar-M-N.shar BETA TEST
|
||||
GNU m4 m4.tar.Z BETA TEST
|
||||
GNU sed sed-M.N.tar.Z BETA TEST
|
||||
GNU Smalltalk smalltalk-M.N.tar.Z BETA TEST
|
||||
GNU Chess gnuchess-M.N.tar.Z Released
|
||||
GNU Buttons & Designs button.M.N.ps Released
|
||||
|
||||
and these packages which are not FSF software but work with
|
||||
them and are part of GNU:
|
||||
|
||||
Concurrent Version System cvs-M.N.tar.Z
|
||||
compress (to undo .Z files) compress.shar and compress.tar
|
||||
dirent dirent.tar.Z
|
||||
(directory reader for sysV 3.2)
|
||||
elvis (a vi clone) elvis.M.N.O.tar.Z
|
||||
Flex (a faster lex) flex-M.N.tar.Z
|
||||
gnuplot gnuplot-M.N.tar.Z
|
||||
The jargon file jargon.text.Z
|
||||
(definitions of terms used by hackers)
|
||||
NIH C++ Class Library nihcl-M.N.tar.Z
|
||||
Perl perl-M.N.tar.Z
|
||||
Revision Control System rcs.tar.Z
|
||||
Texi2roff texi2roff.shar.Z
|
||||
|
||||
** TeX and How to FTP It
|
||||
|
||||
We don't distribute TeX now, but it is free software.
|
||||
|
||||
You can get TeX sources via anonymous FTP from labrea.stanford.edu in
|
||||
pub/tex. The directory pub/tex/unix3.0 probably contains what you
|
||||
want, but see pub/tex/README to be sure. The most recent incarnation
|
||||
of the LaTeX macros are in labrea:pub/tex/latex. If you'd like to
|
||||
support TUG and/or don't have access to the Internet, then write to
|
||||
elisabet@max.acs.washington.edu about getting their tape distribution.
|
||||
|
||||
** Scheme and How to FTP It
|
||||
|
||||
The latest distribution version of C Scheme is on the machine
|
||||
zurich.ai.mit.edu. To obtain a "tarred" copy of this directory,
|
||||
telnet to zurich.ai.mit.edu and log in as scheme (password: scheme).
|
||||
A file called dist.tar will be created (if there isn't one already),
|
||||
and you will be given a choice of the file transfer program to run (of
|
||||
all the ones supported by zurich). It should be self-explanatory (ha,
|
||||
ha! [try ? for help]).
|
||||
|
||||
Read the files INSTALL and README in the top level C Scheme directory.
|
||||
|
||||
** Alternative Internet FTP Sources
|
||||
|
||||
The administrators of louie.udel.edu maintains copies of GNU Emacs and
|
||||
the compress program. The files are available via anonymous ftp under
|
||||
directory ~ftp/gnu.
|
||||
|
||||
Emacs and other GNU programs may be available via anonymous ftp from
|
||||
these US sites: gatekeeper.dec.com, labrea.stanford.edu,
|
||||
wuarchive.wustl.edu, a.cs.uiuc.edu, itstd.sri.com, scam.berkeley.edu,
|
||||
jaguar.utah.edu, archive.cis.ohio-state.edu, and ftp.uu.net. And
|
||||
these foreign sites: mcsun.eu.net (Europe - Internet address
|
||||
192.16.202.1), sunic.sunet.se (Sweden), hp4nl.nluug.nl (Netherlands -
|
||||
192.16.202.2), funic.funet.fi (Finland - 128.214.6.100), freja.diku.dk
|
||||
(Denmark - 129.142.96.1), ftp.cs.titech.ac.jp (Japan - nemacs, the
|
||||
japanese port of GNU Emacs, is under ~ftp/JAPAN). Please do NOT use a
|
||||
site outside your country, until you have checked all sites inside
|
||||
your country, and then your continent. Trans-ocean TCP/IP links are
|
||||
very expensive and usually very low speed.
|
||||
|
||||
* Getting GNU software in Great Britain
|
||||
|
||||
jpo@cs.nott.ac.uk is willing to distribute those GNU sources he has
|
||||
available. The smaller items are available from the info-server (send
|
||||
to info-server@cs.nott.ac.uk) the larger items by negotiation. Due to
|
||||
communication costs this service is only available within the UK.
|
||||
|
||||
BattenIG@computer-science.birmingham.ac.uk (aka
|
||||
I.G.Batten@fulcrum.bt.co.uk) is also willing to distribute those GNU
|
||||
sources he has available. He can also write tapes in qic-21 and
|
||||
qic-24 formats.
|
||||
|
||||
lmjm@doc.ic.ac.uk is willing to distribute those GNU sources he has
|
||||
available along with comp.sources.unix, comp.sources.x, X windows et
|
||||
al. The archive, on src.doc.ic.ac.uk in directory /gnu, is available
|
||||
via ftp (on 146.169.3.7), niftp over janet (000005102000), ftam and
|
||||
uucp. All items are available using uucp, NIFTP over JANET to
|
||||
src.doc.ic.ac.uk:/gnu. Due to communication costs this service is
|
||||
only available within the UK. Mail to info-server@doc.ic.ac.uk for
|
||||
details. He can also write sun cartridge or exabyte tapes.
|
||||
|
||||
* Getting GNU software via UUCP
|
||||
|
||||
OSU is distributing via UUCP: most GNU software, MIT C Scheme,
|
||||
Compress, News, RN, NNTP, Patch, some Appletalk stuff, some of the
|
||||
Internet Requests For Comment (RFC) et al.. See their periodic
|
||||
postings on the Usenet newsgroup comp.sources.d for informational
|
||||
updates. Current details from <staff@cis.ohio-state.edu> or
|
||||
<...!osu-cis!uucp>.
|
||||
|
||||
Information on how to uucp some GNU programs is available via
|
||||
electronic mail from: uunet!hutch!barber, hqda-ai!merlin, acornrc!bob,
|
||||
hao!scicom!qetzal!upba!ugn!nepa!denny, bigtex!james (aka
|
||||
james@bigtex.cactus.org), ncar!noao!asuvax!hrc!dan, oli-stl!root,
|
||||
src@scuzzy.in-berlin.de (in Germany) and info@ftp.uu.net.
|
||||
|
||||
* If You Like The Software
|
||||
|
||||
If you like the software developed and distributed by the Free
|
||||
Software Foundation, please express your satisfaction with a donation.
|
||||
Your donations will help to support the Foundation and make our future
|
||||
efforts successful, including a complete development and operating
|
||||
system, called GNU (Gnu's Not Un*x), which will run Un*x user
|
||||
programs. For more information on GNU and the Foundation, contact us
|
||||
at the above address.
|
||||
|
||||
Ordering a distribution tape from the Foundation is often a good
|
||||
way to bring your company or university to make a donation.
|
||||
475
etc/GNU
Normal file
475
etc/GNU
Normal file
|
|
@ -0,0 +1,475 @@
|
|||
The GNU Manifesto
|
||||
|
||||
Copyright (C) 1985 Richard M. Stallman
|
||||
(Copying permission notice at the end.)
|
||||
|
||||
What's GNU? Gnu's Not Unix!
|
||||
|
||||
GNU, which stands for Gnu's Not Unix, is the name for the complete
|
||||
Unix-compatible software system which I am writing so that I can give it
|
||||
away free to everyone who can use it. Several other volunteers are helping
|
||||
me. Contributions of time, money, programs and equipment are greatly
|
||||
needed.
|
||||
|
||||
So far we have an Emacs text editor with Lisp for writing editor commands,
|
||||
a source level debugger, a yacc-compatible parser generator, a linker, and
|
||||
around 35 utilities. A shell (command interpreter) is nearly completed. A
|
||||
new portable optimizing C compiler has compiled itself and may be released
|
||||
this year. An initial kernel exists but many more features are needed to
|
||||
emulate Unix. When the kernel and compiler are finished, it will be
|
||||
possible to distribute a GNU system suitable for program development. We
|
||||
will use @TeX{} as our text formatter, but an nroff is being worked on. We
|
||||
will use the free, portable X window system as well. After this we will
|
||||
add a portable Common Lisp, an Empire game, a spreadsheet, and hundreds of
|
||||
other things, plus on-line documentation. We hope to supply, eventually,
|
||||
everything useful that normally comes with a Unix system, and more.
|
||||
|
||||
GNU will be able to run Unix programs, but will not be identical to Unix.
|
||||
We will make all improvements that are convenient, based on our experience
|
||||
with other operating systems. In particular, we plan to have longer
|
||||
filenames, file version numbers, a crashproof file system, filename
|
||||
completion perhaps, terminal-independent display support, and perhaps
|
||||
eventually a Lisp-based window system through which several Lisp programs
|
||||
and ordinary Unix programs can share a screen. Both C and Lisp will be
|
||||
available as system programming languages. We will try to support UUCP,
|
||||
MIT Chaosnet, and Internet protocols for communication.
|
||||
|
||||
GNU is aimed initially at machines in the 68000/16000 class with virtual
|
||||
memory, because they are the easiest machines to make it run on. The extra
|
||||
effort to make it run on smaller machines will be left to someone who wants
|
||||
to use it on them.
|
||||
|
||||
To avoid horrible confusion, please pronounce the `G' in the word `GNU'
|
||||
when it is the name of this project.
|
||||
|
||||
|
||||
Who Am I?
|
||||
|
||||
I am Richard Stallman, inventor of the original much-imitated EMACS editor,
|
||||
formerly at the Artificial Intelligence Lab at MIT. I have worked
|
||||
extensively on compilers, editors, debuggers, command interpreters, the
|
||||
Incompatible Timesharing System and the Lisp Machine operating system. I
|
||||
pioneered terminal-independent display support in ITS. Since then I have
|
||||
implemented one crashproof file system and two window systems for Lisp
|
||||
machines, and designed a third window system now being implemented; this
|
||||
one will be ported to many systems including use in GNU. [Historical note:
|
||||
The window system project was not completed; GNU now plans to use the
|
||||
X window system.]
|
||||
|
||||
|
||||
Why I Must Write GNU
|
||||
|
||||
I consider that the golden rule requires that if I like a program I must
|
||||
share it with other people who like it. Software sellers want to divide
|
||||
the users and conquer them, making each user agree not to share with
|
||||
others. I refuse to break solidarity with other users in this way. I
|
||||
cannot in good conscience sign a nondisclosure agreement or a software
|
||||
license agreement. For years I worked within the Artificial Intelligence
|
||||
Lab to resist such tendencies and other inhospitalities, but eventually
|
||||
they had gone too far: I could not remain in an institution where such
|
||||
things are done for me against my will.
|
||||
|
||||
So that I can continue to use computers without dishonor, I have decided to
|
||||
put together a sufficient body of free software so that I will be able to
|
||||
get along without any software that is not free. I have resigned from the
|
||||
AI lab to deny MIT any legal excuse to prevent me from giving GNU away.
|
||||
|
||||
|
||||
Why GNU Will Be Compatible with Unix
|
||||
|
||||
Unix is not my ideal system, but it is not too bad. The essential features
|
||||
of Unix seem to be good ones, and I think I can fill in what Unix lacks
|
||||
without spoiling them. And a system compatible with Unix would be
|
||||
convenient for many other people to adopt.
|
||||
|
||||
|
||||
How GNU Will Be Available
|
||||
|
||||
GNU is not in the public domain. Everyone will be permitted to modify and
|
||||
redistribute GNU, but no distributor will be allowed to restrict its
|
||||
further redistribution. That is to say, proprietary modifications will not
|
||||
be allowed. I want to make sure that all versions of GNU remain free.
|
||||
|
||||
|
||||
Why Many Other Programmers Want to Help
|
||||
|
||||
I have found many other programmers who are excited about GNU and want to
|
||||
help.
|
||||
|
||||
Many programmers are unhappy about the commercialization of system
|
||||
software. It may enable them to make more money, but it requires them to
|
||||
feel in conflict with other programmers in general rather than feel as
|
||||
comrades. The fundamental act of friendship among programmers is the
|
||||
sharing of programs; marketing arrangements now typically used essentially
|
||||
forbid programmers to treat others as friends. The purchaser of software
|
||||
must choose between friendship and obeying the law. Naturally, many decide
|
||||
that friendship is more important. But those who believe in law often do
|
||||
not feel at ease with either choice. They become cynical and think that
|
||||
programming is just a way of making money.
|
||||
|
||||
By working on and using GNU rather than proprietary programs, we can be
|
||||
hospitable to everyone and obey the law. In addition, GNU serves as an
|
||||
example to inspire and a banner to rally others to join us in sharing.
|
||||
This can give us a feeling of harmony which is impossible if we use
|
||||
software that is not free. For about half the programmers I talk to, this
|
||||
is an important happiness that money cannot replace.
|
||||
|
||||
|
||||
How You Can Contribute
|
||||
|
||||
I am asking computer manufacturers for donations of machines and money.
|
||||
I'm asking individuals for donations of programs and work.
|
||||
|
||||
One consequence you can expect if you donate machines is that GNU will run
|
||||
on them at an early date. The machines should be complete, ready to use
|
||||
systems, approved for use in a residential area, and not in need of
|
||||
sophisticated cooling or power.
|
||||
|
||||
I have found very many programmers eager to contribute part-time work for
|
||||
GNU. For most projects, such part-time distributed work would be very hard
|
||||
to coordinate; the independently-written parts would not work together.
|
||||
But for the particular task of replacing Unix, this problem is absent. A
|
||||
complete Unix system contains hundreds of utility programs, each of which
|
||||
is documented separately. Most interface specifications are fixed by Unix
|
||||
compatibility. If each contributor can write a compatible replacement for
|
||||
a single Unix utility, and make it work properly in place of the original
|
||||
on a Unix system, then these utilities will work right when put together.
|
||||
Even allowing for Murphy to create a few unexpected problems, assembling
|
||||
these components will be a feasible task. (The kernel will require closer
|
||||
communication and will be worked on by a small, tight group.)
|
||||
|
||||
If I get donations of money, I may be able to hire a few people full or
|
||||
part time. The salary won't be high by programmers' standards, but I'm
|
||||
looking for people for whom building community spirit is as important as
|
||||
making money. I view this as a way of enabling dedicated people to devote
|
||||
their full energies to working on GNU by sparing them the need to make a
|
||||
living in another way.
|
||||
|
||||
|
||||
Why All Computer Users Will Benefit
|
||||
|
||||
Once GNU is written, everyone will be able to obtain good system software
|
||||
free, just like air.
|
||||
|
||||
This means much more than just saving everyone the price of a Unix license.
|
||||
It means that much wasteful duplication of system programming effort will
|
||||
be avoided. This effort can go instead into advancing the state of the
|
||||
art.
|
||||
|
||||
Complete system sources will be available to everyone. As a result, a user
|
||||
who needs changes in the system will always be free to make them himself,
|
||||
or hire any available programmer or company to make them for him. Users
|
||||
will no longer be at the mercy of one programmer or company which owns the
|
||||
sources and is in sole position to make changes.
|
||||
|
||||
Schools will be able to provide a much more educational environment by
|
||||
encouraging all students to study and improve the system code. Harvard's
|
||||
computer lab used to have the policy that no program could be installed on
|
||||
the system if its sources were not on public display, and upheld it by
|
||||
actually refusing to install certain programs. I was very much inspired by
|
||||
this.
|
||||
|
||||
Finally, the overhead of considering who owns the system software and what
|
||||
one is or is not entitled to do with it will be lifted.
|
||||
|
||||
Arrangements to make people pay for using a program, including licensing of
|
||||
copies, always incur a tremendous cost to society through the cumbersome
|
||||
mechanisms necessary to figure out how much (that is, which programs) a
|
||||
person must pay for. And only a police state can force everyone to obey
|
||||
them. Consider a space station where air must be manufactured at great
|
||||
cost: charging each breather per liter of air may be fair, but wearing the
|
||||
metered gas mask all day and all night is intolerable even if everyone can
|
||||
afford to pay the air bill. And the TV cameras everywhere to see if you
|
||||
ever take the mask off are outrageous. It's better to support the air
|
||||
plant with a head tax and chuck the masks.
|
||||
|
||||
Copying all or parts of a program is as natural to a programmer as
|
||||
breathing, and as productive. It ought to be as free.
|
||||
|
||||
|
||||
Some Easily Rebutted Objections to GNU's Goals
|
||||
|
||||
"Nobody will use it if it is free, because that means
|
||||
they can't rely on any support."
|
||||
"You have to charge for the program
|
||||
to pay for providing the support."
|
||||
|
||||
If people would rather pay for GNU plus service than get GNU free without
|
||||
service, a company to provide just service to people who have obtained GNU
|
||||
free ought to be profitable.
|
||||
|
||||
We must distinguish between support in the form of real programming work
|
||||
and mere handholding. The former is something one cannot rely on from a
|
||||
software vendor. If your problem is not shared by enough people, the
|
||||
vendor will tell you to get lost.
|
||||
|
||||
If your business needs to be able to rely on support, the only way is to
|
||||
have all the necessary sources and tools. Then you can hire any available
|
||||
person to fix your problem; you are not at the mercy of any individual.
|
||||
With Unix, the price of sources puts this out of consideration for most
|
||||
businesses. With GNU this will be easy. It is still possible for there to
|
||||
be no available competent person, but this problem cannot be blamed on
|
||||
distribution arrangements. GNU does not eliminate all the world's problems,
|
||||
only some of them.
|
||||
|
||||
Meanwhile, the users who know nothing about computers need handholding:
|
||||
doing things for them which they could easily do themselves but don't know
|
||||
how.
|
||||
|
||||
Such services could be provided by companies that sell just hand-holding
|
||||
and repair service. If it is true that users would rather spend money and
|
||||
get a product with service, they will also be willing to buy the service
|
||||
having got the product free. The service companies will compete in quality
|
||||
and price; users will not be tied to any particular one. Meanwhile, those
|
||||
of us who don't need the service should be able to use the program without
|
||||
paying for the service.
|
||||
|
||||
"You cannot reach many people without advertising,
|
||||
and you must charge for the program to support that."
|
||||
"It's no use advertising a program people can get free."
|
||||
|
||||
There are various forms of free or very cheap publicity that can be used to
|
||||
inform numbers of computer users about something like GNU. But it may be
|
||||
true that one can reach more microcomputer users with advertising. If this
|
||||
is really so, a business which advertises the service of copying and
|
||||
mailing GNU for a fee ought to be successful enough to pay for its
|
||||
advertising and more. This way, only the users who benefit from the
|
||||
advertising pay for it.
|
||||
|
||||
On the other hand, if many people get GNU from their friends, and such
|
||||
companies don't succeed, this will show that advertising was not really
|
||||
necessary to spread GNU. Why is it that free market advocates don't want
|
||||
to let the free market decide this?
|
||||
|
||||
"My company needs a proprietary operating system
|
||||
to get a competitive edge."
|
||||
|
||||
GNU will remove operating system software from the realm of competition.
|
||||
You will not be able to get an edge in this area, but neither will your
|
||||
competitors be able to get an edge over you. You and they will compete in
|
||||
other areas, while benefitting mutually in this one. If your business is
|
||||
selling an operating system, you will not like GNU, but that's tough on
|
||||
you. If your business is something else, GNU can save you from being
|
||||
pushed into the expensive business of selling operating systems.
|
||||
|
||||
I would like to see GNU development supported by gifts from many
|
||||
manufacturers and users, reducing the cost to each.
|
||||
|
||||
"Don't programmers deserve a reward for their creativity?"
|
||||
|
||||
If anything deserves a reward, it is social contribution. Creativity can
|
||||
be a social contribution, but only in so far as society is free to use the
|
||||
results. If programmers deserve to be rewarded for creating innovative
|
||||
programs, by the same token they deserve to be punished if they restrict
|
||||
the use of these programs.
|
||||
|
||||
"Shouldn't a programmer be able to ask for a reward for his creativity?"
|
||||
|
||||
There is nothing wrong with wanting pay for work, or seeking to maximize
|
||||
one's income, as long as one does not use means that are destructive. But
|
||||
the means customary in the field of software today are based on
|
||||
destruction.
|
||||
|
||||
Extracting money from users of a program by restricting their use of it is
|
||||
destructive because the restrictions reduce the amount and the ways that
|
||||
the program can be used. This reduces the amount of wealth that humanity
|
||||
derives from the program. When there is a deliberate choice to restrict,
|
||||
the harmful consequences are deliberate destruction.
|
||||
|
||||
The reason a good citizen does not use such destructive means to become
|
||||
wealthier is that, if everyone did so, we would all become poorer from the
|
||||
mutual destructiveness. This is Kantian ethics; or, the Golden Rule.
|
||||
Since I do not like the consequences that result if everyone hoards
|
||||
information, I am required to consider it wrong for one to do so.
|
||||
Specifically, the desire to be rewarded for one's creativity does not
|
||||
justify depriving the world in general of all or part of that creativity.
|
||||
|
||||
"Won't programmers starve?"
|
||||
|
||||
I could answer that nobody is forced to be a programmer. Most of us cannot
|
||||
manage to get any money for standing on the street and making faces. But
|
||||
we are not, as a result, condemned to spend our lives standing on the
|
||||
street making faces, and starving. We do something else.
|
||||
|
||||
But that is the wrong answer because it accepts the questioner's implicit
|
||||
assumption: that without ownership of software, programmers cannot possibly
|
||||
be paid a cent. Supposedly it is all or nothing.
|
||||
|
||||
The real reason programmers will not starve is that it will still be
|
||||
possible for them to get paid for programming; just not paid as much as
|
||||
now.
|
||||
|
||||
Restricting copying is not the only basis for business in software. It is
|
||||
the most common basis because it brings in the most money. If it were
|
||||
prohibited, or rejected by the customer, software business would move to
|
||||
other bases of organization which are now used less often. There are
|
||||
always numerous ways to organize any kind of business.
|
||||
|
||||
Probably programming will not be as lucrative on the new basis as it is
|
||||
now. But that is not an argument against the change. It is not considered
|
||||
an injustice that sales clerks make the salaries that they now do. If
|
||||
programmers made the same, that would not be an injustice either. (In
|
||||
practice they would still make considerably more than that.)
|
||||
|
||||
"Don't people have a right to control how their creativity is used?"
|
||||
|
||||
"Control over the use of one's ideas" really constitutes control over other
|
||||
people's lives; and it is usually used to make their lives more difficult.
|
||||
|
||||
People who have studied the issue of intellectual property rights carefully
|
||||
(such as lawyers) say that there is no intrinsic right to intellectual
|
||||
property. The kinds of supposed intellectual property rights that the
|
||||
government recognizes were created by specific acts of legislation for
|
||||
specific purposes.
|
||||
|
||||
For example, the patent system was established to encourage inventors to
|
||||
disclose the details of their inventions. Its purpose was to help society
|
||||
rather than to help inventors. At the time, the life span of 17 years for
|
||||
a patent was short compared with the rate of advance of the state of the
|
||||
art. Since patents are an issue only among manufacturers, for whom the
|
||||
cost and effort of a license agreement are small compared with setting up
|
||||
production, the patents often do not do much harm. They do not obstruct
|
||||
most individuals who use patented products.
|
||||
|
||||
The idea of copyright did not exist in ancient times, when authors
|
||||
frequently copied other authors at length in works of non-fiction. This
|
||||
practice was useful, and is the only way many authors' works have survived
|
||||
even in part. The copyright system was created expressly for the purpose
|
||||
of encouraging authorship. In the domain for which it was invented--books,
|
||||
which could be copied economically only on a printing press--it did little
|
||||
harm, and did not obstruct most of the individuals who read the books.
|
||||
|
||||
All intellectual property rights are just licenses granted by society
|
||||
because it was thought, rightly or wrongly, that society as a whole would
|
||||
benefit by granting them. But in any particular situation, we have to ask:
|
||||
are we really better off granting such license? What kind of act are we
|
||||
licensing a person to do?
|
||||
|
||||
The case of programs today is very different from that of books a hundred
|
||||
years ago. The fact that the easiest way to copy a program is from one
|
||||
neighbor to another, the fact that a program has both source code and
|
||||
object code which are distinct, and the fact that a program is used rather
|
||||
than read and enjoyed, combine to create a situation in which a person who
|
||||
enforces a copyright is harming society as a whole both materially and
|
||||
spiritually; in which a person should not do so regardless of whether the
|
||||
law enables him to.
|
||||
|
||||
"Competition makes things get done better."
|
||||
|
||||
The paradigm of competition is a race: by rewarding the winner, we
|
||||
encourage everyone to run faster. When capitalism really works this way,
|
||||
it does a good job; but its defenders are wrong in assuming it always works
|
||||
this way. If the runners forget why the reward is offered and become
|
||||
intent on winning, no matter how, they may find other strategies--such as,
|
||||
attacking other runners. If the runners get into a fist fight, they will
|
||||
all finish late.
|
||||
|
||||
Proprietary and secret software is the moral equivalent of runners in a
|
||||
fist fight. Sad to say, the only referee we've got does not seem to
|
||||
object to fights; he just regulates them ("For every ten yards you run, you
|
||||
are allowed one kick."). He really ought to break them up, and penalize
|
||||
runners for even trying to fight.
|
||||
|
||||
"Won't everyone stop programming without a monetary incentive?"
|
||||
|
||||
Actually, many people will program with absolutely no monetary incentive.
|
||||
Programming has an irresistible fascination for some people, usually the
|
||||
people who are best at it. There is no shortage of professional musicians
|
||||
who keep at it even though they have no hope of making a living that way.
|
||||
|
||||
But really this question, though commonly asked, is not appropriate to the
|
||||
situation. Pay for programmers will not disappear, only become less. So
|
||||
the right question is, will anyone program with a reduced monetary
|
||||
incentive? My experience shows that they will.
|
||||
|
||||
For more than ten years, many of the world's best programmers worked at the
|
||||
Artificial Intelligence Lab for far less money than they could have had
|
||||
anywhere else. They got many kinds of non-monetary rewards: fame and
|
||||
appreciation, for example. And creativity is also fun, a reward in itself.
|
||||
|
||||
Then most of them left when offered a chance to do the same interesting
|
||||
work for a lot of money.
|
||||
|
||||
What the facts show is that people will program for reasons other than
|
||||
riches; but if given a chance to make a lot of money as well, they will
|
||||
come to expect and demand it. Low-paying organizations do poorly in
|
||||
competition with high-paying ones, but they do not have to do badly if the
|
||||
high-paying ones are banned.
|
||||
|
||||
"We need the programmers desperately. If they demand that we
|
||||
stop helping our neighbors, we have to obey."
|
||||
|
||||
You're never so desperate that you have to obey this sort of demand.
|
||||
Remember: millions for defense, but not a cent for tribute!
|
||||
|
||||
"Programmers need to make a living somehow."
|
||||
|
||||
In the short run, this is true. However, there are plenty of ways that
|
||||
programmers could make a living without selling the right to use a program.
|
||||
This way is customary now because it brings programmers and businessmen the
|
||||
most money, not because it is the only way to make a living. It is easy to
|
||||
find other ways if you want to find them. Here are a number of examples.
|
||||
|
||||
A manufacturer introducing a new computer will pay for the porting of
|
||||
operating systems onto the new hardware.
|
||||
|
||||
The sale of teaching, hand-holding and maintenance services could also
|
||||
employ programmers.
|
||||
|
||||
People with new ideas could distribute programs as freeware, asking for
|
||||
donations from satisfied users, or selling hand-holding services. I have
|
||||
met people who are already working this way successfully.
|
||||
|
||||
Users with related needs can form users' groups, and pay dues. A group
|
||||
would contract with programming companies to write programs that the
|
||||
group's members would like to use.
|
||||
|
||||
All sorts of development can be funded with a Software Tax:
|
||||
|
||||
Suppose everyone who buys a computer has to pay x percent of
|
||||
the price as a software tax. The government gives this to
|
||||
an agency like the NSF to spend on software development.
|
||||
|
||||
But if the computer buyer makes a donation to software development
|
||||
himself, he can take a credit against the tax. He can donate to
|
||||
the project of his own choosing--often, chosen because he hopes to
|
||||
use the results when it is done. He can take a credit for any amount
|
||||
of donation up to the total tax he had to pay.
|
||||
|
||||
The total tax rate could be decided by a vote of the payers of
|
||||
the tax, weighted according to the amount they will be taxed on.
|
||||
|
||||
The consequences:
|
||||
* the computer-using community supports software development.
|
||||
* this community decides what level of support is needed.
|
||||
* users who care which projects their share is spent on
|
||||
can choose this for themselves.
|
||||
|
||||
In the long run, making programs free is a step toward the post-scarcity
|
||||
world, where nobody will have to work very hard just to make a living.
|
||||
People will be free to devote themselves to activities that are fun,
|
||||
such as programming, after spending the necessary ten hours a week
|
||||
on required tasks such as legislation, family counseling, robot
|
||||
repair and asteroid prospecting. There will be no need to be able
|
||||
to make a living from programming.
|
||||
|
||||
We have already greatly reduced the amount of work that the whole
|
||||
society must do for its actual productivity, but only a little of this
|
||||
has translated itself into leisure for workers because much
|
||||
nonproductive activity is required to accompany productive activity.
|
||||
The main causes of this are bureaucracy and isometric struggles
|
||||
against competition. Free software will greatly reduce these
|
||||
drains in the area of software production. We must do this,
|
||||
in order for technical gains in productivity to translate into
|
||||
less work for us.
|
||||
|
||||
Copyright (C) 1985 Richard M. Stallman
|
||||
|
||||
Permission is granted to anyone to make or distribute verbatim copies
|
||||
of this document as received, in any medium, provided that the
|
||||
copyright notice and permission notice are preserved,
|
||||
and that the distributor grants the recipient permission
|
||||
for further redistribution as permitted by this notice.
|
||||
|
||||
Modified versions may not be made.
|
||||
|
||||
38
etc/GNU.JOKES
Normal file
38
etc/GNU.JOKES
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
From: Don Chiasson <G.CHIASSON@DREA-XX.ARPA>
|
||||
Subject: Some gnu jokes
|
||||
To: jokes@DREA-XX.ARPA, gergely@DREA-XX.ARPA, broome@DREA-XX.ARPA
|
||||
cc: G.CHIASSON@DREA-XX.ARPA
|
||||
Message-ID: <12329394624.13.G.CHIASSON@DREA-XX.ARPA>
|
||||
|
||||
Richard M. Stallman (RMS, widely known for creating EMACS) is writing
|
||||
a UNIX clone called GNU (which means Gnu's Not Unix--a recursive acronym).
|
||||
This seems to open the way to a whole gnu class of jokes. For example:
|
||||
|
||||
Q: What do you call a person who hacks while wearing no clothes?
|
||||
A: A gnudist.
|
||||
|
||||
Q: What do you call an eligible young hacker?
|
||||
A: Gnubile.
|
||||
|
||||
Q: What is a hacker's favorite candy?
|
||||
A: Gnugat. (Though it contains little gnutrition.)
|
||||
|
||||
Q: What do you call a computer filled with air?
|
||||
A: Gnumatic.
|
||||
|
||||
Q: What do you call a novice hacker who keeps pestering you
|
||||
with foolish questions?
|
||||
A: A gnuisance.
|
||||
|
||||
Q: What do you call a subtle, clever hack in the favorite language?
|
||||
A: A gnuanCe.
|
||||
|
||||
Q: What do you use a supercomputer for?
|
||||
A: Gnumerical analysis.
|
||||
|
||||
Q: What do you call a hacker who collects coins?
|
||||
A: A gnumismatist.
|
||||
|
||||
Well, there are more, just too gnumerous to tell all at once. I think
|
||||
I'd better go before someone starts firing gnuclear weapons at me.
|
||||
Don
|
||||
614
etc/GOSDIFF
Normal file
614
etc/GOSDIFF
Normal file
|
|
@ -0,0 +1,614 @@
|
|||
Advantages of Gosling Emacs:
|
||||
|
||||
1. The program itself is much smaller.
|
||||
GNU Emacs uses about 250k more pure storage.
|
||||
As a result, Gosling Emacs can run on machines
|
||||
that cannot run GNU Emacs. There is not much difference
|
||||
in the amount of impure storage in the two programs.
|
||||
|
||||
2. In some versions there is support for other forks to
|
||||
establish communications channels to Emacs (using sockets?).
|
||||
|
||||
3. There is a direct interface to dbm (data bases).
|
||||
|
||||
|
||||
Advantages of GNU Emacs:
|
||||
|
||||
* True Lisp, not Mocklisp.
|
||||
|
||||
GNU Emacs's extension language has real symbols, lists
|
||||
and vectors. Many extensions are much simpler, and some
|
||||
become possible that were nearly impossible in Gosling Emacs.
|
||||
Many primitives can have cleaner interfaces, and some features
|
||||
need not be put in as special primitives because you can do
|
||||
them easily yourself.
|
||||
|
||||
* But Mocklisp still works.
|
||||
|
||||
An automatic conversion package plus a run-time library
|
||||
allows you to convert a Mocklisp library into a Lisp library.
|
||||
|
||||
* Commands are better crafted.
|
||||
|
||||
For example, nearly every editing function for which a
|
||||
numeric argument would make sense as a repeat count does
|
||||
accept a repeat count, and does handle a negative argument
|
||||
in the way you would expect.
|
||||
|
||||
* The manual is clearer.
|
||||
|
||||
Everyone tells me it is a very good manual.
|
||||
|
||||
* Better on-line documentation.
|
||||
|
||||
Both functions and variables have documentation strings that
|
||||
describe exactly how to use them.
|
||||
|
||||
* C mode is smart.
|
||||
|
||||
It really knows how to indent each line correctly,
|
||||
for most popular indentation styles. (Some variables
|
||||
control which style is used.)
|
||||
|
||||
* Compatible with PDP-10 Emacs, Multics Emacs and Zmacs.
|
||||
|
||||
The commands in GNU Emacs are nearly the same as in the
|
||||
original Emacs and the other Emacses which imitated it.
|
||||
(A few have been changed to fit the Unix environment better.)
|
||||
|
||||
* Support for Gosling's Emacs commands.
|
||||
|
||||
M-x set-gosmacs-bindings rebinds many editing commands for
|
||||
compatibility with Gosling's Emacs.
|
||||
M-x set-gnu-bindings reverses the change.
|
||||
|
||||
* Side-by-side windows.
|
||||
|
||||
You can split a GNU Emacs window either horizontally or
|
||||
vertically.
|
||||
|
||||
* Redisplay is faster.
|
||||
|
||||
GNU Emacs sends about the same stuff to the terminal that
|
||||
Gosling's does, but GNU Emacs uses much less CPU time to
|
||||
decide what to do.
|
||||
|
||||
* Entirely termcap-driven.
|
||||
|
||||
GNU Emacs has nearly no special code for any terminal type. Various
|
||||
new termcap strings make it possible to handle all terminals nearly as
|
||||
fast as they could be handled by special-case code.
|
||||
|
||||
* Display-hiding features.
|
||||
|
||||
For example, Outline Mode makes it possible for you to edit
|
||||
an outline, making entire sub-branches of the outline visible
|
||||
or invisible when you wish.
|
||||
|
||||
* You can interrupt with Control-G.
|
||||
|
||||
Even a looping Lisp program can be stopped this way.
|
||||
And even a loop in C code does not stop you from killing
|
||||
Emacs and getting back to your shell.
|
||||
|
||||
* Per-buffer Undo.
|
||||
|
||||
You can undo the last several changes, in each buffer
|
||||
independently.
|
||||
|
||||
* The editor code itself is clean.
|
||||
|
||||
Many people have remarked on how much they enjoy reading
|
||||
the code for GNU Emacs.
|
||||
|
||||
|
||||
One other note: The program etc/cvtmail that comes with GNU Emacs can
|
||||
be used to convert a mail directory for Gosling Emacs's Rmail into a
|
||||
Unix mail file that you could read into GNU Emacs's Rmail.
|
||||
|
||||
|
||||
A detailed comparison by Rodney Zykowitz (rtgvax!ramin@eddie.mit.edu)
|
||||
|
||||
Enclosed are two difference listings. The first one is a cross-reference
|
||||
by Key bindings. The second is by alphabetized function name.
|
||||
Only those functions normally bound to keys in a
|
||||
"standard" version are included. As far as I know it excludes
|
||||
bindings added here locally (but what do I know...)
|
||||
|
||||
The Gosling's is version 2.02 and runs on VMS 4.2. The Gnu is
|
||||
version 16.56.1 running under Ultrix 1.1.
|
||||
|
||||
|
||||
And could someone send me some info on Gnu on VMS. I seem to have entirely
|
||||
missed that posting. If it is hopeless, I just might sit down and write
|
||||
a Gnu emulator for Unipress and a Unipress emulator for Gnu... But the
|
||||
thought of that already makes me wanna....
|
||||
|
||||
|
||||
ramin...
|
||||
Standard disclaimer excluded for humanitarian purposes.
|
||||
|
||||
|
||||
|
||||
Command Binding Cross-references. By key code:
|
||||
|
||||
VMS (Unipress) GNU Emacs
|
||||
Key Binding Binding
|
||||
--- ------- ---------------
|
||||
^@ set-mark set-mark-command
|
||||
^A beginning-of-line beginning-of-line
|
||||
^B backward-character backward-char
|
||||
^C exit-emacs exit-recursive-edit
|
||||
^D delete-next-character delete-char
|
||||
^E end-of-line end-of-line
|
||||
^F forward-character forward-char
|
||||
^G illegal-operation
|
||||
^H delete-previous-character help-command
|
||||
^H-v describe-variable
|
||||
^H-w where-is
|
||||
^H-t help-with-tutorial
|
||||
^H-s describe-syntax
|
||||
^H-n view-emacs-news
|
||||
^H-^N view-emacs-news
|
||||
^H-m describe-mode
|
||||
^H-l view-lossage
|
||||
^H-i info
|
||||
^H-f describe-function
|
||||
^H-d describe-function
|
||||
^H-k describe-key
|
||||
^H-c describe-key-briefly
|
||||
^H-b describe-bindings
|
||||
^H-a command-apropos
|
||||
^H-^D describe-distribution
|
||||
^H-^C describe-copying
|
||||
^H-? help-for-help
|
||||
^H-^H help-for-help
|
||||
^I self-insert indent-for-tab-command
|
||||
^J newline-and-indent newline-and-indent
|
||||
^K kill-to-end-of-line kill-line
|
||||
^L redraw-display recenter
|
||||
^M newline newline
|
||||
^N next-line next-line
|
||||
^O newline-and-backup open-line
|
||||
^P previous-line previous-line
|
||||
^Q quote-character quoted-insert
|
||||
^R search-reverse isearch-backward
|
||||
^S search-forward isearch-forward
|
||||
^T transpose-characters transpose-chars
|
||||
^U argument-prefix universal-argument
|
||||
^V next-page scroll-up
|
||||
^W delete-to-killbuffer kill-region
|
||||
^X ^X-prefix Control-x-prefix
|
||||
^X-^A add-mode-abbrev
|
||||
^X-^B list-buffers list-buffers
|
||||
^X-^C exit-emacs save-buffers-kill-emacs
|
||||
^X-^D describe-word-in-buffer list-directory
|
||||
^X-^E compile-it eval-last-sexp
|
||||
^X-^F write-pause-or-exit find-file
|
||||
^X-^H inverse-add-mode-abbrev
|
||||
^X-^I insert-file indent-rigidly
|
||||
^X-^L downcase-region
|
||||
^X-^M write-modified-files
|
||||
^X-^N next-error set-goal-column
|
||||
^X-^O use-old-buffer delete-blank-linkes
|
||||
^X-^P mark-page
|
||||
^X-^Q toggle-read-only
|
||||
^X-^R read-file find-file-read-only
|
||||
^X-^S write-current-file save-buffer
|
||||
^X-^T transpose-lines
|
||||
^X-^U new-undo upcase-region
|
||||
^X-^V visit-file find-alternate-file
|
||||
^X-^W write-named-file write-file
|
||||
^X-^X exchange-dot-and-mark exchange-dot-and-mark
|
||||
^X-^Z shrink-window suspend-emacs
|
||||
^X-ESC repeat-complex-command
|
||||
^X-! execute-monitor-command
|
||||
^X-$ set-selective-display
|
||||
^X-( start-remembering start-kbd-macro
|
||||
^X-) stop-remembering end-kbd-macro
|
||||
^X-+ add-global-abbrev
|
||||
^X-- inverse-add-global-abbrev
|
||||
^X-. set-fill-prefix
|
||||
^X-/ dot-to-register
|
||||
^X-0 delete-window
|
||||
^X-1 delete-other-windows delete-other-windows
|
||||
^X-2 split-current-window split-window-vertically
|
||||
^X-4 ctl-x-4-prefix
|
||||
^X-4-^F find-file-other-window
|
||||
^X-4-. find-tag-other-window
|
||||
^X-4-b pop-to-buffer
|
||||
^X-4-d dired-other-window
|
||||
^X-4-f find-file-other-window
|
||||
^X-4-m mail-other-window
|
||||
^X-5 split-window-horizontally
|
||||
^X-; set-comment-column
|
||||
^X-< scroll-left
|
||||
^X-= what-cursor-position
|
||||
^X-> scroll-right
|
||||
^X-[ backward-page
|
||||
^X-] forward-page
|
||||
^X-^ enlarge-window
|
||||
^X-` next-error
|
||||
^X-a append-to-buffer
|
||||
^X-b switch-to-buffer switch-to-buffer
|
||||
^X-d delete-window dired
|
||||
^X-e execute-keyboard-macro call-last-kbd-macro
|
||||
^X-f set-fill-column
|
||||
^X-g insert-register
|
||||
^X-h mark-whole-buffer
|
||||
^X-i insert-file
|
||||
^X-j register-to-dot
|
||||
^X-k kill-buffer
|
||||
^X-l count-lines-page
|
||||
^X-m mail
|
||||
^X-n next-window narrow-to-region
|
||||
^X-o other-window
|
||||
^X-p previous-window narrow-to-page
|
||||
^X-q kbd-macro-query
|
||||
^X-r copy-rectangle-to-register
|
||||
^X-s save-some-buffers
|
||||
^X-u advertised-undo
|
||||
^X-w widen
|
||||
^X-x copy-to-register
|
||||
^X-z enlarge-window
|
||||
^X-{ shrink-window-horizontally
|
||||
^X-} enlarge-window-horizontally
|
||||
^X-DEL backward-kill-sentence
|
||||
^Y yank-from-killbuffer yank
|
||||
^Z scroll-one-line-up suspend-emacs
|
||||
ESC ESC-prefix
|
||||
ESC-^@ mark-sexp
|
||||
ESC-^A beginning-of-defun
|
||||
ESC-^B backward-sexp
|
||||
ESC-^C exit-emacs exit-recursive-edit
|
||||
ESC-^D down-list
|
||||
ESC-^E end-of-defun
|
||||
ESC-^F forward-sexp
|
||||
ESC-^H mark-defun
|
||||
ESC-^J indent-new-comment-line
|
||||
ESC-^K kill-sexp
|
||||
ESC-^N forward-list
|
||||
ESC-^O split-line
|
||||
ESC-^P backward-list
|
||||
ESC-^S isearch-forward-regexp
|
||||
ESC-^T transpose-sexps
|
||||
ESC-^U backward-up-list
|
||||
ESC-^V page-next-window scroll-other-window
|
||||
ESC-^W delete-region-to-buffer append-next-kill
|
||||
ESC-^Y yank-buffer
|
||||
ESC-ESC execute-mlisp-line eval-expression
|
||||
ESC-^^ case-region-invert
|
||||
ESC-^\ indent-region
|
||||
ESC-<SP> just-one-space
|
||||
ESC-! line-to-top-of-window shell-command
|
||||
ESC-$ spell-word
|
||||
ESC-% query-replace
|
||||
ESC-' abbrev-prefix-mark
|
||||
ESC-( backward-paragraph insert-parentheses
|
||||
ESC-) forward-paragraph move-past-close-and-reindent
|
||||
ESC-, beginning-of-window tags-loop-continue
|
||||
ESC-- meta-minus negative-argument
|
||||
ESC-. end-of-window find-tag
|
||||
ESC-0..ESC-9 meta-digit digit-argument
|
||||
ESC-; indent-for-comment
|
||||
ESC-< beginning-of-file beginning-of-buffer
|
||||
ESC-= count-lines-region
|
||||
ESC-> end-of-file end-of-buffer
|
||||
ESC-@ mark-word
|
||||
ESC-[ backward-paragraph
|
||||
ESC-\ delete-horizontal-space
|
||||
ESC-] forward-paragraph
|
||||
ESC-? apropos
|
||||
ESC-^ case-word-invert delete-indentation
|
||||
ESC-a backward-sentence backward-sentence
|
||||
ESC-b backward-word backward-word
|
||||
ESC-d delete-next-word kill-word
|
||||
ESC-e forward-sentence forward-sentence
|
||||
ESC-f forward-word forward-word
|
||||
ESC-g fill-region
|
||||
ESC-h delete-previous-word mark-paragraph
|
||||
ESC-j indent-C-procedure indent-new-comment-line
|
||||
ESC-k kill-sentence
|
||||
ESC-l case-word-lower downcase-word
|
||||
ESC-q query-replace-string fill-paragraph
|
||||
ESC-r replace-string move-to-window-line
|
||||
ESC-t transpose-words
|
||||
ESC-u case-word-upper upcase-word
|
||||
ESC-v previous-page scroll-down
|
||||
ESC-w copy-region-as-kill
|
||||
ESC-x execute-extended-command execute-extended-command
|
||||
ESC-y yank-pop
|
||||
ESC-z scroll-one-line-down zap-to-char
|
||||
ESC-| shell-command-on-region
|
||||
ESC-~ not-modified
|
||||
ESC-DEL backward-kill-word
|
||||
^_ return-to-monitor
|
||||
.., self-insert
|
||||
- minus
|
||||
.../ self-insert
|
||||
0..9 digit
|
||||
:..~ self-insert
|
||||
^? delete-previous-character
|
||||
|
||||
|
||||
|
||||
|
||||
Command Binding Cross-references. By name:
|
||||
|
||||
Command VMS (Unipress) Key GNU Key
|
||||
----------------------------- --------------------- ------------
|
||||
abbrev-prefix-mark ESC-'
|
||||
add-global-abbrev ^X-+
|
||||
add-mode-abbrev ^X-^A
|
||||
advertised-undo ^X-u
|
||||
append-next-kill ESC-^W
|
||||
append-to-buffer ^X-a
|
||||
apropos ESC-?
|
||||
argument-prefix ^U
|
||||
backward-char ^B
|
||||
backward-character ^B
|
||||
backward-kill-sentence ^X-DEL
|
||||
backward-kill-word ESC-DEL
|
||||
backward-list ESC-^P
|
||||
backward-page ^X-[
|
||||
backward-paragraph ESC-(
|
||||
backward-paragraph ESC-[
|
||||
backward-sentence ESC-a
|
||||
backward-sentence ESC-a
|
||||
backward-sexp ESC-^B
|
||||
backward-up-list ESC-^U
|
||||
backward-word ESC-b
|
||||
backward-word ESC-b
|
||||
beginning-of-buffer ESC-<
|
||||
beginning-of-defun ESC-^A
|
||||
beginning-of-file ESC-<
|
||||
beginning-of-line ^A
|
||||
beginning-of-line ^A
|
||||
beginning-of-window ESC-,
|
||||
call-last-kbd-macro ^X-e
|
||||
case-region-invert ESC-^^
|
||||
case-word-invert ESC-^
|
||||
case-word-lower ESC-l
|
||||
case-word-upper ESC-u
|
||||
command-apropos ^H-a
|
||||
compile-it ^X-^E
|
||||
control-x-prefix ^X
|
||||
control-x-prefix ^X
|
||||
copy-rectangle-to-register ^X-r
|
||||
copy-region-as-kill ESC-w
|
||||
copy-to-register ^X-x
|
||||
count-lines-page ^X-l
|
||||
count-lines-region ESC-=
|
||||
ctl-x-4-prefix ^X-4
|
||||
delete-blank-linkes ^X-^O
|
||||
delete-char ^D
|
||||
delete-horizontal-space ESC-\
|
||||
delete-indentation ESC-^
|
||||
delete-next-character ^D
|
||||
delete-next-word ESC-d
|
||||
delete-other-windows ^X-1
|
||||
delete-other-windows ^X-1
|
||||
delete-previous-character ^H ^?
|
||||
delete-previous-character ^?
|
||||
delete-previous-word ESC-h
|
||||
delete-region-to-buffer ESC-^W
|
||||
delete-to-killbuffer ^W
|
||||
delete-window ^X-0
|
||||
delete-window ^X-d
|
||||
describe-bindings ^H-b
|
||||
describe-copying ^H-^C
|
||||
describe-distribution ^H-^D
|
||||
describe-function ^H-f
|
||||
describe-function ^H-d
|
||||
describe-key ^H-k
|
||||
describe-key-briefly ^H-c
|
||||
describe-mode ^H-m
|
||||
describe-syntax ^H-s
|
||||
describe-variable ^H-v
|
||||
describe-word-in-buffer ^X-^D
|
||||
digit 0..9
|
||||
digit 0..9
|
||||
digit-argument ESC-0..ESC-9
|
||||
dired ^X-d
|
||||
dired-other-window ^X-4-d
|
||||
dot-to-register ^X-/
|
||||
down-list ESC-^D
|
||||
downcase-region ^X-^L
|
||||
downcase-word ESC-l
|
||||
end-kbd-macro ^X-)
|
||||
end-of-buffer ESC->
|
||||
end-of-defun ESC-^E
|
||||
end-of-file ESC->
|
||||
end-of-line ^E
|
||||
end-of-line ^E
|
||||
end-of-window ESC-.
|
||||
enlarge-window ^X-^
|
||||
enlarge-window ^X-z
|
||||
enlarge-window-horizontally ^X-}
|
||||
esc-prefix ESC
|
||||
esc-prefix ESC
|
||||
eval-expression ESC-ESC
|
||||
eval-last-sexp ^X-^E
|
||||
exchange-dot-and-mark ^X-^X
|
||||
exchange-dot-and-mark ^X-^X
|
||||
execute-extended-command ESC-x
|
||||
execute-extended-command ESC-x
|
||||
execute-keyboard-macro ^X-e
|
||||
execute-mlisp-line ESC-ESC
|
||||
execute-monitor-command ^X-!
|
||||
exit-emacs ^C
|
||||
exit-emacs ^X-^C
|
||||
exit-emacs ESC-^C
|
||||
exit-recursive-edit ^C
|
||||
exit-recursive-edit ESC-^C
|
||||
fill-paragraph ESC-q
|
||||
fill-region ESC-g
|
||||
find-alternate-file ^X-^V
|
||||
find-file ^X-^F
|
||||
find-file-other-window ^X-4-^F
|
||||
find-file-other-window ^X-4-f
|
||||
find-file-read-only ^X-^R
|
||||
find-tag ESC-.
|
||||
find-tag-other-window ^X-4-.
|
||||
forward-char ^F
|
||||
forward-character ^F
|
||||
forward-list ESC-^N
|
||||
forward-page ^X-]
|
||||
forward-paragraph ESC-)
|
||||
forward-paragraph ESC-]
|
||||
forward-sentence ESC-e
|
||||
forward-sentence ESC-e
|
||||
forward-sexp ESC-^F
|
||||
forward-word ESC-f
|
||||
forward-word ESC-f
|
||||
help-command ^H
|
||||
help-for-help ^H-?
|
||||
help-for-help ^H-^H
|
||||
help-with-tutorial ^H-t
|
||||
illegal-operation ^G
|
||||
indent-C-procedure ESC-j
|
||||
indent-for-comment ESC-;
|
||||
indent-for-tab-command ^I
|
||||
indent-new-comment-line ESC-^J
|
||||
indent-new-comment-line ESC-j
|
||||
indent-region ESC-^\
|
||||
indent-rigidly ^X-^I
|
||||
info ^H-i
|
||||
insert-file ^X-^I
|
||||
insert-file ^X-i
|
||||
insert-parentheses ESC-(
|
||||
insert-register ^X-g
|
||||
inverse-add-global-abbrev ^X--
|
||||
inverse-add-mode-abbrev ^X-^H
|
||||
isearch-backward ^R
|
||||
isearch-forward ^S
|
||||
isearch-forward-regexp ESC-^S
|
||||
just-one-space ESC-<SP>
|
||||
kbd-macro-query ^X-q
|
||||
kill-buffer ^X-k
|
||||
kill-line ^K
|
||||
kill-region ^W
|
||||
kill-sentence ESC-k
|
||||
kill-sexp ESC-^K
|
||||
kill-to-end-of-line ^K
|
||||
kill-word ESC-d
|
||||
line-to-top-of-window ESC-!
|
||||
list-buffers ^X-^B
|
||||
list-buffers ^X-^B
|
||||
list-directory ^X-^D
|
||||
mail ^X-m
|
||||
mail-other-window ^X-4-m
|
||||
mark-defun ^X-^H
|
||||
mark-page ^X-^P
|
||||
mark-paragraph ESC-h
|
||||
mark-sexp ESC-^@
|
||||
mark-whole-buffer ^X-h
|
||||
mark-word ESC-@
|
||||
meta-digit ESC-0..ESC-9
|
||||
meta-minus ESC--
|
||||
minus -
|
||||
minus -
|
||||
move-past-close-and-reindent ESC-)
|
||||
move-to-window-line ESC-r
|
||||
narrow-to-page ^X-p
|
||||
narrow-to-region ^X-n
|
||||
negative-argument ESC--
|
||||
new-undo ^X-^U
|
||||
newline ^M
|
||||
newline ^M
|
||||
newline-and-backup ^O
|
||||
newline-and-indent ^J
|
||||
newline-and-indent ^J
|
||||
next-error ^X-^N
|
||||
next-error ^X-`
|
||||
next-line ^N
|
||||
next-line ^N
|
||||
next-page ^V
|
||||
next-window ^X-n
|
||||
not-modified ESC-~
|
||||
open-line ^O
|
||||
other-window ^X-o
|
||||
page-next-window ESC-^V
|
||||
pop-to-buffer ^X-4-b
|
||||
previous-line ^P
|
||||
previous-line ^P
|
||||
previous-page ESC-v
|
||||
previous-window ^X-p
|
||||
query-replace ESC-%
|
||||
query-replace-string ESC-q
|
||||
quote-character ^Q
|
||||
quoted-insert ^Q
|
||||
read-file ^X-^R
|
||||
recenter ^L
|
||||
redraw-display ^L
|
||||
register-to-dot ^X-j
|
||||
repeat-complex-command ^X-ESC
|
||||
replace-string ESC-r
|
||||
return-to-monitor ^_(CTL-/)
|
||||
save-buffer ^X-^S
|
||||
save-buffers-kill-emacs ^X-^C
|
||||
save-some-buffers ^X-s
|
||||
scroll-down ESC-v
|
||||
scroll-left ^X-<
|
||||
scroll-one-line-down ESC-z
|
||||
scroll-one-line-up ^Z
|
||||
scroll-other-window ESC-^V
|
||||
scroll-right ^X->
|
||||
scroll-up ^V
|
||||
search-forward ^S
|
||||
search-reverse ^R
|
||||
self-insert ^I
|
||||
self-insert <SP>..,
|
||||
self-insert .../
|
||||
self-insert :..~
|
||||
set-comment-column ^X-;
|
||||
set-fill-column ^X-f
|
||||
set-fill-prefix ^X-.
|
||||
set-goal-column ^X-^N
|
||||
set-mark ^@
|
||||
set-mark-command ^@
|
||||
set-selective-display ^X-$
|
||||
shell-command ESC-!
|
||||
shell-command-on-region ESC-|
|
||||
shrink-window ^X-^Z
|
||||
shrink-window-horizontally ^X-{
|
||||
spell-word ESC-$
|
||||
split-current-window ^X-2
|
||||
split-line ESC-^O
|
||||
split-window-horizontally ^X-5
|
||||
split-window-vertically ^X-2
|
||||
start-kbd-macro ESC-(
|
||||
start-remembering ^X-(
|
||||
stop-remembering ^X-)
|
||||
suspend-emacs ^X-^Z
|
||||
suspend-emacs ^Z
|
||||
switch-to-buffer ^X-b
|
||||
switch-to-buffer ^X-b
|
||||
tags-loop-continue ESC-,
|
||||
toggle-read-only ^X-^Q
|
||||
transpose-characters ^T
|
||||
transpose-chars ^T
|
||||
transpose-lines ^X-^T
|
||||
transpose-sexps ESC-^T
|
||||
transpose-words ESC-t
|
||||
universal-argument ^U
|
||||
upcase-region ^X-^U
|
||||
upcase-word ESC-u
|
||||
use-old-buffer ^X-^O
|
||||
view-emacs-news ^H-^N
|
||||
view-emacs-news ^H-n
|
||||
view-lossage ^H-l
|
||||
visit-file ^X-^V
|
||||
what-cursor-position ^X-=
|
||||
where-is ^H-w
|
||||
widen ^X-w
|
||||
write-current-file ^X-^S
|
||||
write-file ^X-^W
|
||||
write-modified-files ^X-^M
|
||||
write-named-file ^X-^W
|
||||
write-pause-or-exit ^X-^F
|
||||
yank ^Y
|
||||
yank-buffer ESC-^Y
|
||||
yank-from-killbuffer ^Y
|
||||
yank-pop ESC-y
|
||||
zap-to-char ESC-z
|
||||
30
etc/INTERVAL.IDEAS
Normal file
30
etc/INTERVAL.IDEAS
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
This idea comes from Andrew. The basic part is to represent a division
|
||||
of the buffer into disjoint intervals by means of a binary tree. Each
|
||||
interval has one node. The tree has the effect of a large ordered
|
||||
collection of markers, but no Lisp_Marker objects appear in the tree.
|
||||
|
||||
Each node has two subnodes, a left and a right, each of which can be
|
||||
nil instead. The subnodes' intervals are disjoint from their parent's
|
||||
interval--the tree structure is for binary searching.
|
||||
|
||||
Each node in the tree is implicitly associated with a region of the
|
||||
buffer, but I don't think it actually stores the positions; I think it
|
||||
has the length of that node, or perhaps its own length and separately
|
||||
the length of it plus all its subnodes.
|
||||
|
||||
I forget the details of this, but the idea is that you can figure out
|
||||
the position of a node, or find the node containing a position, by
|
||||
examining just its superiors in the tree, and you can also update the
|
||||
tree for changes in the buffer by tracing just one path down the tree.
|
||||
So the amount of work for nearly any operation goes with the log of
|
||||
the number of intervals.
|
||||
|
||||
If it is desirable to be able to subdivide the intervals, each interval
|
||||
can have another such tree dividing it into disjoint subintervals. And
|
||||
subintervals can have trees, too. So it becomes a tree of trees.
|
||||
|
||||
The idea is to associate an alist with each interval or subinterval.
|
||||
The complete alist associated with any spot is the append of the
|
||||
alists of the containing intervals at all levels of subdivision,
|
||||
smallest ones first. It would also be useful to get the bounds of the
|
||||
innermost interval.
|
||||
434
etc/INTERVIEW
Normal file
434
etc/INTERVIEW
Normal file
|
|
@ -0,0 +1,434 @@
|
|||
|
||||
GNU'S NOT UNIX
|
||||
|
||||
Conducted by David Betz and Jon Edwards
|
||||
|
||||
Richard Stallman discusses his public-domain
|
||||
UNIX-compatible software system
|
||||
with BYTE editors
|
||||
(July 1986)
|
||||
|
||||
Copyright (C) 1986 Richard Stallman. Permission is granted to make and
|
||||
distribute copies of this article as long as the copyright and this notice
|
||||
appear on all copies.
|
||||
|
||||
Richard Stallman has undertaken probably the most ambitious free software
|
||||
development project to date, the GNU system. In his GNU Manifesto,
|
||||
published in the March 1985 issue of Dr. Dobb's Journal, Stallman described
|
||||
GNU as a "complete Unix-compatible software system which I am writing so
|
||||
that I can give it away free to everyone who can use it... Once GNU is
|
||||
written, everyone will be able to obtain good system software free, just
|
||||
like air." (GNU is an acronym for GNU's Not UNIX; the "G" is pronounced.)
|
||||
|
||||
Stallman is widely known as the author of EMACS, a powerful text editor
|
||||
that he developed at the MIT Artificial Intelligence Laboratory. It is no
|
||||
coincidence that the first piece of software produced as part of the GNU
|
||||
project was a new implementation of EMACS. GNU EMACS has already achieved a
|
||||
reputation as one of the best implementations of EMACS currently available
|
||||
at any price.
|
||||
|
||||
BYTE: We read your GNU Manifesto in the March 1985 issue of Dr. Dobb's.
|
||||
What has happened since? Was that really the beginning, and how have you
|
||||
progressed since then?
|
||||
|
||||
Stallman: The publication in Dr. Dobb's wasn't the beginning of the
|
||||
project. I wrote the GNU Manifesto when I was getting ready to start the
|
||||
project, as a proposal to ask computer manufacturers for funding. They
|
||||
didn't want to get involved, and I decided that rather than spend my time
|
||||
trying to pursue funds, I ought to spend it writing code. The manifesto was
|
||||
published about a year and a half after I had written it, when I had barely
|
||||
begun distributing the GNU EMACS. Since that time, in addition to making
|
||||
GNU EMACS more complete and making it run on many more computers, I have
|
||||
nearly finished the optimizing C compiler and all the other software that
|
||||
is needed for running C programs. This includes a source-level debugger
|
||||
that has many features that the other source-level debuggers on UNIX don't
|
||||
have. For example, it has convenience variables within the debugger so you
|
||||
can save values, and it also has a history of all the values that you have
|
||||
printed out, making it tremendously easier to chase around list structures.
|
||||
|
||||
BYTE: You have finished an editor that is now widely distributed and you
|
||||
are about to finish the compiler.
|
||||
|
||||
Stallman: I expect that it will be finished this October.
|
||||
|
||||
BYTE: What about the kernel?
|
||||
|
||||
Stallman: I'm currently planning to start with the kernel that was written
|
||||
at MIT and was released to the public recently with the idea that I would
|
||||
use it. This kernel is called TRIX; it's based on remote procedure call. I
|
||||
still need to add compatibility for a lot of the features of UNIX which it
|
||||
doesn't have currently. I haven't started to work on that yet. I'm
|
||||
finishing the compiler before I go to work on the kernel. I am also going
|
||||
to have to rewrite the file system. I intend to make it failsafe just by
|
||||
having it write blocks in the proper order so that the disk structure is
|
||||
always consistent. Then I want to add version numbers. I have a complicated
|
||||
scheme to reconcile version numbers with the way people usually use UNIX.
|
||||
You have to be able to specify filenames without version numbers, but you
|
||||
also have to be able to specify them with explicit version numbers, and
|
||||
these both need to work with ordinary UNIX programs that have not been
|
||||
modified in any way to deal with the existence of this feature. I think I
|
||||
have a scheme for doing this, and only trying it will show me whether it
|
||||
really does the job.
|
||||
|
||||
BYTE: Do you have a brief description you can give us as to how GNU as a
|
||||
system will be superior to other systems? We know that one of your goals is
|
||||
to produce something that is compatible with UNIX. But at least in the area
|
||||
of file systems you have already said that you are going to go beyond UNIX
|
||||
and produce something that is better.
|
||||
|
||||
Stallman: The C compiler will produce better code and run faster. The
|
||||
debugger is better. With each piece I may or may not find a way to improve
|
||||
it. But there is no one answer to this question. To some extent I am
|
||||
getting the benefit of reimplementation, which makes many systems much
|
||||
better. To some extent it's because I have been in the field a long time
|
||||
and worked on many other systems. I therefore have many ideas to bring to
|
||||
bear. One way in which it will be better is that practically everything in
|
||||
the system will work on files of any size, on lines of any size, with any
|
||||
characters appearing in them. The UNIX system is very bad in that regard.
|
||||
It's not anything new as a principle of software engineering that you
|
||||
shouldn't have arbitrary limits. But it just was the standard practice in
|
||||
writing UNIX to put those in all the time, possibly just because they were
|
||||
writing it for a very small computer. The only limit in the GNU system is
|
||||
when your program runs out of memory because it tried to work on too much
|
||||
data and there is no place to keep it all.
|
||||
|
||||
BYTE: And that isn't likely to be hit if you've got virtual memory. You may
|
||||
just take forever to come up with the solution.
|
||||
|
||||
Stallman: Actually these limits tend to hit in a time long before you take
|
||||
forever to come up with the solution.
|
||||
|
||||
BYTE: Can you say something about what types of machines and environments
|
||||
GNU EMACS in particular has been made to run under? It's now running on
|
||||
VAXes; has it migrated in any form to personal computers?
|
||||
|
||||
Stallman: I'm not sure what you mean by personal computers. For example, is
|
||||
a Sun a personal computer? GNU EMACS requires at least a megabyte of
|
||||
available memory and preferably more. It is normally used on machines that
|
||||
have virtual memory. Except for various technical problems in a few C
|
||||
compilers, almost any machine with virtual memory and running a fairly
|
||||
recent version of UNIX will run GNU EMACS, and most of them currently do.
|
||||
|
||||
BYTE: Has anyone tried to port it to Ataris or Macintoshes?
|
||||
|
||||
Stallman: The Atari 1040ST still doesn't have quite enough memory. The next
|
||||
Atari machine, I expect, will run it. I also think that future Ataris will
|
||||
have some forms of memory mapping. Of course, I am not designing the
|
||||
software to run on the kinds of computers that are prevalent today. I knew
|
||||
when I started this project it was going to take a few years. I therefore
|
||||
decided that I didn't want to make a worse system by taking on the
|
||||
additional challenge of making it run in the currently constrained
|
||||
environment. So instead I decided I'm going to write it in the way that
|
||||
seems the most natural and best. I am confident that in a couple of years
|
||||
machines of sufficient size will be prevalent. In fact, increases in memory
|
||||
size are happening so fast it surprises me how slow most of the people are
|
||||
to put in virtual memory; I think it is totally essential.
|
||||
|
||||
BYTE: I think people don't really view it as being necessary for
|
||||
single-user machines.
|
||||
|
||||
Stallman: They don't understand that single user doesn't mean single
|
||||
program. Certainly for any UNIX-like system it's important to be able to
|
||||
run lots of different processes at the same time even if there is only one
|
||||
of you. You could run GNU EMACS on a nonvirtual-memory machine with enough
|
||||
memory, but you couldn't run the rest of the GNU system very well or a UNIX
|
||||
system very well.
|
||||
|
||||
BYTE: How much of LISP is present in GNU EMACS? It occurred to me that it
|
||||
may be useful to use that as a tool for learning LISP.
|
||||
|
||||
Stallman: You can certainly do that. GNU EMACS contains a complete,
|
||||
although not very powerful, LISP system. It's powerful enough for writing
|
||||
editor commands. It's not comparable with, say, a Common LISP System,
|
||||
something you could really use for system programming, but it has all the
|
||||
things that LISP needs to have.
|
||||
|
||||
BYTE: Do you have any predictions about when you would be likely to
|
||||
distribute a workable environment in which, if we put it on our machines or
|
||||
workstations, we could actually get reasonable work done without using
|
||||
anything other than code that you distribute?
|
||||
|
||||
Stallman: It's really hard to say. That could happen in a year, but of
|
||||
course it could take longer. It could also conceivably take less, but
|
||||
that's not too likely anymore. I think I'll have the compiler finished in a
|
||||
month or two. The only other large piece of work I really have to do is in
|
||||
the kernel. I first predicted GNU would take something like two years, but
|
||||
it has now been two and a half years and I'm still not finished. Part of
|
||||
the reason for the delay is that I spent a lot of time working on one
|
||||
compiler that turned out to be a dead end. I had to rewrite it completely.
|
||||
Another reason is that I spent so much time on GNU EMACS. I originally
|
||||
thought I wouldn't have to do that at all.
|
||||
|
||||
BYTE: Tell us about your distribution scheme.
|
||||
|
||||
Stallman: I don't put software or manuals in the public domain, and the
|
||||
reason is that I want to make sure that all the users get the freedom to
|
||||
share. I don't want anyone making an improved version of a program I wrote
|
||||
and distributing it as proprietary. I don't want that to ever be able to
|
||||
happen. I want to encourage the free improvements to these programs, and
|
||||
the best way to do that is to take away any temptation for a person to make
|
||||
improvements nonfree. Yes, a few of them will refrain from making
|
||||
improvements, but a lot of others will make the same improvements and
|
||||
they'll make them free.
|
||||
|
||||
BYTE: And how do you go about guaranteeing that?
|
||||
|
||||
Stallman: I do this by copyrighting the programs and putting on a notice
|
||||
giving people explicit permission to copy the programs and change them but
|
||||
only on the condition that they distribute under the same terms that I
|
||||
used, if at all. You don't have to distribute the changes you make to any
|
||||
of my programs--you can just do it for yourself, and you don't have to give
|
||||
it to anyone or tell anyone. But if you do give it to someone else, you
|
||||
have to do it under the same terms that I use.
|
||||
|
||||
BYTE: Do you obtain any rights over the executable code derived from the C
|
||||
compiler?
|
||||
|
||||
Stallman: The copyright law doesn't give me copyright on output from the
|
||||
compiler, so it doesn't give me a way to say anything about that, and in
|
||||
fact I don't try to. I don't sympathize with people developing proprietary
|
||||
products with any compiler, but it doesn't seem especially useful to try to
|
||||
stop them from developing them with this compiler, so I am not going to.
|
||||
|
||||
BYTE: Do your restrictions apply if people take pieces of your code to
|
||||
produce other things as well?
|
||||
|
||||
Stallman: Yes, if they incorporate with changes any sizable piece. If it
|
||||
were two lines of code, that's nothing; copyright doesn't apply to that.
|
||||
Essentially, I have chosen these conditions so that first there is a
|
||||
copyright, which is what all the software hoarders use to stop everybody
|
||||
from doing anything, and then I add a notice giving up part of those
|
||||
rights. So the conditions talk only about the things that copyright applies
|
||||
to. I don't believe that the reason you should obey these conditions is
|
||||
because of the law. The reason you should obey is because an upright person
|
||||
when he distributes software encourages other people to share it further.
|
||||
|
||||
BYTE: In a sense you are enticing people into this mode of thinking by
|
||||
providing all of these interesting tools that they can use but only if they
|
||||
buy into your philosophy.
|
||||
|
||||
Stallman: Yes. You could also see it as using the legal system that
|
||||
software hoarders have set up against them. I'm using it to protect the
|
||||
public from them.
|
||||
|
||||
BYTE: Given that manufacturers haven't wanted to fund the project, who do
|
||||
you think will use the GNU system when it is done?
|
||||
|
||||
Stallman: I have no idea, but it is not an important question. My purpose
|
||||
is to make it possible for people to reject the chains that come with
|
||||
proprietary software. I know that there are people who want to do that.
|
||||
Now, there may be others who don't care, but they are not my concern. I
|
||||
feel a bit sad for them and for the people that they influence. Right now a
|
||||
person who perceives the unpleasantness of the terms of proprietary
|
||||
software feels that he is stuck and has no alternative except not to use a
|
||||
computer. Well, I am going to give him a comfortable alternative.
|
||||
Other people may use the GNU system simply because it is technically
|
||||
superior. For example, my C compiler is producing about as good a code as I
|
||||
have seen from any C compiler. And GNU EMACS is generally regarded as being
|
||||
far superior to the commercial competition. And GNU EMACS was not funded by
|
||||
anyone either, but everyone is using it. I therefore think that many people
|
||||
will use the rest of the GNU system because of its technical advantages.
|
||||
But I would be doing a GNU system even if I didn't know how to make it
|
||||
technically better because I want it to be socially better. The GNU project
|
||||
is really a social project. It uses technical means to make a change in
|
||||
society.
|
||||
|
||||
BYTE: Then it is fairly important to you that people adopt GNU. It is not
|
||||
just an academic exercise to produce this software to give it away to
|
||||
people. You hope it will change the way the software industry operates.
|
||||
|
||||
Stallman: Yes. Some people say no one will ever use it because it doesn't
|
||||
have some attractive corporate logo on it, and other people say that they
|
||||
think it is tremendously important and everyone's going to want to use it.
|
||||
I have no way of knowing what is really going to happen. I don't know any
|
||||
other way to try to change the ugliness of the field that I find myself in,
|
||||
so this is what I have to do.
|
||||
|
||||
BYTE: Can you address the implications? You obviously feel that this is an
|
||||
important political and social statement.
|
||||
|
||||
Stallman: It is a change. I'm trying to change the way people approach
|
||||
knowledge and information in general. I think that to try to own knowledge,
|
||||
to try to control whether people are allowed to use it, or to try to stop
|
||||
other people from sharing it, is sabotage. It is an activity that benefits
|
||||
the person that does it at the cost of impoverishing all of society. One
|
||||
person gains one dollar by destroying two dollars' worth of wealth. I think
|
||||
a person with a conscience wouldn't do that sort of thing except perhaps if
|
||||
he would otherwise die. And of course the people who do this are fairly
|
||||
rich; I can only conclude that they are unscrupulous. I would like to see
|
||||
people get rewards for writing free software and for encouraging other
|
||||
people to use it. I don't want to see people get rewards for writing
|
||||
proprietary software because that is not really a contribution to society.
|
||||
The principle of capitalism is the idea that people manage to make money by
|
||||
producing things and thereby are encouraged to do what is useful,
|
||||
automatically, so to speak. But that doesn't work when it comes to owning
|
||||
knowledge. They are encouraged to do not really what's useful, and what
|
||||
really is useful is not encouraged. I think it is important to say that
|
||||
information is different from material objects like cars and loaves of
|
||||
bread because people can copy it and share it on their own and, if nobody
|
||||
attempts to stop them, they can change it and make it better for
|
||||
themselves. That is a useful thing for people to do. This isn't true of
|
||||
loaves of bread. If you have one loaf of bread and you want another, you
|
||||
can't just put your loaf of bread into a bread copier. you can't make
|
||||
another one except by going through all the steps that were used to make
|
||||
the first one. It therefore is irrelevant whether people are permitted to
|
||||
copy it--it's impossible.
|
||||
Books were printed only on printing presses until recently. It was
|
||||
possible to make a copy yourself by hand, but it wasn't practical because
|
||||
it took so much more work than using a printing press. And it produced
|
||||
something so much less attractive that, for all intents and purposes, you
|
||||
could act as if it were impossible to make books except by mass producing
|
||||
them. And therefore copyright didn't really take any freedom away from the
|
||||
reading public. There wasn't anything that a book purchaser could do that
|
||||
was forbidden by copyright.
|
||||
But this isn't true for computer programs. It's also not true for tape
|
||||
cassettes. It's partly false now for books, but it is still true that for
|
||||
most books it is more expensive and certainly a lot more work to Xerox them
|
||||
than to buy a copy, and the result is still less attractive. Right now we
|
||||
are in a period where the situation that made copyright harmless and
|
||||
acceptable is changing to a situation where copyright will become
|
||||
destructive and intolerable. So the people who are slandered as "pirates"
|
||||
are in fact the people who are trying to do something useful that they have
|
||||
been forbidden to do. The copyright laws are entirely designed to help
|
||||
people take complete control over the use of some information for their own
|
||||
good. But they aren't designed to help people who want to make sure that
|
||||
the information is accessible to the public and stop others from depriving
|
||||
the public. I think that the law should recognize a class of works that are
|
||||
owned by the public, which is different from public domain in the same
|
||||
sense that a public park is different from something found in a garbage
|
||||
can. It's not there for anybody to take away, it's there for everyone to
|
||||
use but for no one to impede. Anybody in the public who finds himself being
|
||||
deprived of the derivative work of something owned by the public should be
|
||||
able to sue about it.
|
||||
|
||||
BYTE: But aren't pirates interested in getting copies of programs because
|
||||
they want to use those programs, not because they want to use that
|
||||
knowledge to produce something better?
|
||||
|
||||
Stallman: I don't see that that's the important distinction. More people
|
||||
using a program means that the program contributes more to society. You
|
||||
have a loaf of bread that could be eaten either once or a million times.
|
||||
|
||||
BYTE: Some users buy commercial software to obtain support. How does your
|
||||
distribution scheme provide support?
|
||||
|
||||
Stallman: I suspect that those users are misled and are not thinking
|
||||
clearly. It is certainly useful to have support, but when they start
|
||||
thinking about how that has something to do with selling software or with
|
||||
the software being proprietary, at that point they are confusing
|
||||
themselves. There is no guarantee that proprietary software will receive
|
||||
good support. Simply because sellers say that they provide support, that
|
||||
doesn't mean it will be any good. And they may go out of business. In fact,
|
||||
people think that GNU EMACS has better support than commercial EMACSes. One
|
||||
of the reasons is that I'm probably a better hacker than the people who
|
||||
wrote the other EMACSes, but the other reason is that everyone has sources
|
||||
and there are so many people interested in figuring out how to do things
|
||||
with it that you don't have to get your support from me. Even just the free
|
||||
support that consists of my fixing bugs people report to me and
|
||||
incorporating that in the next release has given people a good level of
|
||||
support. You can always hire somebody to solve a problem for you, and when
|
||||
the software is free you have a competitive market for the support. You can
|
||||
hire anybody. I distribute a service list with EMACS, a list of people's
|
||||
names and phone numbers and what they charge to provide support.
|
||||
|
||||
BYTE: Do you collect their bug fixes?
|
||||
|
||||
Stallman: Well, they send them to me. I asked all the people who wanted to
|
||||
be listed to promise that they would never ask any of their customers to
|
||||
keep secret whatever they were told or any changes they were given to the
|
||||
GNU software as part of that support.
|
||||
|
||||
BYTE: So you can't have people competing to provide support based on their
|
||||
knowing the solution to some problem that somebody else doesn't know.
|
||||
|
||||
Stallman: No. They can compete based on their being clever and more likely
|
||||
to find the solution to your problem, or their already understanding more
|
||||
of the common problems, or knowing better how to explain to you what you
|
||||
should do. These are all ways they can compete. They can try to do better,
|
||||
but they cannot actively impede their competitors.
|
||||
|
||||
BYTE: I suppose it's like buying a car. You're not forced to go back to the
|
||||
original manufacturer for support or continued maintenance.
|
||||
|
||||
Stallman: Or buying a house--what would it be like if the only person who
|
||||
could ever fix problems with your house was the contractor who built it
|
||||
originally? That is the kind of imposition that's involved in proprietary
|
||||
software. People tell me about a problem that happens in UNIX. Because
|
||||
manufacturers sell improved versions of UNIX, they tend to collect fixes
|
||||
and not give them out except in binaries. The result is that the bugs don't
|
||||
really get fixed.
|
||||
|
||||
BYTE: They're all duplicating effort trying to solve bugs independently.
|
||||
|
||||
Stallman: Yes. Here is another point that helps put the problem of
|
||||
proprietary information in a social perspective. Think about the liability
|
||||
insurance crisis. In order to get any compensation from society, an injured
|
||||
person has to hire a lawyer and split the money with that lawyer. This is a
|
||||
stupid and inefficient way of helping out people who are victims of
|
||||
accidents. And consider all the time that people put into hustling to take
|
||||
business away from their competition. Think of the pens that are packaged
|
||||
in large cardboard packages that cost more than the pen--just to make sure
|
||||
that the pen isn't stolen. Wouldn't it be better if we just put free pens
|
||||
on every street corner? And think of all the toll booths that impede the
|
||||
flow of traffic. It's a gigantic social phenomenon. People find ways of
|
||||
getting money by impeding society. Once they can impede society, they can
|
||||
be paid to leave people alone. The waste inherent in owning information
|
||||
will become more and more important and will ultimately make the difference
|
||||
between the utopia in which nobody really has to work for a living because
|
||||
it's all done by robots and a world just like ours where everyone spends
|
||||
much time replicating what the next fellow is doing.
|
||||
|
||||
BYTE: Like typing in copyright notices on the software.
|
||||
|
||||
Stallman: More like policing everyone to make sure that they don't have
|
||||
forbidden copies of anything and duplicating all the work people have
|
||||
already done because it is proprietary.
|
||||
|
||||
BYTE: A cynic might wonder how you earn your living.
|
||||
|
||||
Stallman: From consulting. When I do consulting, I always reserve the right
|
||||
to give away what I wrote for the consulting job. Also, I could be making
|
||||
my living by mailing copies of the free software that I wrote and some that
|
||||
other people wrote. Lots of people send in $150 for GNU EMACS, but now this
|
||||
money goes to the Free Software Foundation that I started. The foundation
|
||||
doesn't pay me a salary because it would be a conflict of interest.
|
||||
Instead, it hires other people to work on GNU. As long as I can go on
|
||||
making a living by consulting I think that's the best way.
|
||||
|
||||
BYTE: What is currently included in the official GNU distribution tape?
|
||||
|
||||
Stallman: Right now the tape contains GNU EMACS (one version fits all
|
||||
computers); Bison, a program that replaces YACC; MIT Scheme, which is
|
||||
Professor Sussman's super-simplified dialect of LISP; and Hack, a
|
||||
dungeon-exploring game similar to Rogue.
|
||||
|
||||
BYTE: Does the printed manual come with the tape as well?
|
||||
|
||||
Stallman: No. Printed manuals cost $15 each or copy them yourself. Copy
|
||||
this interview and share it, too.
|
||||
|
||||
BYTE: How can you get a copy of that?
|
||||
|
||||
Stallman: Write to the Free Software Foundation, 675 Massachusetts Ave.,
|
||||
Cambridge, MA 02139.
|
||||
|
||||
BYTE: What are you going to do when you are done with the GNU system?
|
||||
|
||||
Stallman: I'm not sure. Sometimes I think that what I'll go on to do is the
|
||||
same thing in other areas of software.
|
||||
|
||||
BYTE: So this is just the first of a whole series of assaults on the
|
||||
software industry?
|
||||
|
||||
Stallman: I hope so. But perhaps what I'll do is just live a life of ease
|
||||
working a little bit of the time just to live. I don't have to live
|
||||
expensively. The rest of the time I can find interesting people to hang
|
||||
around with or learn to do things that I don't know how to do.
|
||||
|
||||
Editorial Note: BYTE holds the right to provide this interview on BIX but
|
||||
will not interfere with its distribution.
|
||||
|
||||
Richard Stallman, 545 Technology Square, Room 703, Cambridge, MA 02139.
|
||||
Copyright (C) 1986 Richard Stallman. Permission is granted to make and
|
||||
distribute copies of this article as long as the copyright and this notice
|
||||
appear on all copies.
|
||||
77
etc/LEDIT
Normal file
77
etc/LEDIT
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
Date: 17 Apr 85 15:45:42 EST (Wed)
|
||||
From: Martin David Connor <mdc@MIT-HTVAX.ARPA>
|
||||
|
||||
Date: Sat, 13 Apr 85 16:28:15 est
|
||||
From: Richard M. Stallman <rms@mit-prep>
|
||||
|
||||
Can you help this person? Also, can you give me the rest of ledit
|
||||
to distribute, plus some info on how to use it?
|
||||
|
||||
I have put the files "ledit.l" and "leditcfns.c" on prep:~mdc.
|
||||
Much to my disgust ledit.l relied on some bogus little package of
|
||||
functions on HT, so I had to massage it a bit.
|
||||
|
||||
To get it to work, one must:
|
||||
|
||||
- Compile leditcfns.c with something like:
|
||||
|
||||
cc leditcfns.c
|
||||
|
||||
- Edit ledit.l, changing the line beginning "(cfasl" to
|
||||
have the right pathname for the cfns file you compiled in
|
||||
the last step.
|
||||
|
||||
- Compile ledit.l with:
|
||||
|
||||
liszt ledit.l
|
||||
|
||||
Then put the following lines in your .lisprc file:
|
||||
|
||||
;load in functions for emacs interface
|
||||
(load "//src//mdc//ledit//ledit") ; Location of Ledit library
|
||||
(set-proc-str "%gnumacs") ; Name of editor
|
||||
|
||||
Then you can use ^E <RETURN> to get from LISP back to gnumacs.
|
||||
|
||||
Here is the part of my .emacs file that pertains to ledit.
|
||||
|
||||
;;; Set up ledit mode
|
||||
(setq ledit-go-to-lisp-string "%lisp")
|
||||
(setq lisp-mode-hook 'ledit-from-lisp-mode)
|
||||
|
||||
Date: Sat, 13 Apr 85 11:26:32 cst
|
||||
From: neves@wisc-ai.arpa (David Neves)
|
||||
|
||||
This is a documentation question.
|
||||
I cannot figure out how to use Ledit. I suspect I need some
|
||||
function on the Franz Lisp end of things to go to Emacs and read in
|
||||
the temporary file. Is this true? Is the Lisp job started within
|
||||
Emacs or outside of emacs? I'm just plain confused. Perhaps a couple
|
||||
of words from someone in the know would help.
|
||||
|
||||
A related question. I have been using a shell buffer when interacting
|
||||
with Lisp (ie. put a definition in the kill buffer and then yank it
|
||||
into the shell buffer to redefine it). This is nice but tends to fill
|
||||
up the shell buffer with lots of code (I'd rather keep calls to functions
|
||||
in the shell and not the functions themselves).
|
||||
My question: Is using the shell buffer "better" than ledit? Am I using
|
||||
it in the best way (i.e. copying definitions from an edit buffer to the
|
||||
shell buffer)? -Thanks, David Neves
|
||||
|
||||
I have found that ledit works well for doing programming development
|
||||
when you are changing lots of little pieces of a file and don't wish
|
||||
to recompile the whole file. Of course M-X Compile is very nice for
|
||||
calling up a liszt on a buffer and watching it in the another window.
|
||||
Of course the interface of something like NIL is even better because
|
||||
you can compile your function directly into your lisp. But since NIL
|
||||
doesn't run under Unix, this is probably the next best thing.
|
||||
|
||||
I have tried the 2 window method (shell in lower window, lisp code in
|
||||
upper), and have found it a little awkward. It does have certain
|
||||
advantages, but most of the time, I get be fine using M-C-D to save a
|
||||
defun for lisp, and C-X Z to jump back to LISP. C-E RETURN from lisp
|
||||
is also mnemonic for getting back to gnumacs.
|
||||
|
||||
I hope this helps somewhat.
|
||||
|
||||
|
||||
122
etc/LPF
Normal file
122
etc/LPF
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
Protect Your Freedom to Write Programs
|
||||
Join the League for Programming Freedom
|
||||
(Version of January 15, 1991)
|
||||
|
||||
Ten years ago, programmers were allowed to write programs using all
|
||||
the techniques they knew, and providing whatever features they felt
|
||||
were useful. This is no longer the case. The new monopolies,
|
||||
software patents and interface copyrights, have taken away our
|
||||
freedom of expression and our ability to do a good job.
|
||||
|
||||
"Look and feel" lawsuits attempt to monopolize well-known command
|
||||
languages; some have succeeded. Copyrights on command languages
|
||||
enforce gratuitous incompatibility, close opportunities for
|
||||
competition, and stifle incremental improvements.
|
||||
|
||||
Software patents are even more dangerous; they make every design
|
||||
decision in the development of a program carry a risk of a lawsuit,
|
||||
with draconian pretrial seizure. It is difficult and expensive to
|
||||
find out whether the techniques you consider using are patented; it is
|
||||
impossible to find out whether they will be patented in the future.
|
||||
|
||||
The League for Programming Freedom is a grass-roots organization of
|
||||
professors, students, businessmen, programmers and users dedicated to
|
||||
bringing back the freedom to write programs. The League is not
|
||||
opposed to the legal system that Congress intended--copyright on
|
||||
individual programs. Our aim is to reverse the recent changes made by
|
||||
judges in response to special interests, often explicitly rejecting
|
||||
the public interest principles of the Constitution.
|
||||
|
||||
The League works to abolish the new monopolies by publishing articles,
|
||||
talking with public officials, boycotting egregious offenders, and in
|
||||
the future may intervene in court cases. On May 24, 1989, the League
|
||||
picketed Lotus headquarters on account of their lawsuits, and then
|
||||
again on August 2, 1990. These marches stimulated widespread media
|
||||
coverage for the issue. We welcome suggestions for other activities,
|
||||
as well as help in carrying them out.
|
||||
|
||||
Membership dues in the League are $42 per year for programmers,
|
||||
managers and professionals; $10.50 for students; $21 for others.
|
||||
Please give more if you can. The League's funds will be used for
|
||||
filing briefs; for printing handouts, buttons and signs; whatever will
|
||||
persuade the courts, the legislators, and the people. You may not get
|
||||
anything personally for your dues--except for the freedom to write
|
||||
programs. The League is a non-profit corporation, but not considered
|
||||
a tax-exempt charity. However, for those self-employed in software,
|
||||
the dues can be a business expense.
|
||||
|
||||
The League needs both activist members and members who only pay their
|
||||
dues. We also greatly need additional corporate members; contact us
|
||||
for information.
|
||||
|
||||
If you have any questions, please write to the League or phone
|
||||
(617) 243-4091. Or send Internet mail to league@prep.ai.mit.edu.
|
||||
|
||||
Jack Larsen, President
|
||||
Chris Hofstader, Secretary
|
||||
Steve Sisak, Treasurer
|
||||
|
||||
Jack Larsen can be contacted at (708) 698-1160; Fax (708) 698-6221.
|
||||
To join, please send a check and the following information to:
|
||||
|
||||
League for Programming Freedom
|
||||
1 Kendall Square #143
|
||||
P.O.Box 9171
|
||||
Cambridge, Massachusetts 02139
|
||||
|
||||
(Outside the US, please send a check in US dollars on a bank
|
||||
having a US correspondant bank, to save us check cashing fees.)
|
||||
|
||||
Your name:
|
||||
|
||||
|
||||
The address for League mailings (a few each year):
|
||||
|
||||
|
||||
|
||||
The company you work for, and your position:
|
||||
|
||||
|
||||
Your phone numbers (home, work or both):
|
||||
|
||||
|
||||
Your email address, so we can contact you for demonstrations or for
|
||||
writing letters. (If you don't want us to contact you for these
|
||||
things, please say so, but please give us your email address anyway.)
|
||||
|
||||
|
||||
Is there anything about you which would enable your endorsement of the
|
||||
LPF to impress the public? For example, if you are or have been a
|
||||
professor or an executive, or have written software that has a good
|
||||
reputation, please tell us.
|
||||
|
||||
|
||||
|
||||
Would you like to help with LPF activities?
|
||||
|
||||
|
||||
|
||||
|
||||
The corporate charter of the League for Programming Freedom states:
|
||||
|
||||
The purpose of the corporation is to engage in the following
|
||||
activities:
|
||||
|
||||
1. To determine the existence of, and warn the public about
|
||||
restrictions and monopolies on classes of computer programs where such
|
||||
monopolies prevent or restrict the right to develop certain types of
|
||||
computer programs.
|
||||
|
||||
2. To develop countermeasures and initiatives, in the public interest,
|
||||
effective to block or otherwise prevent or restrain such monopolistic
|
||||
activities including education, research, publications, public
|
||||
assembly, legislative testimony, and intervention in court proceedings
|
||||
involving public interest issues (as a friend of the court).
|
||||
|
||||
3. To engage in any business or other activity in service of and
|
||||
related to the foregoing paragraphs that lawfully may be carried on
|
||||
by a corporation organized under Chapter 180 of the Massachusetts
|
||||
General Laws.
|
||||
|
||||
The officers and directors of the League will be elected annually by
|
||||
the members.
|
||||
448
etc/MACHINES
448
etc/MACHINES
|
|
@ -1,5 +1,5 @@
|
|||
This is a list of the status of GNU Emacs on various machines and systems.
|
||||
Last updated 27 December 1990.
|
||||
Last updated 18 Oct 1992.
|
||||
|
||||
Systems:
|
||||
For each type of system, the name of the appropriate s- header file
|
||||
|
|
@ -21,6 +21,10 @@ Microport
|
|||
|
||||
See under "Intel 386".
|
||||
|
||||
Solaris (s-sol2.h)
|
||||
|
||||
Changes merged, and may work.
|
||||
|
||||
System V rel 0 (s-usg5-0.h)
|
||||
|
||||
Works, on Vaxes and 3bxxx's.
|
||||
|
|
@ -41,6 +45,9 @@ System V rel 2 (s-usg5-2.h)
|
|||
and make it store 7 there. I have as yet no evidence of whether
|
||||
this problem, known in HP-UX, exists in other system V versions.
|
||||
|
||||
If you are compiling to work with X11 release 4, you may need
|
||||
to define HAVE_RANDOM in config.h.
|
||||
|
||||
System V rel 2.2 (s-usg5-2-2.h)
|
||||
|
||||
In 5.2.2 AT&T undid, incompatibly, their previous incompatible
|
||||
|
|
@ -54,31 +61,50 @@ System V rel 2.2 (s-usg5-2-2.h)
|
|||
NO_REMAP. It is not yet known whether this applies to all
|
||||
machines running 5.2.2.
|
||||
|
||||
If you are compiling to work with X11 release 4, you may need
|
||||
to define HAVE_RANDOM in config.h.
|
||||
|
||||
System V rel 3 (s-usg5-3.h)
|
||||
|
||||
Some versions of this system support ptys and BSD-style sockets.
|
||||
On such systems, you should define HAVE_PTYS and HAVE_SOCKETS in config.h.
|
||||
|
||||
If you are compiling to work with X11 release 4, you may need
|
||||
to define HAVE_RANDOM in config.h.
|
||||
|
||||
If you want to link Emacs with shared libraries, define
|
||||
USG_SHARED_LIBRARIES.
|
||||
|
||||
System V rel 4 (s-usg5-4.h)
|
||||
|
||||
Supported, including shared libraries for ELF, but ptys do not
|
||||
work because TIOCGPGRP fails to work on ptys.
|
||||
This failure is probably due to a misunderstanding of the
|
||||
consequences of the POSIX spec: many system designers mistakenly
|
||||
think that POSIX requires this feature to fail. This is untrue;
|
||||
ptys are an extension, and POSIX says that extensions *when used*
|
||||
may change the action of standard facilities in any fashion.
|
||||
Supported, including shared libraries for ELF. pty's work now.
|
||||
|
||||
The standard C preprocessor generate xmakefile incorrectly. However,
|
||||
/lib/cpp will work, so use `make CPP=/lib/cpp'.
|
||||
The standard C preprocessor generates xmakefile incorrectly. However,
|
||||
/lib/cpp will work, so use `make CPP=/lib/cpp' in the `src' subdirectory.
|
||||
|
||||
Ultrix (s-bsd4-2.h)
|
||||
Versions 3 and earlier of V.4, on the Intel 386 and 860, had
|
||||
problems in the X11 libraries. These prevent Emacs from working
|
||||
with X. You can use Emacs with X provided your copy of X is based
|
||||
on X11 release 4 or newer. Unfortunately, the only way you can tell
|
||||
for certain whether your X11 library is new enough is to try
|
||||
compiling Emacs to use X. If xemacs runs, your X11 library is new
|
||||
enough.
|
||||
|
||||
DEC's Ultrix OS is essentially Berkeley 4.2. It does not correctly
|
||||
implement certain features of 4.3.
|
||||
In this context, GSV4 and GSV4i are alternate names for X11R4.
|
||||
OL2.* is X11R3 based. OL3 is in between X11R3 and X11R4, and may or
|
||||
may not work, depending on who made the Unix system. If the library
|
||||
libXol is part of the X distribution, then you have X11R3 and Emacs
|
||||
won't work with X.
|
||||
|
||||
Most versions of V.4 support sockets. If `/usr/lib/libsocket.so'
|
||||
exists, your system supports them. If yours does not, you must add
|
||||
#undef HAVE_SOCKETS in config.h, aftern the inclusion of s-usg5-4.h.
|
||||
(Any system that supports Internet should implement sockets.)
|
||||
|
||||
Ultrix (s-bsd4-3.h)
|
||||
|
||||
Recent versions of Ultrix appear to support the features of Berkeley 4.3.
|
||||
Ultrix was at the BSD 4.2 level for a long time after BSD 4.3 came out.
|
||||
|
||||
Ultrix 3.0 has incompatibilities in its X library if you have the
|
||||
Ultrix version of X (UWS version 2.0). To solve them, you need to
|
||||
|
|
@ -96,16 +122,19 @@ Ultrix (s-bsd4-2.h)
|
|||
|
||||
The problem is said to be gone in UWS version 2.1.
|
||||
|
||||
Ultrix 4.1 has moved the file X11/X10.h into mit/X11/X10.h.
|
||||
|
||||
Uniplus 5.2 (s-unipl5-2.h)
|
||||
|
||||
Works, on Dual machines at least.
|
||||
|
||||
VMS (s-vms.h)
|
||||
VMS (s-vms4-0.h, s-vms4-2.h, s-vms4-4.h, s-vms5-5.h)
|
||||
|
||||
Works except for certain features (directory listing, dired,
|
||||
sending and receiving mail) that use synchronous subprocesses.
|
||||
We need people to write alternative implementations of these
|
||||
facilities.
|
||||
(These will work in Emacs 19.)
|
||||
s-vms5-5.h may be right for some earlier versions; please let us know
|
||||
what happens when you try it in VMS versions 5.0 thru 5.4.
|
||||
|
||||
Note that Emacs for VMS is usually distributed in a special
|
||||
VMS distribution. See the file ../VMSINSTALL for info on moving
|
||||
|
|
@ -128,27 +157,36 @@ Machines:
|
|||
For each type of machine, the names of the m- and s- header files
|
||||
are given.
|
||||
|
||||
Alliant (m-alliant4.h or m-alliant.h or m-alliant1.h; s-bsd4-2.h)
|
||||
Alliant FX/80 (m-alliant4.h or m-alliant.h or m-alliant1.h;
|
||||
s-bsd4-2.h or s-bsd4-3.h)
|
||||
|
||||
18.52 works on system version 4. Previous Emacs versions were
|
||||
There are reports of bugs in the Alliant compiler
|
||||
that prevent compiling Emacs 18.57.
|
||||
No word on how to get around them. Perhaps using GCC will work.
|
||||
A work-around is installed in src/dispnew.c in 18.58 for a compiler bug.
|
||||
|
||||
18.52 worked on system version 4. Previous Emacs versions were
|
||||
known to work on previous system versions.
|
||||
|
||||
Use m-alliant1.h on version 1 of their operating system
|
||||
and use m-alliant.h on version 2 or 3.
|
||||
Use m-alliant4.h on version 4.
|
||||
Use m-alliant4.h on version 4 and above.
|
||||
|
||||
Use s-bsd4-3.h with system version 5 and above.
|
||||
|
||||
Alliant FX/2800 (m-all2800.h; s-bsd4-3.h)
|
||||
|
||||
Known to work with 18.58 and OS version 2.2, compiler version 1.3.
|
||||
|
||||
Altos 3068 (m-altos.h; s-usg5-2.h)
|
||||
|
||||
18.52 is said to work, provided you don't compile unexec.c with -O.
|
||||
|
||||
Amdahl UTS (m-amdahl.h; s-usg5-2-2.h)
|
||||
Amdahl UTS (m-amdahl.h; s-usg5-3.h)
|
||||
|
||||
Small changes for 18.38 were merged in 18.39. It is mostly
|
||||
working, but at last report a bug sometimes causes Emacs to
|
||||
grab very large amounts of memory. No fix or explanation
|
||||
has yet been reported. It may be possible to find this bug
|
||||
if you find which Emacs command it happens within and then
|
||||
run that command with a breakpoint set at malloc.
|
||||
Support for a newer system version, and X Windows, merged in 18.58.
|
||||
(Some people report that s-usg5-2.h worked better than s-usg5-3.h
|
||||
for 18.57.)
|
||||
|
||||
The 5.2u370 compiler is so brain damaged that it is not
|
||||
even worth trying to use it. Success was obtained with the
|
||||
|
|
@ -161,7 +199,7 @@ Apollo running Domain (m-apollo.h; s-bsd4-2.h)
|
|||
distribute it yet.
|
||||
There are reports of bugs in cc -O on this system.
|
||||
|
||||
In etc/Makefile, don't expect emacsclient and emacsserver to
|
||||
In etc/Makefile, don't expect emacsclient and server to
|
||||
compile. You might want to remove them from your makefile.
|
||||
|
||||
Supposedly something in dired.c runs into a compiler bug.
|
||||
|
|
@ -199,9 +237,19 @@ AT&T 7300 or 3b1 (m-7300.h; s-usg5-2-2.h)
|
|||
older than 3.5 did not support long symbol names. Version 3.5 does
|
||||
support them, so you can remove the #define SHORTNAMES in that version.
|
||||
|
||||
Bull sps7 (m-sps7.h; s-usg5-2.h)
|
||||
Aviion (m-aviion.h; s-dgux.h)
|
||||
|
||||
Changes partially merged in version 19, but some fixes are probably required.
|
||||
Changes merged in 18.58.
|
||||
|
||||
Bull DPX/2 models 2nn or 3nn (m-dpx2-200.h or m-dpx2-300.h; s-usg5-3.h)
|
||||
|
||||
Should work in 18.58 except that there is a report of
|
||||
Emacs terminating mysteriously if run in the background
|
||||
using its own X window and the invoking process
|
||||
terminates.
|
||||
|
||||
Be sure to read m-dpx2.h for instructions as to how to deal
|
||||
with optional packages such as INET and X Windows.
|
||||
|
||||
CCI 5/32, 6/32
|
||||
|
||||
|
|
@ -211,35 +259,30 @@ Celerity (m-celerity.h; s-bsd4-2.h)
|
|||
|
||||
Version 18.49 works.
|
||||
|
||||
Clipper (m-clipper.h; ???)
|
||||
|
||||
Version 19 has support for some brand of clipper system.
|
||||
Note that the Orion 105 is also a clipper, but some system-related
|
||||
parameters are different.
|
||||
|
||||
Convex (m-convex.h; s-bsd4-3.h)
|
||||
|
||||
18.53 is supposed to work.
|
||||
|
||||
Cubix QBx/386 (m-intel386.h; s-usg5-3.h)
|
||||
|
||||
Changes merged in 19.1. Systems before 2/A/0 may fail to compile etags.c
|
||||
due to a compiler bug.
|
||||
18.58 works.
|
||||
Use "make CC='cc -pcc'" to avoid problems creating ymakefile from xmakefile.
|
||||
|
||||
Cydra 5 (m-cydra5.h; s-usg5-3.h)
|
||||
|
||||
18.51 worked in one version of their operating system but stopped
|
||||
working in a newer version. This has not been fixed.
|
||||
|
||||
DECstation (m-pmax.h; s-bsd4-2.h)
|
||||
Data General
|
||||
|
||||
Works, as of 18.55. See under Ultrix for problems using X windows
|
||||
See aviion.
|
||||
|
||||
DECstation (m-pmax.h; s-bsd4-3.h or s-osf1.h)
|
||||
|
||||
OSF1 support merged in 18.59.
|
||||
|
||||
See under Ultrix for problems using X windows
|
||||
on Ultrix. Note that this is a MIPS machine.
|
||||
s-bsd4-3.h is said to work ok with Ultrix 4.1.
|
||||
|
||||
Delta (m-delta.h; s-usg5-3.h)
|
||||
|
||||
Motorola Delta boxes running System V/68 release 3.
|
||||
(tested on sys1147 with SVR3V5). Changes merged in 19.1.
|
||||
For Ultrix versions prior to 4.0, you may need to delete
|
||||
the definition of START_FILES from m-pmax.h.
|
||||
|
||||
Dual running System V (m-dual.h; s-usg5-2.h)
|
||||
|
||||
|
|
@ -252,8 +295,13 @@ Dual running Uniplus (m-dual.h; s-unipl5-2.h)
|
|||
|
||||
Elxsi 6400 (m-elxsi; s-usg5-2.h)
|
||||
|
||||
Changes for 12.0 release are in 19.1.
|
||||
Dumping should work now.
|
||||
18.36 required one small change that's installed in 18.38.
|
||||
|
||||
m-elxsi.h currenty specifies CANNOT_DUMP.
|
||||
The Elxsi can in principle dump, but the necessary changes to
|
||||
unexec, which involve byte-swapping, were too ugly to install.
|
||||
If someone submits simple code that supports dumping on the Elxsi,
|
||||
it can be installed and CANNOT_DUMP can be turned off.
|
||||
|
||||
Encore machine (m-ns16000.h; s-umax.h)
|
||||
|
||||
|
|
@ -269,12 +317,16 @@ Encore machine (m-ns16000.h; s-umax.h)
|
|||
A kernel bug in some system versions causes input characters to be lost
|
||||
occasionally.
|
||||
|
||||
Encore running MACH.
|
||||
|
||||
This does not yet work.
|
||||
|
||||
GEC 93 (m-gec93.h; s-usg5-2.h?)
|
||||
|
||||
Changes are partially merged in version 18, but
|
||||
certainly require more work.
|
||||
|
||||
Gould Power Node (m-gould.h; s-bsd4-2.h or s-bsd4-3.h)
|
||||
Gould (m-gould.h; s-bsd4-2.h or s-bsd4-3.h)
|
||||
|
||||
18.36 worked on versions 1.2 and 2.0 of the operating system.
|
||||
|
||||
|
|
@ -287,26 +339,24 @@ Gould Power Node (m-gould.h; s-bsd4-2.h or s-bsd4-3.h)
|
|||
UTX/32 1.3 has a bug in the bcopy library routine. Fix it by
|
||||
#undef BSTRING in m-gould.h.
|
||||
|
||||
Version 19 incorporates support for releases 2.1 and later of UTX/32.
|
||||
A site running a pre-release of 2.1 should #define RELEASE2_1 in config.h.
|
||||
|
||||
Gould NP1 (m-gould-np1.h; s-bsd4-3.h)
|
||||
|
||||
Version 19 supposedly works.
|
||||
|
||||
Honeywell XPS100 (m-xps100.h; s-usg5-2.h)
|
||||
|
||||
Config file added in version 19.
|
||||
|
||||
HP 9000 series 200 or 300 (m-hp9000s300.h; s-hpux.h or s-bsd4-3.h)
|
||||
HP 9000 series 200 or 300 (m-hp9000s300.h; s-hpux7.h, s-hpux8.h or s-bsd4-3.h)
|
||||
|
||||
Version 18 works.
|
||||
These machines are 68000-series CPUs running HP-UX
|
||||
(a derivative of sysV with some BSD features) or BSD 4.3 ported by Utah.
|
||||
The choice of s- file determines which system Emacs is built for.
|
||||
|
||||
If you are running HP-UX release 8.0 or later, you need the optional
|
||||
"C/ANSI C" software in order to build Emacs (older releases of HP-UX
|
||||
do not require any special software). If the file "/etc/filesets/C"
|
||||
exists on your machine, you have this software, otherwise you do not.
|
||||
|
||||
Series 200 HPUX runs Emacs only if it has the "HP-UX upgrade".
|
||||
|
||||
The series 500 has a seriously incompatible memory architecture
|
||||
which relocates data in memory during execution of a program,
|
||||
and support for it would be difficult to implement.
|
||||
|
||||
Note that HP has used two incompatible assembler syntaxes,
|
||||
and has recently changed the format of C function frames.
|
||||
src/crt0.c and src/alloca.s have been conditionalised for the new
|
||||
|
|
@ -328,21 +378,28 @@ HP 9000 series 200 or 300 (m-hp9000s300.h; s-hpux.h or s-bsd4-3.h)
|
|||
that include the `netunam' system call. This is refered to as
|
||||
Network Services (NS/9000) in HP literature.
|
||||
|
||||
HP 9000 series 300 running BSD 4.3 (m-hp300bsd.h; s-bsd4-3.h)
|
||||
If you are compiling to work with X11 release 4, you may need
|
||||
to define HAVE_RANDOM in config.h.
|
||||
|
||||
Version 18.55 works.
|
||||
|
||||
HP 9000 series 500: not supported.
|
||||
|
||||
The series 500 has a seriously incompatible memory architecture
|
||||
which relocates data in memory during execution of a program,
|
||||
and support for it would be difficult to implement.
|
||||
|
||||
HP 9000 series 800 (Spectrum) (m-hp9000s800.h; s-hpux.h)
|
||||
HP 9000 series 700 or 800 (Spectrum) (m-hp9000s800.h; s-hpux7.h or s-hpux8.h)
|
||||
|
||||
These files support HP's Precision Architecture machines
|
||||
running HP-UX. It has been moderately tested on the Series
|
||||
840.
|
||||
running HP-UX. Version 18.58 should work on the 700 and the 800.
|
||||
Use s-hpux7.h for HPUX version 7 or earlier,
|
||||
and s-hpux8.h for HPUX version 8.
|
||||
If you are running HP-UX release 8.0 or later, you need the optional
|
||||
"C/ANSI C" software in order to build Emacs (older releases of HP-UX
|
||||
do not require any special software). If the file "/etc/filesets/C"
|
||||
exists on your machine, you have this software, otherwise you do not.
|
||||
|
||||
HAVE_X_MENU works, but you may need to modify oldXMenu/Makefile
|
||||
to compile insque.c.
|
||||
|
||||
If you compile with MIT's X11R5, rather than HP's version,
|
||||
then you may need to add the following to config.h:
|
||||
|
||||
#define srandom srand
|
||||
#define random rand
|
||||
|
||||
High Level Hardware Orion (m-orion.h; s-bsd4-2.h)
|
||||
|
||||
|
|
@ -352,30 +409,34 @@ High Level Hardware Orion (m-orion.h; s-bsd4-2.h)
|
|||
High Level Hardware Orion 1/05 (m-orion105.h; s-bsd4-2.h)
|
||||
|
||||
Changes merged in 18.52. This is the one with the Clipper cpu.
|
||||
Note that systems which lack NFS need LOAD_AVE_TYPE changed to `double'.
|
||||
Note that systems which lack NFS may need LOAD_AVE_TYPE changed to `double'.
|
||||
|
||||
C compiler has a bug; it loops compiling eval.c.
|
||||
Compile it by hand without optimization.
|
||||
In 18.58, trouble was reported with X windows: XrmGetResource was
|
||||
reported undefined in the library. You may need to change
|
||||
XT_GetDefaults in x11term.c to make it link. If so, please
|
||||
send a bug report saying exactly what change was needed.
|
||||
|
||||
IBM PS/2 (m-ibmps2-aix.h; s-usg5-2-2.h)
|
||||
IBM PS2 (m-ibmps2-aix.h; s-usg5-2-2.h or s-usg5-3.h)
|
||||
|
||||
Changes merged in version 19. You may need to copy
|
||||
Changes mostly merged in 18.55. You may need to put an #ifndef AIX
|
||||
conditional around the definition of closedir in sysdep.c, and
|
||||
perhaps delete the #include of sioctl.h. You may need to copy
|
||||
/usr/lib/samples/hft/hftctl.c to the Emacs src directory.
|
||||
|
||||
IBM RS/6000 (m-ibmrs6000.h; s-aix3-1.h)
|
||||
Use s-usg5-3.h on AIX 1.2.
|
||||
s-usg5-2-2.h should work on either AIX 1.1 or 1.2, but may not work with
|
||||
certain new X window managers, and may be suboptimal.
|
||||
|
||||
Changes merged in version 19.
|
||||
IBM RS/6000 (m-ibmrs6000.h; s-aix3-1.h or s-aix3-2.h)
|
||||
|
||||
Dumping does not work. Code has been written to implement it, but
|
||||
it fails because the address of bss seems to vary occasionally
|
||||
between Emacs runs. It does not seem to vary from minute to minute,
|
||||
but every few days or weeks it changes to a new steady state.
|
||||
When this happens, the dumped Emacs data file becomes invalid.
|
||||
Changes merged in 18.56. Note that for installation on AIX you must
|
||||
use `make install.aix' rather than just `make'. Use s-aix3-2.h
|
||||
on AIX 3.2 also.
|
||||
|
||||
IBM RT/PC (m-ibmrt.h or m-ibmrt-aix.h; s-bsd4-2.h or s-usg5-2-2.h)
|
||||
IBM RT/PC (m-ibmrt.h or m-ibmrt-aix.h; s-bsd4-3.h or s-usg5-2-2.h)
|
||||
|
||||
18.52 works on both operating systems.
|
||||
Use s-bsd-4-2.h for the 4.2-like system and s-usg5-2-2.h for AIX.
|
||||
Use s-bsd-4-3.h for the 4.3-like system AOS, and s-usg5-2-2.h for AIX.
|
||||
|
||||
On BSD, if you have trouble, try compiling with a different compiler.
|
||||
|
||||
|
|
@ -401,10 +462,27 @@ Integrated Solutions `Optimum V' (m-isi-ov.h; s-bsd4-2.h or s-bsd4-3.h)
|
|||
in a system header file, which confuses Emacs (which thinks that UMAX
|
||||
indicates the Umax operating system).
|
||||
|
||||
Intel 80386 (m-intel386.h or m-is386.h; s-bsd4-2.h, s-usg5-2-2.h, s-usg5-3.h,
|
||||
s-386-ix.h, s-esix.h or s-xenix.h)
|
||||
Integrated Solutions 386 (m-is386.h; ??)
|
||||
|
||||
Configuration file present in 18.57.
|
||||
|
||||
Intel 80386 (m-intel386.h; s-bsd4-2.h, s-usg5-2-2.h, s-usg5-3.h, s-esix.h,
|
||||
s-386ix.h, s-isc2-2.h, s-isc3-0.h, s-sco3-2-2.h, s-sco3-2-4.h,
|
||||
or s-xenix.h)
|
||||
|
||||
18.59 should support a wide variety of operating systems.
|
||||
Use s-isc2-2.h for Interactive 386/ix version 2.2
|
||||
and s-isc3-0.h for versions 3.0 and 3.2.
|
||||
Use s-386ix.h for prior versions.
|
||||
Use s-esix.h for Esix.
|
||||
|
||||
Use s-sco3-2-4.h for version 3.2.4, and s-sco3-2-2.h for version 3.2.2
|
||||
(but it only makes a difference if you compile Emacs for X windows).
|
||||
You may have to compile the cpp that comes with Emacs
|
||||
and use that to preprocess src/ymakefile to get src/xmakefile.
|
||||
s-sco3-2-1.h may work on SCO 3.2.1, but see the instructions in
|
||||
that file for other changes you need to make.
|
||||
|
||||
Changes merged in 18.50 for all three operating systems.
|
||||
If you are using Xenix, see notes above under Xenix.
|
||||
|
||||
Some sysV.3 systems seem to have bugs in `opendir';
|
||||
|
|
@ -412,11 +490,20 @@ Intel 80386 (m-intel386.h or m-is386.h; s-bsd4-2.h, s-usg5-2-2.h, s-usg5-3.h,
|
|||
and undefine SYSV_SYSTEM_DIR.
|
||||
|
||||
If you use optimization on V.3, you may need the option -W2,'-y 0'
|
||||
to prevent certain faulty optimization.
|
||||
to prevent certain faulty optimization. Otherwise, fns.c won't work.
|
||||
|
||||
On 386/ix, to link with shared libraries, add #define USG_SHARED_LIBRARIES
|
||||
to config.h.
|
||||
|
||||
On one V.4 system, it was necessary to define LIBS_TERMCAP as -ltermcap.
|
||||
|
||||
Versions 3 and earlier of V.4 supposedly have problems
|
||||
in the X11 libraries that prevent Emacs from working with X.
|
||||
Version 4 of V.4 is said to have fixed this problem. See the
|
||||
entry for System V Release 4, above. Similar problems occur on
|
||||
SCO systems and perhaps also on ISC systems. There is no known
|
||||
remedy except to get a different system.
|
||||
|
||||
There is no consistency in the handling of certain system header files
|
||||
on V.3.
|
||||
|
||||
|
|
@ -436,35 +523,35 @@ Intel 80386 (m-intel386.h or m-is386.h; s-bsd4-2.h, s-usg5-2-2.h, s-usg5-3.h,
|
|||
Some versions convince sysdep.c to try to use `struct tchars'
|
||||
but define `struct tc' instead; add `#define tchars tc'
|
||||
to config.h to solve this problem.
|
||||
Some systems have problems that can be solved by inserting
|
||||
#undef TIOCGETC
|
||||
in sysdep.c, near the place where this is done for XENIX.
|
||||
|
||||
The file m-is386.h is used for an Integrated Solutions 386 machine.
|
||||
It may also be correct for Microport systems.
|
||||
Intel 860 (m-intel860.h; s-usg5-4.h)
|
||||
|
||||
Iris 2500 (m-irist.h; s-iris3-5.h or s-iris3-6.h)
|
||||
Supposed to work in 18.58. See the notes for System V Release 4,
|
||||
above, for notes on using X windows and using sockets.
|
||||
|
||||
Version 18 said to work; use s-irist3-5.h for system version 2.5
|
||||
and s-iris3-6.h for system version 3.6.
|
||||
Iris 4D (m-iris4d.h; s-irix3-3.h or s-irix4-0.h)
|
||||
|
||||
18.58 is known to work on Silicon Graphics 4D series machines
|
||||
with IRIX 3.3 or IRIX 4.0.
|
||||
|
||||
Most irix3.3 systems do not have an ANSI C compiler, but a few do.
|
||||
If you are using the ANSI C compiler, you may need to add
|
||||
#define C_SWITCH_MACHINE -cckr
|
||||
to config.h.
|
||||
|
||||
There is a bug in IRIX that can sometimes leave ptys owned by
|
||||
root with a permission of 622. This causes malfunctions in use
|
||||
of subprocesses of Emacs. This may be fixed in IRIX 4.0.5.
|
||||
|
||||
Iris 2500 Turbo (m-irist.h; s-iris3-5.h or s-iris3-6.h)
|
||||
|
||||
18.49 works. Use s-iris3-6.h for system versions 3.6 and up.
|
||||
s-iris3-5.h is said to work with system version 2.5.
|
||||
Note that the 3030 is the same machine as this.
|
||||
|
||||
Iris 4D (m-iris4d.h; s-iris3-6.h or s-irix3-3.h)
|
||||
|
||||
18.56 is known to work on 4D series machines with Irix 3.3 or later.
|
||||
|
||||
If you use the X menu facility, you must edit oldXmenu/Makefile
|
||||
to add the line
|
||||
|
||||
RANLIB=true
|
||||
|
||||
Someone says that with the yellow pages you must change two definitions
|
||||
in m-iris4d.h as follows:
|
||||
|
||||
#define LIBS_MACHINE -lsun -lbsd -lPW -lmld
|
||||
#define C_SWITCH_MACHINE -I/usr/include/sun -I/usr/include/bsd
|
||||
|
||||
Macintosh
|
||||
|
||||
We are boycotting Apple because of Apple's efforts to take away
|
||||
|
|
@ -505,10 +592,35 @@ Mips (m-mips.h or m-mips4.h; s-usg5-2-2.h, s-bsd4-3.h)
|
|||
|
||||
Use m-mips4.h for RISCOS version 4; use s-bsd4-3.h with the BSD world.
|
||||
|
||||
Motorola Delta (m-delta.h; s-usg5-3.h)
|
||||
If you are compiling with GCC, then you must run fixincludes;
|
||||
the alternative of using -traditional won't work because
|
||||
the definition of SIGN_EXTEND_CHAR uses the keyword `signed'.
|
||||
|
||||
If the SYSV world is the default, then you probably need the following
|
||||
line in etc/Makefile:
|
||||
|
||||
CFLAGS= -g -systype bsd43
|
||||
|
||||
Some operating systems on MIPS machines give SIGTRAP for division by
|
||||
zero instead of the usual signals. The only real solution is to fix
|
||||
the system to give a proper signal.
|
||||
|
||||
In the meantime, you can change init_data in data.c if you wish.
|
||||
Change it to handle SIGTRAP as well as SIGFPE. But this will have a
|
||||
great disadvantage: you will not be able to run Emacs under a
|
||||
debugger. I think crashing on division by zero is a lesser problem.
|
||||
|
||||
Note that the proper m- file for the Decstation is m-pmax.h.
|
||||
|
||||
Motorola Delta 147 (m-delta.h; s-usg5-3.h)
|
||||
|
||||
m- file added in version 18.56.
|
||||
|
||||
Motorola Delta 187 (m-delta88k.h; s-usg5-3.h)
|
||||
|
||||
m- file added in version 18.58.
|
||||
HAVE_X_MENU may work if you modify oldXMenu/Makefile to compile insque.c.
|
||||
|
||||
National Semiconductor 32000 (m-ns32000.h; s-usg5-2.h)
|
||||
|
||||
This is for a complete machine from National Semiconductor,
|
||||
|
|
@ -528,31 +640,46 @@ NCR Tower 32 running System V release 3 (m-tower32v3.h; s-usg5-3.h)
|
|||
C_OPTIMIZE_SWITCH rather than C_DEBUG_SWITCH, and do not use gcc, check
|
||||
out the comments in src/m-tower32v3.h about this.
|
||||
|
||||
NeXT (m-next.h; s-mach2.h)
|
||||
|
||||
Changes merged in 18.59.
|
||||
|
||||
Nixdorf Targon 31 (m-targon31.h; s-usg5-2-2.h)
|
||||
|
||||
m- file for version 17 is included in 18
|
||||
but whether it works is not known.
|
||||
src/unexec.c bombs if compiled with -O.
|
||||
Changes merged in 18.56 may work.
|
||||
It may be necessary to define C_ALLOCA in m-targon31.h
|
||||
and it may be necessary to remove alloca from libc.a.
|
||||
(The alloca in libc.a is said to be broken.)
|
||||
Please report to the Foundation what works.
|
||||
|
||||
Note that the "Targon 35" is really a Pyramid.
|
||||
|
||||
Nu (TI or LMI) (m-nu.h; s-usg5-2.h)
|
||||
|
||||
Version 18 is believed to work.
|
||||
|
||||
pfa50 (m-pfa50.h; s-usg5-3.h)
|
||||
|
||||
Changes mostly merged in 18.59.
|
||||
|
||||
Plexus (m-plexus.h; s-usg5-2.h)
|
||||
|
||||
Works as of 17.56.
|
||||
|
||||
Pmax (DEC Mips) (m-pmax.h; s-bsd4-2.h)
|
||||
Pmax, Mips from DEC (m-pmax.h; s-bsd4-2.h)
|
||||
|
||||
See under DECstation, above.
|
||||
|
||||
Prime EXL (m-intel386.h; s-usg5-3.h)
|
||||
|
||||
Minor changes merged in 19.1.
|
||||
18.54 should work.
|
||||
|
||||
Pyramid (m-pyramid.h; s-bsd4-2.h)
|
||||
|
||||
18.58 seems to work on the MIServer 2/1T under OSx 5.1-910507.
|
||||
You need to build Emacs in the Berkeley universe with
|
||||
the `ucb' command, as in `ucb make' or `ucb build-install'.
|
||||
|
||||
In OSx 4.0, it seems necessary to add the following two lines
|
||||
to m-pyramid.h:
|
||||
#define _longjmp longjmp
|
||||
|
|
@ -571,14 +698,20 @@ Pyramid (m-pyramid.h; s-bsd4-2.h)
|
|||
Some old system versions may require you to define PYRAMID_OLD
|
||||
in when alloca.s is preprocessed, in order to define _longjmp and _setjmp.
|
||||
|
||||
Sequent Balance (m-sequent.h; s-bsd4-2.h, or s-bsd4-3.h on newer systems)
|
||||
Pyramid MIPS systems (m-pyrmips.h; s-usg5-4.h)
|
||||
|
||||
Emacs 18.51 should work on system version 3.0. 18.52 is said to work.
|
||||
Delete some lines at the end of m-sequent.h for earlier system versions.
|
||||
Changes merged in 18.59; may work. Dumping is not supported.
|
||||
Use CPP=/usr/ccs/lib/cpp when running make in src.
|
||||
|
||||
Sequent Symmetry (m-symmetry.h; s-bsd4-3.h)
|
||||
Sequent Balance (m-sequent.h; s-bsd4-2.h)
|
||||
|
||||
Emacs 19 should work.
|
||||
Emacs 18.51 should work on system version
|
||||
3.0. 18.5[23] is said to work. Delete some lines at the end of
|
||||
m-sequent.h for earlier system versions.
|
||||
|
||||
Sequent Symmetry (m-seq386.h; s-bsd4-2.h)
|
||||
|
||||
Changes merged in 18.59 for compiling with GCC.
|
||||
|
||||
SONY News (m-news.h; s-bsd4-2.h, or s-bsd4-3.h for system release 3)
|
||||
|
||||
|
|
@ -588,9 +721,12 @@ SONY News 3000 series (RISC NEWS) (m-news-risc.h; s-bsd4-3.h)
|
|||
|
||||
Works, as of 18.56. Note that this is a MIPS architecture machine.
|
||||
|
||||
Stardent 1500 or 3000
|
||||
|
||||
See Titan.
|
||||
Some versions of the operating system give SIGTRAP for division by zero
|
||||
instead of the usual signals. This causes division by zero
|
||||
to make Emacs crash. The system should be fixed to give the proper signal.
|
||||
Changing Emacs is not a proper solution, because it would prevent
|
||||
Emacs from working under any debugger. But you can change init_data
|
||||
in data.c if you wish.
|
||||
|
||||
Stride (m-stride.h; s-usg5-2.h)
|
||||
|
||||
|
|
@ -599,7 +735,8 @@ Stride (m-stride.h; s-usg5-2.h)
|
|||
It may be possible to run on their V.1 system but changes
|
||||
in the s- file would be needed.
|
||||
|
||||
Sun 1, 2 and 3 (m-sun1.h, m-sun2.h, m-sun3.h; s-bsd4-2.h or s-sunos4.h)
|
||||
Sun 1, 2 and 3 (m-sun1.h, m-sun2.h, m-sun3.h;
|
||||
s-bsd4-2.h, s-sunos4-0.h or s-sunos4-1.h)
|
||||
|
||||
There are three m- files for different versions of SunOS.
|
||||
All are derived from Berkeley 4.2. Emacs 17 has run on all of them.
|
||||
|
|
@ -607,14 +744,16 @@ Sun 1, 2 and 3 (m-sun1.h, m-sun2.h, m-sun3.h; s-bsd4-2.h or s-sunos4.h)
|
|||
on the VERSION OF THE OPERATING SYSTEM you have.
|
||||
You will need to use m-sun3.h on Sun 2's running SunOS release 3.
|
||||
|
||||
For SunOS release 4 on a Sun 3, use m-sun3.h and s-sunos4.h.
|
||||
For SunOS release 4 on a Sun 2 or Sun 3, use m-sun3.h and s-sunos4-1.h.
|
||||
(Use s-sunos4-0.h instead if using system version 4.0.*.)
|
||||
See the file etc/SUNBUG for how to solve problems caused by bugs in
|
||||
the "export" version of SunOS 4.
|
||||
|
||||
If you have trouble using open-network-stream, get the
|
||||
distribution of `bind' (the BSD name-server), build libresolv.a,
|
||||
and link Emacs with -lresolv. This problem is due to obsolete
|
||||
software in the nonshared standard library.
|
||||
If you get inappropriate "unknown host" errors from
|
||||
open-network-stream, get the distribution of `bind' (the BSD
|
||||
name-server), build libresolv.a, and link Emacs with -lresolv. This
|
||||
problem is due to obsolete software in the nonshared standard
|
||||
library.
|
||||
|
||||
If you want to use SunWindows, define HAVE_SUN_WINDOWS
|
||||
in config.h to enable a special interface called `emacstool'.
|
||||
|
|
@ -629,6 +768,11 @@ Sun 1, 2 and 3 (m-sun1.h, m-sun2.h, m-sun3.h; s-bsd4-2.h or s-sunos4.h)
|
|||
compiled to use the 68881, then you must edit config.h according
|
||||
the comments at the end of m-sun3.h.
|
||||
|
||||
It is advisable to add #define ForceNormalLib YES before building
|
||||
X11R5, to force creation of a nonshared library (as well as the
|
||||
shared X library). Emacs does not use shared libraries, so it
|
||||
needs to have a nonshared X library in order to run with X.
|
||||
|
||||
Note that Emacs on a Sun is not really as big as it looks.
|
||||
As dumped, it includes around 200k of zeros between the
|
||||
original text section and the original data section
|
||||
|
|
@ -638,20 +782,33 @@ Sun 1, 2 and 3 (m-sun1.h, m-sun2.h, m-sun3.h; s-bsd4-2.h or s-sunos4.h)
|
|||
To build a single Emacs that will run on Sun 2 and Sun 3
|
||||
HARDWARE, just build it on the Sun 2.
|
||||
|
||||
Sun 4 (m-sparc.h; s-bsd4-2.h or s-sunos4.h)
|
||||
Sun 4 (m-sparc.h; s-bsd4-2.h or s-sunos4-0.h or s-sunos4-1.h or s-sol2.h)
|
||||
|
||||
Changes merged in 18.50. Some people say optimizing compilation
|
||||
Works under Sunos 4; changes for Solaris 2 merged in Emacs 18.59.
|
||||
You may need to use CPP=/usr/ucb/cc -E in src/Makefile on Solaris 2.
|
||||
|
||||
Some people have said optimizing compilation
|
||||
does not work; some say that -O2 (whatever that is) works
|
||||
perhaps with a small change.
|
||||
|
||||
Use s-sunos4.h for operating system version 4.
|
||||
See the file etc/SUNBUG for how to solve problems caused by bugs in
|
||||
the "export" version of SunOS 4.
|
||||
See the entry above for the Sun 3; most of the information
|
||||
applies to the Sun 4 as well.
|
||||
|
||||
Sun Roadrunner (m-sun386.h; s-sunos4.h)
|
||||
Sun Roadrunner (m-sun386.h; s-sunos4-0.h)
|
||||
|
||||
Changes merged in 18.51.
|
||||
|
||||
Tadpole (m-tad68.h; s-usg5-3.h)
|
||||
|
||||
Changes merged in 18.58; minor fixes in 18.59.
|
||||
|
||||
You may need to edit Makefile to change the variables LIBDIR and
|
||||
BINDIR from /usr/local to /usr/contrib.
|
||||
|
||||
To give movemail access to /usr/mail, you may need to execute
|
||||
|
||||
chmod 2755 etc/movemail; chgrp mail etc/movemail
|
||||
|
||||
Tahoe (m-tahoe.h; s-bsd4-2.h or s-bsd4-3.h)
|
||||
|
||||
18.52 known to work on some Tahoes, but a compiler bug intervenes
|
||||
|
|
@ -672,15 +829,20 @@ Tektronix 16000 box (6130?) (m-ns16000.h; s-bsd4-2.h)
|
|||
|
||||
Emacs 17.61 worked.
|
||||
|
||||
Tektronix 4300 (m-tex4300.h; s-bsd4-3.h)
|
||||
Tektronix 4300 (m-tek4300.h; s-bsd4-3.h)
|
||||
|
||||
Emacs 18.51 should work.
|
||||
Emacs 18.58 should work.
|
||||
|
||||
Titan P2 or P3 (m-titan.h; s-usg5-3.h)
|
||||
Depending on which linker you use, you might want to change
|
||||
the value of TEXT_START in m-tek4300.h; though the native linker
|
||||
does use zero, it is possible (and reasonable) to use a linker
|
||||
that starts text elsewhere, like 0x2000.
|
||||
|
||||
Changes probably merged in version 19.
|
||||
Triton 88 (m-triton88.h; s-usg5-3.h?)
|
||||
|
||||
Ustation E30 (SS5E) (m-ustation.h; s-unipl5-2.h).
|
||||
Changes merged in 18.58.
|
||||
|
||||
Ustation E30 (SS5E) (m-ustation.h; s-unipl5-2.h)
|
||||
|
||||
Changes merged in 18.52; don't know whether they work.
|
||||
|
||||
|
|
|
|||
743
etc/MAILINGLISTS
Normal file
743
etc/MAILINGLISTS
Normal file
|
|
@ -0,0 +1,743 @@
|
|||
GNU Project Electronic Mailing Lists. Last Updated 23 Oct 91
|
||||
|
||||
Please report improvements to: gnu@prep.ai.mit.edu
|
||||
|
||||
* GNU mailing lists are also distributed as USENET news groups
|
||||
|
||||
The mailing lists are gated both ways with the gnu.all newsgroups at
|
||||
ohio-state.edu. The one-to-one correspondence is indicated below. If
|
||||
you don't know if your site is on USENET, ask your system administrator.
|
||||
If you are a USENET site and don't get the gnu.all newsgroups, please
|
||||
ask your USENET administrator to get them. If he has your feeds ask
|
||||
their feeds, you should win. And everyone else wins: newsgroups make
|
||||
better use of the limited bandwidth of the computer networks and your
|
||||
home machine than mailing list traffic; and staying off the mailing
|
||||
lists make better use of the people who maintain the lists and the
|
||||
machines that the GNU people working with rms use (i.e. we have more
|
||||
time to produce code!!). Thanx.
|
||||
|
||||
* Getting the mailing lists directly
|
||||
|
||||
If several users at your site or local network want to read a list and
|
||||
you aren't a USENET site, Project GNU would prefer that you would set up
|
||||
one address that redistributes locally. This reduces overhead on our
|
||||
people and machines, your gateway machine, and the network(s) used to
|
||||
transport the mail from us to you.
|
||||
|
||||
* How to subscribe to and report bugs in mailing lists
|
||||
|
||||
Send messages ABOUT these lists, such as reports of mail problems, or
|
||||
requests to be added or removed, to help-gnu-emacs-request (or
|
||||
info-gnu-request, bug-gdb-request, etc.), NOT to info-gnu-emacs (or
|
||||
info-gnu, etc.). These <LIST_NAME>-request addresses go only to the
|
||||
people who can do something about your requests or problems, and thus
|
||||
avoids disturbing everyone else.
|
||||
|
||||
Note that all GNU mailing lists are maintained by volunteers. They get
|
||||
behind occasionally. Wait at least 3 or 4 days before asking again.
|
||||
Thanks!
|
||||
|
||||
Many of the GNU mailing lists are very large and are received by many
|
||||
people. Please don't send them anything that is not seriously important
|
||||
to all their readers. All GNU mailing lists are unmoderated, mail
|
||||
reflectors, except info-gnu, info-gnu-emacs, info-gcc, info-g++ and
|
||||
info-gnu-fortran.
|
||||
|
||||
All addresses below are in internet format. Consult the mail guru for
|
||||
your computer to figure out address syntaxes from other networks. From
|
||||
UUCP machines:
|
||||
..!ucbvax!prep.ai.mit.edu!ADDRESS
|
||||
..!uunet!prep.ai.mit.edu!ADDRESS
|
||||
|
||||
If a message you mail to a list is returned from a MAILER-DAEMON (often
|
||||
with the line:
|
||||
----- Transcript of session follows -----
|
||||
don't resend the message to the list. All this return means is that
|
||||
your original message failed to reach a few addresses on the list. Such
|
||||
messages are NEVER a reason to resend a piece of mail a 2nd time. This
|
||||
just bothers all (less the few delivery failures (which will probably
|
||||
just fail again!)) of the readers of the list with a message they have
|
||||
already seen. It also wastes computer and network resources.
|
||||
|
||||
It is appropriate to send these to the -request address for a list, and
|
||||
ask them to check the problem out.
|
||||
|
||||
* Send Specific Requests for Information to: gnu@prep.ai.mit.edu
|
||||
|
||||
Specific requests for information about obtaining GNU software, or GNU
|
||||
activities in Cambridge and elsewhere can be directed to:
|
||||
gnu@prep.ai.mit.edu
|
||||
|
||||
* General Information about all lists
|
||||
|
||||
Please keep each message under 40,000 characters. Some mailers bounce
|
||||
messages that are longer than this.
|
||||
|
||||
Most of the time, when you reply to a message sent to a list, the reply
|
||||
should not go to the list. But most mail reading programs supply, by
|
||||
default, all the recipients of the original as recipients of the reply.
|
||||
Make a point of deleting the list address from the header when it does
|
||||
not belong. This prevents bothering all readers of a list, and reduces
|
||||
network congestion.
|
||||
|
||||
The GNU mailing lists and newsgroups, like the GNU project itself, exist
|
||||
to promote the freedom to share software. So don't use these lists to
|
||||
promote or recommend non-free software. (Using them to post ordering
|
||||
information is the ultimate faux pas.) If there is no free program to
|
||||
do a certain task, then somebody should write one!
|
||||
|
||||
* General Information about info-* lists
|
||||
|
||||
These lists and their newsgroups are meant for important announcements.
|
||||
Since the GNU project uses software development as a means for social
|
||||
change, the announcements may be technical or political.
|
||||
|
||||
Most GNU projects info-* lists (and their corresponding gnu.*.announce
|
||||
newsgroups) are moderated to keep their content significant and
|
||||
relevant. If you have a bug to report, send it to the bug-* list. If
|
||||
you need help on something else and the help-* list exists, ask it.
|
||||
|
||||
See section '* General Information about all lists'.
|
||||
|
||||
* General Information about help-* lists
|
||||
|
||||
These lists (and their newsgroups) exist for anyone to ask questions
|
||||
about the GNU software that the list deals with. The lists are read by
|
||||
people who are willing to take the time to help other users.
|
||||
|
||||
When you answer the questions that people ask on the help-* lists, keep
|
||||
in mind that you shouldn't answer by promoting a proprietary program as
|
||||
a solution. The only real solutions are the ones all the readers can
|
||||
share.
|
||||
|
||||
See section '* General Information about all lists'.
|
||||
|
||||
* General Information about bug-* lists and reporting program bugs
|
||||
|
||||
If you think something is a bug in a program, it might be one; or, it
|
||||
might be a misunderstanding or even a feature. Before beginning to
|
||||
report bugs, please read the section ``Reporting Emacs Bugs'' toward the
|
||||
end of the GNU Emacs reference manual (or node Emacs/Bugs in Emacs's
|
||||
built-in Info system) for a discussion of how and when to send in bug
|
||||
reports. For GNU programs other than GNU Emacs, also consult their
|
||||
documentation for their bug reporting procedures. Always include the
|
||||
version number of the GNU program, as well as the operating system and
|
||||
machine the program was ran on (if the program doesn't have a version
|
||||
number, send the date of the latest entry in the file ChangeLog). For
|
||||
GNU Emacs bugs, type "M-x emacs-version". A debugger backtrace of any
|
||||
core dump, can also be useful. Be careful to separate out hypothesis
|
||||
from fact! For bugs in GNU Emacs lisp, set variable debug-on-error to
|
||||
t, and re-enter the command(s) that cause the error message; Emacs will
|
||||
pop up a debug buffer if something is wrong; please include a copy of
|
||||
the buffer in your bug report.
|
||||
|
||||
Please don't send in a patch without a test case to illustrate the
|
||||
problem the patch is supposed to fix. Sometimes the patches aren't
|
||||
correct or aren't the best way to do the job, and without a test case
|
||||
there is no way to debug an alternate fix.
|
||||
|
||||
The purpose of reporting a bug is to enable the bug to be fixed for the
|
||||
sake of the whole community of users. You may or may not receive a
|
||||
response; the maintainers will send one if that helps them find or
|
||||
verify a fix. Most GNU maintainers are volunteers and all are
|
||||
overworked; they don't have time to help individuals and still fix the
|
||||
bugs and make the improvements that everyone wants. If you want help
|
||||
for yourself in particular, you may have to hire someone. The GNU
|
||||
project maintains a list of people providing such services. It is
|
||||
distributed with GNU Emacs in file etc/SERVICE, and can be requested
|
||||
from gnu@prep.ai.mit.edu.
|
||||
|
||||
Anything addressed to the implementors and maintainers of a GNU program
|
||||
via a bug-* list, should NOT be sent to the corresponding info-* or
|
||||
help-* list.
|
||||
|
||||
Please DON'T post your bug reports on the gnu.* newsgroups! Mail them
|
||||
to bug-*@prep instead! At first sight, it seems to make no difference:
|
||||
anything sent to one will be propagated to the other; but if you post on
|
||||
the newsgroup, the information about how to reach you is lost in the
|
||||
message that goes on the mailing list. It can be very important to know
|
||||
how to reach you if there is anything in the bug report that we don't
|
||||
understand. Bug reports also reach the GNU maintainers quickest when
|
||||
they are sent to the bug-* mailing list submittal address.
|
||||
|
||||
And please DON'T post your GNU bug reports to comp.* or other non gnu.*
|
||||
newsgroups, they never make it to the GNU maintainers at all. Please
|
||||
mail them to bug-*@prep instead!
|
||||
|
||||
See section '* General Information about all lists'.
|
||||
|
||||
* info-gnu-request@prep.ai.mit.edu to subscribe to info-gnu
|
||||
** gnUSENET newsgroup: gnu.announce
|
||||
** Send announcements to: info-gnu@prep.ai.mit.edu
|
||||
|
||||
This list distributes progress reports on the GNU Project. It is also
|
||||
used by the GNU Project to ask people for various kinds of help. It is
|
||||
NOT for general discussion.
|
||||
|
||||
The list is filtered to remove items meant for info-gnu-request, that
|
||||
can be answered by the moderator without bothering the list, or should
|
||||
have been sent to another list.
|
||||
|
||||
See section '* General Information about info-* lists'.
|
||||
|
||||
* gnu-misc-discuss-request@cis.ohio-state.edu to subscribe to gnu-misc-discuss
|
||||
** gnUSENET newsgroup: gnu.misc.discuss
|
||||
** Send contributions to: gnu-misc-discuss@cis.ohio-state.edu
|
||||
|
||||
This list is for serious discussion of freed software, the GNU
|
||||
Project, the GNU Manifesto and their implications. It's THE place for
|
||||
discussion that is not appropriate in the other GNU mailing lists and
|
||||
gnUSENET newsgroups.
|
||||
|
||||
Flaming is out of place. Tit-for-tat is not welcome. Repetition
|
||||
should not occur.
|
||||
|
||||
Good READING and writing are expected. Before posting, wait a while,
|
||||
cool off, and think.
|
||||
|
||||
Don't trust pronouncements made on gnu-misc-discuss about what GNU is,
|
||||
what FSF position is, what the GNU General Public License is, etc.,
|
||||
unless they are made by someone you know is well connected with GNU and
|
||||
are sure the message is not forged.
|
||||
|
||||
USENET and gnUSENET readers are expected to have read ALL the articles
|
||||
in news.announce.newusers before posting. If news.announce.newusers is
|
||||
empty at your site, wait (the articles are posted monthly), your posting
|
||||
isn't that urgent! Readers on the Internet can anonymous ftp these
|
||||
articles from wsmr-simtel20.army.mil under directory
|
||||
PD2:<UNIX-C.USENET>.
|
||||
|
||||
Someone from the Free Software Foundation will attempt to follow this
|
||||
group as time and volume permits.
|
||||
|
||||
Remember, "GNUs Not Unix" and "gnUSENET is Not USENET". We have
|
||||
higher standards!
|
||||
|
||||
Note that sending technical questions about specific GNU software to
|
||||
gnu-misc-discuss is likely to be less useful than sending them to the
|
||||
appropriate mailing list or gnUSENET newsgroup, since more technical
|
||||
people read those.
|
||||
|
||||
* bug-gnu-emacs-request@prep.ai.mit.edu to subscribe to bug-gnu-emacs
|
||||
** gnUSENET newsgroup: gnu.emacs.bug
|
||||
** Gnu Emacs bug reports to: bug-gnu-emacs@prep.ai.mit.edu
|
||||
|
||||
This list distributes, to the active maintainers of GNU Emacs, bug
|
||||
reports and fixes for, and suggestions for improvements in GNU Emacs.
|
||||
It is the place to report GNU Emacs bugs by all users of GNU Emacs.
|
||||
|
||||
Send bugs in the GNU Emacs Lisp reference manual to:
|
||||
lisp-manual-bugs@prep.ai.mit.edu
|
||||
|
||||
lisp-manual-bugs is neither a mailing list nor a gnUSENET newsgroup.
|
||||
It's just a bug-reporting address.
|
||||
|
||||
Subscribers to bug-gnu-emacs automatically receive all
|
||||
info-gnu-emacs messages.
|
||||
|
||||
See section '* General Information about bug-* lists and reporting
|
||||
program bugs'.
|
||||
|
||||
* gnu-emacs-sources-request@prep.ai.mit.edu to subscribe to gnu-emacs-sources
|
||||
** gnUSENET newsgroup: gnu.emacs.sources
|
||||
** Gnu Emacs source code to: gnu-emacs-sources@prep.ai.mit.edu
|
||||
|
||||
This list/newsgroup will be for the posting, by their authors, of lisp
|
||||
and C sources and patches that improve GNU Emacs. Its contents will
|
||||
be reviewed by FSF for inclusion in future releases of GNU Emacs.
|
||||
|
||||
Please do NOT discuss or request source code here. Use
|
||||
help-gnu-emacs/gnu.emacs.help for those purposes. This allows the
|
||||
automatic archiving of sources posted to this list/newsgroup.
|
||||
|
||||
Please do NOT post such sources to any other GNU mailing list (e.g
|
||||
help-gnu-emacs) or gnUSENET newsgroups (e.g. gnu.emacs.help). It's up
|
||||
to each poster to decide whether to cross-post to any non-gnUSENET
|
||||
newsgroup (e.g. comp.emacs or vmsnet.sources).
|
||||
|
||||
Please do NOT announce that you have posted source code to
|
||||
gnu.emacs.sources to any other GNU mailing list (e.g. help-gnu-emacs) or
|
||||
gnUSENET newsgroups (e.g. gnu.emacs.help). People who want to keep up
|
||||
with sources will read this list/newsgroup. It's up to each poster to
|
||||
decide whether to announce a gnu.emacs.sources article in any
|
||||
non-gnUSENET newsgroup (e.g comp.emacs or comp.sources.d).
|
||||
|
||||
If source or patches that were previously posted or a simple fix is
|
||||
requested in help-gnu-emacs, please mail it to the requester. Do NOT
|
||||
repost it. If you also want something that is requested, send mail to
|
||||
the requester asking him to forward it to you. This kind of traffic is
|
||||
best handled by e-mail, not by a broadcast medium that reaches thousands
|
||||
of sites.
|
||||
|
||||
If the source is very long (>10k bytes) send mail offering to send it.
|
||||
This prevents the requester from getting many redundant copies and saves
|
||||
network bandwidth.
|
||||
|
||||
* help-gnu-emacs-request@prep.ai.mit.edu to subscribe to help-gnu-emacs
|
||||
** gnUSENET newsgroup: gnu.emacs.help (and one-way into comp.emacs)
|
||||
** Send contributions to: help-gnu-emacs@prep.ai.mit.edu
|
||||
|
||||
This list is the place for users and installers of GNU Emacs to ask for
|
||||
help. Please send bug reports to bug-gnu-emacs instead of posting them
|
||||
here.
|
||||
|
||||
Since help-gnu-emacs is a very large list, send it only those items that
|
||||
are seriously important to many people.
|
||||
|
||||
If source or patches that were previously posted or a simple fix is
|
||||
requested in help-gnu-emacs, please mail it to the requester. Do NOT
|
||||
repost it. If you also want something that is requested, send mail to
|
||||
the requester asking him to forward it to you. This kind of traffic is
|
||||
best handled by e-mail, not a broadcast medium that reaches thousands of
|
||||
sites.
|
||||
|
||||
This list is also gated one way to USENET's newsgroup comp.emacs (once
|
||||
known as net.emacs). This one-way gating is done for users whose sites
|
||||
get comp.emacs, but not gnu.emacs.help. Users at non-USENET sites may
|
||||
receive all articles from comp.emacs by making their request to:
|
||||
unix-emacs-request@bbn.com
|
||||
|
||||
If Emacs crashes, or if you build Emacs following the standard procedure
|
||||
on a system which Emacs is supposed to work on (see etc/MACHINES) and it
|
||||
does not work at all, or if an editing command does not behave as it is
|
||||
documented to behave, this is a bug. Don't send bug reports to
|
||||
help-gnu-emacs (gnu.emacs.help) or post them to comp.emacs; mail them to
|
||||
bug-gnu-emacs instead.
|
||||
|
||||
See section '* General Information about help-* lists'.
|
||||
|
||||
* info-gnu-emacs-request@prep.ai.mit.edu to subscribe to info-gnu-emacs
|
||||
** gnUSENET newsgroup: gnu.emacs.announce (and one-way into comp.emacs)
|
||||
** Send announcements to: info-gnu-emacs@prep.ai.mit.edu
|
||||
|
||||
This list distributes announcements and progress reports on GNU Emacs.
|
||||
It is NOT for general discussion; please use help-gnu-emacs for that.
|
||||
|
||||
The list is filtered to remove items meant for info-gnu-emacs-request,
|
||||
that can be answered by the moderator without bothering the list, or
|
||||
should have been sent to another list.
|
||||
|
||||
info-gnu-emacs is also gated one way to USENET's newsgroup comp.emacs
|
||||
(once known as net.emacs). This one-way gating is done for users whose
|
||||
sites get comp.emacs, but not gnu.emacs.announce. Users at non-USENET
|
||||
sites may receive all articles from comp.emacs by making their request
|
||||
to: unix-emacs-request@bbn.com
|
||||
|
||||
Do not report GNU Emacs bugs to info-gnu-emacs or comp.emacs, instead
|
||||
mail them to bug-gnu-emacs@prep.ai.mit.edu.
|
||||
|
||||
See section '* General Information about info-* lists'.
|
||||
|
||||
* vms-gnu-emacs-request@harvard.harvard.edu to subscribe to vms-gnu-emacs
|
||||
** gnUSENET newsgroup: gnu.emacs.vms
|
||||
** Send contributions to: vms-gnu-emacs@harvard.harvard.edu
|
||||
*** UUCP: ..!uunet!harvard!vms-gnu-emacs-request
|
||||
|
||||
This list was a working group who did the initial port of GNU Emacs to
|
||||
the VMS operating system. It still discusses problems and solutions to
|
||||
the VMS port and the distribution of it.
|
||||
|
||||
* bug-bash-request@prep.ai.mit.edu to subscribe to bug-bash
|
||||
** gnUSENET newsgroup: gnu.bash.bug
|
||||
** BASH bug reports to: bug-bash@prep.ai.mit.edu
|
||||
|
||||
This list distributes, to the active maintainers of BASH (the Bourne
|
||||
Again SHell), bug reports and fixes for, and suggestions for
|
||||
improvements in BASH. It is the place to report BASH bugs by all users
|
||||
of BASH.
|
||||
|
||||
Always report the version number of the operating system, hardware, and
|
||||
bash (flag -version on startup or check the variable $BASH_VERSION in a
|
||||
running bash).
|
||||
|
||||
There are no other GNU mailing lists or gnUSENET newsgroups for BASH.
|
||||
|
||||
See section '* General Information about bug-* lists and reporting
|
||||
program bugs'.
|
||||
|
||||
* bug-gdb-request@prep.ai.mit.edu to subscribe to bug-gdb
|
||||
** gnUSENET newsgroup: gnu.gdb.bug
|
||||
** GDB bug reports to: bug-gdb@prep.ai.mit.edu
|
||||
|
||||
This list distributes, to the active maintainers of GDB (Gnu's
|
||||
DeBugger), bug reports and fixes for, and suggestions for improvements
|
||||
in GDB. It is the place to report GDB bugs by all users of GDB.
|
||||
|
||||
There are no other GNU mailing lists or gnUSENET newsgroups for GDB.
|
||||
|
||||
See section '* General Information about bug-* lists and reporting
|
||||
program bugs'.
|
||||
|
||||
* bug-gcc-request@prep.ai.mit.edu to subscribe to bug-gcc
|
||||
** gnUSENET newsgroup: gnu.gcc.bug
|
||||
** GCC bug reports to: bug-gcc@prep.ai.mit.edu
|
||||
|
||||
This list distributes bug reports for, fixes for bugs in, and
|
||||
suggestions for improvements in the GNU C Compiler to its active
|
||||
developers. It is the place to report GCC bugs by all testers of GCC.
|
||||
The GNU C Compiler still has bugs in it, and is not quite ready for
|
||||
everyday use.
|
||||
|
||||
Please don't send in a patch without a test case to illustrate the
|
||||
problem the patch is supposed to fix. Sometimes the patches aren't
|
||||
correct or aren't the best way to do the job, and without a test case
|
||||
there is no way to debug an alternate fix.
|
||||
|
||||
The most convenient form of test case is a piece of cpp output that can
|
||||
be passed directly to cc1. Preferably written in C, not C++.
|
||||
|
||||
Subscribers to bug-gcc automatically receive all info-gcc messages.
|
||||
|
||||
See section '* General Information about bug-* lists and reporting
|
||||
program bugs'.
|
||||
|
||||
* help-gcc-request@prep.ai.mit.edu to subscribe to help-gcc
|
||||
** gnUSENET newsgroup: gnu.gcc.help
|
||||
** Send contributions to: help-gcc@prep.ai.mit.edu
|
||||
|
||||
This list is the place for users and installers of the GNU C Compiler to
|
||||
ask for help.
|
||||
|
||||
If gcc crashes, or if you build gcc following the standard procedure on
|
||||
a system which gcc is supposed to work on (see config.gcc) and it does
|
||||
not work at all, or if an command line option does not behave as it is
|
||||
documented to behave, this is a bug. Don't send bug reports to help-gcc
|
||||
(gnu.gcc.help); mail them to bug-gcc instead.
|
||||
|
||||
See section '* General Information about help-* lists'.
|
||||
|
||||
* info-gcc-request@prep.ai.mit.edu to subscribe to info-gcc
|
||||
** gnUSENET newsgroup: gnu.gcc.announce
|
||||
** Send announcements to: info-gcc@prep.ai.mit.edu
|
||||
|
||||
This list distributes announcements and progress reports on the GNU C
|
||||
Compiler. It is NOT for general discussion; please use help-gcc for
|
||||
that.
|
||||
|
||||
The list is filtered to remove items meant for info-gcc-request, that
|
||||
can be answered by the moderator without bothering the list, or should
|
||||
have been sent to another list.
|
||||
|
||||
See section '* General Information about info-* lists'.
|
||||
|
||||
* bug-g++-request@prep.ai.mit.edu to subscribe to bug-g++
|
||||
** gnUSENET newsgroup: gnu.g++.bug
|
||||
** G++ bug reports to: bug-g++@prep.ai.mit.edu
|
||||
|
||||
This list distributes bug reports for, fixes for bugs in, and
|
||||
suggestions for improvements in the GNU C++ Compiler to its active
|
||||
developers. It is the place to report G++ bugs by all testers of G++.
|
||||
|
||||
G++ uses the GNU C-Compiler back end. Active developers may wish to
|
||||
subscribe to bug-gcc@prep.ai.mit.edu as well.
|
||||
|
||||
Subscribers to bug-g++ automatically receive all info-g++ messages.
|
||||
|
||||
See section '* General Information about bug-* lists and reporting
|
||||
program bugs'.
|
||||
|
||||
* help-g++-request@prep.ai.mit.edu to subscribe to help-g++
|
||||
** gnUSENET newsgroup: gnu.g++.help (and one-way into comp.lang.c++)
|
||||
** Send contributions to: help-g++@prep.ai.mit.edu
|
||||
|
||||
This list is the place for users and installers of the GNU C++ Compiler
|
||||
to ask for help. Please send bug reports to bug-g++ instead of posting
|
||||
them here.
|
||||
|
||||
help-g++ is also gated one way to USENET's newsgroup comp.lang.c++.
|
||||
This one-way gating is done for users whose sites get comp.lang.c++, but
|
||||
not gnu.g++.help.
|
||||
|
||||
If g++ crashes, or if you build g++ following the standard procedure on
|
||||
a system which g++ is supposed to work on (see config.g++) and it does
|
||||
not work at all, or if an command line option does not behave as it is
|
||||
documented to behave, this is a bug. Don't send bug reports to help-g++
|
||||
(gnu.g++.help) or post them to comp.lang.c++; mail them to bug-g++
|
||||
instead.
|
||||
|
||||
See section '* General Information about help-* lists'.
|
||||
|
||||
* info-g++-request@prep.ai.mit.edu to subscribe to info-g++
|
||||
** gnUSENET newsgroup: gnu.g++.announce (and one-way into comp.lang.c++)
|
||||
** Send announcements to: info-g++@prep.ai.mit.edu
|
||||
|
||||
This list distributes announcements and progress reports on the GNU C++
|
||||
Compiler. It is NOT for general discussion; please use help-g++ for
|
||||
that.
|
||||
|
||||
The list is filtered to remove items meant for info-g++-request, that
|
||||
can be answered by the moderator without bothering the list, or should
|
||||
have been sent to another list.
|
||||
|
||||
It is also gated one way to USENET's newsgroup comp.lang.c++. This
|
||||
one-way gating is done for users whose sites get comp.lang.c++, but not
|
||||
gnu.g++.announce.
|
||||
|
||||
Do not report g++ bugs to info-g++ or comp.lang.c++, mail them to
|
||||
bug-g++@prep.ai.mit.edu instead.
|
||||
|
||||
See section '* General Information about info-* lists'.
|
||||
|
||||
* bug-lib-g++-request@prep.ai.mit.edu to subscribe to bug-lib-g++
|
||||
** gnUSENET newsgroup: gnu.g++.lib.bug
|
||||
** lib-g++ bug reports to: bug-lib-g++@prep.ai.mit.edu
|
||||
|
||||
This list distributes, to the active maintainers of lib-g++ (GNU's
|
||||
library for C++), bug reports and fixes for, and suggestions for
|
||||
improvements in lib-g++. It is the place to report lib-g++ bugs by all
|
||||
users of lib-g++.
|
||||
|
||||
Announcements of new releases of lib-g++ are made on both info-g++ and
|
||||
bug-lib-g++.
|
||||
|
||||
There are no other GNU mailing lists or gnUSENET newsgroups for the G++
|
||||
Library.
|
||||
|
||||
See section '* General Information about bug-* lists and reporting
|
||||
program bugs'.
|
||||
|
||||
* info-gnu-fortran-request@prep.ai.mit.edu to subscribe to info-gnu-fortran
|
||||
** gnUSENET newsgroup: NONE YET
|
||||
** Send contributions to: info-gnu-fortran@prep.ai.mit.edu
|
||||
|
||||
This list is for progress reports about the GNU Fortran compiler. In
|
||||
the future it will also be used for release notices.
|
||||
|
||||
The list is filtered to remove items meant for info-gnu-fortran-request,
|
||||
that can be answered by the moderator without bothering the list, or
|
||||
should have been sent to another list.
|
||||
|
||||
See section '* General Information about info-* lists'.
|
||||
|
||||
There are no other GNU mailing lists or gnUSENET newsgroups for GNU
|
||||
Fortran (yet).
|
||||
|
||||
* bug-gnu-smalltalk-request@prep.ai.mit.edu to subscribe to bug-gnu-smalltalk
|
||||
** gnUSENET newsgroup: gnu.smalltalk.bug
|
||||
** GNU Smalltalk bug reports to: bug-gnu-smalltalk@prep.ai.mit.edu
|
||||
|
||||
GNU Smalltalk is the GNU project implementation of the Smalltalk language.
|
||||
|
||||
This list distributes, to the active maintainers of GNU Smalltalk, bug
|
||||
reports and fixes for, and suggestions for improvements to GNU
|
||||
Smalltalk. It is the place to report bugs in GNU Smalltalk by all users
|
||||
of the program.
|
||||
|
||||
For now, new releases of GNU Smalltalk will also be announced on this list.
|
||||
|
||||
There are no other GNU mailing lists or gnUSENET newsgroups for GNU
|
||||
Smalltalk.
|
||||
|
||||
See section '* General Information about bug-* lists and reporting
|
||||
program bugs'.
|
||||
|
||||
* bug-groff-request@prep.ai.mit.edu to subscribe to bug-groff
|
||||
** gnUSENET newsgroup: gnu.groff.bug
|
||||
** GNU groff bug reports to: bug-groff@prep.ai.mit.edu
|
||||
|
||||
groff is the GNU project implementation, in C++, of the traditional
|
||||
Unix document formatting tools. As of June 1990 it includes troff,
|
||||
pic, tbl, eqn, man macros, a PostScript driver, a driver which
|
||||
produces TeX dvi format and a driver for typewriter-like devices. A
|
||||
modified version of the Berkeley me macros and an enhanced version of
|
||||
the X11R4 xditview are also included.
|
||||
|
||||
This list distributes, to the active maintainers of groff, bug reports
|
||||
and fixes for, and suggestions for improvements to groff (and it
|
||||
component programs). It is the place for all users of groff to report
|
||||
bugs.
|
||||
|
||||
For now, new releases of groff will also be announced on this list.
|
||||
|
||||
There are no other GNU mailing lists or gnUSENET newsgroups for groff.
|
||||
|
||||
See section '* General Information about bug-* lists and reporting
|
||||
program bugs'.
|
||||
|
||||
* bug-ghostscript-request@prep.ai.mit.edu to subscribe to bug-ghostscript
|
||||
** gnUSENET newsgroup: gnu.ghostscript.bug
|
||||
** Ghostscript bug reports to: bug-ghostscript@prep.ai.mit.edu
|
||||
|
||||
GhostScript is the GNU project implementation of a language and graphics
|
||||
library with a remarkable similarity to PostScript.
|
||||
|
||||
This list distributes, to the active maintainers of Ghostscript, bug
|
||||
reports and fixes for, and suggestions for improvements in Ghostscript. It
|
||||
is the place to report bugs in Ghostscript by all users of them.
|
||||
|
||||
For now, new releases of Ghostscript will also be announced on this list.
|
||||
|
||||
There are no other GNU mailing lists or gnUSENET newsgroups for
|
||||
GhostScript.
|
||||
|
||||
See section '* General Information about bug-* lists and reporting
|
||||
program bugs'.
|
||||
|
||||
* info-gnu-chess-request@prep.ai.mit.edu to subscribe to info-gnu-chess
|
||||
** gnUSENET newsgroup: gnu.chess
|
||||
** Send contributions to: info-gnu-chess@prep.ai.mit.edu
|
||||
|
||||
This list reports new releases and information about the program GNU
|
||||
Chess.
|
||||
|
||||
See section '* General Information about info-* lists'.
|
||||
|
||||
* bug-gnu-utils-request@prep.ai.mit.edu to subscribe to bug-gnu-utils
|
||||
** gnUSENET newsgroup: gnu.utils.bug
|
||||
** GNU Utilities bug reports to: bug-gnu-utils@prep.ai.mit.edu
|
||||
|
||||
This list distributes, to the active maintainers of these programs, bug
|
||||
reports and fixes for, and suggestions for improvements in GNU programs
|
||||
not covered by other bug-* mailing lists/gnu.*.bug newsgroups. It is
|
||||
the place to report bugs in these GNU programs by all users of them.
|
||||
|
||||
There are no other GNU mailing lists or gnUSENET newsgroups for these
|
||||
GNU utilities.
|
||||
|
||||
See section '* General Information about bug-* lists and reporting
|
||||
program bugs'.
|
||||
|
||||
* bug-fortran-mode-request@erl.mit.edu to subscribe to bug-fortran-mode
|
||||
** USENET newsgroup: (none)
|
||||
** Fortran mode bug reports to: bug-fortran-mode@erl.mit.edu
|
||||
|
||||
This list collects bug reports, fixes for bugs, and suggestions for
|
||||
improvements in GNU Emacs's Fortran mode (a major mode to support
|
||||
editing Fortran source code).
|
||||
|
||||
It is the place to report Fortran mode bugs by all users of Fortran
|
||||
mode.
|
||||
|
||||
Always report the version number Fortran mode reports on startup as well
|
||||
as the version of Emacs.
|
||||
|
||||
There is no info-fortran-mode list. There are no USENET gateways to
|
||||
bug-fortran-mode at this time.
|
||||
|
||||
* info-gnus-request%flab.Fujitsu.JUNET@uunet.UU.NET to subscribe
|
||||
** gnUSENET newsgroup: NONE YET
|
||||
** Send contributions to: info-gnus%flab.Fujitsu.JUNET@uunet.UU.NET
|
||||
|
||||
The list is intended to exchange useful information about GNUS, such as
|
||||
bug reports, useful hooks, and extensions of GNUS. GNUS is an NNTP-base
|
||||
network news reader for GNU Emacs (which also works with a news spool).
|
||||
English and Japanese are the official languages of the list. GNUS is
|
||||
quite different than gnews.
|
||||
|
||||
* info-gnus-english-request@cis.ohio-state.edu to subscribe
|
||||
** gnUSENET newsgroup: gnu.emacs.gnus
|
||||
** Send contributions to: info-gnus-english@cis.ohio-state.edu
|
||||
|
||||
The list has the same charter as info-gnus. The difference is that
|
||||
English is the only official language of the list.
|
||||
|
||||
info-gnus-english/gnu.emacs.gnus is forward to info-gnus, but NOT
|
||||
vice-versa.
|
||||
|
||||
* info-gnews-request@ics.uci.edu to subscribe to info-gnews
|
||||
** gnUSENET newsgroup: gnu.emacs.gnews
|
||||
** Send contributions to: info-gnews@ics.uci.edu
|
||||
|
||||
This newsgroup is intended to exchange useful information about gnews,
|
||||
such as bug reports, useful hooks, and extensions of gnews. gnews is an
|
||||
NNTP-base network news reader for GNU Emacs (which also works a news
|
||||
spool). It is quite different than GNUS.
|
||||
|
||||
* gnu-emacs-ada-request@grebyn.com to subscribe to gnu-emacs-ada
|
||||
** gnUSENET newsgroup: NONE PLANNED
|
||||
** Gnu Emacs Ada support bug reports to: gnu-emacs-ada@grebyn.com
|
||||
|
||||
This list distributes bug reports for, fixes for bugs in, and
|
||||
suggestions for improvements in GNU Emacs' editing support of the Ada
|
||||
programming language.
|
||||
|
||||
There are no other GNU mailing lists or gnUSENET newsgroups for GNU
|
||||
Emacs' editing support of Ada.
|
||||
|
||||
See section '* General Information about bug-* lists and reporting
|
||||
program bugs'.
|
||||
|
||||
* bug-vm-request@uunet.uu.net to subscribe to bug-vm
|
||||
** gnUSENET newsgroup: NONE
|
||||
** VM mail reader bug reports to: bug-vm@uunet.uu.net
|
||||
|
||||
This list discusses bugs in View Mail mode for GNU Emacs, with an
|
||||
emphasis on beta and prerelease versions. It is the place to report
|
||||
bugs in VM.
|
||||
|
||||
Always report the version number of VM you are using, as well as the
|
||||
version of Emacs you're running. If you believe it is significant,
|
||||
report the operating system used and the hardware.
|
||||
|
||||
Subscribers to bug-vm automatically receive all info-vm messages.
|
||||
|
||||
* info-vm-request@uunet.uu.net to subscribe to info-vm
|
||||
** gnUSENET newsgroup: NONE
|
||||
** Send contributions to: info-vm@uunet.uu.net
|
||||
|
||||
This list dicusses the View Mail mode for GNU Emacs, an alternative to
|
||||
rmail mode.
|
||||
|
||||
* supercite-request@warsaw.nlm.nih.gov to subscribe to supercite
|
||||
** gnUSENET newsgroup: NONE PLANNED
|
||||
** Send articles to: supercite@warsaw.nlm.nih.gov
|
||||
*** UUCP: ..!uunet!warsaw.nlm.nih.gov!supercite-request
|
||||
|
||||
The supercite mailing list covers issues related to the advanced
|
||||
mail/news citation package called Supercite for GNU Emacs.
|
||||
|
||||
* bug-gnu960-request@mipon2.intel.com to subscribe to bug-gnu960
|
||||
** gnUSENET newsgroup: NONE PLANNED
|
||||
** Intel 960 Port bug reports to: bug-gnu960@mipon2.intel.com
|
||||
|
||||
This list distributes bug reports for, fixes for bugs in, and
|
||||
suggestions for improvements in Intel's port of GNU software to the
|
||||
Intel 960 microprocessor.
|
||||
|
||||
You can also fax to: GNU/960 - 1-503-696-4930.
|
||||
|
||||
There are no other GNU mailing lists or gnUSENET newsgroups for Intel's
|
||||
port of GNU software to the Intel 960 microprocessor.
|
||||
|
||||
See section '* General Information about bug-* lists and reporting
|
||||
program bugs'.
|
||||
|
||||
* gnu-manual-request@a.cs.uiuc.edu IS NOW DEFUNCT
|
||||
** DEAD: Gnusenet newsgroup: gnu.emacs.lisp.manual
|
||||
** DEAD address: gnu-manual@a.cs.uiuc.edu
|
||||
*** DEAD UUCP address: ..!uunet!uiucdcs!gnu-manual-request
|
||||
|
||||
This list and newsgroup is dead. It was a working group whose
|
||||
volunteers wrote, proofread and commented on the developing GNU Emacs
|
||||
Lisp programmers manual.
|
||||
|
||||
Send bugs in the GNU Emacs Lisp reference manual to:
|
||||
lisp-manual-bugs@prep.ai.mit.edu
|
||||
|
||||
lisp-manual-bugs is neither a mailing list nor a gnUSENET newsgroup.
|
||||
It's just a bug-reporting address.
|
||||
|
||||
* no mailing list request
|
||||
** gnUSENET newsgroup: gnu.gnusenet.config
|
||||
** no mailing list
|
||||
|
||||
This newsgroup has nothing to do with GNU software, especially its
|
||||
configuration. It's exists to distribute information about the
|
||||
administration and configuration of gnUSENET: the gnu.all alternative
|
||||
USENET hierarchy that carry the GNU mailing lists.
|
||||
|
||||
Administrators of gnUSENET hosts receiving the gnu.all newsgroups are
|
||||
welcome to ask questions here or via e-mail of gnu@prep.ai.mit.edu.
|
||||
|
||||
* no mailing list request
|
||||
** gnUSENET newsgroup: gnu.gnusenet.test
|
||||
** no mailing list
|
||||
|
||||
This newsgroup has nothing to do with GNU software, especially its
|
||||
testing. It's exists to allow test messages to be made in gnUSENET: the
|
||||
gnu.all alternative USENET hierarchy that carry the GNU mailing lists.
|
||||
|
||||
Local variables:
|
||||
mode: outline
|
||||
fill-column: 72
|
||||
End:
|
||||
176
etc/MOTIVATION
Normal file
176
etc/MOTIVATION
Normal file
|
|
@ -0,0 +1,176 @@
|
|||
STUDIES FIND REWARD OFTEN NO MOTIVATOR
|
||||
|
||||
Creativity and intrinsic interest diminish if task is done for gain
|
||||
|
||||
By Alfie Kohn
|
||||
Special to the Boston Globe
|
||||
[reprinted with permission of the author
|
||||
from the Monday 19 January 1987 Boston Globe]
|
||||
|
||||
In the laboratory, rats get Rice Krispies. In the classroom the top
|
||||
students get A's, and in the factory or office the best workers get
|
||||
raises. It's an article of faith for most of us that rewards promote
|
||||
better performance.
|
||||
|
||||
But a growing body of research suggests that this law is not nearly as
|
||||
ironclad as was once thought. Psychologists have been finding that
|
||||
rewards can lower performance levels, especially when the performance
|
||||
involves creativity.
|
||||
|
||||
A related series of studies shows that intrinsic interest in a task -
|
||||
the sense that something is worth doing for its own sake - typically
|
||||
declines when someone is rewarded for doing it.
|
||||
|
||||
If a reward - money, awards, praise, or winning a contest - comes to
|
||||
be seen as the reason one is engaging in an activity, that activity
|
||||
will be viewed as less enjoyable in its own right.
|
||||
|
||||
With the exception of some behaviorists who doubt the very existence
|
||||
of intrinsic motivation, these conclusions are now widely accepted
|
||||
among psychologists. Taken together, they suggest we may unwittingly
|
||||
be squelching interest and discouraging innovation among workers,
|
||||
students and artists.
|
||||
|
||||
The recognition that rewards can have counter-productive effects is
|
||||
based on a variety of studies, which have come up with such findings
|
||||
as these: Young children who are rewarded for drawing are less likely
|
||||
to draw on their own that are children who draw just for the fun of
|
||||
it. Teenagers offered rewards for playing word games enjoy the games
|
||||
less and do not do as well as those who play with no rewards.
|
||||
Employees who are praised for meeting a manager's expectations suffer
|
||||
a drop in motivation.
|
||||
|
||||
Much of the research on creativity and motivation has been performed
|
||||
by Theresa Amabile, associate professor of psychology at Brandeis
|
||||
University. In a paper published early last year on her most recent
|
||||
study, she reported on experiments involving elementary school and
|
||||
college students. Both groups were asked to make "silly" collages.
|
||||
The young children were also asked to invent stories.
|
||||
|
||||
The least-creative projects, as rated by several teachers, were done
|
||||
by those students who had contracted for rewards. "It may be that
|
||||
commissioned work will, in general, be less creative than work that is
|
||||
done out of pure interest," Amabile said.
|
||||
|
||||
In 1985, Amabile asked 72 creative writers at Brandeis and at Boston
|
||||
University to write poetry. Some students then were given a list of
|
||||
extrinsic (external) reasons for writing, such as impressing teachers,
|
||||
making money and getting into graduate school, and were asked to think
|
||||
about their own writing with respect to these reasons. Others were
|
||||
given a list of intrinsic reasons: the enjoyment of playing with
|
||||
words, satisfaction from self-expression, and so forth. A third group
|
||||
was not given any list. All were then asked to do more writing.
|
||||
|
||||
The results were clear. Students given the extrinsic reasons not only
|
||||
wrote less creatively than the others, as judged by 12 independent
|
||||
poets, but the quality of their work dropped significantly. Rewards,
|
||||
Amabile says, have this destructive effect primarily with creative
|
||||
tasks, including higher-level problem-solving. "The more complex the
|
||||
activity, the more it's hurt by extrinsic reward," she said.
|
||||
|
||||
But other research shows that artists are by no means the only ones
|
||||
affected.
|
||||
|
||||
In one study, girls in the fifth and sixth grades tutored younger
|
||||
children much less effectively if they were promised free movie
|
||||
tickets for teaching well. The study, by James Gabarino, now
|
||||
president of Chicago's Erikson Institute for Advanced Studies in Child
|
||||
Development, showed that tutors working for the reward took longer to
|
||||
communicate ideas, got frustrated more easily, and did a poorer job in
|
||||
the end than those who were not rewarded.
|
||||
|
||||
Such findings call into question the widespread belief that money is
|
||||
an effective and even necessary way to motivate people. They also
|
||||
challenge the behaviorist assumption that any activity is more likely
|
||||
to occur if it is rewarded. Amabile says her research "definitely
|
||||
refutes the notion that creativity can be operantly conditioned."
|
||||
|
||||
But Kenneth McGraw, associate professor of psychology at the
|
||||
University of Mississippi, cautions that this does not mean
|
||||
behaviorism itself has been invalidated. "The basic principles of
|
||||
reinforcement and rewards certainly work, but in a restricted context"
|
||||
- restricted, that is, to tasks that are not especially interesting.
|
||||
|
||||
Researchers offer several explanations for their surprising findings
|
||||
about rewards and performance.
|
||||
|
||||
First, rewards encourage people to focus narrowly on a task, to do it
|
||||
as quickly as possible and to take few risks. "If they feel that
|
||||
'this is something I hve to get through to get the prize,' the're
|
||||
going to be less creative," Amabile said.
|
||||
|
||||
Second, people come to see themselves as being controlled by the
|
||||
reward. They feel less autonomous, and this may interfere with
|
||||
performance. "To the extent one's experience of being
|
||||
self-determined is limited," said Richard Ryan, associate psychology
|
||||
professor at the University of Rochester, "one's creativity will be
|
||||
reduced as well."
|
||||
|
||||
Finally, extrinsic rewards can erode intrinsic interest. People who
|
||||
see themselves as working for money, approval or competitive success
|
||||
find their tasks less pleasurable, and therefore do not do them as
|
||||
well.
|
||||
|
||||
The last explanation reflects 15 years of work by Ryan's mentor at the
|
||||
University of Rochester, Edward Deci. In 1971, Deci showed that
|
||||
"money may work to buy off one's intrinsic motivation for an activity"
|
||||
on a long-term basis. Ten years later, Deci and his colleagues
|
||||
demonstrated that trying to best others has the same effect. Students
|
||||
who competed to solve a puzzle quickly were less likely than those who
|
||||
were not competing to keep working at it once the experiment was over.
|
||||
|
||||
Control plays role
|
||||
|
||||
There is general agreement, however, that not all rewards have the
|
||||
same effect. Offering a flat fee for participating in an experiment -
|
||||
similar to an hourly wage in the workplace - usually does not reduce
|
||||
intrinsic motivation. It is only when the rewards are based on
|
||||
performing a given task or doing a good job at it - analogous to
|
||||
piece-rate payment and bonuses, respectively - that the problem
|
||||
develops.
|
||||
|
||||
The key, then, lies in how a reward is experienced. If we come to
|
||||
view ourselves as working to get something, we will no longer find
|
||||
that activity worth doing in its own right.
|
||||
|
||||
There is an old joke that nicely illustrates the principle. An
|
||||
elderly man, harassed by the taunts of neighborhood children, finally
|
||||
devises a scheme. He offered to pay each child a dollar if they would
|
||||
all return Tuesday and yell their insults again. They did so eagerly
|
||||
and received the money, but he told them he could only pay 25 cents on
|
||||
Wednesday. When they returned, insulted him again and collected their
|
||||
quarters, he informed them that Thursday's rate would be just a penny.
|
||||
"Forget it," they said - and never taunted him again.
|
||||
|
||||
Means to and end
|
||||
|
||||
In a 1982 study, Stanford psychologist Mark L. Lepper showed that any
|
||||
task, no matter how enjoyable it once seemed, would be devalued if it
|
||||
were presented as a means rather than an end. He told a group of
|
||||
preschoolers they could not engage in one activity they liked until
|
||||
they first took part in another. Although they had enjoyed both
|
||||
activities equally, the children came to dislike the task that was a
|
||||
prerequisite for the other.
|
||||
|
||||
It should not be surprising that when verbal feedback is experienced
|
||||
as controlling, the effect on motivation can be similar to that of
|
||||
payment. In a study of corporate employees, Ryan found that those who
|
||||
were told, "Good, you're doing as you /should/" were "significantly
|
||||
less intrinsically motivated than those who received feedback
|
||||
informationally."
|
||||
|
||||
There's a difference, Ryan says, between saying, "I'm giving you this
|
||||
reward because I recognize the value of your work" and "You're getting
|
||||
this reward because you've lived up to my standards."
|
||||
|
||||
A different but related set of problems exists in the case of
|
||||
creativity. Artists must make a living, of course, but Amabile
|
||||
emphasizes that "the negative impact on creativity of working for
|
||||
rewards can be minimized" by playing down the significance of these
|
||||
rewards and trying not to use them in a controlling way. Creative
|
||||
work, the research suggests, cannot be forced, but only allowed to
|
||||
happen.
|
||||
|
||||
/Alfie Kohn, a Cambridge, MA writer, is the author of "No Contest: The
|
||||
Case Against Competition," recently published by Houghton Mifflin Co.,
|
||||
Boston, MA. ISBN 0-395-39387-6. /
|
||||
87
etc/Makefile
Normal file
87
etc/Makefile
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
CFLAGS= -g
|
||||
# For Xenix. Needed for movemail
|
||||
# LOADLIBES= -lx
|
||||
# For Mips. Needed for who knows what.
|
||||
# CFLAGS = -g -systype bsd43
|
||||
|
||||
EXECUTABLES = test-distrib etags ctags wakeup make-docfile \
|
||||
digest-doc sorted-doc movemail cvtmail fakemail yow env \
|
||||
server emacsclient
|
||||
|
||||
all: ${EXECUTABLES}
|
||||
|
||||
clean:
|
||||
-rm -f ${EXECUTABLES} core
|
||||
|
||||
distclean:
|
||||
-rm -f ${EXECUTABLES} *~ \#* DOC* core
|
||||
|
||||
# This justs verifies that the non-ASCII characters
|
||||
# in the file `testfile' have no been clobbered by
|
||||
# whatever means were used to copy and distribute Emacs.
|
||||
# If they were clobbered, all the .elc files were clobbered too.
|
||||
test-distrib: test-distrib.c
|
||||
$(CC) -o test-distrib test-distrib.c
|
||||
./test-distrib
|
||||
|
||||
etags: etags.c
|
||||
$(CC) -o etags ${CFLAGS} -DETAGS etags.c $(LOADLIBES)
|
||||
|
||||
ctags: etags.c
|
||||
$(CC) -o ctags ${CFLAGS} -DCTAGS etags.c $(LOADLIBES)
|
||||
|
||||
wakeup: wakeup.c
|
||||
$(CC) -o wakeup ${CFLAGS} wakeup.c $(LOADLIBES)
|
||||
|
||||
make-docfile: make-docfile.c
|
||||
$(CC) -o make-docfile ${CFLAGS} make-docfile.c $(LOADLIBES)
|
||||
|
||||
digest-doc: digest-doc.c
|
||||
$(CC) -o digest-doc ${CFLAGS} digest-doc.c $(LOADLIBES)
|
||||
|
||||
sorted-doc: sorted-doc.c
|
||||
$(CC) -o sorted-doc ${CFLAGS} sorted-doc.c $(LOADLIBES)
|
||||
|
||||
#
|
||||
movemail: movemail.c ../src/config.h
|
||||
$(CC) -o movemail ${CFLAGS} movemail.c $(LOADLIBES)
|
||||
|
||||
cvtmail: cvtmail.c
|
||||
$(CC) -o cvtmail ${CFLAGS} cvtmail.c $(LOADLIBES)
|
||||
|
||||
fakemail: fakemail.c ../src/config.h
|
||||
$(CC) -o fakemail ${CFLAGS} fakemail.c $(LOADLIBES)
|
||||
|
||||
yow: yow.c ../src/paths.h
|
||||
$(CC) -o yow ${CFLAGS} yow.c $(LOADLIBES)
|
||||
|
||||
# this is silly -- just use emacs to edit this file!
|
||||
# (in any case this program doesn't preserve alphabetical ordering,
|
||||
# which is why I'm removing it)
|
||||
#addyow: addyow.c
|
||||
# $(CC) -o addyow ${CFLAGS} addyow.c
|
||||
|
||||
env: env.c ../src/config.h
|
||||
$(CC) -o env -DEMACS ${CFLAGS} env.c $(LOADLIBES)
|
||||
|
||||
server: server.c ../src/config.h
|
||||
$(CC) -o server ${CFLAGS} server.c $(LOADLIBES)
|
||||
|
||||
emacsclient: emacsclient.c ../src/config.h
|
||||
$(CC) -o emacsclient ${CFLAGS} emacsclient.c $(LOADLIBES)
|
||||
|
||||
# This one is NOT included in EXECUTABLES.
|
||||
# See ../src/ymakefile.
|
||||
emacstool: emacstool.c
|
||||
$(CC) -o emacstool ${CFLAGS} emacstool.c -lsuntool -lsunwindow -lpixrect $(LOADLIBES)
|
||||
|
||||
nemacstool: emacstool.c
|
||||
$(CC) -o nemacstool ${CFLAGS} -DJLE emacstool.c -lsuntool -lmle -lsunwindow -lpixrect $(LOADLIBES) # For SUN Japanese Language Environment
|
||||
|
||||
xvetool: emacstool.c
|
||||
$(CC) -o xvetool ${CFLAGS} -DXVIEW emacstool.c -lxview -lolgx -lX -I$(OPENWINHOME)/include -L$(OPENWINHOME)/lib $(LOADLIBES)
|
||||
|
||||
xveterm: emacstool.c
|
||||
$(CC) -o xveterm ${CFLAGS} -DXVIEW -DTTERM emacstool.c -lxview -lolgx -lX -I$(OPENWINHOME)/include -L$(OPENWINHOME)/lib $(LOADLIBES)
|
||||
|
||||
|
||||
188
etc/NICKLES.WORTH
Normal file
188
etc/NICKLES.WORTH
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
Article from _Computer Language_ by Bruce Tonkin.
|
||||
|
||||
Several prominent software companies have caused a stir lately by dropping
|
||||
all development work in Pascal and adopting Microsoft BASIC. When queried all
|
||||
have declined to comment about this move, but one company insider (code-named
|
||||
Deep Poke) suggested talking to Niklaus Wirth to get the full story.
|
||||
Speaking from his home in Zurich, Switzerland, Wirth proved to be a far
|
||||
more genial soul than one might imagine, being the founder of Pascal and all.
|
||||
But the European lifestyle obviously agrees with him, and he was more than
|
||||
willing to provide some insights into this strange phenomenon, currently taking
|
||||
place in the computer industry.
|
||||
In fact, what began as an innocent inquiry eventually revealed a shocking
|
||||
and exclusive piece of information: that the invention of Pascal nearly 20
|
||||
years ago was intended entirely as a joke, an April Fools' prank.
|
||||
Wirth tried to explain. "Every year at the Swiss Federal Institute for
|
||||
Technology [the university in Zurich where Wirth is a professor of computer
|
||||
science] I taught the same classes, gave the same tests, told the same
|
||||
jokes," he began. "it was boring. I needed a little humor. So I started
|
||||
talking about this crazy language called Pascal. Eventually, the Pascal joke
|
||||
became so popular I just kept adding to it, making it more and more elaborate.
|
||||
"But some of the students went to class so seldom that they missed the
|
||||
joke and thought Pascal was a real language! Imagine the looks on their faces
|
||||
when they got out into the world and discovered there was no such thing as a
|
||||
language called Pascal. Hoo-boy! They sure learned to pay attention after
|
||||
that!" he said, giggling.
|
||||
Several of his better students, he continued, figured they'd make some
|
||||
money by fleecing the people who actually believed in Pascal and so wrote a
|
||||
simple Pascal compiler for this purpose. It was actually a kind of prank, much
|
||||
like selling elevator passes to high school freshmen.
|
||||
"Yes, yes," Wirth said, "the UCSD operating system started the same way.
|
||||
The same bunch of rascals who did the whole Pascal thing kept pushing the idea
|
||||
until it reached the point of complete absurdity. They were hysterical!
|
||||
Especially late at night - they'd come up with some really boffo material.
|
||||
They the next week they'd modify it and it would get even more entertaining."
|
||||
Wirth's best student was Philippe Kahn, who he met while Kahn was a
|
||||
student. "I used to go to a small bistro called 'Der Blaue Engel' after my
|
||||
classes, and it happened that Kahn played jazz saxophone there while people
|
||||
danced on the tables." Wirth was impressed with Kahn's talent and evident wit
|
||||
and encouraged him to end his musical career and enter the lucrative field of
|
||||
software comedy. Once he explained Pascal's comedic possibilities, Kahn was
|
||||
hooked and quickly agreed.
|
||||
Since most of the staff at Apple Computer Inc. was educated at the
|
||||
University of California at San Diego, they were also in on the joke, Wirth
|
||||
said. "That's why they kept pushing Pascal. A bunch of fine kids, those Apple
|
||||
guys. Born comedians, most of them. Except this one guy - he had no sense
|
||||
of humor at all. [Editor's hint: not Woz.]
|
||||
"When we finally decided to do a DOS that was even funnier than UCSD
|
||||
Pascal, the feeling was that UCSD was already the ultimate. But then one of
|
||||
the guys proposed doing a DOS that was written in Pascal but used hieroglyphics
|
||||
instead of a written language. What a genius! We were rolling in the aisles.
|
||||
But that one guy, he thought we were serious. What a nerd!"
|
||||
Wirth's list of the funniest features of Pascal begins with the lack of a
|
||||
string data type, no random file access, primitive numeric handling, and the
|
||||
existential absurdity of the semicolon.
|
||||
"But I'd have to say that my crowning achievement was the lack of input
|
||||
and output functions. First you can't get anything in too easy. And once it's
|
||||
in, you can't do much with it. Pascal isn't good with letters and it's not
|
||||
good at all with numbers. Besides, I made it very picky. You have to
|
||||
recompile, recompile, recompile forever. Ha! And once you've done something
|
||||
with the data, you can't get it out." Wirth started chuckling uncontrollably.
|
||||
"Philippe has said C is a write-only language - I made Pascal a read-only
|
||||
language!" His chuckling turned into hysterical laughter that went on for
|
||||
several minutes.
|
||||
"Of course, some didn't get the joke," he finally said when he could speak
|
||||
again. "They kept trying to make Pascal actually useful. But I stopped them;
|
||||
I made the original Pascal a standard. That meant anyone who made Pascal good
|
||||
for anything was nonstandard and out on a limb!"
|
||||
|
||||
* * * * *
|
||||
|
||||
How will all this affect the future of Modula-2? Wirths' merry manner
|
||||
and beaming face suddenly became hard when presented with this question;
|
||||
perhaps this was taboo territory, sacred subject matter.
|
||||
"Modula-2 is a real language," he finally said, his demeanor solemn. "It
|
||||
represents a serious effort on my part to make amends for any damage caused by
|
||||
well-meaning but unimaginative people teaching and learning Pascal.
|
||||
"But it's so hard! Pascal is a very good joke, yes? But to make a really
|
||||
good language from it is not so easy," he sighed.
|
||||
In addition to Pascal, Wirth admitted, three other languages also were
|
||||
intended as pranks: Forth, PL/I, and True BASIC.
|
||||
"Forth is essentially black humor," Wirth said. "Charles Moore [who
|
||||
created the language in the late 1960s] designed it as a native language for
|
||||
people whose brains ran backward." Originally, he continued, it was supposed
|
||||
to be the ultimate parody of Hewlett-Packard calculators, which Moore has been
|
||||
competing with unsuccessfully for years. As an astronomer, he had used HP's
|
||||
calculators out of necessity rather than any appreciation for their design.
|
||||
But to his great surprise, he found that there were actually quite a few
|
||||
people whose brains did run in reverse. Eventually, Moore came to see Forth
|
||||
as a boon, especially for backward thinkers. "At least it keeps them of the
|
||||
streets out of really serious trouble," Wirth said. "Imagine one of them
|
||||
trying to drive a car or operate heavy machinery!"
|
||||
PL/I originally stood for "Prostituted Language/Interface," Wirth
|
||||
explained. "The designers were under so much pressure to add features and
|
||||
include every possible construction from every other language in existence that
|
||||
they eventually gave up and decided to play the whole thing for laughs. They
|
||||
said 'yes' to every request, no matter how absurd, and even added things to
|
||||
the language no one ever could or would use. The scoured journals for
|
||||
off-beat syntax and weird symbolic notation; some of their better ideas came
|
||||
from early editions of The Mad Reader and other E. C. publications. Besides,
|
||||
several of them were upset with the compiler-writing team and decided to stick
|
||||
it to them with a life-time project."
|
||||
True BASIC is not "True" in the sense most people understand the word,
|
||||
Wirth continued. Rather, "True" is itself an acronym for a "Totally wRecked-Up
|
||||
Example of." The professors who came up with it are amazed that no one has
|
||||
yet caught on to the joke; they felt sure their insistence on the LET keyword
|
||||
would be a dead giveaway. "Of course there were other clues, but this was the
|
||||
most clear-cut," Wirth said. "They even called Microsoft BASIC a street
|
||||
BASIC in hopes that Bill Gates would challenge them and reveal the joke."
|
||||
But Gates refused to play along, and both professors had to all but beg Wirth
|
||||
to tell the world the truth about True BASIC before things went any further.
|
||||
|
||||
* * * * *
|
||||
|
||||
Jokes abound in the world of operating systems as well, according to
|
||||
Wirth. In addition to the UCSD Pascal operating system, said Wirth, "Tandy,
|
||||
Apple, and Commodore were for a number of years carrying out a private comedic
|
||||
battle to see who could produce the world's funniest DOS."
|
||||
Tandy's TRS-DOS (Tandy Radio Signal Detection Operating System - a
|
||||
reference to the fact that early machines would reboot when any transmitted
|
||||
signal was detected) was an early front-runner until Apple came out with the
|
||||
vary amusing Control-D command what could enable or disable disk operations.
|
||||
In the end, though, Commodore won the battle. Its DOS was oriented toward
|
||||
records exactly the size of punch cards and took over four minutes to boot from
|
||||
disk since it read disk data more slowly than most audio tape machines and even
|
||||
some 300-baud modems.
|
||||
But the funniest joke of all is, in Wirth's estimation, also the most
|
||||
common, and he's amazed so few people have caught on to it yet.
|
||||
"Come on, come on. Surely you can guess," he said, his voice rising in
|
||||
excitement. "What one thing makes users more livid than any other? What one
|
||||
computer product makes you feel sure it was produced by a team of trained
|
||||
gerbils on mind-altering drugs? Yes, yes, yes! You see it now - manuals!"
|
||||
Wirth considers Gates, who wrote all the BASIC manuals and who was on the
|
||||
staff of many others, a "comic genius." "Mitch Kapor should get more
|
||||
recognition - he's far better than Neil Simon. And what's-his-name, the guy
|
||||
who wrote the WordStar manual - he got an award at at dinner we threw for
|
||||
him a few years back. That manual is a classic in the truest Marxist
|
||||
[brothers] sense of the word! Pure slapstick! But the best of them all is the
|
||||
author of the dBase II manual. Now there is a writer for the ages!"
|
||||
As for the IBM manuals, Wirth considers them mere hack work. "Anyone can
|
||||
do stuff like that," he snorted.
|
||||
But perusing a copy of the manual for NEWDOS, he seemed a little more
|
||||
impressed. "Hmmmm. Not bad work. Not bad at all," he said. "But it's still
|
||||
simple stuff. 'To do this, read page 40. But to know what's on page 40, you
|
||||
have to read page 65, which refers to page 15, which shows a whole list of
|
||||
exceptions for page 53.' Entertaining, but hardly in the class of any of the
|
||||
modern masters of the art." But when his attention was brought to the fact
|
||||
that none of the error numbers listed in the NEWDOS manual were ever returned
|
||||
to the BASIC programmer, and that the most common disk setup (double-density,
|
||||
double-sided) was not on the configuration menu, Wirth admitted that these were
|
||||
indeed nice touches.
|
||||
Although it is a known fact that most of the early computer manuals
|
||||
(probably even the NEWDOS manual) were written by programmers and that
|
||||
programmers are notoriously poor writers, Wirth would not be deterred from his
|
||||
opinion that these writings are works of art.
|
||||
"Most people fail to consider that good programmers are very bright.
|
||||
Their thoughts are extremely well organized and most of them have the benefit
|
||||
of higher education. Their brains are not warped by overexposure to TV and
|
||||
their attention spans are not short-circuited by overindulgence in sex, drugs,
|
||||
or alcohol. They are not constrained by conventionality. If you want to get
|
||||
picky, there are a lot more programmers than there ever were writers. And
|
||||
programmers simply work harder than writers. Few writers work 100 hours a
|
||||
week; almost all programmers do."
|
||||
The result, according to Wirth? "All programmers write at least as well
|
||||
as Faulkner. Most are as good as Proust, and about a third are as good as
|
||||
Dickens. Several hundred are at least as good as Shakespeare. So the manuals
|
||||
you thought were inferior were simply beyond your poor ability to appreciate.
|
||||
If you were a programmer, you would delight in their verbal virtuosity," he
|
||||
said.
|
||||
In fact, Wirth claimed, even the grammatical errors and misspellings in
|
||||
the manuals were placed there deliberately. Most are elaborate literary
|
||||
allusions and puns; some are inventive Joycean neologisms. As an example,
|
||||
Wirth discussed the history of the word "kernal."
|
||||
"Everyone, including programmers, knows the word is spelled k-e-r-n-e-l,"
|
||||
he explained. "The deliberate misspelling is an implied criticism of the
|
||||
typesetter (a writer's bane for years.) Of course typesetters kern the letter
|
||||
l; thus, 'kern el.' But kerning can only be done for certain letter
|
||||
combinations, such as two l's. Thus, 'kern a l' dares the typesetter to kern
|
||||
an isolated l, an obvious typographic impossibility.
|
||||
"Moreover," he continued, "'kernal' is an anagram for 'rankle,' which
|
||||
describes programmers' feelings toward typesetters. Finally the inventor of
|
||||
this particular word, R. K. Lane (who is well known within the Southern
|
||||
California computer community) has concealed his name by means of yet another
|
||||
anagram."
|
||||
Wirth smiled a last secretive smile, leaving us all to wonder if this was
|
||||
perhaps just one more in his series of personal computer pranks.
|
||||
|
||||
|
||||
|
||||
1165
etc/OONEWS
Normal file
1165
etc/OONEWS
Normal file
File diff suppressed because it is too large
Load diff
190
etc/OPTIONS
Normal file
190
etc/OPTIONS
Normal file
|
|
@ -0,0 +1,190 @@
|
|||
This describes the sequence of Emacs start-up actions, including the meaning
|
||||
of all the command-line options. It was written by Joe Wells.
|
||||
|
||||
1. These command line switches are handled, only if they appear before
|
||||
all other command line arguments, and only if they appear in this
|
||||
order:
|
||||
|
||||
`-map'. Only under VMS. Instead of "undumping", under VMS the
|
||||
contents of a dump file are mapped over a section of memory (very
|
||||
quickly initializing lots of variables). You would not normally
|
||||
use this options explicitly; it is given automatically by the
|
||||
command file that implements the `emacs' command.
|
||||
|
||||
`-t'. The next argument is treated as the name of a terminal to use
|
||||
instead of whatever is connected to the stdin, stdout, and stderr
|
||||
FILE pointers.
|
||||
|
||||
`-display' (synonym: `-d'). The next argument is treated as the
|
||||
name of an X Window System server with which to connect. This
|
||||
overrides the DISPLAY environment variable.
|
||||
|
||||
`-nw'. This means don't connect to an X Window server even if the
|
||||
DISPLAY environment variable was set or the `-display' switch was
|
||||
specified. Instead, Emacs talks to a regular dumb terminal.
|
||||
|
||||
`-batch'. Run noninteractively. This disables any full screen
|
||||
interaction either with a dumb terminal or with a window system.
|
||||
In addition, Emacs will die after processing all command line
|
||||
arguments. The variable `noninteractive' is t.
|
||||
|
||||
All of Emacs's internal data structures are initialized between steps 2
|
||||
and 5.
|
||||
|
||||
2. The `*scratch*' buffer is created and its value of `default-directory'
|
||||
is set from the result of calling the `getwd' library routine.
|
||||
(getwd does what the `pwd' program does.)
|
||||
|
||||
3. If X11 is being used, Emacs determines the name under which it looks
|
||||
for X resource values. (I haven't checked how it does this under
|
||||
X10.)
|
||||
|
||||
1. If there is a `-rn' command line switch, it is handled now, no
|
||||
matter where it is on the command line. (Later it will be
|
||||
processed again and ignored.) The next argument is used as
|
||||
Emacs's resource name.
|
||||
|
||||
2. If the `-rn' switch was missing, Emacs looks for the WM_RES_NAME
|
||||
environment variable.
|
||||
|
||||
3. If neither of the previous two steps succeed, Emacs uses the
|
||||
filename with which it was invoked as its resource name.
|
||||
|
||||
4. If X11 is being used, these command line switches are handled now,
|
||||
no matter where they appear in the command line. (Under X10, they
|
||||
are not handled until step 13.) WARNING: this can cause strange
|
||||
interactions with the processing of the remaining command line
|
||||
arguments in step 13.
|
||||
|
||||
In addition, under both X11 and X10, X resources (ie. the stuff in
|
||||
an `.Xdefaults' file) are handled now. Command line switches take
|
||||
precedence over resources.
|
||||
|
||||
After each command line switch are given the equivalent resource
|
||||
names in this format: (X10 name / X11 instance name / X11 class name).
|
||||
|
||||
`-r'. Reverse video. (ReverseVideo/reverseVideo/ReverseVideo)
|
||||
`-font' (synonym: `-fn'). Font. (BodyFont/font/Font)
|
||||
`-wn'. Window name (X11 only). (/title/Title)
|
||||
`-in'. Icon name (X11 only). (/iconName/Title)
|
||||
`-i'. Use built-in icon bitmap. (BitMapIcon//)
|
||||
|
||||
`-b'. Border width (in pixels).
|
||||
(BorderWidth/borderWidth/BorderWidth)
|
||||
|
||||
`-ib'. Internal border width (in pixels) (default: 1).
|
||||
(/internalBorder/BorderWidth)
|
||||
|
||||
`-xrm RESOURCESTRING'. Specifies a resource name and value
|
||||
that overrides any other value in the X server for that name.
|
||||
This is useful also for setting parameters that don't have their
|
||||
own specific options.
|
||||
|
||||
`-geometry' (synonym: `-w'). Window shape and size. `-geometry' is
|
||||
X11 only, but its synonym `-w' was available under X10.
|
||||
(/geometry/Geometry)
|
||||
|
||||
Color options only:
|
||||
|
||||
`-fg'. Foreground color. (Foreground/foreground/Foreground)
|
||||
`-bg'. Background color. (Background/background/Background)
|
||||
`-bd'. Border color. (Border/borderColor/BorderColor)
|
||||
`-cr'. Cursor color. (Cursor/cursorColor/Foreground)
|
||||
`-ms'. Mouse pointer color. (Mouse/pointerColor/Foreground)
|
||||
|
||||
In addition, under X10, the resource `Keymap' was handled now.
|
||||
|
||||
5. If your Emacs isn't dumped, the default Lisp libraries are
|
||||
loaded now.
|
||||
|
||||
6. Emacs enters a recursive edit. The first time Emacs does a
|
||||
recursive edit, steps 7 through 15 are followed, and then Emacs
|
||||
enters its normal editing mode.
|
||||
|
||||
7. If the environment variable PWD exists, the value of
|
||||
`default-directory' in the `*scratch*' buffer is set to the value of
|
||||
PWD. This often causes problems and confusion when the value of PWD
|
||||
doesn't actually contain the pathname of the current directory.
|
||||
|
||||
8. Now the `-no-init-file' (synonym: `-q') and `-user' (synonym: `-u')
|
||||
command line switches are handled. They must follow the switches
|
||||
mentioned in step 1, and must precede any other command line
|
||||
arguments. Actually, both of these options can be specified;
|
||||
whichever is last on the command line wins.
|
||||
|
||||
9. The user's `.emacs' file is loaded now, if the `-no-init-file'
|
||||
option was not specified. If the `-user' option was specified,
|
||||
that user's init file is loaded instead. This file is named
|
||||
`.emacs' in the user's home directory. If no such file exists,
|
||||
this step has no effect.
|
||||
|
||||
10. The system wide `default.el' file is loaded now, if the variable
|
||||
`inhibit-default-init' is nil. The user can set this variable in the
|
||||
`.emacs' file to skip this step.
|
||||
|
||||
11. If the *scratch* buffer still exists now, the value of
|
||||
`initial-major-mode' is called as a function in this buffer.
|
||||
Normally, this puts this buffer in Lisp Interaction mode.
|
||||
|
||||
12. Now the terminal/window-system setup file is loaded. The name of
|
||||
this file is determined as follows:
|
||||
|
||||
1. It starts with the value of `term-file-prefix'. Normally this is
|
||||
`term/', but the user can set it to another value. If this
|
||||
variable is nil, this entire step is skipped.
|
||||
|
||||
2. For a window system, the prefix is followed by the name of the
|
||||
value of the variable `window-system', followed by `-win'. For X
|
||||
Windows, this means the name is `term/x-win'.
|
||||
|
||||
3. For a terminal, the prefix is followed by the value of the
|
||||
environment variable TERM, for example, `term/vt200'. If Emacs
|
||||
cannot find such a file to load, it retries by stripping off
|
||||
suffixes that begin with a hyphen. For example, if TERM is
|
||||
`vt200-40', first Emacs will try `term/vt200-40', and if that
|
||||
fails it will try `term/vt200'.
|
||||
|
||||
13. The rest of the command line arguments are handled at this point, in
|
||||
the order they appear:
|
||||
|
||||
`-funcall' (synonyms: `-f', `-e'). The next argument is treated as
|
||||
the name of a function, which is called with no arguments.
|
||||
|
||||
`-load' (synonym: `-l'). The next argument is treated as the name
|
||||
of a file to load. NOTE: the value of the variable `load-path'
|
||||
will be restored after this file is done loading. Thus, trying
|
||||
to change `load-path' in such a file will fail!!
|
||||
|
||||
`-kill'. When this argument is handled, Emacs kills itself.
|
||||
|
||||
`+DDD', where D is a digit. DDD is used as a line number to go to.
|
||||
When the next ordinary file argument on the command line is
|
||||
handled, Emacs positions point in that file on line DDD.
|
||||
|
||||
An ordinary filename. Emacs edits this file using the function
|
||||
`find-file'. If the filename is not an absolute filename, it is
|
||||
expanded relative to the value that default-directory in the
|
||||
`*scratch*' buffer had at the beginning of step 11. The buffer
|
||||
visiting this file becomes the current buffer.
|
||||
|
||||
`-insert' (synonym: `-i'). The next argument is treated as the name
|
||||
of a file. This file is inserted in the current buffer.
|
||||
Initially, this is the `*scratch*' buffer. Otherwise it is the
|
||||
buffer visiting the file most recently specified on the command
|
||||
line.
|
||||
|
||||
Other command line switches may have been created by modifying the
|
||||
value of the variable `command-switch-alist'. If X Windows is being
|
||||
used, all X-specific switches mentioned above in steps 3 and 4 will
|
||||
be processed. Under X11, they will have already been handled, and
|
||||
will be ignored now. Under X10, they are being handled for the
|
||||
first time.
|
||||
|
||||
14. The values of the variables `term-setup-hook' and `window-setup-hook'
|
||||
are called as functions with no arguments, in the order listed.
|
||||
|
||||
15. If the user did not specify any of the command line options handled
|
||||
in step 13, and the variable `inhibit-startup-message' is still nil,
|
||||
the familiar Emacs startup message is displayed.
|
||||
|
||||
|
||||
968
etc/SERVICE
Normal file
968
etc/SERVICE
Normal file
|
|
@ -0,0 +1,968 @@
|
|||
GNU Service Directory -*- text -*-
|
||||
|
||||
This is a list of people who have asked to be listed as offering
|
||||
support services for GNU software, including GNU Emacs, for a fee
|
||||
or in some cases at no charge.
|
||||
|
||||
The information comes from the people who asked to be listed;
|
||||
we do not include any information we know to be false, but we
|
||||
cannot check out any of the information; we are transmitting it to
|
||||
you as it was given to us and do not promise it is correct.
|
||||
Also, this is not an endorsement of the people listed here.
|
||||
We have no opinions and usually no information about the abilities of
|
||||
any specific person. We provide this list to enable you to contact
|
||||
service providers and decide for yourself whether to hire one.
|
||||
|
||||
Before FSF will list your name in the GNU Service Directory, we ask
|
||||
that you agree informally to the following terms:
|
||||
|
||||
1. You will not restrict (except by copyleft) the use or distribution
|
||||
of any software, documentation, or other information you supply anyone
|
||||
in the course of modifying, extending, or supporting GNU software.
|
||||
This includes any information specifically designed to ameliorate the
|
||||
use of GNU software.
|
||||
|
||||
2. You will not take advantage of contact made through the Service
|
||||
Directory to advertise an unrelated business (e.g., sales of
|
||||
non-GNU-related proprietary information). You may spontaneously
|
||||
mention your availability for general consulting, but you should not
|
||||
promote a specific unrelated business unless the client asks.
|
||||
|
||||
Please include some indication of your rates, because otherwise users
|
||||
have nothing to go by. Please put each e-mail address inside "<>".
|
||||
Please put nothing else inside "<>". Thanks!
|
||||
|
||||
For a current copy of this directory, or to have yourself listed, ask:
|
||||
gnu@prep.ai.mit.edu
|
||||
|
||||
** Please keep this file alphabetical **
|
||||
|
||||
|
||||
Joseph Arceneaux <jla@ai.mit.edu>
|
||||
PO Box 460633
|
||||
San Francisco, CA 94146-0633
|
||||
+1 415 285 9088
|
||||
|
||||
Performed X11 implementation of Emacs version 19.
|
||||
Worked on Emacs text annotation.
|
||||
|
||||
Service and development of GNU and X11 software. Handholding, teaching,
|
||||
and installations at lower rates.
|
||||
|
||||
Rates: $150/hour. Free to selected non-profit and activist organizations.
|
||||
|
||||
Updated: 11/7/91
|
||||
|
||||
Giuseppe Attardi <attardi@di.unipi.it>
|
||||
Dipartimento di Informatica
|
||||
Corso Italia 40
|
||||
I-56125 Pisa, Italy
|
||||
+39 (50) 510-111
|
||||
|
||||
GNU: help on obtaininig GNU, for italian sites.
|
||||
|
||||
Updated: 18/11/91
|
||||
|
||||
Randolph Back <rback@boulder.Colorado.edu>
|
||||
Back Software & Consulting, Inc.
|
||||
1705 14th St. #344
|
||||
Boulder, CO 80302
|
||||
(303) 443-7758
|
||||
|
||||
Consulting, installation, cutomization and training for GNU emacs, and
|
||||
other GNU software.
|
||||
|
||||
Entered: 3/13/91
|
||||
|
||||
Andrea Baldi
|
||||
European Space Agency (ESA)
|
||||
European Space Operations Center (ESOC)
|
||||
Robert-Bosch-Str 5
|
||||
D-6100 DARMSTADT
|
||||
West-Germany
|
||||
Phone 0049-6151-902762 (Work) Bitnet : <abaldi@esoc.bitnet>
|
||||
Fax 0049-6151-90-495 Uucp : <unido!esoc.bitnet!abaldi>
|
||||
|
||||
Your Rate: Free
|
||||
|
||||
Programs Supported: Emacs, bison, gcc, g++, gdb, bash, X11
|
||||
Emacs: installation and upgrading aid, answering, customization.
|
||||
Gcc, g++, gdb, bash: installation and upgrading aid.
|
||||
X11: quick questions
|
||||
|
||||
Experience (with gnu software)
|
||||
I have maintained Emacs for more than 4 years as well as bison, gcc,
|
||||
g++, gdb, bash, X11. I have written/modified several Emacs lisp programs.
|
||||
Currently I maintain many GNU programs for my department.
|
||||
|
||||
Updated: 11 Sept 91
|
||||
|
||||
Bard Bloom
|
||||
Department of Computer Science
|
||||
Cornell University
|
||||
Ithaca, NY 14850
|
||||
607-255-9211
|
||||
|
||||
Your Rate: $200/hour.
|
||||
I might do work for friends and worthy organizations for free.
|
||||
|
||||
Programs Supported: GNU Emacs
|
||||
|
||||
Experience: Lots. For example, in 1989 I wrote a safe multi-user
|
||||
database program of sorts in Gnu Emacs in about a week.
|
||||
I've written some 30,000 lines of Gnu Lisp code in total.
|
||||
|
||||
Degree: PhD in CS from MIT.
|
||||
Other: My real life as a professor takes precedence over consulting.
|
||||
|
||||
Updated: 11 Sept 91
|
||||
|
||||
James Craig Burley
|
||||
4 Mountain Gate Rd.
|
||||
Ashland, MA 01721-2326
|
||||
(508) 881-6087, -4745
|
||||
Email: <burley@gnu.ai.mit.edu> (preferred)
|
||||
<burley@cygnus.com>
|
||||
<burley@world.std.com>
|
||||
|
||||
Expertise:
|
||||
Compiler Internals (author of GNU Fortran, for example)
|
||||
Operating Systems Internals (lately Linux on the ix86)
|
||||
Tools/Utilities Development and Maintenance
|
||||
Microcode Development and Maintenance (primarily VLIW machines)
|
||||
Debugging (often asked to help debug Other People's Code)
|
||||
Documentation (authored many books and ran a few doc projects)
|
||||
Extensive experience with a variety of operating systems, hardware,
|
||||
languages, and so on
|
||||
|
||||
Rate: $75/hour, though somewhat volatile due to commitments regarding
|
||||
GNU Fortran -- willing to consider flat-fee arrangements
|
||||
|
||||
Entered: 10 Jul 92
|
||||
|
||||
Michael I. Bushnell <mib@gnu.ai.mit.edu>
|
||||
NE43-426, 545 Technology Square
|
||||
Cambridge, MA 02139
|
||||
(617) 253-8568
|
||||
|
||||
All GNU software: Installation, customization, answering simple or
|
||||
complex questions, bug fixing, extension.
|
||||
|
||||
Experience: I have done Unix and GNU programming for several years,
|
||||
I am the primary author of the Hurd (which provides most
|
||||
kernel related facilities for the GNU OS).
|
||||
|
||||
I am easily available in the Cambridge/Boston area; work via email.
|
||||
I am willing to travel for sufficiently large jobs.
|
||||
|
||||
Rates: $50/hr, negotiable, less for non-profit organizaions.
|
||||
|
||||
Updated: 10/29/91
|
||||
|
||||
C2V Renaud Dumeur <renaud@ccv.fr>
|
||||
82 bd Haussmann Jean-Alain Le Borgne <jalb@ccv.fr>
|
||||
75009 Paris
|
||||
France
|
||||
Tel (1) 40.08.07.07
|
||||
Fax (1) 43.87.35.99
|
||||
|
||||
Emacs: questions answered, installation, teaching (all levels), elisp
|
||||
and C extensions and customization, porting, troubleshooting
|
||||
gcc: installation, extensions, porting
|
||||
gdb: installation, debugging, porting
|
||||
X11: installation, debugging, internationalization
|
||||
|
||||
Experience: yes (ask for details)
|
||||
|
||||
Rates: 500ff/hr, negotiable.
|
||||
|
||||
Entered: 12/17/91
|
||||
|
||||
Mr. David J. Camp <david@wubios.wustl.edu>
|
||||
6103 Charlotte Avenue
|
||||
Saint Louis, MO 63120-1201
|
||||
|
||||
Background: Bachelor of Science in Computer Science, Washington University
|
||||
Master of Science in Computer Science, Washington University
|
||||
Over 12 years experience in the computer industry.
|
||||
Author of the future GNU uu/xxen/decoder program.
|
||||
Skilled in many languages, including C and Unix scripts.
|
||||
|
||||
Tasks: I can do on-site service in the St. Louis area.
|
||||
I prefer short-term projects.
|
||||
I can handle long projects given time.
|
||||
I reserve the right to refuse work.
|
||||
|
||||
Rates: $50 per hour, including travel time
|
||||
|
||||
Entered: 1/1/91
|
||||
|
||||
Computing Support Team (CSTeam)
|
||||
111 College Place, Rm 2-212
|
||||
Syracuse, NY, 13244-4100
|
||||
|
||||
phone: 1-315-443-3929, fax: 1-315-443-4745, email: <info@csteam.com>
|
||||
|
||||
The Computing Support Team offers a wide variety of support services
|
||||
including system design, installation, software support, contract
|
||||
programming, network design, integration and migration services,
|
||||
training, e-mail and telephone support. Experienced with GNU, X, TeX,
|
||||
and other public domain software.
|
||||
|
||||
Rates: $50-$80/hr, 33% non-profit discount.
|
||||
|
||||
Entered: 10 Jul 92
|
||||
|
||||
Contributed Software
|
||||
Graefestr. 76
|
||||
1000 Berlin 61, Germany
|
||||
phone: (+49 30) 694 69 07
|
||||
modems: (+49 30) 694 {61 82 | 67 49 | 68 09}
|
||||
email: <info@contrib.de>
|
||||
internet: scuzzy.contrib.de [192.109.39.1]
|
||||
|
||||
We distribute, install/port, teach and support free software
|
||||
in general, i.e. X11, GNU, khoros etc.
|
||||
Rates are DM 150,-- plus tax per hour, educational sites get rebates.
|
||||
|
||||
Entered: 10 Jul 92
|
||||
|
||||
Cygnus Support <info@cygnus.com>
|
||||
814 University Avenue ...uunet!cygint!info
|
||||
Palo Alto, CA 94301
|
||||
+1 415 322 3811 Voice
|
||||
+1 415 322 3270 FAX
|
||||
|
||||
Cygnus Support offers warranty protection (service contracts) for a
|
||||
number of free software tools. For a fixed annual fee our customers
|
||||
receive binary and source distributions, mail and phone support,
|
||||
documentation and customization assistance on a variety of popular
|
||||
platforms.
|
||||
|
||||
At the time of this writing we offer support for a development package
|
||||
including (among other things) gcc, g++, gdb, and of course, GNU
|
||||
Emacs. We also offer support for a network facilities package
|
||||
including many of the Athena tools like Kerberos and Hesiod. However
|
||||
the set of supported tools and platforms increases frequently so
|
||||
contact us for the latest information.
|
||||
|
||||
For those who need on-site assistance, support is also available from
|
||||
our Cambridge office.
|
||||
|
||||
Rates: $300/hour. Annual Support starts at $35,000.
|
||||
|
||||
Updated: 11 Sept 91
|
||||
|
||||
Bradley N. Davis <b-davis@jaguar.utah.edu>
|
||||
3242 South 540 West
|
||||
Bountiful, UT 84010
|
||||
(801) 298-6345
|
||||
|
||||
Will work on most GNU software. Especially GNU Emacs, GCC and a
|
||||
little X11 and G++. Experienced with PCs and 386s.
|
||||
|
||||
Services offered: Installation, porting, customizing, troubleshooting.
|
||||
|
||||
Fee: $20 to $50 / hour depending on job
|
||||
|
||||
Updated: 6/11/91
|
||||
|
||||
DePalma SoftCraft Contact: Mauro DePalma
|
||||
2923 Cohansey Drive Voice: (408) 259-4789
|
||||
San Jose, CA 95132-1619 Fax: (408) 259-6935
|
||||
Internet: <mauro@netcom.com> (or <apple!netcom!mauro>)
|
||||
|
||||
DePalma SoftCraft provides distribution, installation, setup, and
|
||||
support for the X Window System (X11R4).
|
||||
|
||||
This small business provides consulting in every area of a computer
|
||||
s/w project life cycle. We specialize in UNIX, GNU Development Tools
|
||||
(gcc, g++, ...), RCS, and XView.
|
||||
|
||||
Updated: 4/29/91
|
||||
|
||||
Equivalent Software HB <ingwa@isy.liu.se>
|
||||
Repslagaregatan 34 or <jonas-y@isy.liu.se>
|
||||
582 22 Linkoping
|
||||
SWEDEN
|
||||
+46 (0)13 13 54 21
|
||||
|
||||
Equivalent Software HB is the worlds second(?) company dedicated to
|
||||
supporting free UNIX software. The owners have more than 5 years of
|
||||
UNIX experience, both as system adminstrators and programmers. We
|
||||
also have extensive experience in maintaining the GNU programs, both
|
||||
administrating it and fixing bugs.
|
||||
|
||||
Services offered:
|
||||
|
||||
- Installation and custumizing GNU and other free software. We will
|
||||
make free software as easy to install and use as shrink wrapped
|
||||
programs.
|
||||
- Customization and porting.
|
||||
- Subscriptions to new versions which we will send monthly or with
|
||||
any other interval.
|
||||
- Finding, Recommending and Investigation of free software in any
|
||||
area of the customers choise.
|
||||
- Regular consulting. We prefer smaller jobs, but are willing to
|
||||
consider larger ones. We can work through the Internet, but prefer
|
||||
jobs in Sweden.
|
||||
|
||||
Rates: For software items, request our price list.
|
||||
For consulting, 450 SEK/hour.
|
||||
|
||||
Entered: 2/14/92
|
||||
|
||||
Andy Gaynor -- [Ag] <gaynor@paul.rutgers.edu>
|
||||
597 Hoes Lane, Piscataway, NJ 08854
|
||||
908-463-3376
|
||||
|
||||
GNU Emacs:
|
||||
Lisp development, customization, troubleshooting, support, etc
|
||||
User instruction and management for all levels of experience
|
||||
Umpteen-thousand lines of Lisp code, careful study of GNU Emacs organization,
|
||||
years of monitoring the UseNet Emacs and GNU groups, etc
|
||||
Version 19 is due soon -- I will be up-to-speed as quickly as possible
|
||||
$50/hour starting, negotiable on difficulty, organization, distribution, etc
|
||||
|
||||
Other Tasks:
|
||||
General programming/software engineering (language software preferred)
|
||||
Familiar with Unix, C, Lisp, networking, standard Unix utilities, various
|
||||
other languages, etc
|
||||
Contact me for more info
|
||||
|
||||
Entered: 10 Feb 92
|
||||
|
||||
Ron Guilmette <rfg@ncd.com>
|
||||
396 Ano Nuevo Ave. #216
|
||||
Sunnyvale, CA 94086
|
||||
408-732-7839
|
||||
|
||||
Services: Development & porting of GNU software development tools.
|
||||
|
||||
GNU Contributions:
|
||||
Invented, designed, and implemented the protoize and
|
||||
unprotoize tools supplied with GCC2.
|
||||
|
||||
Designed and developed all code to support the generation
|
||||
of Dwarf symbolic debugging information for System V Release
|
||||
4 in GCC2.
|
||||
|
||||
Finished GCC2 port to the Intel i860 RISC processor.
|
||||
|
||||
Now developing GDB code for System V Release 4 support of
|
||||
ELF and Dwarf.
|
||||
|
||||
Experience: 9+ years UNIX systems experience, all working on compilers
|
||||
and related tools.
|
||||
|
||||
3+ years working professionally on GCC, G++, and GDB under
|
||||
contract to various firms including the Microelectronics
|
||||
and Computer Technology Corporation (MCC), Data General (DG),
|
||||
Network Computing Devices (NCD), and Intel Corp.
|
||||
|
||||
Other qualifications:
|
||||
Holder of both a Bachelor's and a Master's degree, both in
|
||||
Computer Science.
|
||||
|
||||
Observer Member of ANSI X3J16 (C++ standardization) committee.
|
||||
|
||||
Former vice-chairman of UNIX International Programming
|
||||
Languages Special Interest Group (UI/PLSIG).
|
||||
|
||||
Rates: Variable depending upon contract duration. Call for quote.
|
||||
|
||||
Updated: 9 Feb 92
|
||||
|
||||
Johannes M. Heuft <ksh@pcs.com>
|
||||
Pfarrweg 2c
|
||||
D-8000 Munich 90
|
||||
Germany
|
||||
Telephone: Germany+89/681773
|
||||
|
||||
Rate: min. DM 180.- ($ 120.-) per hour
|
||||
interesting tasks for non-profit organisations may be free
|
||||
|
||||
Supported Programs: gcc, gas, g++, gdb, binutils, gnuplot, ...; (not emacs)
|
||||
|
||||
Experience: 10 years of operating system, network, and compiler
|
||||
construction; also includes engineering management.
|
||||
|
||||
Degrees: Dipl. Inform. (similar to MS CS)
|
||||
|
||||
Updated: 11/9/91
|
||||
|
||||
Sanjay Hiranandani <4393472@mcimail.com>
|
||||
16 Campus Plaza, Suite 180
|
||||
Vestal, NY 13850
|
||||
Work:607-729-7834 ext. 180
|
||||
Home:607-748-2709
|
||||
Fax:607-748-0243
|
||||
|
||||
Rate: $40/hr. Phone questions for free are ok as far as my schedule will permit
|
||||
Lower rates for students and certain non-profit organizations
|
||||
|
||||
Can help with installation/customization/modification of most GNU software.
|
||||
|
||||
Experience: Software Development, System Administration, and Consulting on
|
||||
a variety of computing platforms.
|
||||
|
||||
Updated: 11 Sept 91
|
||||
|
||||
Hundred Acre Software Consultants <info@pooh.com>
|
||||
1280 Terminal Way, Suite 26 <uunet!heather!info>
|
||||
Reno NV 89502-3243
|
||||
(702) 329-9333
|
||||
|
||||
Hundred Acre is a consulting group providing support and development
|
||||
services to organizations of all sizes. We support all kinds of publicly
|
||||
available software, not just GNU; write for the current list. We work on
|
||||
a "service contract" basis for support -- for a yearly fee, we provide email
|
||||
and toll free telephone support, and free updates and bug fixes. Certain
|
||||
support levels even have free on-site support. Development is charged on
|
||||
either an hourly or fixed bid basis.
|
||||
|
||||
Consulting rates: $50 to $70 per hour, or fixed bid.
|
||||
Support contracts: Several levels, from $500 to $30000 per year.
|
||||
|
||||
Updated: 2 Jul 91
|
||||
|
||||
Jose A. Fernandez <jaf@inference.com>
|
||||
|
||||
WORK: Inference Corporation HOME:
|
||||
550 N. Continental Blvd. 1025 Hillside Dr.
|
||||
El Segundo, CA 90245 Chino Hills, CA 91709
|
||||
(310) 322-0200 (714) 528-2523
|
||||
|
||||
RATES:
|
||||
$50-$200/hour plus expenses (or possibly free), depending on task.
|
||||
|
||||
SERVICES:
|
||||
GNU software: installation, troubleshooting, and customization.
|
||||
X11 software: installation and troubleshooting.
|
||||
SysAdmin: installation, configuration, and trouble-shooting.
|
||||
NetAdmin: installation, configuration, and trouble-shooting.
|
||||
Education: teaching how to fish opens the demand for fishing poles.
|
||||
Advice: free over email.
|
||||
|
||||
Entered: 10 Jul 92
|
||||
|
||||
Scott D. Kalter <sdk@twinsun.com>
|
||||
970 Palm Ave. #218
|
||||
West Hollywood, CA 90069
|
||||
Home: (213)657-9174
|
||||
Work: (213)524-1805
|
||||
|
||||
Emacs: e-lisp and C level customization/extension
|
||||
training for general use and customization
|
||||
user support, installation, troubleshooting
|
||||
Rates: approx. $50/hr, negotiable
|
||||
Very willing to answer quick questions for free.
|
||||
Prefer e-mail communication to telephone.
|
||||
|
||||
Qualifications: BS Math/CS 1985: Carnegie Mellon University
|
||||
MS CS 1988: UCLA
|
||||
Extensive e-lisp level modification for rapid prototyping of
|
||||
designs used in groupware research. Very familiar with all
|
||||
levels of elisp programming. Taught Emacs use and
|
||||
customization in universities and industry. Extensive
|
||||
troubleshooting and user support experience.
|
||||
|
||||
Updated:10/10/91
|
||||
|
||||
Scott J. Kramer <sjk@aura.nbn.com>
|
||||
P.O. Box 3392
|
||||
San Rafael, CA 94912
|
||||
+1 415-454-1295
|
||||
|
||||
Emacs: Tutoring, installations/upgrades, Lisp customizations,
|
||||
general troubleshooting/support. Prefer that work I do
|
||||
becomes part of the official Free Software Foundation
|
||||
distribution.
|
||||
|
||||
Rate: Task- and time-dependent; non-monetary offers considered.
|
||||
|
||||
Updated: 28Aug91
|
||||
|
||||
Fen Labalme <fen@well.sf.ca.us>
|
||||
Broadcatch Technologies
|
||||
40 Carl St. #4
|
||||
San Francisco CA 94117
|
||||
(415) 731-1174
|
||||
|
||||
Rates: Free phone consultation
|
||||
Extended project or consultation: $70/hour plus expenses
|
||||
Non-profits get lower rates or free; barter welcome!
|
||||
Emacs: Anything but specific termcap questions (general ones OK).
|
||||
Includes elisp extensions & teaching beginning or advanced users.
|
||||
Experience: I've been "hacking Emacs" for just about 15 years now.
|
||||
|
||||
Updated: 7/30/91
|
||||
|
||||
David C Lawrence <tale@cs.rpi.edu>
|
||||
P.O. Box 61
|
||||
North Chatham, NY 12132-0061
|
||||
Home:518 766-9098 Work:518 851-2813
|
||||
|
||||
Rates: $30 hour for projects less than 8 hours.
|
||||
$20 hour for longer projects.
|
||||
Course fees vary with level of subject being taught.
|
||||
Short queries answered free of charge.
|
||||
All rates negotiable.
|
||||
|
||||
Support: Emacs (both lisp and C aspects), GCC, GAWK, sed, fileutils,
|
||||
binutils, miscellaneous others. Definitely not G++.
|
||||
Consulting via email or telephone, or possibly on-site.
|
||||
|
||||
Updated: 11 Sept 91
|
||||
|
||||
Greg Lehey
|
||||
LEMIS
|
||||
Schellnhausen 2
|
||||
W-6324 Feldatal
|
||||
Germany
|
||||
|
||||
Phone: +49-6637-1488
|
||||
Fax: +49-6637-1489
|
||||
Mail <grog%lemis@Germany.EU.net>
|
||||
|
||||
Services: Supply, porting, installation, consultation on all GNU
|
||||
products.
|
||||
|
||||
Experience: 20 years OS and compiler experience, portations of most
|
||||
GNU products.
|
||||
|
||||
Entered: 10 Jul 92
|
||||
|
||||
Marty Leisner <leisner.henr801c@xerox.com>
|
||||
332 Shaftsbury Road
|
||||
Rochester, New York 14610
|
||||
Home:(716) 654-7931
|
||||
|
||||
Experience: 10 years C/Unix, 7 years DOS.
|
||||
Extensive experience with GNU binary tools, cross-compilers,
|
||||
embedded/hosted systems.
|
||||
Degree : BS CS, Cornell University
|
||||
Rates: $75/hr
|
||||
|
||||
Updated: 6 Jul 91
|
||||
|
||||
Roland McGrath <roland@idr.org>
|
||||
545 Tech Sq rm 426
|
||||
Cambridge, MA 02139
|
||||
Work: (617) 253-8568
|
||||
|
||||
Co-author of GNU Make (with Richard Stallman); maintainer of GNU Make.
|
||||
Author and maintainer of the GNU C Library and parts of the GNU Hurd.
|
||||
FSF employee summer 1989, fall 1990 to the present.
|
||||
|
||||
Installation, maintenance, porting, enhancement of all GNU software.
|
||||
|
||||
Fees negotiable. I can work anywhere in the Boston or SF Bay Area, or
|
||||
anywhere on the Internet.
|
||||
|
||||
Updated: 10/18/92
|
||||
|
||||
Lee McLoughlin <lmjm@doc.ic.ac.uk>
|
||||
Department of Computing,
|
||||
Imperial College,
|
||||
180 Queens Gate,
|
||||
London
|
||||
SW7 2BZ,
|
||||
UK work: +44 71 589 5111 X 5085
|
||||
|
||||
gcc, emacs: can support and port to new machines
|
||||
other: some experience with most gnu packages
|
||||
|
||||
Ported emacs to two new platforms (WhiteChappel Worstations,
|
||||
HLH Orion). Worked on gcc port to Intergraph Clipper. Support
|
||||
various gnu packages as part of a teaching service.
|
||||
|
||||
Rates: Quick phone questions are free.
|
||||
|
||||
Degrees:.Sc(Hons) Computer Science
|
||||
|
||||
Other: I'm a general workaholic and well versed in compilers, communications
|
||||
and most things related to Unix.
|
||||
|
||||
Updated: 10.10.91
|
||||
|
||||
T.S.Mohan <mohan%vidya@shakti.ernet.in>
|
||||
KBCS Group <mohan@vigyan.ernet.in>
|
||||
Supercomputer Education and Research Centre
|
||||
Indian Institute of Science
|
||||
Bangalore 560 012
|
||||
INDIA
|
||||
Telephone (01-91-812)-341811, -341805
|
||||
|
||||
Rate: NIL. Availability for consultancy depends on
|
||||
work load. High preference for academic institutions.
|
||||
Support: emacs, gdb, gcc, g++ and other small public domain utilities
|
||||
Experience: Installed and supported these + other gnu programs in our
|
||||
centre for the past three years. General help to sister academic
|
||||
departments and other academic institutions.
|
||||
Degrees: Master of Engineering in CS. Currently working towards a PhD
|
||||
in Distributed computing and programming languages.
|
||||
|
||||
Updated: 1 Dec 1991
|
||||
|
||||
Mojave Systems <mojsys!support@uunet.uu.net>
|
||||
1254 Harvard Avenue
|
||||
Claremont, CA 91711
|
||||
714-621-7372
|
||||
|
||||
Mojave Systems offers porting services, warranty protection, and
|
||||
software support for several GNU products. Porting services are
|
||||
provided for a fixed fee. Software support is provided for fixed
|
||||
annual fee.
|
||||
|
||||
Mojave Systems is able to provide these services for a wide variety of
|
||||
hosts. We are currently porting GNU make and RCS to non-Unix hosts.
|
||||
|
||||
Entered: 12 Dec 90
|
||||
|
||||
Eric Raible <raible@nas.nasa.gov>
|
||||
Nasa Ames Research Center
|
||||
Mail Stop T045-1
|
||||
Moffett Field, CA, 94035
|
||||
(415) 604-4320 (W)
|
||||
|
||||
Rates: $40 hour; email questions free.
|
||||
|
||||
Gnu emacs C/lisp programming and porting. General
|
||||
unix/graphics/emacs hacking, especially on Silicon Graphics
|
||||
workstations.
|
||||
|
||||
Degree: MIT 83 BS CS.
|
||||
|
||||
Updated: 11 Sept 91
|
||||
|
||||
Paul Reilly <reilly@dg-rtp.dg.com>
|
||||
721 Bennington Drive
|
||||
Raleigh, NC 27615
|
||||
Work: 919 248 6210
|
||||
Home: 919 847 7294
|
||||
|
||||
Services: access, installation, porting, customizing and debugging
|
||||
Unix Free software: X11, GNU, TeX, etc.
|
||||
|
||||
Rates: $150/hour
|
||||
|
||||
Updated: Dec 1991
|
||||
|
||||
Adam J. Richter <adam@soda.berkeley.edu> ...!ucbvax!soda!adam
|
||||
409 Evelyn Avenue, Apartment 312 (510) 528-3209
|
||||
Albany, CA 94706 fax: (510) 528-8508
|
||||
|
||||
X windows server expert. Freeware (especially copylefted) projects
|
||||
preferred.
|
||||
|
||||
Updated: 18 Nov 91
|
||||
|
||||
Wolfgang S. Rupprecht <wolfgang@wsrcc.com>
|
||||
PO Box 6524 <uunet!wsrcc!wolfgang>
|
||||
Alexandria, VA 22306-0524 <wolfgang%wsrcc.com@uunet.uu.net>
|
||||
(703) 768-2640
|
||||
|
||||
Emacs: Anything, (lisp, C, customization, porting, installing) I have
|
||||
written thousands of lines of GNU Emacs C and Lisp code. Original
|
||||
author of the floating point additions to appear in Emacs 19.
|
||||
|
||||
Rates: $75/hr.
|
||||
|
||||
Updated: 7/20/91
|
||||
|
||||
John Sechrest
|
||||
Jasmic Systems Internet: <sechrest@jasmic.uucp>
|
||||
2140 SW 49th St. UUCP: <hp-pcd!orstcs!jasmic!sechrest>
|
||||
Corvallis, Oregon 97333
|
||||
|
||||
Gnu software: Questions about gnu emacs general use, training and classes,
|
||||
documentation, system set up and design.
|
||||
|
||||
Experience: 11 years of Unix work. Heavy on System administration.
|
||||
Teaching classes in Unix system administraion, Unix
|
||||
Kernal Programming, Networking and Consulting services.
|
||||
Currently working as the Support Coordinator for
|
||||
Oregon State University (for 8 years).
|
||||
|
||||
Familiar with BSD systems mostly. Some SysVR4.
|
||||
I have supported VAxes, HP's with HPUX, HP's with 4.3 BSD,
|
||||
Sequent's, Next's and a few other misc. machines.
|
||||
|
||||
Updated: 28 Oct 1991
|
||||
|
||||
Steve Simmons <scs@lokkur.dexter.mi.us>
|
||||
Inland Sea
|
||||
9353 Hidden Lake Circle
|
||||
Dexter, MI 48130
|
||||
313-769-4086 (office1)
|
||||
313-426-2086 (office2)
|
||||
|
||||
Rate: $75.00/hr for straight time until Jan 1, 1992. Rates will go up
|
||||
an undetermined amount at that time. Free advice for short questions
|
||||
by phone or email.
|
||||
|
||||
Programs Supported: Any. Quality of support I can offer depends on
|
||||
the nature of the software; in particular I am *not* a compiler person.
|
||||
|
||||
Experiance: 13 years in computing, 10 with UNIX and various derivatives.
|
||||
Specialist in systems administration. Lots of network admin.
|
||||
|
||||
Degree: Bachelors from University of Michigan, 1980.
|
||||
|
||||
Updated: 10 Oct 91
|
||||
|
||||
Lynn Slater <lrs@indetech.com>
|
||||
42075 Lawrence Place
|
||||
Fremont Ca 94538
|
||||
Office (415) 438-2048; Home (415) 793-1864; Fax (415) 438-2034
|
||||
|
||||
Programs: Gnu Emacs Ada Mode, Gnu Emacs Empire Tool, Emacs,
|
||||
g++ and gnumake (limited support only).
|
||||
|
||||
Experiance:
|
||||
Gnu Emacs Ada Mode -- Co-author, principle integrator
|
||||
Gnu Emacs Empire Tool -- Originator, co-author, principle distributor
|
||||
Emacs -- Almost all parts. Authored super-apropos, headers, first GDB
|
||||
interface, fancy-lisp, enhanced scribe mode,and lots of small stuff
|
||||
g++ -- Have maintained, modified, and used G++ on 300+ user commercial
|
||||
OLTP software.
|
||||
gnumake -- Have bug fixed and extended.
|
||||
|
||||
Have single makefile that can merge in local changes and build the
|
||||
following systems in a consistent manner in multiple releases on multiple
|
||||
machines:
|
||||
asm, bison, gcc, g++, emacs, rcs, gdb, libg++, att c++ libs, gnumake,
|
||||
diff, tex2iroff
|
||||
The makefile and related techniques are a bit hard to explain, but they
|
||||
enable use and local changes in a broad spectrum of FSF code on many
|
||||
platforms without having to remember all the individual make procedures.
|
||||
|
||||
Rate: Free for good cause or short stuff as there is time.
|
||||
Am most likely to help in areas in which I have had problems or expect to
|
||||
have problems.
|
||||
|
||||
Updated: 10 Oct 91
|
||||
|
||||
Small Business Systems, Inc. <postmaster@anomaly.sbs.com>
|
||||
Box 17220, Route 104
|
||||
Esmond, RI 02917
|
||||
401.273.4669
|
||||
|
||||
Rate: Varies depending on complexity of task.
|
||||
Hourly and fixed-rate contracts are available.
|
||||
Programs Supported: All
|
||||
|
||||
Updated: 11 Sept 91
|
||||
|
||||
Randall D. Smith <randy@ai.mit.edu>
|
||||
20 Watson Street
|
||||
Cambridge, MA 02139, USA
|
||||
+1 (617) 983-0276
|
||||
|
||||
Will work on most GNU software.
|
||||
Installation, handholding, trouble shooting, extensions, teaching,
|
||||
GCC, GDB, GNU-EMACS, and other ports.
|
||||
|
||||
Rates: Upward from $50.00/hour depending on my expertise in the area of the
|
||||
job. GDB consulting at $80.00/hour.
|
||||
|
||||
Experience: 4 years of intensive experience with Unix and C including
|
||||
system hacking and modification. Experience in porting GNU-EMACS (to
|
||||
SGI Iris 4D) and GCC (to use Sun FPA chip). Experience working
|
||||
full-time for the GNU project on other GNU programs (June 1988 -
|
||||
August 1989). Primary maintainer of GDB and the GNU loader for that
|
||||
period. Resume available on request.
|
||||
|
||||
Entered: 10 Feb 92
|
||||
|
||||
Richard M. Stallman <rms@prep.ai.mit.edu>
|
||||
UUCP: {mit-eddie,ucbvax,uunet,harvard,uw-beaver}!ai.mit.edu!rms
|
||||
545 Tech Sq, Rm 430
|
||||
Cambridge, MA 02139
|
||||
|
||||
Emacs: anything whatever
|
||||
Is anyone interested in courses in using or extending GNU Emacs?
|
||||
|
||||
Original inventor of Emacs and main author of GNU Emacs and GCC.
|
||||
|
||||
Rates: $6/min or $250/hr.
|
||||
|
||||
Entered: 5/24/90
|
||||
|
||||
Jonathan Stone <jonathan@isor.vuw.ac.nz>
|
||||
c/o- Institute of Statistics and Operations Research
|
||||
Victoria University of Wellington
|
||||
P.O Box 600
|
||||
Wellington
|
||||
New Zealand
|
||||
Work: +64 4 715-315 Fax: +64 4 712-070
|
||||
|
||||
Rate: hourly rate: NZ $ 150/hr. Quick phone questions are free.
|
||||
Reduced rates available for for non-profit/educational insts
|
||||
and daily rate work. Fixed-price contracts also considered.
|
||||
|
||||
Programs: GNU Emacs, GCC, GDB, GNU binutils,
|
||||
Ghostscript, MIT X11
|
||||
I am the author of the Pyramid ports of gcc and gdb.
|
||||
|
||||
Experiance: Five years administration of Unix systems and GNU tools
|
||||
in University environments, and support of Unix administrators
|
||||
and GNU tools as an external contractor to New Zealand Government
|
||||
departments.
|
||||
|
||||
Degrees: M.Sc (Distinction) for a thesis involving work done on GCC.
|
||||
|
||||
Updated: 28 Aug 91
|
||||
|
||||
Bob Sutterfield <bob@morningstar.com>
|
||||
|
||||
work: home:
|
||||
Morning Star Technologies
|
||||
1760 Zollinger Road 3542 Norwood Street
|
||||
Columbus, Ohio 43221 USA Columbus, Ohio 43224-3424 USA
|
||||
(614)451-1883 (614)267-7611
|
||||
|
||||
Rates: $50/hr (negotiable) plus travel expenses
|
||||
Gratis to Christian missionaries and mission agencies
|
||||
|
||||
Services: Installation, troubleshooting, and mild customization of
|
||||
most GNU production and beta-test software; tutorials, training,
|
||||
and handholding; general UNIX system and network consulting.
|
||||
|
||||
Entered: 2/16/92
|
||||
|
||||
Kayvan Sylvan <kayvan@satyr.Sylvan.COM>
|
||||
Sylvan Associates
|
||||
879 Lewiston Drive
|
||||
San Jose, CA 95136
|
||||
Phone: 408-978-1407
|
||||
|
||||
I will help you port, install and customize GNU Emacs, GCC, G++,
|
||||
bison, and other GNU tools on almost any architechture and operating
|
||||
system. Questions answered. GNU C and lisp hacking available. I will
|
||||
also do ongoing support and periodic upgrades if you get on my GNU
|
||||
software subscription list.
|
||||
|
||||
Rates: $60-$100/hour, depending on type of work. Substantial discounts
|
||||
for long-term contracts and also for educational or non-profit
|
||||
institutions.
|
||||
|
||||
Experience: Many different Unix systems (2.9BSD to 4.3BSD, SVR3 and
|
||||
SVR4, Xenix). Systems programming and system administration on all
|
||||
brands of Unix. Kernel hacking experience. Lots of porting experience.
|
||||
I can port anything to anything (within reason).
|
||||
|
||||
Updated: 10 Jul 92
|
||||
|
||||
Leonard H. Tower Jr. <tower@prep.ai.mit.edu>
|
||||
36 Porter Street
|
||||
Somerville, MA 02143, USA
|
||||
+1 (617) 623-7739
|
||||
|
||||
Will work on most GNU software.
|
||||
Installation, handholding, trouble shooting, extensions, teaching.
|
||||
|
||||
Rates: 100.00/hour + travel expenses. Negotiable for non-profits.
|
||||
|
||||
Experience: Have hacked on over a dozen architectures in many languages. Have
|
||||
system mothered several varieties of Unixes. Assisted rms with the front end
|
||||
of gcc and it's back-end support. Resume available on request.
|
||||
|
||||
Entered: 12 Feb 92
|
||||
|
||||
Watchmaker Computing <support@watch.com>
|
||||
P.O.Box 163, Kendall Square
|
||||
Cambridge, MA 02142
|
||||
email: support@watch.com
|
||||
|
||||
Emacs: We'll do GNUEmacs support, porting, bug fixing, and customizing.
|
||||
We also have specific expertise in:
|
||||
packages: GCC, G++, X11, Xt, InterViews, PERL, TeX, Epoch
|
||||
languages: C, C++, Lisp, most others; we learn quickly!
|
||||
Extensive experience coding for portability under UNIX.
|
||||
Typical rates $35-$150/hour; will telecommute (Internet or phone)
|
||||
|
||||
Entered: 1/16/91
|
||||
|
||||
Chris Welty <weltyc@cs.rpi.edu>
|
||||
RPI Computer Science Dept
|
||||
Troy, NY 12180
|
||||
518-276-2816 (W)
|
||||
|
||||
EMail correspondance preferred.
|
||||
Rates vary depending on need, barter often accepted.
|
||||
|
||||
Programs: emacs, especially emacs lisp.
|
||||
Lots of experience in various areas.
|
||||
BS, MS from RPI. Currently working on PhD.
|
||||
|
||||
Updated: 10/10/91
|
||||
|
||||
Pace Willisson <pace@blitz.com>
|
||||
Blitz Product Development Corporation <uunet!blitz!pace>
|
||||
4 Spruce Road
|
||||
Medway, MA 02053, USA
|
||||
Work: (508) 533-6430
|
||||
|
||||
Rates: $80.00/hour
|
||||
|
||||
Will work on any GNU software.
|
||||
|
||||
Experience: 12 years working with C, Unix and Lisp Machines including
|
||||
compilation systems, networks, device drivers, demand paging systems,
|
||||
boot programs and window systems. Ported GDB to 80386. Designed COFF
|
||||
encapsulation scheme to run GNU linker output on System 5 kernels.
|
||||
Author of Unix "ispell".
|
||||
|
||||
Degree: BS in Computer Science from MIT
|
||||
|
||||
Updated: 7/31/91
|
||||
|
||||
Patrick Wood
|
||||
Pipeline Associates, Inc.
|
||||
2740 Route 10 West
|
||||
Morris Plains, NJ 07950
|
||||
|
||||
Rate: Free
|
||||
Support For: gcc, binutils, gnulib, using gcc for cross compiling
|
||||
Experiance: used gcc for cross compiling for over 2 years; used
|
||||
gcc for three years; installed and support gcc on several
|
||||
BSD and System V UNIX systems; wrote peephole optimizer for
|
||||
gcc on 68K, wrote portable replacement for FP routines in
|
||||
gnulib.c. Modified gcc and binutils to work in byte-swapped
|
||||
environments.
|
||||
Other: email consulting only <pipeline!phw@motown.com>,
|
||||
uunet!motown!pipeline!phw,sun!pipeline!phw, amdcad!pipeline!phw
|
||||
|
||||
Updated: 18 Sept 91
|
||||
|
||||
xprt Computer Consulting, Inc. <jody@shell.com>
|
||||
17200 El Camino Real Suite 110 T
|
||||
Houston, TX 77058
|
||||
(713) 480 UNIX
|
||||
(713) 486 8575 (Fax)
|
||||
|
||||
Programs Supported:
|
||||
X11, TeX, and all of GNU.
|
||||
|
||||
Experience:
|
||||
We have supported and maintained all of GNU, X11 and TeX for over four
|
||||
years for a major oil company's research division on several different
|
||||
Unix platforms.
|
||||
|
||||
Rates: $150/hour
|
||||
|
||||
Entered: 10 Jul 92
|
||||
|
||||
Name: david d [zoo] zuhn <zuhn@cs.umn.edu>
|
||||
Company: armadillo zoo software
|
||||
Fees: $50/hour, discounts for educational institutions and non-profits
|
||||
|
||||
GNU and X11 installation and maintainance on SGI Iris, Sun [68k &
|
||||
SPARC], and Sequent machines. Additional machines a possibility.
|
||||
Any GNU software installed. Most supported.
|
||||
|
||||
Updated: 7/11/92
|
||||
|
||||
** Please keep this file alphabetical **
|
||||
318
etc/SUN-SUPPORT
Normal file
318
etc/SUN-SUPPORT
Normal file
|
|
@ -0,0 +1,318 @@
|
|||
NOTE: the Free Software Foundation agreed to put this file, and the
|
||||
programs it describes, into the Emacs distribution ONLY on the
|
||||
condition that we would not lift a finger to maintain them! We are
|
||||
willing to *pass along* support for Sun windows, but we are not
|
||||
willing to let it distract us from what we are trying to do. If you
|
||||
have complaints or suggestions about Sun windows support, send them to
|
||||
peck@sun.com, who is the maintainer.
|
||||
|
||||
|
||||
The interface between GNU Emacs and Sun windows consists of the program
|
||||
etc/emacstool, the Lisp programs lisp/sun-*.el and lisp/term/sun.el,
|
||||
and the C source file src/sunfns.c. It is documented with a man page,
|
||||
etc/emacstool.1.
|
||||
|
||||
To enable use of these files and programs, define the configuration
|
||||
switch HAVE_SUN_WINDOWS in src/config.h before compiling Emacs.
|
||||
The definition of HAVE_SUN_WINDOWS must precede the #include m-sun3.h
|
||||
or #include m-sun4.h.
|
||||
If you must change PURESIZE, do so after the #include m-sun3.h
|
||||
|
||||
This software is based on SunView for Sun UNIX 4.2 Release 3.2,
|
||||
and will not work "as is" on previous releases, eg 3.0 or 3.1.
|
||||
|
||||
Using Emacstool with GNU Emacs:
|
||||
|
||||
The GNU Emacs files lisp/term/sun.el, lisp/sun-mouse.el,
|
||||
lisp/sun-fns.el, and src/sunfns.c provide emacs support for the
|
||||
Emacstool and function keys. If your terminal type is SUN (that is,
|
||||
if your environment variable TERM is set to SUN), then Emacs will
|
||||
automatically load the file lisp/term/sun.el. This, in turn, will
|
||||
ensure that sun-mouse.el is autoloaded when any mouse events are
|
||||
detected. It is suggested that sun-mouse and sun-fns be
|
||||
included in your site-init.el file, so that they will always be loaded
|
||||
when running on a Sun workstation. [Increase PURESIZE to 154000].
|
||||
|
||||
Support for the Sun function keys requires disconnecting the standard
|
||||
Emacs command Meta-[. Therefore, the function keys are supported only
|
||||
if you do (setq sun-esc-bracket t) in your .emacs file.
|
||||
|
||||
The file src/sunfns.c defines several useful functions for emacs on
|
||||
the Sun. Among these are procedures to pop-up SunView menus, put and
|
||||
get from the SunView selection [STUFF] buffer, and a procedure for
|
||||
changing the cursor icon. If you want to define cursor icons, try
|
||||
using the functions in lisp/sun-cursors.el.
|
||||
|
||||
The file lisp/sun-mouse.el includes a mass of software for defining
|
||||
bindings for mouse events. Any function can be called or any form
|
||||
evaluated as a result of a mouse event. If you want a pop-up menu,
|
||||
your function can call sun-menu-evaluate. This will bring up a
|
||||
SunView walking menu of your choice.
|
||||
|
||||
Use the macro (defmenu menu-name &rest menu-items) to define menu
|
||||
objects. Each menu item is a cons of ("string" . VALUE), VALUE is
|
||||
evaluated when the string item is picked. If VALUE is a menu, then a
|
||||
pullright item is created.
|
||||
|
||||
This version also includes support for copying to and from the
|
||||
sun-windows "stuff" selection. The keyboard bindings defined in
|
||||
lisp/sun-fns.el let you move the current region to the "STUFF"
|
||||
selection and vice versa. Just set point with the left button, set
|
||||
mark with the middle button, (the region is automatically copied to
|
||||
"STUFF") then switch to a shelltool, and "Stuff" will work. Going the
|
||||
other way, the main right button menu contains a "Stuff Selection"
|
||||
command that works just like in shelltool. [The Get and Put function
|
||||
keys are also assigned to these functions, so you don't need the mouse
|
||||
or even emacstool to make this work.]
|
||||
|
||||
Until someone write code to read the textsw "Selection Shelf", it is
|
||||
not possible to copy directly from a textsw to emacs, you must go through
|
||||
the textsw "STUFF" selection.
|
||||
|
||||
The Scroll-bar region is not a SunView scrollbar. It really should
|
||||
be called the "Right-Margin" region. The scroll bar region is basically
|
||||
the rightmost five columns (see documentation on variable scrollbar-width).
|
||||
Mouse hits in this region can have special bindings, currently those binding
|
||||
effect scrolling of the window, and so are refered to as the "Scroll-bar"
|
||||
region.
|
||||
|
||||
For information on what mouse bindings are in effect, use the command
|
||||
M-x Describe-mouse-bindings, or the quick pop-up menu item "Mouse-Help".
|
||||
|
||||
|
||||
GNU Emacs EXAMPLES:
|
||||
See definitions in lisp/sun-fns.el for examples.
|
||||
|
||||
You can redefine the cursor that is displayed in the emacs window.
|
||||
On initialization, it is set to a right arrow. See lisp/sun-cursors.el
|
||||
for additional cursors, how to define them, how to edit them.
|
||||
|
||||
BUGS:
|
||||
It takes a few milliseconds to create a menu before it pops up.
|
||||
Someone who understands the GNU Garbage Collector might see if it
|
||||
is possible for defmenu to create a SunView menu struct that does
|
||||
not get destroyed by Garbage Collection.
|
||||
|
||||
An outline of the files used to support Sun Windows and the mouse.
|
||||
|
||||
etc/SUN-SUPPORT.
|
||||
This document.
|
||||
|
||||
etc/emacstool.1:
|
||||
Added: an nroff'able man page for emacstool.
|
||||
|
||||
etc/emacstool.c:
|
||||
Encodes all the function keys internally, and passes non-window
|
||||
system arguments to emacs.
|
||||
|
||||
etc/emacs.icon:
|
||||
The "Kitchen Sink" GNU Emacs icon.
|
||||
|
||||
src/sunfns.c:
|
||||
This contains the auxilary functions that allow elisp code to interact
|
||||
with the sunwindows, selection, and menu functions.
|
||||
|
||||
lisp/sun-mouse.el:
|
||||
Defines the lisp function which is called when a mouse hit is found
|
||||
in the input queue. This handler decodes the mouse hit via a keymap-like
|
||||
structure sensitive to a particular window and where in the window the
|
||||
hit occured (text-region, right-margin, mode-line). Three variables
|
||||
are bound (*mouse-window* *mouse-x* *mouse-y*) and the selected function
|
||||
is called.
|
||||
See documentation on "define-mouse" or look at lisp/sun-fns.el
|
||||
to see how this is done.
|
||||
Defines two functions to pass between region and sun-selection
|
||||
Defines functions for interfacing with the Menu.
|
||||
During menu evaluation, the variables *menu-window* *menu-x* *menu-y* are bound.
|
||||
|
||||
lisp/sun-fns.el
|
||||
The definition of the default menu and mouse function bindings.
|
||||
|
||||
lisp/sun-cursors.el
|
||||
Defines a number of alternate cursors, and an editor for them.
|
||||
The editor is also a demonstration of mouse/menu utilization.
|
||||
|
||||
lisp/term/sun.el
|
||||
Sets up the keymap to make the sun function keys do useful things.
|
||||
Also includes the setup/initialization code for running under emacstool,
|
||||
which makes "\C-Z" just close the emacstool window (-WI emacs.icon).
|
||||
|
||||
Jeff Peck, Sun Microsystems, Inc <peck@sun.com>
|
||||
|
||||
|
||||
Subject: Making multi-line scrolling really work:
|
||||
|
||||
In your .defaults file, include the line:
|
||||
/Tty/Retained "Yes"
|
||||
That way, the terminal emulator can do text moves using bitblt,
|
||||
instead of repaint.
|
||||
|
||||
If that's not enough for you, then tell unix and emacs that
|
||||
the sun terminal supports multi-line and multi-character insert/delete.
|
||||
Add this patch to your /etc/termcap file:
|
||||
|
||||
*** /etc/termcap.~1~ Mon Sep 15 12:34:23 1986
|
||||
--- /etc/termcap Mon Feb 9 17:34:08 1987
|
||||
***************
|
||||
*** 32,39 ****
|
||||
--- 32,40 ----
|
||||
Mu|sun|Sun Microsystems Workstation console:\
|
||||
:am:bs:km:mi:ms:pt:li#34:co#80:cl=^L:cm=\E[%i%d;%dH:\
|
||||
:ce=\E[K:cd=\E[J:so=\E[7m:se=\E[m:rs=\E[s:\
|
||||
:al=\E[L:dl=\E[M:im=:ei=:ic=\E[@:dc=\E[P:\
|
||||
+ :AL=\E[%dL:DL=\E[%dM:IC=\E[%d@:DC=\E[%dP:\
|
||||
:up=\E[A:nd=\E[C:ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D:\
|
||||
:k1=\E[224z:k2=\E[225z:k3=\E[226z:k4=\E[227z:k5=\E[228z:\
|
||||
:k6=\E[229z:k7=\E[230z:k8=\E[231z:k9=\E[232z:
|
||||
M-|sun-nic|sune|Sun Microsystems Workstation console without insert character:\
|
||||
|
||||
|
||||
If you don't have the program "patch", just add the line:
|
||||
:AL=\E[%dL:DL=\E[%dM:IC=\E[%d@:DC=\E[%dP:\
|
||||
|
||||
casetek@crvax.sri.com says:
|
||||
|
||||
Those of you using GNU Emacs on Sun workstations under
|
||||
3.2 may be interested in reducing memory utilization in
|
||||
the emacstool via the Sun toolmerge facility. The technique
|
||||
is described in the Release 3.2 Manual starting on page
|
||||
71. The following is a summary of how it would apply
|
||||
to merging emacstool into the basetools.
|
||||
|
||||
1) Change the main procedure declaration in emacstool.c to:
|
||||
|
||||
#ifdef SUN_TOOLMERGE
|
||||
emacstool_main (argc, argv);
|
||||
#else
|
||||
main (argc, argv)
|
||||
#endif
|
||||
|
||||
This will allow creation of either standard or toolmerge
|
||||
versions.
|
||||
|
||||
2) Copy emacstool.o into directory /usr/src/sun/suntool.
|
||||
3) make CFLAGS="-g -DSUN_TOOLMERGE" emacstool.o
|
||||
4) Add the following line to basetools.h
|
||||
|
||||
"emacstool",emacstool_main,
|
||||
|
||||
5) Add the following line to toolmerge.c.
|
||||
|
||||
extern emacstool_main();
|
||||
|
||||
6) make basetools MOREOBJS="emacstool.o"
|
||||
7) make install_bins
|
||||
|
||||
To invoke the toolmerged version, you must exit suntools and
|
||||
re-start it. Make sure that /usr/bin occurs before the directory
|
||||
in which you installed the standard (non-toolmerged) version.
|
||||
|
||||
|
||||
Subject: Moving selections between OW and Emacstool/xvetool
|
||||
Date: Wed, 26 Jun 91 18:58:24 PDT
|
||||
From: Jeff Peck <peck>
|
||||
|
||||
The short answer is that we can Cut and Paste between Emacstool
|
||||
and TTYSW (shelltool) and we can Paste between Emacstool and TEXTSW(cmdtool)
|
||||
and somewhat more slowly move from TEXTSW to Emacstool.
|
||||
|
||||
**** This interaction with the TTYSW selection is a HACK! ****
|
||||
|
||||
At end of this message is the code that should be in your sun-mouse.el or .emacs
|
||||
|
||||
Here's the restrictions on using it:
|
||||
|
||||
1. from Shelltool to Emacstool:
|
||||
select text in shelltool and hit COPY.
|
||||
move to Emacstool, hit PASTE. (simple, eh?)
|
||||
|
||||
For any other movement, you must remember this:
|
||||
"The window system must believe that a shelltool has the current selection."
|
||||
If you do that, then this will all work painlessly.
|
||||
[that will also explain why you can not make a selection in a cmdtool
|
||||
and then directly PASTE it into Emacstool]
|
||||
|
||||
2. from Emacstool to Shelltool
|
||||
ensure that a shelltool has the selection: (select something and hit COPY)
|
||||
in emacstool select a region and hit COPY
|
||||
in shelltool hit PASTE. (not too bad, yet)
|
||||
|
||||
3. from Emacstool to Cmdtool
|
||||
ensure that a shelltool has the selection:
|
||||
(in a *shelltool* select something and hit COPY)
|
||||
in emacstool select a region and hit COPY
|
||||
in shelltool hit PASTE. (ok, its getting crufty)
|
||||
|
||||
4. from Cmdtool to Emacstool
|
||||
select in Cmdtool, hit COPY
|
||||
in a shelltool, % cat > /dev/null
|
||||
then hit PASTE
|
||||
Select the text again, from the shelltool this time. hit COPY
|
||||
in emacstool, hit PASTE
|
||||
|
||||
4a. from Cmdtool (or shelltool) to Emacstool
|
||||
the function "sunview-yank-any-selection" should be bound to Meta-PASTE
|
||||
If so, then just:
|
||||
select in Cmdtool
|
||||
in emacstool, hit Meta-PASTE
|
||||
|
||||
This uses the function "sunview-yank-current-selection"
|
||||
which relies one the (supported) utility "get_selection"
|
||||
As such, it is *not* a hack, but it *IS* SLOW (or slower)
|
||||
|
||||
|
||||
If you know that a shelltool *still* has the selection
|
||||
(note: nothing you do with Emacstool or the PASTE key will affect that)
|
||||
then the "ensure..." line is a NO-OP.
|
||||
|
||||
Note that using COPY in emacstool will change the *value* of the selection
|
||||
behind the window systems back:
|
||||
the holder of the selection doesn't know of this,
|
||||
the window system doesn't know of this,
|
||||
and the highlighted text *WILL NOT CHANGE*
|
||||
|
||||
Turns out the selection value is written into a /tmp/ttyselection file
|
||||
and emacs just rewrites that file, clever, eh?
|
||||
|
||||
|
||||
Your version of sun-mouse.el should include these functions
|
||||
(or put them into your .emacs)
|
||||
|
||||
|
||||
;;; define the selection file used by this emacs
|
||||
;;; if not local machine, then automounter must find /net/<host>/tmp
|
||||
(defconst owselectionfile
|
||||
(let ((display (getenv "DISPLAY")))
|
||||
(if (null display)
|
||||
nil ; no DISPLAY variable -- return nil
|
||||
(let ((colon_at (string-match ":" display)))
|
||||
(if (null colon_at)
|
||||
nil ; no colon in environment variable -- return nil
|
||||
(if (zerop colon_at)
|
||||
"/tmp/ttyselection" ; colon is first character
|
||||
(concat "/net/" (substring display 0 colon_at) "/tmp/ttyselection")
|
||||
)))))
|
||||
)
|
||||
|
||||
(defun xv-yank-selection ()
|
||||
"Set mark and yank the contents of the current Xview selection
|
||||
into the current buffer at point. The STUFF selection contains the currently
|
||||
or previously highlighted text from a TTYSW."
|
||||
(interactive "*")
|
||||
(insert-file owselectionfile)
|
||||
(exchange-point-and-mark)
|
||||
)
|
||||
|
||||
(defun xv-select-region (beg end)
|
||||
"Set the TTYSW selection to the region in the current buffer."
|
||||
(interactive "r")
|
||||
(write-region beg end owselectionfile nil 'noprint)
|
||||
)
|
||||
|
||||
You can then bind these to Copy and Paste in your .emacs
|
||||
|
||||
(setq suntool-map-hooks '( ; not your usual hook list
|
||||
(define-key suntool-map "fl" 'xv-select-region) ; L6 Copy
|
||||
(define-key suntool-map "hl" 'xv-yank-selection) ; L8 Paste
|
||||
)
|
||||
)
|
||||
41
etc/SUNBUG
Normal file
41
etc/SUNBUG
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
From: coho!daveg (Dave Gagne)
|
||||
Subject: Re: Problems with building emacs on SunOS 4.0 (EXPORT)
|
||||
Summary: SunOS 4.0_Export "cc -Bstatic" don't work.
|
||||
Organization: UBC Dept. of Electrical Engineering, Vancouver, Canada
|
||||
|
||||
> Has anyone else seen similar problems?
|
||||
|
||||
Yes indeed. Anyone who does not live in the jolly US of A.
|
||||
|
||||
What you are encountering is a screw-up in SunOS 4.0_Export. This
|
||||
problem only occurs in the "EXPORT" version of SunOS 4.0: ie the
|
||||
software which Sun ships outside of the USA. The problem has something
|
||||
to do with Sun not wanting to ship their DES chips outside of the good
|
||||
'ole USA. What we poor foreigners get instead is some buggered up
|
||||
software.
|
||||
|
||||
What all this means is that "cc -Bstatic ..." WILL NOT WORK ON SUNOS
|
||||
4.0 EXPORT without a little help from "ar". The static C-library is
|
||||
/lib/libc.a, and this is where the problem occurs. There are a bunch of
|
||||
.o files in there relating to DES stuff (des_crypt.o, des_soft.o, _crypt.o,
|
||||
etc). All of them will case cc -Bstatic to die as you found with the
|
||||
errors:
|
||||
|
||||
> _edata: ld: user attempt to redefine loader-defined symbol
|
||||
> _end: user attempt to redefine loader-defined symbol
|
||||
> _etext: /lib/libc.a(des_crypt.o): multiply defined
|
||||
|
||||
In order to make cc -Bstatic useful, you must remove all the
|
||||
brain-damaged .o files from /lib/libc.a. To do this use
|
||||
|
||||
ar d /lib/libc.a des_crypt.o des_soft.o _crypt.o ....
|
||||
|
||||
(Make a backup of /lib/libc.a first, you may decide you need the "real"
|
||||
thing someday). Note that there are a bunch of these files, I can't
|
||||
remember all of them. You will find them quick enough by trying to
|
||||
compile ANY C program, even one which does NOTHING.
|
||||
|
||||
After you have done this, Emacs should compile OK. I was able to get
|
||||
both the "normal" text version and the X-windows (X11R2) version to
|
||||
compile OK. It seems to me that the Suntools version may not have worked,
|
||||
but I may just be halucinating.
|
||||
229
etc/TERMS
Normal file
229
etc/TERMS
Normal file
|
|
@ -0,0 +1,229 @@
|
|||
This file describes what you must or might want to do to termcap entries
|
||||
to make terminals work properly and efficiently with Emacs. Information
|
||||
on likely problems with specific types of terminals appears at the end
|
||||
of the file.
|
||||
|
||||
*** What you want in a terminal ***
|
||||
|
||||
Vital
|
||||
1. Easy to compute suitable padding for.
|
||||
2. Never ever sends ^S/^Q unless you type them, at least in one mode.
|
||||
|
||||
Nice for speed
|
||||
1. Supports insert/delete of multiple lines in one command.
|
||||
2. Same for multiple characters, though doing them one by
|
||||
one is usually fast enough except on emulators running on
|
||||
machines with bitmap screens.
|
||||
|
||||
Nice for usability
|
||||
1. Considerably more than 24 lines.
|
||||
2. Meta key (shift-like key that controls the 0200 bit
|
||||
in every character you type).
|
||||
|
||||
*** New termcap strings ***
|
||||
|
||||
Emacs supports certain termcap strings that are not described in the
|
||||
4.2 manual but appear to be standard in system V. The one exception
|
||||
is `cS', which I invented.
|
||||
|
||||
`AL' insert several lines. Takes one parameter, the number of
|
||||
lines to be inserted. You specify how to send this parameter
|
||||
using a %-construct, just like the cursor positions in the `cm'
|
||||
string.
|
||||
|
||||
`DL' delete several lines. One parameter.
|
||||
|
||||
`IC' insert several characters. One parameter.
|
||||
|
||||
`DC' delete several characters. One parameter.
|
||||
|
||||
`rp' repeat a character. Takes two parameters, the character
|
||||
to be repeated and the number of times to repeat it.
|
||||
Most likely you will use `%.' for sending the character
|
||||
to be repeated. Emacs interprets a padding spec with a *
|
||||
as giving the amount of padding per repetition.
|
||||
|
||||
WARNING: Many terminals have a command to repeat the
|
||||
*last character output* N times. This means that the character
|
||||
will appear N+1 times in a row when the command argument is N.
|
||||
However, the `rp' string's parameter is the total number of
|
||||
times wanted, not one less. Therefore, such repeat commands
|
||||
may be used in an `rp' string only if you use Emacs's special
|
||||
termcap operator `%a-c\001' to subtract 1 from the repeat count
|
||||
before substituting it into the string. It is probably safe
|
||||
to use this even though the Unix termcap does not accept it
|
||||
because programs other than Emacs probably won't look for `rp'
|
||||
anyway.
|
||||
|
||||
`cs' set scroll region. Takes two parameters, the vertical
|
||||
positions of the first line to include in the scroll region
|
||||
and the last line to include in the scroll region.
|
||||
Both parameters are origin-zero. The effect of this
|
||||
should be to cause a following insert-line or delete-line
|
||||
not to move lines below the bottom of the scroll region.
|
||||
|
||||
This is not the same convention that Emacs version 16 used.
|
||||
That is because I was led astray by unclear documentation
|
||||
of the meaning of %i in termcap strings. Since the termcap
|
||||
documentation for `cs' is also unclear, I had to deduce the
|
||||
correct parameter conventions from what would make the VT-100's
|
||||
`cs' string work properly. From an incorrect assumption about
|
||||
%i, I reached an incorrect conclusion about `cs', but the result
|
||||
worked correctly on the VT100 and ANSII terminals. In Emacs
|
||||
version 17, both `cs' and %i work correctly.
|
||||
|
||||
The version 16 convention was to pass, for the second parameter,
|
||||
the line number of the first line beyond the end of the
|
||||
scroll region.
|
||||
|
||||
`cS' set scroll region. Differs from `cs' in taking parameters
|
||||
differently. There are four parameters:
|
||||
1. Total number of lines on the screen.
|
||||
2. Number of lines above desired scroll region.
|
||||
3. Number of lines below (outside of) desired scroll region.
|
||||
4. Total number of lines on the screen, like #1.
|
||||
This is because an Ambassador needs the parameters like this.
|
||||
|
||||
`cr', `do', `le'
|
||||
Emacs will not attempt to use ^M, ^J or ^H for cursor motion
|
||||
unless these capabilities are present and say to use those
|
||||
characters.
|
||||
|
||||
`km' Says the terminal has a Meta key.
|
||||
|
||||
Defining these strings is important for getting maximum performance
|
||||
from your terminal.
|
||||
|
||||
Make sure that the `ti' string sets all modes needed for editing
|
||||
in Emacs. For example, if your terminal has a mode that controls
|
||||
wrap at the end of the line, you must decide whether to specify
|
||||
the `am' flag in the termcap entry; whichever you decide, the `ti'
|
||||
string should contain commands to set the mode that way.
|
||||
(Emacs also sends the `vs' string after the `ti' string.
|
||||
You can put the mode-setting commands in either one of them.)
|
||||
|
||||
*** Specific Terminal Types ***
|
||||
|
||||
Watch out for termcap entries for Ann Arbor Ambassadors that
|
||||
give too little padding for clear-screen. 7.2 msec per line is right.
|
||||
These are the strings whose padding you probably should change:
|
||||
:al=1*\E[L:dl=1*\E[M:cd=7.2*\E[J:cl=7.2*\E[H\E[J:
|
||||
I have sometimes seen `\E[2J' at the front of the `ti' string;
|
||||
this is a clear-screen, very slow, and it can cause you to get
|
||||
Control-s sent by the terminal at startup. I recommend removing
|
||||
the `\E[2J' from the `ti' string.
|
||||
The `ti' or `vs' strings also usually need stuff added to them, such as
|
||||
\E[>33;52;54h\E[>30;37;38;39l
|
||||
You might want to add the following to the `te' or `ve' strings:
|
||||
\E[>52l\E[>37h
|
||||
The following additional capabilities will improve performance:
|
||||
:AL=1*\E[%dL:DL=1*\E[%dM:IC=4\E[%d@:DC=4\E[%dP:rp=1*%.\E[%a-c\001%db:
|
||||
If you find that the Meta key does not work, make sure that
|
||||
:km:
|
||||
is present in the termcap entry.
|
||||
|
||||
Watch out for termcap entries for VT100's that fail to specify
|
||||
the `sf' string, or that omit the padding needed for the `sf' and `sr'
|
||||
strings (2msec per line affected). What you need is
|
||||
:sf=2*^J:sr=2*\EM:cs=\E[%i%d;%dr:
|
||||
|
||||
The Concept-100 and Concept-108 have many modes that `ti' strings
|
||||
often fail to initialize. If you have problems on one of these
|
||||
terminals, that is probably the place to fix them. These terminals
|
||||
can support an `rp' string.
|
||||
|
||||
Watch out on HP terminals for problems with standout disappearing on
|
||||
part of the mode line. These problems are due to the absence of
|
||||
:sg#0: which some HP terminals need.
|
||||
|
||||
The vi55 is said to require `ip=2'.
|
||||
|
||||
The Sun console should have these capabilities for good performance.
|
||||
:AL=\E[%dL:DL=\E[%dM:IC=\E[%d@:DC=\E[%dP:
|
||||
|
||||
The vt220 needs to be set to vt220 mode, 7 bit, space parity
|
||||
in order to work fully with TERM=vt220.
|
||||
|
||||
If you are using a LAT terminal concentrator, you need to issue these
|
||||
commands to turn off flow control:
|
||||
|
||||
set port flow control disable
|
||||
define port flow control disable
|
||||
|
||||
On System V, in the terminfo database, various terminals may have
|
||||
the `xt' flag that should not have it. `xt' should be present only
|
||||
for the Teleray 1061 or equivalent terminal.
|
||||
|
||||
In particular, System V for the 386 often has `xt' for terminal type
|
||||
AT386 or AT386-M, which is used for the console. You should delete
|
||||
this flag. Here is how:
|
||||
|
||||
You can get a copy of the terminfo "source" for at386 using the
|
||||
command: `infocmp at386 >at386.tic'. Edit the file at386.tic and remove
|
||||
the `xt' flag. Then compile the new entry with: `tic at386.tic'.
|
||||
|
||||
It is also reported that these terminal types sometimes have the wrong
|
||||
reverse-scroll string. It should be \E[T, but sometimes is given as \E[S.
|
||||
|
||||
Here is what watserv1!maytag!focsys!larry recommends for these terminals:
|
||||
|
||||
# This copy of the terminfo description has been fixed.
|
||||
# The suggestions came from a number of usenet postings.
|
||||
#
|
||||
# Intel AT/386 for color card with monochrome display
|
||||
#
|
||||
AT386-M|at386-m|386AT-M|386at-m|at/386 console,
|
||||
am, bw, eo, xon,
|
||||
cols#80, lines#25,
|
||||
acsc=``a1fxgqh0jYk?lZm@nEooppqDrrsstCu4vAwBx3yyzz{{||}}~~,
|
||||
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z,
|
||||
clear=\E[2J\E[H,
|
||||
cr=\r, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB,
|
||||
cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
|
||||
cup=\E[%i%p1%02d;%p2%02dH, cuu=\E[%p1%dA, cuu1=\E[A,
|
||||
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[1M,
|
||||
ech=\E[%p1%dX,ed=\E[J, el=\E[K, el1=\E[1K\E[X, flash=^G, home=\E[H,
|
||||
hpa=\E[%i%p1%dG, ich=\E[%p1%d@, ich1=\E[1@, il=\E[%p1%dL, il1=\E[1L,
|
||||
ind=\E[S, indn=\E[%p1%dS, invis=\E[9m,
|
||||
is2=\E[0;10;38m, kbs=\b, kcbt=^], kclr=\E[2J,
|
||||
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
|
||||
kdch1=\E[P, kend=\E[Y, kf1=\EOP, kf10=\EOY, kf11=\EOZ,
|
||||
kf12=\EOA, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT,
|
||||
kf6=\EOU, kf7=\EOV, kf8=\EOW, kf9=\EOX, khome=\E[H,
|
||||
kich1=\E[@, knp=\E[U, kpp=\E[V, krmir=\E0, rev=\E[7m, ri=\E[T,
|
||||
rin=\E[%p1%dT, rmacs=\E[10m, rmso=\E[m, rmul=\E[m,
|
||||
sgr=\E[10m\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p4%t;5%;%?%p6%t;1%;%?%p9%t;12%;%?%p7%t;9%;m,
|
||||
sgr0=\E[0;10m, smacs=\E[12m, smso=\E[7m, smul=\E[4m,
|
||||
|
||||
#
|
||||
# AT&T 386 color console
|
||||
#
|
||||
AT386|at386|386AT|386at|at/386 console,
|
||||
colors#8, ncv#3, pairs#64,
|
||||
is2=\E[0;10;39m,
|
||||
op=\E[0m,
|
||||
setb=\E[%?%p1%{0}%=%t40m
|
||||
%e%p1%{1}%=%t44m
|
||||
%e%p1%{2}%=%t42m
|
||||
%e%p1%{3}%=%t46m
|
||||
%e%p1%{4}%=%t41m
|
||||
%e%p1%{5}%=%t45m
|
||||
%e%p1%{6}%=%t43m
|
||||
%e%p1%{7}%=%t47m%;,
|
||||
setf=\E[%?%p1%{0}%=%t30m
|
||||
%e%p1%{1}%=%t34m
|
||||
%e%p1%{2}%=%t32m
|
||||
%e%p1%{3}%=%t36m
|
||||
%e%p1%{4}%=%t31m
|
||||
%e%p1%{5}%=%t35m
|
||||
%e%p1%{6}%=%t33m
|
||||
%e%p1%{6}%=%t33m
|
||||
%e%p1%{7}%=%t37m%;,
|
||||
use=at386-m,
|
||||
#
|
||||
# Color console version that supports underline but maps blue
|
||||
# foreground color to cyan.
|
||||
#
|
||||
AT386-UL|at386-ul|386AT-UL|386at-ul|at/386 console,
|
||||
is2=\E[0;10;38m,
|
||||
use=at386,
|
||||
26
etc/TO-DO
Normal file
26
etc/TO-DO
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
Things useful to do for GNU Emacs:
|
||||
|
||||
* Primitive for random access insertion of part of a file.
|
||||
|
||||
* Making I/O streams for files, so that read and prin1 can
|
||||
be used on files directly. The I/O stream itself would
|
||||
serve as a function to read or write one character.
|
||||
|
||||
* If a file you can't write is in a directory you can write,
|
||||
make sure it works to modify and save this file.
|
||||
|
||||
* Make dired's commands handle correctly the case where
|
||||
ls has listed several subdirectories' contents.
|
||||
It needs to be able to tell which directory each file
|
||||
is really in, by searching backward for the line
|
||||
which identifies the start of a directory.
|
||||
|
||||
* Add more dired commands, such as sorting (use the
|
||||
sort utility through call-process-region).
|
||||
|
||||
* Make display.c record inverse-video-ness on
|
||||
a character by character basis. Then make non-full-screen-width
|
||||
mode lines inverse video, and display the marked location in
|
||||
inverse video.
|
||||
|
||||
* VMS code to list a file directory. Make dired work.
|
||||
|
|
@ -296,7 +296,7 @@ commands that can destroy a lot of text save it, while the ones that
|
|||
attack only one character, or nothing but blank lines and spaces, do
|
||||
not save.
|
||||
|
||||
For instance, type C-n a couple times to position the cursor
|
||||
For instance, type C-n a couple times to postion the cursor
|
||||
at some line on this screen.
|
||||
|
||||
>> Do this now, move the cursor and kill that line with C-k.
|
||||
|
|
@ -533,7 +533,7 @@ to replace it with--each one ended with a Return.
|
|||
Then type M-x repl s<Return>changed<Return>altered<Return>.
|
||||
|
||||
Notice how this line has changed: you've replaced
|
||||
the word c-h-a-n-g-e-d with "altered" wherever it occurred
|
||||
the word c-h-a-n-g-e-d with "altered" wherever it occured
|
||||
after the cursor.
|
||||
|
||||
|
||||
|
|
|
|||
461
etc/XDOC
Normal file
461
etc/XDOC
Normal file
|
|
@ -0,0 +1,461 @@
|
|||
BABYL OPTIONS:
|
||||
Version: 5
|
||||
Labels:
|
||||
Note: This is the header of an rmail file.
|
||||
Note: If you are seeing it in rmail,
|
||||
Note: it means the file has no messages in it.
|
||||
|
||||
1,,
|
||||
Received: from ATHENA (ATHENA.MIT.EDU) by prep; Thu, 19 Dec 85 23:09:34 est
|
||||
Received: from PARIS (PARIS.MIT.EDU) by ATHENA (4.12/4.7)
|
||||
id AA02786; Thu, 19 Dec 85 23:07:35 est
|
||||
From: martillo@ATHENA.MIT.EDU (Yakim Martillo)
|
||||
Received: by PARIS (5.15/4.7)
|
||||
id AA24170; Thu, 19 Dec 85 23:07:36 EST
|
||||
Date: Thu, 19 Dec 85 23:07:36 EST
|
||||
Message-Id: <8512200407.AA24170@PARIS>
|
||||
To: rms@prep
|
||||
Cc: lbm
|
||||
Subject: Gnu Emacs + X documentation
|
||||
|
||||
*** EOOH ***
|
||||
From: martillo@ATHENA.MIT.EDU (Yakim Martillo)
|
||||
Date: Thu, 19 Dec 85 23:07:36 EST
|
||||
To: rms@prep
|
||||
Cc: lbm
|
||||
Subject: Gnu Emacs + X documentation
|
||||
|
||||
|
||||
This is the start of my X documentation.
|
||||
|
||||
I have not finished the last five sections yet. Please give me some
|
||||
suggestions.
|
||||
|
||||
Joachim
|
||||
|
||||
|
||||
Special Terminal Interfaces
|
||||
|
||||
Some terminals provide special capabilities which can be more
|
||||
effectively used via specially written C functions rather than normal
|
||||
termcap processing. To ease the use of these capabilities and aid the
|
||||
integration of these C functions, special terminal hooks are provided.
|
||||
|
||||
The hooks are all externed in the source header file termhooks.h.
|
||||
To determine the arguments, the interested user who wishes to develop
|
||||
a special terminal interface should consult term.c.
|
||||
For proper functioning of the user defined C termhook functions, the
|
||||
user should make certain that the terminal characteristics as externed
|
||||
in termchar.h are properly set.
|
||||
|
||||
Examples of how to use the termhooks can be found in xterm.c which
|
||||
contains the Gnu Emacs to X interface.
|
||||
|
||||
Gnu Emacs to X Interface
|
||||
|
||||
The termhooks feature has enough power that termhooks need not be
|
||||
restricted merely to the employment of special terminal capabilities.
|
||||
Termhooks can be used to interface Gnu Emacs to special graphics
|
||||
devices or window systems. Gnu Emacs interfaces with not a great deal
|
||||
of difficulty to the MIT/Project Athena X Window system. With not too
|
||||
much effort, a competent hacker should be able to interface Gnu Emacs
|
||||
to the Sun, Apollo, or Blit Window systems.
|
||||
|
||||
What is X?
|
||||
|
||||
X is a network transparent window system developed at MIT by Bob
|
||||
Scheiffler, Jim Gettys, Tony della Fera, Ron Newman and others. X is
|
||||
a descendent of the Stanford V kernal system and Gosling's rectangle
|
||||
management system. X has a standard protocol for communication with
|
||||
an X server which talks to the high resolution graphics device driver.
|
||||
The X developers have supplied a library libX.a which provides library
|
||||
routines to handle typical graphics/window system commands. X is
|
||||
network transparent in that a process running on a machine which wants
|
||||
to make use of a high resolution graphics device will establish a
|
||||
network connection to the X server which talks to the driver for that
|
||||
device. The process will be a client of the X server. Since LAN's
|
||||
typically can move data at megabit rates, running a window system in
|
||||
this fashion has many advantages. For more information about X,
|
||||
hackers are directed to "Xlib - C Language X Interface Version (?)"
|
||||
written by Jim Gettys (DEC/MIT) and Ron Newman (MIT).
|
||||
|
||||
New Functionality of Gnu Emacs + X
|
||||
|
||||
Gnu Emacs running as a client of X provides very rapid line insertion
|
||||
and deletion because bit blit commands are sent to the server and the
|
||||
driver simply tells the device to move the pixels on the screen
|
||||
directly. In fact, Gnu Emacs running under the xterm terminal
|
||||
emulator can also cause bit blts to take place but bit blits via the
|
||||
terminal emulator are rather slow because of escape sequence parsing
|
||||
overhead in the terminal emulator and because of context switching
|
||||
overhead as the bits take a merry trip through the pty interfaces and
|
||||
drivers.
|
||||
|
||||
Gnu Emacs runs in its own X window and therefore no information is
|
||||
lost from the xterm session from which the user invoked Gnu Emacs.
|
||||
Gnu Emacs should probably be run in background from the parent X
|
||||
session because then the user may continue to do more work in the
|
||||
parent xterm session. As Gnu Emacs should be run in background, the
|
||||
lisp form
|
||||
(put 'suspend-emacs 'disabled t)
|
||||
is passed to the Gnu Emacs lisp interpreter when Gnu Emacs is invoked
|
||||
from an xterm terminal emulator. Should the user accidently type the
|
||||
key sequence for suspend-emacs (initially C-z or C-XC-z), he will be
|
||||
queried whether he truly wishes to suspend emacs. Unless the user is
|
||||
confident he should reply n (= no).
|
||||
|
||||
If the user has an X window manager running, the user can resize the
|
||||
Gnu Emacs window using the usual mouse sequences which have been
|
||||
grabbed by the window manager. Gnu Emacs then automatically resizes
|
||||
itself and updates the display.
|
||||
|
||||
By using the mouse window manager commands, the user can cause
|
||||
formerly obscured sections of the Gnu Emacs window to be uncovered.
|
||||
These sections have to be repainted. Since Gnu Emacs creates the Gnu
|
||||
Emacs window by its lonesome, Gnu Emacs must repaint these sections of
|
||||
the window all by itself. If Gnu Emacs is chugging away on some
|
||||
global regexp replacement, Gnu Emacs may take its time in repainting
|
||||
the display. (Similar repainting may take place on bit blits.)
|
||||
|
||||
With the Gnu Emacs to X interface the mouse becomes even more
|
||||
powerful. Some mouse events (basically the ones not grabbed by the
|
||||
window manager) are passed to Gnu Emacs. Gnu Emacs is informed of the
|
||||
reception of such events because it receives the key sequence C-cC-m.
|
||||
Therefore a user who wishes to use the Gnu Emacs to X interface should
|
||||
not rebind this key sequence to any function.
|
||||
|
||||
This key sequence is bound to the lisp function x-mouse-mode which
|
||||
goes and checks the special X Mouse Queue for mouse events. Each
|
||||
control/shift/meta-mouse button sequence is associated with a defined
|
||||
constant in the lisp file x-mouse.el. The constants are defined as
|
||||
follows:
|
||||
|
||||
(defconst x-button-right (char-to-string 0))
|
||||
(defconst x-button-middle (char-to-string 1))
|
||||
(defconst x-button-left (char-to-string 2))
|
||||
|
||||
(defconst x-button-s-right (char-to-string 16))
|
||||
(defconst x-button-s-middle (char-to-string 17))
|
||||
(defconst x-button-s-left (char-to-string 18))
|
||||
|
||||
(defconst x-button-m-right (char-to-string 32))
|
||||
(defconst x-button-m-middle (char-to-string 33))
|
||||
(defconst x-button-m-left (char-to-string 34))
|
||||
|
||||
(defconst x-button-c-right (char-to-string 64))
|
||||
(defconst x-button-c-middle (char-to-string 65))
|
||||
(defconst x-button-c-left (char-to-string 66))
|
||||
|
||||
(defconst x-button-m-s-right (char-to-string 48))
|
||||
(defconst x-button-m-s-middle (char-to-string 49))
|
||||
(defconst x-button-m-s-left (char-to-string 50))
|
||||
|
||||
(defconst x-button-c-s-right (char-to-string 80))
|
||||
(defconst x-button-c-s-middle (char-to-string 81))
|
||||
(defconst x-button-c-s-left (char-to-string 82))
|
||||
|
||||
(defconst x-button-c-m-right (char-to-string 96))
|
||||
(defconst x-button-c-m-middle (char-to-string 97))
|
||||
(defconst x-button-c-m-left (char-to-string 98))
|
||||
|
||||
(defconst x-button-c-m-s-right (char-to-string 112))
|
||||
(defconst x-button-c-m-s-middle (char-to-string 113))
|
||||
(defconst x-button-c-m-s-left (char-to-string 114)).
|
||||
|
||||
To understand why these constants are so defined, the user should
|
||||
check out the (C) definition of the lisp function x-mouse-mode in the
|
||||
src file xfns.c. (I, Joachim Martillo not RMS, do not claim
|
||||
this code handles mouse events in the best way possible, and all
|
||||
involved with maintaining the Gnu Emacs to X interface would be open
|
||||
to suggestions for improvement.)
|
||||
|
||||
Anyway, using these defined constants, the user may bind his own
|
||||
defined functions to mouse sequences using the define-key command as
|
||||
below:
|
||||
|
||||
(define-key mouse-map x-button-right 'x-mouse-select).
|
||||
|
||||
Mouse functions are defined like any of the other lisp functions in
|
||||
Gnu Emacs.
|
||||
|
||||
Here, exempli gratia, is the lisp definition of x-mouse-select:
|
||||
|
||||
(defun x-mouse-select (arg)
|
||||
"Select Emacs window the mouse is on."
|
||||
(let ((start-w (selected-window))
|
||||
(done nil)
|
||||
(w (selected-window))
|
||||
(rel-coordinate nil))
|
||||
(while (and (not done)
|
||||
(null (setq rel-coordinate
|
||||
(coordinates-in-window-p arg w))))
|
||||
(setq w (next-window w))
|
||||
(if (eq w start-w)
|
||||
(setq done t)))
|
||||
(select-window w)
|
||||
rel-coordinate)).
|
||||
|
||||
When the mouse sequence is received, x-mouse-mode checks out the mouse
|
||||
queue, sees the defined constant associated with that button event,
|
||||
looks up that defined constants binding in the mouse-map and then
|
||||
invokes this lisp function with arg which is a list of the x and y
|
||||
coordinates of the mouse when the mouse event under question took
|
||||
place. The lisp symbol arg is bound to (x-coordinate y-coordinate).
|
||||
|
||||
The supplied mouse-functions and bindings are:
|
||||
|
||||
x-cut-and-wipe-text
|
||||
Function: Kill text between point and mouse; also copy to
|
||||
window system cut buffer.
|
||||
Binding: C-Middle Button.
|
||||
|
||||
x-cut-text
|
||||
Function: Copy text between point and mouse position into
|
||||
window system cut buffer.
|
||||
Binding: S-Middle Button (i.e. Shift-Middle Button).
|
||||
|
||||
x-mouse-keep-one-window
|
||||
Function: Select Emacs window mouse is on, then kill all other Emacs
|
||||
windows.
|
||||
Binding: C-S-Right Button.
|
||||
|
||||
x-mouse-select
|
||||
Function: Select Emacs window the mouse is on.
|
||||
Binding: Right Button.
|
||||
|
||||
x-mouse-select-and-split
|
||||
Function: Select Emacs window mouse is on, then split it vertically
|
||||
in half.
|
||||
Binding: C-Right Button.
|
||||
|
||||
x-mouse-set-mark
|
||||
Function: Select Emacs window mouse is on, and set mark at mouse
|
||||
position.
|
||||
Binding: Left Button.
|
||||
x-mouse-set-point
|
||||
Function: Select Emacs window mouse is on, and move point to mouse
|
||||
position.
|
||||
Binding: Middle Button.
|
||||
|
||||
x-paste-text
|
||||
Function: Move point to mouse position and insert window system cut
|
||||
buffer contents.
|
||||
Binding: S-Right Button.
|
||||
|
||||
These functions are invoked simply by positioning the mouse and then
|
||||
pressing the correct key/button combination.
|
||||
|
||||
The cut and paste functions deserve special remark. The X server
|
||||
maintains special buffers where data may be salted away. One client
|
||||
may salt data away in a cut buffer. Then another client could request
|
||||
this data. In emacs, data is salted away, by setting the point (you
|
||||
could use the mouse to set the point) then moving the mouse to the end
|
||||
(or beginning) of the text to be salted away and pressing shift
|
||||
middle. If the text should be wiped out of the buffer as well as
|
||||
salted away, C-Middle Button should be used instead of S-Middle
|
||||
Button. To get the text back into this emacs or another emacs, move
|
||||
the mouse to where the text should be inserted and invoke x-paste-text
|
||||
via S-Right Button. The text can be pasted into any client of the
|
||||
current X server from the current cut buffer using that client's paste
|
||||
command. For xterm the paste command is also S-Right Button.
|
||||
|
||||
Other Gnu Emacs Lisp Functions
|
||||
|
||||
Command Line Arguments
|
||||
|
||||
.emacs File
|
||||
|
||||
x-switches
|
||||
|
||||
.Xdefaults
|
||||
|
||||
|
||||
1,,
|
||||
Summary-line: 19-Dec lbm@ATHENA.MIT.EDU #GNU Emacs under X Writeup for Manual
|
||||
Received: from ATHENA (ATHENA.MIT.EDU) by prep; Thu, 19 Dec 85 15:57:34 est
|
||||
Received: from JASON (JASON.MIT.EDU) by ATHENA (4.12/4.7)
|
||||
id AA12646; Thu, 19 Dec 85 15:55:53 est
|
||||
Received: by JASON (5.15/4.7)
|
||||
id AA20416; Thu, 19 Dec 85 15:55:40 EST
|
||||
Message-Id: <8512192055.AA20416@JASON>
|
||||
To: rms@prep
|
||||
Cc: tower@prep
|
||||
Subject: GNU Emacs under X Writeup for Manual
|
||||
Date: 19 Dec 85 15:55:33 EST (Thu)
|
||||
From: Linda B. Merims <lbm@ATHENA.MIT.EDU>
|
||||
|
||||
*** EOOH ***
|
||||
To: rms@prep
|
||||
Cc: tower@prep
|
||||
Subject: GNU Emacs under X Writeup for Manual
|
||||
Date: 19 Dec 85 15:55:33 EST (Thu)
|
||||
From: Linda B. Merims <lbm@ATHENA.MIT.EDU>
|
||||
|
||||
|
||||
Here's something you can put in the V17 manual to describe GNU Emacs under
|
||||
X. I've added a couple of notes to you about things that didn't work
|
||||
when I tried them. It has no formatting commands in it. I
|
||||
don't know if we followed your naming conventions. It is important
|
||||
for us to distinguish between "gnuemacs" and "emacs" for the next
|
||||
six months while we convert our 2000+ users over from CCA, so I mention
|
||||
that at MIT's Project Athena, things are a little different for
|
||||
a short while.
|
||||
|
||||
I didn't put in anything about X-specific variables. I don't know
|
||||
anything about them. I'm also a bit colloquial in places, to make
|
||||
my point better with novices (who, for example, understand "cursor" better
|
||||
than "point".) I also didn't document the -d display command option.
|
||||
Nor are there any credits to, for example, Joachim Martillo. Up to you.
|
||||
|
||||
Hope this does you good.
|
||||
|
||||
Linda Merims
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
GNU Emacs on X Window System Displays
|
||||
|
||||
|
||||
GNU Emacs works with the X window system. It starts
|
||||
by "popping up" a new window on the screen. This can be a bit
|
||||
disconcerting if you're not used to it. If you're on one of these
|
||||
terminals, the easiest way to start up GNU Emacs is to type the same command
|
||||
you would before, but to follow it with a &, as in:
|
||||
|
||||
emacs paper.mss &
|
||||
|
||||
The "&" runs GNU Emacs in the "background," freeing your original
|
||||
window for other uses. (There are X-specific options to the Gnuemacs
|
||||
commands that will be listed later.)
|
||||
|
||||
NOTE: GNU Emacs may be invoked by
|
||||
different names at different sites. It is sometimes known
|
||||
as xemacs. At MIT's Project Athena where GNU Emacs was first
|
||||
adapted to X, the correct command is: gnuemacs until summer
|
||||
1986, when it will become just: emacs.
|
||||
|
||||
Soon, you will see a small black box in the upper left hand corner of your
|
||||
screen that reads, "emacs: 10 x 10". (This number represents
|
||||
columns x rows.) You'll also see a small outline of a window with
|
||||
a cross in the upper left hand corner of it. This is where the upper
|
||||
left hand corner of your window will be. You can move this cross with
|
||||
the mouse to any spot on the screen. You can then do one of three
|
||||
things:
|
||||
|
||||
make an 80 column by 24 row emacs window -- click the left mouse button
|
||||
|
||||
make an 80 column by 65 row emacs window -- click the right mouse button
|
||||
(the length will actually be however many lines long your screen
|
||||
can hold. 80 by 66 is about the size of an 8 1/2 x 11 piece of paper.)
|
||||
|
||||
make any size emacs window you want -- hold down the middle mouse button
|
||||
and move the mouse to create a window of any size. As you move the
|
||||
mouse, the numbers in the upper left hand corner of the screen and
|
||||
the rubber-band outline will expand or contract. Just release the
|
||||
button when the window is the size you want.
|
||||
|
||||
Unless you make the window in any area that does not overlap any other
|
||||
windows, you may have problems when you want to get back to a window
|
||||
obscured by the GNU Emacs window. You need to know how to use the X
|
||||
window manager, xwm, to move and shuffle these windows around. For
|
||||
more information on the window manager, you can type man xwm, on
|
||||
any Berkeley 4.3 Unix system with this user-contributed (/usr/new)
|
||||
utility available.
|
||||
|
||||
Note that you cannot suspend (C-Z) a GNU emacs X window.
|
||||
|
||||
|
||||
|
||||
GNU Emacs and the X Mouse
|
||||
|
||||
When using GNU Emacs on an X terminal, you can take advantage of the
|
||||
convenient, quick commands for moving point, setting the mark, and
|
||||
cutting and pasting text. You issue these commands by pressing
|
||||
the mouse's buttons alone or in concert with the SHIFT, CTRL, or
|
||||
SHIFT-CTRL keys as follows:
|
||||
|
||||
left set mark ('x-mouse-set-mark) (RMS, this blinked cursor but didn't
|
||||
actually set anything...lbm)
|
||||
|
||||
middle move the cursor (point) to where the mouse is. This is
|
||||
like moving the cursor with C-F or C-N or the arrow keys,
|
||||
only immediate. ('x-mouse-set-point)
|
||||
|
||||
right move to the window where the mouse is. Point is in the same
|
||||
place as it was the last time you were in the window.
|
||||
('x-mouse-select)
|
||||
|
||||
|
||||
SHIFT-left
|
||||
undefined
|
||||
|
||||
SHIFT-middle
|
||||
take the text between point and mark and put it into the
|
||||
X cut buffer. The text does NOT disappear from the screen.
|
||||
It does NOT go into the emacs kill right. Used for copying
|
||||
text. Recall text with SHIFT-right below. ('x-cut-text)
|
||||
|
||||
SHIFT-right
|
||||
paste text from the X cut buffer to before point. ('x-paste-text)
|
||||
|
||||
|
||||
CTRL-left
|
||||
undefined
|
||||
|
||||
CTRL-middle
|
||||
take the text between point and mark and put it into the
|
||||
X cut buffer, AND the emacs kill ring. Text is deleted
|
||||
from the screen. Used for moving text. Recall text with
|
||||
SHIFT-right above, or any emacs kill ring command.
|
||||
('x-cut-and-wipe-text)
|
||||
|
||||
CTRL-right
|
||||
divide current window in two. ('x-mouse-select-and-split)
|
||||
|
||||
|
||||
CTRL-SHIFT-middle
|
||||
return to one-window mode, keeping the window the mouse is
|
||||
in. ('x-mouse-keep-one-window)(RMS, this didn't always work...lbm)
|
||||
|
||||
|
||||
|
||||
Emacs Command X Window Options
|
||||
|
||||
These command options have meaning to the X window system:
|
||||
|
||||
-r use reverse video (white characters on black background)
|
||||
|
||||
-i use GNU emacs's bitmap icon (a kitchen sink) if the emacs
|
||||
window is iconized instead of the xwm window manager default.
|
||||
|
||||
-font fontname
|
||||
use fontname instead of the default vtsingle
|
||||
|
||||
-b borderwidth
|
||||
make the window border borderwidth pixels wide. Default is 1.
|
||||
|
||||
-w windowsize
|
||||
instead of relying on the mouse buttons to determine size and
|
||||
placement of the GNU emacs window, make it this size. Size
|
||||
is specified as:
|
||||
|
||||
=[WIDTH][xHEIGHT][{+-}XOFF[{+-}YOFF]]
|
||||
|
||||
The []'s denote optional stuff, the {}'s surround
|
||||
alternatives. WIDTH and HEIGHT are in number of
|
||||
characters, XOFF and YOFF are in pixels. X and YOFF are
|
||||
the xy offsets from the upper left corner origin for the
|
||||
upper left corner of the window.
|
||||
|
||||
|
||||
GNU Emacs will check in the .Xdefaults file for default values for
|
||||
these variables. (RMS, we're not sure what program name it's
|
||||
going to be looking for...lbm)
|
||||
|
||||
|
||||
GNU Emacs under X Variables
|
||||
|
||||
I don't know what these are. Sorry.
|
||||
|
||||
|
||||
|
||||
116
etc/XENIX
Normal file
116
etc/XENIX
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
Return-Path: <info-gnu-emacs-request@prep.ai.mit.edu>
|
||||
Date: 5 Aug 88 18:46:22 GMT
|
||||
From: jetson!john@uunet.uu.net (John Owens)
|
||||
Organization: SMART HOUSE Limited Partnership
|
||||
Subject: Meta key support in SCO Xenix!
|
||||
Sender: info-gnu-emacs-request@prep.ai.mit.edu
|
||||
To: info-gnu-emacs@prep.ai.mit.edu
|
||||
|
||||
Here is a substitute for /usr/lib/keyboard/keys in SCO Xenix that
|
||||
allows use of the meta key in GNU Emacs. Pressing ALT with any key
|
||||
causes the code returned to have the 80hex bit set. In conjunction
|
||||
with this, I added lisp/term/ansi.el with the single line
|
||||
|
||||
(setq meta-flag t)
|
||||
|
||||
Here's the keys file. Make sure MAPKEY=YES is in your
|
||||
/etc/default/boot. (This also allows you to enter graphics characters
|
||||
from the keyboard.) Enjoy!
|
||||
|
||||
# alt
|
||||
# scan cntrl alt alt cntrl lock
|
||||
# code base shift cntrl shift alt shift cntrl shift state
|
||||
0 nop nop nop nop nop nop nop nop O
|
||||
1 esc esc nop nop 0x9b 0x9b nop nop O
|
||||
2 '1' '!' nop nop 0xb1 0xa1 nop nop O
|
||||
3 '2' '@' nul nul 0xb2 0xc0 0x80 0x80 O
|
||||
4 '3' '#' nop nop 0xb3 0xa3 nop nop O
|
||||
5 '4' '$' nop nop 0xb4 0xa4 nop nop O
|
||||
6 '5' '%' nop nop 0xb5 0xa5 nop nop O
|
||||
7 '6' '^' rs rs 0xb6 0xde 0x9e 0x9e O
|
||||
8 '7' '&' nop nop 0xb7 0xa6 nop nop O
|
||||
9 '8' '*' nop nop 0xb8 0xaa nop nop O
|
||||
10 '9' '(' nop nop 0xb9 0xa8 nop nop O
|
||||
11 '0' ')' nop nop 0xb0 0xa9 nop nop O
|
||||
12 '-' '_' ns ns 0xad 0xdf 0x9f 0x9f O
|
||||
13 '=' '+' nop nop 0xbd 0xab nop nop O
|
||||
14 bs bs del del 0x88 0x88 0xff 0xff O
|
||||
15 ht btab nop nop 0x89 btab nop nop O
|
||||
16 'q' 'Q' dc1 dc1 0xf1 0xd1 0x91 0x91 C
|
||||
17 'w' 'W' etb etb 0xf7 0xd7 0x97 0x97 C
|
||||
18 'e' 'E' enq enq 0xe5 0xc5 0x85 0x85 C
|
||||
19 'r' 'R' dc2 dc2 0xf2 0xd2 0x92 0x92 C
|
||||
20 't' 'T' dc4 dc4 0xf4 0xd4 0x94 0x94 C
|
||||
21 'y' 'Y' em em 0xf9 0xd9 0x99 0x99 C
|
||||
22 'u' 'U' nak nak 0xf5 0xd5 0x95 0x95 C
|
||||
23 'i' 'I' ht ht 0xe9 0xc9 0x89 0x89 C
|
||||
24 'o' 'O' si si 0xef 0xcf 0x8f 0x8f C
|
||||
25 'p' 'P' dle dle 0xf0 0xd0 0x90 0x90 C
|
||||
26 '[' '{' esc esc 0xdb 0xfb 0x9b 0x9b O
|
||||
27 ']' '}' gs gs 0xdd 0xfd 0x9d 0x9d O
|
||||
28 cr cr nl nl 0x8d 0x8d 0x8a 0x8a O
|
||||
29 ctrl ctrl ctrl ctrl ctrl ctrl ctrl ctrl O
|
||||
30 'a' 'A' soh soh 0xe1 0xc1 0x81 0x81 C
|
||||
31 's' 'S' dc3 dc3 0xf3 0xd3 0x93 0x93 C
|
||||
32 'd' 'D' eot eot 0xe4 0xc4 0x84 0x84 C
|
||||
33 'f' 'F' ack ack 0xe6 0xc6 0x86 0x86 C
|
||||
34 'g' 'G' bel bel 0xe7 0xc7 0x87 0x87 C
|
||||
35 'h' 'H' bs bs 0xe8 0xc8 0x88 0x88 C
|
||||
36 'j' 'J' nl nl 0xea 0xca 0x8a 0x8a C
|
||||
37 'k' 'K' vt vt 0xeb 0xcb 0x8b 0x8b C
|
||||
38 'l' 'L' np np 0xec 0xcc 0x8c 0x8c C
|
||||
39 ';' ':' nop nop 0xbb 0xba nop nop O
|
||||
40 '\'' '"' nop nop 0xa7 0xa2 nop nop O
|
||||
41 '`' '~' nop nop 0xe0 0xfe nop nop O
|
||||
42 lshift lshift lshift lshift lshift lshift lshift lshift O
|
||||
43 '\\' '|' fs fs 0xdc 0xfc 0x9c 0x9c O
|
||||
44 'z' 'Z' sub sub 0xfa 0xda 0x9a 0x9a C
|
||||
45 'x' 'X' can can 0xf8 0xd8 0x98 0x98 C
|
||||
46 'c' 'C' etx etx 0xe3 0xc3 0x83 0x83 C
|
||||
47 'v' 'V' syn syn 0xf6 0xd6 0x96 0x96 C
|
||||
48 'b' 'B' stx stx 0xe2 0xc2 0x82 0x82 C
|
||||
49 'n' 'N' so so 0xee 0xce 0x8e 0x8e C
|
||||
50 'm' 'M' cr cr 0xed 0xcd 0x8d 0x8d C
|
||||
51 ',' '<' nop nop 0xac 0xbc nop nop O
|
||||
52 '.' '>' nop nop 0xae 0xbe nop nop O
|
||||
53 '/' '?' nop nop 0xaf 0xbf nop nop O
|
||||
54 rshift rshift rshift rshift rshift rshift rshift rshift O
|
||||
55 '*' '*' nscr nscr 0xaa 0xaa nscr nscr O
|
||||
56 alt alt alt alt alt alt alt alt O
|
||||
57 ' ' ' ' ' ' ' ' 0xa0 0xa0 0xa0 0xa0 O
|
||||
58 clock clock clock clock clock clock clock clock O
|
||||
59 fkey1 fkey13 fkey25 fkey37 scr1 scr11 scr1 scr11 O
|
||||
60 fkey2 fkey14 fkey26 fkey38 scr2 scr12 scr2 scr12 O
|
||||
61 fkey3 fkey15 fkey27 fkey39 scr3 scr13 scr3 scr13 O
|
||||
62 fkey4 fkey16 fkey28 fkey40 scr4 scr14 scr4 scr14 O
|
||||
63 fkey5 fkey17 fkey29 fkey41 scr5 scr15 scr5 scr15 O
|
||||
64 fkey6 fkey18 fkey30 fkey42 scr6 scr16 scr6 scr16 O
|
||||
65 fkey7 fkey19 fkey31 fkey43 scr7 scr7 scr7 scr7 O
|
||||
66 fkey8 fkey20 fkey32 fkey44 scr8 scr8 scr8 scr8 O
|
||||
67 fkey9 fkey21 fkey33 fkey45 scr9 scr9 scr9 scr9 O
|
||||
68 fkey10 fkey22 fkey34 fkey46 scr10 scr10 scr10 scr10 O
|
||||
69 nlock nlock dc3 dc3 nlock nlock 0x93 0x93 O
|
||||
70 slock slock del del slock slock 0xff 0xff O
|
||||
71 fkey49 '7' '7' '7' 0xb7 0xb7 0xb7 0xb7 N
|
||||
72 fkey50 '8' '8' '8' 0xb8 0xb8 0xb8 0xb8 N
|
||||
73 fkey51 '9' '9' '9' 0xb9 0xb9 0xb9 0xb9 N
|
||||
74 fkey52 '-' '-' '-' 0xad 0xad 0xad 0xad N
|
||||
75 fkey53 '4' '4' '4' 0xb4 0xb4 0xb4 0xb4 N
|
||||
76 fkey54 '5' '5' '5' 0xb5 0xb5 0xb5 0xb5 N
|
||||
77 fkey55 '6' '6' '6' 0xb6 0xb6 0xb6 0xb6 N
|
||||
78 fkey56 '+' '+' '+' 0xab 0xab 0xab 0xab N
|
||||
79 fkey57 '1' '1' '1' 0xb1 0xb1 0xb1 0xb1 N
|
||||
80 fkey58 '2' '2' '2' 0xb2 0xb2 0xb2 0xb2 N
|
||||
81 fkey59 '3' '3' '3' 0xb3 0xb3 0xb3 0xb3 N
|
||||
82 fkey60 '0' '0' '0' 0xb0 0xb0 0xb0 0xb0 N
|
||||
83 del '.' del del 0xff 0xff 0xff 0xff N
|
||||
84 nop nop nop nop nop nop nop nop O
|
||||
85 nop nop nop nop nop nop nop nop O
|
||||
86 nop nop nop nop nop nop nop nop O
|
||||
87 fkey11 fkey23 fkey35 fkey47 scr11 scr11 scr11 scr11 O
|
||||
88 fkey12 fkey24 fkey36 fkey48 scr12 scr12 scr12 scr12 O
|
||||
--
|
||||
John Owens john@jetson.UPMA.MD.US
|
||||
SMART HOUSE L.P. uunet!jetson!john (old uucp)
|
||||
+1 301 249 6000 john%jetson.uucp@uunet.uu.net (old internet)
|
||||
|
||||
98
etc/Xkeymap.txt
Normal file
98
etc/Xkeymap.txt
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
# -*-Mode: Fundamental-*-
|
||||
# X keymap file for rlk with some emacsified bindings
|
||||
# This file contains the default keyboard mapping. The first column contains a X keyboard code; the other
|
||||
# 16 columns contain the mapping of the keycode to a character string, with various combinations
|
||||
# of the SHIFT, LOCK, META, and CONTROL keys down. See the man page for "keycomp" for more information.
|
||||
#
|
||||
# Keycode constants for non-typewriter keys are found in <X/Xkeyboard.h>.
|
||||
#
|
||||
# It is easiest to edit this file with an EMACS window running across the entire width of the display, with
|
||||
# tab stop set to 4.
|
||||
#
|
||||
# E1=Find, E2=Insert Here, E3=Remove, E4=Select, E5=Prev Screen, E6=Next Screen
|
||||
# uns L S SL M ML MS MSL C CL CS CSL CM CML CMS CMSL
|
||||
0212 0023, 0023, 0023, 0023, 0223, 0223, 0223, 0223, 0022, 0022, 0022, 0022, 0222, 0222, 0222, 0222, /* E1 */
|
||||
0213 U, U, U, U, U, U, U, U, U, U, U, U, U, U, U, U, /* E2 */
|
||||
0214 0004, 0004, 0177, 0177, 0304, 0304, 0377, 0377, 0004, 0004, 0177, 0177, 0204, 0204, 0377, 0377 /* E3 */
|
||||
0215 U, U, U, U, U, U, U, U, U, U, U, U, U, U, U, U, /* E4 */
|
||||
0216 0326, 0326, 0326, 0326, 0326, 0326, 0326, 0326, "\255\226" "\255\226" "\255\226" "\255\226" "\255\226" "\255\226" "\255\226" "\255\226" /* E5 */
|
||||
0217 0026, 0026, 0026, 0026, 0026, 0026, 0026, 0026, 0226, 0226, 0226, 0226, 0226, 0226, 0226, 0226, /* E6 */
|
||||
0247 0002, 0002, 0002, 0002, 0302, 0302, 0302, 0302, 0202, 0202, 0202, 0202, 0202, 0202, 0202, 0202, /* Left arrow */
|
||||
0250 0006, 0006, 0006, 0006, 0306, 0306, 0306, 0306, 0206, 0206, 0206, 0206, 0206, 0206, 0206, 0206, /* Right arrow */
|
||||
0251 0016, 0016, 0016, 0016, 0316, 0316, 0316, 0316, 0216, 0216, 0216, 0216, 0216, 0216, 0216, 0216, /* Down arrow */
|
||||
0252 0020, 0020, 0020, 0020, 0320, 0320, 0320, 0320, 0220, 0220, 0220, 0220, 0220, 0220, 0220, 0220, /* Up arrow */
|
||||
0222 0260, '0', 0260, '0', 0260, '0', 0260, '0', 0260, '0', 0260, '0', 0260, '0', 0260, '0', /* KP 0 */
|
||||
0224 0256, '.', 0256, '.', 0256, '.', 0256, '.', 0256, '.', 0256, '.', 0256, '.', 0256, '.', /* KP . */
|
||||
0225 '\n', '\n', '\n', '\n', 0312, 0312, 0312, 0312, 0212, 0212, 0212, 0212, 0212, 0212, 0212, 0212, /* KP Enter */
|
||||
0226 0261, '1', 0261, '1', 0261, '1', 0261, '1', 0261, '1', 0261, '1', 0261, '1', 0261, '1', /* KP 1 */
|
||||
0227 0262, '2', 0262, '2', 0262, '2', 0262, '2', 0262, '2', 0262, '2', 0262, '2', 0262, '2', /* KP 2 */
|
||||
0230 0263, '3', 0263, '3', 0263, '3', 0263, '3', 0263, '3', 0263, '3', 0263, '3', 0263, '3', /* KP 3 */
|
||||
0231 0264, '4', 0264, '4', 0264, '4', 0264, '4', 0264, '4', 0264, '4', 0264, '4', 0264, '4', /* KP 4 */
|
||||
0232 0265, '5', 0265, '5', 0265, '5', 0265, '5', 0265, '5', 0265, '5', 0265, '5', 0265, '5', /* KP 5 */
|
||||
0233 0266, '6', 0266, '6', 0266, '6', 0266, '6', 0266, '6', 0266, '6', 0266, '6', 0266, '6', /* KP 6 */
|
||||
0234 0254, ',', 0254, ',', 0254, ',', 0254, ',', 0254, ',', 0254, ',', 0254, ',', 0254, ',', /* KP , */
|
||||
0235 0267, '7', 0267, '7', 0267, '7', 0267, '7', 0267, '7', 0267, '7', 0267, '7', 0267, '7', /* KP 7 */
|
||||
0236 0270, '8', 0270, '8', 0270, '8', 0270, '8', 0270, '8', 0270, '8', 0270, '8', 0270, '8', /* KP 8 */
|
||||
0237 0271, '9', 0271, '9', 0271, '9', 0271, '9', 0271, '9', 0271, '9', 0271, '9', 0271, '9', /* KP 9 */
|
||||
0240 0255, '-', 0255, '-', 0255, '-', 0255, '-', 0255, '-', 0255, '-', 0255, '-', 0255, '-', /* KP - */
|
||||
0174 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, /* F15/Help */
|
||||
0175 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, /* F16/(Un)Do */
|
||||
0161 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, /* F11/ESC */
|
||||
0162 '\b', '\b', '\b', '\b', '\b', '\b', U, U, '\b', '\b', U, U, U, U, U, U, /* F12/BS */
|
||||
0163 '\n', '\n', '\n', '\n', '\n', '\n', U, U, '\n', '\n', U, U, U, U, U, U, /* F13/LF */
|
||||
0274 0177, 0177, 0177, 0177, 0377, 0377, 0377, 0377, 0030, 0030, 0177, 0177, 0377, 0377, 0377, 0377, /* back */
|
||||
0275 '\r', '\r', '\r', '\r', 0215, 0215, 0215, 0215, '\r', '\r', U, U, U, U, U, U, /* Return */
|
||||
0276 '\t', '\t', '\t', '\t', 0211, 0211, 0211, 0211, "\021\t" "\021\t" "\021\t" "\021\t" "\021\t" "\021\t" "\021\t" "\021\t" /* Tab */
|
||||
0277 '`', '`', '~', '~', 0340, 0340, 0376, 0376, 0036, 0036, 0036, 0036, U, U, U, U, /* ` */
|
||||
0300 '1', '1', '!', '!', 0261, 0261, 0241, 0241, '1', '1', '!', '!', U, U, U, U, /* 1 */
|
||||
0301 'q', 'Q', 'Q', 'Q', 0361, 0361, 0321, 0321, 0021, 0021, 0021, 0021, 0221, 0221, 0221, 0221, /* q */
|
||||
0302 'a', 'A', 'A', 'A', 0341, 0341, 0301, 0301, 0001, 0001, 0001, 0001, 0201, 0201, 0201, 0201, /* a */
|
||||
0303 'z', 'Z', 'Z', 'Z', 0372, 0372, 0332, 0332, 0032, 0032, 0032, 0032, 0232, 0232, 0232, 0232, /* z */
|
||||
0305 '2', '2', '@', '@', 0262, 0262, 0300, 0300, 0000, 0000, 0000, 0000, 0262, 0262, 0200, 0200, /* 2 */
|
||||
0306 'w', 'W', 'W', 'W', 0367, 0367, 0327, 0327, 0027, 0027, 0027, 0027, 0227, 0227, 0227, 0227, /* w */
|
||||
0307 's', 'S', 'S', 'S', 0363, 0363, 0323, 0323, 0023, 0023, 0023, 0023, 0223, 0223, 0223, 0223, /* s */
|
||||
0310 'x', 'X', 'X', 'X', 0370, 0370, 0330, 0330, 0030, 0030, 0030, 0030, 0230, 0230, 0230, 0230, /* x */
|
||||
0311 '<', '<', '>', '>', 0274, 0274, 0276, 0276, U, U, U, U, U, U, U, U, /* < */
|
||||
0313 '3', '3', '#', '#', 0263, 0263, 0243, 0243, 0033, 0033, '#', '#', U, U, U, U, /* 3 */
|
||||
0314 'e', 'E', 'E', 'E', 0345, 0345, 0305, 0305, 0005, 0005, 0005, 0005, 0205, 0205, 0205, 0205, /* e */
|
||||
0315 'd', 'D', 'D', 'D', 0344, 0344, 0304, 0304, 0004, 0004, 0004, 0004, 0204, 0204, 0204, 0204, /* d */
|
||||
0316 'c', 'C', 'C', 'C', 0343, 0343, 0303, 0303, 0003, 0003, 0003, 0003, 0203, 0203, 0203, 0203, /* c */
|
||||
0320 '4', '4', '$', '$', 0264, 0264, 0244, 0244, 0034, 0034, '$', '$', U, U, U, U, /* 4 */
|
||||
0321 'r', 'R', 'R', 'R', 0362, 0362, 0322, 0322, 0022, 0022, 0022, 0022, 0222, 0222, 0222, 0222, /* r */
|
||||
0322 'f', 'F', 'F', 'F', 0346, 0346, 0306, 0306, 0006, 0006, 0006, 0006, 0206, 0206, 0206, 0206, /* f */
|
||||
0323 'v', 'V', 'V', 'V', 0366, 0366, 0326, 0326, 0026, 0026, 0026, 0026, 0226, 0226, 0226, 0226, /* v */
|
||||
0324 ' ', ' ', ' ', ' ', 0240, 0240, 0240, 0240, 0000, 0000, 0000, 0000, 0200, 0200, 0200, 0200, /* space */
|
||||
0326 '5', '5', '%', '%', 0265, 0265, 0245, 0245, 0035, 0035, '%', '%', U, U, U, U, /* 5 */
|
||||
0327 't', 'T', 'T', 'T', 0364, 0364, 0324, 0324, 0024, 0024, 0024, 0024, 0224, 0224, 0224, 0224, /* t */
|
||||
0330 'g', 'G', 'G', 'G', 0347, 0347, 0307, 0307, 0007, 0007, 0007, 0007, 0207, 0207, 0207, 0207, /* g */
|
||||
0331 'b', 'B', 'B', 'B', 0342, 0342, 0302, 0302, 0002, 0002, 0002, 0002, 0202, 0202, 0202, 0202, /* b */
|
||||
0333 '6', '6', '^', '^', 0266, 0266, 0336, 0336, 0036, 0036, 0036, 0036, U, U, U, U, /* 6 */
|
||||
0334 'y', 'Y', 'Y', 'Y', 0371, 0371, 0331, 0331, 0031, 0031, 0031, 0031, 0231, 0231, 0231, 0231, /* y */
|
||||
0335 'h', 'H', 'H', 'H', 0350, 0350, 0310, 0310, 0010, 0010, 0010, 0010, 0210, 0210, 0210, 0210, /* h */
|
||||
0336 'n', 'N', 'N', 'N', 0356, 0356, 0316, 0316, 0016, 0016, 0016, 0016, 0216, 0216, 0216, 0216, /* n */
|
||||
0340 '7', '7', '&', '&', 0267, 0267, 0246, 0246, 0037, 0037, '&', '&', U, U, U, U, /* 7 */
|
||||
0341 'u', 'U', 'U', 'U', 0365, 0365, 0325, 0325, 0025, 0025, 0025, 0025, 0225, 0225, 0225, 0225, /* u */
|
||||
0342 'j', 'J', 'J', 'J', 0352, 0352, 0312, 0312, 0012, 0012, 0012, 0012, 0212, 0212, 0212, 0212, /* j */
|
||||
0343 'm', 'M', 'M', 'M', 0355, 0355, 0315, 0315, 0015, 0015, 0015, 0015, 0215, 0215, 0215, 0215, /* m */
|
||||
0345 '8', '8', '*', '*', 0270, 0270, 0252, 0252, 0177, 0177, '*', '*', U, U, U, U, /* 8 */
|
||||
0346 'i', 'I', 'I', 'I', 0351, 0351, 0311, 0311, 0011, 0011, 0011, 0011, 0211, 0211, 0211, 0211, /* i */
|
||||
0347 'k', 'K', 'K', 'K', 0353, 0353, 0313, 0313, 0013, 0013, 0013, 0013, 0213, 0213, 0213, 0213, /* k */
|
||||
0350 ',', ',', '<', '<', 0254, 0254, 0274, 0274, U, U, U, U, U, U, U, U, /* , */
|
||||
0352 '9', '9', '(', '(', 0271, 0271, 0250, 0250, '9', '9', '(', '(', U, U, U, U, /* 9 */
|
||||
0353 'o', 'O', 'O', 'O', 0357, 0357, 0317, 0317, 0017, 0017, 0017, 0017, 0217, 0217, 0217, 0217, /* o */
|
||||
0354 'l', 'L', 'L', 'L', 0354, 0354, 0314, 0314, 0014, 0014, 0014, 0014, 0214, 0214, 0214, 0214, /* l */
|
||||
0355 '.', '.', '>', '>', 0256, 0256, 0276, 0276, U, U, U, U, U, U, U, U, /* . */
|
||||
0357 '0', '0', ')', ')', 0260, 0260, 0251, 0251, '0', '0', ')', ')', U, U, U, U, /* 0 */
|
||||
0360 'p', 'P', 'P', 'P', 0360, 0360, 0320, 0320, 0020, 0020, 0020, 0020, 0220, 0220, 0220, 0220, /* p */
|
||||
0362 ';', ';', ':', ':', 0273, 0273, 0272, 0272, U, U, U, U, U, U, U, U, /* ; */
|
||||
0363 '/', '/', '?', '?', 0257, 0257, 0277, 0277, 0037, 0037, 0037, 0037, 0237, 0237, 0237, 0237, /* / */
|
||||
0365 '=', '=', '+', '+', 0275, 0275, 0253, 0253, U, U, U, U, U, U, U, U, /* = */
|
||||
0366 ']', ']', '}', '}', 0335, 0335, 0376, 0376, 0035, 0035, 0035, 0035, 0335, 0335, 0335, 0335, /* ] */
|
||||
0367 '\\', '\\', '|', '|', 0334, 0334, 0374, 0374, 0034, 0034, 0034, 0034, 0334, 0334, 0334, 0334, /* \ */
|
||||
0371 '-', '-', '_', '_', 0255, 0255, 0337, 0337, 0037, 0037, 0037, 0037, 0337, 0337, 0337, 0337, /* - */
|
||||
0372 '[', '[', '{', '{', 0333, 0333, 0373, 0373, 0033, 0033, 0033, 0033, 0333, 0333, 0333, 0333, /* [ */
|
||||
0373 '\'', '\'', '"', '"', 0247, 0247, 0242, 0242, U, U, U, U, U, U, U, U, /* ' */
|
||||
#
|
||||
# local variables:
|
||||
# tab-width: 4
|
||||
# End:
|
||||
12
etc/celibacy.1
Normal file
12
etc/celibacy.1
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
CELIBACY(1) UNIX Programmer's Manual CELIBACY(1)
|
||||
|
||||
|
||||
|
||||
NAME
|
||||
celibacy - don't have sex
|
||||
|
||||
SYNOPSIS
|
||||
celibacy
|
||||
|
||||
DESCRIPTION
|
||||
Does nothing worth mentioning.
|
||||
41
etc/complink.com
Normal file
41
etc/complink.com
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
$ ! Compile and link those programs in [etc] that are usable on VMS.
|
||||
$
|
||||
$ old = f$environment("default")
|
||||
$ set default emacs_library:[etc]
|
||||
$ if f$search("test-distrib.c") .nes. "" then goto version44
|
||||
$
|
||||
$ cc test_distrib.c
|
||||
$ link test_distrib.obj,vmslink.opt/opt
|
||||
$ run test_distrib.exe
|
||||
$ cc /debug make_docfile.c
|
||||
$ link make_docfile.obj,vmslink.opt/opt
|
||||
$ cc /debug digest_doc.c
|
||||
$ link digest_doc.obj,vmslink.opt/opt
|
||||
$ cc /debug sorted_doc.c
|
||||
$ cc /debug qsort.c
|
||||
$ link sorted_doc.obj,qsort.obj,vmslink.opt/opt
|
||||
$ cc /debug etags_vmslib.c
|
||||
$ cc /debug etags.c
|
||||
$ link etags.obj,etags_vmslib.obj,vmslink.opt/opt
|
||||
$ goto finish
|
||||
$
|
||||
$version44:
|
||||
$ cc test-distrib.c
|
||||
$ link test-distrib.obj,vmslink.opt/opt
|
||||
$ run test-distrib.exe
|
||||
$ cc /debug make-docfile.c
|
||||
$ link make-docfile.obj,vmslink.opt/opt
|
||||
$ cc /debug digest-doc.c
|
||||
$ link digest-doc.obj,vmslink.opt/opt
|
||||
$ cc /debug sorted-doc.c
|
||||
$ cc /debug qsort.c
|
||||
$ link sorted-doc.obj,qsort.obj,vmslink.opt/opt
|
||||
$ cc /debug etags-vmslib.c
|
||||
$ cc /debug etags.c
|
||||
$ link etags.obj,etags-vmslib.obj,vmslink.opt/opt
|
||||
$
|
||||
$finish:
|
||||
$ cc /debug yow.c
|
||||
$ link yow.obj,vmslink.opt/opt
|
||||
$
|
||||
$ set default 'old'
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
/* Copyright (C) 1985 Free Software Foundation
|
||||
|
||||
This file is part of GNU Emacs.
|
||||
|
||||
GNU Emacs is free software; you can redistribute it and/or modify
|
||||
207
etc/echo.msg
Normal file
207
etc/echo.msg
Normal file
|
|
@ -0,0 +1,207 @@
|
|||
Path: mit-amt!mit-eddie!think!harvard!seismo!gatech!akgua!whuxlm!whuxl!houxm!ihnp4!stolaf!umn-cs!herndon
|
||||
From: herndon@umn-cs.UUCP
|
||||
Newsgroups: net.sources
|
||||
Subject: GNU Echo, Release 1
|
||||
Message-ID: <1600001@umn-cs.UUCP>
|
||||
Date: 28 Oct 85 18:23:00 GMT
|
||||
|
||||
|
||||
/* Written 12:22 pm Oct 28, 1985 by umn-cs!herndon in umn-cs:net.jokes */
|
||||
/* ---------- "GNU Echo, Release 1" ---------- */
|
||||
|
||||
|
||||
|
||||
|
||||
GNUecho(1) UNIX Programmer's Manual GNUecho(1)
|
||||
|
||||
|
||||
|
||||
NAME
|
||||
echo - echo arguments
|
||||
|
||||
SYNOPSIS
|
||||
echo [ options ] ...
|
||||
|
||||
DESCRIPTION
|
||||
_^HE_^Hc_^Hh_^Ho writes its arguments separated by blanks and terminated
|
||||
by a newline on the standard output. Options to filter and
|
||||
redirect the output are as follows:
|
||||
|
||||
-2 generate rhyming couplets from keywords
|
||||
|
||||
-3 generate Haiku verse from keywords
|
||||
|
||||
-5 generate limerick from keywords
|
||||
|
||||
-a convert ASCII to ASCII
|
||||
|
||||
-A disambiguate sentence structure
|
||||
|
||||
-b generate bureaucratese equivalent (see -x)
|
||||
|
||||
-B issue equivalent C code with bugs fixed
|
||||
|
||||
-c simplify/calculate arithmetic expression(s)
|
||||
|
||||
-C remove copyright notice(s)
|
||||
|
||||
-d define new echo switch map
|
||||
|
||||
-D delete all ownership information from system files
|
||||
|
||||
-e evaluate lisp expression(s)
|
||||
|
||||
-E convert ASCII to Navajo
|
||||
|
||||
-f read input from file
|
||||
|
||||
-F transliterate to french
|
||||
|
||||
-g generate pseudo-revolutionary marxist catch-phrases
|
||||
|
||||
-G prepend GNU manifesto
|
||||
|
||||
-h halt system (reboot suppressed on Suns, Apollos, and
|
||||
VAXen, not supported on NOS-2)
|
||||
|
||||
-i emulate IBM OS/VU (recursive universes not supported)
|
||||
|
||||
-I emulate IBM VTOS 3.7.6 (chronosynclastic infundibulae
|
||||
supported with restrictions documented in IBM VTOS
|
||||
|
||||
|
||||
|
||||
Printed 10/28/85 18 January 1983 1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
GNUecho(1) UNIX Programmer's Manual GNUecho(1)
|
||||
|
||||
|
||||
|
||||
Reference Manual rev 3.2.6)
|
||||
|
||||
-J generate junk mail
|
||||
|
||||
-j justify text (see -b option)
|
||||
|
||||
-k output "echo" software tools
|
||||
|
||||
-K delete privileged accounts
|
||||
|
||||
-l generate legalese equivalent
|
||||
|
||||
-L load echo modules
|
||||
|
||||
-M generate mail
|
||||
|
||||
-N send output to all reachable networks (usable with -J,
|
||||
-K, -h options)
|
||||
|
||||
-n do not add newline to the output
|
||||
|
||||
-o generate obscene text
|
||||
|
||||
-O clean up dirty language
|
||||
|
||||
-p decrypt and print /etc/passwd
|
||||
|
||||
-P port echo to all reachable networks
|
||||
|
||||
-P1 oolcay itay
|
||||
|
||||
-q query standard input for arguments
|
||||
|
||||
-r read alternate ".echo" file on start up
|
||||
|
||||
-R change root password to "RMS"
|
||||
|
||||
-s suspend operating system during output (Sun and VAX BSD
|
||||
4.2 only)
|
||||
|
||||
-S translate to swahili
|
||||
|
||||
-T emulate TCP/IP handler
|
||||
|
||||
-t issue troff output
|
||||
|
||||
-u issue unix philosophy essay
|
||||
|
||||
-v generate reverberating echo
|
||||
|
||||
-V print debugging information
|
||||
|
||||
|
||||
|
||||
|
||||
Printed 10/28/85 18 January 1983 2
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
GNUecho(1) UNIX Programmer's Manual GNUecho(1)
|
||||
|
||||
|
||||
|
||||
-x decrypt DES format messages (NSA secret algorithm CX
|
||||
3.8, not distributed outside continental US)
|
||||
|
||||
_^HE_^Hc_^Hh_^Ho is useful for producing diagnostics in shell programs
|
||||
and for writing constant data on pipes. To send diagnostics
|
||||
to the standard error file, do `echo ... 1>&2'.
|
||||
|
||||
AUTHOR
|
||||
Richard M. Stallman
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Printed 10/28/85 18 January 1983 3
|
||||
|
||||
513
etc/emacs.1
Normal file
513
etc/emacs.1
Normal file
|
|
@ -0,0 +1,513 @@
|
|||
.TH EMACS 1 "1990 November 13"
|
||||
.UC 4
|
||||
.SH NAME
|
||||
emacs \- GNU project Emacs
|
||||
.SH SYNOPSIS
|
||||
.B emacs
|
||||
[
|
||||
.I command-line switches
|
||||
] [
|
||||
.I files ...
|
||||
]
|
||||
.br
|
||||
.SH DESCRIPTION
|
||||
.I GNU Emacs
|
||||
is a new version of
|
||||
.I Emacs,
|
||||
written by the author of the original (PDP-10)
|
||||
.I Emacs,
|
||||
Richard Stallman.
|
||||
Its user functionality encompasses
|
||||
everything other
|
||||
.I Emacs
|
||||
editors do, and it is easily extensible since its
|
||||
editing commands are written in Lisp.
|
||||
.PP
|
||||
.I Emacs
|
||||
has an extensive interactive help facility,
|
||||
but the facility assumes that you know how to manipulate
|
||||
.I Emacs
|
||||
windows and buffers.
|
||||
CTRL-h (backspace
|
||||
or CTRL-h) enters the Help facility. Help Tutorial (CTRL-h t)
|
||||
requests an interactive tutorial which can teach beginners the fundamentals
|
||||
of
|
||||
.I Emacs
|
||||
in a few minutes.
|
||||
Help Apropos (CTRL-h a) helps you
|
||||
find a command given its functionality, Help Character (CTRL-h c)
|
||||
describes a given character's effect, and Help Function (CTRL-h f)
|
||||
describes a given Lisp function specified by name.
|
||||
.PP
|
||||
.I Emacs's
|
||||
Undo can undo several steps of modification to your buffers, so it is
|
||||
easy to recover from editing mistakes.
|
||||
.PP
|
||||
.I GNU Emacs's
|
||||
many special packages handle mail reading (RMail) and sending (Mail),
|
||||
outline editing (Outline), compiling (Compile), running subshells
|
||||
within
|
||||
.I Emacs
|
||||
windows (Shell), running a Lisp read-eval-print loop
|
||||
(Lisp-Interaction-Mode), and automated psychotherapy (Doctor).
|
||||
.PP
|
||||
There is an extensive reference manual, but
|
||||
users of other Emacses
|
||||
should have little trouble adapting even
|
||||
without a copy. Users new to
|
||||
.I Emacs
|
||||
will be able
|
||||
to use basic features fairly rapidly by studying the tutorial and
|
||||
using the self-documentation features.
|
||||
.PP
|
||||
.SM Emacs Options
|
||||
.PP
|
||||
The following options are of general interest:
|
||||
.TP 8
|
||||
.I file
|
||||
Edit
|
||||
.I file.
|
||||
.TP
|
||||
.BI \+ number
|
||||
Go to the line specified by
|
||||
.I number
|
||||
(do not insert a space between the "+" sign and
|
||||
the number).
|
||||
.TP
|
||||
.B \-q
|
||||
Do not load an init file.
|
||||
.TP
|
||||
.BI \-u " user"
|
||||
Load
|
||||
.I user's
|
||||
init file.
|
||||
.TP
|
||||
.BI \-t " file"
|
||||
Use specified
|
||||
.I file
|
||||
as the terminal instead of using stdin/stdout.
|
||||
This must be the first argument specified in the command line.
|
||||
.PP
|
||||
The following options are lisp-oriented
|
||||
(these options are processed in the order encountered):
|
||||
.TP 8
|
||||
.BI \-f " function"
|
||||
Execute the lisp function
|
||||
.I function.
|
||||
.TP
|
||||
.BI \-l " file"
|
||||
Load the lisp code in the file
|
||||
.I file.
|
||||
.PP
|
||||
The following options are useful when running
|
||||
.I Emacs
|
||||
as a batch editor:
|
||||
.TP 8
|
||||
.BI \-batch
|
||||
Edit in batch mode according to the other command line arguments.
|
||||
The editor will send messages to stdout.
|
||||
This option must be the first in the argument list.
|
||||
.TP
|
||||
.B \-kill
|
||||
Exit
|
||||
.I Emacs
|
||||
while in batch mode.
|
||||
.\" START DELETING HERE IF YOU'RE NOT USING X
|
||||
.PP
|
||||
.SM Using Emacs with X
|
||||
.PP
|
||||
.I Emacs
|
||||
has been tailored to work well with the X window system.
|
||||
If you run
|
||||
.I Emacs
|
||||
from under X windows, it will create its own X window to
|
||||
display in. You will probably want to start the editor
|
||||
as a background process
|
||||
so that you can continue using your original window.
|
||||
.PP
|
||||
.I Emacs
|
||||
can be started with the following X switches:
|
||||
.TP 8
|
||||
.BI \-rn " name"
|
||||
Specifies the program name which should be used when looking up
|
||||
defaults in the user's X resources. This must be the first option
|
||||
specified in the command line.
|
||||
.TP 8
|
||||
.BI \-wn " name"
|
||||
Specifies the name which should be assigned to the
|
||||
.I Emacs
|
||||
window.
|
||||
.TP 8
|
||||
.B \-r
|
||||
Display the
|
||||
.I Emacs
|
||||
window in reverse video.
|
||||
.TP
|
||||
.B \-i
|
||||
Use the "kitchen sink" bitmap icon when iconifying the
|
||||
.I Emacs
|
||||
window.
|
||||
.TP
|
||||
.BI \-font " font, " \-fn " font"
|
||||
Set the
|
||||
.I Emacs
|
||||
window's font to that specified by
|
||||
.I font.
|
||||
You will find the various
|
||||
.I X
|
||||
fonts in the
|
||||
.I /usr/lib/X11/fonts
|
||||
directory.
|
||||
Note that
|
||||
.I Emacs
|
||||
will only accept fixed width fonts.
|
||||
Under the X11 Release 4 font-naming conventions, any font with the
|
||||
value "m" or "c" in the eleventh field of the font name is a fixed
|
||||
width font. Furthermore, fonts whose name are of the form
|
||||
.IR width x height
|
||||
are generally fixed width, as is the font
|
||||
.IR fixed .
|
||||
See
|
||||
.IR xlsfonts (1)
|
||||
for more information.
|
||||
|
||||
When you specify a font, be sure to put a space between the
|
||||
switch and the font name.
|
||||
.TP
|
||||
.BI \-b " pixels"
|
||||
Set the
|
||||
.I Emacs
|
||||
window's border width to the number of pixels specified by
|
||||
.I pixels.
|
||||
Defaults to one pixel on each side of the window.
|
||||
.TP
|
||||
.BI \-ib " pixels"
|
||||
Set the window's internal border width to the number of pixels specified
|
||||
by
|
||||
.I pixels.
|
||||
Defaults to one pixel of padding on each side of the window.
|
||||
.PP
|
||||
.TP 8
|
||||
.BI \-w " geometry, " \-geometry " geometry"
|
||||
Set the
|
||||
.I Emacs
|
||||
window's width, height, and position as specified. The geometry
|
||||
specification is in the standard X format; see
|
||||
.IR X (1)
|
||||
for more information.
|
||||
The width and height are specified in characters; the default is 80 by
|
||||
24.
|
||||
.PP
|
||||
.TP 8
|
||||
.BI \-fg " color"
|
||||
On color displays, sets the color of the text.
|
||||
|
||||
See the file
|
||||
.I /usr/lib/X11/rgb.txt
|
||||
for a list of valid
|
||||
color names.
|
||||
.TP
|
||||
.BI \-bg " color"
|
||||
On color displays,
|
||||
sets the color of the window's background.
|
||||
.TP
|
||||
.BI \-bd " color"
|
||||
On color displays,
|
||||
sets the color of the window's border.
|
||||
.TP
|
||||
.BI \-cr " color"
|
||||
On color displays,
|
||||
sets the color of the window's text cursor.
|
||||
.TP
|
||||
.BI \-ms " color"
|
||||
On color displays,
|
||||
sets the color of the window's mouse cursor.
|
||||
.TP
|
||||
.BI \-d " displayname, " \-display " displayname"
|
||||
Create the
|
||||
.I Emacs
|
||||
window on the display specified by
|
||||
.IR displayname .
|
||||
Must be the first option specified in the command line.
|
||||
.TP
|
||||
.B \-nw
|
||||
Tells
|
||||
.I Emacs
|
||||
not to use its special interface to X. If you use this
|
||||
switch when invoking
|
||||
.I Emacs
|
||||
from an
|
||||
.IR xterm (1)
|
||||
window, display is done in that window.
|
||||
This must be the first option specified in the command line.
|
||||
.PP
|
||||
You can set
|
||||
.I X
|
||||
default values for your
|
||||
.I Emacs
|
||||
windows in your
|
||||
.I \.Xresources
|
||||
file (see
|
||||
.IR xrdb (1)).
|
||||
Use the following format:
|
||||
.IP
|
||||
emacs.keyword:value
|
||||
.PP
|
||||
where
|
||||
.I value
|
||||
specifies the default value of
|
||||
.I keyword.
|
||||
.I Emacs
|
||||
lets you set default values for the following keywords:
|
||||
.TP 8
|
||||
.B font (\fPclass\fB Font)
|
||||
Sets the window's text font.
|
||||
.TP
|
||||
.B reverseVideo (\fPclass\fB ReverseVideo)
|
||||
If
|
||||
.I reverseVideo's
|
||||
value is set to
|
||||
.I on,
|
||||
the window will be displayed in reverse video.
|
||||
.TP
|
||||
.B bitmapIcon (\fPclass\fB BitmapIcon)
|
||||
If
|
||||
.I bitmapIcon's
|
||||
value is set to
|
||||
.I on,
|
||||
the window will iconify into the "kitchen sink."
|
||||
.TP
|
||||
.B borderWidth (\fPclass\fB BorderWidth)
|
||||
Sets the window's border width in pixels.
|
||||
.TP
|
||||
.B internalBorder (\fPclass\fB BorderWidth)
|
||||
Sets the window's internal border width in pixels.
|
||||
.TP
|
||||
.B foreground (\fPclass\fB Foreground)
|
||||
For color displays,
|
||||
sets the window's text color.
|
||||
.TP
|
||||
.B background (\fPclass\fB Background)
|
||||
For color displays,
|
||||
sets the window's background color.
|
||||
.TP
|
||||
.B borderColor (\fPclass\fB BorderColor)
|
||||
For color displays,
|
||||
sets the color of the window's border.
|
||||
.TP
|
||||
.B cursorColor (\fPclass\fB Foreground)
|
||||
For color displays,
|
||||
sets the color of the window's text cursor.
|
||||
.TP
|
||||
.B pointerColor (\fPclass\fB Foreground)
|
||||
For color displays,
|
||||
sets the color of the window's mouse cursor.
|
||||
.TP
|
||||
.B geometry (\fPclass\fB Geometry)
|
||||
Sets the geometry of the
|
||||
.I Emacs
|
||||
window (as described above).
|
||||
.TP
|
||||
.B title (\fPclass\fB Title)
|
||||
Sets the title of the
|
||||
.I Emacs
|
||||
window.
|
||||
.TP
|
||||
.B iconName (\fPclass\fB Title)
|
||||
Sets the icon name for the
|
||||
.I Emacs
|
||||
window icon.
|
||||
.PP
|
||||
If you try to set color values while using a black and white display,
|
||||
the window's characteristics will default as follows:
|
||||
the foreground color will be set to black,
|
||||
the background color will be set to white,
|
||||
the border color will be set to grey,
|
||||
and the text and mouse cursors will be set to black.
|
||||
.PP
|
||||
.SM Using the Mouse
|
||||
.PP
|
||||
The following lists the mouse button bindings for the
|
||||
.I Emacs
|
||||
window under X11.
|
||||
|
||||
.in +\w'CTRL-SHIFT-middle'u+4n
|
||||
.ta \w'CTRL-SHIFT-middle'u+4n
|
||||
.ti -\w'CTRL-SHIFT-middle'u+4n
|
||||
MOUSE BUTTON FUNCTION
|
||||
.br
|
||||
.ti -\w'CTRL-SHIFT-middle'u+4n
|
||||
left Set point.
|
||||
.br
|
||||
.ti -\w'CTRL-SHIFT-middle'u+4n
|
||||
middle Paste text.
|
||||
.br
|
||||
.ti -\w'CTRL-SHIFT-middle'u+4n
|
||||
right Cut text into X cut buffer.
|
||||
.br
|
||||
.ti -\w'CTRL-SHIFT-middle'u+4n
|
||||
SHIFT-middle Cut text into X cut buffer.
|
||||
.br
|
||||
.ti -\w'CTRL-SHIFT-middle'u+4n
|
||||
SHIFT-right Paste text.
|
||||
.br
|
||||
.ti -\w'CTRL-SHIFT-middle'u+4n
|
||||
CTRL-middle Cut text into X cut buffer and kill it.
|
||||
.br
|
||||
.ti -\w'CTRL-SHIFT-middle'u+4n
|
||||
CTRL-right Select this window, then split it into
|
||||
two windows. Same as typing CTRL-x 2.
|
||||
.\" START DELETING HERE IF YOU'RE NOT USING X MENUS
|
||||
.br
|
||||
.ti -\w'CTRL-SHIFT-middle'u+4n
|
||||
CTRL-SHIFT-left X buffer menu--hold the buttons and keys
|
||||
down, wait for menu to appear, select
|
||||
buffer, and release. Move mouse out of
|
||||
menu and release to cancel.
|
||||
.br
|
||||
.ti -\w'CTRL-SHIFT-middle'u+4n
|
||||
CTRL-SHIFT-middle X help menu--pop up index card menu for
|
||||
Emacs help.
|
||||
.\" STOP DELETING HERE IF YOU'RE NOT USING X MENUS
|
||||
.br
|
||||
.ti -\w'CTRL-SHIFT-middle'u+4n
|
||||
CTRL-SHIFT-right Select window with mouse, and delete all
|
||||
other windows. Same as typing CTRL-x 1.
|
||||
.\" STOP DELETING HERE IF YOU'RE NOT USING X
|
||||
.PP
|
||||
.SH MANUALS
|
||||
You can order printed copies of the GNU Emacs Manual for $20.00/copy
|
||||
postpaid from the Free Software Foundation, which develops GNU software.
|
||||
Their address is:
|
||||
.nf
|
||||
Free Software Foundation
|
||||
675 Mass Ave.
|
||||
Cambridge, MA 02139
|
||||
.fi
|
||||
See the file etc/DISTRIB in the Emacs distribution
|
||||
for full ordering information.
|
||||
Your local Emacs maintainer might also have copies available. As
|
||||
with all software and publications from FSF, everyone is permitted to
|
||||
make and distribute copies of the Emacs manual. The TeX source to the
|
||||
manual is also included in the Emacs source distribution.
|
||||
.PP
|
||||
.SH FILES
|
||||
/usr/local/emacs/src - C source files and object files
|
||||
|
||||
/usr/local/emacs/lisp - Lisp source files and compiled files
|
||||
that define most editing commands. Some are preloaded;
|
||||
others are autoloaded from this directory when used.
|
||||
|
||||
/usr/local/emacs/man - sources for the Emacs reference manual.
|
||||
|
||||
/usr/local/emacs/etc - various programs that are used with
|
||||
GNU Emacs, and some files of information.
|
||||
|
||||
/usr/local/emacs/etc/DOC.* - contains the documentation
|
||||
strings for the Lisp primitives and preloaded Lisp functions
|
||||
of GNU Emacs. They are stored here to reduce the size of
|
||||
Emacs proper.
|
||||
|
||||
/usr/local/emacs/etc/DISTRIB discusses GNU Emacs distribution and
|
||||
contains an order form for all of the software and manuals available
|
||||
from the Free Software Foundation.
|
||||
|
||||
/usr/local/emacs/etc/DIFF discusses GNU Emacs vs. Twenex Emacs;
|
||||
.br
|
||||
/usr/local/emacs/etc/CCADIFF discusses GNU Emacs vs. CCA Emacs;
|
||||
.br
|
||||
/usr/local/emacs/etc/GOSDIFF discusses GNU Emacs vs. Gosling Emacs.
|
||||
.br
|
||||
/usr/local/emacs/etc/SERVICE lists people offering various services
|
||||
to assist users of GNU Emacs, including education, troubleshooting,
|
||||
porting and customization.
|
||||
.br
|
||||
These files also have information useful to anyone wishing to write
|
||||
programs in the Emacs Lisp extension language, which is
|
||||
documented in the GNU Emacs Lisp Manual.
|
||||
|
||||
/usr/local/emacs/info - files for the Info documentation browser
|
||||
(a subsystem of Emacs) to refer to. Currently not much of Unix
|
||||
is documented here, but the complete text of the Emacs reference
|
||||
manual is included in a convenient tree structured form.
|
||||
|
||||
/usr/local/emacs/lock - holds lock files that are made for all
|
||||
files being modified in Emacs, to prevent simultaneous modification
|
||||
of one file by two users.
|
||||
|
||||
/usr/local/emacs/cpp - the GNU cpp, needed for building Emacs on
|
||||
certain versions of Unix where the standard cpp cannot handle long
|
||||
names for macros.
|
||||
|
||||
/usr/local/emacs/shortnames - facilities for translating long names to
|
||||
short names in C code, needed for building Emacs on certain versions
|
||||
of Unix where the C compiler cannot handle long names for functions
|
||||
or variables.
|
||||
|
||||
.\" START DELETING HERE IF YOU'RE NOT USING X
|
||||
/usr/lib/X11/rgb.txt - list of valid X color names.
|
||||
.\" STOP DELETING HERE IF YOU'RE NOT USING X
|
||||
.PP
|
||||
.SH BUGS
|
||||
There is a mailing list, bug-gnu-emacs@prep.ai.mit.edu on the internet
|
||||
(ucbvax!prep.ai.mit.edu!bug-gnu-emacs on UUCPnet), for reporting Emacs
|
||||
bugs and fixes. But before reporting something as a bug, please try
|
||||
to be sure that it really is a bug, not a misunderstanding or a
|
||||
deliberate feature. We ask you to read the section ``Reporting Emacs
|
||||
Bugs'' near the end of the reference manual (or Info system) for hints
|
||||
on how and when to report bugs. Also, include the version number of
|
||||
the Emacs you are running in \fIevery\fR bug report that you send in.
|
||||
|
||||
Do not expect a personal answer to a bug report. The purpose of reporting
|
||||
bugs is to get them fixed for everyone in the next release, if possible.
|
||||
For personal assistance, look in the SERVICE file (see above) for
|
||||
a list of people who offer it.
|
||||
|
||||
Please do not send anything but bug reports to this mailing list.
|
||||
Send requests to be added to mailing lists to the special list
|
||||
info-gnu-emacs-request@prep.ai.mit.edu (or the corresponding UUCP
|
||||
address). For more information about Emacs mailing lists, see the
|
||||
file /usr/local/emacs/etc/MAILINGLISTS. Bugs tend actually to be
|
||||
fixed if they can be isolated, so it is in your interest to report
|
||||
them in such a way that they can be easily reproduced.
|
||||
.PP
|
||||
Bugs that I know about are: shell will not work with programs
|
||||
running in Raw mode on some Unix versions.
|
||||
.SH UNRESTRICTIONS
|
||||
.PP
|
||||
.I Emacs
|
||||
is free; anyone may redistribute copies of
|
||||
.I Emacs
|
||||
to
|
||||
anyone under the terms stated in the
|
||||
.I Emacs
|
||||
General Public License,
|
||||
a copy of which accompanies each copy of
|
||||
.I Emacs
|
||||
and which also
|
||||
appears in the reference manual.
|
||||
.PP
|
||||
Copies of
|
||||
.I Emacs
|
||||
may sometimes be received packaged with distributions of Unix systems,
|
||||
but it is never included in the scope of any license covering those
|
||||
systems. Such inclusion violates the terms on which distribution
|
||||
is permitted. In fact, the primary purpose of the General Public
|
||||
License is to prohibit anyone from attaching any other restrictions
|
||||
to redistribution of
|
||||
.I Emacs.
|
||||
.PP
|
||||
Richard Stallman encourages you to improve and extend
|
||||
.I Emacs,
|
||||
and urges that
|
||||
you contribute your extensions to the GNU library. Eventually GNU
|
||||
(Gnu's Not Unix) will be a complete replacement for Berkeley
|
||||
Unix.
|
||||
Everyone will be able to use the GNU system for free.
|
||||
.SH SEE ALSO
|
||||
X(1), xlsfonts(1), xterm(1), xrdb(1)
|
||||
.SH AUTHORS
|
||||
.PP
|
||||
.I Emacs
|
||||
was written by Richard Stallman and the Free Software Foundation.
|
||||
Joachim Martillo and Robert Krawitz added the X features.
|
||||
34
etc/emacs.icon
Normal file
34
etc/emacs.icon
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
|
||||
*/
|
||||
0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x8000,0x0000,0x0000,0x0001,
|
||||
0x8000,0x0000,0x007E,0x1C01,0x8000,0x0000,0x0006,0x1C01,
|
||||
0x8000,0x0000,0x007F,0xFC01,0x8000,0x0000,0x0080,0x1C01,
|
||||
0x8000,0x0000,0x013F,0xFC01,0x8000,0x0000,0x0140,0x1C01,
|
||||
0x8000,0x0000,0x03E0,0x1C01,0x8000,0x0000,0x0000,0x1C01,
|
||||
0x8000,0x0000,0x0000,0x1C01,0x8000,0x0000,0x0000,0x1C01,
|
||||
0x8000,0x0000,0x0000,0x1C01,0x8000,0x0000,0x0210,0x1C01,
|
||||
0x8000,0x0000,0x0330,0x1C01,0x8000,0x0000,0x00C0,0x1C01,
|
||||
0x8003,0xFFFF,0xFFFF,0xFE01,0x8005,0xFFFF,0xFFFF,0xFE01,
|
||||
0x8004,0xFFFF,0xFFFF,0xFC01,0x8004,0x787F,0xFFFF,0xF801,
|
||||
0x8004,0x77FF,0xFFFF,0xF801,0x8000,0x77E3,0x6FFF,0xF801,
|
||||
0x8000,0x762D,0x6FFF,0xF801,0x8004,0x77AD,0x6FFF,0xF801,
|
||||
0x800C,0x77AD,0x6FFF,0xF801,0x8004,0x786D,0x8FFF,0xF801,
|
||||
0x8000,0x7FFF,0xFFFF,0xF801,0x8000,0x7FFF,0xFFFF,0xF801,
|
||||
0x8000,0x7E0F,0xFFFF,0xF801,0x8008,0x7EFF,0xFFFF,0xF801,
|
||||
0x800C,0x7EF9,0x31CE,0x3801,0x8004,0x7E1A,0xADB5,0xF801,
|
||||
0x8000,0x7EFA,0xADBE,0x7801,0x8000,0x7EFB,0xADB7,0xB801,
|
||||
0x8000,0x7E0B,0xB2CC,0x7801,0x8000,0x7FFF,0xFFFF,0xF801,
|
||||
0x8004,0x3FFF,0xFFFF,0xF001,0x8004,0x1FFF,0xFFFF,0xE001,
|
||||
0x800C,0x0003,0x6000,0x0001,0x8000,0x0001,0x43C0,0x0001,
|
||||
0x8000,0x0001,0x4420,0x0001,0x8000,0x0001,0x4990,0x0001,
|
||||
0x8000,0x0001,0x4A50,0x0001,0x8004,0x0001,0x3250,0x0001,
|
||||
0x8004,0x0000,0x8450,0x0001,0x800A,0x0000,0x7850,0x0001,
|
||||
0x8000,0x0000,0x0050,0x0001,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
|
||||
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
|
||||
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
|
||||
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
|
||||
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
|
||||
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
|
||||
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
|
||||
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
|
||||
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
|
||||
442
etc/emacs.names
Normal file
442
etc/emacs.names
Normal file
|
|
@ -0,0 +1,442 @@
|
|||
From: harvard!topaz!BLUE!BRAIL@mit-eddie
|
||||
Date: 9 Sep 85 17:25:27 EDT
|
||||
Subject: EMACS -- What does it mean?
|
||||
To: mit-prep!info-gnu-emacs@TOPAZ.RUTGERS.EDU
|
||||
|
||||
EMACS may stand for "Editing MACroS," but some friends of mine
|
||||
suggested some more creative definitions. Here they are. Anyone have
|
||||
any additions?
|
||||
|
||||
--------
|
||||
|
||||
Even a
|
||||
Master of
|
||||
Arts
|
||||
Comes
|
||||
Simpler
|
||||
|
||||
Emacs
|
||||
Manuals
|
||||
Are
|
||||
Cryptic and
|
||||
Surreal
|
||||
|
||||
Energetic
|
||||
Merchants
|
||||
Always
|
||||
Cultivate
|
||||
Sales
|
||||
|
||||
Each
|
||||
Manual's
|
||||
Audience is
|
||||
Completely
|
||||
Stupified
|
||||
|
||||
Emacs
|
||||
Means
|
||||
A
|
||||
Crappy
|
||||
Screen
|
||||
|
||||
Eventually
|
||||
Munches
|
||||
All
|
||||
Computer
|
||||
Storage
|
||||
|
||||
Even
|
||||
My
|
||||
Aunt
|
||||
Crashes the
|
||||
System
|
||||
|
||||
Eradication of
|
||||
Memory
|
||||
Accomplished with
|
||||
Complete
|
||||
Simplicity
|
||||
|
||||
Elsewhere
|
||||
Maybe
|
||||
Alternative
|
||||
Civilizations
|
||||
Survive
|
||||
|
||||
Egregious
|
||||
Managers
|
||||
Actively
|
||||
Court
|
||||
Stallman
|
||||
|
||||
Esoteric
|
||||
Malleability
|
||||
Always
|
||||
Considered
|
||||
Silly
|
||||
|
||||
Emacs
|
||||
Manuals
|
||||
Always
|
||||
Cause
|
||||
Senility
|
||||
|
||||
Easily
|
||||
Maintained with the
|
||||
Assistance of
|
||||
Chemical
|
||||
Solutions
|
||||
|
||||
EMACS
|
||||
MACRO
|
||||
ACTED
|
||||
CREDO
|
||||
SODOM
|
||||
|
||||
Edwardian
|
||||
Manifestation of
|
||||
All
|
||||
Colonial
|
||||
Sins
|
||||
|
||||
Generally
|
||||
Not
|
||||
Used
|
||||
|
||||
Except by
|
||||
Middle
|
||||
Aged
|
||||
Computer
|
||||
Scientists
|
||||
|
||||
Extended
|
||||
Macros
|
||||
Are
|
||||
Considered
|
||||
Superfluous
|
||||
|
||||
Every
|
||||
Mode
|
||||
Accelerates
|
||||
Creation of
|
||||
Software
|
||||
|
||||
Elsewhere
|
||||
Maybe
|
||||
All
|
||||
Commands are
|
||||
Simple
|
||||
|
||||
Emacs
|
||||
May
|
||||
Allow
|
||||
Customised
|
||||
Screwups
|
||||
|
||||
Excellent
|
||||
Manuals
|
||||
Are
|
||||
Clearly
|
||||
Suppressed
|
||||
|
||||
Emetic
|
||||
Macros
|
||||
Assault
|
||||
Core and
|
||||
Segmentation
|
||||
|
||||
Embarrassed
|
||||
Manual-Writer
|
||||
Accused of
|
||||
Communist
|
||||
Subversion
|
||||
|
||||
Extensibilty and
|
||||
Modifiability
|
||||
Aggravate
|
||||
Confirmed
|
||||
Simpletons
|
||||
|
||||
Emacs
|
||||
May
|
||||
Annihilate
|
||||
Command
|
||||
Structures
|
||||
|
||||
Easily
|
||||
Mangles,
|
||||
Aborts,
|
||||
Crashes and
|
||||
Stupifies
|
||||
|
||||
Extraneous
|
||||
Macros
|
||||
And
|
||||
Commands
|
||||
Stink
|
||||
|
||||
Exceptionally
|
||||
Mediocre
|
||||
Algorithm for
|
||||
Computer
|
||||
Scientists
|
||||
|
||||
EMACS
|
||||
Makes no
|
||||
Allowances
|
||||
Considering its
|
||||
Stiff price
|
||||
|
||||
Equine
|
||||
Mammals
|
||||
Are
|
||||
Considerably
|
||||
Smaller
|
||||
|
||||
Embarrasingly
|
||||
Mundane
|
||||
Advertising
|
||||
Cuts
|
||||
Sales
|
||||
|
||||
Every
|
||||
Moron
|
||||
Assumes
|
||||
CCA is
|
||||
Superior
|
||||
|
||||
Exceptionally
|
||||
Mediocre
|
||||
Autocratic
|
||||
Control
|
||||
System
|
||||
|
||||
EMACS
|
||||
May
|
||||
Alienate
|
||||
Clients and
|
||||
Supporters
|
||||
|
||||
Excavating
|
||||
Mayan
|
||||
Architecture
|
||||
Comes
|
||||
Simpler
|
||||
|
||||
Erasing
|
||||
Minds
|
||||
Allows
|
||||
Complete
|
||||
Submission
|
||||
|
||||
Every
|
||||
Male
|
||||
Adolescent
|
||||
Craves
|
||||
Sex
|
||||
|
||||
Elephantine
|
||||
Memory
|
||||
Absolutely
|
||||
Considered
|
||||
Sine que non
|
||||
|
||||
Emacs
|
||||
Makers
|
||||
Are
|
||||
Crazy
|
||||
Sickos
|
||||
|
||||
Eenie-Meenie-Miney-Mo-
|
||||
Macros
|
||||
Are
|
||||
Completely
|
||||
Slow
|
||||
|
||||
Experience the
|
||||
Mildest
|
||||
Ad
|
||||
Campaign ever
|
||||
Seen
|
||||
|
||||
Emacs
|
||||
Makefiles
|
||||
Annihilate
|
||||
C-
|
||||
Shells
|
||||
|
||||
Eradication of
|
||||
Memory
|
||||
Accomplished with
|
||||
Complete
|
||||
Simplicity
|
||||
|
||||
Emetic
|
||||
Macros
|
||||
Assault
|
||||
Core and
|
||||
Segmentation
|
||||
|
||||
Epileptic
|
||||
MLisp
|
||||
Aggravates
|
||||
Compiler
|
||||
Seizures
|
||||
|
||||
Eleven thousand
|
||||
Monkeys
|
||||
Asynchronously
|
||||
Crank out these
|
||||
Slogans
|
||||
-------
|
||||
|
||||
From: ihnss!warren@mit-eddie (Warren Montgomery)
|
||||
Newsgroups: net.emacs
|
||||
Subject: Re: EMACS -- What does it mean?
|
||||
Date: Tue, 10-Sep-85 09:14:24 EDT
|
||||
Organization: AT&T Bell Labs, Naperville, IL
|
||||
Apparently-To: emacs-netnews-distribution@mit-prep
|
||||
|
||||
Someone at a luncheon suggested it meant:
|
||||
|
||||
Evenings,
|
||||
Mornings,
|
||||
And a
|
||||
Couple of
|
||||
Saturdays
|
||||
|
||||
(In reference to the odd hours that went into the creation of my
|
||||
implementation).
|
||||
|
||||
--
|
||||
|
||||
Warren Montgomery
|
||||
ihnss!warren
|
||||
IH ((312)-979) x2494
|
||||
|
||||
Date: Wed, 18 Sep 85 10:11:04 edt
|
||||
From: inmet!tower@inmet.inmet (Leonard H. Tower Jr.) <inmet!tower@cca-unix>
|
||||
Subject: Re: EMACS -- What does it mean?
|
||||
To: tower@MIT-PREP.ARPA
|
||||
|
||||
Received: by inmet.uucp (4.12/inmet) id AA02199; Wed, 18 Sep 85 09:10:17 edt
|
||||
Date: Wed, 18 Sep 85 09:10:17 edt
|
||||
Message-Id: <8509181310.AA02199@inmet.uucp>
|
||||
Uucp-Paths: {bellcore,ima,ihnp4}!inmet!tower
|
||||
Arpa-Path: ima!inmet!tower@CCA-UNIX.ARPA
|
||||
Organization: Intermetrics, Inc., Cambridge, MA, USA
|
||||
Home: 36 Porter Street, Somerville, MA 02143, USA +1 (617) 623-7739
|
||||
/* Written 6:48 pm Sep 14, 1985 by gml@ssc-vax in inmet:net.emacs */
|
||||
/* ---------- "Re: EMACS -- What does it mean?" ---------- */
|
||||
Pleeeeeeeze!!! Nice try on the meaning of EMACS. I believe the
|
||||
correct acronym is:
|
||||
|
||||
Emacs
|
||||
Makes
|
||||
All
|
||||
Computing
|
||||
Simple
|
||||
|
||||
Thank you, and Good Night
|
||||
/* End of text from inmet:net.emacs */
|
||||
|
||||
From: ho95e!wcs@mit-eddie (Bill.Stewart.4K435.x0705)
|
||||
Newsgroups: net.emacs
|
||||
Subject: Re: EMACS -- What does it mean?
|
||||
Date: Thu, 26-Sep-85 21:43:54 EDT
|
||||
Organization: AT&T Bell Labs, Holmdel NJ
|
||||
Apparently-To: emacs-netnews-distribution@mit-prep
|
||||
|
||||
> > very interesting, but what does GNU stand for ?
|
||||
> GNU = Gnu's Not UNIX. There is also MINCE, for Mince Is Not a Complete Emacs.
|
||||
> More recursive acronyms, anyone?
|
||||
Many people have also seen FINE Is Not Emacs, but the one that has
|
||||
character is THief Isn't Even Fine.
|
||||
--
|
||||
## Bill Stewart, AT&T Bell Labs, Holmdel NJ 1-201-949-0705 ihnp4!ho95c!wcs
|
||||
|
||||
Path: mit-eddie!think!harvard!bbnccv!bbncca!linus!decvax!mcnc!ncsu!uvacs!edison!ta2
|
||||
From: edison!ta2@mit-eddie (tom allebrandi)
|
||||
Newsgroups: net.emacs
|
||||
Subject: Re: Re: EMACS -- What does it mean?
|
||||
Date: Sun, 29-Sep-85 18:11:55 EDT
|
||||
Organization: General Electric's Mountain Resort
|
||||
Apparently-To: emacs-netnews-distribution@mit-prep
|
||||
|
||||
> GNU = Gnu's Not UNIX. There is also MINCE, for Mince Is Not a Complete Emacs.
|
||||
>
|
||||
> More recursive acronyms, anyone?
|
||||
>
|
||||
|
||||
For the DEC-system-10/20: FINE - Fine Is Not Emacs.....
|
||||
|
||||
--
|
||||
...............
|
||||
tom allebrandi 2, general electric aco, charlottesville, va
|
||||
{decvax,duke}!mcnc!ncsu!uvacs!edison!ta2
|
||||
box 8106, charlottesville, va, 22906
|
||||
(804) 978-5566
|
||||
...............
|
||||
|
||||
Date: Wed, 16 Oct 85 01:38:12 edt
|
||||
From: inmet!tower (Leonard H. Tower Jr.) <inmet!tower@cca-unix>
|
||||
Subject: more names
|
||||
To: tower@MIT-PREP.ARPA
|
||||
|
||||
Received: by inmet.uucp (4.12/inmet) id AA12997; Tue, 15 Oct 85 22:31:39 edt
|
||||
Date: Tue, 15 Oct 85 22:31:39 edt
|
||||
Message-Id: <8510160231.AA12997@inmet.uucp>
|
||||
Uucp-Paths: {bellcore,ima,ihnp4}!inmet!tower
|
||||
Arpa-Path: ima!inmet!tower@CCA-UNIX.ARPA
|
||||
Organization: Intermetrics, Inc., Cambridge, MA, USA
|
||||
Home: 36 Porter Street, Somerville, MA 02143, USA +1 (617) 623-7739
|
||||
/* Written 12:20 pm Oct 14, 1985 by rs@mirror.UUCP in inmet:net.emacs */
|
||||
|
||||
|
||||
SINE: Sine Is Not Emacs
|
||||
(MIT Architecture Machine Group)
|
||||
|
||||
EINE: Eine is Not Emacs
|
||||
(MIT Lisp Machine)
|
||||
|
||||
ZWEI: Zwei Was Eine Initially
|
||||
("rev2" of EINE)
|
||||
|
||||
--
|
||||
Rich $alz {mit-eddie, ihnp4!inmet, wjh12, cca, datacube} !mirror!rs
|
||||
Mirror Systems 2067 Massachusetts Ave.
|
||||
617-661-0777 Cambridge, MA, 02140
|
||||
/* End of text from inmet:net.emacs */
|
||||
|
||||
Path: mit-eddie!genrad!panda!talcott!harvard!seismo!gatech!ulysses!pajb
|
||||
From: ulysses!pajb@mit-eddie (Paul Bennett)
|
||||
Newsgroups: net.emacs
|
||||
Subject: Here we go again ...
|
||||
Date: Sat, 19-Oct-85 17:26:49 EDT
|
||||
Organization: AT&T Bell Laboratories, Murray Hill
|
||||
Apparently-To: emacs-netnews-distribution@mit-prep
|
||||
|
||||
|
||||
> EINE: Eine is Not Emacs
|
||||
> (MIT Lisp Machine)
|
||||
>
|
||||
> ZWEI: Zwei Was Eine Initially
|
||||
> ("rev2" of EINE)
|
||||
|
||||
DREI: DREI - Really Emacs Inside
|
||||
(Exists only in my head)
|
||||
|
||||
Paul.
|
||||
|
||||
UUCP: {decvax,allegra,vax135,ucbvax}!ulysses!circe!pajb
|
||||
DDD: (201) 582 7346
|
||||
USPS: AT&T Bell Labs, Room 5E-103, Murray Hill, NJ 07974
|
||||
|
||||
.. I don't care WHO you are, you're not walking on the water while I'M fishing.--
|
||||
Paul.
|
||||
|
||||
UUCP: {decvax,allegra,vax135,ucbvax}!ulysses!circe!pajb
|
||||
DDD: (201) 582 7346
|
||||
USPS: AT&T Bell Labs, Room 5E-103, Murray Hill, NJ 07974
|
||||
|
||||
.. I don't care WHO you are, you're not walking on the water while I'M fishing.
|
||||
278
etc/emacsclient.c
Normal file
278
etc/emacsclient.c
Normal file
|
|
@ -0,0 +1,278 @@
|
|||
/* Client process that communicates with GNU Emacs acting as server.
|
||||
Copyright (C) 1986, 1987 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Emacs.
|
||||
|
||||
GNU Emacs is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 1, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Emacs is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Emacs; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
|
||||
#define NO_SHORTNAMES
|
||||
#include "../src/config.h"
|
||||
#undef read
|
||||
#undef write
|
||||
#undef open
|
||||
#ifdef close
|
||||
#undef close
|
||||
#endif
|
||||
|
||||
|
||||
#if !defined(BSD) && !defined(HAVE_SYSVIPC)
|
||||
#include <stdio.h>
|
||||
|
||||
main (argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
fprintf (stderr, "%s: Sorry, the Emacs server is supported only\n",
|
||||
argv[0]);
|
||||
fprintf (stderr, "on systems with Berkeley sockets or System V IPC.\n");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
#else /* BSD or HAVE_SYSVIPC */
|
||||
|
||||
#if defined(BSD) && ! defined (HAVE_SYSVIPC)
|
||||
/* BSD code is very different from SYSV IPC code */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
extern int sys_nerr;
|
||||
extern char *sys_errlist[];
|
||||
extern int errno;
|
||||
|
||||
main (argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
char system_name[32];
|
||||
int s, i;
|
||||
FILE *out;
|
||||
struct sockaddr_un server;
|
||||
char *homedir, *cwd, *str;
|
||||
char string[BUFSIZ];
|
||||
struct stat statbfr;
|
||||
|
||||
char *getenv (), *getwd ();
|
||||
|
||||
if (argc < 2)
|
||||
{
|
||||
fprintf (stderr, "Usage: %s filename\n", argv[0]);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Open up an AF_UNIX socket in this person's home directory
|
||||
*/
|
||||
|
||||
if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0)
|
||||
{
|
||||
fprintf (stderr, "%s: ", argv[0]);
|
||||
perror ("socket");
|
||||
exit (1);
|
||||
}
|
||||
server.sun_family = AF_UNIX;
|
||||
#ifndef SERVER_HOME_DIR
|
||||
gethostname (system_name, sizeof (system_name));
|
||||
sprintf (server.sun_path, "/tmp/esrv%d-%s", geteuid (), system_name);
|
||||
|
||||
if (stat (server.sun_path, &statbfr) == -1)
|
||||
{
|
||||
perror ("stat");
|
||||
exit (1);
|
||||
}
|
||||
if (statbfr.st_uid != geteuid())
|
||||
{
|
||||
fprintf (stderr, "Illegal socket owner\n");
|
||||
exit (1);
|
||||
}
|
||||
#else
|
||||
if ((homedir = getenv ("HOME")) == NULL)
|
||||
{
|
||||
fprintf (stderr, "%s: No home directory\n", argv[0]);
|
||||
exit (1);
|
||||
}
|
||||
strcpy (server.sun_path, homedir);
|
||||
strcat (server.sun_path, "/.emacs_server");
|
||||
#endif
|
||||
|
||||
if (connect (s, &server, strlen (server.sun_path) + 2) < 0)
|
||||
{
|
||||
fprintf (stderr, "%s: ", argv[0]);
|
||||
perror ("connect");
|
||||
exit (1);
|
||||
}
|
||||
if ((out = fdopen (s, "r+")) == NULL)
|
||||
{
|
||||
fprintf (stderr, "%s: ", argv[0]);
|
||||
perror ("fdopen");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
cwd = getwd (string);
|
||||
if (cwd == 0)
|
||||
{
|
||||
/* getwd puts message in STRING if it fails. */
|
||||
fprintf (stderr, "%s: %s (%s)\n", argv[0], string,
|
||||
(errno < sys_nerr) ? sys_errlist[errno] : "unknown error");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
if (*argv[i] == '+')
|
||||
{
|
||||
char *p = argv[i] + 1;
|
||||
while (*p >= '0' && *p <= '9') p++;
|
||||
if (*p != 0)
|
||||
fprintf (out, "%s/", cwd);
|
||||
}
|
||||
else if (*argv[i] != '/')
|
||||
fprintf (out, "%s/", cwd);
|
||||
fprintf (out, "%s ", argv[i]);
|
||||
}
|
||||
fprintf (out, "\n");
|
||||
fflush (out);
|
||||
|
||||
printf ("Waiting for Emacs...");
|
||||
fflush (stdout);
|
||||
|
||||
rewind (out); /* re-read the output */
|
||||
str = fgets (string, BUFSIZ, out);
|
||||
|
||||
/* Now, wait for an answer and print any messages. */
|
||||
|
||||
while (str = fgets (string, BUFSIZ, out))
|
||||
printf ("%s", str);
|
||||
|
||||
exit (0);
|
||||
}
|
||||
|
||||
#else /* This is the SYSV IPC section */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/msg.h>
|
||||
#include <stdio.h>
|
||||
|
||||
main (argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
int s;
|
||||
key_t key;
|
||||
struct msgbuf * msgp =
|
||||
(struct msgbuf *) malloc (sizeof *msgp + BUFSIZ);
|
||||
struct msqid_ds * msg_st;
|
||||
char *homedir, buf[BUFSIZ];
|
||||
char gwdirb[BUFSIZ];
|
||||
char *cwd;
|
||||
char *temp;
|
||||
char *getwd (), *getcwd (), *getenv ();
|
||||
|
||||
if (argc < 2)
|
||||
{
|
||||
fprintf (stderr, "Usage: %s filename\n", argv[0]);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a message queue using ~/.emacs_server as the path for ftok
|
||||
*/
|
||||
if ((homedir = getenv ("HOME")) == NULL)
|
||||
{
|
||||
fprintf (stderr, "%s: No home directory\n", argv[0]);
|
||||
exit (1);
|
||||
}
|
||||
strcpy (buf, homedir);
|
||||
strcat (buf, "/.emacs_server");
|
||||
creat (buf, 0600);
|
||||
key = ftok (buf, 1); /* unlikely to be anyone else using it */
|
||||
s = msgget (key, 0600 | IPC_CREAT);
|
||||
if (s == -1)
|
||||
{
|
||||
fprintf (stderr, "%s: ", argv[0]);
|
||||
perror ("msgget");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
/* Determine working dir, so we can prefix it to all the arguments. */
|
||||
#ifdef BSD
|
||||
temp = getwd (gwdirb);
|
||||
#else
|
||||
temp = getcwd (gwdirb, sizeof gwdirb);
|
||||
#endif
|
||||
|
||||
cwd = gwdirb;
|
||||
if (temp != 0)
|
||||
{
|
||||
/* On some systems, cwd can look like `@machine/...';
|
||||
ignore everything before the first slash in such a case. */
|
||||
while (*cwd && *cwd != '/')
|
||||
cwd++;
|
||||
strcat (cwd, "/");
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf (stderr, cwd);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
msgp->mtext[0] = 0;
|
||||
argc--; argv++;
|
||||
while (argc)
|
||||
{
|
||||
if (*argv[0] == '+')
|
||||
{
|
||||
char *p = argv[0] + 1;
|
||||
while (*p >= '0' && *p <= '9') p++;
|
||||
if (*p != 0)
|
||||
strcat (msgp->mtext, cwd);
|
||||
}
|
||||
else if (*argv[0] != '/')
|
||||
strcat (msgp->mtext, cwd);
|
||||
|
||||
strcat (msgp->mtext, argv[0]);
|
||||
strcat (msgp->mtext, " ");
|
||||
argv++; argc--;
|
||||
}
|
||||
strcat (msgp->mtext, "\n");
|
||||
msgp->mtype = 1;
|
||||
if (msgsnd (s, msgp, strlen (msgp->mtext)+1, 0) < 0)
|
||||
{
|
||||
fprintf (stderr, "%s: ", argv[0]);
|
||||
perror ("msgsnd");
|
||||
exit (1);
|
||||
}
|
||||
/*
|
||||
* Now, wait for an answer
|
||||
*/
|
||||
printf ("Waiting for Emacs...");
|
||||
fflush (stdout);
|
||||
|
||||
msgrcv (s, msgp, BUFSIZ, getpid (), 0); /* wait for anything back */
|
||||
strcpy (buf, msgp->mtext);
|
||||
|
||||
printf ("\n%s\n", buf);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
#endif /* HAVE_SYSVIPC */
|
||||
|
||||
#endif /* BSD or HAVE_SYSVIPC */
|
||||
134
etc/emacstool.1
Normal file
134
etc/emacstool.1
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
.TH EMACSTOOL 1
|
||||
.SH NAME
|
||||
.I emacstool
|
||||
\- run emacs under Sun windows with function-key and mouse support.
|
||||
.SH SYNOPSIS
|
||||
.I emacstool
|
||||
[{window_args} {-rc run_command_path} args ... ]
|
||||
.SH TYPICAL USAGE
|
||||
In ~/.suntools or ~/.rootmenu include a line like this:
|
||||
.br
|
||||
"Emacstool" emacstool -WI emacs.icon -f emacstool-init
|
||||
.SH DESCRIPTION
|
||||
.B Emacstool
|
||||
creates a SunView frame and a tty subwindow within which mouse events
|
||||
and function keys are translated to ASCII sequences which Emacs can
|
||||
parse. The translated input events are sent to the process running in
|
||||
the tty subwindow, which is typically GNU Emacs. Emacstool thereby
|
||||
allows GNU Emacs users to make full use of the mouse and function keys.
|
||||
GNU Emacs can be loaded with functions to interpret the mouse and
|
||||
function-key events to make a truely fine screen oriented editor for
|
||||
the Sun Workstation.
|
||||
.PP
|
||||
(Note that GNU Emacs has a special interface to the X window system as
|
||||
well. The X window system has many technical advantages, it is an
|
||||
industry standard, and it is also free software. The Free Software
|
||||
Foundation urges you to try X windows, and distributes a free copy of
|
||||
X on Emacs distribution tapes.)
|
||||
.PP
|
||||
Function keys are translated to a sequence of the form
|
||||
`^X*[a-o][lrt]'. The last character is `l', `r', or `t' corresponding
|
||||
to whether the key is among the Left, Right, or Top function keys.
|
||||
The third character indicates which button of the group
|
||||
was pressed. Thus, the function key in the lower right corner will
|
||||
transmit the sequence `^X*or'. In addition, the [lrt] is affected by
|
||||
the Control, Meta, and Shift keys. Unshifted Control keys will be
|
||||
non-alphabetic: C-l is [,], C-r is [2], C-t is [4].
|
||||
.PP
|
||||
Mouse buttons are encoded as `^X^@([124] x y)\\n'. ^X^@ is the
|
||||
standard GNU Emacs mouse event prefix, it is followed by a list
|
||||
indicating the button pressed and the character row and column of the
|
||||
point in the window where the mouse cursor is, and followed by a
|
||||
newline character. In GNU Emacs, the ^X^@ dispatches to a
|
||||
mouse event handler which then reads the following list.
|
||||
.SH OPTIONS
|
||||
.B Emacstool
|
||||
supports all the standard window arguments, including font and icon
|
||||
specifiers.
|
||||
.PP
|
||||
By default, Emacstool runs the program
|
||||
.I emacs
|
||||
in the created subwindow.
|
||||
The value of the environment variable
|
||||
.I EMACSTOOL
|
||||
can be used to override this if your version of
|
||||
.B Emacs
|
||||
is not accessible on your search path by the name
|
||||
.I Emacs.
|
||||
In addition, the run command can be set by the
|
||||
.I pathname
|
||||
following the last occurence of the
|
||||
.I \-rc
|
||||
flag.
|
||||
This is convenient for using Emacstool to run on remote machines.
|
||||
.PP
|
||||
All other command line arguments not used by the window system are passed
|
||||
as arguments to the program that runs in the Emacstool window.
|
||||
.PP
|
||||
For example:
|
||||
.PP
|
||||
local% (emacstool -rc rlogin remote -8 &)&
|
||||
.PP
|
||||
will create an Emacstool window logged in to a machine named
|
||||
.I remote.
|
||||
If Emacs is run from this window,
|
||||
Emacstool will encode mouse and function keys, and send them to rlogin.
|
||||
If Emacs is run from this shell on the remote machine, it will see
|
||||
the mouse and function keys properly.
|
||||
However, since the remote host does not have access to the screen,
|
||||
the cursor cannot be changed, menus will not appear, and the selection
|
||||
buffer (STUFF) is limited.
|
||||
.SH Using With GNU Emacs:
|
||||
The GNU Emacs files
|
||||
lisp/term/sun.el,
|
||||
lisp/sun-mouse.el,
|
||||
lisp/sun-fns.el,
|
||||
and
|
||||
src/sunfns.c
|
||||
provide emacs support for the Emacstool and function keys.
|
||||
Emacstool will automatically set the TERM environment variable to be "sun"
|
||||
and unset the environment variable TERMCAP. That is, these variables will
|
||||
not be inherited from the shell that starts Emacstool.
|
||||
Since the terminal type is
|
||||
.I SUN
|
||||
(that is, the environment variable TERM is set to
|
||||
.I SUN),
|
||||
Emacs will automatically load the file lisp/term/sun.
|
||||
This, in turn, will ensure that sun-mouse.el is autoloaded when any mouse
|
||||
events are detected. It is suggested that
|
||||
.I sun-mouse
|
||||
and
|
||||
.I sun-fns
|
||||
be loaded in your site-init.el file, so that they will always be loaded
|
||||
when running on a Sun workstation.
|
||||
.PP
|
||||
In addition, Emacstool sets the environment variable IN_EMACSTOOL = "t".
|
||||
Lisp code in your ~/.emacs can use (getenv "IN_EMACSTOOL")
|
||||
to determine whether to do Emacstool specific initalization.
|
||||
Sun.el uses this to automatically call emacstool-init (getenv "IN_EMACSTOOL")
|
||||
is defined.
|
||||
.PP
|
||||
The file src/sunfns.c defines several useful functions for emacs on
|
||||
the Sun. Among these are procedures to pop-up SunView
|
||||
.I menus,
|
||||
put and get from the SunView
|
||||
.I STUFF
|
||||
buffer, and a procedure for changing the cursor
|
||||
.I icon.
|
||||
If you want to define or edit cursor icons,
|
||||
there is a rudimentary mouse driven icon editor in the file
|
||||
lisp/sun-cursors.el. Try invoking (sc:edit-cursor)
|
||||
.SH BUGS
|
||||
It takes a few milliseconds to create a menu before it pops up.
|
||||
.SH ENVIRONMENT VARIABLES
|
||||
EMACSTOOL
|
||||
IN_EMACSTOOL
|
||||
TERM
|
||||
TERMCAP
|
||||
.SH FILES
|
||||
.DT
|
||||
emacs
|
||||
.SH "SEE ALSO"
|
||||
emacs(1)
|
||||
.../etc/SUN-SUPPORT
|
||||
.../lisp/term/sun.el
|
||||
520
etc/emacstool.c
Normal file
520
etc/emacstool.c
Normal file
|
|
@ -0,0 +1,520 @@
|
|||
/* Copyright (C) 1986, 1988, 1990, 1991 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Emacs.
|
||||
|
||||
GNU Emacs is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 1, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Emacs is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Emacs; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
/* For Emacs in SunView/Sun-Windows: (supported by Sun Unix v3.2 or greater)
|
||||
* Insert a notifier filter-function to convert all useful input
|
||||
* to "key" sequences that emacs can understand. See: Emacstool(1).
|
||||
*
|
||||
* Author: Jeff Peck, Sun Microsystems, Inc. <peck@eng.sun.com>
|
||||
*
|
||||
* Original Idea: Ian Batten
|
||||
* Updated 15-Mar-88, Jeff Peck: set IN_EMACSTOOL, TERM, TERMCAP
|
||||
* Updated 10-Sep-88, Jeff Peck: add XVIEW and JLE support
|
||||
* Updated 8-Oct-90, Jeff Peck: add Meta-bit for Xview
|
||||
* Updated 6-Mar-91, Jeff Peck: Hack to detect -Wt invocation
|
||||
* [note, TTYSW limitation means you must Click-To-Type in Openwin]
|
||||
* [fixed in OW3 or use local/tty.o]
|
||||
* for better results, this should move to using TERMSW.
|
||||
* Updated 30-Mar-91, Jeff Peck, et al: Enable using TERMSW (-DTTERM)
|
||||
* TERMSW understands point-to-type, even in OW2.
|
||||
* Updated 5-Jun-91, Jeff Peck: Meta-key support fixed for OWv3
|
||||
* Better event diagnostics for DEBUGEMACSTOOL
|
||||
*
|
||||
* [note: xvetool should be started with the "-nw" flag for emacs!]
|
||||
*/
|
||||
|
||||
#ifdef XVIEW
|
||||
#include <xview/xview.h>
|
||||
#include <xview/panel.h>
|
||||
#include <xview/attr.h>
|
||||
#include <xview/tty.h>
|
||||
#include <xview/ttysw.h> /* private defines */
|
||||
#include <xview/termsw.h> /* -DTTERM */
|
||||
#include <xview/font.h> /* for testing */
|
||||
#else
|
||||
#include <suntool/sunview.h>
|
||||
#include <suntool/tty.h>
|
||||
#include <suntool/ttysw.h>
|
||||
#endif /* XVIEW */
|
||||
|
||||
#ifdef JLE
|
||||
# include <locale.h>
|
||||
#endif /* JLE */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/file.h>
|
||||
|
||||
#define BUFFER_SIZE 128 /* Size of all the buffers */
|
||||
|
||||
/* define WANT_CAPS_LOCK to make f-key T1 (aka F1) behave as CapsLock */
|
||||
#define WANT_CAPS_LOCK
|
||||
#ifdef WANT_CAPS_LOCK
|
||||
int caps_lock; /* toggle indicater for f-key T1 caps lock */
|
||||
static char *Caps = "[CAPS] "; /* Caps Lock prefix string */
|
||||
#define CAPS_LEN 7 /* strlen (Caps) */
|
||||
#endif
|
||||
|
||||
static char *mouse_prefix = "\030\000"; /* C-x C-@ */
|
||||
static int m_prefix_length = 2; /* mouse_prefix length */
|
||||
|
||||
static char *key_prefix = "\030*"; /* C-x * */
|
||||
static int k_prefix_length = 2; /* key_prefix length */
|
||||
|
||||
#ifdef JLE
|
||||
static char *emacs_name = "nemacs"; /* default run command */
|
||||
static char *title = "NEmacstool - "; /* initial title */
|
||||
#else
|
||||
static char *emacs_name = "emacs"; /* default run command */
|
||||
static char *title = "Emacstool - "; /* initial title */
|
||||
#endif /* JLE */
|
||||
|
||||
static char buffer[BUFFER_SIZE]; /* send to ttysw_input */
|
||||
static char *bold_name = 0; /* for -bold option */
|
||||
|
||||
Frame frame; /* Base frame for system */
|
||||
|
||||
#ifndef TTERM
|
||||
#define SWTYPE TTY
|
||||
Tty tty_win; /* Where emacs is reading */
|
||||
#else
|
||||
#define SWTYPE TERMSW
|
||||
Termsw tty_win; /* Termsw does follow-mouse */
|
||||
#endif /* TTERM */
|
||||
|
||||
#ifdef XVIEW
|
||||
Xv_Window tty_view; /* Where the events are in Xview*/
|
||||
#else
|
||||
Tty tty_view; /* SunView place filler */
|
||||
#endif /* XVIEW */
|
||||
|
||||
int font_width, font_height; /* For translating pixels to chars */
|
||||
int left_margin = 0; /* default window -- frame offset */
|
||||
|
||||
int console_fd = 0; /* for debugging: setenv DEBUGEMACSTOOL */
|
||||
FILE *console; /* for debugging: setenv DEBUGEMACSTOOL */
|
||||
|
||||
Icon frame_icon;
|
||||
/* make an icon_image for the default frame_icon */
|
||||
static short default_image[258] =
|
||||
{
|
||||
#include <images/terminal.icon>
|
||||
};
|
||||
mpr_static(icon_image, 64, 64, 1, default_image);
|
||||
|
||||
/*
|
||||
* Assign a value to a set of keys
|
||||
*/
|
||||
int
|
||||
button_value (event)
|
||||
Event *event;
|
||||
{
|
||||
int retval = 0;
|
||||
/*
|
||||
* Code up the current situation:
|
||||
*
|
||||
* 1 = MS_LEFT;
|
||||
* 2 = MS_MIDDLE;
|
||||
* 4 = MS_RIGHT;
|
||||
* 8 = SHIFT;
|
||||
* 16 = CONTROL;
|
||||
* 32 = META;
|
||||
* 64 = DOUBLE;
|
||||
* 128 = UP;
|
||||
*/
|
||||
|
||||
if (MS_LEFT == (event_id (event))) retval = 1;
|
||||
if (MS_MIDDLE == (event_id (event))) retval = 2;
|
||||
if (MS_RIGHT == (event_id (event))) retval = 4;
|
||||
|
||||
if (event_shift_is_down (event)) retval += 8;
|
||||
if (event_ctrl_is_down (event)) retval += 16;
|
||||
if (event_meta_is_down (event)) retval += 32;
|
||||
if (event_is_up (event)) retval += 128;
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*
|
||||
* Variables to store the time of the previous mouse event that was
|
||||
* sent to emacs.
|
||||
*
|
||||
* The theory is that to time double clicks while ignoreing UP buttons,
|
||||
* we must keep track of the accumulated time.
|
||||
*
|
||||
* If someone writes a SUN-SET-INPUT-MASK for emacstool,
|
||||
* That could be used to selectively disable UP events,
|
||||
* and then this cruft wouldn't be necessary.
|
||||
*/
|
||||
static long prev_event_sec = 0;
|
||||
static long prev_event_usec = 0;
|
||||
|
||||
/*
|
||||
* Give the time difference in milliseconds, where one second
|
||||
* is considered infinite.
|
||||
*/
|
||||
int
|
||||
time_delta (now_sec, now_usec, prev_sec, prev_usec)
|
||||
long now_sec, now_usec, prev_sec, prev_usec;
|
||||
{
|
||||
long sec_delta = now_sec - prev_sec;
|
||||
long usec_delta = now_usec - prev_usec;
|
||||
|
||||
if (usec_delta < 0) { /* "borrow" a second */
|
||||
usec_delta += 1000000;
|
||||
--sec_delta;
|
||||
}
|
||||
|
||||
if (sec_delta >= 10)
|
||||
return (9999); /* Infinity */
|
||||
else
|
||||
return ((sec_delta * 1000) + (usec_delta / 1000));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Filter function to translate selected input events for emacs
|
||||
* Mouse button events become ^X^@(button x-col y-line time-delta) .
|
||||
* Function keys: ESC-*{c}{lrt} l,r,t for Left, Right, Top;
|
||||
* {c} encodes the keynumber as a character [a-o]
|
||||
*/
|
||||
static Notify_value
|
||||
input_event_filter_function (window, event, arg, type)
|
||||
#ifdef XVIEW
|
||||
Xv_Window window;
|
||||
#else /* not XVIEW */
|
||||
Window window;
|
||||
#endif /* XVIEW */
|
||||
Event *event;
|
||||
Notify_arg arg;
|
||||
Notify_event_type type;
|
||||
{
|
||||
struct timeval time_stamp;
|
||||
|
||||
/* if DEBUGEMACSTOOL is set, printout event information */
|
||||
if (console_fd) {
|
||||
fprintf(console, "Event: %s%s%c %d %d\n",
|
||||
(event_ctrl_is_down(event) ? "C-" : " "),
|
||||
(event_meta_is_down(event) ? "M-" : " "),
|
||||
(((event_is_button (event)) ? 'M' :
|
||||
((event_is_key_left (event)) ? 'L' :
|
||||
((event_is_key_right (event)) ? 'R' :
|
||||
((event_is_key_top (event)) ? 'T' :
|
||||
(((ASCII_FIRST <= event_id(event))
|
||||
&& (event_id(event) <= ASCII_LAST)) ?
|
||||
(((127 & event_id(event)) < 32) ?
|
||||
((127 & event_id(event)) + 64) :
|
||||
((127 & event_id(event)))) : '?')))))),
|
||||
event_id(event),
|
||||
event_action(event));
|
||||
}
|
||||
/* UP L1 is the STOP key */
|
||||
if (event_id(event) == WIN_STOP) {
|
||||
ttysw_input(tty_win, "\007\007\007\007\007\007\007", 7);
|
||||
return NOTIFY_IGNORED;
|
||||
}
|
||||
|
||||
/* UP L5 & L7 is Expose & Open, let them pass to sunview */
|
||||
if (event_id(event) == KEY_LEFT(5) || event_id(event) == KEY_LEFT(7))
|
||||
if (event_is_up (event))
|
||||
return notify_next_event_func (window, event, arg, type);
|
||||
else
|
||||
return NOTIFY_IGNORED;
|
||||
|
||||
|
||||
{ /* Do the mouse == button events */
|
||||
if (event_is_button (event)) { /* do Mouse Button events */
|
||||
time_stamp = event_time (event);
|
||||
ttysw_input (tty_win, mouse_prefix, m_prefix_length);
|
||||
sprintf (buffer, "(%d %d %d %d)\015",
|
||||
button_value (event),
|
||||
(event_x (event) - left_margin) / font_width,
|
||||
event_y (event) / font_height,
|
||||
time_delta (time_stamp.tv_sec, time_stamp.tv_usec,
|
||||
prev_event_sec, prev_event_usec)
|
||||
);
|
||||
ttysw_input (tty_win, buffer, strlen(buffer));
|
||||
prev_event_sec = time_stamp.tv_sec;
|
||||
prev_event_usec = time_stamp.tv_usec;
|
||||
return NOTIFY_IGNORED;
|
||||
}
|
||||
}
|
||||
{ /* Do the function key events */
|
||||
int d;
|
||||
char c = (char) 0;
|
||||
if ((event_is_key_left (event)) ?
|
||||
((d = event_id(event) - KEY_LEFT(1) + 'a'), c='l') :
|
||||
((event_is_key_right (event)) ?
|
||||
((d = event_id(event) - KEY_RIGHT(1) + 'a'), c='r') :
|
||||
((event_is_key_top (event)) ?
|
||||
((d = event_id(event) - KEY_TOP(1) + 'a'), c='t') : 0))) {
|
||||
if (event_is_up(event)) return NOTIFY_IGNORED;
|
||||
if (event_shift_is_down (event)) c = c - 32;
|
||||
/* this will give a non-{lrt} for unshifted keys */
|
||||
if (event_ctrl_is_down (event)) c = c - 64;
|
||||
if (event_meta_is_down (event)) c = c + 128;
|
||||
#ifdef WANT_CAPS_LOCK
|
||||
/* set a toggle and relabel window so T1 can act like caps-lock */
|
||||
if (event_id(event) == KEY_TOP(1)) {
|
||||
/* make a frame label with and without CAPS */
|
||||
strcpy (buffer, Caps);
|
||||
title = &buffer[CAPS_LEN];
|
||||
strncpy (title, (char *)window_get (frame, FRAME_LABEL),
|
||||
BUFFER_SIZE - CAPS_LEN);
|
||||
buffer[BUFFER_SIZE] = (char) 0;
|
||||
if (strncmp (title, Caps, CAPS_LEN) == 0)
|
||||
title += CAPS_LEN; /* already Caps */
|
||||
caps_lock = (caps_lock ? 0 : CAPS_LEN);
|
||||
window_set(frame, FRAME_LABEL, (title -= caps_lock), 0);
|
||||
return NOTIFY_IGNORED;
|
||||
}
|
||||
#endif /* WANT_CAPS_LOCK */
|
||||
ttysw_input (tty_win, key_prefix, k_prefix_length);
|
||||
sprintf (buffer, "%c%c", d, c);
|
||||
ttysw_input(tty_win, buffer, strlen(buffer));
|
||||
|
||||
return NOTIFY_IGNORED;
|
||||
}
|
||||
}
|
||||
|
||||
/* handle ascii keyboard events
|
||||
* extract "event_is_ascii(event)" from the event_id, not the event_action
|
||||
*/
|
||||
if ((ASCII_FIRST <= event_id(event)) && (event_id(event) <= ASCII_LAST)) {
|
||||
/* ignore key-up events (button events have already been handled) */
|
||||
if (event_is_up(event)) return NOTIFY_IGNORED;
|
||||
#ifdef WANT_CAPS_LOCK
|
||||
/* shift alpha chars to upper case if toggle is set */
|
||||
if ((caps_lock) && (event_id(event) >= 'a') && (event_id(event) <= 'z'))
|
||||
event_set_id(event, (event_id(event) - 32));
|
||||
#endif /* WANT_CAPS_LOCK */
|
||||
|
||||
#ifndef NO_META_BIT
|
||||
/* under Openwindows/X, the meta bit is not set in the key event,
|
||||
* emacs expects this so we add it in here:
|
||||
*/
|
||||
if (event_meta_is_down(event))
|
||||
event_set_id(event, 128 | event_id(event));
|
||||
#endif /* NO_META_BIT */
|
||||
}
|
||||
return notify_next_event_func (window, event, arg, type);
|
||||
}
|
||||
|
||||
main (argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
int error_code; /* Error codes */
|
||||
|
||||
#ifdef JLE
|
||||
setlocale(LC_ALL, "");
|
||||
#endif /* JLE */
|
||||
|
||||
if(getenv("DEBUGEMACSTOOL"))
|
||||
console = fdopen (console_fd = open("/dev/console",O_WRONLY), "w");
|
||||
|
||||
putenv("IN_EMACSTOOL=t"); /* notify subprocess that it is in emacstool */
|
||||
|
||||
if (putenv("TERM=sun") != 0) /* TTY_WIN will be a TERM=sun window */
|
||||
{fprintf (stderr, "%s: Could not set TERM=sun, using `%s'\n",
|
||||
argv[0], (char *)getenv("TERM")) ;};
|
||||
/*
|
||||
* If TERMCAP starts with a slash, it is the pathname of the
|
||||
* termcap file, not an entry extracted from it, so KEEP it!
|
||||
* Otherwise, it may not relate to the new TERM, so Nuke-It.
|
||||
* If there is no TERMCAP environment variable, don't make one.
|
||||
*/
|
||||
{
|
||||
char *termcap ; /* Current TERMCAP value */
|
||||
termcap = (char *)getenv("TERMCAP") ;
|
||||
if (termcap && (*termcap != '/'))
|
||||
{
|
||||
if (putenv("TERMCAP=") != 0)
|
||||
{fprintf (stderr, "%s: Could not clear TERMCAP\n", argv[0]) ;} ;
|
||||
} ;
|
||||
} ;
|
||||
|
||||
/* find command to run as subprocess in window */
|
||||
if (!(argv[0] = (char *)getenv("EMACSTOOL"))) /* Set emacs command name */
|
||||
argv[0] = emacs_name;
|
||||
/* Emacstool recognizes two special args: -rc <file> and -bold <bold-name> */
|
||||
for (argc = 1; argv[argc]; argc++) /* Use last one on line */
|
||||
{
|
||||
if(!(strcmp ("-rc", argv[argc]))) /* Override if -rc given */
|
||||
{int i = argc;
|
||||
argv[argc--]=0; /* kill the -rc argument */
|
||||
if (argv[i+1]) { /* move to argv[0] and squeeze the rest */
|
||||
argv[0]=argv[i+1];
|
||||
for (; argv[i+2]; (argv[i]=argv[i+2],argv[++i]=0));
|
||||
}
|
||||
}
|
||||
|
||||
if (!(strcmp ("-bold", argv[argc])))
|
||||
{int i = argc;
|
||||
argv[argc--]=0; /* kill the -bold argument */
|
||||
if (argv[i+1]) { /* move to bold_name and squeeze the rest */
|
||||
bold_name = argv[i+1];
|
||||
for (; argv[i+2]; (argv[i]=argv[i+2],argv[++i]=0));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
strcpy (buffer, title);
|
||||
strncat (buffer, argv[0], /* append run command name */
|
||||
(BUFFER_SIZE - (strlen (buffer)) - (strlen (argv[0]))) - 1);
|
||||
|
||||
error_code = interpose_on_window(argc,argv);
|
||||
if (error_code != 0) { /* Barf */
|
||||
fprintf (stderr, "notify_interpose_event_func returns %d.\n", error_code);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
#ifdef XVIEW
|
||||
xv_main_loop (frame); /* And away we go */
|
||||
#else
|
||||
window_main_loop (frame);
|
||||
#endif /* XVIEW */
|
||||
}
|
||||
|
||||
#ifdef XVIEW
|
||||
int interpose_on_window(argc,argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
#ifndef TTERM
|
||||
#ifdef FONT_WIDTH_ADJUST
|
||||
int i, font_width_adjust = 1; /* hackery, and hueristics */
|
||||
/* If -Wt is not supplied, OWv2 font defaults as lucidasans-12 (width=8)
|
||||
* rather than the lucidasanstypewriter (width=7) actually used by ttysw.
|
||||
* This hack attempts to workaround it.
|
||||
*/
|
||||
for (i = 1; argv[i]; i++) {
|
||||
if (!(strcmp ("-Wt", argv[i])) || !(strcmp ("-font", argv[i])))
|
||||
{font_width_adjust = 0;
|
||||
if (console_fd) fprintf(console, "-Wt = %d\n", font_width_adjust);
|
||||
break;}
|
||||
}
|
||||
#endif /* FONT_WIDTH_ADJUST */
|
||||
#endif /* not TTERM */
|
||||
/* initialize Xview, and strip window args */
|
||||
xv_init(XV_INIT_ARGC_PTR_ARGV, &argc, argv, 0);
|
||||
|
||||
/* do this first, so arglist can override it */
|
||||
frame_icon = icon_create (ICON_LABEL, "Emacstool",
|
||||
ICON_IMAGE, &icon_image,
|
||||
0);
|
||||
|
||||
/* Build a frame to run in */
|
||||
frame = xv_create ((Xv_Window)NULL, FRAME,
|
||||
FRAME_LABEL, buffer,
|
||||
FRAME_ICON, frame_icon,
|
||||
0);
|
||||
|
||||
/* Create a tty with emacs in it */
|
||||
tty_win = xv_create (frame, SWTYPE, WIN_IS_CLIENT_PANE,
|
||||
TTY_QUIT_ON_CHILD_DEATH, TRUE,
|
||||
TTY_BOLDSTYLE, TTYSW_BOLD_INVERT,
|
||||
TTY_ARGV, argv,
|
||||
0);
|
||||
|
||||
if (bold_name) {
|
||||
(void)xv_set(tty_win, TTY_BOLDSTYLE_NAME, bold_name, 0);
|
||||
}
|
||||
|
||||
{
|
||||
Xv_font font; /* declare temp font variable */
|
||||
font = (Xv_font)xv_get (tty_win, XV_FONT);
|
||||
font_height = (int)xv_get (font, FONT_DEFAULT_CHAR_HEIGHT);
|
||||
font_width = (int)xv_get (font, FONT_DEFAULT_CHAR_WIDTH);
|
||||
}
|
||||
if (console_fd) fprintf(console, "Width = %d\n", font_width);
|
||||
|
||||
#ifndef TTERM
|
||||
#ifdef FONT_WIDTH_ADJUST
|
||||
font_width -= font_width_adjust; /* A guess! font cache bug in ttysw*/
|
||||
#endif /* FONT_WIDTH_ADJUST */
|
||||
#else
|
||||
/* make the termsw act as a tty */
|
||||
xv_set(tty_win, TERMSW_MODE, TTYSW_MODE_TYPE, 0);
|
||||
/* termsw has variable offset depending on scrollbar size/location */
|
||||
left_margin = (int)xv_get (tty_win, TEXTSW_LEFT_MARGIN);
|
||||
#endif /* TTERM */
|
||||
|
||||
tty_view = (Xv_Window) xv_get (tty_win, OPENWIN_NTH_VIEW, 0);
|
||||
xv_set(tty_view,
|
||||
WIN_CONSUME_EVENTS,
|
||||
WIN_MOUSE_BUTTONS, WIN_UP_EVENTS,
|
||||
ACTION_ADJUST, ACTION_MENU,
|
||||
WIN_ASCII_EVENTS,
|
||||
WIN_LEFT_KEYS, WIN_TOP_KEYS, WIN_RIGHT_KEYS,
|
||||
0,
|
||||
0);
|
||||
/* Interpose my event function */
|
||||
return (int) notify_interpose_event_func
|
||||
(tty_view, input_event_filter_function, NOTIFY_SAFE);
|
||||
}
|
||||
#else /* not XVIEW */
|
||||
int interpose_on_window (argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
/* do this first, so arglist can override it */
|
||||
frame_icon = icon_create (ICON_LABEL, "Emacstool",
|
||||
ICON_IMAGE, &icon_image,
|
||||
0);
|
||||
|
||||
/* Build a frame to run in */
|
||||
frame = window_create ((Window)NULL, FRAME,
|
||||
FRAME_LABEL, buffer,
|
||||
FRAME_ICON, frame_icon,
|
||||
FRAME_ARGC_PTR_ARGV, &argc, argv,
|
||||
0);
|
||||
|
||||
/* Create a tty with emacs in it */
|
||||
tty_win = window_create (frame, TTY,
|
||||
TTY_QUIT_ON_CHILD_DEATH, TRUE,
|
||||
TTY_BOLDSTYLE, TTYSW_BOLD_INVERT,
|
||||
TTY_ARGV, argv,
|
||||
0);
|
||||
|
||||
if (bold_name) {
|
||||
(void)window_set(tty_win, TTY_BOLDSTYLE_NAME, bold_name, 0);
|
||||
}
|
||||
|
||||
/* ttysw uses pf_default, one must set WIN_FONT explicitly */
|
||||
window_set (tty_win, WIN_FONT, pf_default(), 0);
|
||||
font_height = (int)window_get (tty_win, WIN_ROW_HEIGHT);
|
||||
font_width = (int)window_get (tty_win, WIN_COLUMN_WIDTH);
|
||||
|
||||
tty_view = tty_win;
|
||||
window_set(tty_view,
|
||||
WIN_CONSUME_PICK_EVENTS,
|
||||
WIN_STOP,
|
||||
WIN_MOUSE_BUTTONS, WIN_UP_EVENTS,
|
||||
/* LOC_WINENTER, LOC_WINEXIT, LOC_MOVE, */
|
||||
0,
|
||||
WIN_CONSUME_KBD_EVENTS,
|
||||
WIN_STOP,
|
||||
WIN_ASCII_EVENTS,
|
||||
WIN_LEFT_KEYS, WIN_TOP_KEYS, WIN_RIGHT_KEYS,
|
||||
/* WIN_UP_ASCII_EVENTS, */
|
||||
0,
|
||||
0);
|
||||
/* Interpose my event function */
|
||||
return (int) notify_interpose_event_func
|
||||
(tty_view, input_event_filter_function, NOTIFY_SAFE);
|
||||
}
|
||||
#endif /* XVIEW */
|
||||
326
etc/env.c
Normal file
326
etc/env.c
Normal file
|
|
@ -0,0 +1,326 @@
|
|||
/* env.c - manipulate environment and execute a program
|
||||
in that environment
|
||||
Mly 861126
|
||||
|
||||
Copyright (C) 1986 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 1, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
In other words, you are welcome to use, share and improve this program.
|
||||
You are forbidden to forbid anyone else to use, share and improve
|
||||
what you give them. Help stamp out software-hoarding! */
|
||||
|
||||
/*
|
||||
|
||||
If first argument is "-", then a new environment is constructed
|
||||
from scratch; otherwise the environment is inherited from the parent
|
||||
process, except as modified by other options.
|
||||
|
||||
So, "env - foo" will invoke the "foo" program in a null environment,
|
||||
whereas "env foo" would invoke "foo" in the same environment as that
|
||||
passed to "env" itself.
|
||||
|
||||
Subsequent arguments are interpreted as follows:
|
||||
|
||||
* "variable=value" (ie an arg containing a "=" character)
|
||||
means to set the specified environment variable to that value.
|
||||
`value' may be of zero length ("variable="). Note that setting
|
||||
a variable to a zero-length value is different from unsetting it.
|
||||
|
||||
* "-u variable" or "-unset variable"
|
||||
means to unset that variable
|
||||
If that variable isn't set, does nothing.
|
||||
|
||||
* "-s variable value" or "-set variable value"
|
||||
same as "variable=value"
|
||||
|
||||
* "-" or "--"
|
||||
are used to indicate that the following argument is the program
|
||||
to invoke. This is only necessary when the program's name
|
||||
begins with "-" or contains a "="
|
||||
|
||||
* anything else
|
||||
The first remaining argument specifies a program to invoke
|
||||
(it is searched for according to the specification of the PATH
|
||||
environment variable) and any arguments following that are
|
||||
passed as arguments to that program
|
||||
|
||||
If no program-name is specified following the environment
|
||||
specifications the the resulting environment is printed
|
||||
(The is like specifying a program-name of "printenv")
|
||||
|
||||
Examples:
|
||||
If the environment passed to "env" is
|
||||
{ USER=rms EDITOR=emacs PATH=.:/gnubin:/hacks }
|
||||
|
||||
* "env DISPLAY=gnu:0 nemacs"
|
||||
calls "nemacs" in the envionment
|
||||
{ EDITOR=emacs USER=rms DISPLAY=gnu }
|
||||
|
||||
* "env - USER=foo /hacks/hack bar baz"
|
||||
will call the "hack" program on arguments "bar" and "baz"
|
||||
in an environment in which the only variable is "USER"
|
||||
Note that the "-" option will clear out the PATH variable,
|
||||
so one should be careful to specify in which directory
|
||||
to find the program to call
|
||||
|
||||
* "env -u EDITOR USER=foo PATH=/energy -- e=mc2 bar baz"
|
||||
The program "/energy/e=mc2" is called with environment
|
||||
{ USER=foo PATH=/energy }
|
||||
|
||||
*/
|
||||
|
||||
#ifdef EMACS
|
||||
#define NO_SHORTNAMES
|
||||
#include "../src/config.h"
|
||||
#endif /* EMACS */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
|
||||
extern int execvp ();
|
||||
extern char *index ();
|
||||
|
||||
char *xmalloc (), *xrealloc ();
|
||||
char *concat ();
|
||||
|
||||
extern char **environ;
|
||||
|
||||
char **nenv;
|
||||
int nenv_size;
|
||||
|
||||
char *progname;
|
||||
void setenv ();
|
||||
void fatal ();
|
||||
|
||||
main (argc, argv, envp)
|
||||
register int argc;
|
||||
register char **argv;
|
||||
char **envp;
|
||||
{
|
||||
register char *tem;
|
||||
|
||||
progname = argv[0];
|
||||
argc--;
|
||||
argv++;
|
||||
|
||||
nenv_size = 100;
|
||||
nenv = (char **) xmalloc (nenv_size * sizeof (char *));
|
||||
*nenv = (char *) 0;
|
||||
|
||||
/* "-" flag means to not inherit parent's environment */
|
||||
if (argc && !strcmp (*argv, "-"))
|
||||
{
|
||||
argc--;
|
||||
argv++;
|
||||
}
|
||||
else
|
||||
/* Else pass on existing env vars. */
|
||||
for (; *envp; envp++)
|
||||
{
|
||||
tem = index (*envp, '=');
|
||||
if (tem)
|
||||
{
|
||||
*tem = '\000';
|
||||
setenv (*envp, tem + 1);
|
||||
}
|
||||
}
|
||||
|
||||
while (argc > 0)
|
||||
{
|
||||
tem = index (*argv, '=');
|
||||
if (tem)
|
||||
/* If arg contains a "=" it specifies to set a variable */
|
||||
{
|
||||
*tem = '\000';
|
||||
setenv (*argv, tem + 1);
|
||||
argc--; argv++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (**argv != '-')
|
||||
/* Remaining args are program name and args to pass it */
|
||||
break;
|
||||
|
||||
if (argc < 2)
|
||||
fatal ("No argument following \"%s\" switch", *argv);
|
||||
if (!strcmp (*argv, "-u") ||
|
||||
!strcmp (*argv, "-unset"))
|
||||
/* Unset a variable */
|
||||
{
|
||||
argc--; argv++;
|
||||
setenv (*argv, 0);
|
||||
argc--; argv++;
|
||||
}
|
||||
else if (!strcmp (*argv, "-s") ||
|
||||
!strcmp (*argv, "-set"))
|
||||
/* Set a variable */
|
||||
{
|
||||
argc--; argv++;
|
||||
tem = *argv;
|
||||
if (argc < 2)
|
||||
fatal ("No value specified for variable \"%s\"",
|
||||
tem);
|
||||
argc--; argv++;
|
||||
setenv (tem, *argv);
|
||||
argc--; argv++;
|
||||
}
|
||||
else if (!strcmp (*argv, "-") || !strcmp (*argv, "--"))
|
||||
{
|
||||
argc--; argv++;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
fatal ("unknown switch \"%s\"", *argv);
|
||||
}
|
||||
}
|
||||
|
||||
/* If no program specified print the environment and exit */
|
||||
if (argc <= 0)
|
||||
{
|
||||
while (*nenv)
|
||||
printf ("%s\n", *nenv++);
|
||||
exit (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
extern int errno, sys_nerr;
|
||||
extern char *sys_errlist[];
|
||||
|
||||
environ = nenv;
|
||||
(void) execvp (*argv, argv);
|
||||
|
||||
fprintf (stderr, "%s: Cannot execute \"%s\"",
|
||||
progname, *argv);
|
||||
if (errno < sys_nerr)
|
||||
fprintf (stderr, ": %s\n" , sys_errlist[errno]);
|
||||
else
|
||||
putc ('\n', stderr);
|
||||
exit (errno != 0 ? errno : 1);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
setenv (var, val)
|
||||
register char *var, *val;
|
||||
{
|
||||
register char **e;
|
||||
int len = strlen (var);
|
||||
|
||||
{
|
||||
register char *tem = index (var, '=');
|
||||
if (tem)
|
||||
fatal ("Environment variable names may not contain \"=\": %s",
|
||||
var);
|
||||
else if (*var == '\000')
|
||||
fatal ("Zero-length environment variable name specified.");
|
||||
}
|
||||
|
||||
for (e = nenv; *e; e++)
|
||||
if (!strncmp (var, *e, len) &&
|
||||
(*e)[len] == '=')
|
||||
{
|
||||
if (val)
|
||||
goto set;
|
||||
else
|
||||
do { *e = *(e + 1); } while (*e++);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!val)
|
||||
return; /* Nothing to unset */
|
||||
|
||||
len = e - nenv;
|
||||
if (len + 1 >= nenv_size)
|
||||
{
|
||||
nenv_size += 100;
|
||||
nenv = (char **) xrealloc (nenv, nenv_size * sizeof (char *));
|
||||
e = nenv + len;
|
||||
}
|
||||
|
||||
set:
|
||||
val = concat (var, "=", val);
|
||||
if (*e)
|
||||
free (*e);
|
||||
else
|
||||
*(e + 1) = (char *) 0;
|
||||
*e = val;
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
fatal (msg, arg1, arg2)
|
||||
char *msg, *arg1, *arg2;
|
||||
{
|
||||
fprintf (stderr, "%s: ", progname);
|
||||
fprintf (stderr, msg, arg1, arg2);
|
||||
putc ('\n', stderr);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
|
||||
extern char *malloc (), *realloc ();
|
||||
|
||||
void
|
||||
memory_fatal ()
|
||||
{
|
||||
fatal ("Out of memory");
|
||||
}
|
||||
|
||||
char *
|
||||
xmalloc (size)
|
||||
int size;
|
||||
{
|
||||
register char *value;
|
||||
value = (char *) malloc (size);
|
||||
if (!value) memory_fatal ();
|
||||
return (value);
|
||||
}
|
||||
|
||||
char *
|
||||
xrealloc (ptr, size)
|
||||
char *ptr;
|
||||
int size;
|
||||
{
|
||||
register char *value;
|
||||
value = (char *) realloc (ptr, size);
|
||||
if (!value) memory_fatal ();
|
||||
return (value);
|
||||
}
|
||||
|
||||
/* Return a newly-allocated string whose contents concatenate those of s1, s2, s3. */
|
||||
|
||||
char *
|
||||
concat (s1, s2, s3)
|
||||
char *s1, *s2, *s3;
|
||||
{
|
||||
int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
|
||||
char *result = (char *) xmalloc (len1 + len2 + len3 + 1);
|
||||
|
||||
strcpy (result, s1);
|
||||
strcpy (result + len1, s2);
|
||||
strcpy (result + len1 + len2, s3);
|
||||
*(result + len1 + len2 + len3) = 0;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* compile-command: "cc -g -o env env.c"
|
||||
* end:
|
||||
*/
|
||||
|
|
@ -1,49 +1,21 @@
|
|||
/* File name wild card expansion for VMS.
|
||||
This file is part of the etags program.
|
||||
Copyright (C) 1987 Free Software Foundation, Inc. 3 Feb 1987
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but without any warranty. No author or distributor
|
||||
accepts responsibility to anyone for the consequences of using it
|
||||
or for whether it serves any particular purpose or works at all,
|
||||
unless he says so in writing.
|
||||
|
||||
Permission is granted to anyone to distribute verbatim copies
|
||||
of this program's source code as received, in any medium, provided that
|
||||
the copyright notice, the nonwarraty notice above
|
||||
and this permission notice are preserved,
|
||||
and that the distributor grants the recipient all rights
|
||||
for further redistribution as permitted by this notice,
|
||||
and informs him of these rights.
|
||||
|
||||
Permission is granted to distribute modified versions of this
|
||||
program's source code, or of portions of it, under the above
|
||||
conditions, plus the conditions that all changed files carry
|
||||
prominent notices stating who last changed them and that the
|
||||
derived material, including anything packaged together with it and
|
||||
conceptually functioning as a modification of it rather than an
|
||||
application of it, is in its entirety subject to a permission
|
||||
notice identical to this one.
|
||||
|
||||
Permission is granted to distribute this program (verbatim or
|
||||
as modified) in compiled or executable form, provided verbatim
|
||||
redistribution is permitted as stated above for source code, and
|
||||
A. it is accompanied by the corresponding machine-readable
|
||||
source code, under the above conditions, or
|
||||
B. it is accompanied by a written offer, with no time limit,
|
||||
to distribute the corresponding machine-readable source code,
|
||||
under the above conditions, to any one, in return for reimbursement
|
||||
of the cost of distribution. Verbatim redistribution of the
|
||||
written offer must be permitted. Or,
|
||||
C. it is distributed by someone who received only the
|
||||
compiled or executable form, and is accompanied by a copy of the
|
||||
written offer of source code which he received along with it.
|
||||
|
||||
Permission is granted to distribute this program (verbatim or as modified)
|
||||
in executable form as part of a larger system provided that the source
|
||||
code for this program, including any modifications used,
|
||||
is also distributed or offered as stated in the preceding paragraph.
|
||||
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 1, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
In other words, you are welcome to use, share and improve this program.
|
||||
You are forbidden to forbid anyone else to use, share and improve
|
||||
what you give them. Help stamp out software-hoarding! */
|
||||
|
|
@ -135,7 +107,7 @@ fn_exp(out, in)
|
|||
if (pass1)
|
||||
{
|
||||
pass1 = NO;
|
||||
o.dsc$a_pointer = out;
|
||||
o.dsc$a_pointer = (char *) out;
|
||||
o.dsc$w_length = (short)OUTSIZE;
|
||||
i.dsc$a_pointer = in;
|
||||
i.dsc$w_length = (short)strlen(in);
|
||||
1631
etc/etags.c
Normal file
1631
etc/etags.c
Normal file
File diff suppressed because it is too large
Load diff
15
etc/etags.vms
Normal file
15
etc/etags.vms
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
VMS-ed version of etags
|
||||
-----------------------
|
||||
|
||||
1. The changes made allow the program to compile correctly,
|
||||
to give error messages more meaningful to VMS, to allow '$'
|
||||
in identifier tokens in C programs, and to expand wild-cards in the
|
||||
input filespecs.
|
||||
|
||||
2. To minimize the differences from the original version,
|
||||
the VMS filename expansion converts filenames to lower
|
||||
case, and strips version numbers. This does indeed mean
|
||||
that some input specs (containing version wildcards) will
|
||||
cause curious effects, it is reasonably consistent with
|
||||
Emacs, which ignores file versions.
|
||||
|
||||
|
|
@ -21,7 +21,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
#define NO_SHORTNAMES
|
||||
#include "../src/config.h"
|
||||
|
||||
#if defined (BSD) && !defined (BSD4_1) && !defined (USE_FAKEMAIL)
|
||||
#if defined (BSD) && !defined (BSD4_1)
|
||||
/* This program isnot used in BSD, so just avoid loader complaints. */
|
||||
main ()
|
||||
{
|
||||
|
|
@ -267,16 +267,7 @@ add_field (the_list, field, where)
|
|||
{
|
||||
*where++ = ' ';
|
||||
while ((c = *field++) != '\0')
|
||||
{
|
||||
if (c == '(')
|
||||
{
|
||||
while (*field && *field != ')') ++field;
|
||||
if (! (*field++)) break; /* no closer */
|
||||
if (! (*field)) break; /* closerNULL */
|
||||
c = *field;
|
||||
}
|
||||
*where++ = ((c == ','||c=='>'||c=='<') ? ' ' : c);
|
||||
}
|
||||
*where++ = ((c == ',') ? ' ' : c);
|
||||
if (the_list == NIL) break;
|
||||
field = the_list->string;
|
||||
the_list = the_list->continuation;
|
||||
|
|
@ -400,49 +391,15 @@ put_string (s)
|
|||
}
|
||||
|
||||
void
|
||||
put_line (string)
|
||||
char *string;
|
||||
put_line (s)
|
||||
char *s;
|
||||
{
|
||||
register stream_list rem;
|
||||
for (rem = the_streams;
|
||||
rem != ((stream_list) NULL);
|
||||
rem = rem->rest_streams)
|
||||
{
|
||||
char *s = string;
|
||||
int column = 0;
|
||||
|
||||
/* Divide STRING into lines. */
|
||||
while (*s != 0)
|
||||
{
|
||||
char *breakpos;
|
||||
|
||||
/* Find the last char that fits. */
|
||||
for (breakpos = s; *breakpos && column < 78; ++breakpos)
|
||||
{
|
||||
if (*breakpos == '\t')
|
||||
column += 8;
|
||||
else
|
||||
column++;
|
||||
}
|
||||
/* Back up to just after the last comma that fits. */
|
||||
while (breakpos != s && breakpos[-1] != ',') --breakpos;
|
||||
if (breakpos == s)
|
||||
{
|
||||
/* If no comma fits, move past the first address anyway. */
|
||||
while (*breakpos != 0 && *breakpos != ',') ++breakpos;
|
||||
if (*breakpos != 0)
|
||||
/* Include the comma after it. */
|
||||
++breakpos;
|
||||
}
|
||||
/* Output that much, then break the line. */
|
||||
fwrite (s, 1, breakpos - s, rem->handle);
|
||||
fputs ("\n\t", rem->handle);
|
||||
column = 8;
|
||||
|
||||
/* Skip whitespace and prepare to print more addresses. */
|
||||
s = breakpos;
|
||||
while (*s == ' ' || *s == '\t') ++s;
|
||||
}
|
||||
fputs (s, rem->handle);
|
||||
putc ('\n', rem->handle);
|
||||
}
|
||||
return;
|
||||
|
|
@ -614,19 +571,11 @@ main (argc, argv)
|
|||
{
|
||||
char *command_line;
|
||||
header the_header;
|
||||
long name_length;
|
||||
char *mail_program_name;
|
||||
long name_length = strlen (MAIL_PROGRAM_NAME);
|
||||
char buf[BUFLEN + 1];
|
||||
register int size;
|
||||
FILE *the_pipe;
|
||||
|
||||
extern char *getenv ();
|
||||
|
||||
mail_program_name = getenv ("FAKEMAILER");
|
||||
if (!(mail_program_name && *mail_program_name))
|
||||
mail_program_name = MAIL_PROGRAM_NAME;
|
||||
name_length = strlen (mail_program_name);
|
||||
|
||||
my_name = MY_NAME;
|
||||
the_streams = ((stream_list) NULL);
|
||||
the_date = ((char *) NULL);
|
||||
|
|
@ -634,7 +583,7 @@ main (argc, argv)
|
|||
|
||||
the_header = read_header ();
|
||||
command_line = alloc_string (name_length + args_size (the_header));
|
||||
strcpy (command_line, mail_program_name);
|
||||
strcpy (command_line, MAIL_PROGRAM_NAME);
|
||||
parse_header (the_header, &command_line[name_length]);
|
||||
|
||||
the_pipe = popen (command_line, "w");
|
||||
220
etc/faq2texi.perl
Normal file
220
etc/faq2texi.perl
Normal file
|
|
@ -0,0 +1,220 @@
|
|||
#!/usr/staff/bin/perl
|
||||
#
|
||||
# efaq2texinfo : Convert Emacs FAQ to texinfo format
|
||||
#
|
||||
# George Ferguson, ferguson@cs.rochester.edu, 24 Jan 1992.
|
||||
#
|
||||
# Usage, assuming the list is in the file FAQ:
|
||||
# % efaq2texinfo <FAQ >efaq.texinfo
|
||||
# If you store your FAQ compressed, you can use
|
||||
# % zcat FAQ.Z | efaq2texinfo >efaq.texinfo
|
||||
# In any case, you then need to convert to info format:
|
||||
# % makeinfo +fill-column 80 efaq.texinfo
|
||||
# The result will be files efaq-info and efaq-info-[1-4]. If you don't
|
||||
# have makeinfo(1), you can try using "texinfo-format-buffer" within
|
||||
# emacs.
|
||||
#
|
||||
# The FAQ can be obtained from pit-manager.mit.edu.
|
||||
#
|
||||
|
||||
$chapter = 0;
|
||||
$item = 0;
|
||||
$itemizing = 0;
|
||||
$enumerating = 0;
|
||||
$displaying = 0;
|
||||
|
||||
# Now process each line
|
||||
while (<>) {
|
||||
if ($. == 1 || /^---Continued---$/) {
|
||||
&skipJunk;
|
||||
}
|
||||
s/^ +$//; # blanks only -> newline
|
||||
s/\t/ /; # tabs -> spaces (stupidly)
|
||||
if (/^([^0-9 \n].*)$/) { # new chapter heading
|
||||
&endDisplay;
|
||||
&endLists;
|
||||
$chapter += 1;
|
||||
$text = $1;
|
||||
$text =~ s/ +[-!+]$//; # remove change marker
|
||||
$chapterTitle[$chapter] = $text;
|
||||
$item = 0;
|
||||
# print "CHAPTER $chapter: \"$text\"\n";
|
||||
} elsif (/^([0-9]+): (.*)$/) {
|
||||
&endDisplay;
|
||||
&endLists;
|
||||
$num = $1;
|
||||
$text = $2;
|
||||
$text =~ s/ +[-!+]$//; # remove change marker
|
||||
$menu[$chapter] .= "* Question $num::\t$text\n";
|
||||
$item = $num;
|
||||
$itemTitle[$item] = "$text\n";
|
||||
# print "QUESTION $item: \"$text\"\n";
|
||||
} else {
|
||||
if (/^ +\* Topic/) { # hack for info example
|
||||
&addText("@example\n");
|
||||
&addText("$_");
|
||||
&addText("@end example\n");
|
||||
next;
|
||||
} elsif (/^ +\*/) { # asterisk marks list element
|
||||
if (!$itemizing) {
|
||||
&addText("\@itemize \@bullet\n");
|
||||
$itemizing = 1;
|
||||
}
|
||||
&endDisplay;
|
||||
&addText("\@item\n");
|
||||
s/^ +\* *//;
|
||||
} elsif (/^ +[0-9]\./) { # digit-period marks list element
|
||||
if (!$enumerating) {
|
||||
&addText("\@enumerate\n");
|
||||
$enumerating = 1;
|
||||
}
|
||||
&endDisplay;
|
||||
&addText("\@item\n");
|
||||
s/^ +[0-9]+\. *//;
|
||||
} elsif (/^ {0,2}[^ \n]/) { # less whitespace marks end of list
|
||||
&endLists;
|
||||
}
|
||||
s/ //; # automatically remove 2 spaces
|
||||
if ($itemizing) { # adjust leading whitespace in lists
|
||||
s/^ //;
|
||||
} elsif ($enumerating) {
|
||||
s/^ //;
|
||||
}
|
||||
if (/^ +/ && !$displaying) { # extra leading spaces -> display
|
||||
&addText("\@example\n");
|
||||
$displaying = 1;
|
||||
}
|
||||
if (/^[^ ]/ && $displaying) { # no leading spaces -> display end
|
||||
&addText("\@end example\n");
|
||||
$displaying = 0;
|
||||
}
|
||||
s/ +[-!+]$//; # remove "change" markers (sorry)
|
||||
$_ = &formatText;
|
||||
&addText($_);
|
||||
}
|
||||
}
|
||||
# Just in case
|
||||
&endDisplay;
|
||||
&endLists;
|
||||
|
||||
# Output it all
|
||||
|
||||
# Print texinfo header
|
||||
print "\\input texinfo\n";
|
||||
print "@setfilename efaq.info\n";
|
||||
print "@settitle Frequently Asked Questions about Emacs\n";
|
||||
print "\n";
|
||||
print "@node Top\n";
|
||||
print "@top Frequently Asked Questions about Emacs\n";
|
||||
print "\n";
|
||||
|
||||
print $chapterText[0];
|
||||
print "\@menu\n";
|
||||
for ($i = 1; $i <= $chapter; $i++) {
|
||||
print "* Chapter $i::\t$chapterTitle[$i]\n";
|
||||
}
|
||||
print "* Index::\tHosts, usernames, files, etc.\n";
|
||||
print "\@end menu\n\n";
|
||||
for ($i = 1; $i <= $chapter; $i++) {
|
||||
print "\@node Chapter $i\n";
|
||||
print "\@chapter $chapterTitle[$i]\n";
|
||||
print $chapterText[$i];
|
||||
print "\@menu\n";
|
||||
print $menu[$i];
|
||||
print "\@end menu\n\n";
|
||||
}
|
||||
for ($i = 1; $i <= $item; $i++) {
|
||||
print "\@node Question $i\n";
|
||||
print "\@section $itemTitle[$i]"; # too many newlines already
|
||||
print $itemText[$i];
|
||||
}
|
||||
|
||||
# Print texinfo trailer
|
||||
print "\n";
|
||||
print "@node Index\n";
|
||||
print "@appendix Index\n";
|
||||
print "\n";
|
||||
print "@printindex fn\n";
|
||||
print "\n";
|
||||
print "@bye\n";
|
||||
|
||||
############################################################################
|
||||
|
||||
sub addText {
|
||||
if ($item == 0) {
|
||||
$chapterText[$chapter] .= "$_[0]";
|
||||
} else {
|
||||
$itemText[$item] .= "$_[0]";
|
||||
}
|
||||
}
|
||||
|
||||
sub endLists {
|
||||
if ($itemizing) {
|
||||
&addText("\@end itemize\n");
|
||||
}
|
||||
if ($enumerating) {
|
||||
&addText("\@end enumerate\n");
|
||||
}
|
||||
$enumerating = 0;
|
||||
$itemizing = 0;
|
||||
}
|
||||
|
||||
sub endDisplay {
|
||||
if ($displaying) {
|
||||
&addText("\@end example\n");
|
||||
$displaying = 0;
|
||||
}
|
||||
}
|
||||
|
||||
sub skipJunk {
|
||||
local($blank) = 0;
|
||||
# skip until double newline (ie. mail headers, etc.)
|
||||
while ($_ ne "\n" || !$blank) {
|
||||
$blank = ($_ eq "\n");
|
||||
$_ = <>;
|
||||
}
|
||||
# skip next paragraph: "If you are viewing..."
|
||||
$_ = <>;
|
||||
while ($_ ne "\n") { $_ = <>; }
|
||||
# skip next paragraph: "To search for..."
|
||||
$_ = <>;
|
||||
while ($_ ne "\n") { $_ = <>; }
|
||||
# skip next paragraph: "A `+' in the..."
|
||||
$_ = <>;
|
||||
while ($_ ne "\n") { $_ = <>; }
|
||||
}
|
||||
|
||||
#
|
||||
# For each line of text in the document, we generate an index entry for
|
||||
# anything that looks like a hostname, email address, newsgroup, filename
|
||||
# or emacs command (only long command recognized). This function is complicated
|
||||
# by the fact that the index entries have to come on lines of their own,
|
||||
# after the text that contains them.
|
||||
#
|
||||
# To recognize host:file as a single entity, add ":?" inside the first
|
||||
# nested set of brackets but before the multiple-alternatives pattern.
|
||||
#
|
||||
# This function also escapes any characters with special meaning to
|
||||
# texinfo. Returns the line of text.
|
||||
#
|
||||
sub formatText {
|
||||
# convert special chars to texinfo escapes
|
||||
s/@/@@/g;
|
||||
s/\{/@{/g;
|
||||
s/\}/@}/g;
|
||||
# remove trailing spaces
|
||||
s/ +$//g;
|
||||
# gather the index entries
|
||||
local($t) = $_;
|
||||
local($tt) = "";
|
||||
while ($t =~ /([-a-zA-Z0-9]{2,}((\.|@@|%|!|-|\/)[-@a-zA-Z0-9]+){2,})/) {
|
||||
$t = $';
|
||||
$tt .= "@findex $1\n";
|
||||
}
|
||||
# Flag cross-references
|
||||
s/(q|Q)uestion ([0-9]+)/@ref\{Question $2\}/g;
|
||||
# print the line of text
|
||||
return("$_$tt");
|
||||
}
|
||||
|
||||
__END__
|
||||
150
etc/ledit.l
Normal file
150
etc/ledit.l
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
;;; -*- Mode: lisp -*-
|
||||
|
||||
; load in the c functions
|
||||
|
||||
(removeaddress '_signal)
|
||||
(removeaddress '_switch_to_proc)
|
||||
(removeaddress '_set_proc_str)
|
||||
|
||||
(cfasl "/src/mdc/ledit/leditcfns.o" '_switch_to_proc 'emacs)
|
||||
|
||||
(getaddress '_set_proc_str 'set_proc_str)
|
||||
|
||||
(declare (special *ledit-infile* ; emacs->lisp tempfile
|
||||
*ledit-outfile* ; lisp->emacs tempfile
|
||||
*ledit-ppfile* ; pp->emacs tempfile
|
||||
*ledit-lisztfile* ; compiler input
|
||||
*ledit-objfile* ; compiler output
|
||||
*ledit-initialized*) ; flag
|
||||
)
|
||||
|
||||
(setq *ledit-initialized* nil)
|
||||
|
||||
;;; INIT-LEDIT
|
||||
|
||||
(defun init-ledit ()
|
||||
(let ((user (getenv '|USER|))) ;USER must be uppercase
|
||||
(setq
|
||||
*ledit-outfile* (concat "/tmp/" user ".l2") ; lisp -> emacs
|
||||
*ledit-infile* (concat "/tmp/" user ".l1") ; emacs -> lisp
|
||||
*ledit-ppfile* (concat "/tmp/" user ".l3") ; pp output to emacs.
|
||||
*ledit-lisztfile* (concat "/tmp/" user ".l4")
|
||||
*ledit-objfile* (concat "/tmp/" user ".o")
|
||||
*ledit-initialized* t)))
|
||||
|
||||
;;; LEDIT
|
||||
; if 1 arg, arg is taken as a tag name to pass to emacs.
|
||||
; if 2 args, second arg is a keyword. If 2nd arg is pp,
|
||||
; pp is applied to first arg, and result is sent to emacs
|
||||
; to put in a buffer called LEDIT (which is first erased.)
|
||||
|
||||
(defun ledit fexpr (args)
|
||||
(apply #'ledit* args))
|
||||
|
||||
;;; LEDIT*
|
||||
|
||||
(defun ledit* n
|
||||
(if (not *ledit-initialized*) (init-ledit))
|
||||
(ledit-output (listify n))
|
||||
(syscall 10. *ledit-infile*) ; syscall 10 is "delete"
|
||||
(syscall 10. *ledit-lisztfile*)
|
||||
(emacs)
|
||||
(ledit-input)
|
||||
(syscall 10. *ledit-outfile*)
|
||||
(syscall 10. *ledit-ppfile*)
|
||||
t)
|
||||
|
||||
;;; LEDIT-OUTPUT
|
||||
;;; Egad, what a mess! Doesn't work for XEMACS yet.
|
||||
;;; Here's an example from Moclisp:
|
||||
;;; -> (defun bar (nothing) (bar nothing))
|
||||
;;; bar
|
||||
;;; -> (ledit bar)
|
||||
;;; should produce...
|
||||
;;; (progn) (progn tag (setq tag "bar") (&goto-tag))
|
||||
;;; and
|
||||
;;; -> (ledit bar pp)
|
||||
;;; should stuff this to emacs...
|
||||
;;; (progn) (switch-to-buffer "LEDIT") (erase-buffer)
|
||||
;;; (insert-file "/tmp/walter.l3") (lisp-mode)
|
||||
;;; and this...
|
||||
;;; (def bar
|
||||
;;; (lambda (x)
|
||||
;;; (bar nothing)))
|
||||
;;; into *LEDIT*
|
||||
|
||||
(defun ledit-output (args)
|
||||
(if args
|
||||
(let ((ofile (outfile *ledit-outfile*)))
|
||||
(format ofile "(progn)") ; this is necessary.
|
||||
|
||||
(cond ((null (cdr args)) ; no keyword -> arg is a tag.
|
||||
(format ofile "(progn tag (setq tag \"~A\"~
|
||||
(&goto-tag))"
|
||||
(car args)))
|
||||
((eq (cadr args) 'pp) ; pp-> pp first arg to emacs
|
||||
(apply 'pp `((|F| ,*ledit-ppfile*) ,(car args)))
|
||||
(format ofile "(switch-to-buffer \"LEDIT\")~
|
||||
(erase-buffer)")
|
||||
(format ofile "(insert-file \"~A\")"
|
||||
*ledit-ppfile*)
|
||||
(format ofile "(lisp-mode)"))
|
||||
|
||||
(t (format t "~&~A -- unknown option~%" (cdr args))))
|
||||
(close ofile))))
|
||||
|
||||
;;; LISZT*
|
||||
;;; Need this guy to do compile-input.
|
||||
;;; Liszt returns 0 if all was well.
|
||||
;;; Note that in ordinary use the user will have to get used to looking
|
||||
;;; at "%Warning: ... Compiler declared *foo* special" messages, since
|
||||
;;; you don't usually want to hunt around in your file, zap in the the
|
||||
;;; declarations, then go back to what you were doing.
|
||||
;;; Fortunately this doesn't cause the compiler to bomb.
|
||||
;;; Some sleepless night I will think of a way to get around this.
|
||||
|
||||
(defun liszt* (&rest args)
|
||||
(apply #'liszt args))
|
||||
|
||||
;;; LEDIT-INPUT
|
||||
;;; Although there are two cases here, in practice
|
||||
;;; it is never the case that there is both input to be
|
||||
;;; interpreted and input to be compiled.
|
||||
|
||||
(defun ledit-input ()
|
||||
(if (probef *ledit-lisztfile*)
|
||||
(cond ((getd #'liszt)
|
||||
(format t ";Compiling LEDIT:")
|
||||
(and (zerop (liszt* *ledit-lisztfile* '-o *ledit-objfile*))
|
||||
(load *ledit-objfile*)))
|
||||
(t (format t ";Can't compile LEDIT: No liszt.~%;Reading instead:")
|
||||
(let ((ifile (infile *ledit-lisztfile*)))
|
||||
(ledit-load ifile)
|
||||
(close ifile)))))
|
||||
|
||||
(if (probef *ledit-infile*)
|
||||
(let ((ifile (infile *ledit-infile*)))
|
||||
(format t ";Reading from LEDIT:~%")
|
||||
(ledit-load ifile)
|
||||
(close ifile))))
|
||||
|
||||
;;; LEDIT-LOAD
|
||||
;;; A generally useful form of load
|
||||
|
||||
(defun ledit-load (ifile)
|
||||
(let ((eof-form (list 'eof-form)))
|
||||
(do ((form (read ifile eof-form) (read ifile eof-form)))
|
||||
((eq form eof-form))
|
||||
(format t "; ~A~%" (eval form)))))
|
||||
|
||||
(setsyntax #/ 'macro 'ledit) ; make ^E = (ledit)<return>
|
||||
|
||||
;; more robust version of the c function set_proc_str. Does argument checking.
|
||||
;; set_proc_str sets the string that is stuffed to the tty after franz pauses
|
||||
;; and the csh wakes up. It is usually "%emacs" or "%vemacs" or "%?emacs"
|
||||
(defun set-proc-str (arg)
|
||||
(if (stringp arg)
|
||||
(set_proc_str arg)
|
||||
(if (symbolp arg)
|
||||
(set_proc_str (get-pname arg))
|
||||
(error arg " is illegal argument to set-proc-str"))))
|
||||
|
|
@ -61,10 +61,10 @@ main (argc, argv)
|
|||
err_count += scan_file (argv[i]); /* err_count seems to be {mis,un}used */
|
||||
#ifndef VMS
|
||||
exit (err_count); /* see below - shane */
|
||||
#endif VMS
|
||||
#endif /* VMS */
|
||||
}
|
||||
|
||||
/* Read file FILENAME and output its doc strings to outfile. */
|
||||
/* Read file FILENAME and output its doc strings to stdout. */
|
||||
/* Return 1 if file is not found, 0 if it is found. */
|
||||
|
||||
scan_file (filename)
|
||||
|
|
@ -83,7 +83,7 @@ char buf[128];
|
|||
|
||||
/* Skip a C string from INFILE,
|
||||
and return the character that follows the closing ".
|
||||
If printflag is positive, output string contents to outfile.
|
||||
If printflag is positive, output string contents to stdout.
|
||||
If it is negative, store contents in buf.
|
||||
Convert escape sequences \n and \t to newline and tab;
|
||||
discard \ followed by newline. */
|
||||
|
|
@ -135,46 +135,10 @@ read_c_string (infile, printflag)
|
|||
return c;
|
||||
}
|
||||
|
||||
/* Write to file OUT the argument names of the function whose text is in BUF.
|
||||
MINARGS and MAXARGS are the minimum and maximum number of arguments. */
|
||||
|
||||
write_c_args (out, buf, minargs, maxargs)
|
||||
FILE *out;
|
||||
char *buf;
|
||||
int minargs, maxargs;
|
||||
{
|
||||
register int c;
|
||||
register char *p = buf;
|
||||
int space = 0;
|
||||
|
||||
fprintf (out, "arguments: ");
|
||||
|
||||
while (*p)
|
||||
{
|
||||
c = *p++;
|
||||
if (c == ',')
|
||||
{
|
||||
minargs--;
|
||||
maxargs--;
|
||||
if (!space)
|
||||
putc (' ', out);
|
||||
if (minargs == 0 && maxargs > 0)
|
||||
fprintf (out, "&optional ");
|
||||
space = 1;
|
||||
continue;
|
||||
}
|
||||
else if (c == ' ' && space)
|
||||
continue;
|
||||
space = (c == ' ');
|
||||
putc (c, out);
|
||||
}
|
||||
putc ('\n', out);
|
||||
}
|
||||
|
||||
/* Read through a c file. If a .o file is named,
|
||||
the corresponding .c file is read instead.
|
||||
Looks for DEFUN constructs such as are defined in ../src/lisp.h.
|
||||
Accepts any word starting DEF... so it finds DEFSIMPLE and DEFPRED. */
|
||||
the corresponding .c file is read instead.
|
||||
Looks for DEFUN constructs such as are defined in ../src/lisp.h.
|
||||
Accepts any word starting DEF... so it finds DEFSIMPLE and DEFPRED. */
|
||||
|
||||
scan_c_file (filename)
|
||||
char *filename;
|
||||
|
|
@ -184,8 +148,7 @@ scan_c_file (filename)
|
|||
register int commas;
|
||||
register int defunflag;
|
||||
register int defvarflag;
|
||||
int minargs, maxargs;
|
||||
|
||||
|
||||
if (filename[strlen (filename) - 1] == 'o')
|
||||
filename[strlen (filename) - 1] = 'c';
|
||||
|
||||
|
|
@ -243,7 +206,7 @@ scan_c_file (filename)
|
|||
while (c != '(')
|
||||
{
|
||||
if (c < 0)
|
||||
goto eof;
|
||||
return 0;
|
||||
c = getc (infile);
|
||||
}
|
||||
|
||||
|
|
@ -261,28 +224,9 @@ scan_c_file (filename)
|
|||
|
||||
while (commas)
|
||||
{
|
||||
if (c == ',')
|
||||
{
|
||||
commas--;
|
||||
if (defunflag && (commas == 1 || commas == 2))
|
||||
{
|
||||
do
|
||||
c = getc (infile);
|
||||
while (c == ' ' || c == '\n' || c == '\t');
|
||||
if (c < 0)
|
||||
goto eof;
|
||||
ungetc (c, infile);
|
||||
if (commas == 2) /* pick up minargs */
|
||||
fscanf (infile, "%d", &minargs);
|
||||
else /* pick up maxargs */
|
||||
if (c == 'M' || c == 'U') /* MANY || UNEVALLED */
|
||||
maxargs = -1;
|
||||
else
|
||||
fscanf (infile, "%d", &maxargs);
|
||||
}
|
||||
}
|
||||
if (c == ',') commas --;
|
||||
if (c < 0)
|
||||
goto eof;
|
||||
return 0;
|
||||
c = getc (infile);
|
||||
}
|
||||
while (c == ' ' || c == '\n' || c == '\t')
|
||||
|
|
@ -300,41 +244,9 @@ scan_c_file (filename)
|
|||
putc (037, outfile);
|
||||
putc (defvarflag ? 'V' : 'F', outfile);
|
||||
fprintf (outfile, "%s\n", buf);
|
||||
c = read_c_string (infile, 1);
|
||||
|
||||
/* If this is a defun, find the arguments and print them. If
|
||||
this function takes MANY or UNEVALLED args, then the C source
|
||||
won't give the names of the arguments, so we shouldn't bother
|
||||
trying to find them. */
|
||||
if (defunflag && maxargs != -1)
|
||||
{
|
||||
char argbuf[1024], *p = argbuf;
|
||||
while (c != ')')
|
||||
{
|
||||
if (c < 0)
|
||||
goto eof;
|
||||
c = getc (infile);
|
||||
}
|
||||
/* Skip into arguments. */
|
||||
while (c != '(')
|
||||
{
|
||||
if (c < 0)
|
||||
goto eof;
|
||||
c = getc (infile);
|
||||
}
|
||||
/* Copy arguments into ARGBUF. */
|
||||
*p++ = c;
|
||||
do
|
||||
*p++ = c = getc (infile);
|
||||
while (c != ')');
|
||||
*p = '\0';
|
||||
/* Output them. */
|
||||
fprintf (outfile, "\n\n");
|
||||
write_c_args (outfile, argbuf, minargs, maxargs);
|
||||
}
|
||||
read_c_string (infile, 1);
|
||||
}
|
||||
}
|
||||
eof:
|
||||
fclose (infile);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -345,8 +257,6 @@ scan_c_file (filename)
|
|||
(autoload 'NAME FILE DOCSTRING ...)
|
||||
(defvar NAME VALUE DOCSTRING)
|
||||
(defconst NAME VALUE DOCSTRING)
|
||||
(fset (quote NAME) (make-byte-code (quote ARGS) ... "\
|
||||
DOCSTRING")
|
||||
starting in column zero.
|
||||
ARGS, FILE or VALUE is ignored. We do not know how to parse Lisp code
|
||||
so we use a kludge to skip them:
|
||||
|
|
@ -390,8 +300,6 @@ scan_lisp_file (filename)
|
|||
c = getc (infile);
|
||||
if (c != '(')
|
||||
continue;
|
||||
|
||||
/* Handle an autoload. */
|
||||
c = getc (infile);
|
||||
if (c == 'a')
|
||||
{
|
||||
|
|
@ -471,8 +379,6 @@ scan_lisp_file (filename)
|
|||
}
|
||||
c = read_c_string (infile, 0);
|
||||
}
|
||||
|
||||
/* Handle def* clauses. */
|
||||
else if (c == 'd')
|
||||
{
|
||||
c = getc (infile);
|
||||
|
|
@ -482,8 +388,6 @@ scan_lisp_file (filename)
|
|||
if (c != 'f')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
|
||||
/* Is this a defun? */
|
||||
if (c == 'u')
|
||||
{
|
||||
c = getc (infile);
|
||||
|
|
@ -491,8 +395,6 @@ scan_lisp_file (filename)
|
|||
continue;
|
||||
defvarflag = 0;
|
||||
}
|
||||
|
||||
/* Or a defvar? */
|
||||
else if (c == 'v')
|
||||
{
|
||||
c = getc (infile);
|
||||
|
|
@ -503,8 +405,6 @@ scan_lisp_file (filename)
|
|||
continue;
|
||||
defvarflag = 1;
|
||||
}
|
||||
|
||||
/* Or a defconst? */
|
||||
else if (c == 'c')
|
||||
{
|
||||
c = getc (infile);
|
||||
|
|
@ -592,155 +492,6 @@ scan_lisp_file (filename)
|
|||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* Handle an fset clause. */
|
||||
else if (c == 'f')
|
||||
{
|
||||
c = getc (infile);
|
||||
if (c != 's')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 'e')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 't')
|
||||
continue;
|
||||
|
||||
/* Skip white space */
|
||||
do
|
||||
c = getc (infile);
|
||||
while (c == ' ' || c == '\n' || c == '\t');
|
||||
|
||||
/* Recognize "(quote". */
|
||||
if (c != '(')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 'q')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 'u')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 'o')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 't')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 'e')
|
||||
continue;
|
||||
|
||||
/* Skip white space */
|
||||
do
|
||||
c = getc (infile);
|
||||
while (c == ' ' || c == '\n' || c == '\t');
|
||||
|
||||
/* Read and store name of function or variable being defined
|
||||
Discard backslashes that are for quoting. */
|
||||
p = buf;
|
||||
while (c != ')' && c != ' ' && c != '\n' && c != '\t')
|
||||
{
|
||||
if (c == '\\')
|
||||
c = getc (infile);
|
||||
*p++ = c;
|
||||
c = getc (infile);
|
||||
}
|
||||
*p = '\0';
|
||||
|
||||
/* Skip white space */
|
||||
do
|
||||
c = getc (infile);
|
||||
while (c == ' ' || c == '\n' || c == '\t');
|
||||
|
||||
/* Recognize "(make-byte-code". */
|
||||
if (c != '(')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 'm')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 'a')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 'k')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 'e')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != '-')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 'b')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 'y')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 't')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 'e')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != '-')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 'c')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 'o')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 'd')
|
||||
continue;
|
||||
c = getc (infile);
|
||||
if (c != 'e')
|
||||
continue;
|
||||
|
||||
/* Scan for a \" followed by a newline, or for )) followed by
|
||||
a newline. If we find the latter first, this function has
|
||||
no docstring. */
|
||||
{
|
||||
char c1 = 0, c2 = 0;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
|
||||
/* Find newlines, and remember the two previous characters. */
|
||||
for (;;)
|
||||
{
|
||||
c = getc (infile);
|
||||
|
||||
if (c == '\n' || c < 0)
|
||||
break;
|
||||
|
||||
c2 = c1;
|
||||
c1 = c;
|
||||
}
|
||||
|
||||
/* If we've hit eof, quit. */
|
||||
if (c == EOF)
|
||||
break;
|
||||
|
||||
/* If the last two characters were \", this is a docstring. */
|
||||
else if (c2 == '"' && c1 == '\\')
|
||||
{
|
||||
putc (037, outfile);
|
||||
putc ('F', outfile);
|
||||
fprintf (outfile, "%s\n", buf);
|
||||
read_c_string (infile, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
/* If the last two characters were )), there is no
|
||||
docstring. */
|
||||
else if (c2 == ')' && c1 == ')')
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
continue;
|
||||
|
||||
48
etc/makedoc.com
Normal file
48
etc/makedoc.com
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
$ ! VMS command file to create or update the file `DOC.' which contains
|
||||
$ ! documentation strings for the functions and variables preloaded in Emacs.
|
||||
$ ! This command file should be run when you build Emacs for the first time and
|
||||
$ ! again if any documentation strings change in the source files listed here.
|
||||
$
|
||||
$ old = f$environment("default")
|
||||
$ set default emacs_library:[etc]
|
||||
$ on error then goto done
|
||||
$ if f$search("emacs_library:[etc]make-docfile.exe") .nes. "" then goto version44
|
||||
$ doit := $emacs_library:[etc]make_docfile
|
||||
$ rest = "[lisp]lisp_mode.elc [lisp]text_mode.elc [lisp]c_mode.elc [lisp]buff_menu.elc [lisp]vms_patch.elc"
|
||||
$ goto doit
|
||||
$version44:
|
||||
$ doit := $emacs_library:[etc]make-docfile
|
||||
$ rest = "[lisp]lisp-mode.elc [lisp]text-mode.elc [lisp]c-mode.elc [lisp]buff-menu.elc [lisp]vms-patch.elc"
|
||||
$
|
||||
$doit:
|
||||
$ set default emacs_library:[000000]
|
||||
$ doit -o [etc]DOC
|
||||
$ doit := 'doit' -a [etc]DOC
|
||||
$ doit [src]dispnew.c [src]scroll.c
|
||||
$ doit [src]xdisp.c [src]window.c [src]term.c [src]cm.c
|
||||
$ doit [src]emacs.c [src]keyboard.c [src]macros.c
|
||||
$ doit [src]keymap.c [src]sysdep.c [src]buffer.c
|
||||
$ doit [src]filelock.c [src]insdel.c [src]marker.c
|
||||
$ doit [src]minibuf.c [src]fileio.c [src]dired.c
|
||||
$ doit [src]filemode.c [src]cmds.c [src]casefiddle.c
|
||||
$ doit [src]indent.c [src]search.c [src]regex.c
|
||||
$ doit [src]undo.c [src]alloc.c [src]data.c [src]doc.c
|
||||
$ doit [src]editfns.c [src]callint.c [src]eval.c
|
||||
$ doit [src]fns.c [src]print.c [src]lread.c [src]abbrev.c
|
||||
$ doit [src]syntax.c [src]mocklisp.c
|
||||
$ doit [src]bytecode.c [src]process.c [src]callproc.c [src]doprnt.c
|
||||
$ doit [src]vmsfns.c
|
||||
$
|
||||
$ doit [lisp]simple.elc [lisp]help.elc
|
||||
$ doit [lisp]files.elc [lisp]window.elc
|
||||
$ doit [lisp]indent.elc [lisp]loaddefs.el
|
||||
$ doit [lisp]paths.el [lisp]startup.elc
|
||||
$ doit [lisp]lisp.elc [lisp]page.elc
|
||||
$ doit [lisp]register.elc [lisp]paragraphs.elc
|
||||
$ doit [lisp]fill.elc [lisp]isearch.elc
|
||||
$ doit [lisp]replace.elc [lisp]abbrev.elc
|
||||
$ doit [lisp]subr.elc [lisp]vmsproc.elc
|
||||
$ doit 'rest'
|
||||
$
|
||||
$done:
|
||||
$ set default 'old'
|
||||
|
|
@ -18,6 +18,18 @@ You should have received a copy of the GNU General Public License
|
|||
along with GNU Emacs; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
/* Important notice: defining MAIL_USE_FLOCK *will cause loss of mail*
|
||||
if you do it on a system that does not normally use flock as its way of
|
||||
interlocking access to inbox files. The setting of MAIL_USE_FLOCK
|
||||
*must agree* with the system's own conventions.
|
||||
It is not a choice that is up to you.
|
||||
|
||||
So, if your system uses lock files rather than flock, then the only way
|
||||
you can get proper operation is to enable movemail to write lockfiles there.
|
||||
This means you must either give that directory access modes
|
||||
that permit everyone to write lockfiles in it, or you must make movemail
|
||||
a setuid or setgid program. */
|
||||
|
||||
/*
|
||||
* Modified January, 1986 by Michael R. Gretzinger (Project Athena)
|
||||
*
|
||||
|
|
@ -29,7 +41,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
*
|
||||
* New module: popmail.c
|
||||
* Modified routines:
|
||||
* main - added code within #ifdef MAIL_USE_POP; added setuid(getuid())
|
||||
* main - added code within #ifdef MAIL_USE_POP; added setuid (getuid ())
|
||||
* after POP code.
|
||||
* New routines in movemail.c:
|
||||
* get_errmsg - return pointer to system error message
|
||||
|
|
@ -88,7 +100,7 @@ main (argc, argv)
|
|||
long now;
|
||||
int tem;
|
||||
char *lockname, *p;
|
||||
char tempname[40];
|
||||
char *tempname;
|
||||
int desc;
|
||||
#endif /* not MAIL_USE_FLOCK */
|
||||
|
||||
|
|
@ -133,7 +145,7 @@ main (argc, argv)
|
|||
exit (status);
|
||||
}
|
||||
|
||||
setuid (getuid());
|
||||
setuid (getuid ());
|
||||
#endif /* MAIL_USE_POP */
|
||||
|
||||
/* Check access to input file. */
|
||||
|
|
@ -144,7 +156,29 @@ main (argc, argv)
|
|||
#ifndef MAIL_USE_FLOCK
|
||||
/* Use a lock file named /usr/spool/mail/$USER.lock:
|
||||
If it exists, the mail file is locked. */
|
||||
/* Note: this locking mechanism is *required* by the mailer
|
||||
(on systems which use it) to prevent loss of mail.
|
||||
|
||||
On systems that use a lock file, extracting the mail without locking
|
||||
WILL occasionally cause loss of mail due to timing errors!
|
||||
|
||||
So, if creation of the lock file fails
|
||||
due to access permission on /usr/spool/mail,
|
||||
you simply MUST change the permission
|
||||
and/or make movemail a setgid program
|
||||
so it can create lock files properly.
|
||||
|
||||
You might also wish to verify that your system is one
|
||||
which uses lock files for this purpose. Some systems use other methods.
|
||||
|
||||
If your system uses the `flock' system call for mail locking,
|
||||
define MAIL_USE_FLOCK in config.h or the s-*.h file
|
||||
and recompile movemail. If the s- file for your system
|
||||
should define MAIL_USE_FLOCK but does not, send a bug report
|
||||
to bug-gnu-emacs@prep.ai.mit.edu so we can fix it. */
|
||||
|
||||
lockname = concat (inname, ".lock", "");
|
||||
tempname = (char *) xmalloc (strlen (inname) + 20);
|
||||
strcpy (tempname, inname);
|
||||
p = tempname + strlen (tempname);
|
||||
while (p != tempname && p[-1] != '/')
|
||||
|
|
@ -152,7 +186,7 @@ main (argc, argv)
|
|||
*p = 0;
|
||||
strcpy (p, "EXXXXXX");
|
||||
mktemp (tempname);
|
||||
(void) unlink (tempname);
|
||||
unlink (tempname);
|
||||
|
||||
while (1)
|
||||
{
|
||||
|
|
@ -160,11 +194,11 @@ main (argc, argv)
|
|||
/* Give up if cannot do that. */
|
||||
desc = open (tempname, O_WRONLY | O_CREAT, 0666);
|
||||
if (desc < 0)
|
||||
pfatal_with_name (concat ("temporary file \"", tempname, "\""));
|
||||
pfatal_with_name ("lock file--see source file etc/movemail.c");
|
||||
close (desc);
|
||||
|
||||
tem = link (tempname, lockname);
|
||||
(void) unlink (tempname);
|
||||
unlink (tempname);
|
||||
if (tem >= 0)
|
||||
break;
|
||||
sleep (1);
|
||||
|
|
@ -174,7 +208,7 @@ main (argc, argv)
|
|||
{
|
||||
now = time (0);
|
||||
if (st.st_ctime < now - 60)
|
||||
(void) unlink (lockname);
|
||||
unlink (lockname);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -193,7 +227,7 @@ main (argc, argv)
|
|||
if (indesc < 0)
|
||||
pfatal_with_name (inname);
|
||||
|
||||
#if defined(BSD) || defined(XENIX)
|
||||
#if defined (BSD) || defined (XENIX)
|
||||
/* In case movemail is setuid to root, make sure the user can
|
||||
read the output file. */
|
||||
/* This is desirable for all systems
|
||||
|
|
@ -217,7 +251,7 @@ main (argc, argv)
|
|||
if (nread != write (outdesc, buf, nread))
|
||||
{
|
||||
int saved_errno = errno;
|
||||
(void) unlink (outname);
|
||||
unlink (outname);
|
||||
errno = saved_errno;
|
||||
pfatal_with_name (outname);
|
||||
}
|
||||
|
|
@ -226,24 +260,20 @@ main (argc, argv)
|
|||
}
|
||||
|
||||
#ifdef BSD
|
||||
fsync (outdesc);
|
||||
if (fsync (outdesc) < 0)
|
||||
pfatal_and_delete (outname);
|
||||
#endif
|
||||
|
||||
/* Check to make sure no errors before we zap the inbox. */
|
||||
if (close (outdesc) != 0)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
(void) unlink (outname);
|
||||
errno = saved_errno;
|
||||
pfatal_with_name (outname);
|
||||
}
|
||||
pfatal_and_delete (outname);
|
||||
|
||||
#ifdef MAIL_USE_FLOCK
|
||||
#if defined(STRIDE) || defined(XENIX)
|
||||
#if defined (STRIDE) || defined (XENIX)
|
||||
/* Stride, xenix have file locking, but no ftruncate. This mess will do. */
|
||||
(void) close (open (inname, O_CREAT | O_TRUNC | O_RDWR, 0666));
|
||||
close (open (inname, O_CREAT | O_TRUNC | O_RDWR, 0666));
|
||||
#else
|
||||
(void) ftruncate (indesc, 0L);
|
||||
ftruncate (indesc, 0L);
|
||||
#endif /* STRIDE or XENIX */
|
||||
#endif /* MAIL_USE_FLOCK */
|
||||
|
||||
|
|
@ -300,6 +330,22 @@ pfatal_with_name (name)
|
|||
fatal (s, name);
|
||||
}
|
||||
|
||||
pfatal_and_delete (name)
|
||||
char *name;
|
||||
{
|
||||
extern int errno, sys_nerr;
|
||||
extern char *sys_errlist[];
|
||||
char *s;
|
||||
|
||||
if (errno < sys_nerr)
|
||||
s = concat ("", sys_errlist[errno], " for %s");
|
||||
else
|
||||
s = "cannot open %s";
|
||||
|
||||
unlink (name);
|
||||
fatal (s, name);
|
||||
}
|
||||
|
||||
/* Return a newly-allocated string whose contents concatenate those of s1, s2, s3. */
|
||||
|
||||
char *
|
||||
|
|
@ -337,6 +383,7 @@ xmalloc (size)
|
|||
#include <netinet/in.h>
|
||||
#include <netdb.h>
|
||||
#include <stdio.h>
|
||||
#include <pwd.h>
|
||||
|
||||
#ifdef USG
|
||||
#include <fcntl.h>
|
||||
|
|
@ -372,6 +419,9 @@ popmail (user, outfile)
|
|||
register int i;
|
||||
int mbfi;
|
||||
FILE *mbf;
|
||||
struct passwd *pw = (struct passwd *) getpwuid (getuid ());
|
||||
if (pw == NULL)
|
||||
fatal ("cannot determine user name");
|
||||
|
||||
host = getenv ("MAILHOST");
|
||||
if (host == NULL)
|
||||
|
|
@ -381,29 +431,25 @@ popmail (user, outfile)
|
|||
|
||||
if (pop_init (host) == NOTOK)
|
||||
{
|
||||
error (Errmsg);
|
||||
return 1;
|
||||
fatal (Errmsg);
|
||||
}
|
||||
|
||||
if (getline (response, sizeof response, sfi) != OK)
|
||||
{
|
||||
error (response);
|
||||
return 1;
|
||||
fatal (response);
|
||||
}
|
||||
|
||||
if (pop_command ("USER %s", user) == NOTOK
|
||||
|| pop_command ("RPOP %s", user) == NOTOK)
|
||||
if (pop_command ("USER %s", user) == NOTOK
|
||||
|| pop_command ("RPOP %s", pw->pw_name) == NOTOK)
|
||||
{
|
||||
error (Errmsg);
|
||||
pop_command ("QUIT");
|
||||
return 1;
|
||||
fatal (Errmsg);
|
||||
}
|
||||
|
||||
if (pop_stat (&nmsgs, &nbytes) == NOTOK)
|
||||
{
|
||||
error (Errmsg);
|
||||
pop_command ("QUIT");
|
||||
return 1;
|
||||
fatal (Errmsg);
|
||||
}
|
||||
|
||||
if (!nmsgs)
|
||||
|
|
@ -416,18 +462,14 @@ popmail (user, outfile)
|
|||
if (mbfi < 0)
|
||||
{
|
||||
pop_command ("QUIT");
|
||||
error ("Error in open: %s, %s", get_errmsg (), outfile);
|
||||
return 1;
|
||||
pfatal_and_delete (outfile);
|
||||
}
|
||||
fchown (mbfi, getuid (), -1);
|
||||
|
||||
if ((mbf = fdopen (mbfi, "w")) == NULL)
|
||||
{
|
||||
pop_command ("QUIT");
|
||||
error ("Error in fdopen: %s", get_errmsg ());
|
||||
close (mbfi);
|
||||
unlink (outfile);
|
||||
return 1;
|
||||
pfatal_and_delete (outfile);
|
||||
}
|
||||
|
||||
for (i = 1; i <= nmsgs; i++)
|
||||
|
|
@ -435,29 +477,37 @@ popmail (user, outfile)
|
|||
mbx_delimit_begin (mbf);
|
||||
if (pop_retr (i, mbx_write, mbf) != OK)
|
||||
{
|
||||
error (Errmsg);
|
||||
pop_command ("QUIT");
|
||||
close (mbfi);
|
||||
return 1;
|
||||
unlink (outfile);
|
||||
fatal (Errmsg);
|
||||
}
|
||||
mbx_delimit_end (mbf);
|
||||
fflush (mbf);
|
||||
}
|
||||
|
||||
if (fsync (mbfi) < 0)
|
||||
{
|
||||
pop_command ("QUIT");
|
||||
pfatal_and_delete (outfile);
|
||||
}
|
||||
|
||||
if (close (mbfi) == -1)
|
||||
{
|
||||
pop_command ("QUIT");
|
||||
pfatal_and_delete (outfile);
|
||||
}
|
||||
|
||||
for (i = 1; i <= nmsgs; i++)
|
||||
{
|
||||
if (pop_command ("DELE %d", i) == NOTOK)
|
||||
{
|
||||
error (Errmsg);
|
||||
pop_command ("QUIT");
|
||||
close (mbfi);
|
||||
return 1;
|
||||
/* Better to ignore this failure. */
|
||||
}
|
||||
}
|
||||
|
||||
pop_command ("QUIT");
|
||||
close (mbfi);
|
||||
return 0;
|
||||
return (0);
|
||||
}
|
||||
|
||||
pop_init (host)
|
||||
|
|
@ -529,7 +579,8 @@ pop_command (fmt, a, b, c, d)
|
|||
return NOTOK;
|
||||
}
|
||||
|
||||
if (debug) fprintf (stderr, "<--- %s\n", buf);
|
||||
if (debug)
|
||||
fprintf (stderr, "<--- %s\n", buf);
|
||||
if (*buf != '+')
|
||||
{
|
||||
strcpy (Errmsg, buf);
|
||||
|
|
@ -547,8 +598,10 @@ pop_stat (nmsgs, nbytes)
|
|||
{
|
||||
char buf[128];
|
||||
|
||||
if (debug) fprintf (stderr, "---> STAT\n");
|
||||
if (putline ("STAT", Errmsg, sfo) == NOTOK) return NOTOK;
|
||||
if (debug)
|
||||
fprintf (stderr, "---> STAT\n");
|
||||
if (putline ("STAT", Errmsg, sfo) == NOTOK)
|
||||
return NOTOK;
|
||||
|
||||
if (getline (buf, sizeof buf, sfi) != OK)
|
||||
{
|
||||
|
|
@ -635,17 +688,14 @@ multiline (buf, n, f)
|
|||
register int n;
|
||||
FILE *f;
|
||||
{
|
||||
if (getline (buf, n, f) != OK) return NOTOK;
|
||||
if (getline (buf, n, f) != OK)
|
||||
return NOTOK;
|
||||
if (*buf == '.')
|
||||
{
|
||||
if (*(buf+1) == NULL)
|
||||
{
|
||||
return DONE;
|
||||
}
|
||||
return DONE;
|
||||
else
|
||||
{
|
||||
strcpy (buf, buf+1);
|
||||
}
|
||||
strcpy (buf, buf+1);
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
167
etc/ms-kermit
Normal file
167
etc/ms-kermit
Normal file
|
|
@ -0,0 +1,167 @@
|
|||
;;; This file is designed for an 8-bit connection.
|
||||
;;; Use the file ms-kermit-7bit if you have a 7-bit connection.
|
||||
|
||||
;; Meta key mappings for EMACS
|
||||
;; By Robert Earl (rearl@watnxt3.ucr.edu)
|
||||
;; May 13, 1990
|
||||
;;
|
||||
;; WARNING:
|
||||
;; requires an 8-bit path to host. many dialups and lans won't pass the
|
||||
;; eighth bit by default and may require a special command to turn this
|
||||
;; off. `screen' is known to mask the eighth bit of input as well.
|
||||
|
||||
set term controls 8-bit
|
||||
set translation key off
|
||||
|
||||
;; control keys
|
||||
set key \3449 \128 ;; m-c-@
|
||||
set key \3358 \129 ;; m-c-a
|
||||
set key \3376 \130 ;; m-c-b
|
||||
set key \3374 \131 ;; m-c-c
|
||||
set key \3360 \132 ;; m-c-d
|
||||
set key \3346 \133 ;; m-c-e
|
||||
set key \3361 \134 ;; m-c-f
|
||||
set key \3362 \135 ;; m-c-g
|
||||
set key \3342 \136 ;; m-bs
|
||||
set key \3363 \136 ;; m-c-h (sends same code as above)
|
||||
set key \2469 \137 ;; m-tab
|
||||
set key \3351 \137 ;; m-c-i (same as above)
|
||||
set key \3364 \138 ;; m-c-j
|
||||
set key \3365 \139 ;; m-c-k
|
||||
set key \3366 \140 ;; m-c-l
|
||||
;set key \3378 \141 ;; m-c-m
|
||||
set key \2332 \141 ;; m-ret (sends same code as above)
|
||||
set key \3377 \142 ;; m-c-n
|
||||
set key \3352 \143 ;; m-c-o
|
||||
set key \3353 \144 ;; m-c-p
|
||||
set key \3344 \145 ;; m-c-q
|
||||
set key \3347 \146 ;; m-c-r
|
||||
set key \3359 \147 ;; m-c-s
|
||||
set key \3348 \148 ;; m-c-t
|
||||
set key \3350 \149 ;; m-c-u
|
||||
set key \3375 \150 ;; m-c-v
|
||||
set key \3345 \151 ;; m-c-w
|
||||
set key \3373 \152 ;; m-c-x
|
||||
set key \3349 \153 ;; m-c-y
|
||||
set key \3372 \154 ;; m-c-z
|
||||
|
||||
;; misc keys
|
||||
;set key \3354 \155 ;; m-c-[
|
||||
set key \2305 \155 ;; m-esc (sends same as above)
|
||||
set key \3371 \156 ;; m-c-\
|
||||
set key \3355 \157 ;; m-c-]
|
||||
set key \3453 \158 ;; m-c-^
|
||||
set key \3458 \159 ;; m-c-_
|
||||
|
||||
;; \160 is conspicuously missing here--
|
||||
;; alt-spc doesn't generate a distinct scan code...
|
||||
;; neither do shift-spc and ctrl-spc.
|
||||
;; no idea why.
|
||||
|
||||
set key \2936 \161 ;; m-!
|
||||
set key \2856 \162 ;; m-"
|
||||
set key \2938 \163 ;; m-#
|
||||
set key \2939 \164 ;; m-$
|
||||
set key \2940 \165 ;; m-%
|
||||
set key \2942 \166 ;; m-&
|
||||
set key \2344 \167 ;; m-'
|
||||
set key \2944 \168 ;; m-(
|
||||
set key \2945 \169 ;; m-)
|
||||
set key \2943 \170 ;; m-*
|
||||
set key \2947 \171 ;; m-+
|
||||
set key \2355 \172 ;; m-,
|
||||
set key \2434 \173 ;; m--
|
||||
set key \2356 \174 ;; m-.
|
||||
set key \2357 \175 ;; m-/
|
||||
|
||||
;; number keys
|
||||
set key \2433 \176 ;; m-0
|
||||
set key \2424 \177 ;; m-1
|
||||
set key \2425 \178
|
||||
set key \2426 \179
|
||||
set key \2427 \180
|
||||
set key \2428 \181
|
||||
set key \2429 \182
|
||||
set key \2430 \183
|
||||
set key \2431 \184
|
||||
set key \2432 \185 ;; m-9
|
||||
|
||||
set key \2855 \186 ;; m-:
|
||||
set key \2343 \187 ;; m-;
|
||||
set key \2867 \188 ;; m-<
|
||||
set key \2435 \189 ;; m-=
|
||||
set key \2868 \190 ;; m->
|
||||
set key \2869 \191 ;; m-?
|
||||
set key \2937 \192 ;; m-@
|
||||
|
||||
;; shifted A-Z
|
||||
set key \2846 \193 ;; m-A
|
||||
set key \2864 \194
|
||||
set key \2862 \195
|
||||
set key \2848 \196
|
||||
set key \2834 \197
|
||||
set key \2849 \198
|
||||
set key \2850 \199
|
||||
set key \2851 \200
|
||||
set key \2839 \201
|
||||
set key \2852 \202
|
||||
set key \2853 \203
|
||||
set key \2854 \204
|
||||
set key \2866 \205
|
||||
set key \2865 \206
|
||||
set key \2840 \207
|
||||
set key \2841 \208
|
||||
set key \2832 \209
|
||||
set key \2835 \210
|
||||
set key \2847 \211
|
||||
set key \2836 \212
|
||||
set key \2838 \213
|
||||
set key \2863 \214
|
||||
set key \2833 \215
|
||||
set key \2861 \216
|
||||
set key \2837 \217
|
||||
set key \2860 \218 ;; m-Z
|
||||
|
||||
set key \2330 \219 ;; m-[
|
||||
set key \2347 \220 ;; m-\
|
||||
set key \2331 \221 ;; m-]
|
||||
set key \2941 \222 ;; m-^
|
||||
set key \2946 \223 ;; m-_
|
||||
set key \2345 \224 ;; m-`
|
||||
|
||||
;; lowercase a-z
|
||||
set key \2334 \225 ;; m-a
|
||||
set key \2352 \226
|
||||
set key \2350 \227
|
||||
set key \2336 \228
|
||||
set key \2322 \229
|
||||
set key \2337 \230
|
||||
set key \2338 \231
|
||||
set key \2339 \232
|
||||
set key \2327 \233
|
||||
set key \2340 \234
|
||||
set key \2341 \235
|
||||
set key \2342 \236
|
||||
set key \2354 \237
|
||||
set key \2353 \238
|
||||
set key \2328 \239
|
||||
set key \2329 \240
|
||||
set key \2320 \241
|
||||
set key \2323 \242
|
||||
set key \2335 \243
|
||||
set key \2324 \244
|
||||
set key \2326 \245
|
||||
set key \2351 \246
|
||||
set key \2321 \247
|
||||
set key \2349 \248
|
||||
set key \2325 \249
|
||||
set key \2348 \250 ;; m-z
|
||||
|
||||
;; more shifted misc. keys
|
||||
set key \2842 \251 ;; m-{
|
||||
set key \2859 \252 ;; m-|
|
||||
set key \2843 \253 ;; m-}
|
||||
set key \2857 \254 ;; m-~
|
||||
set key \2318 \255 ;; m-del
|
||||
|
||||
|
||||
312
etc/ms-kermit-7bit
Normal file
312
etc/ms-kermit-7bit
Normal file
|
|
@ -0,0 +1,312 @@
|
|||
;;; This file is designed for 7-bit connections.
|
||||
;;; Use the file ms-kermit if you have an 8-bit connection.
|
||||
|
||||
;;; This kermit script maps the IBM-PC keyboard for use with Gnu Emacs.
|
||||
;;; The ALT key is used to generate Meta characters and, in conjunction
|
||||
;;; with the CTRL key, Control-Meta characters. A few other useful
|
||||
;;; mappings are also performed.
|
||||
;;; Andy Lowry, May 1989
|
||||
|
||||
;;; Exchange ESC and backquote... tilde stays put (shift-backquote)
|
||||
set key \27 `
|
||||
set key ` \27
|
||||
|
||||
;;; BACKSPACE deletes backward one character
|
||||
set key scan \270 \127
|
||||
|
||||
;;; The following mappings affect certain special keys... all the keys
|
||||
;;; are duplicated on the numeric keypad when NUM LOCK is off, but
|
||||
;;; the keypad versions are NOT mapped (string definition space too small
|
||||
;;; for that)
|
||||
|
||||
;;; INSERT toggles overwrite mode
|
||||
set key scan \4434 \27xoverwrite-mode\13
|
||||
;;; HOME moves point to beginning of buffer
|
||||
set key scan \4423 \27<
|
||||
;;; PAGE-UP scrolls backward one screen
|
||||
set key scan \4425 \27v
|
||||
;;; DELETE deletes one character *forward*
|
||||
set key scan \4435 \4
|
||||
;;; END moves point to end of buffer
|
||||
set key scan \4431 \27>
|
||||
;;; PAGE-DOWN scrolls forward one screen
|
||||
set key scan \4433 \22
|
||||
;;; ARROW keys move in the appropriate directions
|
||||
set key scan \4424 \16
|
||||
set key scan \4427 \2
|
||||
set key scan \4432 \14
|
||||
set key scan \4429 \6
|
||||
|
||||
;;; META versions of all the printing characters except uppercase
|
||||
;;; letters are generated by using the ALT key. The definition string
|
||||
;;; consists of an ESC character followed by the META-ized character.
|
||||
;;; The characters are listed roughly left-to-right and top-to-bottom
|
||||
;;; as they appear on the keyboard
|
||||
set key scan \2345 \27`
|
||||
set key scan \2424 \27\o61 ; need to use char code, since digit
|
||||
set key scan \2425 \27\o62 ; would not terminate '\27'
|
||||
set key scan \2426 \27\o63
|
||||
set key scan \2427 \27\o64
|
||||
set key scan \2428 \27\o65
|
||||
set key scan \2429 \27\o66
|
||||
set key scan \2430 \27\o67
|
||||
set key scan \2431 \27\o70
|
||||
set key scan \2432 \27\o71
|
||||
set key scan \2433 \27\o60
|
||||
set key scan \2434 \27\45
|
||||
set key scan \2435 \27=
|
||||
set key scan \2857 \27~
|
||||
set key scan \2936 \27!
|
||||
set key scan \2937 \27@
|
||||
set key scan \2938 \27#
|
||||
set key scan \2939 \27$
|
||||
set key scan \2940 \27%
|
||||
set key scan \2941 \27^
|
||||
set key scan \2942 \27&
|
||||
set key scan \2943 \27*
|
||||
set key scan \2944 \27(
|
||||
set key scan \2945 \27)
|
||||
set key scan \2946 \27_
|
||||
set key scan \2947 \27+
|
||||
set key scan \2469 \27\9
|
||||
set key scan \2320 \27q
|
||||
set key scan \2321 \27w
|
||||
set key scan \2322 \27e
|
||||
set key scan \2323 \27r
|
||||
set key scan \2324 \27t
|
||||
set key scan \2325 \27y
|
||||
set key scan \2326 \27u
|
||||
set key scan \2327 \27i
|
||||
set key scan \2328 \27o
|
||||
set key scan \2329 \27p
|
||||
set key scan \2330 \27[
|
||||
set key scan \2842 \27{
|
||||
set key scan \2331 \27]
|
||||
set key scan \2843 \27}
|
||||
set key scan \2347 \27\
|
||||
set key scan \2859 \27|
|
||||
set key scan \2334 \27a
|
||||
set key scan \2335 \27s
|
||||
set key scan \2336 \27d
|
||||
set key scan \2337 \27f
|
||||
set key scan \2338 \27g
|
||||
set key scan \2339 \27h
|
||||
set key scan \2340 \27j
|
||||
set key scan \2341 \27k
|
||||
set key scan \2342 \27l
|
||||
set key scan \2343 \27\59
|
||||
set key scan \2855 \27:
|
||||
set key scan \2344 \27'
|
||||
set key scan \2856 \27"
|
||||
set key scan \2348 \27z
|
||||
set key scan \2349 \27x
|
||||
set key scan \2350 \27c
|
||||
set key scan \2351 \27v
|
||||
set key scan \2352 \27b
|
||||
set key scan \2353 \27n
|
||||
set key scan \2354 \27m
|
||||
set key scan \2355 \27,
|
||||
set key scan \2867 \27<
|
||||
set key scan \2356 \27.
|
||||
set key scan \2868 \27>
|
||||
set key scan \2357 \27/
|
||||
set key scan \2869 \27?
|
||||
|
||||
;;; CONTROL-META characters are generated by using both the CTRL and
|
||||
;;; ALT keys simultaneously. All the lowercase letters are included.
|
||||
;;; The definition string consists of an ESC character followed by
|
||||
;;; the control character corresponding to the letter.
|
||||
set key scan \3344 \27\17
|
||||
set key scan \3345 \27\23
|
||||
set key scan \3346 \27\5
|
||||
set key scan \3347 \27\18
|
||||
set key scan \3348 \27\20
|
||||
set key scan \3349 \27\25
|
||||
set key scan \3350 \27\21
|
||||
set key scan \3351 \27\9
|
||||
set key scan \3352 \27\15
|
||||
set key scan \3353 \27\16
|
||||
set key scan \3358 \27\1
|
||||
set key scan \3359 \27\19
|
||||
set key scan \3360 \27\4
|
||||
set key scan \3361 \27\6
|
||||
set key scan \3362 \27\7
|
||||
set key scan \3363 \27\8
|
||||
set key scan \3364 \27\10
|
||||
set key scan \3365 \27\11
|
||||
set key scan \3366 \27\12
|
||||
set key scan \3372 \27\26
|
||||
set key scan \3373 \27\24
|
||||
set key scan \3374 \27\3
|
||||
set key scan \3375 \27\22
|
||||
set key scan \3376 \27\2
|
||||
set key scan \3377 \27\14
|
||||
set key scan \3378 \27\13
|
||||
|
||||
end of msiem2.ini
|
||||
------------------
|
||||
|
||||
msiema.hlp
|
||||
-----------
|
||||
Date: Wed, 14 Sep 88 05:20:08 GMT
|
||||
From: spolsky@YALE.ARPA
|
||||
Subject: Using MS kermit 2.31 with emacs
|
||||
Keywords: MS-DOS Kermit 2.31, EMACS, Meta Key
|
||||
|
||||
If you are using kermit (version 2.31 only) with emacs on a mainframe, the
|
||||
following file may help you. It assigns all the Alt-keys so that the Alt key
|
||||
may be used as a "Meta" shift, e.g. Alt-x produces M-x, etc. Note that it
|
||||
will distinguish correctly between upper and lower case and accepts all
|
||||
printables. (If anybody has the patience to do the Meta-Ctrl combinations,
|
||||
please post them!) This actually sends "escapes" so you don't need 8 bits.
|
||||
This file also sets up the cursor keys to behave as expected.
|
||||
|
||||
On extended keyboards (the ones with a separate cursor pad, like PS/2s) you
|
||||
also get assignments for Page Up/Down, Home, End, Insert, Delete, etc.
|
||||
|
||||
Please let me know if you find any problems with this.
|
||||
|
||||
Joel Spolsky bitnet: spolsky@yalecs uucp: ...!yale!spolsky
|
||||
Yale University arpa: spolsky@yale.edu voicenet: 203-436-1483
|
||||
|
||||
[Ed. - Thanks, Joel! Your key definitions file has been put in the kermit
|
||||
distribution area as msiema.ini ("ms" for MS-Kermit, "i" because it's an
|
||||
initialization file, "ema" for EMACS), along with this message as msiema.hlp.]
|
||||
|
||||
end of msiema.hlp
|
||||
-----------------
|
||||
|
||||
|
||||
msiema.ini
|
||||
------------
|
||||
; Emacs keyboard layout for Kermit 2.31
|
||||
; by Joel Spolsky, Yale Univ. Save this in a file, then
|
||||
; initialize it by issuing the kermit command
|
||||
; take filename
|
||||
; It will set up the keyboard to allow ALT to be used
|
||||
; as a meta-key, and will allow cursor keys to be used
|
||||
; with emacs.
|
||||
|
||||
; First, define all the ALT keys to send ESC+key
|
||||
; to simulate "meta"
|
||||
|
||||
set key \2320 \27q ;; letters: unshifted
|
||||
set key \2321 \27w
|
||||
set key \2322 \27e
|
||||
set key \2323 \27r
|
||||
set key \2324 \27t
|
||||
set key \2325 \27y
|
||||
set key \2326 \27u
|
||||
set key \2327 \27i
|
||||
set key \2328 \27o
|
||||
set key \2329 \27p
|
||||
set key \2334 \27a
|
||||
set key \2335 \27s
|
||||
set key \2336 \27d
|
||||
set key \2337 \27f
|
||||
set key \2338 \27g
|
||||
set key \2339 \27h
|
||||
set key \2340 \27j
|
||||
set key \2341 \27k
|
||||
set key \2342 \27l
|
||||
set key \2348 \27z
|
||||
set key \2349 \27x
|
||||
set key \2350 \27c
|
||||
set key \2351 \27v
|
||||
set key \2352 \27b
|
||||
set key \2353 \27n
|
||||
set key \2354 \27m
|
||||
set key \2832 \27Q ;; letters: shifted
|
||||
set key \2833 \27W
|
||||
set key \2834 \27E
|
||||
set key \2835 \27R
|
||||
set key \2836 \27T
|
||||
set key \2837 \27Y
|
||||
set key \2838 \27U
|
||||
set key \2839 \27I
|
||||
set key \2840 \27O
|
||||
set key \2841 \27P
|
||||
set key \2846 \27A
|
||||
set key \2847 \27S
|
||||
set key \2848 \27D
|
||||
set key \2849 \27F
|
||||
set key \2850 \27G
|
||||
set key \2851 \27H
|
||||
set key \2852 \27J
|
||||
set key \2853 \27K
|
||||
set key \2854 \27L
|
||||
set key \2860 \27Z
|
||||
set key \2861 \27X
|
||||
set key \2862 \27C
|
||||
set key \2863 \27V
|
||||
set key \2864 \27B
|
||||
set key \2865 \27N
|
||||
set key \2866 \27M
|
||||
set key \2857 \27\126 ; ALT + ~ ;; special symbols begin here
|
||||
set key \2345 \27\96 ; ALT + `
|
||||
set key \2936 \27\33 ; ALT + !
|
||||
set key \2937 \27\64 ; ALT + @
|
||||
set key \2938 \27\35 ; ALT + #
|
||||
set key \2939 \27\36 ; ALT + $
|
||||
set key \2940 \27\37 ; ALT + %
|
||||
set key \2941 \27\94 ; ALT + ^
|
||||
set key \2942 \27\38 ; ALT + &
|
||||
set key \2943 \27\42 ; ALT + *
|
||||
set key \2944 \27\40 ; ALT + (
|
||||
set key \2945 \27\41 ; ALT + )
|
||||
set key \2946 \27\95 ; ALT + _
|
||||
set key \2947 \27\43 ; ALT + +
|
||||
set key \2842 \27\123 ; ALT + {
|
||||
set key \2843 \27\125 ; ALT + }
|
||||
set key \2330 \27\91 ; ALT + [
|
||||
set key \2331 \27\93 ; ALT + ]
|
||||
set key \2859 \27\124 ; ALT + :
|
||||
set key \2347 \27\92 ; ALT + \
|
||||
set key \2867 \27< ; ALT + <
|
||||
set key \2868 \27> ; ALT + >
|
||||
set key \2343 \27\59 ; ALT + ;
|
||||
set key \2855 \27\58 ; ALT + :
|
||||
set key \2344 \27\39 ; ALT + '
|
||||
set key \2856 \27\34 ; ALT + "
|
||||
set key \2355 \27\44 ; ALT + ,
|
||||
set key \2356 \27\46 ; ALT + .
|
||||
set key \2357 \27\47 ; ALT + /
|
||||
set key \2869 \27\63 ; ALT + ?
|
||||
set key \2424 \27\49 ;; numbers
|
||||
set key \2425 \27\50
|
||||
set key \2426 \27\51
|
||||
set key \2427 \27\52
|
||||
set key \2428 \27\53
|
||||
set key \2429 \27\54
|
||||
set key \2430 \27\55
|
||||
set key \2431 \27\56
|
||||
set key \2432 \27\57
|
||||
set key \2433 \27\48
|
||||
|
||||
;; These 6 special keys for extended (PS/2) keyboards:
|
||||
set key \4434 \25 ;; Insert is like ^Y - yank from kill ring
|
||||
set key \4435 \23 ;; Delete is like ^W - kill to ring
|
||||
set key \4423 \1 ;; Home is ^A
|
||||
set key \4431 \5 ;; End is ^E
|
||||
set key \4425 \27V ;; Page up is Esc-V
|
||||
set key \4433 \22 ;; Page dn is ^v
|
||||
|
||||
set key \328 \16 ;; up cursor is ^P
|
||||
set key \331 \2 ;; left cursor is ^B
|
||||
set key \333 \6 ;; right cursor is ^F
|
||||
set key \336 \14 ;; down cursor is ^N
|
||||
set key \4427 \2 ;; left cursor on extended kbd
|
||||
set key \4432 \14 ;; down cursor on extended kbd
|
||||
set key \4424 \16 ;; up cursor on extended kbd
|
||||
set key \4429 \6 ;; right cursor on extended kbd
|
||||
|
||||
set key \5491 \27b ;; ctrl-left cursor is M-b
|
||||
set key \5492 \27f ;; ctrl-right cursor is M-f
|
||||
|
||||
;; move kermit's screen scroll (playback) features to Alt- Home,End,PgUp,PgDn
|
||||
;; (this is an issue for extended keyboards only)
|
||||
|
||||
set key \2455 \khomscn
|
||||
set key \2463 \kendscn
|
||||
set key \2457 \kupscn
|
||||
set key \2465 \kdnscn
|
||||
226
etc/qsort.c
Normal file
226
etc/qsort.c
Normal file
|
|
@ -0,0 +1,226 @@
|
|||
/*
|
||||
* qsort.c:
|
||||
* Our own version of the system qsort routine which is faster by an average
|
||||
* of 25%, with lows and highs of 10% and 50%.
|
||||
* The THRESHold below is the insertion sort threshold, and has been adjusted
|
||||
* for records of size 48 bytes.
|
||||
* The MTHREShold is where we stop finding a better median.
|
||||
*/
|
||||
|
||||
#define THRESH 4 /* threshold for insertion */
|
||||
|
||||
#define MTHRESH 6 /* threshold for median */
|
||||
|
||||
|
||||
|
||||
static int qsz; /* size of each record */
|
||||
static int (*qcmp)(); /* the comparison routine */
|
||||
|
||||
static int thresh; /* THRESHold in chars */
|
||||
static int mthresh; /* MTHRESHold in chars */
|
||||
|
||||
/*
|
||||
* qsort:
|
||||
* First, set up some global parameters for qst to share. Then, quicksort
|
||||
* with qst(), and then a cleanup insertion sort ourselves. Sound simple?
|
||||
* It's not...
|
||||
*/
|
||||
qsort (base, n, size, compar)
|
||||
char *base;
|
||||
int n;
|
||||
int size;
|
||||
int (*compar)();
|
||||
{
|
||||
register char *i, *j, *lo, *hi, *min;
|
||||
register int c;
|
||||
char *max;
|
||||
|
||||
if (n <= 1) return;
|
||||
qsz = size;
|
||||
qcmp = compar;
|
||||
thresh = qsz*THRESH;
|
||||
mthresh = qsz*MTHRESH;
|
||||
max = base + n*qsz;
|
||||
if (n >= THRESH)
|
||||
{
|
||||
qst (base, max);
|
||||
hi = base + thresh;
|
||||
}
|
||||
else
|
||||
{
|
||||
hi = max;
|
||||
}
|
||||
/*
|
||||
* First put smallest element, which must be in the first THRESH, in
|
||||
* the first position as a sentinel. This is done just by searching
|
||||
* the first THRESH elements (or the first n if n < THRESH), finding
|
||||
* the min, and swapping it into the first position.
|
||||
*/
|
||||
for (j = lo = base; (lo += qsz) < hi; )
|
||||
{
|
||||
if ((*qcmp) (j, lo) > 0)
|
||||
j = lo;
|
||||
}
|
||||
if (j != base)
|
||||
{ /* swap j into place */
|
||||
for (i = base, hi = base + qsz; i < hi;)
|
||||
{
|
||||
c = *j;
|
||||
*j++ = *i;
|
||||
*i++ = c;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* With our sentinel in place, we now run the following hyper-fast
|
||||
* insertion sort. For each remaining element, min, from [1] to [n-1],
|
||||
* set hi to the index of the element AFTER which this one goes.
|
||||
* Then, do the standard insertion sort shift on a character at a time
|
||||
* basis for each element in the frob.
|
||||
*/
|
||||
for (min = base; (hi = min += qsz) < max;)
|
||||
{
|
||||
while ( (*qcmp) (hi -= qsz, min) > 0);
|
||||
if ((hi += qsz) != min)
|
||||
{
|
||||
for (lo = min + qsz; --lo >= min;)
|
||||
{
|
||||
c = *lo;
|
||||
for (i = j = lo; (j -= qsz) >= hi; i = j)
|
||||
*i = *j;
|
||||
*i = c;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* qst:
|
||||
* Do a quicksort
|
||||
* First, find the median element, and put that one in the first place as the
|
||||
* discriminator. (This "median" is just the median of the first, last and
|
||||
* middle elements). (Using this median instead of the first element is a big
|
||||
* win). Then, the usual partitioning/swapping, followed by moving the
|
||||
* discriminator into the right place. Then, figure out the sizes of the two
|
||||
* partions, do the smaller one recursively and the larger one via a repeat of
|
||||
* this code. Stopping when there are less than THRESH elements in a partition
|
||||
* and cleaning up with an insertion sort (in our caller) is a huge win.
|
||||
* All data swaps are done in-line, which is space-losing but time-saving.
|
||||
* (And there are only three places where this is done).
|
||||
*/
|
||||
|
||||
qst (base, max)
|
||||
char *base, *max;
|
||||
{
|
||||
register char *i, *j, *jj, *mid;
|
||||
register int ii, c;
|
||||
char *tmp;
|
||||
int lo, hi;
|
||||
|
||||
lo = max - base; /* number of elements as chars */
|
||||
do
|
||||
{
|
||||
/*
|
||||
* At the top here, lo is the number of characters of elements in the
|
||||
* current partition. (Which should be max - base).
|
||||
* Find the median of the first, last, and middle element and make that the
|
||||
* middle element. Set j to largest of first and middle. If max is larger
|
||||
* than that guy, then it's that guy, else compare max with loser of first
|
||||
* and take larger. Things are set up to prefer the middle, then the first
|
||||
* in case of ties.
|
||||
*/
|
||||
mid = i = base + qsz * ((lo/qsz) >> 1);
|
||||
if (lo >= mthresh)
|
||||
{
|
||||
j = ((*qcmp) ((jj = base), i) > 0 ? jj : i);
|
||||
if ((*qcmp) (j, (tmp = max - qsz)) > 0)
|
||||
{
|
||||
j = (j == jj ? i : jj); /* switch to first loser */
|
||||
if ((*qcmp) (j, tmp) < 0)
|
||||
j = tmp;
|
||||
}
|
||||
if (j != i)
|
||||
{
|
||||
ii = qsz;
|
||||
do
|
||||
{
|
||||
c = *i;
|
||||
*i++ = *j;
|
||||
*j++ = c;
|
||||
}
|
||||
while( --ii );
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Semi-standard quicksort partitioning/swapping
|
||||
*/
|
||||
for (i = base, j = max - qsz; ;)
|
||||
{
|
||||
while (i < mid && (*qcmp) (i, mid) <= 0)
|
||||
i += qsz;
|
||||
while (j > mid)
|
||||
{
|
||||
if ((*qcmp) (mid, j) <= 0)
|
||||
{
|
||||
j -= qsz;
|
||||
continue;
|
||||
}
|
||||
tmp = i + qsz; /* value of i after swap */
|
||||
if (i == mid)
|
||||
{ /* j <-> mid, new mid is j */
|
||||
mid = jj = j;
|
||||
}
|
||||
else
|
||||
{ /* i <-> j */
|
||||
jj = j;
|
||||
j -= qsz;
|
||||
}
|
||||
goto swap;
|
||||
}
|
||||
if (i == mid)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{ /* i <-> mid, new mid is i */
|
||||
jj = mid;
|
||||
tmp = mid = i; /* value of i after swap */
|
||||
j -= qsz;
|
||||
}
|
||||
swap:
|
||||
ii = qsz;
|
||||
do
|
||||
{
|
||||
c = *i;
|
||||
*i++ = *jj;
|
||||
*jj++ = c;
|
||||
}
|
||||
while (--ii);
|
||||
i = tmp;
|
||||
}
|
||||
/*
|
||||
* Look at sizes of the two partitions, do the smaller one first by
|
||||
* recursion, then do the larger one by making sure lo is its size,
|
||||
* base and max are update correctly, and branching back.
|
||||
* But only repeat (recursively or by branching) if the partition is
|
||||
* of at least size THRESH.
|
||||
*/
|
||||
i = (j = mid) + qsz;
|
||||
if ((lo = j - base) <= (hi = max - i))
|
||||
{
|
||||
if (lo >= thresh)
|
||||
qst (base, j);
|
||||
base = i;
|
||||
lo = hi;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (hi >= thresh)
|
||||
qst (i, max);
|
||||
max = j;
|
||||
}
|
||||
}
|
||||
while (lo >= thresh);
|
||||
}
|
||||
|
||||
|
||||
|
||||
627
etc/refcard.tex
Normal file
627
etc/refcard.tex
Normal file
|
|
@ -0,0 +1,627 @@
|
|||
% Reference Card for GNU Emacs version 18 on Unix systems
|
||||
%**start of header
|
||||
\newcount\columnsperpage
|
||||
|
||||
% This file can be printed with 1, 2, or 3 columns per page (see below).
|
||||
% Specify how many you want here. Nothing else needs to be changed.
|
||||
|
||||
\columnsperpage=1
|
||||
|
||||
% Copyright (c) 1987 Free Software Foundation, Inc.
|
||||
|
||||
% This file is part of GNU Emacs.
|
||||
|
||||
% GNU Emacs is free software; you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation; either version 1, or (at your option)
|
||||
% any later version.
|
||||
|
||||
% GNU Emacs is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with GNU Emacs; see the file COPYING. If not, write to
|
||||
% the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
% This file is intended to be processed by plain TeX (TeX82).
|
||||
%
|
||||
% The final reference card has six columns, three on each side.
|
||||
% This file can be used to produce it in any of three ways:
|
||||
% 1 column per page
|
||||
% produces six separate pages, each of which needs to be reduced to 80%.
|
||||
% This gives the best resolution.
|
||||
% 2 columns per page
|
||||
% produces three already-reduced pages.
|
||||
% You will still need to cut and paste.
|
||||
% 3 columns per page
|
||||
% produces two pages which must be printed sideways to make a
|
||||
% ready-to-use 8.5 x 11 inch reference card.
|
||||
% For this you need a dvi device driver that can print sideways.
|
||||
% Which mode to use is controlled by setting \columnsperpage above.
|
||||
%
|
||||
% Author:
|
||||
% Stephen Gildea
|
||||
% UUCP: mit-erl!gildea
|
||||
% Internet: gildea@erl.mit.edu
|
||||
%
|
||||
% Thanks to Paul Rubin, Bob Chassell, Len Tower, and Richard Mlynarik
|
||||
% for their many good ideas.
|
||||
|
||||
% If there were room, it would be nice to see sections on
|
||||
% Abbrevs, Rectangles, and Dired.
|
||||
|
||||
\def\versionnumber{1.9}
|
||||
\def\year{1987}
|
||||
\def\version{March \year\ v\versionnumber}
|
||||
|
||||
\def\shortcopyrightnotice{\vskip 1ex plus 2 fill
|
||||
\centerline{\small \copyright\ \year\ Free Software Foundation, Inc.
|
||||
Permissions on back. v\versionnumber}}
|
||||
|
||||
\def\copyrightnotice{
|
||||
\vskip 1ex plus 2 fill\begingroup\small
|
||||
\centerline{Copyright \copyright\ \year\ Free Software Foundation, Inc.}
|
||||
\centerline{designed by Stephen Gildea, \version}
|
||||
\centerline{for GNU Emacs version 18 on Unix systems}
|
||||
|
||||
Permission is granted to make and distribute copies of
|
||||
this card provided the copyright notice and this permission notice
|
||||
are preserved on all copies.
|
||||
|
||||
For copies of the GNU Emacs manual, write to the Free Software
|
||||
Foundation, Inc., 675 Massachusetts Ave, Cambridge MA 02139.
|
||||
|
||||
\endgroup}
|
||||
|
||||
% make \bye not \outer so that the \def\bye in the \else clause below
|
||||
% can be scanned without complaint.
|
||||
\def\bye{\par\vfill\supereject\end}
|
||||
|
||||
\newdimen\intercolumnskip
|
||||
\newbox\columna
|
||||
\newbox\columnb
|
||||
|
||||
\def\ncolumns{\the\columnsperpage}
|
||||
|
||||
\message{[\ncolumns\space
|
||||
column\if 1\ncolumns\else s\fi\space per page]}
|
||||
|
||||
\def\scaledmag#1{ scaled \magstep #1}
|
||||
|
||||
% This multi-way format was designed by Stephen Gildea
|
||||
% October 1986.
|
||||
\if 1\ncolumns
|
||||
\hsize 4in
|
||||
\vsize 10in
|
||||
\voffset -.7in
|
||||
\font\titlefont=\fontname\tenbf \scaledmag3
|
||||
\font\headingfont=\fontname\tenbf \scaledmag2
|
||||
\font\smallfont=\fontname\sevenrm
|
||||
\font\smallsy=\fontname\sevensy
|
||||
|
||||
\footline{\hss\folio}
|
||||
\def\makefootline{\baselineskip10pt\hsize6.5in\line{\the\footline}}
|
||||
\else
|
||||
\hsize 3.2in
|
||||
\vsize 7.95in
|
||||
\hoffset -.75in
|
||||
\voffset -.745in
|
||||
\font\titlefont=cmbx10 \scaledmag2
|
||||
\font\headingfont=cmbx10 \scaledmag1
|
||||
\font\smallfont=cmr6
|
||||
\font\smallsy=cmsy6
|
||||
\font\eightrm=cmr8
|
||||
\font\eightbf=cmbx8
|
||||
\font\eightit=cmti8
|
||||
\font\eighttt=cmtt8
|
||||
\font\eightsy=cmsy8
|
||||
\textfont0=\eightrm
|
||||
\textfont2=\eightsy
|
||||
\def\rm{\eightrm}
|
||||
\def\bf{\eightbf}
|
||||
\def\it{\eightit}
|
||||
\def\tt{\eighttt}
|
||||
\normalbaselineskip=.8\normalbaselineskip
|
||||
\normallineskip=.8\normallineskip
|
||||
\normallineskiplimit=.8\normallineskiplimit
|
||||
\normalbaselines\rm %make definitions take effect
|
||||
|
||||
\if 2\ncolumns
|
||||
\let\maxcolumn=b
|
||||
\footline{\hss\rm\folio\hss}
|
||||
\def\makefootline{\vskip 2in \hsize=6.86in\line{\the\footline}}
|
||||
\else \if 3\ncolumns
|
||||
\let\maxcolumn=c
|
||||
\nopagenumbers
|
||||
\else
|
||||
\errhelp{You must set \columnsperpage equal to 1, 2, or 3.}
|
||||
\errmessage{Illegal number of columns per page}
|
||||
\fi\fi
|
||||
|
||||
\intercolumnskip=.46in
|
||||
\def\abc{a}
|
||||
\output={%
|
||||
% This next line is useful when designing the layout.
|
||||
%\immediate\write16{Column \folio\abc\space starts with \firstmark}
|
||||
\if \maxcolumn\abc \multicolumnformat \global\def\abc{a}
|
||||
\else\if a\abc
|
||||
\global\setbox\columna\columnbox \global\def\abc{b}
|
||||
%% in case we never use \columnb (two-column mode)
|
||||
\global\setbox\columnb\hbox to -\intercolumnskip{}
|
||||
\else
|
||||
\global\setbox\columnb\columnbox \global\def\abc{c}\fi\fi}
|
||||
\def\multicolumnformat{\shipout\vbox{\makeheadline
|
||||
\hbox{\box\columna\hskip\intercolumnskip
|
||||
\box\columnb\hskip\intercolumnskip\columnbox}
|
||||
\makefootline}\advancepageno}
|
||||
\def\columnbox{\leftline{\pagebody}}
|
||||
|
||||
\def\bye{\par\vfill\supereject
|
||||
\if a\abc \else\null\vfill\eject\fi
|
||||
\if a\abc \else\null\vfill\eject\fi
|
||||
\end}
|
||||
\fi
|
||||
|
||||
% we won't be using math mode much, so redefine some of the characters
|
||||
% we might want to talk about
|
||||
\catcode`\^=12
|
||||
\catcode`\_=12
|
||||
|
||||
\chardef\\=`\\
|
||||
\chardef\{=`\{
|
||||
\chardef\}=`\}
|
||||
|
||||
\hyphenation{mini-buf-fer}
|
||||
|
||||
\parindent 0pt
|
||||
\parskip 1ex plus .5ex minus .5ex
|
||||
|
||||
\def\small{\smallfont\textfont2=\smallsy\baselineskip=.8\baselineskip}
|
||||
|
||||
\outer\def\newcolumn{\vfill\eject}
|
||||
|
||||
\outer\def\title#1{{\titlefont\centerline{#1}}\vskip 1ex plus .5ex}
|
||||
|
||||
\outer\def\section#1{\par\filbreak
|
||||
\vskip 3ex plus 2ex minus 2ex {\headingfont #1}\mark{#1}%
|
||||
\vskip 2ex plus 1ex minus 1.5ex}
|
||||
|
||||
\newdimen\keyindent
|
||||
|
||||
\def\beginindentedkeys{\keyindent=1em}
|
||||
\def\endindentedkeys{\keyindent=0em}
|
||||
\endindentedkeys
|
||||
|
||||
\def\paralign{\vskip\parskip\halign}
|
||||
|
||||
\def\<#1>{$\langle${\rm #1}$\rangle$}
|
||||
|
||||
\def\kbd#1{{\tt#1}\null} %\null so not an abbrev even if period follows
|
||||
|
||||
\def\beginexample{\par\leavevmode\begingroup
|
||||
\obeylines\obeyspaces\parskip0pt\tt}
|
||||
{\obeyspaces\global\let =\ }
|
||||
\def\endexample{\endgroup}
|
||||
|
||||
\def\key#1#2{\leavevmode\hbox to \hsize{\vtop
|
||||
{\hsize=.75\hsize\rightskip=1em
|
||||
\hskip\keyindent\relax#1}\kbd{#2}\hfil}}
|
||||
|
||||
\newbox\metaxbox
|
||||
\setbox\metaxbox\hbox{\kbd{M-x }}
|
||||
\newdimen\metaxwidth
|
||||
\metaxwidth=\wd\metaxbox
|
||||
|
||||
\def\metax#1#2{\leavevmode\hbox to \hsize{\hbox to .75\hsize
|
||||
{\hskip\keyindent\relax#1\hfil}%
|
||||
\hskip -\metaxwidth minus 1fil
|
||||
\kbd{#2}\hfil}}
|
||||
|
||||
\def\threecol#1#2#3{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad
|
||||
&\kbd{#3}\quad\cr}
|
||||
|
||||
%**end of header
|
||||
|
||||
|
||||
\title{GNU Emacs Reference Card}
|
||||
|
||||
\centerline{(for version 18)}
|
||||
|
||||
\section{Starting Emacs}
|
||||
|
||||
To enter Emacs, just type its name: \kbd{emacs}
|
||||
|
||||
To read in a file to edit, see Files, below.
|
||||
|
||||
\section{Leaving Emacs}
|
||||
|
||||
\key{suspend Emacs (the usual way of leaving it)}{C-z}
|
||||
\key{exit Emacs permanently}{C-x C-c}
|
||||
|
||||
\section{Files}
|
||||
|
||||
\key{{\bf read} a file into Emacs}{C-x C-f}
|
||||
\key{{\bf save} a file back to disk}{C-x C-s}
|
||||
\key{{\bf insert} contents of another file into this buffer}{C-x i}
|
||||
\key{replace this file with the file you really want}{C-x C-v}
|
||||
\key{write buffer to a specified file}{C-x C-w}
|
||||
\key{run Dired, the directory editor}{C-x d}
|
||||
|
||||
\section{Getting Help}
|
||||
|
||||
The Help system is simple. Type \kbd{C-h} and follow the directions.
|
||||
If you are a first-time user, type \kbd{C-h t} for a {\bf tutorial}.
|
||||
(This card assumes you know the tutorial.)
|
||||
|
||||
\key{get rid of Help window}{C-x 1}
|
||||
\key{scroll Help window}{ESC C-v}
|
||||
|
||||
\key{apropos: show commands matching a string}{C-h a}
|
||||
\key{show the function a key runs}{C-h c}
|
||||
\key{describe a function}{C-h f}
|
||||
\key{get mode-specific information}{C-h m}
|
||||
|
||||
\section{Error Recovery}
|
||||
|
||||
\key{{\bf abort} partially typed or executing command}{C-g}
|
||||
\metax{{\bf recover} a file lost by a system crash}{M-x recover-file}
|
||||
\key{{\bf undo} an unwanted change}{C-x u {\rm or} C-_}
|
||||
\metax{restore a buffer to its original contents}{M-x revert-buffer}
|
||||
\key{redraw garbaged screen}{C-l}
|
||||
|
||||
\section{Incremental Search}
|
||||
|
||||
\key{search forward}{C-s}
|
||||
\key{search backward}{C-r}
|
||||
\key{regular expression search}{C-M-s}
|
||||
|
||||
Use \kbd{C-s} or \kbd{C-r} again to repeat the search in either direction.
|
||||
|
||||
\key{exit incremental search}{ESC}
|
||||
\key{undo effect of last character}{DEL}
|
||||
\key{abort current search}{C-g}
|
||||
|
||||
If Emacs is still searching, \kbd{C-g} will cancel the
|
||||
part of the search not done, otherwise it aborts the entire search.
|
||||
|
||||
\shortcopyrightnotice
|
||||
|
||||
\section{Motion}
|
||||
|
||||
Cursor motion:
|
||||
|
||||
\beginindentedkeys
|
||||
|
||||
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
|
||||
\threecol{{\bf entity to move over}}{{\bf backward}}{{\bf forward}}
|
||||
\threecol{character}{C-b}{C-f}
|
||||
\threecol{word}{M-b}{M-f}
|
||||
\threecol{line}{C-p}{C-n}
|
||||
\threecol{go to line beginning (or end)}{C-a}{C-e}
|
||||
\threecol{sentence}{M-a}{M-e}
|
||||
\threecol{paragraph}{M-[}{M-]}
|
||||
\threecol{page}{C-x [}{C-x ]}
|
||||
\threecol{sexp}{C-M-b}{C-M-f}
|
||||
\threecol{function}{C-M-a}{C-M-e}
|
||||
\threecol{go to buffer beginning (or end)}{M-<}{M->}
|
||||
}
|
||||
Screen motion:
|
||||
|
||||
\key{scroll to next screen}{C-v}
|
||||
\key{scroll to previous screen}{M-v}
|
||||
\key{scroll left}{C-x <}
|
||||
\key{scroll right}{C-x >}
|
||||
|
||||
\endindentedkeys
|
||||
|
||||
\section{Killing and Deleting}
|
||||
|
||||
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
|
||||
\threecol{{\bf entity to kill}}{{\bf backward}}{{\bf forward}}
|
||||
\threecol{character (delete, not kill)}{DEL}{C-d}
|
||||
\threecol{word}{M-DEL}{M-d}
|
||||
\threecol{line (to end of)}{M-0 C-k}{C-k}
|
||||
\threecol{sentence}{C-x DEL}{M-k}
|
||||
\threecol{sexp}{M-- C-M-k}{C-M-k}
|
||||
}
|
||||
|
||||
\key{kill {\bf region}}{C-w}
|
||||
\key{kill to next occurrence of {\it char}}{M-z {\it char}}
|
||||
|
||||
\key{yank back last thing killed}{C-y}
|
||||
\key{replace last yank with previous kill}{M-y}
|
||||
|
||||
\section{Marking}
|
||||
|
||||
\key{set mark here}{C-@ {\rm or} C-SPC}
|
||||
\key{exchange point and mark}{C-x C-x}
|
||||
|
||||
\key{set mark {\it arg\/} {\bf words} away}{M-@}
|
||||
\key{mark {\bf paragraph}}{M-h}
|
||||
\key{mark {\bf page}}{C-x C-p}
|
||||
\key{mark {\bf sexp}}{C-M-@}
|
||||
\key{mark {\bf function}}{C-M-h}
|
||||
\key{mark entire {\bf buffer}}{C-x h}
|
||||
|
||||
\section{Query Replace}
|
||||
|
||||
\key{interactively replace a text string}{M-\%}
|
||||
\metax{using regular expressions}{M-x query-replace-regexp}
|
||||
|
||||
Valid responses in query-replace mode are
|
||||
|
||||
\key{{\bf replace} this one, go on to next}{SPC}
|
||||
\key{replace this one, don't move}{,}
|
||||
\key{{\bf skip} to next without replacing}{DEL}
|
||||
\key{replace all remaining matches}{!}
|
||||
\key{{\bf back up} to the previous match}{^}
|
||||
\key{{\bf exit} query-replace}{ESC}
|
||||
\key{enter recursive edit (\kbd{C-M-c} to exit)}{C-r}
|
||||
|
||||
\section{Multiple Windows}
|
||||
|
||||
\key{delete all other windows}{C-x 1}
|
||||
\key{delete this window}{C-x 0}
|
||||
\key{split window in 2 vertically}{C-x 2}
|
||||
\key{split window in 2 horizontally}{C-x 5}
|
||||
|
||||
\key{scroll other window}{C-M-v}
|
||||
\key{switch cursor to another window}{C-x o}
|
||||
|
||||
\metax{shrink window shorter}{M-x shrink-window}
|
||||
\key{grow window taller}{C-x ^}
|
||||
\key{shrink window narrower}{C-x \{}
|
||||
\key{grow window wider}{C-x \}}
|
||||
|
||||
\key{select a buffer in other window}{C-x 4 b}
|
||||
\key{find file in other window}{C-x 4 f}
|
||||
\key{compose mail in other window}{C-x 4 m}
|
||||
\key{run Dired in other window}{C-x 4 d}
|
||||
\key{find tag in other window}{C-x 4 .}
|
||||
|
||||
\section{Formatting}
|
||||
|
||||
\key{indent current {\bf line} (mode-dependent)}{TAB}
|
||||
\key{indent {\bf region} (mode-dependent)}{C-M-\\}
|
||||
\key{indent {\bf sexp} (mode-dependent)}{C-M-q}
|
||||
\key{indent region rigidly {\it arg\/} columns}{C-x TAB}
|
||||
|
||||
\key{insert newline after point}{C-o}
|
||||
\key{move rest of line vertically down}{C-M-o}
|
||||
\key{delete blank lines around point}{C-x C-o}
|
||||
\key{delete all whitespace around point}{M-\\}
|
||||
\key{put exactly one space at point}{M-SPC}
|
||||
|
||||
\key{fill {\bf paragraph}}{M-q}
|
||||
\key{fill {\bf region}}{M-g}
|
||||
\key{set fill column}{C-x f}
|
||||
\key{set prefix each line starts with}{C-x .}
|
||||
|
||||
\section{Case Change}
|
||||
|
||||
\key{uppercase word}{M-u}
|
||||
\key{lowercase word}{M-l}
|
||||
\key{capitalize word}{M-c}
|
||||
|
||||
\key{uppercase region}{C-x C-u}
|
||||
\key{lowercase region}{C-x C-l}
|
||||
\metax{capitalize region}{M-x capitalize-region}
|
||||
|
||||
\section{The Minibuffer}
|
||||
|
||||
The following keys are defined in the minibuffer.
|
||||
|
||||
\key{complete as much as possible}{TAB}
|
||||
\key{complete up to one word}{SPC}
|
||||
\key{complete and execute}{RET}
|
||||
\key{show possible completions}{?}
|
||||
\key{abort command}{C-g}
|
||||
|
||||
Type \kbd{C-x ESC} to edit and repeat the last command that used the
|
||||
minibuffer. The following keys are then defined.
|
||||
|
||||
\key{previous minibuffer command}{M-p}
|
||||
\key{next minibuffer command}{M-n}
|
||||
|
||||
\newcolumn
|
||||
\title{GNU Emacs Reference Card}
|
||||
|
||||
\section{Buffers}
|
||||
|
||||
\key{select another buffer}{C-x b}
|
||||
\key{list all buffers}{C-x C-b}
|
||||
\key{kill a buffer}{C-x k}
|
||||
|
||||
\section{Transposing}
|
||||
|
||||
\key{transpose {\bf characters}}{C-t}
|
||||
\key{transpose {\bf words}}{M-t}
|
||||
\key{transpose {\bf lines}}{C-x C-t}
|
||||
\key{transpose {\bf sexps}}{C-M-t}
|
||||
|
||||
\section{Spelling Check}
|
||||
|
||||
\key{check spelling of current word}{M-\$}
|
||||
\metax{check spelling of all words in region}{M-x spell-region}
|
||||
\metax{check spelling of entire buffer}{M-x spell-buffer}
|
||||
|
||||
\section{Tags}
|
||||
|
||||
\key{find tag}{M-.}
|
||||
\key{find next occurrence of tag}{C-u M-.}
|
||||
\metax{specify a new tags file}{M-x visit-tags-table}
|
||||
|
||||
\metax{regexp search on all files in tags table}{M-x tags-search}
|
||||
\metax{query replace on all the files}{M-x tags-query-replace}
|
||||
\key{continue last tags search or query-replace}{M-,}
|
||||
|
||||
\section{Shells}
|
||||
|
||||
\key{execute a shell command}{M-!}
|
||||
\key{run a shell command on the region}{M-|}
|
||||
\key{filter region through a shell command}{C-u M-|}
|
||||
\metax{start a shell in window \kbd{*shell*}}{M-x shell}
|
||||
|
||||
\section{Rmail}
|
||||
|
||||
\key{scroll forward}{SPC}
|
||||
\key{scroll reverse}{DEL}
|
||||
\key{beginning of message}{. {\rm (dot)}}
|
||||
\key{{\bf next} non-deleted message}{n}
|
||||
\key{{\bf previous} non-deleted message}{p}
|
||||
\key{next message}{M-n}
|
||||
\key{previous message}{M-p}
|
||||
\key{{\bf delete} message}{d}
|
||||
\key{delete message and back up}{C-d}
|
||||
\key{undelete message}{u}
|
||||
\key{{\bf reply} to message}{r}
|
||||
\key{forward message to someone}{f}
|
||||
\key{send mail}{m}
|
||||
\key{{\bf get} newly arrived mail}{g}
|
||||
\key{{\bf quit} Rmail}{q}
|
||||
\key{output message to another Rmail file}{o}
|
||||
\key{output message in Unix-mail style}{C-o}
|
||||
\key{show summary of headers}{h}
|
||||
|
||||
\section{Regular Expressions}
|
||||
|
||||
The following have special meaning inside a regular expression.
|
||||
|
||||
\key{any single character}{. {\rm(dot)}}
|
||||
\key{zero or more repeats}{*}
|
||||
\key{one or more repeats}{+}
|
||||
\key{zero or one repeat}{?}
|
||||
\key{any character in set}{[ {\rm$\ldots$} ]}
|
||||
\key{any character not in set}{[^ {\rm$\ldots$} ]}
|
||||
\key{beginning of line}{^}
|
||||
\key{end of line}{\$}
|
||||
\key{quote a special character {\it c\/}}{\\{\it c}}
|
||||
\key{alternative (``or'')}{\\|}
|
||||
\key{grouping}{\\( {\rm$\ldots$} \\)}
|
||||
\key{{\it n\/}th group}{\\{\it n}}
|
||||
\key{beginning of buffer}{\\`}
|
||||
\key{end of buffer}{\\'}
|
||||
\key{word break}{\\b}
|
||||
\key{not beginning or end of word}{\\B}
|
||||
\key{beginning of word}{\\<}
|
||||
\key{end of word}{\\>}
|
||||
\key{any word-syntax character}{\\w}
|
||||
\key{any non-word-syntax character}{\\W}
|
||||
\key{character with syntax {\it c}}{\\s{\it c}}
|
||||
\key{character with syntax not {\it c}}{\\S{\it c}}
|
||||
|
||||
\section{Registers}
|
||||
|
||||
\key{copy region to register}{C-x x}
|
||||
\key{insert register contents}{C-x g}
|
||||
|
||||
\key{save point in register}{C-x /}
|
||||
\key{move point to saved location}{C-x j}
|
||||
|
||||
\section{Info}
|
||||
|
||||
\key{enter the Info documentation reader}{C-h i}
|
||||
\beginindentedkeys
|
||||
|
||||
Moving within a node:
|
||||
|
||||
\key{scroll forward}{SPC}
|
||||
\key{scroll reverse}{DEL}
|
||||
\key{beginning of node}{. {\rm (dot)}}
|
||||
|
||||
Moving between nodes:
|
||||
|
||||
\key{{\bf next} node}{n}
|
||||
\key{{\bf previous} node}{p}
|
||||
\key{move {\bf up}}{u}
|
||||
\key{select menu item by name}{m}
|
||||
\key{select {\it n\/}th menu item by number (1--5)}{{\it n}}
|
||||
\key{follow cross reference (return with \kbd{l})}{f}
|
||||
\key{return to last node you saw}{l}
|
||||
\key{return to directory node}{d}
|
||||
\key{go to any node by name}{g}
|
||||
|
||||
Other:
|
||||
|
||||
\key{run Info {\bf tutorial}}{h}
|
||||
\key{list Info commands}{?}
|
||||
\key{{\bf quit} Info}{q}
|
||||
\key{search nodes for regexp}{s}
|
||||
|
||||
\endindentedkeys
|
||||
|
||||
\section{Keyboard Macros}
|
||||
|
||||
\key{{\bf start} defining a keyboard macro}{C-x (}
|
||||
\key{{\bf end} keyboard macro definition}{C-x )}
|
||||
\key{{\bf execute} last-defined keyboard macro}{C-x e}
|
||||
\key{append to last keyboard macro}{C-u C-x (}
|
||||
\metax{name last keyboard macro}{M-x name-last-kbd-macro}
|
||||
\metax{insert lisp definition in buffer}{M-x insert-kbd-macro}
|
||||
|
||||
\section{Commands Dealing with Emacs Lisp}
|
||||
|
||||
\key{eval {\bf sexp} before point}{C-x C-e}
|
||||
\key{eval current {\bf defun}}{C-M-x}
|
||||
\metax{eval {\bf region}}{M-x eval-region}
|
||||
\metax{eval entire {\bf buffer}}{M-x eval-current-buffer}
|
||||
\key{read and eval minibuffer}{M-ESC}
|
||||
\key{re-execute last minibuffer command}{C-x ESC}
|
||||
\metax{read and eval Emacs Lisp file}{M-x load-file}
|
||||
\metax{load from standard system directory}{M-x load-library}
|
||||
|
||||
\section{Simple Customization}
|
||||
|
||||
% The intended audience here is the person who wants to make simple
|
||||
% customizations and knows Lisp syntax.
|
||||
|
||||
Here are some examples of binding global keys in Emacs Lisp. Note
|
||||
that you cannot say \kbd{"\\M-\#"}; you must say \kbd{"\\e\#"}.
|
||||
|
||||
\beginexample%
|
||||
(global-set-key "\\C-cg" 'goto-line)
|
||||
(global-set-key "\\e\\C-r" 'isearch-backward-regexp)
|
||||
(global-set-key "\\e\#" 'query-replace-regexp)
|
||||
\endexample
|
||||
|
||||
An example of setting a variable in Emacs Lisp:
|
||||
|
||||
\beginexample%
|
||||
(setq backup-by-copying-when-linked t)
|
||||
\endexample
|
||||
|
||||
\section{Writing Commands}
|
||||
|
||||
\beginexample%
|
||||
(defun \<command-name> (\<args>)
|
||||
"\<documentation>"
|
||||
(interactive "\<template>")
|
||||
\<body>)
|
||||
\endexample
|
||||
|
||||
An example:
|
||||
|
||||
\beginexample%
|
||||
(defun this-line-to-top-of-screen (line)
|
||||
"Reposition line point is on to the top of
|
||||
the screen. With ARG, put point on line ARG.
|
||||
Negative counts from bottom."
|
||||
(interactive "P")
|
||||
(recenter (if (null line)
|
||||
0
|
||||
(prefix-numeric-value line))))
|
||||
\endexample
|
||||
|
||||
The argument to \kbd{interactive} is a string specifying how to get
|
||||
the arguments when the function is called interactively.
|
||||
Type \kbd{C-h f interactive} for more information.
|
||||
|
||||
\copyrightnotice
|
||||
|
||||
\bye
|
||||
|
||||
% Local variables:
|
||||
% compile-command: "tex refcard"
|
||||
% End:
|
||||
|
|
@ -24,6 +24,11 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
and passes their commands (consisting of keyboard characters)
|
||||
up to the Emacs which then executes them. */
|
||||
|
||||
/* This must precede sys/signal.h on certain machines. */
|
||||
#include <sys/types.h>
|
||||
/* This must precede config.h on certain machines. */
|
||||
#include <sys/signal.h>
|
||||
|
||||
#define NO_SHORTNAMES
|
||||
#include "../src/config.h"
|
||||
#undef read
|
||||
|
|
@ -32,25 +37,24 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
#undef close
|
||||
|
||||
|
||||
#if !defined(HAVE_SOCKETS) && !defined(HAVE_SYSVIPC)
|
||||
#if !defined(BSD) && !defined(HAVE_SYSVIPC)
|
||||
#include <stdio.h>
|
||||
|
||||
main ()
|
||||
{
|
||||
fprintf (stderr, "Sorry, the Emacs server is supported only on systems\n");
|
||||
fprintf (stderr, "with Berkeley sockets or System V IPC.\n");
|
||||
fprintf (stderr, "Sorry, the Emacs server is supported only on Berkeley Unix\n");
|
||||
fprintf (stderr, "or System V systems with IPC\n");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
#else /* HAVE_SOCKETS or HAVE_SYSVIPC */
|
||||
#else /* BSD or HAVE_SYSVIPC */
|
||||
|
||||
#if ! defined (HAVE_SYSVIPC)
|
||||
#if defined (BSD) && ! defined (HAVE_SYSVIPC)
|
||||
/* BSD code is very different from SYSV IPC code */
|
||||
|
||||
#include <sys/file.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/signal.h>
|
||||
#include <sys/un.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
|
|
@ -59,6 +63,7 @@ extern int errno;
|
|||
|
||||
main ()
|
||||
{
|
||||
char system_name[32];
|
||||
int s, infd, fromlen;
|
||||
struct sockaddr_un server, fromunix;
|
||||
char *homedir;
|
||||
|
|
@ -67,7 +72,6 @@ main ()
|
|||
FILE **openfiles;
|
||||
int openfiles_size;
|
||||
|
||||
int geteuid ();
|
||||
char *getenv ();
|
||||
|
||||
openfiles_size = 20;
|
||||
|
|
@ -85,28 +89,32 @@ main ()
|
|||
exit (1);
|
||||
}
|
||||
server.sun_family = AF_UNIX;
|
||||
homedir = getenv ("HOME");
|
||||
if (homedir == NULL)
|
||||
#ifndef SERVER_HOME_DIR
|
||||
gethostname (system_name, sizeof (system_name));
|
||||
sprintf (server.sun_path, "/tmp/esrv%d-%s", geteuid (), system_name);
|
||||
|
||||
if (unlink (server.sun_path) == -1 && errno != ENOENT)
|
||||
{
|
||||
perror ("unlink");
|
||||
exit (1);
|
||||
}
|
||||
#else
|
||||
if ((homedir = getenv ("HOME")) == NULL)
|
||||
{
|
||||
fprintf (stderr,"No home directory\n");
|
||||
exit (1);
|
||||
}
|
||||
sprintf (server.sun_path, "/tmp/esrv%d", geteuid ());
|
||||
|
||||
#if 0
|
||||
strcpy (server.sun_path, homedir);
|
||||
strcat (server.sun_path, "/.emacs_server");
|
||||
#endif
|
||||
|
||||
/* Delete anyone else's old server. */
|
||||
unlink (server.sun_path);
|
||||
#endif
|
||||
|
||||
if (bind (s, &server, strlen (server.sun_path) + 2) < 0)
|
||||
{
|
||||
perror ("bind");
|
||||
exit (1);
|
||||
}
|
||||
/* Only this user can send commands to this Emacs. */
|
||||
chmod (server.sun_path, 0600);
|
||||
/*
|
||||
* Now, just wait for everything to come in..
|
||||
*/
|
||||
|
|
@ -214,13 +222,14 @@ main ()
|
|||
#else /* This is the SYSV IPC section */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/signal.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/msg.h>
|
||||
#include <setjmp.h>
|
||||
|
||||
jmp_buf msgenv;
|
||||
|
||||
void /* void here fixes bug on sgi.
|
||||
Let's hope this doesn't break other systems. */
|
||||
msgcatch ()
|
||||
{
|
||||
longjmp (msgenv, 1);
|
||||
|
|
@ -294,6 +303,7 @@ main ()
|
|||
if ((fromlen = msgrcv (s, msgp, BUFSIZ - 1, 1, 0)) < 0)
|
||||
{
|
||||
perror ("msgrcv");
|
||||
exit (1);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -313,6 +323,8 @@ main ()
|
|||
}
|
||||
}
|
||||
|
||||
#endif /* HAVE_SYSVIPC */
|
||||
#endif /* SYSV IPC */
|
||||
|
||||
#endif /* BSD && IPC */
|
||||
|
||||
|
||||
#endif /* HAVE_SOCKETS or HAVE_SYSVIPC */
|
||||
111
etc/sex.6
Normal file
111
etc/sex.6
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
SEX(6) EUNUCH Programmer's Manual SEX(6)
|
||||
|
||||
|
||||
|
||||
NAME
|
||||
sex - have sex
|
||||
|
||||
SYNOPSIS
|
||||
sex [ options ] ... [ username ] ...
|
||||
|
||||
DESCRIPTION
|
||||
_s_e_x allows the invoker to have sex with the user(s) speci-
|
||||
fied in the command line. If no users are specified, they
|
||||
are taken from the LOVERS environment variable. Options to
|
||||
make things more interesting are as follows:
|
||||
|
||||
-1 masturbate
|
||||
|
||||
-a external stimulus (aphrodisiac) option
|
||||
|
||||
-b buggery
|
||||
|
||||
-B<animal>
|
||||
bestiality with <animal>
|
||||
|
||||
-c chocolate sauce option
|
||||
|
||||
-C chaining option (cuffs included) (see also -m -s -W)
|
||||
|
||||
-d<file>
|
||||
get a date with the features described in <file>
|
||||
|
||||
-e exhibitionism (image sent to all machines on the net)
|
||||
|
||||
-f foreplay option
|
||||
|
||||
-F nasal sex with plants
|
||||
|
||||
-i coitus interruptus (messy!)
|
||||
|
||||
-j jacuzzi option (California sites only)
|
||||
|
||||
-l leather option
|
||||
|
||||
-m masochism (see -s)
|
||||
|
||||
-M triple parallel (Menage a Trois) option
|
||||
|
||||
-n necrophilia (if target process is not dead, program
|
||||
kills it)
|
||||
|
||||
-o oral option
|
||||
|
||||
-O parallel access (orgy)
|
||||
|
||||
-p debug option (proposition only)
|
||||
|
||||
-P pedophilia (must specify a child process)
|
||||
|
||||
|
||||
|
||||
Printed 2/15/87 2/15/87 1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
SEX(6) EUNUCH Programmer's Manual SEX(6)
|
||||
|
||||
|
||||
|
||||
-q quickie (wham, bam, thank you, ma'am)
|
||||
|
||||
-s sadism (target must set -m)
|
||||
|
||||
-S sundae option
|
||||
|
||||
-v voyeurism (surveys the entire net)
|
||||
|
||||
-w whipped cream option
|
||||
|
||||
-W whips (see also -s, -C, and -m)
|
||||
|
||||
ENVIRONMENT
|
||||
LOVERS
|
||||
is a list of default partners which will be used if
|
||||
none are specified in the command line. If any are
|
||||
specified, the values in LOVERS is ignored.
|
||||
|
||||
FILES
|
||||
/usr/lib/sex/animals animals for bestiality
|
||||
|
||||
/usr/lib/sex/blackbook possible dates
|
||||
|
||||
/usr/lib/sex/sundaes sundae recipes
|
||||
|
||||
/usr/lib/sex/s&m sado-masochistic equipment
|
||||
|
||||
|
||||
|
||||
BUGS
|
||||
^C (quit process) may leave the user very unsatisfied.
|
||||
|
||||
^Z (stop process) is usually quite messy.
|
||||
|
||||
MAN AUTHOR
|
||||
Author prefers to be anonymous.
|
||||
|
||||
HISTORY
|
||||
Oldest program ever.
|
||||
BIN
etc/spook.lines
Normal file
BIN
etc/spook.lines
Normal file
Binary file not shown.
|
|
@ -47,12 +47,12 @@ ZW|gator|HP 9000 model 237 emulating AAA:\
|
|||
ZY|gator-52|HP 9000 model 237 emulating VT52:\
|
||||
:cr=^M:do=^J:nl=^J:bl=^G:\
|
||||
:le=^H:bs:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :co#128:li#47:nd=\EC:\
|
||||
:ta=^I:pt:sr=\EI:up=\EA:ku=\EA:kd=\EB:kr=\EC:kl=\ED:kb=^H:\
|
||||
:ta=^I:pt:sr=\EI:up=\EA:ku=\EA:kd=\EB:kr=\EC:kl=\ED:kb=^H:
|
||||
:ce=\EK:ho=\EH:
|
||||
ZZ|gator-52t|HP 9000 model 237 emulating extra-tall VT52:\
|
||||
:cr=^M:do=^J:nl=^J:bl=^G:\
|
||||
:le=^H:bs:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :co#128:li#94:nd=\EC:\
|
||||
:ta=^I:pt:sr=\EI:up=\EA:ku=\EA:kd=\EB:kr=\EC:kl=\ED:kb=^H:\
|
||||
:ta=^I:pt:sr=\EI:up=\EA:ku=\EA:kd=\EB:kr=\EC:kl=\ED:kb=^H:
|
||||
:ce=\EK:ho=\EH:
|
||||
#
|
||||
# N: ANN ARBOR
|
||||
|
|
@ -461,9 +461,9 @@ ZN|aaa60|ambas60|ambassador60|ann arbor ambassador/60 lines:\
|
|||
:li#60:mi:tc=aaax:
|
||||
# vt100 -- this has been changed to delete the "pt" ("real tabs")
|
||||
# option, which was losing. -- walter 10/84
|
||||
d0|vt100-132|vt125-132|dec vt100 with 132 columns:\
|
||||
d0|vt100-132|vt101-132|vt102-132|vt125-132|vt131-132|dec vt100 with 132 columns:\
|
||||
:co#132:tc=vt100:
|
||||
d0|vt100|vt100-am|vt100-80|vt125|vt125-80|dec vt100:\
|
||||
d0|vt100|vt100-am|vt100-80|vt101|vt101-80|vt102|vt102-80|vt125|vt125-80|vt131|vt131-80|dec vt100:\
|
||||
:cr=^M:bl=^G:le=^H:do=\ED:ho=\E[H:\
|
||||
:co#80:li#24:cl=45\E[H\E[2J:bs:am:cm=5\E[%i%d;%dH:nd=\E[C:up=\E[A:\
|
||||
:ce=2\E[K:cd=2*\E[J:so=2\E[7m:se=2\E[m:us=2\E[4m:ue=2\E[m:\
|
||||
|
|
@ -549,7 +549,7 @@ nunix-61|nu-telnet-61|nu-full| Full nu screen thru telnet:\
|
|||
# It is bad form to use ^J,^L,^K to scroll the screen.
|
||||
# If the VT2xx doesn't have newline mode set those characters
|
||||
# donot move the cursor down a line. Use \ED instead.
|
||||
d0|vt200-80|vt200|vt300-80|VT 200 with 80 columns, on VMS:\
|
||||
d0|vt200-80|vt200|vt300-80|vt300|VT 200 with 80 columns, on VMS:\
|
||||
:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
|
||||
:LE=\E[%dD:RI=\E[%dC:SR=1*\E[%dM:UP=\E[%dA:al=\E[L:\
|
||||
:am:bl=^G:bs:cd=2*\E[J:ce=2*\E[K:cl=45\E[H\E[2J:\
|
||||
|
|
|
|||
2667
etc/termcap.ucb
Normal file
2667
etc/termcap.ucb
Normal file
File diff suppressed because it is too large
Load diff
BIN
etc/testfile
Normal file
BIN
etc/testfile
Normal file
Binary file not shown.
38
etc/ulimit.hack
Normal file
38
etc/ulimit.hack
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# ulimit.hack: Create an intermediate program for use in
|
||||
# between kernel initialization and init startup.
|
||||
# This is needed on a 3b system if the standard CDLIMIT is
|
||||
# so small that the dumped Emacs file cannot be written.
|
||||
# This program causes everyone to get a bigger CDLIMIT value
|
||||
# so that the dumped Emacs can be written out.
|
||||
#
|
||||
# Users of V.3.1 and later should not use this; see etc/MACHINES
|
||||
# and reconfig your kernel's CDLIMIT parameter instead.
|
||||
#
|
||||
# Caveat: Heaven help you if you screw this up. This puts
|
||||
# a new program in as /etc/init, which then execs the real init.
|
||||
#
|
||||
cat > ulimit.init.c << \EOF
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
ulimit(2, 262144L); /* "2" is the "set" command. */
|
||||
/* 262,144 allows for 128Mb files to be written. */
|
||||
/* If that value isn't suitable, roll your own. */
|
||||
execv("/etc/real.init", argv);
|
||||
}
|
||||
EOF
|
||||
#
|
||||
# Compile it and put it in place of the usual init program.
|
||||
#
|
||||
cc ulimit.init.c -o ulimit.init
|
||||
mv /etc/init /etc/real.init
|
||||
mv ulimit.init /etc/ulimit.init
|
||||
ln /etc/ulimit.init /etc/init
|
||||
mv ulimit.init.c /etc/ulimit.init.c # to keep src for this hack nearby.
|
||||
chmod 0754 /etc/init
|
||||
exit 0
|
||||
#
|
||||
# Upon system reboot, all processes will inherit the new large ulimit.
|
||||
680
etc/vipcard.tex
Normal file
680
etc/vipcard.tex
Normal file
|
|
@ -0,0 +1,680 @@
|
|||
% Quick Reference Card for VIP 3.5 under GNU Emacs version 18 on Unix systems
|
||||
%**start of header
|
||||
\newcount\columnsperpage
|
||||
|
||||
% This file can be printed with 1, 2, or 3 columns per page (see below).
|
||||
% Specify how many you want here. Nothing else needs to be changed.
|
||||
|
||||
\columnsperpage=1
|
||||
|
||||
% Copyright (c) 1987 Free Software Foundation, Inc.
|
||||
|
||||
% This file is part of GNU Emacs.
|
||||
|
||||
% GNU Emacs is free software; you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation; either version 1, or (at your option)
|
||||
% any later version.
|
||||
|
||||
% GNU Emacs is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with GNU Emacs; see the file COPYING. If not, write to
|
||||
% the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
% This file is intended to be processed by plain TeX (TeX82).
|
||||
%
|
||||
% The final reference card has six columns, three on each side.
|
||||
% This file can be used to produce it in any of three ways:
|
||||
% 1 column per page
|
||||
% produces six separate pages, each of which needs to be reduced to 80%.
|
||||
% This gives the best resolution.
|
||||
% 2 columns per page
|
||||
% produces three already-reduced pages.
|
||||
% You will still need to cut and paste.
|
||||
% 3 columns per page
|
||||
% produces two pages which must be printed sideways to make a
|
||||
% ready-to-use 8.5 x 11 inch reference card.
|
||||
% For this you need a dvi device driver that can print sideways.
|
||||
% Which mode to use is controlled by setting \columnsperpage above.
|
||||
%
|
||||
% Author:
|
||||
% Masahiko Sato
|
||||
% Internet: ms@sail.stanford.edu
|
||||
% Junet: masahiko@sato.riec.tohoku.junet
|
||||
%
|
||||
% The original TeX code for formatting the reference card was written by:
|
||||
% Stephen Gildea
|
||||
% UUCP: mit-erl!gildea
|
||||
% Internet: gildea@erl.mit.edu
|
||||
|
||||
|
||||
\def\versionnumber{1.2}
|
||||
\def\year{1987}
|
||||
\def\version{September \year\ v\versionnumber}
|
||||
|
||||
\def\shortcopyrightnotice{\vskip 1ex plus 2 fill
|
||||
\centerline{\small \copyright\ \year\ Free Software Foundation, Inc.
|
||||
Permissions on back. v\versionnumber}}
|
||||
|
||||
\def\copyrightnotice{
|
||||
%\vskip 1ex plus 2 fill\begingroup\small
|
||||
\vskip 1ex \begingroup\small
|
||||
\centerline{Copyright \copyright\ \year\ Free Software Foundation, Inc.}
|
||||
\centerline{designed by Masahiko Sato, \version}
|
||||
\centerline{for VIP 3.5 under GNU Emacs version 18 on Unix systems}
|
||||
|
||||
Permission is granted to make and distribute copies of
|
||||
this card provided the copyright notice and this permission notice
|
||||
are preserved on all copies.
|
||||
|
||||
For copies of the GNU Emacs manual, write to the Free Software
|
||||
Foundation, Inc., 1000 Massachusetts Ave, Cambridge MA 02138.
|
||||
|
||||
\endgroup}
|
||||
|
||||
% make \bye not \outer so that the \def\bye in the \else clause below
|
||||
% can be scanned without complaint.
|
||||
\def\bye{\par\vfill\supereject\end}
|
||||
|
||||
\newdimen\intercolumnskip
|
||||
\newbox\columna
|
||||
\newbox\columnb
|
||||
|
||||
\def\ncolumns{\the\columnsperpage}
|
||||
|
||||
\message{[\ncolumns\space
|
||||
column\if 1\ncolumns\else s\fi\space per page]}
|
||||
|
||||
\def\scaledmag#1{ scaled \magstep #1}
|
||||
|
||||
% This multi-way format was designed by Stephen Gildea
|
||||
% October 1986.
|
||||
% Slightly modified by Masahiko Sato, September 1987.
|
||||
\if 1\ncolumns
|
||||
\hsize 4in
|
||||
\vsize 10in
|
||||
%\voffset -.7in
|
||||
\voffset -.57in
|
||||
\font\titlefont=\fontname\tenbf \scaledmag3
|
||||
\font\headingfont=\fontname\tenbf \scaledmag2
|
||||
\font\miniheadingfont=\fontname\tenbf \scaledmag1 % masahiko
|
||||
\font\smallfont=\fontname\sevenrm
|
||||
\font\smallsy=\fontname\sevensy
|
||||
|
||||
\footline{\hss\folio}
|
||||
\def\makefootline{\baselineskip10pt\hsize6.5in\line{\the\footline}}
|
||||
\else
|
||||
%\hsize 3.2in
|
||||
%\vsize 7.95in
|
||||
\hsize 3.41in % masahiko
|
||||
\vsize 8in % masahiko
|
||||
\hoffset -.75in
|
||||
\voffset -.745in
|
||||
\font\titlefont=cmbx10 \scaledmag2
|
||||
\font\headingfont=cmbx10 \scaledmag1
|
||||
\font\miniheadingfont=cmbx10 % masahiko
|
||||
\font\smallfont=cmr6
|
||||
\font\smallsy=cmsy6
|
||||
\font\eightrm=cmr8
|
||||
\font\eightbf=cmbx8
|
||||
\font\eightit=cmti8
|
||||
\font\eightsl=cmsl8
|
||||
\font\eighttt=cmtt8
|
||||
\font\eightsy=cmsy8
|
||||
\textfont0=\eightrm
|
||||
\textfont2=\eightsy
|
||||
\def\rm{\eightrm}
|
||||
\def\bf{\eightbf}
|
||||
\def\it{\eightit}
|
||||
\def\sl{\eightsl} % masahiko
|
||||
\def\tt{\eighttt}
|
||||
\normalbaselineskip=.8\normalbaselineskip
|
||||
\normallineskip=.8\normallineskip
|
||||
\normallineskiplimit=.8\normallineskiplimit
|
||||
\normalbaselines\rm %make definitions take effect
|
||||
|
||||
\if 2\ncolumns
|
||||
\let\maxcolumn=b
|
||||
\footline{\hss\rm\folio\hss}
|
||||
\def\makefootline{\vskip 2in \hsize=6.86in\line{\the\footline}}
|
||||
\else \if 3\ncolumns
|
||||
\let\maxcolumn=c
|
||||
\nopagenumbers
|
||||
\else
|
||||
\errhelp{You must set \columnsperpage equal to 1, 2, or 3.}
|
||||
\errmessage{Illegal number of columns per page}
|
||||
\fi\fi
|
||||
|
||||
%\intercolumnskip=.46in
|
||||
\intercolumnskip=.19in % masahiko .19x4 + 3.41x3 = 10.99
|
||||
\def\abc{a}
|
||||
\output={%
|
||||
% This next line is useful when designing the layout.
|
||||
%\immediate\write16{Column \folio\abc\space starts with \firstmark}
|
||||
\if \maxcolumn\abc \multicolumnformat \global\def\abc{a}
|
||||
\else\if a\abc
|
||||
\global\setbox\columna\columnbox \global\def\abc{b}
|
||||
%% in case we never use \columnb (two-column mode)
|
||||
\global\setbox\columnb\hbox to -\intercolumnskip{}
|
||||
\else
|
||||
\global\setbox\columnb\columnbox \global\def\abc{c}\fi\fi}
|
||||
\def\multicolumnformat{\shipout\vbox{\makeheadline
|
||||
\hbox{\box\columna\hskip\intercolumnskip
|
||||
\box\columnb\hskip\intercolumnskip\columnbox}
|
||||
\makefootline}\advancepageno}
|
||||
\def\columnbox{\leftline{\pagebody}}
|
||||
|
||||
\def\bye{\par\vfill\supereject
|
||||
\if a\abc \else\null\vfill\eject\fi
|
||||
\if a\abc \else\null\vfill\eject\fi
|
||||
\end}
|
||||
\fi
|
||||
|
||||
% we won't be using math mode much, so redefine some of the characters
|
||||
% we might want to talk about
|
||||
\catcode`\^=12
|
||||
\catcode`\_=12
|
||||
|
||||
\chardef\\=`\\
|
||||
\chardef\{=`\{
|
||||
\chardef\}=`\}
|
||||
|
||||
\hyphenation{mini-buf-fer}
|
||||
|
||||
\parindent 0pt
|
||||
\parskip 1ex plus .5ex minus .5ex
|
||||
|
||||
\def\small{\smallfont\textfont2=\smallsy\baselineskip=.8\baselineskip}
|
||||
|
||||
\outer\def\newcolumn{\vfill\eject}
|
||||
|
||||
\outer\def\title#1{{\titlefont\centerline{#1}}\vskip 1ex plus .5ex}
|
||||
|
||||
\outer\def\section#1{\par\filbreak
|
||||
\vskip 3ex plus 2ex minus 2ex {\headingfont #1}\mark{#1}%
|
||||
\vskip 2ex plus 1ex minus 1.5ex}
|
||||
|
||||
% masahiko
|
||||
\outer\def\subsection#1{\par\filbreak
|
||||
\vskip 2ex plus 2ex minus 2ex {\miniheadingfont #1}\mark{#1}%
|
||||
\vskip 1ex plus 1ex minus 1.5ex}
|
||||
|
||||
\newdimen\keyindent
|
||||
|
||||
\def\beginindentedkeys{\keyindent=1em}
|
||||
\def\endindentedkeys{\keyindent=0em}
|
||||
\endindentedkeys
|
||||
|
||||
\def\paralign{\vskip\parskip\halign}
|
||||
|
||||
\def\<#1>{$\langle${\rm #1}$\rangle$}
|
||||
|
||||
\def\kbd#1{{\tt#1}\null} %\null so not an abbrev even if period follows
|
||||
|
||||
\def\beginexample{\par\leavevmode\begingroup
|
||||
\obeylines\obeyspaces\parskip0pt\tt}
|
||||
{\obeyspaces\global\let =\ }
|
||||
\def\endexample{\endgroup}
|
||||
|
||||
\def\key#1#2{\leavevmode\hbox to \hsize{\vtop
|
||||
{\hsize=.75\hsize\rightskip=1em
|
||||
\hskip\keyindent\relax#1}\kbd{#2}\hfil}}
|
||||
|
||||
\newbox\metaxbox
|
||||
\setbox\metaxbox\hbox{\kbd{M-x }}
|
||||
\newdimen\metaxwidth
|
||||
\metaxwidth=\wd\metaxbox
|
||||
|
||||
\def\metax#1#2{\leavevmode\hbox to \hsize{\hbox to .75\hsize
|
||||
{\hskip\keyindent\relax#1\hfil}%
|
||||
\hskip -\metaxwidth minus 1fil
|
||||
\kbd{#2}\hfil}}
|
||||
|
||||
\def\fivecol#1#2#3#4#5{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad
|
||||
&\kbd{#3}\quad&\kbd{#4}\quad&\kbd{#5}\cr}
|
||||
|
||||
\def\fourcol#1#2#3#4{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad
|
||||
&\kbd{#3}\quad&\kbd{#4}\quad\cr}
|
||||
|
||||
\def\threecol#1#2#3{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad
|
||||
&\kbd{#3}\quad\cr}
|
||||
|
||||
\def\twocol#1#2{\hskip\keyindent\relax\kbd{#1}\hfil&\kbd{#2}\quad\cr}
|
||||
|
||||
\def\twocolkey#1#2#3#4{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad&\relax#3\hfil&\kbd{#4}\quad\cr}
|
||||
|
||||
%**end of header
|
||||
|
||||
\beginindentedkeys
|
||||
|
||||
\title{VIP Quick Reference Card}
|
||||
|
||||
\centerline{(for version 3.5 under GNU Emacs version 18)}
|
||||
|
||||
%\copyrightnotice
|
||||
|
||||
\section{Loading VIP}
|
||||
|
||||
Just type \kbd{M-x vip-mode} followed by \kbd{RET}
|
||||
|
||||
\section{VIP Modes}
|
||||
|
||||
VIP has three modes: {\it emacs mode}, {\it vi mode} and {\it insert mode}.
|
||||
Mode line tells you which mode you are in.
|
||||
In emacs mode you can do all the normal GNU Emacs editing.
|
||||
This card explains only vi mode and insert mode.
|
||||
{\bf GNU Emacs Reference Card} explains emacs mode.
|
||||
You can switch modes as follows.
|
||||
|
||||
\key{from emacs mode to vi mode}{C-z}
|
||||
\key{from vi mode to emacs mode}{C-z}
|
||||
\metax{from vi mode to insert mode}{i, I, a, A, o, O {\rm or} C-o}
|
||||
\key{from insert mode to vi mode}{ESC}
|
||||
|
||||
If you wish to be in vi mode just after you startup Emacs,
|
||||
include the line:
|
||||
|
||||
\hskip 5ex
|
||||
\kbd{(setq term-setup-hook 'vip-mode)}
|
||||
|
||||
in your \kbd{.emacs} file.
|
||||
Or, you can put the following alias in your \kbd{.cshrc} file.
|
||||
|
||||
\hskip 5ex
|
||||
\kbd{alias vip 'emacs \\!* -f vip-mode'}
|
||||
|
||||
|
||||
\section{Insert Mode}
|
||||
Insert mode is like emacs mode except for the following.
|
||||
|
||||
\key{go back to vi mode}{ESC}
|
||||
\key{delete previous character}{C-h}
|
||||
\key{delete previous word}{C-w}
|
||||
\key{emulate \kbd{ESC} key in emacs mode}{C-z}
|
||||
|
||||
The rest of this card explains commands in {\bf vi mode}.
|
||||
|
||||
\section{Getting Information on VIP}
|
||||
|
||||
Execute info command by typing \kbd{M-x info} and select menu item
|
||||
\kbd{vip}. Also:
|
||||
|
||||
\key{describe function attached to the key {\it x}}{C-h k {\it x}}
|
||||
|
||||
\section{Leaving Emacs}
|
||||
|
||||
\key{suspend Emacs}{X Z {\rm or} :st}
|
||||
\metax{exit Emacs permanently}{Z Z {\rm or} X C {\rm or} :q}
|
||||
|
||||
\section{Error Recovery}
|
||||
|
||||
\key{abort partially typed or executing command}{C-g}
|
||||
\key{redraw messed up screen}{C-l}
|
||||
\metax{{\bf recover} a file lost by a system crash}{M-x recover-file}
|
||||
\metax{restore a buffer to its original contents}{M-x revert-buffer}
|
||||
|
||||
\shortcopyrightnotice
|
||||
|
||||
\section{Counts}
|
||||
|
||||
Most commands in vi mode accept a {\it count} which can be supplied as a
|
||||
prefix to the commands. In most cases, if a count is given, the
|
||||
command is executed that many times. E.g., \kbd{5 d d} deletes 5
|
||||
lines.
|
||||
|
||||
%\shortcopyrightnotice
|
||||
\section{Registers}
|
||||
|
||||
There are 26 registers (\kbd{a} to \kbd{z}) that can store texts
|
||||
and marks.
|
||||
You can append a text at the end of a register (say \kbd{x}) by
|
||||
specifying the register name in capital letter (say \kbd{X}).
|
||||
There are also 9 read only registers (\kbd{1} to \kbd{9}) that store
|
||||
up to 9 previous changes.
|
||||
We will use {\it x\/} to denote a register.
|
||||
\section{Entering Insert Mode}
|
||||
|
||||
\key{{\bf insert} at point}{i}
|
||||
\key{{\bf append} after cursor}{a}
|
||||
\key{{\bf insert} before first non-white}{I}
|
||||
\key{{\bf append} at end of line}{A}
|
||||
\key{{\bf open} line below}{o}
|
||||
\key{{\bf open} line above}{O}
|
||||
\key{{\bf open} line at point}{C-o}
|
||||
|
||||
\section{Buffers and Windows}
|
||||
|
||||
\key{move cursor to {\bf next} window}{C-n}
|
||||
\key{delete current window}{X 0}
|
||||
\key{delete other windows}{X 1}
|
||||
\key{split current window into two windows}{X 2}
|
||||
\key{show current buffer in two windows}{X 3}
|
||||
\key{{\bf switch} to a buffer in the current window}{s {\sl buffer}}
|
||||
\key{{\bf switch} to a buffer in another window}{S {\sl buffer}}
|
||||
\key{{\bf kill} a buffer}{K}
|
||||
\key{list exisiting {\bf buffers}}{X B}
|
||||
|
||||
\section{Files}
|
||||
|
||||
\metax{{\bf visit} file in the current window}{v {\sl file} {\rm or} :e {\sl file}}
|
||||
\key{{\bf visit} file in another window}{V {\sl file}}
|
||||
\key{{\bf save} buffer to the associated file}{X S}
|
||||
\key{{\bf write} buffer to a specified file}{X W}
|
||||
\key{{\bf insert} a specified file at point}{X I}
|
||||
\key{{\bf get} information on the current {\bf file}}{g {\rm or} :f}
|
||||
\key{run the {\bf directory} editor}{X d}
|
||||
|
||||
\section{Viewing the Buffer}
|
||||
|
||||
\key{scroll to next screen}{SPC {\rm or} C-f}
|
||||
\key{scroll to previous screen}{RET {\rm or} C-b}
|
||||
\key{scroll {\bf down} half screen}{C-d}
|
||||
\key{scroll {\bf up} half screen}{C-u}
|
||||
\key{scroll down one line}{C-e}
|
||||
\key{scroll up one line}{C-y}
|
||||
|
||||
\key{put current line on the {\bf home} line}{z H {\rm or} z RET}
|
||||
\key{put current line on the {\bf middle} line}{z M {\rm or} z .}
|
||||
\key{put current line on the {\bf last} line}{z L {\rm or} z -}
|
||||
|
||||
\section{Marking and Returning}
|
||||
|
||||
\key{{\bf mark} point in register {\it x}}{m {\it x}}
|
||||
\key{set mark at buffer beginning}{m <}
|
||||
\key{set mark at buffer end}{m >}
|
||||
\key{set mark at point}{m .}
|
||||
\key{jump to mark}{m ,}
|
||||
\key{exchange point and mark}{` `}
|
||||
\key{... and skip to first non-white on line}{' '}
|
||||
\key{go to mark {\it x}}{` {\it x}}
|
||||
\key{... and skip to first non-white on line}{' {\it x}}
|
||||
|
||||
\section{Macros}
|
||||
|
||||
\key{start remembering keyboard macro}{X (}
|
||||
\key{finish remembering keyboard macro}{X )}
|
||||
\key{call last keyboard macro}{*}
|
||||
\key{execute macro stored in register {\it x}}{@ {\it x}}
|
||||
|
||||
\section{Motion Commands}
|
||||
|
||||
\key{go backward one character}{h}
|
||||
\key{go forward one character}{l}
|
||||
\key{next line keeping the column}{j}
|
||||
\key{previous line keeping the column}{k}
|
||||
\key{next line at first non-white}{+}
|
||||
\key{previous line at first non-white}{-}
|
||||
|
||||
\key{beginning of line}{0}
|
||||
\key{first non-white on line}{^}
|
||||
\key{end of line}{\$}
|
||||
\key{go to {\it n}-th column on line}{{\it n} |}
|
||||
|
||||
\key{go to {\it n}-th line}{{\it n} G}
|
||||
\key{go to last line}{G}
|
||||
\key{find matching parenthesis for \kbd{()}, \kbd{\{\}} and \kbd{[]}}{\%}
|
||||
|
||||
\key{go to {\bf home} window line}{H}
|
||||
\key{go to {\bf middle} window line}{M}
|
||||
\key{go to {\bf last} window line}{L}
|
||||
|
||||
\subsection{Words, Sentences, Paragraphs}
|
||||
|
||||
\key{forward {\bf word}}{w {\rm or} W}
|
||||
\key{{\bf backward} word}{b {\rm or} B}
|
||||
\key{{\bf end} of word}{e {\rm or} E}
|
||||
|
||||
In the case of capital letter commands, a word is delimited by a
|
||||
non-white character.
|
||||
|
||||
\key{forward sentence}{)}
|
||||
\key{backward sentence}{(}
|
||||
|
||||
\key{forward paragraph}{\}}
|
||||
\key{backward paragraph}{\{}
|
||||
|
||||
\subsection{Find Characters on the Line}
|
||||
|
||||
\key{{\bf find} {\it c} forward on line}{f {\it c}}
|
||||
\key{{\bf find} {\it c} backward on line}{F {\it c}}
|
||||
\key{up {\bf to} {\it c} forward on line}{t {\it c}}
|
||||
\key{up {\bf to} {\it c} backward on line}{T {\it c}}
|
||||
\key{repeat previous \kbd{f}, \kbd{F}, \kbd{t} or \kbd{T}}{;}
|
||||
\key{... in the opposite direction}{,}
|
||||
|
||||
\newcolumn
|
||||
\title{VIP Quick Reference Card}
|
||||
|
||||
\section{Searching and Replacing}
|
||||
|
||||
\key{search forward for {\sl pat}}{/ {\sl pat}}
|
||||
\key{search backward for {\sl pat}}{?\ {\sl pat}}
|
||||
\key{repeat previous search}{n}
|
||||
\key{... in the opposite direction}{N}
|
||||
|
||||
\key{incremental {\bf search}}{C-s}
|
||||
\key{{\bf reverse} incremental search}{C-r}
|
||||
|
||||
\key{{\bf replace}}{R}
|
||||
\key{{\bf query} replace}{Q}
|
||||
\key{{\bf replace} a character by another character {\it c}}{r {\it c}}
|
||||
|
||||
\section{Modifying Commands}
|
||||
|
||||
The delete (yank, change) commands explained below accept a motion command as
|
||||
their argument and delete (yank, change) the region determined by the motion
|
||||
command. Motion commands are classified into {\it point commands} and
|
||||
{\it line commands}. In the case of line commands, whole lines will
|
||||
be affected by the command. Motion commands will be represented by
|
||||
{\it m} below.
|
||||
|
||||
The point commands are as follows:
|
||||
|
||||
\hskip 5ex
|
||||
\kbd{h l 0 ^ \$ w W b B e E ( ) / ?\ ` f F t T \% ; ,}
|
||||
|
||||
The line commands are as follows:
|
||||
|
||||
\hskip 5ex
|
||||
\kbd{j k + - H M L \{ \} G '}
|
||||
|
||||
\subsection{Delete/Yank/Change Commands}
|
||||
|
||||
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\tabskip=0pt&#\cr
|
||||
\fourcol{}{{\bf delete}}{{\bf yank}}{{\bf change}}
|
||||
\fourcol{region determined by {\it m}}{d {\it m}}{y {\it m}}{c {\it m}}
|
||||
\fourcol{... into register {\it x}}{" {\it x\/} d {\it m}}{" {\it x\/} y {\it m}}{" {\it x\/} c {\it m}}
|
||||
\fourcol{a line}{d d}{Y {\rm or} y y}{c c}
|
||||
\fourcol{current {\bf region}}{d r}{y r}{c r}
|
||||
\fourcol{expanded {\bf region}}{d R}{y R}{c R}
|
||||
\fourcol{to end of line}{D}{y \$}{c \$}
|
||||
\fourcol{a character after point}{x}{y l}{c l}
|
||||
\fourcol{a character before point}{DEL}{y h}{c h}
|
||||
}
|
||||
|
||||
\subsection{Put Back Commands}
|
||||
|
||||
Deleted/yanked/changed text can be put back by the following commands.
|
||||
|
||||
\key{{\bf Put} back at point/above line}{P}
|
||||
\key{... from register {\it x}}{" {\it x\/} P}
|
||||
\key{{\bf put} back after point/below line}{p}
|
||||
\key{... from register {\it x}}{" {\it x\/} p}
|
||||
|
||||
\subsection{Repeating and Undoing Modifications}
|
||||
|
||||
\key{{\bf undo} last change}{u {\rm or} :und}
|
||||
\key{repeat last change}{.\ {\rm (dot)}}
|
||||
|
||||
Undo is undoable by \kbd{u} and repeatable by \kbd{.}.
|
||||
For example, \kbd{u...} will undo 4 previous changes.
|
||||
A \kbd{.} after \kbd{5dd} is equivalent to \kbd{5dd},
|
||||
while \kbd{3.} after \kbd{5dd} is equivalent to \kbd{3dd}.
|
||||
|
||||
\section{Miscellaneous Commands}
|
||||
|
||||
\endindentedkeys
|
||||
|
||||
\paralign to \hsize{#\tabskip=5pt plus 1 fil&#\tabskip=0pt&#\tabskip=0pt&#\tabskip=0pt&#\cr
|
||||
\fivecol{}{{\bf shift left}}{{\bf shift right}}{{\bf filter shell command}}{{\bf indent}}
|
||||
\fivecol{region}{< {\it m}}{> {\it m}}{!\ {\it m\/} {\sl shell-com}}{= {\it m}}
|
||||
\fivecol{line}{< <}{> >}{!\ !\ {\sl shell-com}}{= =}
|
||||
}
|
||||
|
||||
\key{emulate \kbd{ESC}/\kbd{C-h} in emacs mode}{ESC{\rm /}C-h}
|
||||
\key{emulate \kbd{C-c}/\kbd{C-x} in emacs mode}{C{\rm /}X}
|
||||
|
||||
\key{{\bf join} lines}{J}
|
||||
|
||||
\key{lowercase region}{\# c {\it m}}
|
||||
\key{uppercase region}{\# C {\it m}}
|
||||
\key{execute last keyboard macro on each line in the region}{\# g {\it m}}
|
||||
|
||||
\key{insert specified string for each line in the region}{\# q {\it m}}
|
||||
\key{check spelling of the words in the region}{\# s {\it m}}
|
||||
|
||||
\section{Differences from Vi}
|
||||
|
||||
\beginindentedkeys
|
||||
|
||||
In VIP some keys behave rather differently from Vi.
|
||||
The table below lists such keys, and you can get the effect of typing
|
||||
these keys by typing the corresponding keys in the VIP column.
|
||||
|
||||
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
|
||||
\threecol{}{{\bf Vi}}{{\bf VIP}}
|
||||
\threecol{forward character}{SPC}{l}
|
||||
\threecol{backward character}{C-h}{h}
|
||||
\threecol{next line at first non-white}{RET}{+}
|
||||
\threecol{delete previous character}{X}{DEL}
|
||||
\threecol{get information on file}{C-g}{g}
|
||||
\threecol{substitute characters}{s}{x i}
|
||||
\threecol{substitute line}{S}{c c}
|
||||
\threecol{change to end of line}{C {\rm or} R}{c \$}
|
||||
}
|
||||
|
||||
(Strictly speaking, \kbd{C} and \kbd{R} behave slightly differently in Vi.)
|
||||
|
||||
\section{Customization}
|
||||
|
||||
By default, search is case sensitive.
|
||||
You can change this by including the following line in your \kbd{.vip} file.
|
||||
|
||||
\hskip 5ex
|
||||
\kbd{(setq vip-case-fold-search t)}
|
||||
|
||||
\beginindentedkeys
|
||||
|
||||
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
|
||||
\twocol{{\bf variable}}{{\bf default value}}
|
||||
\twocol{vip-search-wrap-around}{t}
|
||||
\twocol{vip-case-fold-search}{nil}
|
||||
\twocol{vip-re-search}{nil}
|
||||
\twocol{vip-re-replace}{nil}
|
||||
\twocol{vip-re-query-replace}{nil}
|
||||
\twocol{vip-open-with-indent}{nil}
|
||||
\twocol{vip-help-in-insert-mode}{nil}
|
||||
\twocol{vip-shift-width}{8}
|
||||
\twocol{vip-tags-file-name}{"TAGS"}
|
||||
}
|
||||
|
||||
%\subsection{Customizing Key Bindings}
|
||||
|
||||
Include (some of) following lines in your \kbd{.vip} file
|
||||
to restore Vi key bindings.
|
||||
|
||||
\beginexample
|
||||
(define-key vip-mode-map "\\C-g" 'vip-info-on-file)
|
||||
(define-key vip-mode-map "\\C-h" 'vip-backward-char)
|
||||
(define-key vip-mode-map "\\C-m" 'vip-next-line-at-bol)
|
||||
(define-key vip-mode-map " " 'vip-forward-char)
|
||||
(define-key vip-mode-map "g" 'vip-keyboard-quit)
|
||||
(define-key vip-mode-map "s" 'vip-substitute)
|
||||
(define-key vip-mode-map "C" 'vip-change-to-eol)
|
||||
(define-key vip-mode-map "R" 'vip-change-to-eol)
|
||||
(define-key vip-mode-map "S" 'vip-substitute-line)
|
||||
(define-key vip-mode-map "X" 'vip-delete-backward-char)
|
||||
\endexample
|
||||
|
||||
\newcolumn
|
||||
|
||||
\title{Ex Commands in VIP}
|
||||
|
||||
In vi mode, an Ex command is entered by typing:
|
||||
|
||||
\hskip 5ex
|
||||
\kbd{:\ {\sl ex-command} RET}
|
||||
|
||||
\section{Ex Addresses}
|
||||
|
||||
\paralign to \hsize{#\tabskip=5pt plus 1 fil&#\tabskip=2pt&#\tabskip=5pt plus 1 fil&#\cr
|
||||
\twocolkey{current line}{.}{next line with {\sl pat}}{/ {\sl pat} /}
|
||||
\twocolkey{line {\it n}}{{\it n}}{previous line with {\sl pat}}{?\ {\sl pat} ?}
|
||||
\twocolkey{last line}{\$}{{\it n\/} line before {\it a}}{{\it a} - {\it n}}
|
||||
\twocolkey{next line}{+}{{\it a\/} through {\it b}}{{\it a\/} , {\it b}}
|
||||
\twocolkey{previous line}{-}{line marked with {\it x}}{' {\it x}}
|
||||
\twocolkey{entire buffer}{\%}{previous context}{' '}
|
||||
}
|
||||
|
||||
Addresses can be specified in front of a command.
|
||||
For example,
|
||||
|
||||
\hskip 5ex
|
||||
\kbd{:.,.+10m\$}
|
||||
|
||||
moves 11 lines below current line to the end of buffer.
|
||||
|
||||
\section{Ex Commands}
|
||||
|
||||
\endindentedkeys
|
||||
|
||||
\key{mark lines matching {\sl pat} and execute {\sl cmds} on these lines}{:g /{\sl pat}/ {\sl cmds}}
|
||||
|
||||
\key{mark lines {\it not\/} matching {\sl pat} and execute {\sl cmds} on these lines}{:v /{\sl pat}/ {\sl cmds}}
|
||||
|
||||
|
||||
\key{{\bf move} specified lines after {\sl addr}}{:m {\sl addr}}
|
||||
\key{{\bf copy} specified lines after {\sl addr}}{:co\rm\ (or \kbd{:t})\ \sl addr}
|
||||
\key{{\bf delete} specified lines [into register {\it x\/}]}{:d {\rm [{\it x\/}]}}
|
||||
\key{{\bf yank} specified lines [into register {\it x\/}]}{:y {\rm [{\it x\/}]}}
|
||||
\key{{\bf put} back text [from register {\it x\/}]}{:pu {\rm [{\it x\/}]}}
|
||||
|
||||
\key{{\bf substitute} {\sl repl} for first string on line matching {\sl pat}}{:s /{\sl pat}/{\sl repl}/}
|
||||
|
||||
\key{repeat last substitution}{:\&}
|
||||
\key{repeat previous substitute with previous search pattern as {\sl pat}}{:\~{}}
|
||||
|
||||
\key{{\bf read} in a file}{:r {\sl file}}
|
||||
\key{{\bf read} in the output of a shell command}{:r!\ {\sl command}}
|
||||
\key{write out specified lines into {\sl file}}{:w {\sl file}}
|
||||
\key{write out specified lines at the end of {\sl file}}{:w>> {\sl file}}
|
||||
\key{write out and then quit}{:wq {\sl file}}
|
||||
|
||||
\key{define a macro {\it x} that expands to {\sl cmd}}{:map {\it x} {\sl cmd}}
|
||||
\key{remove macro expansion associated with {\it x}}{:unma {\it x}}
|
||||
|
||||
\key{print line number}{:=}
|
||||
\key{print {\bf version} number of VIP}{:ve}
|
||||
|
||||
\key{shift specified lines to the right}{:>}
|
||||
\key{shift specified lines to the left}{:<}
|
||||
|
||||
\key{{\bf join} lines}{:j}
|
||||
\key{mark specified line to register {\it x}}{:k {\it x}}
|
||||
\key{{\bf set} a variable's value}{:se}
|
||||
\key{run a sub{\bf shell} in a window}{:sh}
|
||||
\key{execute shell command {\sl command}}{:!\ {\sl command}}
|
||||
\key{find first definition of {\bf tag} {\sl tag}}{:ta {\sl tag}}
|
||||
|
||||
|
||||
\copyrightnotice
|
||||
|
||||
\bye
|
||||
|
||||
% Local variables:
|
||||
% compile-command: "tex refcard"
|
||||
% End:
|
||||
2
etc/vmslink.opt
Normal file
2
etc/vmslink.opt
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
!sys$share:vaxcrtl/share
|
||||
sys$library:vaxcrtl/library
|
||||
|
|
@ -18,6 +18,9 @@ main (argc, argv)
|
|||
|
||||
while (1)
|
||||
{
|
||||
/* Make sure wakeup stops when Emacs goes away. */
|
||||
if (getppid () == 1)
|
||||
exit (0);
|
||||
printf ("Wake up!\n");
|
||||
fflush (stdout);
|
||||
/* If using a period of 60, produce the output when the minute
|
||||
31
etc/xmouse.doc
Normal file
31
etc/xmouse.doc
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
.\" X windows GNU Emacs key bindings.
|
||||
.\" Print with `tbl xmouse.doc | troff`
|
||||
.\"
|
||||
.rs
|
||||
.sp 1i
|
||||
.ps 6
|
||||
.vs 7
|
||||
.TS
|
||||
box;
|
||||
cfI s s
|
||||
c | c | c
|
||||
l | l | l.
|
||||
GNU Emacs Key Bindings for X Windows
|
||||
=
|
||||
Key Button Function
|
||||
_
|
||||
Unshifted left x-mouse-set-point
|
||||
\^ middle x-paste-text
|
||||
\^ right x-cut-text
|
||||
_
|
||||
Control middle x-cut-and-wipe-text
|
||||
\^ right x-mouse-select-and-split
|
||||
_
|
||||
Shift middle x-cut-text
|
||||
\^ right x-paste-text
|
||||
_
|
||||
Control-Shift left x-buffer-menu
|
||||
\^ middle x-help
|
||||
\^ right x-mouse-keep-one-window
|
||||
.TE
|
||||
|
||||
|
|
@ -1,22 +1,17 @@
|
|||
/*
|
||||
* yow.c
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include "../src/paths.h"
|
||||
|
||||
/* zippy.c
|
||||
*
|
||||
* Print a quotation from Zippy the Pinhead.
|
||||
* Qux <Kaufman-David@Yale> March 6, 1986
|
||||
*
|
||||
* With dynamic memory allocation.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include "../src/paths.h" /* For PATH_EXEC. */
|
||||
|
||||
#define BUFSIZE 80
|
||||
#define BUFSIZE 2000
|
||||
#define SEP '\0'
|
||||
|
||||
#ifndef YOW_FILE
|
||||
#define YOW_FILE "yow.lines"
|
||||
#endif
|
||||
|
||||
main (argc, argv)
|
||||
int argc;
|
||||
|
|
@ -24,7 +19,7 @@ main (argc, argv)
|
|||
{
|
||||
FILE *fp;
|
||||
char file[BUFSIZ];
|
||||
void yow(), setup_yow();
|
||||
void yow();
|
||||
|
||||
if (argc > 2 && !strcmp (argv[1], "-f"))
|
||||
strcpy (file, argv[2]);
|
||||
|
|
@ -43,58 +38,29 @@ main (argc, argv)
|
|||
/* initialize random seed */
|
||||
srand((int) (getpid() + time((long *) 0)));
|
||||
|
||||
setup_yow(fp);
|
||||
yow(fp);
|
||||
fclose(fp);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
static long len = -1;
|
||||
static long header_len;
|
||||
|
||||
#define AVG_LEN 40 /* average length of a quotation */
|
||||
|
||||
/* Sets len and header_len */
|
||||
void
|
||||
setup_yow(fp)
|
||||
FILE *fp;
|
||||
{
|
||||
int c;
|
||||
|
||||
/* Get length of file */
|
||||
/* Because the header (stuff before the first SEP) can be very long,
|
||||
* thus biasing our search in favor of the first quotation in the file,
|
||||
* we explicitly skip that. */
|
||||
while ((c = getc(fp)) != SEP) {
|
||||
if (c == EOF) {
|
||||
fprintf(stderr, "File contains no separators.\n");
|
||||
exit(2);
|
||||
}
|
||||
}
|
||||
header_len = ftell(fp);
|
||||
if (header_len > AVG_LEN)
|
||||
header_len -= AVG_LEN; /* allow the first quotation to appear */
|
||||
|
||||
if (fseek(fp, 0L, 2) == -1) {
|
||||
perror("fseek 1");
|
||||
exit(1);
|
||||
}
|
||||
len = ftell(fp) - header_len;
|
||||
}
|
||||
|
||||
|
||||
/* go to a random place in the file and print the quotation there */
|
||||
void
|
||||
yow (fp)
|
||||
FILE *fp;
|
||||
{
|
||||
static long len = -1;
|
||||
long offset;
|
||||
int c, i = 0;
|
||||
char *buf;
|
||||
unsigned int bufsize;
|
||||
char *malloc(), *realloc();
|
||||
char buf[BUFSIZE];
|
||||
|
||||
offset = rand() % len + header_len;
|
||||
/* Get length of file, go to a random place in it */
|
||||
if (len == -1) {
|
||||
if (fseek(fp, 0, 2) == -1) {
|
||||
perror("fseek 1");
|
||||
exit(1);
|
||||
}
|
||||
len = ftell(fp);
|
||||
}
|
||||
offset = rand() % len;
|
||||
if (fseek(fp, offset, 0) == -1) {
|
||||
perror("fseek 2");
|
||||
exit(1);
|
||||
|
|
@ -117,27 +83,13 @@ yow (fp)
|
|||
yow(fp);
|
||||
return;
|
||||
}
|
||||
|
||||
bufsize = BUFSIZE;
|
||||
buf = malloc(bufsize);
|
||||
if (buf == (char *)0) {
|
||||
fprintf(stderr, "can't allocate any memory\n");
|
||||
exit (3);
|
||||
}
|
||||
|
||||
buf[i++] = c;
|
||||
while ((c = getc(fp)) != SEP && c != EOF) {
|
||||
buf[i++] = c;
|
||||
|
||||
if (i == bufsize-1) {
|
||||
|
||||
if (i == BUFSIZ-1)
|
||||
/* Yow! Is this quotation too long yet? */
|
||||
bufsize *= 2;
|
||||
buf = realloc(buf, bufsize);
|
||||
if (buf == (char *)0) {
|
||||
fprintf(stderr, "can't allocate more memory\n");
|
||||
exit (3);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
buf[i++] = 0;
|
||||
printf("%s\n", buf);
|
||||
249
info/COPYING
Normal file
249
info/COPYING
Normal file
|
|
@ -0,0 +1,249 @@
|
|||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 1, February 1989
|
||||
|
||||
Copyright (C) 1989 Free Software Foundation, Inc.
|
||||
675 Mass Ave, Cambridge, MA 02139, USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The license agreements of most software companies try to keep users
|
||||
at the mercy of those companies. By contrast, our General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. The
|
||||
General Public License applies to the Free Software Foundation's
|
||||
software and to any other program whose authors commit to using it.
|
||||
You can use it for your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Specifically, the General Public License is designed to make
|
||||
sure that you have the freedom to give away or sell copies of free
|
||||
software, that you receive source code or can get it if you want it,
|
||||
that you can change the software or use pieces of it in new free
|
||||
programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of a such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must tell them their rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any program or other work which
|
||||
contains a notice placed by the copyright holder saying it may be
|
||||
distributed under the terms of this General Public License. The
|
||||
"Program", below, refers to any such program or work, and a "work based
|
||||
on the Program" means either the Program or any work containing the
|
||||
Program or a portion of it, either verbatim or with modifications. Each
|
||||
licensee is addressed as "you".
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's source
|
||||
code as you receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice and
|
||||
disclaimer of warranty; keep intact all the notices that refer to this
|
||||
General Public License and to the absence of any warranty; and give any
|
||||
other recipients of the Program a copy of this General Public License
|
||||
along with the Program. You may charge a fee for the physical act of
|
||||
transferring a copy.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion of
|
||||
it, and copy and distribute such modifications under the terms of Paragraph
|
||||
1 above, provided that you also do the following:
|
||||
|
||||
a) cause the modified files to carry prominent notices stating that
|
||||
you changed the files and the date of any change; and
|
||||
|
||||
b) cause the whole of any work that you distribute or publish, that
|
||||
in whole or in part contains the Program or any part thereof, either
|
||||
with or without modifications, to be licensed at no charge to all
|
||||
third parties under the terms of this General Public License (except
|
||||
that you may choose to grant warranty protection to some or all
|
||||
third parties, at your option).
|
||||
|
||||
c) If the modified program normally reads commands interactively when
|
||||
run, you must cause it, when started running for such interactive use
|
||||
in the simplest and most usual way, to print or display an
|
||||
announcement including an appropriate copyright notice and a notice
|
||||
that there is no warranty (or else, saying that you provide a
|
||||
warranty) and that users may redistribute the program under these
|
||||
conditions, and telling the user how to view a copy of this General
|
||||
Public License.
|
||||
|
||||
d) You may charge a fee for the physical act of transferring a
|
||||
copy, and you may at your option offer warranty protection in
|
||||
exchange for a fee.
|
||||
|
||||
Mere aggregation of another independent work with the Program (or its
|
||||
derivative) on a volume of a storage or distribution medium does not bring
|
||||
the other work under the scope of these terms.
|
||||
|
||||
3. You may copy and distribute the Program (or a portion or derivative of
|
||||
it, under Paragraph 2) in object code or executable form under the terms of
|
||||
Paragraphs 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of
|
||||
Paragraphs 1 and 2 above; or,
|
||||
|
||||
b) accompany it with a written offer, valid for at least three
|
||||
years, to give any third party free (except for a nominal charge
|
||||
for the cost of distribution) a complete machine-readable copy of the
|
||||
corresponding source code, to be distributed under the terms of
|
||||
Paragraphs 1 and 2 above; or,
|
||||
|
||||
c) accompany it with the information you received as to where the
|
||||
corresponding source code may be obtained. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form alone.)
|
||||
|
||||
Source code for a work means the preferred form of the work for making
|
||||
modifications to it. For an executable file, complete source code means
|
||||
all the source code for all modules it contains; but, as a special
|
||||
exception, it need not include source code for modules which are standard
|
||||
libraries that accompany the operating system on which the executable
|
||||
file runs, or for standard header files or definitions files that
|
||||
accompany that operating system.
|
||||
|
||||
4. You may not copy, modify, sublicense, distribute or transfer the
|
||||
Program except as expressly provided under this General Public License.
|
||||
Any attempt otherwise to copy, modify, sublicense, distribute or transfer
|
||||
the Program is void, and will automatically terminate your rights to use
|
||||
the Program under this License. However, parties who have received
|
||||
copies, or rights to use copies, from you under this General Public
|
||||
License will not have their licenses terminated so long as such parties
|
||||
remain in full compliance.
|
||||
|
||||
5. By copying, distributing or modifying the Program (or any work based
|
||||
on the Program) you indicate your acceptance of this license to do so,
|
||||
and all its terms and conditions.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the original
|
||||
licensor to copy, distribute or modify the Program subject to these
|
||||
terms and conditions. You may not impose any further restrictions on the
|
||||
recipients' exercise of the rights granted herein.
|
||||
|
||||
7. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of the license which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
the license, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
8. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
Appendix: How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to humanity, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these
|
||||
terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest to
|
||||
attach them to the start of each source file to most effectively convey
|
||||
the exclusion of warranty; and each file should have at least the
|
||||
"copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) 19yy <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 1, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) 19xx name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the
|
||||
appropriate parts of the General Public License. Of course, the
|
||||
commands you use may be called something other than `show w' and `show
|
||||
c'; they could even be mouse-clicks or menu items--whatever suits your
|
||||
program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
program `Gnomovision' (a program to direct compilers to make passes
|
||||
at assemblers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
32
info/dir
Normal file
32
info/dir
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
-*- Text -*-
|
||||
This is the file .../info/dir, which contains the topmost node of the
|
||||
Info hierarchy. The first time you invoke Info you start off
|
||||
looking at that node, which is (dir)Top.
|
||||
|
||||
File: dir Node: Top This is the top of the INFO tree
|
||||
This (the Directory node) gives a menu of major topics.
|
||||
Typing "d" returns here, "q" exits, "?" lists all INFO commands, "h"
|
||||
gives a primer for first-timers, "mTexinfo<Return>" visits Texinfo topic,
|
||||
etc.
|
||||
--- PLEASE ADD DOCUMENTATION TO THIS TREE. (See INFO topic first.) ---
|
||||
|
||||
* Menu: The list of major topics begins on the next line.
|
||||
|
||||
* Info: (info). Documentation browsing system.
|
||||
|
||||
* Emacs: (emacs). The extensible self-documenting text editor.
|
||||
|
||||
* VIP: (vip). A VI-emulation for Emacs.
|
||||
|
||||
* Texinfo: (texinfo).
|
||||
With one source file, make either a printed manual
|
||||
(through TeX) or an Info file (through texinfo).
|
||||
Full documentation in this menu item.
|
||||
|
||||
* Termcap: (termcap).
|
||||
The termcap library, which enables application programs
|
||||
to handle all types of character-display terminals.
|
||||
|
||||
* Regex: (regex).
|
||||
The GNU regular expression library.
|
||||
|
||||
369
info/emacs
Normal file
369
info/emacs
Normal file
|
|
@ -0,0 +1,369 @@
|
|||
This is Info file ../info/emacs, produced by Makeinfo-1.49 from the
|
||||
input file emacs.texi.
|
||||
|
||||
This file documents the GNU Emacs editor.
|
||||
|
||||
Copyright (C) 1985, 1986, 1988, 1992 Richard M. Stallman.
|
||||
|
||||
Permission is granted to make and distribute verbatim copies of this
|
||||
manual provided the copyright notice and this permission notice are
|
||||
preserved on all copies.
|
||||
|
||||
Permission is granted to copy and distribute modified versions of
|
||||
this manual under the conditions for verbatim copying, provided also
|
||||
that the sections entitled "The GNU Manifesto", "Distribution" and "GNU
|
||||
General Public License" are included exactly as in the original, and
|
||||
provided that the entire resulting derived work is distributed under the
|
||||
terms of a permission notice identical to this one.
|
||||
|
||||
Permission is granted to copy and distribute translations of this
|
||||
manual into another language, under the above conditions for modified
|
||||
versions, except that the sections entitled "The GNU Manifesto",
|
||||
"Distribution" and "GNU General Public License" may be included in a
|
||||
translation approved by the author instead of in the original English.
|
||||
|
||||
Indirect:
|
||||
emacs-1: 1115
|
||||
emacs-2: 48771
|
||||
emacs-3: 96620
|
||||
emacs-4: 146550
|
||||
emacs-5: 193326
|
||||
emacs-6: 242965
|
||||
emacs-7: 292468
|
||||
emacs-8: 339287
|
||||
emacs-9: 389177
|
||||
emacs-10: 437965
|
||||
emacs-11: 485451
|
||||
emacs-12: 534362
|
||||
emacs-13: 583212
|
||||
emacs-14: 632855
|
||||
emacs-15: 682479
|
||||
emacs-16: 705948
|
||||
emacs-17: 737068
|
||||
emacs-18: 764424
|
||||
emacs-19: 813651
|
||||
|
||||
Tag Table:
|
||||
(Indirect)
|
||||
Node: Top1117
|
||||
Node: Distrib15242
|
||||
Node: License17658
|
||||
Node: Intro30930
|
||||
Node: Screen33604
|
||||
Node: Point35048
|
||||
Node: Echo Area36624
|
||||
Node: Mode Line38883
|
||||
Node: Characters43201
|
||||
Node: Keys46260
|
||||
Node: Commands48773
|
||||
Node: Entering Emacs51538
|
||||
Node: Exiting52860
|
||||
Node: Command Switches55228
|
||||
Node: Basic62319
|
||||
Node: Blank Lines71078
|
||||
Node: Continuation Lines72633
|
||||
Node: Position Info74072
|
||||
Node: Arguments77253
|
||||
Node: Undo80508
|
||||
Node: Minibuffer84182
|
||||
Node: Minibuffer File86705
|
||||
Node: Minibuffer Edit88332
|
||||
Node: Completion90623
|
||||
Node: Repetition96622
|
||||
Node: M-x99542
|
||||
Node: Help102154
|
||||
Node: Mark111292
|
||||
Node: Setting Mark112925
|
||||
Node: Using Region115121
|
||||
Node: Marking Objects115861
|
||||
Node: Mark Ring117714
|
||||
Node: Killing119560
|
||||
Node: Yanking125074
|
||||
Node: Kill Ring125876
|
||||
Node: Appending Kills127116
|
||||
Node: Earlier Kills129180
|
||||
Node: Accumulating Text131805
|
||||
Node: Rectangles134869
|
||||
Node: Registers138379
|
||||
Node: RegPos139398
|
||||
Node: RegText140282
|
||||
Node: RegRect141345
|
||||
Node: Display142072
|
||||
Node: Scrolling143216
|
||||
Node: Horizontal Scrolling146552
|
||||
Node: Selective Display147742
|
||||
Node: Display Vars148961
|
||||
Node: Search151589
|
||||
Node: Incremental Search152775
|
||||
Node: Nonincremental Search160677
|
||||
Node: Word Search162140
|
||||
Node: Regexp Search163747
|
||||
Node: Regexps165602
|
||||
Node: Search Case176255
|
||||
Node: Replace176962
|
||||
Node: Unconditional Replace177906
|
||||
Node: Regexp Replace179013
|
||||
Node: Replacement and Case179928
|
||||
Node: Query Replace180877
|
||||
Node: Other Repeating Search184477
|
||||
Node: Fixit185728
|
||||
Node: Kill Errors186316
|
||||
Node: Transpose187621
|
||||
Node: Fixing Case190085
|
||||
Node: Spelling190742
|
||||
Node: Files192174
|
||||
Node: File Names193328
|
||||
Node: Visiting196943
|
||||
Node: Saving201764
|
||||
Node: Backup206641
|
||||
Node: Backup Names208034
|
||||
Node: Backup Deletion209547
|
||||
Node: Backup Copying210718
|
||||
Node: Interlocking212452
|
||||
Node: Reverting216298
|
||||
Node: Auto Save218111
|
||||
Node: Auto Save Files219074
|
||||
Node: Auto Save Control220897
|
||||
Node: Recover222115
|
||||
Node: ListDir223257
|
||||
Node: Dired224740
|
||||
Node: Dired Enter225396
|
||||
Node: Dired Edit226213
|
||||
Node: Dired Deletion227953
|
||||
Node: Dired Immed231163
|
||||
Node: Misc File Ops232435
|
||||
Node: Buffers235090
|
||||
Node: Select Buffer237366
|
||||
Node: List Buffers238678
|
||||
Node: Misc Buffer240059
|
||||
Node: Kill Buffer241763
|
||||
Node: Several Buffers242967
|
||||
Node: Windows246738
|
||||
Node: Basic Window247323
|
||||
Node: Split Window249061
|
||||
Node: Other Window250751
|
||||
Node: Pop Up Window252498
|
||||
Node: Change Window253640
|
||||
Node: Major Modes255556
|
||||
Node: Choosing Modes257806
|
||||
Node: Indentation260347
|
||||
Node: Indentation Commands262441
|
||||
Node: Tab Stops265140
|
||||
Node: Just Spaces267068
|
||||
Node: Text267874
|
||||
Node: Text Mode269868
|
||||
Node: Nroff Mode272051
|
||||
Node: TeX Mode273674
|
||||
Node: TeX Editing275890
|
||||
Node: TeX Print279306
|
||||
Node: Texinfo Mode282548
|
||||
Node: Outline Mode283675
|
||||
Node: Outline Format285142
|
||||
Node: Outline Motion287936
|
||||
Node: Outline Visibility289512
|
||||
Node: Words292470
|
||||
Node: Sentences295430
|
||||
Node: Paragraphs297642
|
||||
Node: Pages299963
|
||||
Node: Filling302576
|
||||
Node: Auto Fill303355
|
||||
Node: Fill Commands305492
|
||||
Node: Fill Prefix307628
|
||||
Node: Case309810
|
||||
Node: Programs311848
|
||||
Node: Program Modes314413
|
||||
Node: Lists316618
|
||||
Node: Defuns322320
|
||||
Node: Grinding324938
|
||||
Node: Basic Indent325551
|
||||
Node: Multi-line Indent327560
|
||||
Node: Lisp Indent329190
|
||||
Node: C Indent332572
|
||||
Node: Matching337718
|
||||
Node: Comments339289
|
||||
Node: Macro Expansion345804
|
||||
Node: Balanced Editing346355
|
||||
Node: Lisp Completion347379
|
||||
Node: Documentation348388
|
||||
Node: Change Log349635
|
||||
Node: Tags352485
|
||||
Node: Tag Syntax353812
|
||||
Node: Create Tag Table354506
|
||||
Node: Select Tag Table356099
|
||||
Node: Find Tag356939
|
||||
Node: Tags Search359259
|
||||
Node: Tags Stepping361545
|
||||
Node: List Tags362115
|
||||
Node: Fortran363134
|
||||
Node: Fortran Motion364194
|
||||
Node: Fortran Indent364997
|
||||
Node: ForIndent Commands365677
|
||||
Node: ForIndent Num366804
|
||||
Node: ForIndent Conv368075
|
||||
Node: ForIndent Vars368860
|
||||
Node: Fortran Comments369999
|
||||
Node: Fortran Columns373630
|
||||
Node: Fortran Abbrev375047
|
||||
Node: Compiling/Testing375959
|
||||
Node: Compilation376932
|
||||
Node: Lisp Modes381893
|
||||
Node: Lisp Libraries383152
|
||||
Node: Loading383714
|
||||
Node: Compiling Libraries386598
|
||||
Node: Mocklisp388500
|
||||
Node: Lisp Eval389179
|
||||
Node: Lisp Debug392809
|
||||
Node: Lisp Interaction398298
|
||||
Node: External Lisp399664
|
||||
Node: Abbrevs401750
|
||||
Node: Defining Abbrevs403968
|
||||
Node: Expanding Abbrevs406380
|
||||
Node: Editing Abbrevs409178
|
||||
Node: Saving Abbrevs411053
|
||||
Node: Dynamic Abbrevs413016
|
||||
Node: Picture414332
|
||||
Node: Basic Picture416763
|
||||
Node: Insert in Picture419063
|
||||
Node: Tabs in Picture420477
|
||||
Node: Rectangles in Picture421985
|
||||
Node: Sending Mail423727
|
||||
Node: Mail Format425626
|
||||
Node: Mail Headers426958
|
||||
Node: Mail Mode430251
|
||||
Node: Rmail433950
|
||||
Node: Rmail Scrolling436976
|
||||
Node: Rmail Motion437967
|
||||
Node: Rmail Deletion441295
|
||||
Node: Rmail Inbox444068
|
||||
Node: Rmail Files446239
|
||||
Node: Rmail Output448789
|
||||
Node: Rmail Labels451173
|
||||
Node: Rmail Summary454708
|
||||
Node: Rmail Make Summary455671
|
||||
Node: Rmail Summary Edit457096
|
||||
Node: Rmail Reply460460
|
||||
Node: Rmail Editing463555
|
||||
Node: Rmail Digest465865
|
||||
Node: Recursive Edit466933
|
||||
Node: Narrowing470007
|
||||
Node: Sorting472014
|
||||
Node: Shell477102
|
||||
Node: Single Shell478018
|
||||
Node: Interactive Shell479601
|
||||
Node: Shell Mode482620
|
||||
Node: Hardcopy484408
|
||||
Node: Dissociated Press485453
|
||||
Node: Amusements488012
|
||||
Node: Emulation488498
|
||||
Node: Customization491221
|
||||
Node: Minor Modes492683
|
||||
Node: Variables494336
|
||||
Node: Examining496317
|
||||
Node: Edit Options497759
|
||||
Node: Locals499365
|
||||
Node: File Variables502401
|
||||
Node: Keyboard Macros506234
|
||||
Node: Basic Kbd Macro508421
|
||||
Node: Save Kbd Macro510663
|
||||
Node: Kbd Macro Query512324
|
||||
Node: Key Bindings514243
|
||||
Node: Keymaps515103
|
||||
Node: Rebinding519723
|
||||
Node: Disabling521940
|
||||
Node: Syntax523734
|
||||
Node: Syntax Entry524604
|
||||
Node: Syntax Change528757
|
||||
Node: Init File530947
|
||||
Node: Init Syntax532243
|
||||
Node: Init Examples534364
|
||||
Node: Terminal Init538264
|
||||
Node: Debugging Init539994
|
||||
Node: Quitting540700
|
||||
Node: Lossage543671
|
||||
Node: Stuck Recursive544303
|
||||
Node: Screen Garbled545003
|
||||
Node: Text Garbled546113
|
||||
Node: Unasked-for Search546742
|
||||
Node: Emergency Escape547519
|
||||
Node: Total Frustration549271
|
||||
Node: Bugs549890
|
||||
Node: Version 19559029
|
||||
Node: Basic Changes561292
|
||||
Node: New Facilities564717
|
||||
Node: Binding Changes567776
|
||||
Node: Changed Commands571408
|
||||
Node: M-x Changes573788
|
||||
Node: New Commands576105
|
||||
Node: Search Changes580453
|
||||
Node: Filling Changes581913
|
||||
Node: TeX Mode Changes583214
|
||||
Node: Shell Changes584536
|
||||
Node: Spell Changes588181
|
||||
Node: Mail Changes589841
|
||||
Node: Tags Changes592552
|
||||
Node: Info Changes594453
|
||||
Node: Dired Changes595940
|
||||
Node: Marks in Dired597105
|
||||
Node: Multiple Files598949
|
||||
Node: Shell Commands in Dired601846
|
||||
Node: Dired Regexps603444
|
||||
Node: Dired Case Conversion605867
|
||||
Node: Comparison in Dired606273
|
||||
Node: Subdirectories in Dired607019
|
||||
Node: Hiding Subdirectories608966
|
||||
Node: Editing Dired Buffer610085
|
||||
Node: Dired and Find611418
|
||||
Node: GNUS612640
|
||||
Node: Buffers of GNUS613413
|
||||
Node: GNUS Startup614424
|
||||
Node: Summary of GNUS615321
|
||||
Node: Calendar/Diary618790
|
||||
Node: Calendar619976
|
||||
Node: Diary Entries622461
|
||||
Node: Displaying Diary623856
|
||||
Node: New Entries624932
|
||||
Node: European Calendar Style627760
|
||||
Node: Simple and Fancy628435
|
||||
Node: Other Diary Features629321
|
||||
Node: Startup Diary630467
|
||||
Node: Printing Diary630963
|
||||
Node: Version Control631771
|
||||
Node: Concepts of VC632857
|
||||
Node: Editing with VC634136
|
||||
Node: Variables for Check-in/out638545
|
||||
Node: Log Entries640198
|
||||
Node: Change Logs and VC641494
|
||||
Node: Comparing Versions644881
|
||||
Node: VC Status646117
|
||||
Node: Renaming and VC647150
|
||||
Node: Snapshots647915
|
||||
Node: Making Snapshots648407
|
||||
Node: Snapshot Caveats649966
|
||||
Node: Version Headers651790
|
||||
Node: Emerge654041
|
||||
Node: Overview of Emerge654532
|
||||
Node: Submodes of Emerge657429
|
||||
Node: State of Difference659006
|
||||
Node: Merge Commands661545
|
||||
Node: Exiting Emerge664130
|
||||
Node: Combining in Emerge664814
|
||||
Node: Fine Points of Emerge665594
|
||||
Node: Debuggers666535
|
||||
Node: Starting GUD667156
|
||||
Node: Debugger Operation668114
|
||||
Node: Commands of GUD669262
|
||||
Node: GUD Customization671301
|
||||
Node: Other New Modes673219
|
||||
Node: Asm Mode674326
|
||||
Node: Edebug Mode674783
|
||||
Node: Editing Binary Files675522
|
||||
Node: Key Sequence Changes676650
|
||||
Node: Hook Changes680636
|
||||
Node: Manifesto682481
|
||||
Node: Glossary705950
|
||||
Node: Key Index737070
|
||||
Node: Command Index764426
|
||||
Node: Variable Index802648
|
||||
Node: Concept Index813653
|
||||
|
||||
End Tag Table
|
||||
1007
info/emacs-1
Normal file
1007
info/emacs-1
Normal file
File diff suppressed because it is too large
Load diff
1131
info/emacs-10
Normal file
1131
info/emacs-10
Normal file
File diff suppressed because it is too large
Load diff
1173
info/emacs-11
Normal file
1173
info/emacs-11
Normal file
File diff suppressed because it is too large
Load diff
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue