r1633: *** empty log message ***
[uffi.git] / examples / union.cl
1 ;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
2 ;;;; *************************************************************************
3 ;;;; FILE IDENTIFICATION
4 ;;;;
5 ;;;; Name:          union.cl
6 ;;;; Purpose:       UFFI Example file to test unions
7 ;;;; Programmer:    Kevin M. Rosenberg
8 ;;;; Date Started:  Mar 2002
9 ;;;;
10 ;;;; $Id: union.cl,v 1.2 2002/03/21 08:30:10 kevin Exp $
11 ;;;;
12 ;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg
13 ;;;;
14 ;;;; UFFI users are granted the rights to distribute and use this software
15 ;;;; as governed by the terms of the Lisp Lesser GNU Public License
16 ;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
17 ;;;; *************************************************************************
18
19 (in-package :cl-user)
20
21 (uffi:def-union tunion1 
22     (char :char)
23   (int :int)
24   (uint :unsigned-int)
25   (sf :float)
26   (df :double))
27
28 (defun test-union-1 ()
29   (let ((u (uffi:allocate-foreign-object tunion1)))
30     (setf (uffi:get-slot-value u 'tunion1 'uint) 
31       (+ (char-code #\A) 
32          (* 256 (char-code #\B))
33          (* 65536 (char-code #\C))
34          (* 16777216 255)))
35     (format t "~&Should be #\A: ~S" 
36             (uffi:ensure-char-character 
37              (uffi:get-slot-value u 'tunion1 'char)))
38     (format t "~&Should be negative number: ~D" 
39             (uffi:get-slot-value u 'tunion1 'int))
40     (format t "~&Should be positive number: ~D"
41             (uffi:get-slot-value u 'tunion1 'uint))
42     (uffi:free-foreign-object u))
43   (values))
44
45 #+uffi-test
46 (test-union-1)