(x_display_and_set_cursor): Don't show a hollow box
[bpt/emacs.git] / src / lisp.h
1 /* Fundamental definitions for GNU Emacs Lisp interpreter.
2 Copyright (C) 1985,86,87,93,94,95,97,98,1999,2000
3 Free Software Foundation, Inc.
4
5 This file is part of GNU Emacs.
6
7 GNU Emacs is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU Emacs is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU Emacs; see the file COPYING. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
21
22 /* Declare the prototype for a general external function. */
23 #if defined (PROTOTYPES) || defined (WINDOWSNT)
24 #define P_(proto) proto
25 #else
26 #define P_(proto) ()
27 #endif
28
29
30 /* These are default choices for the types to use. */
31 #ifdef _LP64
32 #ifndef EMACS_INT
33 #define EMACS_INT long
34 #define BITS_PER_EMACS_INT BITS_PER_LONG
35 #endif
36 #ifndef EMACS_UINT
37 #define EMACS_UINT unsigned long
38 #endif
39 #else /* not _LP64 */
40 #ifndef EMACS_INT
41 #define EMACS_INT int
42 #define BITS_PER_EMACS_INT BITS_PER_INT
43 #endif
44 #ifndef EMACS_UINT
45 #define EMACS_UINT unsigned int
46 #endif
47 #endif
48
49 /* Extra internal type checking? */
50 extern int suppress_checking;
51 extern void die P_((const char *, const char *, int));
52
53 #ifdef ENABLE_CHECKING
54
55 #define CHECK(check,msg) ((check || suppress_checking \
56 ? (void) 0 \
57 : die (msg, __FILE__, __LINE__)), \
58 0)
59
60 /* Let's get some compile-time checking too. */
61 #undef NO_UNION_TYPE
62
63 #else
64
65 /* Produce same side effects and result, but don't complain. */
66 #define CHECK(check,msg) ((check),0)
67
68 #endif
69
70 /* Define an Emacs version of "assert", since some system ones are
71 flaky. */
72 #ifndef ENABLE_CHECKING
73 #define eassert(X) (void) 0
74 #else /* ENABLE_CHECKING */
75 #if defined (__GNUC__) && __GNUC__ >= 2 && defined (__STDC__)
76 #define eassert(cond) CHECK(cond,"assertion failed: " #cond)
77 #else
78 #define eassert(cond) CHECK(cond,"assertion failed")
79 #endif
80 #endif /* ENABLE_CHECKING */
81
82 /* Define the fundamental Lisp data structures. */
83
84 /* This is the set of Lisp data types. */
85
86 enum Lisp_Type
87 {
88 /* Integer. XINT (obj) is the integer value. */
89 Lisp_Int,
90
91 /* Symbol. XSYMBOL (object) points to a struct Lisp_Symbol. */
92 Lisp_Symbol,
93
94 /* Miscellaneous. XMISC (object) points to a union Lisp_Misc,
95 whose first member indicates the subtype. */
96 Lisp_Misc,
97
98 /* String. XSTRING (object) points to a struct Lisp_String.
99 The length of the string, and its contents, are stored therein. */
100 Lisp_String,
101
102 /* Vector of Lisp objects, or something resembling it.
103 XVECTOR (object) points to a struct Lisp_Vector, which contains
104 the size and contents. The size field also contains the type
105 information, if it's not a real vector object. */
106 Lisp_Vectorlike,
107
108 /* Cons. XCONS (object) points to a struct Lisp_Cons. */
109 Lisp_Cons,
110
111 Lisp_Float,
112
113 /* This is not a type code. It is for range checking. */
114 Lisp_Type_Limit
115 };
116
117 /* This is the set of datatypes that share a common structure.
118 The first member of the structure is a type code from this set.
119 The enum values are arbitrary, but we'll use large numbers to make it
120 more likely that we'll spot the error if a random word in memory is
121 mistakenly interpreted as a Lisp_Misc. */
122 enum Lisp_Misc_Type
123 {
124 Lisp_Misc_Free = 0x5eab,
125 Lisp_Misc_Marker,
126 Lisp_Misc_Intfwd,
127 Lisp_Misc_Boolfwd,
128 Lisp_Misc_Objfwd,
129 Lisp_Misc_Buffer_Objfwd,
130 Lisp_Misc_Buffer_Local_Value,
131 Lisp_Misc_Some_Buffer_Local_Value,
132 Lisp_Misc_Overlay,
133 Lisp_Misc_Kboard_Objfwd,
134 /* Currently floats are not a misc type,
135 but let's define this in case we want to change that. */
136 Lisp_Misc_Float,
137 /* This is not a type code. It is for range checking. */
138 Lisp_Misc_Limit
139 };
140
141 /* These values are overridden by the m- file on some machines. */
142 #ifndef VALBITS
143 #define VALBITS (BITS_PER_EMACS_INT - 4)
144 #endif
145
146 #ifndef GCTYPEBITS
147 #define GCTYPEBITS 3
148 #endif
149
150 #if 0 /* This doesn't work on some systems that don't allow enumerators
151 > INT_MAX, and it won't work for long long EMACS_INT. These
152 values are now found in emacs.c as EMACS_INT variables. */
153
154 /* Make these values available in GDB, which sees enums but not macros. */
155
156 enum gdb_lisp_params
157 {
158 gdb_valbits = VALBITS,
159 gdb_gctypebits = GCTYPEBITS,
160 gdb_emacs_intbits = sizeof (EMACS_INT) * BITS_PER_CHAR,
161 #ifdef DATA_SEG_BITS
162 gdb_data_seg_bits = DATA_SEG_BITS
163 #else
164 gdb_data_seg_bits = 0
165 #endif
166 };
167
168 #endif /* 0 */
169
170 #ifndef NO_UNION_TYPE
171
172 #ifndef WORDS_BIG_ENDIAN
173
174 /* Definition of Lisp_Object for little-endian machines. */
175
176 typedef
177 union Lisp_Object
178 {
179 /* Used for comparing two Lisp_Objects;
180 also, positive integers can be accessed fast this way. */
181 int i;
182
183 struct
184 {
185 int val: VALBITS;
186 int type: GCTYPEBITS+1;
187 } s;
188 struct
189 {
190 unsigned int val: VALBITS;
191 int type: GCTYPEBITS+1;
192 } u;
193 struct
194 {
195 unsigned int val: VALBITS;
196 enum Lisp_Type type: GCTYPEBITS;
197 /* The markbit is not really part of the value of a Lisp_Object,
198 and is always zero except during garbage collection. */
199 unsigned int markbit: 1;
200 } gu;
201 }
202 Lisp_Object;
203
204 #else /* If WORDS_BIG_ENDIAN */
205
206 typedef
207 union Lisp_Object
208 {
209 /* Used for comparing two Lisp_Objects;
210 also, positive integers can be accessed fast this way. */
211 int i;
212
213 struct
214 {
215 int type: GCTYPEBITS+1;
216 int val: VALBITS;
217 } s;
218 struct
219 {
220 int type: GCTYPEBITS+1;
221 unsigned int val: VALBITS;
222 } u;
223 struct
224 {
225 /* The markbit is not really part of the value of a Lisp_Object,
226 and is always zero except during garbage collection. */
227 unsigned int markbit: 1;
228 enum Lisp_Type type: GCTYPEBITS;
229 unsigned int val: VALBITS;
230 } gu;
231 }
232 Lisp_Object;
233
234 #endif /* WORDS_BIG_ENDIAN */
235
236 #endif /* NO_UNION_TYPE */
237
238
239 /* If union type is not wanted, define Lisp_Object as just a number. */
240
241 #ifdef NO_UNION_TYPE
242 #define Lisp_Object EMACS_INT
243 #endif /* NO_UNION_TYPE */
244
245 #ifndef VALMASK
246 #define VALMASK ((((EMACS_INT) 1)<<VALBITS) - 1)
247 #endif
248 #define GCTYPEMASK ((((EMACS_INT) 1)<<GCTYPEBITS) - 1)
249
250 /* Two flags that are set during GC. On some machines, these flags
251 are defined differently by the m- file. */
252
253 /* This is set in the car of a cons and in the plist slot of a symbol
254 to indicate it is marked. Likewise in the plist slot of an interval,
255 the chain slot of a marker, the type slot of a float, and the name
256 slot of a buffer.
257
258 In strings, this bit in the size field indicates that the string
259 is a "large" one, one which was separately malloc'd
260 rather than being part of a string block. */
261
262 #ifndef MARKBIT
263 #define MARKBIT ((EMACS_INT) ((EMACS_UINT) 1 << (VALBITS + GCTYPEBITS)))
264 #endif /*MARKBIT */
265
266 /* In the size word of a vector, this bit means the vector has been marked.
267 In the size word of a large string, likewise. */
268
269 #ifndef ARRAY_MARK_FLAG
270 #define ARRAY_MARK_FLAG ((MARKBIT >> 1) & ~MARKBIT)
271 #endif /* no ARRAY_MARK_FLAG */
272
273 /* In the size word of a struct Lisp_Vector, this bit means it's really
274 some other vector-like object. */
275 #ifndef PSEUDOVECTOR_FLAG
276 #define PSEUDOVECTOR_FLAG ((ARRAY_MARK_FLAG >> 1) & ~ARRAY_MARK_FLAG)
277 #endif
278
279 /* In a pseudovector, the size field actually contains a word with one
280 PSEUDOVECTOR_FLAG bit set, and exactly one of the following bits to
281 indicate the actual type. */
282 enum pvec_type
283 {
284 PVEC_NORMAL_VECTOR = 0,
285 PVEC_PROCESS = 0x200,
286 PVEC_FRAME = 0x400,
287 PVEC_COMPILED = 0x800,
288 PVEC_WINDOW = 0x1000,
289 PVEC_WINDOW_CONFIGURATION = 0x2000,
290 PVEC_SUBR = 0x4000,
291 PVEC_CHAR_TABLE = 0x8000,
292 PVEC_BOOL_VECTOR = 0x10000,
293 PVEC_BUFFER = 0x20000,
294 PVEC_HASH_TABLE = 0x40000,
295 PVEC_TYPE_MASK = 0x7fe00
296
297 #if 0 /* This is used to make the value of PSEUDOVECTOR_FLAG available to
298 GDB. It doesn't work on OS Alpha. Moved to a variable in
299 emacs.c. */
300 PVEC_FLAG = PSEUDOVECTOR_FLAG
301 #endif
302 };
303
304 /* For convenience, we also store the number of elements in these bits. */
305 #define PSEUDOVECTOR_SIZE_MASK 0x1ff
306 \f
307 /* These macros extract various sorts of values from a Lisp_Object.
308 For example, if tem is a Lisp_Object whose type is Lisp_Cons,
309 XCONS (tem) is the struct Lisp_Cons * pointing to the memory for that cons. */
310
311 #ifdef NO_UNION_TYPE
312
313 /* One need to override this if there must be high bits set in data space
314 (doing the result of the below & ((1 << (GCTYPE + 1)) - 1) would work
315 on all machines, but would penalise machines which don't need it)
316 */
317 #ifndef XTYPE
318 #define XTYPE(a) ((enum Lisp_Type) ((a) >> VALBITS))
319 #endif
320
321 #ifndef XSETTYPE
322 #define XSETTYPE(a, b) ((a) = XUINT (a) | ((EMACS_INT)(b) << VALBITS))
323 #endif
324
325 /* For integers known to be positive, XFASTINT provides fast retrieval
326 and XSETFASTINT provides fast storage. This takes advantage of the
327 fact that Lisp_Int is 0. */
328 #define XFASTINT(a) ((a) + 0)
329 #define XSETFASTINT(a, b) ((a) = (b))
330
331 /* Extract the value of a Lisp_Object as a signed integer. */
332
333 #ifndef XINT /* Some machines need to do this differently. */
334 #define XINT(a) (((a) << (BITS_PER_EMACS_INT-VALBITS)) >> (BITS_PER_EMACS_INT-VALBITS))
335 #endif
336
337 /* Extract the value as an unsigned integer. This is a basis
338 for extracting it as a pointer to a structure in storage. */
339
340 #ifndef XUINT
341 #define XUINT(a) ((a) & VALMASK)
342 #endif
343
344 #ifndef XPNTR
345 #ifdef HAVE_SHM
346 /* In this representation, data is found in two widely separated segments. */
347 extern int pure_size;
348 #define XPNTR(a) \
349 (XUINT (a) | (XUINT (a) > pure_size ? DATA_SEG_BITS : PURE_SEG_BITS))
350 #else /* not HAVE_SHM */
351 #ifdef DATA_SEG_BITS
352 /* This case is used for the rt-pc.
353 In the diffs I was given, it checked for ptr = 0
354 and did not adjust it in that case.
355 But I don't think that zero should ever be found
356 in a Lisp object whose data type says it points to something. */
357 #define XPNTR(a) (XUINT (a) | DATA_SEG_BITS)
358 #else
359 #define XPNTR(a) XUINT (a)
360 #endif
361 #endif /* not HAVE_SHM */
362 #endif /* no XPNTR */
363
364 #ifndef XSET
365 #define XSET(var, type, ptr) \
366 ((var) = ((EMACS_INT)(type) << VALBITS) + ((EMACS_INT) (ptr) & VALMASK))
367 #endif
368
369 /* Convert a C integer into a Lisp_Object integer. */
370
371 #define make_number(N) \
372 ((((EMACS_INT) (N)) & VALMASK) | ((EMACS_INT) Lisp_Int) << VALBITS)
373
374 /* During garbage collection, XGCTYPE must be used for extracting types
375 so that the mark bit is ignored. XMARKBIT accesses the markbit.
376 Markbits are used only in particular slots of particular structure types.
377 Other markbits are always zero.
378 Outside of garbage collection, all mark bits are always zero. */
379
380 #ifndef XGCTYPE
381 #define XGCTYPE(a) ((enum Lisp_Type) (((a) >> VALBITS) & GCTYPEMASK))
382 #endif
383
384 #if VALBITS + GCTYPEBITS == BITS_PER_EMACS_INT - 1
385 /* Make XMARKBIT faster if mark bit is sign bit. */
386 #ifndef XMARKBIT
387 #define XMARKBIT(a) ((a) < 0)
388 #endif
389 #endif /* markbit is sign bit */
390
391 #ifndef XMARKBIT
392 #define XMARKBIT(a) ((a) & MARKBIT)
393 #endif
394
395 #ifndef XSETMARKBIT
396 #define XSETMARKBIT(a,b) ((a) = ((a) & ~MARKBIT) | ((b) ? MARKBIT : 0))
397 #endif
398
399 #ifndef XMARK
400 #define XMARK(a) ((a) |= MARKBIT)
401 #endif
402
403 #ifndef XUNMARK
404 #define XUNMARK(a) ((a) &= ~MARKBIT)
405 #endif
406
407 #endif /* NO_UNION_TYPE */
408
409 #ifndef NO_UNION_TYPE
410
411 #define XTYPE(a) ((enum Lisp_Type) (a).u.type)
412 #define XSETTYPE(a, b) ((a).u.type = (char) (b))
413
414 /* For integers known to be positive, XFASTINT provides fast retrieval
415 and XSETFASTINT provides fast storage. This takes advantage of the
416 fact that Lisp_Int is 0. */
417 #define XFASTINT(a) ((a).i + 0)
418 #define XSETFASTINT(a, b) ((a).i = (b))
419
420 #ifdef EXPLICIT_SIGN_EXTEND
421 /* Make sure we sign-extend; compilers have been known to fail to do so. */
422 #define XINT(a) (((a).i << (BITS_PER_INT-VALBITS)) >> (BITS_PER_INT-VALBITS))
423 #else
424 #define XINT(a) ((a).s.val)
425 #endif /* EXPLICIT_SIGN_EXTEND */
426
427 #define XUINT(a) ((a).u.val)
428 #define XPNTR(a) ((a).u.val)
429
430 #define XSET(var, vartype, ptr) \
431 (((var).s.val = ((int) (ptr))), ((var).s.type = ((char) (vartype))))
432
433 #if __GNUC__ >= 2 && defined (__OPTIMIZE__)
434 #define make_number(N) \
435 (__extension__ ({ Lisp_Object _l; _l.s.val = (N); _l.s.type = Lisp_Int; _l; }))
436 #else
437 extern Lisp_Object make_number ();
438 #endif
439
440 /* During garbage collection, XGCTYPE must be used for extracting types
441 so that the mark bit is ignored. XMARKBIT access the markbit.
442 Markbits are used only in particular slots of particular structure types.
443 Other markbits are always zero.
444 Outside of garbage collection, all mark bits are always zero. */
445
446 #define XGCTYPE(a) ((a).gu.type)
447 #define XMARKBIT(a) ((a).gu.markbit)
448 #define XSETMARKBIT(a,b) (XMARKBIT(a) = (b))
449 #define XMARK(a) (XMARKBIT(a) = 1)
450 #define XUNMARK(a) (XMARKBIT(a) = 0)
451
452 #endif /* NO_UNION_TYPE */
453
454 /* Extract a value or address from a Lisp_Object. */
455
456 #define XCONS(a) (eassert (GC_CONSP(a)),(struct Lisp_Cons *) XPNTR(a))
457 #define XVECTOR(a) ((struct Lisp_Vector *) XPNTR(a))
458 #define XSTRING(a) (eassert (GC_STRINGP(a)),(struct Lisp_String *) XPNTR(a))
459 #define XSYMBOL(a) (eassert (GC_SYMBOLP(a)),(struct Lisp_Symbol *) XPNTR(a))
460 #define XFLOAT(a) (eassert (GC_FLOATP(a)),(struct Lisp_Float *) XPNTR(a))
461
462 /* Misc types. */
463
464 #define XMISC(a) ((union Lisp_Misc *) XPNTR(a))
465 #define XMISCTYPE(a) (XMARKER (a)->type)
466 #define XMARKER(a) (&(XMISC(a)->u_marker))
467 #define XINTFWD(a) (&(XMISC(a)->u_intfwd))
468 #define XBOOLFWD(a) (&(XMISC(a)->u_boolfwd))
469 #define XOBJFWD(a) (&(XMISC(a)->u_objfwd))
470 #define XBUFFER_OBJFWD(a) (&(XMISC(a)->u_buffer_objfwd))
471 #define XBUFFER_LOCAL_VALUE(a) (&(XMISC(a)->u_buffer_local_value))
472 #define XOVERLAY(a) (&(XMISC(a)->u_overlay))
473 #define XKBOARD_OBJFWD(a) (&(XMISC(a)->u_kboard_objfwd))
474
475 /* Pseudovector types. */
476
477 #define XPROCESS(a) (eassert (GC_PROCESSP(a)),(struct Lisp_Process *) XPNTR(a))
478 #define XWINDOW(a) (eassert (GC_WINDOWP(a)),(struct window *) XPNTR(a))
479 #define XSUBR(a) (eassert (GC_SUBRP(a)),(struct Lisp_Subr *) XPNTR(a))
480 #define XBUFFER(a) (eassert (GC_BUFFERP(a)),(struct buffer *) XPNTR(a))
481 #define XCHAR_TABLE(a) ((struct Lisp_Char_Table *) XPNTR(a))
482 #define XBOOL_VECTOR(a) ((struct Lisp_Bool_Vector *) XPNTR(a))
483
484 /* Construct a Lisp_Object from a value or address. */
485
486 #define XSETINT(a, b) XSET (a, Lisp_Int, b)
487 #define XSETCONS(a, b) XSET (a, Lisp_Cons, b)
488 #define XSETVECTOR(a, b) XSET (a, Lisp_Vectorlike, b)
489 #define XSETSTRING(a, b) XSET (a, Lisp_String, b)
490 #define XSETSYMBOL(a, b) XSET (a, Lisp_Symbol, b)
491 #define XSETFLOAT(a, b) XSET (a, Lisp_Float, b)
492
493 /* Misc types. */
494
495 #define XSETMISC(a, b) XSET (a, Lisp_Misc, b)
496 #define XSETMARKER(a, b) (XSETMISC (a, b), XMISCTYPE (a) = Lisp_Misc_Marker)
497
498 /* Pseudovector types. */
499
500 #define XSETPSEUDOVECTOR(a, b, code) \
501 (XSETVECTOR (a, b), XVECTOR (a)->size |= PSEUDOVECTOR_FLAG | (code))
502 #define XSETWINDOW_CONFIGURATION(a, b) \
503 (XSETPSEUDOVECTOR (a, b, PVEC_WINDOW_CONFIGURATION))
504 #define XSETPROCESS(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_PROCESS))
505 #define XSETWINDOW(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_WINDOW))
506 #define XSETSUBR(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_SUBR))
507 #define XSETCOMPILED(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_COMPILED))
508 #define XSETBUFFER(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_BUFFER))
509 #define XSETCHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_CHAR_TABLE))
510 #define XSETBOOL_VECTOR(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_BOOL_VECTOR))
511
512 /* Convenience macros for dealing with Lisp arrays. */
513
514 #define AREF(ARRAY, IDX) XVECTOR ((ARRAY))->contents[IDX]
515 #define ASET(ARRAY, IDX, VAL) (AREF ((ARRAY), (IDX)) = (VAL))
516 #define ASIZE(ARRAY) XVECTOR ((ARRAY))->size
517
518 \f
519 /* Basic data type for use of intervals. See the macros in intervals.h. */
520
521 struct interval
522 {
523 /* The first group of entries deal with the tree structure. */
524
525 unsigned int total_length; /* Length of myself and both children. */
526 unsigned int position; /* Cache of interval's character position. */
527 /* This field is usually updated
528 simultaneously with an interval
529 traversal, there is no guaranty
530 that it is valid for a random
531 interval. */
532 struct interval *left; /* Intervals which precede me. */
533 struct interval *right; /* Intervals which succeed me. */
534
535 /* Parent in the tree, or the Lisp_Object containing this interval tree.
536
537 The mark bit on the root interval of an interval tree says
538 whether we have started (and possibly finished) marking the
539 tree. If GC comes across an interval tree whose root's parent
540 field has its markbit set, it leaves the tree alone.
541
542 You'd think we could store this information in the parent object
543 somewhere (after all, that should be visited once and then
544 ignored too, right?), but strings are GC'd strangely. */
545 union
546 {
547 struct interval *interval;
548 Lisp_Object obj;
549 } up;
550 unsigned int up_obj : 1;
551
552 /* The remaining components are `properties' of the interval.
553 The first four are duplicates for things which can be on the list,
554 for purposes of speed. */
555
556 unsigned int write_protect : 1; /* Non-zero means can't modify. */
557 unsigned int visible : 1; /* Zero means don't display. */
558 unsigned int front_sticky : 1; /* Non-zero means text inserted just
559 before this interval goes into it. */
560 unsigned int rear_sticky : 1; /* Likewise for just after it. */
561
562 /* Properties of this interval.
563 The mark bit on this field says whether this particular interval
564 tree node has been visited. Since intervals should never be
565 shared, GC aborts if it seems to have visited an interval twice. */
566 Lisp_Object plist;
567 };
568
569 typedef struct interval *INTERVAL;
570
571 /* Complain if object is not string or buffer type */
572 #define CHECK_STRING_OR_BUFFER(x, i) \
573 { if (!STRINGP ((x)) && !BUFFERP ((x))) \
574 x = wrong_type_argument (Qbuffer_or_string_p, (x)); }
575 \f
576 /* In a cons, the markbit of the car is the gc mark bit */
577
578 struct Lisp_Cons
579 {
580 /* Please do not use the names of these elements in code other
581 than the core lisp implementation. Use XCAR and XCDR below. */
582 #ifdef HIDE_LISP_IMPLEMENTATION
583 Lisp_Object car_, cdr_;
584 #else
585 Lisp_Object car, cdr;
586 #endif
587 };
588
589 /* Take the car or cdr of something known to be a cons cell. */
590 #ifdef HIDE_LISP_IMPLEMENTATION
591 #define XCAR(c) (XCONS ((c))->car_)
592 #define XCDR(c) (XCONS ((c))->cdr_)
593 #else
594 #define XCAR(c) (XCONS ((c))->car)
595 #define XCDR(c) (XCONS ((c))->cdr)
596 #endif
597
598 /* Take the car or cdr of something whose type is not known. */
599 #define CAR(c) \
600 (CONSP ((c)) ? XCAR ((c)) \
601 : NILP ((c)) ? Qnil \
602 : wrong_type_argument (Qlistp, (c)))
603
604 #define CDR(c) \
605 (CONSP ((c)) ? XCDR ((c)) \
606 : NILP ((c)) ? Qnil \
607 : wrong_type_argument (Qlistp, (c)))
608
609 /* Nonzero if STR is a multibyte string. */
610 #define STRING_MULTIBYTE(STR) \
611 (XSTRING (STR)->size_byte >= 0)
612
613 /* Return the length in bytes of STR. */
614 #define STRING_BYTES(STR) \
615 ((STR)->size_byte < 0 ? (STR)->size : (STR)->size_byte)
616
617 /* Set the length in bytes of STR. */
618 #define SET_STRING_BYTES(STR, SIZE) ((STR)->size_byte = (SIZE))
619
620 /* In a string or vector, the sign bit of the `size' is the gc mark bit */
621
622 struct Lisp_String
623 {
624 EMACS_INT size;
625 EMACS_INT size_byte;
626 INTERVAL intervals; /* text properties in this string */
627 unsigned char *data;
628 };
629
630 /* If a struct is made to look like a vector, this macro returns the length
631 of the shortest vector that would hold that struct. */
632 #define VECSIZE(type) ((sizeof (type) - (sizeof (struct Lisp_Vector) \
633 - sizeof (Lisp_Object)) \
634 + sizeof(Lisp_Object) - 1) /* round up */ \
635 / sizeof (Lisp_Object))
636
637 struct Lisp_Vector
638 {
639 EMACS_INT size;
640 struct Lisp_Vector *next;
641 Lisp_Object contents[1];
642 };
643
644 /* A char table is a kind of vectorlike, with contents are like a
645 vector but with a few other slots. For some purposes, it makes
646 sense to handle a chartable with type struct Lisp_Vector. An
647 element of a char table can be any Lisp objects, but if it is a sub
648 char-table, we treat it a table that contains information of a
649 group of characters of the same charsets or a specific character of
650 a charset. A sub char-table has the same structure as a char table
651 except for that the former omits several slots at the tail. A sub
652 char table appears only in an element of a char table, and there's
653 no way to access it directly from Emacs Lisp program. */
654
655 /* This is the number of slots that apply to characters or character
656 sets. The first 128 are for ASCII, the next 128 are for 8-bit
657 European characters, and the last 128 are for multibyte characters.
658 The first 256 are indexed by the code itself, but the last 128 are
659 indexed by (charset-id + 128). */
660 #define CHAR_TABLE_ORDINARY_SLOTS 384
661
662 /* This is the number of slots that apply to characters of ASCII and
663 8-bit Europeans only. */
664 #define CHAR_TABLE_SINGLE_BYTE_SLOTS 256
665
666 /* This is the number of slots that every char table must have. This
667 counts the ordinary slots and the top, defalt, parent, and purpose
668 slots. */
669 #define CHAR_TABLE_STANDARD_SLOTS (CHAR_TABLE_ORDINARY_SLOTS + 4)
670
671 /* This is the number of slots that apply to position-code-1 and
672 position-code-2 of a multibyte character at the 2nd and 3rd level
673 sub char tables respectively. */
674 #define SUB_CHAR_TABLE_ORDINARY_SLOTS 128
675
676 /* This is the number of slots that every sub char table must have.
677 This counts the ordinary slots and the top and defalt slot. */
678 #define SUB_CHAR_TABLE_STANDARD_SLOTS (SUB_CHAR_TABLE_ORDINARY_SLOTS + 2)
679
680 /* Return the number of "extra" slots in the char table CT. */
681
682 #define CHAR_TABLE_EXTRA_SLOTS(CT) \
683 (((CT)->size & PSEUDOVECTOR_SIZE_MASK) - CHAR_TABLE_STANDARD_SLOTS)
684
685 /* Almost equivalent to Faref (CT, IDX) with optimization for ASCII
686 and 8-bit Europeans characters. For these characters, do not check
687 validity of CT. Do not follow parent. */
688 #define CHAR_TABLE_REF(CT, IDX) \
689 ((IDX) >= 0 && (IDX) < CHAR_TABLE_SINGLE_BYTE_SLOTS \
690 ? (!NILP (XCHAR_TABLE (CT)->contents[IDX]) \
691 ? XCHAR_TABLE (CT)->contents[IDX] \
692 : XCHAR_TABLE (CT)->defalt) \
693 : Faref (CT, make_number (IDX)))
694
695 /* Almost equivalent to Faref (CT, IDX) with optimization for ASCII
696 and 8-bit Europeans characters. However, if the result is nil,
697 return IDX.
698
699 For these characters, do not check validity of CT
700 and do not follow parent. */
701 #define CHAR_TABLE_TRANSLATE(CT, IDX) \
702 ((IDX) < CHAR_TABLE_SINGLE_BYTE_SLOTS \
703 ? (!NILP (XCHAR_TABLE (CT)->contents[IDX]) \
704 ? XINT (XCHAR_TABLE (CT)->contents[IDX]) \
705 : IDX) \
706 : char_table_translate (CT, IDX))
707
708 /* Equivalent to Faset (CT, IDX, VAL) with optimization for ASCII and
709 8-bit Europeans characters. Do not check validity of CT. */
710 #define CHAR_TABLE_SET(CT, IDX, VAL) \
711 do { \
712 if (XFASTINT (IDX) < CHAR_TABLE_SINGLE_BYTE_SLOTS) \
713 XCHAR_TABLE (CT)->contents[XFASTINT (IDX)] = VAL; \
714 else \
715 Faset (CT, IDX, VAL); \
716 } while (0)
717
718 struct Lisp_Char_Table
719 {
720 /* This is the vector's size field, which also holds the
721 pseudovector type information. It holds the size, too.
722 The size counts the top, defalt, purpose, and parent slots.
723 The last three are not counted if this is a sub char table. */
724 EMACS_INT size;
725 struct Lisp_Vector *next;
726 /* This holds a flag to tell if this is a top level char table (t)
727 or a sub char table (nil). */
728 Lisp_Object top;
729 /* This holds a default value,
730 which is used whenever the value for a specific character is nil. */
731 Lisp_Object defalt;
732 /* This holds an actual value of each element. A sub char table
733 has only SUB_CHAR_TABLE_ORDINARY_SLOTS number of elements. */
734 Lisp_Object contents[CHAR_TABLE_ORDINARY_SLOTS];
735
736 /* A sub char table doesn't has the following slots. */
737
738 /* This points to another char table, which we inherit from
739 when the value for a specific character is nil.
740 The `defalt' slot takes precedence over this. */
741 Lisp_Object parent;
742 /* This should be a symbol which says what kind of use
743 this char-table is meant for.
744 Typically now the values can be `syntax-table' and `display-table'. */
745 Lisp_Object purpose;
746 /* These hold additional data. */
747 Lisp_Object extras[1];
748 };
749
750 /* A boolvector is a kind of vectorlike, with contents are like a string. */
751 struct Lisp_Bool_Vector
752 {
753 /* This is the vector's size field. It doesn't have the real size,
754 just the subtype information. */
755 EMACS_INT vector_size;
756 struct Lisp_Vector *next;
757 /* This is the size in bits. */
758 EMACS_INT size;
759 /* This contains the actual bits, packed into bytes. */
760 unsigned char data[1];
761 };
762
763 /* In a symbol, the markbit of the plist is used as the gc mark bit */
764
765 struct Lisp_Symbol
766 {
767 struct Lisp_String *name;
768 Lisp_Object value;
769 Lisp_Object function;
770 Lisp_Object plist;
771 Lisp_Object obarray;
772 struct Lisp_Symbol *next; /* -> next symbol in this obarray bucket */
773 };
774
775 /* This structure describes a built-in function.
776 It is generated by the DEFUN macro only.
777 defsubr makes it into a Lisp object.
778
779 This type is treated in most respects as a pseudovector,
780 but since we never dynamically allocate or free them,
781 we don't need a next-vector field. */
782
783 struct Lisp_Subr
784 {
785 EMACS_INT size;
786 Lisp_Object (*function) ();
787 short min_args, max_args;
788 char *symbol_name;
789 char *prompt;
790 char *doc;
791 };
792
793 \f
794 /***********************************************************************
795 Hash Tables
796 ***********************************************************************/
797
798 /* The structure of a Lisp hash table. */
799
800 struct Lisp_Hash_Table
801 {
802 /* Vector fields. The hash table code doesn't refer to these. */
803 EMACS_INT size;
804 struct Lisp_Vector *vec_next;
805
806 /* Function used to compare keys. */
807 Lisp_Object test;
808
809 /* Nil if table is non-weak. Otherwise a symbol describing the
810 weakness of the table. */
811 Lisp_Object weak;
812
813 /* When the table is resized, and this is an integer, compute the
814 new size by adding this to the old size. If a float, compute the
815 new size by multiplying the old size with this factor. */
816 Lisp_Object rehash_size;
817
818 /* Resize hash table when number of entries/ table size is >= this
819 ratio, a float. */
820 Lisp_Object rehash_threshold;
821
822 /* Number of key/value entries in the table. */
823 Lisp_Object count;
824
825 /* Vector of keys and values. The key of item I is found at index
826 2 * I, the value is found at index 2 * I + 1. */
827 Lisp_Object key_and_value;
828
829 /* Vector of hash codes.. If hash[I] is nil, this means that that
830 entry I is unused. */
831 Lisp_Object hash;
832
833 /* Vector used to chain entries. If entry I is free, next[I] is the
834 entry number of the next free item. If entry I is non-free,
835 next[I] is the index of the next entry in the collision chain. */
836 Lisp_Object next;
837
838 /* Index of first free entry in free list. */
839 Lisp_Object next_free;
840
841 /* Bucket vector. A non-nil entry is the index of the first item in
842 a collision chain. This vector's size can be larger than the
843 hash table size to reduce collisions. */
844 Lisp_Object index;
845
846 /* Next weak hash table if this is a weak hash table. The head
847 of the list is in Vweak_hash_tables. */
848 Lisp_Object next_weak;
849
850 /* User-supplied hash function, or nil. */
851 Lisp_Object user_hash_function;
852
853 /* User-supplied key comparison function, or nil. */
854 Lisp_Object user_cmp_function;
855
856 /* C function to compare two keys. */
857 int (* cmpfn) P_ ((struct Lisp_Hash_Table *, Lisp_Object,
858 unsigned, Lisp_Object, unsigned));
859
860 /* C function to compute hash code. */
861 unsigned (* hashfn) P_ ((struct Lisp_Hash_Table *, Lisp_Object));
862 };
863
864
865 #define XHASH_TABLE(OBJ) \
866 ((struct Lisp_Hash_Table *) XPNTR (OBJ))
867
868 #define XSET_HASH_TABLE(VAR, PTR) \
869 (XSETPSEUDOVECTOR (VAR, PTR, PVEC_HASH_TABLE))
870
871 #define HASH_TABLE_P(OBJ) PSEUDOVECTORP (OBJ, PVEC_HASH_TABLE)
872 #define GC_HASH_TABLE_P(x) GC_PSEUDOVECTORP (x, PVEC_HASH_TABLE)
873
874 #define CHECK_HASH_TABLE(x, i) \
875 do \
876 { \
877 if (!HASH_TABLE_P ((x))) \
878 x = wrong_type_argument (Qhash_table_p, (x)); \
879 } \
880 while (0)
881
882 /* Default size for hash tables if not specified. */
883
884 #define DEFAULT_HASH_SIZE 65
885
886 /* Default threshold specifying when to resize a hash table. The
887 value gives the ratio of current entries in the hash table and the
888 size of the hash table. */
889
890 #define DEFAULT_REHASH_THRESHOLD 0.8
891
892 /* Default factor by which to increase the size of a hash table. */
893
894 #define DEFAULT_REHASH_SIZE 1.5
895
896 \f
897 /* These structures are used for various misc types. */
898
899 /* A miscellaneous object, when it's on the free list. */
900 struct Lisp_Free
901 {
902 int type : 16; /* = Lisp_Misc_Free */
903 int spacer : 16;
904 union Lisp_Misc *chain;
905 };
906
907 /* In a marker, the markbit of the chain field is used as the gc mark bit. */
908 struct Lisp_Marker
909 {
910 int type : 16; /* = Lisp_Misc_Marker */
911 int spacer : 15;
912 /* 1 means normal insertion at the marker's position
913 leaves the marker after the inserted text. */
914 unsigned int insertion_type : 1;
915 /* This is the buffer that the marker points into,
916 or 0 if it points nowhere. */
917 struct buffer *buffer;
918
919 /* The remaining fields are meaningless in a marker that
920 does not point anywhere. */
921
922 /* For markers that point somewhere,
923 this is used to chain of all the markers in a given buffer. */
924 Lisp_Object chain;
925 /* This is the char position where the marker points. */
926 int charpos;
927 /* This is the byte position. */
928 int bytepos;
929 };
930
931 /* Forwarding pointer to an int variable.
932 This is allowed only in the value cell of a symbol,
933 and it means that the symbol's value really lives in the
934 specified int variable. */
935 struct Lisp_Intfwd
936 {
937 int type : 16; /* = Lisp_Misc_Intfwd */
938 int spacer : 16;
939 int *intvar;
940 };
941
942 /* Boolean forwarding pointer to an int variable.
943 This is like Lisp_Intfwd except that the ostensible
944 "value" of the symbol is t if the int variable is nonzero,
945 nil if it is zero. */
946 struct Lisp_Boolfwd
947 {
948 int type : 16; /* = Lisp_Misc_Boolfwd */
949 int spacer : 16;
950 int *boolvar;
951 };
952
953 /* Forwarding pointer to a Lisp_Object variable.
954 This is allowed only in the value cell of a symbol,
955 and it means that the symbol's value really lives in the
956 specified variable. */
957 struct Lisp_Objfwd
958 {
959 int type : 16; /* = Lisp_Misc_Objfwd */
960 int spacer : 16;
961 Lisp_Object *objvar;
962 };
963
964 /* Like Lisp_Objfwd except that value lives in a slot in the
965 current buffer. Value is byte index of slot within buffer. */
966 struct Lisp_Buffer_Objfwd
967 {
968 int type : 16; /* = Lisp_Misc_Buffer_Objfwd */
969 int spacer : 16;
970 int offset;
971 };
972
973 /* struct Lisp_Buffer_Local_Value is used in a symbol value cell when
974 the symbol has buffer-local or frame-local bindings. (Exception:
975 some buffer-local variables are built-in, with their values stored
976 in the buffer structure itself. They are handled differently,
977 using struct Lisp_Buffer_Objfwd.)
978
979 The `realvalue' slot holds the variable's current value, or a
980 forwarding pointer to where that value is kept. This value is the
981 one that corresponds to the loaded binding. To read or set the
982 variable, you must first make sure the right binding is loaded;
983 then you can access the value in (or through) `realvalue'.
984
985 `buffer' and `frame' are the buffer and frame for which the loaded
986 binding was found. If those have changed, to make sure the right
987 binding is loaded it is necessary to find which binding goes with
988 the current buffer and selected frame, then load it. To load it,
989 first unload the previous binding, then copy the value of the new
990 binding into `realvalue' (or through it). Also update
991 LOADED-BINDING to point to the newly loaded binding.
992
993 Lisp_Misc_Buffer_Local_Value and Lisp_Misc_Some_Buffer_Local_Value
994 both use this kind of structure. With the former, merely setting
995 the variable creates a local binding for the current buffer. With
996 the latter, setting the variable does not do that; only
997 make-local-variable does that. */
998
999 struct Lisp_Buffer_Local_Value
1000 {
1001 int type : 16; /* = Lisp_Misc_Buffer_Local_Value
1002 or Lisp_Misc_Some_Buffer_Local_Value */
1003 int spacer : 13;
1004
1005 /* 1 means this variable is allowed to have frame-local bindings,
1006 so check for them when looking for the proper binding. */
1007 unsigned int check_frame : 1;
1008 /* 1 means that the binding now loaded was found
1009 as a local binding for the buffer in the `buffer' slot. */
1010 unsigned int found_for_buffer : 1;
1011 /* 1 means that the binding now loaded was found
1012 as a local binding for the frame in the `frame' slot. */
1013 unsigned int found_for_frame : 1;
1014 Lisp_Object realvalue;
1015 /* The buffer and frame for which the loaded binding was found. */
1016 Lisp_Object buffer, frame;
1017
1018 /* A cons cell, (LOADED-BINDING . DEFAULT-VALUE).
1019
1020 LOADED-BINDING is the binding now loaded. It is a cons cell
1021 whose cdr is the binding's value. The cons cell may be an
1022 element of a buffer's local-variable alist, or an element of a
1023 frame's parameter alist, or it may be this cons cell.
1024
1025 DEFAULT-VALUE is the variable's default value, seen when the
1026 current buffer and selected frame do not have their own
1027 bindings for the variable. When the default binding is loaded,
1028 LOADED-BINDING is actually this very cons cell; thus, its car
1029 points to itself. */
1030 Lisp_Object cdr;
1031 };
1032
1033 /* In an overlay object, the mark bit of the plist is used as the GC mark.
1034 START and END are markers in the overlay's buffer, and
1035 PLIST is the overlay's property list. */
1036 struct Lisp_Overlay
1037 {
1038 int type : 16; /* = Lisp_Misc_Overlay */
1039 int spacer : 16;
1040 Lisp_Object start, end, plist;
1041 };
1042
1043 /* Like Lisp_Objfwd except that value lives in a slot in the
1044 current kboard. */
1045 struct Lisp_Kboard_Objfwd
1046 {
1047 int type : 16; /* = Lisp_Misc_Kboard_Objfwd */
1048 int spacer : 16;
1049 int offset;
1050 };
1051
1052
1053 /* To get the type field of a union Lisp_Misc, use XMISCTYPE.
1054 It uses one of these struct subtypes to get the type field. */
1055
1056 union Lisp_Misc
1057 {
1058 struct Lisp_Free u_free;
1059 struct Lisp_Marker u_marker;
1060 struct Lisp_Intfwd u_intfwd;
1061 struct Lisp_Boolfwd u_boolfwd;
1062 struct Lisp_Objfwd u_objfwd;
1063 struct Lisp_Buffer_Objfwd u_buffer_objfwd;
1064 struct Lisp_Buffer_Local_Value u_buffer_local_value;
1065 struct Lisp_Overlay u_overlay;
1066 struct Lisp_Kboard_Objfwd u_kboard_objfwd;
1067 };
1068 \f
1069 /* Lisp floating point type */
1070 struct Lisp_Float
1071 {
1072 Lisp_Object type; /* essentially used for mark-bit
1073 and chaining when on free-list */
1074 #ifdef HIDE_LISP_IMPLEMENTATION
1075 double data_;
1076 #else
1077 double data;
1078 #endif
1079 };
1080
1081 #ifdef HIDE_LISP_IMPLEMENTATION
1082 #define XFLOAT_DATA(f) (XFLOAT (f)->data_)
1083 #else
1084 #define XFLOAT_DATA(f) (XFLOAT (f)->data)
1085 #endif
1086
1087 /* A character, declared with the following typedef, is a member
1088 of some character set associated with the current buffer. */
1089 #ifndef _UCHAR_T /* Protect against something in ctab.h on AIX. */
1090 #define _UCHAR_T
1091 typedef unsigned char UCHAR;
1092 #endif
1093
1094 /* Meanings of slots in a Lisp_Compiled: */
1095
1096 #define COMPILED_ARGLIST 0
1097 #define COMPILED_BYTECODE 1
1098 #define COMPILED_CONSTANTS 2
1099 #define COMPILED_STACK_DEPTH 3
1100 #define COMPILED_DOC_STRING 4
1101 #define COMPILED_INTERACTIVE 5
1102
1103 /* Flag bits in a character. These also get used in termhooks.h.
1104 Richard Stallman <rms@gnu.ai.mit.edu> thinks that MULE
1105 (MUlti-Lingual Emacs) might need 22 bits for the character value
1106 itself, so we probably shouldn't use any bits lower than 0x0400000. */
1107 #define CHAR_ALT (0x0400000)
1108 #define CHAR_SUPER (0x0800000)
1109 #define CHAR_HYPER (0x1000000)
1110 #define CHAR_SHIFT (0x2000000)
1111 #define CHAR_CTL (0x4000000)
1112 #define CHAR_META (0x8000000)
1113
1114 #define CHAR_MODIFIER_MASK \
1115 (CHAR_ALT | CHAR_SUPER | CHAR_HYPER | CHAR_SHIFT | CHAR_CTL | CHAR_META)
1116
1117
1118 /* Actually, the current Emacs uses 19 bits for the character value
1119 itself. */
1120 #define CHARACTERBITS 19
1121
1122 /* The maximum byte size consumed by push_key_description.
1123 All callers should assure that at least this size of memory is
1124 allocated at the place pointed by the second argument.
1125
1126 Thers are 6 modifiers, each consumes 2 chars.
1127 The octal form of a character code consumes
1128 (1 + CHARACTERBITS / 3 + 1) chars (including backslash at the head).
1129 We need one more byte for string terminator `\0'. */
1130 #define KEY_DESCRIPTION_SIZE ((2 * 6) + 1 + (CHARACTERBITS / 3) + 1 + 1)
1131
1132 #ifdef USE_X_TOOLKIT
1133 #ifdef NO_UNION_TYPE
1134 /* Use this for turning a (void *) into a Lisp_Object, as when the
1135 Lisp_Object is passed into a toolkit callback function. */
1136 #define VOID_TO_LISP(larg,varg) \
1137 do { ((larg) = ((Lisp_Object) (varg))); } while (0)
1138 #define CVOID_TO_LISP VOID_TO_LISP
1139
1140 /* Use this for turning a Lisp_Object into a (void *), as when the
1141 Lisp_Object is passed into a toolkit callback function. */
1142 #define LISP_TO_VOID(larg) ((void *) (larg))
1143 #define LISP_TO_CVOID(varg) ((const void *) (larg))
1144
1145 #else /* not NO_UNION_TYPE */
1146 /* Use this for turning a (void *) into a Lisp_Object, as when the
1147 Lisp_Object is passed into a toolkit callback function. */
1148 #define VOID_TO_LISP(larg,varg) \
1149 do { ((larg).v = (void *) (varg)); } while (0)
1150 #define CVOID_TO_LISP(larg,varg) \
1151 do { ((larg).cv = (const void *) (varg)); } while (0)
1152
1153 /* Use this for turning a Lisp_Object into a (void *), as when the
1154 Lisp_Object is passed into a toolkit callback function. */
1155 #define LISP_TO_VOID(larg) ((larg).v)
1156 #define LISP_TO_CVOID(larg) ((larg).cv)
1157 #endif /* not NO_UNION_TYPE */
1158 #endif /* USE_X_TOOLKIT */
1159
1160 \f
1161 /* The glyph datatype, used to represent characters on the display. */
1162
1163 /* Glyph code to use as an index to the glyph table. If it is out of
1164 range for the glyph table, or the corresonding element in the table
1165 is nil, the low 8 bits are the single byte character code, and the
1166 bits above are the numeric face ID. If FID is the face ID of a
1167 glyph on a frame F, then F->display.x->faces[FID] contains the
1168 description of that face. This is an int instead of a short, so we
1169 can support a good bunch of face ID's (2^(31 - 8)); given that we
1170 have no mechanism for tossing unused frame face ID's yet, we'll
1171 probably run out of 255 pretty quickly.
1172 This is always -1 for a multibyte character. */
1173 #define GLYPH int
1174
1175 /* Mask bits for face. */
1176 #define GLYPH_MASK_FACE 0x7FF80000
1177 /* Mask bits for character code. */
1178 #define GLYPH_MASK_CHAR 0x0007FFFF /* The lowest 19 bits */
1179
1180 /* The FAST macros assume that we already know we're in an X window. */
1181
1182 /* Set a character code and a face ID in a glyph G. */
1183 #define FAST_MAKE_GLYPH(char, face) ((char) | ((face) << CHARACTERBITS))
1184
1185 /* Return a glyph's character code. */
1186 #define FAST_GLYPH_CHAR(glyph) ((glyph) & GLYPH_MASK_CHAR)
1187
1188 /* Return a glyph's face ID. */
1189 #define FAST_GLYPH_FACE(glyph) (((glyph) & GLYPH_MASK_FACE) >> CHARACTERBITS)
1190
1191 /* Slower versions that test the frame type first. */
1192 #define MAKE_GLYPH(f, char, face) (FAST_MAKE_GLYPH (char, face))
1193 #define GLYPH_CHAR(f, g) (FAST_GLYPH_CHAR (g))
1194 #define GLYPH_FACE(f, g) (FAST_GLYPH_FACE (g))
1195
1196 /* Return 1 iff GLYPH contains valid character code. */
1197 #define GLYPH_CHAR_VALID_P(glyph) \
1198 ((GLYPH) (FAST_GLYPH_CHAR (glyph)) <= MAX_CHAR)
1199
1200 /* The ID of the mode line highlighting face. */
1201 #define GLYPH_MODE_LINE_FACE 1
1202 \f
1203 /* Data type checking */
1204
1205 #define NILP(x) (XFASTINT (x) == XFASTINT (Qnil))
1206 #define GC_NILP(x) GC_EQ (x, Qnil)
1207
1208 #define NUMBERP(x) (INTEGERP (x) || FLOATP (x))
1209 #define GC_NUMBERP(x) (GC_INTEGERP (x) || GC_FLOATP (x))
1210 #define NATNUMP(x) (INTEGERP (x) && XINT (x) >= 0)
1211 #define GC_NATNUMP(x) (GC_INTEGERP (x) && XINT (x) >= 0)
1212
1213 #define INTEGERP(x) (XTYPE ((x)) == Lisp_Int)
1214 #define GC_INTEGERP(x) (XGCTYPE ((x)) == Lisp_Int)
1215 #define SYMBOLP(x) (XTYPE ((x)) == Lisp_Symbol)
1216 #define GC_SYMBOLP(x) (XGCTYPE ((x)) == Lisp_Symbol)
1217 #define MISCP(x) (XTYPE ((x)) == Lisp_Misc)
1218 #define GC_MISCP(x) (XGCTYPE ((x)) == Lisp_Misc)
1219 #define VECTORLIKEP(x) (XTYPE ((x)) == Lisp_Vectorlike)
1220 #define GC_VECTORLIKEP(x) (XGCTYPE ((x)) == Lisp_Vectorlike)
1221 #define STRINGP(x) (XTYPE ((x)) == Lisp_String)
1222 #define GC_STRINGP(x) (XGCTYPE ((x)) == Lisp_String)
1223 #define CONSP(x) (XTYPE ((x)) == Lisp_Cons)
1224 #define GC_CONSP(x) (XGCTYPE ((x)) == Lisp_Cons)
1225
1226 #define FLOATP(x) (XTYPE ((x)) == Lisp_Float)
1227 #define GC_FLOATP(x) (XGCTYPE ((x)) == Lisp_Float)
1228 #define VECTORP(x) (VECTORLIKEP (x) && !(XVECTOR (x)->size & PSEUDOVECTOR_FLAG))
1229 #define GC_VECTORP(x) (GC_VECTORLIKEP (x) && !(XVECTOR (x)->size & PSEUDOVECTOR_FLAG))
1230 #define OVERLAYP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Overlay)
1231 #define GC_OVERLAYP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Overlay)
1232 #define MARKERP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Marker)
1233 #define GC_MARKERP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Marker)
1234 #define INTFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Intfwd)
1235 #define GC_INTFWDP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Intfwd)
1236 #define BOOLFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Boolfwd)
1237 #define GC_BOOLFWDP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Boolfwd)
1238 #define OBJFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Objfwd)
1239 #define GC_OBJFWDP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Objfwd)
1240 #define BUFFER_OBJFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Buffer_Objfwd)
1241 #define GC_BUFFER_OBJFWDP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Buffer_Objfwd)
1242 #define BUFFER_LOCAL_VALUEP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Buffer_Local_Value)
1243 #define GC_BUFFER_LOCAL_VALUEP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Buffer_Local_Value)
1244 #define SOME_BUFFER_LOCAL_VALUEP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Some_Buffer_Local_Value)
1245 #define GC_SOME_BUFFER_LOCAL_VALUEP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Some_Buffer_Local_Value)
1246 #define KBOARD_OBJFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Kboard_Objfwd)
1247 #define GC_KBOARD_OBJFWDP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Kboard_Objfwd)
1248
1249
1250 /* True if object X is a pseudovector whose code is CODE. */
1251 #define PSEUDOVECTORP(x, code) \
1252 (VECTORLIKEP (x) \
1253 && (((XVECTOR (x)->size & (PSEUDOVECTOR_FLAG | (code)))) \
1254 == (PSEUDOVECTOR_FLAG | (code))))
1255
1256 /* True if object X is a pseudovector whose code is CODE.
1257 This one works during GC. */
1258 #define GC_PSEUDOVECTORP(x, code) \
1259 (GC_VECTORLIKEP (x) \
1260 && (((XVECTOR (x)->size & (PSEUDOVECTOR_FLAG | (code)))) \
1261 == (PSEUDOVECTOR_FLAG | (code))))
1262
1263 /* Test for specific pseudovector types. */
1264 #define WINDOW_CONFIGURATIONP(x) PSEUDOVECTORP (x, PVEC_WINDOW_CONFIGURATION)
1265 #define GC_WINDOW_CONFIGURATIONP(x) GC_PSEUDOVECTORP (x, PVEC_WINDOW_CONFIGURATION)
1266 #define PROCESSP(x) PSEUDOVECTORP (x, PVEC_PROCESS)
1267 #define GC_PROCESSP(x) GC_PSEUDOVECTORP (x, PVEC_PROCESS)
1268 #define WINDOWP(x) PSEUDOVECTORP (x, PVEC_WINDOW)
1269 #define GC_WINDOWP(x) GC_PSEUDOVECTORP (x, PVEC_WINDOW)
1270 #define SUBRP(x) PSEUDOVECTORP (x, PVEC_SUBR)
1271 #define GC_SUBRP(x) GC_PSEUDOVECTORP (x, PVEC_SUBR)
1272 #define COMPILEDP(x) PSEUDOVECTORP (x, PVEC_COMPILED)
1273 #define GC_COMPILEDP(x) GC_PSEUDOVECTORP (x, PVEC_COMPILED)
1274 #define BUFFERP(x) PSEUDOVECTORP (x, PVEC_BUFFER)
1275 #define GC_BUFFERP(x) GC_PSEUDOVECTORP (x, PVEC_BUFFER)
1276 #define CHAR_TABLE_P(x) PSEUDOVECTORP (x, PVEC_CHAR_TABLE)
1277 #define GC_CHAR_TABLE_P(x) GC_PSEUDOVECTORP (x, PVEC_CHAR_TABLE)
1278 #define BOOL_VECTOR_P(x) PSEUDOVECTORP (x, PVEC_BOOL_VECTOR)
1279 #define GC_BOOL_VECTOR_P(x) GC_PSEUDOVECTORP (x, PVEC_BOOL_VECTOR)
1280 #define FRAMEP(x) PSEUDOVECTORP (x, PVEC_FRAME)
1281 #define GC_FRAMEP(x) GC_PSEUDOVECTORP (x, PVEC_FRAME)
1282
1283 #define SUB_CHAR_TABLE_P(x) (CHAR_TABLE_P (x) && NILP (XCHAR_TABLE (x)->top))
1284 \f
1285 #define EQ(x, y) (XFASTINT (x) == XFASTINT (y))
1286 #define GC_EQ(x, y) (XGCTYPE (x) == XGCTYPE (y) && XPNTR (x) == XPNTR (y))
1287
1288 #define CHECK_LIST(x, i) \
1289 do { if (!CONSP ((x)) && !NILP (x)) x = wrong_type_argument (Qlistp, (x)); } while (0)
1290
1291 #define CHECK_STRING(x, i) \
1292 do { if (!STRINGP ((x))) x = wrong_type_argument (Qstringp, (x)); } while (0)
1293
1294 #define CHECK_CONS(x, i) \
1295 do { if (!CONSP ((x))) x = wrong_type_argument (Qconsp, (x)); } while (0)
1296
1297 #define CHECK_SYMBOL(x, i) \
1298 do { if (!SYMBOLP ((x))) x = wrong_type_argument (Qsymbolp, (x)); } while (0)
1299
1300 #define CHECK_CHAR_TABLE(x, i) \
1301 do { if (!CHAR_TABLE_P ((x))) \
1302 x = wrong_type_argument (Qchar_table_p, (x)); } while (0)
1303
1304 #define CHECK_VECTOR(x, i) \
1305 do { if (!VECTORP ((x))) x = wrong_type_argument (Qvectorp, (x)); } while (0)
1306
1307 #define CHECK_VECTOR_OR_CHAR_TABLE(x, i) \
1308 do { if (!VECTORP ((x)) && !CHAR_TABLE_P ((x))) \
1309 x = wrong_type_argument (Qvector_or_char_table_p, (x)); \
1310 } while (0)
1311
1312 #define CHECK_BUFFER(x, i) \
1313 do { if (!BUFFERP ((x))) x = wrong_type_argument (Qbufferp, (x)); } while (0)
1314
1315 #define CHECK_WINDOW(x, i) \
1316 do { if (!WINDOWP ((x))) x = wrong_type_argument (Qwindowp, (x)); } while (0)
1317
1318 /* This macro rejects windows on the interior of the window tree as
1319 "dead", which is what we want; this is an argument-checking macro, and
1320 the user should never get access to interior windows.
1321
1322 A window of any sort, leaf or interior, is dead iff the buffer,
1323 vchild, and hchild members are all nil. */
1324
1325 #define CHECK_LIVE_WINDOW(x, i) \
1326 do { \
1327 if (!WINDOWP ((x)) \
1328 || NILP (XWINDOW ((x))->buffer)) \
1329 x = wrong_type_argument (Qwindow_live_p, (x)); \
1330 } while (0)
1331
1332 #define CHECK_PROCESS(x, i) \
1333 do { if (!PROCESSP ((x))) x = wrong_type_argument (Qprocessp, (x)); } while (0)
1334
1335 #define CHECK_NUMBER(x, i) \
1336 do { if (!INTEGERP ((x))) x = wrong_type_argument (Qintegerp, (x)); } while (0)
1337
1338 #define CHECK_NATNUM(x, i) \
1339 do { if (!NATNUMP (x)) x = wrong_type_argument (Qwholenump, (x)); } while (0)
1340
1341 #define CHECK_MARKER(x, i) \
1342 do { if (!MARKERP ((x))) x = wrong_type_argument (Qmarkerp, (x)); } while (0)
1343
1344 #define CHECK_NUMBER_COERCE_MARKER(x, i) \
1345 do { if (MARKERP ((x))) XSETFASTINT (x, marker_position (x)); \
1346 else if (!INTEGERP ((x))) x = wrong_type_argument (Qinteger_or_marker_p, (x)); } while (0)
1347
1348 #define XFLOATINT(n) extract_float((n))
1349
1350 #define CHECK_FLOAT(x, i) \
1351 do { if (!FLOATP (x)) \
1352 x = wrong_type_argument (Qfloatp, (x)); } while (0)
1353
1354 #define CHECK_NUMBER_OR_FLOAT(x, i) \
1355 do { if (!FLOATP (x) && !INTEGERP (x)) \
1356 x = wrong_type_argument (Qnumberp, (x)); } while (0)
1357
1358 #define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(x, i) \
1359 do { if (MARKERP (x)) XSETFASTINT (x, marker_position (x)); \
1360 else if (!INTEGERP (x) && !FLOATP (x)) \
1361 x = wrong_type_argument (Qnumber_or_marker_p, (x)); } while (0)
1362
1363 #define CHECK_OVERLAY(x, i) \
1364 do { if (!OVERLAYP ((x))) x = wrong_type_argument (Qoverlayp, (x));} while (0)
1365
1366 /* Cast pointers to this type to compare them. Some machines want int. */
1367 #ifndef PNTR_COMPARISON_TYPE
1368 #define PNTR_COMPARISON_TYPE EMACS_UINT
1369 #endif
1370 \f
1371 /* Define a built-in function for calling from Lisp.
1372 `lname' should be the name to give the function in Lisp,
1373 as a null-terminated C string.
1374 `fnname' should be the name of the function in C.
1375 By convention, it starts with F.
1376 `sname' should be the name for the C constant structure
1377 that records information on this function for internal use.
1378 By convention, it should be the same as `fnname' but with S instead of F.
1379 It's too bad that C macros can't compute this from `fnname'.
1380 `minargs' should be a number, the minimum number of arguments allowed.
1381 `maxargs' should be a number, the maximum number of arguments allowed,
1382 or else MANY or UNEVALLED.
1383 MANY means pass a vector of evaluated arguments,
1384 in the form of an integer number-of-arguments
1385 followed by the address of a vector of Lisp_Objects
1386 which contains the argument values.
1387 UNEVALLED means pass the list of unevaluated arguments
1388 `prompt' says how to read arguments for an interactive call.
1389 See the doc string for `interactive'.
1390 A null string means call interactively with no arguments.
1391 `doc' is documentation for the user. */
1392
1393 #if (!defined (__STDC__) && !defined (PROTOTYPES)) \
1394 || defined (USE_NONANSI_DEFUN)
1395 #define DEFUN(lname, fnname, sname, minargs, maxargs, prompt, doc) \
1396 Lisp_Object fnname (); \
1397 struct Lisp_Subr sname = \
1398 { PVEC_SUBR | (sizeof (struct Lisp_Subr) / sizeof (EMACS_INT)), \
1399 fnname, minargs, maxargs, lname, prompt, 0}; \
1400 Lisp_Object fnname
1401
1402 #else
1403
1404 /* This version of DEFUN declares a function prototype with the right
1405 arguments, so we can catch errors with maxargs at compile-time. */
1406 #define DEFUN(lname, fnname, sname, minargs, maxargs, prompt, doc) \
1407 Lisp_Object fnname DEFUN_ARGS_ ## maxargs ; \
1408 struct Lisp_Subr sname = \
1409 { PVEC_SUBR | (sizeof (struct Lisp_Subr) / sizeof (EMACS_INT)), \
1410 fnname, minargs, maxargs, lname, prompt, 0}; \
1411 Lisp_Object fnname
1412
1413 /* Note that the weird token-substitution semantics of ANSI C makes
1414 this work for MANY and UNEVALLED. */
1415 #define DEFUN_ARGS_MANY (int, Lisp_Object *)
1416 #define DEFUN_ARGS_UNEVALLED (Lisp_Object)
1417 #define DEFUN_ARGS_0 (void)
1418 #define DEFUN_ARGS_1 (Lisp_Object)
1419 #define DEFUN_ARGS_2 (Lisp_Object, Lisp_Object)
1420 #define DEFUN_ARGS_3 (Lisp_Object, Lisp_Object, Lisp_Object)
1421 #define DEFUN_ARGS_4 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)
1422 #define DEFUN_ARGS_5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
1423 Lisp_Object)
1424 #define DEFUN_ARGS_6 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
1425 Lisp_Object, Lisp_Object)
1426 #define DEFUN_ARGS_7 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
1427 Lisp_Object, Lisp_Object, Lisp_Object)
1428 #define DEFUN_ARGS_8 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
1429 Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)
1430 #endif
1431
1432 /* Non-zero if OBJ is a Lisp function. */
1433
1434 #define FUNCTIONP(OBJ) \
1435 ((CONSP (OBJ) && EQ (XCAR (OBJ), Qlambda)) \
1436 || (SYMBOLP (OBJ) && !NILP (Ffboundp (OBJ))) \
1437 || COMPILEDP (OBJ) \
1438 || SUBRP (OBJ))
1439
1440 /* defsubr (Sname);
1441 is how we define the symbol for function `name' at start-up time. */
1442 extern void defsubr P_ ((struct Lisp_Subr *));
1443
1444 #define MANY -2
1445 #define UNEVALLED -1
1446
1447 extern void defvar_lisp P_ ((char *, Lisp_Object *));
1448 extern void defvar_lisp_nopro P_ ((char *, Lisp_Object *));
1449 extern void defvar_bool P_ ((char *, int *));
1450 extern void defvar_int P_ ((char *, int *));
1451 extern void defvar_per_buffer P_ ((char *, Lisp_Object *, Lisp_Object, char *));
1452 extern void defvar_kboard P_ ((char *, int));
1453
1454 /* Macros we use to define forwarded Lisp variables.
1455 These are used in the syms_of_FILENAME functions. */
1456
1457 #define DEFVAR_LISP(lname, vname, doc) defvar_lisp (lname, vname)
1458 #define DEFVAR_LISP_NOPRO(lname, vname, doc) defvar_lisp_nopro (lname, vname)
1459 #define DEFVAR_BOOL(lname, vname, doc) defvar_bool (lname, vname)
1460 #define DEFVAR_INT(lname, vname, doc) defvar_int (lname, vname)
1461 #define DEFVAR_PER_BUFFER(lname, vname, type, doc) \
1462 defvar_per_buffer (lname, vname, type, 0)
1463 #define DEFVAR_KBOARD(lname, vname, doc) \
1464 defvar_kboard (lname, \
1465 (int)((char *)(&current_kboard->vname) \
1466 - (char *)current_kboard))
1467 \f
1468 /* Structure for recording Lisp call stack for backtrace purposes. */
1469
1470 /* The special binding stack holds the outer values of variables while
1471 they are bound by a function application or a let form, stores the
1472 code to be executed for Lisp unwind-protect forms, and stores the C
1473 functions to be called for record_unwind_protect.
1474
1475 If func is non-zero, undoing this binding applies func to old_value;
1476 This implements record_unwind_protect.
1477 If func is zero and symbol is nil, undoing this binding evaluates
1478 the list of forms in old_value; this implements Lisp's unwind-protect
1479 form.
1480
1481 Otherwise, the element is a variable binding.
1482 If the symbol field is a symbol, it is an ordinary variable binding.
1483 Otherwise, it should be a structure (SYMBOL BUFFER . BUFFER),
1484 which represents having bound BUFFER's local value,
1485 or (SYMBOL nil . BUFFER), which represents having bound the default
1486 value when BUFFER was current (buffer not having any local binding
1487 for SYMBOL). */
1488
1489 struct specbinding
1490 {
1491 Lisp_Object symbol, old_value;
1492 Lisp_Object (*func) P_ ((Lisp_Object));
1493 Lisp_Object unused; /* Dividing by 16 is faster than by 12 */
1494 };
1495
1496 extern struct specbinding *specpdl;
1497 extern struct specbinding *specpdl_ptr;
1498 extern int specpdl_size;
1499
1500 /* Everything needed to describe an active condition case. */
1501 struct handler
1502 {
1503 /* The handler clauses and variable from the condition-case form. */
1504 Lisp_Object handler;
1505 Lisp_Object var;
1506 /* Fsignal stores here the condition-case clause that applies,
1507 and Fcondition_case thus knows which clause to run. */
1508 Lisp_Object chosen_clause;
1509
1510 /* Used to effect the longjump out to the handler. */
1511 struct catchtag *tag;
1512
1513 /* The next enclosing handler. */
1514 struct handler *next;
1515 };
1516
1517 extern struct handler *handlerlist;
1518
1519 extern struct catchtag *catchlist;
1520 extern struct backtrace *backtrace_list;
1521
1522 extern Lisp_Object memory_signal_data;
1523
1524 /* An address near the bottom of the stack.
1525 Tells GC how to save a copy of the stack. */
1526 extern char *stack_bottom;
1527
1528 /* Check quit-flag and quit if it is non-nil.
1529 Typing C-g does not directly cause a quit; it only sets Vquit_flag.
1530 So the program needs to do QUIT at times when it is safe to quit.
1531 Every loop that might run for a long time or might not exit
1532 ought to do QUIT at least once, at a safe place.
1533 Unless that is impossible, of course.
1534 But it is very desirable to avoid creating loops where QUIT is impossible.
1535
1536 Exception: if you set immediate_quit to nonzero,
1537 then the handler that responds to the C-g does the quit itself.
1538 This is a good thing to do around a loop that has no side effects
1539 and (in particular) cannot call arbitrary Lisp code. */
1540
1541 #define QUIT \
1542 do { \
1543 if (!NILP (Vquit_flag) && NILP (Vinhibit_quit)) \
1544 { \
1545 Vquit_flag = Qnil; \
1546 Fsignal (Qquit, Qnil); \
1547 } \
1548 } while (0)
1549
1550 /* Nonzero if ought to quit now. */
1551
1552 #define QUITP (!NILP (Vquit_flag) && NILP (Vinhibit_quit))
1553 \f
1554 /* Variables used locally in the following case handling macros. */
1555 extern int case_temp1;
1556 extern Lisp_Object case_temp2;
1557
1558 /* Current buffer's map from characters to lower-case characters. */
1559
1560 #define DOWNCASE_TABLE current_buffer->downcase_table
1561
1562 /* Current buffer's map from characters to upper-case characters. */
1563
1564 #define UPCASE_TABLE current_buffer->upcase_table
1565
1566 /* Downcase a character, or make no change if that cannot be done. */
1567
1568 #define DOWNCASE(CH) \
1569 ((case_temp1 = (CH), \
1570 case_temp2 = CHAR_TABLE_REF (DOWNCASE_TABLE, case_temp1), \
1571 NATNUMP (case_temp2)) \
1572 ? XFASTINT (case_temp2) : case_temp1)
1573
1574 /* 1 if CH is upper case. */
1575
1576 #define UPPERCASEP(CH) (DOWNCASE (CH) != (CH))
1577
1578 /* 1 if CH is neither upper nor lower case. */
1579
1580 #define NOCASEP(CH) (UPCASE1 (CH) == (CH))
1581
1582 /* 1 if CH is lower case. */
1583
1584 #define LOWERCASEP(CH) (!UPPERCASEP (CH) && !NOCASEP(CH))
1585
1586 /* Upcase a character, or make no change if that cannot be done. */
1587
1588 #define UPCASE(CH) (!UPPERCASEP (CH) ? UPCASE1 (CH) : (CH))
1589
1590 /* Upcase a character known to be not upper case. */
1591
1592 #define UPCASE1(CH) \
1593 ((case_temp1 = (CH), \
1594 case_temp2 = CHAR_TABLE_REF (UPCASE_TABLE, case_temp1), \
1595 NATNUMP (case_temp2)) \
1596 ? XFASTINT (case_temp2) : case_temp1)
1597
1598 extern Lisp_Object Vascii_downcase_table;
1599 \f
1600 /* Number of bytes of structure consed since last GC. */
1601
1602 extern int consing_since_gc;
1603
1604 /* Threshold for doing another gc. */
1605
1606 extern int gc_cons_threshold;
1607
1608 /* Structure for recording stack slots that need marking. */
1609
1610 /* This is a chain of structures, each of which points at a Lisp_Object variable
1611 whose value should be marked in garbage collection.
1612 Normally every link of the chain is an automatic variable of a function,
1613 and its `val' points to some argument or local variable of the function.
1614 On exit to the function, the chain is set back to the value it had on entry.
1615 This way, no link remains in the chain when the stack frame containing the
1616 link disappears.
1617
1618 Every function that can call Feval must protect in this fashion all
1619 Lisp_Object variables whose contents will be used again. */
1620
1621 extern struct gcpro *gcprolist;
1622
1623 struct gcpro
1624 {
1625 struct gcpro *next;
1626 Lisp_Object *var; /* Address of first protected variable */
1627 int nvars; /* Number of consecutive protected variables */
1628 #ifdef DEBUG_GCPRO
1629 int level;
1630 #endif
1631 };
1632
1633 /* Values of GC_MARK_STACK during compilation:
1634
1635 0 Use GCPRO as before
1636 1 Do the real thing, make GCPROs and UNGCPRO no-ops.
1637 2 Mark the stack, and check that everything GCPRO'd is
1638 marked.
1639 3 Mark using GCPRO's, mark stack last, and count how many
1640 dead objects are kept alive. */
1641
1642
1643 #define GC_USE_GCPROS_AS_BEFORE 0
1644 #define GC_MAKE_GCPROS_NOOPS 1
1645 #define GC_MARK_STACK_CHECK_GCPROS 2
1646 #define GC_USE_GCPROS_CHECK_ZOMBIES 3
1647
1648 #ifndef GC_MARK_STACK
1649 #define GC_MARK_STACK GC_USE_GCPROS_AS_BEFORE
1650 #endif
1651
1652 #if GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS
1653
1654 #define GCPRO1(varname) ((void) 0)
1655 #define GCPRO2(varname1, varname2)((void) 0)
1656 #define GCPRO3(varname1, varname2, varname3) ((void) 0)
1657 #define GCPRO4(varname1, varname2, varname3, varname4) ((void) 0)
1658 #define GCPRO5(varname1, varname2, varname3, varname4, varname5) ((void) 0)
1659 #define UNGCPRO ((void) 0)
1660
1661 #else /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */
1662
1663 #ifndef DEBUG_GCPRO
1664
1665 #define GCPRO1(varname) \
1666 {gcpro1.next = gcprolist; gcpro1.var = &varname; gcpro1.nvars = 1; \
1667 gcprolist = &gcpro1; }
1668
1669 #define GCPRO2(varname1, varname2) \
1670 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
1671 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
1672 gcprolist = &gcpro2; }
1673
1674 #define GCPRO3(varname1, varname2, varname3) \
1675 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
1676 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
1677 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
1678 gcprolist = &gcpro3; }
1679
1680 #define GCPRO4(varname1, varname2, varname3, varname4) \
1681 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
1682 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
1683 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
1684 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
1685 gcprolist = &gcpro4; }
1686
1687 #define GCPRO5(varname1, varname2, varname3, varname4, varname5) \
1688 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
1689 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
1690 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
1691 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
1692 gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \
1693 gcprolist = &gcpro5; }
1694
1695 #define UNGCPRO (gcprolist = gcpro1.next)
1696
1697 #else
1698
1699 extern int gcpro_level;
1700
1701 #define GCPRO1(varname) \
1702 {gcpro1.next = gcprolist; gcpro1.var = &varname; gcpro1.nvars = 1; \
1703 gcpro1.level = gcpro_level++; \
1704 gcprolist = &gcpro1; }
1705
1706 #define GCPRO2(varname1, varname2) \
1707 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
1708 gcpro1.level = gcpro_level; \
1709 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
1710 gcpro2.level = gcpro_level++; \
1711 gcprolist = &gcpro2; }
1712
1713 #define GCPRO3(varname1, varname2, varname3) \
1714 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
1715 gcpro1.level = gcpro_level; \
1716 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
1717 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
1718 gcpro3.level = gcpro_level++; \
1719 gcprolist = &gcpro3; }
1720
1721 #define GCPRO4(varname1, varname2, varname3, varname4) \
1722 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
1723 gcpro1.level = gcpro_level; \
1724 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
1725 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
1726 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
1727 gcpro4.level = gcpro_level++; \
1728 gcprolist = &gcpro4; }
1729
1730 #define GCPRO5(varname1, varname2, varname3, varname4, varname5) \
1731 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
1732 gcpro1.level = gcpro_level; \
1733 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
1734 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
1735 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
1736 gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \
1737 gcpro5.level = gcpro_level++; \
1738 gcprolist = &gcpro5; }
1739
1740 #define UNGCPRO \
1741 ((--gcpro_level != gcpro1.level) \
1742 ? (abort (), 0) \
1743 : ((gcprolist = gcpro1.next), 0))
1744
1745 #endif /* DEBUG_GCPRO */
1746 #endif /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */
1747
1748
1749 /* Evaluate expr, UNGCPRO, and then return the value of expr. */
1750 #define RETURN_UNGCPRO(expr) \
1751 do \
1752 { \
1753 Lisp_Object ret_ungc_val; \
1754 ret_ungc_val = (expr); \
1755 UNGCPRO; \
1756 return ret_ungc_val; \
1757 } \
1758 while (0)
1759
1760 /* Call staticpro (&var) to protect static variable `var'. */
1761
1762 void staticpro P_ ((Lisp_Object *));
1763 \f
1764 /* Declare a Lisp-callable function. The MAXARGS parameter has the same
1765 meaning as in the DEFUN macro, and is used to construct a prototype. */
1766 #if (!defined (__STDC__) && !defined (PROTOTYPES)) \
1767 || defined (USE_NONANSI_DEFUN)
1768 #define EXFUN(fnname, maxargs) \
1769 extern Lisp_Object fnname ()
1770 #else
1771 /* We can use the same trick as in the DEFUN macro to generate the
1772 appropriate prototype. */
1773 #define EXFUN(fnname, maxargs) \
1774 extern Lisp_Object fnname DEFUN_ARGS_ ## maxargs
1775 #endif
1776
1777 /* Forward declarations for prototypes. */
1778 struct window;
1779 struct frame;
1780
1781 /* Defined in data.c */
1782 extern Lisp_Object Qnil, Qt, Qquote, Qlambda, Qsubr, Qunbound;
1783 extern Lisp_Object Qerror_conditions, Qerror_message, Qtop_level;
1784 extern Lisp_Object Qerror, Qquit, Qwrong_type_argument, Qargs_out_of_range;
1785 extern Lisp_Object Qvoid_variable, Qvoid_function;
1786 extern Lisp_Object Qsetting_constant, Qinvalid_read_syntax;
1787 extern Lisp_Object Qinvalid_function, Qwrong_number_of_arguments, Qno_catch;
1788 extern Lisp_Object Qend_of_file, Qarith_error;
1789 extern Lisp_Object Qbeginning_of_buffer, Qend_of_buffer, Qbuffer_read_only;
1790 extern Lisp_Object Qmark_inactive, Qtext_read_only;
1791
1792 extern Lisp_Object Qrange_error, Qdomain_error, Qsingularity_error;
1793 extern Lisp_Object Qoverflow_error, Qunderflow_error;
1794
1795 extern Lisp_Object Qintegerp, Qnumberp, Qnatnump, Qwholenump;
1796 extern Lisp_Object Qsymbolp, Qlistp, Qconsp;
1797 extern Lisp_Object Qstringp, Qarrayp, Qsequencep, Qbufferp;
1798 extern Lisp_Object Qchar_or_string_p, Qmarkerp, Qvectorp;
1799 extern Lisp_Object Qinteger_or_marker_p, Qnumber_or_marker_p;
1800 extern Lisp_Object Qchar_table_p, Qvector_or_char_table_p;
1801 extern Lisp_Object Qboundp, Qfboundp;
1802 extern Lisp_Object Qbuffer_or_string_p;
1803 extern Lisp_Object Qcdr;
1804
1805 extern Lisp_Object Qfloatp, Qinteger_or_floatp, Qinteger_or_float_or_marker_p;
1806
1807 extern Lisp_Object Qframep;
1808
1809 EXFUN (Feq, 2);
1810 EXFUN (Fnull, 1);
1811 EXFUN (Flistp, 1);
1812 EXFUN (Fconsp, 1);
1813 EXFUN (Fatom, 1);
1814 EXFUN (Fnlistp, 1);
1815 EXFUN (Fintegerp, 1);
1816 EXFUN (Fnatnump, 1);
1817 EXFUN (Fsymbolp, 1);
1818 EXFUN (Fvectorp, 1);
1819 EXFUN (Fstringp, 1);
1820 EXFUN (Fmultibyte_string_p, 1);
1821 EXFUN (Farrayp, 1);
1822 EXFUN (Fsequencep, 1);
1823 EXFUN (Fbufferp, 1);
1824 EXFUN (Fmarkerp, 1);
1825 EXFUN (Fsubrp, 1);
1826 EXFUN (Fchar_or_string_p, 1);
1827 EXFUN (Finteger_or_marker_p, 1);
1828 EXFUN (Ffloatp, 1);
1829 EXFUN (Finteger_or_floatp, 1);
1830 EXFUN (Finteger_or_float_or_marker_p, 1);
1831
1832 EXFUN (Fcar, 1);
1833 EXFUN (Fcar_safe, 1);
1834 EXFUN (Fcdr, 1);
1835 EXFUN (Fcdr_safe, 1);
1836 EXFUN (Fsetcar, 2);
1837 EXFUN (Fsetcdr, 2);
1838 EXFUN (Fboundp, 1);
1839 EXFUN (Ffboundp, 1);
1840 EXFUN (Fmakunbound, 1);
1841 EXFUN (Ffmakunbound, 1);
1842 EXFUN (Fsymbol_function, 1);
1843 EXFUN (Fsymbol_plist, 1);
1844 EXFUN (Fsymbol_name, 1);
1845 extern Lisp_Object indirect_function P_ ((Lisp_Object));
1846 EXFUN (Findirect_function, 1);
1847 EXFUN (Ffset, 2);
1848 EXFUN (Fsetplist, 2);
1849 EXFUN (Fsymbol_value, 1);
1850 extern Lisp_Object find_symbol_value P_ ((Lisp_Object));
1851 EXFUN (Fset, 2);
1852 EXFUN (Fdefault_value, 1);
1853 EXFUN (Fset_default, 2);
1854 EXFUN (Fdefault_boundp, 1);
1855 EXFUN (Fmake_local_variable, 1);
1856 EXFUN (Flocal_variable_p, 2);
1857 EXFUN (Flocal_variable_if_set_p, 2);
1858
1859 EXFUN (Faref, 2);
1860 EXFUN (Faset, 3);
1861
1862 EXFUN (Fstring_to_number, 2);
1863 EXFUN (Fnumber_to_string, 1);
1864 EXFUN (Feqlsign, 2);
1865 EXFUN (Fgtr, 2);
1866 EXFUN (Flss, 2);
1867 EXFUN (Fgeq, 2);
1868 EXFUN (Fleq, 2);
1869 EXFUN (Fneq, 2);
1870 EXFUN (Fzerop, 1);
1871 EXFUN (Fplus, MANY);
1872 EXFUN (Fminus, MANY);
1873 EXFUN (Ftimes, MANY);
1874 EXFUN (Fquo, MANY);
1875 EXFUN (Frem, 2);
1876 EXFUN (Fmax, MANY);
1877 EXFUN (Fmin, MANY);
1878 EXFUN (Flogand, MANY);
1879 EXFUN (Flogior, MANY);
1880 EXFUN (Flogxor, MANY);
1881 EXFUN (Flognot, 1);
1882 EXFUN (Flsh, 2);
1883 EXFUN (Fash, 2);
1884
1885 EXFUN (Fadd1, 1);
1886 EXFUN (Fsub1, 1);
1887
1888 extern Lisp_Object long_to_cons P_ ((unsigned long));
1889 extern unsigned long cons_to_long P_ ((Lisp_Object));
1890 extern void args_out_of_range P_ ((Lisp_Object, Lisp_Object));
1891 extern void args_out_of_range_3 P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
1892 extern Lisp_Object wrong_type_argument P_ ((Lisp_Object, Lisp_Object));
1893 extern void store_symval_forwarding P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
1894 extern Lisp_Object do_symval_forwarding P_ ((Lisp_Object));
1895 extern Lisp_Object set_internal P_ ((Lisp_Object, Lisp_Object, struct buffer *, int));
1896 extern void syms_of_data P_ ((void));
1897 extern void init_data P_ ((void));
1898 extern void swap_in_global_binding P_ ((Lisp_Object));
1899
1900 /* Defined in cmds.c */
1901 EXFUN (Fend_of_line, 1);
1902 EXFUN (Fforward_char, 1);
1903 EXFUN (Fforward_line, 1);
1904 extern int forward_point P_ ((int));
1905 extern int internal_self_insert P_ ((int, int));
1906 extern void syms_of_cmds P_ ((void));
1907 extern void keys_of_cmds P_ ((void));
1908
1909 /* Defined in coding.c */
1910 EXFUN (Fcoding_system_p, 1);
1911 EXFUN (Fcheck_coding_system, 1);
1912 EXFUN (Fread_coding_system, 2);
1913 EXFUN (Fread_non_nil_coding_system, 1);
1914 EXFUN (Ffind_operation_coding_system, MANY);
1915 EXFUN (Fencode_coding_string, 3);
1916 EXFUN (Fdecode_coding_string, 3);
1917 extern Lisp_Object detect_coding_system P_ ((unsigned char *, int, int));
1918 Lisp_Object code_convert_string_norecord P_ ((Lisp_Object, Lisp_Object, int));
1919 extern void init_coding P_ ((void));
1920 extern void init_coding_once P_ ((void));
1921 extern void syms_of_coding P_ ((void));
1922 extern Lisp_Object code_convert_string_norecord P_ ((Lisp_Object, Lisp_Object,
1923 int));
1924
1925 /* Defined in charset.c */
1926 extern int nonascii_insert_offset;
1927 extern Lisp_Object Vnonascii_translation_table;
1928 EXFUN (Fchar_bytes, 1);
1929 EXFUN (Fchar_width, 1);
1930 EXFUN (Fstring, MANY);
1931 extern int chars_in_text P_ ((unsigned char *, int));
1932 extern int multibyte_chars_in_text P_ ((unsigned char *, int));
1933 extern int unibyte_char_to_multibyte P_ ((int));
1934 extern int multibyte_char_to_unibyte P_ ((int, Lisp_Object));
1935 extern Lisp_Object Qcharset;
1936 extern void init_charset_once P_ ((void));
1937 extern void syms_of_charset P_ ((void));
1938
1939 /* Defined in syntax.c */
1940 EXFUN (Fforward_word, 1);
1941 EXFUN (Fskip_chars_forward, 2);
1942 EXFUN (Fskip_chars_backward, 2);
1943 EXFUN (Fsyntax_table_p, 1);
1944 EXFUN (Fsyntax_table, 0);
1945 EXFUN (Fset_syntax_table, 1);
1946 extern void init_syntax_once P_ ((void));
1947 extern void syms_of_syntax P_ ((void));
1948
1949 /* Defined in fns.c */
1950 extern int use_dialog_box;
1951 extern int next_almost_prime P_ ((int));
1952 extern Lisp_Object larger_vector P_ ((Lisp_Object, int, Lisp_Object));
1953 extern void sweep_weak_hash_tables P_ ((void));
1954 extern Lisp_Object Qstring_lessp;
1955 EXFUN (Foptimize_char_table, 1);
1956 extern Lisp_Object Vfeatures;
1957 extern Lisp_Object QCtest, QCweakness, Qequal;
1958 unsigned sxhash P_ ((Lisp_Object, int));
1959 Lisp_Object make_hash_table P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
1960 Lisp_Object, Lisp_Object, Lisp_Object,
1961 Lisp_Object));
1962 Lisp_Object copy_hash_table P_ ((struct Lisp_Hash_Table *));
1963 int hash_lookup P_ ((struct Lisp_Hash_Table *, Lisp_Object, unsigned *));
1964 int hash_put P_ ((struct Lisp_Hash_Table *, Lisp_Object, Lisp_Object,
1965 unsigned));
1966 void hash_remove P_ ((struct Lisp_Hash_Table *, Lisp_Object));
1967 void hash_clear P_ ((struct Lisp_Hash_Table *));
1968 void remove_hash_entry P_ ((struct Lisp_Hash_Table *, int));
1969 extern void init_fns P_ ((void));
1970 EXFUN (Fsxhash, 1);
1971 EXFUN (Fmake_hash_table, MANY);
1972 EXFUN (Fcopy_hash_table, 1);
1973 EXFUN (Fhash_table_count, 1);
1974 EXFUN (Fhash_table_rehash_size, 1);
1975 EXFUN (Fhash_table_rehash_threshold, 1);
1976 EXFUN (Fhash_table_size, 1);
1977 EXFUN (Fhash_table_test, 1);
1978 EXFUN (Fhash_table_weak, 1);
1979 EXFUN (Fhash_table_p, 1);
1980 EXFUN (Fclrhash, 1);
1981 EXFUN (Fgethash, 3);
1982 EXFUN (Fputhash, 3);
1983 EXFUN (Fremhash, 2);
1984 EXFUN (Fmaphash, 2);
1985 EXFUN (Fdefine_hash_table_test, 3);
1986
1987 EXFUN (Fidentity, 1);
1988 EXFUN (Frandom, 1);
1989 EXFUN (Flength, 1);
1990 EXFUN (Fsafe_length, 1);
1991 EXFUN (Fappend, MANY);
1992 EXFUN (Fconcat, MANY);
1993 EXFUN (Fvconcat, MANY);
1994 EXFUN (Fcopy_sequence, 1);
1995 EXFUN (Fstring_make_multibyte, 1);
1996 EXFUN (Fstring_make_unibyte, 1);
1997 EXFUN (Fstring_as_multibyte, 1);
1998 EXFUN (Fstring_as_unibyte, 1);
1999 EXFUN (Fsubstring, 3);
2000 extern Lisp_Object substring_both P_ ((Lisp_Object, int, int, int, int));
2001 EXFUN (Fnth, 2);
2002 EXFUN (Fnthcdr, 2);
2003 EXFUN (Fmemq, 2);
2004 EXFUN (Fassq, 2);
2005 EXFUN (Fassoc, 2);
2006 EXFUN (Felt, 2);
2007 EXFUN (Fmember, 2);
2008 EXFUN (Frassq, 2);
2009 EXFUN (Fdelq, 2);
2010 EXFUN (Fsort, 2);
2011 EXFUN (Freverse, 1);
2012 EXFUN (Fnreverse, 1);
2013 EXFUN (Fget, 2);
2014 EXFUN (Fput, 3);
2015 EXFUN (Fequal, 2);
2016 EXFUN (Ffillarray, 2);
2017 EXFUN (Fnconc, MANY);
2018 EXFUN (Fmapcar, 2);
2019 EXFUN (Fmapconcat, 3);
2020 EXFUN (Fy_or_n_p, 1);
2021 extern Lisp_Object do_yes_or_no_p P_ ((Lisp_Object));
2022 EXFUN (Ffeaturep, 1);
2023 EXFUN (Frequire, 3);
2024 EXFUN (Fprovide, 1);
2025 extern Lisp_Object concat2 P_ ((Lisp_Object, Lisp_Object));
2026 extern Lisp_Object concat3 P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
2027 extern Lisp_Object nconc2 P_ ((Lisp_Object, Lisp_Object));
2028 extern Lisp_Object assq_no_quit P_ ((Lisp_Object, Lisp_Object));
2029 extern void clear_string_char_byte_cache P_ ((void));
2030 extern int string_char_to_byte P_ ((Lisp_Object, int));
2031 extern int string_byte_to_char P_ ((Lisp_Object, int));
2032 extern Lisp_Object string_make_multibyte P_ ((Lisp_Object));
2033 extern Lisp_Object string_make_unibyte P_ ((Lisp_Object));
2034 EXFUN (Fcopy_alist, 1);
2035 EXFUN (Fplist_get, 2);
2036 EXFUN (Fplist_put, 3);
2037 EXFUN (Fset_char_table_parent, 2);
2038 EXFUN (Fchar_table_extra_slot, 2);
2039 EXFUN (Fset_char_table_extra_slot, 3);
2040 EXFUN (Frassoc, 2);
2041 EXFUN (Fstring_equal, 2);
2042 EXFUN (Fcompare_strings, 7);
2043 EXFUN (Fstring_lessp, 2);
2044 extern int char_table_translate P_ ((Lisp_Object, int));
2045 extern void map_char_table P_ ((void (*) (Lisp_Object, Lisp_Object, Lisp_Object),
2046 Lisp_Object, Lisp_Object, Lisp_Object, int,
2047 Lisp_Object *));
2048 extern Lisp_Object char_table_ref_and_index P_ ((Lisp_Object, int, int *));
2049 extern void syms_of_fns P_ ((void));
2050
2051 /* Defined in floatfns.c */
2052 extern double extract_float P_ ((Lisp_Object));
2053 EXFUN (Ffloat, 1);
2054 EXFUN (Ftruncate, 2);
2055 extern void init_floatfns P_ ((void));
2056 extern void syms_of_floatfns P_ ((void));
2057
2058 /* Defined in insdel.c */
2059 extern void move_gap P_ ((int));
2060 extern void move_gap_both P_ ((int, int));
2061 extern void make_gap P_ ((int));
2062 extern int copy_text P_ ((unsigned char *, unsigned char *, int, int, int));
2063 extern int count_size_as_multibyte P_ ((unsigned char *, int));
2064 extern int count_combining_before P_ ((unsigned char *, int, int, int));
2065 extern int count_combining_after P_ ((unsigned char *, int, int, int));
2066 extern void insert P_ ((unsigned char *, int));
2067 extern void insert_and_inherit P_ ((unsigned char *, int));
2068 extern void insert_1 P_ ((unsigned char *, int, int, int, int));
2069 extern void insert_1_both P_ ((unsigned char *, int, int, int, int, int));
2070 extern void insert_from_string P_ ((Lisp_Object, int, int, int, int, int));
2071 extern void insert_from_buffer P_ ((struct buffer *, int, int, int));
2072 extern void insert_char P_ ((int));
2073 extern void insert_string P_ ((char *));
2074 extern void insert_before_markers P_ ((unsigned char *, int));
2075 extern void insert_before_markers_and_inherit P_ ((unsigned char *, int));
2076 extern void insert_from_string_before_markers P_ ((Lisp_Object, int, int, int, int, int));
2077 extern void del_range P_ ((int, int));
2078 extern Lisp_Object del_range_1 P_ ((int, int, int, int));
2079 extern void del_range_byte P_ ((int, int, int));
2080 extern void del_range_both P_ ((int, int, int, int, int));
2081 extern Lisp_Object del_range_2 P_ ((int, int, int, int, int));
2082 extern void modify_region P_ ((struct buffer *, int, int));
2083 extern void prepare_to_modify_buffer P_ ((int, int, int *));
2084 extern void signal_before_change P_ ((int, int, int *));
2085 extern void signal_after_change P_ ((int, int, int));
2086 extern void adjust_after_replace P_ ((int, int, Lisp_Object, int, int));
2087 extern void adjust_after_insert P_ ((int, int, int, int, int));
2088 extern void replace_range P_ ((int, int, Lisp_Object, int, int, int));
2089 extern void syms_of_insdel P_ ((void));
2090
2091 /* Defined in dispnew.c */
2092 extern Lisp_Object selected_frame;
2093 EXFUN (Fding, 1);
2094 EXFUN (Fredraw_frame, 1);
2095 EXFUN (Fredraw_display, 0);
2096 EXFUN (Fsleep_for, 2);
2097 EXFUN (Fsit_for, 3);
2098 extern Lisp_Object sit_for P_ ((int, int, int, int, int));
2099 extern void init_display P_ ((void));
2100 extern void syms_of_display P_ ((void));
2101 extern void safe_bcopy P_ ((char *, char *, int));
2102
2103 /* Defined in xdisp.c */
2104 extern Lisp_Object Qinhibit_redisplay, Qdisplay;
2105 extern Lisp_Object Qmessage_truncate_lines;
2106 extern Lisp_Object Vmessage_log_max;
2107 extern int message_enable_multibyte;
2108 extern Lisp_Object echo_area_buffer[2];
2109 extern void check_message_stack P_ ((void));
2110 extern void setup_echo_area_for_printing P_ ((int));
2111 extern int push_message P_ ((void));
2112 extern void pop_message P_ ((void));
2113 extern void restore_message P_ ((void));
2114 extern Lisp_Object current_message P_ ((void));
2115 extern void set_message P_ ((char *s, Lisp_Object, int, int));
2116 extern void clear_message P_ ((int, int));
2117 extern void message P_ ((/* char *, ... */));
2118 extern void message_nolog P_ ((/* char *, ... */));
2119 extern void message1 P_ ((char *));
2120 extern void message1_nolog P_ ((char *));
2121 extern void message2 P_ ((char *, int, int));
2122 extern void message2_nolog P_ ((char *, int, int));
2123 extern void message3 P_ ((Lisp_Object, int, int));
2124 extern void message3_nolog P_ ((Lisp_Object, int, int));
2125 extern void message_dolog P_ ((char *, int, int, int));
2126 extern void message_with_string P_ ((char *, Lisp_Object, int));
2127 extern void message_log_maybe_newline P_ ((void));
2128 extern void update_echo_area P_ ((void));
2129 extern void truncate_echo_area P_ ((int));
2130 extern void redisplay P_ ((void));
2131 extern int check_point_in_composition
2132 P_ ((struct buffer *, int, struct buffer *, int));
2133 extern void redisplay_preserve_echo_area P_ ((void));
2134 extern void mark_window_display_accurate P_ ((Lisp_Object, int));
2135 extern int invisible_p P_ ((Lisp_Object, Lisp_Object));
2136 extern void prepare_menu_bars P_ ((void));
2137 extern void syms_of_xdisp P_ ((void));
2138 extern void init_xdisp P_ ((void));
2139 extern Lisp_Object eval_form P_ ((Lisp_Object));
2140
2141 /* Defined in vm-limit.c. */
2142 extern void memory_warnings P_ ((POINTER_TYPE *, void (*warnfun) ()));
2143
2144 /* Defined in alloc.c */
2145 extern void allocate_string_data P_ ((struct Lisp_String *, int, int));
2146 extern void uninterrupt_malloc P_ ((void));
2147 extern void malloc_warning P_ ((char *));
2148 extern void memory_full P_ ((void));
2149 extern void buffer_memory_full P_ ((void));
2150 extern int survives_gc_p P_ ((Lisp_Object));
2151 extern void mark_object P_ ((Lisp_Object *));
2152 extern Lisp_Object Vpurify_flag;
2153 EXFUN (Fcons, 2);
2154 EXFUN (list2, 2);
2155 EXFUN (list3, 3);
2156 EXFUN (list4, 4);
2157 EXFUN (list5, 5);
2158 EXFUN (Flist, MANY);
2159 EXFUN (Fmake_list, 2);
2160 extern Lisp_Object allocate_misc P_ ((void));
2161 EXFUN (Fmake_vector, 2);
2162 EXFUN (Fvector, MANY);
2163 EXFUN (Fmake_symbol, 1);
2164 EXFUN (Fmake_marker, 0);
2165 EXFUN (Fmake_string, 2);
2166 extern Lisp_Object build_string P_ ((char *));
2167 extern Lisp_Object make_string P_ ((char *, int));
2168 extern Lisp_Object make_unibyte_string P_ ((char *, int));
2169 extern Lisp_Object make_multibyte_string P_ ((char *, int, int));
2170 extern Lisp_Object make_event_array P_ ((int, Lisp_Object *));
2171 extern Lisp_Object make_uninit_string P_ ((int));
2172 extern Lisp_Object make_uninit_multibyte_string P_ ((int, int));
2173 extern Lisp_Object make_string_from_bytes P_ ((char *, int, int));
2174 extern Lisp_Object make_specified_string P_ ((char *, int, int, int));
2175 EXFUN (Fpurecopy, 1);
2176 extern Lisp_Object make_pure_string P_ ((char *, int, int, int));
2177 extern Lisp_Object pure_cons P_ ((Lisp_Object, Lisp_Object));
2178 extern Lisp_Object make_pure_vector P_ ((EMACS_INT));
2179 EXFUN (Fgarbage_collect, 0);
2180 EXFUN (Fmake_byte_code, MANY);
2181 EXFUN (Fmake_bool_vector, 2);
2182 EXFUN (Fmake_char_table, 2);
2183 extern Lisp_Object make_sub_char_table P_ ((Lisp_Object));
2184 extern Lisp_Object Qchar_table_extra_slots;
2185 extern struct Lisp_Vector *allocate_vectorlike P_ ((EMACS_INT));
2186 extern int gc_in_progress;
2187 extern Lisp_Object make_float P_ ((double));
2188 extern void display_malloc_warning P_ ((void));
2189 extern int inhibit_garbage_collection P_ ((void));
2190 extern void free_marker P_ ((Lisp_Object));
2191 extern void free_cons P_ ((struct Lisp_Cons *));
2192 extern void init_alloc_once P_ ((void));
2193 extern void init_alloc P_ ((void));
2194 extern void syms_of_alloc P_ ((void));
2195 extern struct buffer * allocate_buffer P_ ((void));
2196
2197 /* Defined in print.c */
2198 extern Lisp_Object Vprin1_to_string_buffer;
2199 extern void debug_print P_ ((Lisp_Object));
2200 EXFUN (Fprin1, 2);
2201 EXFUN (Fprin1_to_string, 2);
2202 EXFUN (Fprinc, 2);
2203 EXFUN (Fterpri, 1);
2204 EXFUN (Fprint, 2);
2205 EXFUN (Ferror_message_string, 1);
2206 extern Lisp_Object Vstandard_output, Qstandard_output;
2207 extern Lisp_Object Qexternal_debugging_output;
2208 extern void temp_output_buffer_setup P_ ((char *));
2209 extern int print_level, print_escape_newlines;
2210 extern Lisp_Object Qprint_escape_newlines;
2211 extern void write_string P_ ((char *, int));
2212 extern void write_string_1 P_ ((char *, int, Lisp_Object));
2213 extern void print_error_message P_ ((Lisp_Object, Lisp_Object));
2214 extern Lisp_Object internal_with_output_to_temp_buffer
2215 P_ ((char *, Lisp_Object (*) (Lisp_Object), Lisp_Object));
2216 extern void float_to_string P_ ((unsigned char *, double));
2217 extern void syms_of_print P_ ((void));
2218
2219 /* Defined in doprnt.c */
2220 extern int doprnt P_ ((char *, int, char *, char *, int, char **));
2221 extern int doprnt_lisp P_ ((char *, int, char *, char *, int, char **));
2222
2223 /* Defined in lread.c */
2224 extern Lisp_Object Qvariable_documentation, Qstandard_input;
2225 extern Lisp_Object Vobarray, initial_obarray, Vstandard_input;
2226 EXFUN (Fread, 1);
2227 EXFUN (Fread_from_string, 3);
2228 EXFUN (Fintern, 2);
2229 EXFUN (Fintern_soft, 2);
2230 EXFUN (Fload, 5);
2231 EXFUN (Fget_file_char, 0);
2232 EXFUN (Fread_char, 2);
2233 EXFUN (Fread_event, 2);
2234 extern Lisp_Object read_filtered_event P_ ((int, int, int, int));
2235 EXFUN (Feval_region, 4);
2236 extern Lisp_Object intern P_ ((char *));
2237 extern Lisp_Object make_symbol P_ ((char *));
2238 extern Lisp_Object oblookup P_ ((Lisp_Object, char *, int, int));
2239 #define LOADHIST_ATTACH(x) \
2240 if (initialized) Vcurrent_load_list = Fcons (x, Vcurrent_load_list)
2241 extern Lisp_Object Vcurrent_load_list;
2242 extern Lisp_Object Vload_history;
2243 extern int openp P_ ((Lisp_Object, Lisp_Object, char *, Lisp_Object *, int));
2244 extern int isfloat_string P_ ((char *));
2245 extern void map_obarray P_ ((Lisp_Object, void (*) (Lisp_Object, Lisp_Object),
2246 Lisp_Object));
2247 extern void dir_warning P_ ((char *, Lisp_Object));
2248 extern void close_load_descs P_ ((void));
2249 extern void init_obarray P_ ((void));
2250 extern void init_lread P_ ((void));
2251 extern void syms_of_lread P_ ((void));
2252
2253 /* Defined in eval.c */
2254 extern Lisp_Object Qautoload, Qexit, Qinteractive, Qcommandp, Qdefun, Qmacro;
2255 extern Lisp_Object Vinhibit_quit, Qinhibit_quit, Vquit_flag;
2256 extern Lisp_Object Vmocklisp_arguments, Qmocklisp, Qmocklisp_arguments;
2257 extern Lisp_Object Vautoload_queue;
2258 extern Lisp_Object Vdebug_on_error;
2259 extern Lisp_Object Vsignaling_function;
2260 extern int handling_signal;
2261
2262 /* To run a normal hook, use the appropriate function from the list below.
2263 The calling convention:
2264
2265 if (!NILP (Vrun_hooks))
2266 call1 (Vrun_hooks, Qmy_funny_hook);
2267
2268 should no longer be used. */
2269 extern Lisp_Object Vrun_hooks;
2270 EXFUN (Frun_hooks, MANY);
2271 EXFUN (Frun_hook_with_args, MANY);
2272 EXFUN (Frun_hook_with_args_until_success, MANY);
2273 EXFUN (Frun_hook_with_args_until_failure, MANY);
2274 extern Lisp_Object run_hook_list_with_args P_ ((Lisp_Object, int, Lisp_Object *));
2275 extern void run_hook_with_args_2 P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
2276 EXFUN (Fand, UNEVALLED);
2277 EXFUN (For, UNEVALLED);
2278 EXFUN (Fif, UNEVALLED);
2279 EXFUN (Fprogn, UNEVALLED);
2280 EXFUN (Fprog1, UNEVALLED);
2281 EXFUN (Fprog2, UNEVALLED);
2282 EXFUN (Fsetq, UNEVALLED);
2283 EXFUN (Fquote, UNEVALLED);
2284 EXFUN (Fuser_variable_p, 1);
2285 EXFUN (Finteractive_p, 0);
2286 EXFUN (Fdefun, UNEVALLED);
2287 EXFUN (Flet, UNEVALLED);
2288 EXFUN (FletX, UNEVALLED);
2289 EXFUN (Fwhile, UNEVALLED);
2290 EXFUN (Fcatch, UNEVALLED);
2291 EXFUN (Fthrow, 2);
2292 EXFUN (Funwind_protect, UNEVALLED);
2293 EXFUN (Fcondition_case, UNEVALLED);
2294 EXFUN (Fsignal, 2);
2295 EXFUN (Fautoload, 5);
2296 EXFUN (Fcommandp, 1);
2297 EXFUN (Feval, 1);
2298 EXFUN (Fapply, MANY);
2299 EXFUN (Ffuncall, MANY);
2300 EXFUN (Fbacktrace, 0);
2301 extern Lisp_Object apply1 P_ ((Lisp_Object, Lisp_Object));
2302 extern Lisp_Object call0 P_ ((Lisp_Object));
2303 extern Lisp_Object call1 P_ ((Lisp_Object, Lisp_Object));
2304 extern Lisp_Object call2 P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
2305 extern Lisp_Object call3 P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object));
2306 extern Lisp_Object call4 P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object));
2307 extern Lisp_Object call5 P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object));
2308 extern Lisp_Object call6 P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object));
2309 EXFUN (Fdo_auto_save, 2);
2310 extern Lisp_Object apply_lambda P_ ((Lisp_Object, Lisp_Object, int));
2311 extern Lisp_Object internal_catch P_ ((Lisp_Object, Lisp_Object (*) (Lisp_Object), Lisp_Object));
2312 extern Lisp_Object internal_condition_case P_ ((Lisp_Object (*) (void), Lisp_Object, Lisp_Object (*) (Lisp_Object)));
2313 extern Lisp_Object internal_condition_case_1 P_ ((Lisp_Object (*) (Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object)));
2314 extern Lisp_Object internal_condition_case_2 P_ ((Lisp_Object (*) (int, Lisp_Object *), int, Lisp_Object *, Lisp_Object, Lisp_Object (*) (Lisp_Object)));
2315 extern void specbind P_ ((Lisp_Object, Lisp_Object));
2316 extern void record_unwind_protect P_ ((Lisp_Object (*) (Lisp_Object), Lisp_Object));
2317 extern Lisp_Object unbind_to P_ ((int, Lisp_Object));
2318 extern void error P_ ((/* char *, ... */));
2319 extern void do_autoload P_ ((Lisp_Object, Lisp_Object));
2320 extern Lisp_Object un_autoload P_ ((Lisp_Object));
2321 EXFUN (Ffetch_bytecode, 1);
2322 extern void init_eval_once P_ ((void));
2323 extern Lisp_Object call_function P_ ((int, Lisp_Object *));
2324 extern void init_eval P_ ((void));
2325 extern void syms_of_eval P_ ((void));
2326
2327 /* Defined in editfns.c */
2328 EXFUN (Fcurrent_message, 0);
2329 EXFUN (Fgoto_char, 1);
2330 EXFUN (Fpoint_min_marker, 0);
2331 EXFUN (Fpoint_max_marker, 0);
2332 EXFUN (Fpoint_min, 0);
2333 EXFUN (Fpoint_max, 0);
2334 EXFUN (Fpoint, 0);
2335 EXFUN (Fpoint_marker, 0);
2336 EXFUN (Fmark_marker, 0);
2337 EXFUN (Fline_beginning_position, 1);
2338 EXFUN (Fline_end_position, 1);
2339 EXFUN (Ffollowing_char, 0);
2340 EXFUN (Fprevious_char, 0);
2341 EXFUN (Fchar_after, 1);
2342 EXFUN (Finsert, MANY);
2343 EXFUN (Finsert_and_inherit, MANY);
2344 EXFUN (Finsert_before_markers, MANY);
2345 EXFUN (Finsert_buffer_substring, 3);
2346 EXFUN (Finsert_char, 3);
2347 extern void insert1 P_ ((Lisp_Object));
2348 EXFUN (Feolp, 0);
2349 EXFUN (Feobp, 0);
2350 EXFUN (Fbolp, 0);
2351 EXFUN (Fbobp, 0);
2352 EXFUN (Fformat, MANY);
2353 EXFUN (Fmessage, MANY);
2354 extern Lisp_Object format1 P_ ((/* char *, ... */));
2355 extern Lisp_Object make_buffer_string P_ ((int, int, int));
2356 EXFUN (Fbuffer_substring, 2);
2357 EXFUN (Fbuffer_string, 0);
2358 extern Lisp_Object save_excursion_save P_ ((void));
2359 extern Lisp_Object save_restriction_save P_ ((void));
2360 extern Lisp_Object save_excursion_restore P_ ((Lisp_Object));
2361 extern Lisp_Object save_restriction_restore P_ ((Lisp_Object));
2362 EXFUN (Fchar_to_string, 1);
2363 EXFUN (Fdelete_region, 2);
2364 EXFUN (Fnarrow_to_region, 2);
2365 EXFUN (Fwiden, 0);
2366 EXFUN (Fuser_login_name, 1);
2367 EXFUN (Fsystem_name, 0);
2368 EXFUN (Fcurrent_time, 0);
2369 extern int clip_to_bounds P_ ((int, int, int));
2370 extern Lisp_Object make_buffer_string P_ ((int, int, int));
2371 extern Lisp_Object make_buffer_string_both P_ ((int, int, int, int, int));
2372 extern void init_editfns P_ ((void));
2373 extern void syms_of_editfns P_ ((void));
2374 EXFUN (Fcurrent_message, 0);
2375 extern Lisp_Object Vinhibit_field_text_motion;
2376 EXFUN (Fconstrain_to_field, 5);
2377 EXFUN (Ffield_string, 1);
2378 EXFUN (Fdelete_field, 1);
2379 EXFUN (Ffield_beginning, 2);
2380 EXFUN (Ffield_string_no_properties, 1);
2381 extern void set_time_zone_rule P_ ((char *));
2382
2383 /* defined in buffer.c */
2384 extern void nsberror P_ ((Lisp_Object));
2385 extern char *no_switch_window P_ ((Lisp_Object window));
2386 EXFUN (Fset_buffer_multibyte, 1);
2387 EXFUN (Foverlay_start, 1);
2388 EXFUN (Foverlay_end, 1);
2389 extern void adjust_overlays_for_insert P_ ((int, int));
2390 extern void adjust_overlays_for_delete P_ ((int, int));
2391 extern void fix_overlays_in_range P_ ((int, int));
2392 extern void report_overlay_modification P_ ((Lisp_Object, Lisp_Object, int,
2393 Lisp_Object, Lisp_Object, Lisp_Object));
2394 extern int overlay_touches_p P_ ((int));
2395 extern Lisp_Object Vbuffer_alist, Vinhibit_read_only;
2396 EXFUN (Fget_buffer, 1);
2397 EXFUN (Fget_buffer_create, 1);
2398 EXFUN (Fset_buffer, 1);
2399 EXFUN (set_buffer_if_live, 1);
2400 EXFUN (Fbarf_if_buffer_read_only, 0);
2401 EXFUN (Fcurrent_buffer, 0);
2402 EXFUN (Fswitch_to_buffer, 2);
2403 EXFUN (Fpop_to_buffer, 3);
2404 EXFUN (Fother_buffer, 3);
2405 EXFUN (Foverlay_get, 2);
2406 EXFUN (Fbuffer_modified_p, 1);
2407 EXFUN (Fset_buffer_modified_p, 1);
2408 EXFUN (Fkill_buffer, 1);
2409 EXFUN (Fkill_all_local_variables, 0);
2410 EXFUN (Fbuffer_disable_undo, 1);
2411 EXFUN (Fbuffer_enable_undo, 1);
2412 EXFUN (Ferase_buffer, 0);
2413 extern Lisp_Object Qoverlayp;
2414 extern Lisp_Object get_truename_buffer P_ ((Lisp_Object));
2415 extern struct buffer *all_buffers;
2416 EXFUN (Fprevious_overlay_change, 1);
2417 extern void init_buffer_once P_ ((void));
2418 extern void init_buffer P_ ((void));
2419 extern void syms_of_buffer P_ ((void));
2420 extern void keys_of_buffer P_ ((void));
2421
2422 /* defined in marker.c */
2423
2424 EXFUN (Fmarker_position, 1);
2425 EXFUN (Fmarker_buffer, 1);
2426 EXFUN (Fcopy_marker, 2);
2427 EXFUN (Fset_marker, 3);
2428 extern int marker_position P_ ((Lisp_Object));
2429 extern int marker_byte_position P_ ((Lisp_Object));
2430 extern void clear_charpos_cache P_ ((struct buffer *));
2431 extern int charpos_to_bytepos P_ ((int));
2432 extern int buf_charpos_to_bytepos P_ ((struct buffer *, int));
2433 extern int buf_bytepos_to_charpos P_ ((struct buffer *, int));
2434 extern void unchain_marker P_ ((Lisp_Object));
2435 extern Lisp_Object set_marker_restricted P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
2436 extern Lisp_Object set_marker_both P_ ((Lisp_Object, Lisp_Object, int, int));
2437 extern Lisp_Object set_marker_restricted_both P_ ((Lisp_Object, Lisp_Object,
2438 int, int));
2439 extern void syms_of_marker P_ ((void));
2440
2441 /* Defined in fileio.c */
2442
2443 extern Lisp_Object Qfile_error;
2444 EXFUN (Ffind_file_name_handler, 2);
2445 EXFUN (Ffile_name_as_directory, 1);
2446 EXFUN (Fmake_temp_name, 1);
2447 EXFUN (Fexpand_file_name, 2);
2448 EXFUN (Ffile_name_nondirectory, 1);
2449 EXFUN (Fsubstitute_in_file_name, 1);
2450 EXFUN (Ffile_symlink_p, 1);
2451 EXFUN (Fverify_visited_file_modtime, 1);
2452 EXFUN (Ffile_exists_p, 1);
2453 EXFUN (Ffile_name_absolute_p, 1);
2454 EXFUN (Fdirectory_file_name, 1);
2455 EXFUN (Ffile_name_directory, 1);
2456 extern Lisp_Object expand_and_dir_to_file P_ ((Lisp_Object, Lisp_Object));
2457 EXFUN (Ffile_accessible_directory_p, 1);
2458 EXFUN (Funhandled_file_name_directory, 1);
2459 EXFUN (Ffile_directory_p, 1);
2460 EXFUN (Fwrite_region, 7);
2461 EXFUN (Ffile_readable_p, 1);
2462 EXFUN (Ffile_executable_p, 1);
2463 EXFUN (Fread_file_name, 5);
2464 extern Lisp_Object close_file_unwind P_ ((Lisp_Object));
2465 extern void report_file_error P_ ((char *, Lisp_Object));
2466 extern int internal_delete_file P_ ((Lisp_Object));
2467 extern void syms_of_fileio P_ ((void));
2468 EXFUN (Fmake_temp_name, 1);
2469 extern void init_fileio_once P_ ((void));
2470 extern Lisp_Object make_temp_name P_ ((Lisp_Object, int));
2471
2472 /* Defined in abbrev.c */
2473
2474 extern Lisp_Object Vfundamental_mode_abbrev_table;
2475 extern void syms_of_abbrev P_ ((void));
2476
2477 /* defined in search.c */
2478 extern void shrink_regexp_cache P_ ((void));
2479 EXFUN (Fstring_match, 3);
2480 extern void restore_match_data P_ ((void));
2481 EXFUN (Fmatch_data, 2);
2482 EXFUN (Fset_match_data, 1);
2483 EXFUN (Fmatch_beginning, 1);
2484 EXFUN (Fmatch_end, 1);
2485 extern int fast_string_match P_ ((Lisp_Object, Lisp_Object));
2486 extern int fast_c_string_match_ignore_case P_ ((Lisp_Object, char *));
2487 extern int scan_buffer P_ ((int, int, int, int, int *, int));
2488 extern int scan_newline P_ ((int, int, int, int, int, int));
2489 extern int find_next_newline P_ ((int, int));
2490 extern int find_next_newline_no_quit P_ ((int, int));
2491 extern int find_before_next_newline P_ ((int, int, int));
2492 extern void syms_of_search P_ ((void));
2493
2494 /* defined in minibuf.c */
2495
2496 extern Lisp_Object last_minibuf_string;
2497 extern void choose_minibuf_frame P_ ((void));
2498 extern int scmp P_ ((unsigned char *, unsigned char *, int));
2499 EXFUN (Fcompleting_read, 8);
2500 EXFUN (Fread_from_minibuffer, 7);
2501 EXFUN (Fread_variable, 2);
2502 EXFUN (Fread_buffer, 3);
2503 EXFUN (Fread_minibuffer, 2);
2504 EXFUN (Feval_minibuffer, 2);
2505 EXFUN (Fread_string, 5);
2506 EXFUN (Fread_no_blanks_input, 3);
2507 extern Lisp_Object get_minibuffer P_ ((int));
2508 extern void temp_echo_area_glyphs P_ ((char *));
2509 extern void init_minibuf_once P_ ((void));
2510 extern void syms_of_minibuf P_ ((void));
2511 extern void keys_of_minibuf P_ ((void));
2512
2513 /* Defined in callint.c */
2514
2515 extern Lisp_Object Qminus, Qplus, Vcurrent_prefix_arg;
2516 extern Lisp_Object Vcommand_history;
2517 extern Lisp_Object Qcall_interactively, Qmouse_leave_buffer_hook;
2518 EXFUN (Fcall_interactively, 3);
2519 EXFUN (Fprefix_numeric_value, 1);
2520 extern void syms_of_callint P_ ((void));
2521
2522 /* defined in casefiddle.c */
2523
2524 EXFUN (Fdowncase, 1);
2525 EXFUN (Fupcase, 1);
2526 EXFUN (Fcapitalize, 1);
2527 EXFUN (Fupcase_region, 2);
2528 EXFUN (Fupcase_initials, 1);
2529 EXFUN (Fupcase_initials_region, 2);
2530 extern void syms_of_casefiddle P_ ((void));
2531 extern void keys_of_casefiddle P_ ((void));
2532
2533 /* defined in casetab.c */
2534
2535 EXFUN (Fset_case_table, 1);
2536 EXFUN (Fset_standard_case_table, 1);
2537 extern void init_casetab_once P_ ((void));
2538 extern void syms_of_casetab P_ ((void));
2539
2540 /* defined in keyboard.c */
2541
2542 extern Lisp_Object Qdisabled, QCfilter;
2543 extern Lisp_Object Vtty_erase_char, Vhelp_form, Vtop_level;
2544 extern int input_pending;
2545 EXFUN (Fdiscard_input, 0);
2546 EXFUN (Frecursive_edit, 0);
2547 EXFUN (Fcommand_execute, 4);
2548 EXFUN (Finput_pending_p, 0);
2549 extern Lisp_Object menu_bar_items P_ ((Lisp_Object));
2550 extern Lisp_Object tool_bar_items P_ ((Lisp_Object, int *));
2551 extern Lisp_Object Qvertical_scroll_bar;
2552 extern void discard_mouse_events P_ ((void));
2553 EXFUN (Fevent_convert_list, 1);
2554 EXFUN (Fread_key_sequence, 5);
2555 EXFUN (Fset_input_mode, 4);
2556 extern int detect_input_pending P_ ((void));
2557 extern int detect_input_pending_run_timers P_ ((int));
2558 extern void safe_run_hooks P_ ((Lisp_Object));
2559 extern void cmd_error_internal P_ ((Lisp_Object, char *));
2560 extern Lisp_Object command_loop_1 P_ ((void));
2561 extern Lisp_Object recursive_edit_1 P_ ((void));
2562 extern void record_auto_save P_ ((void));
2563 extern void init_keyboard P_ ((void));
2564 extern void syms_of_keyboard P_ ((void));
2565 extern void keys_of_keyboard P_ ((void));
2566
2567 /* defined in keymap.c */
2568
2569 extern Lisp_Object Qkeymap, Qmenu_bar;
2570 extern Lisp_Object current_global_map;
2571 EXFUN (Fmake_sparse_keymap, 1);
2572 EXFUN (Fcopy_keymap, 1);
2573 EXFUN (Fdefine_key, 3);
2574 EXFUN (Flookup_key, 3);
2575 EXFUN (Fkey_binding, 2);
2576 EXFUN (Fkey_description, 1);
2577 EXFUN (Fsingle_key_description, 2);
2578 EXFUN (Fwhere_is_internal, 4);
2579 extern Lisp_Object access_keymap P_ ((Lisp_Object, Lisp_Object, int, int));
2580 extern Lisp_Object get_keyelt P_ ((Lisp_Object, int));
2581 extern Lisp_Object get_keymap P_ ((Lisp_Object));
2582 extern Lisp_Object get_keymap_1 P_ ((Lisp_Object, int, int));
2583 extern void describe_vector P_ ((Lisp_Object, Lisp_Object,
2584 void (*) (Lisp_Object), int,
2585 Lisp_Object, Lisp_Object, int *, int));
2586 extern void describe_map_tree P_ ((Lisp_Object, int, Lisp_Object, Lisp_Object,
2587 char *, int, int, int));
2588 extern int current_minor_maps P_ ((Lisp_Object **, Lisp_Object **));
2589 extern void initial_define_key P_ ((Lisp_Object, int, char *));
2590 extern void initial_define_lispy_key P_ ((Lisp_Object, char *, char *));
2591 extern void syms_of_keymap P_ ((void));
2592 extern void keys_of_keymap P_ ((void));
2593
2594 /* defined in indent.c */
2595 EXFUN (Fvertical_motion, 2);
2596 EXFUN (Findent_to, 2);
2597 EXFUN (Fcurrent_column, 0);
2598 EXFUN (Fmove_to_column, 2);
2599 extern int current_column P_ ((void));
2600 extern void invalidate_current_column P_ ((void));
2601 extern int indented_beyond_p P_ ((int, int, int));
2602 extern void syms_of_indent P_ ((void));
2603
2604 /* defined in window.c */
2605 extern Lisp_Object Qwindowp, Qwindow_live_p;
2606 EXFUN (Fwindow_end, 2);
2607 EXFUN (Fselected_window, 0);
2608 EXFUN (Fnext_window, 3);
2609 EXFUN (Fdelete_window, 1);
2610 EXFUN (Fselect_window, 1);
2611 EXFUN (Fset_window_buffer, 2);
2612 EXFUN (Fget_buffer_window, 2);
2613 EXFUN (Fsave_window_excursion, UNEVALLED);
2614 EXFUN (Fsplit_window, 3);
2615 EXFUN (Fset_window_configuration, 1);
2616 EXFUN (Fcurrent_window_configuration, 1);
2617 extern int compare_window_configurations P_ ((Lisp_Object, Lisp_Object, int));
2618 EXFUN (Fcoordinates_in_window_p, 2);
2619 EXFUN (Fwindow_at, 3);
2620 EXFUN (Fpos_visible_in_window_p, 2);
2621 extern void mark_window_cursors_off P_ ((struct window *));
2622 extern int window_internal_height P_ ((struct window *));
2623 extern int window_internal_width P_ ((struct window *));
2624 EXFUN (Frecenter, 1);
2625 EXFUN (Fscroll_other_window, 1);
2626 EXFUN (Fset_window_start, 3);
2627 extern void temp_output_buffer_show P_ ((Lisp_Object));
2628 extern void replace_buffer_in_all_windows P_ ((Lisp_Object));
2629 extern void init_window_once P_ ((void));
2630 extern void syms_of_window P_ ((void));
2631 extern void keys_of_window P_ ((void));
2632
2633 /* defined in frame.c */
2634 extern Lisp_Object Qvisible;
2635 extern void store_frame_param P_ ((struct frame *, Lisp_Object, Lisp_Object));
2636 extern void store_in_alist P_ ((Lisp_Object *, Lisp_Object, Lisp_Object));
2637 extern Lisp_Object do_switch_frame P_ ((Lisp_Object, Lisp_Object, int));
2638 extern Lisp_Object get_frame_param P_ ((struct frame *, Lisp_Object));
2639 extern Lisp_Object frame_buffer_predicate P_ ((Lisp_Object));
2640 EXFUN (Fframep, 1);
2641 EXFUN (Fselect_frame, 2);
2642 EXFUN (Fselected_frame, 0);
2643 EXFUN (Fwindow_frame, 1);
2644 EXFUN (Fframe_root_window, 1);
2645 EXFUN (Fframe_first_window, 1);
2646 EXFUN (Fframe_selected_window, 1);
2647 EXFUN (Fframe_list, 0);
2648 EXFUN (Fnext_frame, 2);
2649 EXFUN (Fdelete_frame, 2);
2650 EXFUN (Fset_mouse_position, 3);
2651 EXFUN (Fmake_frame_visible, 1);
2652 EXFUN (Fmake_frame_invisible, 2);
2653 EXFUN (Ficonify_frame, 1);
2654 EXFUN (Fframe_visible_p, 1);
2655 EXFUN (Fvisible_frame_list, 0);
2656 EXFUN (Fframe_parameters, 1);
2657 EXFUN (Fmodify_frame_parameters, 2);
2658 EXFUN (Fset_frame_height, 3);
2659 EXFUN (Fset_frame_width, 3);
2660 EXFUN (Fset_frame_size, 3);
2661 EXFUN (Fset_frame_position, 3);
2662 EXFUN (Fraise_frame, 1);
2663 EXFUN (Fredirect_frame_focus, 2);
2664 EXFUN (Fset_frame_selected_window, 2);
2665 extern Lisp_Object frame_buffer_list P_ ((Lisp_Object));
2666 extern void frames_discard_buffer P_ ((Lisp_Object));
2667 extern void set_frame_buffer_list P_ ((Lisp_Object, Lisp_Object));
2668 extern void frames_bury_buffer P_ ((Lisp_Object));
2669 extern void syms_of_frame P_ ((void));
2670 extern void keys_of_frame P_ ((void));
2671
2672 /* defined in emacs.c */
2673 extern Lisp_Object decode_env_path P_ ((char *, char *));
2674 extern Lisp_Object Vinvocation_name, Vinvocation_directory;
2675 extern Lisp_Object Vinstallation_directory;
2676 EXFUN (Fkill_emacs, 1);
2677 #if HAVE_SETLOCALE
2678 void fixup_locale P_ ((void));
2679 void synchronize_system_messages_locale P_ ((void));
2680 void synchronize_system_time_locale P_ ((void));
2681 #else
2682 #define setlocale(category, locale)
2683 #define fixup_locale()
2684 #define synchronize_system_messages_locale()
2685 #define synchronize_system_time_locale()
2686 #endif
2687 void shut_down_emacs P_ ((int, int, Lisp_Object));
2688 /* Nonzero means don't do interactive redisplay and don't change tty modes */
2689 extern int noninteractive;
2690 /* Nonzero means don't do use window-system-specific display code */
2691 extern int inhibit_window_system;
2692 /* Nonzero means that a filter or a sentinel is running. */
2693 extern int running_asynch_code;
2694
2695 /* defined in process.c */
2696 EXFUN (Fget_process, 1);
2697 EXFUN (Fget_buffer_process, 1);
2698 EXFUN (Fprocessp, 1);
2699 EXFUN (Fprocess_status, 1);
2700 EXFUN (Fkill_process, 2);
2701 EXFUN (Fprocess_send_eof, 1);
2702 EXFUN (Fwaiting_for_user_input_p, 0);
2703 extern Lisp_Object Qprocessp;
2704 extern void kill_buffer_processes P_ ((Lisp_Object));
2705 extern int wait_reading_process_input P_ ((int, int, Lisp_Object, int));
2706 extern void deactivate_process P_ ((Lisp_Object));
2707 extern void add_keyboard_wait_descriptor P_ ((int));
2708 extern void delete_keyboard_wait_descriptor P_ ((int));
2709 extern void close_process_descs P_ ((void));
2710 extern void status_notify P_ ((void));
2711 extern int read_process_output P_ ((Lisp_Object, int));
2712 extern void init_process P_ ((void));
2713 extern void syms_of_process P_ ((void));
2714
2715 /* defined in callproc.c */
2716 extern Lisp_Object Vexec_path, Vexec_directory, Vdata_directory;
2717 extern Lisp_Object Vdoc_directory;
2718 EXFUN (Fcall_process, MANY);
2719 extern int child_setup P_ ((int, int, int, char **, int, Lisp_Object));
2720 extern void init_callproc_1 P_ ((void));
2721 extern void init_callproc P_ ((void));
2722 extern void set_process_environment P_ ((void));
2723 extern void syms_of_callproc P_ ((void));
2724
2725 /* defined in doc.c */
2726 extern Lisp_Object Vdoc_file_name;
2727 EXFUN (Fsubstitute_command_keys, 1);
2728 EXFUN (Fdocumentation, 2);
2729 EXFUN (Fdocumentation_property, 3);
2730 extern Lisp_Object read_doc_string P_ ((Lisp_Object));
2731 extern Lisp_Object get_doc_string P_ ((Lisp_Object, int, int));
2732 extern void syms_of_doc P_ ((void));
2733 extern int read_bytecode_char P_ ((int));
2734
2735 /* defined in bytecode.c */
2736 extern Lisp_Object Qbytecode;
2737 EXFUN (Fbyte_code, 3);
2738 extern void syms_of_bytecode P_ ((void));
2739 extern struct byte_stack *byte_stack_list;
2740 extern void mark_byte_stack P_ ((void));
2741 extern void unmark_byte_stack P_ ((void));
2742
2743 /* defined in macros.c */
2744 extern Lisp_Object Qexecute_kbd_macro;
2745 EXFUN (Fexecute_kbd_macro, 2);
2746 extern void init_macros P_ ((void));
2747 extern void syms_of_macros P_ ((void));
2748 extern void keys_of_macros P_ ((void));
2749
2750 /* defined in undo.c */
2751 extern Lisp_Object Qinhibit_read_only;
2752 EXFUN (Fundo_boundary, 0);
2753 extern Lisp_Object truncate_undo_list P_ ((Lisp_Object, int, int));
2754 extern void record_marker_adjustment P_ ((Lisp_Object, int));
2755 extern void record_insert P_ ((int, int));
2756 extern void record_delete P_ ((int, Lisp_Object));
2757 extern void record_first_change P_ ((void));
2758 extern void record_change P_ ((int, int));
2759 extern void record_property_change P_ ((int, int, Lisp_Object, Lisp_Object,
2760 Lisp_Object));
2761 extern void syms_of_undo P_ ((void));
2762
2763 /* defined in textprop.c */
2764 extern Lisp_Object Qmodification_hooks;
2765 extern Lisp_Object Qrear_nonsticky, Qfont;
2766 extern Lisp_Object Qinsert_in_front_hooks, Qinsert_behind_hooks;
2767 EXFUN (Fnext_property_change, 3);
2768 EXFUN (Fnext_single_property_change, 4);
2769 EXFUN (Fnext_single_char_property_change, 4);
2770 EXFUN (Fprevious_single_property_change, 4);
2771 EXFUN (Fget_text_property, 3);
2772 EXFUN (Fput_text_property, 5);
2773 EXFUN (Fset_text_properties, 4);
2774 EXFUN (Ftext_property_not_all, 5);
2775 EXFUN (Fprevious_char_property_change, 2);
2776 EXFUN (Fnext_char_property_change, 2);
2777 extern void report_interval_modification P_ ((Lisp_Object, Lisp_Object));
2778 extern void syms_of_textprop P_ ((void));
2779 extern Lisp_Object next_single_char_property_change P_ ((Lisp_Object,
2780 Lisp_Object,
2781 Lisp_Object,
2782 Lisp_Object));
2783 extern Lisp_Object set_text_properties P_ ((Lisp_Object, Lisp_Object,
2784 Lisp_Object, Lisp_Object,
2785 Lisp_Object));
2786
2787 /* defined in xmenu.c */
2788 EXFUN (Fx_popup_menu, 2);
2789 EXFUN (Fx_popup_dialog, 2);
2790 extern void syms_of_xmenu P_ ((void));
2791 extern int popup_activated_flag;
2792
2793 /* defined in sysdep.c */
2794 extern void stuff_char P_ ((char c));
2795 extern void init_sigio P_ ((int));
2796 extern void request_sigio P_ ((void));
2797 extern void unrequest_sigio P_ ((void));
2798 extern void reset_sys_modes P_ ((void));
2799 extern void sys_subshell P_ ((void));
2800 extern void sys_suspend P_ ((void));
2801 extern void discard_tty_input P_ ((void));
2802 extern void init_sys_modes P_ ((void));
2803 extern void reset_sys_modes P_ ((void));
2804 extern void get_frame_size P_ ((int *, int *));
2805 extern void wait_for_termination P_ ((int));
2806 extern void flush_pending_output P_ ((int));
2807 extern void child_setup_tty P_ ((int));
2808 extern void setup_pty P_ ((int));
2809 extern int set_window_size P_ ((int, int, int));
2810 extern void create_process P_ ((Lisp_Object, char **, Lisp_Object));
2811 extern int tabs_safe_p P_ ((void));
2812 extern void init_baud_rate P_ ((void));
2813 extern int emacs_open P_ ((char *, int, int));
2814 extern int emacs_close P_ ((int));
2815 extern int emacs_read P_ ((int, char *, unsigned int));
2816 extern int emacs_write P_ ((int, char *, unsigned int));
2817
2818 /* defined in filelock.c */
2819 EXFUN (Funlock_buffer, 0);
2820 EXFUN (Ffile_locked_p, 1);
2821 extern void unlock_all_files P_ ((void));
2822 extern void lock_file P_ ((Lisp_Object));
2823 extern void unlock_file P_ ((Lisp_Object));
2824 extern void unlock_buffer P_ ((struct buffer *));
2825 extern void syms_of_filelock P_ ((void));
2826 extern void init_filelock P_ ((void));
2827
2828 /* Defined in sound.c */
2829 extern void syms_of_sound P_ ((void));
2830 extern void init_sound P_ ((void));
2831
2832 /* Defined in category.c */
2833 extern void init_category_once P_ ((void));
2834 extern void syms_of_category P_ ((void));
2835
2836 /* Defined in ccl.c */
2837 extern void syms_of_ccl P_ ((void));
2838
2839 /* Defined in dired.c */
2840 EXFUN (Ffile_attributes, 1);
2841 extern void syms_of_dired P_ ((void));
2842
2843 /* Defined in mocklisp.c */
2844 extern void syms_of_mocklisp P_ ((void));
2845
2846 /* Defined in term.c */
2847 extern void syms_of_term P_ ((void));
2848 extern void fatal ();
2849
2850 #ifdef HAVE_X_WINDOWS
2851 /* Defined in fontset.c */
2852 extern void syms_of_fontset P_ ((void));
2853 EXFUN (Fset_fontset_font, 4);
2854 #endif
2855
2856 /* Defined in xfaces.c */
2857 extern void syms_of_xfaces P_ ((void));
2858
2859 /* Defined in getloadavg.c */
2860 extern int getloadavg P_ ((double *, int));
2861
2862 #ifdef HAVE_X_WINDOWS
2863 /* Defined in xfns.c */
2864 extern void syms_of_xfns P_ ((void));
2865 extern void init_xfns P_ ((void));
2866 EXFUN (Fxw_display_color_p, 1);
2867 #endif /* HAVE_X_WINDOWS */
2868
2869 /* Defined in xselect.c */
2870 extern void syms_of_xselect P_ ((void));
2871
2872 /* Defined in xterm.c */
2873 extern void syms_of_xterm P_ ((void));
2874
2875 /* Defined in getloadavg.c */
2876 extern int getloadavg P_ ((double [], int));
2877 \f
2878 /* Nonzero means Emacs has already been initialized.
2879 Used during startup to detect startup of dumped Emacs. */
2880 extern int initialized;
2881
2882 extern int immediate_quit; /* Nonzero means ^G can quit instantly */
2883
2884 extern POINTER_TYPE *xmalloc P_ ((size_t));
2885 extern POINTER_TYPE *xrealloc P_ ((POINTER_TYPE *, size_t));
2886 extern void xfree P_ ((POINTER_TYPE *));
2887
2888 extern char *xstrdup P_ ((char *));
2889
2890 #ifndef USE_CRT_DLL
2891 extern char *egetenv P_ ((char *));
2892 #endif
2893
2894 /* Set up the name of the machine we're running on. */
2895 extern void init_system_name P_ ((void));
2896
2897 /* Some systems (e.g., NT) use a different path separator than Unix,
2898 in addition to a device separator. Default the path separator
2899 to '/', and don't test for a device separator in IS_ANY_SEP. */
2900
2901 #ifdef WINDOWSNT
2902 extern Lisp_Object Vdirectory_sep_char;
2903 #endif
2904
2905 #ifndef DIRECTORY_SEP
2906 #define DIRECTORY_SEP '/'
2907 #endif
2908 #ifndef IS_DIRECTORY_SEP
2909 #define IS_DIRECTORY_SEP(_c_) ((_c_) == DIRECTORY_SEP)
2910 #endif
2911 #ifndef IS_DEVICE_SEP
2912 #ifndef DEVICE_SEP
2913 #define IS_DEVICE_SEP(_c_) 0
2914 #else
2915 #define IS_DEVICE_SEP(_c_) ((_c_) == DEVICE_SEP)
2916 #endif
2917 #endif
2918 #ifndef IS_ANY_SEP
2919 #define IS_ANY_SEP(_c_) (IS_DIRECTORY_SEP (_c_))
2920 #endif
2921
2922 #ifdef SWITCH_ENUM_BUG
2923 #define SWITCH_ENUM_CAST(x) ((int)(x))
2924 #else
2925 #define SWITCH_ENUM_CAST(x) (x)
2926 #endif