comparison man/emodules.texi @ 398:74fd4e045ea6 r21-2-29

Import from CVS: tag r21-2-29
author cvs
date Mon, 13 Aug 2007 11:13:30 +0200
parents aabb7f5b1c81
children 697ef44129c6
comparison
equal deleted inserted replaced
397:f4aeb21a5bad 398:74fd4e045ea6
9 @c Use some macros so that we can format for either XEmacs 9 @c Use some macros so that we can format for either XEmacs
10 @c or (shudder) GNU Emacs. 10 @c or (shudder) GNU Emacs.
11 @c 11 @c
12 12
13 @ifset XEMACS 13 @ifset XEMACS
14 @macro emacs 14 @set emacs XEmacs
15 XEmacs
16 @end macro
17 @clear EMACS 15 @clear EMACS
18 @set HAVE_EMACS 16 @set HAVE-EMACS
19 @end ifset 17 @end ifset
20 18
21 @ifset EMACS 19 @ifset EMACS
22 @macro emacs 20 @set emacs Emacs
23 Emacs
24 @end macro
25 @clear XEMACS 21 @clear XEMACS
26 @set HAVE_EMACS 22 @set HAVE-EMACS
27 @end ifset 23 @end ifset
28 24
29 @ifclear HAVE_EMACS 25 @ifclear HAVE-EMACS
30 @set XEMACS 26 @set XEMACS
31 @macro emacs 27 @set emacs XEmacs
32 XEmacs
33 @end macro
34 @end ifclear 28 @end ifclear
35 29
36 @ifinfo 30 @ifinfo
37 This file documents the module loading technology of @emacs{}. 31 This file documents the module loading technology of @value{emacs}.
38 32
39 Copyright @copyright{} 1998 J. Kean Johnston. 33 Copyright @copyright{} 1998 J. Kean Johnston.
40 34
41 Permission is granted to make and distribute verbatim copies of this 35 Permission is granted to make and distribute verbatim copies of this
42 manual provided the copyright notice and this permission notice are 36 manual provided the copyright notice and this permission notice are
82 76
83 @setchapternewpage odd 77 @setchapternewpage odd
84 @finalout 78 @finalout
85 79
86 @titlepage 80 @titlepage
87 @title Extending @emacs{} using C and C++ 81 @title Extending @value{emacs} using C and C++
88 @subtitle Version 1.0, September 1998 82 @subtitle Version 1.0, September 1998
89 83
90 @author J. Kean Johnston 84 @author J. Kean Johnston
91 @page 85 @page
92 @vskip 0pt plus 1fill 86 @vskip 0pt plus 1fill
117 @end titlepage 111 @end titlepage
118 @page 112 @page
119 113
120 @ifinfo 114 @ifinfo
121 @node Top, Introduction, (dir), (dir) 115 @node Top, Introduction, (dir), (dir)
122 This Info file contains v1.0 of the @emacs{} dynamic loadable module 116 This Info file contains v1.0 of the @value{emacs} dynamic loadable module
123 support documentation. 117 support documentation.
124 @menu 118 @menu
125 * Introduction:: Introducing Emacs Modules 119 * Introduction:: Introducing Emacs Modules
126 * Annatomy of a Module:: Basic module layout and technology 120 * Annatomy of a Module:: Basic module layout and technology
127 * Using ellcc:: How to use the module compiler 121 * Using ellcc:: How to use the module compiler
155 @end ifinfo 149 @end ifinfo
156 150
157 @node Introduction, Annatomy of a Module, Top, Top 151 @node Introduction, Annatomy of a Module, Top, Top
158 @chapter Introduction 152 @chapter Introduction
159 153
160 @emacs{} is a powerful, extensible editor. The traditional way of 154 @value{emacs} is a powerful, extensible editor. The traditional way of
161 extending the functionality of @emacs{} is to use its built-in Lisp 155 extending the functionality of @value{emacs} is to use its built-in Lisp
162 language (called Emacs Lisp, or Elisp for short). However, while Elisp 156 language (called Emacs Lisp, or Elisp for short). However, while Elisp
163 is a full programming language and capable of extending @emacs{} in more 157 is a full programming language and capable of extending @value{emacs} in more
164 ways than you can imagine, it does have its short-comings. 158 ways than you can imagine, it does have its short-comings.
165 159
166 Firstly, Elisp is an interpreted language, and this has serious speed 160 Firstly, Elisp is an interpreted language, and this has serious speed
167 implications. Like all other interpreted languages (like Java), Elisp 161 implications. Like all other interpreted languages (like Java), Elisp
168 is often suitable only for certain types of application or extension. 162 is often suitable only for certain types of application or extension.
169 So although Elisp is a general purpose language, and very ligh level, 163 So although Elisp is a general purpose language, and very high level,
170 there are times when it is desirable to descend to a lower level compiled 164 there are times when it is desirable to descend to a lower level compiled
171 language for speed purposes. 165 language for speed purposes.
172 166
173 Secondly, Elisp (or Lisp in general) is not a very common language any 167 Secondly, Elisp (or Lisp in general) is not a very common language any
174 more, except for certain circles in the computer industry. C is a far 168 more, except for certain circles in the computer industry. C is a far
178 172
179 @cindex Emacs Modules 173 @cindex Emacs Modules
180 @cindex DLL 174 @cindex DLL
181 @cindex DSO 175 @cindex DSO
182 @cindex shared object 176 @cindex shared object
183 This manual describes a new way of extending @emacs{}, by using dynamic 177 This manual describes a new way of extending @value{emacs}, by using dynamic
184 loadable modules (also knows as dynamicaly loadable libraries (DLLs), 178 loadable modules (also knows as dynamicaly loadable libraries (DLLs),
185 dynamic shared objects (DSOs) or just simply shared objectcs), which can 179 dynamic shared objects (DSOs) or just simply shared objectcs), which can
186 be written in C or C++ and loaded into @emacs{} at any time. I sometimes 180 be written in C or C++ and loaded into @value{emacs} at any time. I sometimes
187 refer to this technology as @dfn{CEmacs}, which is short for @dfn{C 181 refer to this technology as @dfn{CEmacs}, which is short for @dfn{C
188 Extensible Emacs}. 182 Extensible Emacs}.
189 183
190 @emacs{} modules are configured into and installed with @emacs{} by 184 @value{emacs} modules are configured into and installed with @value{emacs} by
191 default on all systems that support loading of shared objects. From a 185 default on all systems that support loading of shared objects. From a
192 users perspective, the internals of @emacs{} modules are irrelevant. 186 users perspective, the internals of @value{emacs} modules are irrelevant.
193 All a user will ever need to know about shared objects is the name of 187 All a user will ever need to know about shared objects is the name of
194 the shared object when they want to load a given module. From a 188 the shared object when they want to load a given module. From a
195 developers perspective though, a lot more is provided. 189 developers perspective though, a lot more is provided.
196 190
197 @itemize @bullet 191 @itemize @bullet
204 specific characteristics from the developer. This program is called to 198 specific characteristics from the developer. This program is called to
205 compile and link all objects that will make up the final shared object, 199 compile and link all objects that will make up the final shared object,
206 and accepts all common C compiler flags. @code{ellcc} also sets up the 200 and accepts all common C compiler flags. @code{ellcc} also sets up the
207 correct environment for compiling modules by enabling any special 201 correct environment for compiling modules by enabling any special
208 compiler modes (such as PIC mode), setting the correct include paths for 202 compiler modes (such as PIC mode), setting the correct include paths for
209 the location of @emacs{} internal header files etc. The program will also 203 the location of @value{emacs} internal header files etc. The program will also
210 invoke the linker correctly to created the final shared object which is 204 invoke the linker correctly to created the final shared object which is
211 loaded into @emacs{}. 205 loaded into @value{emacs}.
212 206
213 @item 207 @item
214 @cindex header files 208 @cindex header files
215 CEmacs also makes all of the relevant @emacs{} internal header files 209 CEmacs also makes all of the relevant @value{emacs} internal header files
216 availible for module authors to use. This is often required to get data 210 availible for module authors to use. This is often required to get data
217 structure definitions and external variable declarations. The header 211 structure definitions and external variable declarations. The header
218 files installed include the module specific header file 212 files installed include the module specific header file
219 @file{emodules.h}. Due to the nature of dynamic modules, most of the 213 @file{emodules.h}. Due to the nature of dynamic modules, most of the
220 internals of @emacs{} are exposed. 214 internals of @value{emacs} are exposed.
221 @xref{Top,,,internals,@emacs{} Internals Manual}, for a 215 @xref{Top,,,internals,@value{emacs} Internals Manual}, for a
222 more complete discussion on how to extend and understand @emacs{}. All of 216 more complete discussion on how to extend and understand @value{emacs}. All of
223 the rules for C modules are discussed there. 217 the rules for C modules are discussed there.
224 218
225 @item 219 @item
226 @cindex samples 220 @cindex samples
227 Part of the @emacs{} distribution is a set of sample modules. These are 221 Part of the @value{emacs} distribution is a set of sample modules. These are
228 not installed when @emacs{} is, but remain in the @emacs{} source tree. 222 not installed when @value{emacs} is, but remain in the @value{emacs} source tree.
229 These modules live in the directory @file{modules}, which is a 223 These modules live in the directory @file{modules}, which is a
230 sub-directory of the main @emacs{} source code directory. Please look at 224 sub-directory of the main @value{emacs} source code directory. Please look at
231 the samples carefully, and maybe even use them as a basis for making 225 the samples carefully, and maybe even use them as a basis for making
232 your own modules. Most of the concepts required for writing extension 226 your own modules. Most of the concepts required for writing extension
233 modules are covered in the samples. 227 modules are covered in the samples.
234 228
235 @item 229 @item
236 @cindex documentation 230 @cindex documentation
237 @cindex help 231 @cindex help
238 Last, but not least is this manual. This can be viewed from within 232 Last, but not least is this manual. This can be viewed from within
239 @emacs{}, and it can be printed out as well. It is the intention of this 233 @value{emacs}, and it can be printed out as well. It is the intention of this
240 document that it will describe everything you need to know about 234 document that it will describe everything you need to know about
241 extending @emacs{} in C. If you do not find this to be the case, please 235 extending @value{emacs} in C. If you do not find this to be the case, please
242 contact the author(s). 236 contact the author(s).
243 @end itemize 237 @end itemize
244 238
245 The rest of this document will discuss the actual mechanics of 239 The rest of this document will discuss the actual mechanics of
246 @emacs{} modules and work through several of the samples. Please be 240 @value{emacs} modules and work through several of the samples. Please be
247 sure that you have read the @emacs{} Internals Manual and understand 241 sure that you have read the @value{emacs} Internals Manual and understand
248 everything in it. The concepts there apply to all modules. This 242 everything in it. The concepts there apply to all modules. This
249 document may have some overlap, but it is the internals manual which 243 document may have some overlap, but it is the internals manual which
250 should be considered the final authority. It will also help a great 244 should be considered the final authority. It will also help a great
251 deal to look at the actual @emacs{} source code to see how things are 245 deal to look at the actual @value{emacs} source code to see how things are
252 done. 246 done.
253 247
254 @node Annatomy of a Module, Using ellcc, Introduction, Top 248 @node Annatomy of a Module, Using ellcc, Introduction, Top
255 @chapter Annatomy of a Module 249 @chapter Annatomy of a Module
256 @cindex annatomy 250 @cindex annatomy
257 @cindex module skeleton 251 @cindex module skeleton
258 @cindex skeleton, module 252 @cindex skeleton, module
259 @cindex module format 253 @cindex module format
260 @cindex format, module 254 @cindex format, module
261 255
262 Each dynamically loadable @emacs{} extension (hereafter refered to as a 256 Each dynamically loadable @value{emacs} extension (hereafter refered to as a
263 module) has a certain compulsory format, and must contain several 257 module) has a certain compulsory format, and must contain several
264 pieces of information and several mandatory functions. This chapter 258 pieces of information and several mandatory functions. This chapter
265 describes the basic layout of a module, and provides a very simple 259 describes the basic layout of a module, and provides a very simple
266 sample. The source for this sample can be found in the file 260 sample. The source for this sample can be found in the file
267 @file{modules/simple/sample.c} in the main @emacs{} source code tree. 261 @file{modules/simple/sample.c} in the main @value{emacs} source code tree.
268 262
269 @menu 263 @menu
270 * Required Header File:: Always include <emodules.h> 264 * Required Header File:: Always include <emodules.h>
271 * Required Functions:: Functions you must always provide 265 * Required Functions:: Functions you must always provide
272 * Required Variables:: Variables whose values you must provide 266 * Required Variables:: Variables whose values you must provide
279 @cindex include files 273 @cindex include files
280 274
281 @cindex emodules.h 275 @cindex emodules.h
282 @cindex config.h 276 @cindex config.h
283 Every module must include the file @file{<emodules.h>}. This 277 Every module must include the file @file{<emodules.h>}. This
284 will include several other @emacs{} internal header files, and will set up 278 will include several other @value{emacs} internal header files, and will set up
285 certain vital macros. One of the most important files included by 279 certain vital macros. One of the most important files included by
286 @file{emodules.h} is the generated @file{config.h} file, which contains 280 @file{emodules.h} is the generated @file{config.h} file, which contains
287 all of the required system abstraction macros and definitions. Most 281 all of the required system abstraction macros and definitions. Most
288 modules will probably require some pre-processor conditionals based on 282 modules will probably require some pre-processor conditionals based on
289 constants defined in @file{config.h}. Please read that file to 283 constants defined in @file{config.h}. Please read that file to
290 familiarize yourself with the macros defined there. 284 familiarize yourself with the macros defined there.
291 285
292 Depending on exactly what your module will be doing, you will probably 286 Depending on exactly what your module will be doing, you will probably
293 need to include one or more of the @emacs{} internal header files. When 287 need to include one or more of the @value{emacs} internal header files. When
294 you @code{#include <emodules.h>}, you will get a few of the most important 288 you @code{#include <emodules.h>}, you will get a few of the most important
295 @emacs{} header files included automatically for you. The files included 289 @value{emacs} header files included automatically for you. The files included
296 are: 290 are:
297 291
298 @table @file 292 @table @file
299 @item lisp.h 293 @item lisp.h
300 This file contains most of the macros required for declaring Lisp object 294 This file contains most of the macros required for declaring Lisp object
306 should never call low level system functions directly. Rather, you 300 should never call low level system functions directly. Rather, you
307 should use the abstraction macros provided in this header file. 301 should use the abstraction macros provided in this header file.
308 302
309 @item window.h 303 @item window.h
310 This header file defines the window structures and Lisp types, and 304 This header file defines the window structures and Lisp types, and
311 provides functions and macros for manipulating multiple @emacs{} windows. 305 provides functions and macros for manipulating multiple @value{emacs} windows.
312 306
313 @item buffer.h 307 @item buffer.h
314 All macros and function declarations for manipulating internal and user 308 All macros and function declarations for manipulating internal and user
315 visible buffers appear in this file. 309 visible buffers appear in this file.
316 310
318 This header provides the information required for performing text 312 This header provides the information required for performing text
319 insertion and deletion. 313 insertion and deletion.
320 314
321 @item frame.h 315 @item frame.h
322 Provides the required structure, macro and function definitions for 316 Provides the required structure, macro and function definitions for
323 manipulating @emacs{} frames. 317 manipulating @value{emacs} frames.
324 @end table 318 @end table
325 319
326 @node Required Functions, Required Variables, Required Header File, Annatomy of a Module 320 @node Required Functions, Required Variables, Required Header File, Annatomy of a Module
327 @section Required Functions 321 @section Required Functions
328 @cindex initialization 322 @cindex initialization
330 @cindex required functions 324 @cindex required functions
331 325
332 Every module requires several initialization functions. It is the 326 Every module requires several initialization functions. It is the
333 responsibility of these functions to load in any dependant modules, and to 327 responsibility of these functions to load in any dependant modules, and to
334 declare all variables and functions which are to be made visibile to the 328 declare all variables and functions which are to be made visibile to the
335 @emacs{} Lisp reader. Each of these functions performs a very specific 329 @value{emacs} Lisp reader. Each of these functions performs a very specific
336 task, and they are executed in the correct order by @emacs{}. All of 330 task, and they are executed in the correct order by @value{emacs}. All of
337 these functions are @code{void} functions which take no arguments. 331 these functions are @code{void} functions which take no arguments.
338 Here, briefly, are the required module functions. Note that the actual 332 Here, briefly, are the required module functions. Note that the actual
339 function names do not end with the string @code{_module}, but rather 333 function names do not end with the string @code{_module}, but rather
340 they end with the abbreviated module name by which the module is known. 334 they end with the abbreviated module name by which the module is known.
341 More on the module name and its importance later. Just bear in mind 335 More on the module name and its importance later. Just bear in mind
354 @findex vars_of_module 348 @findex vars_of_module
355 This required function contains calls to macros such as 349 This required function contains calls to macros such as
356 @code{DEFVAR_LISP()}, @code{DEFVAR_BOOL()} etc, and its purpose is to 350 @code{DEFVAR_LISP()}, @code{DEFVAR_BOOL()} etc, and its purpose is to
357 declare and initialize all and any variables that your module defines. 351 declare and initialize all and any variables that your module defines.
358 They syntax for declaring variables is identical to the syntax used for 352 They syntax for declaring variables is identical to the syntax used for
359 all internal @emacs{} source code. 353 all internal @value{emacs} source code.
360 354
361 @item modules_of_module 355 @item modules_of_module
362 @findex modules_of_module 356 @findex modules_of_module
363 This optional function should be used to load in any modules which your 357 This optional function should be used to load in any modules which your
364 module depends on. The @emacs{} module loading code makes sure that the 358 module depends on. The @value{emacs} module loading code makes sure that the
365 same module is not loaded twice, so several modules can safely call the 359 same module is not loaded twice, so several modules can safely call the
366 module load function for the same module. Only one copy of each module 360 module load function for the same module. Only one copy of each module
367 (at a given version) will ever be loaded. 361 (at a given version) will ever be loaded.
368 362
369 @item docs_of_module 363 @item docs_of_module
389 discussed here simply for the sake of completeness. 383 discussed here simply for the sake of completeness.
390 384
391 @table @code 385 @table @code
392 @item emodules_compiler 386 @item emodules_compiler
393 This is a variable of type @code{long}, and is used to indicate the 387 This is a variable of type @code{long}, and is used to indicate the
394 version of the @emacs{} loading technology that was used to produce the 388 version of the @value{emacs} loading technology that was used to produce the
395 module being loaded. This version number is completely unrelated to 389 module being loaded. This version number is completely unrelated to
396 the @emacs{} version number, as a given module may quite well work 390 the @value{emacs} version number, as a given module may quite well work
397 regardless of the version of @emacs{} that was installed at the time the 391 regardless of the version of @value{emacs} that was installed at the time the
398 module was created. 392 module was created.
399 393
400 The @emacs{} modules version is used to differentiate between major 394 The @value{emacs} modules version is used to differentiate between major
401 changes in the module loading technology, not versions of @emacs{}. 395 changes in the module loading technology, not versions of @value{emacs}.
402 396
403 @item emodules_name 397 @item emodules_name
404 This is a short (typically 10 characters or less) name for the module, 398 This is a short (typically 10 characters or less) name for the module,
405 and it is used as a suffix for all of the required functions. This is 399 and it is used as a suffix for all of the required functions. This is
406 also the name by which the module is recognised when loading dependant 400 also the name by which the module is recognised when loading dependant
440 depends on. If the module is stand-alone, and does not depend on other 434 depends on. If the module is stand-alone, and does not depend on other
441 modules, then this function can be left empty or even undeclared. 435 modules, then this function can be left empty or even undeclared.
442 However, if it does have dependnacies, it must call 436 However, if it does have dependnacies, it must call
443 @code{emodules_load}: 437 @code{emodules_load}:
444 438
445 @example @code 439 @example
446 @cartouche 440 @cartouche
447 int emodules_load (CONST char *module, 441 int emodules_load (const char *module,
448 CONST char *modname, 442 const char *modname,
449 CONST char *modver) 443 const char *modver)
450 @end cartouche 444 @end cartouche
451 @end example 445 @end example
452 446
453 The first argument @var{module} is the name of the actual shared object 447 The first argument @var{module} is the name of the actual shared object
454 or DLL. You can omit the @file{.so}, @file{.ell} or @file{.dll} 448 or DLL. You can omit the @file{.so}, @file{.ell} or @file{.dll}
482 @cindex @code{ellcc} 476 @cindex @code{ellcc}
483 @cindex module compiler 477 @cindex module compiler
484 478
485 Before discussing the anatomy of a module in greater detail, you should 479 Before discussing the anatomy of a module in greater detail, you should
486 be aware of the steps required in order to correctly compile and link a 480 be aware of the steps required in order to correctly compile and link a
487 module for use within @emacs{}. There is little difference between 481 module for use within @value{emacs}. There is little difference between
488 compiling normal C code and compiling a module. In fact, all that 482 compiling normal C code and compiling a module. In fact, all that
489 changes is the command used to compile the module, and a few extra 483 changes is the command used to compile the module, and a few extra
490 arguments to the compiler. 484 arguments to the compiler.
491 485
492 @emacs{} now ships with a new user utility, called @code{ellcc}. This 486 @value{emacs} now ships with a new user utility, called @code{ellcc}. This
493 is the @dfn{Emacs Loadable Library C Compiler}. This is a wrapper 487 is the @dfn{Emacs Loadable Library C Compiler}. This is a wrapper
494 program that will invoke the real C compiler with the correct arguments 488 program that will invoke the real C compiler with the correct arguments
495 to compile and link your module. With the exception of a few command 489 to compile and link your module. With the exception of a few command
496 line options, this program can be considered a replacement for your C 490 line options, this program can be considered a replacement for your C
497 compiler. It accepts all of the same flags and arguments that your C 491 compiler. It accepts all of the same flags and arguments that your C
523 and that you want to compile the specified source file or files. You 517 and that you want to compile the specified source file or files. You
524 can force compile mode by specifying the @code{--mode=compile} argument 518 can force compile mode by specifying the @code{--mode=compile} argument
525 to @code{ellcc}. 519 to @code{ellcc}.
526 520
527 In this mode, @code{ellcc} is simply a front-end to the same C compiler 521 In this mode, @code{ellcc} is simply a front-end to the same C compiler
528 that was used to create the @emacs{} binary itself. All @code{ellcc} 522 that was used to create the @value{emacs} binary itself. All @code{ellcc}
529 does in this mode is insert a few extra command line arguments before 523 does in this mode is insert a few extra command line arguments before
530 the arguments you specify to @code{ellcc} itself. @code{ellcc} will 524 the arguments you specify to @code{ellcc} itself. @code{ellcc} will
531 then invoke the C compiler to compile your module, and will return the 525 then invoke the C compiler to compile your module, and will return the
532 same exit codes and messages that your C compiler does. 526 same exit codes and messages that your C compiler does.
533 527
534 By far the easiest way to compile modules is to construct a 528 By far the easiest way to compile modules is to construct a
535 @file{Makefile} as you would for a normal program, and simply insert, at 529 @file{Makefile} as you would for a normal program, and simply insert, at
536 some appropriate place something similar to: 530 some appropriate place something similar to:
537 531
538 @example @code 532 @example
539 @cartouche 533 @cartouche
540 CC=ellcc --mode=compile 534 CC=ellcc --mode=compile
541 535
542 .c.o: 536 .c.o:
543 $(CC) $(CFLAGS) -c $< 537 $(CC) $(CFLAGS) -c $<
553 @node Initialization Mode, Link Mode, Compile Mode, Using ellcc 547 @node Initialization Mode, Link Mode, Compile Mode, Using ellcc
554 @section Initialization Mode 548 @section Initialization Mode
555 @cindex initialization 549 @cindex initialization
556 @cindex documentation 550 @cindex documentation
557 551
558 @emacs{} uses a rather bizarre way of documenting variables and 552 @value{emacs} uses a rather bizarre way of documenting variables and
559 functions. Rather than have the documentation for compiled functions 553 functions. Rather than have the documentation for compiled functions
560 and variables passed as static strings in the source code, the 554 and variables passed as static strings in the source code, the
561 documentation is included as a C comment. A special program, called 555 documentation is included as a C comment. A special program, called
562 @file{make-docfile}, is used to scan the source code files and extract 556 @file{make-docfile}, is used to scan the source code files and extract
563 the documentation from these comments, producing the @emacs{} @file{DOC} 557 the documentation from these comments, producing the @value{emacs} @file{DOC}
564 file, which the internal help engine scans when the documentation for a 558 file, which the internal help engine scans when the documentation for a
565 function or variable is requested. 559 function or variable is requested.
566 560
567 Due to the internal construction of Lisp objects, subrs and other such 561 Due to the internal construction of Lisp objects, subrs and other such
568 things, adding documentation for a compiled function or variable in a 562 things, adding documentation for a compiled function or variable in a
569 compiled module, at any time after @emacs{} has been @dfn{dumped} is 563 compiled module, at any time after @value{emacs} has been @dfn{dumped} is
570 somewhat problematic. Fortunately, as a module writer you are insulated 564 somewhat problematic. Fortunately, as a module writer you are insulated
571 from the difficulties thanks to your friend @code{ellcc} and some 565 from the difficulties thanks to your friend @code{ellcc} and some
572 internal trickery in the module loading code. This is all done using 566 internal trickery in the module loading code. This is all done using
573 the @dfn{initialization} mode of @code{ellcc}. 567 the @dfn{initialization} mode of @code{ellcc}.
574 568
611 source code modules that make up your module. These are the files which 605 source code modules that make up your module. These are the files which
612 are scanned by @file{make-docfile}, and provide the information required 606 are scanned by @file{make-docfile}, and provide the information required
613 to populate the @code{docs_of_module} function. Below is a sample 607 to populate the @code{docs_of_module} function. Below is a sample
614 @file{Makefile} fragment which indicates how all of this is used. 608 @file{Makefile} fragment which indicates how all of this is used.
615 609
616 @example @code 610 @example
617 @cartouche 611 @cartouche
618 CC=ellcc --mode=compile 612 CC=ellcc --mode=compile
619 LD=ellcc --mode=link 613 LD=ellcc --mode=link
620 MODINIT=ellcc --mode=init 614 MODINIT=ellcc --mode=init
621 CFLAGS=-O2 -DSOME_STUFF 615 CFLAGS=-O2 -DSOME_STUFF
649 @end example 643 @end example
650 644
651 The above @file{Makefile} is, in fact, complete, and would compile the 645 The above @file{Makefile} is, in fact, complete, and would compile the
652 sample module, and optionally install it. The @code{--mod-location} 646 sample module, and optionally install it. The @code{--mod-location}
653 argument to @code{ellcc} will produce, on the standard output, the base 647 argument to @code{ellcc} will produce, on the standard output, the base
654 location of the @emacs{} module directory. Each sub-directory of that 648 location of the @value{emacs} module directory. Each sub-directory of that
655 directory is automatically searched for for modules when they are loaded 649 directory is automatically searched for for modules when they are loaded
656 with @code{load-module}. An alternative location would be 650 with @code{load-module}. An alternative location would be
657 @file{/usr/local/lib/xemacs/site-modules}. That path can change 651 @file{/usr/local/lib/xemacs/site-modules}. That path can change
658 depending on the options the person who compiled @emacs{} chose, so you 652 depending on the options the person who compiled @value{emacs} chose, so you
659 can always determine the correct site location using the 653 can always determine the correct site location using the
660 @code{--mod-site-location} option. This directory is treated the same 654 @code{--mod-site-location} option. This directory is treated the same
661 way as the main module directory. Each sub-directory within it is 655 way as the main module directory. Each sub-directory within it is
662 searched for a given module when the user attempts to load it. The 656 searched for a given module when the user attempts to load it. The
663 valid extensions that the loader attempts to use are @file{.so}, 657 valid extensions that the loader attempts to use are @file{.so},
676 that all other arguments are passed on directly to the system compiler 670 that all other arguments are passed on directly to the system compiler
677 or linker, along with any other required arguments to create the 671 or linker, along with any other required arguments to create the
678 loadable module. 672 loadable module.
679 673
680 The module has complete access to all symbols that were present in the 674 The module has complete access to all symbols that were present in the
681 dumped @emacs{}, so you do not need to link against libraries that were 675 dumped @value{emacs}, so you do not need to link against libraries that were
682 linked in with the main executable. If your library uses some other 676 linked in with the main executable. If your library uses some other
683 extra libraries, you will need to link with those. There is nothing 677 extra libraries, you will need to link with those. There is nothing
684 particularly complicated about link mode. All you need to do is make 678 particularly complicated about link mode. All you need to do is make
685 sure you invoke it correctly in the @file{Makefile}. See the sample 679 sure you invoke it correctly in the @file{Makefile}. See the sample
686 @file{Makefile} above for an example of a well constructed 680 @file{Makefile} above for an example of a well constructed
742 @item --mod-site-location 736 @item --mod-site-location
743 This will print the name of the site specific module location and exit. 737 This will print the name of the site specific module location and exit.
744 738
745 @item --mod-archdir 739 @item --mod-archdir
746 Prints the name of the root of the architecture-dependant directory that 740 Prints the name of the root of the architecture-dependant directory that
747 @emacs{} searches for architecture-dependant files. 741 @value{emacs} searches for architecture-dependant files.
748 742
749 @item --mod-config 743 @item --mod-config
750 Prints the name of the configuration for which @emacs{} and @code{ellcc} 744 Prints the name of the configuration for which @value{emacs} and @code{ellcc}
751 were compiled. 745 were compiled.
752 @end table 746 @end table
753 747
754 @node Environment Variables, , Other ellcc options, Using ellcc 748 @node Environment Variables, , Other ellcc options, Using ellcc
755 @section Environment Variables 749 @section Environment Variables
756 @cindex environment variables 750 @cindex environment variables
757 751
758 During its normal operation, @code{ellcc} uses the compiler and linker 752 During its normal operation, @code{ellcc} uses the compiler and linker
759 flags that were determined at the time @emacs{} was configured. In 753 flags that were determined at the time @value{emacs} was configured. In
760 certain rare circumstances you may wish to over-ride the flags passed to 754 certain rare circumstances you may wish to over-ride the flags passed to
761 the compiler or linker, and you can do so using environment variables. 755 the compiler or linker, and you can do so using environment variables.
762 The table below lists all of the environment variables that @code{ellcc} 756 The table below lists all of the environment variables that @code{ellcc}
763 recognises. 757 recognises.
764 758
796 790
797 @item ELLMAKEDOC 791 @item ELLMAKEDOC
798 @cindex @code{ELLMAKEDOC} 792 @cindex @code{ELLMAKEDOC}
799 Sets the name of the @file{make-docfile} program to use. Usually 793 Sets the name of the @file{make-docfile} program to use. Usually
800 @code{ellcc} will use the version that was compiled and installed with 794 @code{ellcc} will use the version that was compiled and installed with
801 @emacs{}, but this option allows you to specify an alternative path. 795 @value{emacs}, but this option allows you to specify an alternative path.
802 Used during the compile phase of @emacs{} itself. 796 Used during the compile phase of @value{emacs} itself.
803 @end table 797 @end table
804 798
805 @node Defining Functions, Defining Variables, Using ellcc, Top 799 @node Defining Functions, Defining Variables, Using ellcc, Top
806 @chapter Defining Functions 800 @chapter Defining Functions
807 @cindex defining functions 801 @cindex defining functions
811 The term 805 The term
812 @dfn{function} is a bit overloaded here, as it refers to both a C 806 @dfn{function} is a bit overloaded here, as it refers to both a C
813 function and the way it appears to Lisp, which is a @dfn{subroutine}, or 807 function and the way it appears to Lisp, which is a @dfn{subroutine}, or
814 simply a @dfn{subr}. A Lisp subr is also known as a Lisp primitive, but 808 simply a @dfn{subr}. A Lisp subr is also known as a Lisp primitive, but
815 that term applies less to dynamic modules. @xref{Writing Lisp 809 that term applies less to dynamic modules. @xref{Writing Lisp
816 Primitives,,,internals,@emacs{} Internals Manual}, for details on how to 810 Primitives,,,internals,@value{emacs} Internals Manual}, for details on how to
817 declare functions. You should familiarize yourself with the 811 declare functions. You should familiarize yourself with the
818 instructions there. The format of the function declaration is identical 812 instructions there. The format of the function declaration is identical
819 in modules. 813 in modules.
820 814
821 Normal Lisp primitives document the functions they defining by including 815 Normal Lisp primitives document the functions they defining by including
822 the documentation as a C comment. During the build process, a program 816 the documentation as a C comment. During the build process, a program
823 called @file{make-docfile} is run, which will extract all of these 817 called @file{make-docfile} is run, which will extract all of these
824 comments, build up a single large documentation file, and will store 818 comments, build up a single large documentation file, and will store
825 pointers to the start of each documentation entry in the dumped @emacs{}. 819 pointers to the start of each documentation entry in the dumped @value{emacs}.
826 This, of course, will not work for dynamic modules, as they are loaded 820 This, of course, will not work for dynamic modules, as they are loaded
827 long after @emacs{} has been dumped. For this reason, we require a 821 long after @value{emacs} has been dumped. For this reason, we require a
828 special means for adding documentation for new subrs. This is what the 822 special means for adding documentation for new subrs. This is what the
829 macro @code{CDOCSUBR} is used for, and this is used extensively during 823 macro @code{CDOCSUBR} is used for, and this is used extensively during
830 @code{ellcc} initialization mode. 824 @code{ellcc} initialization mode.
831 825
832 When using @code{DEFUN} in normal @emacs{} C code, the sixth 826 When using @code{DEFUN} in normal @value{emacs} C code, the sixth
833 ``parameter'' is a C comment which documents the function. For a 827 ``parameter'' is a C comment which documents the function. For a
834 dynamic module, we of course need to convert the C comment to a usable 828 dynamic module, we of course need to convert the C comment to a usable
835 string, and we need to set the documentation pointer of the subr to this 829 string, and we need to set the documentation pointer of the subr to this
836 string. As a module programmer, you don't actually need to do any work 830 string. As a module programmer, you don't actually need to do any work
837 for this to happen. It is all taken care of in the 831 for this to happen. It is all taken care of in the
848 @findex DEFUN 842 @findex DEFUN
849 @cindex functions, Lisp 843 @cindex functions, Lisp
850 @cindex functions, defining 844 @cindex functions, defining
851 845
852 Although the full syntax of a function declaration is discussed in the 846 Although the full syntax of a function declaration is discussed in the
853 @emacs{} internals manual in greater depth, what follows is a brief 847 @value{emacs} internals manual in greater depth, what follows is a brief
854 description of how to define and implement a new Lisp primitive in a 848 description of how to define and implement a new Lisp primitive in a
855 module. This is done using the @code{DEFUN} macro. Here is a small 849 module. This is done using the @code{DEFUN} macro. Here is a small
856 example: 850 example:
857 851
858 @example @code 852 @example
859 @cartouche 853 @cartouche
860 DEFUN ("my-function", Fmy_function, 1, 1, "FFile name: ", /* 854 DEFUN ("my-function", Fmy_function, 1, 1, "FFile name: ", /*
861 Sample Emacs primitive function. 855 Sample Emacs primitive function.
862 856
863 The specified FILE is frobricated before it is fnozzled. 857 The specified FILE is frobricated before it is fnozzled.
884 name. Next come the minimum and maximum number of arguments, 878 name. Next come the minimum and maximum number of arguments,
885 respectively. This is used to ensure that the correct number of 879 respectively. This is used to ensure that the correct number of
886 arguments are passed to the function. Next is the @code{interactive} 880 arguments are passed to the function. Next is the @code{interactive}
887 definition. If this function is meant to be run by a user 881 definition. If this function is meant to be run by a user
888 interactively, then you need to specify the argument types and prompts 882 interactively, then you need to specify the argument types and prompts
889 in this string. Please consult the @emacs{} Lisp manual for more 883 in this string. Please consult the @value{emacs} Lisp manual for more
890 details. Next comes a C comment that is the documentation for this 884 details. Next comes a C comment that is the documentation for this
891 function. This comment @strong{must} exist. Last comes the list of 885 function. This comment @strong{must} exist. Last comes the list of
892 function argument names, if any. 886 function argument names, if any.
893 887
894 @node Declaring Functions, , Using DEFUN, Defining Functions 888 @node Declaring Functions, , Using DEFUN, Defining Functions
906 Each call to @code{DEFSUBR} takes as its only argument the name of the 900 Each call to @code{DEFSUBR} takes as its only argument the name of the
907 function, which is the same as the second argument to the call to 901 function, which is the same as the second argument to the call to
908 @code{DEFUN}. Using the example function above, you would insert the 902 @code{DEFUN}. Using the example function above, you would insert the
909 following code in the @code{syms_of_module} function: 903 following code in the @code{syms_of_module} function:
910 904
911 @example @code 905 @example
912 @cartouche 906 @cartouche
913 DEFSUBR(Fmy_function); 907 DEFSUBR(Fmy_function);
914 @end cartouche 908 @end cartouche
915 @end example 909 @end example
916 910
917 This call will instruct @emacs{} to make the function visible to the Lisp 911 This call will instruct @value{emacs} to make the function visible to the Lisp
918 reader and will prepare for the insertion of the documentation into 912 reader and will prepare for the insertion of the documentation into
919 the right place. Once this is done, the user can call the Lisp 913 the right place. Once this is done, the user can call the Lisp
920 function @code{my-function}, if it was defined as an interactive 914 function @code{my-function}, if it was defined as an interactive
921 function (which in this case it was). 915 function (which in this case it was).
922 916
923 Thats all there is to defining and announcing new functions. The rules 917 Thats all there is to defining and announcing new functions. The rules
924 for what goes inside the functions, and how to write good modules, is 918 for what goes inside the functions, and how to write good modules, is
925 beyond the scope of this document. Please consult the @emacs{} 919 beyond the scope of this document. Please consult the @value{emacs}
926 internals manual for more details. 920 internals manual for more details.
927 921
928 @node Defining Variables, Index, Defining Functions, Top 922 @node Defining Variables, Index, Defining Functions, Top
929 @chapter Defining Variables 923 @chapter Defining Variables
930 @cindex defining variables 924 @cindex defining variables
939 933
940 Rarely will you write a module that only contains functions. It is 934 Rarely will you write a module that only contains functions. It is
941 common to also provide variables which can be used to control the 935 common to also provide variables which can be used to control the
942 behaviour of the function, or store the results of the function being 936 behaviour of the function, or store the results of the function being
943 executed. The actual C variable types are the same for modules 937 executed. The actual C variable types are the same for modules
944 and internal @emacs{} primitives, and the declaration of the variables 938 and internal @value{emacs} primitives, and the declaration of the variables
945 is identical. 939 is identical.
946 940
947 @xref{Adding Global Lisp Variables,,,internals,XEmacs Internals Manual}, 941 @xref{Adding Global Lisp Variables,,,internals,XEmacs Internals Manual},
948 for more information on variables and naming conventions. 942 for more information on variables and naming conventions.
949 943
950 Once your variables are defined, you need to initialize them and make 944 Once your variables are defined, you need to initialize them and make
951 the Lisp reader aware of them. This is done in the 945 the Lisp reader aware of them. This is done in the
952 @code{vars_of_module} initialization function using special @emacs{} 946 @code{vars_of_module} initialization function using special @value{emacs}
953 macros such as @code{DEFVAR_LISP}, @code{DEFVAR_BOOL}, @code{DEFVAR_INT} 947 macros such as @code{DEFVAR_LISP}, @code{DEFVAR_BOOL}, @code{DEFVAR_INT}
954 etc. The best way to see how to use these macros is to look at existing 948 etc. The best way to see how to use these macros is to look at existing
955 source code, or read the internals manual. 949 source code, or read the internals manual.
956 950
957 One @emph{very} important difference between @emacs{} variables and 951 One @emph{very} important difference between @value{emacs} variables and
958 module variables is how you use pure space. Simply put, you 952 module variables is how you use pure space. Simply put, you
959 @strong{never} use pure space in @emacs{} modules. The pure space 953 @strong{never} use pure space in @value{emacs} modules. The pure space
960 storage is of a limited size, and is initialized propperly during the 954 storage is of a limited size, and is initialized propperly during the
961 dumping of @emacs{}. Because variables are being added dynamically to 955 dumping of @value{emacs}. Because variables are being added dynamically to
962 an already running @emacs{} when you load a module, you cannot use pure 956 an already running @value{emacs} when you load a module, you cannot use pure
963 space. Be warned: @strong{do not use pure space in modules. Repeat, do 957 space. Be warned: @strong{do not use pure space in modules. Repeat, do
964 not use pure space in modules.} Once again, to remove all doubts: 958 not use pure space in modules.} Once again, to remove all doubts:
965 @strong{DO NOT USE PURE SPACE IN MODULES!!!} 959 @strong{DO NOT USE PURE SPACE IN MODULES!!!}
966 960
967 Below is a small example which declares and initializes two 961 Below is a small example which declares and initializes two
968 variables. You will note that this code takes into account the fact 962 variables. You will note that this code takes into account the fact
969 that this module may very well be compiled into @emacs{} itself. This 963 that this module may very well be compiled into @value{emacs} itself. This
970 is a prudent thing to do. 964 is a prudent thing to do.
971 965
972 @example @code 966 @example
973 @cartouche 967 @cartouche
974 Lisp_Object Vsample_string; 968 Lisp_Object Vsample_string;
975 int sample_boolean; 969 int sample_boolean;
976 970
977 void 971 void