summaryrefslogtreecommitdiff
path: root/pages/bitset.php
diff options
context:
space:
mode:
Diffstat (limited to 'pages/bitset.php')
-rw-r--r--pages/bitset.php262
1 files changed, 262 insertions, 0 deletions
diff --git a/pages/bitset.php b/pages/bitset.php
new file mode 100644
index 0000000..c3cdf0a
--- /dev/null
+++ b/pages/bitset.php
@@ -0,0 +1,262 @@
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $isLoggedIn;
+if (!$isLoggedIn) header("Location: /login") and die();
+
+$title = "Bitset Calculator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php';
+
+?>
+
+<br>
+<div class="container">
+ <div id="page-content">
+ <h2>Bitset Calculator</h2>
+ <!--<div class="alert alert-dark">
+ <details>
+ <summary>About the 24bit integer-based metadata system</summary>
+ </details>
+ </div>-->
+ </div>
+ <div style="display:grid; grid-template-columns: repeat(24, 1fr);">
+ <div data-bs-toggle="tooltip" title="Shared memory access" id="binary-bit-1" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fa77ef;">0</div>
+ <div data-bs-toggle="tooltip" title="Shared memory access" id="binary-bit-2" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fa77ef;">0</div>
+ <div data-bs-toggle="tooltip" title="Median system" id="binary-bit-3" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color: #a14700;">0</div>
+ <div data-bs-toggle="tooltip" title="Little/age regressor" id="binary-bit-4" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#b277fa;">0</div>
+ <div data-bs-toggle="tooltip" title="Little/age regressor" id="binary-bit-5" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#b277fa;">0</div>
+ <div data-bs-toggle="tooltip" title="Protector" id="binary-bit-6" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#77faab;">0</div>
+ <div data-bs-toggle="tooltip" title="Fictive" id="binary-bit-7" class="font-monospace tooltip-nohelp text-info" style="text-align: center;cursor: pointer;">0</div>
+ <div data-bs-toggle="tooltip" title="Not talking" id="binary-bit-8" class="font-monospace tooltip-nohelp text-danger" style="text-align: center;cursor: pointer;">0</div>
+ <div data-bs-toggle="tooltip" title="Host" id="binary-bit-9" class="font-monospace tooltip-nohelp text-primary" style="text-align: center;cursor: pointer;">0</div>
+ <div data-bs-toggle="tooltip" title="1st species" id="binary-bit-10" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fab277;">0</div>
+ <div data-bs-toggle="tooltip" title="1st species" id="binary-bit-11" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fab277;">0</div>
+ <div data-bs-toggle="tooltip" title="1st species" id="binary-bit-12" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fab277;">0</div>
+ <div data-bs-toggle="tooltip" title="1st species" id="binary-bit-13" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fab277;">1</div>
+ <div data-bs-toggle="tooltip" title="2nd species" id="binary-bit-14" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#faf377;">0</div>
+ <div data-bs-toggle="tooltip" title="2nd species" id="binary-bit-15" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#faf377;">0</div>
+ <div data-bs-toggle="tooltip" title="2nd species" id="binary-bit-16" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#faf377;">0</div>
+ <div data-bs-toggle="tooltip" title="2nd species" id="binary-bit-17" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#faf377;">0</div>
+ <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-18" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div>
+ <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-19" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div>
+ <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-20" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div>
+ <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-21" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div>
+ <div data-bs-toggle="tooltip" title="Robot" id="binary-bit-22" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;">0</div>
+ <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-23" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div>
+ <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-24" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div>
+ </div>
+ <br>
+ <p>
+ <b>Input:</b> <input onchange="calculateInput();" onkeydown="calculateInput()" onkeyup="calculateInput()" value="2048" id="input" type="number" class="form-control" style="width:256px;display: inline-block;color:white;background:#111;border-color:#222;" maxlength="8" max="16777215" min="16777215"><br>
+ <b>Output:</b> <span id="output-color" style="border-radius:5px;display:inline-block;width:16px;height:16px;background-color:black;vertical-align:middle;"></span> <span style="vertical-align:middle;"><code id="output-bin">0b000000000000100000000000</code>, <code id="output-hex">0x000800</code>, <code id="output-dec">2048</code></span>
+ </p>
+ <script>
+ for (let i = 1; i <= 24; i++) {
+ document.getElementById("binary-bit-" + i).onclick = (event) => {
+ let el = event.target;
+ if (el.innerText === "0") {
+ el.innerText = "1";
+ } else {
+ el.innerText = "0";
+ }
+
+ calculateOutput();
+
+ let binString = ("0".repeat(24 - parseInt(document.getElementById("input").value).toString(2).length)) + parseInt(document.getElementById("input").value).toString(2);
+ let bin = binString.split("").map((i) => parseInt(i));
+
+ for (let i = 1; i <= 24; i++) {
+ if (bin[i - 1]) {
+ document.getElementById("binary-bit-" + i).innerText = bin[i - 1].toString();
+ } else {
+ document.getElementById("binary-bit-" + i).innerText = "0";
+ }
+ }
+
+ let sharedMemory = parseInt(binString.substring(0, 2), 2);
+ let median = binString.substring(2, 3) !== "0";
+ let little = parseInt(binString.substring(3, 5), 2);
+ let protector = binString.substring(5, 6) !== "0";
+ let fictive = binString.substring(6, 7) !== "0";
+ let notTalking = binString.substring(7, 8) !== "0";
+ let host = binString.substring(8, 9) !== "0";
+ let robot = binString.substring(21, 22) !== "0";
+ let species1 = binString.substring(9, 13);
+ let species2 = binString.substring(13, 17);
+
+ document.getElementById("value-0").value = sharedMemory;
+ document.getElementById("value-1").value = little;
+ document.getElementById("value-2").value = species1;
+ document.getElementById("value-3").value = species2;
+ document.getElementById("value-4").checked = median;
+ document.getElementById("value-5").checked = protector;
+ document.getElementById("value-6").checked = fictive;
+ document.getElementById("value-7").checked = notTalking;
+ document.getElementById("value-8").checked = host;
+ document.getElementById("value-9").checked = robot;
+ }
+ }
+
+ function calculateOutput() {
+ let bin = [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null].map((_, i) => {
+ let e = i + 1;
+ return document.getElementById("binary-bit-" + e).innerText;
+ }).join("");
+
+ document.getElementById("output-bin").innerText = "0b" + bin;
+
+ let hex = parseInt(bin, 2).toString(16);
+
+ document.getElementById("output-hex").innerText = "0x" + "0".repeat(6 - hex.length) + hex;
+ document.getElementById("output-color").style.backgroundColor = "#" + "0".repeat(6 - hex.length) + hex;
+ document.getElementById("output-dec").innerText = parseInt(bin, 2).toString();
+ document.getElementById("input").value = parseInt(bin, 2).toString();
+ }
+
+ function calculateInput() {
+ if (parseInt(document.getElementById("input").value).toString().length > 8) return;
+
+ let binString = ("0".repeat(24 - parseInt(document.getElementById("input").value).toString(2).length)) + parseInt(document.getElementById("input").value).toString(2);
+ let bin = binString.split("").map((i) => parseInt(i));
+
+ for (let i = 1; i <= 24; i++) {
+ if (bin[i - 1]) {
+ document.getElementById("binary-bit-" + i).innerText = bin[i - 1].toString();
+ } else {
+ document.getElementById("binary-bit-" + i).innerText = "0";
+ }
+ }
+
+ let sharedMemory = parseInt(binString.substring(0, 2), 2);
+ let median = binString.substring(2, 3) !== "0";
+ let little = parseInt(binString.substring(3, 5), 2);
+ let protector = binString.substring(5, 6) !== "0";
+ let fictive = binString.substring(6, 7) !== "0";
+ let notTalking = binString.substring(7, 8) !== "0";
+ let host = binString.substring(8, 9) !== "0";
+ let robot = binString.substring(21, 22) !== "0";
+ let species1 = binString.substring(9, 13);
+ let species2 = binString.substring(13, 17);
+
+ document.getElementById("value-0").value = sharedMemory;
+ document.getElementById("value-1").value = little;
+ document.getElementById("value-2").value = species1;
+ document.getElementById("value-3").value = species2;
+ document.getElementById("value-4").checked = median;
+ document.getElementById("value-5").checked = protector;
+ document.getElementById("value-6").checked = fictive;
+ document.getElementById("value-7").checked = notTalking;
+ document.getElementById("value-8").checked = host;
+ document.getElementById("value-9").checked = robot;
+
+ calculateOutput();
+
+ return bin;
+ }
+
+ function updateFromSelection() {
+ let val0 = document.getElementById("value-0").value;
+ let val1 = document.getElementById("value-1").value;
+ let val2 = document.getElementById("value-2").value;
+ let val3 = document.getElementById("value-3").value;
+ let val4 = document.getElementById("value-4").checked;
+ let val5 = document.getElementById("value-5").checked;
+ let val6 = document.getElementById("value-6").checked;
+ let val7 = document.getElementById("value-7").checked;
+ let val8 = document.getElementById("value-8").checked;
+ let val9 = document.getElementById("value-9").checked;
+
+ let val0bin = parseInt(val0).toString(2);
+ val0bin = val0bin.length === 1 ? "0" + val0bin : val0bin;
+
+ let val1bin = parseInt(val1).toString(2);
+ val1bin = val1bin.length === 1 ? "0" + val1bin : val1bin;
+
+ let val2bin = val2;
+ let val3bin = val3;
+
+ let val4bin = val4 ? "1" : "0";
+ let val5bin = val5 ? "1" : "0";
+ let val6bin = val6 ? "1" : "0";
+ let val7bin = val7 ? "1" : "0";
+ let val8bin = val8 ? "1" : "0";
+ let val9bin = val9 ? "1" : "0";
+
+ let bin = val0bin + val4bin + val1bin + val5bin + val6bin + val7bin + val8bin + val2bin + val3bin + "0000" + val9bin + "00";
+
+ console.log(bin, parseInt(bin, 2));
+
+ let parts = bin.split("").map((i) => parseInt(i));
+
+ for (let i = 1; i <= 24; i++) {
+ if (parts[i - 1]) {
+ document.getElementById("binary-bit-" + i).innerText = parts[i - 1].toString();
+ } else {
+ document.getElementById("binary-bit-" + i).innerText = "0";
+ }
+ }
+
+ calculateOutput();
+ }
+ </script>
+
+ <p>
+ <b>Shared memory access: </b><select class="tooltip-nohelp form-select" style='display:inline-block;width:max-content;color:white;background-color:#111;border-color:#222;background-image:url("data:image/svg+xml,%3csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 16 16&apos;%3e%3cpath fill=&apos;none&apos; stroke=&apos;%23ffffff&apos; stroke-linecap=&apos;round&apos; stroke-linejoin=&apos;round&apos; stroke-width=&apos;2&apos; d=&apos;M2 5l6 6 6-6&apos;/%3e%3c/svg%3e");' id="value-0" onchange="updateFromSelection();">
+ <option value="2">Full direct access</option>
+ <option value="1">Partial direct access</option>
+ <option value="0" selected>No direct access</option>
+ </select>
+ <br>
+ <b>Little/age regressor: </b><select class="tooltip-nohelp form-select" style='display:inline-block;width:max-content;color:white;background-color:#111;border-color:#222;background-image:url("data:image/svg+xml,%3csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 16 16&apos;%3e%3cpath fill=&apos;none&apos; stroke=&apos;%23ffffff&apos; stroke-linecap=&apos;round&apos; stroke-linejoin=&apos;round&apos; stroke-width=&apos;2&apos; d=&apos;M2 5l6 6 6-6&apos;/%3e%3c/svg%3e");' id="value-1" onchange="updateFromSelection();">
+ <option value="0" selected>None</option>
+ <option value="2">Little</option>
+ <option value="3">Younger</option>
+ <option value="1">Age regressor</option>
+ </select>
+ <br>
+ <b>Species: </b><select class="tooltip-nohelp form-select" style='display:inline-block;width:max-content;color:white;background-color:#111;border-color:#222;background-image:url("data:image/svg+xml,%3csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 16 16&apos;%3e%3cpath fill=&apos;none&apos; stroke=&apos;%23ffffff&apos; stroke-linecap=&apos;round&apos; stroke-linejoin=&apos;round&apos; stroke-width=&apos;2&apos; d=&apos;M2 5l6 6 6-6&apos;/%3e%3c/svg%3e");' id="value-2" onchange="updateFromSelection();">
+ <option value="0000" disabled>None</option>
+ <option value="0001">Earth pony</option>
+ <option value="0010">Unicorn</option>
+ <option value="0011">Pegasus</option>
+ <option value="0100">Alicorn</option>
+ <option value="0101">Bat pony</option>
+ <option value="0110">Crystal pony</option>
+ </select>
+ <select class="tooltip-nohelp form-select" style='display:inline-block;width:max-content;color:white;background-color:#111;border-color:#222;background-image:url("data:image/svg+xml,%3csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 16 16&apos;%3e%3cpath fill=&apos;none&apos; stroke=&apos;%23ffffff&apos; stroke-linecap=&apos;round&apos; stroke-linejoin=&apos;round&apos; stroke-width=&apos;2&apos; d=&apos;M2 5l6 6 6-6&apos;/%3e%3c/svg%3e");' id="value-3" onchange="updateFromSelection();">
+ <option value="0000">None</option>
+ <option value="0001">Earth pony</option>
+ <option value="0010">Unicorn</option>
+ <option value="0011">Pegasus</option>
+ <option value="0100">Alicorn</option>
+ <option value="0101">Bat pony</option>
+ <option value="0110">Crystal pony</option>
+ </select>
+ </p>
+ <p>
+ <label>
+ <input type="checkbox" id="value-4" onchange="updateFromSelection();">
+ Part of a median system
+ </label><br>
+ <label>
+ <input type="checkbox" id="value-5" onchange="updateFromSelection();">
+ Protector
+ </label><br>
+ <label>
+ <input type="checkbox" id="value-6" onchange="updateFromSelection();">
+ Fictive
+ </label><br>
+ <label>
+ <input type="checkbox" id="value-7" onchange="updateFromSelection();">
+ Not talking
+ </label><br>
+ <label>
+ <input type="checkbox" id="value-8" onchange="updateFromSelection();">
+ Host
+ </label><br>
+ <label>
+ <input type="checkbox" id="value-9" onchange="updateFromSelection();">
+ Robot
+ </label>
+ </p>
+</div>
+
+<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/footer.php'; ?>