string coffeepackStr (string source)
{
string result;
integer len = llStringLength(source);
integer i;
integer a;
// unpacked string
if (llGetSubString(source, 0, 0) != llChar(1)) {
result = llChar(1); // char(1) is our packed string symbol. Change to whichever to suit
integer check = TRUE;
for (i = 0; i < len && check; i += 2)
{
a = llOrd(source, i);
integer b = llOrd(source, i + 1);
// check a in range, check b in range, catch odd length string
check = (a >= 32 && a <= 126) && ((b >= 32 && b <= 126) || (!b && i == len-1));
if (check) result += llChar(a << 8 | b);
}
// unpackable !! return original
if (!(len && check)) result = source;
}
// Packed String
else {
for (i = 1; i < len; i++) // start at 1 to skip the symbol
{
a = llOrd(source, i);
result += llChar(a >> 8);
a = a & 255;
if (a) result += llChar(a); // catch odd length string
}
}
return result;
}
default
{
state_entry()
{
llLinksetDataReset();
llOwnerSay((string)llLinksetDataAvailable());
llLinksetDataWrite("123456781234567812345678123456781234567812345678","123456781234567812345678123456781234567812345678");
llLinksetDataWrite("223456781234567812345678123456781234567812345678","123456781234567812345678123456781234567812345678");
llLinksetDataWrite("323456781234567812345678123456781234567812345678","123456781234567812345678123456781234567812345678");
llLinksetDataWrite("423456781234567812345678123456781234567812345678","123456781234567812345678123456781234567812345678");
llOwnerSay((string)llLinksetDataAvailable());
llLinksetDataReset();
llLinksetDataWrite(coffeepackStr("123456781234567812345678123456781234567812345678"),coffeepackStr("123456781234567812345678123456781234567812345678"));
llLinksetDataWrite(coffeepackStr("223456781234567812345678123456781234567812345678"),coffeepackStr("123456781234567812345678123456781234567812345678"));
llLinksetDataWrite(coffeepackStr("323456781234567812345678123456781234567812345678"),coffeepackStr("123456781234567812345678123456781234567812345678"));
llLinksetDataWrite(coffeepackStr("423456781234567812345678123456781234567812345678"),coffeepackStr("123456781234567812345678123456781234567812345678"));
llOwnerSay((string)llLinksetDataAvailable());
}
}
[00:43:26] prim: 131072
[00:43:26] prim: 130688
[00:43:26] prim: 130488