I used to call it "Painmaker", because it was "Riddled With Features".
The NeWS Toolkit version of Framemaker had a spelling checker that was uncannily apt in its cheeky suggestion for correcting the spelling of "xmodmap".
I used The NeWS Toolit version of FrameMaker 2.1.1 on OpenWindows (whose user interface was developed by the legendary NeWS hacker Stan Switzer) to write the manuals for the version of SimCity that ran on NeWS (whose user interface was written in and rendered with PostScript), and HyperLook (which was like a networked PostScript based HyperCard for NeWS). Both manuals credit Framemaker on the second page. I was using the PostScript version of FrameMaker to write more PostScript code to document even more PostScript code!
Speaking of writing PostScript with PostScript, Stan also wrote an elegant PostScript Quine, which is even shorter than the Lisp Quine (PostScript is like a cross between Lisp and Forth, but homomorphic and more like Lisp actually -- but PostScript is even homomorphicier than Lisp because it has an even shorter Quine!):
Date: Thu, 14 Sep 89 20:29:28 -0400
To: NeWS-makers@brillig.umd.edu
Subject: A PostScript Quine
From: spectral!sjs@bellcore.com (Stan Switzer)
"'Yields falsehood when preceded by itself in quotes" yields
falsehood when preceded by itself in quotes." -- W. V. O. Quine
(paraphrase)
A "quine" is a program which when evaluated yields its own
representation. A quine can be formally described as a fixed point of
a language's denotation function. Trivial evaluations (e.g.:
literals) are excluded and the program cannot require any input data
(e.g.: "cat cat.c").
In my experience, the merit of a language is inversely related to the
length of its shortest quine. (Though I _am_ prejudiced toward
reflective semantics.)
For the heck of it, let's say a PostScript quine is a procedure
"{...}" which when followed by "n { exec } repeat" yields the same (or
equivalent) value for any non-negative integer value of "n"
(including 0).
The shortest I have found for PostScript is
{{[ exch /dup load /exec load ] cvx} dup exec}
Compare to Lisp:
((lambda(f)(list f (list 'quote f))) '(lambda(f)(list f (list 'quote f))))
or (ASCII) C:
char*f="char*f=%c%s%c;main(){printf(f,042,f,042,012);}%c";main(){printf(f,042,f,042,012);}
Not that it'll change your life or anything...
Enjoy,
Stan Switzer sjs@bellcore.com
The only problem I have with Stan's theory about the merit of a language being inversely related to the length of its shortest Quine is the existence of "10 LIST" in BASIC, which is a decidedly un-meritorious language. But to its credit, DECSYSTEM 10 BASIC even has a "LISTREVERSE" command, which might be useful for implementing a Eniuq. For what it's worth, "10 LIST" and "10 LISTREVERSE" are also Line-by-Line Palendromic Quines, since single line programs are the same listed forwards and backwards.
>LISTREVERSE and LISTNHREVERSE print the contents of the user's memory area in order of descending line numbers. LISTREVERSE precedes the output with a heading, LISTNHREVERSE eliminates the heading.
Stan now works at Adobe (of course, how could they NOT hire him after he wrote that beautiful PostScript Quine! ;) ):
SimCity, Cellular Automata, and Happy Tool for HyperLook (nee HyperNeWS (nee GoodNeWS)):
HyperLook was like HyperCard for NeWS, with PostScript graphics and scripting plus networking. Here are three unique and wacky examples that plug together to show what HyperNeWS was all about, and where we could go in the future!
I like Stan Switzer's definition that "[a] quine can be formally described as a fixed point of a language's denotation function", but it's insufficient. It has to be some interesting fixed point.
Because, not only is this such a fixed point of Lisp's denotation function:
((lambda(f)(list f (list 'quote f))) '(lambda(f)(list f (list 'quote f))))
because it calculates its own source code when evaluated at the REPL, but so is this:
0
But 0 isn't a satisfactory quine. A quine should be some sort of surprising fixed point.
The requirement that a program must produce its own image in a character stream when run in batch mode, in a language in which programs don't have access to their source code in any shape, and in which expressions do not print their values, usually is enough of a restriction that eliminates the trivial, uninteresting quines.
The NeWS Toolkit version of Framemaker had a spelling checker that was uncannily apt in its cheeky suggestion for correcting the spelling of "xmodmap".
https://www.donhopkins.com/home/catalog/images/smegmas.gif
I used The NeWS Toolit version of FrameMaker 2.1.1 on OpenWindows (whose user interface was developed by the legendary NeWS hacker Stan Switzer) to write the manuals for the version of SimCity that ran on NeWS (whose user interface was written in and rendered with PostScript), and HyperLook (which was like a networked PostScript based HyperCard for NeWS). Both manuals credit Framemaker on the second page. I was using the PostScript version of FrameMaker to write more PostScript code to document even more PostScript code!
https://donhopkins.com/home/HyperLook-SimCity-Manual.pdf
https://donhopkins.com/home/HyperLook-Manual-Part-1-of-6.pdf
https://donhopkins.com/home/HyperLook-Manual-Part-2-of-6.pdf
https://donhopkins.com/home/HyperLook-Manual-Part-3-of-6.pdf
https://donhopkins.com/home/HyperLook-Manual-Part-4-of-6.pdf
https://donhopkins.com/home/HyperLook-Manual-Part-5-of-6.pdf
https://donhopkins.com/home/HyperLook-Manual-Part-6-of-6.pdf
Speaking of writing PostScript with PostScript, Stan also wrote an elegant PostScript Quine, which is even shorter than the Lisp Quine (PostScript is like a cross between Lisp and Forth, but homomorphic and more like Lisp actually -- but PostScript is even homomorphicier than Lisp because it has an even shorter Quine!):
https://www.donhopkins.com/home/archive/NeWS/news-tape/fun/q...
The only problem I have with Stan's theory about the merit of a language being inversely related to the length of its shortest Quine is the existence of "10 LIST" in BASIC, which is a decidedly un-meritorious language. But to its credit, DECSYSTEM 10 BASIC even has a "LISTREVERSE" command, which might be useful for implementing a Eniuq. For what it's worth, "10 LIST" and "10 LISTREVERSE" are also Line-by-Line Palendromic Quines, since single line programs are the same listed forwards and backwards.https://news.ycombinator.com/item?id=20007960
>LISTREVERSE and LISTNHREVERSE print the contents of the user's memory area in order of descending line numbers. LISTREVERSE precedes the output with a heading, LISTNHREVERSE eliminates the heading.
Stan now works at Adobe (of course, how could they NOT hire him after he wrote that beautiful PostScript Quine! ;) ):
https://www.linkedin.com/in/sjswitzer/
Homomorphism:
https://en.wikipedia.org/wiki/Homomorphism
Quine:
https://en.wikipedia.org/wiki/Quine_(computing)
HyperLook SimCity Demo Transcript: This is a transcript of a video taped demonstration of SimCity on HyperLook in NeWS.
https://donhopkins.medium.com/hyperlook-simcity-demo-transcr...
SimCity, Cellular Automata, and Happy Tool for HyperLook (nee HyperNeWS (nee GoodNeWS)): HyperLook was like HyperCard for NeWS, with PostScript graphics and scripting plus networking. Here are three unique and wacky examples that plug together to show what HyperNeWS was all about, and where we could go in the future!
https://donhopkins.medium.com/hyperlook-nee-hypernews-nee-go...