]> code.delx.au - gnu-emacs/blobdiff - src/lisp.h
*** empty log message ***
[gnu-emacs] / src / lisp.h
index 13e734a73eab88362a51ec951fa0cbebdfd6bf7f..66f37044ad23bf841a3a863c6347124604ac0b68 100644 (file)
@@ -1,5 +1,5 @@
 /* Fundamental definitions for GNU Emacs Lisp interpreter.
-   Copyright (C) 1985,86,87,93,94,95,97,98,1999,2000
+   Copyright (C) 1985,86,87,93,94,95,97,98,1999,2000, 2001
      Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -26,6 +26,12 @@ Boston, MA 02111-1307, USA.  */
 #define P_(proto) ()
 #endif
 
+/* Define this temporarily to hunt a bug.  If defined, the size of
+   strings is redundantly recorded in sdata structures so that it can
+   be compared to the sizes recorded in Lisp strings.  */
+
+#define GC_CHECK_STRING_BYTES 1
+
 
 /* These are default choices for the types to use.  */
 #ifdef _LP64
@@ -48,20 +54,43 @@ Boston, MA 02111-1307, USA.  */
 
 /* Extra internal type checking?  */
 extern int suppress_checking;
-#ifdef ENABLE_CHECKING
 extern void die P_((const char *, const char *, int));
-#define CHECK(check,msg) ((check || suppress_checking ? 0 : die (msg, __FILE__, __LINE__)), 0)
+
+#ifdef ENABLE_CHECKING
+
+#define CHECK(check,msg) ((check || suppress_checking          \
+                          ? (void) 0                           \
+                          : die (msg, __FILE__, __LINE__)),    \
+                         0)
+
+/* Let's get some compile-time checking too.  */
+#undef NO_UNION_TYPE
+
 #else
+
 /* Produce same side effects and result, but don't complain.  */
 #define CHECK(check,msg) ((check),0)
+
 #endif
+
+/* Used for making sure that Emacs is compilable in all
+   conigurations.  */
+
+#ifdef USE_LISP_UNION_TYPE
+#undef NO_UNION_TYPE
+#endif
+
 /* Define an Emacs version of "assert", since some system ones are
    flaky.  */
+#ifndef ENABLE_CHECKING
+#define eassert(X)     (void) 0
+#else /* ENABLE_CHECKING */
 #if defined (__GNUC__) && __GNUC__ >= 2 && defined (__STDC__)
 #define eassert(cond) CHECK(cond,"assertion failed: " #cond)
 #else
 #define eassert(cond) CHECK(cond,"assertion failed")
 #endif
+#endif /* ENABLE_CHECKING */
 
 /* Define the fundamental Lisp data structures.  */
 
@@ -162,25 +191,25 @@ union Lisp_Object
   {
     /* Used for comparing two Lisp_Objects;
        also, positive integers can be accessed fast this way.  */
-    int i;
+    EMACS_INT i;
 
     struct
       {
-       int val: VALBITS;
-       int type: GCTYPEBITS+1;
+       EMACS_INT val  : VALBITS;
+       EMACS_INT type : GCTYPEBITS + 1;
       } s;
     struct
       {
-       unsigned int val: VALBITS;
-       int type: GCTYPEBITS+1;
+       EMACS_UINT val : VALBITS;
+       EMACS_INT type : GCTYPEBITS + 1;
       } u;
     struct
       {
-       unsigned int val: VALBITS;
-       enum Lisp_Type type: GCTYPEBITS;
+       EMACS_UINT val          : VALBITS;
+       enum Lisp_Type type     : GCTYPEBITS;
        /* The markbit is not really part of the value of a Lisp_Object,
           and is always zero except during garbage collection.  */
-       unsigned int markbit: 1;
+       EMACS_UINT markbit      : 1;
       } gu;
   }
 Lisp_Object;
