annotate src/emodules.h @ 996:25e260cb7994

[xemacs-hg @ 2002-09-10 15:27:02 by james] Enable unloading of dynamic modules. Create the first two internal XEmacs modules: LDAP and postgreSQL. Update the sample directory to contain a sample internal XEmacs module and a sample external XEmacs module. Improve support for autoloading modules. Make internal module code compile into the XEmacs binary if XEmacs is configured without module support. Make the internal module directories self-contained so that they can be distributed separately from XEmacs.
author james
date Tue, 10 Sep 2002 15:27:39 +0000
parents 943eaba38521
children 184461bc8de4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
1 /* emodules.h - Declarations and definitions for XEmacs loadable modules.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
2 (C) Copyright 1998, 1999 J. Kean Johnston. All rights reserved.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
3
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
4 This file is part of XEmacs.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
5
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
6 XEmacs is free software; you can redistribute it and/or modify it
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
7 under the terms of the GNU General Public License as published by the
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
8 Free Software Foundation; either version 2, or (at your option) any
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
9 later version.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
10
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
14 for more details.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
15
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
17 along with XEmacs; see the file COPYING. If not, write to
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
20
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
21 #ifndef EMODULES_HDR
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
22
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
23 #ifndef EMODULES_GATHER_VERSION
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
24 #define EMODULES_HDR
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
25 #endif
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
26
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
27 #define EMODULES_VERSION "1.1.0"
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
28 #define EMODULES_MAJOR 1
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
29 #define EMODULES_MINOR 1
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
30 #define EMODULES_PATCH 0
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
31 #define EMODULES_REVISION (long)((EMODULES_MAJOR * 1000) + \
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
32 (EMODULES_MINOR * 10) + \
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
33 (EMODULES_PATCH))
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
34
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
35 #ifndef EMODULES_GATHER_VERSION
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
36 #include <config.h>
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
37 #include "lisp.h"
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
38 #include "sysdep.h"
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
39 #include "window.h"
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
40 #include "buffer.h"
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
41 #include "insdel.h"
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
42 #include "frame.h"
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
43 #include "lstream.h"
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
44 #include "file-coding.h"
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
45
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
46 /* Module loading technology version number */
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
47 extern Lisp_Object Vmodule_version;
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
48
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
49 /* Load path */
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
50 extern Lisp_Object Vmodule_load_path;
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
51
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
52 /* XEmacs version Information */
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
53 extern Lisp_Object Vemacs_major_version;
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
54 extern Lisp_Object Vemacs_minor_version;
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
55
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
56 /*
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
57 * Load in a C module. The first argument is the name of the .so file, the
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
58 * second is the name of the module, and the third is the module version.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
59 * If the module name is NULL, we will always reload the .so. If it is not
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
60 * NULL, we check to make sure we haven't loaded it before. If the version
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
61 * is specified, we check to make sure we didn't load the module of the
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
62 * specified version before. We also use these as checks when we open the
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
63 * module to make sure we have the right module.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
64 */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
65 extern void emodules_load (const char *module, const char *name, const char *version);
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
66
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
67 /*
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
68 * Because subrs and symbols added by a dynamic module are not part of
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
69 * the make-docfile process, we need a clean way to get the variables
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
70 * and functions documented. Since people don't like the idea of making
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
71 * shared modules use different versions of DEFSUBR() and DEFVAR_LISP()
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
72 * and friends, we need these two functions to insert the documentation
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
73 * into the right place. These functions will be called by the module
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
74 * init code, generated by ellcc during initialization mode.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
75 */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
76 extern void emodules_doc_subr (const char *objname, const char *docstr);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
77 extern void emodules_doc_sym (const char *objname, const char *docstr);
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
78
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
79 #define CDOCSUBR(Fname, DOC) emodules_doc_subr (Fname, DOC)
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
80 #define CDOCSYM(Sname, DOC) emodules_doc_sym (Sname, DOC)
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
81 #endif /* EMODULES_GATHER_VERSION */
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
82
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
83 /* We should not expose module entities to the portable dumper. */
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
84 #if defined(PDUMP) && !defined(EMODULES_DO_NOT_REDEFINE)
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
85 #define dump_add_root_struct_ptr(varaddr,descaddr) DO_NOTHING
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
86 #define dump_add_opaque(varaddr,size) DO_NOTHING
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
87 #define dump_add_root_block(ptraddress,desc) DO_NOTHING
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
88 #define dump_add_opaque_int(int_varaddr) DO_NOTHING
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
89 #define dump_add_opaque_fixnum(fixnum_varaddr) DO_NOTHING
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
90 #define dump_add_root_object(varaddr) DO_NOTHING
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
91 #define dump_add_weak_object_chain(varaddr) DO_NOTHING
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
92 #define staticpro(DSF_location) staticpro_nodump(DSF_location)
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
93
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
94 #undef DEFSYMBOL
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
95 #undef DEFSYMBOL_MULTIWORD_PREDICATE
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
96 #define DEFSYMBOL(name) DEFSYMBOL_NO_DUMP (name)
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
97 #define DEFSYMBOL_MULTIWORD_PREDICATE(name) \
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
98 DEFSYMBOL_MULTIWORD_PREDICATE_NO_DUMP (name)
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
99 #define defsymbol(location,name) defsymbol_nodump (location, name)
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
100 #endif
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 771
diff changeset
101
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
102 #endif /* EMODULES_HDR */