annotate src/lisp.h @ 771:943eaba38521

[xemacs-hg @ 2002-03-13 08:51:24 by ben] The big ben-mule-21-5 check-in! Various files were added and deleted. See CHANGES-ben-mule. There are still some test suite failures. No crashes, though. Many of the failures have to do with problems in the test suite itself rather than in the actual code. I'll be addressing these in the next day or so -- none of the test suite failures are at all critical. Meanwhile I'll be trying to address the biggest issues -- i.e. build or run failures, which will almost certainly happen on various platforms. All comments should be sent to ben@xemacs.org -- use a Cc: if necessary when sending to mailing lists. There will be pre- and post- tags, something like pre-ben-mule-21-5-merge-in, and post-ben-mule-21-5-merge-in.
author ben
date Wed, 13 Mar 2002 08:54:06 +0000
parents b1f74adcc1ff
children 79940b592197
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* Fundamental definitions for XEmacs Lisp interpreter.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1985-1987, 1992-1995 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 Copyright (C) 1993-1996 Richard Mlynarik.
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4 Copyright (C) 1995, 1996, 2000, 2001, 2002 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 /* Synched up with: FSF 19.30. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
25 #ifndef INCLUDED_lisp_h_
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
26 #define INCLUDED_lisp_h_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 /* general definitions */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
32 /* ------------------------ include files ------------------- */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
33
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 /* We include the following generally useful header files so that you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 don't have to worry about prototypes when using the standard C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 library functions and macros. These files shouldn't be excessively
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 large so they shouldn't cause that much of a slowdown. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 #include <stdlib.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 #include <string.h> /* primarily for memcpy, etc. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 #include <stdio.h> /* NULL, etc. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 #include <ctype.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 #include <stdarg.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 #include <stddef.h> /* offsetof */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 #include <sys/types.h>
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
46 #include <limits.h>
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
47
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
48 /* ------------------------ definition of EMACS_INT ------------------- */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
49
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
50 /* EMACS_INT is the underlying integral type into which a Lisp_Object must fit.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
51 In particular, it must be large enough to contain a pointer.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
52 config.h can override this, e.g. to use `long long' for bigger lisp ints.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
53
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
54 #### In point of fact, it would NOT be a good idea for config.h to mess
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
55 with EMACS_INT. A lot of code makes the basic assumption that EMACS_INT
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
56 is the size of a pointer. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
57
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
58 #ifndef SIZEOF_EMACS_INT
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
59 # define SIZEOF_EMACS_INT SIZEOF_VOID_P
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
60 #endif
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
61
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
62 #ifndef EMACS_INT
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
63 # if SIZEOF_EMACS_INT == SIZEOF_LONG
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
64 # define EMACS_INT long
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
65 # elif SIZEOF_EMACS_INT == SIZEOF_INT
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
66 # define EMACS_INT int
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
67 # elif SIZEOF_EMACS_INT == SIZEOF_LONG_LONG
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
68 # define EMACS_INT long long
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
69 # else
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
70 # error Unable to determine suitable type for EMACS_INT
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
71 # endif
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
72 #endif
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
73
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
74 #ifndef EMACS_UINT
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
75 # define EMACS_UINT unsigned EMACS_INT
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
76 #endif
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
77
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
78 #define BITS_PER_EMACS_INT (SIZEOF_EMACS_INT * BITS_PER_CHAR)
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
79
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
80 /* ------------------------ basic char/int typedefs ------------------- */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
81
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
82 /* The definitions we put here use typedefs to attribute specific meaning
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
83 to types that by themselves are pretty general. Stuff pointed to by a
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
84 char * or unsigned char * will nearly always be one of four types:
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
85 a) pointer to internally-formatted text; b) pointer to text in some
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
86 external format, which can be defined as all formats other than the
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
87 internal one; c) pure ASCII text; d) binary data that is not meant to
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
88 be interpreted as text. [A fifth possible type "e) a general pointer
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
89 to memory" should be replaced with void *.] Using these more specific
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
90 types rather than the general ones helps avoid the confusions that
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
91 occur when the semantics of a char * argument being studied are unclear.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
92
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
93 Note that these typedefs are purely for documentation purposes; from
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
94 the C code's perspective, they are exactly equivalent to `char *',
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
95 `unsigned char *', etc., so you can freely use them with library
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
96 functions declared as such. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
97
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
98 /* The data representing the text in a buffer is logically a set
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
99 of Intbytes, declared as follows. */
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
100
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
101 typedef unsigned char Intbyte;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
102
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
103 /* The following should be used when you are working with internal data
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
104 but for whatever reason need to have it declared a "char *". Examples
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
105 are function arguments whose values are most commonly literal strings,
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
106 or where you have to apply a stdlib string function to internal data.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
107
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
108 In general, you should avoid this where possible and use Intbyte instead,
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
109 for consistency. For example, the new Mule workspace contains
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
110 Intbyte versions of the stdlib string functions. */
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
111
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
112 typedef char CIntbyte;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
113
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
114 /* The data representing a string in "external" format (binary or any
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
115 external encoding) is logically a set of Extbytes, declared as
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
116 follows. Extbyte is guaranteed to be just a char, so for example
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
117 strlen (Extbyte *) is OK. Extbyte is only a documentation device
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
118 for referring to external text. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
119
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
120 typedef char Extbyte;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
121 typedef unsigned char UExtbyte;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
122
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
123 /* A byte in a string in binary format: */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
124 typedef char Char_Binary;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
125 typedef signed char SChar_Binary;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
126 typedef unsigned char UChar_Binary;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
127
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
128 /* A byte in a string in entirely US-ASCII format: (Nothing outside
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
129 the range 00 - 7F) */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
130
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
131 typedef char Char_ASCII;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
132 typedef unsigned char UChar_ASCII;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
133
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
134
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
135 /* To the user, a buffer is made up of characters, declared as follows.
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
136 In the non-Mule world, characters and Intbytes are equivalent.
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
137 In the Mule world, a character requires (typically) 1 to 4
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
138 Intbytes for its representation in a buffer. */
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
139
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
140 typedef int Emchar;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
141
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
142 /* Different ways of referring to a position in a buffer. We use
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
143 the typedefs in preference to 'EMACS_INT' to make it clearer what
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
144 sort of position is being used. See extents.c for a description
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
145 of the different positions. We put them here instead of in
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
146 buffer.h (where they rightfully belong) to avoid syntax errors
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
147 in function prototypes. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
148
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
149 typedef EMACS_INT Charbpos;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
150 typedef EMACS_INT Bytebpos;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
151 typedef EMACS_INT Membpos;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
152
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
153 /* Counts of bytes or chars */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
154 typedef EMACS_INT Bytecount;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
155 typedef EMACS_INT Charcount;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
156 /* Counts of elements */
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
157 typedef EMACS_INT Elemcount;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
158 /* Hash codes */
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
159 typedef unsigned long Hashcode;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
160
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
161 #ifdef HAVE_INTTYPES_H
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
162 #include <inttypes.h>
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
163 #elif SIZEOF_VOID_P == SIZEOF_INT
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
164 typedef int intptr_t;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
165 typedef unsigned int uintptr_t;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
166 #elif SIZEOF_VOID_P == SIZEOF_LONG
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
167 typedef long intptr_t;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
168 typedef unsigned long uintptr_t;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
169 #elif defined(SIZEOF_LONG_LONG) && SIZEOF_VOID_P == SIZEOF_LONG_LONG
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
170 typedef long long intptr_t;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
171 typedef unsigned long long uintptr_t;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
172 #else
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
173 /* Just pray. May break, may not. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
174 typedef long intptr_t;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
175 typedef unsigned long uintptr_t;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
176 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
177
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
178 /* ------------------------ dynamic arrays ------------------- */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 #define Dynarr_declare(type) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 type *base; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 int elsize; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 int cur; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 int largest; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 int max
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 typedef struct dynarr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 Dynarr_declare (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 } Dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 void *Dynarr_newf (int elsize);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 void Dynarr_resize (void *dy, int size);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
194 void Dynarr_insert_many (void *d, const void *el, int len, int start);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 void Dynarr_delete_many (void *d, int start, int len);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 void Dynarr_free (void *d);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
198 #define Dynarr_new(type) ((type##_dynarr *) Dynarr_newf (sizeof (type)))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
199 #define Dynarr_new2(dynarr_type, type) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
200 ((dynarr_type *) Dynarr_newf (sizeof (type)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 #define Dynarr_at(d, pos) ((d)->base[pos])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 #define Dynarr_atp(d, pos) (&Dynarr_at (d, pos))
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
203 #define Dynarr_begin(d) Dynarr_atp (d, 0)
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
204 #define Dynarr_end(d) Dynarr_atp (d, Dynarr_length (d))
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
205 #define Dynarr_sizeof(d) ((d)->cur * (d)->elsize)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 #define Dynarr_length(d) ((d)->cur)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 #define Dynarr_largest(d) ((d)->largest)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 #define Dynarr_reset(d) ((d)->cur = 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 #define Dynarr_add_many(d, el, len) Dynarr_insert_many (d, el, len, (d)->cur)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 #define Dynarr_insert_many_at_start(d, el, len) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 Dynarr_insert_many (d, el, len, 0)
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
212 #define Dynarr_add_literal_string(d, s) Dynarr_add_many (d, s, sizeof (s) - 1)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
213 #define Dynarr_add_lisp_string(d, s, codesys) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
214 do { \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
215 Lisp_Object dyna_ls_s = (s); \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
216 Lisp_Object dyna_ls_cs = (codesys); \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
217 Extbyte *dyna_ls_eb; \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
218 Bytecount dyna_ls_bc; \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
219 \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
220 TO_EXTERNAL_FORMAT (LISP_STRING, dyna_ls_s, \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
221 ALLOCA, (dyna_ls_eb, dyna_ls_bc), \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
222 dyna_ls_cs); \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
223 Dynarr_add_many (d, dyna_ls_eb, dyna_ls_bc); \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 #define Dynarr_add(d, el) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 (d)->cur >= (d)->max ? Dynarr_resize ((d), (d)->cur+1) : (void) 0, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 ((d)->base)[(d)->cur++] = (el), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 (d)->cur > (d)->largest ? (d)->largest = (d)->cur : (int) 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 /* The following defines will get you into real trouble if you aren't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 careful. But they can save a lot of execution time when used wisely. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 #define Dynarr_increment(d) ((d)->cur++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 #define Dynarr_set_size(d, n) ((d)->cur = n)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
236 #define Dynarr_pop(d) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
237 (assert ((d)->cur > 0), (d)->cur--, Dynarr_at (d, (d)->cur))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
238 #define Dynarr_delete(d, i) Dynarr_delete_many (d, i, len)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
239 #define Dynarr_delete_by_pointer(d, p) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
240 Dynarr_delete_many (d, (p) - ((d)->base), 1)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
241
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 #ifdef MEMORY_USAGE_STATS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 struct overhead_stats;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
244 Bytecount Dynarr_memory_usage (void *d, struct overhead_stats *stats);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 /* Also define min() and max(). (Some compilers put them in strange
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 places that won't be referenced by the above include files, such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 as 'macros.h' under Solaris.) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 #ifndef min
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 #define min(a,b) (((a) <= (b)) ? (a) : (b))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 #ifndef max
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 #define max(a,b) (((a) > (b)) ? (a) : (b))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 /* Memory allocation */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
259 void malloc_warning (const char *);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
260 void *xmalloc (Bytecount size);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
261 void *xmalloc_and_zero (Bytecount size);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
262 void *xrealloc (void *, Bytecount size);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
263 char *xstrdup (const char *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 /* generally useful */
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
265 #define countof(x) ((int) (sizeof(x)/sizeof((x)[0])))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 #define xnew(type) ((type *) xmalloc (sizeof (type)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 #define xnew_array(type, len) ((type *) xmalloc ((len) * sizeof (type)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 #define xnew_and_zero(type) ((type *) xmalloc_and_zero (sizeof (type)))
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 436
diff changeset
269 #define xzero(lvalue) ((void) memset (&(lvalue), '\0', sizeof (lvalue)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 #define xnew_array_and_zero(type, len) ((type *) xmalloc_and_zero ((len) * sizeof (type)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 #define XREALLOC_ARRAY(ptr, type, len) ((void) (ptr = (type *) xrealloc (ptr, (len) * sizeof (type))))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
272 #define alloca_new(type) ((type *) alloca (sizeof (type)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 #define alloca_array(type, len) ((type *) alloca ((len) * sizeof (type)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 /* also generally useful if you want to avoid arbitrary size limits
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 but don't need a full dynamic array. Assumes that BASEVAR points
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 to a malloced array of TYPE objects (or possibly a NULL pointer,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 if SIZEVAR is 0), with the total size stored in SIZEVAR. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 macro will realloc BASEVAR as necessary so that it can hold at
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 least NEEDED_SIZE objects. The reallocing is done by doubling,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 which ensures constant amortized time per element. */
430
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
282 #define DO_REALLOC(basevar, sizevar, needed_size, type) do { \
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
283 Bytecount do_realloc_needed_size = (needed_size); \
430
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
284 if ((sizevar) < do_realloc_needed_size) \
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
285 { \
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
286 if ((sizevar) < 32) \
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
287 (sizevar) = 32; \
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
288 while ((sizevar) < do_realloc_needed_size) \
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
289 (sizevar) *= 2; \
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
290 XREALLOC_ARRAY (basevar, type, (sizevar)); \
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
291 } \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 #ifdef ERROR_CHECK_MALLOC
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 void xfree_1 (void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 #define xfree(lvalue) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 void **xfree_ptr = (void **) &(lvalue); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 xfree_1 (*xfree_ptr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 *xfree_ptr = (void *) 0xDEADBEEF; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 void xfree (void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 #endif /* ERROR_CHECK_MALLOC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 #ifndef PRINTF_ARGS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 # if defined (__GNUC__) && (__GNUC__ >= 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 # define PRINTF_ARGS(string_index,first_to_check) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 __attribute__ ((format (printf, string_index, first_to_check)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 # else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 # define PRINTF_ARGS(string_index,first_to_check)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 # endif /* GNUC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 #ifndef DOESNT_RETURN
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 # if defined __GNUC__
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 # if ((__GNUC__ > 2) || (__GNUC__ == 2) && (__GNUC_MINOR__ >= 5))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
318 # define DOESNT_RETURN void
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 # define DECLARE_DOESNT_RETURN(decl) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
320 extern void decl __attribute__ ((noreturn))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 # define DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS(decl,str,idx) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 /* Should be able to state multiple independent __attribute__s, but \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 the losing syntax doesn't work that way, and screws losing cpp */ \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
324 extern void decl \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 __attribute__ ((noreturn, format (printf, str, idx)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 # else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 # define DOESNT_RETURN void volatile
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 # define DECLARE_DOESNT_RETURN(decl) extern void volatile decl
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 # define DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS(decl,str,idx) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 extern void volatile decl PRINTF_ARGS(str,idx)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 # endif /* GNUC 2.5 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 # else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 # define DOESNT_RETURN void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 # define DECLARE_DOESNT_RETURN(decl) extern void decl
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 # define DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS(decl,str,idx) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 extern void decl PRINTF_ARGS(str,idx)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 # endif /* GNUC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
340 /* Another try to fix SunPro C compiler warnings */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
341 /* "end-of-loop code not reached" */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
342 /* "statement not reached */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
343 #if defined __SUNPRO_C || defined __USLC__
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
344 #define RETURN_SANS_WARNINGS if (1) return
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
345 #define RETURN_NOT_REACHED(value)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
346 #else
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
347 #define RETURN_SANS_WARNINGS return
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
348 #define RETURN_NOT_REACHED(value) return value;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
349 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
350
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
351 /* No type has a greater alignment requirement than max_align_t.
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
352 (except perhaps for types we don't use, like long double) */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
353 typedef union
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
354 {
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
355 struct { long l; } l;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
356 struct { void *p; } p;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
357 struct { void (*f)(void); } f;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
358 struct { double d; } d;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
359 } max_align_t;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
360
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
361 /* ALIGNOF returns the required alignment of a type -- i.e. a value such
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
362 that data of this type must begin at a memory address which is a
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
363 multiple of that value. For simple types, this is often the same size
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
364 as the type itself. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
365
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 #ifndef ALIGNOF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 # if defined (__GNUC__) && (__GNUC__ >= 2)
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
368 /* gcc has an extension that gives us exactly what we want. */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
369 # define ALIGNOF(type) __alignof__ (type)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
370 # elif ! defined (__cplusplus)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
371 /* The following is mostly portable, except that:
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
372 - it doesn't work for inside out declarations like void (*) (void).
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
373 (so just call ALIGNOF with a typedef'ed name)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
374 - it doesn't work with C++. The C++ committee has decided,
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
375 in its infinite wisdom, that:
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
376 "Types must be declared in declarations, not in expressions." */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
377 # define ALIGNOF(type) offsetof (struct { char c; type member; }, member)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 # else
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
379 /* C++ is annoying, but it has a big bag of tricks.
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
380 The following doesn't have the "inside out" declaration bug C does. */
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
381 template<typename T> struct alignment_trick { char c; T member; };
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
382 # define ALIGNOF(type) offsetof (alignment_trick<type>, member)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 # endif
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
384 #endif /* ALIGNOF */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
386 /* ALIGN_SIZE returns the smallest size greater than or equal to LEN which
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
387 is a multiple of UNIT. This can be used to assure that data that
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
388 follows a block of the returned size is of correct alignment for a type
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
389 whose alignment (as returned by ALIGNOF) is UNIT (provided that the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
390 block itself is correctly aligned for this type; memory returned by
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
391 malloc() is guaranteed to be correctly aligned for all types). */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
392
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 #define ALIGN_SIZE(len, unit) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 ((((len) + (unit) - 1) / (unit)) * (unit))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
396 /* MAX_ALIGN_SIZE returns the smallest size greater than or equal to LEN
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
397 which guarantees that data following a block of such size is correctly
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
398 aligned for all types (provided that the block itself is so aligned,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
399 which is the case for memory returned by malloc()). */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
400
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
401 #define MAX_ALIGN_SIZE(len) ALIGN_SIZE (len, ALIGNOF (max_align_t))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
402
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 /* #### Yuck, this is kind of evil */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 #define ALIGN_PTR(ptr, unit) \
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
405 ((void *) ALIGN_SIZE ((size_t) (ptr), unit))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 #ifndef DO_NOTHING
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 #define DO_NOTHING do {} while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 #ifndef DECLARE_NOTHING
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 #define DECLARE_NOTHING struct nosuchstruct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 /* We define assert iff USE_ASSERTIONS or DEBUG_XEMACS is defined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 Otherwise we define it to be empty. Quantify has shown that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 time the assert checks take is measurable so let's not include them
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
418 in production binaries.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
419
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
420 assert() returns 1 if the assert succeeded (or wasn't tried), 0 if
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
421 failed. (Normally, it would have aborted here, but with
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
422 ASSERTIONS_DONT_ABORT defined, it will continue. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 #ifdef USE_ASSERTIONS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 /* Highly dubious kludge */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 /* (thanks, Jamie, I feel better now -- ben) */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
427 void assert_failed (const char *, int, const char *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 # define abort() (assert_failed (__FILE__, __LINE__, "abort()"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 # define assert(x) ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, #x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 # ifdef DEBUG_XEMACS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 # define assert(x) ((x) ? (void) 0 : (void) abort ())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 # else
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
434 # define assert(x) ((void) 0)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 # endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
438 #if 0
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
439 #ifdef USE_ASSERTIONS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
440 /* Highly dubious kludge */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
441 /* (thanks, Jamie, I feel better now -- ben) */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
442 void assert_failed (const char *, int, const char *);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
443 # define abort() (assert_failed (__FILE__, __LINE__, "abort()"))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
444 # define assert(x) ((x) ? 1 : (assert_failed (__FILE__, __LINE__, #x), 0))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
445 #else
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
446 # ifdef DEBUG_XEMACS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
447 # define assert(x) ((x) ? 1 : ((void) abort (), 0))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
448 # else
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
449 # define assert(x) (1)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
450 # endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
451 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
452 #endif /* 0 */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
453
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 /*#ifdef DEBUG_XEMACS*/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 #define REGISTER
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 #define register
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 /*#else*/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 /*#define REGISTER register*/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 /*#endif*/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 /* typedefs */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
467 /* Note that the simplest typedefs are near the top of this file. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
468
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 /* We put typedefs here so that prototype declarations don't choke.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 Note that we don't actually declare the structures here (except
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 maybe for simple structures like Dynarrs); that keeps them private
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 to the routines that actually use them. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
474 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
475 /* Error_Behavior typedefs */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
476 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
477
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
478 #ifndef ERROR_CHECK_TYPECHECK
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
479
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
480 typedef enum error_behavior
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
482 ERROR_ME,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
483 ERROR_ME_NOT,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
484 ERROR_ME_WARN
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
485 } Error_Behavior;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
486
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
487 #define ERRB_EQ(a, b) ((a) == (b))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
488
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
489 #else
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
490
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
491 /* By defining it like this, we provide strict type-checking
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
492 for code that lazily uses ints. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
493
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
494 typedef struct _error_behavior_struct_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
496 int really_unlikely_name_to_have_accidentally_in_a_non_errb_structure;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
497 } Error_Behavior;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
498
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
499 extern Error_Behavior ERROR_ME;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
500 extern Error_Behavior ERROR_ME_NOT;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
501 extern Error_Behavior ERROR_ME_WARN;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
502
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
503 #define ERRB_EQ(a, b) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
504 ((a).really_unlikely_name_to_have_accidentally_in_a_non_errb_structure == \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
505 (b).really_unlikely_name_to_have_accidentally_in_a_non_errb_structure)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
506
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
507 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
508
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
509 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
510 /* Empty structures and typedefs */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
511 /* ------------------------------- */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 struct buffer; /* "buffer.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 struct console; /* "console.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 struct device; /* "device.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 struct extent_fragment;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 struct extent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 struct frame; /* "frame.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 struct window; /* "window.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 struct stat; /* <sys/stat.h> */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
521 struct utimbuf; /* "systime.h" or <utime.h> */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 struct display_line;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 struct display_glyph_area;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 struct display_box;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 struct redisplay_info;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 struct window_mirror;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 struct scrollbar_instance;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 struct font_metric_info;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 struct face_cachel;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 struct console_type_entry;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
532 /* This is shared by process.h, events.h and others in future.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
533 See events.h for description */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
534 typedef unsigned int USID;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
535 typedef int face_index;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
536 typedef int glyph_index;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
537 typedef struct lstream Lstream;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
538 typedef struct extent *EXTENT;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
539 typedef struct Lisp_Event Lisp_Event; /* "events.h" */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
540 typedef struct Lisp_Face Lisp_Face; /* "faces.h" */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
541 typedef struct Lisp_Process Lisp_Process; /* "procimpl.h" */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
542 typedef struct Lisp_Color_Instance Lisp_Color_Instance;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
543 typedef struct Lisp_Font_Instance Lisp_Font_Instance;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
544 typedef struct Lisp_Image_Instance Lisp_Image_Instance;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
545 typedef struct Lisp_Gui_Item Lisp_Gui_Item;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
546
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
547 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
548 /* Dynarr typedefs */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
549 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
550
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
551 /* Dynarr typedefs -- basic types first */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
552
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 {
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
555 Dynarr_declare (Intbyte);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
556 } Intbyte_dynarr;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 Dynarr_declare (Extbyte);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 } Extbyte_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 Dynarr_declare (Emchar);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 } Emchar_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 Dynarr_declare (char);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 } char_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
573 typedef struct
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
574 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
575 Dynarr_declare (char *);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
576 } char_ptr_dynarr;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
577
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 typedef unsigned char unsigned_char;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 Dynarr_declare (unsigned char);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 } unsigned_char_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 typedef unsigned long unsigned_long;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 Dynarr_declare (unsigned long);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 } unsigned_long_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 Dynarr_declare (int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 } int_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 {
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
597 Dynarr_declare (Charbpos);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
598 } Charbpos_dynarr;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 {
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
602 Dynarr_declare (Bytebpos);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
603 } Bytebpos_dynarr;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 Dynarr_declare (Charcount);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 } Charcount_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 Dynarr_declare (Bytecount);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 } Bytecount_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
615 /* Dynarr typedefs -- more complex types */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
616
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
617 typedef struct
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
618 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
619 Dynarr_declare (struct face_cachel);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
620 } face_cachel_dynarr;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
621
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
622 typedef struct
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
623 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
624 Dynarr_declare (struct glyph_cachel);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
625 } glyph_cachel_dynarr;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
626
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 Dynarr_declare (struct console_type_entry);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 } console_type_entry_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
632 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
633 /* enum typedefs */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
634 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
635
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 enum run_hooks_condition
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 RUN_HOOKS_TO_COMPLETION,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 RUN_HOOKS_UNTIL_SUCCESS,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 RUN_HOOKS_UNTIL_FAILURE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 #ifdef HAVE_TOOLBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 enum toolbar_pos
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 TOP_TOOLBAR,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 BOTTOM_TOOLBAR,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 LEFT_TOOLBAR,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 RIGHT_TOOLBAR
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 enum edge_style
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 EDGE_ETCHED_IN,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 EDGE_ETCHED_OUT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 EDGE_BEVEL_IN,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 EDGE_BEVEL_OUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 enum munge_me_out_the_door
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 MUNGE_ME_FUNCTION_KEY,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 MUNGE_ME_KEY_TRANSLATION
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
667 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
668 /* misc */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
669 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
670
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
671 #ifdef MEMORY_USAGE_STATS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
672
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
673 /* This structure is used to keep statistics on the amount of memory
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
674 in use.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
675
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
676 WAS_REQUESTED stores the actual amount of memory that was requested
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
677 of the allocation function. The *_OVERHEAD fields store the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
678 additional amount of memory that was grabbed by the functions to
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
679 facilitate allocation, reallocation, etc. MALLOC_OVERHEAD is for
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
680 memory allocated with malloc(); DYNARR_OVERHEAD is for dynamic
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
681 arrays; GAP_OVERHEAD is for gap arrays. Note that for (e.g.)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
682 dynamic arrays, there is both MALLOC_OVERHEAD and DYNARR_OVERHEAD
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
683 memory: The dynamic array allocates memory above and beyond what
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
684 was asked of it, and when it in turns allocates memory using
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
685 malloc(), malloc() allocates memory beyond what it was asked
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
686 to allocate.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
687
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
688 Functions that accept a structure of this sort do not initialize
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
689 the fields to 0, and add any existing values to whatever was there
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
690 before; this way, you can get a cumulative effect. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
691
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
692 struct overhead_stats
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
693 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
694 int was_requested;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
695 int malloc_overhead;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
696 int dynarr_overhead;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
697 int gap_overhead;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
698 };
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
699
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
700 #endif /* MEMORY_USAGE_STATS */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
701
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 /* Definition of Lisp_Object data type */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 /* Define the fundamental Lisp data structures */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 /* This is the set of Lisp data types */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711 enum Lisp_Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
713 Lisp_Type_Record,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714 Lisp_Type_Int_Even,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715 Lisp_Type_Char,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 Lisp_Type_Int_Odd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719 #define POINTER_TYPE_P(type) ((type) == Lisp_Type_Record)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 /* Overridden by m/next.h */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 #ifndef ASSERT_VALID_POINTER
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 # define ASSERT_VALID_POINTER(pnt) (assert ((((EMACS_UINT) pnt) & 3) == 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
724 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
725
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
726 #define GCMARKBITS 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727 #define GCTYPEBITS 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728 #define GCBITS 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729 #define INT_GCBITS 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
730
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731 #define INT_VALBITS (BITS_PER_EMACS_INT - INT_GCBITS)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732 #define VALBITS (BITS_PER_EMACS_INT - GCBITS)
542
2e265ae71eed [xemacs-hg @ 2001-05-17 09:52:16 by yoshiki]
yoshiki
parents: 528
diff changeset
733 #define EMACS_INT_MAX ((EMACS_INT) ((1UL << (INT_VALBITS - 1)) -1UL))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
734 #define EMACS_INT_MIN (-(EMACS_INT_MAX) - 1)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
735
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
736 #ifdef USE_UNION_TYPE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
737 # include "lisp-union.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
738 #else /* !USE_UNION_TYPE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739 # include "lisp-disunion.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
740 #endif /* !USE_UNION_TYPE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
741
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
742 #define XPNTR(x) ((void *) XPNTRVAL(x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744 /* WARNING WARNING WARNING. You must ensure on your own that proper
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745 GC protection is provided for the elements in this array. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
748 Dynarr_declare (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 } Lisp_Object_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
751 typedef struct
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
752 {
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
753 Dynarr_declare (Lisp_Object *);
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
754 } Lisp_Object_ptr_dynarr;
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
755
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756 /* Close your eyes now lest you vomit or spontaneously combust ... */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
758 #define HACKEQ_UNSAFE(obj1, obj2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
759 (EQ (obj1, obj2) || (!POINTER_TYPE_P (XTYPE (obj1)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
760 && !POINTER_TYPE_P (XTYPE (obj2)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
761 && XCHAR_OR_INT (obj1) == XCHAR_OR_INT (obj2)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
763 #ifdef DEBUG_XEMACS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
764 extern int debug_issue_ebola_notices;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765 int eq_with_ebola_notice (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766 #define EQ_WITH_EBOLA_NOTICE(obj1, obj2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
767 (debug_issue_ebola_notices ? eq_with_ebola_notice (obj1, obj2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768 : EQ (obj1, obj2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
770 #define EQ_WITH_EBOLA_NOTICE(obj1, obj2) EQ (obj1, obj2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 /* OK, you can open them again */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776 /************************************************************************/
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
777 /** Definitions of basic Lisp objects **/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
779
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
780 #include "lrecord.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
782 /*------------------------------ unbound -------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 /* Qunbound is a special Lisp_Object (actually of type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 symbol-value-forward), that can never be visible to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786 the Lisp caller and thus can be used in the C code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
787 to mean "no such value". */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
788
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
789 #define UNBOUNDP(val) EQ (val, Qunbound)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
791 /* Evaluate expr, return it if it's not Qunbound. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
792 #define RETURN_IF_NOT_UNBOUND(expr) do \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
793 { \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
794 Lisp_Object ret_nunb_val = (expr); \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
795 if (!UNBOUNDP (ret_nunb_val)) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
796 RETURN_SANS_WARNINGS ret_nunb_val; \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
797 } while (0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
798
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
799 /*------------------------------- cons ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
801 /* In a cons, the markbit of the car is the gc mark bit */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803 struct Lisp_Cons
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
805 struct lrecord_header lheader;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806 Lisp_Object car, cdr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808 typedef struct Lisp_Cons Lisp_Cons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 #if 0 /* FSFmacs */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811 /* Like a cons, but records info on where the text lives that it was read from */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 /* This is not really in use now */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814 struct Lisp_Buffer_Cons
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816 Lisp_Object car, cdr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 struct buffer *buffer;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
818 int charbpos;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 DECLARE_LRECORD (cons, Lisp_Cons);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
823 #define XCONS(x) XRECORD (x, cons, Lisp_Cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824 #define XSETCONS(x, p) XSETRECORD (x, p, cons)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
825 #define wrap_cons(p) wrap_record (p, cons)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 #define CONSP(x) RECORDP (x, cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827 #define CHECK_CONS(x) CHECK_RECORD (x, cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828 #define CONCHECK_CONS(x) CONCHECK_RECORD (x, cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830 #define CONS_MARKED_P(c) MARKED_RECORD_HEADER_P(&((c)->lheader))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831 #define MARK_CONS(c) MARK_RECORD_HEADER (&((c)->lheader))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
833 extern Lisp_Object Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835 #define NILP(x) EQ (x, Qnil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
836 #define XCAR(a) (XCONS (a)->car)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837 #define XCDR(a) (XCONS (a)->cdr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838 #define LISTP(x) (CONSP(x) || NILP(x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840 #define CHECK_LIST(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841 if (!LISTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 dead_wrong_type_argument (Qlistp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
845 #define CONCHECK_LIST(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846 if (!LISTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847 x = wrong_type_argument (Qlistp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
848 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
850 /*---------------------- list traversal macros -------------------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
851
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
852 /* Note: These macros are for traversing through a list in some format,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
853 and executing code that you specify on each member of the list.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
854
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
855 There are two kinds of macros, those requiring surrounding braces, and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
856 those not requiring this. Which type of macro will be indicated.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
857 The general format for using a brace-requiring macro is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
858
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
859 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
860 LIST_LOOP_3 (elt, list, tail)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
861 execute_code_here;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
862 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
863
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
864 or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
865
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
866 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
867 LIST_LOOP_3 (elt, list, tail)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
868 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
869 execute_code_here;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
870 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
871 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
872
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
873 You can put variable declarations between the brace and beginning of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
874 macro, but NOTHING ELSE.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
875
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
876 The brace-requiring macros typically declare themselves any arguments
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
877 that are initialized and iterated by the macros. If for some reason
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
878 you need to declare these arguments yourself (e.g. to do something on
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
879 them before the iteration starts, use the _NO_DECLARE versions of the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
880 macros.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
881 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
882
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
883 /* There are two basic kinds of macros: those that handle "internal" lists
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
884 that are known to be correctly structured (i.e. first element is a cons
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
885 or nil, and the car of each cons is also a cons or nil, and there are
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
886 no circularities), and those that handle "external" lists, where the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
887 list may have any sort of invalid formation. This is reflected in
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
888 the names: those with "EXTERNAL_" work with external lists, and those
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
889 without this prefix work with internal lists. The internal-list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
890 macros will hit an assertion failure if the structure is ill-formed;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
891 the external-list macros will signal an error in this case, either a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
892 malformed-list error or a circular-list error.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
893
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
894 Note also that the simplest external list iterator, EXTERNAL_LIST_LOOP,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
895 does *NOT* check for circularities. Therefore, make sure you call
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
896 QUIT each iteration or so. However, it's probably easier just to use
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
897 EXTERNAL_LIST_LOOP_2, which is easier to use in any case.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
898 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
899
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
900 /* LIST_LOOP and EXTERNAL_LIST_LOOP are the simplest macros. They don't
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
901 require brace surrounding, and iterate through a list, which may or may
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
902 not known to be syntactically correct. EXTERNAL_LIST_LOOP is for those
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
903 not known to be correct, and it detects and signals a malformed list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
904 error when encountering a problem. Circularities, however, are not
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
905 handled, and cause looping forever, so make sure to include a QUIT.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
906 These functions also accept two args, TAIL (set progressively to each
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
907 cons starting with the first), and LIST, the list to iterate over.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
908 TAIL needs to be defined by the program.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
909
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
910 In each iteration, you can retrieve the current list item using XCAR
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
911 (tail), or destructively modify the list using XSETCAR (tail,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
912 ...). */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
913
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914 #define LIST_LOOP(tail, list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915 for (tail = list; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916 !NILP (tail); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
917 tail = XCDR (tail))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919 #define EXTERNAL_LIST_LOOP(tail, list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920 for (tail = list; !NILP (tail); tail = XCDR (tail)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921 if (!CONSP (tail)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922 signal_malformed_list_error (list); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
923 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
925 /* The following macros are the "core" macros for list traversal.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
926
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
927 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
928
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
929 LIST_LOOP_2 and EXTERNAL_LIST_LOOP_2 are the standard, most-often used
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
930 macros. They take two arguments, an element variable ELT and the list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
931 LIST. ELT is automatically declared, and set to each element in turn
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
932 from LIST.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
933
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
934 LIST_LOOP_3 and EXTERNAL_LIST_LOOP_3 are the same, but they have a third
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
935 argument TAIL, another automatically-declared variable. At each iteration,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
936 this one points to the cons cell for which ELT is the car.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
937
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
938 EXTERNAL_LIST_LOOP_4 is like EXTERNAL_LIST_LOOP_3 but takes an additional
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
939 LEN argument, again automatically declared, which counts the number of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
940 iterations gone by. It is 0 during the first iteration.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
941
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
942 EXTERNAL_LIST_LOOP_4_NO_DECLARE is like EXTERNAL_LIST_LOOP_4 but none
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
943 of the variables are automatically declared, and so you need to declare
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
944 them yourself. (ELT and TAIL are Lisp_Objects, and LEN is an EMACS_INT.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
945 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
946
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
947 #define LIST_LOOP_2(elt, list) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
948 LIST_LOOP_3(elt, list, unused_tail_##elt)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
949
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
950 #define LIST_LOOP_3(elt, list, tail) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
951 Lisp_Object elt, tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
952 for (tail = list; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
953 NILP (tail) ? \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
954 0 : (elt = XCAR (tail), 1); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
955 tail = XCDR (tail))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957 /* The following macros are for traversing lisp lists.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958 Signal an error if LIST is not properly acyclic and nil-terminated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
960 Use tortoise/hare algorithm to check for cycles, but only if it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
961 looks like the list is getting too long. Not only is the hare
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
962 faster than the tortoise; it even gets a head start! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964 /* Optimized and safe macros for looping over external lists. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
965 #define CIRCULAR_LIST_SUSPICION_LENGTH 1024
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
966
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
967 #define EXTERNAL_LIST_LOOP_1(list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 Lisp_Object ELL1_elt, ELL1_hare, ELL1_tortoise; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
969 EMACS_INT ELL1_len; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
970 PRIVATE_EXTERNAL_LIST_LOOP_6 (ELL1_elt, list, ELL1_len, ELL1_hare, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
971 ELL1_tortoise, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
972
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973 #define EXTERNAL_LIST_LOOP_2(elt, list) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
974 Lisp_Object elt, hare_##elt, tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
975 EMACS_INT len_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
976 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, hare_##elt, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
977 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
978
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
979 #define EXTERNAL_LIST_LOOP_3(elt, list, tail) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
980 Lisp_Object elt, tail, tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
981 EMACS_INT len_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
982 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, tail, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
983 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
984
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
985 #define EXTERNAL_LIST_LOOP_4_NO_DECLARE(elt, list, tail, len) \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
986 Lisp_Object tortoise_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
987 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, tail, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
988 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
989
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
990 #define EXTERNAL_LIST_LOOP_4(elt, list, tail, len) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
991 Lisp_Object elt, tail, tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
992 EMACS_INT len; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
993 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, tail, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
994 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
995
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
996
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
997 #define PRIVATE_EXTERNAL_LIST_LOOP_6(elt, list, len, hare, \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
998 tortoise, suspicion_length) \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
999 for (tortoise = hare = list, len = 0; \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1000 \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1001 (CONSP (hare) ? ((elt = XCAR (hare)), 1) : \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1002 (NILP (hare) ? 0 : \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1003 (signal_malformed_list_error (list), 0))); \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1004 \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1005 hare = XCDR (hare), \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1006 (void) \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1007 ((++len > suspicion_length) \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1008 && \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1009 ((((len & 1) != 0) && (tortoise = XCDR (tortoise), 0)), \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1010 (EQ (hare, tortoise) && (signal_circular_list_error (list), 0)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1011
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1012 /* GET_LIST_LENGTH and GET_EXTERNAL_LIST_LENGTH:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1013
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1014 These two macros return the length of LIST (either an internal or external
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1015 list, according to which macro is used), stored into LEN (which must
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1016 be declared by the caller). Circularities are trapped in external lists
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1017 (and cause errors). Neither macro need be declared inside brackets. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1018
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1019 #define GET_LIST_LENGTH(list, len) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1020 Lisp_Object GLL_tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1021 for (GLL_tail = list, len = 0; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1022 !NILP (GLL_tail); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1023 GLL_tail = XCDR (GLL_tail), ++len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1024 DO_NOTHING; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1025 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1026
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1027 #define GET_EXTERNAL_LIST_LENGTH(list, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1028 do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1029 Lisp_Object GELL_elt, GELL_tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1030 EXTERNAL_LIST_LOOP_4_NO_DECLARE (GELL_elt, list, GELL_tail, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1031 ; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1032 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1033
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1034 /* For a list that's known to be in valid list format, where we may
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1035 be deleting the current element out of the list --
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1036 will abort() if the list is not in valid format */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1037 #define LIST_LOOP_DELETING(consvar, nextconsvar, list) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1038 for (consvar = list; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1039 !NILP (consvar) ? (nextconsvar = XCDR (consvar), 1) :0; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1040 consvar = nextconsvar)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1041
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1042 /* LIST_LOOP_DELETE_IF and EXTERNAL_LIST_LOOP_DELETE_IF:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1043
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1044 These two macros delete all elements of LIST (either an internal or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1045 external list, according to which macro is used) satisfying
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1046 CONDITION, a C expression referring to variable ELT. ELT is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1047 automatically declared. Circularities are trapped in external
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1048 lists (and cause errors). Neither macro need be declared inside
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1049 brackets. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1050
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1051 #define LIST_LOOP_DELETE_IF(elt, list, condition) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1052 /* Do not use ##list when creating new variables because \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1053 that may not be just a variable name. */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1054 Lisp_Object prev_tail_##elt = Qnil; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1055 LIST_LOOP_3 (elt, list, tail_##elt) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1056 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1057 if (condition) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1058 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1059 if (NILP (prev_tail_##elt)) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1060 list = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1061 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1062 XCDR (prev_tail_##elt) = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1063 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1064 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1065 prev_tail_##elt = tail_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1066 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1067 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1068
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1069 #define EXTERNAL_LIST_LOOP_DELETE_IF(elt, list, condition) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1070 Lisp_Object prev_tail_##elt = Qnil; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1071 EXTERNAL_LIST_LOOP_4 (elt, list, tail_##elt, len_##elt) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1072 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1073 if (condition) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1074 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1075 if (NILP (prev_tail_##elt)) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1076 list = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1077 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1078 XCDR (prev_tail_##elt) = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1079 /* Keep tortoise from ever passing hare. */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1080 len_##elt = 0; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1081 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1082 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1083 prev_tail_##elt = tail_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1084 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1085 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1086
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1087
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1088 /* Macros for looping over external alists.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1089
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1090 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1091
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1092 EXTERNAL_ALIST_LOOP_4 is similar to EXTERNAL_LIST_LOOP_2, but it
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1093 assumes the elements are aconses (the elements in an alist) and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1094 sets two additional argument variables ELT_CAR and ELT_CDR to the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1095 car and cdr of the acons. All of the variables ELT, ELT_CAR and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1096 ELT_CDR are automatically declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1097
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1098 EXTERNAL_ALIST_LOOP_5 adds a TAIL argument to EXTERNAL_ALIST_LOOP_4,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1099 just like EXTERNAL_LIST_LOOP_3 does, and again TAIL is automatically
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1100 declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1101
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1102 EXTERNAL_ALIST_LOOP_6 adds a LEN argument to EXTERNAL_ALIST_LOOP_5,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1103 just like EXTERNAL_LIST_LOOP_4 does, and again LEN is automatically
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1104 declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1105
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1106 EXTERNAL_ALIST_LOOP_6_NO_DECLARE does not declare any of its arguments,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1107 just like EXTERNAL_LIST_LOOP_4_NO_DECLARE, and so these must be declared
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1108 manually.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1109 */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1110
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111 /* Optimized and safe macros for looping over external alists. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112 #define EXTERNAL_ALIST_LOOP_4(elt, elt_car, elt_cdr, list) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1113 Lisp_Object elt, elt_car, elt_cdr; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114 Lisp_Object hare_##elt, tortoise_##elt; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115 EMACS_INT len_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1116 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117 len_##elt, hare_##elt, tortoise_##elt, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1118 CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1119
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1120 #define EXTERNAL_ALIST_LOOP_5(elt, elt_car, elt_cdr, list, tail) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1121 Lisp_Object elt, elt_car, elt_cdr, tail; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122 Lisp_Object tortoise_##elt; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123 EMACS_INT len_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1124 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1125 len_##elt, tail, tortoise_##elt, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1126 CIRCULAR_LIST_SUSPICION_LENGTH) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128 #define EXTERNAL_ALIST_LOOP_6(elt, elt_car, elt_cdr, list, tail, len) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1129 Lisp_Object elt, elt_car, elt_cdr, tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1130 EMACS_INT len; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1131 Lisp_Object tortoise_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1132 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1133 len, tail, tortoise_##elt, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134 CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1136 #define EXTERNAL_ALIST_LOOP_6_NO_DECLARE(elt, elt_car, elt_cdr, list, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1137 tail, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1138 Lisp_Object tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1139 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1140 len, tail, tortoise_##elt, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1141 CIRCULAR_LIST_SUSPICION_LENGTH)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1142
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1143
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1144 #define PRIVATE_EXTERNAL_ALIST_LOOP_8(elt, elt_car, elt_cdr, list, len, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1145 hare, tortoise, suspicion_length) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1146 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, hare, tortoise, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1147 suspicion_length) \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148 if (CONSP (elt) ? (elt_car = XCAR (elt), elt_cdr = XCDR (elt), 0) :1) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 continue; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1152 /* Macros for looping over external property lists.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1153
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1154 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1155
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1156 EXTERNAL_PROPERTY_LIST_LOOP_3 maps over an external list assumed to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1157 be a property list, consisting of alternating pairs of keys
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1158 (typically symbols or keywords) and values. Each iteration
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1159 processes one such pair out of LIST, assigning the two elements to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1160 KEY and VALUE respectively. Malformed lists and circularities are
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1161 trapped as usual, and in addition, property lists with an odd number
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1162 of elements also signal an error.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1163
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1164 EXTERNAL_PROPERTY_LIST_LOOP_4 adds a TAIL argument to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1165 EXTERNAL_PROPERTY_LIST_LOOP_3, just like EXTERNAL_LIST_LOOP_3 does,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1166 and again TAIL is automatically declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1167
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1168 EXTERNAL_PROPERTY_LIST_LOOP_5 adds a LEN argument to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1169 EXTERNAL_PROPERTY_LIST_LOOP_4, just like EXTERNAL_LIST_LOOP_4 does,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1170 and again LEN is automatically declared. Note that in this case,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1171 LEN counts the iterations, NOT the total number of list elements
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1172 processed, which is 2 * LEN.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1173
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1174 EXTERNAL_PROPERTY_LIST_LOOP_5_NO_DECLARE does not declare any of its
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1175 arguments, just like EXTERNAL_LIST_LOOP_4_NO_DECLARE, and so these
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1176 must be declared manually. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1178 /* Optimized and safe macros for looping over external property lists. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 #define EXTERNAL_PROPERTY_LIST_LOOP_3(key, value, list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180 Lisp_Object key, value, hare_##key, tortoise_##key; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1181 EMACS_INT len_##key; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, hare_##key, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1183 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185 #define EXTERNAL_PROPERTY_LIST_LOOP_4(key, value, list, tail) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186 Lisp_Object key, value, tail, tortoise_##key; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1187 EMACS_INT len_##key; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1188 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, tail, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1189 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1191 #define EXTERNAL_PROPERTY_LIST_LOOP_5(key, value, list, tail, len) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192 Lisp_Object key, value, tail, tortoise_##key; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1193 EMACS_INT len; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1194 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len, tail, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1195 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1196
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1197 #define EXTERNAL_PROPERTY_LIST_LOOP_5_NO_DECLARE(key, value, list, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1198 tail, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1199 Lisp_Object tortoise_##key; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1200 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len, tail, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1201 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1202
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1203
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1204 #define EXTERNAL_PROPERTY_LIST_LOOP_7(key, value, list, len, hare, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1205 tortoise, suspicion_length) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1206 for (tortoise = hare = list, len = 0; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1207 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1208 ((CONSP (hare) && \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1209 (key = XCAR (hare), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1210 hare = XCDR (hare), \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1211 (CONSP (hare) ? 1 : \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1212 (signal_malformed_property_list_error (list), 0)))) ? \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1213 (value = XCAR (hare), 1) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1214 (NILP (hare) ? 0 : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1215 (signal_malformed_property_list_error (list), 0))); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1216 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1217 hare = XCDR (hare), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218 ((++len < suspicion_length) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219 ((void) 0) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1220 (((len & 1) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1221 ((void) (tortoise = XCDR (XCDR (tortoise)))) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1222 ((void) 0)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1223 , \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1224 (EQ (hare, tortoise) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1225 ((void) signal_circular_property_list_error (list)) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1226 ((void) 0)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1227
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1228 /* For a property list (alternating keywords/values) that may not be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1229 in valid list format -- will signal an error if the list is not in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1230 valid format. CONSVAR is used to keep track of the iterations
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1231 without modifying PLIST.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1232
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1233 We have to be tricky to still keep the same C format.*/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1234 #define EXTERNAL_PROPERTY_LIST_LOOP(tail, key, value, plist) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1235 for (tail = plist; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1236 (CONSP (tail) && CONSP (XCDR (tail)) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1237 (key = XCAR (tail), value = XCAR (XCDR (tail))) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1238 (key = Qunbound, value = Qunbound)), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1239 !NILP (tail); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1240 tail = XCDR (XCDR (tail))) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1241 if (UNBOUNDP (key)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1242 Fsignal (Qmalformed_property_list, list1 (plist)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1243 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1244
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1245 #define PROPERTY_LIST_LOOP(tail, key, value, plist) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1246 for (tail = plist; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1247 NILP (tail) ? 0 : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1248 (key = XCAR (tail), tail = XCDR (tail), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1249 value = XCAR (tail), tail = XCDR (tail), 1); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1250 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1251
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1252 /* Return 1 if LIST is properly acyclic and nil-terminated, else 0. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1253 INLINE_HEADER int TRUE_LIST_P (Lisp_Object object);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1254 INLINE_HEADER int
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1255 TRUE_LIST_P (Lisp_Object object)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1256 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1257 Lisp_Object hare, tortoise;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1258 EMACS_INT len;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1259
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1260 for (hare = tortoise = object, len = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1261 CONSP (hare);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1262 hare = XCDR (hare), len++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1263 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1264 if (len < CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1265 continue;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1266
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1267 if (len & 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1268 tortoise = XCDR (tortoise);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1269 else if (EQ (hare, tortoise))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1270 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1271 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1272
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1273 return NILP (hare);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1274 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1275
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1276 /* Signal an error if LIST is not properly acyclic and nil-terminated. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1277 #define CHECK_TRUE_LIST(list) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1278 Lisp_Object CTL_list = (list); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1279 Lisp_Object CTL_hare, CTL_tortoise; \
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
1280 EMACS_INT CTL_len; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1281 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1282 for (CTL_hare = CTL_tortoise = CTL_list, CTL_len = 0; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1283 CONSP (CTL_hare); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1284 CTL_hare = XCDR (CTL_hare), CTL_len++) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1285 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1286 if (CTL_len < CIRCULAR_LIST_SUSPICION_LENGTH) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1287 continue; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1288 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1289 if (CTL_len & 1) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1290 CTL_tortoise = XCDR (CTL_tortoise); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1291 else if (EQ (CTL_hare, CTL_tortoise)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1292 Fsignal (Qcircular_list, list1 (CTL_list)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1293 } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1294 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1295 if (! NILP (CTL_hare)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1296 signal_malformed_list_error (CTL_list); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1297 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1298
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1299 /*------------------------------ string --------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1300
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1301 struct Lisp_String
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1302 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1303 union
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1304 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1305 struct lrecord_header lheader;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1306 struct
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1307 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1308 /* WARNING: Everything before ascii_begin must agree exactly with
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1309 struct lrecord_header */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1310 unsigned int type :8;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1311 unsigned int mark :1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1312 unsigned int c_readonly :1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1313 unsigned int lisp_readonly :1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1314 /* Number of chars at beginning of string that are one byte in length
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1315 (BYTE_ASCII_P) */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1316 unsigned int ascii_begin :21;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1317 } v;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1318 } u;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1319 Bytecount size;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1320 Intbyte *data;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1321 Lisp_Object plist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1322 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1323 typedef struct Lisp_String Lisp_String;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1324
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1325 #define MAX_STRING_ASCII_BEGIN ((2 << 21) - 1)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1326
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1327 DECLARE_LRECORD (string, Lisp_String);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1328 #define XSTRING(x) XRECORD (x, string, Lisp_String)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1329 #define XSETSTRING(x, p) XSETRECORD (x, p, string)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1330 #define wrap_string(p) wrap_record (p, string)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1331 #define STRINGP(x) RECORDP (x, string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1332 #define CHECK_STRING(x) CHECK_RECORD (x, string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1333 #define CONCHECK_STRING(x) CONCHECK_RECORD (x, string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1334
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1335 #ifdef MULE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1336
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1337 Charcount bytecount_to_charcount (const Intbyte *ptr, Bytecount len);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1338 Bytecount charcount_to_bytecount (const Intbyte *ptr, Charcount len);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1339
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1340 #else /* not MULE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1341
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1342 # define bytecount_to_charcount(ptr, len) (len)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1343 # define charcount_to_bytecount(ptr, len) (len)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1344
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1345 #endif /* not MULE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1346
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1347 #define string_length(s) ((s)->size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1348 #define XSTRING_LENGTH(s) string_length (XSTRING (s))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1349 #define string_data(s) ((s)->data + 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1350 #define XSTRING_DATA(s) string_data (XSTRING (s))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1351 #define string_ascii_begin(s) ((s)->u.v.ascii_begin + 0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1352 #define XSTRING_ASCII_BEGIN(s) string_ascii_begin (XSTRING (s))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1353 #define string_char_length(s) string_index_byte_to_char (s, string_length (s))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1354 #define XSTRING_CHAR_LENGTH(s) string_char_length (XSTRING (s))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1355 #define string_byte(s, i) ((s)->data[i] + 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1356 #define XSTRING_BYTE(s, i) string_byte (XSTRING (s), i)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1357 #define string_byte_addr(s, i) (&((s)->data[i]))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1358 #define string_char(s, i) charptr_emchar (string_char_addr (s, i))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1359 #define XSTRING_CHAR(s, i) string_char (XSTRING (s), i)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1360 #define XSTRING_INDEX_CHAR_TO_BYTE(s, idx) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1361 string_index_char_to_byte (XSTRING (s), idx)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1362 #define XSTRING_INDEX_BYTE_TO_CHAR(s, idx) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1363 string_index_byte_to_char (XSTRING (s), idx)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1364 #define XSTRING_OFFSET_BYTE_TO_CHAR_LEN(s, off, len) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1365 string_offset_byte_to_char_len (XSTRING (s), off, len)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1366 #define XSTRING_OFFSET_CHAR_TO_BYTE_LEN(s, off, len) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1367 string_offset_char_to_byte_len (XSTRING (s), off, len)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1368 #define set_string_length(s, len) ((void) ((s)->size = (len)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1369 #define set_string_data(s, ptr) ((void) ((s)->data = (ptr)))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1370 /* WARNING: If you modify an existing string, you must call
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1371 bump_string_modiff() afterwards. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1372 #define set_string_byte(s, i, b) ((void) ((s)->data[i] = (b)))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1373 #define set_string_ascii_begin(s, val) ((void) ((s)->u.v.ascii_begin = (val)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1374
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1375 #ifdef ERROR_CHECK_CHARBPOS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1376 #define SLEDGEHAMMER_CHECK_ASCII_BEGIN
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1377 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1378
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1379 #ifdef SLEDGEHAMMER_CHECK_ASCII_BEGIN
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1380 void sledgehammer_check_ascii_begin (Lisp_Object str);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1381 #else
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1382 #define sledgehammer_check_ascii_begin(str)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1383 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1384
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1385 /* Make an alloca'd copy of a Lisp string */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1386 #define LISP_STRING_TO_ALLOCA(s, lval) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1387 do { \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1388 Intbyte **_lta_ = (Intbyte **) &(lval); \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1389 Lisp_Object _lta_2 = (s); \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1390 *_lta_ = alloca_array (Intbyte, 1 + XSTRING_LENGTH (_lta_2)); \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1391 memcpy (*_lta_, XSTRING_DATA (_lta_2), 1 + XSTRING_LENGTH (_lta_2)); \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1392 } while (0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1393
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1394 /* Make an alloca'd copy of a Intbyte * */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1395 #define INTBYTE_STRING_TO_ALLOCA(p, lval) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1396 do { \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1397 Intbyte **_bsta_ = (Intbyte **) &(lval); \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1398 const Intbyte *_bsta_2 = (p); \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1399 Bytecount _bsta_3 = qxestrlen (_bsta_2); \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1400 *_bsta_ = alloca_array (Intbyte, 1 + _bsta_3); \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1401 memcpy (*_bsta_, _bsta_2, 1 + _bsta_3); \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1402 } while (0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1403
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1404 #define alloca_intbytes(num) alloca_array (Intbyte, num)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1405 #define alloca_extbytes(num) alloca_array (Extbyte, num)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1406
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1407 void resize_string (Lisp_String *s, Bytecount pos, Bytecount delta);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1408
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1409 #ifdef MULE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1410
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1411 /* Convert a byte index into a string into a char index. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1412 DECLARE_INLINE_HEADER (
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1413 Charcount
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1414 string_index_byte_to_char (Lisp_String *s, Bytecount idx)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1415 )
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1416 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1417 Charcount retval;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1418 if (idx <= (Bytecount) string_ascii_begin (s))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1419 retval = idx;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1420 else
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1421 retval = (string_ascii_begin (s) +
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1422 bytecount_to_charcount (string_data (s) + string_ascii_begin (s),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1423 idx - string_ascii_begin (s)));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1424 #ifdef SLEDGEHAMMER_CHECK_ASCII_BEGIN
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1425 assert (retval == bytecount_to_charcount (string_data (s), idx));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1426 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1427 return retval;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1428 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1429
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1430 /* Convert a char index into a string into a byte index. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1431 DECLARE_INLINE_HEADER (
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1432 Bytecount
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1433 string_index_char_to_byte (Lisp_String *s, Charcount idx)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1434 )
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1435 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1436 Bytecount retval;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1437 if (idx <= (Charcount) string_ascii_begin (s))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1438 retval = idx;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1439 else
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1440 retval = (string_ascii_begin (s) +
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1441 charcount_to_bytecount (string_data (s) + string_ascii_begin (s),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1442 idx - string_ascii_begin (s)));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1443 #ifdef SLEDGEHAMMER_CHECK_ASCII_BEGIN
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1444 assert (retval == charcount_to_bytecount (string_data (s), idx));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1445 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1446 return retval;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1447 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1448
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1449 /* Convert a substring length (starting at byte offset OFF) from bytes to
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1450 chars. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1451 DECLARE_INLINE_HEADER (
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1452 Charcount
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1453 string_offset_byte_to_char_len (Lisp_String *s, Bytecount off, Bytecount len)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1454 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1455 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1456 Charcount retval;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1457 if (off + len <= (Bytecount) string_ascii_begin (s))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1458 retval = len;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1459 else if (off < (Bytecount) string_ascii_begin (s))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1460 retval =
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1461 string_ascii_begin (s) - off +
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1462 bytecount_to_charcount (string_data (s) + string_ascii_begin (s),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1463 len - (string_ascii_begin (s) - off));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1464 else
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1465 retval = bytecount_to_charcount (string_data (s) + off, len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1466 #ifdef SLEDGEHAMMER_CHECK_ASCII_BEGIN
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1467 assert (retval == bytecount_to_charcount (string_data (s) + off, len));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1468 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1469 return retval;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1470 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1471
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1472 /* Convert a substring length (starting at byte offset OFF) from chars to
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1473 bytes. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1474 DECLARE_INLINE_HEADER (
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1475 Bytecount
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1476 string_offset_char_to_byte_len (Lisp_String *s, Bytecount off, Charcount len)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1477 )
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1478 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1479 Bytecount retval;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1480 if (off + len <= (Bytecount) string_ascii_begin (s))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1481 retval = len;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1482 else if (off < (Bytecount) string_ascii_begin (s))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1483 retval =
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1484 string_ascii_begin (s) - off +
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1485 charcount_to_bytecount (string_data (s) + string_ascii_begin (s),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1486 len - (string_ascii_begin (s) - off));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1487 else
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1488 retval = charcount_to_bytecount (string_data (s) + off, len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1489 #ifdef SLEDGEHAMMER_CHECK_ASCII_BEGIN
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1490 assert (retval == charcount_to_bytecount (string_data (s) + off, len));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1491 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1492 return retval;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1493 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1494
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1495 DECLARE_INLINE_HEADER (
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1496 Intbyte *
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1497 string_char_addr (Lisp_String *s, Charcount idx)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1498 )
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1499 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1500 return string_data (s) + string_index_char_to_byte (s, idx);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1501 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1502
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1503 void set_string_char (Lisp_String *s, Charcount i, Emchar c);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1505 #else /* not MULE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1506
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1507 #define string_index_byte_to_char(s, idx) (idx)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1508 #define string_index_char_to_byte(s, idx) (idx)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1509 #define string_offset_byte_to_char_len(s, off, len) (len)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1510 #define string_offset_char_to_byte_len(s, off, len) (len)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1511 # define string_char_addr(s, i) string_byte_addr (s, i)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1512 /* WARNING: If you modify an existing string, you must call
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1513 bump_string_modiff() afterwards. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1514 # define set_string_char(s, i, c) set_string_byte (s, i, (Intbyte) c)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1515
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1516 #endif /* not MULE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1517
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1518 /* Return the true aligned size of a struct whose last member is a
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1519 variable-length array field. (this is known as the "struct hack") */
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1520 /* Implementation: in practice, structtype and fieldtype usually have
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1521 the same alignment, but we can't be sure. We need to use
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1522 ALIGN_SIZE to be absolutely sure of getting the correct alignment.
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1523 To help the compiler's optimizer, we use a ternary expression that
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1524 only a very stupid compiler would fail to correctly simplify. */
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1525 #define FLEXIBLE_ARRAY_STRUCT_SIZEOF(structtype, \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1526 fieldtype, \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1527 fieldname, \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1528 array_length) \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1529 (ALIGNOF (structtype) == ALIGNOF (fieldtype) \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1530 ? (offsetof (structtype, fieldname) + \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1531 (offsetof (structtype, fieldname[1]) - \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1532 offsetof (structtype, fieldname[0])) * \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1533 (array_length)) \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1534 : (ALIGN_SIZE \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1535 ((offsetof (structtype, fieldname) + \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1536 (offsetof (structtype, fieldname[1]) - \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1537 offsetof (structtype, fieldname[0])) * \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1538 (array_length)), \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
1539 ALIGNOF (structtype))))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1540
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1541 /*------------------------------ vector --------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1543 struct Lisp_Vector
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1544 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1545 struct lcrecord_header header;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546 long size;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547 /* next is now chained through v->contents[size], terminated by Qzero.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548 This means that pure vectors don't need a "next" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549 /* struct Lisp_Vector *next; */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1550 Lisp_Object contents[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1551 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1552 typedef struct Lisp_Vector Lisp_Vector;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 DECLARE_LRECORD (vector, Lisp_Vector);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555 #define XVECTOR(x) XRECORD (x, vector, Lisp_Vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556 #define XSETVECTOR(x, p) XSETRECORD (x, p, vector)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1557 #define wrap_vector(p) wrap_record (p, vector)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 #define VECTORP(x) RECORDP (x, vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559 #define CHECK_VECTOR(x) CHECK_RECORD (x, vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560 #define CONCHECK_VECTOR(x) CONCHECK_RECORD (x, vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1562 #define vector_length(v) ((v)->size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1563 #define XVECTOR_LENGTH(s) vector_length (XVECTOR (s))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1564 #define vector_data(v) ((v)->contents)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1565 #define XVECTOR_DATA(s) vector_data (XVECTOR (s))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1566
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1567 /*---------------------------- bit vectors -----------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569 #if (LONGBITS < 16)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1570 #error What the hell?!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1571 #elif (LONGBITS < 32)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1572 # define LONGBITS_LOG2 4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1573 # define LONGBITS_POWER_OF_2 16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1574 #elif (LONGBITS < 64)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1575 # define LONGBITS_LOG2 5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1576 # define LONGBITS_POWER_OF_2 32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1577 #elif (LONGBITS < 128)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578 # define LONGBITS_LOG2 6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1579 # define LONGBITS_POWER_OF_2 64
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581 #error You really have 128-bit integers?!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1582 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584 struct Lisp_Bit_Vector
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1585 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586 struct lrecord_header lheader;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1587 Lisp_Object next;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1588 Elemcount size;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1589 unsigned long bits[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1590 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1591 typedef struct Lisp_Bit_Vector Lisp_Bit_Vector;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1592
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1593 DECLARE_LRECORD (bit_vector, Lisp_Bit_Vector);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1594 #define XBIT_VECTOR(x) XRECORD (x, bit_vector, Lisp_Bit_Vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1595 #define XSETBIT_VECTOR(x, p) XSETRECORD (x, p, bit_vector)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1596 #define wrap_bit_vector(p) wrap_record (p, bit_vector)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1597 #define BIT_VECTORP(x) RECORDP (x, bit_vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1598 #define CHECK_BIT_VECTOR(x) CHECK_RECORD (x, bit_vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1599 #define CONCHECK_BIT_VECTOR(x) CONCHECK_RECORD (x, bit_vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1600
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1601 #define BITP(x) (INTP (x) && (XINT (x) == 0 || XINT (x) == 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1602
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1603 #define CHECK_BIT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1604 if (!BITP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1605 dead_wrong_type_argument (Qbitp, x);\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1606 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1607
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1608 #define CONCHECK_BIT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1609 if (!BITP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1610 x = wrong_type_argument (Qbitp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1611 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1612
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1613 #define bit_vector_length(v) ((v)->size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1614 #define bit_vector_next(v) ((v)->next)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1615
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1616 INLINE_HEADER int bit_vector_bit (Lisp_Bit_Vector *v, Elemcount n);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1617 INLINE_HEADER int
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1618 bit_vector_bit (Lisp_Bit_Vector *v, Elemcount n)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1619 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1620 return ((v->bits[n >> LONGBITS_LOG2] >> (n & (LONGBITS_POWER_OF_2 - 1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1621 & 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1622 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1623
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1624 INLINE_HEADER void set_bit_vector_bit (Lisp_Bit_Vector *v, Elemcount n, int value);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1625 INLINE_HEADER void
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1626 set_bit_vector_bit (Lisp_Bit_Vector *v, Elemcount n, int value)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1627 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1628 if (value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1629 v->bits[n >> LONGBITS_LOG2] |= (1UL << (n & (LONGBITS_POWER_OF_2 - 1)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1630 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1631 v->bits[n >> LONGBITS_LOG2] &= ~(1UL << (n & (LONGBITS_POWER_OF_2 - 1)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1632 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1633
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1634 /* Number of longs required to hold LEN bits */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635 #define BIT_VECTOR_LONG_STORAGE(len) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1636 (((len) + LONGBITS_POWER_OF_2 - 1) >> LONGBITS_LOG2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1637
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1638 /*------------------------------ symbol --------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1639
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1640 typedef struct Lisp_Symbol Lisp_Symbol;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641 struct Lisp_Symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643 struct lrecord_header lheader;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1644 /* next symbol in this obarray bucket */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1645 Lisp_Symbol *next;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1646 Lisp_String *name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1647 Lisp_Object value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1648 Lisp_Object function;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1649 Lisp_Object plist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1650 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1651
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1652 #define SYMBOL_IS_KEYWORD(sym) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1653 ((string_byte (symbol_name (XSYMBOL (sym)), 0) == ':') \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654 && EQ (sym, oblookup (Vobarray, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1655 string_data (symbol_name (XSYMBOL (sym))), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656 string_length (symbol_name (XSYMBOL (sym))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1657 #define KEYWORDP(obj) (SYMBOLP (obj) && SYMBOL_IS_KEYWORD (obj))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1658
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1659 DECLARE_LRECORD (symbol, Lisp_Symbol);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1660 #define XSYMBOL(x) XRECORD (x, symbol, Lisp_Symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1661 #define XSETSYMBOL(x, p) XSETRECORD (x, p, symbol)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1662 #define wrap_symbol(p) wrap_record (p, symbol)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1663 #define SYMBOLP(x) RECORDP (x, symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1664 #define CHECK_SYMBOL(x) CHECK_RECORD (x, symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1665 #define CONCHECK_SYMBOL(x) CONCHECK_RECORD (x, symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1666
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1667 #define symbol_next(s) ((s)->next)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1668 #define symbol_name(s) ((s)->name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1669 #define symbol_value(s) ((s)->value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1670 #define symbol_function(s) ((s)->function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1671 #define symbol_plist(s) ((s)->plist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1672
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1673 /*------------------------------- subr ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1674
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1675 typedef Lisp_Object (*lisp_fn_t) (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1676
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1677 struct Lisp_Subr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1678 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1679 struct lrecord_header lheader;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1680 short min_args;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1681 short max_args;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1682 const char *prompt;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1683 const char *doc;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1684 const char *name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1685 lisp_fn_t subr_fn;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1686 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687 typedef struct Lisp_Subr Lisp_Subr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1688
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1689 DECLARE_LRECORD (subr, Lisp_Subr);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1690 #define XSUBR(x) XRECORD (x, subr, Lisp_Subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1691 #define XSETSUBR(x, p) XSETRECORD (x, p, subr)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1692 #define wrap_subr(p) wrap_record (p, subr)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1693 #define SUBRP(x) RECORDP (x, subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1694 #define CHECK_SUBR(x) CHECK_RECORD (x, subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1695 #define CONCHECK_SUBR(x) CONCHECK_RECORD (x, subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1696
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
1697 #define subr_function(subr) ((subr)->subr_fn)
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
1698 #define SUBR_FUNCTION(subr,max_args) \
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
1699 ((Lisp_Object (*) (EXFUN_##max_args)) (subr)->subr_fn)
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
1700 #define subr_name(subr) ((subr)->name)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1701
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1702 /*------------------------------ marker --------------------------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1703
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1704
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1705 typedef struct Lisp_Marker Lisp_Marker;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1706 struct Lisp_Marker
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1707 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1708 struct lrecord_header lheader;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1709 Lisp_Marker *next;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1710 Lisp_Marker *prev;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1711 struct buffer *buffer;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1712 Membpos membpos;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1713 char insertion_type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1714 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1715
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1716 DECLARE_LRECORD (marker, Lisp_Marker);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1717 #define XMARKER(x) XRECORD (x, marker, Lisp_Marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1718 #define XSETMARKER(x, p) XSETRECORD (x, p, marker)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1719 #define wrap_marker(p) wrap_record (p, marker)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1720 #define MARKERP(x) RECORDP (x, marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1721 #define CHECK_MARKER(x) CHECK_RECORD (x, marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1722 #define CONCHECK_MARKER(x) CONCHECK_RECORD (x, marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1723
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1724 /* The second check was looking for GCed markers still in use */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1725 /* if (INTP (XMARKER (x)->lheader.next.v)) abort (); */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1726
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1727 #define marker_next(m) ((m)->next)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1728 #define marker_prev(m) ((m)->prev)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1729
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1730 /*------------------------------- char ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1731
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1732 #define CHARP(x) (XTYPE (x) == Lisp_Type_Char)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1733
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1734 #ifdef ERROR_CHECK_TYPECHECK
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1735
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1736 INLINE_HEADER Emchar XCHAR (Lisp_Object obj);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1737 INLINE_HEADER Emchar
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1738 XCHAR (Lisp_Object obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1739 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1740 assert (CHARP (obj));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1741 return XCHARVAL (obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1742 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1743
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1744 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1745
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1746 #define XCHAR(x) ((Emchar)XCHARVAL (x))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1747
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1748 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1749
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1750 #define CHECK_CHAR(x) CHECK_NONRECORD (x, Lisp_Type_Char, Qcharacterp)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1751 #define CONCHECK_CHAR(x) CONCHECK_NONRECORD (x, Lisp_Type_Char, Qcharacterp)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1752
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1753
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1754 /*------------------------------ float ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1755
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1756 #ifdef LISP_FLOAT_TYPE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1757
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1758 /* Note: the 'unused_next_' field exists only to ensure that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1759 `next' pointer fits within the structure, for the purposes of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1760 free list. This makes a difference in the unlikely case of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1761 sizeof(double) being smaller than sizeof(void *). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1762
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1763 struct Lisp_Float
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1764 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1765 struct lrecord_header lheader;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1766 union { double d; struct Lisp_Float *unused_next_; } data;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1767 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1768 typedef struct Lisp_Float Lisp_Float;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1769
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1770 DECLARE_LRECORD (float, Lisp_Float);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1771 #define XFLOAT(x) XRECORD (x, float, Lisp_Float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1772 #define XSETFLOAT(x, p) XSETRECORD (x, p, float)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1773 #define wrap_float(p) wrap_record (p, float)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1774 #define FLOATP(x) RECORDP (x, float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1775 #define CHECK_FLOAT(x) CHECK_RECORD (x, float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1776 #define CONCHECK_FLOAT(x) CONCHECK_RECORD (x, float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1777
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1778 #define float_data(f) ((f)->data.d)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1779 #define XFLOAT_DATA(x) float_data (XFLOAT (x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1780
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1781 #define XFLOATINT(n) extract_float (n)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1782
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1783 #define CHECK_INT_OR_FLOAT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1784 if (!INT_OR_FLOATP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1785 dead_wrong_type_argument (Qnumberp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1786 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1787
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1788 #define CONCHECK_INT_OR_FLOAT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1789 if (!INT_OR_FLOATP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1790 x = wrong_type_argument (Qnumberp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1791 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1792
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1793 # define INT_OR_FLOATP(x) (INTP (x) || FLOATP (x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1794
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1795 #else /* not LISP_FLOAT_TYPE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1796
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1797 #define XFLOAT(x) --- error! No float support. ---
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1798 #define XSETFLOAT(x, p) --- error! No float support. ---
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1799 #define FLOATP(x) 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1800 #define CHECK_FLOAT(x) --- error! No float support. ---
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1801 #define CONCHECK_FLOAT(x) --- error! No float support. ---
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1802
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1803 #define XFLOATINT(n) XINT(n)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1804 #define CHECK_INT_OR_FLOAT CHECK_INT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1805 #define CONCHECK_INT_OR_FLOAT CONCHECK_INT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1806 #define INT_OR_FLOATP(x) INTP (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1807
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1808 #endif /* not LISP_FLOAT_TYPE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1809
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1810 /*-------------------------------- int ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1811
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1812 #define ZEROP(x) EQ (x, Qzero)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1813
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1814 #ifdef ERROR_CHECK_TYPECHECK
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1815
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1816 INLINE_HEADER EMACS_INT XINT (Lisp_Object obj);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1817 INLINE_HEADER EMACS_INT
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1818 XINT (Lisp_Object obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1819 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1820 assert (INTP (obj));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1821 return XREALINT (obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1822 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1823
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1824 INLINE_HEADER EMACS_INT XCHAR_OR_INT (Lisp_Object obj);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1825 INLINE_HEADER EMACS_INT
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1826 XCHAR_OR_INT (Lisp_Object obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1827 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1828 assert (INTP (obj) || CHARP (obj));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1829 return CHARP (obj) ? XCHAR (obj) : XINT (obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1830 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1831
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1832 #else /* no error checking */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1833
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1834 #define XINT(obj) XREALINT (obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1835 #define XCHAR_OR_INT(obj) (CHARP (obj) ? XCHAR (obj) : XINT (obj))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1836
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1837 #endif /* no error checking */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1838
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1839 #define CHECK_INT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1840 if (!INTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1841 dead_wrong_type_argument (Qintegerp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1842 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1843
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1844 #define CONCHECK_INT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1845 if (!INTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1846 x = wrong_type_argument (Qintegerp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1847 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1848
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1849 #define NATNUMP(x) (INTP (x) && XINT (x) >= 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1850
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1851 #define CHECK_NATNUM(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1852 if (!NATNUMP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1853 dead_wrong_type_argument (Qnatnump, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1854 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1855
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1856 #define CONCHECK_NATNUM(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1857 if (!NATNUMP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1858 x = wrong_type_argument (Qnatnump, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1859 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1860
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1861 /* next three always continuable because they coerce their arguments. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1862 #define CHECK_INT_COERCE_CHAR(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1863 if (INTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1864 ; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1865 else if (CHARP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1866 x = make_int (XCHAR (x)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1867 else \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1868 x = wrong_type_argument (Qinteger_or_char_p, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1869 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1870
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1871 #define CHECK_INT_COERCE_MARKER(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1872 if (INTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1873 ; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1874 else if (MARKERP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1875 x = make_int (marker_position (x)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1876 else \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1877 x = wrong_type_argument (Qinteger_or_marker_p, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1878 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1879
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1880 #define CHECK_INT_COERCE_CHAR_OR_MARKER(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1881 if (INTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1882 ; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1883 else if (CHARP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1884 x = make_int (XCHAR (x)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1885 else if (MARKERP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1886 x = make_int (marker_position (x)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1887 else \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1888 x = wrong_type_argument (Qinteger_char_or_marker_p, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1889 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1890
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1891
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1892 /*--------------------------- readonly objects -------------------------*/
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1893
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1894 #define CHECK_C_WRITEABLE(obj) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1895 do { if (c_readonly (obj)) c_write_error (obj); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1896
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1897 #define CHECK_LISP_WRITEABLE(obj) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1898 do { if (lisp_readonly (obj)) lisp_write_error (obj); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1899
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1900 #define C_READONLY(obj) (C_READONLY_RECORD_HEADER_P(XRECORD_LHEADER (obj)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1901 #define LISP_READONLY(obj) (LISP_READONLY_RECORD_HEADER_P(XRECORD_LHEADER (obj)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1902
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1903 /*----------------------------- structrures ----------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1904
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1905 typedef struct structure_keyword_entry structure_keyword_entry;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1906 struct structure_keyword_entry
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1907 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1908 Lisp_Object keyword;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1909 int (*validate) (Lisp_Object keyword, Lisp_Object value,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
1910 Error_Behavior errb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1911 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1912
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1913 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1914 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1915 Dynarr_declare (structure_keyword_entry);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1916 } structure_keyword_entry_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1917
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1918 typedef struct structure_type structure_type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1919 struct structure_type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1920 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1921 Lisp_Object type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1922 structure_keyword_entry_dynarr *keywords;
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
1923 int (*validate) (Lisp_Object data, Error_Behavior errb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1924 Lisp_Object (*instantiate) (Lisp_Object data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1925 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1926
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1927 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1928 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1929 Dynarr_declare (structure_type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1930 } structure_type_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1931
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1932 struct structure_type *define_structure_type (Lisp_Object type,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1933 int (*validate)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1934 (Lisp_Object data,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
1935 Error_Behavior errb),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1936 Lisp_Object (*instantiate)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1937 (Lisp_Object data));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1938 void define_structure_type_keyword (struct structure_type *st,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1939 Lisp_Object keyword,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1940 int (*validate) (Lisp_Object keyword,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1941 Lisp_Object value,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
1942 Error_Behavior errb));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1943
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1944 /*---------------------------- weak lists ------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1945
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1946 enum weak_list_type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1947 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1948 /* element disappears if it's unmarked. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1949 WEAK_LIST_SIMPLE,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1950 /* element disappears if it's a cons and either its car or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1951 cdr is unmarked. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1952 WEAK_LIST_ASSOC,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1953 /* element disappears if it's a cons and its car is unmarked. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1954 WEAK_LIST_KEY_ASSOC,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1955 /* element disappears if it's a cons and its cdr is unmarked. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1956 WEAK_LIST_VALUE_ASSOC,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1957 /* element disappears if it's a cons and neither its car nor
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1958 its cdr is marked. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1959 WEAK_LIST_FULL_ASSOC
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1960 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1961
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1962 struct weak_list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1963 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1964 struct lcrecord_header header;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1965 Lisp_Object list; /* don't mark through this! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1966 enum weak_list_type type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1967 Lisp_Object next_weak; /* don't mark through this! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1968 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1969
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1970 DECLARE_LRECORD (weak_list, struct weak_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1971 #define XWEAK_LIST(x) XRECORD (x, weak_list, struct weak_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1972 #define XSETWEAK_LIST(x, p) XSETRECORD (x, p, weak_list)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1973 #define wrap_weak_list(p) wrap_record (p, weak_list)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1974 #define WEAK_LISTP(x) RECORDP (x, weak_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1975 #define CHECK_WEAK_LIST(x) CHECK_RECORD (x, weak_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1976 #define CONCHECK_WEAK_LIST(x) CONCHECK_RECORD (x, weak_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1977
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1978 #define weak_list_list(w) ((w)->list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1979 #define XWEAK_LIST_LIST(w) (XWEAK_LIST (w)->list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1980
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1981 Lisp_Object make_weak_list (enum weak_list_type type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1982 /* The following two are only called by the garbage collector */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1983 int finish_marking_weak_lists (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1984 void prune_weak_lists (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1985
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1986 /*-------------------------- lcrecord-list -----------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1987
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1988 struct lcrecord_list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1989 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1990 struct lcrecord_header header;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1991 Lisp_Object free;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1992 Elemcount size;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1993 const struct lrecord_implementation *implementation;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1994 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1995
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1996 DECLARE_LRECORD (lcrecord_list, struct lcrecord_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1997 #define XLCRECORD_LIST(x) XRECORD (x, lcrecord_list, struct lcrecord_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1998 #define XSETLCRECORD_LIST(x, p) XSETRECORD (x, p, lcrecord_list)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1999 #define wrap_lcrecord_list(p) wrap_record (p, lcrecord_list)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2000 #define LCRECORD_LISTP(x) RECORDP (x, lcrecord_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2001 /* #define CHECK_LCRECORD_LIST(x) CHECK_RECORD (x, lcrecord_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2002 Lcrecord lists should never escape to the Lisp level, so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2003 functions should not be doing this. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2004
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2005 Lisp_Object make_lcrecord_list (Elemcount size,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2006 const struct lrecord_implementation
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2007 *implementation);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2008 Lisp_Object allocate_managed_lcrecord (Lisp_Object lcrecord_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2009 void free_managed_lcrecord (Lisp_Object lcrecord_list, Lisp_Object lcrecord);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2010
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2011
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2012 /************************************************************************/
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2013 /* Definitions related to the format of text and of characters */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2014 /************************************************************************/
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2015
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2016 /* Note:
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2017
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2018 "internally formatted text" and the term "internal format" in
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2019 general are likely to refer to the format of text in buffers and
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2020 strings; "externally formatted text" and the term "external format"
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2021 refer to any text format used in the O.S. or elsewhere outside of
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2022 XEmacs. The format of text and of a character are related and
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2023 there must be a one-to-one relationship (hopefully through a
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2024 relatively simple algorithmic means of conversion) between a string
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2025 of text and an equivalent array of characters, but the conversion
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2026 between the two is NOT necessarily trivial.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2027
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2028 In a non-Mule XEmacs, allowed characters are numbered 0 through
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2029 255, where no fixed meaning is assigned to them, but (when
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2030 representing text, rather than bytes in a binary file) in practice
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2031 the lower half represents ASCII and the upper half some other 8-bit
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2032 character set (chosen by setting the font, case tables, syntax
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2033 tables, etc. appropriately for the character set through ad-hoc
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2034 means such as the `iso-8859-1' file and the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2035 `standard-display-european' function).
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2036
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2037 #### Finish this.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2038
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2039 */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2040 #include "text.h"
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2041
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2042
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2043 /************************************************************************/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2044 /* Definitions of primitive Lisp functions and variables */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2045 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2046
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2047
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2048 /* DEFUN - Define a built-in Lisp-visible C function or `subr'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2049 `lname' should be the name to give the function in Lisp,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2050 as a null-terminated C string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2051 `Fname' should be the C equivalent of `lname', using only characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2052 valid in a C identifier, with an "F" prepended.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2053 The name of the C constant structure that records information
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2054 on this function for internal use is "S" concatenated with Fname.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2055 `min_args' should be a number, the minimum number of arguments allowed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2056 `max_args' should be a number, the maximum number of arguments allowed,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2057 or else MANY or UNEVALLED.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2058 MANY means pass a vector of evaluated arguments,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2059 in the form of an integer number-of-arguments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2060 followed by the address of a vector of Lisp_Objects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2061 which contains the argument values.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2062 UNEVALLED means pass the list of unevaluated arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2063 `prompt' says how to read arguments for an interactive call.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2064 See the doc string for `interactive'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2065 A null string means call interactively with no arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2066 `arglist' are the comma-separated arguments (always Lisp_Objects) for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2067 the function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2068 The docstring for the function is placed as a "C" comment between
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2069 the prompt and the `args' argument. make-docfile reads the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2070 comment and creates the DOC file from it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2071 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2072
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2073 #define EXFUN_0 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2074 #define EXFUN_1 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2075 #define EXFUN_2 Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2076 #define EXFUN_3 Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2077 #define EXFUN_4 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2078 #define EXFUN_5 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2079 #define EXFUN_6 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2080 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2081 #define EXFUN_7 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2082 Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2083 #define EXFUN_8 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2084 Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2085 #define EXFUN_MANY int, Lisp_Object*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2086 #define EXFUN_UNEVALLED Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2087 #define EXFUN(sym, max_args) Lisp_Object sym (EXFUN_##max_args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2088
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2089 #define SUBR_MAX_ARGS 8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2090 #define MANY -2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2091 #define UNEVALLED -1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2092
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2093 /* Can't be const, because then subr->doc is read-only and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2094 Snarf_documentation chokes */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2095
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2096 #define DEFUN(lname, Fname, min_args, max_args, prompt, arglist) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2097 Lisp_Object Fname (EXFUN_##max_args); \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2098 static struct Lisp_Subr S##Fname = \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2099 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2100 { /* struct lrecord_header */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2101 lrecord_type_subr, /* lrecord_type_index */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2102 1, /* mark bit */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2103 1, /* c_readonly bit */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2104 1 /* lisp_readonly bit */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2105 }, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2106 min_args, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2107 max_args, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2108 prompt, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2109 0, /* doc string */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2110 lname, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2111 (lisp_fn_t) Fname \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2112 }; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2113 Lisp_Object Fname (DEFUN_##max_args arglist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2114
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2115 /* Heavy ANSI C preprocessor hackery to get DEFUN to declare a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2116 prototype that matches max_args, and add the obligatory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2117 `Lisp_Object' type declaration to the formal C arguments. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2118
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2119 #define DEFUN_MANY(named_int, named_Lisp_Object) named_int, named_Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2120 #define DEFUN_UNEVALLED(args) Lisp_Object args
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2121 #define DEFUN_0() void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2122 #define DEFUN_1(a) Lisp_Object a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2123 #define DEFUN_2(a,b) DEFUN_1(a), Lisp_Object b
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2124 #define DEFUN_3(a,b,c) DEFUN_2(a,b), Lisp_Object c
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2125 #define DEFUN_4(a,b,c,d) DEFUN_3(a,b,c), Lisp_Object d
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2126 #define DEFUN_5(a,b,c,d,e) DEFUN_4(a,b,c,d), Lisp_Object e
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2127 #define DEFUN_6(a,b,c,d,e,f) DEFUN_5(a,b,c,d,e), Lisp_Object f
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2128 #define DEFUN_7(a,b,c,d,e,f,g) DEFUN_6(a,b,c,d,e,f), Lisp_Object g
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2129 #define DEFUN_8(a,b,c,d,e,f,g,h) DEFUN_7(a,b,c,d,e,f,g),Lisp_Object h
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2130
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2131 /* WARNING: If you add defines here for higher values of max_args,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2132 make sure to also fix the clauses in PRIMITIVE_FUNCALL(),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2133 and change the define of SUBR_MAX_ARGS above. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2134
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2135 #include "symeval.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2136
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2137 /* `specpdl' is the special binding/unwind-protect stack.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2138
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2139 Knuth says (see the Jargon File):
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2140 At MIT, `pdl' [abbreviation for `Push Down List'] used to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2141 be a more common synonym for `stack'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2142 Everywhere else `stack' seems to be the preferred term.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2143
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2144 specpdl_depth is the current depth of `specpdl'.
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2145 Save this for use later as arg to `unbind_to_1'. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2146 extern int specpdl_depth_counter;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2147 #define specpdl_depth() specpdl_depth_counter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2148
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2149
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2150 #define CHECK_FUNCTION(fun) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2151 while (NILP (Ffunctionp (fun))) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2152 signal_invalid_function_error (fun); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2153 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2154
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2155
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2156 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2157 /* Checking for QUIT */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2158 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2159
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2160 /* Asynchronous events set something_happened, and then are processed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2161 within the QUIT macro. At this point, we are guaranteed to not be in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2162 any sensitive code. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2163
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2164 extern volatile int something_happened;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2165 extern int dont_check_for_quit;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2166 int check_what_happened (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2167
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2168 extern volatile int quit_check_signal_happened;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2169 extern volatile int quit_check_signal_tick_count;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2170 int check_quit (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2171
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2172 void signal_quit (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2173
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2174 #define QUIT_FLAG_SAYS_SHOULD_QUIT \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2175 (!NILP (Vquit_flag) && \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2176 (NILP (Vinhibit_quit) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2177 || (EQ (Vquit_flag, Qcritical) && !dont_check_for_quit)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2178
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2179 /* Nonzero if ought to quit now. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2180 #define QUITP \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2181 ((quit_check_signal_happened ? check_quit () : 0), \
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2182 QUIT_FLAG_SAYS_SHOULD_QUIT)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2183
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2184 /* QUIT used to call QUITP, but there are some places where QUITP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2185 is called directly, and check_what_happened() should only be called
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2186 when Emacs is actually ready to quit because it could do things
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2187 like switch threads. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2188 #define INTERNAL_QUITP \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2189 ((something_happened ? check_what_happened () : 0), \
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2190 QUIT_FLAG_SAYS_SHOULD_QUIT)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2191
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2192 #define INTERNAL_REALLY_QUITP \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2193 (check_what_happened (), \
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2194 QUIT_FLAG_SAYS_SHOULD_QUIT)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2195
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2196 /* Check quit-flag and quit if it is non-nil. Also do any other things
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2197 that might have gotten queued until it was safe. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2198 #define QUIT do { if (INTERNAL_QUITP) signal_quit (); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2199
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2200 #define REALLY_QUIT do { if (INTERNAL_REALLY_QUITP) signal_quit (); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2201
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2202
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2203 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2204 /* hashing */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2205 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2206
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2207 /* #### for a 64-bit machine, we should substitute a prime just over 2^32 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2208 #define GOOD_HASH 65599 /* prime number just over 2^16; Dragon book, p. 435 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2209 #define HASH2(a,b) (GOOD_HASH * (a) + (b))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2210 #define HASH3(a,b,c) (GOOD_HASH * HASH2 (a,b) + (c))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2211 #define HASH4(a,b,c,d) (GOOD_HASH * HASH3 (a,b,c) + (d))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2212 #define HASH5(a,b,c,d,e) (GOOD_HASH * HASH4 (a,b,c,d) + (e))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2213 #define HASH6(a,b,c,d,e,f) (GOOD_HASH * HASH5 (a,b,c,d,e) + (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2214 #define HASH7(a,b,c,d,e,f,g) (GOOD_HASH * HASH6 (a,b,c,d,e,f) + (g))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2215 #define HASH8(a,b,c,d,e,f,g,h) (GOOD_HASH * HASH7 (a,b,c,d,e,f,g) + (h))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2216 #define HASH9(a,b,c,d,e,f,g,h,i) (GOOD_HASH * HASH8 (a,b,c,d,e,f,g,h) + (i))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2217
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2218 #define LISP_HASH(obj) ((unsigned long) LISP_TO_VOID (obj))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2219 unsigned long string_hash (const char *xv);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2220 unsigned long memory_hash (const void *xv, Bytecount size);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2221 unsigned long internal_hash (Lisp_Object obj, int depth);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2222 unsigned long internal_array_hash (Lisp_Object *arr, int size, int depth);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2223
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2224
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2225 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2226 /* String translation */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2227 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2228
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2229 /* When support for message translation exists, GETTEXT() translates a
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2230 string from English into the language defined by
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2231 `current-language-environment'. This is done by looking the string
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2232 up in a large predefined table; if no translation is found, the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2233 original string is returned, and the failure is possibly logged so
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2234 that the translation can later be entered into the table.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2235
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2236 In addition to this, there is a mechanism to snarf message strings
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2237 out of the source code so that they can be entered into the tables.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2238 This is what make-msgfile.lex does.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2239
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2240 Handling `format' strings is more difficult: The format string
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2241 should get translated, but not under all circumstances. When the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2242 format string is a Lisp string, what should happen is that
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2243 Fformat() should format the untranslated args[0] and return that,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2244 and also call Fgettext() on args[0] and, if that is different,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2245 format it and store it in the `string-translatable' property of the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2246 returned string. See Fgettext().
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2247
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2248 CGETTEXT() is the same as GETTEXT() but works with char * strings
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2249 instead of Intbyte * strings.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2250
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2251 build_msg_string() is a shorthand for build_string (GETTEXT (x)).
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2252 build_msg_intstring() is a shorthand for build_intstring (GETTEXT (x)).
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2253 */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2254
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2255 #define GETTEXT(x) (x)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2256 #define CGETTEXT(x) (x)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2257 #define LISP_GETTEXT(x) (x)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2258
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2259 /* DEFER_GETTEXT is used to identify strings which are translated when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2260 they are referenced instead of when they are defined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2261 These include Qerror_messages and initialized arrays of strings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2262 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2263 #define DEFER_GETTEXT(x) (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2264
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2265
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2266 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2267 /* Garbage collection / GC-protection */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2268 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2269
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2270 /* number of bytes of structure consed since last GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2271
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2272 extern EMACS_INT consing_since_gc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2273
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2274 /* threshold for doing another gc */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2275
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2276 extern Fixnum gc_cons_threshold;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2277
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2278 /* Structure for recording stack slots that need marking */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2279
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2280 /* This is a chain of structures, each of which points at a Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2281 variable whose value should be marked in garbage collection.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2282 Normally every link of the chain is an automatic variable of a function,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2283 and its `val' points to some argument or local variable of the function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2284 On exit to the function, the chain is set back to the value it had on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2285 entry. This way, no link remains in the chain when the stack frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2286 containing the link disappears.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2287
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2288 Every function that can call Feval must protect in this fashion all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2289 Lisp_Object variables whose contents will be used again. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2290
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2291 extern struct gcpro *gcprolist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2292
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2293 struct gcpro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2294 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2295 struct gcpro *next;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2296 const Lisp_Object *var; /* Address of first protected variable */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2297 int nvars; /* Number of consecutive protected variables */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2298 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2299
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2300 /* Normally, you declare variables gcpro1, gcpro2, ... and use the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2301 GCPROn() macros. However, if you need to have nested gcpro's,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2302 declare ngcpro1, ngcpro2, ... and use NGCPROn(). If you need
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2303 to nest another level, use nngcpro1, nngcpro2, ... and use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2304 NNGCPROn(). If you need to nest yet another level, create
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2305 the appropriate macros. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2306
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2307 #ifdef DEBUG_GCPRO
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2308
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2309 void debug_gcpro1 (char *, int, struct gcpro *, Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2310 void debug_gcpro2 (char *, int, struct gcpro *, struct gcpro *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2311 Lisp_Object *, Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2312 void debug_gcpro3 (char *, int, struct gcpro *, struct gcpro *, struct gcpro *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2313 Lisp_Object *, Lisp_Object *, Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2314 void debug_gcpro4 (char *, int, struct gcpro *, struct gcpro *, struct gcpro *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2315 struct gcpro *, Lisp_Object *, Lisp_Object *, Lisp_Object *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2316 Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2317 void debug_gcpro5 (char *, int, struct gcpro *, struct gcpro *, struct gcpro *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2318 struct gcpro *, struct gcpro *, Lisp_Object *, Lisp_Object *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2319 Lisp_Object *, Lisp_Object *, Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2320 void debug_ungcpro(char *, int, struct gcpro *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2321
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2322 #define GCPRO1(v) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2323 debug_gcpro1 (__FILE__, __LINE__,&gcpro1,&v)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2324 #define GCPRO2(v1,v2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2325 debug_gcpro2 (__FILE__, __LINE__,&gcpro1,&gcpro2,&v1,&v2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2326 #define GCPRO3(v1,v2,v3) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2327 debug_gcpro3 (__FILE__, __LINE__,&gcpro1,&gcpro2,&gcpro3,&v1,&v2,&v3)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2328 #define GCPRO4(v1,v2,v3,v4) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2329 debug_gcpro4 (__FILE__, __LINE__,&gcpro1,&gcpro2,&gcpro3,&gcpro4,\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2330 &v1,&v2,&v3,&v4)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2331 #define GCPRO5(v1,v2,v3,v4,v5) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2332 debug_gcpro5 (__FILE__, __LINE__,&gcpro1,&gcpro2,&gcpro3,&gcpro4,&gcpro5,\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2333 &v1,&v2,&v3,&v4,&v5)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2334 #define UNGCPRO \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2335 debug_ungcpro(__FILE__, __LINE__,&gcpro1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2336
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2337 #define NGCPRO1(v) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2338 debug_gcpro1 (__FILE__, __LINE__,&ngcpro1,&v)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2339 #define NGCPRO2(v1,v2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2340 debug_gcpro2 (__FILE__, __LINE__,&ngcpro1,&ngcpro2,&v1,&v2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2341 #define NGCPRO3(v1,v2,v3) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2342 debug_gcpro3 (__FILE__, __LINE__,&ngcpro1,&ngcpro2,&ngcpro3,&v1,&v2,&v3)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2343 #define NGCPRO4(v1,v2,v3,v4) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2344 debug_gcpro4 (__FILE__, __LINE__,&ngcpro1,&ngcpro2,&ngcpro3,&ngcpro4,\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2345 &v1,&v2,&v3,&v4)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2346 #define NGCPRO5(v1,v2,v3,v4,v5) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2347 debug_gcpro5 (__FILE__, __LINE__,&ngcpro1,&ngcpro2,&ngcpro3,&ngcpro4,\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2348 &ngcpro5,&v1,&v2,&v3,&v4,&v5)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2349 #define NUNGCPRO \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2350 debug_ungcpro(__FILE__, __LINE__,&ngcpro1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2351
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2352 #define NNGCPRO1(v) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2353 debug_gcpro1 (__FILE__, __LINE__,&nngcpro1,&v)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2354 #define NNGCPRO2(v1,v2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2355 debug_gcpro2 (__FILE__, __LINE__,&nngcpro1,&nngcpro2,&v1,&v2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2356 #define NNGCPRO3(v1,v2,v3) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2357 debug_gcpro3 (__FILE__, __LINE__,&nngcpro1,&nngcpro2,&nngcpro3,&v1,&v2,&v3)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2358 #define NNGCPRO4(v1,v2,v3,v4) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2359 debug_gcpro4 (__FILE__, __LINE__,&nngcpro1,&nngcpro2,&nngcpro3,&nngcpro4,\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2360 &v1,&v2,&v3,&v4)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2361 #define NNGCPRO5(v1,v2,v3,v4,v5) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2362 debug_gcpro5 (__FILE__, __LINE__,&nngcpro1,&nngcpro2,&nngcpro3,&nngcpro4,\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2363 &nngcpro5,&v1,&v2,&v3,&v4,&v5)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2364 #define NNUNGCPRO \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2365 debug_ungcpro(__FILE__, __LINE__,&nngcpro1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2366
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2367 #else /* ! DEBUG_GCPRO */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2368
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2369 #define GCPRO1(var1) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2370 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2371 gcprolist = &gcpro1 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2372
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2373 #define GCPRO2(var1, var2) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2374 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2375 gcpro2.next = &gcpro1, gcpro2.var = &var2, gcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2376 gcprolist = &gcpro2 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2377
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2378 #define GCPRO3(var1, var2, var3) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2379 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2380 gcpro2.next = &gcpro1, gcpro2.var = &var2, gcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2381 gcpro3.next = &gcpro2, gcpro3.var = &var3, gcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2382 gcprolist = &gcpro3 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2383
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2384 #define GCPRO4(var1, var2, var3, var4) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2385 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2386 gcpro2.next = &gcpro1, gcpro2.var = &var2, gcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2387 gcpro3.next = &gcpro2, gcpro3.var = &var3, gcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2388 gcpro4.next = &gcpro3, gcpro4.var = &var4, gcpro4.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2389 gcprolist = &gcpro4 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2390
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2391 #define GCPRO5(var1, var2, var3, var4, var5) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2392 gcpro1.next = gcprolist, gcpro1.var = &var1, gcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2393 gcpro2.next = &gcpro1, gcpro2.var = &var2, gcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2394 gcpro3.next = &gcpro2, gcpro3.var = &var3, gcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2395 gcpro4.next = &gcpro3, gcpro4.var = &var4, gcpro4.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2396 gcpro5.next = &gcpro4, gcpro5.var = &var5, gcpro5.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2397 gcprolist = &gcpro5 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2398
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2399 #define UNGCPRO ((void) (gcprolist = gcpro1.next))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2400
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2401 #define NGCPRO1(var1) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2402 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2403 gcprolist = &ngcpro1 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2404
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2405 #define NGCPRO2(var1, var2) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2406 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2407 ngcpro2.next = &ngcpro1, ngcpro2.var = &var2, ngcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2408 gcprolist = &ngcpro2 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2409
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2410 #define NGCPRO3(var1, var2, var3) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2411 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2412 ngcpro2.next = &ngcpro1, ngcpro2.var = &var2, ngcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2413 ngcpro3.next = &ngcpro2, ngcpro3.var = &var3, ngcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2414 gcprolist = &ngcpro3 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2415
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2416 #define NGCPRO4(var1, var2, var3, var4) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2417 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2418 ngcpro2.next = &ngcpro1, ngcpro2.var = &var2, ngcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2419 ngcpro3.next = &ngcpro2, ngcpro3.var = &var3, ngcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2420 ngcpro4.next = &ngcpro3, ngcpro4.var = &var4, ngcpro4.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2421 gcprolist = &ngcpro4 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2422
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2423 #define NGCPRO5(var1, var2, var3, var4, var5) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2424 ngcpro1.next = gcprolist, ngcpro1.var = &var1, ngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2425 ngcpro2.next = &ngcpro1, ngcpro2.var = &var2, ngcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2426 ngcpro3.next = &ngcpro2, ngcpro3.var = &var3, ngcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2427 ngcpro4.next = &ngcpro3, ngcpro4.var = &var4, ngcpro4.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2428 ngcpro5.next = &ngcpro4, ngcpro5.var = &var5, ngcpro5.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2429 gcprolist = &ngcpro5 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2430
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2431 #define NUNGCPRO ((void) (gcprolist = ngcpro1.next))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2432
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2433 #define NNGCPRO1(var1) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2434 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2435 gcprolist = &nngcpro1 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2436
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2437 #define NNGCPRO2(var1, var2) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2438 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2439 nngcpro2.next = &nngcpro1, nngcpro2.var = &var2, nngcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2440 gcprolist = &nngcpro2 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2441
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2442 #define NNGCPRO3(var1, var2, var3) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2443 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2444 nngcpro2.next = &nngcpro1, nngcpro2.var = &var2, nngcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2445 nngcpro3.next = &nngcpro2, nngcpro3.var = &var3, nngcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2446 gcprolist = &nngcpro3 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2447
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2448 #define NNGCPRO4(var1, var2, var3, var4) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2449 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2450 nngcpro2.next = &nngcpro1, nngcpro2.var = &var2, nngcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2451 nngcpro3.next = &nngcpro2, nngcpro3.var = &var3, nngcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2452 nngcpro4.next = &nngcpro3, nngcpro4.var = &var4, nngcpro4.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2453 gcprolist = &nngcpro4 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2454
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2455 #define NNGCPRO5(var1, var2, var3, var4, var5) ((void) ( \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2456 nngcpro1.next = gcprolist, nngcpro1.var = &var1, nngcpro1.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2457 nngcpro2.next = &nngcpro1, nngcpro2.var = &var2, nngcpro2.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2458 nngcpro3.next = &nngcpro2, nngcpro3.var = &var3, nngcpro3.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2459 nngcpro4.next = &nngcpro3, nngcpro4.var = &var4, nngcpro4.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2460 nngcpro5.next = &nngcpro4, nngcpro5.var = &var5, nngcpro5.nvars = 1, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2461 gcprolist = &nngcpro5 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2462
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2463 #define NNUNGCPRO ((void) (gcprolist = nngcpro1.next))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2464
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2465 #endif /* ! DEBUG_GCPRO */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2466
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2467 /* Evaluate expr, UNGCPRO, and then return the value of expr. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2468 #define RETURN_UNGCPRO(expr) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2469 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2470 Lisp_Object ret_ungc_val = (expr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2471 UNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2472 RETURN_SANS_WARNINGS ret_ungc_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2473 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2474
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2475 /* Evaluate expr, NUNGCPRO, UNGCPRO, and then return the value of expr. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2476 #define RETURN_NUNGCPRO(expr) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2477 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2478 Lisp_Object ret_ungc_val = (expr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2479 NUNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2480 UNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2481 RETURN_SANS_WARNINGS ret_ungc_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2482 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2483
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2484 /* Evaluate expr, NNUNGCPRO, NUNGCPRO, UNGCPRO, and then return the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2485 value of expr. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2486 #define RETURN_NNUNGCPRO(expr) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2487 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2488 Lisp_Object ret_ungc_val = (expr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2489 NNUNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2490 NUNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2491 UNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2492 RETURN_SANS_WARNINGS ret_ungc_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2493 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2494
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2495 extern Lisp_Object_ptr_dynarr *staticpros;
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2496
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2497 #ifdef DEBUG_XEMACS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2498
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2499 /* Help debug crashes gc-marking a staticpro'ed object. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2500
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2501 void staticpro_1 (Lisp_Object *, char *);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2502 void staticpro_nodump_1 (Lisp_Object *, char *);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2503 #define staticpro(ptr) staticpro_1 (ptr, #ptr)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2504 #define staticpro_nodump(ptr) staticpro_nodump_1 (ptr, #ptr)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2505
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2506 #else
611
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 609
diff changeset
2507
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2508 /* Call staticpro (&var) to protect static variable `var'. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2509 void staticpro (Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2510
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2511 /* Call staticpro_nodump (&var) to protect static variable `var'. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2512 /* var will not be saved at dump time */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2513 void staticpro_nodump (Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2514
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2515 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2516
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2517 void register_post_gc_action (void (*fun) (void *), void *arg);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2518 int begin_gc_forbidden (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2519 void end_gc_forbidden (int count);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2520
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2521
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2522 /************************************************************************/
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2523 /* Dumping */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2524 /************************************************************************/
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2525
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2526 /* dump_add_root_struct_ptr (&var, &desc) dumps the structure pointed to by
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2527 `var'. This is for a single relocatable pointer located in the data
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2528 segment (i.e. the block pointed to is in the heap). */
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2529 #ifdef PDUMP
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2530 void dump_add_root_struct_ptr (void *, const struct struct_description *);
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2531 #else
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2532 #define dump_add_root_struct_ptr(varaddr,descaddr) DO_NOTHING
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2533 #endif
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2534
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2535 /* dump_add_opaque (&var, size) dumps the opaque static structure `var'.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2536 This is for a static block of memory (in the data segment, not the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2537 heap), with no relocatable pointers in it. */
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2538 #ifdef PDUMP
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2539 void dump_add_opaque (const void *, Bytecount);
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2540 #else
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2541 #define dump_add_opaque(varaddr,size) DO_NOTHING
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2542 #endif
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2543
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2544 /* dump_add_root_block (&var, &desc) dumps the static structure located at
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2545 `var' and described by DESC. This is for a static block of memory (in
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2546 the data segment, not the heap), with relocatable pointers in it, as
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2547 described by DESC. (#### Not yet implemented) */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2548 #ifdef PDUMP
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2549 void dump_add_root_block (void *ptraddress,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2550 const struct lrecord_description *desc);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2551 #else
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2552 #define dump_add_root_block(ptraddress,desc) DO_NOTHING
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2553 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2554
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2555 /* Call dump_add_opaque_int (&int_var) to dump `int_var', of type `int'. */
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2556 #ifdef PDUMP
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2557 #define dump_add_opaque_int(int_varaddr) do { \
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2558 int *dao_ = (int_varaddr); /* type check */ \
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2559 dump_add_opaque (dao_, sizeof (*dao_)); \
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2560 } while (0)
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2561 #else
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2562 #define dump_add_opaque_int(int_varaddr) DO_NOTHING
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2563 #endif
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2564
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2565 /* Call dump_add_opaque_fixnum (&fixnum_var) to dump `fixnum_var', of type `Fixnum'. */
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2566 #ifdef PDUMP
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2567 #define dump_add_opaque_fixnum(fixnum_varaddr) do { \
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2568 Fixnum *dao_ = (fixnum_varaddr); /* type check */ \
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2569 dump_add_opaque (dao_, sizeof (*dao_)); \
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2570 } while (0)
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2571 #else
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2572 #define dump_add_opaque_fixnum(fixnum_varaddr) DO_NOTHING
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2573 #endif
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2574
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2575 /* Call dump_add_root_object (&var) to ensure that var is properly updated after pdump. */
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2576 #ifdef PDUMP
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2577 void dump_add_root_object (Lisp_Object *);
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2578 #else
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2579 #define dump_add_root_object(varaddr) DO_NOTHING
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2580 #endif
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2581
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2582 /* Call dump_add_root_object (&var) to ensure that var is properly updated after
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2583 pdump. var must point to a linked list of objects out of which
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2584 some may not be dumped */
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2585 #ifdef PDUMP
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2586 void dump_add_weak_object_chain (Lisp_Object *);
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2587 #else
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2588 #define dump_add_weak_object_chain(varaddr) DO_NOTHING
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
2589 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2590
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2591 /* Nonzero means Emacs has already been initialized.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2592 Used during startup to detect startup of dumped Emacs. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2593 extern int initialized;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2594
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2595
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2596
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2597 /************************************************************************/
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2598 /* Misc definitions */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2599 /************************************************************************/
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2600
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2601 /************************************************************************/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2602 /* prototypes */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2603 /************************************************************************/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2604
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2605 /* NOTE: Prototypes should go HERE, not in various header files, unless
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2606 they specifically reference a type that's not defined in lisp.h.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2607 (And even then, you might consider adding the type to lisp.h.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2608
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2609 The idea is that header files typically contain the innards of objects,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2610 and we want to minimize the number of "dependencies" of one file on
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2611 the specifics of such objects. Putting prototypes here minimizes the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2612 number of header files that need to be included -- good for a number
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2613 of reasons. --ben */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2614
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2615 /*--------------- prototypes for various public c functions ------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2616
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2617 /* Prototypes for all init/syms_of/vars_of initialization functions. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2618 #include "symsinit.h"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2619
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2620 /* Defined in alloc.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2621 void release_breathing_space (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2622 Lisp_Object noseeum_cons (Lisp_Object, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2623 Lisp_Object make_vector (Elemcount, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2624 Lisp_Object vector1 (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2625 Lisp_Object vector2 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2626 Lisp_Object vector3 (Lisp_Object, Lisp_Object, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2627 Lisp_Object make_bit_vector (Elemcount, Lisp_Object);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2628 Lisp_Object make_bit_vector_from_byte_vector (unsigned char *, Elemcount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2629 Lisp_Object noseeum_make_marker (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2630 void garbage_collect_1 (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2631 Lisp_Object acons (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2632 Lisp_Object cons3 (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2633 Lisp_Object list1 (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2634 Lisp_Object list2 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2635 Lisp_Object list3 (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2636 Lisp_Object list4 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2637 Lisp_Object list5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2638 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2639 Lisp_Object list6 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2640 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2641 DECLARE_DOESNT_RETURN (memory_full (void));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2642 void disksave_object_finalization (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2643 extern int purify_flag;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2644 extern int gc_currently_forbidden;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2645 extern EMACS_INT gc_generation_number[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2646 int c_readonly (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2647 int lisp_readonly (Lisp_Object);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2648 Lisp_Object build_intstring (const Intbyte *);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2649 Lisp_Object build_string (const CIntbyte *);
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
2650 Lisp_Object build_ext_string (const Extbyte *, Lisp_Object);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2651 Lisp_Object build_msg_intstring (const Intbyte *);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2652 Lisp_Object build_msg_string (const CIntbyte *);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2653 Lisp_Object make_string (const Intbyte *, Bytecount);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2654 Lisp_Object make_ext_string (const Extbyte *, EMACS_INT, Lisp_Object);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2655 void init_string_ascii_begin (Lisp_Object string);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2656 Lisp_Object make_uninit_string (Bytecount);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2657 Lisp_Object make_float (double);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2658 Lisp_Object make_string_nocopy (const Intbyte *, Bytecount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2659 void free_cons (Lisp_Cons *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2660 void free_list (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2661 void free_alist (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2662 void mark_conses_in_list (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2663 void free_marker (Lisp_Marker *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2664 int object_dead_p (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2665 void mark_object (Lisp_Object obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2666 int marked_p (Lisp_Object obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2667
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2668 #ifdef MEMORY_USAGE_STATS
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2669 Bytecount malloced_storage_size (void *, Bytecount, struct overhead_stats *);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2670 Bytecount fixed_type_block_overhead (Bytecount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2671 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2672 #ifdef PDUMP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2673 void pdump (void);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2674 int pdump_load (const char *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2675
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2676 extern char *pdump_start, *pdump_end;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2677 #define DUMPEDP(adr) ((((char *)(adr)) < pdump_end) && (((char *)(adr)) >= pdump_start))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2678 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2679 #define DUMPEDP(adr) 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2680 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2681
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2682 /* Defined in buffer.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2683 Lisp_Object get_truename_buffer (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2684 void switch_to_buffer (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2685 extern int find_file_compare_truenames;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2686 extern int find_file_use_truenames;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2687 Intbyte *get_initial_directory (Intbyte *pathname, Bytecount size);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2688 extern Lisp_Object Vbuffer_alist;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2689 void set_buffer_internal (struct buffer *b);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2690 struct buffer *decode_buffer (Lisp_Object buffer, int allow_string);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2691
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2692 void record_buffer (Lisp_Object buf);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2693 Lisp_Object get_buffer (Lisp_Object name,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2694 int error_if_deleted_or_does_not_exist);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2695 int map_over_sharing_buffers (struct buffer *buf,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2696 int (*mapfun) (struct buffer *buf,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2697 void *closure),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2698 void *closure);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2699
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2700 extern struct buffer *current_buffer;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2701
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2702 extern void init_initial_directory (void); /* initialize initial_directory */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2703
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2704 EXFUN (Fbuffer_disable_undo, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2705 EXFUN (Fbuffer_modified_p, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2706 EXFUN (Fbuffer_name, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2707 EXFUN (Fcurrent_buffer, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2708 EXFUN (Ferase_buffer, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2709 EXFUN (Fget_buffer, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2710 EXFUN (Fget_buffer_create, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2711 EXFUN (Fget_file_buffer, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2712 EXFUN (Fkill_buffer, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2713 EXFUN (Fother_buffer, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2714 EXFUN (Frecord_buffer, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2715 EXFUN (Fset_buffer, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2716 EXFUN (Fset_buffer_modified_p, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2717
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2718 extern Lisp_Object QSscratch, Qafter_change_function, Qafter_change_functions;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2719 extern Lisp_Object Qbefore_change_function, Qbefore_change_functions;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2720 extern Lisp_Object Qbuffer_or_string_p, Qdefault_directory, Qfirst_change_hook;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2721 extern Lisp_Object Qpermanent_local, Vafter_change_function;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2722 extern Lisp_Object Vafter_change_functions, Vbefore_change_function;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2723 extern Lisp_Object Vbefore_change_functions, Vbuffer_alist, Vbuffer_defaults;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2724 extern Lisp_Object Vinhibit_read_only, Vtransient_mark_mode;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2725
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2726 /* Defined in bytecode.c */
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 578
diff changeset
2727 DECLARE_DOESNT_RETURN (invalid_byte_code
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2728 (const CIntbyte *reason, Lisp_Object frob));
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2729
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2730 /* Defined in callproc.c */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2731 Intbyte *egetenv (const CIntbyte *var);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2732 void eputenv (const CIntbyte *var, const CIntbyte *value);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2733 extern int env_initted;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2734
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2735 /* Defined in console.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2736 void stuff_buffered_input (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2737
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2738 /* Defined in console-msw.c */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2739 EXFUN (Fmswindows_message_box, 3);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2740 extern int mswindows_message_outputted;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2741 void mswindows_hide_console (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2742 int mswindows_output_console_string (const Intbyte *ptr, Bytecount len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2743 void write_string_to_mswindows_debugging_output (Intbyte *str, Bytecount len);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2744
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2745 /* Defined in data.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2746 DECLARE_DOESNT_RETURN (c_write_error (Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2747 DECLARE_DOESNT_RETURN (lisp_write_error (Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2748 DECLARE_DOESNT_RETURN (args_out_of_range (Lisp_Object, Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2749 DECLARE_DOESNT_RETURN (args_out_of_range_3 (Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2750 Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2751 Lisp_Object wrong_type_argument (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2752 DECLARE_DOESNT_RETURN (dead_wrong_type_argument (Lisp_Object, Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2753 void check_int_range (EMACS_INT, EMACS_INT, EMACS_INT);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2754
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2755 EXFUN (Fint_to_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2756 EXFUN (Fchar_to_int, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2757
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2758 enum arith_comparison {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2759 arith_equal,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2760 arith_notequal,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2761 arith_less,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2762 arith_grtr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2763 arith_less_or_equal,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2764 arith_grtr_or_equal };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2765 Lisp_Object arithcompare (Lisp_Object, Lisp_Object, enum arith_comparison);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2766
707
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 665
diff changeset
2767 /* Do NOT use word_to_lisp or wasteful_word_to_lisp to decode time_t's
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 665
diff changeset
2768 unless you KNOW arg is non-negative. They cannot return negative
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 665
diff changeset
2769 values! Use make_time. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2770 Lisp_Object word_to_lisp (unsigned int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2771 unsigned int lisp_to_word (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2772
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2773 /* Defined in dired.c */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2774 Lisp_Object make_directory_hash_table (const Intbyte *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2775 Lisp_Object wasteful_word_to_lisp (unsigned int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2776
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2777 /* Defined in doc.c */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2778 Lisp_Object unparesseuxify_doc_string (int, EMACS_INT, Intbyte *, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2779 Lisp_Object read_doc_string (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2780
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2781 /* Defined in doprnt.c */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2782
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2783 Bytecount emacs_doprnt_va (Lisp_Object stream, const Intbyte *format_nonreloc,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2784 Bytecount format_length, Lisp_Object format_reloc,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2785 va_list vargs);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2786 Bytecount emacs_doprnt (Lisp_Object stream, const Intbyte *format_nonreloc,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2787 Bytecount format_length, Lisp_Object format_reloc,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2788 int nargs, const Lisp_Object *largs, ...);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2789 Lisp_Object emacs_vsprintf_string_lisp (const CIntbyte *format_nonreloc,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2790 Lisp_Object format_reloc, int nargs,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2791 const Lisp_Object *largs);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2792 Lisp_Object emacs_sprintf_string_lisp (const CIntbyte *format_nonreloc,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2793 Lisp_Object format_reloc, int nargs, ...);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2794 Intbyte *emacs_vsprintf_malloc_lisp (const CIntbyte *format_nonreloc,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2795 Lisp_Object format_reloc, int nargs,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2796 const Lisp_Object *largs,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2797 Bytecount *len_out);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2798 Intbyte *emacs_sprintf_malloc_lisp (Bytecount *len_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2799 const CIntbyte *format_nonreloc,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2800 Lisp_Object format_reloc, int nargs, ...);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2801 Lisp_Object emacs_vsprintf_string (const CIntbyte *format, va_list vargs);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2802 Lisp_Object emacs_sprintf_string (const CIntbyte *format, ...)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2803 PRINTF_ARGS (1, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2804 Intbyte *emacs_vsprintf_malloc (const CIntbyte *format, va_list vargs,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2805 Bytecount *len_out);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2806 Intbyte *emacs_sprintf_malloc (Bytecount *len_out, const CIntbyte *format, ...)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2807 PRINTF_ARGS (2, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2808 Bytecount emacs_vsprintf (Intbyte *output, const CIntbyte *format,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2809 va_list vargs);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2810 Bytecount emacs_sprintf (Intbyte *output, const CIntbyte *format, ...)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2811 PRINTF_ARGS (2, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2812
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2813
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2814 /* Defined in editfns.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2815 void uncache_home_directory (void);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2816 Intbyte *get_home_directory (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2817 Intbyte *user_login_name (uid_t *);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2818 Charbpos charbpos_clip_to_bounds (Charbpos, Charbpos, Charbpos);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2819 Bytebpos bytebpos_clip_to_bounds (Bytebpos, Bytebpos, Bytebpos);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2820 void buffer_insert1 (struct buffer *, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2821 Lisp_Object make_string_from_buffer (struct buffer *, Charbpos, Charcount);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2822 Lisp_Object make_string_from_buffer_no_extents (struct buffer *, Charbpos, Charcount);
707
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 665
diff changeset
2823 Lisp_Object make_time (time_t);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2824 Lisp_Object save_excursion_save (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2825 Lisp_Object save_restriction_save (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2826 Lisp_Object save_excursion_restore (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2827 Lisp_Object save_restriction_restore (Lisp_Object);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2828 void widen_buffer (struct buffer *b, int no_clip);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2829 int beginning_of_line_p (struct buffer *b, Charbpos pt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2830
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2831 /* Defined in emacsfns.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2832 Lisp_Object save_current_buffer_restore (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2833
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2834 /* Defined in emacs.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2835 SIGTYPE fatal_error_signal (int);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2836 Lisp_Object make_arg_list (int, Extbyte **);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2837 void make_argc_argv (Lisp_Object, int *, Extbyte ***);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2838 void free_argc_argv (Extbyte **);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2839 Lisp_Object split_external_path (const Extbyte *path);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2840 Lisp_Object split_env_path (const CIntbyte *evarname, const Intbyte *default_);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2841
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2842 /* Nonzero means don't do interactive redisplay and don't change tty modes */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2843 extern int noninteractive, noninteractive1;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2844 extern int inhibit_non_essential_printing_operations;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2845 extern int preparing_for_armageddon;
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
2846 extern Fixnum emacs_priority;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2847 extern int running_asynch_code;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2848 extern int suppress_early_error_handler_backtrace;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2849 void debug_break (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2850 int debug_can_access_memory (void *ptr, Bytecount len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2851 void really_abort (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2852
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2853 /* Defined in eval.c */
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2854 DECLARE_DOESNT_RETURN (signal_error_1 (Lisp_Object, Lisp_Object));
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2855 void maybe_signal_error_1 (Lisp_Object, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2856 Error_Behavior);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2857 Lisp_Object maybe_signal_continuable_error_1 (Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2858 Lisp_Object, Error_Behavior);
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
2859 DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS (signal_ferror
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
2860 (Lisp_Object,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2861 const CIntbyte *,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
2862 ...), 2, 3);
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2863 void maybe_signal_ferror (Lisp_Object, Lisp_Object, Error_Behavior,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2864 const CIntbyte *, ...) PRINTF_ARGS (4, 5);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2865 Lisp_Object signal_continuable_ferror (Lisp_Object, const CIntbyte *, ...)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2866 PRINTF_ARGS (2, 3);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2867 Lisp_Object maybe_signal_continuable_ferror (Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2868 Error_Behavior,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2869 const CIntbyte *, ...)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2870 PRINTF_ARGS (4, 5);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2871
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2872 Lisp_Object build_error_data (const CIntbyte *reason, Lisp_Object frob);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2873 DECLARE_DOESNT_RETURN (signal_error (Lisp_Object, const CIntbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2874 Lisp_Object));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2875 void maybe_signal_error (Lisp_Object, const CIntbyte *, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2876 Lisp_Object, Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2877 Lisp_Object signal_continuable_error (Lisp_Object, const CIntbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2878 Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2879 Lisp_Object maybe_signal_continuable_error (Lisp_Object, const CIntbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2880 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2881 Lisp_Object, Error_Behavior);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2882 DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS (signal_ferror_with_frob
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2883 (Lisp_Object, Lisp_Object,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2884 const CIntbyte *,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2885 ...), 3, 4);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2886 void maybe_signal_ferror_with_frob (Lisp_Object, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2887 Error_Behavior,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2888 const CIntbyte *, ...) PRINTF_ARGS (5, 6);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2889 Lisp_Object signal_continuable_ferror_with_frob (Lisp_Object, Lisp_Object,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2890 const CIntbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2891 ...) PRINTF_ARGS (3, 4);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2892 Lisp_Object maybe_signal_continuable_ferror_with_frob (Lisp_Object,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2893 Lisp_Object,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2894 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2895 Error_Behavior,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2896 const CIntbyte *, ...)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2897 PRINTF_ARGS (5, 6);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2898 DECLARE_DOESNT_RETURN (signal_error_2 (Lisp_Object, const CIntbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2899 Lisp_Object, Lisp_Object));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2900 void maybe_signal_error_2 (Lisp_Object, const CIntbyte *, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2901 Lisp_Object, Lisp_Object, Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2902 Lisp_Object signal_continuable_error_2 (Lisp_Object, const CIntbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2903 Lisp_Object, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2904 Lisp_Object maybe_signal_continuable_error_2 (Lisp_Object, const CIntbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2905 Lisp_Object, Lisp_Object,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2906 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2907 Error_Behavior);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2908
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2909
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2910 DECLARE_DOESNT_RETURN (signal_malformed_list_error (Lisp_Object));
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2911 DECLARE_DOESNT_RETURN (signal_malformed_property_list_error (Lisp_Object));
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2912 DECLARE_DOESNT_RETURN (signal_circular_list_error (Lisp_Object));
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2913 DECLARE_DOESNT_RETURN (signal_circular_property_list_error (Lisp_Object));
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2914
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2915 DECLARE_DOESNT_RETURN (syntax_error (const CIntbyte *reason,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
2916 Lisp_Object frob));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2917 DECLARE_DOESNT_RETURN (syntax_error_2 (const CIntbyte *reason,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
2918 Lisp_Object frob1,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2919 Lisp_Object frob2));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2920 void maybe_syntax_error (const CIntbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2921 Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2922 DECLARE_DOESNT_RETURN (sferror (const CIntbyte *reason, Lisp_Object frob));
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2923 DECLARE_DOESNT_RETURN (sferror_2 (const CIntbyte *reason, Lisp_Object frob1,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2924 Lisp_Object frob2));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2925 void maybe_sferror (const CIntbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2926 Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2927 DECLARE_DOESNT_RETURN (invalid_argument (const CIntbyte *reason,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2928 Lisp_Object frob));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2929 DECLARE_DOESNT_RETURN (invalid_argument_2 (const CIntbyte *reason,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2930 Lisp_Object frob1,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2931 Lisp_Object frob2));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2932 void maybe_invalid_argument (const CIntbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2933 Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2934 DECLARE_DOESNT_RETURN (invalid_operation (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2935 Lisp_Object frob));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2936 DECLARE_DOESNT_RETURN (invalid_operation_2 (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2937 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2938 Lisp_Object frob2));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2939 void maybe_invalid_operation (const CIntbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2940 Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2941 DECLARE_DOESNT_RETURN (invalid_state (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2942 Lisp_Object frob));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2943 DECLARE_DOESNT_RETURN (invalid_state_2 (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2944 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2945 Lisp_Object frob2));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2946 void maybe_invalid_state (const CIntbyte *, Lisp_Object, Lisp_Object,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
2947 Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2948 DECLARE_DOESNT_RETURN (invalid_change (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2949 Lisp_Object frob));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2950 DECLARE_DOESNT_RETURN (invalid_change_2 (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2951 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2952 Lisp_Object frob2));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2953 void maybe_invalid_change (const CIntbyte *, Lisp_Object, Lisp_Object,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
2954 Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2955 DECLARE_DOESNT_RETURN (invalid_constant (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2956 Lisp_Object frob));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2957 DECLARE_DOESNT_RETURN (invalid_constant_2 (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2958 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2959 Lisp_Object frob2));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2960 void maybe_invalid_constant (const CIntbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2961 Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2962 DECLARE_DOESNT_RETURN (wtaerror (const CIntbyte *reason, Lisp_Object frob));
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2963 DECLARE_DOESNT_RETURN (out_of_memory (const CIntbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2964 Lisp_Object frob));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2965 DECLARE_DOESNT_RETURN (stack_overflow (const CIntbyte *reason,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2966 Lisp_Object frob));
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2967 DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS (printing_unreadable_object
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2968 (const CIntbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
2969 ...), 1, 2);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2970
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2971 Lisp_Object signal_void_function_error (Lisp_Object);
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2972 Lisp_Object signal_invalid_function_error (Lisp_Object);
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2973 Lisp_Object signal_wrong_number_of_arguments_error (Lisp_Object, int);
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2974
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2975 Lisp_Object run_hook_with_args_in_buffer (struct buffer *, int, Lisp_Object *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2976 enum run_hooks_condition);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2977 Lisp_Object run_hook_with_args (int, Lisp_Object *, enum run_hooks_condition);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2978 void va_run_hook_with_args (Lisp_Object, int, ...);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2979 void va_run_hook_with_args_in_buffer (struct buffer *, Lisp_Object, int, ...);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2980 Lisp_Object run_hook (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2981 Lisp_Object apply1 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2982 Lisp_Object call0 (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2983 Lisp_Object call1 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2984 Lisp_Object call2 (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2985 Lisp_Object call3 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2986 Lisp_Object call4 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2987 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2988 Lisp_Object call5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2989 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2990 Lisp_Object call6 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2991 Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2992 Lisp_Object call7 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2993 Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2994 Lisp_Object call8 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2995 Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2996 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2997 Lisp_Object call0_in_buffer (struct buffer *, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2998 Lisp_Object call1_in_buffer (struct buffer *, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2999 Lisp_Object call2_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3000 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3001 Lisp_Object call3_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3002 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3003 Lisp_Object call4_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3004 Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3005 Lisp_Object call5_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3006 Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3007 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3008 Lisp_Object call6_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3009 Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3010 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3011 Lisp_Object eval_in_buffer (struct buffer *, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3012 Lisp_Object call0_with_handler (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3013 Lisp_Object call1_with_handler (Lisp_Object, Lisp_Object, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3014 Lisp_Object eval_in_buffer_trapping_errors (const CIntbyte *, struct buffer *,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3015 Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3016 Lisp_Object run_hook_trapping_errors (const CIntbyte *, Lisp_Object);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3017 Lisp_Object safe_run_hook_trapping_errors (const CIntbyte *, Lisp_Object, int);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3018 Lisp_Object call0_trapping_errors (const CIntbyte *, Lisp_Object);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3019 Lisp_Object call1_trapping_errors (const CIntbyte *, Lisp_Object, Lisp_Object);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3020 Lisp_Object call2_trapping_errors (const CIntbyte *,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3021 Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3022 Lisp_Object call_with_suspended_errors (lisp_fn_t, volatile Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3023 Error_Behavior, int, ...);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3024 /* C Code should be using internal_catch, record_unwind_p, condition_case_1 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3025 Lisp_Object internal_catch (Lisp_Object, Lisp_Object (*) (Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3026 Lisp_Object, int * volatile);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3027 Lisp_Object condition_case_1 (Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3028 Lisp_Object (*) (Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3029 Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3030 Lisp_Object (*) (Lisp_Object, Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3031 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3032 Lisp_Object condition_case_3 (Lisp_Object, Lisp_Object, Lisp_Object);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3033 Lisp_Object unbind_to_1 (int, Lisp_Object);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3034 #define unbind_to(obj) unbind_to_1 (obj, Qnil)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3035 void specbind (Lisp_Object, Lisp_Object);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3036 int record_unwind_protect (Lisp_Object (*) (Lisp_Object), Lisp_Object);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3037 int record_unwind_protect_freeing (void *ptr);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3038 int record_unwind_protect_freeing_dynarr (void *ptr);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3039 void do_autoload (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3040 Lisp_Object un_autoload (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3041 void warn_when_safe_lispobj (Lisp_Object, Lisp_Object, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3042 void warn_when_safe (Lisp_Object, Lisp_Object, const CIntbyte *,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3043 ...) PRINTF_ARGS (3, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3044
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3045
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3046 /* Defined in event-stream.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3047 void wait_delaying_user_input (int (*) (void *), void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3048 int detect_input_pending (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3049 void reset_this_command_keys (Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3050 Lisp_Object enqueue_misc_user_event (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3051 Lisp_Object enqueue_misc_user_event_pos (Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3052 Lisp_Object, int, int, int, int);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3053 extern int modifier_keys_are_sticky;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3054
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3055 /* Defined in event-Xt.c */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3056 void enqueue_Xt_dispatch_event (Lisp_Object event);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3057 void signal_special_Xt_user_event (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3058
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3059
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3060 /* Defined in events.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3061 void clear_event_resource (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3062 Lisp_Object allocate_event (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3063
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3064 EXFUN (Fevent_x_pixel, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3065 EXFUN (Fevent_y_pixel, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3066
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3067
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3068 /* Defined in file-coding.c */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3069 EXFUN (Fcoding_category_list, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3070 EXFUN (Fcoding_category_system, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3071 EXFUN (Fcoding_priority_list, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3072 EXFUN (Fcoding_system_description, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3073 EXFUN (Fcoding_system_documentation, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3074 EXFUN (Fcoding_system_list, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3075 EXFUN (Fcoding_system_name, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3076 EXFUN (Fcoding_system_p, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3077 EXFUN (Fcoding_system_property, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3078 EXFUN (Fcoding_system_type, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3079 EXFUN (Fcopy_coding_system, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3080 EXFUN (Fdecode_big5_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3081 EXFUN (Fdecode_coding_region, 4);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3082 EXFUN (Fdecode_shift_jis_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3083 EXFUN (Fdefine_coding_system_alias, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3084 EXFUN (Fdetect_coding_region, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3085 EXFUN (Fdefault_encoding_detection_enabled_p, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3086 EXFUN (Fencode_big5_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3087 EXFUN (Fencode_coding_region, 4);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3088 EXFUN (Fencode_shift_jis_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3089 EXFUN (Ffind_coding_system, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3090 EXFUN (Fget_coding_system, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3091 EXFUN (Fmake_coding_system, 4);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3092 EXFUN (Fset_coding_category_system, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3093 EXFUN (Fset_coding_priority_list, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3094 EXFUN (Fsubsidiary_coding_system, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3095
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3096 extern Lisp_Object Qshift_jis, Qiso2022, Qbig5, Qccl;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3097 extern Lisp_Object Qcharset_g0;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3098 extern Lisp_Object Qcharset_g1, Qcharset_g2, Qcharset_g3, Qcoding_system_error;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3099 extern Lisp_Object Qcoding_systemp, Qcr, Qcrlf, Qdecode, Qencode;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3100 extern Lisp_Object Qeol_cr, Qeol_crlf, Qeol_lf, Qeol_type, Qescape_quoted;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3101 extern Lisp_Object Qforce_g0_on_output, Qforce_g1_on_output;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3102 extern Lisp_Object Qforce_g2_on_output, Qforce_g3_on_output;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3103 extern Lisp_Object Qinput_charset_conversion, Qlf, Qlock_shift;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3104 extern Lisp_Object Qmnemonic, Qno_ascii_cntl, Qno_ascii_eol;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3105 extern Lisp_Object Qno_conversion, Qraw_text;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3106 extern Lisp_Object Qno_iso6429, Qoutput_charset_conversion;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3107 extern Lisp_Object Qpost_read_conversion, Qpre_write_conversion, Qseven;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3108 extern Lisp_Object Qshort, Vcoding_system_for_read;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3109 extern Lisp_Object Vcoding_system_for_write;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3110 extern Lisp_Object Vfile_name_coding_system, Vkeyboard_coding_system;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3111 extern Lisp_Object Vterminal_coding_system;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3112 extern Lisp_Object Qcanonicalize_after_coding;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3113 void init_charset_unicode_tables (Lisp_Object charset);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3114 void free_charset_unicode_tables (Lisp_Object charset);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3115 void recalculate_unicode_precedence (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3116 int coding_system_is_for_text_file (Lisp_Object coding_system);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3117 Lisp_Object find_coding_system_for_text_file (Lisp_Object name, int eol_wrap);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3118 Lisp_Object get_coding_system_for_text_file (Lisp_Object name, int eol_wrap);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3119 int coding_system_is_binary (Lisp_Object coding_system);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3120
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3121
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3122 /* Defined in fileio.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3123 void record_auto_save (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3124 void force_auto_save_soon (void);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3125 DECLARE_DOESNT_RETURN (report_error_with_errno (Lisp_Object errtype,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3126 const CIntbyte *string,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3127 Lisp_Object data));
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3128 DECLARE_DOESNT_RETURN (report_file_type_error (Lisp_Object errtype,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3129 Lisp_Object oserrmess,
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3130 const CIntbyte *string,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3131 Lisp_Object data));
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3132 DECLARE_DOESNT_RETURN (report_file_error (const CIntbyte *, Lisp_Object));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3133 Lisp_Object lisp_strerror (int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3134 Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3135 int internal_delete_file (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3136
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3137 /* Defined in filelock.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3138 void lock_file (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3139 void unlock_file (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3140 void unlock_all_files (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3141 void unlock_buffer (struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3142
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3143 /* Defined in filemode.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3144 void filemodestring (struct stat *, char *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3145
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3146 /* Defined in floatfns.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3147 double extract_float (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3148
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3149 /* Defined in fns.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3150 Lisp_Object list_sort (Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3151 int (*) (Lisp_Object, Lisp_Object, Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3152 Lisp_Object merge (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3153
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3154 void bump_string_modiff (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3155 Lisp_Object memq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3156 Lisp_Object assoc_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3157 Lisp_Object assq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3158 Lisp_Object rassq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3159 Lisp_Object delq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3160 Lisp_Object delq_no_quit_and_free_cons (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3161 Lisp_Object remassoc_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3162 Lisp_Object remassq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3163 Lisp_Object remrassq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3164
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3165 int plists_differ (Lisp_Object, Lisp_Object, int, int, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3166 Lisp_Object internal_plist_get (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3167 void internal_plist_put (Lisp_Object *, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3168 int internal_remprop (Lisp_Object *, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3169 Lisp_Object external_plist_get (Lisp_Object *, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3170 int, Error_Behavior);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3171 void external_plist_put (Lisp_Object *, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3172 Lisp_Object, int, Error_Behavior);
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3173 int external_remprop (Lisp_Object *, Lisp_Object, int, Error_Behavior);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3174 int internal_equal (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3175 Lisp_Object concat2 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3176 Lisp_Object concat3 (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3177 Lisp_Object vconcat2 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3178 Lisp_Object vconcat3 (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3179 Lisp_Object nconc2 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3180 Lisp_Object bytecode_nconc2 (Lisp_Object *);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3181 void check_losing_bytecode (const char *, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3182
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3183 Lisp_Object add_suffix_to_symbol (Lisp_Object symbol,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3184 const Char_ASCII *ascii_string);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3185 Lisp_Object add_prefix_to_symbol (const Char_ASCII *ascii_string,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3186 Lisp_Object symbol);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3187
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3188 /* Defined in glyphs.c */
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3189 Error_Behavior decode_error_behavior_flag (Lisp_Object);
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3190 Lisp_Object encode_error_behavior_flag (Error_Behavior);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3191
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3192 /* Defined in glyphs-shared.c */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3193 void shared_resource_validate (Lisp_Object instantiator);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3194 Lisp_Object shared_resource_normalize (Lisp_Object inst,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3195 Lisp_Object console_type,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3196 Lisp_Object dest_mask,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3197 Lisp_Object tag);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3198 extern Lisp_Object Q_resource_type, Q_resource_id;
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3199
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3200 /* Defined in gui.c */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3201 DECLARE_DOESNT_RETURN (gui_error (const char *reason,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3202 Lisp_Object frob));
569
9cdcb214753f [xemacs-hg @ 2001-05-24 12:20:33 by yoshiki]
yoshiki
parents: 563
diff changeset
3203 DECLARE_DOESNT_RETURN (gui_error_2 (const char *reason,
9cdcb214753f [xemacs-hg @ 2001-05-24 12:20:33 by yoshiki]
yoshiki
parents: 563
diff changeset
3204 Lisp_Object frob0, Lisp_Object frob1));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3205 /* Defined in indent.c */
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3206 int bi_spaces_at_point (struct buffer *, Bytebpos);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3207 int column_at_point (struct buffer *, Charbpos, int);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3208 int string_column_at_point (Lisp_String *, Charbpos, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3209 int current_column (struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3210 void invalidate_current_column (void);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3211 Charbpos vmotion (struct window *, Charbpos, int, int *);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3212 Charbpos vmotion_pixels (Lisp_Object, Charbpos, int, int, int *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3213
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3214 /* Defined in insdel.c */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3215 void set_buffer_point (struct buffer *buf, Charbpos pos, Bytebpos bipos);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3216
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3217 /* Defined in intl-win32.c */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3218 EXFUN (Fmswindows_set_current_locale, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3219 EXFUN (Fmswindows_current_locale, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3220 EXFUN (Fmswindows_user_default_locale, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3221 EXFUN (Fmswindows_system_default_locale, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3222 EXFUN (Fmswindows_locale_code_page, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3223 EXFUN (Fmswindows_supported_locales, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3224 EXFUN (Fmswindows_charset_code_page, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3225 EXFUN (Fmswindows_set_charset_code_page, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3226
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3227 extern Lisp_Object Qmswindows_tstr, Qmswindows_unicode;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3228 extern Lisp_Object Qmswindows_multibyte, Qmswindows_multibyte_to_unicode;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3229
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3230 /* Defined in keymap.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3231 void where_is_to_char (Lisp_Object, char *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3232
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3233 /* Defined in lread.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3234 void ebolify_bytecode_constants (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3235 void close_load_descs (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3236 int locate_file (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object *, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3237 EXFUN (Flocate_file_clear_hashing, 1);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3238 int isfloat_string (const char *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3239
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3240 /* Well, I've decided to enable this. -- ben */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3241 /* And I've decided to make it work right. -- sb */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3242 #define LOADHIST
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3243 /* Define the following symbol to enable load history of dumped files */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3244 #define LOADHIST_DUMPED
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3245 /* Define the following symbol to enable load history of C source */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3246 #define LOADHIST_BUILTIN
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3247
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3248 #ifdef LOADHIST /* this is just a stupid idea */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3249 #define LOADHIST_ATTACH(x) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3250 do { if (initialized) Vcurrent_load_list = Fcons (x, Vcurrent_load_list); } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3251 while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3252 #else /*! LOADHIST */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3253 # define LOADHIST_ATTACH(x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3254 #endif /*! LOADHIST */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3255
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3256 /* Defined in marker.c */
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3257 Bytebpos bi_marker_position (Lisp_Object);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3258 Charbpos marker_position (Lisp_Object);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3259 void set_bi_marker_position (Lisp_Object, Bytebpos);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3260 void set_marker_position (Lisp_Object, Charbpos);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3261 void unchain_marker (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3262 Lisp_Object noseeum_copy_marker (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3263 Lisp_Object set_marker_restricted (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3264 #ifdef MEMORY_USAGE_STATS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3265 int compute_buffer_marker_usage (struct buffer *, struct overhead_stats *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3266 #endif
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3267 void init_buffer_markers (struct buffer *b);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3268 void uninit_buffer_markers (struct buffer *b);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3269
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3270 /* Defined in menubar.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3271 extern int popup_menu_up_p;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3272 extern int menubar_show_keybindings;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3273 extern int popup_menu_titles;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3274
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3275 /* Defined in minibuf.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3276 extern int minibuf_level;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3277 Charcount scmp_1 (const Intbyte *, const Intbyte *, Charcount, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3278 #define scmp(s1, s2, len) scmp_1 (s1, s2, len, completion_ignore_case)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3279 extern int completion_ignore_case;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3280 int regexp_ignore_completion_p (const Intbyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3281 Bytecount, Bytecount);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3282 Lisp_Object clear_echo_area (struct frame *, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3283 Lisp_Object clear_echo_area_from_print (struct frame *, Lisp_Object, int);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3284 void echo_area_append (struct frame *, const Intbyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3285 Bytecount, Bytecount, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3286 void echo_area_message (struct frame *, const Intbyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3287 Bytecount, Bytecount, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3288 Lisp_Object echo_area_status (struct frame *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3289 int echo_area_active (struct frame *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3290 Lisp_Object echo_area_contents (struct frame *);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3291 void message_internal (const Intbyte *, Lisp_Object, Bytecount, Bytecount);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3292 void message_append_internal (const Intbyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3293 Bytecount, Bytecount);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3294 void message (const char *, ...) PRINTF_ARGS (1, 2);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3295 void message_append (const char *, ...) PRINTF_ARGS (1, 2);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3296 void message_no_translate (const char *, ...) PRINTF_ARGS (1, 2);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3297 void clear_message (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3298
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3299 /* Defined in mule-charset.c */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3300 extern Lisp_Object Ql2r, Qr2l;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3301
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3302 /* Defined in print.c */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3303
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3304 /* Lower-level ways to output data: */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3305 void print_internal (Lisp_Object, Lisp_Object, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3306 void debug_print (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3307 /* NOTE: Do not call this with the data of a Lisp_String. Use princ.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3308 * Note: stream should be defaulted before calling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3309 * (eg Qnil means stdout, not Vstandard_output, etc) */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3310 void write_c_string (const CIntbyte *str, Lisp_Object stream);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3311 /* Same goes for this function. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3312 void write_string (const Intbyte *str, Lisp_Object stream);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3313 /* Same goes for this function. */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3314 void write_string_1 (const Intbyte *str, Bytecount size, Lisp_Object stream);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3315
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3316 /* Higher-level (printf-style) ways to output data: */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3317 void write_fmt_string (Lisp_Object stream, const CIntbyte *fmt, ...);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3318 void write_fmt_string_lisp (Lisp_Object stream, const CIntbyte *fmt,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3319 int nargs, ...);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3320 void stderr_out (const CIntbyte *, ...) PRINTF_ARGS (1, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3321 void stderr_out_lisp (const CIntbyte *, int nargs, ...);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3322 void stdout_out (const CIntbyte *, ...) PRINTF_ARGS (1, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3323 void debug_out (const CIntbyte *, ...) PRINTF_ARGS (1, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3324 DECLARE_DOESNT_RETURN_GCC_ATTRIBUTE_SYNTAX_SUCKS (fatal (const CIntbyte *,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3325 ...), 1, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3326
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3327 /* Internal functions: */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3328 void temp_output_buffer_setup (Lisp_Object);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3329 void temp_output_buffer_show (Lisp_Object, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3330 void print_cons (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3331 void print_vector (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3332 void print_string (Lisp_Object, Lisp_Object, int);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3333 void print_symbol (Lisp_Object, Lisp_Object, int);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3334 void print_float (Lisp_Object, Lisp_Object, int);
603
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
3335 /* The number of bytes required to store the decimal printed
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
3336 representation of an integral type. Add a few bytes for truncation,
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
3337 optional sign prefix, and null byte terminator.
614
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
3338 2.40824 == log (256) / log (10).
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
3339
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
3340 We don't use floating point since Sun cc (buggily?) cannot use
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
3341 floating point computations to define a compile-time integral
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
3342 constant. */
603
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
3343 #define DECIMAL_PRINT_SIZE(integral_type) \
614
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
3344 (((2410824 * sizeof (integral_type)) / 1000000) + 3)
577
910449c92002 [xemacs-hg @ 2001-05-25 10:04:26 by hrvojen]
hrvojen
parents: 569
diff changeset
3345 void long_to_string (char *, long);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3346 extern int print_escape_newlines;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3347 extern int print_readably;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3348 Lisp_Object internal_with_output_to_temp_buffer (Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3349 Lisp_Object (*) (Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3350 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3351 void float_to_string (char *, double);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3352 void internal_object_printer (Lisp_Object, Lisp_Object, int);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3353 void debug_short_backtrace (int);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3354 void debug_backtrace (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3355
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3356 /* Defined in process.c */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3357 DECLARE_DOESNT_RETURN (report_process_error (const char *, Lisp_Object));
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3358 DECLARE_DOESNT_RETURN (report_network_error (const char *, Lisp_Object));
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3359
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3360 /* Defined in profile.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3361 void mark_profiling_info (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3362 void profile_increase_call_count (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3363 extern int profiling_active;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3364 extern int profiling_redisplay_flag;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3365
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3366 /* Defined in rangetab.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3367 void put_range_table (Lisp_Object, EMACS_INT, EMACS_INT, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3368 int unified_range_table_bytes_needed (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3369 int unified_range_table_bytes_used (void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3370 void unified_range_table_copy_data (Lisp_Object, void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3371 Lisp_Object unified_range_table_lookup (void *, EMACS_INT, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3372 int unified_range_table_nentries (void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3373 void unified_range_table_get_range (void *, int, EMACS_INT *, EMACS_INT *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3374 Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3375
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3376 /* Defined in search.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3377 struct re_pattern_buffer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3378 struct re_registers;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3379 Charbpos scan_buffer (struct buffer *, Emchar, Charbpos, Charbpos, EMACS_INT, EMACS_INT *, int);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3380 Charbpos find_next_newline (struct buffer *, Charbpos, int);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3381 Charbpos find_next_newline_no_quit (struct buffer *, Charbpos, int);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3382 Bytebpos bi_find_next_newline_no_quit (struct buffer *, Bytebpos, int);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3383 Bytebpos bi_find_next_emchar_in_string (Lisp_String*, Emchar, Bytebpos, EMACS_INT);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3384 Charbpos find_before_next_newline (struct buffer *, Charbpos, Charbpos, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3385 struct re_pattern_buffer *compile_pattern (Lisp_Object, struct re_registers *,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3386 Lisp_Object, int, Error_Behavior);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3387 Bytecount fast_string_match (Lisp_Object, const Intbyte *,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3388 Lisp_Object, Bytecount,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3389 Bytecount, int, Error_Behavior, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3390 Bytecount fast_lisp_string_match (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3391 void restore_match_data (void);
507
167135c7a7ae [xemacs-hg @ 2001-05-05 10:10:36 by martinb]
martinb
parents: 502
diff changeset
3392 extern Fixnum warn_about_possibly_incompatible_back_references;
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 490
diff changeset
3393
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3394
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3395 /* Defined in signal.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3396 void init_interrupts_late (void);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3397 int begin_dont_check_for_quit (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3398
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3399 /* Defined in sound.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3400 void init_device_sound (struct device *);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3401 DECLARE_DOESNT_RETURN (report_sound_error (const Char_ASCII *, Lisp_Object));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3402
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3403 /* Defined in specifier.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3404 Lisp_Object specifier_instance (Lisp_Object, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3405 Error_Behavior, int, int, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3406 Lisp_Object specifier_instance_no_quit (Lisp_Object, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3407 Error_Behavior, int, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3408
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3409 /* Defined in symbols.c */
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3410 unsigned int hash_string (const Intbyte *, Bytecount);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3411 Lisp_Object intern_int (const Intbyte *str);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3412 Lisp_Object intern (const CIntbyte *str);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3413 Lisp_Object oblookup (Lisp_Object, const Intbyte *, Bytecount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3414 void map_obarray (Lisp_Object, int (*) (Lisp_Object, void *), void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3415 Lisp_Object indirect_function (Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3416 Lisp_Object symbol_value_in_buffer (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3417 void kill_buffer_local_variables (struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3418 int symbol_value_buffer_local_info (Lisp_Object, struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3419 Lisp_Object find_symbol_value (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3420 Lisp_Object find_symbol_value_quickly (Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3421 Lisp_Object top_level_value (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3422 void reject_constant_symbols (Lisp_Object sym, Lisp_Object newval,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3423 int function_p,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3424 Lisp_Object follow_past_lisp_magic);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3425
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3426 /* Defined in syntax.c */
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3427 Charbpos scan_words (struct buffer *, Charbpos, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3428
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3429 /* Defined in sysdep.c */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3430 long get_random (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3431 void seed_random (long arg);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3432
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3433 /* Defined in text.c */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3434 void find_charsets_in_intbyte_string (unsigned char *charsets,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3435 const Intbyte *str,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3436 Bytecount len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3437 void find_charsets_in_emchar_string (unsigned char *charsets,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3438 const Emchar *str,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3439 Charcount len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3440 int intbyte_string_displayed_columns (const Intbyte *str, Bytecount len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3441 int emchar_string_displayed_columns (const Emchar *str, Charcount len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3442 Charcount intbyte_string_nonascii_chars (const Intbyte *str, Bytecount len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3443 void convert_intbyte_string_into_emchar_dynarr (const Intbyte *str,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3444 Bytecount len,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3445 Emchar_dynarr *dyn);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3446 Charcount convert_intbyte_string_into_emchar_string (const Intbyte *str,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3447 Bytecount len,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3448 Emchar *arr);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3449 void convert_emchar_string_into_intbyte_dynarr (Emchar *arr, int nels,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3450 Intbyte_dynarr *dyn);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3451 Intbyte *convert_emchar_string_into_malloced_string (Emchar *arr, int nels,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3452 Bytecount *len_out);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3453
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3454 /* flags for get_buffer_pos_char(), get_buffer_range_char(), etc. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3455 /* At most one of GB_COERCE_RANGE and GB_NO_ERROR_IF_BAD should be
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3456 specified. At most one of GB_NEGATIVE_FROM_END and GB_NO_ERROR_IF_BAD
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3457 should be specified. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3458
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3459 #define GB_ALLOW_PAST_ACCESSIBLE (1 << 0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3460 #define GB_ALLOW_NIL (1 << 1)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3461 #define GB_CHECK_ORDER (1 << 2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3462 #define GB_COERCE_RANGE (1 << 3)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3463 #define GB_NO_ERROR_IF_BAD (1 << 4)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3464 #define GB_NEGATIVE_FROM_END (1 << 5)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3465 #define GB_HISTORICAL_STRING_BEHAVIOR (GB_NEGATIVE_FROM_END | GB_ALLOW_NIL)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3466
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3467 Charbpos get_buffer_pos_char (struct buffer *b, Lisp_Object pos,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3468 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3469 Bytebpos get_buffer_pos_byte (struct buffer *b, Lisp_Object pos,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3470 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3471 void get_buffer_range_char (struct buffer *b, Lisp_Object from, Lisp_Object to,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3472 Charbpos *from_out, Charbpos *to_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3473 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3474 void get_buffer_range_byte (struct buffer *b, Lisp_Object from, Lisp_Object to,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3475 Bytebpos *from_out, Bytebpos *to_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3476 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3477 Charcount get_string_pos_char (Lisp_Object string, Lisp_Object pos,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3478 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3479 Bytecount get_string_pos_byte (Lisp_Object string, Lisp_Object pos,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3480 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3481 void get_string_range_char (Lisp_Object string, Lisp_Object from,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3482 Lisp_Object to, Charcount *from_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3483 Charcount *to_out, unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3484 void get_string_range_byte (Lisp_Object string, Lisp_Object from,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3485 Lisp_Object to, Bytecount *from_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3486 Bytecount *to_out, unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3487 Charbpos get_buffer_or_string_pos_char (Lisp_Object object, Lisp_Object pos,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3488 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3489 Bytebpos get_buffer_or_string_pos_byte (Lisp_Object object, Lisp_Object pos,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3490 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3491 void get_buffer_or_string_range_char (Lisp_Object object, Lisp_Object from,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3492 Lisp_Object to, Charbpos *from_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3493 Charbpos *to_out, unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3494 void get_buffer_or_string_range_byte (Lisp_Object object, Lisp_Object from,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3495 Lisp_Object to, Bytebpos *from_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3496 Bytebpos *to_out, unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3497 Charbpos buffer_or_string_accessible_begin_char (Lisp_Object object);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3498 Charbpos buffer_or_string_accessible_end_char (Lisp_Object object);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3499 Bytebpos buffer_or_string_accessible_begin_byte (Lisp_Object object);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3500 Bytebpos buffer_or_string_accessible_end_byte (Lisp_Object object);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3501 Charbpos buffer_or_string_absolute_begin_char (Lisp_Object object);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3502 Charbpos buffer_or_string_absolute_end_char (Lisp_Object object);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3503 Bytebpos buffer_or_string_absolute_begin_byte (Lisp_Object object);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3504 Bytebpos buffer_or_string_absolute_end_byte (Lisp_Object object);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3505
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3506 #ifdef ENABLE_COMPOSITE_CHARS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3507
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3508 Emchar lookup_composite_char (Intbyte *str, int len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3509 Lisp_Object composite_char_string (Emchar ch);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3510 #endif /* ENABLE_COMPOSITE_CHARS */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3511
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3512 EXFUN (Ffind_charset, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3513 EXFUN (Fget_charset, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3514 EXFUN (Fcharset_list, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3515
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3516 extern Lisp_Object Vcharset_ascii;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3517 extern Lisp_Object Vcharset_control_1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3518 extern Lisp_Object Vcharset_latin_iso8859_1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3519 extern Lisp_Object Vcharset_latin_iso8859_2;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3520 extern Lisp_Object Vcharset_latin_iso8859_3;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3521 extern Lisp_Object Vcharset_latin_iso8859_4;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3522 extern Lisp_Object Vcharset_thai_tis620;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3523 extern Lisp_Object Vcharset_greek_iso8859_7;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3524 extern Lisp_Object Vcharset_arabic_iso8859_6;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3525 extern Lisp_Object Vcharset_hebrew_iso8859_8;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3526 extern Lisp_Object Vcharset_katakana_jisx0201;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3527 extern Lisp_Object Vcharset_latin_jisx0201;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3528 extern Lisp_Object Vcharset_cyrillic_iso8859_5;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3529 extern Lisp_Object Vcharset_latin_iso8859_9;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3530 extern Lisp_Object Vcharset_japanese_jisx0208_1978;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3531 extern Lisp_Object Vcharset_chinese_gb2312;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3532 extern Lisp_Object Vcharset_japanese_jisx0208;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3533 extern Lisp_Object Vcharset_korean_ksc5601;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3534 extern Lisp_Object Vcharset_japanese_jisx0212;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3535 extern Lisp_Object Vcharset_chinese_cns11643_1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3536 extern Lisp_Object Vcharset_chinese_cns11643_2;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3537 extern Lisp_Object Vcharset_chinese_big5_1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3538 extern Lisp_Object Vcharset_chinese_big5_2;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3539 extern Lisp_Object Vcharset_composite;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3540
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3541 Emchar Lstream_get_emchar_1 (Lstream *stream, int first_char);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3542 int Lstream_fput_emchar (Lstream *stream, Emchar ch);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3543 void Lstream_funget_emchar (Lstream *stream, Emchar ch);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3544
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3545 DECLARE_INLINE_HEADER (Intbyte *qxestrdup (const Intbyte *s))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3546 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3547 return (Intbyte *) xstrdup ((const char *) s);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3548 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3549
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3550 DECLARE_INLINE_HEADER (Bytecount qxestrlen (const Intbyte *s))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3551 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3552 return strlen ((const char *) s);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3553 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3554
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3555 DECLARE_INLINE_HEADER (Charcount qxestrcharlen (const Intbyte *s))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3556 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3557 return bytecount_to_charcount (s, qxestrlen (s));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3558 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3559
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3560 DECLARE_INLINE_HEADER (int qxestrcmp (const Intbyte *s1,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3561 const Intbyte *s2))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3562 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3563 return strcmp ((const char *) s1, (const char *) s2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3564 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3565
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3566 DECLARE_INLINE_HEADER (int qxestrcmp_c (const Intbyte *s1,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3567 const char *s2))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3568 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3569 return strcmp ((const char *) s1, s2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3570 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3571
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3572 DECLARE_INLINE_HEADER (int qxestrncmp (const Intbyte *string1,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3573 const Intbyte *string2,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3574 Bytecount count))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3575 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3576 return strncmp ((const char *) string1, (const char *) string2,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3577 (size_t) count);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3578 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3579
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3580 DECLARE_INLINE_HEADER (int qxestrncmp_c (const Intbyte *string1,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3581 const char *string2,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3582 Bytecount count))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3583 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3584 return strncmp ((const char *) string1, string2, (size_t) count);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3585 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3586
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3587 DECLARE_INLINE_HEADER (Intbyte *qxestrcpy (Intbyte *strDest,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3588 const Intbyte *strSource))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3589 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3590 return (Intbyte *) strcpy ((char *) strDest, (const char *) strSource);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3591 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3592
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3593 DECLARE_INLINE_HEADER (Intbyte *qxestrcpy_c (Intbyte *strDest,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3594 const char *strSource))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3595 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3596 return (Intbyte *) strcpy ((char *) strDest, strSource);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3597 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3598
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3599 DECLARE_INLINE_HEADER (Intbyte *qxestrncpy (Intbyte *strDest,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3600 const Intbyte *strSource,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3601 Bytecount count))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3602 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3603 return (Intbyte *) strncpy ((char *) strDest, (const char *) strSource,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3604 (size_t) count);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3605 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3606
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3607 DECLARE_INLINE_HEADER (Intbyte *qxestrncpy_c (Intbyte *strDest,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3608 const char *strSource,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3609 Bytecount count))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3610 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3611 return (Intbyte *) strncpy ((char *) strDest, strSource, (size_t) count);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3612 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3613
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3614 DECLARE_INLINE_HEADER (Intbyte *qxestrcat (Intbyte *strDest,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3615 const Intbyte *strSource))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3616 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3617 return (Intbyte *) strcat ((char *) strDest, (const char *) strSource);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3618 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3619
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3620 DECLARE_INLINE_HEADER (Intbyte *qxestrcat_c (Intbyte *strDest,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3621 const char *strSource))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3622 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3623 return (Intbyte *) strcat ((char *) strDest, strSource);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3624 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3625
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3626 DECLARE_INLINE_HEADER (Intbyte *qxestrncat (Intbyte *strDest,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3627 const Intbyte *strSource,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3628 Bytecount count))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3629 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3630 return (Intbyte *) strncat ((char *) strDest, (const char *) strSource,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3631 (size_t) count);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3632 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3633
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3634 DECLARE_INLINE_HEADER (Intbyte *qxestrncat_c (Intbyte *strDest,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3635 const char *strSource,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3636 Bytecount count))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3637 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3638 return (Intbyte *) strncat ((char *) strDest, strSource, (size_t) count);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3639 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3640
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3641 DECLARE_INLINE_HEADER (Intbyte *qxestrchr (const Intbyte *s, Emchar c))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3642 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3643 assert (c >= 0 && c <= 255);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3644 return (Intbyte *) strchr ((const char *) s, c);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3645 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3646
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3647 DECLARE_INLINE_HEADER (Intbyte *qxestrrchr (const Intbyte *s, Emchar c))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3648 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3649 assert (c >= 0 && c <= 255);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3650 return (Intbyte *) strrchr ((const char *) s, c);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3651 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3652
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3653 DECLARE_INLINE_HEADER (Intbyte *qxestrstr (const Intbyte *string1,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3654 const Intbyte *string2))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3655 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3656 return (Intbyte *) strstr ((const char *) string1, (const char *) string2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3657 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3658
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3659 DECLARE_INLINE_HEADER (Bytecount qxestrcspn (const Intbyte *string,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3660 const CIntbyte *strCharSet))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3661 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3662 return (Bytecount) strcspn ((const char *) string, strCharSet);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3663 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3664
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3665 DECLARE_INLINE_HEADER (Bytecount qxestrspn (const Intbyte *string,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3666 const CIntbyte *strCharSet))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3667 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3668 return (Bytecount) strspn ((const char *) string, strCharSet);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3669 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3670
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3671 DECLARE_INLINE_HEADER (Intbyte *qxestrpbrk (const Intbyte *string,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3672 const CIntbyte *strCharSet))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3673 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3674 return (Intbyte *) strpbrk ((const char *) string, strCharSet);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3675 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3676
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3677 DECLARE_INLINE_HEADER (Intbyte *qxestrtok (Intbyte *strToken,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3678 const CIntbyte *strDelimit))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3679 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3680 return (Intbyte *) strtok ((char *) strToken, strDelimit);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3681 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3682
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3683 DECLARE_INLINE_HEADER (double qxestrtod (const Intbyte *nptr,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3684 Intbyte **endptr))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3685 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3686 return strtod ((const char *) nptr, (char **) endptr);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3687 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3688
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3689 DECLARE_INLINE_HEADER (long qxestrtol (const Intbyte *nptr, Intbyte **endptr,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3690 int base))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3691 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3692 return strtol ((const char *) nptr, (char **) endptr, base);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3693 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3694
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3695 DECLARE_INLINE_HEADER (unsigned long qxestrtoul (const Intbyte *nptr,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3696 Intbyte **endptr,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3697 int base))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3698 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3699 return strtoul ((const char *) nptr, (char **) endptr, base);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3700 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3701
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3702 DECLARE_INLINE_HEADER (int qxeatoi (const Intbyte *string))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3703 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3704 return atoi ((const char *) string);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3705 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3706
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3707 int qxesprintf (Intbyte *buffer, const CIntbyte *format, ...)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3708 PRINTF_ARGS (2, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3709
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3710 /* Do not use POSIX locale routines. Not Mule-correct. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3711 #define qxestrcoll DO NOT USE.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3712 #define qxestrxfrm DO NOT USE.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3713
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3714 int qxestrcasecmp (const Intbyte *s1, const Intbyte *s2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3715 int qxestrcasecmp_c (const Intbyte *s1, const Char_ASCII *s2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3716 int qxestrcasecmp_i18n (const Intbyte *s1, const Intbyte *s2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3717 int ascii_strcasecmp (const Char_ASCII *s1, const Char_ASCII *s2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3718 int lisp_strcasecmp (Lisp_Object s1, Lisp_Object s2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3719 int lisp_strcasecmp_i18n (Lisp_Object s1, Lisp_Object s2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3720 int qxestrncasecmp (const Intbyte *s1, const Intbyte *s2, Bytecount len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3721 int qxestrncasecmp_c (const Intbyte *s1, const Char_ASCII *s2, Bytecount len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3722 int qxestrncasecmp_i18n (const Intbyte *s1, const Intbyte *s2, Bytecount len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3723 int ascii_strncasecmp (const Char_ASCII *s1, const Char_ASCII *s2,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3724 Bytecount len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3725 int qxememcmp (const Intbyte *s1, const Intbyte *s2, Bytecount len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3726 int qxememcasecmp (const Intbyte *s1, const Intbyte *s2, Bytecount len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3727 int qxememcasecmp_i18n (const Intbyte *s1, const Intbyte *s2, Bytecount len);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3728
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3729 void buffer_mule_signal_inserted_region (struct buffer *buf, Charbpos start,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3730 Bytecount bytelength,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3731 Charcount charlength);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3732 void buffer_mule_signal_deleted_region (struct buffer *buf, Charbpos start,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3733 Charbpos end, Bytebpos bi_start,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3734 Bytebpos bi_end);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3735
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3736 /* Defined in unicode.c */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3737 extern const struct struct_description to_unicode_description[];
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3738 extern const struct struct_description from_unicode_description[];
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3739 void init_charset_unicode_tables (Lisp_Object charset);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3740 void free_charset_unicode_tables (Lisp_Object charset);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3741 void recalculate_unicode_precedence (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3742 extern Lisp_Object Qunicode;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3743 extern Lisp_Object Qutf_16, Qutf_8, Qucs_4, Qutf_7;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3744 #ifdef MEMORY_USAGE_STATS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3745 Bytecount compute_from_unicode_table_size (Lisp_Object charset,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3746 struct overhead_stats *stats);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3747 Bytecount compute_to_unicode_table_size (Lisp_Object charset,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3748 struct overhead_stats *stats);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3749 #endif /* MEMORY_USAGE_STATS */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3750
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3751 /* Defined in undo.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3752 Lisp_Object truncate_undo_list (Lisp_Object, int, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3753 void record_extent (Lisp_Object, int);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3754 void record_insert (struct buffer *, Charbpos, Charcount);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3755 void record_delete (struct buffer *, Charbpos, Charcount);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3756 void record_change (struct buffer *, Charbpos, Charcount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3757
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3758 /* Defined in unex*.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3759 int unexec (char *, char *, uintptr_t, uintptr_t, uintptr_t);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3760 #ifdef RUN_TIME_REMAP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3761 int run_time_remap (char *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3762 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3763
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3764 /* Defined in vm-limit.c */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3765 void memory_warnings (void *, void (*) (const char *));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3766
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3767 /* Defined in window.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3768 Lisp_Object save_window_excursion_unwind (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3769 Lisp_Object display_buffer (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3770
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3771 /*--------------- prototypes for Lisp primitives in C ------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3772
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3773 /* The following were machine generated 19980312 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3774
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3775 EXFUN (Faccept_process_output, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3776 EXFUN (Fadd1, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3777 EXFUN (Fadd_spec_to_specifier, 5);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3778 EXFUN (Fadd_timeout, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3779 EXFUN (Fappend, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3780 EXFUN (Fapply, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3781 EXFUN (Faref, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3782 EXFUN (Faset, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3783 EXFUN (Fassoc, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3784 EXFUN (Fassq, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3785 EXFUN (Fbacktrace, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3786 EXFUN (Fbeginning_of_line, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3787 EXFUN (Fbobp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3788 EXFUN (Fbolp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3789 EXFUN (Fboundp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3790 EXFUN (Fbuffer_substring, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3791 EXFUN (Fbuilt_in_variable_type, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3792 EXFUN (Fbyte_code, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3793 EXFUN (Fcall_interactively, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3794 EXFUN (Fcanonicalize_lax_plist, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3795 EXFUN (Fcanonicalize_plist, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3796 EXFUN (Fcar, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3797 EXFUN (Fcar_safe, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3798 EXFUN (Fcdr, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3799 EXFUN (Fchar_after, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3800 EXFUN (Fchar_to_string, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3801 EXFUN (Fcheck_valid_plist, 1);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3802 EXFUN (Fvalid_plist_p, 1);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3803 EXFUN (Fclear_range_table, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3804 EXFUN (Fcommand_execute, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3805 EXFUN (Fcommandp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3806 EXFUN (Fconcat, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3807 EXFUN (Fcons, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3808 EXFUN (Fcopy_alist, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3809 EXFUN (Fcopy_event, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3810 EXFUN (Fcopy_list, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3811 EXFUN (Fcopy_marker, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3812 EXFUN (Fcopy_sequence, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3813 EXFUN (Fcopy_tree, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3814 EXFUN (Fcurrent_window_configuration, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3815 EXFUN (Fdefault_boundp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3816 EXFUN (Fdefault_value, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3817 EXFUN (Fdefine_key, 3);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3818 EXFUN (Fdelete, 2);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3819 EXFUN (Fdelete_region, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3820 EXFUN (Fdelete_process, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3821 EXFUN (Fdelq, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3822 EXFUN (Fdestructive_alist_to_plist, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3823 EXFUN (Fdgettext, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3824 EXFUN (Fding, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3825 EXFUN (Fdirectory_file_name, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3826 EXFUN (Fdisable_timeout, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3827 EXFUN (Fdiscard_input, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3828 EXFUN (Fdispatch_event, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3829 EXFUN (Fdisplay_error, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3830 EXFUN (Fdo_auto_save, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3831 EXFUN (Fdowncase, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3832 EXFUN (Felt, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3833 EXFUN (Fend_of_line, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3834 EXFUN (Fenqueue_eval_event, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3835 EXFUN (Feobp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3836 EXFUN (Feolp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3837 EXFUN (Fequal, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3838 EXFUN (Ferror_message_string, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3839 EXFUN (Feval, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3840 EXFUN (Fevent_to_character, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3841 EXFUN (Fexecute_kbd_macro, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3842 EXFUN (Fexpand_abbrev, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3843 EXFUN (Fexpand_file_name, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3844 EXFUN (Fextent_at, 5);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3845 EXFUN (Fextent_property, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3846 EXFUN (Ffboundp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3847 EXFUN (Ffile_accessible_directory_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3848 EXFUN (Ffile_directory_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3849 EXFUN (Ffile_executable_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3850 EXFUN (Ffile_exists_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3851 EXFUN (Ffile_name_absolute_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3852 EXFUN (Ffile_name_as_directory, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3853 EXFUN (Ffile_name_directory, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3854 EXFUN (Ffile_name_nondirectory, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3855 EXFUN (Ffile_readable_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3856 EXFUN (Ffile_symlink_p, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3857 EXFUN (Ffile_truename, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3858 EXFUN (Ffind_file_name_handler, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3859 EXFUN (Ffollowing_char, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3860 EXFUN (Fformat, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3861 EXFUN (Fforward_char, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3862 EXFUN (Fforward_line, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3863 EXFUN (Ffset, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3864 EXFUN (Ffuncall, MANY);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3865 EXFUN (Ffunctionp, 1);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3866 EXFUN (Fgeq, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3867 EXFUN (Fget, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3868 EXFUN (Fget_buffer_process, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3869 EXFUN (Fget_process, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3870 EXFUN (Fget_range_table, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3871 EXFUN (Fgettext, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3872 EXFUN (Fgoto_char, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3873 EXFUN (Fgtr, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3874 EXFUN (Findent_to, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3875 EXFUN (Findirect_function, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3876 EXFUN (Finsert, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3877 EXFUN (Finsert_buffer_substring, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3878 EXFUN (Finsert_char, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3879 EXFUN (Finsert_file_contents_internal, 7);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3880 EXFUN (Finteractive_p, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3881 EXFUN (Fintern, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3882 EXFUN (Fintern_soft, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3883 EXFUN (Fkey_description, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3884 EXFUN (Fkill_emacs, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3885 EXFUN (Fkill_local_variable, 1);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3886 EXFUN (Flast, 2);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3887 EXFUN (Flax_plist_get, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3888 EXFUN (Flax_plist_remprop, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3889 EXFUN (Flength, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3890 EXFUN (Fleq, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3891 EXFUN (Flist, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3892 EXFUN (Flistp, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3893 EXFUN (Flist_modules, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3894 EXFUN (Fload_module, 3);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
3895 EXFUN (Flookup_key, 3);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3896 EXFUN (Flss, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3897 EXFUN (Fmake_byte_code, MANY);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3898 EXFUN (Fmake_charset, 3);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3899 EXFUN (Fmake_glyph_internal, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3900 EXFUN (Fmake_list, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3901 EXFUN (Fmake_marker, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3902 EXFUN (Fmake_range_table, 0);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3903 EXFUN (Fmake_temp_name, 1);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3904 EXFUN (Fmake_sparse_keymap, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3905 EXFUN (Fmake_string, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3906 EXFUN (Fmake_symbol, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3907 EXFUN (Fmake_vector, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3908 EXFUN (Fmapcar, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3909 EXFUN (Fmarker_buffer, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3910 EXFUN (Fmarker_position, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3911 EXFUN (Fmatch_beginning, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3912 EXFUN (Fmatch_end, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3913 EXFUN (Fmax, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3914 EXFUN (Fmember, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3915 EXFUN (Fmemq, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3916 EXFUN (Fmin, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3917 EXFUN (Fminus, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3918 EXFUN (Fnarrow_to_region, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3919 EXFUN (Fnconc, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3920 EXFUN (Fnext_event, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3921 EXFUN (Fnreverse, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3922 EXFUN (Fnthcdr, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3923 EXFUN (Fnumber_to_string, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3924 EXFUN (Fold_assq, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3925 EXFUN (Fold_equal, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3926 EXFUN (Fold_member, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3927 EXFUN (Fold_memq, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3928 EXFUN (Fplist_get, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3929 EXFUN (Fplist_member, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3930 EXFUN (Fplist_put, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3931 EXFUN (Fplus, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3932 EXFUN (Fpoint, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3933 EXFUN (Fpoint_marker, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3934 EXFUN (Fpoint_max, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3935 EXFUN (Fpoint_min, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3936 EXFUN (Fpreceding_char, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3937 EXFUN (Fprefix_numeric_value, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3938 EXFUN (Fprin1, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3939 EXFUN (Fprin1_to_string, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3940 EXFUN (Fprinc, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3941 EXFUN (Fprint, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3942 EXFUN (Fprocess_status, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3943 EXFUN (Fprogn, UNEVALLED);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3944 EXFUN (Fprovide, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3945 EXFUN (Fput, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3946 EXFUN (Fput_range_table, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3947 EXFUN (Fput_text_property, 5);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3948 EXFUN (Fquo, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3949 EXFUN (Frassq, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3950 EXFUN (Fread, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3951 EXFUN (Fread_key_sequence, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3952 EXFUN (Freally_free, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3953 EXFUN (Frem, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3954 EXFUN (Fremassq, 2);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3955 EXFUN (Freplace_list, 2);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3956 EXFUN (Frunning_temacs_p, 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3957 EXFUN (Fselected_frame, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3958 EXFUN (Fset, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3959 EXFUN (Fset_default, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3960 EXFUN (Fset_marker, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3961 EXFUN (Fset_standard_case_table, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3962 EXFUN (Fsetcar, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3963 EXFUN (Fsetcdr, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3964 EXFUN (Fsignal, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3965 EXFUN (Fsit_for, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3966 EXFUN (Fskip_chars_backward, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3967 EXFUN (Fskip_chars_forward, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3968 EXFUN (Fsleep_for, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3969 EXFUN (Fsort, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3970 EXFUN (Fspecifier_spec_list, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3971 EXFUN (Fstring_equal, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3972 EXFUN (Fstring_lessp, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3973 EXFUN (Fstring_match, 4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3974 EXFUN (Fsub1, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3975 EXFUN (Fsubr_max_args, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3976 EXFUN (Fsubr_min_args, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3977 EXFUN (Fsubstitute_command_keys, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3978 EXFUN (Fsubstitute_in_file_name, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3979 EXFUN (Fsubstring, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3980 EXFUN (Fsymbol_function, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3981 EXFUN (Fsymbol_name, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3982 EXFUN (Fsymbol_plist, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3983 EXFUN (Fsymbol_value, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3984 EXFUN (Fsystem_name, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3985 EXFUN (Fthrow, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3986 EXFUN (Ftimes, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3987 EXFUN (Ftruncate, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3988 EXFUN (Fundo_boundary, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3989 EXFUN (Funhandled_file_name_directory, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3990 EXFUN (Funlock_buffer, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3991 EXFUN (Fupcase, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3992 EXFUN (Fupcase_initials, 2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3993 EXFUN (Fupcase_initials_region, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3994 EXFUN (Fupcase_region, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3995 EXFUN (Fuser_home_directory, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3996 EXFUN (Fuser_login_name, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3997 EXFUN (Fvector, MANY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3998 EXFUN (Fverify_visited_file_modtime, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3999 EXFUN (Fvertical_motion, 3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4000 EXFUN (Fwiden, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4001
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4002 /*--------------- prototypes for constant symbols ------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4003
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4004 /* Use the following when you have to add a bunch of symbols. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4005
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4006 /*
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4007
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4008 (defun redo-symbols (beg end)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4009 "Snarf any symbols out of the region and print them into a temporary buffer,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4010 which is displayed when the function finishes. The symbols are laid out with
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4011 `extern Lisp_Object ' before each one, with as many as can fit on one line
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4012 \(the maximum line width is controlled by the constant `max-line-length' in the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4013 code)."
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4014 (interactive "r")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4015 (save-excursion
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4016 (goto-char beg)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4017 (let (syms)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4018 (while (re-search-forward "\\s-\\(Q[A-Za-z_0-9]+\\)" end t)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4019 (push (match-string 1) syms))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4020 (setq syms (sort syms #'string-lessp))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4021 (with-output-to-temp-buffer "*Symbols*"
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4022 (let* ((col 0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4023 (start "extern Lisp_Object ")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4024 (startlen (length start))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4025 ;; with a default-width frame of 80 chars, you can only fit
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4026 ;; 79 before wrapping. you can see this to a lower value if
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4027 ;; you don't want it right up against the right margin.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4028 (max-line-length 79))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4029 (dolist (sym syms)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4030 (cond (;; if something already on line (this will always be the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4031 ;; case except the very first iteration), see what
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4032 ;; space we've got. (need to take into account 2
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4033 ;; for the comma+space, 1 for the semicolon at the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4034 ;; end.) if enough space, do it.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4035 (and (> col 0) (< (+ col (length sym) 2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4036 (1- max-line-length)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4037 (princ ", ")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4038 (princ sym)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4039 (incf col 2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4040 (incf col (length sym)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4041 (t
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4042 ;; either we're first iteration or we ran out of space.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4043 ;; if the latter, terminate the previous line. this
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4044 ;; loop is written on purpose so that it always prints
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4045 ;; at least one item, even if that would go over.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4046 (when (> col 0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4047 (princ ";\n")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4048 (setq col 0))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4049 (princ start)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4050 (incf col startlen)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4051 (princ sym)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4052 (incf col (length sym)))))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4053 ;; finally terminate the last line.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4054 (princ ";\n"))))))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4055
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4056 */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4057
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4058 extern Lisp_Object Qactivate_menubar_hook, Qarith_error, Qarrayp, Qautoload;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4059 extern Lisp_Object Qbackground, Qbackground_pixmap, Qbeginning_of_buffer;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4060 extern Lisp_Object Qbitp, Qblinking, Qbuffer_glyph_p, Qbuffer_live_p;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4061 extern Lisp_Object Qbuffer_read_only, Qbyte_code, Qcall_interactively;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4062 extern Lisp_Object Qcategory_designator_p, Qcategory_table_value_p, Qcdr;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4063 extern Lisp_Object Qchar_or_string_p, Qcharacterp, Qcircular_list;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4064 extern Lisp_Object Qcircular_property_list, Qcolor_pixmap_image_instance_p;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4065 extern Lisp_Object Qcommandp, Qcompletion_ignore_case, Qconsole_live_p;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4066 extern Lisp_Object Qconst_specifier, Qconversion_error, Qcurrent_menubar;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4067 extern Lisp_Object Qcyclic_variable_indirection, Qdefun, Qdevice_live_p, Qdim;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4068 extern Lisp_Object Qdirection, Qdisabled, Qdisabled_command_hook;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4069 extern Lisp_Object Qdisplay_table, Qdomain_error, Qediting_error;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4070 extern Lisp_Object Qend_of_buffer, Qend_of_file, Qend_open, Qerror;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4071 extern Lisp_Object Qerror_conditions, Qerror_lacks_explanatory_string;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4072 extern Lisp_Object Qerror_message, Qevent_live_p, Qexit, Qextent_live_p;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4073 extern Lisp_Object Qexternal_debugging_output, Qfeaturep, Qfile_error, Qfinal;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4074 extern Lisp_Object Qforeground, Qformat, Qframe_live_p, Qgraphic, Qgtk;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4075 extern Lisp_Object Qgui_error, Qicon_glyph_p, Qidentity, Qinhibit_quit;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4076 extern Lisp_Object Qinhibit_read_only, Qinteger_char_or_marker_p;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4077 extern Lisp_Object Qinteger_or_char_p, Qinteger_or_marker_p, Qintegerp;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4078 extern Lisp_Object Qinteractive, Qinternal_error, Qinvalid_argument;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4079 extern Lisp_Object Qinvalid_byte_code, Qinvalid_change, Qinvalid_constant;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4080 extern Lisp_Object Qinvalid_function, Qinvalid_operation;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4081 extern Lisp_Object Qinvalid_read_syntax, Qinvalid_state, Qio_error, Qlambda;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4082 extern Lisp_Object Qlayout, Qlist_formation_error, Qlistp, Qload, Qlock_shift;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4083 extern Lisp_Object Qlong_name, Qmacro, Qmakunbound, Qmalformed_list;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4084 extern Lisp_Object Qmalformed_property_list, Qmark;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4085 extern Lisp_Object Qmono_pixmap_image_instance_p, Qmouse_leave_buffer_hook;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4086 extern Lisp_Object Qnative_layout, Qnatnump, Qnetwork_error, Qno_catch;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4087 extern Lisp_Object Qnothing_image_instance_p, Qnumber_char_or_marker_p;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4088 extern Lisp_Object Qnumberp, Qout_of_memory, Qoutput_charset_conversion;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4089 extern Lisp_Object Qoverflow_error, Qpoint, Qpointer_glyph_p;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4090 extern Lisp_Object Qpointer_image_instance_p, Qprint_length;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4091 extern Lisp_Object Qprint_string_length, Qprinting_unreadable_object;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4092 extern Lisp_Object Qprocess_error, Qprogn, Qquit, Qquote, Qrange_error;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4093 extern Lisp_Object Qread_char, Qread_from_minibuffer;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4094 extern Lisp_Object Qreally_early_error_handler, Qregion_beginning;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4095 extern Lisp_Object Qregion_end, Qregistry, Qreverse_direction_charset;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4096 extern Lisp_Object Qrun_hooks, Qsans_modifiers, Qsave_buffers_kill_emacs;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4097 extern Lisp_Object Qself_insert_command, Qself_insert_defer_undo, Qsequencep;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4098 extern Lisp_Object Qset, Qsetting_constant, Qshort_name, Qsingularity_error;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4099 extern Lisp_Object Qsound_error, Qstack_overflow, Qstandard_input;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4100 extern Lisp_Object Qstandard_output, Qstart_open, Qstring_lessp;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4101 extern Lisp_Object Qstructure_formation_error, Qsubwindow;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4102 extern Lisp_Object Qsubwindow_image_instance_p, Qsyntax_error, Qt;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4103 extern Lisp_Object Qtext_conversion_error, Qtext_image_instance_p, Qtop_level;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4104 extern Lisp_Object Qtrue_list_p, Qunbound, Qunderflow_error, Qunderline;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4105 extern Lisp_Object Quser_files_and_directories, Qvalues;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4106 extern Lisp_Object Qvariable_documentation, Qvariable_domain, Qvoid_function;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4107 extern Lisp_Object Qvoid_variable, Qwindow_live_p, Qwrong_number_of_arguments;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4108 extern Lisp_Object Qwrong_type_argument, Qyes_or_no_p;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4109
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4110 #define SYMBOL(fou) extern Lisp_Object fou
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4111 #define SYMBOL_KEYWORD(la_cle_est_fou) extern Lisp_Object la_cle_est_fou
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4112 #define SYMBOL_GENERAL(tout_le_monde, est_fou) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4113 extern Lisp_Object tout_le_monde
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4114
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4115 #include "general-slots.h"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4116
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4117 #undef SYMBOL
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4118 #undef SYMBOL_KEYWORD
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4119 #undef SYMBOL_GENERAL
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4120
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4121 /*--------------- prototypes for variables of type Lisp_Object ------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4122
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
4123 extern Lisp_Object Vactivate_menubar_hook;
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
4124 extern Lisp_Object Vautoload_queue, Vblank_menubar;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4125 extern Lisp_Object Vcommand_history;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4126 extern Lisp_Object Vcommand_line_args, Vconfigure_info_directory;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4127 extern Lisp_Object Vconfigure_site_directory, Vconfigure_site_module_directory;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4128 extern Lisp_Object Vconsole_list, Vcontrolling_terminal;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4129 extern Lisp_Object Vcurrent_compiled_function_annotation, Vcurrent_load_list;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4130 extern Lisp_Object Vcurrent_mouse_event, Vcurrent_prefix_arg, Vdata_directory;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
4131 extern Lisp_Object Vdirectory_sep_char, Vdisabled_command_hook;
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
4132 extern Lisp_Object Vdoc_directory, Vinternal_doc_file_name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4133 extern Lisp_Object Vecho_area_buffer, Vemacs_major_version;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4134 extern Lisp_Object Vemacs_minor_version, Vexec_directory, Vexec_path;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4135 extern Lisp_Object Vexecuting_macro, Vfeatures, Vfile_domain;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4136 extern Lisp_Object Vinhibit_quit, Vinvocation_directory, Vinvocation_name;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4137 extern Lisp_Object Vlast_command, Vlast_command_char;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4138 extern Lisp_Object Vlast_command_event, Vlast_input_event;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4139 extern Lisp_Object Vload_file_name_internal;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4140 extern Lisp_Object Vload_file_name_internal_the_purecopy, Vload_history;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4141 extern Lisp_Object Vload_path, Vmark_even_if_inactive, Vmenubar_configuration;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4142 extern Lisp_Object Vminibuf_preprompt, Vminibuf_prompt, Vminibuffer_zero;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4143 extern Lisp_Object Vmodule_directory, Vmswindows_downcase_file_names;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4144 extern Lisp_Object Vmswindows_get_true_file_attributes, Vobarray;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4145 extern Lisp_Object Vprint_length, Vprint_level, Vprocess_environment;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4146 extern Lisp_Object Vquit_flag;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4147 extern Lisp_Object Vrecent_keys_ring, Vshell_file_name, Vsite_directory;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4148 extern Lisp_Object Vsite_module_directory;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4149 extern Lisp_Object Vstandard_input, Vstandard_output, Vstdio_str;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4150 extern Lisp_Object Vsynchronous_sounds, Vsystem_name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4151 extern Lisp_Object Vthis_command_keys, Vunread_command_event;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4152 extern Lisp_Object Vx_initial_argv_list;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4153
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
4154 #endif /* INCLUDED_lisp_h_ */