summaryrefslogtreecommitdiff
path: root/Examples/ocaml
diff options
context:
space:
mode:
authorArt Yerkes <ayerkes@speakeasy.net>2003-12-05 22:58:56 +0000
committerArt Yerkes <ayerkes@speakeasy.net>2003-12-05 22:58:56 +0000
commit4639f09df5f811c61d664d612382d03df6af457b (patch)
tree4f31984b84ae445c21bf48b51b4641d2310afe13 /Examples/ocaml
parentac0be15578c1b74fcd874c6ae9feb30f2ee44ceb (diff)
downloadswig-4639f09df5f811c61d664d612382d03df6af457b.tar.gz
Added string-from-ptr example.
-- Response to a question asked by Thaddeus L. Olczyk git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5489 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Diffstat (limited to 'Examples/ocaml')
-rw-r--r--Examples/ocaml/string_from_ptr/Makefile34
-rw-r--r--Examples/ocaml/string_from_ptr/example_prog.ml23
-rw-r--r--Examples/ocaml/string_from_ptr/foolib.i16
3 files changed, 73 insertions, 0 deletions
diff --git a/Examples/ocaml/string_from_ptr/Makefile b/Examples/ocaml/string_from_ptr/Makefile
new file mode 100644
index 000000000..504898a7d
--- /dev/null
+++ b/Examples/ocaml/string_from_ptr/Makefile
@@ -0,0 +1,34 @@
+TOP = ../..
+SWIG = $(TOP)/../swig
+SWIGOPT = -c++
+SRCS =
+TARGET = example
+INTERFACE = foolib.i
+MLFILE = foolib.ml
+PROGFILE = example_prog.ml
+OBJS =
+
+all:: static static_top
+
+static::
+ $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \
+ SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' \
+ MLFILE='$(MLFILE)' PROGFILE='$(PROGFILE)' OBJS='$(OBJS)' \
+ ocaml_static_cpp
+
+static_top::
+ $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \
+ SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' \
+ MLFILE='$(MLFILE)' PROGFILE='$(PROGFILE)' OBJS='$(OBJS)' \
+ ocaml_static_cpp_toplevel
+
+dynamic::
+ $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \
+ SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)'
+ MLFILE='$(MLFILE)' PROGFILE='$(PROGFILE)' OBJS='$(OBJS)' \
+ ocaml_dynamic_cpp
+
+clean::
+ $(MAKE) -f $(TOP)/Makefile MLFILE='$(MLFILE)' ocaml_clean
+
+check: all
diff --git a/Examples/ocaml/string_from_ptr/example_prog.ml b/Examples/ocaml/string_from_ptr/example_prog.ml
new file mode 100644
index 000000000..8069dc228
--- /dev/null
+++ b/Examples/ocaml/string_from_ptr/example_prog.ml
@@ -0,0 +1,23 @@
+(* foo_program.ml -- the program using foolib *)
+
+open Swig (* Give access to the swig library *)
+open Foolib (* This is the name of your swig output *)
+
+let results = _foo '() (* Function names are prefixed with _ in order to make
+ them lex as identifiers in ocaml. Consider that
+ uppercase identifiers are module names in ocaml.
+ NOTE: the '() syntax is part of swigp4. You can do:
+ let results = _foo C_void *)
+
+(* Since your function has a return value in addition to the string output,
+ you'll need to match them as a list *)
+
+let result_string =
+ match results with
+ C_list [ C_string result_string ; C_int 0 ] -> (* The return value is
+ last when out arguments appear, but this too can be customized.
+ We're also checking that the function succeeded. *)
+ result_string
+ | _ -> raise (Failure "Expected string, int reply from _foo")
+
+let _ = print_endline result_string
diff --git a/Examples/ocaml/string_from_ptr/foolib.i b/Examples/ocaml/string_from_ptr/foolib.i
new file mode 100644
index 000000000..86e0880eb
--- /dev/null
+++ b/Examples/ocaml/string_from_ptr/foolib.i
@@ -0,0 +1,16 @@
+%module foolib
+%{
+static int foo( char **buf ) {
+ *buf = "string from c";
+ return 0;
+}
+%}
+
+%typemap(in,numinputs=0) char **buf (char *temp) {
+ $1 = &temp;
+}
+%typemap(argout) char **buf {
+ swig_result = caml_list_append(swig_result,caml_val_string((char *)*$1));
+}
+
+int foo( char **buf );