Binary Clock v1.1

From Second Life Wiki
Revision as of 10:22, 19 September 2007 by Strife Onizuka (talk | contribs) (this script could use simplifying)
Jump to navigation Jump to search

Binary Clock V1.1

// Binary Clock Script
// By Fox Diller
// OMG INSANITY!

list bTime;
list oTime;

integer token;

string dec2bin(integer dec)
{
    if (dec == 0) return "0000";
    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";
}

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];
    
}

displayBDC()
{
    integer current_rowA = llList2Integer(bTime, 0);
    integer old_rowA = llList2Integer(oTime, 0);
    if (current_rowA != old_rowA)
    {
        string rowA = dec2bin(current_rowA);
        integer Acol0 = (integer)llGetSubString(rowA, 3, 3);
        integer Acol1 = (integer)llGetSubString(rowA, 2, 2); 
        llMessageLinked(2, Acol0, "", "");
        llMessageLinked(3, Acol1, "", "");
    } else if (!current_rowA) {
        llMessageLinked(2, 0, "", "");
        llMessageLinked(3, 0, "", "");
    }
    
    integer current_rowB = llList2Integer(bTime, 1);
    integer old_rowB = llList2Integer(oTime, 1);
    if (current_rowB != old_rowB)
    {
        string rowB = dec2bin(current_rowB);
        integer Bcol0 = (integer)llGetSubString(rowB, 3, 3);
        integer Bcol1 = (integer)llGetSubString(rowB, 2, 2);
        integer Bcol2 = (integer)llGetSubString(rowB, 1, 1);
        integer Bcol3 = (integer)llGetSubString(rowB, 0, 0); 
        llMessageLinked(4, Bcol0, "", "");
        llMessageLinked(5, Bcol1, "", "");
        llMessageLinked(6, Bcol2, "", "");
        llMessageLinked(7, Bcol3, "", "");
    } else if (!current_rowB) {
        llMessageLinked(4, 0, "", "");
        llMessageLinked(5, 0, "", "");
        llMessageLinked(6, 0, "", "");
        llMessageLinked(7, 0, "", "");
    }
        
                
    integer current_rowC = llList2Integer(bTime, 2);
    integer old_rowC = llList2Integer(oTime, 2);
    if (current_rowC != old_rowC)
    {     
        string rowC = dec2bin(current_rowC);
        integer Ccol0 = (integer)llGetSubString(rowC, 3, 3);
        integer Ccol1 = (integer)llGetSubString(rowC, 2, 2);
        integer Ccol2 = (integer)llGetSubString(rowC, 1, 1);
        llMessageLinked(8, Ccol0, "", "");
        llMessageLinked(9, Ccol1, "", "");
        llMessageLinked(10, Ccol2, "", "");
    } else if (!current_rowC) {
        llMessageLinked(8, 0, "", "");
        llMessageLinked(9, 0, "", "");
        llMessageLinked(10, 0, "", "");
    }
    
    integer current_rowD = llList2Integer(bTime, 3);
    integer old_rowD = llList2Integer(oTime, 3);
    if (current_rowD != old_rowD)
    {
        string rowD = dec2bin(current_rowD);
        integer Dcol0 = (integer)llGetSubString(rowD, 3, 3);
        integer Dcol1 = (integer)llGetSubString(rowD, 2, 2);
        integer Dcol2 = (integer)llGetSubString(rowD, 1, 1);
        integer Dcol3 = (integer)llGetSubString(rowD, 0, 0); 
        llMessageLinked(11, Dcol0, "", "");
        llMessageLinked(12, Dcol1, "", "");
        llMessageLinked(13, Dcol2, "", "");
        llMessageLinked(14, Dcol3, "", "");
    } else if (!current_rowD) {
        llMessageLinked(11, 0, "", "");
        llMessageLinked(12, 0, "", "");
        llMessageLinked(13, 0, "", "");
        llMessageLinked(14, 0, "", "");
    }
    
    integer current_rowE = llList2Integer(bTime, 4);
    integer old_rowE = llList2Integer(oTime, 4);
    if (current_rowE != old_rowE)
    {
        string rowE = dec2bin(current_rowE);
        integer Ecol0 = (integer)llGetSubString(rowE, 3, 3);
        integer Ecol1 = (integer)llGetSubString(rowE, 2, 2);
        integer Ecol2 = (integer)llGetSubString(rowE, 1, 1);
        llMessageLinked(15, Ecol0, "", "");
        llMessageLinked(16, Ecol1, "", "");
        llMessageLinked(17, Ecol2, "", "");
    } else if (!current_rowE) {
        llMessageLinked(15, 0, "", "");
        llMessageLinked(16, 0, "", "");
        llMessageLinked(17, 0, "", "");
    }
    
    integer current_rowF = llList2Integer(bTime, 5);
    integer old_rowF = llList2Integer(oTime, 5);
    if (current_rowF != old_rowF)
    {
        string rowF = dec2bin(current_rowF);
        integer Fcol0 = (integer)llGetSubString(rowF, 3, 3);
        integer Fcol1 = (integer)llGetSubString(rowF, 2, 2);
        integer Fcol2 = (integer)llGetSubString(rowF, 1, 1);
        integer Fcol3 = (integer)llGetSubString(rowF, 0, 0); 
        llMessageLinked(18, Fcol0, "", "");
        llMessageLinked(19, Fcol1, "", "");
        llMessageLinked(20, Fcol2, "", "");
        llMessageLinked(21, Fcol3, "", "");
    } else if (!current_rowF) {
        llMessageLinked(18, 0, "", "");
        llMessageLinked(19, 0, "", "");
        llMessageLinked(20, 0, "", "");
        llMessageLinked(21, 0, "", "");
    }
        
}

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