protected internal virtual int packValues(string values)
{
int i , n = values.Length;
int m = (n & 1) == 1 ? (n >> 1) + 2 : (n >> 1) + 1;
int offset = vspace.alloc(m);
sbyte[] va = vspace.Array;
for (i = 0; i < n; i++)
{
int j = i >> 1;
sbyte v = (sbyte)((values[i] - '0' + 1) & 0x0f);
if ((i & 1) == 1)
{
va[j + offset] = (sbyte)(va[j + offset] | v);
}
else
{
va[j + offset] = (sbyte)(v << 4); // big endian
}
}
va[m - 1 + offset] = 0; // terminator
return offset;
}