diff src/process.c @ 88385:c60e206fcf58

Include "character.h" instead of "charset.h". (read_process_output): Adjusted for the new code-conversion API. (send_process): Likewise.
author Kenichi Handa <handa@m17n.org>
date Fri, 01 Mar 2002 01:45:23 +0000
parents 93254645e03b
children 0358964d3d98
line wrap: on
line diff
--- a/src/process.c	Fri Mar 01 01:45:03 2002 +0000
+++ b/src/process.c	Fri Mar 01 01:45:23 2002 +0000
@@ -98,7 +98,7 @@
 #include "lisp.h"
 #include "window.h"
 #include "buffer.h"
-#include "charset.h"
+#include "character.h"
 #include "coding.h"
 #include "process.h"
 #include "termhooks.h"
@@ -3011,17 +3011,17 @@
 	 save the match data in a special nonrecursive fashion.  */
       running_asynch_code = 1;
 
-      text = decode_coding_string (make_unibyte_string (chars, nbytes),
-				   coding, 0);
+      decode_coding_c_string (coding, chars, nbytes, Qt);
+      text = coding->dst_object;
       if (NILP (buffer_defaults.enable_multibyte_characters))
 	/* We had better return unibyte string.  */
 	text = string_make_unibyte (text);
 
-      Vlast_coding_system_used = coding->symbol;
+      Vlast_coding_system_used = CODING_ID_NAME (coding->id);
       /* A new coding system might be found.  */
