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) => {