Merge r21-4-11-chise-0_20-=ucs.
[chise/xemacs-chise.git.1] / info / emodules.info
diff --git a/info/emodules.info b/info/emodules.info
deleted file mode 100644 (file)
index f81e90f..0000000
+++ /dev/null
@@ -1,952 +0,0 @@
-This is Info file ../info/emodules.info, produced by Makeinfo version
-1.68 from the input file emodules.texi.
-
-   This file documents the module loading technology of XEmacs.
-
-   Copyright (C) 1998 J. Kean Johnston.
-
-   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 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 this permission notice may be stated in a
-translation approved by the Foundation.
-
-   Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the section entitled "GNU General Public License" is 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 section entitled "GNU General Public License"
-may be included in a translation approved by the Free Software
-Foundation instead of in the original English.
-
-\1f
-File: emodules.info,  Node: Top,  Next: Introduction,  Prev: (dir),  Up: (dir)
-
-   This Info file contains v1.0 of the XEmacs dynamic loadable module
-support documentation.
-
-* Menu:
-
-* Introduction::                Introducing Emacs Modules
-* Annatomy of a Module::        Basic module layout and technology
-* Using ellcc::                 How to use the module compiler
-* Defining Functions::          Creating new Lisp primitives
-* Defining Variables::          Creating new Lisp variables
-* Index::                       Concept Index
-
- -- The Detailed Node Listing --
-
-Annatomy of a Module
-
-* Required Header File::        Always include <emodules.h>
-* Required Functions::          Functions you must always provide
-* Required Variables::          Variables whose values you must provide
-* Loading other Modules::       How to load dependant modules
-
-Using `ellcc'
-
-* Compile Mode::                Compiling modules using ellcc
-* Initialization Mode::         Generating documentation and variables
-* Link Mode::                   Creating the final loadable module
-* Other ellcc options::         Other useful options
-* Environment Variables::       How to control ellcc
-
-Defining Functions
-
-* Using DEFUN::                 Using the DEFUN macro to define functions
-* Declaring Functions::         Declaring functions to the Lisp reader
-
-\1f
-File: emodules.info,  Node: Introduction,  Next: Annatomy of a Module,  Prev: Top,  Up: Top
-
-Introduction
-************
-
-   XEmacs is a powerful, extensible editor.  The traditional way of
-extending the functionality of XEmacs is to use its built-in Lisp
-language (called Emacs Lisp, or Elisp for short).  However, while Elisp
-is a full programming language and capable of extending XEmacs in more
-ways than you can imagine, it does have its short-comings.
-
-   Firstly, Elisp is an interpreted language, and this has serious speed
-implications.  Like all other interpreted languages (like Java), Elisp
-is often suitable only for certain types of application or extension.
-So although Elisp is a general purpose language, and very ligh level,
-there are times when it is desirable to descend to a lower level
-compiled language for speed purposes.
-
-   Secondly, Elisp (or Lisp in general) is not a very common language
-any more, except for certain circles in the computer industry.  C is a
-far more commonly known language, and because it is compiled, more
-suited to a wider range of applications, especially those that require
-low level access to a system or need to be as quick as possible.
-
-   This manual describes a new way of extending XEmacs, by using dynamic
-loadable modules (also knows as dynamicaly loadable libraries (DLLs),
-dynamic shared objects (DSOs) or just simply shared objectcs), which can
-be written in C or C++ and loaded into XEmacs at any time.  I sometimes
-refer to this technology as "CEmacs", which is short for "C Extensible
-Emacs".
-
-   XEmacs modules are configured into and installed with XEmacs by
-default on all systems that support loading of shared objects.  From a
-users perspective, the internals of XEmacs modules are irrelevant.  All
-a user will ever need to know about shared objects is the name of the
-shared object when they want to load a given module.  From a developers
-perspective though, a lot more is provided.
-
-   *   Of primary interest is the `ellcc' program.  This program is
-     created during compile time, and is intended to abstract compiler
-     specific characteristics from the developer.  This program is
-     called to compile and link all objects that will make up the final
-     shared object, and accepts all common C compiler flags.  `ellcc'
-     also sets up the correct environment for compiling modules by
-     enabling any special compiler modes (such as PIC mode), setting
-     the correct include paths for the location of XEmacs internal
-     header files etc.  The program will also invoke the linker
-     correctly to created the final shared object which is loaded into
-     XEmacs.
-
-   *   CEmacs also makes all of the relevant XEmacs internal header
-     files availible for module authors to use.  This is often required
-     to get data structure definitions and external variable
-     declarations.  The header files installed include the module
-     specific header file `emodules.h'.  Due to the nature of dynamic
-     modules, most of the internals of XEmacs are exposed.  *Note Top:
-     (internals)Top, for a more complete discussion on how to extend
-     and understand XEmacs.  All of the rules for C modules are
-     discussed there.
-
-   *   Part of the XEmacs distribution is a set of sample modules.
-     These are not installed when XEmacs is, but remain in the XEmacs
-     source tree.  These modules live in the directory `modules', which
-     is a sub-directory of the main XEmacs source code directory.
-     Please look at the samples carefully, and maybe even use them as a
-     basis for making your own modules.  Most of the concepts required
-     for writing extension modules are covered in the samples.
-
-   *   Last, but not least is this manual.  This can be viewed from
-     within XEmacs, and it can be printed out as well.  It is the
-     intention of this document that it will describe everything you
-     need to know about extending XEmacs in C.  If you do not find this
-     to be the case, please contact the author(s).
-
-   The rest of this document will discuss the actual mechanics of
-XEmacs modules and work through several of the samples.  Please be sure
-that you have read the XEmacs Internals Manual and understand
-everything in it.  The concepts there apply to all modules.  This
-document may have some overlap, but it is the internals manual which
-should be considered the final authority.  It will also help a great
-deal to look at the actual XEmacs source code to see how things are
-done.
-
-\1f
-File: emodules.info,  Node: Annatomy of a Module,  Next: Using ellcc,  Prev: Introduction,  Up: Top
-
-Annatomy of a Module
-********************
-
-   Each dynamically loadable XEmacs extension (hereafter refered to as a
-module) has a certain compulsory format, and must contain several
-pieces of information and several mandatory functions.  This chapter
-describes the basic layout of a module, and provides a very simple
-sample.  The source for this sample can be found in the file
-`modules/simple/sample.c' in the main XEmacs source code tree.
-
-* Menu:
-
-* Required Header File::        Always include <emodules.h>
-* Required Functions::          Functions you must always provide
-* Required Variables::          Variables whose values you must provide
-* Loading other Modules::       How to load dependant modules
-
-\1f
-File: emodules.info,  Node: Required Header File,  Next: Required Functions,  Prev: Annatomy of a Module,  Up: Annatomy of a Module
-
-Required Header File
-====================
-
-   Every module must include the file `<emodules.h>'.  This will
-include several other XEmacs internal header files, and will set up
-certain vital macros.  One of the most important files included by
-`emodules.h' is the generated `config.h' file, which contains all of
-the required system abstraction macros and definitions.  Most modules
-will probably require some pre-processor conditionals based on
-constants defined in `config.h'.  Please read that file to familiarize
-yourself with the macros defined there.
-
-   Depending on exactly what your module will be doing, you will
-probably need to include one or more of the XEmacs internal header
-files.  When you `#include <emodules.h>', you will get a few of the
-most important XEmacs header files included automatically for you.  The
-files included are:
-
-`lisp.h'
-     This file contains most of the macros required for declaring Lisp
-     object types, macros for accessing Lisp objects, and global
-     variable declarations.
-
-`sysdep.h'
-     All system dependant declarations and abstraction macros live
-     here.  You should never call low level system functions directly.
-     Rather, you should use the abstraction macros provided in this
-     header file.
-
-`window.h'
-     This header file defines the window structures and Lisp types, and
-     provides functions and macros for manipulating multiple XEmacs
-     windows.
-
-`buffer.h'
-     All macros and function declarations for manipulating internal and
-     user visible buffers appear in this file.
-
-`insdel.h'
-     This header provides the information required for performing text
-     insertion and deletion.
-
-`frame.h'
-     Provides the required structure, macro and function definitions for
-     manipulating XEmacs frames.
-
-\1f
-File: emodules.info,  Node: Required Functions,  Next: Required Variables,  Prev: Required Header File,  Up: Annatomy of a Module
-
-Required Functions
-==================
-
-   Every module requires several initialization functions.  It is the
-responsibility of these functions to load in any dependant modules, and
-to declare all variables and functions which are to be made visibile to
-the XEmacs Lisp reader.  Each of these functions performs a very
-specific task, and they are executed in the correct order by XEmacs.
-All of these functions are `void' functions which take no arguments.
-Here, briefly, are the required module functions.  Note that the actual
-function names do not end with the string `_module', but rather they
-end with the abbreviated module name by which the module is known.
-More on the module name and its importance later.  Just bear in mind
-that the text `_module' in the functions below is simply a
-place-holder, not an actual function name.
-
-`syms_of_module'
-     This required function is responsible for introducing to the Lisp
-     reader all functions that you have defined in your module using
-     `DEFUN()'.  Note that *only* functions are declared here, using
-     the `DEFSUBR()' macro.  No variables are declared.
-
-`vars_of_module'
-     This required function contains calls to macros such as
-     `DEFVAR_LISP()', `DEFVAR_BOOL()' etc, and its purpose is to
-     declare and initialize all and any variables that your module
-     defines.  They syntax for declaring variables is identical to the
-     syntax used for all internal XEmacs source code.
-
-`modules_of_module'
-     This optional function should be used to load in any modules which
-     your module depends on.  The XEmacs module loading code makes sure
-     that the same module is not loaded twice, so several modules can
-     safely call the module load function for the same module.  Only
-     one copy of each module (at a given version) will ever be loaded.
-
-`docs_of_module'
-     This is a required function, but not one which you need ever write.
-     This function is created automatically by `ellcc' when the module
-     initialization code is produced.  It is required to document all
-     functions and variables declared in your module.
-
-\1f
-File: emodules.info,  Node: Required Variables,  Next: Loading other Modules,  Prev: Required Functions,  Up: Annatomy of a Module
-
-Required Variables
-==================
-
-   Not only does a module need to declare the initialization functions
-mentioned above, it is also required to provide certain variables which
-the module loading code searches for in order to determine the viability
-of a module.  You are *not* required to provide these variables in your
-source files.  They are automatically set up in the module
-initialization file by the `ellcc' compiler.  These variables are
-discussed here simply for the sake of completeness.
-
-`emodules_compiler'
-     This is a variable of type `long', and is used to indicate the
-     version of the XEmacs loading technology that was used to produce
-     the module being loaded.  This version number is completely
-     unrelated to the XEmacs version number, as a given module may
-     quite well work regardless of the version of XEmacs that was
-     installed at the time the module was created.
-
-     The XEmacs modules version is used to differentiate between major
-     changes in the module loading technology, not versions of XEmacs.
-
-`emodules_name'
-     This is a short (typically 10 characters or less) name for the
-     module, and it is used as a suffix for all of the required
-     functions.  This is also the name by which the module is
-     recognised when loading dependant modules.  The name does not
-     necessarily have to be the same as the physical file name,
-     although keeping the two names in sync is a pretty good idea.  The
-     name must not be empty, and it must be a valid part of a C
-     function name.  The value of this variable is appended to the
-     function names `syms_of_', `vars_of_', `modules_of_' and
-     `docs_of_' to form the actual function names that the module
-     loading code looks for when loading a module.
-
-     This variable is set by the `--mod-name' argument to `ellcc'.
-
-`emodules_version'
-     This string variable is used to load specific versions of a module.
-     Rarely will two or more versions of a module be left lying around,
-     but just in case this does happen, this variable can be used to
-     control exactly which module should be loaded.  See the Lisp
-     function `load-module' for more details.  This variable is set by
-     the `--mod-version' argument to `ellcc'.
-
-`emodules_title'
-     This is a string which describes the module, and can contain
-     spaces or other special characters.  It is used solely for
-     descriptive purposes, and does not affect the loading of the
-     module.  The value is set by the `--mod-title' argument to `ellcc'.
-
-\1f
-File: emodules.info,  Node: Loading other Modules,  Prev: Required Variables,  Up: Annatomy of a Module
-
-Loading other Modules
-=====================
-
-   During the loading of a module, it is the responsibility of the
-function `modules_of_module' to load in any modules which the current
-module depends on.  If the module is stand-alone, and does not depend
-on other modules, then this function can be left empty or even
-undeclared.  However, if it does have dependnacies, it must call
-`emodules_load':
-
-     int emodules_load (CONST char *module,
-                        CONST char *modname,
-                        CONST char *modver)
-
-   The first argument MODULE is the name of the actual shared object or
-DLL.  You can omit the `.so', `.ell' or `.dll' extension of you wish.
-If you do not specify an absolute path name, then the same rules as
-apply to loading Lisp modules are applied when searching for the
-module.  If the module cannot be found in any of the standard places,
-and an absolute path name was not specified, `emodules_load' will
-signal an error and loading of the module will stop.
-
-   The second argument (MODNAME) is the module name to load, and must
-match the contents of the variable EMODULE_NAME in the module to be
-loaded. A mis-match will cause the module load to fail.  If this
-parameter is `NULL' or empty, then no checks are performed against the
-target module's EMODULE_NAME variable.
-
-   The last argument, MODVER, is the desired version of the module to
-load, and is compared to the target module's EMODULE_VERSION value.  If
-this parameter is not `NULL' or empty, and the match fails, then the
-load of the module will fail.
-
-   `emodules_load' can be called recursively.  If, at any point during
-the loading of modules a failure is encountered, then all modules that
-were loaded since the top level call to `emodules_load' will be
-unloaded.  This means that if any child modules fail to load, then
-their parents will also fail to load.  This does not include previous
-successful calls to `emodules_load' at the top level.
-
-\1f
-File: emodules.info,  Node: Using ellcc,  Next: Defining Functions,  Prev: Annatomy of a Module,  Up: Top
-
-Using `ellcc'
-*************
-
-   Before discussing the anatomy of a module in greater detail, you
-should be aware of the steps required in order to correctly compile and
-link a module for use within XEmacs.  There is little difference between
-compiling normal C code and compiling a module.  In fact, all that
-changes is the command used to compile the module, and a few extra
-arguments to the compiler.
-
-   XEmacs now ships with a new user utility, called `ellcc'.  This is
-the "Emacs Loadable Library C Compiler".  This is a wrapper program
-that will invoke the real C compiler with the correct arguments to
-compile and link your module.  With the exception of a few command line
-options, this program can be considered a replacement for your C
-compiler.  It accepts all of the same flags and arguments that your C
-compiler does, so in many cases you can simply set the `make' variable
-`CC' to `ellcc' and your code will be compiled as an Emacs module
-rather than a static C object.
-
-   `ellcc' has three distinct modes of operation.  It can be run in
-compile, link or initialization mode.  These modes are discussed in more
-detail below.  If you want `ellcc' to show the commands it is
-executing, you can specify the option `--mode=verbose' to `ellcc'.
-Specifying this option twice will enable certain extra debugging
-messages to be displayed on the standard output.
-
-* Menu:
-
-* Compile Mode::                Compiling modules using ellcc
-* Initialization Mode::         Generating documentation and variables
-* Link Mode::                   Creating the final loadable module
-* Other ellcc options::         Other useful options
-* Environment Variables::       How to control ellcc
-
-\1f
-File: emodules.info,  Node: Compile Mode,  Next: Initialization Mode,  Prev: Using ellcc,  Up: Using ellcc
-
-Compile Mode
-============
-
-   By default, `ellcc' is in "compile" mode.  This means that it
-assumes that all of the command line arguments are C compiler arguments,
-and that you want to compile the specified source file or files.  You
-can force compile mode by specifying the `--mode=compile' argument to
-`ellcc'.
-
-   In this mode, `ellcc' is simply a front-end to the same C compiler
-that was used to create the XEmacs binary itself.  All `ellcc' does in
-this mode is insert a few extra command line arguments before the
-arguments you specify to `ellcc' itself.  `ellcc' will then invoke the
-C compiler to compile your module, and will return the same exit codes
-and messages that your C compiler does.
-
-   By far the easiest way to compile modules is to construct a
-`Makefile' as you would for a normal program, and simply insert, at
-some appropriate place something similar to:
-
-     CC=ellcc --mode=compile
-     
-     .c.o:
-         $(CC) $(CFLAGS) -c $<
-
-   After this, all you need to do is provide simple `make' rules for
-compiling your module source files.  Since modules are most useful when
-they are small and self-contained, most modules will have a single
-source file, aside from the module specific initialization file (see
-below for details).
-
-\1f
-File: emodules.info,  Node: Initialization Mode,  Next: Link Mode,  Prev: Compile Mode,  Up: Using ellcc
-
-Initialization Mode
-===================
-
-   XEmacs uses a rather bizarre way of documenting variables and
-functions.  Rather than have the documentation for compiled functions
-and variables passed as static strings in the source code, the
-documentation is included as a C comment.  A special program, called
-`make-docfile', is used to scan the source code files and extract the
-documentation from these comments, producing the XEmacs `DOC' file,
-which the internal help engine scans when the documentation for a
-function or variable is requested.
-
-   Due to the internal construction of Lisp objects, subrs and other
-such things, adding documentation for a compiled function or variable
-in a compiled module, at any time after XEmacs has been "dumped" is
-somewhat problematic.  Fortunately, as a module writer you are insulated
-from the difficulties thanks to your friend `ellcc' and some internal
-trickery in the module loading code.  This is all done using the
-"initialization" mode of `ellcc'.
-
-   The result of running `ellcc' in initialization mode is a C source
-file which you compile with (you guessed it) `ellcc' in compile mode.
-Initialization mode is where you set the module name, version, title
-and gather together all of the documentaion strings for the functions
-and vairables in your module.  There are several options that you are
-required to pass `ellcc' in initialization mode, the first of which is
-the mode switch itself, `--mode=init'.
-
-   Next, you need to specify the name of the C source code file that
-`ellcc' will produce, and you specify this using the
-`--mod-output=FILENAME' argument.  FILENAME is the name of the C source
-code file that will contain the module variables and `docs_of_module'
-function.
-
-   As discussed previously, each module requires a short "handle" or
-module name.  This is specified with the `--mod-name=NAME' option,
-where NAME is the abbreviated module name.  This NAME must consist only
-of characters that are valid in C function and variable names.
-
-   The module version is specified using `--mod-version=VERSION'
-argument, with VERSION being any arbitrary version string.  This
-version can be passed as an optional second argument to the Lisp
-function `load-module', and as the third argument to the internal
-module loading command `emodules_load'.  This version string is used to
-distinguish between different versions of the same module, and to
-ensure that the module is loaded at a specific version.
-
-   Last, but not least, is the module title.  Specified using the
-`--mod-title=TITLE' option, the specified TITLE is used when the list
-of loaded modules is displayed.  The module title serves no purpose
-other than to inform the user of the function of the module.  This
-string should be brief, as it has to be formatted to fit the screen.
-
-   Following all of these parameters, you need to provide the list of
-all source code modules that make up your module.  These are the files
-which are scanned by `make-docfile', and provide the information
-required to populate the `docs_of_module' function.  Below is a sample
-`Makefile' fragment which indicates how all of this is used.
-
-     CC=ellcc --mode=compile
-     LD=ellcc --mode=link
-     MODINIT=ellcc --mode=init
-     CFLAGS=-O2 -DSOME_STUFF
-     
-     .c.o:
-         $(CC) $(CFLAGS) -c $<
-     
-     MODNAME=sample
-     MODVER=1.0.0
-     MODTITLE="Small sample module"
-     
-     SRCS=modfile1.c modfile2.c modfile3.c
-     OBJS=$(SRCS:.c=.o)
-     
-     all: sample.ell
-     clean:
-         rm -f $(OBJS) sample_init.o sample.ell
-     
-     install: all
-         mkdir `ellcc --mod-location`/mymods > /dev/null
-         cp sample.ell `ellcc --mod-location`/mymods/sample.ell
-     
-     sample.ell: $(OBJS) sample_init.o
-         $(LD) --mod-output=$ $(OBJS) sample_init.o
-     
-     sample_init.o: sample_init.c
-     sample_init.c: $(SRCS)
-         $(MODINIT) --mod-name=$(MODNAME) --mod-version=$(MODVER) \
-         --mod-title=$(MODTITLE) --mod-output=$ $(SRCS)
-
-   The above `Makefile' is, in fact, complete, and would compile the
-sample module, and optionally install it.  The `--mod-location'
-argument to `ellcc' will produce, on the standard output, the base
-location of the XEmacs module directory.  Each sub-directory of that
-directory is automatically searched for for modules when they are loaded
-with `load-module'.  An alternative location would be
-`/usr/local/lib/xemacs/site-modules'.  That path can change depending
-on the options the person who compiled XEmacs chose, so you can always
-determine the correct site location using the `--mod-site-location'
-option.  This directory is treated the same way as the main module
-directory.  Each sub-directory within it is searched for a given module
-when the user attempts to load it.  The valid extensions that the
-loader attempts to use are `.so', `.ell' and `.dll'.  You can use any
-of these extensions, although `.ell' is the prefered extension.
-
-\1f
-File: emodules.info,  Node: Link Mode,  Next: Other ellcc options,  Prev: Initialization Mode,  Up: Using ellcc
-
-Link Mode
-=========
-
-   Once all of your source code files have been compiled (including the
-generated init file) you need to link them all together to created the
-loadable module.  To do this, you invoke `ellcc' in link mode, by
-pasing the `--mode-link' command.  You need to specify the final output
-file using the `--mod-output=NAME' command, but other than that all
-other arguments are passed on directly to the system compiler or
-linker, along with any other required arguments to create the loadable
-module.
-
-   The module has complete access to all symbols that were present in
-the dumped XEmacs, so you do not need to link against libraries that
-were linked in with the main executable.  If your library uses some
-other extra libraries, you will need to link with those.  There is
-nothing particularly complicated about link mode.  All you need to do
-is make sure you invoke it correctly in the `Makefile'.  See the sample
-`Makefile' above for an example of a well constructed `Makefile' that
-invoked the linker correctly.
-
-\1f
-File: emodules.info,  Node: Other ellcc options,  Next: Environment Variables,  Prev: Link Mode,  Up: Using ellcc
-
-Other `ellcc' options
-=====================
-
-   Aside from the three main `ellcc' modes described above, `ellcc' can
-accept several other options.  These are typically used in a `Makefile'
-to determine installation paths.  `ellcc' also allows you to over-ride
-several of its built-in compiler and linker options using environment
-variables.  Here is the complete list of options that `ellcc' accepts.
-
-`--mode=compile'
-     Enables compilation mode.  Use this to compile source modules.
-
-`--mode=link'
-     Enabled link edit mode.  Use this to create the final module.
-
-`--mode=init'
-     Used to create the documentation function and to initialize other
-     required variables.  Produces a C source file that must be
-     compiled with `ellcc' in compile mode before linking the final
-     module.
-
-`--mode=verbose'
-     Enables verbose mode.  This will show you the commands that are
-     being executed, as well as the version number of `ellcc'.  If you
-     specify this option twice, then some extra debugging information
-     is displayed.
-
-`--mod-name=NAME'
-     Sets the short internaml module NAME to the string specified,
-     which must consist only of valid C identifiers.  Required during
-     initialization mode.
-
-`--mod-version=VERSION'
-     Sets the internal module VERSION to the specified string.
-     Required during initialization mode.
-
-`--mod-title=TITLE'
-     Sets the module descriptive TITLE to the string specified.  This
-     string can contain any printable characters, but should not be too
-     long.  It is required during initialization mode.
-
-`--mod-output=FILENAME'
-     Used to control the output file name.  This is used during
-     initialization mode to set the name of the C source file that will
-     be created to FILENAME.  During link mode, it sets the name of the
-     final loadable module to FILENAME.
-
-`--mod-location'
-     This will print the name of the standard module installation path
-     on the standard output and immediately exit `ellcc'.  Use this
-     option to determine the directory prefix of where you should
-     install your modules.
-
-`--mod-site-location'
-     This will print the name of the site specific module location and
-     exit.
-
-`--mod-archdir'
-     Prints the name of the root of the architecture-dependant
-     directory that XEmacs searches for architecture-dependant files.
-
-`--mod-config'
-     Prints the name of the configuration for which XEmacs and `ellcc'
-     were compiled.
-
-\1f
-File: emodules.info,  Node: Environment Variables,  Prev: Other ellcc options,  Up: Using ellcc
-
-Environment Variables
-=====================
-
-   During its normal operation, `ellcc' uses the compiler and linker
-flags that were determined at the time XEmacs was configured.  In
-certain rare circumstances you may wish to over-ride the flags passed to
-the compiler or linker, and you can do so using environment variables.
-The table below lists all of the environment variables that `ellcc'
-recognises.
-
-`ELLCC'
-     This is used to over-ride the name of the C compiler that is
-     invoked by `ellcc'.
-
-`ELLLD'
-     Sets the name of the link editor to use to created the final
-     module.
-
-`ELLCFLAGS'
-     Sets the compiler flags passed on when compiling source modules.
-     This only sets the basic C compiler flags.  There are certain
-     hard-coded flags that will always be passed.
-
-`ELLLDFLAGS'
-     Sets the flags passed on to the linker.  This does *not* include
-     the flags for enabling PIC mode.  This just sets basic linker
-     flags.
-
-`ELLDLLFLAGS'
-     Sets the flags passed to the linker that are required to created
-     shared and loadable objects.
-
-`ELLPICFLAGS'
-     Sets the C compiler option required to produce an object file that
-     is suitable for including in a shared library.  This option should
-     turn on PIC mode, or the moral equivalent thereof on the target
-     system.
-
-`ELLMAKEDOC'
-     Sets the name of the `make-docfile' program to use.  Usually
-     `ellcc' will use the version that was compiled and installed with
-     XEmacs, but this option allows you to specify an alternative path.
-     Used during the compile phase of XEmacs itself.
-
-\1f
-File: emodules.info,  Node: Defining Functions,  Next: Defining Variables,  Prev: Using ellcc,  Up: Top
-
-Defining Functions
-******************
-
-   One of the main reasons you would ever write a module is to provide
-one or more "functions" for the user or the editor to use.  The term
-"function" is a bit overloaded here, as it refers to both a C function
-and the way it appears to Lisp, which is a "subroutine", or simply a
-"subr".  A Lisp subr is also known as a Lisp primitive, but that term
-applies less to dynamic modules.  *Note Writing Lisp Primitives:
-(internals)Writing Lisp Primitives, for details on how to declare
-functions.  You should familiarize yourself with the instructions
-there.  The format of the function declaration is identical in modules.
-
-   Normal Lisp primitives document the functions they defining by
-including the documentation as a C comment.  During the build process,
-a program called `make-docfile' is run, which will extract all of these
-comments, build up a single large documentation file, and will store
-pointers to the start of each documentation entry in the dumped XEmacs.
-This, of course, will not work for dynamic modules, as they are loaded
-long after XEmacs has been dumped.  For this reason, we require a
-special means for adding documentation for new subrs.  This is what the
-macro `CDOCSUBR' is used for, and this is used extensively during
-`ellcc' initialization mode.
-
-   When using `DEFUN' in normal XEmacs C code, the sixth "parameter" is
-a C comment which documents the function.  For a dynamic module, we of
-course need to convert the C comment to a usable string, and we need to
-set the documentation pointer of the subr to this string.  As a module
-programmer, you don't actually need to do any work for this to happen.
-It is all taken care of in the `docs_of_module' function created by
-`ellcc'.
-
-* Menu:
-
-* Using DEFUN::                 Using the DEFUN macro to define functions
-* Declaring Functions::         Declaring functions to the Lisp reader
-
-\1f
-File: emodules.info,  Node: Using DEFUN,  Next: Declaring Functions,  Prev: Defining Functions,  Up: Defining Functions
-
-Using `DEFUN'
-=============
-
-   Although the full syntax of a function declaration is discussed in
-the XEmacs internals manual in greater depth, what follows is a brief
-description of how to define and implement a new Lisp primitive in a
-module.  This is done using the `DEFUN' macro.  Here is a small example:
-
-     DEFUN ("my-function", Fmy_function, 1, 1, "FFile name: ", /*
-     Sample Emacs primitive function.
-     
-     The specified FILE is frobricated before it is fnozzled.
-     */
-         (file))
-     {
-       char *filename;
-     
-       if (NILP(file))
-         return Qnil;
-     
-       filename = (char *)XSTRING_DATA(file);
-       frob(filename);
-       return Qt;
-     }
-
-   The first argument is the name of the function as it will appear to
-the Lisp reader.  This must be provided as a string.  The second
-argument is the name of the actual C function that will be created.
-This is typically the Lisp function name with a preceding capital `F',
-with hyphens converted to underscores.  This must be a valid C function
-name.  Next come the minimum and maximum number of arguments,
-respectively.  This is used to ensure that the correct number of
-arguments are passed to the function.  Next is the `interactive'
-definition.  If this function is meant to be run by a user
-interactively, then you need to specify the argument types and prompts
-in this string.  Please consult the XEmacs Lisp manual for more
-details.  Next comes a C comment that is the documentation for this
-function.  This comment *must* exist.  Last comes the list of function
-argument names, if any.
-
-\1f
-File: emodules.info,  Node: Declaring Functions,  Prev: Using DEFUN,  Up: Defining Functions
-
-Declaring Functions
-===================
-
-   Simply writing the code for a function is not enough to make it
-availible to the Lisp reader.  You have to, during module
-initialization, let the Lisp reader know about the new function.  This
-is done by calling `DEFSUBR' with the name of the function.  This is
-the sole purpose of the initialization function `syms_of_module'.
-*Note Required Functions::, for more details.
-
-   Each call to `DEFSUBR' takes as its only argument the name of the
-function, which is the same as the second argument to the call to
-`DEFUN'.  Using the example function above, you would insert the
-following code in the `syms_of_module' function:
-
-     DEFSUBR(Fmy_function);
-
-   This call will instruct XEmacs to make the function visible to the
-Lisp reader and will prepare for the insertion of the documentation into
-the right place.  Once this is done, the user can call the Lisp
-function `my-function', if it was defined as an interactive function
-(which in this case it was).
-
-   Thats all there is to defining and announcing new functions.  The
-rules for what goes inside the functions, and how to write good
-modules, is beyond the scope of this document.  Please consult the
-XEmacs internals manual for more details.
-
-\1f
-File: emodules.info,  Node: Defining Variables,  Next: Index,  Prev: Defining Functions,  Up: Top
-
-Defining Variables
-******************
-
-   Rarely will you write a module that only contains functions.  It is
-common to also provide variables which can be used to control the
-behaviour of the function, or store the results of the function being
-executed.  The actual C variable types are the same for modules and
-internal XEmacs primitives, and the declaration of the variables is
-identical.
-
-   *Note Adding Global Lisp Variables: (internals)Adding Global Lisp
-Variables, for more information on variables and naming conventions.
-
-   Once your variables are defined, you need to initialize them and make
-the Lisp reader aware of them.  This is done in the `vars_of_module'
-initialization function using special XEmacs macros such as
-`DEFVAR_LISP', `DEFVAR_BOOL', `DEFVAR_INT' etc.  The best way to see
-how to use these macros is to look at existing source code, or read the
-internals manual.
-
-   One *very* important difference between XEmacs variables and module
-variables is how you use pure space.  Simply put, you *never* use pure
-space in XEmacs modules.  The pure space storage is of a limited size,
-and is initialized propperly during the dumping of XEmacs.  Because
-variables are being added dynamically to an already running XEmacs when
-you load a module, you cannot use pure space.  Be warned: *do not use
-pure space in modules.  Repeat, do not use pure space in modules.*
-Once again, to remove all doubts: *DO NOT USE PURE SPACE IN MODULES!!!*
-
-   Below is a small example which declares and initializes two
-variables.  You will note that this code takes into account the fact
-that this module may very well be compiled into XEmacs itself.  This is
-a prudent thing to do.
-
-     Lisp_Object Vsample_string;
-     int sample_boolean;
-     
-     void
-     vars_of_module()
-     {
-       DEFVAR_LISP ("sample-string", &Vsample_string /*
-     This is a sample string, declared in a module.
-     
-     Nothing magical about it.
-     */);
-     
-       DEFVAR_BOOL("sample-boolean", &sample_boolean /*
-     *Sample user-settable boolean.
-     */);
-     
-       sample_boolean = 0;
-       Vsample_string = build_string("My string");
-     }
-
-\1f
-File: emodules.info,  Node: Index,  Prev: Defining Variables,  Up: Top
-
-Index
-*****
-
-* Menu:
-
-* annatomy:                              Annatomy of a Module.
-* compiler:                              Introduction.
-* compiling:                             Compile Mode.
-* config.h:                              Required Header File.
-* defining functions:                    Defining Functions.
-* defining objects:                      Defining Variables.
-* defining variables:                    Defining Variables.
-* DEFSUBR:                               Declaring Functions.
-* DEFUN:                                 Using DEFUN.
-* DEFVAR_BOOL:                           Defining Variables.
-* DEFVAR_INT:                            Defining Variables.
-* DEFVAR_LISP:                           Defining Variables.
-* dependancies:                          Loading other Modules.
-* DLL:                                   Introduction.
-* docs_of_module:                        Required Functions.
-* documentation <1>:                     Initialization Mode.
-* documentation:                         Introduction.
-* DSO:                                   Introduction.
-* ellcc <1>:                             Introduction.
-* ellcc:                                 Using ellcc.
-* ELLCC:                                 Environment Variables.
-* ELLCFLAGS:                             Environment Variables.
-* ELLDLLFLAGS:                           Environment Variables.
-* ELLLD:                                 Environment Variables.
-* ELLLDFLAGS:                            Environment Variables.
-* ELLMAKEDOC:                            Environment Variables.
-* ELLPICFLAGS:                           Environment Variables.
-* Emacs Modules:                         Introduction.
-* emodules.h:                            Required Header File.
-* emodules_load:                         Loading other Modules.
-* environment variables:                 Environment Variables.
-* format, module:                        Annatomy of a Module.
-* functions, declaring:                  Declaring Functions.
-* functions, defining:                   Using DEFUN.
-* functions, Lisp:                       Using DEFUN.
-* functions, required:                   Required Functions.
-* header files:                          Introduction.
-* help:                                  Introduction.
-* include files:                         Required Header File.
-* initialization <1>:                    Required Variables.
-* initialization <2>:                    Initialization Mode.
-* initialization:                        Required Functions.
-* linker:                                Introduction.
-* linking:                               Link Mode.
-* module compiler:                       Using ellcc.
-* module format:                         Annatomy of a Module.
-* module skeleton:                       Annatomy of a Module.
-* modules_of_module <1>:                 Required Functions.
-* modules_of_module:                     Loading other Modules.
-* objects, defining:                     Defining Variables.
-* objects, Lisp:                         Defining Variables.
-* paths:                                 Other ellcc options.
-* required functions:                    Required Functions.
-* required header:                       Required Header File.
-* required variables:                    Required Variables.
-* samples:                               Introduction.
-* shared object:                         Introduction.
-* skeleton, module:                      Annatomy of a Module.
-* subrs:                                 Using DEFUN.
-* syms_of_module:                        Required Functions.
-* variables, defining:                   Defining Variables.
-* variables, Lisp:                       Defining Variables.
-* variables, required:                   Required Variables.
-* vars_of_module:                        Required Functions.
-
-
-\1f
-Tag Table:
-Node: Top\7f1562
-Node: Introduction\7f2908
-Node: Annatomy of a Module\7f7417
-Node: Required Header File\7f8233
-Node: Required Functions\7f10154
-Node: Required Variables\7f12403
-Node: Loading other Modules\7f15090
-Node: Using ellcc\7f17148
-Node: Compile Mode\7f18943
-Node: Initialization Mode\7f20311
-Node: Link Mode\7f25343
-Node: Other ellcc options\7f26490
-Node: Environment Variables\7f29070
-Node: Defining Functions\7f30761
-Node: Using DEFUN\7f32772
-Node: Declaring Functions\7f34483
-Node: Defining Variables\7f35826
-Node: Index\7f38071
-\1f
-End Tag Table