-      if (!EQ (p->decode_coding_system, coding->symbol))
+      if (!EQ (p->decode_coding_system, Vlast_coding_system_used))
 	{
-	  p->decode_coding_system = coding->symbol;
+	  p->decode_coding_system = Vlast_coding_system_used;
 
 	  /* Don't call setup_coding_system for
 	     proc_decode_coding_system[channel] here.  It is done in
@@ -3037,8 +3037,8 @@
 	  if (NILP (p->encode_coding_system)
 	      && proc_encode_coding_system[XINT (p->outfd)])
 	    {
-	      p->encode_coding_system = coding->symbol;
-	      setup_coding_system (coding->symbol,
+	      p->encode_coding_system = Vlast_coding_system_used;
+	      setup_coding_system (p->encode_coding_system,
 				   proc_encode_coding_system[XINT (p->outfd)]);
 	    }
 	}
@@ -3128,19 +3128,19 @@
       if (! (BEGV <= PT && PT <= ZV))
 	Fwiden ();
 
-      text = decode_coding_string (make_unibyte_string (chars, nbytes),
-				   coding, 0);
-      Vlast_coding_system_used = coding->symbol;
+      decode_coding_c_string (coding, chars, nbytes, Qt);
+      text = coding->dst_object;
+      Vlast_coding_system_used = CODING_ID_NAME (coding->id);
       /* A new coding system might be found.  See the comment in the
 	 similar code in the previous `if' block.  */
-      if (!EQ (p->decode_coding_system, coding->symbol))
+      if (!EQ (p->decode_coding_system, Vlast_coding_system_used))
 	{
-	  p->decode_coding_system = coding->symbol;
+	  p->decode_coding_system = Vlast_coding_system_used;
 	  if (NILP (p->encode_coding_system)
 	      && proc_encode_coding_system[XINT (p->outfd)])
 	    {
-	      p->encode_coding_system = coding->symbol;
-	      setup_coding_system (coding->symbol,
+	      p->encode_coding_system = Vlast_coding_system_used;
+	      setup_coding_system (p->encode_coding_system,
 				   proc_encode_coding_system[XINT (p->outfd)]);
 	    }
 	}
@@ -3269,86 +3269,77 @@
 	   XSTRING (XPROCESS (proc)->name)->data);
 
   coding = proc_encode_coding_system[XINT (XPROCESS (proc)->outfd)];
-  Vlast_coding_system_used = coding->symbol;
+  Vlast_coding_system_used = CODING_ID_NAME (coding->id);
 
   if ((STRINGP (object) && STRING_MULTIBYTE (object))
       || (BUFFERP (object)
 	  && !NILP (XBUFFER (object)->enable_multibyte_characters))
       || EQ (object, Qt))
     {
-      if (!EQ (coding->symbol, XPROCESS (proc)->encode_coding_system))
+      if (!EQ (Vlast_coding_system_used,
+	       XPROCESS (proc)->encode_coding_system))
 	/* The coding system for encoding was changed to raw-text
 	   because we sent a unibyte text previously.  Now we are
 	   sending a multibyte text, thus we must encode it by the
 	   original coding system specified for the current
 	   process.  */
 	setup_coding_system (XPROCESS (proc)->encode_coding_system, coding);
-      /* src_multibyte should be set to 1 _after_ a call to
-	 setup_coding_system, since it resets src_multibyte to
-	 zero.  */
-      coding->src_multibyte = 1;
     }
   else
     {
       /* For sending a unibyte text, character code conversion should
 	 not take place but EOL conversion should.  So, setup raw-text
 	 or one of the subsidiary if we have not yet done it.  */
-      if (coding->type != coding_type_raw_text)
+      if (CODING_REQUIRE_ENCODING (coding))
 	{
 	  if (CODING_REQUIRE_FLUSHING (coding))
 	    {
 	      /* But, before changing the coding, we must flush out data.  */
 	      coding->mode |= CODING_MODE_LAST_BLOCK;
 	      send_process (proc, "", 0, Qt);
+	      coding->mode &= ~CODING_MODE_LAST_BLOCK;
 	    }
 	  coding->src_multibyte = 0;
-	  setup_raw_text_coding_system (coding);
+	  setup_coding_system (raw_text_coding_system
+			       (Vlast_coding_system_used),
+			       coding);
 	}
     }
   coding->dst_multibyte = 0;
 
   if (CODING_REQUIRE_ENCODING (coding))
     {
-      int require = encoding_buffer_size (coding, len);
-      int from_byte = -1, from = -1, to = -1;
-      unsigned char *temp_buf = NULL;
-
+      coding->dst_object = Qt;
       if (BUFFERP (object))
 	{
-	  from_byte = BUF_PTR_BYTE_POS (XBUFFER (object), buf);
-	  from = buf_bytepos_to_charpos (XBUFFER (object), from_byte);
-	  to = buf_bytepos_to_charpos (XBUFFER (object), from_byte + len);
+	  int from_byte, from, to;
+	  int save_pt, save_pt_byte;
+	  struct buffer *cur = current_buffer;
+
+	  set_buffer_internal (XBUFFER (object));
+	  save_pt = PT, save_pt_byte = PT_BYTE;
+
+	  from_byte = PTR_BYTE_POS (buf);
+	  from = BYTE_TO_CHAR (from_byte);
+	  to = BYTE_TO_CHAR (from_byte + len);
+	  TEMP_SET_PT_BOTH (from, from_byte);
+	  encode_coding_object (coding, object, from, from_byte,
+				to, from_byte + len, Qt);
+	  TEMP_SET_PT_BOTH (save_pt, save_pt_byte);
+	  set_buffer_internal (cur);
 	}
       else if (STRINGP (object))
 	{
-	  from_byte = buf - XSTRING (object)->data;
-	  from = string_byte_to_char (object, from_byte);
-	  to =  string_byte_to_char (object, from_byte + len);
-	}
-
-      if (coding->composing != COMPOSITION_DISABLED)
-	{
-	  if (from_byte >= 0)
-	    coding_save_composition (coding, from, to, object);
-	  else
-	    coding->composing = COMPOSITION_DISABLED;
+	  encode_coding_string (coding, object, 1);
 	}
-
-      if (STRING_BYTES (XSTRING (XPROCESS (proc)->encoding_buf)) < require)
-	XPROCESS (proc)->encoding_buf = make_uninit_string (require);
-
-      if (from_byte >= 0)
-	buf = (BUFFERP (object)
-	       ? BUF_BYTE_ADDRESS (XBUFFER (object), from_byte)
-	       : XSTRING (object)->data + from_byte);
-
-      object = XPROCESS (proc)->encoding_buf;
-      encode_coding (coding, (char *) buf, XSTRING (object)->data,
-		     len, STRING_BYTES (XSTRING (object)));
+      else
+	{
+	  coding->dst_object = make_unibyte_string (buf, len);
+	  coding->produced = len;
+	}
+
       len = coding->produced;
-      buf = XSTRING (object)->data;
-      if (temp_buf)
-	xfree (temp_buf);
+      buf = XSTRING (coding->dst_object)->data;
     }
 
 #ifdef VMS
@@ -4726,7 +4717,7 @@
 
 #include "lisp.h"
 #include "systime.h"
-#include "charset.h"
+#include "character.h"
 #include "coding.h"
 #include "termopts.h"
 #include "sysselect.h"