dm

Latest Release: 

dm is an ls-like lister for CBM emulator formats (like .d64 and .p00) and old archive containers (like .lnx and [1-4]! zips), and more!

Think of dm as a command line 'cousin' to DirMaster. Formally called cbmls, we decided to rename this tool partly because we were tired of typing 5 characters instead of 2 and partly because we see dm providing several more features in addition to a robust ls style list outout - features that make sense in the command line context. Maybe there will be some overlap, but the primary focus will be including things that make less sense in the gui oriented DirMaster. We picked 'dm' for obvious reasons but it doesn't appear to be a name that was already in wide use on any platform.

The features dm provides are split up into (sub)commands. With the release of v1.1.0 there are two: ls and diff. The default when no command is explicitly selected is 'ls' and in general dm will behave exactly like cbmls did. But you can use 'dm ls' if you want to explicitly invoke the ls/listing functionality. i.e. the following are equivalent:

dm -lc disk.d64
dm ls -lc disk.d64

There are currently two commands available: 'ls' and 'diff'.


'dm ls'

If you know what 'ls' is you'll find comfort with some of the command line options (try 'dm --help')

'dm ls' - Features

  • recursively process file system subdirectories

  • recursively process *within* disk images and file containers

  • support for input/output redirection

  • choice of output: canonical "$" style or columns
  • control over column output/order
  • sensible output for cp437 or Unicode
  • use with our font, C64 Pro Mono, for a genuine PETSCII shell experience

'dm ls' - Screenshots:

dm will present as good an output as possible in a default cmd shell... some PETSCII characters map sensibly and color is an option.

cmd_plain.png
cmd on Windows XP

cmd_color.png
and with colorized output...

It's a little smoother if you switch to a TrueType font. But some TrueType fonts, like the Lucida Console used below, don't have all the applicable characters that we can map to from PETSCII and show filler as seen in the middle...  other TrueType fonts have a fuller set of glyphs like PragmataPro on the right.

cmd_8_color_lucida_cbmls.png
Windows 8.1 with Lucida font

cmd_8_color_lucida_determinism.png
Lucida is missing some glyphs...

cmd_8_color_pragmata_determinism.png
but PragmataPro has them!

Of course the best way for hardcore c64 freaks to look at their directories is made possible with our C64 Pro Mono font:

cmd_7_promono.png
Windows 7 and the majesty of load"$",8

dm works similarly on Linux and macOS:

mate_terminal.png
Mate Terminal on Mint

iterm2.png
iTerm2 on Mac OS X 10.7

'dm ls' - General use:

dm will try to process all 'loose' arguments on the command line as a potential disk/archive image or directory. Order or mixture with command options does not matter. There is also some support for reading disk/archive data from a pipe or redirection. Default behavior is to list directories in the 'canonical' load"$" format. A column-based listing is also available, and you have full control of column selection and ordering. The following shows the 'long listing' (-l or --long) output which is a short cut for outputting every column: blocks, bytes, index, track/sector, load address, name, splat, type and lock (there are no splatted/locked files on this directory):

long_listing.png
output from 'dm -lc happy--style.d64'

Recursion, or directory traversal if you prefer, is possible in two axes: recursion through the os file system and recursion through disk/archive contents. The latter is referred to in the program as a deep listing and when selected dm will show you the contents of archives, subdirectories and partitions, as deep as possible (e.g. an arc inside a lnx inside a zip-4 inside a 1581 subdir).

'dm ls' - Recipes:

List the contents of oldstuff.lbr and disk.d64 using the long column output, with color.

dm oldstuff.lbr -lc disk.d64

Pipe an uncompressed disk image into dm for listing, using the lower/upper character mode instead of the default upper/graphics:

xz -d mule.d64.xz | dm -C lower

List the contents of every recognized disk image and container starting with the current working directory (all files and recursing into all subdirectories):

dm -lR .

Deep list the contents of the .d4m image using color, outputting three columns in the given order - this will include the contents of all partitions and any archiver containers discovered therein:

dm -dc disk.d4m --columns bytes,name,index

Note that the argument for '--columns' must be a comma-separated list, with no spaces! 'dm --help' will show you the possible valid column names.


'dm diff'

'dm diff' will compare two block-based disk images (e.g. a .d81 is block-based, while a .t64 is not) at a byte-by-byte level and report on differences. You can use 'dm diff --help' for a list of options to this command.

'dm diff' - Features

  • brief or detailed (-v) output

  • optional BAM visualization display

  • also reports on differences in error codes, if any

'dm diff' - Recipes:

Show a detailed summary of the differences between a d64 and a g64 (note that the g64 is interpreted as if it were converted to a d64 first!).

dm diff disk.d64 disk.g64 -v

Show the differences between the two disk images using a BAM visualization in addition to a brief summary; also include a legend explaining the BAM symbols:

dm diff disk1.d64 disk2.d64 --bam --legend