Picking apart a permissions mask can produce such labels as "Open/ Yes Mod/ Yes Copy/ Yes Transfer", for example:
// Float a label over an object: its name, description, and permissions.
string perms2String(integer everyonePerms, integer nextPerms)
{
integer PERMS_OPEN = (PERM_MODIFY | PERM_COPY | PERM_TRANSFER);
string line = "Closed";
if ((nextPerms & PERMS_OPEN) == PERMS_OPEN)
{
if (everyonePerms & PERM_COPY)
{
line = "Open";
}
}
if (nextPerms & PERM_MODIFY)
{
line += "/ Yes Mod";
}
if (nextPerms & PERM_COPY)
{
line += "/ Yes Copy";
}
if (nextPerms & PERM_TRANSFER)
{
line += "/ Yes Transfer";
}
return line;
}
default
{
on_rez(integer start_param)
{
llResetScript();
}
state_entry()
{
string name = llGetObjectName();
string description = llGetObjectDesc();
integer everyonePerms = llGetObjectPermMask(MASK_EVERYONE);
integer nextPerms = llGetObjectPermMask(MASK_NEXT);
string permissions = perms2String(everyonePerms, nextPerms);
string between = "\n---\n";
vector color = <1.0, 1.0, 1.0>; // color = <R, G, B>
float opacity = 1.0; // opacity = alpha = 1.0 - transparency
string lines = name + between + description + between + permissions;
llSetText(lines, color, opacity);
}
}