@@ -192,25 +221,25 @@ union Lisp_Object
   {
     /* Used for comparing two Lisp_Objects;
        also, positive integers can be accessed fast this way.  */
-    int i;
+    EMACS_INT i;
 
     struct
       {
-       int type: GCTYPEBITS+1;
-       int val: VALBITS;
+       EMACS_INT type : GCTYPEBITS+1;
+       EMACS_INT val  : VALBITS;
       } s;
     struct
       {
-       int type: GCTYPEBITS+1;
-       unsigned int val: VALBITS;
+       EMACS_INT type : GCTYPEBITS+1;
+       EMACS_UINT val : VALBITS;
       } u;
     struct
       {
        /* The markbit is not really part of the value of a Lisp_Object,
           and is always zero except during garbage collection.  */
-       unsigned int markbit: 1;
-       enum Lisp_Type type: GCTYPEBITS;
-       unsigned int val: VALBITS;
+       EMACS_UINT markbit      : 1;
+       enum Lisp_Type type     : GCTYPEBITS;
+       EMACS_UINT val          : VALBITS;
       } gu;
   }
 Lisp_Object;
@@ -315,14 +344,15 @@ enum pvec_type
 /* Extract the value of a Lisp_Object as a signed integer.  */
 
 #ifndef XINT   /* Some machines need to do this differently.  */
-#define XINT(a) (((a) << (BITS_PER_EMACS_INT-VALBITS)) >> (BITS_PER_EMACS_INT-VALBITS))
+#define XINT(a) ((EMACS_INT) (((a) << (BITS_PER_EMACS_INT - VALBITS)) \
+                             >> (BITS_PER_EMACS_INT - VALBITS)))
 #endif
 
 /* Extract the value as an unsigned integer.  This is a basis
    for extracting it as a pointer to a structure in storage.  */
 
 #ifndef XUINT
-#define XUINT(a) ((a) & VALMASK)
+#define XUINT(a) ((EMACS_UINT) ((a) & VALMASK))
 #endif
 
 #ifndef XPNTR
@@ -403,7 +433,8 @@ extern int pure_size;
 
 #ifdef EXPLICIT_SIGN_EXTEND
 /* Make sure we sign-extend; compilers have been known to fail to do so.  */
-#define XINT(a) (((a).i << (BITS_PER_INT-VALBITS)) >> (BITS_PER_INT-VALBITS))
+#define XINT(a) (((a).i << (BITS_PER_EMACS_INT - VALBITS)) \
+                >> (BITS_PER_EMACS_INT - VALBITS))
 #else
 #define XINT(a) ((a).s.val)
 #endif /* EXPLICIT_SIGN_EXTEND */
@@ -412,9 +443,14 @@ extern int pure_size;
 #define XPNTR(a) ((a).u.val)
 
 #define XSET(var, vartype, ptr) \
-   (((var).s.type = ((char) (vartype))), ((var).s.val = ((int) (ptr))))
+   (((var).s.val = ((EMACS_INT) (ptr))), ((var).s.type = ((char) (vartype))))
 
+#if __GNUC__ >= 2 && defined (__OPTIMIZE__)
+#define make_number(N) \
+  (__extension__ ({ Lisp_Object _l; _l.s.val = (N); _l.s.type = Lisp_Int; _l; }))
+#else
 extern Lisp_Object make_number ();
+#endif
 
 /* During garbage collection, XGCTYPE must be used for extracting types
  so that the mark bit is ignored.  XMARKBIT access the markbit.
@@ -439,6 +475,7 @@ extern Lisp_Object make_number ();
 #define XFLOAT(a) (eassert (GC_FLOATP(a)),(struct Lisp_Float *) XPNTR(a))
 
 /* Misc types.  */
+
 #define XMISC(a)   ((union Lisp_Misc *) XPNTR(a))
 #define XMISCTYPE(a)   (XMARKER (a)->type)
 #define XMARKER(a) (&(XMISC(a)->u_marker))
@@ -451,6 +488,7 @@ extern Lisp_Object make_number ();
 #define XKBOARD_OBJFWD(a) (&(XMISC(a)->u_kboard_objfwd))
 
 /* Pseudovector types.  */
+
 #define XPROCESS(a) (eassert (GC_PROCESSP(a)),(struct Lisp_Process *) XPNTR(a))
 #define XWINDOW(a) (eassert (GC_WINDOWP(a)),(struct window *) XPNTR(a))
 #define XSUBR(a) (eassert (GC_SUBRP(a)),(struct Lisp_Subr *) XPNTR(a))
