Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.postscript > #2473 > unrolled thread

Do you ever use the obscure PostScript command '...'?

Started byjdaw1 <jdawiseman@gmail.com>
First post2016-03-27 12:04 -0700
Last post2016-12-20 17:01 +0000
Articles 20 on this page of 23 — 7 participants

Back to article view | Back to comp.lang.postscript


Contents

  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 →


#2473 — Do you ever use the obscure PostScript command '...'?

Fromjdaw1 <jdawiseman@gmail.com>
Date2016-03-27 12:04 -0700
SubjectDo 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]


#2474

FromMarkus Triska <triska@metalevel.at>
Date2016-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]


#2599

FromLawrence D’Oliveiro <lawrencedo99@gmail.com>
Date2016-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]


#2600

FromLawrence D’Oliveiro <lawrencedo99@gmail.com>
Date2016-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]


#2475

Fromluser- -droog <mijoryx@yahoo.com>
Date2016-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]


#2476

Fromjdaw1 <jdawiseman@gmail.com>
Date2016-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]


#2477

FromMarkus Triska <triska@metalevel.at>
Date2016-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]


#2479

Fromluser- -droog <mijoryx@yahoo.com>
Date2016-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]


#2480

FromMartin Leese <please@see.Web.for.e-mail.INVALID>
Date2016-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]


#2482

Fromjdaw1 <jdawiseman@gmail.com>
Date2016-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]


#2484

Fromluser- -droog <mijoryx@yahoo.com>
Date2016-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]


#2512

Fromjdaw1 <jdawiseman@gmail.com>
Date2016-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]


#2513

Fromjdaw1 <jdawiseman@gmail.com>
Date2016-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]


#2514

Fromluser- -droog <mijoryx@yahoo.com>
Date2016-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]


#2515

Fromluser- -droog <mijoryx@yahoo.com>
Date2016-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]


#2518

Fromjdaw1 <jdawiseman@gmail.com>
Date2016-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]


#2519

Fromluser- -droog <mijoryx@yahoo.com>
Date2016-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]


#2522

Fromjdaw1 <jdawiseman@gmail.com>
Date2016-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]


#2959

Fromjdaw1 <jdawiseman@gmail.com>
Date2016-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]


#2960

Fromjdaw1 <jdawiseman@gmail.com>
Date2016-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