annotate modules/sample/sample.c @ 938:0391335b65dc

[xemacs-hg @ 2002-07-31 07:14:49 by michaels] 2002-07-17 Marcus Crestani <crestani@informatik.uni-tuebingen.de> Markus Kaltenbach <makalten@informatik.uni-tuebingen.de> Mike Sperber <mike@xemacs.org> configure flag to turn these changes on: --use-kkcc First we added a dumpable flag to lrecord_implementation. It shows, if the object is dumpable and should be processed by the dumper. * lrecord.h (struct lrecord_implementation): added dumpable flag (MAKE_LRECORD_IMPLEMENTATION): fitted the different makro definitions to the new lrecord_implementation and their calls. Then we changed mark_object, that it no longer needs a mark method for those types that have pdump descritions. * alloc.c: (mark_object): If the object has a description, the new mark algorithm is called, and the object is marked according to its description. Otherwise it uses the mark method like before. These procedures mark objects according to their descriptions. They are modeled on the corresponding pdumper procedures. (mark_with_description): (get_indirect_count): (structure_size): (mark_struct_contents): These procedures still call mark_object, this is needed while there are Lisp_Objects without descriptions left. We added pdump descriptions for many Lisp_Objects: * extents.c: extent_auxiliary_description * database.c: database_description * gui.c: gui_item_description * scrollbar.c: scrollbar_instance_description * toolbar.c: toolbar_button_description * event-stream.c: command_builder_description * mule-charset.c: charset_description * device-msw.c: devmode_description * dialog-msw.c: mswindows_dialog_id_description * eldap.c: ldap_description * postgresql.c: pgconn_description pgresult_description * tooltalk.c: tooltalk_message_description tooltalk_pattern_description * ui-gtk.c: emacs_ffi_description emacs_gtk_object_description * events.c: * events.h: * event-stream.c: * event-Xt.c: * event-gtk.c: * event-tty.c: To write a pdump description for Lisp_Event, we converted every struct in the union event to a Lisp_Object. So we created nine new Lisp_Objects: Lisp_Key_Data, Lisp_Button_Data, Lisp_Motion_Data, Lisp_Process_Data, Lisp_Timeout_Data, Lisp_Eval_Data, Lisp_Misc_User_Data, Lisp_Magic_Data, Lisp_Magic_Eval_Data. We also wrote makro selectors and mutators for the fields of the new designed Lisp_Event and added everywhere these new abstractions. We implemented XD_UNION support in (mark_with_description), so we can describe exspecially console/device specific data with XD_UNION. To describe with XD_UNION, we added a field to these objects, which holds the variant type of the object. This field is initialized in the appendant constructor. The variant is an integer, it has also to be described in an description, if XD_UNION is used. XD_UNION is used in following descriptions: * console.c: console_description (get_console_variant): returns the variant (create_console): added variant initialization * console.h (console_variant): the different console types * console-impl.h (struct console): added enum console_variant contype * device.c: device_description (Fmake_device): added variant initialization * device-impl.h (struct device): added enum console_variant devtype * objects.c: image_instance_description font_instance_description (Fmake_color_instance): added variant initialization (Fmake_font_instance): added variant initialization * objects-impl.h (struct Lisp_Color_Instance): added color_instance_type * objects-impl.h (struct Lisp_Font_Instance): added font_instance_type * process.c: process_description (make_process_internal): added variant initialization * process.h (process_variant): the different process types
author michaels
date Wed, 31 Jul 2002 07:14:49 +0000
parents abe6d1db359e
children
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 /*
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
2 * Very simple sample module. Illustrates most of the salient features
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
3 * of Emacs dynamic modules.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
4 * (C) Copyright 1998, 1999 J. Kean Johnston. All rights reserved.
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
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
7 #include <emodules.h>
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
8
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
9 /*
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
10 * This sample introduces three new Lisp objects to the Lisp reader.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
11 * The first, a simple boolean value, and the second a string. The
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
12 * Third is a sample function that simply prints a message.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
13 */
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
14 int sample_bool;
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
15 Lisp_Object Vsample_string;
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
16
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
17 DEFUN ("sample-function", Fsample_function, 0, 0, "", /*
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
18 This is a sample function loaded dynamically.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
19
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
20 You will notice in the source code for this module that the
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
21 declaration is identical to internal Emacs functions. This
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
22 makes it possible to use the exact same code in a dumped
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
23 version of Emacs.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
24 */
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
25 ())
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
26 {
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
27 message ("Eureka! It worked");
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
28 return Qt;
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
29 }
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
30
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
31 /*
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
32 * Each dynamically loaded Emacs module is given a name at compile
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
33 * time. This is a short name, and must be a valid part of a C
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 388
diff changeset
34 * identifier. This name is used to construct the name of several
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
35 * functions which must appear in the module source code.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 388
diff changeset
36 * The first such function, modules_of_XXXX, should load in any dependent
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
37 * modules. This function is optional, and the module will still load if
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
38 * it is not present in the module.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
39 *
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
40 * The second function, which is NOT optional, is syms_of_XXXX, in which
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
41 * all functions that the module will be provided are declared. This
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
42 * function will contain calls to DEFSUBR().
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
43 *
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
44 * The third function, which is also NOT optional, is vars_of_XXXX, in
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
45 * which you declare all variables that the module provides. This
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
46 * function will contain calls to DEFVAR_LISP(), DEFVAR_BOOL() etc.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
47 *
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
48 * When declaring functions and variables in the syms_of_XXXX and
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
49 * vars_of_XXXX functions, you use the exact same syntax that you
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
50 * would as if this module were being compiled into the pure Emacs.
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 * All three of these functions are declared as void functions,
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
53 * taking no parameters. Since this sample module is called 'sample',
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
54 * the functions will be named 'modules_of_sample', 'syms_of_sample'
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
55 * and 'vars_of_sample'.
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
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
58 void
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
59 modules_of_sample()
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
60 {
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
61 /*
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
62 * This function isn't actually required as we will not be loading
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 388
diff changeset
63 * in any dependent modules, but if we were, we would do something like:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 388
diff changeset
64 * emodules_load ("dependent.ell", "sample2", "1.0.0");
388
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
65 */
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 void
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
69 syms_of_sample()
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
70 {
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
71 DEFSUBR(Fsample_function);
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
72 }
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
73
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
74 void
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
75 vars_of_sample()
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
76 {
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
77 DEFVAR_LISP ("sample-string", &Vsample_string /*
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
78 This is a sample string, declared in a dynamic module.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
79
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
80 The syntax and conventions used for all normal Emacs variables
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
81 apply equally to modules, using an identical syntax.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
82 */ );
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
83
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
84 DEFVAR_BOOL ("sample-boolean", &sample_bool /*
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
85 *Sample boolean value, in a dynamic module.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
86
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
87 This is a user-settable variable, as indicated by the *
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
88 as the first character of the description. Declared in
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
89 a module exactly as it would be internally in Emacs.
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
90 */ );
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
91 }
aabb7f5b1c81 Import from CVS: tag r21-2-9
cvs
parents:
diff changeset
92