diff --git a/lib/get-element.js b/lib/get-element.js deleted file mode 100644 index da03bad..0000000 --- a/lib/get-element.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -const getElement = divName => { - if (typeof divName === 'string') { - const c = document.getElementById(divName); - if (c === null) { - throw new Error('
element width Id: "' + divName + '" not found'); - } - return c; - } - return divName; -}; - -module.exports = getElement; - -/* eslint-env browser */ diff --git a/lib/get-listing.js b/lib/get-listing.js deleted file mode 100644 index f33d79e..0000000 --- a/lib/get-listing.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -const lister = require('./lister.js'); - -const getListing = async (readers) => { - let listing = []; - const r = readers.find(reader => reader.ext === 'lst'); - if (r) { - // console.log('LST', r); - const utf8Decoder = new TextDecoder('utf-8'); - const list = lister(); - for (let i = 0; i < 10000; i++) { - const { done, value } = await r.reader.read(); - list.onChunk(value ? utf8Decoder.decode(value, {stream: true}) : ''); - if (done) { - listing = list.getTrace(); - break; - } - } - } - return listing; -}; - -module.exports = getListing; diff --git a/lib/get-readers.js b/lib/get-readers.js index d0139a2..2ebe41b 100644 --- a/lib/get-readers.js +++ b/lib/get-readers.js @@ -50,7 +50,7 @@ const urlZip = { const getReaders = async (handler, vcdPath) => { const res = []; - if (vcdPath) { + if (typeof vcdPath === 'string') { const resp = await fetch(vcdPath); const body = await resp.body; const reader = body.getReader(); @@ -63,6 +63,11 @@ const getReaders = async (handler, vcdPath) => { reader }); // return; + } else + if (typeof vcdPath === 'function') { + console.log('vcdPath is function'); + const context = vcdPath(handler); + console.log(context); } else { const urlSearchParams = new URLSearchParams(window.location.search); for (const [key, value] of urlSearchParams) { diff --git a/lib/get-vcd.js b/lib/get-vcd.js deleted file mode 100644 index 3b4c24d..0000000 --- a/lib/get-vcd.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -const maxChunkLength = 1 << 17; // Number.MAX_SAFE_INTEGER; // 5e6; // 300000; // 1 << 23; - -const getVcd = async (readers, content, inst) => { - const r = readers.find(reader => reader.ext === 'vcd'); - if (r) { - // console.log('VCD', r); - document.title = r.baseName; - content.innerHTML = '
LOADING...
'; - let total = 0; - outerLoop: - for (let i = 0; i < 1e5; i++) { - const { done, value } = await r.reader.read(); - - if (done && (value === undefined)) { - // console.log('the end'); - inst.end(); - break outerLoop; - } - const len = value.length; - for (let j = 0; j < len; j += maxChunkLength) { - const value1 = value.slice(j, j + maxChunkLength); - const len1 = value1.length; - total += len1; - - // const vh = u8toStr(value1.slice(0, 100)); - // const vt = u8toStr(value1.slice(-100)); - // console.log({len1, done, total, vh, vt}); - - content.innerHTML = '
' + total.toLocaleString() + '
'; - if (done && ((j + maxChunkLength) >= len)) { - // console.log('last chunk'); - inst.end(value1); - break outerLoop; - } - inst.write(value1); - } - } - } -}; - -module.exports = getVcd; - -/* eslint-env browser */ diff --git a/lib/lister.js b/lib/lister.js deleted file mode 100644 index 5b33ee9..0000000 --- a/lib/lister.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -module.exports = () => { - const trace = {}; - let tail = ''; - return { - onChunk: (chunk) => { - const rows = (tail + chunk).split('\n'); - // console.log('chunk:', chunk.length, 'tail:', tail.length, 'rows:', rows.length); - tail = rows.pop(); - rows.map(row => { - const m = row.match(/\s*([0-9a-f]+):\s*([0-9a-f]+)\s+(.+)/); - if (m) { - const pc = parseInt(m[1], 16); - const op = m[2]; - const asm = m[3].replace(/\t/, ' '); - trace[pc] = {op, asm}; - } - }); - }, - getTrace: () => trace - }; -}; diff --git a/lib/vcd-pipe-deso.js b/lib/vcd-pipe-deso.js deleted file mode 100644 index e05095b..0000000 --- a/lib/vcd-pipe-deso.js +++ /dev/null @@ -1,95 +0,0 @@ -'use strict'; - -const parseTimescale = require('vcd-stream/lib/parse-time-scale.js'); - -const MAX_SAFE_INTEGER = BigInt(Number.MAX_SAFE_INTEGER); - -const numberOrString = val => { - if (val < MAX_SAFE_INTEGER) { - return Number(val); - } - return '0x' + val.toString(16); -}; - -const gcd = (a, b) => { - if (a === undefined) { - return b; - } - let r; - while (b !== 0) { - r = a % b; - a = b; - b = r; - } - return (a < 0) ? -a : a; -}; - -const tNorm = o => { - const {tgcd, chango} = o; - - o.t0 /= tgcd; - o.time /= tgcd; - Object.keys(chango).map(key => { - const {wave} = chango[key]; - wave.map(e => { - e[0] /= tgcd; - }); - }); - - const exp = Math.log10(tgcd) |0; - if (exp > 0) { - const scale = Math.pow(10, exp); - const tgcd1 = tgcd / scale; - if (tgcd1 === (tgcd1 |0)) { - o.tgcd = tgcd1; - o.timescale += exp; - } - } - return o; -}; - - -module.exports = async (deso, inst, done) => { - const chango = {}; - let tgcd; - deso.chango = chango; - deso.view = []; - - const onAnyChange = (id, time, cmd, value, mask) => { - // console.log(id, time, cmd, value, mask); - const time53 = Number(time); - tgcd = gcd(tgcd, time53); - chango[id] = chango[id] || {wave: []}; - if (cmd >= 14 && cmd <= 28) { - chango[id].kind = 'bit'; - chango[id].wave.push([time53, cmd - 14]); - } else { - chango[id].kind = 'vec'; - const point = [time53, numberOrString(value)]; - if (mask !== 0n) { - point.push(numberOrString(mask)); - } - chango[id].wave.push(point); - } - }; - - const t0 = Date.now(); - - inst.on('$enddefinitions', () => { - // console.log('$enddefinitions'); - deso.wires = inst.info.wires; - deso.timescale = parseTimescale(inst.info.timescale); - }); - - inst.change.any(onAnyChange); - - inst.on('finish', () => { - console.log((Date.now() - t0) / 1000); - deso.tgcd = tgcd; - deso.t0 = (inst.info.t0 || 0); - // console.log(inst.getTime()); - deso.time = Number(inst.getTime()); - tNorm(deso); - done(deso); - }); -}; diff --git a/lib/vcdrom.js b/lib/vcdrom.js index cb73520..24e5f26 100644 --- a/lib/vcdrom.js +++ b/lib/vcdrom.js @@ -4,6 +4,8 @@ const pkg = require('../package.json'); const createVCD = require('vcd-stream/out/vcd.js'); const webVcdParser = require('vcd-stream/lib/web-vcd-parser.js'); +const vcdPipeDeso = require('vcd-stream/lib/vcd-pipe-deso.js'); +const getVcd = require('vcd-stream/lib/get-vcd.js'); const stringify = require('onml/stringify.js'); @@ -15,6 +17,8 @@ const { pluginRenderTimeGrid, keyBindo, mountTree, + getElement, + getListing, // renderMenu, // mountCodeMirror5, genKeyHandler, @@ -23,16 +27,15 @@ const { helpPanel } = require('@wavedrom/doppler'); -const {mountCodeMirror6} = require('waveql'); +const { + createCodeMirrorState, + mountCodeMirror6 +} = require('waveql'); const getReaders = require('./get-readers.js'); -const vcdPipeDeso = require('./vcd-pipe-deso.js'); const dropZone = require('./drop-zone.js'); const getWaveql = require('./get-waveql.js'); -const getListing = require('./get-listing.js'); -const getVcd = require('./get-vcd.js'); const getJsonls = require('./get-jsonls.js'); -const getElement = require('./get-element.js'); const pluginLocalStore = require('./plugin-local-store.js'); const getHandler = (content, inst) => async readers => { @@ -42,7 +45,7 @@ const getHandler = (content, inst) => async readers => { const jsonls = await getJsonls(readers); const timeOpt = readers.find(row => row.key === 'time'); - vcdPipeDeso({}, inst, deso => { + vcdPipeDeso({wires: {body: []}}, inst, deso => { // console.log('parsed', deso); content.innerHTML = ''; deso.waveql = waveql; @@ -63,7 +66,8 @@ const getHandler = (content, inst) => async readers => { } }); - const {render} = container.start(content, deso); + content.appendChild(container.pstate.container); + container.start(deso); container.elo.menu.innerHTML = stringify(helpPanel.mlIcon('https://github.com/wavedrom/vcdrom/blob/trunk/help.md')); container.elo.menu.addEventListener('click', () => helpPanel.toggle(container.pstate)); @@ -79,22 +83,35 @@ const getHandler = (content, inst) => async readers => { // }); // }); + deso.hasHistory = true; + deso.isRO = true; + deso.updater = (str) => { + console.log('updater'); + }; + + const cmState = createCodeMirrorState( + deso, + container.pstate + ); const cm = mountCodeMirror6( + cmState, container.elo.waveqlPanel, deso, - container.pstate, - render + container.pstate ); - container.elo.container.addEventListener('keydown', genKeyHandler.genKeyHandler(content, container.pstate, render, cm, keyBindo)); - container.elo.container.addEventListener('wheel', genOnWheel(content, container.pstate, render, cm, keyBindo)); + + cm.view.dispatch({changes: {from: 0, insert: ' '}}); + cm.view.dispatch({changes: {from: 0, to: 1, insert: ''}}); + + container.elo.container.addEventListener('keydown', genKeyHandler.genKeyHandler(content, container.pstate, deso, cm, keyBindo)); + container.elo.container.addEventListener('wheel', genOnWheel(content, container.pstate, deso, cm, keyBindo)); // console.log(cm); cm.view.focus(); - }); await getVcd(readers, content, inst); - + console.log('getVcd'); }; global.VCDrom = async (divName, vcdPath) => {