Support XEmacs 21.1 & APEL 10.2.
[elisp/liece.git] / lisp / liece-nick.el
index 570c47d..bcf82c3 100644 (file)
   :type 'function
   :group 'liece-vars)
 
-;;; @ internal access methods
-;;;
-(defmacro liece-nick-get-joined-channels (nick)
+;;; Nick status functions
+(defun liece-nick-get-joined-channels (nick)
   "Return channels as list NICK is joined."
-  `(get (intern ,nick liece-obarray) 'chnl))
+  (get (intern (or nick liece-real-nickname) liece-obarray) 'join))
 
-(defmacro liece-nick-get-user-at-host (nick)
+(defun liece-nick-get-user-at-host (nick)
   "Return user-at-host as string NICK is joined."
-  `(get (intern ,nick liece-obarray) 'user-at-host))
+  (get (intern (or nick liece-real-nickname) liece-obarray) 'user-at-host))
 
-(defmacro liece-nick-set-user-at-host (nick uah)
+(defun liece-nick-set-user-at-host (nick user-at-host)
   "Set user at host as string NICK is joined."
-  `(put (intern ,nick liece-obarray) 'user-at-host ,uah))
-
-(defmacro liece-nick-mark-as-apart (nick)
-  "Mark NICK is temporary apart."
-  `(put (intern ,nick liece-obarray) 'part t))
+  (put (intern (or nick liece-real-nickname) liece-obarray)
+       'user-at-host user-at-host))
 
-(defmacro liece-nick-unmark-as-apart (nick)
+(defun liece-nick-mark-as-part (part &optional nick)
   "Mark NICK is temporary apart."
-  `(put (intern ,nick liece-obarray) 'part nil))
+  (put (intern (or nick liece-real-nickname) liece-obarray) 'part part))
 
-(defmacro liece-nick-get-modes (nick)
+(defun liece-nick-get-modes (&optional nick)
   "Return modes as string NICK is joined."
-  `(get (intern ,nick liece-obarray) 'mode))
-
-(defmacro liece-nick-add-mode (mode &optional nick)
-  "Add MODE as char to NICK."
-  `(let* ((n (intern ,nick liece-obarray))
-         (modes (string-to-char-list (or (get n 'mode) ""))))
-     (put n 'mode (mapconcat #'char-to-string
-                            (or (memq ,mode modes)
-                                (cons ,mode modes)) ""))))
-
-(defmacro liece-nick-remove-mode (mode &optional nick)
-  "Remove MODE as char to NICK."
-  `(let* ((n (intern ,nick liece-obarray))
-         (modes (string-to-char-list (or (get n 'mode) ""))))
-     (delq ,mode modes)
-     (put n 'mode (mapconcat #'char-to-string modes ""))))
-
-(defmacro liece-nick-set-mode (val mode &optional nick)
-  "Set MODE as char to CHNL."
-  `(if ,val
-       (liece-nick-add-mode ,mode ,nick)
-     (liece-nick-remove-mode ,mode ,nick)))
+  (get (intern (or nick liece-real-nickname) liece-obarray) 'mode))
+
+(defun liece-nick-add-mode (mode &optional nick)
+  "Add MODE as char to NICK.
+MODE is a string splitted into characters one by one."
+  (let ((modes
+        (liece-string-to-list
+         (or (liece-nick-get-modes nick) ""))))
+    (or (memq mode modes)
+       (push mode modes))
+    (put (intern (or nick liece-real-nickname) liece-obarray)
+        'mode (mapconcat #'char-to-string modes ""))))
+
+(defun liece-nick-remove-mode (mode &optional nick)
+  "Remove MODE from NICK.
+MODE is a string splitted into characters one by one."
+  (let ((modes
+        (liece-string-to-list
+         (or (liece-nick-get-modes nick) ""))))
+    (delq mode modes)
+    (put (intern (or nick liece-real-nickname) liece-obarray)
+        'mode (mapconcat #'char-to-string modes ""))))
+
+(defun liece-nick-set-mode (nick mode toggle)
+  "Add or remove channel MODE of NICK.
+MODE is a string splitted into characters one by one.
+If FLAG is non-nil, given modes are added to the user.
+Otherwise they are removed from the user."
+  (if toggle
+      (liece-nick-add-mode mode nick)
+     (liece-nick-remove-mode mode nick)))
 
 (defmacro liece-nick-strip (nick)
   `(if (and ,nick (memq (aref ,nick 0) '(?@ ?+ ? )))
        (liece-channel-set-operator ,chnl user t))
       ((char-equal flag ?+)
        (liece-channel-set-voice ,chnl user t)))
-     (or (string-list-member-ignore-case ,chnl (get u 'chnl))
-        (put u 'chnl (cons ,chnl (get u 'chnl))))
+     (or (string-list-member-ignore-case ,chnl (get u 'join))
+        (put u 'join (cons ,chnl (get u 'join))))
      (or (string-list-member-ignore-case user (get c 'nick))
         (put c 'nick (cons user (get c 'nick))))))
                
         (c (intern ,chnl liece-obarray)))
      (liece-channel-set-operator ,chnl ,user nil)
      (liece-channel-set-voice ,chnl ,user nil)
-     (put u 'chnl (string-list-remove-ignore-case ,chnl (get u 'chnl)))
+     (put u 'join (string-list-remove-ignore-case ,chnl (get u 'join)))
      (put c 'nick (string-list-remove-ignore-case ,user (get c 'nick)))))
 
 ;;;###liece-autoload
 ;;;###liece-autoload
 (defun liece-nick-change (old new)
   (let* ((old (liece-nick-strip old)) (new (liece-nick-strip new))
-        (chnls (get (intern old liece-obarray) 'chnl)) chnl nbuf)
+        (chnls (get (intern old liece-obarray) 'join)) chnl nbuf)
     (liece-change-nick-of old new)
     (if new
-       (put (intern new liece-obarray) 'chnl chnls))
+       (put (intern new liece-obarray) 'join chnls))
     (unintern old liece-obarray)
     (dolist (chnl chnls)
       (if (null new)