blob: 8bd6d323aec9789a2c2d675b845f0629437d5851 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
/*************************************************************************/
/* */
/* Objective Caml LablTk library */
/* */
/* Francois Rouaix, Francois Pessaux and Jun Furuse */
/* projet Cristal, INRIA Rocquencourt */
/* Jacques Garrigue, Kyoto University RIMS */
/* */
/* Copyright 1999 Institut National de Recherche en Informatique et */
/* en Automatique and Kyoto University. All rights reserved. */
/* This file is distributed under the terms of the GNU Library */
/* General Public License. */
/* */
/*************************************************************************/
/* $Id$ */
#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;
}
|