exl100

Émulateur Exelvision EXL 100 (1984) dans le navigateur : dsp-cpp en WebAssembly, cartouches et cassettes BASIC
git clone https://git.schurger.org/exl100.git
Log | Files | Refs | README

library-disk.mjs (2355B)


      1 // Disquette choisie dans la bibliothèque (EXL 100) : clic sur l'entrée, amorçage sur l'Exeldisk, puis
      2 // commande tapée à l'invite EXELDOS (DIR par défaut) en événements clavier CDP. Captures à 10 s et après.
      3 //   node test/library-disk.mjs [bout de titre] [commande] [base-url] [préfixe]
      4 import { open, sleep } from './cdp.mjs';
      5 
      6 const want = (process.argv[2] ?? 'exeldos').toLowerCase();
      7 const cmd = process.argv[3] ?? 'DIR';
      8 const base = process.argv[4] ?? 'http://127.0.0.1:8196';
      9 const prefix = process.argv[5] ?? '/tmp/lib-disk';
     10 const page = await open(base + '/', { width: 900, height: 1100 });
     11 if (process.env.EXELMEM) await page.evaluate("localStorage.setItem('exl100.exelmem', '1')");   // EXEC (Jester) charge dans la CRAM
     12 await page.evaluate('location.reload()');
     13 await sleep(7000);
     14 const hit = await page.evaluate(`(() => {
     15   const b = [...document.querySelectorAll('.pg')].find((b) => b.dataset.type === 'disk' && b.dataset.search.includes(${JSON.stringify(want)}));
     16   if (b) b.click();
     17   return b ? b.querySelector('.pg-t').textContent : null;
     18 })()`);
     19 console.log('entrée cliquée :', hit);
     20 await sleep(10000);
     21 await page.screenshot(prefix + '-boot.png');
     22 const ev = (type, k, code, vk, mods = 0) =>
     23   page.send('Input.dispatchKeyEvent', { type, key: k, code, windowsVirtualKeyCode: vk, modifiers: mods });
     24 const key = async (k, code, vk) => { await ev('keyDown', k, code, vk); await sleep(80); await ev('keyUp', k, code, vk); await sleep(400); };
     25 for (const ch of cmd) {
     26   if (ch === ' ') await key(' ', 'Space', 32);
     27   else if (ch === '.') await key('.', 'Period', 190);
     28   else if (/[0-9]/.test(ch)) await key(ch, 'Digit' + ch, ch.charCodeAt(0));
     29   else await key(ch.toLowerCase(), 'Key' + ch.toUpperCase(), ch.toUpperCase().charCodeAt(0));
     30 }
     31 await key('Enter', 'Enter', 13);
     32 await sleep(6000);
     33 if (process.env.AFTER) {   // réponse à une question du programme (ex. « Écraser exelmémoire ? » d'EXEC), puis attente
     34   for (const ch of process.env.AFTER) await key(ch.toLowerCase(), 'Key' + ch.toUpperCase(), ch.toUpperCase().charCodeAt(0));
     35   await sleep(Number(process.env.AFTER_MS ?? 12000));
     36 }
     37 await page.screenshot(prefix + '-cmd.png');
     38 console.log('statut :', await page.evaluate("document.getElementById('status').textContent"));
     39 console.log('Captures :', prefix + '-boot.png', prefix + '-cmd.png');
     40 page.close();