/* File : example.i */ %module Example %{ #include "example.h" %} %insert(m3wrapintf) %{ EXCEPTION E(Error); %} %insert(m3wrapimpl) %{ IMPORT Ctypes AS C; %} %pragma(modula3) enumitem="enum=error;int;srcstyle=underscore;Error"; %typemap("m3rawintype") double & %{C.double%}; %typemap("m3wrapintype") double & %{LONGREAL%}; %typemap("m3wraprettype") error "" %typemap("m3wrapretvar") error "rawerr: C.int;" %typemap("m3wrapretraw") error "rawerr" %typemap("m3wrapretcheck:throws") error "E" %typemap("m3wrapretcheck") error %{VAR err := VAL(rawerr, Error); BEGIN IF err # Error.ok THEN RAISE E(err); END; END;%} %typemap("m3rawintype") errorstate & %{C.int%}; %typemap("m3wrapintype",numinputs=0) errorstate & %{%}; %typemap("m3wrapargvar") errorstate & %{err:C.int:=ORD(Error.ok);%}; %typemap("m3wrapoutcheck:throws") errorstate & "E"; %typemap("m3wrapoutcheck") errorstate & %{IF VAL(err,Error) # Error.ok THEN RAISE E(VAL(err,Error)); END;%} /* Let's just grab the original header file here */ %include "example.h"