   if (typeof h5gg !== 'undefined') {
  setWindowDrag(0, 0, 400, 80);
  setWindowRect(60, 60, 300, 300);
 }
 
    let timer = null;

 function toggleAuto(button) {
      if (timer) {
        clearInterval(timer);
        timer = null;
        button.textContent = "Auto Update: OFF";
      } else {
        const interval = 1000;
        timer = setInterval(readMemory, interval);
        button.textContent = "Auto Update: ON";
      }
    }

function parseHex(str) {
  str = str.trim().toLowerCase();

  let isNegative = false;

  if (str.startsWith("-")) {
    isNegative = true;
    str = str.slice(1);
  }

  if (!str.startsWith("0x")) {
    str = "0x" + str;
  }

  let value = BigInt(str);
  return isNegative ? -value : value;
}

function readMemory() {
  const addrInput = document.getElementById("addr").value;
  const rangeInput = document.getElementById("range").value;
  const output = document.getElementById("output");
  const type = document.getElementById("valueType").value;

  let base, range;
  try {
    base = parseHex(addrInput);
    range = parseHex(rangeInput);
  } catch {
    output.textContent = "Invalid address or range format.";
    return;
  }

  let result = "";
  const step = 4n;
  const startOffset = range < 0n ? range : 0n;
  const endOffset = range > 0n ? range : 0n;

  for (let offset = startOffset; offset <= endOffset; offset += step) {
    const addr = base + offset;
    const val = h5gg.getValue(addr.toString(), type)
    const offsetStr = offset >= 0n ? `+0x${offset.toString(16)}` : `-0x${(-offset).toString(16)}`;
    result += `${offsetStr.padEnd(10)} = ${val}\n`;
  }

  output.textContent = result || "No values found.";
}
