From ffjeld at common-lisp.net Thu Mar 1 17:48:11 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Thu, 1 Mar 2007 12:48:11 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070301174811.603692D079@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv21457 Modified Files: environment.lisp Log Message: minor cleanups. --- /project/movitz/cvsroot/movitz/environment.lisp 2007/02/19 20:24:42 1.19 +++ /project/movitz/cvsroot/movitz/environment.lisp 2007/03/01 17:48:11 1.20 @@ -9,7 +9,7 @@ ;;;; Created at: Fri Nov 3 11:40:15 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: environment.lisp,v 1.19 2007/02/19 20:24:42 ffjeld Exp $ +;;;; $Id: environment.lisp,v 1.20 2007/03/01 17:48:11 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -518,31 +518,17 @@ (or #0=(gethash name (movitz-environment-setf-function-names *movitz-global-environment*)) (let ((setf-symbol (make-symbol (symbol-name name) - #+ignore (with-standard-io-syntax - (format nil "~A-~A" 'setf name))))) (setf (symbol-plist setf-symbol) (list :setf-placeholder name) #0# setf-symbol)))) -;;;(defun (setf movitz-env-setf-function-name) (value name &optional env) -;;; (setf (gethash name (movitz-environment-setf-function-names (or env -;;; *movitz-global-environment*))) -;;; value)) - - - -;;;(defun movitz-env-setf-function-cons (name &optional env) -;;; (assert (setf-name name)) -;;; (gethash (setf-name name) -;;; (movitz-environment-setf-function-cells (or env *movitz-global-environment*)))) - (defun movitz-env-named-function (name &optional env) (cond - ((setf-name name) - (movitz-env-symbol-function (movitz-env-setf-operator-name - (setf-name name) env))) - ((symbolp name) - (movitz-env-symbol-function name env)) - (t (error "Not a function name: ~S" name)))) + ((setf-name name) + (movitz-env-symbol-function (movitz-env-setf-operator-name + (setf-name name) env))) + ((symbolp name) + (movitz-env-symbol-function name env)) + (t (error "Not a function name: ~S" name)))) (defun (setf movitz-env-named-function) (value name &optional env) (check-type value movitz-funobj) @@ -551,15 +537,12 @@ ((setf-name name) (let* ((sn (setf-name name)) (function-name (movitz-env-setf-operator-name sn env))) - ;; (setf (movitz-env-setf-function-name sn env) function-name) (setf (movitz-env-named-function function-name env) value))) ((symbolp name) (setf (gethash name (movitz-environment-function-cells effective-env)) value)) (t (error "Not a function name: ~S" name))))) -;;; accessor: MACRO-FUNCTION - (defun movitz-macro-function (symbol &optional environment) (or (let ((binding (movitz-operator-binding symbol (or environment *movitz-global-environment*)))) (and (typep binding 'macro-binding) From ffjeld at common-lisp.net Thu Mar 1 17:49:31 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Thu, 1 Mar 2007 12:49:31 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070301174931.205397D190@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv21545 Modified Files: image.lisp Log Message: Check that function for movitz-disassemble exists. --- /project/movitz/cvsroot/movitz/image.lisp 2007/02/19 21:57:49 1.109 +++ /project/movitz/cvsroot/movitz/image.lisp 2007/03/01 17:49:30 1.110 @@ -9,7 +9,7 @@ ;;;; Created at: Sun Oct 22 00:22:43 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: image.lisp,v 1.109 2007/02/19 21:57:49 ffjeld Exp $ +;;;; $Id: image.lisp,v 1.110 2007/03/01 17:49:30 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -1312,7 +1312,8 @@ +movitz-fixnum-factor+)))) (defun movitz-disassemble (name &rest args &key ((:image *image*) *image*) &allow-other-keys) - (let* ((funobj (movitz-env-named-function name))) + (let* ((funobj (or (movitz-env-named-function name) + (error "~S has no function definition." name)))) (declare (special *image*)) (apply #'movitz-disassemble-funobj funobj :name name args))) From ffjeld at common-lisp.net Thu Mar 1 17:49:44 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Thu, 1 Mar 2007 12:49:44 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070301174944.6887972088@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv21591 Modified Files: packages.lisp Log Message: Export movitz:movitz-disassemble-method. --- /project/movitz/cvsroot/movitz/packages.lisp 2007/02/26 21:19:55 1.55 +++ /project/movitz/cvsroot/movitz/packages.lisp 2007/03/01 17:49:44 1.56 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Sat Nov 15 21:39:55 2003 ;;;; -;;;; $Id: packages.lisp,v 1.55 2007/02/26 21:19:55 ffjeld Exp $ +;;;; $Id: packages.lisp,v 1.56 2007/03/01 17:49:44 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -1301,6 +1301,7 @@ #:movitz-compile-file #:movitz-compile-stream #:movitz-disassemble + #:movitz-disassemble-method #:movitz-std-instance #:movitz-struct From ffjeld at common-lisp.net Thu Mar 1 17:50:52 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Thu, 1 Mar 2007 12:50:52 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070301175052.D65F910@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv21731 Modified Files: compiler.lisp Log Message: Minor tweak to movitz-compile-stream. --- /project/movitz/cvsroot/movitz/compiler.lisp 2007/02/26 21:18:37 1.179 +++ /project/movitz/cvsroot/movitz/compiler.lisp 2007/03/01 17:50:52 1.180 @@ -8,7 +8,7 @@ ;;;; Created at: Wed Oct 25 12:30:49 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: compiler.lisp,v 1.179 2007/02/26 21:18:37 ffjeld Exp $ +;;;; $Id: compiler.lisp,v 1.180 2007/03/01 17:50:52 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -1252,13 +1252,15 @@ (with-simple-restart (continue "Skip Movitz compilation of ~S." path) (with-retries-until-true (retry "Restart Movitz compilation of ~S." path) (with-open-file (stream path :direction :input) - (movitz-compile-stream-internal stream :path path))))) + (let ((*package* (find-package :muerte))) + (movitz-compile-stream-internal stream :path path)))))) -(defun movitz-compile-stream (stream &key (path "unknown-toplevel.lisp")) +(defun movitz-compile-stream (stream &key (path "unknown-toplevel.lisp") (package :muerte)) (handler-bind (#+sbcl (sb-ext:defconstant-uneql #'continue)) (unwind-protect - (let ((*movitz-host-features* *features*) + (let ((*package* (find-package package)) + (*movitz-host-features* *features*) (*features* (image-movitz-features *image*))) (multiple-value-prog1 (movitz-compile-stream-internal stream :path path) @@ -1268,7 +1270,6 @@ (defun movitz-compile-stream-internal (stream &key (path "unknown-toplevel.lisp")) (let* ((muerte.cl::*compile-file-pathname* path) - (*package* (find-package :muerte)) (funobj (make-instance 'movitz-funobj-pass1 :name (intern (format nil "~A" path) :muerte) :lambda-list (movitz-read nil))) @@ -1286,12 +1287,12 @@ (read stream nil '#0=#:eof)) until (eq form '#0#) appending - (with-simple-restart (skip-toplevel-form + (with-simple-restart (skip-toplevel-form "Skip the compilation of top-level form~@[ ~A~]." (cond ((symbolp form) form) ((symbolp (car form)) (car form)))) - (when *compiler-verbose-p* + (when *compiler-verbose-p* (format *query-io* "~&Movitz Compiling ~S..~%" (cond ((symbolp form) form) From ffjeld at common-lisp.net Thu Mar 1 17:52:58 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Thu, 1 Mar 2007 12:52:58 -0500 (EST) Subject: [movitz-cvs] CVS movitz/ide Message-ID: <20070301175258.0ED872A060@common-lisp.net> Update of /project/movitz/cvsroot/movitz/ide In directory clnet:/tmp/cvs-serv21819 Modified Files: ide.lisp Log Message: Update the slime-based IDE somewhat. At least the basics work now, such as compile-defun (M-C-x) and disassemble-defun (C-c C-v). --- /project/movitz/cvsroot/movitz/ide/ide.lisp 2007/02/26 21:32:55 1.3 +++ /project/movitz/cvsroot/movitz/ide/ide.lisp 2007/03/01 17:52:57 1.4 @@ -10,7 +10,7 @@ (defpackage #:movitz.ide (:use #:cl) (:export #:compile-movitz-file #:compile-defun #:dump-image - #:disassemble-fdefinition #:movitz-disassemble)) + #:movitz-disassemble #:movitz-disassemble-method)) (in-package #:movitz.ide) @@ -18,25 +18,29 @@ "Compile FILENAME as Movitz source." (movitz:movitz-compile-file filename)) -(defun compile-defun (source) +(defun compile-defun (source package-printname) "Compile the string SOURCE as Movitz source." (with-input-from-string (stream source) - (movitz:movitz-compile-stream stream :path "movitz-ide-toplevel"))) + (movitz:movitz-compile-stream stream :path "movitz-ide-toplevel" + :package (get-package package-printname)))) (defun dump-image (filename) "Dump the current image into FILENAME." (movitz:dump-image :path filename)) ;;; slime-friendly entry point. -(defun movitz-disassemble (symbol-printname package-printname) +(defun movitz-disassemble (printname package-printname) "Return the disassembly of SYMBOL-NAME's function as a string." - (disassemble-fdefinition (get-symbol symbol-printname - (get-package package-printname)))) - -(defun disassemble-fdefinition (symbol) - "Return the disassembly SYMBOL's fdefinition as a string." (with-output-to-string (*standard-output*) - (movitz:movitz-disassemble symbol))) + (movitz:movitz-disassemble (get-sexpr printname + (get-package package-printname))))) + +(defun movitz-disassemble-method (gf-name lambda-list qualifiers package-name) + (let ((package (get-package package-name))) + (with-output-to-string (*standard-output*) + (movitz:movitz-disassemble-method (get-sexpr gf-name package) + (get-sexpr lambda-list package) + (mapcar #'read-from-string qualifiers))))) ;;;; Utilities. @@ -50,6 +54,10 @@ (or (find-symbol (readname printname) package) (error "Can't find \"~A\" as a symbol in ~S" printname package))) +(defun get-sexpr (printname &optional (package *package*)) + (let ((*package* package)) + (read-from-string printname))) + (defun get-package (printname) "Return the package with PRINTNAME. Signal an error if there is no such package." From ffjeld at common-lisp.net Thu Mar 1 17:53:03 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Thu, 1 Mar 2007 12:53:03 -0500 (EST) Subject: [movitz-cvs] CVS movitz/ide Message-ID: <20070301175303.7C3753E057@common-lisp.net> Update of /project/movitz/cvsroot/movitz/ide In directory clnet:/tmp/cvs-serv21835 Modified Files: movitz-slime.el Log Message: Update the slime-based IDE somewhat. At least the basics work now, such as compile-defun (M-C-x) and disassemble-defun (C-c C-v). --- /project/movitz/cvsroot/movitz/ide/movitz-slime.el 2004/07/21 10:54:42 1.1 +++ /project/movitz/cvsroot/movitz/ide/movitz-slime.el 2007/03/01 17:52:59 1.2 @@ -14,6 +14,7 @@ ;;; core Movitz sources. (require 'slime) +(require 'cl) ;;;; Minor-mode @@ -46,7 +47,14 @@ (setq movitz-mode-commands-map (make-sparse-keymap)) (dolist (spec movitz-command-keys) (define-key movitz-mode-commands-map (car spec) (cadr spec))) - (define-key movitz-mode-map movitz-command-prefix movitz-mode-commands-map)) + (define-key movitz-mode-map movitz-command-prefix movitz-mode-commands-map) + + (define-key movitz-mode-map "\C-c\C-d" 'movitz-dump-image) + (define-key movitz-mode-map "\C-c\C-v" 'movitz-disassemble-defun) + (define-key movitz-mode-map "\C-c\C-b" 'movitz-compile-file) + (define-key movitz-mode-map "\C-\M-x" 'movitz-compile-defun) + (define-key movitz-mode-map "\C-cm" 'movitz-macroexpand) + (define-key movitz-mode-map "\C-ca" 'movitz-arglist)) (movitz-init-command-keymap) @@ -79,9 +87,14 @@ (defun movitz-compile-defun () "Compile the defun at point as Movitz code." (interactive) - (message "Compiling..") - (slime-eval-async `(movitz.ide:compile-defun ,(slime-defun-at-point)) - (lambda (_) (message "Compilation finished.")))) + (multiple-value-bind (defun-name defun-type) + (movitz-defun-name-and-type) + (lexical-let ((defun-name defun-name) + (defun-type defun-type) + (package-name (slime-current-package))) + (message "Compiling %s '%s'.." defun-type defun-name) + (slime-eval-async `(movitz.ide:compile-defun ,(slime-defun-at-point) ,package-name) + (lambda (_) (message "Movitz compilation of %s '%s' finished." defun-type defun-name)))))) (defun movitz-disassemble-fdefinition (symbol-name package-name) "Show disassembly of the (non-generic) function at point." @@ -92,6 +105,40 @@ (lambda (result) (slime-show-description result package))))) +(defun movitz-disassemble-defun (not-recursive-p) + (interactive "P") + (multiple-value-bind (defun-name defun-type lambda-list options) + (movitz-defun-name-and-type) + (lexical-let ((defun-name defun-name) + (defun-type defun-type) + (package-name (slime-current-package)) + (lambda-list lambda-list) + (options options)) + (cond + ((string= "function" defun-type) + (message "Movitz disassembling %s %s..." defun-type defun-name) + (slime-eval-async `(movitz.ide:movitz-disassemble ,defun-name ,package-name) + (lambda (result) + (slime-show-description result package-name) + (message "Movitz disassembling %s %s...done." defun-type defun-name)))) + ((string= "method" defun-type) + (message "Movitz disassembling %s '%s %s'..." defun-type defun-name lambda-list) + (slime-eval-async `(movitz.ide:movitz-disassemble-method ,defun-name ,lambda-list ',options ,package-name) + (lambda (result) + (slime-show-description result package-name) + (message "Movitz disassembling %s '%s %s'...done." defun-type defun-name lambda-list)))) + ;; ((string= "primitive-function" defun-type) + ;; (message "Movitz disassembling %s %s..." defun-type defun-name) + ;; (fi:eval-in-lisp + ;; "(cl:let ((defun-name (cl:let ((cl:*package* (cl:find-package :%s))) + ;; (cl:read-from-string \"%s\"))) + ;; (cl:*print-base* 16)) + ;; (movitz::movitz-disassemble-primitive defun-name))" + ;; fi:package defun-name) + ;; (switch-to-buffer "*common-lisp*") + ;; (message "Movitz disassembling %s %s...done." defun-type defun-name)) + (t (message "Don't know how to Movitz disassemble %s '%s'." defun-type defun-name)))))) + (defvar movitz-default-image-file nil "The default filename to dump images to. This is set by `movitz-dump-image' and can also be preinitialized in @@ -109,3 +156,61 @@ (slime-eval-async `(movitz.ide:dump-image ,filename) (lambda (_) (message "Finished.")))) + +(defun movitz-dump-image-and-qemu () + "Dump the current image to FILENAME." + (let ((filename (list (if (and (null current-prefix-arg) + movitz-default-image-file) + movitz-default-image-file + (let ((filename (read-file-name "Image file: "))) + (setq movitz-default-image-file filename) + filename))) + (message "Dumping..") + (slime-eval-async `(movitz.ide:dump-image ,filename) + (lambda (_) (message "Finished.")))) + + + +(defun movitz-defun-name-and-type () + (interactive) + (save-excursion + (let ((definition-type + (let ((x (buffer-substring-no-properties (progn (beginning-of-defun) + (forward-char) + (point)) + (progn (forward-symbol 1) + (point))))) + (cond + ((string-equal "defun" x) + "function") + ((string-match "^define-" x) + (substring x 7)) + ((string-match "^def" x) + (substring x 3)) + (t x)))) + (definition-name + (buffer-substring-no-properties (progn (forward-char) + (point)) + (progn (forward-sexp 1) + (point)))) + (lambda-list + (buffer-substring-no-properties (progn (forward-char) + (point)) + (progn (forward-sexp 1) + (point))))) + (if (and (equalp "method" definition-type) + (char-equal 58 (string-to-char lambda-list))) + (let ((qualifier lambda-list) + ;; XXX we only deal with one (potential) qualifier.. + (lambda-list (buffer-substring-no-properties (progn (forward-char) + (point)) + (progn (forward-sexp 1) + (point))))) + (values definition-name + definition-type + lambda-list + (list qualifier))) + (values definition-name + definition-type + lambda-list + nil))))) From ffjeld at common-lisp.net Thu Mar 1 21:27:40 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Thu, 1 Mar 2007 16:27:40 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070301212740.C421D3201F@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv21413 Modified Files: compiler.lisp Log Message: Have optimize-code do layout-program even when *compiler-do-optimize* is false. --- /project/movitz/cvsroot/movitz/compiler.lisp 2007/03/01 17:50:52 1.180 +++ /project/movitz/cvsroot/movitz/compiler.lisp 2007/03/01 21:27:39 1.181 @@ -8,7 +8,7 @@ ;;;; Created at: Wed Oct 25 12:30:49 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: compiler.lisp,v 1.180 2007/03/01 17:50:52 ffjeld Exp $ +;;;; $Id: compiler.lisp,v 1.181 2007/03/01 21:27:39 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -1370,11 +1370,11 @@ (defun optimize-code (unoptimized-code &rest args) #+ignore (print-code 'to-optimize unoptimized-code) (if (not *compiler-do-optimize*) - unoptimized-code - (apply #'optimize-code-internal - (optimize-code-dirties - (layout-program (optimize-code-unfold-branches unoptimized-code))) - 0 args))) + (layout-program (optimize-code-unfold-branches unoptimized-code)) + (apply #'optimize-code-internal + (optimize-code-dirties + (layout-program (optimize-code-unfold-branches unoptimized-code))) + 0 args))) (defun optimize-code-unfold-branches (unoptimized-code) "This particular optimization should be done before code layout: @@ -1472,7 +1472,7 @@ (defun optimize-code-internal (unoptimized-code recursive-count &rest key-args &key keep-labels stack-frame-size) - "Peephole optimizer. Based on a lot of rather random techniques." + "Peephole optimizer. Based on a lot of rather random heuristics." (declare (ignore stack-frame-size)) (when (<= 20 recursive-count) (error "Peephole-optimizer recursive count reached ~D. From ffjeld at common-lisp.net Thu Mar 1 23:16:10 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Thu, 1 Mar 2007 18:16:10 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070301231610.6D29063089@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv12919 Modified Files: environment.lisp Log Message: Fix overly eager code-deletion in previous check-in. --- /project/movitz/cvsroot/movitz/environment.lisp 2007/03/01 17:48:11 1.20 +++ /project/movitz/cvsroot/movitz/environment.lisp 2007/03/01 23:16:10 1.21 @@ -9,7 +9,7 @@ ;;;; Created at: Fri Nov 3 11:40:15 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: environment.lisp,v 1.20 2007/03/01 17:48:11 ffjeld Exp $ +;;;; $Id: environment.lisp,v 1.21 2007/03/01 23:16:10 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -517,7 +517,7 @@ (assert (null env)) (or #0=(gethash name (movitz-environment-setf-function-names *movitz-global-environment*)) (let ((setf-symbol (make-symbol - (symbol-name name) + (symbol-name name)))) (setf (symbol-plist setf-symbol) (list :setf-placeholder name) #0# setf-symbol)))) @@ -591,8 +591,3 @@ (defun movitz-special-operator-compiler (symbol) (movitz-special-operator-compiler-function (gethash symbol (movitz-environment-function-cells *persistent-movitz-environment*)))) - - -;;; - - From ffjeld at common-lisp.net Fri Mar 2 22:01:33 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Fri, 2 Mar 2007 17:01:33 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070302220133.E0422310A4@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv11968 Modified Files: setf.lisp Log Message: Use property muerte:setf-expander rather than :setf-expander, here too. --- /project/movitz/cvsroot/movitz/losp/muerte/setf.lisp 2006/04/07 21:49:47 1.4 +++ /project/movitz/cvsroot/movitz/losp/muerte/setf.lisp 2007/03/02 22:01:33 1.5 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Thu Feb 8 20:43:20 2001 ;;;; -;;;; $Id: setf.lisp,v 1.4 2006/04/07 21:49:47 ffjeld Exp $ +;;;; $Id: setf.lisp,v 1.5 2007/03/02 22:01:33 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -30,7 +30,7 @@ (defun get-setf-expansion (place &optional environment) (let* ((name (and (consp place) (movitz::translate-program (car place) :cl :muerte.cl))) - (expander (and name (movitz::movitz-env-get name :setf-expander nil environment)))) + (expander (and name (movitz::movitz-env-get name 'setf-expander nil environment)))) (if expander (funcall expander place environment) (multiple-value-bind (expansion expanded-p) From ffjeld at common-lisp.net Sat Mar 3 18:34:53 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Sat, 3 Mar 2007 13:34:53 -0500 (EST) Subject: [movitz-cvs] CVS movitz/ide Message-ID: <20070303183453.3B9615908C@common-lisp.net> Update of /project/movitz/cvsroot/movitz/ide In directory clnet:/tmp/cvs-serv32752 Modified Files: ide.lisp Log Message: More complete ide: movitz-arglist, macroexpand, etc. --- /project/movitz/cvsroot/movitz/ide/ide.lisp 2007/03/01 17:52:57 1.4 +++ /project/movitz/cvsroot/movitz/ide/ide.lisp 2007/03/03 18:34:53 1.5 @@ -9,8 +9,13 @@ (defpackage #:movitz.ide (:use #:cl) - (:export #:compile-movitz-file #:compile-defun #:dump-image - #:movitz-disassemble #:movitz-disassemble-method)) + (:export #:compile-movitz-file + #:compile-defun + #:dump-image + #:movitz-disassemble + #:movitz-disassemble-method + #:movitz-arglist + #:movitz-macroexpand)) (in-package #:movitz.ide) @@ -42,6 +47,21 @@ (get-sexpr lambda-list package) (mapcar #'read-from-string qualifiers))))) +(defun movitz-arglist (name package-name) + (let* ((package (get-package package-name)) + (funobj (movitz::movitz-env-named-function (get-sexpr name package)))) + (if (not funobj) + "not defined" + (let ((*package* package)) + (princ-to-string (movitz::movitz-print (movitz::movitz-funobj-lambda-list funobj))))))) + +(defun movitz-macroexpand (string package-name) + (let* ((*package* (get-package package-name)) + (form (get-sexpr string *package*)) + (expansion (movitz::movitz-macroexpand-1 form))) + (princ-to-string (movitz::movitz-print expansion)))) + + ;;;; Utilities. From ffjeld at common-lisp.net Sat Mar 3 18:35:02 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Sat, 3 Mar 2007 13:35:02 -0500 (EST) Subject: [movitz-cvs] CVS movitz/ide Message-ID: <20070303183502.572C4A154@common-lisp.net> Update of /project/movitz/cvsroot/movitz/ide In directory clnet:/tmp/cvs-serv313 Modified Files: movitz-slime.el Log Message: More complete ide: movitz-arglist, macroexpand, etc. --- /project/movitz/cvsroot/movitz/ide/movitz-slime.el 2007/03/01 17:52:59 1.2 +++ /project/movitz/cvsroot/movitz/ide/movitz-slime.el 2007/03/03 18:34:58 1.3 @@ -49,12 +49,17 @@ (define-key movitz-mode-commands-map (car spec) (cadr spec))) (define-key movitz-mode-map movitz-command-prefix movitz-mode-commands-map) - (define-key movitz-mode-map "\C-c\C-d" 'movitz-dump-image) + (define-key movitz-mode-map "\C-cd" 'movitz-dump-image) (define-key movitz-mode-map "\C-c\C-v" 'movitz-disassemble-defun) (define-key movitz-mode-map "\C-c\C-b" 'movitz-compile-file) (define-key movitz-mode-map "\C-\M-x" 'movitz-compile-defun) (define-key movitz-mode-map "\C-cm" 'movitz-macroexpand) - (define-key movitz-mode-map "\C-ca" 'movitz-arglist)) + (define-key movitz-mode-map "\C-ca" 'movitz-arglist) + (define-key movitz-mode-map "\C-cd" 'movitz-dump-image-and-qemu) + (define-key movitz-mode-map "\M-." 'find-tag) + (define-key movitz-mode-map "\M-," 'tags-loop-continue) + (define-key movitz-mode-map "\r" 'newline-and-indent) + (define-key movitz-mode-map " " 'self-insert-command)) (movitz-init-command-keymap) @@ -64,7 +69,7 @@ does." (add-hook 'find-file-hooks (defun movitz-auto-enable () - (when (string-match "/movitz/losp/.*\\.lisp$" (buffer-file-name)) + (when (string-match ".*/movitz/losp/.*\\.lisp$" (buffer-file-name)) (movitz-mode 1))))) @@ -96,6 +101,25 @@ (slime-eval-async `(movitz.ide:compile-defun ,(slime-defun-at-point) ,package-name) (lambda (_) (message "Movitz compilation of %s '%s' finished." defun-type defun-name)))))) +(defun movitz-macroexpand () + "Macroexpand the form at point." + (interactive) + (lexical-let ((form (slime-sexp-at-point-or-error)) + (package-name (slime-current-package))) + (slime-eval-async `(movitz.ide:movitz-macroexpand ,form ,package-name) + (lambda (expansion) + (if (and (not (find 10 expansion)) + (< (length expansion) 80)) + (message "Movitz: \"%s\"" expansion) + (let ((buffer (get-buffer-create "*Movitz Macroexpand*"))) + (with-current-buffer buffer + (delete-region 1 (point-max)) + (common-lisp-mode) + (insert expansion) + (newline 2) + (pop-to-buffer buffer)))))))) + + (defun movitz-disassemble-fdefinition (symbol-name package-name) "Show disassembly of the (non-generic) function at point." (interactive (list (slime-read-symbol-name "Symbol: ") @@ -139,6 +163,15 @@ ;; (message "Movitz disassembling %s %s...done." defun-type defun-name)) (t (message "Don't know how to Movitz disassemble %s '%s'." defun-type defun-name)))))) +(defun movitz-arglist (string) + (interactive (list (slime-read-symbol-name "Movitz arglist of: "))) + (when (and string (plusp (length string))) + (lexical-let ((string string)) + (slime-eval-async `(movitz.ide:movitz-arglist ,string ,(slime-current-package)) + (lambda (result) + (message "Movitz args for %s: %s." string result)))))) + + (defvar movitz-default-image-file nil "The default filename to dump images to. This is set by `movitz-dump-image' and can also be preinitialized in @@ -157,17 +190,24 @@ (lambda (_) (message "Finished.")))) -(defun movitz-dump-image-and-qemu () +(defun movitz-dump-image-and-qemu (filename) "Dump the current image to FILENAME." - (let ((filename (list (if (and (null current-prefix-arg) - movitz-default-image-file) - movitz-default-image-file - (let ((filename (read-file-name "Image file: "))) - (setq movitz-default-image-file filename) - filename))) - (message "Dumping..") - (slime-eval-async `(movitz.ide:dump-image ,filename) - (lambda (_) (message "Finished.")))) + (interactive (list (if (and (null current-prefix-arg) + movitz-default-image-file) + movitz-default-image-file + (let ((filename (read-file-name "Image file: "))) + (setq movitz-default-image-file filename) + filename)))) + (lexical-let ((filename filename)) + (message "Dumping '%s'.." filename) + (slime-eval-async `(movitz.ide:dump-image ,filename) + (lambda (_) + (message "Dumping '%s'..done, starting quemu." filename) + (call-process "c:/progra~1/qemu/qemu" + nil 0 nil + "-L" "c:/progra~1/qemu" + "-fda" filename + "-boot" "a"))))) @@ -214,3 +254,12 @@ definition-type lambda-list nil))))) + +;;; Indentation of Movit syntax + +(let ((l '((with-inline-assembly . tagbody)))) + (dolist (el l) + (put (car el) 'common-lisp-indent-function + (if (symbolp (cdr el)) + (get (cdr el) 'common-lisp-indent-function) + (car (cdr el)))))) \ No newline at end of file From ffjeld at common-lisp.net Wed Mar 7 20:53:12 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Wed, 7 Mar 2007 15:53:12 -0500 (EST) Subject: [movitz-cvs] CVS movitz/ide Message-ID: <20070307205312.2C33C72086@common-lisp.net> Update of /project/movitz/cvsroot/movitz/ide In directory clnet:/tmp/cvs-serv20281 Modified Files: movitz-slime.el Log Message: Some more tweaks. Do movitz-auto-mode-setup by default. --- /project/movitz/cvsroot/movitz/ide/movitz-slime.el 2007/03/03 18:34:58 1.3 +++ /project/movitz/cvsroot/movitz/ide/movitz-slime.el 2007/03/07 20:53:12 1.4 @@ -72,6 +72,8 @@ (when (string-match ".*/movitz/losp/.*\\.lisp$" (buffer-file-name)) (movitz-mode 1))))) +(movitz-auto-mode-setup) + ;;;; Commands @@ -85,9 +87,11 @@ (when (and buffer (buffer-modified-p buffer)) (when (y-or-n-p (format "Save file %s? " filename)) (with-current-buffer buffer (save-buffer))))) - (message "Compiling..") - (slime-eval-async `(movitz.ide:compile-movitz-file ,filename) - (lambda (_) (message "Compilation finished.")))) + (lexical-let ((filename filename)) + (message "Movitz compiling '%s'.." filename) + (slime-eval-async `(movitz.ide:compile-movitz-file ,filename) + (lambda (_) + (message "Movitz compiling '%s'..done." filename))))) (defun movitz-compile-defun () "Compile the defun at point as Movitz code." @@ -205,6 +209,7 @@ (message "Dumping '%s'..done, starting quemu." filename) (call-process "c:/progra~1/qemu/qemu" nil 0 nil + "-s" "-L" "c:/progra~1/qemu" "-fda" filename "-boot" "a"))))) From ffjeld at common-lisp.net Sun Mar 11 21:18:40 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Sun, 11 Mar 2007 16:18:40 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070311211840.7F1C75C208@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv24981 Modified Files: eval.lisp Log Message: Enable eval of make-hash-table. --- /project/movitz/cvsroot/movitz/eval.lisp 2006/04/28 23:20:47 1.11 +++ /project/movitz/cvsroot/movitz/eval.lisp 2007/03/11 21:18:40 1.12 @@ -9,7 +9,7 @@ ;;;; Created at: Thu Nov 2 17:45:05 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: eval.lisp,v 1.11 2006/04/28 23:20:47 ffjeld Exp $ +;;;; $Id: eval.lisp,v 1.12 2007/03/11 21:18:40 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -149,9 +149,10 @@ (mapcar (lambda (sub-form) (movitz-eval sub-form env nil)) (cdr form)))) - ((member operator '(muerte.cl:coerce)) - (apply #'coerce - (mapcar (lambda (arg) (translate-program (movitz-eval arg env nil) :muerte.cl :cl)) + ((member operator '(muerte.cl:coerce muerte.cl:make-hash-table)) + (apply (translate-program operator :muerte.cl :cl) + (mapcar (lambda (arg) + (translate-program (movitz-eval arg env nil) :muerte.cl :cl)) (cdr form)))) ((and compiler-macro-function (not (movitz-env-get (car form) 'notinline nil env)) From ffjeld at common-lisp.net Sun Mar 11 22:40:16 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Sun, 11 Mar 2007 17:40:16 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070311224016.BD683762FA@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv13222 Modified Files: bootblock.lisp Log Message: Support weird floppy geometries (because of Qemu). --- /project/movitz/cvsroot/movitz/bootblock.lisp 2005/02/02 07:48:21 1.11 +++ /project/movitz/cvsroot/movitz/bootblock.lisp 2007/03/11 22:40:16 1.12 @@ -9,7 +9,7 @@ ;;;; Created at: Mon Oct 9 20:47:19 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: bootblock.lisp,v 1.11 2005/02/02 07:48:21 ffjeld Exp $ +;;;; $Id: bootblock.lisp,v 1.12 2007/03/11 22:40:16 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -73,7 +73,8 @@ (defconstant +linear-sector+ -4) (defconstant +destination+ -8) -(defconstant +stack-frame-size+ 12) +(defconstant +sectors-per-track+ -12) +(defconstant +stack-frame-size+ 16) (defconstant +read-buffer+ #x10000) @@ -114,6 +115,23 @@ (:outb :al #x60) (:call 'empty-8042) + ;; Poll the floppy's sectors per track + + (:movw 5 (:bp ,+sectors-per-track+)) + check-geometry + (:incb (:bp ,+sectors-per-track+)) + (:jz 'read-error) + (:movw (:bp ,+sectors-per-track+) :cx ) + (:movw #x0201 :ax) + (:xorw :dx :dx) + (:movw ,read-buffer-segment :bx) + (:movw :bx :es) + (:xorw :bx :bx) + (:int #x13) ; Call BIOS routine + (:testb :ah :ah) + (:jz 'check-geometry) + (:decb (:bp ,+sectors-per-track+)) + ;; ;; Read sectors into memory ;; @@ -130,16 +148,16 @@ (:call 'print) (:movw (:bp ,+linear-sector+) :ax) - (:movb 18 :cl) + (:movb (:bp ,+sectors-per-track+) :cl) (:divb :cl :ax) ; al=quotient, ah=remainder of :ax/:cl - + (:movb :ah :cl) ; sector - 1 (:movb :al :dh) (:andb 1 :dh) ; head (:movb :al :ch) (:shrb 1 :ch) ; track (:xorb :dl :dl) ; drive = 0 - (:movw 18 :ax) + (:movw (:bp ,+sectors-per-track+) :ax) (:subb :cl :al) ; number of sectors (rest of track) (:incb :cl) (:addw :ax (:bp ,+linear-sector+)) ; update read pointer @@ -154,14 +172,14 @@ (:movw ,read-buffer-segment :bx) (:movw :bx :es) (:xorw :bx :bx) - (:int #x13) ; Call BIOS routine + (:jc 'read-error) (:movzxb :al :ecx) ;; ;; Install GS as 4GB segment - ;; http://www2.dgsys.com/~raymoon/faq/gen2.html#15 + ;; http://www.faqs.org/faqs/assembly-language/x86/general/part2/ ;; (:cli) (:lgdt ('gdt-addr)) ; load gdt @@ -178,10 +196,11 @@ ;; Completed install GS as 4GB segment. ;; Copy data to destination - (:shll ,(+ 9 -2) :ecx) + (:shll ,(+ 9 -2) :ecx) ; 512/4 = sector-size/word-size (:movl ,+read-buffer+ :ebx) (:movl (:bp ,+destination+) :esi) (:leal (:esi (:ecx 4)) :edx) + (:movl :edx (:bp ,+destination+)) copy-loop @@ -189,14 +208,14 @@ ((:gs-override) :movl (:ebx (:ecx 4)) :edx) ((:gs-override) :movl :edx (:esi (:ecx 4))) (:jnz 'copy-loop) - + (:movw 'track-end-msg :si) ; Print ')' to screen after each track (:call 'print) (:jmp 'read-loop) read-done - + motor-loop ; Wait for floppy motor (:btw 8 (#x43e)) (:jc 'motor-loop) @@ -269,9 +288,8 @@ (:ret) delay - (:movw 500 :cx) + (:xorw :cx :cx) delay-loop - (:nop) (:loop 'delay-loop) (:ret) From ffjeld at common-lisp.net Sun Mar 11 22:40:58 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Sun, 11 Mar 2007 17:40:58 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070311224058.D040B7E007@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv14273 Modified Files: compiler.lisp Log Message: Tweak peephole optimizer. --- /project/movitz/cvsroot/movitz/compiler.lisp 2007/03/01 21:27:39 1.181 +++ /project/movitz/cvsroot/movitz/compiler.lisp 2007/03/11 22:40:57 1.182 @@ -8,7 +8,7 @@ ;;;; Created at: Wed Oct 25 12:30:49 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: compiler.lisp,v 1.181 2007/03/01 21:27:39 ffjeld Exp $ +;;;; $Id: compiler.lisp,v 1.182 2007/03/11 22:40:57 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -1288,22 +1288,25 @@ until (eq form '#0#) appending (with-simple-restart (skip-toplevel-form - "Skip the compilation of top-level form~@[ ~A~]." - (cond - ((symbolp form) form) - ((symbolp (car form)) (car form)))) + "Skip the compilation of top-level form~{ ~A~}." + (cond + ((symbolp form) + (list form)) + ((symbolp (car form)) + (list (car form) + (cadr form))))) (when *compiler-verbose-p* - (format *query-io* "~&Movitz Compiling ~S..~%" - (cond - ((symbolp form) form) - ((symbolp (car form)) - (xsubseq form 0 2))))) - (compiler-call #'compile-form - :form form - :funobj funobj - :env function-env - :top-level-p t - :result-mode :ignore)))))) + (format *query-io* "~&Movitz Compiling ~S..~%" + (cond + ((symbolp form) form) + ((symbolp (car form)) + (xsubseq form 0 2))))) + (compiler-call #'compile-form + :form form + :funobj funobj + :env function-env + :top-level-p t + :result-mode :ignore)))))) (cond ((null file-code) (setf (image-load-time-funobjs *image*) @@ -1819,49 +1822,55 @@ until (eq i 'start-stack-frame-setup)) (assert (eq (car new-code) 'start-stack-frame-setup) () "no start-stack-frame-setup label, but we already checked!") - (let* ((frame-map (loop for pos downfrom -8 by 4 + (let* ((frame-map (loop with pos = -8 as i = (pop old-code) - if (and (consp i) (eq :pushl (car i)) (symbolp (cadr i))) - collect (cons pos (cadr i)) - and do (push i new-code) + if (instruction-is i :frame-map) + do (progn :nothing) + else if + (and (consp i) (eq :pushl (car i)) (symbolp (cadr i))) + collect + (cons pos (cadr i)) + and do + (decf pos 4) + (push i new-code) else do - (push i old-code) - (loop-finish))) + (push i old-code) + (loop-finish))) (mod-p (loop with mod-p = nil for i = `(:frame-map ,(copy-list frame-map) nil t) then (pop old-code) while i - do (let ((new-i (cond - ((let ((store-pos (store-stack-frame-p i))) - (and store-pos - (eq (cdr (assoc store-pos frame-map)) - (twop-src i)))) - (explain nil "removed stack-init store: ~S" i) - nil) - ((let ((load-pos (load-stack-frame-p i))) - (and load-pos - (eq (cdr (assoc load-pos frame-map)) - (twop-dst i)))) - (explain nil "removed stack-init load: ~S" i) - nil) - ((and (load-stack-frame-p i) - (assoc (load-stack-frame-p i) frame-map)) - (let ((old-reg (cdr (assoc (load-stack-frame-p i) - frame-map)))) - (explain nil "load ~S already in ~S." - i old-reg) - `(:movl ,old-reg ,(twop-dst i)))) - ((and (instruction-is i :pushl) - (stack-frame-operand (idst i)) - (assoc (stack-frame-operand (idst i)) - frame-map)) - (let ((old-reg - (cdr (assoc (stack-frame-operand (idst i)) - frame-map)))) - (explain nil "push ~S already in ~S." - i old-reg) - `(:pushl ,old-reg))) - (t i)))) + do (let ((new-i (cond + ((let ((store-pos (store-stack-frame-p i))) + (and store-pos + (eq (cdr (assoc store-pos frame-map)) + (twop-src i)))) + (explain nil "removed stack-init store: ~S" i) + nil) + ((let ((load-pos (load-stack-frame-p i))) + (and load-pos + (eq (cdr (assoc load-pos frame-map)) + (twop-dst i)))) + (explain nil "removed stack-init load: ~S" i) + nil) + ((and (load-stack-frame-p i) + (assoc (load-stack-frame-p i) frame-map)) + (let ((old-reg (cdr (assoc (load-stack-frame-p i) + frame-map)))) + (explain nil "load ~S already in ~S." + i old-reg) + `(:movl ,old-reg ,(twop-dst i)))) + ((and (instruction-is i :pushl) + (stack-frame-operand (idst i)) + (assoc (stack-frame-operand (idst i)) + frame-map)) + (let ((old-reg + (cdr (assoc (stack-frame-operand (idst i)) + frame-map)))) + (explain nil "push ~S already in ~S." + i old-reg) + `(:pushl ,old-reg))) + (t i)))) (unless (eq new-i i) (setf mod-p t)) (when (branch-instruction-label new-i t) @@ -1872,12 +1881,12 @@ (push new-i new-code) ;; (warn "new-i: ~S, fm: ~S" new-i frame-map) (setf frame-map - (delete-if (lambda (map) - ;; (warn "considering: ~S" map) - (not (and (preserves-register-p new-i (cdr map)) - (preserves-stack-location-p new-i - (car map))))) - frame-map)) + (delete-if (lambda (map) + ;; (warn "considering: ~S" map) + (not (and (preserves-register-p new-i (cdr map)) + (preserves-stack-location-p new-i + (car map))))) + frame-map)) ;; (warn "Frame-map now: ~S" frame-map) (when (store-stack-frame-p new-i) (loop for map in frame-map @@ -1889,7 +1898,11 @@ (if (not mod-p) unoptimized-code (append (nreverse new-code) - old-code))))))) + old-code)))))) + (remove-frame-maps (code) + (remove-if (lambda (x) + (typep x '(cons (eql :frame-map) *))) + code))) (let* ((unoptimized-code (frame-map-code (optimize-stack-frame-init unoptimized-code))) (code-modified-p nil) (stack-frame-used-map (loop with map = nil @@ -2282,13 +2295,7 @@ nconc p))) (if code-modified-p (apply #'optimize-code-internal optimized-code (1+ recursive-count) key-args) - (optimize-trim-stack-frame - (remove :frame-map (progn #+ignore (warn "maps:~{~&~A~}" unoptimized-code) - unoptimized-code) - :key (lambda (x) - (when (consp x) - (car x)))))))))) - + (optimize-trim-stack-frame (remove-frame-maps unoptimized-code))))))) ;;;; Compiler internals (defclass binding () From ffjeld at common-lisp.net Sun Mar 11 22:41:45 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Sun, 11 Mar 2007 17:41:45 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070311224145.7C83A63089@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv14521 Modified Files: arrays.lisp Log Message: Insignificant syntax tweak. --- /project/movitz/cvsroot/movitz/losp/muerte/arrays.lisp 2007/02/22 21:02:09 1.60 +++ /project/movitz/cvsroot/movitz/losp/muerte/arrays.lisp 2007/03/11 22:41:45 1.61 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Sun Feb 11 23:14:04 2001 ;;;; -;;;; $Id: arrays.lisp,v 1.60 2007/02/22 21:02:09 ffjeld Exp $ +;;;; $Id: arrays.lisp,v 1.61 2007/03/11 22:41:45 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -564,8 +564,7 @@ (:jne 'not-basic-simple-vector) (:cmpl :edx (:ebx (:offset movitz-basic-vector num-elements))) (:jbe 'illegal-index) - (:movl :eax - (:ebx :edx ,(bt:slot-offset 'movitz:movitz-basic-vector 'movitz::data)))))) + (:movl :eax (:ebx :edx (:offset movitz-basic-vector data)))))) (do-it))) ;;; string accessors From ffjeld at common-lisp.net Sun Mar 11 22:42:01 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Sun, 11 Mar 2007 17:42:01 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070311224201.C8AD712085@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv14594 Modified Files: error.lisp Log Message: Added cerror. --- /project/movitz/cvsroot/movitz/losp/muerte/error.lisp 2007/02/06 20:02:01 1.5 +++ /project/movitz/cvsroot/movitz/losp/muerte/error.lisp 2007/03/11 22:42:01 1.6 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Sat Sep 1 00:49:11 2001 ;;;; -;;;; $Id: error.lisp,v 1.5 2007/02/06 20:02:01 ffjeld Exp $ +;;;; $Id: error.lisp,v 1.6 2007/03/11 22:42:01 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -59,3 +59,9 @@ (defun formatted-error (type format-control &rest format-arguments) (declare (dynamic-extent format-arguments)) (error type :format-control format-control :format-arguments format-arguments)) + +(defun cerror (continue-format-control datum &rest arguments) + (declare (dynamic-extent arguments)) + (with-simple-restart (continue "~?" continue-format-control arguments) + (apply 'error datum arguments)) + nil) From ffjeld at common-lisp.net Sun Mar 11 22:43:11 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Sun, 11 Mar 2007 17:43:11 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070311224311.439364814A@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv14757 Modified Files: los-closette-compiler.lisp Log Message: Add metaclass read-only-class. --- /project/movitz/cvsroot/movitz/losp/muerte/los-closette-compiler.lisp 2005/08/24 07:31:47 1.19 +++ /project/movitz/cvsroot/movitz/losp/muerte/los-closette-compiler.lisp 2007/03/11 22:43:10 1.20 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Thu Aug 29 13:15:11 2002 ;;;; -;;;; $Id: los-closette-compiler.lisp,v 1.19 2005/08/24 07:31:47 ffjeld Exp $ +;;;; $Id: los-closette-compiler.lisp,v 1.20 2007/03/11 22:43:10 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -551,6 +551,7 @@ direct-slots direct-superclasses &allow-other-keys) (declare (dynamic-extent all-keys)) + (remf all-keys :metaclass) (let ((old-class (movitz-find-class name nil))) (if (and old-class (eq metaclass *the-class-standard-class*)) @@ -568,6 +569,9 @@ 'movitz-make-instance) ((eq metaclass (movitz-find-class 'run-time-context-class nil)) 'movitz-make-instance) + ((member *the-class-standard-class* + (class-precedence-list metaclass)) + 'make-instance-standard-class) (t (break "Unknown metaclass: ~S" metaclass) #+ignore 'make-instance-built-in-class 'movitz-make-instance)) @@ -676,7 +680,7 @@ default-initargs-function documentation) (declare (ignore metaclass documentation)) - (let ((class (std-allocate-instance *the-class-standard-class*))) + (let ((class (std-allocate-instance metaclass))) (setf (movitz-class-name class) name) (setf (class-direct-subclasses class) ()) (setf (class-direct-methods class) ()) @@ -684,6 +688,16 @@ (setf (movitz-slot-value class 'plist) (when default-initargs-function (list :default-initargs-function default-initargs-function))) + (dolist (slot (class-slots (movitz-class-of class))) + (let ((slot-name (slot-definition-name slot)) + (slot-initform (muerte::translate-program (slot-definition-initform slot) + '#:muerte.cl '#:cl))) + (when slot-initform + (warn "init slot: ~S: ~S => ~S" + slot-name + slot-initform + (movitz::eval-form slot-initform)) + (setf (movitz-slot-value class slot-name) (movitz::eval-form slot-initform))))) (std-after-initialization-for-classes class :direct-slots direct-slots :direct-superclasses direct-superclasses) @@ -708,8 +722,10 @@ (dolist (writer (slot-definition-writers direct-slot)) (add-writer-method class writer (slot-definition-name direct-slot))))) - (funcall (if (or (eq (movitz-class-of class) *the-class-standard-class*) - (subclassp (movitz-class-of class) (movitz-find-class 'std-slotted-class))) + (funcall (if (or (eq (movitz-class-of class) + *the-class-standard-class*) + (subclassp (movitz-class-of class) + (movitz-find-class 'std-slotted-class))) #'std-finalize-inheritance #'finalize-inheritance) class) From ffjeld at common-lisp.net Sun Mar 11 22:43:16 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Sun, 11 Mar 2007 17:43:16 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070311224316.9DC766209C@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv14774 Modified Files: los-closette.lisp Log Message: Add metaclass read-only-class. --- /project/movitz/cvsroot/movitz/losp/muerte/los-closette.lisp 2006/04/10 11:52:21 1.36 +++ /project/movitz/cvsroot/movitz/losp/muerte/los-closette.lisp 2007/03/11 22:43:14 1.37 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Tue Jul 23 14:29:10 2002 ;;;; -;;;; $Id: los-closette.lisp,v 1.36 2006/04/10 11:52:21 ffjeld Exp $ +;;;; $Id: los-closette.lisp,v 1.37 2007/03/11 22:43:14 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -154,8 +154,7 @@ (defun std-gf-instance-class (instance) (check-type instance standard-gf-instance) - (memref instance (movitz-type-slot-offset 'movitz-funobj-standard-gf 'standard-gf-class)) - #+ignore (movitz-accessor instance movitz-funobj-standard-gf standard-gf-class)) + (memref instance (movitz-type-slot-offset 'movitz-funobj-standard-gf 'standard-gf-class))) (defun std-gf-instance-slots (instance) (check-type instance standard-gf-instance) @@ -198,8 +197,6 @@ (setf (memref funcallable-instance (movitz-type-slot-offset 'movitz-funobj-standard-gf 'standard-gf-function)) function) -;;; (setf-movitz-accessor (funcallable-instance movitz-funobj-standard-gf standard-gf-function) -;;; function) (values)) (defun funcallable-instance-function (funcallable-instance) @@ -1679,7 +1676,10 @@ (defmethod print-object ((object class) stream) (print-unreadable-object (object stream :identity nil :type t) - (write (class-name object) :stream stream)) + (write (if (slot-boundp object 'name) + (class-name object) + "[unnamed]") + :stream stream)) object) (defmethod print-object ((object standard-object) stream) @@ -1799,32 +1799,40 @@ (real-gf-mc #'generic-function-method-combination) (real-amsd #'accessor-method-slot-definition)) (with-alternative-fdefinitions - ((slow-method-lookup #'bootstrap-slow-method-lookup) + ((slow-method-lookup + #'bootstrap-slow-method-lookup) (slot-definition-name - (lambda (slot) (bootstrap-slot-definition-access slot 'name))) + (lambda (slot) + (bootstrap-slot-definition-access slot 'name))) (slot-definition-location - (lambda (slot) (bootstrap-slot-definition-access slot 'location))) + (lambda (slot) + (bootstrap-slot-definition-access slot 'location))) (class-slots - (lambda (class) (bootstrap-slot-definition-access class 'effective-slots))) + (lambda (class) + (bootstrap-slot-definition-access class 'effective-slots))) (class-precedence-list (lambda (class) (std-slot-value class 'class-precedence-list))) (method-specializers - (lambda (m) (std-slot-value m 'specializers))) + (lambda (m) + (std-slot-value m 'specializers))) (method-qualifiers - (lambda (m) (std-slot-value m 'qualifiers))) + (lambda (m) + (std-slot-value m 'qualifiers))) (method-function - (lambda (m) (std-slot-value m 'function))) + (lambda (m) + (std-slot-value m 'function))) (generic-function-methods - (lambda (gf) (std-gf-slot-value gf 'methods))) + (lambda (gf) + (std-gf-slot-value gf 'methods))) (generic-function-method-combination - (lambda (gf) (declare (ignore gf)) nil)) + (lambda (gf) + (declare (ignore gf)) nil)) (accessor-method-slot-definition (lambda (method) (std-slot-value method 'slot-definition))) (compute-applicable-methods-using-classes (lambda (gf classes) - ;; (warn "camuc of: ~S" (funobj-name gf)) (with-alternative-fdefinitions ((method-function (lambda (method) @@ -1898,4 +1906,28 @@ (setf (get 'clos-bootstrap 'have-bootstrapped) t) (values)))) +;;; + +(defclass read-only-class (standard-class) + ((instances + :initform (make-hash-table :test 'equal) + :reader read-only-class-instances + ))) + +(defmethod (setf slot-value-using-class) (new-value (class read-only-class) object slot) + (when (slot-boundp-using-class class object slot) + (cerror "Set the slot ~S of read-only object ~S to ~S anyway." + "Trying to set the slot ~S of read-only object ~S to ~S." + (slot-definition-name slot) object new-value)) + (call-next-method)) + +(defmethod make-instance ((class read-only-class) &rest initargs) + (declare (dynamic-extent initargs)) + (let ((defaulted-initargs (compute-defaulted-initargs class initargs))) + (or (gethash defaulted-initargs (read-only-class-instances class)) + (setf (gethash (copy-list defaulted-initargs) + (read-only-class-instances class)) + (apply 'initialize-instance + (apply 'allocate-instance class defaulted-initargs) + defaulted-initargs))))) From ffjeld at common-lisp.net Sun Mar 11 22:43:32 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Sun, 11 Mar 2007 17:43:32 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070311224332.802B712085@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv14875 Modified Files: conditions.lisp Log Message: Have conditions be of metaclass read-only-class. --- /project/movitz/cvsroot/movitz/losp/muerte/conditions.lisp 2006/05/09 19:56:02 1.22 +++ /project/movitz/cvsroot/movitz/losp/muerte/conditions.lisp 2007/03/11 22:43:32 1.23 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Wed Nov 20 15:47:04 2002 ;;;; -;;;; $Id: conditions.lisp,v 1.22 2006/05/09 19:56:02 ffjeld Exp $ +;;;; $Id: conditions.lisp,v 1.23 2007/03/11 22:43:32 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -28,7 +28,7 @@ (defmacro define-condition (name parent-types slot-specs &rest options) `(progn - (defclass ,name ,(or parent-types '(condition)) ,slot-specs) + (defclass ,name ,(or parent-types '(condition)) ,slot-specs (:metaclass read-only-class)) ,@(let ((reporter (cadr (assoc :report options)))) (when reporter `((defmethod print-object ((condition ,name) stream) From ffjeld at common-lisp.net Sun Mar 11 22:43:46 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Sun, 11 Mar 2007 17:43:46 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/lib Message-ID: <20070311224346.3B79A19007@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/lib In directory clnet:/tmp/cvs-serv14937 Modified Files: readline.lisp Log Message: Don't modify condition. --- /project/movitz/cvsroot/movitz/losp/lib/readline.lisp 2005/10/31 09:17:07 1.8 +++ /project/movitz/cvsroot/movitz/losp/lib/readline.lisp 2007/03/11 22:43:46 1.9 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Fri Nov 2 13:58:58 2001 ;;;; -;;;; $Id: readline.lisp,v 1.8 2005/10/31 09:17:07 ffjeld Exp $ +;;;; $Id: readline.lisp,v 1.9 2007/03/11 22:43:46 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -128,15 +128,12 @@ (write-string buffer t :end end) (setf (cursor-x console) (+ cursor-origin pos))) (loop with previous-key-was-tab-p = nil - with keypress-condition = (when *readline-signal-keypresses* - (make-condition 'readline-keypress)) and displayed-completions-p = nil as key = (muerte:read-key console) do (with-saved-excursion (console) - (when keypress-condition - (setf (readline-keypress-key keypress-condition) key) + (when *readline-signal-keypresses* (with-simple-restart (continue "Proceed with interactive READLINE.") - (signal keypress-condition)))) + (signal 'readline-keypress :key key)))) (when (characterp key) (unless (char= key #\tab) (setf previous-key-was-tab-p nil)) From ffjeld at common-lisp.net Mon Mar 12 21:53:40 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Mon, 12 Mar 2007 16:53:40 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070312215340.3267D1100@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv5092 Modified Files: conditions.lisp Log Message: Minor tweaks. --- /project/movitz/cvsroot/movitz/losp/muerte/conditions.lisp 2007/03/11 22:43:32 1.23 +++ /project/movitz/cvsroot/movitz/losp/muerte/conditions.lisp 2007/03/12 21:53:40 1.24 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Wed Nov 20 15:47:04 2002 ;;;; -;;;; $Id: conditions.lisp,v 1.23 2007/03/11 22:43:32 ffjeld Exp $ +;;;; $Id: conditions.lisp,v 1.24 2007/03/12 21:53:40 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -230,7 +230,6 @@ "Signal the condition denoted by a condition designator. Will only make-instance a condition when it is required. Return the condition object, if there was one." - (declare (dynamic-extent arguments)) (let* ((class (etypecase datum (symbol (or (find-class datum nil) @@ -243,14 +242,14 @@ (condition nil) (bos-type *break-on-signals*)) (with-simple-restart (continue "Ignore *break-on-signals*.") - (let ((*break-on-signals* nil)) ; avoid recursive error if *b-o-s* is faulty. + (let ((*break-on-signals* nil)) ; avoid recursive error if *b-o-s* is faulty. (when (typecase bos-type (null nil) (symbol (let ((bos-class (find-class bos-type nil))) (if (not bos-class) (typep (class-prototype-value class) bos-type) - (member bos-class cpl)))) + (member bos-class cpl)))) (list (typep (class-prototype-value class) bos-type)) (t (member bos-type cpl))) @@ -259,7 +258,7 @@ `(funcall ,handler (or condition (setf condition - (coerce-to-condition default-type datum args)))))) + (coerce-to-condition default-type datum args)))))) (let ((*active-condition-handlers* *active-condition-handlers*)) (do () ((null *active-condition-handlers*)) (let ((handlers (pop *active-condition-handlers*))) @@ -270,9 +269,9 @@ (let ((handler-class (find-class handler-type nil))) (when (if (not handler-class) (typep (class-prototype-value class) handler-type) - (progn - (setf (car handler) handler-class) ; XXX memoize this find-class.. - (member handler-class cpl))) + (progn + (setf (car handler) handler-class) ; XXX memoize this find-class.. + (member handler-class cpl))) (invoke-handler (cdr handler))))) (cons (when (typep (class-prototype-value class) handler-type) From ffjeld at common-lisp.net Mon Mar 12 22:50:34 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Mon, 12 Mar 2007 17:50:34 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/lib Message-ID: <20070312225034.68B8A751BA@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/lib In directory clnet:/tmp/cvs-serv14270 Modified Files: threading.lisp Log Message: Save EFLAGS correctly in yield (so that e.g IF is preserved across yield). --- /project/movitz/cvsroot/movitz/losp/lib/threading.lisp 2005/06/10 23:09:14 1.8 +++ /project/movitz/cvsroot/movitz/losp/lib/threading.lisp 2007/03/12 22:50:34 1.9 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Thu Apr 28 08:30:01 2005 ;;;; -;;;; $Id: threading.lisp,v 1.8 2005/06/10 23:09:14 ffjeld Exp $ +;;;; $Id: threading.lisp,v 1.9 2007/03/12 22:50:34 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -179,7 +179,7 @@ (muerte::asm-register :esi)) () "Will not yield to a non-yield frame.") ;; Push eflags for later.. - (setf (memref (decf esp) 0) (eflags)) + (setf (memref (decf esp) 0 :type :unsigned-byte32) (eflags)) ;; Store EBP and ESP so we can get to them after the switch (setf (%run-time-context-slot target-rtc 'muerte::scratch1) ebp (%run-time-context-slot target-rtc 'muerte::scratch2) esp) @@ -194,5 +194,5 @@ (:movw :cx :fs) (:locally (:movl (:edi (:edi-offset scratch1)) :ebp)) (:locally (:movl (:edi (:edi-offset scratch2)) :esp)) - (:popfl))))) + (:popfl))))) From ffjeld at common-lisp.net Tue Mar 13 18:20:59 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Tue, 13 Mar 2007 13:20:59 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070313182059.D5F0512087@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv15051 Removed Files: slime-movitz.el Log Message: Removed in favor of ide/movitz-slime.el From ffjeld at common-lisp.net Tue Mar 13 20:40:09 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Tue, 13 Mar 2007 15:40:09 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070313204009.3704A34077@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv20593 Modified Files: image.lisp Log Message: Make NIL the default value for *image*. --- /project/movitz/cvsroot/movitz/image.lisp 2007/03/01 17:49:30 1.110 +++ /project/movitz/cvsroot/movitz/image.lisp 2007/03/13 20:40:06 1.111 @@ -9,7 +9,7 @@ ;;;; Created at: Sun Oct 22 00:22:43 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: image.lisp,v 1.110 2007/03/01 17:49:30 ffjeld Exp $ +;;;; $Id: image.lisp,v 1.111 2007/03/13 20:40:06 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -779,9 +779,9 @@ :start-address start-address :movitz-features '(:movitz) :function-code-sizes - (if (and (boundp '*image*) *image*) + (if *image* (copy-hash-table (function-code-sizes *image*)) - (make-hash-table :test #'equal)) + (make-hash-table :test #'equal)) init-args))) (setf (image-nil-word *image*) (+ 5 (- (slot-offset 'movitz-run-time-context 'null-symbol) @@ -824,7 +824,7 @@ (when init-file (movitz-compile-file init-file)) *image*) - *i* (when (boundp '*image*) *image*)) + *i* *image*) (when gc #+allegro (setf (sys:gsgc-parameter :generation-spread) 8) #+allegro (excl:gc :tenure) From ffjeld at common-lisp.net Tue Mar 13 20:40:10 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Tue, 13 Mar 2007 15:40:10 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070313204010.E8ED63C010@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv20913 Modified Files: movitz.lisp Log Message: Make NIL the default value for *image*. --- /project/movitz/cvsroot/movitz/movitz.lisp 2006/04/10 11:45:36 1.11 +++ /project/movitz/cvsroot/movitz/movitz.lisp 2007/03/13 20:40:10 1.12 @@ -9,7 +9,7 @@ ;;;; Created at: Mon Oct 9 20:52:58 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: movitz.lisp,v 1.11 2006/04/10 11:45:36 ffjeld Exp $ +;;;; $Id: movitz.lisp,v 1.12 2007/03/13 20:40:10 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -18,7 +18,7 @@ (defvar *i* nil) ; These hold the previous built images, (defvar *ii* nil) ; for interactive use. -(defvar *image*) +(defvar *image* nil) (define-symbol-macro *movitz-nil* (image-nil-object *image*)) From ffjeld at common-lisp.net Tue Mar 13 20:42:11 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Tue, 13 Mar 2007 15:42:11 -0500 (EST) Subject: [movitz-cvs] CVS movitz/ide Message-ID: <20070313204211.D4B1134079@common-lisp.net> Update of /project/movitz/cvsroot/movitz/ide In directory clnet:/tmp/cvs-serv22257 Modified Files: ide.lisp Log Message: Make initialization of the SLIME IDE more streamlined. --- /project/movitz/cvsroot/movitz/ide/ide.lisp 2007/03/03 18:34:53 1.5 +++ /project/movitz/cvsroot/movitz/ide/ide.lisp 2007/03/13 20:42:11 1.6 @@ -19,47 +19,59 @@ (in-package #:movitz.ide) +(defmacro with-image ((&optional (image-form 'movitz:*image*)) &body body) + `(let ((movitz:*image* ,image-form)) + (check-type movitz:*image* movitz::movitz-image "a Movitz image") + , at body)) + (defun compile-movitz-file (filename) "Compile FILENAME as Movitz source." - (movitz:movitz-compile-file filename)) + (with-image () + (movitz:movitz-compile-file filename))) (defun compile-defun (source package-printname) "Compile the string SOURCE as Movitz source." - (with-input-from-string (stream source) - (movitz:movitz-compile-stream stream :path "movitz-ide-toplevel" - :package (get-package package-printname)))) + (with-image () + (with-input-from-string (stream source) + (movitz:movitz-compile-stream stream :path "movitz-ide-toplevel" + :package (get-package package-printname))))) (defun dump-image (filename) "Dump the current image into FILENAME." - (movitz:dump-image :path filename)) + (with-image () + (movitz:dump-image :path filename))) ;;; slime-friendly entry point. (defun movitz-disassemble (printname package-printname) "Return the disassembly of SYMBOL-NAME's function as a string." - (with-output-to-string (*standard-output*) - (movitz:movitz-disassemble (get-sexpr printname - (get-package package-printname))))) + (with-image () + (with-output-to-string (*standard-output*) + (movitz:movitz-disassemble (get-sexpr printname + (get-package package-printname)))))) (defun movitz-disassemble-method (gf-name lambda-list qualifiers package-name) - (let ((package (get-package package-name))) - (with-output-to-string (*standard-output*) - (movitz:movitz-disassemble-method (get-sexpr gf-name package) - (get-sexpr lambda-list package) - (mapcar #'read-from-string qualifiers))))) + (with-image () + (let ((package (get-package package-name))) + (with-output-to-string (*standard-output*) + (movitz:movitz-disassemble-method (get-sexpr gf-name package) + (get-sexpr lambda-list package) + (mapcar #'read-from-string qualifiers)))))) (defun movitz-arglist (name package-name) - (let* ((package (get-package package-name)) - (funobj (movitz::movitz-env-named-function (get-sexpr name package)))) - (if (not funobj) - "not defined" - (let ((*package* package)) - (princ-to-string (movitz::movitz-print (movitz::movitz-funobj-lambda-list funobj))))))) + (with-image () + (let* ((package (get-package package-name)) + (funobj (movitz::movitz-env-named-function (get-sexpr name package)))) + (if (not funobj) + "not defined" + (let ((*package* package)) + (princ-to-string (movitz::movitz-print (movitz::movitz-funobj-lambda-list funobj)))))))) (defun movitz-macroexpand (string package-name) - (let* ((*package* (get-package package-name)) - (form (get-sexpr string *package*)) - (expansion (movitz::movitz-macroexpand-1 form))) - (princ-to-string (movitz::movitz-print expansion)))) + (with-image () + (let* ((*package* (get-package package-name)) + (form (get-sexpr string *package*)) + (expansion (movitz::movitz-macroexpand-1 form))) + (princ-to-string (movitz::movitz-print expansion))))) From ffjeld at common-lisp.net Tue Mar 13 20:42:16 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Tue, 13 Mar 2007 15:42:16 -0500 (EST) Subject: [movitz-cvs] CVS movitz/ide Message-ID: <20070313204216.037D13C010@common-lisp.net> Update of /project/movitz/cvsroot/movitz/ide In directory clnet:/tmp/cvs-serv22271 Modified Files: movitz-slime.el Log Message: Make initialization of the SLIME IDE more streamlined. --- /project/movitz/cvsroot/movitz/ide/movitz-slime.el 2007/03/07 20:53:12 1.4 +++ /project/movitz/cvsroot/movitz/ide/movitz-slime.el 2007/03/13 20:42:13 1.5 @@ -16,19 +16,38 @@ (require 'slime) (require 'cl) -;;;; Minor-mode +(eval-and-compile + (defvar movitz-slime-path + (let ((path (or (locate-library "movitz-slime") load-file-name))) + (when path + (file-name-directory path))) + "Directory containing movitz sources. +This is used to load the supporting Common Lisp library, ide.lisp. +The default value is automatically computed from the location of the +Emacs Lisp package.")) ;; You should set this to something more convenient, e.g. "\C-cm" (defvar movitz-command-prefix "\C-c\C-v" "The initial key prefixf or movitz commands.") (define-minor-mode movitz-mode - "\\{movitz-mode-map}" - nil - " Movitz" + "\\{movitz-mode-map} +Interface Movitz via SLIME." + :init-value nil + :lighter " Movitz" ;; Bogus keymap to have movitz-mode-map initialized. We'll fill in ;; the real bindings manually. - `((,movitz-command-prefix . undefined))) + :keymap `((,movitz-command-prefix . undefined)) + (cond + ((not movitz-mode)) + ((not (slime-connected-p)) + (message "Movitz-mode: SLIME is not connected.")) + ((slime-eval '(cl:and (cl:find-package :movitz.ide) t))) + ((not (slime-eval '(cl:and (cl:find-package :movitz) t))) + (message "Movitz-mode: The Movitz package is not loaded.")) + (t (slime-eval-async + `(cl:progn (cl:load (cl:compile-file ,(concat movitz-slime-path "ide.lisp"))) + nil))))) (defvar movitz-mode-commands-map nil "Keymap for movitz-mode commands. @@ -61,8 +80,6 @@ (define-key movitz-mode-map "\r" 'newline-and-indent) (define-key movitz-mode-map " " 'self-insert-command)) -(movitz-init-command-keymap) - (defun movitz-auto-mode-setup () "Do some horrible things with regexps to auto-enable movitz-mode. You can call this function from your init file, but first read what it @@ -72,7 +89,7 @@ (when (string-match ".*/movitz/losp/.*\\.lisp$" (buffer-file-name)) (movitz-mode 1))))) -(movitz-auto-mode-setup) + ;;;; Commands @@ -267,4 +284,8 @@ (put (car el) 'common-lisp-indent-function (if (symbolp (cdr el)) (get (cdr el) 'common-lisp-indent-function) - (car (cdr el)))))) \ No newline at end of file + (car (cdr el)))))) + +(movitz-auto-mode-setup) +(movitz-init-command-keymap) + From ffjeld at common-lisp.net Tue Mar 13 20:42:45 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Tue, 13 Mar 2007 15:42:45 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070313204245.376B23C04B@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv22457 Modified Files: los-closette-compiler.lisp Log Message: Remove debug statement. --- /project/movitz/cvsroot/movitz/losp/muerte/los-closette-compiler.lisp 2007/03/11 22:43:10 1.20 +++ /project/movitz/cvsroot/movitz/losp/muerte/los-closette-compiler.lisp 2007/03/13 20:42:42 1.21 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Thu Aug 29 13:15:11 2002 ;;;; -;;;; $Id: los-closette-compiler.lisp,v 1.20 2007/03/11 22:43:10 ffjeld Exp $ +;;;; $Id: los-closette-compiler.lisp,v 1.21 2007/03/13 20:42:42 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -693,10 +693,6 @@ (slot-initform (muerte::translate-program (slot-definition-initform slot) '#:muerte.cl '#:cl))) (when slot-initform - (warn "init slot: ~S: ~S => ~S" - slot-name - slot-initform - (movitz::eval-form slot-initform)) (setf (movitz-slot-value class slot-name) (movitz::eval-form slot-initform))))) (std-after-initialization-for-classes class :direct-slots direct-slots From ffjeld at common-lisp.net Tue Mar 13 21:56:15 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Tue, 13 Mar 2007 16:56:15 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/x86-pc Message-ID: <20070313215615.E771D7E0F7@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/x86-pc In directory clnet:/tmp/cvs-serv1669 Modified Files: vga.lisp Log Message: Patch from Martin Bealby: VGA graphics, with a neat splash. --- /project/movitz/cvsroot/movitz/losp/x86-pc/vga.lisp 2004/11/14 22:58:33 1.6 +++ /project/movitz/cvsroot/movitz/losp/x86-pc/vga.lisp 2007/03/13 21:56:15 1.7 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Tue Sep 25 14:08:20 2001 ;;;; -;;;; $Id: vga.lisp,v 1.6 2004/11/14 22:58:33 ffjeld Exp $ +;;;; $Id: vga.lisp,v 1.7 2007/03/13 21:56:15 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -207,6 +207,42 @@ #x38 #x39 #x3A #x3B #x3C #x3D #x3E #x3F #x0C #x00 #x0F #x08 #x00))) +(defconstant +vga-state-320x200x256+ + '((:misc . #x63) + (:sequencer + #x03 #x01 #x0F #x00 #x0E) + (:crtc + #x5F #x4F #x50 #x82 #x54 #x80 #xBF #x1F + #x00 #x41 #x00 #x00 #x00 #x00 #x00 #x00 + #x9C #x0E #x8F #x28 #x40 #x98 #xB9 #xA3 + #xFF) + (:graphics + #x00 #x00 #x00 #x00 #x00 #x40 #x05 #x0F + #xFF) + (:attribute + #x00 #x01 #x02 #x03 #x04 #x05 #x06 #x07 + #x08 #x09 #x0A #x0B #x0C #x0D #x0E #x0F + #x41 #x00 #x0F #x00 #x00))) + + +;; 640x480 in testing, functions not available yet. +(defconstant +vga-state-640x480x16+ + '((:misc . #xE3) + (:sequencer + #x03 #x01 #x08 #x00 #x06) + (:crtc + #x5F #x4F #x50 #x82 #x54 #x80 #x0B #x3E + #x00 #x40 #x00 #x00 #x00 #x00 #x00 #x00 + #xEA #x0C #xDF #x28 #x00 #xE7 #x04 #xE3 + #xFF) + (:graphics + #x00 #x00 #x00 #x00 #x03 #x00 #x05 #x0F + #xFF) + (:attribute + #x00 #x01 #x02 #x03 #x04 #x05 #x14 #x07 + #x38 #x39 #x3A #x3B #x3C #x3D #x3E #x3F + #x01 #x00 #x0F #x00 #x00))) + (defconstant +vga-misc-read+ #x0c) (defconstant +vga-misc-write+ #x02) @@ -886,4 +922,4167 @@ #x00 #x00 #x00 #x00 #x7C #x7C #x7C #x7C #x7C #x7C #x7C #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 }) +(defconstant +vga-g-splash+ +#{ #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x00 #x00 #x00 #x00 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x00 #x00 #x00 #x00 #x00 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x00 #x00 #x04 #x04 #x00 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x00 #x00 #x04 #x04 #x04 #x00 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 + #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 + #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 + #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 + #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 + #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 + #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x00 #x00 #x04 #x04 #x00 #x00 #x01 #x01 #x07 #x07 #x07 #x01 #x01 #x01 #x01 + #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x01 + #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 #x01 + #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x01 #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 #x01 + #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x01 #x01 #x07 #x07 #x07 #x01 #x07 #x07 #x07 + #x07 #x07 #x01 #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 + #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 [3822 lines skipped] From ffjeld at common-lisp.net Wed Mar 14 20:42:48 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Wed, 14 Mar 2007 15:42:48 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/x86-pc Message-ID: <20070314204248.CF5EB74386@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/x86-pc In directory clnet:/tmp/cvs-serv17970 Modified Files: keyboard.lisp Log Message: Improved keyboard driver, including dvorak support. Patch from Shawn Betts. --- /project/movitz/cvsroot/movitz/losp/x86-pc/keyboard.lisp 2004/12/10 12:48:34 1.6 +++ /project/movitz/cvsroot/movitz/losp/x86-pc/keyboard.lisp 2007/03/14 20:42:48 1.7 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Mon Sep 24 16:04:12 2001 ;;;; -;;;; $Id: keyboard.lisp,v 1.6 2004/12/10 12:48:34 ffjeld Exp $ +;;;; $Id: keyboard.lisp,v 1.7 2007/03/14 20:42:48 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -25,57 +25,117 @@ read-keypress poll-key set-leds - cpu-reset)) + cpu-reset + set-kbd-layout)) (in-package muerte.x86-pc.keyboard) -(defvar *scan-codes-shift* - #(#\null nil #\! #\@ #\# #\$ #\% #\^ ; #x00 - #\& #\* #\( #\) #\_ #\+ nil nil ; #x08 - #\Q #\W #\E #\R #\T #\Y #\U #\I ; #x10 - #\O #\P #\{ #\} #\newline nil #\A #\S ; #x18 - - #\D #\F #\G #\H #\J #\K #\L #\: ; #x20 - #\" #\~ nil #\| #\Z #\X #\C #\V ; #x28 - #\B #\N #\M #\< #\> #\? nil nil ; #x30 - nil nil nil nil nil nil nil nil ; #x38 - nil nil nil nil nil :pause nil nil)) ; #x40 - -(defparameter *scan-codes* - #(#\null #\escape #\1 #\2 #\3 #\4 #\5 #\6 ; #x00 - #\7 #\8 #\9 #\0 #\- #\= #\backspace #\tab ; #x08 - #\q #\w #\e #\r #\t #\y #\u #\i ; #x10 - #\o #\p #\[ #\] #\newline :ctrl-left #\a #\s ; #x18 - - #\d #\f #\g #\h #\j #\k #\l #\; ; #x20 - #\' #\` :shift-left #\\ #\z #\x #\c #\v ; #x28 - #\b #\n #\m #\, #\. #\/ :shift-right #\escape ; #x30 - :alt-left #\space :caps-lock :f1 :f2 :f3 :f4 :f5 ; #x38 - - :f6 :f7 :f8 :f9 :f10 :break :scroll-lock nil ; #x40 - nil nil nil nil nil nil nil nil ; #x48 - nil :kp-ins nil :kp-del nil nil nil :f11 ; #x50 - :f12 nil nil nil nil nil nil nil ; #x58 + +(defvar *layouts* + '((:qwerty + #(#\null #\escape #\1 #\2 #\3 #\4 #\5 #\6 ; #x00 + #\7 #\8 #\9 #\0 #\- #\= #\backspace #\tab ; #x08 + #\q #\w #\e #\r #\t #\y #\u #\i ; #x10 + #\o #\p #\[ #\] #\newline :ctrl-left #\a #\s ; #x18 + + #\d #\f #\g #\h #\j #\k #\l #\; ; #x20 + #\' #\` :shift-left #\\ #\z #\x #\c #\v ; #x28 + #\b #\n #\m #\, #\. #\/ :shift-right #\escape ; #x30 + :alt-left #\space :caps-lock :f1 :f2 :f3 :f4 :f5 ; #x38 + + :f6 :f7 :f8 :f9 :f10 :break :scroll-lock nil ; #x40 + nil nil nil nil nil nil nil nil ; #x48 + nil :kp-ins nil :kp-del nil nil nil :f11 ; #x50 + :f12 nil nil nil nil nil nil nil ; #x58 - nil nil nil nil nil nil nil nil ; #x60 - nil nil nil nil nil nil nil nil ; #x68 - nil nil nil nil nil nil nil nil ; #x70 - nil nil nil nil nil nil nil nil ; #x78 - - nil nil nil nil nil nil nil nil ; #x80 - nil nil nil nil nil nil nil nil ; #x88 - nil nil nil nil :ctrl-right nil nil nil ; #x90 - nil nil nil nil nil :ctrl-right nil nil ; #x98 + nil nil nil nil nil nil nil nil ; #x60 + nil nil nil nil nil nil nil nil ; #x68 + nil nil nil nil nil nil nil nil ; #x70 + nil nil nil nil nil nil nil nil ; #x78 + + nil nil nil nil nil nil nil nil ; #x80 + nil nil nil nil nil nil nil nil ; #x88 + nil nil nil nil :ctrl-right nil nil nil ; #x90 + nil nil nil nil nil :ctrl-right nil nil ; #x98 - nil nil nil nil nil nil nil nil ; #xa0 - nil nil nil nil nil nil nil nil ; #xa8 - nil nil nil nil nil nil nil nil ; #xb0 - :alt-right nil nil nil nil nil nil nil ; #xb8 - - nil nil nil nil nil nil nil :home ; #xc0 - :up :page-up nil :left nil :right nil :end ; #xc8 - :down :page-down :insert nil #+ignore #\delete nil nil nil nil nil ; #xd0 - :alt-right nil nil nil :win :menu nil nil)) ; #xd8 + nil nil nil nil nil nil nil nil ; #xa0 + nil nil nil nil nil nil nil nil ; #xa8 + nil nil nil nil nil nil nil nil ; #xb0 + :alt-right nil nil nil nil nil nil nil ; #xb8 + + nil nil nil nil nil nil nil :home ; #xc0 + :up :page-up nil :left nil :right nil :end ; #xc8 + :down :page-down :insert nil #+ignore #\delete nil nil nil nil nil ; #xd0 + :alt-right nil nil nil :win :menu nil nil) ; #x40 + #(#\null nil #\! #\@ #\# #\$ #\% #\^ ; #x00 + #\& #\* #\( #\) #\_ #\+ nil nil ; #x08 + #\Q #\W #\E #\R #\T #\Y #\U #\I ; #x10 + #\O #\P #\{ #\} #\newline nil #\A #\S ; #x18 + + #\D #\F #\G #\H #\J #\K #\L #\: ; #x20 + #\" #\~ nil #\| #\Z #\X #\C #\V ; #x28 + #\B #\N #\M #\< #\> #\? nil nil ; #x30 + nil nil nil nil nil nil nil nil ; #x38 + nil nil nil nil nil :pause nil nil)) ; #xd8 + (:dvorak + #(#\null #\escape #\1 #\2 #\3 #\4 #\5 #\6 ; #x00 + #\7 #\8 #\9 #\0 #\[ #\] #\backspace #\tab ; #x08 + #\' #\, #\. #\p #\y #\f #\g #\c ; #x10 + #\r #\l #\/ #\= #\newline :ctrl-left #\a #\o ; #x18 + + #\e #\u #\i #\d #\h #\t #\n #\s ; #x20 + #\- #\` :shift-left #\\ #\; #\q #\j #\k ; #x28 + #\x #\b #\m #\w #\v #\z :shift-right #\escape ; #x30 + :alt-left #\space :caps-lock :f1 :f2 :f3 :f4 :f5 ; #x38 + + :f6 :f7 :f8 :f9 :f10 :break :scroll-lock nil ; #x40 + nil nil nil nil nil nil nil nil ; #x48 + nil :kp-ins nil :kp-del nil nil nil :f11 ; #x50 + :f12 nil nil nil nil nil nil nil ; #x58 + + nil nil nil nil nil nil nil nil ; #x60 + nil nil nil nil nil nil nil nil ; #x68 + nil nil nil nil nil nil nil nil ; #x70 + nil nil nil nil nil nil nil nil ; #x78 + + nil nil nil nil nil nil nil nil ; #x80 + nil nil nil nil nil nil nil nil ; #x88 + nil nil nil nil :ctrl-right nil nil nil ; #x90 + nil nil nil nil nil :ctrl-right nil nil ; #x98 + + nil nil nil nil nil nil nil nil ; #xa0 + nil nil nil nil nil nil nil nil ; #xa8 + nil nil nil nil nil nil nil nil ; #xb0 + :alt-right nil nil nil nil nil nil nil ; #xb8 + + nil nil nil nil nil nil nil :home ; #xc0 + :up :page-up nil :left nil :right nil :end ; #xc8 + :down :page-down :insert nil #+ignore #\delete nil nil nil nil nil ; #xd0 + :alt-right nil nil nil :win :menu nil nil) ; #x40 + #(#\null nil #\! #\@ #\# #\$ #\% #\^ ; #x00 + #\& #\* #\( #\) #\{ #\} nil nil ; #x08 + #\" #\< #\> #\P #\Y #\F #\G #\C ; #x10 + #\R #\L #\? #\+ #\newline nil #\A #\O ; #x18 + + #\E #\U #\I #\D #\H #\T #\N #\S ; #x20 + #\_ #\~ nil #\| #\: #\Q #\J #\K ; #x28 + #\X #\B #\M #\W #\V #\Z nil nil ; #x30 + nil nil nil nil nil nil nil nil ; #x38 + nil nil nil nil nil :pause nil nil))) ; #xd8 + "An assoc of all defined keyboard layouts.") + +;; default to qwerty +(defparameter *scan-codes* (second (assoc :qwerty *layouts*))) +(defparameter *scan-codes-shift* (third (assoc :qwerty *layouts*))) + +(defun set-kbd-layout (layout-id) + "Set the keyboard layout to one provided in *layouts*." + (let* ((layout (or (assoc layout-id *layouts*) + (error "Ther is no layout named ~S defined." layout-id))) + (normal (second layout)) + (shifted (third layout))) + (setf *scan-codes* normal + *scan-codes-shift* shifted))) (defun lowlevel-event-p () (logbitp 0 (io-port #x64 :unsigned-byte8))) @@ -149,10 +209,10 @@ (defun decode-key-code (key-code qualifiers) (or (and (logbitp +qualifier-shift+ qualifiers) - (< -1 key-code (length *scan-codes-shift*)) - (aref *scan-codes-shift* key-code)) + (< -1 key-code (length *scan-codes-shift*)) + (aref *scan-codes-shift* key-code)) (and (< -1 key-code (length *scan-codes*)) - (aref *scan-codes* key-code)))) + (aref *scan-codes* key-code)))) ;;; (< -1 key-code (length *scan-codes*))) (defun get-key () From ffjeld at common-lisp.net Wed Mar 14 20:57:37 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Wed, 14 Mar 2007 15:57:37 -0500 (EST) Subject: [movitz-cvs] CVS movitz/doc Message-ID: <20070314205737.4CABC1B@common-lisp.net> Update of /project/movitz/cvsroot/movitz/doc In directory clnet:/tmp/cvs-serv20038 Modified Files: ChangeLog Log Message: *** empty log message *** --- /project/movitz/cvsroot/movitz/doc/ChangeLog 2005/12/02 22:06:49 1.11 +++ /project/movitz/cvsroot/movitz/doc/ChangeLog 2007/03/14 20:57:37 1.12 @@ -1,3 +1,29 @@ +2007-03-14 Frode Vatvedt Fjeld + + * movitz/losp/x86-pc/keyboard.lisp: Patch from Shawn Betts + improves the keyboard driver and adds dvorak support. + + * movitz/losp/x86-pc/vga.lisp: Patch from Martin Bealby adds some + simple VGA graphics capabilities, and a neat splash image. + + * movitz/bootblock.lisp: Added detection of floppy geometry in the + bootloader. This was prompted by the fact that Qemu appears to do + some weird auto-detection of the floppy geometry based on the + floppy image's size. However, it should also mean that movitz can + now be booted from a "real" 5 1/4' floppy should you ever find + one, and more importantly, probably also 2.88-MB floppies as + supported by bochs and qemu, and I think also some actual hardware + drives. + + * movitz/compiler.lisp: Much improved keyword argument parsing. It + is now faster, smaller in code-size, and more (fully?) ANSI + compliant. + + * doc/ChangeLog: Things are not moving quite as slowly as might be + suggested by the lack of activity in this file. The last few + weeks, there has been quite a bit of activity. I'll try once again + to remember to update this ChangeLog. + 2005-12-02 Frode Vatvedt Fjeld * Uploaded a new los0.img. From ffjeld at common-lisp.net Thu Mar 15 16:03:13 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Thu, 15 Mar 2007 11:03:13 -0500 (EST) Subject: [movitz-cvs] CVS public_html Message-ID: <20070315160313.ED4584D05F@common-lisp.net> Update of /project/movitz/cvsroot/public_html In directory clnet:/tmp/cvs-serv23906 Modified Files: index.html Log Message: *** empty log message *** --- /project/movitz/cvsroot/public_html/index.html 2007/01/03 10:49:49 1.29 +++ /project/movitz/cvsroot/public_html/index.html 2007/03/15 16:03:13 1.30 @@ -13,8 +13,35 @@

Movitz: a Common Lisp x86 development platform

- +

Most recent news

+
+2007-03-14  Frode Vatvedt Fjeld  
+
+	* movitz/losp/x86-pc/keyboard.lisp: Patch from Shawn Betts
+	improves the keyboard driver and adds dvorak support.
+
+	* movitz/losp/x86-pc/vga.lisp: Patch from Martin Bealby adds some
+	simple VGA graphics capabilities, and a neat splash image.
+
+	* movitz/bootblock.lisp: Added detection of floppy geometry in the
+	bootloader. This was prompted by the fact that Qemu appears to do
+	some weird auto-detection of the floppy geometry based on the
+	floppy image's size. However, it should also mean that movitz can
+	now be booted from a "real" 5 1/4' floppy should you ever find
+	one, and more importantly, probably also 2.88-MB floppies as
+	supported by bochs and qemu, and I think also some actual hardware
+	drives.
+
+	* movitz/compiler.lisp: Much improved keyword argument parsing. It
+	is now faster, smaller in code-size, and more (fully?) ANSI
+	compliant.
+
+	* doc/ChangeLog: Things are not moving quite as slowly as might be
+	suggested by the lack of activity in this file. The last few
+	weeks, there has been quite a bit of activity. I'll try once again
+	to remember to update this ChangeLog.
 
+ 

Introduction

The Movitz system aspires to be an implementation of ANSI Common From ffjeld at common-lisp.net Thu Mar 15 16:10:21 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Thu, 15 Mar 2007 11:10:21 -0500 (EST) Subject: [movitz-cvs] CVS public_html Message-ID: <20070315161021.C386932032@common-lisp.net> Update of /project/movitz/cvsroot/public_html In directory clnet:/tmp/cvs-serv25150 Modified Files: ChangeLog Log Message: Let's make do with /one/ ChangeLog. --- /project/movitz/cvsroot/public_html/ChangeLog 2005/11/12 21:16:48 1.9 +++ /project/movitz/cvsroot/public_html/ChangeLog 2007/03/15 16:10:21 1.10 @@ -1,3 +1,39 @@ +2007-03-14 Frode Vatvedt Fjeld + + * movitz/losp/x86-pc/keyboard.lisp: Patch from Shawn Betts + improves the keyboard driver and adds dvorak support. + + * movitz/losp/x86-pc/vga.lisp: Patch from Martin Bealby adds some + simple VGA graphics capabilities, and a neat splash image. + + * movitz/bootblock.lisp: Added detection of floppy geometry in the + bootloader. This was prompted by the fact that Qemu appears to do + some weird auto-detection of the floppy geometry based on the + floppy image's size. However, it should also mean that movitz can + now be booted from a "real" 5 1/4' floppy should you ever find + one, and more importantly, probably also 2.88-MB floppies as + supported by bochs and qemu, and I think also some actual hardware + drives. + + * movitz/compiler.lisp: Much improved keyword argument parsing. It + is now faster, smaller in code-size, and more (fully?) ANSI + compliant. + + * doc/ChangeLog: Things are not moving quite as slowly as might be + suggested by the lack of activity in this file. The last few + weeks, there has been quite a bit of activity. I'll try once again + to remember to update this ChangeLog. + +2005-12-02 Frode Vatvedt Fjeld + + * Uploaded a new los0.img. + +2005-11-02 Frode Vatvedt Fjeld + + * Fixed some aspects of the REPL code so that it will run in the + default bare-bones environment that a new thread gets. This makes + it more convenient to fiddle with threading. + 2005-10-31 Frode Vatvedt Fjeld * Fixed threading to work, in the sense that the REPL code will From ffjeld at common-lisp.net Thu Mar 15 16:11:17 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Thu, 15 Mar 2007 11:11:17 -0500 (EST) Subject: [movitz-cvs] CVS movitz/doc Message-ID: <20070315161117.BD4187D163@common-lisp.net> Update of /project/movitz/cvsroot/movitz/doc In directory clnet:/tmp/cvs-serv25277 Modified Files: ideas.txt Removed Files: ChangeLog Log Message: Move ChangeLog to public_html. --- /project/movitz/cvsroot/movitz/doc/ideas.txt 2004/02/18 11:18:31 1.3 +++ /project/movitz/cvsroot/movitz/doc/ideas.txt 2007/03/15 16:11:17 1.4 @@ -10,10 +10,16 @@ ## Author: Frode Vatvedt Fjeld ## Created at: Fri Dec 12 19:19:39 2003 ## -## $Id: ideas.txt,v 1.3 2004/02/18 11:18:31 ffjeld Exp $ +## $Id: ideas.txt,v 1.4 2007/03/15 16:11:17 ffjeld Exp $ ## ###################################################################### +** Symbols and global variables + + - I'm starting to suspect that there should be no global + symbol-value cell. I don't think they're required, and perhaps + there's really no scenario where they're the adequate solution. + ** Method dispatch caching - Can we make the cache per caller funobj? This should be possible From ffjeld at common-lisp.net Fri Mar 16 17:39:27 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Fri, 16 Mar 2007 12:39:27 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070316173927.CFB066A03C@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv11805 Modified Files: bootblock.lisp Log Message: Be more supportive of floppy geometries other than 1.44 MB. --- /project/movitz/cvsroot/movitz/bootblock.lisp 2007/03/11 22:40:16 1.12 +++ /project/movitz/cvsroot/movitz/bootblock.lisp 2007/03/16 17:39:27 1.13 @@ -9,7 +9,7 @@ ;;;; Created at: Mon Oct 9 20:47:19 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: bootblock.lisp,v 1.12 2007/03/11 22:40:16 ffjeld Exp $ +;;;; $Id: bootblock.lisp,v 1.13 2007/03/16 17:39:27 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -26,6 +26,7 @@ *bootblock-build-file*) 0)) +(defvar *floppy-size* (* 512 18 2 80)) (defun make-segment-descriptor-byte (&rest descriptor-args) (list (complex (binary-types::bitfield-compute-numeric-value @@ -82,8 +83,6 @@ (let* ((first-sector (1+ skip-sectors)) (last-sector (+ first-sector (ceiling image-size +sector-size+))) (read-buffer-segment (floor +read-buffer+ #x10))) - (assert (<= last-sector (* 2 18 80)) () - "Image too large for 1.44 floppy geometry.") (ia-x86:read-proglist `( (:jmp (:pc+ 0)) ; some BIOSes might check for this. @@ -402,12 +401,14 @@ (defun make-bootblock (image-size load-address call-address &key (skip-sectors 0) (include-records)) - (let ((floppy-room (- (* 512 18 2 80) 512))) ; Size of floppy minus the bootloader. - (if (> image-size floppy-room) - (error "The image is ~D bytes too big to fit on a floppy." - (- image-size floppy-room)) - (format t "~&;; Bootloader has room for ~,1F KB more." - (/ (- floppy-room image-size) 1024)))) + (when *floppy-size* + (let ((floppy-room (- *floppy-size* 512))) ; Size of floppy minus the bootloader. + (if (> image-size floppy-room) + (warn "The image is ~D bytes too big to fit on a ~,2F MB floppy." + (- image-size floppy-room) + (/ *floppy-size* (* 1024 1000))) + (format t "~&;; Bootloader has room for ~,1F KB more." + (/ (- floppy-room image-size) 1024))))) (multiple-value-bind (bios-loader bb-symtab) (ia-x86:proglist-encode :octet-vector :16-bit #x7c00 (mkasm16-bios-bootloader image-size load-address skip-sectors)) From ffjeld at common-lisp.net Fri Mar 16 17:40:43 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Fri, 16 Mar 2007 12:40:43 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070316174043.4488932033@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv13497 Modified Files: image.lisp Log Message: Add qemu-align-p argument to dump-image. When true, pad (floppy) image such that QEMU's (rather stupid) floppy geometry auto-detection will work. --- /project/movitz/cvsroot/movitz/image.lisp 2007/03/13 20:40:06 1.111 +++ /project/movitz/cvsroot/movitz/image.lisp 2007/03/16 17:40:43 1.112 @@ -9,7 +9,7 @@ ;;;; Created at: Sun Oct 22 00:22:43 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: image.lisp,v 1.111 2007/03/13 20:40:06 ffjeld Exp $ +;;;; $Id: image.lisp,v 1.112 2007/03/16 17:40:43 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -843,7 +843,7 @@ (values)) (defun dump-image (&key (path *default-image-file*) ((:image *image*) *image*) - (multiboot-p t) ignore-dump-count) + (multiboot-p t) ignore-dump-count (qemu-align-p t)) "When is true, include a MultiBoot-compliant header in the image." (when (and (not ignore-dump-count) (= 0 (dump-count *image*))) @@ -934,7 +934,7 @@ (warn "non-used setf: ~S" v))) ;; symbol plists (loop for (symbol plist) on (movitz-environment-plists *movitz-global-environment*) by #'cddr - ;; do (warn "sp: ~S ~S" symbol plist) + ;; do (warn "sp: ~S ~S" symbol plist) do (let ((x (movitz-read symbol))) (typecase x (movitz-null) @@ -974,9 +974,24 @@ (image-end (file-position stream)) (kernel-size (- image-end image-start))) (format t "~&;; Kernel size: ~D octets.~%" kernel-size) - (unless (zerop (mod image-end 512)) ; Ensure image is multiple of 512 octets - (set-file-position stream (+ image-end (- 511 (mod image-end 512))) 'pad-image-tail) - (write-byte #x0 stream)) + (cond + (qemu-align-p + ;; QEMU is rather stupid about "auto-detecting" floppy geometries. + (loop for qemu-geo in '(320 360 640 720 720 820 840 1440 1440 1600 1640 1660 1760 2080 2240 2400 + 2880 2952 2988 3200 3200 3360 3444 3486 3520 3680 3840 5760 6240 6400 7040 7680) + as qemu-size = (* qemu-geo 512) + do (when (>= qemu-size image-end) + (set-file-position stream (1- qemu-size) 'pad-image-tail) + (write-byte #x0 stream) + (return)) + finally + (cerror "Never mind, dump the image." + "No matching QEMU floppy geometry for size ~,2F MB." (/ image-end (* 1024 1024))))) + (t (let ((align-image-size 512)) ; Ensure image is multiple of x octets + (unless (zerop (mod image-end align-image-size)) + (set-file-position stream (+ image-end (- (1- align-image-size) (mod image-end 512))) + 'pad-image-tail) + (write-byte #x0 stream))))) (format t "~&;; Image file size: ~D octets.~%" image-end) ;; Write simple stage1 bootblock into sector 0.. (format t "~&;; Dump count: ~D." (incf (dump-count *image*))) From ffjeld at common-lisp.net Fri Mar 16 17:41:11 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Fri, 16 Mar 2007 12:41:11 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070316174111.25C206A03C@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv13546 Modified Files: ratios.lisp Log Message: Add some faux constants. --- /project/movitz/cvsroot/movitz/losp/muerte/ratios.lisp 2004/09/22 17:52:08 1.7 +++ /project/movitz/cvsroot/movitz/losp/muerte/ratios.lisp 2007/03/16 17:41:11 1.8 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Tue Jul 20 00:39:59 2004 ;;;; -;;;; $Id: ratios.lisp,v 1.7 2004/09/22 17:52:08 ffjeld Exp $ +;;;; $Id: ratios.lisp,v 1.8 2007/03/16 17:41:11 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -74,3 +74,8 @@ (ratio (%ratio-denominator x)))) (defconstant pi #xea7632a/4aa1a8b) + +(defconstant least-positive-short-float 1/1000) +(defconstant least-positive-single-float 1/1000) +(defconstant least-positive-double-float 1/1000) +(defconstant least-positive-long-float 1/1000) From ffjeld at common-lisp.net Fri Mar 16 17:47:28 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Fri, 16 Mar 2007 12:47:28 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070316174728.1242F33093@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv14567 Modified Files: compiler.lisp Log Message: Removed some dead code. --- /project/movitz/cvsroot/movitz/compiler.lisp 2007/03/11 22:40:57 1.182 +++ /project/movitz/cvsroot/movitz/compiler.lisp 2007/03/16 17:47:27 1.183 @@ -8,7 +8,7 @@ ;;;; Created at: Wed Oct 25 12:30:49 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: compiler.lisp,v 1.182 2007/03/11 22:40:57 ffjeld Exp $ +;;;; $Id: compiler.lisp,v 1.183 2007/03/16 17:47:27 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -5986,26 +5986,7 @@ :code nil :final-form binding :returns binding - :functional-p t)) - #+ignore - (t (let ((returns (ecase (result-mode-type result-mode) - ((:function :multiple-values :eax) - :eax) - (:lexical-binding - result-mode) - ((:ebx :ecx :edx :esi :push - ;; :untagged-fixnum-eax - :untagged-fixnum-ecx - :boolean-branch-on-true - :boolean-branch-on-false) - result-mode) - (:boolean - :boolean=zf=0)))) - (compiler-values () - :code (make-compiled-lexical-load binding returns) - :final-form binding - :returns returns - :functional-p t)))))) + :functional-p t))))) (defun make-compiled-lexical-load (binding result-mode &rest key-args) "Do what is necessary to load lexical binding ." @@ -6131,13 +6112,6 @@ :type nil)) (t (compiler-values (self-eval) :returns binding)))))) -;;; ((:eax :single-value :multiple-values :function) -;;; (compiler-values (self-eval) -;;; :code `((:load-lexical ,binding :eax)) -;;; :returns :eax)) -;;; (t (compiler-values (self-eval) -;;; :code `((:load-lexical ,binding ,result-mode)) -;;; :returns result-mode)))))) (define-compiler compile-implicit-progn (&all all &form forms &top-level-p top-level-p &result-mode result-mode) @@ -6563,14 +6537,7 @@ (cond ((not (new-binding-located-p binding frame-map)) (unless (or (movitz-env-get (binding-name binding) 'ignore nil (binding-env binding)) - (movitz-env-get (binding-name binding) 'ignorable nil (binding-env binding)) - #+ignore - (labels ((recursive-located-p (b) - (or (new-binding-located-p b frame-map) - (and (typep binding 'forwarding-binding) - (recursive-located-p (forwarding-binding-target b)))))) - (recursive-located-p binding))) - #+ignore (warn "Unused variable: ~S." (binding-name binding)))) + (movitz-env-get (binding-name binding) 'ignorable nil (binding-env binding))))) ((typep binding 'forwarding-binding) ;; No need to do any initialization because the target will be initialized. (assert (not (binding-lended-p binding))) From ffjeld at common-lisp.net Fri Mar 16 18:03:09 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Fri, 16 Mar 2007 13:03:09 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070316180309.4D0B91A0AB@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv18485 Modified Files: compiler.lisp Log Message: The compiler used to fail upon lending of constant bindings. Fixed. --- /project/movitz/cvsroot/movitz/compiler.lisp 2007/03/16 17:47:27 1.183 +++ /project/movitz/cvsroot/movitz/compiler.lisp 2007/03/16 18:03:09 1.184 @@ -8,7 +8,7 @@ ;;;; Created at: Wed Oct 25 12:30:49 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: compiler.lisp,v 1.183 2007/03/16 17:47:27 ffjeld Exp $ +;;;; $Id: compiler.lisp,v 1.184 2007/03/16 18:03:09 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -620,43 +620,45 @@ (check-type toplevel-funobj movitz-funobj) (let ((function-binding-usage ())) (labels ((process-binding (funobj binding usages) - (if (not (eq funobj (binding-funobj binding))) - (let ((borrowing-binding - (or (find binding (borrowed-bindings funobj) - :key #'borrowed-binding-target) - (car (push (movitz-env-add-binding (funobj-env funobj) - (make-instance 'borrowed-binding - :name (binding-name binding) - :target-binding binding)) - (borrowed-bindings funobj)))))) - ;; We don't want to borrow a forwarding-binding.. - (when (typep (borrowed-binding-target borrowing-binding) - 'forwarding-binding) - (change-class (borrowed-binding-target borrowing-binding) - 'located-binding)) + (cond + ((typep binding 'constant-object-binding)) + ((not (eq funobj (binding-funobj binding))) + (let ((borrowing-binding + (or (find binding (borrowed-bindings funobj) + :key #'borrowed-binding-target) + (car (push (movitz-env-add-binding (funobj-env funobj) + (make-instance 'borrowed-binding + :name (binding-name binding) + :target-binding binding)) + (borrowed-bindings funobj)))))) + ;; We don't want to borrow a forwarding-binding.. + (when (typep (borrowed-binding-target borrowing-binding) + 'forwarding-binding) + (change-class (borrowed-binding-target borrowing-binding) + 'located-binding)) ;;; (warn "binding ~S of ~S is not local to ~S, replacing with ~S of ~S." ;;; binding (binding-env binding) funobj ;;; borrowing-binding (binding-env borrowing-binding)) ;;; (pushnew borrowing-binding ;;; (getf (binding-lended-p binding) :lended-to)) - (dolist (usage usages) - (pushnew usage (borrowed-binding-usage borrowing-binding))) - borrowing-binding) - ;; Binding is local to this funobj - (typecase binding - (forwarding-binding - (process-binding funobj (forwarding-binding-target binding) usages) - #+ignore - (setf (forwarding-binding-target binding) - (process-binding funobj (forwarding-binding-target binding) usages))) - (function-binding - (dolist (usage usages) - (pushnew usage - (getf (sub-function-binding-usage (function-binding-parent binding)) - binding)) - (pushnew usage (getf function-binding-usage binding))) - binding) - (t binding)))) + (dolist (usage usages) + (pushnew usage (borrowed-binding-usage borrowing-binding))) + borrowing-binding)) + (t ; Binding is local to this funobj + (typecase binding + (forwarding-binding + (process-binding funobj (forwarding-binding-target binding) usages) + #+ignore + (setf (forwarding-binding-target binding) + (process-binding funobj (forwarding-binding-target binding) usages))) + (function-binding + (dolist (usage usages) + (pushnew usage + (getf (sub-function-binding-usage (function-binding-parent binding)) + binding)) + (pushnew usage (getf function-binding-usage binding))) + binding) + (t binding))))) (resolve-sub-funobj (funobj sub-funobj) (dolist (binding-we-lend (borrowed-bindings (resolve-funobj-borrowing sub-funobj))) #+ignore @@ -6405,16 +6407,16 @@ (defun ensure-local-binding (binding funobj) "When referencing binding in funobj, ensure we have the binding local to funobj." - (if (not (typep binding 'binding)) - binding - (let ((target-binding (binding-target binding))) - (cond - ((eq funobj (binding-funobj target-binding)) - binding) - (t (or (find target-binding (borrowed-bindings funobj) - :key (lambda (binding) - (borrowed-binding-target binding))) - (error "Can't install non-local binding ~W." binding))))))) + (if (typep binding '(or (not binding) constant-object-binding)) + binding ; Never mind if "binding" isn't a binding, or is a constant-binding. + (let ((target-binding (binding-target binding))) + (cond + ((eq funobj (binding-funobj target-binding)) + binding) + (t (or (find target-binding (borrowed-bindings funobj) + :key (lambda (binding) + (borrowed-binding-target binding))) + (error "Can't install non-local binding ~W." binding))))))) (defun binding-store-subtypep (binding type-specifier) "Is type-specifier a supertype of all values ever stored to binding? From ffjeld at common-lisp.net Fri Mar 16 19:49:24 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Fri, 16 Mar 2007 14:49:24 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070316194924.ECBA343224@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv12162 Modified Files: ratios.lisp Log Message: Factor out %make-ratio from make-ratio. --- /project/movitz/cvsroot/movitz/losp/muerte/ratios.lisp 2007/03/16 17:41:11 1.8 +++ /project/movitz/cvsroot/movitz/losp/muerte/ratios.lisp 2007/03/16 19:49:24 1.9 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Tue Jul 20 00:39:59 2004 ;;;; -;;;; $Id: ratios.lisp,v 1.8 2007/03/16 17:41:11 ffjeld Exp $ +;;;; $Id: ratios.lisp,v 1.9 2007/03/16 19:49:24 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -21,9 +21,7 @@ (in-package muerte) -(defun make-ratio (numerator denominator) - (check-type numerator integer) - (check-type denominator (integer 1 *)) +(defun %make-ratio (numerator denominator) (macrolet ((do-it () `(with-allocation-assembly (4 :fixed-size-p t @@ -36,6 +34,11 @@ (:movl :edx (:eax (:offset movitz-ratio denominator)))))) (do-it))) +(defun make-ratio (numerator denominator) + (check-type numerator integer) + (check-type denominator (integer 1 *)) + (%make-ratio numerator denominator)) + (defun ratio-p (x) (typep x 'ratio)) From ffjeld at common-lisp.net Fri Mar 16 19:50:47 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Fri, 16 Mar 2007 14:50:47 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070316195047.9AFBB6A03E@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv12470 Modified Files: inspect.lisp Log Message: In shallow-copy use %make-ratio rather than make-ratio, because the numerator and/or denominator might be inconsistent when the copy is being made (i.e. during GC). This caused GC across ratios to fail. --- /project/movitz/cvsroot/movitz/losp/muerte/inspect.lisp 2005/10/25 19:26:47 1.57 +++ /project/movitz/cvsroot/movitz/losp/muerte/inspect.lisp 2007/03/16 19:50:47 1.58 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Fri Oct 24 09:50:41 2003 ;;;; -;;;; $Id: inspect.lisp,v 1.57 2005/10/25 19:26:47 ffjeld Exp $ +;;;; $Id: inspect.lisp,v 1.58 2007/03/16 19:50:47 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -263,8 +263,8 @@ (structure-object (copy-structure old)) (ratio - (make-ratio (%ratio-numerator old) - (%ratio-denominator old))) + (%make-ratio (%ratio-numerator old) + (%ratio-denominator old))) (run-time-context (%shallow-copy-object old (movitz-type-word-size 'movitz-run-time-context))))) From ffjeld at common-lisp.net Fri Mar 16 20:23:21 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Fri, 16 Mar 2007 15:23:21 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070316202321.664AF4D05F@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv21201 Modified Files: scavenge.lisp Log Message: Remove rather useless restart in the inner loop of map-header-vals. This speeds up GC quite a bit. --- /project/movitz/cvsroot/movitz/losp/muerte/scavenge.lisp 2006/01/07 21:40:12 1.55 +++ /project/movitz/cvsroot/movitz/losp/muerte/scavenge.lisp 2007/03/16 20:23:21 1.56 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Mon Mar 29 14:54:08 2004 ;;;; -;;;; $Id: scavenge.lisp,v 1.55 2006/01/07 21:40:12 ffjeld Exp $ +;;;; $Id: scavenge.lisp,v 1.56 2007/03/16 20:23:21 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -59,73 +59,71 @@ (scan start-location (1+ scan))) ((>= scan end-location)) (declare (fixnum scan)) - (with-simple-restart (continue-map-header-vals - "Continue map-header-vals at location ~S." (1+ scan)) - (let ((x (memref scan 0 :type :unsigned-byte16)) - (x2 (memref scan 1 :type :unsigned-byte16))) - (when verbose - (format *terminal-io* " [at ~S: ~S]" scan x)) - (cond - ((let ((tag (ldb (byte 3 0) x))) - (or (= tag #.(movitz:tag :null)) - (= tag #.(movitz:tag :even-fixnum)) - (= tag #.(movitz:tag :odd-fixnum)) - (scavenge-typep x :character)))) - ((or (and (= 0 x2) (= 2 x)) - (and (= #xffff x2) (= #xfffe x)) - (and (= #x7fff x2) (= #xffff x)))) - ((scavenge-typep x :illegal) - (error "Illegal word ~S at ~S." x scan)) - ((scavenge-typep x :bignum) - (assert (evenp scan) () - "Scanned bignum-header ~S at odd location #x~X." x scan) - ;; Just skip the bigits - (let* ((bigits (memref scan 0 :index 1 :type :unsigned-byte14)) - (delta (logior bigits 1))) - (record-scan (%word-offset scan #.(movitz:tag :other))) - (incf scan delta))) - ((scavenge-typep x :defstruct) - (assert (evenp scan) () - "Scanned struct-header ~S at odd location #x~X." x scan) - (record-scan (%word-offset scan #.(movitz:tag :other)))) - ((scavenge-typep x :run-time-context) - (assert (evenp scan) () - "Scanned run-time-context-header ~S at odd location #x~X." - (memref scan 0 :type :unsigned-byte32) scan) - (incf scan) - (let ((non-lispvals #.(cl:truncate (cl:+ -4 (bt:slot-offset 'movitz::movitz-run-time-context - 'movitz::pointer-start) - (movitz::image-nil-word movitz:*image*)) - 4)) - (end (+ scan #.(movitz::movitz-type-word-size 'movitz::movitz-run-time-context)))) - (incf scan non-lispvals) - (map-lisp-vals function scan (1+ end)) - (setf scan end))) - ((scavenge-typep x :funobj) - (assert (evenp scan) () - "Scanned funobj-header ~S at odd location #x~X." - (memref scan 0 :type :unsigned-byte32) scan) - (record-scan (%word-offset scan #.(movitz:tag :other))) - ;; Process code-vector pointers specially.. - (let* ((old-code-vector (memref (incf scan) 0 :type :code-vector)) - (new-code-vector (map-instruction-pointer function scan old-code-vector))) - (cond + (let ((x (memref scan 0 :type :unsigned-byte16)) + (x2 (memref scan 1 :type :unsigned-byte16))) + (when verbose + (format *terminal-io* " [at ~S: ~S]" scan x)) + (cond + ((let ((tag (ldb (byte 3 0) x))) + (or (= tag #.(movitz:tag :null)) + (= tag #.(movitz:tag :even-fixnum)) + (= tag #.(movitz:tag :odd-fixnum)) + (scavenge-typep x :character)))) + ((or (and (= 0 x2) (= 2 x)) + (and (= #xffff x2) (= #xfffe x)) + (and (= #x7fff x2) (= #xffff x)))) + ((scavenge-typep x :illegal) + (error "Illegal word ~S at ~S." x scan)) + ((scavenge-typep x :bignum) + (assert (evenp scan) () + "Scanned bignum-header ~S at odd location #x~X." x scan) + ;; Just skip the bigits + (let* ((bigits (memref scan 0 :index 1 :type :unsigned-byte14)) + (delta (logior bigits 1))) + (record-scan (%word-offset scan #.(movitz:tag :other))) + (incf scan delta))) + ((scavenge-typep x :defstruct) + (assert (evenp scan) () + "Scanned struct-header ~S at odd location #x~X." x scan) + (record-scan (%word-offset scan #.(movitz:tag :other)))) + ((scavenge-typep x :run-time-context) + (assert (evenp scan) () + "Scanned run-time-context-header ~S at odd location #x~X." + (memref scan 0 :type :unsigned-byte32) scan) + (incf scan) + (let ((non-lispvals #.(cl:truncate (cl:+ -4 (bt:slot-offset 'movitz::movitz-run-time-context + 'movitz::pointer-start) + (movitz::image-nil-word movitz:*image*)) + 4)) + (end (+ scan #.(movitz::movitz-type-word-size 'movitz::movitz-run-time-context)))) + (incf scan non-lispvals) + (map-lisp-vals function scan (1+ end)) + (setf scan end))) + ((scavenge-typep x :funobj) + (assert (evenp scan) () + "Scanned funobj-header ~S at odd location #x~X." + (memref scan 0 :type :unsigned-byte32) scan) + (record-scan (%word-offset scan #.(movitz:tag :other))) + ;; Process code-vector pointers specially.. + (let* ((old-code-vector (memref (incf scan) 0 :type :code-vector)) + (new-code-vector (map-instruction-pointer function scan old-code-vector))) + (cond ((not (eq new-code-vector old-code-vector)) ;; Code-vector%1op (if (location-in-code-vector-p%unsafe old-code-vector (memref (incf scan) 0 :type :location)) (map-instruction-pointer function scan old-code-vector) - (map-instruction-pointer function scan)) + (map-instruction-pointer function scan)) ;; Code-vector%2op (if (location-in-code-vector-p%unsafe old-code-vector (memref (incf scan) 0 :type :location)) (map-instruction-pointer function scan old-code-vector) - (map-instruction-pointer function scan)) + (map-instruction-pointer function scan)) ;; Code-vector%3op (if (location-in-code-vector-p%unsafe old-code-vector (memref (incf scan) 0 :type :location)) (map-instruction-pointer function scan old-code-vector) - (map-instruction-pointer function scan)) + (map-instruction-pointer function scan)) ;; lambda-list and name (map-header-vals function (incf scan) (incf scan 2)) ;; Jumpers @@ -151,61 +149,61 @@ (let ((num-jumpers (memref scan 0 :type :unsigned-byte14)) #+ignore (num-constants (memref scan 2 :type :unsigned-byte16))) (incf scan num-jumpers)))))) - ((scavenge-typep x :infant-object) - (assert (evenp scan) () - "Scanned infant ~S at odd location #x~X." x scan) - (error "Scanning an infant object ~Z at ~S (end ~S)." x scan end-location)) - ((or (scavenge-wide-typep x :basic-vector - #.(bt:enum-value 'movitz:movitz-vector-element-type :u8)) - (scavenge-wide-typep x :basic-vector - #.(bt:enum-value 'movitz:movitz-vector-element-type :character)) - (scavenge-wide-typep x :basic-vector - #.(bt:enum-value 'movitz:movitz-vector-element-type :code))) - (assert (evenp scan) () - "Scanned u8-vector-header ~S at odd location #x~X." x scan) - (let ((len (memref scan 0 :index 1 :type :lisp))) - (check-type len positive-fixnum) - (record-scan (%word-offset scan #.(movitz:tag :other))) - (incf scan (1+ (* 2 (truncate (+ 7 len) 8)))))) - ((scavenge-wide-typep x :basic-vector #.(bt:enum-value 'movitz:movitz-vector-element-type :u16)) - (assert (evenp scan) () - "Scanned u16-vector-header ~S at odd location #x~X." x scan) - (let ((len (memref scan 0 :index 1))) - (check-type len positive-fixnum) - (record-scan (%word-offset scan #.(movitz:tag :other))) - (incf scan (1+ (* 2 (truncate (+ 3 len) 4)))))) - ((scavenge-wide-typep x :basic-vector #.(bt:enum-value 'movitz:movitz-vector-element-type :u32)) - (assert (evenp scan) () - "Scanned u32-vector-header ~S at odd location #x~X." x scan) - (let ((len (memref scan 4))) - (assert (typep len 'positive-fixnum) () - "Scanned basic-vector at ~S with illegal length ~S." scan len) - (record-scan (%word-offset scan #.(movitz:tag :other))) - (incf scan (1+ (logand (1+ len) -2))))) - ((scavenge-typep x :basic-vector) - (if (or (scavenge-wide-typep x :basic-vector - #.(bt:enum-value 'movitz:movitz-vector-element-type - :any-t)) - (scavenge-wide-typep x :basic-vector - #.(bt:enum-value 'movitz:movitz-vector-element-type - :indirects))) - (record-scan (%word-offset scan #.(movitz:tag :other))) - (error "Scanned unknown basic-vector-header ~S at location #x~X." x scan))) - ((and (eq x 3) (eq x2 0)) - (record-scan scan) - (incf scan) - (let ((delta (memref scan 0))) - (check-type delta positive-fixnum) - ;; (warn "at ~S skipping ~S to ~S." scan delta (+ scan delta)) - (incf scan delta))) - (t ;; (typep x 'pointer) - (let ((old (memref scan 0))) - (unless (eq old (load-global-constant new-unbound-value)) - (let ((new (funcall function old scan))) - (when verbose - (format *terminal-io* " [~Z => ~Z]" old new)) - (unless (eq old new) - (setf (memref scan 0) new))))))))))) + ((scavenge-typep x :infant-object) + (assert (evenp scan) () + "Scanned infant ~S at odd location #x~X." x scan) + (error "Scanning an infant object ~Z at ~S (end ~S)." x scan end-location)) + ((or (scavenge-wide-typep x :basic-vector + #.(bt:enum-value 'movitz:movitz-vector-element-type :u8)) + (scavenge-wide-typep x :basic-vector + #.(bt:enum-value 'movitz:movitz-vector-element-type :character)) + (scavenge-wide-typep x :basic-vector + #.(bt:enum-value 'movitz:movitz-vector-element-type :code))) + (assert (evenp scan) () + "Scanned u8-vector-header ~S at odd location #x~X." x scan) + (let ((len (memref scan 0 :index 1 :type :lisp))) + (check-type len positive-fixnum) + (record-scan (%word-offset scan #.(movitz:tag :other))) + (incf scan (1+ (* 2 (truncate (+ 7 len) 8)))))) + ((scavenge-wide-typep x :basic-vector #.(bt:enum-value 'movitz:movitz-vector-element-type :u16)) + (assert (evenp scan) () + "Scanned u16-vector-header ~S at odd location #x~X." x scan) + (let ((len (memref scan 0 :index 1))) + (check-type len positive-fixnum) + (record-scan (%word-offset scan #.(movitz:tag :other))) + (incf scan (1+ (* 2 (truncate (+ 3 len) 4)))))) + ((scavenge-wide-typep x :basic-vector #.(bt:enum-value 'movitz:movitz-vector-element-type :u32)) + (assert (evenp scan) () + "Scanned u32-vector-header ~S at odd location #x~X." x scan) + (let ((len (memref scan 4))) + (assert (typep len 'positive-fixnum) () + "Scanned basic-vector at ~S with illegal length ~S." scan len) + (record-scan (%word-offset scan #.(movitz:tag :other))) + (incf scan (1+ (logand (1+ len) -2))))) + ((scavenge-typep x :basic-vector) + (if (or (scavenge-wide-typep x :basic-vector + #.(bt:enum-value 'movitz:movitz-vector-element-type + :any-t)) + (scavenge-wide-typep x :basic-vector + #.(bt:enum-value 'movitz:movitz-vector-element-type + :indirects))) + (record-scan (%word-offset scan #.(movitz:tag :other))) + (error "Scanned unknown basic-vector-header ~S at location #x~X." x scan))) + ((and (eq x 3) (eq x2 0)) + (record-scan scan) + (incf scan) + (let ((delta (memref scan 0))) + (check-type delta positive-fixnum) + ;; (warn "at ~S skipping ~S to ~S." scan delta (+ scan delta)) + (incf scan delta))) + (t ;; (typep x 'pointer) + (let ((old (memref scan 0))) + (unless (eq old (load-global-constant new-unbound-value)) + (let ((new (funcall function old scan))) + (when verbose + (format *terminal-io* " [~Z => ~Z]" old new)) + (unless (eq old new) + (setf (memref scan 0) new)))))))))) (values)) (defun map-stack-vector (function stack start-frame &optional (map-region #'map-header-vals)) From ffjeld at common-lisp.net Fri Mar 16 21:12:52 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Fri, 16 Mar 2007 16:12:52 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070316211252.8D02F310A0@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv31042 Modified Files: scavenge.lisp Log Message: Add support for bit-vectors in map-header-vals. --- /project/movitz/cvsroot/movitz/losp/muerte/scavenge.lisp 2007/03/16 20:23:21 1.56 +++ /project/movitz/cvsroot/movitz/losp/muerte/scavenge.lisp 2007/03/16 21:12:52 1.57 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Mon Mar 29 14:54:08 2004 ;;;; -;;;; $Id: scavenge.lisp,v 1.56 2007/03/16 20:23:21 ffjeld Exp $ +;;;; $Id: scavenge.lisp,v 1.57 2007/03/16 21:12:52 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -180,6 +180,14 @@ "Scanned basic-vector at ~S with illegal length ~S." scan len) (record-scan (%word-offset scan #.(movitz:tag :other))) (incf scan (1+ (logand (1+ len) -2))))) + ((scavenge-wide-typep x :basic-vector #.(bt:enum-value 'movitz:movitz-vector-element-type :bit)) + (assert (evenp scan) () + "Scanned bit-vector-header ~S at odd location #x~X." x scan) + (let ((len (memref scan 4))) + (assert (typep len 'positive-fixnum) () + "Scanned basic-vector at ~S with illegal length ~S." scan len) + (record-scan (%word-offset scan #.(movitz:tag :other))) + (incf scan (1+ (* 2 (truncate (+ 63 len) 64)))))) ((scavenge-typep x :basic-vector) (if (or (scavenge-wide-typep x :basic-vector #.(bt:enum-value 'movitz:movitz-vector-element-type From ffjeld at common-lisp.net Fri Mar 16 21:17:56 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Fri, 16 Mar 2007 16:17:56 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070316211756.0C58543214@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv31526 Modified Files: scavenge.lisp Log Message: Fixed nasty bug in map-header-vals: x2 is supposed to be the upper 16 bits of each word, but was really the 'middle' 16 bits (i.e bits 8-24). --- /project/movitz/cvsroot/movitz/losp/muerte/scavenge.lisp 2007/03/16 21:12:52 1.57 +++ /project/movitz/cvsroot/movitz/losp/muerte/scavenge.lisp 2007/03/16 21:17:55 1.58 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Mon Mar 29 14:54:08 2004 ;;;; -;;;; $Id: scavenge.lisp,v 1.57 2007/03/16 21:12:52 ffjeld Exp $ +;;;; $Id: scavenge.lisp,v 1.58 2007/03/16 21:17:55 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -60,7 +60,7 @@ ((>= scan end-location)) (declare (fixnum scan)) (let ((x (memref scan 0 :type :unsigned-byte16)) - (x2 (memref scan 1 :type :unsigned-byte16))) + (x2 (memref scan 2 :type :unsigned-byte16))) (when verbose (format *terminal-io* " [at ~S: ~S]" scan x)) (cond From ffjeld at common-lisp.net Fri Mar 16 22:13:56 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Fri, 16 Mar 2007 17:13:56 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070316221356.1FCF46A03A@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv8233 Modified Files: scavenge.lisp Log Message: Somewhat improved speed of map-header-vals. --- /project/movitz/cvsroot/movitz/losp/muerte/scavenge.lisp 2007/03/16 21:17:55 1.58 +++ /project/movitz/cvsroot/movitz/losp/muerte/scavenge.lisp 2007/03/16 22:13:55 1.59 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Mon Mar 29 14:54:08 2004 ;;;; -;;;; $Id: scavenge.lisp,v 1.58 2007/03/16 21:17:55 ffjeld Exp $ +;;;; $Id: scavenge.lisp,v 1.59 2007/03/16 22:13:55 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -55,7 +55,7 @@ (declare (ignorable x)) #+ignore `(setf *scan-last* ,x))) (do ((verbose *map-header-vals-verbose*) - (*scan-last* nil) ; Last scanned object, for debugging. + #+ignore (*scan-last* nil) ; Last scanned object, for debugging. (scan start-location (1+ scan))) ((>= scan end-location)) (declare (fixnum scan)) @@ -146,57 +146,45 @@ ;; lambda-list and name (map-header-vals function (incf scan) (incf scan 2)) ;; Jumpers - (let ((num-jumpers (memref scan 0 :type :unsigned-byte14)) - #+ignore (num-constants (memref scan 2 :type :unsigned-byte16))) + (let ((num-jumpers (memref scan 0 :type :unsigned-byte14))) (incf scan num-jumpers)))))) ((scavenge-typep x :infant-object) (assert (evenp scan) () "Scanned infant ~S at odd location #x~X." x scan) (error "Scanning an infant object ~Z at ~S (end ~S)." x scan end-location)) - ((or (scavenge-wide-typep x :basic-vector - #.(bt:enum-value 'movitz:movitz-vector-element-type :u8)) - (scavenge-wide-typep x :basic-vector - #.(bt:enum-value 'movitz:movitz-vector-element-type :character)) - (scavenge-wide-typep x :basic-vector - #.(bt:enum-value 'movitz:movitz-vector-element-type :code))) - (assert (evenp scan) () - "Scanned u8-vector-header ~S at odd location #x~X." x scan) - (let ((len (memref scan 0 :index 1 :type :lisp))) - (check-type len positive-fixnum) - (record-scan (%word-offset scan #.(movitz:tag :other))) - (incf scan (1+ (* 2 (truncate (+ 7 len) 8)))))) - ((scavenge-wide-typep x :basic-vector #.(bt:enum-value 'movitz:movitz-vector-element-type :u16)) - (assert (evenp scan) () - "Scanned u16-vector-header ~S at odd location #x~X." x scan) - (let ((len (memref scan 0 :index 1))) - (check-type len positive-fixnum) - (record-scan (%word-offset scan #.(movitz:tag :other))) - (incf scan (1+ (* 2 (truncate (+ 3 len) 4)))))) - ((scavenge-wide-typep x :basic-vector #.(bt:enum-value 'movitz:movitz-vector-element-type :u32)) - (assert (evenp scan) () - "Scanned u32-vector-header ~S at odd location #x~X." x scan) - (let ((len (memref scan 4))) - (assert (typep len 'positive-fixnum) () - "Scanned basic-vector at ~S with illegal length ~S." scan len) - (record-scan (%word-offset scan #.(movitz:tag :other))) - (incf scan (1+ (logand (1+ len) -2))))) - ((scavenge-wide-typep x :basic-vector #.(bt:enum-value 'movitz:movitz-vector-element-type :bit)) - (assert (evenp scan) () - "Scanned bit-vector-header ~S at odd location #x~X." x scan) - (let ((len (memref scan 4))) - (assert (typep len 'positive-fixnum) () - "Scanned basic-vector at ~S with illegal length ~S." scan len) - (record-scan (%word-offset scan #.(movitz:tag :other))) - (incf scan (1+ (* 2 (truncate (+ 63 len) 64)))))) ((scavenge-typep x :basic-vector) - (if (or (scavenge-wide-typep x :basic-vector - #.(bt:enum-value 'movitz:movitz-vector-element-type - :any-t)) - (scavenge-wide-typep x :basic-vector - #.(bt:enum-value 'movitz:movitz-vector-element-type - :indirects))) - (record-scan (%word-offset scan #.(movitz:tag :other))) - (error "Scanned unknown basic-vector-header ~S at location #x~X." x scan))) + (assert (evenp scan) () + "Scanned basic-vector-header ~S at odd location #x~X." x scan) + (cond + ((or (scavenge-wide-typep x :basic-vector + #.(bt:enum-value 'movitz:movitz-vector-element-type :u8)) + (scavenge-wide-typep x :basic-vector + #.(bt:enum-value 'movitz:movitz-vector-element-type :character)) + (scavenge-wide-typep x :basic-vector + #.(bt:enum-value 'movitz:movitz-vector-element-type :code))) + (let ((len (memref scan 4))) + (record-scan (%word-offset scan #.(movitz:tag :other))) + (incf scan (1+ (* 2 (truncate (+ 7 len) 8)))))) + ((scavenge-wide-typep x :basic-vector #.(bt:enum-value 'movitz:movitz-vector-element-type :u16)) + (let ((len (memref scan 0 :index 1))) + (record-scan (%word-offset scan #.(movitz:tag :other))) + (incf scan (1+ (* 2 (truncate (+ 3 len) 4)))))) + ((scavenge-wide-typep x :basic-vector #.(bt:enum-value 'movitz:movitz-vector-element-type :u32)) + (let ((len (memref scan 4))) + (record-scan (%word-offset scan #.(movitz:tag :other))) + (incf scan (1+ (logand (1+ len) -2))))) + ((scavenge-wide-typep x :basic-vector #.(bt:enum-value 'movitz:movitz-vector-element-type :bit)) + (let ((len (memref scan 4))) + (record-scan (%word-offset scan #.(movitz:tag :other))) + (incf scan (1+ (* 2 (truncate (+ 63 len) 64)))))) + ((or (scavenge-wide-typep x :basic-vector + #.(bt:enum-value 'movitz:movitz-vector-element-type + :any-t)) + (scavenge-wide-typep x :basic-vector + #.(bt:enum-value 'movitz:movitz-vector-element-type + :indirects))) + (record-scan (%word-offset scan #.(movitz:tag :other)))) + (t (error "Scanned unknown basic-vector-header ~S at location #x~X." x scan)))) ((and (eq x 3) (eq x2 0)) (record-scan scan) (incf scan) @@ -205,13 +193,12 @@ ;; (warn "at ~S skipping ~S to ~S." scan delta (+ scan delta)) (incf scan delta))) (t ;; (typep x 'pointer) - (let ((old (memref scan 0))) - (unless (eq old (load-global-constant new-unbound-value)) - (let ((new (funcall function old scan))) - (when verbose - (format *terminal-io* " [~Z => ~Z]" old new)) - (unless (eq old new) - (setf (memref scan 0) new)))))))))) + (let* ((old (memref scan 0)) + (new (funcall function old scan))) + (when verbose + (format *terminal-io* " [~Z => ~Z]" old new)) + (unless (eq old new) + (setf (memref scan 0) new)))))))) (values)) (defun map-stack-vector (function stack start-frame &optional (map-region #'map-header-vals)) From ffjeld at common-lisp.net Fri Mar 16 23:33:46 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Fri, 16 Mar 2007 18:33:46 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/x86-pc Message-ID: <20070316233346.CB2F67635B@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/x86-pc In directory clnet:/tmp/cvs-serv20457 Modified Files: vga.lisp Log Message: Wrote a rather primitive with-textmode-restored. --- /project/movitz/cvsroot/movitz/losp/x86-pc/vga.lisp 2007/03/13 21:56:15 1.7 +++ /project/movitz/cvsroot/movitz/losp/x86-pc/vga.lisp 2007/03/16 23:33:46 1.8 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Tue Sep 25 14:08:20 2001 ;;;; -;;;; $Id: vga.lisp,v 1.7 2007/03/13 21:56:15 ffjeld Exp $ +;;;; $Id: vga.lisp,v 1.8 2007/03/16 23:33:46 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -923,608 +923,608 @@ #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 }) (defconstant +vga-g-splash+ -#{ #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x00 #x00 #x00 #x00 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x00 #x00 #x00 #x00 #x00 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x00 #x00 #x04 #x04 #x00 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x00 #x00 #x04 #x04 #x04 #x00 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 - #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x00 #x00 #x04 #x04 #x00 #x00 #x01 #x01 #x07 #x07 #x07 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x01 - #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x01 #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x01 #x01 #x07 #x07 #x07 #x01 #x07 #x07 #x07 - #x07 #x07 #x01 #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x00 #x00 #x04 #x04 #x00 #x00 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x07 #x07 #x07 #x01 #x01 #x01 #x01 #x07 - #x07 #x07 #x07 #x01 #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x07 #x07 #x07 #x01 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x07 #x07 #x07 #x01 #x01 #x01 #x01 #x01 - #x01 #x07 #x07 #x07 #x01 #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 [916 lines skipped] From ffjeld at common-lisp.net Sat Mar 17 14:57:31 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Sat, 17 Mar 2007 09:57:31 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/x86-pc Message-ID: <20070317145731.ABA326308A@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/x86-pc In directory clnet:/tmp/cvs-serv15208 Modified Files: vga.lisp Log Message: Patch from Shawn Betts: RLE coding of the *vga-g-splash* image. Tweaked a bit by me. --- /project/movitz/cvsroot/movitz/losp/x86-pc/vga.lisp 2007/03/16 23:33:46 1.8 +++ /project/movitz/cvsroot/movitz/losp/x86-pc/vga.lisp 2007/03/17 14:57:30 1.9 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Tue Sep 25 14:08:20 2001 ;;;; -;;;; $Id: vga.lisp,v 1.8 2007/03/16 23:33:46 ffjeld Exp $ +;;;; $Id: vga.lisp,v 1.9 2007/03/17 14:57:30 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -922,4008 +922,114 @@ #x00 #x00 #x00 #x00 #x7C #x7C #x7C #x7C #x7C #x7C #x7C #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 }) -(defconstant +vga-g-splash+ - #{#x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x00 #x00 #x00 #x00 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x00 #x00 #x00 #x00 #x00 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x00 #x00 #x04 #x04 #x00 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x00 #x00 #x04 #x04 #x04 #x00 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 - #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x00 #x00 #x04 #x04 #x00 #x00 #x01 #x01 #x07 #x07 #x07 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x01 - #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x01 #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x00 #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x01 #x01 #x07 #x07 #x07 #x01 #x07 #x07 #x07 - #x07 #x07 #x01 #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x00 #x00 #x04 #x04 #x00 #x00 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x07 #x07 #x07 #x01 #x01 #x01 #x01 #x07 - #x07 #x07 #x07 #x01 #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x00 #x04 #x04 #x04 #x00 #x01 #x01 #x01 #x07 #x07 #x07 #x01 #x01 #x01 #x01 #x01 - #x01 #x01 #x01 #x01 #x07 #x07 #x01 #x01 #x07 #x07 #x07 #x01 #x01 #x01 #x01 #x01 - #x01 #x07 #x07 #x07 #x01 #x01 #x01 #x01 #x01 #x01 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 - #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 #x07 [3777 lines skipped] From ffjeld at common-lisp.net Sat Mar 17 15:39:26 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Sat, 17 Mar 2007 10:39:26 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/x86-pc Message-ID: <20070317153926.D22E334020@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/x86-pc In directory clnet:/tmp/cvs-serv23688 Modified Files: vga.lisp Log Message: Tweak rle-blit-splash to take octet array as input. The splash image plus the rle-blit-splash function now account for less than 5 KB. --- /project/movitz/cvsroot/movitz/losp/x86-pc/vga.lisp 2007/03/17 14:57:30 1.9 +++ /project/movitz/cvsroot/movitz/losp/x86-pc/vga.lisp 2007/03/17 15:39:26 1.10 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Tue Sep 25 14:08:20 2001 ;;;; -;;;; $Id: vga.lisp,v 1.9 2007/03/17 14:57:30 ffjeld Exp $ +;;;; $Id: vga.lisp,v 1.10 2007/03/17 15:39:26 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -925,111 +925,129 @@ ;; run-length compressed: color count color count ... (defvar *vga-g-splash* - '(7 1828 0 4 7 315 0 5 7 315 0 2 4 2 0 1 7 314 0 2 4 3 0 1 7 314 0 2 4 3 0 1 1 7 7 307 0 2 - 4 3 0 1 1 17 7 297 0 1 4 3 0 1 1 22 7 292 0 2 4 3 0 1 1 3 7 2 1 9 7 2 1 10 7 288 0 2 4 3 - 0 1 1 3 7 2 1 9 7 2 1 12 7 286 0 2 4 2 0 2 1 2 7 3 1 9 7 2 1 3 7 5 1 6 7 283 0 2 4 3 0 1 - 1 3 7 2 1 9 7 3 1 2 7 8 1 6 7 281 0 2 4 3 0 1 1 3 7 2 1 9 7 3 1 2 7 3 1 1 7 5 1 6 7 280 - 0 2 4 2 0 2 1 3 7 2 1 9 7 2 1 2 7 3 1 4 7 4 1 6 7 279 0 1 4 3 0 1 1 3 7 3 1 9 7 2 1 2 7 - 3 1 6 7 3 1 6 7 277 0 2 4 3 0 1 1 3 7 2 1 10 7 2 1 3 7 2 1 7 7 2 1 7 7 276 0 2 4 3 0 1 1 - 3 7 2 1 9 7 3 1 3 7 3 1 16 7 275 0 2 4 2 0 2 1 2 7 3 1 9 7 3 1 4 7 4 1 8 7 3 1 3 7 274 0 - 2 4 3 0 1 1 3 7 2 1 10 7 2 1 6 7 5 1 5 7 5 1 3 7 273 0 2 4 3 0 1 1 3 7 2 1 10 7 2 1 7 7 - 5 1 4 7 6 1 3 7 272 0 2 4 2 0 2 1 3 7 2 1 10 7 2 1 9 7 4 1 3 7 2 1 1 7 4 1 3 7 271 0 1 4 - 3 0 1 1 3 7 3 1 10 7 2 1 11 7 3 1 2 7 2 1 2 7 3 1 4 7 269 0 2 4 3 0 1 1 3 7 2 1 10 7 3 1 - 2 7 2 1 7 7 3 1 1 7 3 1 3 7 3 1 3 7 269 0 2 4 3 0 1 1 3 7 2 1 5 7 2 1 3 7 3 1 2 7 3 1 6 - 7 3 1 1 7 3 1 4 7 2 1 5 7 267 0 2 4 2 0 2 1 3 7 10 1 2 7 2 1 4 7 4 1 4 7 3 1 1 7 3 1 4 7 - 3 1 5 7 265 0 2 4 3 0 1 1 3 7 10 1 10 7 5 1 1 7 3 1 2 7 4 1 3 7 3 1 6 7 264 0 2 4 3 0 1 - 1 24 7 8 1 2 7 9 1 9 7 262 0 2 4 2 0 2 1 26 7 5 1 2 7 3 1 1 7 6 1 10 7 261 0 1 4 3 0 2 1 - 14 7 8 1 11 7 3 1 3 7 3 1 13 7 258 0 2 4 3 0 2 7 2 1 5 7 17 1 9 7 3 1 21 7 256 0 2 4 3 0 - 1 7 26 1 8 7 2 1 24 7 254 0 2 4 2 0 2 7 28 1 6 7 2 1 26 7 252 0 1 4 3 0 2 7 29 1 5 7 2 1 - 24 7 158 0 8 7 87 0 2 4 3 0 2 7 31 1 26 7 160 0 2 7 7 0 1 7 86 0 2 4 2 0 2 7 34 1 21 7 - 158 0 7 7 3 0 3 7 1 0 7 7 80 0 1 4 3 0 2 7 36 1 15 7 160 0 3 7 4 0 2 7 2 0 9 7 3 0 4 7 - 72 2 5 4 3 0 2 7 40 1 5 7 165 0 2 7 8 0 1 7 2 0 5 7 9 0 2 7 69 2 7 4 3 0 1 7 211 0 1 7 4 - 0 2 7 4 0 1 7 2 0 2 7 8 0 4 7 1 0 1 7 66 2 9 4 2 0 2 7 210 0 2 7 2 0 12 7 8 0 5 7 1 0 1 - 7 65 2 11 4 1 0 1 2 1 7 210 0 1 7 3 0 5 7 5 0 3 7 8 0 4 7 2 0 1 7 63 2 15 7 209 0 2 7 3 - 0 4 7 8 0 2 7 1 0 10 7 2 0 1 7 62 2 18 7 207 0 1 7 5 0 2 7 4 0 3 7 3 0 2 7 6 0 2 7 4 0 1 - 7 62 2 18 7 207 0 2 7 5 0 1 7 4 0 4 7 1 0 2 7 4 0 3 7 1 0 1 7 4 0 1 7 61 2 20 7 199 2 8 - 0 2 7 4 0 1 7 4 0 4 7 1 0 1 7 5 0 6 7 1 0 3 7 61 2 10 0 1 2 9 7 194 2 14 0 6 7 4 0 4 7 1 - 0 1 7 6 0 2 7 2 0 3 2 1 7 62 2 9 0 2 4 2 2 8 7 188 2 24 0 1 7 4 0 3 7 2 0 2 7 8 0 2 2 6 - 7 58 2 10 0 1 4 3 0 1 2 6 7 185 2 28 0 1 7 10 0 1 7 7 0 2 2 9 7 56 2 10 0 1 4 3 0 1 2 6 - 7 182 2 31 0 2 7 9 0 8 2 12 7 54 2 22 7 179 2 35 0 2 7 6 0 2 2 22 7 50 2 23 7 177 2 40 0 - 7 2 24 7 47 2 24 7 175 2 75 7 44 2 26 7 172 2 79 7 41 2 17 0 1 2 11 7 169 2 82 7 38 2 19 - 0 1 4 3 2 8 7 167 2 84 7 36 2 21 0 1 4 3 0 1 2 7 7 165 2 87 7 34 2 21 0 2 4 2 0 2 2 7 7 - 163 2 89 7 32 2 23 0 1 4 3 0 1 2 7 7 162 2 92 7 29 2 25 0 1 4 3 0 1 2 4 7 163 2 95 7 27 - 2 16 7 10 0 1 4 3 0 1 7 166 2 96 7 25 2 16 7 11 0 2 4 2 0 1 7 165 2 99 7 23 2 15 7 13 0 - 1 4 3 0 1 7 164 2 101 7 20 2 15 7 15 0 1 4 3 0 1 7 162 2 62 0 2 2 40 7 18 2 15 7 16 0 4 - 7 162 2 62 0 6 2 39 7 14 2 15 7 183 2 63 0 1 7 1 0 1 7 2 0 4 2 39 7 8 2 17 7 183 2 64 0 - 1 7 1 0 1 7 2 0 1 7 2 0 3 2 61 7 182 2 65 0 4 7 2 0 1 7 2 0 1 7 1 0 3 2 58 7 183 2 65 0 - 1 7 1 0 5 7 1 0 2 7 1 0 1 7 1 0 5 2 52 7 184 2 66 0 1 7 1 0 1 7 1 0 3 7 1 0 1 7 2 0 1 7 - 2 0 1 7 2 0 3 2 49 7 184 2 68 0 2 7 2 0 5 7 1 0 1 7 2 0 1 7 2 0 4 2 47 7 184 2 70 0 2 7 - 1 0 1 7 2 0 5 7 1 0 1 7 2 0 1 7 2 0 2 2 45 7 184 2 72 0 3 7 2 0 1 7 2 0 7 7 2 0 1 2 44 7 - 186 2 73 0 5 7 1 0 2 7 1 0 2 7 1 0 5 2 43 7 186 2 77 0 4 7 2 0 1 7 2 0 1 7 2 0 1 2 16 7 - 2 2 24 7 188 2 79 0 5 7 2 0 1 7 1 0 1 2 17 7 7 2 17 7 190 2 83 0 5 2 18 7 16 2 3 7 194 2 - 107 7 213 2 106 7 214 2 106 7 213 2 107 7 213 2 106 7 214 2 106 7 214 2 106 7 213 2 106 - 7 214 2 106 7 214 2 105 7 215 2 104 7 216 2 104 7 215 2 104 7 216 2 104 7 216 2 105 7 - 215 2 105 7 215 2 83 7 11 2 11 7 214 2 82 7 14 2 10 7 214 2 37 7 34 2 11 7 14 2 10 7 214 - 2 27 7 45 2 10 7 14 2 10 7 214 2 14 7 5 2 8 7 45 2 9 7 15 2 10 7 214 2 9 7 10 2 8 7 45 2 - 9 7 15 2 10 7 213 2 9 7 11 2 8 7 45 2 9 7 16 2 9 7 213 2 8 7 12 2 8 7 45 2 9 7 16 2 9 7 - 213 2 8 7 12 2 7 7 46 2 9 7 16 2 9 7 213 2 8 7 12 2 7 7 46 2 8 7 17 2 9 7 213 2 7 7 12 2 - 8 7 46 2 8 7 17 2 9 7 212 2 8 7 12 2 8 7 46 2 8 7 17 2 9 7 212 2 8 7 12 2 8 7 46 2 8 7 - 18 2 9 7 211 2 8 7 12 2 8 7 46 2 8 7 18 2 9 7 211 2 7 7 13 2 8 7 46 2 8 7 18 2 9 7 211 2 - 7 7 13 2 7 7 47 2 7 7 19 2 9 7 211 2 7 7 13 2 7 7 47 2 7 7 19 2 9 7 210 2 8 7 13 2 7 7 - 46 2 8 7 19 2 9 7 210 2 7 7 13 2 8 7 46 2 8 7 19 2 9 7 210 2 7 7 13 2 8 7 46 2 8 7 20 2 - 8 7 210 2 7 7 13 2 8 7 46 2 8 7 20 2 8 7 210 2 7 7 13 2 7 7 47 2 8 7 20 2 8 7 209 2 8 7 - 13 2 7 7 47 2 7 7 21 2 8 7 209 2 7 7 14 2 7 7 47 2 7 7 21 2 8 7 209 2 7 7 14 2 7 7 47 2 - 7 7 21 2 8 7 209 2 7 7 14 2 7 7 47 2 7 7 21 2 8 7 209 2 7 7 13 2 8 7 47 2 7 7 22 2 8 7 - 208 2 7 7 13 2 8 7 46 2 8 7 22 2 8 7 207 2 7 7 14 2 7 7 47 2 8 7 22 2 8 7 207 2 7 7 14 2 - 7 7 47 2 7 7 23 2 8 7 207 2 7 7 14 2 7 7 47 2 7 7 23 2 8 7 207 2 7 7 14 2 7 7 47 2 7 7 - 23 2 8 7 207 2 7 7 14 2 7 7 47 2 7 7 23 2 8 7 206 2 7 7 15 2 7 7 47 2 7 7 24 2 7 7 206 2 - 7 7 14 2 7 7 48 2 7 7 24 2 7 7 206 2 7 7 14 2 7 7 48 2 7 7 24 2 7 7 206 2 7 7 14 2 7 7 - 48 2 7 7 24 2 7 7 206 2 7 7 14 2 7 7 47 2 8 7 24 2 7 7 206 2 7 7 14 2 7 7 47 2 7 7 25 2 - 7 7 205 2 7 7 15 2 7 7 47 2 7 7 25 2 7 7 202 2 11 7 14 2 7 7 47 2 7 7 25 2 7 7 201 2 13 - 7 10 2 11 7 46 2 7 7 25 2 7 7 201 2 14 7 8 2 13 7 45 2 7 7 25 2 8 7 199 2 16 7 6 2 15 7 - 44 2 7 7 22 2 12 7 198 2 16 7 6 2 15 7 42 2 10 7 20 2 15 7 196 2 16 7 6 2 15 7 41 2 13 7 - 18 2 15 7 197 2 15 7 6 2 15 7 40 2 15 7 16 2 17 7 196 2 14 7 7 2 15 7 40 2 15 7 16 2 17 - 7 198 2 4 7 2 2 5 7 9 2 13 7 41 2 15 7 16 2 17 7 219 2 4 7 3 2 4 7 42 2 15 7 17 2 7 7 2 - 2 6 7 273 2 15 7 18 2 5 7 4 2 3 7 276 2 13 7 308 2 4 7 2 2 5 7 3537 0 3 7 307 0 2 7 7 0 - 4 7 73 0 2 7 231 0 3 7 6 0 5 7 73 0 2 7 2 0 5 7 223 0 4 7 5 0 5 7 73 0 11 7 221 0 4 7 6 - 0 5 7 72 0 13 7 83 0 2 7 134 0 5 7 5 0 5 7 71 0 7 7 6 0 3 7 81 0 3 7 133 0 5 7 5 0 6 7 - 70 0 6 7 9 0 2 7 80 0 3 7 133 0 6 7 4 0 3 7 1 0 2 7 71 0 6 7 9 0 2 7 80 0 3 7 133 0 2 7 - 1 0 2 7 5 0 2 7 1 0 3 7 31 0 2 7 6 0 2 7 30 0 2 7 1 0 2 7 10 0 2 7 79 0 3 7 133 0 2 7 1 - 0 2 7 5 0 2 7 2 0 2 7 31 0 3 7 5 0 3 7 32 0 3 7 10 0 2 7 79 0 2 7 133 0 2 7 2 0 2 7 4 0 - 3 7 1 0 2 7 31 0 4 7 5 0 2 7 33 0 2 7 10 0 2 7 79 0 3 7 132 0 3 7 1 0 2 7 5 0 2 7 1 0 3 - 7 31 0 3 7 5 0 2 7 33 0 3 7 9 0 3 7 78 0 3 7 133 0 2 7 2 0 2 7 4 0 2 7 2 0 2 7 32 0 2 7 - 5 0 3 7 33 0 3 7 9 0 3 7 78 0 3 7 132 0 2 7 2 0 3 7 3 0 2 7 2 0 3 7 39 0 7 7 28 0 3 7 9 - 0 3 7 78 0 3 7 132 0 3 7 2 0 2 7 3 0 3 7 2 0 2 7 39 0 8 7 28 0 3 7 7 0 4 7 79 0 3 7 131 - 0 3 7 2 0 3 7 3 0 2 7 2 0 3 7 37 0 6 7 31 0 3 7 7 0 4 7 79 0 3 7 132 0 2 7 3 0 2 7 3 0 2 - 7 3 0 2 7 9 0 3 7 24 0 5 7 34 0 3 7 5 0 5 7 6 0 3 7 18 0 2 7 51 0 3 7 131 0 3 7 3 0 2 7 - 2 0 3 7 3 0 2 7 8 0 5 7 5 0 2 7 3 0 2 7 6 0 2 7 3 0 5 7 5 0 10 7 16 0 6 7 2 0 7 7 6 0 5 - 7 16 0 3 7 6 0 4 7 8 0 2 7 4 0 3 7 7 0 4 7 8 0 7 7 132 0 2 7 3 0 3 7 2 0 2 7 3 0 3 7 7 0 - 6 7 5 0 2 7 2 0 3 7 6 0 2 7 5 0 2 7 6 0 10 7 17 0 12 7 7 0 6 7 6 0 2 7 8 0 3 7 5 0 5 7 7 - 0 3 7 2 0 5 7 6 0 5 7 7 0 7 7 132 0 2 7 4 0 2 7 2 0 2 7 4 0 2 7 7 0 3 7 2 0 2 7 4 0 3 7 - 2 0 3 7 5 0 2 7 5 0 2 7 12 0 4 7 18 0 10 7 8 0 3 7 2 0 2 7 5 0 3 7 3 0 2 7 3 0 2 7 4 0 3 - 7 2 0 2 7 7 0 2 7 2 0 4 7 6 0 3 7 2 0 2 7 6 0 2 7 3 0 3 7 131 0 3 7 4 0 2 7 2 0 2 7 3 0 - 3 7 6 0 3 7 3 0 2 7 4 0 2 7 2 0 3 7 5 0 3 7 4 0 3 7 11 0 4 7 19 0 7 7 10 0 3 7 3 0 2 7 4 - 0 3 7 3 0 3 7 2 0 3 7 3 0 3 7 3 0 1 7 7 0 2 7 1 0 4 7 5 0 1 7 1 0 3 7 3 0 1 7 6 0 2 7 4 - 0 2 7 132 0 2 7 4 0 3 7 1 0 2 7 4 0 2 7 6 0 3 7 3 0 2 7 4 0 3 7 2 0 3 7 3 0 1 7 1 0 2 7 - 5 0 2 7 11 0 3 7 20 0 3 7 14 0 3 7 3 0 2 7 4 0 3 7 3 0 3 7 3 0 3 7 2 0 3 7 3 0 2 7 7 0 1 - 7 1 0 4 7 3 0 7 7 3 0 2 7 5 0 2 7 4 0 3 7 131 0 3 7 4 0 6 7 3 0 3 7 6 0 2 7 3 0 3 7 4 0 - 2 7 3 0 3 7 1 0 6 7 4 0 3 7 10 0 3 7 21 0 3 7 14 0 2 7 3 0 3 7 4 0 3 7 3 0 2 7 3 0 3 7 3 - 0 2 7 3 0 2 7 7 0 13 7 1 0 2 7 3 0 2 7 6 0 2 7 4 0 2 7 132 0 2 7 5 0 2 7 1 0 2 7 4 0 3 7 - 5 0 2 7 3 0 4 7 3 0 2 7 4 0 6 7 1 0 2 7 5 0 2 7 6 0 1 7 3 0 3 7 21 0 3 7 14 0 2 7 3 0 4 - 7 3 0 3 7 3 0 3 7 3 0 3 7 2 0 3 7 2 0 2 7 8 0 4 7 1 0 6 7 2 0 3 7 2 0 2 7 6 0 2 7 4 0 3 - 7 131 0 3 7 5 0 4 7 5 0 2 7 6 0 2 7 4 0 2 7 4 0 2 7 3 0 6 7 1 0 3 7 5 0 2 7 5 0 2 7 2 0 - 3 7 22 0 3 7 14 0 2 7 4 0 2 7 3 0 3 7 3 0 3 7 3 0 3 7 3 0 2 7 1 0 3 7 4 0 2 7 2 0 4 7 2 - 0 5 7 3 0 2 7 1 0 3 7 4 0 2 7 1 0 2 7 4 0 3 7 131 0 2 7 6 0 4 7 4 0 3 7 5 0 2 7 4 0 2 7 - 5 0 1 7 4 0 2 7 5 0 2 7 5 0 2 7 5 0 2 7 2 0 3 7 22 0 3 7 14 0 2 7 4 0 2 7 4 0 3 7 2 0 4 - 7 3 0 2 7 3 0 6 7 4 0 2 7 3 0 3 7 10 0 6 7 4 0 2 7 1 0 2 7 4 0 3 7 131 0 3 7 6 0 3 7 5 0 - 3 7 5 0 2 7 3 0 3 7 4 0 2 7 3 0 2 7 5 0 3 7 5 0 2 7 4 0 3 7 1 0 3 7 23 0 3 7 14 0 2 7 3 - 0 3 7 3 0 3 7 2 0 4 7 3 0 3 7 3 0 4 7 5 0 2 7 3 0 4 7 10 0 4 7 5 0 2 7 2 0 2 7 4 0 3 7 - 131 0 2 7 15 0 2 7 6 0 2 7 2 0 3 7 5 0 2 7 2 0 2 7 6 0 2 7 6 0 2 7 3 0 3 7 1 0 3 7 23 0 - 3 7 15 0 2 7 2 0 3 7 4 0 3 7 1 0 2 7 1 0 2 7 2 0 3 7 4 0 2 7 6 0 2 7 4 0 3 7 11 0 2 7 6 - 0 2 7 3 0 2 7 3 0 4 7 130 0 3 7 14 0 3 7 6 0 6 7 6 0 6 7 6 0 2 7 6 0 2 7 2 0 3 7 2 0 2 7 - 1 0 6 7 17 0 3 7 15 0 6 7 5 0 5 7 2 0 6 7 5 0 3 7 3 0 3 7 5 0 2 7 12 0 3 7 3 0 3 7 4 0 2 - 7 2 0 2 7 1 0 2 7 130 0 2 7 15 0 3 7 6 0 5 7 7 0 5 7 6 0 3 7 6 0 6 7 2 0 10 7 17 0 2 7 - 16 0 5 7 6 0 4 7 3 0 5 7 6 0 8 7 5 0 3 7 12 0 8 7 5 0 6 7 1 0 2 7 129 0 3 7 15 0 3 7 7 0 - 3 7 9 0 2 7 8 0 2 7 8 0 3 7 4 0 3 7 23 0 3 7 17 0 3 7 8 0 2 7 4 0 4 7 8 0 5 7 7 0 2 7 14 - 0 5 7 7 0 5 7 2 0 3 7 128 0 2 7 16 0 3 7 29 0 2 7 41 0 3 7 58 0 2 7 27 0 3 7 4 0 2 7 127 - 0 3 7 16 0 3 7 72 0 2 7 224 0 2 7 18 0 1 7 2432)) + #{7 255 7 255 7 255 7 255 7 255 7 255 7 255 7 35 0 3 7 255 7 58 0 4 7 255 7 58 0 + 1 4 1 0 0 7 255 7 57 0 1 4 2 0 0 7 255 7 57 0 1 4 2 0 0 1 6 7 255 7 50 0 1 4 2 + 0 0 1 16 7 255 7 40 0 0 4 2 0 0 1 21 7 255 7 35 0 1 4 2 0 0 1 2 7 1 1 8 7 1 1 + 9 7 255 7 31 0 1 4 2 0 0 1 2 7 1 1 8 7 1 1 11 7 255 7 29 0 1 4 1 0 1 1 1 7 2 1 + 8 7 1 1 2 7 4 1 5 7 255 7 26 0 1 4 2 0 0 1 2 7 1 1 8 7 2 1 1 7 7 1 5 7 255 7 + 24 0 1 4 2 0 0 1 2 7 1 1 8 7 2 1 1 7 2 1 0 7 4 1 5 7 255 7 23 0 1 4 1 0 1 1 2 + 7 1 1 8 7 1 1 1 7 2 1 3 7 3 1 5 7 255 7 22 0 0 4 2 0 0 1 2 7 2 1 8 7 1 1 1 7 2 + 1 5 7 2 1 5 7 255 7 20 0 1 4 2 0 0 1 2 7 1 1 9 7 1 1 2 7 1 1 6 7 1 1 6 7 255 7 + 19 0 1 4 2 0 0 1 2 7 1 1 8 7 2 1 2 7 2 1 15 7 255 7 18 0 1 4 1 0 1 1 1 7 2 1 8 + 7 2 1 3 7 3 1 7 7 2 1 2 7 255 7 17 0 1 4 2 0 0 1 2 7 1 1 9 7 1 1 5 7 4 1 4 7 4 + 1 2 7 255 7 16 0 1 4 2 0 0 1 2 7 1 1 9 7 1 1 6 7 4 1 3 7 5 1 2 7 255 7 15 0 1 + 4 1 0 1 1 2 7 1 1 9 7 1 1 8 7 3 1 2 7 1 1 0 7 3 1 2 7 255 7 14 0 0 4 2 0 0 1 2 + 7 2 1 9 7 1 1 10 7 2 1 1 7 1 1 1 7 2 1 3 7 255 7 12 0 1 4 2 0 0 1 2 7 1 1 9 7 + 2 1 1 7 1 1 6 7 2 1 0 7 2 1 2 7 2 1 2 7 255 7 12 0 1 4 2 0 0 1 2 7 1 1 4 7 1 1 + 2 7 2 1 1 7 2 1 5 7 2 1 0 7 2 1 3 7 1 1 4 7 255 7 10 0 1 4 1 0 1 1 2 7 9 1 1 7 + 1 1 3 7 3 1 3 7 2 1 0 7 2 1 3 7 2 1 4 7 255 7 8 0 1 4 2 0 0 1 2 7 9 1 9 7 4 1 + 0 7 2 1 1 7 3 1 2 7 2 1 5 7 255 7 7 0 1 4 2 0 0 1 23 7 7 1 1 7 8 1 8 7 255 7 5 + 0 1 4 1 0 1 1 25 7 4 1 1 7 2 1 0 7 5 1 9 7 255 7 4 0 0 4 2 0 1 1 13 7 7 1 10 7 + 2 1 2 7 2 1 12 7 255 7 1 0 1 4 2 0 1 7 1 1 4 7 16 1 8 7 2 1 20 7 255 0 1 4 2 0 + 0 7 25 1 7 7 1 1 23 7 253 0 1 4 1 0 1 7 27 1 5 7 1 1 25 7 251 0 0 4 2 0 1 7 28 + 1 4 7 1 1 23 7 157 0 7 7 86 0 1 4 2 0 1 7 30 1 25 7 159 0 1 7 6 0 0 7 85 0 1 4 + 1 0 1 7 33 1 20 7 157 0 6 7 2 0 2 7 0 0 6 7 79 0 0 4 2 0 1 7 35 1 14 7 159 0 2 + 7 3 0 1 7 1 0 8 7 2 0 3 7 71 2 4 4 2 0 1 7 39 1 4 7 164 0 1 7 7 0 0 7 1 0 4 7 + 8 0 1 7 68 2 6 4 2 0 0 7 210 0 0 7 3 0 1 7 3 0 0 7 1 0 1 7 7 0 3 7 0 0 0 7 65 + 2 8 4 1 0 1 7 209 0 1 7 1 0 11 7 7 0 4 7 0 0 0 7 64 2 10 4 0 0 0 2 0 7 209 0 0 + 7 2 0 4 7 4 0 2 7 7 0 3 7 1 0 0 7 62 2 14 7 208 0 1 7 2 0 3 7 7 0 1 7 0 0 9 7 + 1 0 0 7 61 2 17 7 206 0 0 7 4 0 1 7 3 0 2 7 2 0 1 7 5 0 1 7 3 0 0 7 61 2 17 7 + 206 0 1 7 4 0 0 7 3 0 3 7 0 0 1 7 3 0 2 7 0 0 0 7 3 0 0 7 60 2 19 7 198 2 7 0 + 1 7 3 0 0 7 3 0 3 7 0 0 0 7 4 0 5 7 0 0 2 7 60 2 9 0 0 2 8 7 193 2 13 0 5 7 3 + 0 3 7 0 0 0 7 5 0 1 7 1 0 2 2 0 7 61 2 8 0 1 4 1 2 7 7 187 2 23 0 0 7 3 0 2 7 + 1 0 1 7 7 0 1 2 5 7 57 2 9 0 0 4 2 0 0 2 5 7 184 2 27 0 0 7 9 0 0 7 6 0 1 2 8 + 7 55 2 9 0 0 4 2 0 0 2 5 7 181 2 30 0 1 7 8 0 7 2 11 7 53 2 21 7 178 2 34 0 1 + 7 5 0 1 2 21 7 49 2 22 7 176 2 39 0 6 2 23 7 46 2 23 7 174 2 74 7 43 2 25 7 + 171 2 78 7 40 2 16 0 0 2 10 7 168 2 81 7 37 2 18 0 0 4 2 2 7 7 166 2 83 7 35 2 + 20 0 0 4 2 0 0 2 6 7 164 2 86 7 33 2 20 0 1 4 1 0 1 2 6 7 162 2 88 7 31 2 22 0 + 0 4 2 0 0 2 6 7 161 2 91 7 28 2 24 0 0 4 2 0 0 2 3 7 162 2 94 7 26 2 15 7 9 0 + 0 4 2 0 0 7 165 2 95 7 24 2 15 7 10 0 1 4 1 0 0 7 164 2 98 7 22 2 14 7 12 0 0 + 4 2 0 0 7 163 2 100 7 19 2 14 7 14 0 0 4 2 0 0 7 161 2 61 0 1 2 39 7 17 2 14 7 + 15 0 3 7 161 2 61 0 5 2 38 7 13 2 14 7 182 2 62 0 0 7 0 0 0 7 1 0 3 2 38 7 7 2 + 16 7 182 2 63 0 0 7 0 0 0 7 1 0 0 7 1 0 2 2 60 7 181 2 64 0 3 7 1 0 0 7 1 0 0 + 7 0 0 2 2 57 7 182 2 64 0 0 7 0 0 4 7 0 0 1 7 0 0 0 7 0 0 4 2 51 7 183 2 65 0 + 0 7 0 0 0 7 0 0 2 7 0 0 0 7 1 0 0 7 1 0 0 7 1 0 2 2 48 7 183 2 67 0 1 7 1 0 4 + 7 0 0 0 7 1 0 0 7 1 0 3 2 46 7 183 2 69 0 1 7 0 0 0 7 1 0 4 7 0 0 0 7 1 0 0 7 + 1 0 1 2 44 7 183 2 71 0 2 7 1 0 0 7 1 0 6 7 1 0 0 2 43 7 185 2 72 0 4 7 0 0 1 + 7 0 0 1 7 0 0 4 2 42 7 185 2 76 0 3 7 1 0 0 7 1 0 0 7 1 0 0 2 15 7 1 2 23 7 + 187 2 78 0 4 7 1 0 0 7 0 0 0 2 16 7 6 2 16 7 189 2 82 0 4 2 17 7 15 2 2 7 193 + 2 106 7 212 2 105 7 213 2 105 7 212 2 106 7 212 2 105 7 213 2 105 7 213 2 105 + 7 212 2 105 7 213 2 105 7 213 2 104 7 214 2 103 7 215 2 103 7 214 2 103 7 215 + 2 103 7 215 2 104 7 214 2 104 7 214 2 82 7 10 2 10 7 213 2 81 7 13 2 9 7 213 2 + 36 7 33 2 10 7 13 2 9 7 213 2 26 7 44 2 9 7 13 2 9 7 213 2 13 7 4 2 7 7 44 2 8 + 7 14 2 9 7 213 2 8 7 9 2 7 7 44 2 8 7 14 2 9 7 212 2 8 7 10 2 7 7 44 2 8 7 15 + 2 8 7 212 2 7 7 11 2 7 7 44 2 8 7 15 2 8 7 212 2 7 7 11 2 6 7 45 2 8 7 15 2 8 + 7 212 2 7 7 11 2 6 7 45 2 7 7 16 2 8 7 212 2 6 7 11 2 7 7 45 2 7 7 16 2 8 7 + 211 2 7 7 11 2 7 7 45 2 7 7 16 2 8 7 211 2 7 7 11 2 7 7 45 2 7 7 17 2 8 7 210 + 2 7 7 11 2 7 7 45 2 7 7 17 2 8 7 210 2 6 7 12 2 7 7 45 2 7 7 17 2 8 7 210 2 6 + 7 12 2 6 7 46 2 6 7 18 2 8 7 210 2 6 7 12 2 6 7 46 2 6 7 18 2 8 7 209 2 7 7 12 + 2 6 7 45 2 7 7 18 2 8 7 209 2 6 7 12 2 7 7 45 2 7 7 18 2 8 7 209 2 6 7 12 2 7 + 7 45 2 7 7 19 2 7 7 209 2 6 7 12 2 7 7 45 2 7 7 19 2 7 7 209 2 6 7 12 2 6 7 46 + 2 7 7 19 2 7 7 208 2 7 7 12 2 6 7 46 2 6 7 20 2 7 7 208 2 6 7 13 2 6 7 46 2 6 + 7 20 2 7 7 208 2 6 7 13 2 6 7 46 2 6 7 20 2 7 7 208 2 6 7 13 2 6 7 46 2 6 7 20 + 2 7 7 208 2 6 7 12 2 7 7 46 2 6 7 21 2 7 7 207 2 6 7 12 2 7 7 45 2 7 7 21 2 7 + 7 206 2 6 7 13 2 6 7 46 2 7 7 21 2 7 7 206 2 6 7 13 2 6 7 46 2 6 7 22 2 7 7 + 206 2 6 7 13 2 6 7 46 2 6 7 22 2 7 7 206 2 6 7 13 2 6 7 46 2 6 7 22 2 7 7 206 + 2 6 7 13 2 6 7 46 2 6 7 22 2 7 7 205 2 6 7 14 2 6 7 46 2 6 7 23 2 6 7 205 2 6 + 7 13 2 6 7 47 2 6 7 23 2 6 7 205 2 6 7 13 2 6 7 47 2 6 7 23 2 6 7 205 2 6 7 13 + 2 6 7 47 2 6 7 23 2 6 7 205 2 6 7 13 2 6 7 46 2 7 7 23 2 6 7 205 2 6 7 13 2 6 + 7 46 2 6 7 24 2 6 7 204 2 6 7 14 2 6 7 46 2 6 7 24 2 6 7 201 2 10 7 13 2 6 7 + 46 2 6 7 24 2 6 7 200 2 12 7 9 2 10 7 45 2 6 7 24 2 6 7 200 2 13 7 7 2 12 7 44 + 2 6 7 24 2 7 7 198 2 15 7 5 2 14 7 43 2 6 7 21 2 11 7 197 2 15 7 5 2 14 7 41 2 + 9 7 19 2 14 7 195 2 15 7 5 2 14 7 40 2 12 7 17 2 14 7 196 2 14 7 5 2 14 7 39 2 + 14 7 15 2 16 7 195 2 13 7 6 2 14 7 39 2 14 7 15 2 16 7 197 2 3 7 1 2 4 7 8 2 + 12 7 40 2 14 7 15 2 16 7 218 2 3 7 2 2 3 7 41 2 14 7 16 2 6 7 1 2 5 7 255 7 16 + 2 14 7 17 2 4 7 3 2 2 7 255 7 19 2 12 7 255 7 51 2 3 7 1 2 4 7 255 7 255 7 255 + 7 255 7 255 7 255 7 255 7 255 7 255 7 255 7 255 7 255 7 255 7 208 0 2 7 255 7 + 50 0 1 7 6 0 3 7 72 0 1 7 230 0 2 7 5 0 4 7 72 0 1 7 1 0 4 7 222 0 3 7 4 0 4 7 + 72 0 10 7 220 0 3 7 5 0 4 7 71 0 12 7 82 0 1 7 133 0 4 7 4 0 4 7 70 0 6 7 5 0 + 2 7 80 0 2 7 132 0 4 7 4 0 5 7 69 0 5 7 8 0 1 7 79 0 2 7 132 0 5 7 3 0 2 7 0 0 + 1 7 70 0 5 7 8 0 1 7 79 0 2 7 132 0 1 7 0 0 1 7 4 0 1 7 0 0 2 7 30 0 1 7 5 0 1 + 7 29 0 1 7 0 0 1 7 9 0 1 7 78 0 2 7 132 0 1 7 0 0 1 7 4 0 1 7 1 0 1 7 30 0 2 7 + 4 0 2 7 31 0 2 7 9 0 1 7 78 0 1 7 132 0 1 7 1 0 1 7 3 0 2 7 0 0 1 7 30 0 3 7 4 + 0 1 7 32 0 1 7 9 0 1 7 78 0 2 7 131 0 2 7 0 0 1 7 4 0 1 7 0 0 2 7 30 0 2 7 4 0 + 1 7 32 0 2 7 8 0 2 7 77 0 2 7 132 0 1 7 1 0 1 7 3 0 1 7 1 0 1 7 31 0 1 7 4 0 2 + 7 32 0 2 7 8 0 2 7 77 0 2 7 131 0 1 7 1 0 2 7 2 0 1 7 1 0 2 7 38 0 6 7 27 0 2 + 7 8 0 2 7 77 0 2 7 131 0 2 7 1 0 1 7 2 0 2 7 1 0 1 7 38 0 7 7 27 0 2 7 6 0 3 7 + 78 0 2 7 130 0 2 7 1 0 2 7 2 0 1 7 1 0 2 7 36 0 5 7 30 0 2 7 6 0 3 7 78 0 2 7 + 131 0 1 7 2 0 1 7 2 0 1 7 2 0 1 7 8 0 2 7 23 0 4 7 33 0 2 7 4 0 4 7 5 0 2 7 17 + 0 1 7 50 0 2 7 130 0 2 7 2 0 1 7 1 0 2 7 2 0 1 7 7 0 4 7 4 0 1 7 2 0 1 7 5 0 1 + 7 2 0 4 7 4 0 9 7 15 0 5 7 1 0 6 7 5 0 4 7 15 0 2 7 5 0 3 7 7 0 1 7 3 0 2 7 6 + 0 3 7 7 0 6 7 131 0 1 7 2 0 2 7 1 0 1 7 2 0 2 7 6 0 5 7 4 0 1 7 1 0 2 7 5 0 1 + 7 4 0 1 7 5 0 9 7 16 0 11 7 6 0 5 7 5 0 1 7 7 0 2 7 4 0 4 7 6 0 2 7 1 0 4 7 5 + 0 4 7 6 0 6 7 131 0 1 7 3 0 1 7 1 0 1 7 3 0 1 7 6 0 2 7 1 0 1 7 3 0 2 7 1 0 2 + 7 4 0 1 7 4 0 1 7 11 0 3 7 17 0 9 7 7 0 2 7 1 0 1 7 4 0 2 7 2 0 1 7 2 0 1 7 3 + 0 2 7 1 0 1 7 6 0 1 7 1 0 3 7 5 0 2 7 1 0 1 7 5 0 1 7 2 0 2 7 130 0 2 7 3 0 1 + 7 1 0 1 7 2 0 2 7 5 0 2 7 2 0 1 7 3 0 1 7 1 0 2 7 4 0 2 7 3 0 2 7 10 0 3 7 18 + 0 6 7 9 0 2 7 2 0 1 7 3 0 2 7 2 0 2 7 1 0 2 7 2 0 2 7 2 0 0 7 6 0 1 7 0 0 3 7 + 4 0 0 7 0 0 2 7 2 0 0 7 5 0 1 7 3 0 1 7 131 0 1 7 3 0 2 7 0 0 1 7 3 0 1 7 5 0 + 2 7 2 0 1 7 3 0 2 7 1 0 2 7 2 0 0 7 0 0 1 7 4 0 1 7 10 0 2 7 19 0 2 7 13 0 2 7 + 2 0 1 7 3 0 2 7 2 0 2 7 2 0 2 7 1 0 2 7 2 0 1 7 6 0 0 7 0 0 3 7 2 0 6 7 2 0 1 + 7 4 0 1 7 3 0 2 7 130 0 2 7 3 0 5 7 2 0 2 7 5 0 1 7 2 0 2 7 3 0 1 7 2 0 2 7 0 + 0 5 7 3 0 2 7 9 0 2 7 20 0 2 7 13 0 1 7 2 0 2 7 3 0 2 7 2 0 1 7 2 0 2 7 2 0 1 + 7 2 0 1 7 6 0 12 7 0 0 1 7 2 0 1 7 5 0 1 7 3 0 1 7 131 0 1 7 4 0 1 7 0 0 1 7 3 + 0 2 7 4 0 1 7 2 0 3 7 2 0 1 7 3 0 5 7 0 0 1 7 4 0 1 7 5 0 0 7 2 0 2 7 20 0 2 7 + 13 0 1 7 2 0 3 7 2 0 2 7 2 0 2 7 2 0 2 7 1 0 2 7 1 0 1 7 7 0 3 7 0 0 5 7 1 0 2 + 7 1 0 1 7 5 0 1 7 3 0 2 7 130 0 2 7 4 0 3 7 4 0 1 7 5 0 1 7 3 0 1 7 3 0 1 7 2 + 0 5 7 0 0 2 7 4 0 1 7 4 0 1 7 1 0 2 7 21 0 2 7 13 0 1 7 3 0 1 7 2 0 2 7 2 0 2 + 7 2 0 2 7 2 0 1 7 0 0 2 7 3 0 1 7 1 0 3 7 1 0 4 7 2 0 1 7 0 0 2 7 3 0 1 7 0 0 + 1 7 3 0 2 7 130 0 1 7 5 0 3 7 3 0 2 7 4 0 1 7 3 0 1 7 4 0 0 7 3 0 1 7 4 0 1 7 + 4 0 1 7 4 0 1 7 1 0 2 7 21 0 2 7 13 0 1 7 3 0 1 7 3 0 2 7 1 0 3 7 2 0 1 7 2 0 + 5 7 3 0 1 7 2 0 2 7 9 0 5 7 3 0 1 7 0 0 1 7 3 0 2 7 130 0 2 7 5 0 2 7 4 0 2 7 + 4 0 1 7 2 0 2 7 3 0 1 7 2 0 1 7 4 0 2 7 4 0 1 7 3 0 2 7 0 0 2 7 22 0 2 7 13 0 + 1 7 2 0 2 7 2 0 2 7 1 0 3 7 2 0 2 7 2 0 3 7 4 0 1 7 2 0 3 7 9 0 3 7 4 0 1 7 1 + 0 1 7 3 0 2 7 130 0 1 7 14 0 1 7 5 0 1 7 1 0 2 7 4 0 1 7 1 0 1 7 5 0 1 7 5 0 1 + 7 2 0 2 7 0 0 2 7 22 0 2 7 14 0 1 7 1 0 2 7 3 0 2 7 0 0 1 7 0 0 1 7 1 0 2 7 3 + 0 1 7 5 0 1 7 3 0 2 7 10 0 1 7 5 0 1 7 2 0 1 7 2 0 3 7 129 0 2 7 13 0 2 7 5 0 + 5 7 5 0 5 7 5 0 1 7 5 0 1 7 1 0 2 7 1 0 1 7 0 0 5 7 16 0 2 7 14 0 5 7 4 0 4 7 + 1 0 5 7 4 0 2 7 2 0 2 7 4 0 1 7 11 0 2 7 2 0 2 7 3 0 1 7 1 0 1 7 0 0 1 7 129 0 + 1 7 14 0 2 7 5 0 4 7 6 0 4 7 5 0 2 7 5 0 5 7 1 0 9 7 16 0 1 7 15 0 4 7 5 0 3 7 + 2 0 4 7 5 0 7 7 4 0 2 7 11 0 7 7 4 0 5 7 0 0 1 7 128 0 2 7 14 0 2 7 6 0 2 7 8 + 0 1 7 7 0 1 7 7 0 2 7 3 0 2 7 22 0 2 7 16 0 2 7 7 0 1 7 3 0 3 7 7 0 4 7 6 0 1 + 7 13 0 4 7 6 0 4 7 1 0 2 7 127 0 1 7 15 0 2 7 28 0 1 7 40 0 2 7 57 0 1 7 26 0 + 2 7 3 0 1 7 126 0 2 7 15 0 2 7 71 0 1 7 223 0 1 7 17 0 0 7 255 7 255 7 255 7 + 255 7 255 7 255 7 255 7 255 7 255 7 127 + }) ;; @@ -1070,22 +1088,22 @@ (defun rle-blit-splash (splash) (loop with index = 0 - while splash - do (loop with value = (pop splash) - with count = (pop splash) - repeat count + for i from 0 below (length splash) by 2 + for value = (aref splash i) + for count = (1+ (aref splash (1+ i))) + do (loop repeat count do (setf (memref-int (vga-memory-map) :index index :type :unsigned-byte8) value) - (incf index))) + (incf index))) nil) ;; show the splash screen (defun g-show-splash () (with-textmode-restored () (setf (vga-state) +vga-state-320x200x256+) - (rle-blit-splash +vga-g-splash+) + (rle-blit-splash *vga-g-splash*) (read-char) (g-clear)) (values)) From ffjeld at common-lisp.net Mon Mar 19 21:09:26 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Mon, 19 Mar 2007 16:09:26 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070319210926.96F5055352@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv32527 Modified Files: special-operators-cl.lisp Log Message: Fix a compiler bug wrt. compiling lexical jumps across dynamic bindings. --- /project/movitz/cvsroot/movitz/special-operators-cl.lisp 2007/02/20 20:33:30 1.50 +++ /project/movitz/cvsroot/movitz/special-operators-cl.lisp 2007/03/19 21:09:26 1.51 @@ -9,7 +9,7 @@ ;;;; Created at: Fri Nov 24 16:31:11 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: special-operators-cl.lisp,v 1.50 2007/02/20 20:33:30 ffjeld Exp $ +;;;; $Id: special-operators-cl.lisp,v 1.51 2007/03/19 21:09:26 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -78,7 +78,7 @@ `((:locally (:pushl (:edi (:edi-offset dynamic-env))))) `((:pushl :esp))) (compiler-call #'compile-form ; binding value - :with-stack-used (incf stack-used) + :with-stack-used (incf stack-used) :env init-env :defaults all :form init-form @@ -136,8 +136,7 @@ (:multiple-values :eax) (t init-register)) final-form)))))) - (setf (stack-used local-env) - (stack-used init-env)) + (setf (stack-used local-env) stack-used) (flet ((compile-body () (if (= 0 (num-specials local-env)) (compiler-call #'compile-implicit-progn From ffjeld at common-lisp.net Tue Mar 20 22:40:41 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Tue, 20 Mar 2007 17:40:41 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070320224041.355044C0D0@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv31692 Modified Files: arithmetic-macros.lisp Log Message: In define-number-relational, don't create boundlessly recursive compiler-macros, please! --- /project/movitz/cvsroot/movitz/losp/muerte/arithmetic-macros.lisp 2006/04/10 11:50:34 1.16 +++ /project/movitz/cvsroot/movitz/losp/muerte/arithmetic-macros.lisp 2007/03/20 22:40:41 1.17 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Sat Jul 17 13:42:46 2004 ;;;; -;;;; $Id: arithmetic-macros.lisp,v 1.16 2006/04/10 11:50:34 ffjeld Exp $ +;;;; $Id: arithmetic-macros.lisp,v 1.17 2007/03/20 22:40:41 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -523,8 +523,9 @@ (cond ((and (movitz:movitz-constantp n1 env) (movitz:movitz-constantp n2 env)) - (list ',2op-name (movitz:movitz-eval n1 env) (movitz:movitz-eval n2 env))) - ((movitz:movitz-constantp n1 env) + (if (funcall name (movitz:movitz-eval n1 env) (movitz:movitz-eval n2 env)) + t nil)) + ((movitz:movitz-constantp n1 env) (let ((n1 (movitz::movitz-eval n1 env))) (check-type n1 number) (if (typep n1 '(signed-byte 30)) From ffjeld at common-lisp.net Wed Mar 21 19:57:52 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Wed, 21 Mar 2007 14:57:52 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070321195752.A98571C0C9@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv26091 Modified Files: compiler.lisp Log Message: Add support for &aux in defun. --- /project/movitz/cvsroot/movitz/compiler.lisp 2007/03/16 18:03:09 1.184 +++ /project/movitz/cvsroot/movitz/compiler.lisp 2007/03/21 19:57:52 1.185 @@ -8,7 +8,7 @@ ;;;; Created at: Wed Oct 25 12:30:49 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: compiler.lisp,v 1.184 2007/03/16 18:03:09 ffjeld Exp $ +;;;; $Id: compiler.lisp,v 1.185 2007/03/21 19:57:52 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -246,8 +246,7 @@ ;; mutually recursive (lexically bound) functions. (with-retries-until-true (retry-pass1 "Retry first-pass compilation of ~S." name) ;; First-pass is mostly functional, so it can safely be restarted. - (multiple-value-bind (required-vars optional-vars rest-var key-vars - aux-vars allow-p min max edx-var) + (multiple-value-bind (required-vars optional-vars rest-var key-vars aux-vars allow-p min max edx-var) (decode-normal-lambda-list lambda-list) (declare (ignore aux-vars allow-p min max)) ;; There are several main branches through the function @@ -307,7 +306,7 @@ (setf (extended-code function-env) (append arg-init-code (compiler-call #'compile-form - :form (make-special-funarg-shadowing function-env function-form) + :form (make-special-funarg-shadowing function-env function-form) :funobj funobj :env function-env :top-level-p top-level-p @@ -4190,13 +4189,12 @@ (defun add-bindings-from-lambda-list (lambda-list env) "From a (normal) , add bindings to ." (let ((arg-pos 0)) - (multiple-value-bind (required-vars optional-vars rest-var key-vars auxes allow-p - min-args max-args edx-var oddeven key-vars-p) + (multiple-value-bind (required-vars optional-vars rest-var key-vars auxes allow-p min-args max-args edx-var oddeven key-vars-p) (decode-normal-lambda-list lambda-list) - (declare (ignore auxes)) (setf (min-args env) min-args (max-args env) max-args (oddeven-args env) oddeven + (aux-vars env) auxes (allow-other-keys-p env) allow-p) (flet ((shadow-when-special (formal env) "Iff is special, return a fresh variable-name that takes 's place @@ -4999,6 +4997,7 @@ function-body (let ((shadowing (append (special-variable-shadows env) + (aux-vars env) (when (and (rest-var env) (not (movitz-env-get (rest-var env) 'dynamic-extent nil env nil)) (not (movitz-env-get (rest-var env) 'ignore nil env nil))) @@ -5518,7 +5517,7 @@ (compiler-values-bind (&all upstream) (typecase form (symbol (compiler-call #'compile-symbol :forward downstream)) - (cons (compiler-call #'compile-cons :forward downstream)) + (cons (compiler-call #'compile-cons :forward downstream)) (t (compiler-call #'compile-self-evaluating :forward downstream))) (when (typep (upstream :final-form) 'lexical-binding) (labels ((fix-extent (binding) From ffjeld at common-lisp.net Wed Mar 21 19:57:58 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Wed, 21 Mar 2007 14:57:58 -0500 (EST) Subject: [movitz-cvs] CVS movitz Message-ID: <20070321195758.47F6D1E077@common-lisp.net> Update of /project/movitz/cvsroot/movitz In directory clnet:/tmp/cvs-serv26107 Modified Files: environment.lisp Log Message: Add support for &aux in defun. --- /project/movitz/cvsroot/movitz/environment.lisp 2007/03/01 23:16:10 1.21 +++ /project/movitz/cvsroot/movitz/environment.lisp 2007/03/21 19:57:54 1.22 @@ -9,7 +9,7 @@ ;;;; Created at: Fri Nov 3 11:40:15 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: environment.lisp,v 1.21 2007/03/01 23:16:10 ffjeld Exp $ +;;;; $Id: environment.lisp,v 1.22 2007/03/21 19:57:54 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -217,6 +217,9 @@ :accessor key-decode-map) (key-decode-shift :accessor key-decode-shift) + (aux-vars + :initform nil + :accessor aux-vars) (need-normalized-ecx-p :initarg :need-normalized-ecx-p :accessor need-normalized-ecx-p) From ffjeld at common-lisp.net Wed Mar 21 20:17:48 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Wed, 21 Mar 2007 15:17:48 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070321201748.7308F74387@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv28896 Modified Files: lists.lisp Log Message: Make mapc err if no lists are provided, rather than spin eternally. --- /project/movitz/cvsroot/movitz/losp/muerte/lists.lisp 2007/02/22 20:28:37 1.21 +++ /project/movitz/cvsroot/movitz/losp/muerte/lists.lisp 2007/03/21 20:17:48 1.22 @@ -9,7 +9,7 @@ ;;;; Created at: Tue Dec 5 18:40:11 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: lists.lisp,v 1.21 2007/02/22 20:28:37 ffjeld Exp $ +;;;; $Id: lists.lisp,v 1.22 2007/03/21 20:17:48 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -139,8 +139,9 @@ (if (>= i n) (pop r)))) (defun nthcdr (n list) - (do ((n (check-the fixnum n))) + (do ((n (check-the index n))) ((or (null list) (not (plusp n))) list) + (declare (index n)) (decf n) (setf list (cdr list)))) @@ -327,6 +328,10 @@ first-list)) (t (function &rest lists) (declare (dynamic-extent lists)) + (unless lists + (error 'wrong-argument-count + :function #'mapc + :argument-count 0)) (let ((first-list (car lists))) (unless (some 'null lists) (prog () From ffjeld at common-lisp.net Wed Mar 21 20:20:12 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Wed, 21 Mar 2007 15:20:12 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070321202012.806F01E081@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv29643 Modified Files: segments.lisp Log Message: Add some without-check-stack-limit declarations, because these operators are used by the stack-exhausted handler. --- /project/movitz/cvsroot/movitz/losp/muerte/segments.lisp 2005/06/10 22:43:52 1.16 +++ /project/movitz/cvsroot/movitz/losp/muerte/segments.lisp 2007/03/21 20:20:12 1.17 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Thu May 8 14:25:06 2003 ;;;; -;;;; $Id: segments.lisp,v 1.16 2005/06/10 22:43:52 ffjeld Exp $ +;;;; $Id: segments.lisp,v 1.17 2007/03/21 20:20:12 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -22,6 +22,7 @@ (defun segment-register (segment-register-name) "Return the value of an x86 segment register, such as :cs or :ds." + (declare (without-check-stack-limit)) (macrolet ((sreg (reg) `(with-inline-assembly (:returns :untagged-fixnum-ecx) (:xorl :ecx :ecx) @@ -37,6 +38,7 @@ (defun (setf segment-register) (value segment-register-name) "This function indiscriminately sets a segment register, which is a great way to crash the machine. So know what you're doing." + (declare (without-check-stack-limit)) (check-type value (unsigned-byte 16)) (macrolet ((set-sreg (reg) `(with-inline-assembly (:returns :nothing) @@ -64,6 +66,7 @@ (defun %sgdt () "Return the location of the GDT, and the limit. Error if the GDT location is not zero modulo 4." + (declare (without-check-stack-limit)) (eval-when (:compile-toplevel) (assert (= 4 movitz:+movitz-fixnum-factor+))) (without-interrupts @@ -85,6 +88,7 @@ (defun %lgdt (base-location limit) "Set the GDT according to base-location and limit. This is the setter corresponding to the sgdt getter." + (declare (without-check-stack-limit)) (eval-when (:compile-toplevel) (assert (= 4 movitz:+movitz-fixnum-factor+))) (check-type base-location fixnum) From ffjeld at common-lisp.net Wed Mar 21 20:20:33 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Wed, 21 Mar 2007 15:20:33 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070321202033.60A002F043@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv30352 Modified Files: sequences.lisp Log Message: Add some (type index) declarations. --- /project/movitz/cvsroot/movitz/losp/muerte/sequences.lisp 2007/02/20 21:55:29 1.34 +++ /project/movitz/cvsroot/movitz/losp/muerte/sequences.lisp 2007/03/21 20:20:33 1.35 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Tue Sep 11 14:19:23 2001 ;;;; -;;;; $Id: sequences.lisp,v 1.34 2007/02/20 21:55:29 ffjeld Exp $ +;;;; $Id: sequences.lisp,v 1.35 2007/03/21 20:20:33 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -204,6 +204,7 @@ (head (cons (car list-start) nil)) (tail head)) ((or (endp p) (>= i end)) head) + (declare (index i)) (setf (cdr tail) (cons (car p) nil) tail (cdr tail))))))))) @@ -259,6 +260,7 @@ (do ((p (nthcdr start sequence)) (i start (1+ i))) ((null p) nil) + (declare (index i)) (when (test (key (pop p)) item) (return (if (not from-end) i @@ -306,10 +308,12 @@ ((not from-end) (do ((i start (1+ i))) ((>= i end)) + (declare (index i)) (when (predicate (key (sequence-ref i))) (return i)))) (t (do ((i (1- end) (1- i))) ((< i start)) + (declare (index i)) (when (predicate (key (sequence-ref i))) (return i))))))) (list @@ -318,6 +322,7 @@ (do ((p (nthcdr start sequence)) (i start (1+ i))) ((or (>= i end) (null p))) + (declare (index i)) (when (predicate (key (pop p))) (return (if (not from-end) i (let ((next-i (position-if predicate p :key key @@ -326,6 +331,7 @@ (t (do ((p (nthcdr start sequence)) (i start (1+ i))) ((null p)) + (declare (index i)) (when (predicate (key (pop p))) (return (if (not from-end) i (let ((next-i (position-if predicate p :key key :from-end t))) @@ -1851,12 +1857,14 @@ ((and (not count) (not from-end)) (do ((i start (1+ i))) ((>= i end) sequence) + (declare (index i)) (when (predicate (key (ref i))) (setf (ref i) newitem)))) ((and count (not from-end)) (do ((c 0) (i start (1+ i))) ((>= i end) sequence) + (declare (index i c)) (when (predicate (key (ref i))) (setf (ref i) newitem) (when (>= (incf c) count) @@ -1864,12 +1872,14 @@ ((and (not count) from-end) (do ((i (1- end) (1- i))) ((< i start) sequence) + (declare (index i)) (when (predicate (key (ref i))) (setf (ref i) newitem)))) ((and count from-end) (do ((c 0) (i (1- end) (1- i))) ((< i start) sequence) + (declare (index c i)) (when (predicate (key (ref i))) (setf (ref i) newitem) (when (>= (incf c) count) @@ -1884,6 +1894,7 @@ ((>= i existing-count) (nsubstitute-if newitem predicate p :end end :key key) sequence) + (declare (index i)) (when (predicate (key (car p))) (incf i)) (setf p (cdr p)))) @@ -1897,12 +1908,14 @@ (do ((i start (1+ i)) (p p (cdr p))) ((or (endp p) (>= i end)) sequence) + (declare (index i)) (when (predicate (key (car p))) (setf (car p) newitem)))) ((and (not end) count) (do ((c 0) (p p (cdr p))) ((endp p) sequence) + (declare (index c)) (when (predicate (key (car p))) (setf (car p) newitem) (when (>= (incf c) count) @@ -1912,6 +1925,7 @@ (i start (1+ i)) (p p (cdr p))) ((or (endp p) (>= i end)) sequence) + (declare (index c i)) (when (predicate (key (car p))) (setf (car p) newitem) (when (>= (incf c) count) From ffjeld at common-lisp.net Wed Mar 21 21:49:11 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Wed, 21 Mar 2007 16:49:11 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/x86-pc Message-ID: <20070321214911.4F9D51D0D2@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/x86-pc In directory clnet:/tmp/cvs-serv10270 Modified Files: vga.lisp Log Message: Patch from M. Bealby: "Double buffering, unchained mode support, optimised clear screen +routine, general tidy up for further expansion." --- /project/movitz/cvsroot/movitz/losp/x86-pc/vga.lisp 2007/03/17 15:39:26 1.10 +++ /project/movitz/cvsroot/movitz/losp/x86-pc/vga.lisp 2007/03/21 21:49:11 1.11 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Tue Sep 25 14:08:20 2001 ;;;; -;;;; $Id: vga.lisp,v 1.10 2007/03/17 15:39:26 ffjeld Exp $ +;;;; $Id: vga.lisp,v 1.11 2007/03/21 21:49:11 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -207,14 +207,14 @@ #x38 #x39 #x3A #x3B #x3C #x3D #x3E #x3F #x0C #x00 #x0F #x08 #x00))) -(defconstant +vga-state-320x200x256+ +(defconstant +vga-state-320x200x256-modex+ '((:misc . #x63) (:sequencer - #x03 #x01 #x0F #x00 #x0E) + #x03 #x01 #x0F #x00 #x06) (:crtc #x5F #x4F #x50 #x82 #x54 #x80 #xBF #x1F #x00 #x41 #x00 #x00 #x00 #x00 #x00 #x00 - #x9C #x0E #x8F #x28 #x40 #x98 #xB9 #xA3 + #x9C #x0E #x8F #x28 #x00 #x96 #xB9 #xE3 #xFF) (:graphics #x00 #x00 #x00 #x00 #x00 #x40 #x05 #x0F @@ -225,24 +225,18 @@ #x41 #x00 #x0F #x00 #x00))) -;; 640x480 in testing, functions not available yet. -(defconstant +vga-state-640x480x16+ - '((:misc . #xE3) - (:sequencer - #x03 #x01 #x08 #x00 #x06) - (:crtc - #x5F #x4F #x50 #x82 #x54 #x80 #x0B #x3E - #x00 #x40 #x00 #x00 #x00 #x00 #x00 #x00 - #xEA #x0C #xDF #x28 #x00 #xE7 #x04 #xE3 - #xFF) - (:graphics - #x00 #x00 #x00 #x00 #x03 #x00 #x05 #x0F - #xFF) - (:attribute - #x00 #x01 #x02 #x03 #x04 #x05 #x14 #x07 - #x38 #x39 #x3A #x3B #x3C #x3D #x3E #x3F - #x01 #x00 #x0F #x00 #x00))) +;; intended future wrapper for graphics modes +(defconstant +graphical-mode-modex+ + '(+vga-state-320x200x256-modex+ ; vga state + 320 ; width + 200 ; height + 3)) ; page count + +(defvar *vga-current-page* 0) +(defvar *vga-page-count* 0) +(defvar *vga-width* 0) +(defvar *vga-height* 0) (defconstant +vga-misc-read+ #x0c) (defconstant +vga-misc-write+ #x02) @@ -348,6 +342,15 @@ (setf (io-port VGA-SEQ-DATA :unsigned-byte8) pmask)) (values)) +(defun set-plane-by-bitmask (p) + (check-type p (integer 0 15)) + ;; set read plane + (setf (io-port VGA-GC-INDEX :unsigned-byte8) 4) + (setf (io-port VGA-GC-DATA :unsigned-byte8) p) + ;; set write plane + (setf (io-port VGA-SEQ-INDEX :unsigned-byte8) 2) + (setf (io-port VGA-SEQ-DATA :unsigned-byte8) p)) + (defun vmemwr (dst-off src start end) (loop for i from start below end as dst upfrom dst-off do (setf (memref-int (vga-memory-map) :index dst :type :unsigned-byte8) @@ -1083,18 +1086,23 @@ (progn , at body) (restore-textmode ,vga-state-var))))) -;; graphics functions below: +;; graphics functions below ;; + + +;; TODO: This can be optimised through two methods +;; 1. Either write all of plane 1, then plane 2 etc (plane switches are slow) +;; 2. Use multiple plane writes at once (see g-clear for idea) +;; - Probably better because of large areas of the same colour (defun rle-blit-splash (splash) (loop with index = 0 for i from 0 below (length splash) by 2 for value = (aref splash i) for count = (1+ (aref splash (1+ i))) do (loop repeat count - do (setf (memref-int (vga-memory-map) - :index index - :type :unsigned-byte8) + do (setf (pixel (mod index *vga-width*) ; ugly hackitude :( + (truncate index *vga-width*)) value) (incf index))) nil) @@ -1102,35 +1110,82 @@ ;; show the splash screen (defun g-show-splash () (with-textmode-restored () - (setf (vga-state) +vga-state-320x200x256+) + (g-start) (rle-blit-splash *vga-g-splash*) + (page-flip) (read-char) (g-clear)) (values)) ;; set a pixel to a colour of our choice -(defun g-set-pixel (x y col) +;; always writing to the next page +(defun (setf pixel) (col x y) + (set-plane (logand x 3)) (setf (memref-int (vga-memory-map) - :index (+ (* 320 y) x) + :index (+ (* (truncate *vga-width* 4) y) ; pixel + (truncate x 4) + (* (truncate *vga-width* 2) ; page + *vga-height* + *vga-current-page*)) :type :unsigned-byte8) col)) -;; clear the graphics screen (simple method but slow) +;; clear the screen (defun g-clear () - (dotimes (y 240) - (dotimes (x 320) - (g-set-pixel x y 0)))) + ;; set read plane to all (bitmask 1111) + (set-plane-by-bitmask 15) + ;; writing to all 4 planes here thus 1/4 of the bytes + ;; and by writing 16 bits a time we get double plus good optimisation :) + ;; However, we wish to cover four planes, thus four times the memory + (loop for x from 0 below (* *vga-width* *vga-height*) + do (setf (memref-int (vga-memory-map) + :index x + :type :unsigned-byte16) + #x0000))) + + +(defun unchain-video-mode () + ;; disable chain-4 + (setf (io-port VGA-SEQ-INDEX :unsigned-byte8) #x04) + (setf (io-port VGA-SEQ-DATA :unsigned-byte8) #x06) + ;; disable long mode + (setf (io-port VGA-CRTC-INDEX :unsigned-byte8) #x14) + (setf (io-port VGA-CRTC-DATA :unsigned-byte8) #x00) + ;; enable byte mode + (setf (io-port VGA-CRTC-INDEX :unsigned-byte8) #x17) + (setf (io-port VGA-CRTC-DATA :unsigned-byte8) #xE3)) + + +(defun set-page (page) + (setf (io-port VGA-CRTC-INDEX :unsigned-byte8) #x0C) + (setf (io-port VGA-CRTC-DATA :unsigned-byte8) (ldb (byte 8 8) + (* page + (truncate *vga-width* 2) + *vga-height*))) + (setf (io-port VGA-CRTC-INDEX :unsigned-byte8) #x00) + (setf (io-port VGA-CRTC-DATA :unsigned-byte8) (ldb (byte 8 0) + (* page + (truncate *vga-width* 2) + *vga-height*)))) + + +;; Simple wrapper to swap pages +(defun page-flip () + (set-page *vga-current-page*) + (setf *vga-current-page* + (mod (1+ *vga-current-page*) + *vga-page-count*))) -;; easy way to get into / out of graphics mode +;; easy way to get into graphics mode (defun g-start () - (setf (vga-state) +vga-state-320x200x256+) - (g-clear)) - - -;; BUG (doesn't restore the text) -;; store on entering graphics state? -(defun g-exit () - (set-textmode +vga-state-80x25+)) + (setf (vga-state) +vga-state-320x200x256-modex+) + (setf *vga-width* 320) + (setf *vga-height* 200) + (setf *vga-page-count* 2) + (setf *vga-current-page* 0) ; writing page + (unchain-video-mode) + (g-clear) + (page-flip)) ;; draw-line from ch-image @@ -1152,7 +1207,7 @@ (x x0) (y y0)) (declare (type fixnum d incr-e incr-ne x y)) - (g-set-pixel y x col) + (setf (pixel y x) col) (dotimes (i absdx) (cond ((<= d 0) @@ -1162,14 +1217,14 @@ (incf d incr-ne) (incf x xstep) (incf y ystep))) - (g-set-pixel y x col))) + (setf (pixel y x) col))) (let ((d (- (* 2 absdy) absdx)) (incr-n (* 2 absdx)) (incr-ne (* 2 (- absdx absdy))) (x x0) (y y0)) (declare (type fixnum d incr-n incr-ne x y)) - (g-set-pixel y x col) + (setf (pixel y x) col) (dotimes (i absdy) (cond ((<= d 0) @@ -1179,9 +1234,7 @@ (incf d incr-ne) (incf y ystep) (incf x xstep))) - (g-set-pixel y x col)))))))) - - + (setf (pixel y x) col)))))))) ;; draw-circle from ch-image ;; originally written by Cyrus Harmon @@ -1189,14 +1242,14 @@ (defmethod draw-circle (center-y center-x radius col) (declare (type fixnum center-y center-x radius)) (flet ((circle-points (y x col) - (g-set-pixel (+ center-y y) (+ center-x x) col) - (g-set-pixel (+ center-y x) (+ center-x y) col) - (g-set-pixel (- center-y x) (+ center-x y) col) - (g-set-pixel (- center-y y) (+ center-x x) col) - (g-set-pixel (- center-y y) (- center-x x) col) - (g-set-pixel (- center-y x) (- center-x y) col) - (g-set-pixel (+ center-y x) (- center-x y) col) - (g-set-pixel (+ center-y y) (- center-x x) col))) + (setf (pixel (+ center-y y) (+ center-x x)) col) + (setf (pixel (+ center-y x) (+ center-x y)) col) + (setf (pixel (- center-y x) (+ center-x y)) col) + (setf (pixel (- center-y y) (+ center-x x)) col) + (setf (pixel (- center-y y) (- center-x x)) col) + (setf (pixel (- center-y x) (- center-x y)) col) + (setf (pixel (+ center-y x) (- center-x y)) col) + (setf (pixel (+ center-y y) (- center-x x)) col))) (let ((x 0) (y radius) (d (- 1 radius)) @@ -1218,8 +1271,6 @@ (incf x) (circle-points y x col))))) - - ;; additional drawing functions (rectangle / triangle) (defmethod draw-rectangle (x1 y1 x2 y2 col) (draw-line x1 y1 x1 y2 col) From ffjeld at common-lisp.net Wed Mar 21 21:54:13 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Wed, 21 Mar 2007 16:54:13 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070321215413.1D44D22045@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv10647 Modified Files: equalp.lisp Log Message: Fix equal: Support bit-vectors, be iterative rather than recursive on lists, etc. --- /project/movitz/cvsroot/movitz/losp/muerte/equalp.lisp 2005/08/26 19:38:56 1.7 +++ /project/movitz/cvsroot/movitz/losp/muerte/equalp.lisp 2007/03/21 21:54:12 1.8 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Tue Mar 13 17:09:08 2001 ;;;; -;;;; $Id: equalp.lisp,v 1.7 2005/08/26 19:38:56 ffjeld Exp $ +;;;; $Id: equalp.lisp,v 1.8 2007/03/21 21:54:12 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -26,18 +26,24 @@ (defun equal (x y) (typecase x + (symbol + (eq x y)) (string (and (stringp y) (string= x y))) - (symbol - (eq x y)) (number - (and (numberp y) - (= x y))) + (eql x y)) (cons - (and (consp y) - (equal (car x) (car y)) - (equal (cdr x) (cdr y)))) + (when (consp y) + (do () + ((not (equal (pop x) (pop y))) + nil) + (when (or (not (consp x)) + (not (consp y))) + (return (equal x y)))))) + (bit-vector + (when (typep y 'bit-vector) + (not (mismatch x y)))) (t (eq x y)))) (defun equalp (x y) From ffjeld at common-lisp.net Mon Mar 26 18:04:04 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Mon, 26 Mar 2007 13:04:04 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/x86-pc Message-ID: <20070326180404.D01CC1E003@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/x86-pc In directory clnet:/tmp/cvs-serv17914 Modified Files: vga.lisp Log Message: Patch from M. Bealby. --- /project/movitz/cvsroot/movitz/losp/x86-pc/vga.lisp 2007/03/21 21:49:11 1.11 +++ /project/movitz/cvsroot/movitz/losp/x86-pc/vga.lisp 2007/03/26 18:04:04 1.12 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Tue Sep 25 14:08:20 2001 ;;;; -;;;; $Id: vga.lisp,v 1.11 2007/03/21 21:49:11 ffjeld Exp $ +;;;; $Id: vga.lisp,v 1.12 2007/03/26 18:04:04 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -237,6 +237,7 @@ (defvar *vga-page-count* 0) (defvar *vga-width* 0) (defvar *vga-height* 0) +(defvar *vga-viewport* '(0 0 0 0)) (defconstant +vga-misc-read+ #x0c) (defconstant +vga-misc-write+ #x02) @@ -1117,18 +1118,45 @@ (g-clear)) (values)) +;; read a pixel from the DISPLAYED page +(defun pixel (x y) + (memref-int (vga-memory-map) + :index (+ (* (truncate *vga-width* 4) y) + (truncate x y) + (* (truncate *vga-width* 2) + *vga-height* + (mod (1+ *vga-current-page*) + *vga-page-count*))) + :type :unsigned-byte8)) + ;; set a pixel to a colour of our choice -;; always writing to the next page +;; write to the NEXT page (defun (setf pixel) (col x y) - (set-plane (logand x 3)) - (setf (memref-int (vga-memory-map) - :index (+ (* (truncate *vga-width* 4) y) ; pixel - (truncate x 4) - (* (truncate *vga-width* 2) ; page - *vga-height* - *vga-current-page*)) - :type :unsigned-byte8) - col)) + (cond ((< x (nth 0 (viewport))) (return-from pixel nil)) + ((> x (nth 1 (viewport))) (return-from pixel nil)) + ((< y (nth 2 (viewport))) (return-from pixel nil)) + ((> y (nth 3 (viewport))) (return-from pixel nil)) + (t (set-plane (logand x 3)) + (setf (memref-int (vga-memory-map) + :index (+ (* (truncate *vga-width* 4) y) ; pixel + (truncate x 4) + (* (truncate *vga-width* 2) ; page + *vga-height* + *vga-current-page*)) + :type :unsigned-byte8) + col)))) + + +; return the current viewport as a list +(defun viewport () + *vga-viewport*) + + +; sets the viewport +; rectangle is a list of left-bound, right-bound, top-bound, bottom-bound +(defun (setf viewport) (rectangle) + (setf *vga-viewport* rectangle)) + ;; clear the screen (defun g-clear () @@ -1176,6 +1204,7 @@ (mod (1+ *vga-current-page*) *vga-page-count*))) + ;; easy way to get into graphics mode (defun g-start () (setf (vga-state) +vga-state-320x200x256-modex+) @@ -1183,6 +1212,7 @@ (setf *vga-height* 200) (setf *vga-page-count* 2) (setf *vga-current-page* 0) ; writing page + (setf (viewport) `(0 ,(1- *vga-width*) 0 ,(1- *vga-height*))) (unchain-video-mode) (g-clear) (page-flip)) From ffjeld at common-lisp.net Mon Mar 26 21:11:40 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Mon, 26 Mar 2007 16:11:40 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070326211140.7695361059@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv18123 Modified Files: basic-macros.lisp Log Message: Fix error condition when funcalling a non-function. --- /project/movitz/cvsroot/movitz/losp/muerte/basic-macros.lisp 2007/02/22 21:03:10 1.69 +++ /project/movitz/cvsroot/movitz/losp/muerte/basic-macros.lisp 2007/03/26 21:11:40 1.70 @@ -9,7 +9,7 @@ ;;;; Created at: Wed Nov 8 18:44:57 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: basic-macros.lisp,v 1.69 2007/02/22 21:03:10 ffjeld Exp $ +;;;; $Id: basic-macros.lisp,v 1.70 2007/03/26 21:11:40 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -755,6 +755,7 @@ not-symbol (:cmpb 7 :cl) (:jne '(:sub-program (not-funobj) + (:movb 1 :cl) (:int 69))) (:cmpb ,(movitz:tag :funobj) (:edx ,movitz:+other-type-offset+)) (:jne 'not-funobj) @@ -805,6 +806,7 @@ (:leal (:edx -6) :ecx) (:testb 7 :cl) (:jne '(:sub-program (not-funobj) + (:movb 1 :cl) (:int 69))) (:cmpb ,(movitz::tag :funobj) (:edx ,movitz:+other-type-offset+)) (:jne 'not-funobj) @@ -827,6 +829,7 @@ not-symbol (:cmpb 7 :cl) (:jnz '(:sub-program (not-funobj) + (:movb 1 :cl) (:int 69))) (:cmpb ,(movitz::tag :funobj) (:edx ,movitz:+other-type-offset+)) (:jne 'not-funobj) @@ -849,6 +852,7 @@ not-symbol (:cmpb 7 :cl) (:jnz '(:sub-program (not-funobj) + (:movb 1 :cl) (:int 69))) (:cmpb ,(movitz::tag :funobj) (:edx ,movitz:+other-type-offset+)) (:jne 'not-funobj) From ffjeld at common-lisp.net Mon Mar 26 21:11:44 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Mon, 26 Mar 2007 16:11:44 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/muerte Message-ID: <20070326211144.14A3B406B@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/muerte In directory clnet:/tmp/cvs-serv18149 Modified Files: interrupt.lisp Log Message: Fix error condition when funcalling a non-function. --- /project/movitz/cvsroot/movitz/losp/muerte/interrupt.lisp 2007/02/22 21:03:50 1.54 +++ /project/movitz/cvsroot/movitz/losp/muerte/interrupt.lisp 2007/03/26 21:11:43 1.55 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Wed Apr 7 01:50:03 2004 ;;;; -;;;; $Id: interrupt.lisp,v 1.54 2007/02/22 21:03:50 ffjeld Exp $ +;;;; $Id: interrupt.lisp,v 1.55 2007/03/26 21:11:43 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -344,7 +344,7 @@ (with-inline-assembly (:returns :nothing) (:nop)))) (69 (error 'type-error :datum (dereference $eax) - :expected-type (aref #(cons) + :expected-type (aref #(cons function) (dereference $ecx :unsigned-byte8)))) (70 (error "Unaligned memref access.")) ((5 55) From ffjeld at common-lisp.net Mon Mar 26 21:43:21 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Mon, 26 Mar 2007 16:43:21 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/x86-pc Message-ID: <20070326214321.2C2993A03E@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/x86-pc In directory clnet:/tmp/cvs-serv24451 Modified Files: textmode.lisp Log Message: Added *text-output-port* to take advantage of bochs' 0xe9 port hack. --- /project/movitz/cvsroot/movitz/losp/x86-pc/textmode.lisp 2005/08/26 21:42:39 1.15 +++ /project/movitz/cvsroot/movitz/losp/x86-pc/textmode.lisp 2007/03/26 21:43:21 1.16 @@ -9,7 +9,7 @@ ;;;; Created at: Thu Nov 9 15:38:56 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: textmode.lisp,v 1.15 2005/08/26 21:42:39 ffjeld Exp $ +;;;; $Id: textmode.lisp,v 1.16 2007/03/26 21:43:21 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -23,6 +23,9 @@ (in-package muerte.x86-pc) +(defvar *text-output-port* nil + "Output all text also to this port. For example, bochs #xe9 port hack.") + (defvar *screen* (vga-memory-map)) @@ -67,6 +70,8 @@ value) (defun textmode-write-char (c) + (when *text-output-port* + (setf (io-port *text-output-port* :unsigned-byte8) (char-code c))) (case c (#\newline (setf *cursor-x* 0) From ffjeld at common-lisp.net Sat Mar 31 21:08:13 2007 From: ffjeld at common-lisp.net (ffjeld) Date: Sat, 31 Mar 2007 16:08:13 -0500 (EST) Subject: [movitz-cvs] CVS movitz/losp/x86-pc Message-ID: <20070331210813.526C67E007@common-lisp.net> Update of /project/movitz/cvsroot/movitz/losp/x86-pc In directory clnet:/tmp/cvs-serv16093 Modified Files: keyboard.lisp Log Message: Patch from Philippe Brochard: Attached is a french keyboard layout for movitz. Like qwerty or dvorak but for french people. --- /project/movitz/cvsroot/movitz/losp/x86-pc/keyboard.lisp 2007/03/14 20:42:48 1.7 +++ /project/movitz/cvsroot/movitz/losp/x86-pc/keyboard.lisp 2007/03/31 21:08:13 1.8 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld ;;;; Created at: Mon Sep 24 16:04:12 2001 ;;;; -;;;; $Id: keyboard.lisp,v 1.7 2007/03/14 20:42:48 ffjeld Exp $ +;;;; $Id: keyboard.lisp,v 1.8 2007/03/31 21:08:13 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------ @@ -77,6 +77,53 @@ #\B #\N #\M #\< #\> #\? nil nil ; #x30 nil nil nil nil nil nil nil nil ; #x38 nil nil nil nil nil :pause nil nil)) ; #xd8 + (:azerty + #(#\null #\escape #\& #\~ #\" #\' #\( #\- ; #x00 + #\` #\_ #\| #\@ #\) #\= #\backspace #\tab ; #x08 + #\a #\z #\e #\r #\t #\y #\u #\i ; #x10 + #\o #\p #\^ #\$ #\newline :ctrl-left #\q #\s ; #x18 + + #\d #\f #\g #\h #\j #\k #\l #\m ; #x20 + #\% #\# :shift-left #\* #\w #\x #\c #\v ; #x28 + #\b #\n #\, #\; #\: #\! :shift-right #\escape ; #x30 + :alt-left #\space :caps-lock :f1 :f2 :f3 :f4 :f5 ; #x38 + + :f6 :f7 :f8 :f9 :f10 :break :scroll-lock nil ; #x40 + nil nil nil nil nil nil nil nil ; #x48 + nil :kp-ins nil :kp-del nil nil #\< :f11 ; #x50 + :f12 nil nil nil nil nil nil nil ; #x58 + + nil nil nil nil nil nil nil nil ; #x60 + nil nil nil nil nil nil nil nil ; #x68 + nil nil nil nil nil nil nil nil ; #x70 + nil nil nil nil nil nil nil nil ; #x78 + + nil nil nil nil nil nil nil nil ; #x80 + nil nil nil nil nil nil nil nil ; #x88 + nil nil nil nil :ctrl-right nil nil nil ; #x90 + nil nil nil nil nil :ctrl-right nil nil ; #x98 + + nil nil nil nil nil nil nil nil ; #xa0 + nil nil nil nil nil nil nil nil ; #xa8 + nil nil nil nil nil nil nil nil ; #xb0 + :alt-right nil nil nil nil nil nil nil ; #xb8 + + nil nil nil nil nil nil nil :home ; #xc0 + :up :page-up nil :left nil :right nil :end ; #xc8 + :down :page-down :insert nil #+ignore #\delete nil nil nil nil nil ; #xd0 + :alt-right nil nil nil :win :menu nil nil) ; #x40 + #(#\null nil #\1 #\2 #\3 #\4 #\5 #\6 ; #x00 + #\7 #\8 #\9 #\0 #\A #\+ nil nil ; #x08 + #\A #\Z #\E #\R #\T #\Y #\U #\I ; #x10 + #\O #\P #\{ #\} #\newline nil #\Q #\S ; #x18 + + #\D #\F #\G #\H #\J #\K #\L #\M ; #x20 + #\[ #\| nil #\] #\W #\X #\C #\V ; #x28 + #\B #\N #\? #\. #\/ #\\ nil nil ; #x30 + nil nil nil nil nil nil nil nil ; #x38 + nil nil nil nil nil :pause nil nil ; #x40 + nil nil nil nil nil nil nil nil ; #x48 + nil nil nil nil nil nil #\> nil)) ; #x50 (:dvorak #(#\null #\escape #\1 #\2 #\3 #\4 #\5 #\6 ; #x00 #\7 #\8 #\9 #\0 #\[ #\] #\backspace #\tab ; #x08