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
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.
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.
Of course the best way for hardcore c64 freaks to look at their directories is made possible with our C64 Pro Mono font:
dm works similarly on Linux and macOS:
'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):
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 cbmls 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! 'cbmls --help' will show you the possible valid column names.
'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 lit 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 is 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