@@ -458,7 +496,6 @@ extern Lisp_Object make_number ();
 #define XCHAR_TABLE(a) ((struct Lisp_Char_Table *) XPNTR(a))
 #define XBOOL_VECTOR(a) ((struct Lisp_Bool_Vector *) XPNTR(a))
 
-
 /* Construct a Lisp_Object from a value or address.  */
 
 #define XSETINT(a, b) XSET (a, Lisp_Int, b)
@@ -469,10 +506,12 @@ extern Lisp_Object make_number ();
 #define XSETFLOAT(a, b) XSET (a, Lisp_Float, b)
 
 /* Misc types.  */
+
 #define XSETMISC(a, b) XSET (a, Lisp_Misc, b)
 #define XSETMARKER(a, b) (XSETMISC (a, b), XMISCTYPE (a) = Lisp_Misc_Marker)
 
 /* Pseudovector types.  */
+
 #define XSETPSEUDOVECTOR(a, b, code) \
   (XSETVECTOR (a, b), XVECTOR (a)->size |= PSEUDOVECTOR_FLAG | (code))
 #define XSETWINDOW_CONFIGURATION(a, b) \
@@ -484,6 +523,13 @@ extern Lisp_Object make_number ();
 #define XSETBUFFER(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_BUFFER))
 #define XSETCHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_CHAR_TABLE))
 #define XSETBOOL_VECTOR(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_BOOL_VECTOR))
+
+/* Convenience macros for dealing with Lisp arrays.  */
+
+#define AREF(ARRAY, IDX)       XVECTOR ((ARRAY))->contents[IDX]
+#define ASET(ARRAY, IDX, VAL)  (AREF ((ARRAY), (IDX)) = (VAL))
+#define ASIZE(ARRAY)           XVECTOR ((ARRAY))->size
+
 \f
 /* Basic data type for use of intervals.  See the macros in intervals.h.  */
 
@@ -541,15 +587,6 @@ typedef struct interval *INTERVAL;
 #define CHECK_STRING_OR_BUFFER(x, i) \
   { if (!STRINGP ((x)) && !BUFFERP ((x))) \
       x = wrong_type_argument (Qbuffer_or_string_p, (x)); }
-
-/* Macro used to conditionally compile intervals into certain data
-   structures.  See, e.g., struct Lisp_String below.  */
-#define DECLARE_INTERVALS INTERVAL intervals;
-
-/* Macro used to conditionally compile interval initialization into
-   certain code.  See, e.g., alloc.c.  */
-#define INITIALIZE_INTERVAL(ptr,val) ptr->intervals = val
-
 \f
 /* In a cons, the markbit of the car is the gc mark bit */
 
@@ -584,24 +621,25 @@ struct Lisp_Cons
   : NILP ((c)) ? Qnil                          \
   : wrong_type_argument (Qlistp, (c)))
 
-/* Like a cons, but records info on where the text lives that it was read from */
-/* This is not really in use now */
-
-struct Lisp_Buffer_Cons
-  {
-    Lisp_Object car, cdr;
-    struct buffer *buffer;
-    int bufpos;
-  };
-
 /* Nonzero if STR is a multibyte string.  */
 #define STRING_MULTIBYTE(STR)  \
   (XSTRING (STR)->size_byte >= 0)
 
 /* Return the length in bytes of STR.  */
+
+#ifdef GC_CHECK_STRING_BYTES
+
+struct Lisp_String;
+extern int string_bytes P_ ((struct Lisp_String *));
+#define STRING_BYTES(S) string_bytes ((S))
+
+#else /* not GC_CHECK_STRING_BYTES */
+
 #define STRING_BYTES(STR)  \
   ((STR)->size_byte < 0 ? (STR)->size : (STR)->size_byte)
 
+#endif /* not GC_CHECK_STRING_BYTES */
+
 /* Set the length in bytes of STR.  */
 #define SET_STRING_BYTES(STR, SIZE)  ((STR)->size_byte = (SIZE))
 
