ngspice-wave is an analog waveform viewer for the .raw files ngspice and
ngspice-jit write.  It reads the Berkeley raw format in both encodings,
binary and ASCII, and both flavours -- real (.tran, .dc) and complex
(.ac).

The package installs two programs that share one renderer:

    waveview <file.raw>               interactive window (X11)
    wave-plot <file.raw> -o out.png   the same plot as a PNG, no display

waveview opens with an empty pane and the signal list on the left; click
a signal to plot it.  Hierarchical names -- v(xio.xser.rxp_a) -- become
a collapsible tree, so a top-level chip is navigable instead of being
one flat list of thousands of nodes.  Wheel zooms, right-drag zooms to a
region, 'a' and 'b' place cursors, 'm' measures, 'p' opens another pane,
'f' fits, 'q' quits.  Press 'h' inside the viewer for the full key and
mouse reference; the same table is installed as keys.txt in the
documentation directory.

Storage is a min/max pyramid reduced to the resolution of the output
device, which is what lets multi-gigabyte files open in well under a
second: the viewer only ever touches as many samples as the window has
pixels.  Exact samples are used for measurements, so a cursor reading is
the value in the file, not the value of a reduced band.

On .ac files ngspice stores the complex node voltage, and vdb() is a
display function rather than something the simulator can be asked to
save.  So each .ac signal expands in the tree into its projections --
db, phase, phase unwrapped, mag, real, imag -- all exact, all checked
against ngspice's own db/ph/cph/mag/real/imag to the last digit.  In
wave-plot they are written as -s 'db(v(out))', -s 'cph(v(out))' and so
on.

wave-plot is the same renderer without a window, for pictures out of a
regression run or over an ssh session with no X display.

Build notes: this is a Rust cargo workspace with no crates.io
dependencies at all -- every crate is a path dependency inside the
workspace -- so the build does not touch the network and needs no
vendored-crate tarball.  The X11 client is written against the wire
protocol, so the binaries link libc and nothing else: no libX11, no
toolkit.  The rust in Slackware 15.0 (1.58) is new enough for edition
2021, so nothing outside a stock install is needed.

Not installed: wave-bench, the upstream benchmark and correctness
harness.  Its "gen" mode writes multi-gigabyte test files, which does
not belong in /usr/bin; build it from the source tree with "cargo build
--release" if you want to run the suite.

ngspice-wave is a viewer only -- it never runs a simulation and does not
conflict with, or depend on, any ngspice package.  It is the companion
to ngspice-jit, but reads raw files from stock ngspice just as well.

Documentation installed under /usr/doc/ngspice-wave-VERSION:
  USAGE.md   - how to use both programs
  README.md  - upstream design notes and the measurements behind them
  keys.txt   - key and mouse reference, generated by the binary itself

Homepage: https://codeberg.org/alto555/ngspice_wave
