diff options
Diffstat (limited to 'otherlibs/labltk/support/cltkMisc.c')
-rw-r--r-- | otherlibs/labltk/support/cltkMisc.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/otherlibs/labltk/support/cltkMisc.c b/otherlibs/labltk/support/cltkMisc.c new file mode 100644 index 000000000..22db83e46 --- /dev/null +++ b/otherlibs/labltk/support/cltkMisc.c @@ -0,0 +1,42 @@ +#include <tcl.h> +#include <tk.h> +#include <caml/mlvalues.h> +#include <caml/memory.h> +#include "camltk.h" + +/* Parsing results */ +value camltk_splitlist (v) /* ML */ + value v; +{ + int argc; + char **argv; + int result; + + CheckInit(); + + /* argv is allocated by Tcl, to be freed by us */ + result = Tcl_SplitList(cltclinterp,String_val(v),&argc,&argv); + switch(result) { + case TCL_OK: + { value res = copy_string_list(argc,argv); + free((char *)argv); /* only one large block was allocated */ + return res; + } + case TCL_ERROR: + default: + tk_error(cltclinterp->result); + } +} + +/* Copy a Caml string to the C heap. Should deallocate with stat_free */ +char *string_to_c(s) + value s; +{ + int l = string_length(s); + char *res = stat_alloc(l + 1); + bcopy(String_val(s),res,l); + res[l] = '\0'; + return res; +} + + |