Add README.md.
[cl-lua-ffi.git] / src / ffi.lisp
1 (in-package #:cl-lua-ffi)
2
3 (define-foreign-library liblua50
4   (T (:default "liblua50")))
5
6 (use-foreign-library liblua50)
7
8 (defctype lua-state :pointer)
9
10 (defctype lua-number :double)
11
12 (defctype size :unsigned-int)
13
14 (defcenum lua-type
15   (:none -1)
16   :nil
17   :boolean
18   :lightuserdata
19   :number
20   :string
21   :table
22   :function
23   :userdata
24   :thread)
25
26 (defcfun lua-open lua-state)
27
28 (defcfun lua-close :void
29   (state lua-state))
30
31 (defcfun lua-newthread :void
32   (state lua-state))
33
34 ;; TODO: lua-atpanic
35
36 (defcfun lua-gettop :int
37   (state lua-state))
38
39 (defcfun lua-settop :void
40   (state lua-state)
41   (index :int))
42
43 (defcfun lua-pushvalue :void
44   (state lua-state)
45   (index :int))
46
47 (defcfun lua-remove :void
48   (state lua-state)
49   (index :int))
50
51 (defcfun lua-insert :void
52   (state lua-state)
53   (index :int))
54
55 (defcfun lua-replace :void
56   (state lua-state)
57   (index :int))
58
59 (defcfun lua-checkstack :boolean
60   (state lua-state)
61   (extra :int))
62
63 (defcfun lua-xmove :void
64   (from lua-state)
65   (to lua-state)
66   (n :int))
67
68 (defcfun lua-isnumber :boolean
69   (state lua-state)
70   (index :int))
71
72 (defcfun lua-isstring :boolean
73   (state lua-state)
74   (index :int))
75
76 (defcfun lua-iscfunction :boolean
77   (state lua-state)
78   (index :int))
79
80 (defcfun lua-isuserdata :boolean
81   (state lua-state)
82   (index :int))
83
84 (defcfun lua-type lua-type
85   (state lua-state)
86   (index :int))
87
88 ;; TODO: type is an enum
89 (defcfun lua-typename :string
90   (state lua-state)
91   (type :int))
92
93 (defcfun lua-equal :boolean
94   (state lua-state)
95   (index1 :int)
96   (index2 :int))
97
98 (defcfun lua-rawequal :boolean
99   (state lua-state)
100   (index1 :int)
101   (index2 :int))
102
103 (defcfun lua-lessthan :boolean
104   (state lua-state)
105   (index1 :int)
106   (index2 :int))
107
108 (defcfun lua-tonumber lua-number
109   (state lua-state)
110   (index :int))
111
112 (defcfun lua-toboolean :boolean
113   (state lua-state)
114   (index :int))
115
116 (defcfun lua-tostring :string
117   (state lua-state)
118   (index :int))
119
120 (defcfun lua-strlen size
121   (state lua-state)
122   (index :int))
123
124 ;; TODO: lua-tocfunction
125
126 (defcfun lua-touserdata :pointer
127   (state lua-state)
128   (index :int))
129
130 (defcfun lua-tothread lua-state
131   (state lua-state)
132   (index :int))
133
134 (defcfun lua-topointer :pointer
135   (state lua-state)
136   (index :int))
137
138 (defcfun lua-pushnil :void
139   (state lua-state))
140
141 (defcfun lua-pushnumber :void
142   (state lua-state)
143   (number lua-number))
144
145 (defcfun lua-pushlstring :void
146   (state lua-state)
147   (string :string)
148   (length size))
149
150 ;; TODO: lua-pushstring
151 ;; TODO: lua-pushvfstring
152 ;; TODO: lua-pushfstring
153 ;; TODO: lua-pushcclosure
154
155 (defcfun lua-pushboolean :void
156   (state lua-state)
157   (boolean :boolean))
158
159 (defcfun lua-pushlightuserdata :void
160   (state lua-state)
161   (pointer :pointer))
162
163 (defcfun lua-gettable :void
164   (state lua-state)
165   (index :int))
166
167 (defcfun lua-rawget :void
168   (state lua-state)
169   (index :int))
170
171 (defcfun lua-rawgeti :void
172   (state lua-state)
173   (index :int)
174   (n :int))
175
176 (defcfun lua-newtable :void
177   (state lua-state))
178
179 (defcfun lua-newuserdata :pointer
180   (state lua-state)
181   (size size))
182
183 (defcfun lua-getmetatable :int
184   (state lua-state)
185   (index :int))
186
187 (defcfun lua-getfenv :void
188   (state lua-state)
189   (index :int))
190
191 (defcfun lua-settable :void
192   (state lua-state)
193   (index :int))
194
195 (defcfun lua-rawset :void
196   (state lua-state)
197   (index :int))
198
199 (defcfun lua-rawseti :void
200   (state lua-state)
201   (index :int)
202   (n :int))
203
204 (defcfun lua-setmetatable :boolean
205   (state lua-state)
206   (index :int))
207
208 (defcfun lua-setfenv :boolean
209   (state lua-state)
210   (index :int))
211
212 (defcfun lua-call :void
213   (state lua-state)
214   (nargs :int)
215   (nresults :int))
216
217 (defcfun lua-pcall :void
218   (state lua-state)
219   (nargs :int)
220   (nresults :int)
221   (errfunc :int))
222
223 ;; TODO: lua-cpcall
224 ;; TODO: lua-load
225 ;; TODO: lua-dump
226
227 (defcfun lua-yield :boolean
228   (state lua-state)
229   (nresults :int))
230
231 (defcfun lua-resume :void
232   (state lua-state)
233   (narg :int))
234
235 (defcfun lua-getgcthreshold :int
236   (state lua-state))
237
238 (defcfun lua-gccount :int
239   (state lua-state))
240
241 (defcfun lua-setgcthreshold :void
242   (state lua-state)
243   (newthreshold :int))
244
245 (defcfun lua-version :string)
246
247 ;; TODO: lua-error
248
249 (defcfun lua-next :boolean
250   (state lua-state)
251   (index :int))
252
253 (defcfun lua-concat :void
254   (state lua-state)
255   (n :int))
256
257 ;; TODO: lua-boxpointer
258 ;; TODO: lua-unboxpointer
259
260 (defun lua-pop (state n)
261   (lua-settop state (1- (- n))))
262
263 ;; TODO: lua-register
264 ;; TODO: lua-pushcfunction
265
266 (defun lua-isfunction (state n)
267   (eq (lua-type state n) :function))
268
269 (defun lua-istable (state n)
270   (eq (lua-type state n) :table))
271
272 (defun lua-islightuserdata (state n)
273   (eq (lua-type state n) :lightuserdata))
274
275 (defun lua-isnil (state n)
276   (eq (lua-type state n) :nil))
277
278 (defun lua-isboolean (state n)
279   (eq (lua-type state n) :boolean))
280
281 (defun lua-isnone (state n)
282   (eq (lua-type state n) :none))
283
284 (defun lua-isnoneornil (state n)
285   (let ((type (lua-type state n)))
286     (or (eq type :function)
287         (eq type :none))))
288
289 ;; TODO: lua-pushliteral