Annotation of researchv9/cmd/emacs/README, revision 1.1.1.1

1.1       root        1: This file describes the standard distribution for the emacs editor. 
                      2: The file contains instructions for compiling, a list of associated
                      3: software and files, and additional information for people with
                      4: special problems, like porting to odd machine types or using odd
                      5: operating systems.
                      6: 
                      7: Anyone who is trying to maintain a copy of EMACS should send his
                      8: name, address, machine name, and login name to me:
                      9: 
                     10: Warren Montgomery
                     11: IH 6C-501
                     12: 
                     13: (ihesa!warren or ihnss!warren)
                     14: 
                     15: I will try to distribute news of interest about new versions or
                     16: features to anyone who is maintaining a copy
                     17: 
                     18: COMPILATION AND INSTALLATION:
                     19: 
                     20: The first step is to move all of the files into the directory that
                     21: you intend to keep the source in.  Do this now if you haven't.
                     22: 
                     23: The first line of the makefile describes any installation dependent
                     24: parameters needed to compile emacs.  You will need to set the type
                     25: of system that you are compiling for now.   You may want to set
                     26: other parameter as well, as described later in the text, but you
                     27: should be able to compile with just this option set.
                     28: 
                     29: -Dux3: Set this option if you are compiling for any AT&T Unix
                     30:        system released after 1980.  (USG 3.0 or greater, system
                     31:        III or greater, or version 7).  If you have an older version
                     32:        (version 6, PWB unix, USG 2.0 or 1.2), omit this option.
                     33:        
                     34: -Dbsd: Set this when compiling for Berkeley unix (4.X bsd). 
                     35:        Depending on which version you compile for, you may get an
                     36:        error in not being able to find one of the include files. 
                     37:        If you do, just change the pathname of the include file to
                     38:        wherever it lives on your system and recompile.  -Dbsd
                     39:        should set it up for any Berkeley system of recent release).
                     40:        
                     41:        As distributed, emacs assumes 4.2BSD, with the select and
                     42:        cbreak mechanisms appropriate to 4.2.  If your system does
                     43:        not have these, change the defines near the front of
                     44:        emacs_io.c that set up SELECT, FLIM,  and CBRAKE.
                     45: 
                     46:        The primary effect of these two options is to specify what kind of
                     47:        terminal I/O control mechanism to use.  If it is not set
                     48:        correctly, emacs may not respond immediately to typed
                     49:        characters (it may wait for 16 characters to be typed before
                     50:        responding).
                     51:        
                     52: -Du370 and -Duts:  If you are compiling for unix/370 or amdahl uts,
                     53:        set one of these, which affect the terminal initialization
                     54:        code and some buffer size limits.
                     55: 
                     56: -DTERMCAP or -DTERMINFO:  If you have a termcap or terminfo system
                     57:        installed, emacs can be compiled to use it.  You must add
                     58:        the appropriate library to the makefile entry for "xemacs"
                     59:        before compiling.  If neither of these options are set,
                     60:        emacs will compile for it's own terminal support.
                     61:        
                     62: -DPORTEXT:  Set this flag when compiling with a compiler that does
                     63:        not allocate external variables in the order in which they
                     64:        are designed.  This flag is set automatically when compiling
                     65:        for uts or unix/370, but may need to be set manually if
                     66:        needed on other machines
                     67:        
                     68: To make a copy of emacs, just type make.  The makefile will make
                     69: emacs, putting the result in a file called xemacs.   EMACS requires
                     70: several files while running for its error messages, help
                     71: explanations, and statistics.  These are kept in a directory known
                     72: as the emacs library.  By default, this is the
                     73: directory in which emacs was made.  You should make xemacs at least
                     74: once this way to test it.  After you are satisfied with it, you can
                     75: cause the new versions of emacs, dired, and ecomp to be installed by
                     76: editing the makefile.  Change the definitions of BINDIR and LIBDIR
                     77: to specify where you want the executable files to be put and where
                     78: you  want the emacs library files to be put and type "make install".
                     79: This will cause some of the files to be recompiled in order to
                     80: accommodate the change in the library location, and will cause all of
                     81: the resulting objects to be moved to BINDIR and the support files
                     82: installed in LIBDIR.  The pathname of LIBDIR is kept in the file
                     83: "terminals.x".
                     84: 
                     85: TROUBLESHOOTING:
                     86: 
                     87: If emacs won't make or doesn't behave as you think it should, there
                     88: is a primitive "expert system" that diagnoses common problems
                     89: included in this distribution.  This system will ask you questions
                     90: about your installation of emacs and give suggestions on what you
                     91: can do to correct the problem.  To use it, first make "hyde"
                     92: (HYpothesis Driven Expert).  (If the make file won't run, just run
                     93: cc -o hyde hyde.c.)  Once you have hyde built, you use it by
                     94: invoking "hyde kbase".  Hyde will ask questions about your
                     95: installation.  In general, it will present a series of statements,
                     96: each with numbers, and you respond by indicating all of the numbers
                     97: that apply to your situation.
                     98: 
                     99: Hyde is a crude tool, capable only of diagnosing the common problems
                    100: that I have anticipated (or debugged for others) and put in it's
                    101: knowledge base.  It may, however, save  a lot of time in pointing up
                    102: things that you may have overlooked.
                    103: 
                    104: OTHER FILES AND UTILITIES:
                    105: 
                    106: EMACS can keep statistics on how it is being used and write these to a
                    107: file called s<version> (where <version> is the version number) in
                    108: the emacs library.  If you want statistics, create such a file (such
                    109: as s4.7) in the emacs library give read and write access to
                    110: everybody.  EMACS will produce one line of numbers for each
                    111: invocation, which can be processed with stat_proc.
                    112: 
                    113: In addition to building xemacs, the makefile will build "ecomp"
                    114: which is the emacs macro compiler.  It can be used to compile EML
                    115: programs into macros for emacs, and should be placed wherever you put
                    116: the emacs binary.  Ecomp depends on the file "emacs_defs" to define
                    117: the macro language.  This file should be kept in the emacs library.
                    118: (All of this is done automatically by making "install")
                    119: 
                    120: The utility programs stat_proc.c and see_it.c have been sent along
                    121: with the EMACS sources.  Both simply require compilation.  stat_proc
                    122: processes the statistics file.  Invoked with the name of the file to
                    123: crunch, it produces a summary, and a list of users and the number of
                    124: times each invoked EMACS.  Invoked with a user name as the second
                    125: parameter, statistics for that user alone are given.  If a - is
                    126: given as the second parameter, one summary is produced for each user.
                    127: 
                    128: see_it works like cat, but translates non-ascii and control
                    129: characters into multi-character sequences, like EMACS.  Thus the
                    130: character 201(octal) in the input would produce M-^A in the output. 
                    131: Normally, all control characters except newline are translated.  If
                    132: the -t option is given, tabs will also pass untranslated.
                    133: 
                    134: Emacs_vt.c is a collection of screen manipulation routines based on
                    135: emacs.  The makefile entry for emacs_vt.o will compile it, and the
                    136: mm source file emacs_vt.mm gives instructions for its use.
                    137: 
                    138: Xusend.c is a write-around for a mis-feature of the usend file
                    139: sending command.  It segments a list of files to avoid over running
                    140: the byte count limit of usend.  Use should be self-explanatory.
                    141: 
                    142: The cpio archive files MACROS and MACRO_SOURCE contain a collection
                    143: of sample macros that do various things.  Macros for which source
                    144: code exists are distributed in MACRO_SOURCE.  object code for all
                    145: macros is in MACROS.  These will be automatically extracted into a
                    146: macros directory when you run the makefile.  Most contain some
                    147: limited documentation in addition to that available from the help
                    148: command help.  The file CATALOG in the macro library summarizes what
                    149: is available.
                    150: 
                    151: The cpio archive file TERMINALS contains the terminal support
                    152: description files.  When you first make emacs, a directory
                    153: "terminals" will be created and the terminal descriptions will be
                    154: loaded into it.  You may wish to change some of the entries, or add
                    155: your own, depending on the terminals used on your machine and the
                    156: naming conventions for terminals.
                    157: 
                    158: The file term_support contains a description of the terminal
                    159: description files, and instructions for adding support for a new terminal.
                    160: 
                    161: The file hyde.c is a crude expert system inference engine used for
                    162: the troubleshooter.  The kbase is it's knowledge base which
                    163: describes the specific problems in emacs.
                    164: 
                    165: SPECIAL INSTRUCTIONS FOR SPECIAL SITUATIONS:
                    166: 
                    167: PORTABILITY:
                    168: 
                    169: EMACS should be portable to a different machine with relatively
                    170: little effort.  Parts of it depend on a Unix environment, and parts
                    171: have been optimized to allow it to work in a 64K byte address space,
                    172: but most code is quite portable.  Known points of
                    173: machine dependence are:
                    174: 
                    175:        The makefile unpacks several archives.  These are in ascii
                    176:        (-c) cpio format and should be portable to any unix system
                    177:        having cpio.
                    178: 
                    179:        Several functions taking variable arguments depend on the
                    180:        PDP-11 argument passing convention of storing the arguments
                    181:        to a function consecutively on the stack.
                    182:        
                    183:        EMACS allocates storage above the end of its data area (the
                    184:        symbol _end) by calling sbrk() directly to allocate more
                    185:        space there. You cannot add code to emacs that calls on
                    186:        malloc() or other dynamic storage allocators that call brk
                    187:        or sbrk without modifying emacs.
                    188:        
                    189:        The normal terminal support code depends on types 
                    190:        (int) and (char *) occupying the same physical
                    191:        space, and on external symbols being allocated consecutive
                    192:        storage locations in the order in which  they are declared.
                    193:        This is true of most implementations of UNIX.  Setting the
                    194:        "PORTEXT" flag will eliminate this dependency with some loss
                    195:        of speed on start-up and some expansion of the code.
                    196:        
                    197:        You may get some type clash warnings from some versions of the
                    198:        C compiler.  As long as they are all warnings, there
                    199:        is no problem.
                    200:        
                    201: SYSTEM INFORMATION:
                    202: 
                    203: EMACS consumes lots of disk space for holding the buffer files and
                    204: the text in the kill stack.  Currently, this is allocated in /tmp. 
                    205: If space is scarce there, you can change the pathnames of the
                    206: temporary files by changing the definition of BTEMPATH in
                    207: emacs_buf.h, or by setting -DBTEMPATH=\"/wherever/tmp\" in the
                    208: VFLAGS line of the makefile.  
                    209: 
                    210: If your system has the termcap database installed, you
                    211: can use it instead of the internal 
                    212: terminal support.  You must set "-DTERMCAP" in the VFLAGS parameter,
                    213: and modify the makefile entry for xemacs so that the final load is
                    214: done with the library containing the termcap access routines.  I do
                    215: not guarantee that every termcap supported terminal will work
                    216: optimally, since some of the parameters are not the same, however
                    217: most if not all should work acceptably.
                    218: 
                    219: If you have the terminfo system, you can compile emacs to use it with
                    220: "-DTERMINFO".  The makefile must be modified to include "-lcurses"
                    221: in the compilation entry for xemacs.  Here are a couple of notes
                    222: about the terminfo/curses version:
                    223: 
                    224: 1)     If you have a version of the curses package compiled for a
                    225:        single terminal (-DSINGLE), use it, as emacs needs only one
                    226:        terminal and this compiles somewhat more compact and
                    227:        efficient code.
                    228:        
                    229: 2)     In order to avoid dynamic memory allocation, emacs fiddles
                    230:        with the cur_term structure, and is thus dependent on the
                    231:        implementation of curses.  If anything in the curses library
                    232:        (or any other library) calls malloc() for dynamic memory
                    233:        allocation, severe errors can result.  If you suspect a
                    234:        problem here, check it by looking for malloc in a name list
                    235:        of functions loaded in xemacs.
                    236:        
                    237: As distributed, emacs will time out input reads approximately every
                    238: 30 seconds to go and look for newly arrived mail and to update the
                    239: time display for time mode.  The cost of this is that on a system
                    240: with little memory, it will force the emacs process to stay resident
                    241: or swap in frequently even if no input is entered.  This can be
                    242: turned off by modifying the statement that sets the VMIN parameter
                    243: in emacs_io.c to set it to 1. instead of 0.
                    244: 
                    245: The compilation parameter "MINFILES" controls the use of temporary
                    246: files.  Without this parameter set, emacs keeps the data associated
                    247: with each buffer in a separate temporary file and keeps all of these
                    248: files open when running.  On a heavily loaded unix system with a lot
                    249: of emacs users, this may result in overflowing the system "inode" or
                    250: file tables, which causes open(), pipe(), and other system calls
                    251: which open files to fail.  Setting the parameter -DMINFILES in the
                    252: definition of VFLAGS causes emacs to only keep one of its temporary
                    253: files open at a time, thus reducing the use of inodes.  Doing this
                    254: slows down emacs somewhat (for the time required to open and close
                    255: temporary files every time you switch buffers), and can cause
                    256: temporary files to be left in /tmp if emacs terminates abnormally. 
                    257: Thus this setting is recommended only if your system has trouble
                    258: with file or inode table overflows.  If you set it, watch for files
                    259: with names of the form em.buffer_number.process_id accumulating
                    260: in /tmp (or wherever you put the temporary files).
                    261: 
                    262: Emacs will compile for most AT&T and Berkeley versions of unix. 
                    263: There are some minor variations in functionality depending on what
                    264: version you pick.
                    265: 
                    266: FUNCTION               VARIATIONS
                    267: 
                    268: display of time                These update every 30 seconds on AT&T 3.0 or
                    269: and mail messages      more recent, and on Berkeley systems with
                    270:                        select() (4.2bsd).
                    271: 
                    272: flow_lim mode          Works on AT&T 3.0 or more recent and
                    273:                        Berkeley systems with cbreak mode.  On
                    274:                        Berkeley systems, this can consume some
                    275:                        extra cpu time.  It is also more likely that
                    276:                        ^S or ^Q typed as commands will be
                    277:                        interpreted as flow control.  This mode
                    278:                        should be used only when absolutely
                    279:                        necessary.
                    280:                        
                    281: Handling of BREAK:     AT&T 3.0 or more recent and all Berkeley
                    282:                        unix with cbreak mode.
                    283:                        
                    284: ^@ (mark) command      ^@ is a synonym for mark on AT&T systems,
                    285:                        but is not available on Berkeley unix
                    286:                        systems.  ^@ will behave like break on
                    287:                        these.
                    288:                        
                    289: Sub-processes:         Work on both AT&T and Berkeley unix.  On
                    290:                        Berkeley unix, emacs will notice output from
                    291:                        the sub-process immediately, while on AT&T
                    292:                        systems there will be some delay.  On
                    293:                        certain unix/370 or Amdahl systems with
                    294:                        front processors, there is a bug that
                    295:                        prevents timing out reads to the terminal,
                    296:                        and on these systems, emacs will not notice
                    297:                        output from the sub-process until you stop
                    298:                        typing.
                    299:                        
                    300: Suspension of emacs:   Suspending emacs with the M-^Z command works
                    301:                        fine on Berkeley unix.  On system V unix
                    302:                        running under "shl", you have to type an
                    303:                        extra ^Z to get it to suspend.
                    304:                        
                    305: A version of emacs is available to run on an IBM personal computer. 
                    306: In order to prevent the massive unauthorized proliferation of copies
                    307: that occurred with the unix version of emacs, distribution is being
                    308: more carefully controlled.  If you would like a copy, contact me by
                    309: unix mail to ihesa!warren.
                    310: 
                    311: Running on a shared I&D space pdp-11:
                    312: 
                    313:        Because of growth in features and terminal support, fitting
                    314:        emacs into a 64k address space is getting hard.  To run
                    315:        effectively, you will have to remove something.  The main
                    316:        effect of the limit is to limit the size of file  (number of
                    317:        lines) you can edit.  Two bytes of data space are needed for
                    318:        each line.  Here are
                    319:        some hints on things that don't matter very much that can be
                    320:        removed without serious degradation.
                    321:        
                    322:        NSCRCOL:  Changing NSCRCOL (emacs_disp.h) from 128 to 80
                    323:        saves over 1000 bytes, and has no impact unless you support
                    324:        terminals with more than 80 columns of display.
                    325:        
                    326:        NBLOCK (emacs_gb.h)  NBLOCK can be reduced from 16 to 2, saving
                    327:        512 bytes for each unit of reduction.  Reducing it limits
                    328:        the space available for macros, and thus the number of
                    329:        macros that can be loaded.  It also increases disk I/O somewhat.
                    330:        
                    331:        NBUF (emacs_buf.h)  NBUF determines how many editor buffers
                    332:        you can have.  Reducing it saves about 150 bytes for each
                    333:        one you get rid of.
                    334:        
                    335:        Time mode (functions dtime, tzset, localtime asctime, etc.) Getting
                    336:        rid of all of the time mode related stuff will save about
                    337:        800 bytes.  This is a seldom used feature.
                    338:        
                    339:        Statistics (functions statout & stats)  These are seldom
                    340:        used, and save about 300 bytes.
                    341:        
                    342:        M-".  This command is almost never used, and saves ~300 bytes.
                    343:        
                    344:        insert/delete line and character.  With a fast terminal,
                    345:        these don't matter much, and getting rid of the code
                    346:        (functions vadjust, lshift, rshift, and code to invoke them)
                    347:        saves 800 bytes.
                    348:        
                    349:        Regular expressions.  These are useful, but large (2000 bytes).
                    350: 
                    351:        Macros, very useful, but take a lot of code.
                    352:        
                    353: Good luck!
                    354: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.