Mercurial > hg > xemacs-beta
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 |