diff src/tooltalk.c @ 412:697ef44129c6 r21-2-14

Import from CVS: tag r21-2-14
author cvs
date Mon, 13 Aug 2007 11:20:41 +0200
parents a86b2b5e0111
children 41dbb7a9d5f2
line wrap: on
line diff
--- a/src/tooltalk.c	Mon Aug 13 11:19:22 2007 +0200
+++ b/src/tooltalk.c	Mon Aug 13 11:20:41 2007 +0200
@@ -22,7 +22,7 @@
 /* Synched up with: Not in FSF. */
 
 /* Written by John Rose <john.rose@eng.sun.com>.
-   Heavily modified and cleaned up by Ben Wing <ben@xemacs.org>. */
+   Heavily modified and cleaned up by Ben Wing <ben.wing@eng.sun.com>. */
 
 #include <config.h>
 #include "lisp.h"
@@ -151,9 +151,9 @@
 };
 
 static Lisp_Object
-mark_tooltalk_message (Lisp_Object obj)
+mark_tooltalk_message (Lisp_Object obj, void (*markobj) (Lisp_Object))
 {
-  mark_object (XTOOLTALK_MESSAGE (obj)->callback);
+  markobj (XTOOLTALK_MESSAGE (obj)->callback);
   return XTOOLTALK_MESSAGE (obj)->plist_sym;
 }
 
@@ -161,7 +161,7 @@
 print_tooltalk_message (Lisp_Object obj, Lisp_Object printcharfun,
 			int escapeflag)
 {
-  Lisp_Tooltalk_Message *p = XTOOLTALK_MESSAGE (obj);
+  struct Lisp_Tooltalk_Message *p = XTOOLTALK_MESSAGE (obj);
 
   char buf[200];
 
@@ -175,15 +175,16 @@
 
 DEFINE_LRECORD_IMPLEMENTATION ("tooltalk-message", tooltalk_message,
                                mark_tooltalk_message, print_tooltalk_message,
-                               0, 0, 0, 0,
-			       Lisp_Tooltalk_Message);
+                               0, 0, 0,
+			       struct Lisp_Tooltalk_Message);
 
 static Lisp_Object
 make_tooltalk_message (Tt_message m)
 {
   Lisp_Object val;
-  Lisp_Tooltalk_Message *msg =
-    alloc_lcrecord_type (Lisp_Tooltalk_Message, &lrecord_tooltalk_message);
+  struct Lisp_Tooltalk_Message *msg =
+    alloc_lcrecord_type (struct Lisp_Tooltalk_Message,
+			 &lrecord_tooltalk_message);
 
   msg->m = m;
   msg->callback = Qnil;
@@ -224,9 +225,9 @@
 };
 
 static Lisp_Object
-mark_tooltalk_pattern (Lisp_Object obj)
+mark_tooltalk_pattern (Lisp_Object obj, void (*markobj) (Lisp_Object))
 {
-  mark_object (XTOOLTALK_PATTERN (obj)->callback);
+  markobj (XTOOLTALK_PATTERN (obj)->callback);
   return XTOOLTALK_PATTERN (obj)->plist_sym;
 }
 
