Difference between revisions of "Binary Clock v1.1"

From Second Life Wiki
Jump to navigation Jump to search
m (some minor memory usage improvements)
(Well, Strife suggested it needed abbreviating, LOL. Anyone care to check?)
Line 1: Line 1:
{{LSL Header}}
{{LSL Header}}
== Binary Clock V1.1 ==
== Binary Clock V1.2 ==
<lsl>
<lsl>
// Binary Clock Script
// Binary Clock Script
Line 13: Line 13:
string dec2bin(integer dec)
string dec2bin(integer dec)
{
{
     if (dec == 0) return "0000";
     return llGetSubString("0000,0001,0010,0011,0100,0101,0110,0111,1000,1001", dec * 5, dec * 5 + 3);
    if (dec == 1) return "0001";
    if (dec == 2) return "0010";
    if (dec == 3) return "0011";
    if (dec == 4) return "0100";
    if (dec == 5) return "0101";
    if (dec == 6) return "0110";
    if (dec == 7) return "0111";
    if (dec == 8) return "1000";
    if (dec == 9) return "1001";
    return "0000";
}
}


Line 34: Line 24:
     integer seconds = shiftraw % 60;
     integer seconds = shiftraw % 60;


     bTime = [hours   / 10, hours   % 10,
     bTime = [hours / 10, hours % 10,
            minutes / 10, minutes % 10,
        minutes / 10, minutes % 10,
            seconds / 10, seconds % 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;
    }
}
}


