I am the new maintainer of the venerable-yet-still-modestly-popular batch renaming utility, mmv (Debian popcon has 1.5k installs). I was astonished to find that other than a couple of bug fixes and a handful of portability patches by the Debian maintainers over the years, the code had remained pretty much untouched since 1990—quite an achievement by its original author, Vladimir Lanin, and his testers and helpers.
I picked up mmv because, having used it for years myself, I noticed that it deliberately refused to rename directories. There seemed to be no technical reason it could not do this, so I lifted the restriction.
I then took the opportunity to unifdef the code, ANSIfy it, add a modern command-line parser with gengetopt, use autotools and gnulib to make it more portable (including to Windows for the first time—the original version ran on DOS!), and remove custom code (including a memory allocator!) that is unnecessary on modern systems.
I also removed the fragile support for interactive renaming, which didn't cope with various odd filenames; this functionality is already well-served by renameutils, and a more recent program also called mmv.
The result is 60% the length of the original, most of the savings being from removing the DOS port. With a bit of luck, good for another 30 years!
There's a lot going on here: it's fun stuff all the way from the back-to-the-past TUI to the extraordinary game of binary format Tetris that is Actually Portable Executable. If the future had to look like the past, I wouldn't mind so awfully much if it resembled it thusly.
I picked up mmv because, having used it for years myself, I noticed that it deliberately refused to rename directories. There seemed to be no technical reason it could not do this, so I lifted the restriction.
I then took the opportunity to unifdef the code, ANSIfy it, add a modern command-line parser with gengetopt, use autotools and gnulib to make it more portable (including to Windows for the first time—the original version ran on DOS!), and remove custom code (including a memory allocator!) that is unnecessary on modern systems.
I also removed the fragile support for interactive renaming, which didn't cope with various odd filenames; this functionality is already well-served by renameutils, and a more recent program also called mmv.
The result is 60% the length of the original, most of the savings being from removing the DOS port. With a bit of luck, good for another 30 years!