@@ -234,7 +235,7 @@
 print_tooltalk_pattern (Lisp_Object obj, Lisp_Object printcharfun,
 			int escapeflag)
 {
-  Lisp_Tooltalk_Pattern *p = XTOOLTALK_PATTERN (obj);
+  struct Lisp_Tooltalk_Pattern *p = XTOOLTALK_PATTERN (obj);
 
   char buf[200];
 
@@ -248,14 +249,15 @@
 
 DEFINE_LRECORD_IMPLEMENTATION ("tooltalk-pattern", tooltalk_pattern,
                                mark_tooltalk_pattern, print_tooltalk_pattern,
-                               0, 0, 0, 0,
-			       Lisp_Tooltalk_Pattern);
+                               0, 0, 0,
+			       struct Lisp_Tooltalk_Pattern);
 
 static Lisp_Object
 make_tooltalk_pattern (Tt_pattern p)
 {
-  Lisp_Tooltalk_Pattern *pat =
-    alloc_lcrecord_type (Lisp_Tooltalk_Pattern, &lrecord_tooltalk_pattern);
+  struct Lisp_Tooltalk_Pattern *pat =
+    alloc_lcrecord_type (struct Lisp_Tooltalk_Pattern,
+			 &lrecord_tooltalk_pattern);
   Lisp_Object val;
 
   pat->p = p;
@@ -500,7 +502,7 @@
 static Lisp_Object
 tt_build_string (char *s)
 {
-  return build_string (s ? s : "");
+  return build_string ((s) ? s : "");
 }
 
 static Lisp_Object
@@ -700,10 +702,8 @@
 {
   Tt_message m = unbox_tooltalk_message (message_);
   int n = 0;
-  Tt_status (*fun_str) (Tt_message, const char *) = 0;
 
   CHECK_SYMBOL (attribute);
-
   if (EQ (attribute, (Qtt_arg_bval))  ||
       EQ (attribute, (Qtt_arg_ival))  ||
       EQ (attribute, (Qtt_arg_val)))
@@ -715,7 +715,7 @@
   if (!VALID_TOOLTALK_MESSAGEP (m))
     return Qnil;
 
-  if (EQ (attribute, Qtt_address))
+  else if (EQ (attribute, Qtt_address))
     {
       CHECK_TOOLTALK_CONSTANT (value);
       tt_message_address_set (m, (Tt_address) tooltalk_constant_value (value));
@@ -731,37 +731,73 @@
       tt_message_disposition_set (m, ((Tt_disposition)
 				      tooltalk_constant_value (value)));
     }
+  else if (EQ (attribute, Qtt_file))
+    {
+      CONST char *value_ext;
+      CHECK_STRING (value);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
+      tt_message_file_set (m, value_ext);
+    }
+  else if (EQ (attribute, Qtt_handler_ptype))
+    {
+      CONST char *value_ext;
+      CHECK_STRING (value);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
+      tt_message_handler_ptype_set (m, value_ext);
+    }
+  else if (EQ (attribute, Qtt_handler))
+    {
+      CONST char *value_ext;
+      CHECK_STRING (value);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
+      tt_message_handler_set (m, value_ext);
+    }
+  else if (EQ (attribute, Qtt_object))
+    {
+      CONST char *value_ext;
+      CHECK_STRING (value);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
+      tt_message_object_set (m, value_ext);
+    }
+  else if (EQ (attribute, Qtt_op))
+    {
+      CONST char *value_ext;
+      CHECK_STRING (value);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
+      tt_message_op_set (m, value_ext);
+    }
+  else if (EQ (attribute, Qtt_otype))
+    {
+      CONST char *value_ext;
+      CHECK_STRING (value);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
+      tt_message_otype_set (m, value_ext);
+    }
   else if (EQ (attribute, Qtt_scope))
     {
       CHECK_TOOLTALK_CONSTANT (value);
       tt_message_scope_set (m, (Tt_scope) tooltalk_constant_value (value));
     }
-  else if (EQ (attribute, Qtt_file))
-    fun_str = tt_message_file_set;
-  else if (EQ (attribute, Qtt_handler_ptype))
-    fun_str = tt_message_handler_ptype_set;
-  else if (EQ (attribute, Qtt_handler))
-    fun_str = tt_message_handler_set;
-  else if (EQ (attribute, Qtt_object))
-    fun_str = tt_message_object_set;
-  else if (EQ (attribute, Qtt_op))
-    fun_str = tt_message_op_set;
-  else if (EQ (attribute, Qtt_otype))
-    fun_str = tt_message_otype_set;
   else if (EQ (attribute, Qtt_sender_ptype))
-    fun_str = tt_message_sender_ptype_set;
+    {
+      CONST char *value_ext;
+      CHECK_STRING (value);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
+      tt_message_sender_ptype_set (m, value_ext);
+    }
   else if (EQ (attribute, Qtt_session))
-    fun_str = tt_message_session_set;
-  else if (EQ (attribute, Qtt_status_string))
-    fun_str = tt_message_status_string_set;
+    {
+      CONST char *value_ext;
+      CHECK_STRING (value);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
+      tt_message_session_set (m, value_ext);
+    }
   else if (EQ (attribute, Qtt_arg_bval))
     {
       Extbyte *value_ext;
       Extcount value_ext_len;
       CHECK_STRING (value);
-      TO_EXTERNAL_FORMAT (LISP_STRING, value,
-			  ALLOCA, (value_ext, value_ext_len),
-			  Qnative);
+      GET_STRING_OS_DATA_ALLOCA (value, value_ext, value_ext_len);
       tt_message_arg_bval_set (m, n, value_ext, value_ext_len);
     }
   else if (EQ (attribute, Qtt_arg_ival))
@@ -771,9 +807,9 @@
     }
   else if (EQ (attribute, Qtt_arg_val))
     {
-      const char *value_ext;
+      CONST char *value_ext;
       CHECK_STRING (value);
-      TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
       tt_message_arg_val_set (m, n, value_ext);
     }
   else if (EQ (attribute, Qtt_status))
@@ -781,6 +817,13 @@
       CHECK_INT (value);
       tt_message_status_set (m, XINT (value));
     }
+  else if (EQ (attribute, Qtt_status_string))
+    {
+      CONST char *value_ext;
+      CHECK_STRING (value);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
+      tt_message_status_string_set (m, value_ext);
+    }
   else if (EQ (attribute, Qtt_callback))
     {
       CHECK_SYMBOL (value);
@@ -793,15 +836,6 @@
   else
     signal_simple_error ("Invalid value for `set-tooltalk-message-attribute'",
 			 attribute);
-
-  if (fun_str)
-    {
-      const char *value_ext;
-      CHECK_STRING (value);
-      TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
-      (*fun_str) (m, value_ext);
-    }
-
   return Qnil;
 }
 
