chiark / gitweb /
Callbacks from C done properly
[clg] / glib / glib.lisp
... / ...
CommitLineData
1;; Common Lisp bindings for GTK+ v1.2.x
2;; Copyright (C) 1999 Espen S. Johnsen <espejohn@online.no>
3;;
4;; This library is free software; you can redistribute it and/or
5;; modify it under the terms of the GNU Lesser General Public
6;; License as published by the Free Software Foundation; either
7;; version 2 of the License, or (at your option) any later version.
8;;
9;; This library is distributed in the hope that it will be useful,
10;; but WITHOUT ANY WARRANTY; without even the implied warranty of
11;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12;; Lesser General Public License for more details.
13;;
14;; You should have received a copy of the GNU Lesser General Public
15;; License along with this library; if not, write to the Free Software
16;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
18;; $Id: glib.lisp,v 1.15 2004-11-01 00:08:49 espen Exp $
19
20
21(in-package "GLIB")
22
23(use-prefix "g")
24
25
26;;;; Memory management
27
28(defbinding (allocate-memory "g_malloc0") () pointer
29 (size unsigned-long))
30
31(defbinding (reallocate-memory "g_realloc") () pointer
32 (address pointer)
33 (size unsigned-long))
34
35(defbinding (deallocate-memory "g_free") () nil
36 (address pointer))
37;(defun deallocate-memory (address)
38; (declare (ignore address)))
39
40(defun copy-memory (from length &optional (to (allocate-memory length)))
41 (kernel:system-area-copy from 0 to 0 (* 8 length))
42 to)
43
44
45;;;; User data mechanism
46
47(internal *user-data* *user-data-count*)
48
49(declaim (fixnum *user-data-count*))
50
51(defvar *user-data* (make-hash-table))
52(defvar *user-data-count* 0)
53
54(defun register-user-data (object &optional destroy-function)
55 (check-type destroy-function (or null symbol function))
56 (incf *user-data-count*)
57 (setf
58 (gethash *user-data-count* *user-data*)
59 (cons object destroy-function))
60 *user-data-count*)
61
62(defun find-user-data (id)
63 (check-type id fixnum)
64 (multiple-value-bind (user-data p) (gethash id *user-data*)
65 (values (car user-data) p)))
66
67(defun destroy-user-data (id)
68 (check-type id fixnum)
69 (let ((user-data (gethash id *user-data*)))
70 (when (cdr user-data)
71 (funcall (cdr user-data) (car user-data))))
72 (remhash id *user-data*))
73
74
75
76;;;; Quarks
77
78(internal *quark-counter* *quark-from-object* *quark-to-object*)
79
80(deftype quark () 'unsigned)
81
82;(defbinding %quark-get-reserved () quark)
83
84(defbinding %quark-from-string () quark
85 (string string))
86
87(defvar *quark-counter* 0)
88
89(defun %quark-get-reserved ()
90 ;; The string is just a dummy
91