Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | (* main.sml *) |
2 | ||
3 | (* Declare ffi to be implemented by calling the C function ffi. *) | |
4 | val ffi = _import "ffi" public: real array * int * int ref * char ref * int -> char; | |
5 | open Array | |
6 | ||
7 | val size = 10 | |
8 | val a = tabulate (size, fn i => real i) | |
9 | val ri = ref 0 | |
10 | val rc = ref #"0" | |
11 | val n = 17 | |
12 | ||
13 | (* Call the C function *) | |
14 | val c = ffi (a, Array.length a, ri, rc, n) | |
15 | ||
16 | (* FFI_INT is declared as public in ffi-import.c *) | |
17 | val (nGet, nSet) = _symbol "FFI_INT" public: (unit -> int) * (int -> unit); | |
18 | ||
19 | val _ = print (concat [Int.toString (nGet ()), "\n"]) | |
20 | ||
21 | val _ = | |
22 | print (if c = #"c" andalso !ri = 45 andalso !rc = c | |
23 | then "success\n" | |
24 | else "fail\n") |