@@ -912,15 +946,15 @@
   if (!VALID_TOOLTALK_MESSAGEP (m))
     return Qnil;
   {
-    const char *vtype_ext;
+    CONST char *vtype_ext;
 
-    TO_EXTERNAL_FORMAT (LISP_STRING, vtype, C_STRING_ALLOCA, vtype_ext, Qnative);
+    GET_C_STRING_OS_DATA_ALLOCA (vtype, vtype_ext);
     if (NILP (value))
       tt_message_arg_add (m, n, vtype_ext, NULL);
     else if (STRINGP (value))
       {
-	const char *value_ext;
-	TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
+	CONST char *value_ext;
+	GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
 	tt_message_arg_add (m, n, vtype_ext, value_ext);
       }
     else if (INTP (value))
@@ -1023,30 +1057,30 @@
     }
   else if (EQ (attribute, Qtt_file))
     {
-      const char *value_ext;
+      CONST char *value_ext;
       CHECK_STRING (value);
-      TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
       tt_pattern_file_add (p, value_ext);
     }
   else if (EQ (attribute, Qtt_object))
     {
-      const char *value_ext;
+      CONST char *value_ext;
       CHECK_STRING (value);
-      TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
       tt_pattern_object_add (p, value_ext);
     }
   else if (EQ (attribute, Qtt_op))
     {
-      const char *value_ext;
+      CONST char *value_ext;
       CHECK_STRING (value);
-      TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
       tt_pattern_op_add (p, value_ext);
     }
   else if (EQ (attribute, Qtt_otype))
     {
-      const char *value_ext;
+      CONST char *value_ext;
       CHECK_STRING (value);
-      TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
       tt_pattern_otype_add (p, value_ext);
     }
   else if (EQ (attribute, Qtt_scope))
@@ -1056,23 +1090,23 @@
     }
   else if (EQ (attribute, Qtt_sender))
     {
-      const char *value_ext;
+      CONST char *value_ext;
       CHECK_STRING (value);
-      TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
       tt_pattern_sender_add (p, value_ext);
     }
   else if (EQ (attribute, Qtt_sender_ptype))
     {
-      const char *value_ext;
+      CONST char *value_ext;
       CHECK_STRING (value);
-      TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
       tt_pattern_sender_ptype_add (p, value_ext);
     }
   else if (EQ (attribute, Qtt_session))
     {
-      const char *value_ext;
+      CONST char *value_ext;
       CHECK_STRING (value);
-      TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
+      GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
       tt_pattern_session_add (p, value_ext);
     }
   else if (EQ (attribute, Qtt_state))
@@ -1111,15 +1145,15 @@
     return Qnil;
 
   {
-    const char *vtype_ext;
+    CONST char *vtype_ext;
 
-    TO_EXTERNAL_FORMAT (LISP_STRING, vtype, C_STRING_ALLOCA, vtype_ext, Qnative);
+    GET_C_STRING_OS_DATA_ALLOCA (vtype, vtype_ext);
     if (NILP (value))
       tt_pattern_arg_add (p, n, vtype_ext, NULL);
     else if (STRINGP (value))
       {
-	const char *value_ext;
-	TO_EXTERNAL_FORMAT (LISP_STRING, value, C_STRING_ALLOCA, value_ext, Qnative);
+	CONST char *value_ext;
+	GET_C_STRING_OS_DATA_ALLOCA (value, value_ext);
 	tt_pattern_arg_add (p, n, vtype_ext, value_ext);
       }
     else if (INTP (value))
@@ -1222,28 +1256,7 @@
   Lisp_Object lp;
   Lisp_Object fil;
 
-
-  /* tt_open() messes with our signal handler flags (at least when no
-     ttsessions is running on the machine), therefore we save the
-     actions and restore them after the call */
-#ifdef HAVE_SIGPROCMASK
-  {
-    struct sigaction ActSIGQUIT;
-    struct sigaction ActSIGINT;
-    struct sigaction ActSIGCHLD;
-    sigaction (SIGQUIT, NULL, &ActSIGQUIT);
-    sigaction (SIGINT, NULL, &ActSIGINT);
-    sigaction (SIGCHLD, NULL, &ActSIGCHLD);
-#endif
   retval = tt_open ();
-#ifdef HAVE_SIGPROCMASK
-    sigaction (SIGQUIT, &ActSIGQUIT, NULL);
-    sigaction (SIGINT, &ActSIGINT, NULL);
-    sigaction (SIGCHLD, &ActSIGCHLD, NULL);
-  }
-#endif
-
-
   if (tt_ptr_error (retval) != TT_OK)
     return;
 
@@ -1301,9 +1314,6 @@
 void
 syms_of_tooltalk (void)
 {
-  INIT_LRECORD_IMPLEMENTATION (tooltalk_message);
-  INIT_LRECORD_IMPLEMENTATION (tooltalk_pattern);
-
   defsymbol (&Qtooltalk_messagep, "tooltalk-message-p");
   DEFSUBR (Ftooltalk_message_p);
   defsymbol (&Qtooltalk_patternp, "tooltalk-pattern-p");