X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/48778e46daa24080c3b2653fe39abc947225924c..b6e11efd50d48abb8077c5b055688a08d51e80aa:/src/lisp.h diff --git a/src/lisp.h b/src/lisp.h index 6a3c7e5ebb..84d0487f88 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -1,5 +1,6 @@ /* Fundamental definitions for GNU Emacs Lisp interpreter. - Copyright (C) 1985,86,87,93,94,95,97,98,1999 Free Software Foundation, Inc. + Copyright (C) 1985,86,87,93,94,95,97,98,1999,2000 + Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -591,7 +592,7 @@ struct Lisp_String EMACS_INT size; EMACS_INT size_byte; DECLARE_INTERVALS /* `data' field must be last. */ - unsigned char data[1]; + unsigned char *data; }; /* If a struct is made to look like a vector, this macro returns the length @@ -1122,36 +1123,33 @@ typedef unsigned char UCHAR; /* The glyph datatype, used to represent characters on the display. */ -/* The low 19 bits (CHARACTERBITS) are the character code, and the - bits above them except for the topmost two bits are the numeric - face ID. If FID is the face ID of a glyph on a frame F, then - F->display.x->faces[FID] contains the description of that face. - This is an int instead of a short, so we can support a good bunch - of face ID's (i.e. 2^(32 - 19 - 2) = 2048 ID's) ; given that we +/* Glyph code to use as an index to the glyph table. If it is out of + range for the glyph table, or the corresonding element in the table + is nil, the low 8 bits are the single byte character code, and the + bits above are the numeric face ID. If FID is the face ID of a + glyph on a frame F, then F->display.x->faces[FID] contains the + description of that face. This is an int instead of a short, so we + can support a good bunch of face ID's (2^(31 - 8)); given that we have no mechanism for tossing unused frame face ID's yet, we'll - probably run out of 255 pretty quickly. */ -#define GLYPH unsigned int - -/* Mask bit for a glyph of a character which should be written from - right to left. */ -#define GLYPH_MASK_REV_DIR 0x80000000 -/* Mask bit for a padding glyph of a multi-column character. */ -#define GLYPH_MASK_PADDING 0x40000000 + probably run out of 255 pretty quickly. + This is always -1 for a multibyte character. */ +#define GLYPH int + /* Mask bits for face. */ -#define GLYPH_MASK_FACE 0x3FF80000 -/* Mask bits for character code. */ -#define GLYPH_MASK_CHAR 0x0007FFFF /* The lowest 19 bits */ +#define GLYPH_MASK_FACE 0x7FFFFF00 + /* Mask bits for character code. */ +#define GLYPH_MASK_CHAR 0x000000FF /* The lowest 8 bits */ /* The FAST macros assume that we already know we're in an X window. */ -/* Given a character code and a face ID, return the appropriate glyph. */ -#define FAST_MAKE_GLYPH(char, face) ((char) | ((face) << CHARACTERBITS)) +/* Set a character code and a face ID in a glyph G. */ +#define FAST_MAKE_GLYPH(char, face) ((char) | ((face) << 8)) /* 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) >> CHARACTERBITS) +#define FAST_GLYPH_FACE(glyph) (((glyph) & GLYPH_MASK_FACE) >> 8) /* Slower versions that test the frame type first. */ #define MAKE_GLYPH(f, char, face) (FAST_MAKE_GLYPH (char, face)) @@ -1454,8 +1452,13 @@ extern void defvar_kboard P_ ((char *, int)); If func is zero and symbol is nil, undoing this binding evaluates the list of forms in old_value; this implements Lisp's unwind-protect form. - Otherwise, undoing this binding stores old_value as symbol's value; this - undoes the bindings made by a let form or function call. */ + + Otherwise, the element is a variable binding. + If the symbol field is a symbol, it is an ordinary variable binding. + Otherwise, it should be a cons cell (SYMBOL . BUFFER) + which represents having bound BUFFER's local value. + or (SYMBOL . nil), which represents having bound the default value. */ + struct specbinding { Lisp_Object symbol, old_value; @@ -1833,7 +1836,7 @@ extern void args_out_of_range_3 P_ ((Lisp_Object, Lisp_Object, Lisp_Object)); extern Lisp_Object wrong_type_argument P_ ((Lisp_Object, Lisp_Object)); extern void store_symval_forwarding P_ ((Lisp_Object, Lisp_Object, Lisp_Object)); extern Lisp_Object do_symval_forwarding P_ ((Lisp_Object)); -extern Lisp_Object set_internal P_ ((Lisp_Object, Lisp_Object, int)); +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)); @@ -1889,14 +1892,15 @@ extern void syms_of_syntax P_ ((void)); extern void sweep_weak_hash_tables P_ ((void)); extern Lisp_Object Qstring_lessp; extern Lisp_Object Vfeatures; +extern Lisp_Object QCtest, QCweakness, Qequal; unsigned sxhash P_ ((Lisp_Object, int)); Lisp_Object make_hash_table P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)); Lisp_Object copy_hash_table P_ ((struct Lisp_Hash_Table *)); int hash_lookup P_ ((struct Lisp_Hash_Table *, Lisp_Object, unsigned *)); -void hash_put P_ ((struct Lisp_Hash_Table *, Lisp_Object, Lisp_Object, - unsigned)); +int hash_put P_ ((struct Lisp_Hash_Table *, Lisp_Object, Lisp_Object, + unsigned)); void hash_remove P_ ((struct Lisp_Hash_Table *, Lisp_Object)); void hash_clear P_ ((struct Lisp_Hash_Table *)); void remove_hash_entry P_ ((struct Lisp_Hash_Table *, int)); @@ -2010,10 +2014,10 @@ extern void insert_before_markers P_ ((unsigned char *, int)); extern void insert_before_markers_and_inherit P_ ((unsigned char *, int)); extern void insert_from_string_before_markers P_ ((Lisp_Object, int, int, int, int, int)); extern void del_range P_ ((int, int)); -extern void del_range_1 P_ ((int, int, int)); +extern Lisp_Object del_range_1 P_ ((int, int, int, int)); extern void del_range_byte P_ ((int, int, int)); extern void del_range_both P_ ((int, int, int, int, int)); -extern void del_range_2 P_ ((int, int, int, int)); +extern Lisp_Object del_range_2 P_ ((int, int, int, int, int)); extern void modify_region P_ ((struct buffer *, int, int)); extern void prepare_to_modify_buffer P_ ((int, int, int *)); extern void signal_before_change P_ ((int, int, int *)); @@ -2062,6 +2066,8 @@ extern void message_log_maybe_newline P_ ((void)); extern void update_echo_area P_ ((void)); 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 mark_window_display_accurate P_ ((Lisp_Object, int)); extern int invisible_p P_ ((Lisp_Object, Lisp_Object)); @@ -2077,6 +2083,7 @@ extern void memory_warnings P_ ((char *, void (*warnfun) ())); #endif /* Defined in alloc.c */ +extern void allocate_string_data P_ ((struct Lisp_String *, int, int)); extern void uninterrupt_malloc P_ ((void)); extern void malloc_warning P_ ((char *)); extern void memory_full P_ ((void)); @@ -2302,6 +2309,7 @@ extern Lisp_Object make_buffer_string_both P_ ((int, int, int, int, int)); extern void init_editfns P_ ((void)); extern void syms_of_editfns P_ ((void)); EXFUN (Fcurrent_message, 0); +extern Lisp_Object Vinhibit_field_text_motion; /* defined in buffer.c */ extern void nsberror P_ ((Lisp_Object));