commit eb31a4127f4c0145755a555456e2175cbdb01617
parent c2fd6ea11c5faadfd8e567b46bd4cceebfc5ea03
Author: Tomas Hlavaty <tom@logand.com>
Date:   Mon, 19 Aug 2013 21:40:14 +0200
rw:till and rw:skip need rw:peek-reader, wraping in place where used
Diffstat:
| M | ipp.lisp |  |  | 27 | +++++++++++++++------------ | 
1 file changed, 15 insertions(+), 12 deletions(-)
diff --git a/ipp.lisp b/ipp.lisp
@@ -225,7 +225,7 @@
      (read-text reader))))
 
 (defun group-reader (reader)
-  (let (done tag group-tag attributes attribute)
+  (let (done tag group-tag attributes attribute (r (rw:peek-reader reader)))
     (lambda ()
       (unless done
         (block found
@@ -238,7 +238,7 @@
                      (setq group-tag tag attributes nil attribute nil)
                      (return-from found z))))
             (loop
-               (setq tag (tag (rw:next-u8 reader)))
+               (setq tag (tag (rw:next-u8 r)))
                ;;(print (list :!!! tag))
                (when (eq :end-of-attributes-tag tag)
                  (setq done t)
@@ -251,17 +251,17 @@
                    (if (and group-tag (or attributes attribute))
                        (yield)
                        (setq group-tag tag))
-                   (let ((k (read-text reader)))
+                   (let ((k (read-text r)))
                      (if k
                          (progn
                            (when attribute
                              (push attribute attributes))
                            (setq attribute (list tag
                                                  (or (attribute-keyword k) k)
-                                                 (read-value reader tag))))
+                                                 (read-value r tag))))
                          (setq attribute (nconc
                                           attribute
-                                          (list (read-value reader tag)))))
+                                          (list (read-value r tag)))))
                      #+nil(print (list :%%% attribute)))))))))))
 
 #+nil
@@ -417,7 +417,7 @@
     :request-id , (let ((x (rw:next-u32 reader)))
                     (assert (= x request-id))
                     x)
-    :groups ,(rw:till (group-reader reader))))
+    :groups ,(rw:till (rw:peek-reader (group-reader reader)))))
 
 #+nil
 (with-open-file (s "response.dat" :element-type '(unsigned-byte 8))
@@ -762,18 +762,21 @@
            (multiple-value-bind (i all) (funcall s)
              (unless i
                (return-from found nil))
-             (let ((z (rw:till (rw:skip (rw:reader all) (+ i n)) '(#\"))))
+             (let ((z (rw:till
+                       (rw:skip
+                        (rw:peek-reader (rw:reader all)) (+ i n)) '(#\"))))
                (when (and z (char/= #\? (car z)))
                  (return-from found (coerce z 'string))))))))))
 
 #+nil
 (with-open-file (s "printers.html")
-  (rw:till (printer-search-reader (rw:char-reader s))))
+  (rw:till (rw:peek-reader (printer-search-reader (rw:char-reader s)))))
 
 (defun list-printers (ipp-client printer-uri response-file)
   (funcall ipp-client nil printer-uri nil response-file)
   (with-open-file (s response-file)
-    (rw:till (printer-search-reader (rw:char-reader s)))))
+    (rw:till (rw:peek-reader
+              (printer-search-reader (rw:char-reader s))))))
 
 (defun wget-client (content-type printer-uri request-file response-file)
   (rw.net:wget printer-uri
@@ -781,7 +784,7 @@
                :response-file response-file
                :content-type content-type))
 
-;;(ipp:list-printers 'ipp-client "http://localhost:631/printers/" "printers.html")
+;;(ipp:list-printers 'wget-client "http://localhost:631/printers/" "printers.html")
 
 (defun curl-client (content-type printer-uri request-file response-file)
   (rw.net:curl printer-uri
@@ -835,7 +838,7 @@
   ;;(ipp:get-jobs p :requested-attributes '(:job-description))
   ;;(ipp:get-jobs p :requested-attributes '(:job-id :job-description))
   ;;(ipp:get-jobs p :requested-attributes '(:all))
-  (ipp:print-job p "test.txt" :ipp-attribute-fidelity nil :copies 2 :sides "two-sided-long-edge") ;; TODO create job object?
+  (ipp:print-job p "/home/tomas/git/cl-ipp/test.txt" :ipp-attribute-fidelity nil :copies 2 :sides "two-sided-long-edge") ;; TODO create job object?
   ;;(ipp:validate-job p :ipp-attribute-fidelity nil :copies 2 :sides "two-sided-long-edge")
   )
 
@@ -862,4 +865,4 @@
            "response2.dat"
            314))
        (j (ipp:create-job p)))
-  (ipp:send-jdocument j "test.txt" :ipp-attribute-fidelity nil :copies 2 :sides "two-sided-long-edge"))
+  (ipp:send-document j "test.txt" :ipp-attribute-fidelity nil :copies 2 :sides "two-sided-long-edge"))