<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>visualize</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html, body { width: 100%; height: 100%; background: #000; overflow: hidden; }
#canvas {
display: block;
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%, -50%);
max-width: 100vw;
max-height: 100vh;
width: auto;
height: auto;
}
#status {
position: fixed; bottom: 8px; right: 12px;
color: #888; font: 12px/1 monospace;
}
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<div id="status">loading…</div>
<script>
const canvas = document.getElementById('canvas');
const status = document.getElementById('status');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
const worker = new Worker('worker.js');
const offscreen = canvas.transferControlToOffscreen();
worker.postMessage({ type: 'init', canvas: offscreen }, [offscreen]);
fetch('program.ling')
.then(r => { if (!r.ok) throw new Error(r.statusText); return r.text(); })
.then(source => {
status.textContent = 'running';
worker.postMessage({ type: 'run', source });
})
.catch(err => {
status.textContent = 'error: ' + err.message;
console.error(err);
});
worker.onerror = (e) => {
status.textContent = 'worker error: ' + e.message;
console.error('worker error', e);
};
</script>
</body>
</html>