@@ -611,7 +649,7 @@ struct Lisp_String
   {
     EMACS_INT size;
     EMACS_INT size_byte;
-    DECLARE_INTERVALS          /* `data' field must be last.  */
+    INTERVAL intervals;                /* text properties in this string */
     unsigned char *data;
   };
 
@@ -1161,20 +1199,20 @@ typedef unsigned char UCHAR;
 #define GLYPH int
 
 /* Mask bits for face.  */
-#define GLYPH_MASK_FACE    0x7FFFFF00
+#define GLYPH_MASK_FACE    0x7FF80000
  /* Mask bits for character code.  */
-#define GLYPH_MASK_CHAR    0x000000FF /* The lowest 8 bits */
+#define GLYPH_MASK_CHAR    0x0007FFFF /* The lowest 19 bits */
 
 /* The FAST macros assume that we already know we're in an X window.  */
 
 /* Set a character code and a face ID in a glyph G.  */
-#define FAST_MAKE_GLYPH(char, face) ((char) | ((face) << 8))
+#define FAST_MAKE_GLYPH(char, face) ((char) | ((face) << CHARACTERBITS))
 
 /* Return a glyph's character code.  */
 #define FAST_GLYPH_CHAR(glyph) ((glyph) & GLYPH_MASK_CHAR)
 
 /* Return a glyph's face ID.  */
-#define FAST_GLYPH_FACE(glyph) (((glyph) & GLYPH_MASK_FACE) >> 8)
+#define FAST_GLYPH_FACE(glyph) (((glyph) & GLYPH_MASK_FACE) >> CHARACTERBITS)
 
 /* Slower versions that test the frame type first.  */
 #define MAKE_GLYPH(f, char, face) (FAST_MAKE_GLYPH (char, face))
@@ -1378,7 +1416,8 @@ typedef unsigned char UCHAR;
     A null string means call interactively with no arguments.
  `doc' is documentation for the user.  */
 
-#if !defined (__STDC__) || defined (USE_NONANSI_DEFUN)
+#if (!defined (__STDC__) && !defined (PROTOTYPES)) \
+    || defined (USE_NONANSI_DEFUN)
 #define DEFUN(lname, fnname, sname, minargs, maxargs, prompt, doc)     \
   Lisp_Object fnname ();                                               \
   struct Lisp_Subr sname =                                             \
@@ -1416,6 +1455,14 @@ typedef unsigned char UCHAR;
                         Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)
 #endif
 
+/* Non-zero if OBJ is a Lisp function.  */
+
+#define FUNCTIONP(OBJ)                                 \
+     ((CONSP (OBJ) && EQ (XCAR (OBJ), Qlambda))                \
+      || (SYMBOLP (OBJ) && !NILP (Ffboundp (OBJ)))     \
+      || COMPILEDP (OBJ)                               \
+      || SUBRP (OBJ))
+     
 /* defsubr (Sname);
  is how we define the symbol for function `name' at start-up time.  */
 extern void defsubr P_ ((struct Lisp_Subr *));
@@ -1476,6 +1523,8 @@ extern struct specbinding *specpdl;
 extern struct specbinding *specpdl_ptr;
 extern int specpdl_size;
 
