Binary Clock v1.1

From Second Life Wiki
Revision as of 13:34, 12 January 2013 by Omei Qunhua (talk | contribs) (Well, Strife suggested it needed abbreviating, LOL. Anyone care to check?)
Jump to navigation Jump to search

Binary Clock V1.2

<lsl> // Binary Clock Script // By Fox Diller // OMG INSANITY!

list bTime; list oTime;

integer token;

string dec2bin(integer dec) {

   return llGetSubString("0000,0001,0010,0011,0100,0101,0110,0111,1000,1001", dec * 5, dec * 5 + 3);

}

BuildClock() {

   integer shiftraw = (integer)llGetWallclock();
   integer hours = shiftraw / 3600;
   integer minutes = (shiftraw % 3600) / 60;
   integer seconds = shiftraw % 60;
   bTime = [hours / 10, hours % 10,
       minutes / 10, minutes % 10,
       seconds / 10, seconds % 10];

}

SendDigitsToLinks(string str, integer link, integer len) {

   integer x = 3;
   while(len--)
   {
       llMessageLinked(link++, (integer) llGetSubString(str, x, x) , "", "");
       --x;
   }

}

displayBDC() {

   integer current_rowA = llList2Integer(bTime, 0);
   if (current_rowA != llList2Integer(oTime, 0) )
   {
       string rowA = dec2bin(current_rowA);
       SendDigitsToLinks(rowA, 2, 2);
   }
   else if (!current_rowA) 
       SendDigitsToLinks("00", 2, 2);
   integer current_rowB = llList2Integer(bTime, 1);
   if (current_rowB != llList2Integer(oTime, 1))
   {
       string rowB = dec2bin(current_rowB);
       SendDigitsToLinks(rowB, 4, 4);
   }
   else if (!current_rowB)
       SendDigitsToLinks("0000", 4, 4);
   integer current_rowC = llList2Integer(bTime, 2);
   if (current_rowC != llList2Integer(oTime, 2))
   {
       string rowC = dec2bin(current_rowC);
       SendDigitsToLinks(rowC, 8, 3);
   }
   else if (!current_rowC)
       SendDigitsToLinks("000", 8, 3);
   integer current_rowD = llList2Integer(bTime, 3);
   if (current_rowD != llList2Integer(oTime, 3))
   {
       string rowD = dec2bin(current_rowD);
       SendDigitsToLinks(rowD, 11, 4);
   }
   else if (!current_rowD)
       SendDigitsToLinks("0000", 11, 4);
   integer current_rowE = llList2Integer(bTime, 4);
   if (current_rowE != llList2Integer(oTime, 4))
   {
       string rowE = dec2bin(current_rowE);
       SendDigitsToLinks(rowE, 15, 3);
   }
   else if (!current_rowE)
       SendDigitsToLinks("000", 15, 3);
   integer current_rowF = llList2Integer(bTime, 5);
   if (current_rowF != llList2Integer(oTime, 5))
   {
       string rowF = dec2bin(current_rowF);
       SendDigitsToLinks(rowF, 18, 4);
   }
   else if (!current_rowF)
       SendDigitsToLinks("0000", 18, 4);

}

MessageLinked(integer inputLinkNumber, integer inputNumber) {

   llMessageLinked(inputLinkNumber, inputNumber, "", "");

}

default {

   touch_start(integer total_number)
   {
       if (llDetectedKey(0) != llGetOwner() )
           return;
       if ( !(token = !token) )
           llOwnerSay("Off!");
       else
       {
           oTime = bTime = [];
           llOwnerSay("On!");
       }
       llSetTimerEvent(token);
   }
   timer()
   {
       bTime = oTime;
       BuildClock();
       displayBDC();
   }

} </lsl>