X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;ds=sidebyside;f=examples%2Funion.lisp;h=b8fdcef46b6b3f75d35db8598130de6f3053cb6a;hb=b86fdf882156aa45dc6e8e93a158dedf506f4233;hp=df2507b71ec8addbbcde6b6287d5b7ed618e23d5;hpb=ebedde4e67b858b1f65c5eb4dc7bc45978ed1e40;p=uffi.git diff --git a/examples/union.lisp b/examples/union.lisp index df2507b..b8fdcef 100644 --- a/examples/union.lisp +++ b/examples/union.lisp @@ -7,18 +7,13 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Mar 2002 ;;;; -;;;; $Id$ +;;;; This file, part of UFFI, is Copyright (c) 2002-2010 by Kevin M. Rosenberg ;;;; -;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg -;;;; -;;;; UFFI users are granted the rights to distribute and use this software -;;;; as governed by the terms of the Lisp Lesser GNU Public License -;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL. ;;;; ************************************************************************* (in-package :cl-user) -(uffi:def-union tunion1 +(uffi:def-union tunion1 (char :char) (int :int) (uint :unsigned-int) @@ -31,22 +26,22 @@ ;; little endian #-(or sparc sparc-v9 powerpc ppc big-endian) (+ (* 1 (char-code #\A)) - (* 256 (char-code #\B)) - (* 65536 (char-code #\C)) - (* 16777216 255)) + (* 256 (char-code #\B)) + (* 65536 (char-code #\C)) + (* 16777216 255)) ;; big endian #+(or sparc sparc-v9 powerpc ppc big-endian) (+ (* 16777216 (char-code #\A)) - (* 65536 (char-code #\B)) - (* 256 (char-code #\C)) - (* 1 255))) - (format *standard-output* "~&Should be #\A: ~S" - (uffi:ensure-char-character - (uffi:get-slot-value u 'tunion1 'char))) -;; (format *standard-output* "~&Should be negative number: ~D" -;; (uffi:get-slot-value u 'tunion1 'int)) + (* 65536 (char-code #\B)) + (* 256 (char-code #\C)) + (* 1 255))) + (format *standard-output* "~&Should be #\A: ~S" + (uffi:ensure-char-character + (uffi:get-slot-value u 'tunion1 'char))) +;; (format *standard-output* "~&Should be negative number: ~D" +;; (uffi:get-slot-value u 'tunion1 'int)) (format *standard-output* "~&Should be positive number: ~D" - (uffi:get-slot-value u 'tunion1 'uint)) + (uffi:get-slot-value u 'tunion1 'uint)) (uffi:free-foreign-object u)) (values)) @@ -54,30 +49,30 @@ (defun test-union-1 () (let ((u (uffi:allocate-foreign-object 'tunion1))) (setf (uffi:get-slot-value u 'tunion1 'uint) - #-(or sparc sparc-v9 powerpc ppc) - (+ (* 1 (char-code #\A)) - (* 256 (char-code #\B)) - (* 65536 (char-code #\C)) - (* 16777216 128)) - #+(or sparc sparc-v9 powerpc ppc) - (+ (* 16777216 (char-code #\A)) - (* 65536 (char-code #\B)) - (* 256 (char-code #\C)) - (* 1 128))) ;set signed bit - (util.test:test (uffi:ensure-char-character - (uffi:get-slot-value u 'tunion1 'char)) - #\A - :test #'eql - :fail-info "Error with union character") - #-(or sparc sparc-v9 mcl) + #-(or sparc sparc-v9 powerpc ppc) + (+ (* 1 (char-code #\A)) + (* 256 (char-code #\B)) + (* 65536 (char-code #\C)) + (* 16777216 128)) + #+(or sparc sparc-v9 powerpc ppc) + (+ (* 16777216 (char-code #\A)) + (* 65536 (char-code #\B)) + (* 256 (char-code #\C)) + (* 1 128))) ;set signed bit + (util.test:test (uffi:ensure-char-character + (uffi:get-slot-value u 'tunion1 'char)) + #\A + :test #'eql + :fail-info "Error with union character") + #-(or sparc sparc-v9 openmcl digitool) ;; (util.test:test (> 0 (uffi:get-slot-value u 'tunion1 'int)) -;; t -;; :fail-info -;; "Error with negative int in union") +;; t +;; :fail-info +;; "Error with negative int in union") (util.test:test (plusp (uffi:get-slot-value u 'tunion1 'uint)) - t - :fail-info - "Error with unsigned int in union") + t + :fail-info + "Error with unsigned int in union") (uffi:free-foreign-object u)) (values))