980314 version
[elisp/egg.git] / egg / sj3.el
index 6f059a7..0342dce 100644 (file)
           sj3-decide-candidate
       sj3-change-bunsetsu-length
     sj3-end-conversion
+    nil
 
     sj3-fini
  ])
 
-(defconst sj3-server-port 3000 "Port number of SJ3 server")
+(defvar sj3-server-port 3000 "Port number of SJ3 server")
 (defvar sj3-stdy-size 0 "STDYSIZE of SJ3 server")
 (defvar sj3-hostname "localhost"
   "Hostname of SJ3 server")
 
-(defun sj3-open (hostname)
+(defvar sj3-open-message)
+
+(defun sj3-open (hostname-list)
   "Establish the connection to SJ3 server.  Return process object."
   (let* ((buf (generate-new-buffer " *SJ3*"))
-        (proc (open-network-stream "SJ3" buf hostname sj3-server-port))
-        result)
-    (process-kill-without-query proc)
-    (set-process-coding-system proc 'no-conversion 'no-conversion)
-    (set-marker-insertion-type (process-mark proc) t)
+        (msg-form "SJ3: connecting to sj3serv at %s...")
+        hostname proc result msg)
     (save-excursion
       (set-buffer buf)
       (erase-buffer)
       (buffer-disable-undo)
       (setq enable-multibyte-characters nil))
-    ;; Initialize dictionaries
-    (setq sj3-sys-dict-list nil)
-    (setq sj3-user-dict-list nil)
-    (setq result (sj3rpc-open proc (system-name) (user-login-name)))
-    (if (< result 0)
-       (let ((msg (sj3rpc-get-error-message (- result))))
-         (delete-process proc)
-         (kill-buffer buf)
-         (error "Can't open SJ3 session (%s): %s" hostname msg)))
-    (setq result (sj3rpc-get-stdy-size proc))
-    (if (< result 0)
-       (let ((msg (sj3rpc-get-error-message (- result))))
-         (delete-process proc)
-         (kill-buffer buf)
-         (error "Can't get SJ3 STDYSIZE: %s"msg)))
-    (setq sj3-stdy-size result)
-    proc))
+    (cond
+     ((null hostname-list)
+      (setq hostname-list '("localhost")))
+     ((null (listp hostname-list))
+      (setq hostname-list (list hostname-list))))
+    (while (and hostname-list (null proc))
+      (setq hostname (car hostname-list)
+           hostname-list (cdr hostname-list))
+      (message msg-form hostname)
+      (sit-for 0)
+      (condition-case result
+         (setq proc (open-network-stream "SJ3" buf hostname sj3-server-port))
+       (error nil))
+      (if proc
+         (progn
+           (process-kill-without-query proc)
+           (set-process-coding-system proc 'no-conversion 'no-conversion)
+           (set-marker-insertion-type (process-mark proc) t)
+           ;; Initialize dictionaries
+           (setq sj3-sys-dict-list nil)
+           (setq sj3-user-dict-list nil)
+           (setq result (sj3rpc-open proc (system-name) (user-login-name)))
+           (if (< result 0)
+               (progn
+                 (delete-process proc)
+                 (setq proc nil
+                       msg (format "Can't open SJ3 session (%s): %s"
+                                   hostname msg)))
+             (setq result (sj3rpc-get-stdy-size proc))
+             (if (< result 0)
+                 (progn
+                   (delete-process proc)
+                   (setq proc nil
+                         msg (format "Can't get SJ3 STDYSIZE: %s"
+                                     (sj3rpc-get-error-message (- result)))))
+               (setq sj3-stdy-size result))))))
+    (if proc
+       (progn
+         (setq sj3-open-message (format (concat msg-form "done") hostname))
+         proc)
+      (kill-buffer buf)
+      (error "%s" (or msg "no sj3serv available")))))
 
 ;; <env> ::= [ <proc> <dictionary-list> ]
 (defvar sj3-environment nil
            (if (< dic-id 0)
                (error "Dame2")         ; XXX
              (setq dict-list (cons dic-id dict-list)
-                   l (cdr l))))))
-       (setq sj3-environment (vector proc dict-list)))))
+                   l (cdr l)))))
+       (message "%s" sj3-open-message)
+       (setq sj3-environment (vector proc dict-list))))))
 
 (defun sj3-init ()
   )
 
-(defun sj3-start-conversion (yomi lang)
+(defun sj3-start-conversion (yomi &optional lang)
   "Convert YOMI string to kanji, and enter conversion mode.
 Return the list of bunsetsu."
   (let ((env (sj3-get-environment)))
@@ -253,8 +279,7 @@ Return the list of bunsetsu."
   "Activate SJ3 backend of Tamagotchy."
   (egg-set-support-languages sj3-support-languages)
   (egg-set-conversion-backend sj3-conversion-backend 
-                             sj3-support-languages
-                             nil)
+                             sj3-support-languages)
   (apply 'egg-mode arg))
 
 ;;; egg/sj3.el ends here.