Line 43: Line 42:
{
{
     integer current_rowA = llList2Integer(bTime, 0);
     integer current_rowA = llList2Integer(bTime, 0);
     integer old_rowA = llList2Integer(oTime, 0);
     if (current_rowA != llList2Integer(oTime, 0) )
    if (current_rowA != old_rowA)
     {
     {
         string rowA = dec2bin(current_rowA);
         string rowA = dec2bin(current_rowA);
         integer Acol0 = (integer)llGetSubString(rowA, 3, 3);
         SendDigitsToLinks(rowA, 2, 2);
        integer Acol1 = (integer)llGetSubString(rowA, 2, 2);
 
        MessageLinked(2, Acol0);
        MessageLinked(3, Acol1);
    }
    else if (!current_rowA)
    {
        MessageLinked(2, 0);
        MessageLinked(3, 0);
     }
     }
    else if (!current_rowA)
        SendDigitsToLinks("00", 2, 2);


     integer current_rowB = llList2Integer(bTime, 1);
     integer current_rowB = llList2Integer(bTime, 1);
     integer old_rowB = llList2Integer(oTime, 1);
     if (current_rowB != llList2Integer(oTime, 1))
    if (current_rowB != old_rowB)
     {
     {
         string rowB = dec2bin(current_rowB);
         string rowB = dec2bin(current_rowB);
         integer Bcol0 = (integer)llGetSubString(rowB, 3, 3);
         SendDigitsToLinks(rowB, 4, 4);
        integer Bcol1 = (integer)llGetSubString(rowB, 2, 2);
        integer Bcol2 = (integer)llGetSubString(rowB, 1, 1);
        integer Bcol3 = (integer)llGetSubString(rowB, 0, 0);
 
        MessageLinked(4, Bcol0);
        MessageLinked(5, Bcol1);
        MessageLinked(6, Bcol2);
        MessageLinked(7, Bcol3);
     }
     }
     else if (!current_rowB)
     else if (!current_rowB)
    {
         SendDigitsToLinks("0000", 4, 4);
         MessageLinked(4, 0);
        MessageLinked(5, 0);
        MessageLinked(6, 0);
        MessageLinked(7, 0);
    }
 


     integer current_rowC = llList2Integer(bTime, 2);
     integer current_rowC = llList2Integer(bTime, 2);
     integer old_rowC = llList2Integer(oTime, 2);
     if (current_rowC != llList2Integer(oTime, 2))
    if (current_rowC != old_rowC)
     {
     {
         string rowC = dec2bin(current_rowC);
         string rowC = dec2bin(current_rowC);
         integer Ccol0 = (integer)llGetSubString(rowC, 3, 3);
         SendDigitsToLinks(rowC, 8, 3);
        integer Ccol1 = (integer)llGetSubString(rowC, 2, 2);
        integer Ccol2 = (integer)llGetSubString(rowC, 1, 1);
        MessageLinked(8, Ccol0);
        MessageLinked(9, Ccol1);
        MessageLinked(10, Ccol2);
     }
     }
     else if (!current_rowC)
     else if (!current_rowC)
    {
         SendDigitsToLinks("000", 8, 3);
         MessageLinked(8, 0);
        MessageLinked(9, 0);
        MessageLinked(10, 0);
    }


     integer current_rowD = llList2Integer(bTime, 3);
     integer current_rowD = llList2Integer(bTime, 3);
     integer old_rowD = llList2Integer(oTime, 3);
     if (current_rowD != llList2Integer(oTime, 3))
    if (current_rowD != old_rowD)
     {
     {
         string rowD = dec2bin(current_rowD);
         string rowD = dec2bin(current_rowD);
         integer Dcol0 = (integer)llGetSubString(rowD, 3, 3);
         SendDigitsToLinks(rowD, 11, 4);
        integer Dcol1 = (integer)llGetSubString(rowD, 2, 2);
        integer Dcol2 = (integer)llGetSubString(rowD, 1, 1);
        integer Dcol3 = (integer)llGetSubString(rowD, 0, 0);
 
        MessageLinked(11, Dcol0);
        MessageLinked(12, Dcol1);
        MessageLinked(13, Dcol2);
        MessageLinked(14, Dcol3);
     }
     }
     else if (!current_rowD)
     else if (!current_rowD)
    {
         SendDigitsToLinks("0000", 11, 4);
         MessageLinked(11, 0);
        MessageLinked(12, 0);
        MessageLinked(13, 0);
        MessageLinked(14, 0);
    }


     integer current_rowE = llList2Integer(bTime, 4);
     integer current_rowE = llList2Integer(bTime, 4);
     integer old_rowE = llList2Integer(oTime, 4);
     if (current_rowE != llList2Integer(oTime, 4))
    if (current_rowE != old_rowE)
     {
     {
         string rowE = dec2bin(current_rowE);
         string rowE = dec2bin(current_rowE);
         integer Ecol0 = (integer)llGetSubString(rowE, 3, 3);
         SendDigitsToLinks(rowE, 15, 3);
        integer Ecol1 = (integer)llGetSubString(rowE, 2, 2);
        integer Ecol2 = (integer)llGetSubString(rowE, 1, 1);
 
        MessageLinked(15, Ecol0);
        MessageLinked(16, Ecol1);
        MessageLinked(17, Ecol2);
     }
     }
     else if (!current_rowE)
     else if (!current_rowE)
    {
         SendDigitsToLinks("000", 15, 3);
         MessageLinked(15, 0);
        MessageLinked(16, 0);
        MessageLinked(17, 0);
    }


     integer current_rowF = llList2Integer(bTime, 5);
     integer current_rowF = llList2Integer(bTime, 5);
     integer old_rowF = llList2Integer(oTime, 5);
     if (current_rowF != llList2Integer(oTime, 5))
    if (current_rowF != old_rowF)
     {
     {
         string rowF = dec2bin(current_rowF);
         string rowF = dec2bin(current_rowF);
         integer Fcol0 = (integer)llGetSubString(rowF, 3, 3);
         SendDigitsToLinks(rowF, 18, 4);
        integer Fcol1 = (integer)llGetSubString(rowF, 2, 2);
        integer Fcol2 = (integer)llGetSubString(rowF, 1, 1);
        integer Fcol3 = (integer)llGetSubString(rowF, 0, 0);
 
        MessageLinked(18, Fcol0);
        MessageLinked(19, Fcol1);
        MessageLinked(20, Fcol2);
        MessageLinked(21, Fcol3);
     }
     }
     else if (!current_rowF)
     else if (!current_rowF)
    {
         SendDigitsToLinks("0000", 18, 4);
         MessageLinked(18, 0);
        MessageLinked(19, 0);
        MessageLinked(20, 0);
        MessageLinked(21, 0);
    }
 
}
}


Line 179: Line 105:
     touch_start(integer total_number)
     touch_start(integer total_number)
     {
     {
         key owner = llGetOwner();
         if (llDetectedKey(0) != llGetOwner() )
        key id = llDetectedKey(0);
 
        if (id != owner)
             return;
             return;
 
         if ( !(token = !token) )
         if (token)
        {
            token = 0;
             llOwnerSay("Off!");
             llOwnerSay("Off!");
            llSetTimerEvent((float)FALSE);
        }
         else
         else
         {
         {
             oTime = [];
             oTime = bTime = [];
            bTime = [];
            token = 1;
             llOwnerSay("On!");
             llOwnerSay("On!");
            llSetTimerEvent(1.0);
         }
         }
        llSetTimerEvent(token);
     }
     }



Revision as of 13:34, 12 January 2013

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>