/* File : example.i */ %module example %{ /* Put headers and other declarations here */ #include "zlib.h" %} %include typemaps.i %rename(VERSION) ZLIB_VERSION; %rename(z_error) zError; %apply char * { Bytef * }; /* Allow the sourceLen to be automatically filled in from the length of the 'source' string */ %typemap(in) (const Bytef *source, uLong sourceLen) %{ if (!C_swig_is_string ($input)) { swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, "Argument $input is not a string"); } $2 = (uLong) C_header_size ($input); $1 = C_c_string ($input); %} /* Allocate space the size of which is determined by the Scheme integer argument, and make a temporary integer so we can set destLen. */ %typemap(in) (Bytef *dest, uLongf *destLen) (uLong len) %{ if (!C_swig_is_fixnum ($input)) { swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, "Argument $input is not a integer"); } len = (uLong) C_unfix ($input); $2 = &len; $1 = (char *) malloc (*$2); %} /* Return the mutated string as a new object. */ %typemap(argout) (Bytef *dest, uLongf *destLen) (C_word *scmstr) %{ scmstr = C_alloc (C_SIZEOF_STRING (*$2)); SWIG_APPEND_VALUE(C_string (&scmstr, *$2, $1)); free ($1); %} %include "zconf.h" %include "zlib.h" /* Ignore destLen as an input argument, and make a temporary integer so we can set destLen. */ %typemap(numinputs=0) uLongf *destLen (uLong len) "$1 = &len;"; /* Return a sized string as a new object. */ %typemap(argout) (void *outstr, uLongf *destLen) (C_word *scmstr) %{ scmstr = C_alloc (C_SIZEOF_STRING (*$2)); SWIG_APPEND_VALUE(C_string (&scmstr, *$2, $1)); %} %inline %{ /* %inline blocks are seen by SWIG and are inserted into the header portion of example_wrap.c, so that they are also seen by the C compiler. */ int deflate_init(z_streamp strm, int level) { return deflateInit(strm,level); /* call macro */ } int inflate_init(z_streamp strm) { return inflateInit(strm); /* call macro */ } void* z_stream_save_next_out(z_streamp strm) { return (void*) strm->next_out; } void z_stream_get_next_chunk(z_streamp strm, void *outstr, uLongf *destLen) { *destLen = strm->next_out - (Bytef*)outstr; } %}