This is great, Kurt. The source in src/runtime/hrs/src for rsort.c is their version of my external sort, modified to be a subroutine. There's some lessons to be learned about "software hygiene". I was cavalier about freeing what I allocated dynamically. As a result, their version leaks like a sieve if the subroutine is called repeatedly. Apropos of which, they came to me having noted that only the first call was acting as expected. There's a wonderful irony (I'm big on irony). I had replaced my do-it-yourself argument processing with getopt. The code has the following comment
** Use getopt() for portability.
A few lines later, you see
optind = 1; /* reset after use in Hancock program *
while ((c = getopt(argc, argv, "cCiIjmrsSuvb:f:D:o:p:T:x:y:z:")) != EOF) {
optind??? Seems getopt has an undocumented global flag to prevent reprocessing the arguments. How portable:-)
Anyway, it should be possible to turn rsort.c back into standalone code. I'd be the obvious person to do it, but that would probably be a violation of some agreement with AT&T. However, if somebody else wants to take on the task (it would make a great summer intern project), I'd be happy to share ideas I have had since retiring that would improve the code.
fc.c in the same directory is a library-ized version of a fixcut command I wrote as a fixed-length counterpart to the cut command, for fixed-length inputs (like native floats and integers, which can be tweaked to sort lexicographically). Unlike rsort, I practiced good hygiene and kept track of all allocated space so it could be freed. Too bad they didn't include the man pages for rsort and fixcut. They'd make it easier to understand them. Jon Bentley observed that "comments are love letters to your future self", and I feel a lot of love from the heavily commented rsort code.
This probably should move to coff, it's not really about UNIX history (although rsort has vestigial traces of ancient days, like the code to write checkpoint files after each output temp is closed... sorting a million bytes once took hours, with slow processors and disks. It was painful to have to start from scratch if an overnight sort got interrupted. Now sorting a billion bytes is pretty quick, and the checkpoint stuff never gets used. It's one of the things that could profitably disappear.)