I was offended by the -u flag in v7 cat, which was a necessary but unfortunate consequence of preserving the original's semantics while converting it to use the new standard I/O library. Dennis felt it was important as a proof of the value of stdio; to me it was an indication that stdio couldn't do everything. I rewrote cat to use just read and write, as nature intended. I don't recall if my version is in any of v8 v9 v10 but it, or something very like it, is in Plan 9: % cat cat.c #include #include void cat(int f, char *s) { char buf[8192]; long n; while((n=read(f, buf, (long)sizeof buf))>0) if(write(1, buf, n)!=n) sysfatal("write error copying %s: %r", s); if(n < 0) sysfatal("error reading %s: %r", s); } void main(int argc, char *argv[]) { int f, i; argv0 = "cat"; if(argc == 1) cat(0, ""); else for(i=1; i wrote: > On Wed, 14 Nov 2018, Warren Toomey wrote: > > >> Didn't know that cat(1) was still written in assembly on Edition 6... > > > > https://minnie.tuhs.org/cgi-bin/utree.pl?file=V6/usr/source/s1/cat.s > > Thanks; then again, I never had a reason to poke around cat(1) (but I do > remember adding a "-h" flag to pr(1) for a sub-header or something). > > In fact, the only assembler stuff I remember modifying was deep in the > kernel, to take advantage of Unibus timing (on the /40 at least), where > the "obvious" code was sub-optimal; can't remember the details, but it > saved a bus cycle or two. > > Hell, I wish I still had that "CSU Tape"; it was Edition 6 with as much of > Edition 7 (and AUSAM) that I could shoe-horn in, such as XON/XOFF for the > TTY driver. I was known as "Mr Unix 6-1/2" at the time... > > Completely rewrote the 200-UT driver so that it actually worked (IanJ's > driver was a horrible mess) and worked around an egregious bug on the > Kronos side which they said was baked-in so deep that it couldn't be > fixed. > > Rewrote the plotter driver and Versatec LV-11 driver to use the buffer > pool instead of the character queues, so they went like a bat out of hell. > > Etc. > > -- Dave >