+#define BINDING_STACK_SIZE()   (specpdl_ptr - specpdl)
+
 /* Everything needed to describe an active condition case.  */
 struct handler
   {
@@ -1600,14 +1649,19 @@ extern int gc_cons_threshold;
 extern struct gcpro *gcprolist;
 
 struct gcpro
-  {
-    struct gcpro *next;
-    Lisp_Object *var;          /* Address of first protected variable */
-    int nvars;                 /* Number of consecutive protected variables */
+{
+  struct gcpro *next;
+  
+  /* Address of first protected variable.  */
+  volatile Lisp_Object *var;
+  
+  /* Number of consecutive protected variables.  */
+  int nvars;
+  
 #ifdef DEBUG_GCPRO
-    int level;
+  int level;
 #endif
-  };
+};
 
 /* Values of GC_MARK_STACK during compilation:
 
@@ -1742,7 +1796,8 @@ void staticpro P_ ((Lisp_Object *));
 \f
 /* Declare a Lisp-callable function.  The MAXARGS parameter has the same
    meaning as in the DEFUN macro, and is used to construct a prototype.  */
-#if !defined (__STDC__) || defined (USE_NONANSI_DEFUN)
+#if (!defined (__STDC__) &&  !defined (PROTOTYPES)) \
+    || defined (USE_NONANSI_DEFUN)
 #define EXFUN(fnname, maxargs) \
   extern Lisp_Object fnname ()
 #else
@@ -1862,6 +1917,7 @@ EXFUN (Fash, 2);
 
 EXFUN (Fadd1, 1);
 EXFUN (Fsub1, 1);
+EXFUN (Fmake_variable_buffer_local, 1);
 
 extern Lisp_Object long_to_cons P_ ((unsigned long));
 extern unsigned long cons_to_long P_ ((Lisp_Object));
@@ -1873,6 +1929,7 @@ extern Lisp_Object do_symval_forwarding P_ ((Lisp_Object));
 extern Lisp_Object set_internal P_ ((Lisp_Object, Lisp_Object, struct buffer *, int));
 extern void syms_of_data P_ ((void));
 extern void init_data P_ ((void));
+extern void swap_in_global_binding P_ ((Lisp_Object));
 
 /* Defined in cmds.c */
 EXFUN (Fend_of_line, 1);
@@ -1891,7 +1948,7 @@ EXFUN (Fread_non_nil_coding_system, 1);
 EXFUN (Ffind_operation_coding_system, MANY);
 EXFUN (Fencode_coding_string, 3);
 EXFUN (Fdecode_coding_string, 3);
-extern Lisp_Object detect_coding_system P_ ((unsigned char *, int, int));
+extern Lisp_Object detect_coding_system P_ ((unsigned char *, int, int, int));
 Lisp_Object code_convert_string_norecord P_ ((Lisp_Object, Lisp_Object, int));
 extern void init_coding P_ ((void));
 extern void init_coding_once P_ ((void));
@@ -1924,8 +1981,12 @@ extern void init_syntax_once P_ ((void));
 extern void syms_of_syntax P_ ((void));
 
 /* Defined in fns.c */
+extern int use_dialog_box;
+extern int next_almost_prime P_ ((int));
+extern Lisp_Object larger_vector P_ ((Lisp_Object, int, Lisp_Object));
 extern void sweep_weak_hash_tables P_ ((void));
 extern Lisp_Object Qstring_lessp;
+EXFUN (Foptimize_char_table, 1);
 extern Lisp_Object Vfeatures;
 extern Lisp_Object QCtest, QCweakness, Qequal;
 unsigned sxhash P_ ((Lisp_Object, int));
@@ -2018,6 +2079,7 @@ extern int char_table_translate P_ ((Lisp_Object, int));
 extern void map_char_table P_ ((void (*) (Lisp_Object, Lisp_Object, Lisp_Object),
                                Lisp_Object, Lisp_Object, Lisp_Object, int,
                                Lisp_Object *));
+extern Lisp_Object char_table_ref_and_index P_ ((Lisp_Object, int, int *));
 extern void syms_of_fns P_ ((void));
 
 /* Defined in floatfns.c */
@@ -2073,13 +2135,16 @@ extern void syms_of_display P_ ((void));
 extern void safe_bcopy P_ ((char *, char *, int));
 
 /* Defined in xdisp.c */
-extern Lisp_Object Qinhibit_redisplay;
+extern Lisp_Object Qinhibit_point_motion_hooks;
+extern Lisp_Object Qinhibit_redisplay, Qdisplay;
+extern Lisp_Object Qmessage_truncate_lines;
 extern Lisp_Object Vmessage_log_max;
 extern int message_enable_multibyte;
 extern Lisp_Object echo_area_buffer[2];
 extern void check_message_stack P_ ((void));
 extern void setup_echo_area_for_printing P_ ((int));
 extern int push_message P_ ((void));
+extern Lisp_Object push_message_unwind P_ ((Lisp_Object));
 extern void pop_message P_ ((void));
 extern void restore_message P_ ((void));
 extern Lisp_Object current_message P_ ((void));
@@ -2101,12 +2166,14 @@ extern void truncate_echo_area P_ ((int));
 extern void redisplay P_ ((void));
 extern int check_point_in_composition
        P_ ((struct buffer *, int, struct buffer *, int));
-extern void redisplay_preserve_echo_area P_ ((void));
+extern void redisplay_preserve_echo_area P_ ((int));
 extern void mark_window_display_accurate P_ ((Lisp_Object, int));
 extern int invisible_p P_ ((Lisp_Object, Lisp_Object));
 extern void prepare_menu_bars P_ ((void));
 extern void syms_of_xdisp P_ ((void));
 extern void init_xdisp P_ ((void));
+extern Lisp_Object safe_eval P_ ((Lisp_Object));
+extern int pos_visible_p P_ ((struct window *, int, int *, int));
 
 /* Defined in vm-limit.c.  */
 extern void memory_warnings P_ ((POINTER_TYPE *, void (*warnfun) ()));
@@ -2226,6 +2293,9 @@ extern Lisp_Object Vinhibit_quit, Qinhibit_quit, Vquit_flag;
 extern Lisp_Object Vmocklisp_arguments, Qmocklisp, Qmocklisp_arguments;
 extern Lisp_Object Vautoload_queue;
 extern Lisp_Object Vdebug_on_error;
+extern Lisp_Object Vsignaling_function;
+extern int handling_signal;
+
 /* To run a normal hook, use the appropriate function from the list below.
    The calling convention:
 
@@ -2255,7 +2325,7 @@ EXFUN (Flet, UNEVALLED);
 EXFUN (FletX, UNEVALLED);
 EXFUN (Fwhile, UNEVALLED);
 EXFUN (Fcatch, UNEVALLED);
-EXFUN (Fthrow, 2);
+EXFUN (Fthrow, 2) NO_RETURN;
 EXFUN (Funwind_protect, UNEVALLED);
 EXFUN (Fcondition_case, UNEVALLED);
 EXFUN (Fsignal, 2);
@@ -2278,14 +2348,17 @@ extern Lisp_Object apply_lambda P_ ((Lisp_Object, Lisp_Object, int));
 extern Lisp_Object internal_catch P_ ((Lisp_Object, Lisp_Object (*) (Lisp_Object), Lisp_Object));
 extern Lisp_Object internal_condition_case P_ ((Lisp_Object (*) (void), Lisp_Object, Lisp_Object (*) (Lisp_Object)));
 extern Lisp_Object internal_condition_case_1 P_ ((Lisp_Object (*) (Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object)));
+extern Lisp_Object internal_condition_case_2 P_ ((Lisp_Object (*) (int, Lisp_Object *), int, Lisp_Object *, Lisp_Object, Lisp_Object (*) (Lisp_Object)));
 extern void specbind P_ ((Lisp_Object, Lisp_Object));
 extern void record_unwind_protect P_ ((Lisp_Object (*) (Lisp_Object), Lisp_Object));
 extern Lisp_Object unbind_to P_ ((int, Lisp_Object));
-extern void error P_ ((/* char *, ... */));
+extern void error P_ ((/* char *, ... */)) NO_RETURN;
 extern void do_autoload P_ ((Lisp_Object, Lisp_Object));
 extern Lisp_Object un_autoload P_ ((Lisp_Object));
 EXFUN (Ffetch_bytecode, 1);
 extern void init_eval_once P_ ((void));
