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