Did you or Olaf speak to Detlef Würkner (tetisoft)?
I only mention this because we went through most of these issues concerning printer during AmigaOS4.x development, and he surely did a lot of work on this.
It is more complicated like this. We had the original 3.0 (v39) printer.device, but this was not an option because it did not support RTG prining. Then I looked into the Os 4.0 version, but this was neither an option because it had so many Os 4-isms that it would have been a lot of work to even make it working back on the legacy system. Then, we decided for an interim release, one of the drilled-up versions before it became an Os 4 version. That did compile, but...
Up to then, I believed that graphics was the worst part of the Os. I learned I was wrong. It is really hard to say, but there were probably more changes than there was code to begin with, and the printer.device we have now is certainly in a much better shape than the Os 4 version. To name a few:
- Of all the printer.devices I have seen, only the v39 version and now the v45 version handles double-buffering correctly.
- Aborting a printer.device request was broken in one way or another in all versions I revisited. Traditionally, the printer.devices handled "paper out" and "printer not connected" just the wrong way round, and this was just one problem. Another was that not all requests were terminated (v39) or some requests were terminated but such that the abortion was in the middle of a ESC sequence such that you had to turn the printer off and on again to be able to continue printing.
- All the Os 3.9 printer drivers, but none of the v39 (Os 3.0) printer drivers returned the wrong result code from initialization. Nobody noticed since none of the printer devices actually checked that the driver could actually initialize itself successfully. In case it could not, the code would just crash right away.
- All printer devices from Os 3.9 on did not buffer printer drivers. Whenever you started a new print job, it insisted to reload the driver from disk.
- Scaling was broken, that is, if you printed with some printer drivers, the graphics was simply not scaled at all, or scaled wrongly.
- Floyd-Steinberg dithering overrun the buffer and then left artefacts at the right edge of the printed graphics.
- Rotated HAM printing did not work as the color information was not carried over correctly.
... The list goes on and on like this. The whole printer device, including the Os 4.0 version, is a medium-sized nightmare. We worked on this about six weeks, such that the release note "Printer device updated (oh no, not again!)" became a running gag in the team.
I hope we edged out the majority of bugs by now - at least we haven't found any new ones anymore, but the printer was really the buggiest part of all. In terms of features, we may be behind the 3.9 version (no fancy preview) but in terms of correctness, I believe we are well ahead of v39, and pretty much ahead of the Os 4 version as well. This thing was really beasty.
The bad part is: Once you have done a job like this, it looks like "evident and obvious" that things "simply work". Be aware it wasn't. There is nothing particularly fancy in 3.1.4 that makes it "stand out". So, no eye candy, no advanced features. Just working.