Difference between revisions of "Key compression"

From Second Life Wiki
Jump to navigation Jump to search
m (didn't escape the slash)
Line 34: Line 34:
      
      
     return llGetSubString(llInsertString(llInsertString(llInsertString(llInsertString(llInsertString(llToLower(output),12,""),8,"-"),13,"-"),18,"-"),23,"-"),0,35);
     return llGetSubString(llInsertString(llInsertString(llInsertString(llInsertString(llInsertString(llToLower(output),12,""),8,"-"),13,"-"),18,"-"),23,"-"),0,35);
}
</lsl>
This code is modified by SiRiS Asturias for efficiency, I have both here because on the mono they're both giving consistent but different outputs.. It's for reference.
<lsl>
string compressKey(key id){ 
    id = (string)llParseString2List(id,(list)"-",[]); 
    integer i = llStringLength(id);   
    string output;   
    while(i--){   
        integer val = llSubStringIndex(strFullCompression,llGetSubString(id,i,i)) + (llSubStringIndex(strFullCompression,llGetSubString(id,i,i--)) << 4 ); 
        output += llGetSubString(strFullCompression,val,val);   
        //++i; 
    }   
    return output;
}
string decompressKey(string compressed){ 
    integer i = llStringLength(compressed); 
    string output;    while(i--){     
        integer indx = llSubStringIndex(strFullCompression,llGetSubString(compressed,i,i));
        integer val1 = (integer)(indx >> 4); 
        integer val2 = indx % 16;     
        output += llGetSubString(strFullCompression,val2,val2) + llGetSubString(strFullCompression,val1,val1); 
    }   
    return llGetSubString(llInsertString(llInsertString(llInsertString(llInsertString(output,8,"-"),13,"-"),18,"-"),23,"-"),0,35);
}
}
</lsl>
</lsl>

Revision as of 19:13, 25 February 2008

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>


This code is modified by SiRiS Asturias for efficiency, I have both here because on the mono they're both giving consistent but different outputs.. It's for reference. <lsl> string compressKey(key id){

   id = (string)llParseString2List(id,(list)"-",[]);   
   integer i = llStringLength(id);    
   string output;    
   while(i--){     
       integer val = llSubStringIndex(strFullCompression,llGetSubString(id,i,i)) + (llSubStringIndex(strFullCompression,llGetSubString(id,i,i--)) << 4 );   
       output += llGetSubString(strFullCompression,val,val);     
       //++i;   
   }    
   return output;

} string decompressKey(string compressed){

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

} </lsl>