diff src/mule-charset.c @ 442:abe6d1db359e r21-2-36

Import from CVS: tag r21-2-36
author cvs
date Mon, 13 Aug 2007 11:35:02 +0200
parents 8de8e3f6228a
children 576fb035e263
line wrap: on
line diff
--- a/src/mule-charset.c	Mon Aug 13 11:33:40 2007 +0200
+++ b/src/mule-charset.c	Mon Aug 13 11:35:02 2007 +0200
@@ -150,9 +150,6 @@
 
 Lisp_Object Vcharset_hash_table;
 
-static Bufbyte next_allocated_1_byte_leading_byte;
-static Bufbyte next_allocated_2_byte_leading_byte;
-
 /* Composite characters are characters constructed by overstriking two
    or more regular characters.
 
@@ -220,7 +217,7 @@
    Use the macro charptr_emchar() instead. */
 
 Emchar
-non_ascii_charptr_emchar (CONST Bufbyte *str)
+non_ascii_charptr_emchar (const Bufbyte *str)
 {
   Bufbyte i0 = *str, i1, i2 = 0;
   Lisp_Object charset;
@@ -330,7 +327,7 @@
    charptr_copy_char() instead. */
 
 Bytecount
-non_ascii_charptr_copy_char (CONST Bufbyte *ptr, Bufbyte *str)
+non_ascii_charptr_copy_char (const Bufbyte *ptr, Bufbyte *str)
 {
   Bufbyte *strptr = str;
   *strptr = *ptr++;
@@ -529,17 +526,17 @@
 
   if (dimension == 1)
     {
-      if (next_allocated_1_byte_leading_byte > MAX_LEADING_BYTE_PRIVATE_1)
+      if (chlook->next_allocated_1_byte_leading_byte > MAX_LEADING_BYTE_PRIVATE_1)
 	lb = 0;
       else
-	lb = next_allocated_1_byte_leading_byte++;
+	lb = chlook->next_allocated_1_byte_leading_byte++;
     }
   else
     {
-      if (next_allocated_2_byte_leading_byte > MAX_LEADING_BYTE_PRIVATE_2)
+      if (chlook->next_allocated_2_byte_leading_byte > MAX_LEADING_BYTE_PRIVATE_2)
 	lb = 0;
       else
-	lb = next_allocated_2_byte_leading_byte++;
+	lb = chlook->next_allocated_2_byte_leading_byte++;
     }
 
   if (!lb)
@@ -693,7 +690,6 @@
   int type;
   Lisp_Object registry = Qnil;
   Lisp_Object charset;
-  Lisp_Object rest, keyword, value;
   Lisp_Object ccl_program = Qnil;
   Lisp_Object short_name = Qnil, long_name = Qnil;
 
@@ -705,85 +701,87 @@
   if (!NILP (charset))
     signal_simple_error ("Cannot redefine existing charset", name);
 
-  EXTERNAL_PROPERTY_LIST_LOOP (rest, keyword, value, props)
-    {
-      if (EQ (keyword, Qshort_name))
-	{
-	  CHECK_STRING (value);
-	  short_name = value;
-	}
+  {
+    EXTERNAL_PROPERTY_LIST_LOOP_3 (keyword, value, props)
+      {
+	if (EQ (keyword, Qshort_name))
+	  {
+	    CHECK_STRING (value);
+	    short_name = value;
+	  }
 
-      if (EQ (keyword, Qlong_name))
-	{
-	  CHECK_STRING (value);
-	  long_name = value;
-	}
+	if (EQ (keyword, Qlong_name))
+	  {
+	    CHECK_STRING (value);
+	    long_name = value;
+	  }
 
-      else if (EQ (keyword, Qdimension))
-	{
-	  CHECK_INT (value);
-	  dimension = XINT (value);
-	  if (dimension < 1 || dimension > 2)
-	    signal_simple_error ("Invalid value for 'dimension", value);
-	}
+	else if (EQ (keyword, Qdimension))
+	  {
+	    CHECK_INT (value);
+	    dimension = XINT (value);
+	    if (dimension < 1 || dimension > 2)
+	      signal_simple_error ("Invalid value for 'dimension", value);
+	  }
 
-      else if (EQ (keyword, Qchars))
-	{
-	  CHECK_INT (value);
-	  chars = XINT (value);
-	  if (chars != 94 && chars != 96)
-	    signal_simple_error ("Invalid value for 'chars", value);
-	}
+	else if (EQ (keyword, Qchars))
+	  {
+	    CHECK_INT (value);
+	    chars = XINT (value);
+	    if (chars != 94 && chars != 96)
+	      signal_simple_error ("Invalid value for 'chars", value);
+	  }
 
-      else if (EQ (keyword, Qcolumns))
-	{
-	  CHECK_INT (value);
-	  columns = XINT (value);
-	  if (columns != 1 && columns != 2)
-	    signal_simple_error ("Invalid value for 'columns", value);
-	}
+	else if (EQ (keyword, Qcolumns))
+	  {
+	    CHECK_INT (value);
+	    columns = XINT (value);
+	    if (columns != 1 && columns != 2)
+	      signal_simple_error ("Invalid value for 'columns", value);
+	  }
 
-      else if (EQ (keyword, Qgraphic))
-	{
-	  CHECK_INT (value);
-	  graphic = XINT (value);
-	  if (graphic < 0 || graphic > 1)
-	    signal_simple_error ("Invalid value for 'graphic", value);
-	}
+	else if (EQ (keyword, Qgraphic))
+	  {
+	    CHECK_INT (value);
+	    graphic = XINT (value);
+	    if (graphic < 0 || graphic > 1)
+	      signal_simple_error ("Invalid value for 'graphic", value);
+	  }
 
-      else if (EQ (keyword, Qregistry))
-	{
-	  CHECK_STRING (value);
-	  registry = value;
-	}
+	else if (EQ (keyword, Qregistry))
+	  {
+	    CHECK_STRING (value);
+	    registry = value;
+	  }
 
-      else if (EQ (keyword, Qdirection))
-	{
-	  if (EQ (value, Ql2r))
-	    direction = CHARSET_LEFT_TO_RIGHT;
-	  else if (EQ (value, Qr2l))
-	    direction = CHARSET_RIGHT_TO_LEFT;
-	  else
-	    signal_simple_error ("Invalid value for 'direction", value);
-	}
+	else if (EQ (keyword, Qdirection))
+	  {
+	    if (EQ (value, Ql2r))
+	      direction = CHARSET_LEFT_TO_RIGHT;
+	    else if (EQ (value, Qr2l))
+	      direction = CHARSET_RIGHT_TO_LEFT;
+	    else
+	      signal_simple_error ("Invalid value for 'direction", value);
+	  }
 
-      else if (EQ (keyword, Qfinal))
-	{
-	  CHECK_CHAR_COERCE_INT (value);
-	  final = XCHAR (value);
-	  if (final < '0' || final > '~')
-	    signal_simple_error ("Invalid value for 'final", value);
-	}
+	else if (EQ (keyword, Qfinal))
+	  {
+	    CHECK_CHAR_COERCE_INT (value);
+	    final = XCHAR (value);
+	    if (final < '0' || final > '~')
+	      signal_simple_error ("Invalid value for 'final", value);
+	  }
 
-      else if (EQ (keyword, Qccl_program))
-	{
-	  CHECK_VECTOR (value);
-	  ccl_program = value;
-	}
+	else if (EQ (keyword, Qccl_program))
+	  {
+	    CHECK_VECTOR (value);
+	    ccl_program = value;
+	  }
 
-      else
-	signal_simple_error ("Unrecognized property", keyword);
-    }
+	else
+	  signal_simple_error ("Unrecognized property", keyword);
+      }
+  }
 
   if (!final)
     error ("'final must be specified");
@@ -1093,7 +1091,7 @@
 
   CHECK_INT (arg1);
   /* It is useful (and safe, according to Olivier Galibert) to strip
-     the 8th bit off ARG1 and ARG2 becaue it allows programmers to
+     the 8th bit off ARG1 and ARG2 because it allows programmers to
      write (make-char 'latin-iso8859-2 CODE) where code is the actual
      Latin 2 code of the character.  */
   a1 = XINT (arg1) & 0x7f;
@@ -1259,6 +1257,8 @@
 void
 syms_of_mule_charset (void)
 {
+  INIT_LRECORD_IMPLEMENTATION (charset);
+
   DEFSUBR (Fcharsetp);
   DEFSUBR (Ffind_charset);
   DEFSUBR (Fget_charset);
@@ -1346,8 +1346,8 @@
       for (k = 0; k < countof (chlook->charset_by_attributes[0][0]); k++)
 	chlook->charset_by_attributes[i][j][k] = Qnil;
 
-  next_allocated_1_byte_leading_byte = MIN_LEADING_BYTE_PRIVATE_1;
-  next_allocated_2_byte_leading_byte = MIN_LEADING_BYTE_PRIVATE_2;
+  chlook->next_allocated_1_byte_leading_byte = MIN_LEADING_BYTE_PRIVATE_1;
+  chlook->next_allocated_2_byte_leading_byte = MIN_LEADING_BYTE_PRIVATE_2;
 }
 
 void