Revision: 6084
Author: iratqq
Date: Sat Nov 21 05:52:47 2009
Log: * scm/cannav3-socket.scm (canna-lib-resize-pause):
  - Fix parsing of return s16 vector.

http://code.google.com/p/uim/source/detail?r=6084

Modified:
 /trunk/scm/cannav3-socket.scm

=======================================
--- /trunk/scm/cannav3-socket.scm       Fri Nov 20 03:18:55 2009
+++ /trunk/scm/cannav3-socket.scm       Sat Nov 21 05:52:47 2009
@@ -211,14 +211,18 @@
                             0
                             6
                             context-id bunsetsu-pos yomi-length)))
-  (call-with-u8list-unpack
-   '(u16 u16 u16) (string-buf->u8list (file-read socket 6))
-   (lambda (dummy len bunsetsu)
-     (and (not (= bunsetsu 65535))
-          (call-with-u8list-unpack
- (make-list bunsetsu 's16) (string-buf->u8list (file-read socket len))
-           (lambda conv
-             (take conv (- bunsetsu bunsetsu-pos))))))))
+  (let ((read-vec (file-read socket 6)))
+    (call-with-u8list-unpack
+     '(u16 u16 u16) (string-buf->u8list read-vec)
+     (lambda (dummy len bunsetsu)
+       (and (not (= bunsetsu 65535))
+ (let loop ((s16list (string-buf->u8list (file-read socket len)))
+                       (rest '()))
+              (if (equal? s16list '(0 0))
+                  (reverse rest)
+                  (let ((s16 (u8list-unpack '(s16) s16list)))
+                    (loop (drop s16list (+ 2 (string-length (car s16))))
+                          (cons (car s16) rest))))))))))

 ;;
 ;; RK compatible functions

Reply via email to