From 533bda0403b92e00abab4e828aefad936e2cd555 Mon Sep 17 00:00:00 2001 From: Gerd Flaig Date: Sat, 10 Oct 2009 19:15:25 +0200 Subject: [PATCH 1/1] Extend driver to dump all tables. --- empire.lisp | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/empire.lisp b/empire.lisp index 8a83ac0..433f29f 100644 --- a/empire.lisp +++ b/empire.lisp @@ -304,10 +304,12 @@ (defclass xdump-mode (play-mode) ((parser :initform (xdump:make-parser)) - (phase :initform :meta-meta))) + (phase :initform :meta-meta) + (dump-queue :initform nil) + (dump-index :initform 0))) (defmethod handle-data ((m xdump-mode) message) - (with-slots (connection parser phase) m + (with-slots (connection parser phase dump-queue dump-index) m (if (xdump:parse-line parser message) ;;XXX consider something like a 'pop-mode function (ccase phase @@ -316,11 +318,31 @@ parser (xdump:make-parser)) (send-message connection "xdump meta table")) (:meta-table - (setf phase :table + (setf phase :table-table parser (xdump:make-parser)) (send-message connection "xdump table *")) - (:table - (set-new-mode (connection-mode connection) 'play-mode)))))) + (:table-table + (setf phase :tables-meta + dump-queue (xdump::table-entries (xdump::get-table "table")) + dump-index 0 + parser (xdump:make-parser)) + (send-message connection (format nil "xdump meta ~a" (xdump-data::table-name (aref dump-queue 0))))) + (:tables-meta + (setf phase :tables-content + parser (xdump:make-parser)) + (send-message connection (format nil "xdump ~a *" (xdump-data::table-name (aref dump-queue dump-index))))) + (:tables-content + (if (< dump-index (fill-pointer dump-queue)) + (progn (setf phase :tables-meta + parser (xdump:make-parser)) + (incf dump-index) + (loop while (and (< dump-index (fill-pointer dump-queue)) + (null (aref dump-queue dump-index))) + do (incf dump-index)) + (if (and (<= dump-index (fill-pointer dump-queue)) + (not (null (aref dump-queue dump-index)))) + (send-message connection (format nil "xdump meta ~a" (xdump-data::table-name (aref dump-queue dump-index)))))) + (set-new-mode (connection-mode connection) 'play-mode))))))) (defmethod special-xup ((c connection)) (send-message c "xdump meta meta" :next-mode 'xdump-mode)) -- 2.43.0