Skip to content
lsl.devlsl.devLSL Dev

Binary Clock v1.1

LSL Header: {{LSL Header}}

Binary Clock V1.2

// 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();
    }
}
Original wiki source

Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.

From the Second Life Wiki

Community documentation adapted from Binary Clock v1.1, by Linden Research, Inc. and contributing residents.View contributors and history.

Imported wiki revision:

Licensed under CC BY-SA 3.0. Last wiki edit: .Formatting and links have been adapted for this site; API metadata follows the LSL definitions.