public unsafe void parseString(string data)
{
// neo is going to take ownership of this string, so we need to
// use neo_malloc to create it.
byte[] strbuf = Encoding.UTF8.GetBytes(data); // not null terminated
IntPtr buffer = NeoUtil.neo_malloc(strbuf.Length + 1);
Marshal.Copy(strbuf, 0, buffer, strbuf.Length);
Marshal.WriteByte(buffer + strbuf.Length, 0); // write the terminating null
NeoErr.hNE(cs_parse_string(csp, (STR*) buffer, data.Length));
}