XEmacs 21.2.18 "Toshima".
[chise/xemacs-chise.git.1] / src / tooltalk.c
index 260ab20..3f24b2e 100644 (file)
@@ -153,7 +153,7 @@ struct Lisp_Tooltalk_Message
 static Lisp_Object
 mark_tooltalk_message (Lisp_Object obj, void (*markobj) (Lisp_Object))
 {
-  (markobj) (XTOOLTALK_MESSAGE (obj)->callback);
+  markobj (XTOOLTALK_MESSAGE (obj)->callback);
   return XTOOLTALK_MESSAGE (obj)->plist_sym;
 }
 
@@ -169,13 +169,13 @@ print_tooltalk_message (Lisp_Object obj, Lisp_Object printcharfun,
     error ("printing unreadable object #<tooltalk_message 0x%x>",
           p->header.uid);
 
-  sprintf (buf, "#<tooltalk_message id:%p 0x%x>", p->m, p->header.uid);
+  sprintf (buf, "#<tooltalk_message id:0x%lx 0x%x>", (long) (p->m), p->header.uid);
   write_c_string (buf, printcharfun);
 }
 
 DEFINE_LRECORD_IMPLEMENTATION ("tooltalk-message", tooltalk_message,
                                mark_tooltalk_message, print_tooltalk_message,
-                               0, 0, 0,
+                               0, 0, 0, 0,
                               struct Lisp_Tooltalk_Message);
 \f
 static Lisp_Object
@@ -184,7 +184,7 @@ make_tooltalk_message (Tt_message m)
   Lisp_Object val;
   struct Lisp_Tooltalk_Message *msg =
     alloc_lcrecord_type (struct Lisp_Tooltalk_Message,
-                        lrecord_tooltalk_message);
+                        &lrecord_tooltalk_message);
 
   msg->m = m;
   msg->callback = Qnil;
@@ -227,7 +227,7 @@ struct Lisp_Tooltalk_Pattern
 static Lisp_Object
 mark_tooltalk_pattern (Lisp_Object obj, void (*markobj) (Lisp_Object))
 {
-  (markobj) (XTOOLTALK_PATTERN (obj)->callback);
+  markobj (XTOOLTALK_PATTERN (obj)->callback);
   return XTOOLTALK_PATTERN (obj)->plist_sym;
 }
 
@@ -243,13 +243,13 @@ print_tooltalk_pattern (Lisp_Object obj, Lisp_Object printcharfun,
     error ("printing unreadable object #<tooltalk_pattern 0x%x>",
           p->header.uid);
 
-  sprintf (buf, "#<tooltalk_pattern id:%p 0x%x>", p->p, p->header.uid);
+  sprintf (buf, "#<tooltalk_pattern id:0x%lx 0x%x>", (long) (p->p), p->header.uid);
   write_c_string (buf, printcharfun);
 }
 
 DEFINE_LRECORD_IMPLEMENTATION ("tooltalk-pattern", tooltalk_pattern,
                                mark_tooltalk_pattern, print_tooltalk_pattern,
-                               0, 0, 0,
+                               0, 0, 0, 0,
                               struct Lisp_Tooltalk_Pattern);
 \f
 static Lisp_Object
@@ -257,7 +257,7 @@ make_tooltalk_pattern (Tt_pattern p)
 {
   struct Lisp_Tooltalk_Pattern *pat =
     alloc_lcrecord_type (struct Lisp_Tooltalk_Pattern,
-                        lrecord_tooltalk_pattern);
+                        &lrecord_tooltalk_pattern);
   Lisp_Object val;
 
   pat->p = p;
@@ -673,7 +673,7 @@ value returned by 'arg_bval like a string is fine.
                           (XTOOLTALK_MESSAGE (message_)->plist_sym));
 
   else
-    signal_simple_error ("invalid value for `get-tooltalk-message-attribute'",
+    signal_simple_error ("Invalid value for `get-tooltalk-message-attribute'",
                         attribute);
 
   return Qnil;
@@ -834,7 +834,7 @@ New arguments can be added to a message with add-tooltalk-message-arg.
       return Fput (XTOOLTALK_MESSAGE (message_)->plist_sym, argn, value);
     }
   else
-    signal_simple_error ("invalid value for `set-tooltalk-message-attribute'",
+    signal_simple_error ("Invalid value for `set-tooltalk-message-attribute'",
                         attribute);
   return Qnil;
 }
@@ -1256,7 +1256,28 @@ init_tooltalk (void)
   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;
 
@@ -1474,8 +1495,8 @@ Unprocessed messages are messages that didn't match any patterns.
 
   staticpro (&Vtooltalk_message_gcpro);
   staticpro (&Vtooltalk_pattern_gcpro);
-  Vtooltalk_message_gcpro = make_lisp_hashtable (10, HASHTABLE_NONWEAK,
-                                                HASHTABLE_EQ);
-  Vtooltalk_pattern_gcpro = make_lisp_hashtable (10, HASHTABLE_NONWEAK,
-                                                HASHTABLE_EQ);
+  Vtooltalk_message_gcpro =
+    make_lisp_hash_table (10, HASH_TABLE_NON_WEAK, HASH_TABLE_EQ);
+  Vtooltalk_pattern_gcpro =
+    make_lisp_hash_table (10, HASH_TABLE_NON_WEAK, HASH_TABLE_EQ);
 }