The detailed list of operators implemented and otherwise is now in the source COMPLIANCE file. This list will now be more conceptual (and chatty).
The broad strokes:
Level 1 operators
Level 2 operators
Display Postscript
NeWS
Typical output devices
Optimizing.
The dictionary module needs to be outfitted with statistics machinery in order to tune the hashing function. Right now it works just because it's logically correct. And may be faster or slower or anywhere in between. The performance characteristics are completely unknowable without better tools integrated into the source. And this is beyond my current knowledge.
As detailed in the memory thread, there are other planned algorithmic optimizations that are delaying until the program achieves better coverage and correctness.
Coverage and Correctness.
Most of level 1 is there. Some missing pieces are: even-odd stuff, complex interconnecting paths (Weiler-Atherton? Vatti? Weiler-Atherton? Vatti? Is there anything else? I bought a CG book by Max Agoston, but I got the math one by mistake. I've got a pdf of his write-up of Vatti, but his book looks like the major source for more like it. I've got the right one on-order now.)
I should add more tests to
test.ps so it fails on any missing level 1 operators. That one started with just the examples from the manual, where the exact output is described. But there's no reason to restrict the testing to those published examples.
Some of level 2 is there: growing dicts, growing stacks, global/local memory. whew, that really was a lot to get working, I feel. :) But we take a quick nap, and press-on!
Some other missing bits: Ascii85 syntax in the scanner.
For Display Postscript it needs multiple executing processes. And binary syntax in the scanner. Update: multiple contexts is implemented, following the Display Postscript syntax (it appears easier to implement the NeWS version on top of DPS rather than the other way around).
At some level in here, it will run as a "server" and create new internal processes as connections are made to its listening processes.
For NeWS, it will actually have a new design for the command-line part, connecting to the "server" from basically a telnet clone.
A few little tweaks I've noticed: There are 3 object flags that can be combined into 1, gaining 2 more extra bits to extend the ent field in a composite object. This gives 21 bits for the table index, over 2 million addressable allocations. That should put that issue to bed for good while.
Also the graphics base classes erroneously use arrays of integers to hold the raster buffer. This means the buffer contents are subject to save/restore, which does not conform to the standard. So the pgmimage and ppmimage implementations need to be rewritten using strings for the raster data.