comparison src/lisp.h @ 89483:2f877ed80fa6

*** empty log message ***
author Kenichi Handa <handa@m17n.org>
date Mon, 08 Sep 2003 12:53:41 +0000
parents 375f2633d815 bc52ad30b028
children 2c1ad8f1fe6f
comparison
equal deleted inserted replaced
88123:375f2633d815 89483:2f877ed80fa6
295 PVEC_SUBR = 0x4000, 295 PVEC_SUBR = 0x4000,
296 PVEC_CHAR_TABLE = 0x8000, 296 PVEC_CHAR_TABLE = 0x8000,
297 PVEC_BOOL_VECTOR = 0x10000, 297 PVEC_BOOL_VECTOR = 0x10000,
298 PVEC_BUFFER = 0x20000, 298 PVEC_BUFFER = 0x20000,
299 PVEC_HASH_TABLE = 0x40000, 299 PVEC_HASH_TABLE = 0x40000,
300 PVEC_TYPE_MASK = 0x7fe00 300 PVEC_SUB_CHAR_TABLE = 0x80000,
301 PVEC_TYPE_MASK = 0x0ffe00
301 302
302 #if 0 /* This is used to make the value of PSEUDOVECTOR_FLAG available to 303 #if 0 /* This is used to make the value of PSEUDOVECTOR_FLAG available to
303 GDB. It doesn't work on OS Alpha. Moved to a variable in 304 GDB. It doesn't work on OS Alpha. Moved to a variable in
304 emacs.c. */ 305 emacs.c. */
305 PVEC_FLAG = PSEUDOVECTOR_FLAG 306 PVEC_FLAG = PSEUDOVECTOR_FLAG
494 #define XPROCESS(a) (eassert (GC_PROCESSP(a)),(struct Lisp_Process *) XPNTR(a)) 495 #define XPROCESS(a) (eassert (GC_PROCESSP(a)),(struct Lisp_Process *) XPNTR(a))
495 #define XWINDOW(a) (eassert (GC_WINDOWP(a)),(struct window *) XPNTR(a)) 496 #define XWINDOW(a) (eassert (GC_WINDOWP(a)),(struct window *) XPNTR(a))
496 #define XSUBR(a) (eassert (GC_SUBRP(a)),(struct Lisp_Subr *) XPNTR(a)) 497 #define XSUBR(a) (eassert (GC_SUBRP(a)),(struct Lisp_Subr *) XPNTR(a))
497 #define XBUFFER(a) (eassert (GC_BUFFERP(a)),(struct buffer *) XPNTR(a)) 498 #define XBUFFER(a) (eassert (GC_BUFFERP(a)),(struct buffer *) XPNTR(a))
498 #define XCHAR_TABLE(a) ((struct Lisp_Char_Table *) XPNTR(a)) 499 #define XCHAR_TABLE(a) ((struct Lisp_Char_Table *) XPNTR(a))
500 #define XSUB_CHAR_TABLE(a) ((struct Lisp_Sub_Char_Table *) XPNTR(a))
499 #define XBOOL_VECTOR(a) ((struct Lisp_Bool_Vector *) XPNTR(a)) 501 #define XBOOL_VECTOR(a) ((struct Lisp_Bool_Vector *) XPNTR(a))
500 502
501 /* Construct a Lisp_Object from a value or address. */ 503 /* Construct a Lisp_Object from a value or address. */
502 504
503 #define XSETINT(a, b) (a) = make_number (b) 505 #define XSETINT(a, b) (a) = make_number (b)
523 #define XSETSUBR(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_SUBR)) 525 #define XSETSUBR(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_SUBR))
524 #define XSETCOMPILED(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_COMPILED)) 526 #define XSETCOMPILED(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_COMPILED))
525 #define XSETBUFFER(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_BUFFER)) 527 #define XSETBUFFER(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_BUFFER))
526 #define XSETCHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_CHAR_TABLE)) 528 #define XSETCHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_CHAR_TABLE))
527 #define XSETBOOL_VECTOR(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_BOOL_VECTOR)) 529 #define XSETBOOL_VECTOR(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_BOOL_VECTOR))
530 #define XSETSUB_CHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_SUB_CHAR_TABLE))
528 531
529 /* Convenience macros for dealing with Lisp arrays. */ 532 /* Convenience macros for dealing with Lisp arrays. */
530 533
531 #define AREF(ARRAY, IDX) XVECTOR ((ARRAY))->contents[IDX] 534 #define AREF(ARRAY, IDX) XVECTOR ((ARRAY))->contents[IDX]
532 #define ASET(ARRAY, IDX, VAL) (AREF ((ARRAY), (IDX)) = (VAL)) 535 #define ASET(ARRAY, IDX, VAL) (AREF ((ARRAY), (IDX)) = (VAL))
663 EMACS_INT size; 666 EMACS_INT size;
664 struct Lisp_Vector *next; 667 struct Lisp_Vector *next;
665 Lisp_Object contents[1]; 668 Lisp_Object contents[1];
666 }; 669 };
667 670
668 /* A char table is a kind of vectorlike, with contents are like a 671 /* A char-table is a kind of vectorlike, with contents are like a
669 vector but with a few other slots. For some purposes, it makes 672 vector but with a few other slots. For some purposes, it makes
670 sense to handle a chartable with type struct Lisp_Vector. An 673 sense to handle a char-table with type struct Lisp_Vector. An
671 element of a char table can be any Lisp objects, but if it is a sub 674 element of a char table can be any Lisp objects, but if it is a sub
672 char-table, we treat it a table that contains information of a 675 char-table, we treat it a table that contains information of a
673 group of characters of the same charsets or a specific character of 676 specific range of characters. A sub char-table has the same
674 a charset. A sub char-table has the same structure as a char table 677 structure as a vector. A sub char table appears only in an element
675 except for that the former omits several slots at the tail. A sub 678 of a char-table, and there's no way to access it directly from
676 char table appears only in an element of a char table, and there's 679 Emacs Lisp program. */
677 no way to access it directly from Emacs Lisp program. */
678
679 /* This is the number of slots that apply to characters or character
680 sets. The first 128 are for ASCII, the next 128 are for 8-bit
681 European characters, and the last 128 are for multibyte characters.
682 The first 256 are indexed by the code itself, but the last 128 are
683 indexed by (charset-id + 128). */
684 #define CHAR_TABLE_ORDINARY_SLOTS 384
685
686 /* This is the number of slots that apply to characters of ASCII and
687 8-bit Europeans only. */
688 #define CHAR_TABLE_SINGLE_BYTE_SLOTS 256
689 680
690 /* This is the number of slots that every char table must have. This 681 /* This is the number of slots that every char table must have. This
691 counts the ordinary slots and the top, defalt, parent, and purpose 682 counts the ordinary slots and the top, defalt, parent, and purpose
692 slots. */ 683 slots. */
693 #define CHAR_TABLE_STANDARD_SLOTS (CHAR_TABLE_ORDINARY_SLOTS + 4) 684 #define CHAR_TABLE_STANDARD_SLOTS (VECSIZE (struct Lisp_Char_Table) - 1)
694
695 /* This is the number of slots that apply to position-code-1 and
696 position-code-2 of a multibyte character at the 2nd and 3rd level
697 sub char tables respectively. */
698 #define SUB_CHAR_TABLE_ORDINARY_SLOTS 128
699
700 /* This is the number of slots that every sub char table must have.
701 This counts the ordinary slots and the top and defalt slot. */
702 #define SUB_CHAR_TABLE_STANDARD_SLOTS (SUB_CHAR_TABLE_ORDINARY_SLOTS + 2)
703 685
704 /* Return the number of "extra" slots in the char table CT. */ 686 /* Return the number of "extra" slots in the char table CT. */
705 687
706 #define CHAR_TABLE_EXTRA_SLOTS(CT) \ 688 #define CHAR_TABLE_EXTRA_SLOTS(CT) \
707 (((CT)->size & PSEUDOVECTOR_SIZE_MASK) - CHAR_TABLE_STANDARD_SLOTS) 689 (((CT)->size & PSEUDOVECTOR_SIZE_MASK) - CHAR_TABLE_STANDARD_SLOTS)
708 690
709 /* Almost equivalent to Faref (CT, IDX) with optimization for ASCII 691 /* Almost equivalent to Faref (CT, IDX) with optimization for ASCII
710 and 8-bit Europeans characters. For these characters, do not check 692 characters. Do not check validity of CT. */
711 validity of CT. Do not follow parent. */ 693 #define CHAR_TABLE_REF(CT, IDX) \
712 #define CHAR_TABLE_REF(CT, IDX) \ 694 ((ASCII_CHAR_P (IDX) \
713 ((IDX) >= 0 && (IDX) < CHAR_TABLE_SINGLE_BYTE_SLOTS \ 695 && SUB_CHAR_TABLE_P (XCHAR_TABLE (CT)->ascii) \
714 ? (!NILP (XCHAR_TABLE (CT)->contents[IDX]) \ 696 && !NILP (XSUB_CHAR_TABLE (XCHAR_TABLE (CT)->ascii)->contents[IDX])) \
715 ? XCHAR_TABLE (CT)->contents[IDX] \ 697 ? XSUB_CHAR_TABLE (XCHAR_TABLE (CT)->ascii)->contents[IDX] \
716 : XCHAR_TABLE (CT)->defalt) \ 698 : char_table_ref ((CT), (IDX)))
717 : Faref (CT, make_number (IDX)))
718 699
719 /* Almost equivalent to Faref (CT, IDX) with optimization for ASCII 700 /* Almost equivalent to Faref (CT, IDX) with optimization for ASCII
720 and 8-bit Europeans characters. However, if the result is nil, 701 and 8-bit Europeans characters. However, if the result is nil,
721 return IDX. 702 return IDX.
722 703
723 For these characters, do not check validity of CT 704 For these characters, do not check validity of CT
724 and do not follow parent. */ 705 and do not follow parent. */
725 #define CHAR_TABLE_TRANSLATE(CT, IDX) \ 706 #define CHAR_TABLE_TRANSLATE(CT, IDX) \
726 ((IDX) < CHAR_TABLE_SINGLE_BYTE_SLOTS \ 707 char_table_translate (CT, IDX)
727 ? (!NILP (XCHAR_TABLE (CT)->contents[IDX]) \
728 ? XINT (XCHAR_TABLE (CT)->contents[IDX]) \
729 : IDX) \
730 : char_table_translate (CT, IDX))
731 708
732 /* Equivalent to Faset (CT, IDX, VAL) with optimization for ASCII and 709 /* Equivalent to Faset (CT, IDX, VAL) with optimization for ASCII and
733 8-bit Europeans characters. Do not check validity of CT. */ 710 8-bit European characters. Do not check validity of CT. */
734 #define CHAR_TABLE_SET(CT, IDX, VAL) \ 711 #define CHAR_TABLE_SET(CT, IDX, VAL) \
735 do { \ 712 (((IDX) >= 0 && ASCII_CHAR_P (IDX) \
736 if (XFASTINT (IDX) < CHAR_TABLE_SINGLE_BYTE_SLOTS) \ 713 && SUB_CHAR_TABLE_P (XCHAR_TABLE (CT)->ascii)) \
737 XCHAR_TABLE (CT)->contents[XFASTINT (IDX)] = VAL; \ 714 ? XSUB_CHAR_TABLE (XCHAR_TABLE (CT)->ascii)->contents[IDX] = VAL \
738 else \ 715 : char_table_set (CT, IDX, VAL))
739 Faset (CT, IDX, VAL); \ 716
740 } while (0) 717 #define CHARTAB_SIZE_BITS_0 6
718 #define CHARTAB_SIZE_BITS_1 4
719 #define CHARTAB_SIZE_BITS_2 5
720 #define CHARTAB_SIZE_BITS_3 7
721
722 extern const int chartab_size[4];
723
724 struct Lisp_Sub_Char_Table;
741 725
742 struct Lisp_Char_Table 726 struct Lisp_Char_Table
743 { 727 {
744 /* This is the vector's size field, which also holds the 728 /* This is the vector's size field, which also holds the
745 pseudovector type information. It holds the size, too. 729 pseudovector type information. It holds the size, too. The size
746 The size counts the top, defalt, purpose, and parent slots. 730 counts the defalt, parent, purpose, ascii, contents, and extras
747 The last three are not counted if this is a sub char table. */ 731 slots. */
748 EMACS_INT size; 732 EMACS_INT size;
749 struct Lisp_Vector *next; 733 struct Lisp_Vector *next;
750 /* This holds a flag to tell if this is a top level char table (t) 734
751 or a sub char table (nil). */
752 Lisp_Object top;
753 /* This holds a default value, 735 /* This holds a default value,
754 which is used whenever the value for a specific character is nil. */ 736 which is used whenever the value for a specific character is nil. */
755 Lisp_Object defalt; 737 Lisp_Object defalt;
756 /* This holds an actual value of each element. A sub char table 738
757 has only SUB_CHAR_TABLE_ORDINARY_SLOTS number of elements. */ 739 /* This points to another char table, which we inherit from when the
758 Lisp_Object contents[CHAR_TABLE_ORDINARY_SLOTS]; 740 value for a specific character is nil. The `defalt' slot takes
759 741 precedence over this. */
760 /* A sub char table doesn't has the following slots. */
761
762 /* This points to another char table, which we inherit from
763 when the value for a specific character is nil.
764 The `defalt' slot takes precedence over this. */
765 Lisp_Object parent; 742 Lisp_Object parent;
766 /* This should be a symbol which says what kind of use 743
767 this char-table is meant for. 744 /* This is a symbol which says what kind of use this char-table is
768 Typically now the values can be `syntax-table' and `display-table'. */ 745 meant for. */
769 Lisp_Object purpose; 746 Lisp_Object purpose;
770 /* These hold additional data. */ 747
748 /* The bottom sub char-table for characters of the range 0..127. It
749 is nil if none of ASCII character has a specific value. */
750 Lisp_Object ascii;
751
752 Lisp_Object contents[(1 << CHARTAB_SIZE_BITS_0)];
753
754 /* These hold additional data. It is a vector. */
771 Lisp_Object extras[1]; 755 Lisp_Object extras[1];
756 };
757
758 struct Lisp_Sub_Char_Table
759 {
760 /* This is the vector's size field, which also holds the
761 pseudovector type information. It holds the size, too. */
762 EMACS_INT size;
763 struct Lisp_Vector *next;
764
765 /* Depth of this sub char-table. It should be 1, 2, or 3. A sub
766 char-table of depth 1 contains 16 elments, and each element
767 covers 4096 (128*32) characters. A sub char-table of depth 2
768 contains 32 elements, and each element covers 128 characters. A
769 sub char-table of depth 3 contains 128 elements, and each element
770 is for one character. */
771 Lisp_Object depth;
772
773 /* Minimum character covered by the sub char-table. */
774 Lisp_Object min_char;
775
776 Lisp_Object contents[1];
772 }; 777 };
773 778
774 /* A boolvector is a kind of vectorlike, with contents are like a string. */ 779 /* A boolvector is a kind of vectorlike, with contents are like a string. */
775 struct Lisp_Bool_Vector 780 struct Lisp_Bool_Vector
776 { 781 {
1262 1267
1263 #define CHAR_MODIFIER_MASK \ 1268 #define CHAR_MODIFIER_MASK \
1264 (CHAR_ALT | CHAR_SUPER | CHAR_HYPER | CHAR_SHIFT | CHAR_CTL | CHAR_META) 1269 (CHAR_ALT | CHAR_SUPER | CHAR_HYPER | CHAR_SHIFT | CHAR_CTL | CHAR_META)
1265 1270
1266 1271
1267 /* Actually, the current Emacs uses 19 bits for the character value 1272 /* Actually, the current Emacs uses 22 bits for the character value
1268 itself. */ 1273 itself. */
1269 #define CHARACTERBITS 19 1274 #define CHARACTERBITS 2
1270 1275
1271 /* The maximum byte size consumed by push_key_description. 1276 /* The maximum byte size consumed by push_key_description.
1272 All callers should assure that at least this size of memory is 1277 All callers should assure that at least this size of memory is
1273 allocated at the place pointed by the second argument. 1278 allocated at the place pointed by the second argument.
1274 1279
1320 probably run out of 255 pretty quickly. 1325 probably run out of 255 pretty quickly.
1321 This is always -1 for a multibyte character. */ 1326 This is always -1 for a multibyte character. */
1322 #define GLYPH int 1327 #define GLYPH int
1323 1328
1324 /* Mask bits for face. */ 1329 /* Mask bits for face. */
1325 #define GLYPH_MASK_FACE 0x7FF80000 1330 #define GLYPH_MASK_FACE 0x7FC00000
1326 /* Mask bits for character code. */ 1331 /* Mask bits for character code. */
1327 #define GLYPH_MASK_CHAR 0x0007FFFF /* The lowest 19 bits */ 1332 #define GLYPH_MASK_CHAR 0x003FFFFF /* The lowest 22 bits */
1328 1333
1329 /* The FAST macros assume that we already know we're in an X window. */ 1334 /* The FAST macros assume that we already know we're in an X window. */
1330 1335
1331 /* Set a character code and a face ID in a glyph G. */ 1336 /* Set a character code and a face ID in a glyph G. */
1332 #define FAST_MAKE_GLYPH(char, face) ((char) | ((face) << CHARACTERBITS)) 1337 #define FAST_MAKE_GLYPH(char, face) ((char) | ((face) << CHARACTERBITS))
1420 #define COMPILEDP(x) PSEUDOVECTORP (x, PVEC_COMPILED) 1425 #define COMPILEDP(x) PSEUDOVECTORP (x, PVEC_COMPILED)
1421 #define GC_COMPILEDP(x) GC_PSEUDOVECTORP (x, PVEC_COMPILED) 1426 #define GC_COMPILEDP(x) GC_PSEUDOVECTORP (x, PVEC_COMPILED)
1422 #define BUFFERP(x) PSEUDOVECTORP (x, PVEC_BUFFER) 1427 #define BUFFERP(x) PSEUDOVECTORP (x, PVEC_BUFFER)
1423 #define GC_BUFFERP(x) GC_PSEUDOVECTORP (x, PVEC_BUFFER) 1428 #define GC_BUFFERP(x) GC_PSEUDOVECTORP (x, PVEC_BUFFER)
1424 #define CHAR_TABLE_P(x) PSEUDOVECTORP (x, PVEC_CHAR_TABLE) 1429 #define CHAR_TABLE_P(x) PSEUDOVECTORP (x, PVEC_CHAR_TABLE)
1430 #define SUB_CHAR_TABLE_P(x) PSEUDOVECTORP (x, PVEC_SUB_CHAR_TABLE)
1431 #define GC_SUB_CHAR_TABLE_P(x) GC_PSEUDOVECTORP (x, PVEC_SUB_CHAR_TABLE)
1425 #define GC_CHAR_TABLE_P(x) GC_PSEUDOVECTORP (x, PVEC_CHAR_TABLE) 1432 #define GC_CHAR_TABLE_P(x) GC_PSEUDOVECTORP (x, PVEC_CHAR_TABLE)
1426 #define BOOL_VECTOR_P(x) PSEUDOVECTORP (x, PVEC_BOOL_VECTOR) 1433 #define BOOL_VECTOR_P(x) PSEUDOVECTORP (x, PVEC_BOOL_VECTOR)
1427 #define GC_BOOL_VECTOR_P(x) GC_PSEUDOVECTORP (x, PVEC_BOOL_VECTOR) 1434 #define GC_BOOL_VECTOR_P(x) GC_PSEUDOVECTORP (x, PVEC_BOOL_VECTOR)
1428 #define FRAMEP(x) PSEUDOVECTORP (x, PVEC_FRAME) 1435 #define FRAMEP(x) PSEUDOVECTORP (x, PVEC_FRAME)
1429 #define GC_FRAMEP(x) GC_PSEUDOVECTORP (x, PVEC_FRAME) 1436 #define GC_FRAMEP(x) GC_PSEUDOVECTORP (x, PVEC_FRAME)
1430 1437
1431 #define SUB_CHAR_TABLE_P(x) (CHAR_TABLE_P (x) && NILP (XCHAR_TABLE (x)->top))
1432 1438
1433 #define EQ(x, y) (XFASTINT (x) == XFASTINT (y)) 1439 #define EQ(x, y) (XFASTINT (x) == XFASTINT (y))
1434 #define GC_EQ(x, y) (XGCTYPE (x) == XGCTYPE (y) && XPNTR (x) == XPNTR (y)) 1440 #define GC_EQ(x, y) (XGCTYPE (x) == XGCTYPE (y) && XPNTR (x) == XPNTR (y))
1435 1441
1436 #define CHECK_LIST(x) \ 1442 #define CHECK_LIST(x) \
1525 1531
1526 #define CHECK_NUMBER_CDR(x) \ 1532 #define CHECK_NUMBER_CDR(x) \
1527 do { \ 1533 do { \
1528 Lisp_Object tmp = XCDR (x); \ 1534 Lisp_Object tmp = XCDR (x); \
1529 CHECK_NUMBER (tmp); \ 1535 CHECK_NUMBER (tmp); \
1536 XSETCDR ((x), tmp); \
1537 } while (0)
1538
1539 #define CHECK_NATNUM_CAR(x) \
1540 do { \
1541 Lisp_Object tmp = XCAR (x); \
1542 CHECK_NATNUM (tmp); \
1543 XSETCAR ((x), tmp); \
1544 } while (0)
1545
1546 #define CHECK_NATNUM_CDR(x) \
1547 do { \
1548 Lisp_Object tmp = XCDR (x); \
1549 CHECK_NATNUM (tmp); \
1530 XSETCDR ((x), tmp); \ 1550 XSETCDR ((x), tmp); \
1531 } while (0) 1551 } while (0)
1532 1552
1533 /* Cast pointers to this type to compare them. Some machines want int. */ 1553 /* Cast pointers to this type to compare them. Some machines want int. */
1534 #ifndef PNTR_COMPARISON_TYPE 1554 #ifndef PNTR_COMPARISON_TYPE
2130 EXFUN (Fcheck_coding_system, 1); 2150 EXFUN (Fcheck_coding_system, 1);
2131 EXFUN (Fread_coding_system, 2); 2151 EXFUN (Fread_coding_system, 2);
2132 EXFUN (Fread_non_nil_coding_system, 1); 2152 EXFUN (Fread_non_nil_coding_system, 1);
2133 EXFUN (Ffind_operation_coding_system, MANY); 2153 EXFUN (Ffind_operation_coding_system, MANY);
2134 EXFUN (Fupdate_coding_systems_internal, 0); 2154 EXFUN (Fupdate_coding_systems_internal, 0);
2135 EXFUN (Fencode_coding_string, 3); 2155 EXFUN (Fencode_coding_string, 4);
2136 EXFUN (Fdecode_coding_string, 3); 2156 EXFUN (Fdecode_coding_string, 4);
2137 extern Lisp_Object detect_coding_system P_ ((const unsigned char *, int, int, 2157 extern Lisp_Object detect_coding_system P_ ((const unsigned char *, int, int,
2138 int)); 2158 int, Lisp_Object));
2139 extern void init_coding P_ ((void)); 2159 extern void init_coding P_ ((void));
2140 extern void init_coding_once P_ ((void)); 2160 extern void init_coding_once P_ ((void));
2141 extern void syms_of_coding P_ ((void)); 2161 extern void syms_of_coding P_ ((void));
2142 extern Lisp_Object code_convert_string_norecord P_ ((Lisp_Object, Lisp_Object, 2162
2143 int)); 2163 /* Defined in character.c */
2164 extern void init_character_once P_ ((void));
2165 extern void syms_of_character P_ ((void));
2144 2166
2145 /* Defined in charset.c */ 2167 /* Defined in charset.c */
2146 extern EMACS_INT nonascii_insert_offset;
2147 extern Lisp_Object Vnonascii_translation_table;
2148 EXFUN (Fchar_bytes, 1); 2168 EXFUN (Fchar_bytes, 1);
2149 EXFUN (Fchar_width, 1); 2169 EXFUN (Fchar_width, 1);
2150 EXFUN (Fstring, MANY); 2170 EXFUN (Fstring, MANY);
2151 extern int chars_in_text P_ ((const unsigned char *, int)); 2171 extern int chars_in_text P_ ((const unsigned char *, int));
2152 extern int multibyte_chars_in_text P_ ((const unsigned char *, int)); 2172 extern int multibyte_chars_in_text P_ ((const unsigned char *, int));
2153 extern int unibyte_char_to_multibyte P_ ((int));
2154 extern int multibyte_char_to_unibyte P_ ((int, Lisp_Object)); 2173 extern int multibyte_char_to_unibyte P_ ((int, Lisp_Object));
2155 extern Lisp_Object Qcharset; 2174 extern Lisp_Object Qcharset;
2175 extern void init_charset P_ ((void));
2156 extern void init_charset_once P_ ((void)); 2176 extern void init_charset_once P_ ((void));
2157 extern void syms_of_charset P_ ((void)); 2177 extern void syms_of_charset P_ ((void));
2178 /* Structure forward declarations. */
2179 struct charset;
2180
2181 /* Defined in composite.c */
2182 extern void syms_of_composite P_ ((void));
2158 2183
2159 /* Defined in syntax.c */ 2184 /* Defined in syntax.c */
2160 EXFUN (Fforward_word, 1); 2185 EXFUN (Fforward_word, 1);
2161 EXFUN (Fskip_chars_forward, 2); 2186 EXFUN (Fskip_chars_forward, 2);
2162 EXFUN (Fskip_chars_backward, 2); 2187 EXFUN (Fskip_chars_backward, 2);
2170 extern int use_dialog_box; 2195 extern int use_dialog_box;
2171 extern int next_almost_prime P_ ((int)); 2196 extern int next_almost_prime P_ ((int));
2172 extern Lisp_Object larger_vector P_ ((Lisp_Object, int, Lisp_Object)); 2197 extern Lisp_Object larger_vector P_ ((Lisp_Object, int, Lisp_Object));
2173 extern void sweep_weak_hash_tables P_ ((void)); 2198 extern void sweep_weak_hash_tables P_ ((void));
2174 extern Lisp_Object Qstring_lessp; 2199 extern Lisp_Object Qstring_lessp;
2175 EXFUN (Foptimize_char_table, 1);
2176 extern Lisp_Object Vfeatures; 2200 extern Lisp_Object Vfeatures;
2177 extern Lisp_Object QCtest, QCweakness, Qequal; 2201 extern Lisp_Object QCtest, QCweakness, Qequal, Qeq;
2178 unsigned sxhash P_ ((Lisp_Object, int)); 2202 unsigned sxhash P_ ((Lisp_Object, int));
2179 Lisp_Object make_hash_table P_ ((Lisp_Object, Lisp_Object, Lisp_Object, 2203 Lisp_Object make_hash_table P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
2180 Lisp_Object, Lisp_Object, Lisp_Object, 2204 Lisp_Object, Lisp_Object, Lisp_Object,
2181 Lisp_Object)); 2205 Lisp_Object));
2182 Lisp_Object copy_hash_table P_ ((struct Lisp_Hash_Table *)); 2206 Lisp_Object copy_hash_table P_ ((struct Lisp_Hash_Table *));
2187 void hash_clear P_ ((struct Lisp_Hash_Table *)); 2211 void hash_clear P_ ((struct Lisp_Hash_Table *));
2188 void remove_hash_entry P_ ((struct Lisp_Hash_Table *, int)); 2212 void remove_hash_entry P_ ((struct Lisp_Hash_Table *, int));
2189 extern void init_fns P_ ((void)); 2213 extern void init_fns P_ ((void));
2190 EXFUN (Fsxhash, 1); 2214 EXFUN (Fsxhash, 1);
2191 EXFUN (Fmake_hash_table, MANY); 2215 EXFUN (Fmake_hash_table, MANY);
2216 EXFUN (Fmakehash, 1);
2192 EXFUN (Fcopy_hash_table, 1); 2217 EXFUN (Fcopy_hash_table, 1);
2193 EXFUN (Fhash_table_count, 1); 2218 EXFUN (Fhash_table_count, 1);
2194 EXFUN (Fhash_table_rehash_size, 1); 2219 EXFUN (Fhash_table_rehash_size, 1);
2195 EXFUN (Fhash_table_rehash_threshold, 1); 2220 EXFUN (Fhash_table_rehash_threshold, 1);
2196 EXFUN (Fhash_table_size, 1); 2221 EXFUN (Fhash_table_size, 1);
2253 extern Lisp_Object string_make_unibyte P_ ((Lisp_Object)); 2278 extern Lisp_Object string_make_unibyte P_ ((Lisp_Object));
2254 EXFUN (Fcopy_alist, 1); 2279 EXFUN (Fcopy_alist, 1);
2255 EXFUN (Fplist_get, 2); 2280 EXFUN (Fplist_get, 2);
2256 EXFUN (Fplist_put, 3); 2281 EXFUN (Fplist_put, 3);
2257 EXFUN (Fplist_member, 2); 2282 EXFUN (Fplist_member, 2);
2258 EXFUN (Fset_char_table_parent, 2);
2259 EXFUN (Fchar_table_extra_slot, 2);
2260 EXFUN (Fset_char_table_extra_slot, 3);
2261 EXFUN (Frassoc, 2); 2283 EXFUN (Frassoc, 2);
2262 EXFUN (Fstring_equal, 2); 2284 EXFUN (Fstring_equal, 2);
2263 EXFUN (Fcompare_strings, 7); 2285 EXFUN (Fcompare_strings, 7);
2264 EXFUN (Fstring_lessp, 2); 2286 EXFUN (Fstring_lessp, 2);
2265 extern int char_table_translate P_ ((Lisp_Object, int));
2266 extern void map_char_table P_ ((void (*) (Lisp_Object, Lisp_Object, Lisp_Object),
2267 Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, int,
2268 Lisp_Object *));
2269 extern Lisp_Object char_table_ref_and_index P_ ((Lisp_Object, int, int *));
2270 extern void syms_of_fns P_ ((void)); 2287 extern void syms_of_fns P_ ((void));
2271 2288
2272 /* Defined in floatfns.c */ 2289 /* Defined in floatfns.c */
2273 extern double extract_float P_ ((Lisp_Object)); 2290 extern double extract_float P_ ((Lisp_Object));
2274 EXFUN (Ffloat, 1); 2291 EXFUN (Ffloat, 1);
2287 extern int count_combining_after P_ ((const unsigned char *, int, int, int)); 2304 extern int count_combining_after P_ ((const unsigned char *, int, int, int));
2288 extern void insert P_ ((const unsigned char *, int)); 2305 extern void insert P_ ((const unsigned char *, int));
2289 extern void insert_and_inherit P_ ((const unsigned char *, int)); 2306 extern void insert_and_inherit P_ ((const unsigned char *, int));
2290 extern void insert_1 P_ ((const unsigned char *, int, int, int, int)); 2307 extern void insert_1 P_ ((const unsigned char *, int, int, int, int));
2291 extern void insert_1_both P_ ((const unsigned char *, int, int, int, int, int)); 2308 extern void insert_1_both P_ ((const unsigned char *, int, int, int, int, int));
2309 extern void insert_from_gap P_ ((int, int));
2292 extern void insert_from_string P_ ((Lisp_Object, int, int, int, int, int)); 2310 extern void insert_from_string P_ ((Lisp_Object, int, int, int, int, int));
2293 extern void insert_from_buffer P_ ((struct buffer *, int, int, int)); 2311 extern void insert_from_buffer P_ ((struct buffer *, int, int, int));
2294 extern void insert_char P_ ((int)); 2312 extern void insert_char P_ ((int));
2295 extern void insert_string P_ ((const char *)); 2313 extern void insert_string P_ ((const char *));
2296 extern void insert_before_markers P_ ((const unsigned char *, int)); 2314 extern void insert_before_markers P_ ((const unsigned char *, int));
2409 extern Lisp_Object pure_cons P_ ((Lisp_Object, Lisp_Object)); 2427 extern Lisp_Object pure_cons P_ ((Lisp_Object, Lisp_Object));
2410 extern Lisp_Object make_pure_vector P_ ((EMACS_INT)); 2428 extern Lisp_Object make_pure_vector P_ ((EMACS_INT));
2411 EXFUN (Fgarbage_collect, 0); 2429 EXFUN (Fgarbage_collect, 0);
2412 EXFUN (Fmake_byte_code, MANY); 2430 EXFUN (Fmake_byte_code, MANY);
2413 EXFUN (Fmake_bool_vector, 2); 2431 EXFUN (Fmake_bool_vector, 2);
2414 EXFUN (Fmake_char_table, 2);
2415 extern Lisp_Object make_sub_char_table P_ ((Lisp_Object));
2416 extern Lisp_Object Qchar_table_extra_slots; 2432 extern Lisp_Object Qchar_table_extra_slots;
2417 extern struct Lisp_Vector *allocate_vector P_ ((EMACS_INT)); 2433 extern struct Lisp_Vector *allocate_vector P_ ((EMACS_INT));
2418 extern struct Lisp_Vector *allocate_other_vector P_ ((EMACS_INT)); 2434 extern struct Lisp_Vector *allocate_other_vector P_ ((EMACS_INT));
2419 extern struct Lisp_Hash_Table *allocate_hash_table P_ ((void)); 2435 extern struct Lisp_Hash_Table *allocate_hash_table P_ ((void));
2420 extern struct window *allocate_window P_ ((void)); 2436 extern struct window *allocate_window P_ ((void));
2430 extern void free_cons P_ ((struct Lisp_Cons *)); 2446 extern void free_cons P_ ((struct Lisp_Cons *));
2431 extern void init_alloc_once P_ ((void)); 2447 extern void init_alloc_once P_ ((void));
2432 extern void init_alloc P_ ((void)); 2448 extern void init_alloc P_ ((void));
2433 extern void syms_of_alloc P_ ((void)); 2449 extern void syms_of_alloc P_ ((void));
2434 extern struct buffer * allocate_buffer P_ ((void)); 2450 extern struct buffer * allocate_buffer P_ ((void));
2451
2452 /* Defined in chartab.c */
2453 EXFUN (Fmake_char_table, 2);
2454 EXFUN (Fchar_table_parent, 1);
2455 EXFUN (Fset_char_table_parent, 2);
2456 EXFUN (Fchar_table_extra_slot, 2);
2457 EXFUN (Fset_char_table_extra_slot, 3);
2458 EXFUN (Fchar_table_range, 2);
2459 EXFUN (Fset_char_table_range, 3);
2460 EXFUN (Fset_char_table_default, 3);
2461 EXFUN (Foptimize_char_table, 1);
2462 EXFUN (Fmap_char_table, 2);
2463 extern Lisp_Object copy_char_table P_ ((Lisp_Object));
2464 extern Lisp_Object sub_char_table_ref P_ ((Lisp_Object, int));
2465 extern Lisp_Object char_table_ref P_ ((Lisp_Object, int));
2466 extern Lisp_Object char_table_ref_and_range P_ ((Lisp_Object, int,
2467 int *, int *));
2468 extern Lisp_Object char_table_set P_ ((Lisp_Object, int, Lisp_Object));
2469 extern Lisp_Object char_table_set_range P_ ((Lisp_Object, int, int,
2470 Lisp_Object));
2471 extern int char_table_translate P_ ((Lisp_Object, int));
2472 extern void map_char_table P_ ((void (*) (Lisp_Object, Lisp_Object,
2473 Lisp_Object),
2474 Lisp_Object, Lisp_Object, Lisp_Object));
2475 extern void syms_of_chartab P_ ((void));
2435 2476
2436 /* Defined in print.c */ 2477 /* Defined in print.c */
2437 extern Lisp_Object Vprin1_to_string_buffer; 2478 extern Lisp_Object Vprin1_to_string_buffer;
2438 extern void debug_print P_ ((Lisp_Object)); 2479 extern void debug_print P_ ((Lisp_Object));
2439 EXFUN (Fprin1, 2); 2480 EXFUN (Fprin1, 2);
2637 Lisp_Object, Lisp_Object, Lisp_Object)); 2678 Lisp_Object, Lisp_Object, Lisp_Object));
2638 extern int overlay_touches_p P_ ((int)); 2679 extern int overlay_touches_p P_ ((int));
2639 extern Lisp_Object Vbuffer_alist, Vinhibit_read_only; 2680 extern Lisp_Object Vbuffer_alist, Vinhibit_read_only;
2640 EXFUN (Fget_buffer, 1); 2681 EXFUN (Fget_buffer, 1);
2641 EXFUN (Fget_buffer_create, 1); 2682 EXFUN (Fget_buffer_create, 1);
2683 EXFUN (Fgenerate_new_buffer_name, 2);
2642 EXFUN (Fset_buffer, 1); 2684 EXFUN (Fset_buffer, 1);
2643 EXFUN (set_buffer_if_live, 1); 2685 EXFUN (set_buffer_if_live, 1);
2644 EXFUN (Fbarf_if_buffer_read_only, 0); 2686 EXFUN (Fbarf_if_buffer_read_only, 0);
2645 EXFUN (Fcurrent_buffer, 0); 2687 EXFUN (Fcurrent_buffer, 0);
2646 EXFUN (Fswitch_to_buffer, 2); 2688 EXFUN (Fswitch_to_buffer, 2);
2961 extern Lisp_Object Qfont, Qmouse_face; 3003 extern Lisp_Object Qfont, Qmouse_face;
2962 extern Lisp_Object Qinsert_in_front_hooks, Qinsert_behind_hooks; 3004 extern Lisp_Object Qinsert_in_front_hooks, Qinsert_behind_hooks;
2963 EXFUN (Fnext_single_property_change, 4); 3005 EXFUN (Fnext_single_property_change, 4);
2964 EXFUN (Fnext_single_char_property_change, 4); 3006 EXFUN (Fnext_single_char_property_change, 4);
2965 EXFUN (Fprevious_single_property_change, 4); 3007 EXFUN (Fprevious_single_property_change, 4);
3008 EXFUN (Fget_text_property, 3);
2966 EXFUN (Fput_text_property, 5); 3009 EXFUN (Fput_text_property, 5);
2967 EXFUN (Fprevious_char_property_change, 2); 3010 EXFUN (Fprevious_char_property_change, 2);
2968 EXFUN (Fnext_char_property_change, 2); 3011 EXFUN (Fnext_char_property_change, 2);
2969 extern void report_interval_modification P_ ((Lisp_Object, Lisp_Object)); 3012 extern void report_interval_modification P_ ((Lisp_Object, Lisp_Object));
2970 extern Lisp_Object next_single_char_property_change P_ ((Lisp_Object, 3013 extern Lisp_Object next_single_char_property_change P_ ((Lisp_Object,
3017 extern void syms_of_sound P_ ((void)); 3060 extern void syms_of_sound P_ ((void));
3018 extern void init_sound P_ ((void)); 3061 extern void init_sound P_ ((void));
3019 3062
3020 /* Defined in category.c */ 3063 /* Defined in category.c */
3021 extern void init_category_once P_ ((void)); 3064 extern void init_category_once P_ ((void));
3065 extern Lisp_Object char_category_set P_ ((int));
3022 extern void syms_of_category P_ ((void)); 3066 extern void syms_of_category P_ ((void));
3023 3067
3024 /* Defined in ccl.c */ 3068 /* Defined in ccl.c */
3025 extern void syms_of_ccl P_ ((void)); 3069 extern void syms_of_ccl P_ ((void));
3026 3070
3033 extern void fatal () NO_RETURN; 3077 extern void fatal () NO_RETURN;
3034 3078
3035 #ifdef HAVE_X_WINDOWS 3079 #ifdef HAVE_X_WINDOWS
3036 /* Defined in fontset.c */ 3080 /* Defined in fontset.c */
3037 extern void syms_of_fontset P_ ((void)); 3081 extern void syms_of_fontset P_ ((void));
3038 EXFUN (Fset_fontset_font, 4); 3082 EXFUN (Fset_fontset_font, 5);
3083 EXFUN (Fnew_fontset, 2);
3039 #endif 3084 #endif
3040 3085
3041 /* Defined in xfaces.c */ 3086 /* Defined in xfaces.c */
3042 extern void syms_of_xfaces P_ ((void)); 3087 extern void syms_of_xfaces P_ ((void));
3043 3088