ffi-funcs.scm 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. ; Part of Scheme 48 1.9. See file COPYING for notices and license.
  2. ; Authors: Harald Glab-Plhak
  3. (import-dynamic-externals "=scheme48external/ffi-test")
  4. (define (ffi-add-integer int-arg)
  5. (external-ffi-add-integer int-arg))
  6. (define-enumerated-type color :color
  7. color?
  8. colors
  9. color-name
  10. color-index
  11. (red blue green))
  12. (define-enum-set-type color-set :color-set
  13. color-set?
  14. make-color-set
  15. color color? colors color-index)
  16. (define-record-type a-record :a-record
  17. (ffi-make-a-record id type value)
  18. a-record?
  19. (id a-record-id)
  20. (type a-record-type)
  21. (value a-record-value))
  22. (define-record-discloser :a-record
  23. (lambda (r)
  24. (list 'a-record-fields
  25. (a-record-id r)
  26. (a-record-type r)
  27. (a-record-value r))))
  28. (define (ffi-make-a-record string)
  29. ( external-ffi-make-a-record string))
  30. (define (ffi-working-on-lists in)
  31. (external-ffi-working-on-lists in))
  32. (define (ffi-get-cons-val first second)
  33. (external-ffi-get-cons-val first second))
  34. (define (ffi-pair? in)
  35. (external-ffi-pair? in))
  36. (define (ffi-car in)
  37. (external-ffi-car in))
  38. (define (ffi-cdr in)
  39. (external-ffi-cdr in))
  40. (define (ffi-length in)
  41. (external-ffi-length in))
  42. (define (ffi-record-set! rec ind val)
  43. (external-ffi-record-set! rec ind val))
  44. (define (ffi-record-ref rec ind )
  45. (external-ffi-record-ref rec ind))
  46. (define (ffi-vector-set! vect ind val)
  47. (external-ffi-vector-set! vect ind val))
  48. (define (ffi-vector-ref vect ind)
  49. (external-ffi-vector-ref vect ind))
  50. (define (ffi-make-byte-vector length)
  51. (external-ffi-make-byte-vector length))
  52. (define (ffi-make-vector length value)
  53. (external-ffi-make-vector length value))
  54. (define (ffi-enums enum)
  55. (external-ffi-enums enum))
  56. (define (ffi-get-color-enum-set mask)
  57. (external-ffi-get-color-enum-set mask))
  58. (define (ffi-call-scheme proc nargs parm-1 parm-2 parm-3)
  59. (external-ffi-call-scheme proc nargs parm-1 parm-2 parm-3))
  60. (define (ffi-a-status-set-and-export! value)
  61. (external-ffi-a-status-set-and-export! value))
  62. (define (ffi-a-status-set! value)
  63. (external-ffi-a-status-set! value))
  64. (define (ffi-a-status-set-by-binding! value)
  65. (let ((a-status-binding (lookup-imported-binding "a-status")))
  66. (external-ffi-a-status-set-by-binding! a-status-binding value)))
  67. (define (ffi-a-status)
  68. (let ((a-status-binding (lookup-imported-binding "a-status")))
  69. (external-ffi-a-status a-status-binding)))
  70. (define (ffi-export-bindings)
  71. (let ((binding (external-ffi-export-bindings)))
  72. (ffi-propagate-binding-global binding)))
  73. (define (ffi-propagate-binding)
  74. (let ((a-status-binding (lookup-imported-binding "a-status")))
  75. (external-ffi-propagate-binding a-status-binding)))
  76. (define (ffi-propagate-binding-global binding)
  77. (external-ffi-propagate-binding-global binding))
  78. (define (ffi-check-a-status-and-get-name)
  79. (external-ffi-check-a-status-and-get-name))
  80. (define (ffi-make-strange-value id name)
  81. (external-ffi-make-strange-value id name))
  82. (define (ffi-strange-value->list value)
  83. (external-ffi-strange-value->list value))
  84. (define (ffi-strange-value-free value)
  85. (external-ffi-strange-value-free value))
  86. (define (ffi-make-weak-pointer value)
  87. (external-ffi-make-weak-pointer value))
  88. (define (ffi-weak-pointer? pointer)
  89. (external-ffi-weak-pointer? pointer))
  90. (define (ffi-weak-pointer-ref pointer)
  91. (external-ffi-weak-pointer-ref pointer))
  92. (define (ffi-check-string-latin-1 string)
  93. (external-ffi-check-string-latin-1 string))
  94. (define (ffi-check-string-utf-8 string)
  95. (external-ffi-check-string-utf-8 string))
  96. (define (ffi-check-string-utf-16 string)
  97. (external-ffi-check-string-utf-16 string))
  98. ;; definitions needed for access external code
  99. ;; bindings
  100. ;; the two scheme48 procedures to get a binding and
  101. ;; its value
  102. ;; (lookup-imported-binding "name") ; the shared binding
  103. ;; (shared-binding-ref shared-binding) ;returns the value
  104. ;; procedure to define a exported binding
  105. ;; (define-exported-binding "a-record-record-type" :a-record)
  106. (define (ffi-get-imp-binding-value bind-name)
  107. (let ((the-binding (lookup-imported-binding bind-name))) ; the shared binding
  108. (let ((the-binding-value (shared-binding-ref the-binding))) ;returns the value
  109. the-binding-value)))
  110. (define (ffi-get-imp-binding bind-name)
  111. (let ((the-binding (lookup-imported-binding bind-name))) ; the shared binding
  112. the-binding))
  113. (define (ffi-get-imp-value-by-binding the-binding)
  114. (let ((the-binding-value (shared-binding-ref the-binding))) ;returns the value
  115. the-binding-value))
  116. (define-exported-binding "a-record-record-type" :a-record)
  117. (define-exported-binding "color-set-type" :color-set)
  118. (import-lambda-definition-2 external-ffi-add-integer
  119. (int-arg)
  120. "ffi_add_integer")
  121. (import-lambda-definition-2 external-ffi-working-on-lists
  122. (lst)
  123. "ffi_working_on_lists")
  124. (import-lambda-definition-2 external-ffi-get-cons-val
  125. (first second)
  126. "ffi_get_cons_val")
  127. (import-lambda-definition-2 external-ffi-pair?
  128. (a-pair)
  129. "ffi_pair_p")
  130. (import-lambda-definition-2 external-ffi-car
  131. (a-pair)
  132. "ffi_car")
  133. (import-lambda-definition-2 external-ffi-cdr
  134. (a-pair)
  135. "ffi_cdr")
  136. (import-lambda-definition-2 external-ffi-length
  137. (a-pair)
  138. "ffi_length")
  139. (import-lambda-definition-2 external-ffi-make-a-record
  140. (string)
  141. "ffi_make_a_record")
  142. (import-lambda-definition-2 external-ffi-record-set!
  143. (rec ind val)
  144. "ffi_record_set")
  145. (import-lambda-definition-2 external-ffi-record-ref
  146. (rec ind)
  147. "ffi_record_ref")
  148. (import-lambda-definition-2 external-ffi-vector-set!
  149. (vect ind val)
  150. "ffi_vector_set")
  151. (import-lambda-definition-2 external-ffi-vector-ref
  152. (vect ind)
  153. "ffi_vector_ref")
  154. (import-lambda-definition-2 external-ffi-make-byte-vector
  155. (length)
  156. "ffi_make_byte_vector")
  157. (import-lambda-definition-2 ffi-extract-byte-vector
  158. (byte-vector)
  159. "ffi_extract_byte_vector")
  160. (import-lambda-definition-2 ffi-extract-byte-vector-readonly
  161. (byte-vector)
  162. "ffi_extract_byte_vector_readonly")
  163. (import-lambda-definition-2 ffi-extract-and-modify-byte-vector
  164. (byte-vector)
  165. "ffi_extract_and_modify_byte_vector")
  166. (import-lambda-definition-2 ffi-extract-twice-and-modify-byte-vector
  167. (byte-vector)
  168. "ffi_extract_twice_and_modify_byte_vector")
  169. (import-lambda-definition-2 ffi-extract-byte-vector-and-call-scheme
  170. (byte-vector callback)
  171. "ffi_extract_byte_vector_and_call_scheme")
  172. (import-lambda-definition-2 ffi-extract-byte-vector-assertion
  173. (byte-vector)
  174. "ffi_extract_byte_vector_assertion")
  175. (import-lambda-definition-2 external-ffi-make-vector
  176. (length value)
  177. "ffi_make_vector")
  178. (import-lambda-definition-2 external-ffi-enums
  179. (enum)
  180. "ffi_enums")
  181. (import-lambda-definition-2 external-ffi-get-color-enum-set
  182. (mask)
  183. "ffi_get_color_enum_set")
  184. (import-lambda-definition-2 external-ffi-call-scheme
  185. (proc nargs parm-1 parm-2 parm-3)
  186. "ffi_call_scheme")
  187. (import-lambda-definition-2 external-ffi-a-status-set-and-export!
  188. (value)
  189. "ffi_a_status_set_and_export")
  190. (import-lambda-definition-2 external-ffi-a-status-set-by-binding!
  191. (binding value)
  192. "ffi_a_status_set_by_binding")
  193. (import-lambda-definition-2 external-ffi-a-status-set!
  194. (value)
  195. "ffi_a_status_set")
  196. (import-lambda-definition-2 external-ffi-a-status
  197. (binding)
  198. "ffi_a_status")
  199. (import-lambda-definition-2 external-ffi-export-bindings
  200. ()
  201. "ffi_export_bindings")
  202. (import-lambda-definition-2 external-ffi-propagate-binding
  203. (binding)
  204. "ffi_propagate_binding")
  205. (import-lambda-definition-2 external-ffi-propagate-binding-global
  206. (binding)
  207. "ffi_propagate_binding_global")
  208. (import-lambda-definition-2 external-ffi-check-a-status-and-get-name
  209. ()
  210. "ffi_check_a_status_and_get_name")
  211. (import-lambda-definition-2 external-ffi-make-strange-value
  212. (id name)
  213. "ffi_make_strange_value")
  214. (import-lambda-definition-2 external-ffi-strange-value->list
  215. (strange-val)
  216. "ffi_strange_value_to_list")
  217. (import-lambda-definition-2 external-ffi-strange-value-free
  218. (strange-val)
  219. "ffi_strange_value_free")
  220. (import-lambda-definition-2 external-ffi-make-local-buf
  221. ()
  222. "ffi_make_local_buf")
  223. (import-lambda-definition-2 external-ffi-free-local-buf
  224. ()
  225. "ffi_free_local_buf")
  226. (import-lambda-definition-2 external-ffi-free-local-buf-1
  227. ()
  228. "ffi_free_local_buf1")
  229. (import-lambda-definition-2 external-ffi-free-local-buf-2
  230. ()
  231. "ffi_free_local_buf2")
  232. (import-lambda-definition-2 external-ffi-free-local-buf-3
  233. ()
  234. "ffi_free_local_buf3")
  235. (import-lambda-definition-2 external-ffi-make-weak-pointer
  236. (value)
  237. "ffi_make_weak_pointer")
  238. (import-lambda-definition-2 external-ffi-weak-pointer?
  239. (pointer)
  240. "ffi_weak_pointer_p")
  241. (import-lambda-definition-2 external-ffi-weak-pointer-ref
  242. (pointer)
  243. "ffi_weak_pointer_ref")
  244. (import-lambda-definition-2 external-ffi-check-string-latin-1
  245. (string)
  246. "ffi_check_string_latin_1")
  247. (import-lambda-definition-2 external-ffi-check-string-utf-8
  248. (string)
  249. "ffi_check_string_utf_8")
  250. (import-lambda-definition-2 external-ffi-check-string-utf-16
  251. (string)
  252. "ffi_check_string_utf_16")
  253. ;; initialization
  254. (ffi-export-bindings)