+extern Lisp_Object safe_call P_ ((int, Lisp_Object *));
+extern Lisp_Object safe_call1 P_ ((Lisp_Object, Lisp_Object));
 extern void init_eval P_ ((void));
 extern void syms_of_eval P_ ((void));
 
@@ -2338,11 +2411,12 @@ extern void init_editfns P_ ((void));
 extern void syms_of_editfns P_ ((void));
 EXFUN (Fcurrent_message, 0);
 extern Lisp_Object Vinhibit_field_text_motion;
-EXFUN (Fconstrain_to_field, 4);
+EXFUN (Fconstrain_to_field, 5);
 EXFUN (Ffield_string, 1);
 EXFUN (Fdelete_field, 1);
 EXFUN (Ffield_beginning, 2);
 EXFUN (Ffield_string_no_properties, 1);
+extern void set_time_zone_rule P_ ((char *));
 
 /* defined in buffer.c */
 extern void nsberror P_ ((Lisp_Object));
@@ -2378,6 +2452,7 @@ extern Lisp_Object Qoverlayp;
 extern Lisp_Object get_truename_buffer P_ ((Lisp_Object));
 extern struct buffer *all_buffers;
 EXFUN (Fprevious_overlay_change, 1);
+EXFUN (Fbuffer_file_name, 1);
 extern void init_buffer_once P_ ((void));
 extern void init_buffer P_ ((void));
 extern void syms_of_buffer P_ ((void));
