Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.postscript > #2473 > unrolled thread
| Started by | jdaw1 <jdawiseman@gmail.com> |
|---|---|
| First post | 2016-03-27 12:04 -0700 |
| Last post | 2016-12-20 17:01 +0000 |
| Articles | 20 on this page of 23 — 7 participants |
Back to article view | Back to comp.lang.postscript
Do you ever use the obscure PostScript command '...'? jdaw1 <jdawiseman@gmail.com> - 2016-03-27 12:04 -0700
Re: Do you ever use the obscure PostScript command '...'? Markus Triska <triska@metalevel.at> - 2016-03-27 22:57 +0200
Re: Do you ever use the obscure PostScript command '...'? Lawrence D’Oliveiro <lawrencedo99@gmail.com> - 2016-06-01 18:37 -0700
Re: Do you ever use the obscure PostScript command '...'? Lawrence D’Oliveiro <lawrencedo99@gmail.com> - 2016-06-01 18:44 -0700
Re: Do you ever use the obscure PostScript command '...'? luser- -droog <mijoryx@yahoo.com> - 2016-03-27 14:02 -0700
Re: Do you ever use the obscure PostScript command '...'? jdaw1 <jdawiseman@gmail.com> - 2016-03-28 06:32 -0700
Re: Do you ever use the obscure PostScript command '...'? Markus Triska <triska@metalevel.at> - 2016-03-28 16:53 +0200
Re: Do you ever use the obscure PostScript command '...'? luser- -droog <mijoryx@yahoo.com> - 2016-03-28 13:07 -0700
Re: Do you ever use the obscure PostScript command '...'? Martin Leese <please@see.Web.for.e-mail.INVALID> - 2016-03-28 18:55 -0600
Re: Do you ever use the obscure PostScript command '...'? jdaw1 <jdawiseman@gmail.com> - 2016-04-02 16:22 -0700
Re: Do you ever use the obscure PostScript command '...'? luser- -droog <mijoryx@yahoo.com> - 2016-04-02 22:03 -0700
Re: Do you ever use the obscure PostScript command '...'? jdaw1 <jdawiseman@gmail.com> - 2016-04-13 06:09 -0700
Re: Do you ever use the obscure PostScript command '...'? jdaw1 <jdawiseman@gmail.com> - 2016-04-14 10:02 -0700
Re: Do you ever use the obscure PostScript command '...'? luser- -droog <mijoryx@yahoo.com> - 2016-04-14 20:24 -0700
Re: Do you ever use the obscure PostScript command '...'? luser- -droog <mijoryx@yahoo.com> - 2016-04-14 20:28 -0700
Re: Do you ever use the obscure PostScript command '...'? jdaw1 <jdawiseman@gmail.com> - 2016-04-15 15:49 -0700
Re: Do you ever use the obscure PostScript command '...'? luser- -droog <mijoryx@yahoo.com> - 2016-04-15 23:30 -0700
Re: Do you ever use the obscure PostScript command '...'? jdaw1 <jdawiseman@gmail.com> - 2016-04-16 04:49 -0700
Re: Do you ever use the obscure PostScript command '...'? jdaw1 <jdawiseman@gmail.com> - 2016-12-03 16:27 -0800
Re: Do you ever use the obscure PostScript command '...'? jdaw1 <jdawiseman@gmail.com> - 2016-12-03 16:49 -0800
Re: Do you ever use the obscure PostScript command '...'? luser droog <luser.droog@gmail.com> - 2016-12-04 13:42 -0800
Re: Do you ever use the obscure PostScript command '...'? luser droog <luser.droog@gmail.com> - 2016-12-08 20:37 -0800
Re: Do you ever use the obscure PostScript command '...'? Mark Carroll <mtbc@bcs.org> - 2016-12-20 17:01 +0000
Page 1 of 2 [1] 2 Next page →
| From | jdaw1 <jdawiseman@gmail.com> |
|---|---|
| Date | 2016-03-27 12:04 -0700 |
| Subject | Do you ever use the obscure PostScript command '...'? |
| Message-ID | <711068ba-9b2b-4535-9f7f-f0d160ded354@googlegroups.com> |
In a recent thread I asked whether people use save ... restore, and setglobal.
https://groups.google.com/forum/#!topic/comp.lang.postscript/JNnXJkdlTOs
This thread is a generalisation of that thread.
I'll start. Do you ever use the obscure PostScript command 'execstack'?
I don't, and the output from the following code hasn't persuaded me otherwise.
%!PS
/Zero {/One load exec} def
/One {true {Two} if} def
/Two {1 {Three} repeat} def
/Three
{
99 array execstack
{
() = (***) =
dup type =
==
} forall
} def % /Three
Zero
[toc] | [next] | [standalone]
| From | Markus Triska <triska@metalevel.at> |
|---|---|
| Date | 2016-03-27 22:57 +0200 |
| Message-ID | <m2shzbhc4r.fsf@metalevel.at> |
| In reply to | #2473 |
jdaw1 <jdawiseman@gmail.com> writes:
> This thread is a generalisation of that thread.
Very nice idea! Thank you for pursuing and generalising this topic!
> I'll start. Do you ever use the obscure PostScript command
> 'execstack'?
I'm pretty certain that I've never used this.
The most obscure operator I am frequently using is probably: known.
This is because many PostScript programs that I'm using for animations
of search processes start with:
systemdict /.setlanguagelevel known { 2 .setlanguagelevel } if
Why? Because this lets me use "copypage" to obtain an X11 flush in
Ghostscript ;-) And even this is not needed when invoking Ghostscript
interactively, because an implicit flushpage is used on every newline in
any case. It's just something that was shown to me in the first
PostScript snippets I have seen (used for portable animations), and I
started many of the programs I have written since then with this line,
before I found out more about Ghostscript.
In fairness though, the documentation of Ghostscript was wrong for many
versions, and *incorrectly* stated that the implicit flushpage is
disabled when -dNOPROMPT is used, so I thought that either copypage or
an explicit flushpage were necessary to reliably obtain a redisplay.
These days, I simply use -dNOPROMPT and often no longer use the above
when piping generated instructions to Ghostscript for real-time display.
All the best!
Markus
[toc] | [prev] | [next] | [standalone]
| From | Lawrence D’Oliveiro <lawrencedo99@gmail.com> |
|---|---|
| Date | 2016-06-01 18:37 -0700 |
| Message-ID | <7a867aa1-5745-4dd0-83f0-6ba42eb19f60@googlegroups.com> |
| In reply to | #2474 |
On Monday, March 28, 2016 at 9:58:03 AM UTC+13, Markus Triska wrote: > These days, I simply use -dNOPROMPT ... Why have I never come across that before? Thank you for mentioning that! Simpler than -dBATCH + dNOPAUSE...
[toc] | [prev] | [next] | [standalone]
| From | Lawrence D’Oliveiro <lawrencedo99@gmail.com> |
|---|---|
| Date | 2016-06-01 18:44 -0700 |
| Message-ID | <5837fb9b-5b71-477e-8dbe-f7f478bfb095@googlegroups.com> |
| In reply to | #2599 |
On Thursday, June 2, 2016 at 1:37:59 PM UTC+12, I wrote: > On Monday, March 28, 2016 at 9:58:03 AM UTC+13, Markus Triska wrote: > > These days, I simply use -dNOPROMPT ... > > Why have I never come across that before? > > Thank you for mentioning that! Simpler than -dBATCH + dNOPAUSE... Hmmm ... I still had to put back -dBATCH to get this <https://github.com/ldo/ipy_magics/blob/master/ps_magic.py> to work ...
[toc] | [prev] | [next] | [standalone]
| From | luser- -droog <mijoryx@yahoo.com> |
|---|---|
| Date | 2016-03-27 14:02 -0700 |
| Message-ID | <65eddf10-6b18-4964-97c7-7104da50a46c@googlegroups.com> |
| In reply to | #2473 |
On Sunday, March 27, 2016 at 2:04:55 PM UTC-5, jdaw1 wrote: > In a recent thread I asked whether people use save ... restore, and setglobal. > https://groups.google.com/forum/#!topic/comp.lang.postscript/JNnXJkdlTOs > > This thread is a generalisation of that thread. > > I'll start. Do you ever use the obscure PostScript command 'execstack'? > I came up with a use for `countexecstack` in this thread: https://groups.google.com/d/msg/comp.lang.postscript/a26Hlai9ZXo/8tegCsRdt1IJz For `execstack` itself, it's very useful when debugging, but not necessarily for normal programming.
[toc] | [prev] | [next] | [standalone]
| From | jdaw1 <jdawiseman@gmail.com> |
|---|---|
| Date | 2016-03-28 06:32 -0700 |
| Message-ID | <b3aba31e-b798-402f-ab27-492e6b6abaa8@googlegroups.com> |
| In reply to | #2475 |
Markus Triska wrote: > Very nice idea! Thank you for pursuing and generalising this topic! Thank you. > The most obscure operator I am frequently using is probably: known. If writing a complicated sub-routine, with many possible parameters, it is natural to pass all the parameters in the form of a dictionary, which is then inspected with 'known'. So for me this isn't obscure. Or it is obscure, but only if not doing this. > Why? Because this lets me use "copypage" to obtain an X11 flush in > Ghostscript ;-) And even this is not needed when invoking Ghostscript Lord! That is obscure. luser- -droog wrote: > I came up with a use for `countexecstack` in this thread: > https://groups.google.com/d/msg/comp.lang.postscript/a26Hlai9ZXo/8tegCsRdt1IJz > > For `execstack` itself, it's very useful when debugging, > but not necessarily for normal programming. Can you give an example of how you use it? And suggest another obscurity for us to learn (or, as fun, to show off prior usage).
[toc] | [prev] | [next] | [standalone]
| From | Markus Triska <triska@metalevel.at> |
|---|---|
| Date | 2016-03-28 16:53 +0200 |
| Message-ID | <m2oa9yhcx3.fsf@metalevel.at> |
| In reply to | #2476 |
jdaw1 <jdawiseman@gmail.com> writes: > If writing a complicated sub-routine, with many possible parameters, > it is natural to pass all the parameters in the form of a dictionary, > which is then inspected with 'known'. So for me this isn't obscure. Or > it is obscure, but only if not doing this. So far, I've never done this. known in itself is maybe not very obscure, but among the operators I use regularly, it is probably the one that is the most obscure (least used in other programs), and I am using it only in the context I have shown, without any other need for it so far. In your use case, you are probably using known to use a default value if the parameter does not appear in the dictionary? I always try to arrange my procedures so that their parameters flow naturally and implicitly on the operand stack, so I have never used your method, but I can see how it can be useful when passing (or not) many possible parameters. All the best, Markus
[toc] | [prev] | [next] | [standalone]
| From | luser- -droog <mijoryx@yahoo.com> |
|---|---|
| Date | 2016-03-28 13:07 -0700 |
| Message-ID | <49d20728-e2ef-4f8f-b0f0-436e8c143977@googlegroups.com> |
| In reply to | #2476 |
> luser- -droog wrote:
> > I came up with a use for `countexecstack` in this thread:
> > https://groups.google.com/d/msg/comp.lang.postscript/a26Hlai9ZXo/8tegCsRdt1IJz
> >
> > For `execstack` itself, it's very useful when debugging,
> > but not necessarily for normal programming.
>
> Can you give an example of how you use it? And suggest another obscurity for us to learn (or, as fun, to show off prior usage).
Typical error reports print the stack dumps with =, so
the execstack dump is mostly useless. By using
countexecstack array execstack ==
You can actually get a readable, usable backtrace.
To get this information when an error happens, but without
rewriting the whole error-handler report function,
you can add this to the errordict for the error that is
being triggered.
Right now, I'm trying to debug an error in xpost when
running this program:
https://gist.github.com/luser-dr00g/b5b0532fb83b5a722991
Ghostscript runs it just fine, so it's almost certainly
a problem in xpost. So I added this at the top of the
program:
errordict/stackunderflow {
countexecstack array execstack ==
/stackunderflow signalerror
} put
Then when the error happens, I can actually read the
backtrace.
(Incidentally, I also had to fix a bug where xpost wasn't
using errordict at all and was just calling
`/stackunderflow signalerror` on error.)
Some operators I've never used are:
setpacking
all the userpath ops: upath, ustroke, etc.
pattern ops: makepattern, setpattern
[toc] | [prev] | [next] | [standalone]
| From | Martin Leese <please@see.Web.for.e-mail.INVALID> |
|---|---|
| Date | 2016-03-28 18:55 -0600 |
| Message-ID | <ndcjju$fp$1@dont-email.me> |
| In reply to | #2473 |
jdaw1 wrote: > In a recent thread I asked whether people use save ... restore, and setglobal. > https://groups.google.com/forum/#!topic/comp.lang.postscript/JNnXJkdlTOs > > This thread is a generalisation of that thread. The most obscure PostScript command I ever used was "setpage". This command was never part of PostScript language, but was recognized by the Monotype Prism phototypesetter. It was used to set the typesetter to print pages either Transverse or otherwise (Normal). As the command was non-standard, I bracketed it with "statusdict /setpage known" so my code would still work on other printers. This worked perfectly until I encountered another PostScript interpreter that *also* recognized "setprint", but for a different purpose and with an incompatible syntax. -- Regards, Martin Leese E-mail: please@see.Web.for.e-mail.INVALID Web: http://members.tripod.com/martin_leese/
[toc] | [prev] | [next] | [standalone]
| From | jdaw1 <jdawiseman@gmail.com> |
|---|---|
| Date | 2016-04-02 16:22 -0700 |
| Message-ID | <54be36a0-649a-46c0-8fb0-ad00c4a0d192@googlegroups.com> |
| In reply to | #2473 |
Do you ever use the obscure PostScript command 'xcheck'?
Many of my routines, in the PostScript style, allow, even encourage, code injection. Not fashionable in other contexts, but part of the power of PostScript.
Indeed, many accept that which I call a compound string, that being any of: a glyph name; a string; code returning a compound string; code moving the currentpoint by an amount proportional to the current font size; code changing the font to a font with a size proportional to the current font size; an array of compound strings.
Examples:
[(JDA) {-0.06 CurrentFontSize mul 0 rmoveto} (W)]
[(C) /aacute (lem)]
For the handling of these, xcheck helps.
[toc] | [prev] | [next] | [standalone]
| From | luser- -droog <mijoryx@yahoo.com> |
|---|---|
| Date | 2016-04-02 22:03 -0700 |
| Message-ID | <b2bbedbf-88b1-4199-87de-8f9a2d2e77c9@googlegroups.com> |
| In reply to | #2482 |
On Saturday, April 2, 2016 at 6:22:15 PM UTC-5, jdaw1 wrote: > Do you ever use the obscure PostScript command 'xcheck'? > I use `xcheck` in my debugger. https://github.com/luser-dr00g/debug.ps/blob/master/db5.ps But it looks like I don't use it in ibis. https://github.com/luser-dr00g/ibis.ps/blob/master/ibis.ps For kerning I borrowed someone's write-up of using kshow with custom kerning tables.
[toc] | [prev] | [next] | [standalone]
| From | jdaw1 <jdawiseman@gmail.com> |
|---|---|
| Date | 2016-04-13 06:09 -0700 |
| Message-ID | <ee667d92-b3f2-4aa9-b980-49154538620e@googlegroups.com> |
| In reply to | #2473 |
Do you ever use the obscure PostScript command 'setmatrix'? PLRM3: > Except in device setup procedures, the use of this operator should be very rare. PostScript programs should ordinarily modify the CTM with the translate, scale, rotate, and concat operators rather than replace it. Disagree: it is very natural to do the likes of: /MatrixOriginal matrix currentmatrix def /MatrixNew ... ... MatrixOriginal matrix copy translate ... exch rotate ... ... 3 -1 roll scale def MatrixNew setmatrix ... ... moveto ... ... lineto ... ... ... ... ... ... curveto etc MatrixOriginal setmatrix ... setlinewidth stroke Sometimes there can be multiple changes between three transformation matrices, setting clip regions in one space, making a path in another, and painting in a third, and then doing it all again. This is much easier with setmatrix.
[toc] | [prev] | [next] | [standalone]
| From | jdaw1 <jdawiseman@gmail.com> |
|---|---|
| Date | 2016-04-14 10:02 -0700 |
| Message-ID | <d5f4e6d9-d74b-46b2-b155-d2fe2ee18f20@googlegroups.com> |
| In reply to | #2512 |
My previous post wasn't quite honest. What I actually do is /MatrixOriginal matrix currentmatrix def ... ... translate ... rotate ... ... scale /MatrixNew matrix currentmatrix def Without testing, I thought these would be equivalent. But they aren't! Is this a bug? Code: %!PS (\nMatrixInit) = /MatrixInit matrix currentmatrix def MatrixInit == (\ntranslate) = MatrixInit setmatrix 100 100 translate matrix currentmatrix == 100 100 MatrixInit matrix copy translate == (\nscale) = MatrixInit setmatrix 3 3 scale matrix currentmatrix == 3 3 MatrixInit matrix copy scale == (\nrotate) = MatrixInit setmatrix 45 rotate matrix currentmatrix == 45 MatrixInit matrix copy rotate == Output: MatrixInit [33.3333 0.0 0.0 -33.3333 -10200.0 13200.5] translate [33.3333 0.0 0.0 -33.3333 -6866.67 9867.17] [1.0 0.0 0.0 1.0 100.0 100.0] scale [100.0 0.0 0.0 -100.0 -10200.0 13200.5] [3.0 0.0 0.0 3.0 0.0 0.0] rotate [23.5702 -23.5702 -23.5702 -23.5702 -10200.0 13200.5] [0.707107 0.707107 -0.707107 0.707107 0.0 0.0]
[toc] | [prev] | [next] | [standalone]
| From | luser- -droog <mijoryx@yahoo.com> |
|---|---|
| Date | 2016-04-14 20:24 -0700 |
| Message-ID | <055e0a80-8686-4b14-bfa2-de88a8542cf3@googlegroups.com> |
| In reply to | #2513 |
On Thursday, April 14, 2016 at 12:02:51 PM UTC-5, jdaw1 wrote: > My previous post wasn't quite honest. What I actually do is > > /MatrixOriginal matrix currentmatrix def > ... ... translate ... rotate ... ... scale /MatrixNew matrix currentmatrix def > > Without testing, I thought these would be equivalent. But they aren't! Is this a bug? > Nope. All correct. the `matrix` forms of `scale rotate` and `translate` all just fill-in the matrix with the basic transform defined by the operation. angle matrix rotate rotation-matrix dx dy matrix translate translation-matrix sx sy matrix scale scaling-matrix The contents of the argument matrix are not considered, it's simply the storage provided to receive the matrix return value. The non-`matrix` forms of `scale rotate` and `translate` in effect do the above to a temporary matrix and then `concat` the result onto the CTM. To get the result of applying a transform to a given matrix, you'll have to use `concatmatrix` MatrixInit 45 matrix rotate matrix concatmatrix > > Code: > > %!PS > > (\nMatrixInit) = > /MatrixInit matrix currentmatrix def > MatrixInit == > > (\ntranslate) = > MatrixInit setmatrix > 100 100 translate matrix currentmatrix == > 100 100 MatrixInit matrix copy translate == > > (\nscale) = > MatrixInit setmatrix > 3 3 scale matrix currentmatrix == > 3 3 MatrixInit matrix copy scale == > > (\nrotate) = > MatrixInit setmatrix > 45 rotate matrix currentmatrix == > 45 MatrixInit matrix copy rotate == > > > > > Output: > > MatrixInit > [33.3333 0.0 0.0 -33.3333 -10200.0 13200.5] > > translate > [33.3333 0.0 0.0 -33.3333 -6866.67 9867.17] > [1.0 0.0 0.0 1.0 100.0 100.0] > > scale > [100.0 0.0 0.0 -100.0 -10200.0 13200.5] > [3.0 0.0 0.0 3.0 0.0 0.0] > > rotate > [23.5702 -23.5702 -23.5702 -23.5702 -10200.0 13200.5] > [0.707107 0.707107 -0.707107 0.707107 0.0 0.0]
[toc] | [prev] | [next] | [standalone]
| From | luser- -droog <mijoryx@yahoo.com> |
|---|---|
| Date | 2016-04-14 20:28 -0700 |
| Message-ID | <f02d8838-38cb-4c86-968a-9755de4cc09b@googlegroups.com> |
| In reply to | #2514 |
On Thursday, April 14, 2016 at 10:24:58 PM UTC-5, luser- -droog wrote: > To get the result of applying a transform to a given > matrix, you'll have to use `concatmatrix` > > MatrixInit 45 matrix rotate matrix concatmatrix > Depending on the Quality Of Implementation, you ought to be able to simplify the above and eliminate one of the temporaries. MatrixInit 45 matrix rotate dup concatmatrix 45 matrix rotate dup dup concatmatrix %sb = 90 matrix rotate
[toc] | [prev] | [next] | [standalone]
| From | jdaw1 <jdawiseman@gmail.com> |
|---|---|
| Date | 2016-04-15 15:49 -0700 |
| Message-ID | <e80d3c33-21f4-4da6-bb10-4d3ba5553dd4@googlegroups.com> |
| In reply to | #2514 |
On Friday, 15 April 2016 04:24:58 UTC+1, luser- -droog wrote:
>
> The contents of the argument matrix are not considered,
> it's simply the storage provided to receive the matrix
> return value.
Ahh, my misunderstanding. Thank you for the useful correction. My code is now using the matrix forms of translate, scale, and rotate (are these 'obscure'?).
Passed to concatmatrix are three matrix parameters. Can the third be the same as the first or second? PLRM3 doesn't mention this possibility, and it could be that some implementations are confused by that ('could be' is dangerous enough for me). So I'm now doing the likes of
/MatrixName
... ... matrix translate
... dup matrix scale
Boolean {... matrix rotate} if
... ... matrix translate
MatrixInitial
{1 index type /arraytype eq {matrix concatmatrix} {exit} ifelse} loop def
Improvements welcomed.
This is also my first use of the obscure PostScript command 'concatmatrix'.
[toc] | [prev] | [next] | [standalone]
| From | luser- -droog <mijoryx@yahoo.com> |
|---|---|
| Date | 2016-04-15 23:30 -0700 |
| Message-ID | <226d9cad-04b4-474c-8201-47a99cc50ccb@googlegroups.com> |
| In reply to | #2518 |
On Friday, April 15, 2016 at 5:49:58 PM UTC-5, jdaw1 wrote: > Ahh, my misunderstanding. Thank you for the useful correction. My code is now using the matrix forms of translate, scale, and rotate (are these 'obscure'?). > I think they are, I went through several version of xpost before I even noticed them. In keeping with the spirit of this thread, a few more obscure ones are `dtransform` and `idtransform`. They work analogously to `transform` and `itransform`, respectively; which convert coordinates to/from device-/user- space. But the 'd' is for distance, that is the 'd' versions apply just the *linear transform* part of the matrix and ignore the translation vector. This is useful if your working with a coordinate- pair which represents a *vector* (to which you might apply `rmoveto` or `rlineto`) as distinct from a *point* (to which you might apply `moveto` or `lineto`). The matrix forms of all these functions allow you to pass points and vectors through arbitrary transformation matrices, in either direction. Certain implementations (like early xpost/cairo) may have problems with i(d?)transform if the matrix is not invertible (like eg. `0 matrix scale`).
[toc] | [prev] | [next] | [standalone]
| From | jdaw1 <jdawiseman@gmail.com> |
|---|---|
| Date | 2016-04-16 04:49 -0700 |
| Message-ID | <adb0f739-18f4-4b5a-b533-6413648842ac@googlegroups.com> |
| In reply to | #2519 |
> In keeping with the spirit of this thread, a few more > obscure ones are `dtransform` and `idtransform`. Splendidly obscure. My code sometimes uses 'cleartomark' or even 'counttomark', but never 'clear'. Have you ever used 'clear'? Separately, I've used 'readonly', but not 'executeonly', nor 'noaccess'.
[toc] | [prev] | [next] | [standalone]
| From | jdaw1 <jdawiseman@gmail.com> |
|---|---|
| Date | 2016-12-03 16:27 -0800 |
| Message-ID | <1d356247-6e20-4d3b-bddb-646338032627@googlegroups.com> |
| In reply to | #2473 |
Do you ever use the obscure PostScript command ‘packedarray’? Do you ever use the obscure PostScript command ‘executeonly’? Do you ever use the obscure PostScript command ‘noaccess’?
[toc] | [prev] | [next] | [standalone]
| From | jdaw1 <jdawiseman@gmail.com> |
|---|---|
| Date | 2016-12-03 16:49 -0800 |
| Message-ID | <c5d6e2a7-221e-4dad-a060-39fc33577a92@googlegroups.com> |
| In reply to | #2959 |
Do you ever use the obscure PostScript command ‘cvlit’, except after ‘type’?
[toc] | [prev] | [next] | [standalone]
Page 1 of 2 [1] 2 Next page →
Back to top | Article view | comp.lang.postscript
csiph-web