0
|
1 This directory contains the source files for the C component of XEmacs.
|
|
2 Nothing in this directory is needed for using XEmacs once it is built
|
|
3 and installed, if the dumped Emacs (on Unix systems) or the XEmacs
|
|
4 executable and map files (on VMS systems) are copied elsewhere.
|
|
5
|
|
6 See the files ../README and then ../INSTALL for installation instructions.
|
|
7
|
|
8 Under Unix, the file `Makefile.in.in' is used as a template by the script
|
|
9 `../configure' to produce `Makefile.in'. The same script then uses `cpp'
|
|
10 to produce the machine-dependent `Makefile' from `Makefile.in';
|
|
11 `Makefile' is the file which actually controls the compilation of
|
|
12 Emacs. Most of this should work transparently to the user; you should
|
|
13 only need to run `../configure', and then type `make'.
|
|
14
|
|
15 See the file VMSBUILD in this directory for instructions on compiling,
|
|
16 linking and building Emacs on VMS.
|
|
17
|
|
18 The files `*.com' and `temacs.opt' are used on VMS only.
|
|
19 The files `vlimit.h', `ioclt.h' and `param.h' are stubs to
|
|
20 allow compilation on VMS with the minimum amount of #ifdefs.
|
|
21
|
|
22 `uaf.h' contains VMS uaf structure definitions. This is only needed if
|
|
23 you define READ_SYSUAF. This should only be done for single-user
|
|
24 systems where you are not overly concerned with security, since it
|
|
25 either requires that you install Emacs with SYSPRV or make SYSUAF.DAT
|
|
26 world readable. Otherwise, Emacs can determine information about the
|
|
27 current user, but no one else.
|
|
28
|
|
29 `pwd.h' contains definitions for VMS to be able to correctly simulate
|
|
30 `getpwdnam' and `getpwduid'.
|
|
31
|
|
32 General changes for XEmacs:
|
|
33 ---------------------------
|
|
34 1. Lisp objects.
|
|
35
|
|
36 -- XFASTINT has been eliminated. Use of this expression as an lvalue
|
|
37 is incompatible with the union form of Lisp objects, and use as
|
|
38 an rvalue is likely to lead to errors and doesn't really save much
|
|
39 time. Expressions of the form `XFASTINT (obj) = num;' get replaced
|
|
40 by `obj = make_int (num);' or `XSETINT (obj, num);' and
|
|
41 expressions of the form `num = XFASTINT (obj);' get replaced by
|
|
42 `num = XINT (obj);'. Use Qzero in place of `make_int (0)'.
|
|
43
|
|
44 -- Use of XTYPE gets replaced by the appropriate predicate. Using
|
|
45 XTYPE only works for the small number of types that are not stored
|
|
46 using the Lisp_Record type (int, cons, string, and vector). For
|
|
47 example, `(XTYPE (foo) == Lisp_Buffer)' gets replaced by
|
|
48 `(BUFFERP (foo))'.
|
|
49
|
|
50 -- `XSET (obj, Lisp_Int, num)' gets replaced by `XSETINT (obj, num)',
|
|
51 for consistency.
|
|
52
|
|
53 -- Some occurrences of XSET need to get replaced by XSETR --
|
|
54 specifically, those where the type is not a primitive type
|
|
55 (primitive types are int, cons, string, and vector).
|
|
56
|
|
57 -- References to `XSTRING (obj)->size' get replaced with
|
|
58 `string_length (obj)'. This is currently for cosmetic reasons
|
|
59 but there may be other reasons in the future. (This change is
|
|
60 currently incomplete in the source files.)
|
|
61
|
|
62
|
|
63 2. Storage classes:
|
|
64
|
|
65 -- All occurrences of `const' should get replaced by CONST. This
|
|
66 is to work around a header conflict with X11R4.
|
|
67
|
|
68 -- All occurrences of `register' should be replaced by `REGISTER'.
|
|
69 It interferes with backtraces so we disable it if DEBUG_XEMACS
|
|
70 is defined.
|
|
71
|
|
72
|
|
73 3. Errors, messages, I18N3 snarfing:
|
|
74
|
|
75 -- Errors are continuable in XEmacs but are not in FSF Emacs.
|
|
76 Therefore, it's important that functions do something reasonable
|
|
77 if an error gets continued. If you want to signal a non-
|
|
78 continuable error, the call to Fsignal() gets put inside a
|
|
79 `while (1)' loop. To facilitate this, and also for proper
|
|
80 I18N3 message snarfing, most calls to Fsignal() have been
|
|
81 replaced by calls to signal_error(), signal_simple_error(),
|
|
82 etc.
|
|
83
|
|
84 -- Constant strings occurring in source files need to get wrapped
|
|
85 in a call to GETTEXT (or if inside of a call to `build_string',
|
|
86 change that function to `build_translated_string') if they don't
|
|
87 occur in certain places where the I18N3 message snarfer will see
|
|
88 them. For a complete discussion of this, see the file
|
|
89 lib-src/make-msgfile.l.
|
|
90
|
|
91 -- Calls to `fprintf (stderr, ...)' and `printf (...)' get replaced
|
|
92 with calls to `stderr_out' and `stdout_out'. This is for I18N3
|
|
93 message snarfing.
|
|
94
|
|
95 4. Initialization:
|
|
96
|
|
97 -- FSF constructs like `obj = intern ("string"); staticpro (&obj);'
|
|
98 get replaced by `defsymbol (&obj);'. This is for code cleanness
|
|
99 and better purespace usage.
|
|
100 -- FSF constructs like
|
|
101 obj = intern ("error");
|
|
102 Fput (obj, Qerror_message, "message");
|
|
103 Fput (obj, Qerror_conditions, some list);
|
|
104 get replaced by calls to deferror(). See the definition of
|
|
105 deferror() for how the correct arguments to pass. This is for
|
|
106 code cleanness and I18N3 message snarfing.
|
|
107 -- Code in keys_of_foo() functions has been moved into Lisp.
|