@@ -2431,6 +2506,7 @@ extern int internal_delete_file P_ ((Lisp_Object));
 extern void syms_of_fileio P_ ((void));
 EXFUN (Fmake_temp_name, 1);
 extern void init_fileio_once P_ ((void));
+extern Lisp_Object make_temp_name P_ ((Lisp_Object, int));
 
 /* Defined in abbrev.c */
 
@@ -2445,6 +2521,7 @@ EXFUN (Fmatch_data, 2);
 EXFUN (Fset_match_data, 1);
 EXFUN (Fmatch_beginning, 1);
 EXFUN (Fmatch_end, 1);
+EXFUN (Flooking_at, 1);
 extern int fast_string_match P_ ((Lisp_Object, Lisp_Object));
 extern int fast_c_string_match_ignore_case P_ ((Lisp_Object, char *));
 extern int scan_buffer P_ ((int, int, int, int, int *, int));
@@ -2502,8 +2579,9 @@ extern void syms_of_casetab P_ ((void));
 
 /* defined in keyboard.c */
 
-extern Lisp_Object Qdisabled;
+extern Lisp_Object Qdisabled, QCfilter;
 extern Lisp_Object Vtty_erase_char, Vhelp_form, Vtop_level;
+extern int input_pending;
 EXFUN (Fdiscard_input, 0);
 EXFUN (Frecursive_edit, 0);
 EXFUN (Fcommand_execute, 4);
@@ -2525,9 +2603,11 @@ extern void record_auto_save P_ ((void));
 extern void init_keyboard P_ ((void));
 extern void syms_of_keyboard P_ ((void));
 extern void keys_of_keyboard P_ ((void));
+extern char *push_key_description P_ ((unsigned int, char *, int));
 
 /* defined in keymap.c */
 
+#define KEYMAPP(m) (!NILP (get_keymap (m, 0, 0)))
 extern Lisp_Object Qkeymap, Qmenu_bar;
 extern Lisp_Object current_global_map;
 EXFUN (Fmake_sparse_keymap, 1);
@@ -2536,13 +2616,11 @@ EXFUN (Fdefine_key, 3);
 EXFUN (Flookup_key, 3);
 EXFUN (Fkey_binding, 2);
 EXFUN (Fkey_description, 1);
-EXFUN (Fsingle_key_description, 1);
+EXFUN (Fsingle_key_description, 2);
 EXFUN (Fwhere_is_internal, 4);
-extern Lisp_Object access_keymap P_ ((Lisp_Object, Lisp_Object, int, int));
-extern Lisp_Object store_in_keymap P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
+extern Lisp_Object access_keymap P_ ((Lisp_Object, Lisp_Object, int, int, int));
 extern Lisp_Object get_keyelt P_ ((Lisp_Object, int));
-extern Lisp_Object get_keymap P_ ((Lisp_Object));
-extern Lisp_Object get_keymap_1 P_ ((Lisp_Object, int, int));
+extern Lisp_Object get_keymap P_ ((Lisp_Object, int, int));
 extern void describe_vector P_ ((Lisp_Object, Lisp_Object,
                                 void (*) (Lisp_Object), int,
                                 Lisp_Object, Lisp_Object, int *, int));
