*** empty log message ***
[bpt/emacs.git] / src / charset.c
index 2d5c3b7..4701db6 100644 (file)
@@ -49,10 +49,10 @@ Lisp_Object Qcharset, Qascii, Qeight_bit_control, Qeight_bit_graphic;
 Lisp_Object Qunknown;
 
 /* Declaration of special leading-codes.  */
-int leading_code_private_11;   /* for private DIMENSION1 of 1-column */
-int leading_code_private_12;   /* for private DIMENSION1 of 2-column */
-int leading_code_private_21;   /* for private DIMENSION2 of 1-column */
-int leading_code_private_22;   /* for private DIMENSION2 of 2-column */
+EMACS_INT leading_code_private_11; /* for private DIMENSION1 of 1-column */
+EMACS_INT leading_code_private_12; /* for private DIMENSION1 of 2-column */
+EMACS_INT leading_code_private_21; /* for private DIMENSION2 of 1-column */
+EMACS_INT leading_code_private_22; /* for private DIMENSION2 of 2-column */
 
 /* Declaration of special charsets.  The values are set by
    Fsetup_special_charsets.  */
@@ -98,7 +98,7 @@ unsigned char *_fetch_multibyte_char_p;
 int _fetch_multibyte_char_len;
 
 /* Offset to add to a non-ASCII value when inserting it.  */
-int nonascii_insert_offset;
+EMACS_INT nonascii_insert_offset;
 
 /* Translation table for converting non-ASCII unibyte characters
    to multibyte codes, or nil.  */
@@ -143,7 +143,10 @@ invalid_character (c)
       (charset) = (str)[1], (c1) = (str)[2] & 0x7F, (c2) = (str)[3] & 0x7F;  \
   } while (0)
 
-/* 1 if CHARSET, C1, and C2 compose a valid character, else 0.  */
+/* 1 if CHARSET, C1, and C2 compose a valid character, else 0.
+   Note that this intentionally allows invalid components, such
+   as 0xA0 0xA0, because there exist many files that contain
+   such invalid byte sequences, especially in EUC-GB. */
 #define CHAR_COMPONENTS_VALID_P(charset, c1, c2)       \
   ((charset) == CHARSET_ASCII                          \
    ? ((c1) >= 0 && (c1) <= 0x7F)                       \
@@ -597,11 +600,15 @@ get_charset_id (charset_symbol)
   Lisp_Object val;
   int charset;
 
-  return ((SYMBOLP (charset_symbol)
-          && (val = Fget (charset_symbol, Qcharset), VECTORP (val))
-          && (charset = XINT (XVECTOR (val)->contents[CHARSET_ID_IDX]),
-              CHARSET_VALID_P (charset)))
-         ? charset : -1);
+  /* This originally used a ?: operator, but reportedly the HP-UX
+     compiler version HP92453-01 A.10.32.22 miscompiles that.  */
+  if (SYMBOLP (charset_symbol)
+      && VECTORP (val = Fget (charset_symbol, Qcharset))
+      && CHARSET_VALID_P (charset =
+                         XINT (XVECTOR (val)->contents[CHARSET_ID_IDX])))
+    return charset;
+  else
+    return -1;
 }
 
 /* Return an identification number for a new private charset of
@@ -693,14 +700,14 @@ DESCRIPTION (string) is the description string of the charset.  */)
       || !STRINGP (vec[7])
       || !STRINGP (vec[8]))
     error ("Invalid info-vector argument for defining charset %s",
-          XSYMBOL (charset_symbol)->name->data);
+          XSTRING (SYMBOL_NAME (charset_symbol))->data);
 
   if (NILP (charset_id))
     {
       charset_id = get_new_private_charset_id (XINT (vec[0]), XINT (vec[2]));
       if (XINT (charset_id) == 0)
        error ("There's no room for a new private charset %s",
-              XSYMBOL (charset_symbol)->name->data);
+              XSTRING (SYMBOL_NAME (charset_symbol))->data);
     }
 
   update_charset_table (charset_id, vec[0], vec[1], vec[2], vec[3],
@@ -708,6 +715,7 @@ DESCRIPTION (string) is the description string of the charset.  */)
   Fput (charset_symbol, Qcharset, CHARSET_TABLE_ENTRY (XINT (charset_id)));
   CHARSET_SYMBOL (XINT (charset_id)) = charset_symbol;
   Vcharset_list = Fcons (charset_symbol, Vcharset_list);
+  Fupdate_coding_systems_internal ();
   return Qnil;
 }
 
@@ -771,7 +779,7 @@ CHARSET should be defined by `defined-charset' in advance.  */)
   if (XINT (final_char) < '0' || XFASTINT (final_char) > '~')
     error ("Invalid FINAL-CHAR %c, it should be `0'..`~'", XINT (chars));
   if ((charset = get_charset_id (charset_symbol)) < 0)
-    error ("Invalid charset %s", XSYMBOL (charset_symbol)->name->data);
+    error ("Invalid charset %s", XSTRING (SYMBOL_NAME (charset_symbol))->data);
 
   ISO_CHARSET_TABLE (dimension, chars, final_char) = charset;
   return Qnil;
@@ -1628,7 +1636,7 @@ str_as_unibyte (str, bytes)
 }
 
 \f
-DEFUN ("string", Fstring, Sstring, 1, MANY, 0,
+DEFUN ("string", Fstring, Sstring, 0, MANY, 0,
   doc: /* Concatenate all the argument characters and make the result a string.
 usage: (string &rest CHARACTERS)  */)
      (n, args)