Key compression

From Second Life Wiki
Revision as of 18:55, 21 February 2008 by Tmyclyk Dmytryk (talk | contribs)
Jump to navigation Jump to search

Compress Keys of all sorts

<lsl> string strFullCompression = "0123456789abcdefghijklmnopqrstuvwxyz!\"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`{|}~¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅ"; string compressKey(key id){

   string str = (string)llParseString2List((string)id,["-"],[]);
   integer i;
   string output;
   integer len = llStringLength(str);
   while(i < len){
       integer val = llSubStringIndex(strFullCompression,(llGetSubString(str,i,i)));
       ++i;    
       integer val2 = llSubStringIndex(strFullCompression,(llGetSubString(str,i,i)));
       val *= 16;
       val += val2;
       output += llGetSubString(strFullCompression,val,val);
       ++i;
   }
   
   return output;

}

string decompressKey(string compressed){

   integer i;
   integer len = llStringLength(compressed);
   string output;
   while(i < len){
       integer indx = llSubStringIndex(strFullCompression,llGetSubString(compressed,i,i));
       integer val1 = (integer)indx / 16;
       integer val2 = indx % 16;
       output += llGetSubString(strFullCompression,val1,val1) + llGetSubString(strFullCompression,val2,val2);        
       ++i;    
   }
   
   return llGetSubString(llInsertString(llInsertString(llInsertString(llInsertString(llInsertString(llToLower(output),12,""),8,"-"),13,"-"),18,"-"),23,"-"),0,35);

} </lsl>