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