@@ -2551,7 +2629,6 @@ extern void describe_map_tree P_ ((Lisp_Object, int, Lisp_Object, Lisp_Object,
 extern int current_minor_maps P_ ((Lisp_Object **, Lisp_Object **));
 extern void initial_define_key P_ ((Lisp_Object, int, char *));
 extern void initial_define_lispy_key P_ ((Lisp_Object, char *, char *));
-extern void fix_submap_inheritance P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
 extern void syms_of_keymap P_ ((void));
 extern void keys_of_keymap P_ ((void));
 
@@ -2581,7 +2658,7 @@ EXFUN (Fcurrent_window_configuration, 1);
 extern int compare_window_configurations P_ ((Lisp_Object, Lisp_Object, int));
 EXFUN (Fcoordinates_in_window_p, 2);
 EXFUN (Fwindow_at, 3);
-EXFUN (Fpos_visible_in_window_p, 2);
+EXFUN (Fpos_visible_in_window_p, 3);
 extern void mark_window_cursors_off P_ ((struct window *));
 extern int window_internal_height P_ ((struct window *));
 extern int window_internal_width P_ ((struct window *));
@@ -2730,6 +2807,7 @@ extern Lisp_Object Qrear_nonsticky, Qfont;
 extern Lisp_Object Qinsert_in_front_hooks, Qinsert_behind_hooks;
 EXFUN (Fnext_property_change, 3);
 EXFUN (Fnext_single_property_change, 4);
+EXFUN (Fnext_single_char_property_change, 4);
 EXFUN (Fprevious_single_property_change, 4);
 EXFUN (Fget_text_property, 3);
 EXFUN (Fput_text_property, 5);
@@ -2747,9 +2825,6 @@ extern Lisp_Object set_text_properties P_ ((Lisp_Object, Lisp_Object,
                                            Lisp_Object, Lisp_Object,
                                            Lisp_Object));
 
-/* defined in intervals.c */
-extern Lisp_Object get_local_map P_ ((int, struct buffer *));
-
 /* defined in xmenu.c */
 EXFUN (Fx_popup_menu, 2);
 EXFUN (Fx_popup_dialog, 2);
@@ -2811,7 +2886,7 @@ extern void syms_of_mocklisp P_ ((void));
 
 /* Defined in term.c */
 extern void syms_of_term P_ ((void));
-extern void fatal ();
+extern void fatal () NO_RETURN;
 
 #ifdef HAVE_X_WINDOWS
 /* Defined in fontset.c */
@@ -2827,14 +2902,9 @@ extern int getloadavg P_ ((double *, int));
 
 #ifdef HAVE_X_WINDOWS
 /* Defined in xfns.c */
-extern void x_set_tool_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object));
 extern void syms_of_xfns P_ ((void));
 extern void init_xfns P_ ((void));
 EXFUN (Fxw_display_color_p, 1);
-#ifdef HAVE_X_I18N
-extern void free_frame_xic P_ ((struct frame *));
-#endif
-/* Fixme: x_defined_color needs declaring, but needs FRAME_PTR and XColor. */
 #endif /* HAVE_X_WINDOWS */
 
 /* Defined in xselect.c */
@@ -2845,21 +2915,22 @@ extern void syms_of_xterm P_ ((void));
 
 /* Defined in getloadavg.c */
 extern int getloadavg P_ ((double [], int));
-
-/* Defined in composite.c */
-extern void compose_text P_ ((int, int, Lisp_Object, Lisp_Object, Lisp_Object));\f
+\f
 /* Nonzero means Emacs has already been initialized.
    Used during startup to detect startup of dumped Emacs.  */
 extern int initialized;
 
 extern int immediate_quit;         /* Nonzero means ^G can quit instantly */
 
-extern char *getenv (), *ctime (), *getwd ();
-extern long *xmalloc (), *xrealloc ();
-extern void xfree ();
+extern POINTER_TYPE *xmalloc P_ ((size_t));
+extern POINTER_TYPE *xrealloc P_ ((POINTER_TYPE *, size_t));
+extern void xfree P_ ((POINTER_TYPE *));
+
 extern char *xstrdup P_ ((char *));
 
+#ifndef USE_CRT_DLL
 extern char *egetenv P_ ((char *));
+#endif
 
 /* Set up the name of the machine we're running on.  */
 extern void init_system_name P_ ((void));