Path: utzoo!utgpu!watmath!att!dptg!rutgers!mailrus!wasatch!cs.utexas.edu!uunet!zephyr.ens.tek.com!orca!pogo!richk From: richk@pogo.WV.TEK.COM (Richard G. Knowles) Newsgroups: comp.lang.postscript Subject: Re: newcomer, need help with forall Message-ID: <7725@pogo.WV.TEK.COM> Date: 9 Aug 89 23:08:03 GMT References:Reply-To: richk@pogo.WV.TEK.COM (Richard G. Knowles) Distribution: comp Organization: Tektronix, Inc., Wilsonville, OR. Lines: 44 In article jnp@mjolner.tele.nokia.fi (J|rgen N|rgaard) writes: >Consider the following program: > > /Helvetica findfont 10 scalefont setfont > 100 100 translate > /en { gsave 0 0 moveto 1 10 string cvs show grestore } def > /to { gsave 0 0 moveto 2 10 string cvs show grestore } def > /tre { gsave 0 0 moveto 3 10 string cvs show grestore } def > /fire { gsave 0 0 moveto 4 10 string cvs show grestore } def > >%% method one > [en to tre fire]{ 0 50 translate exec} forall showpage > > 100 100 translate >%% method two > [1 2 3 4]{ 0 50 translate 0 0 moveto 10 string cvs show} forall showpage > >I would expect "method one" and "method two" to be equivalent. But they are >not, but why ? >(method one prints all characters on top of each other, > method two prints all characters one above the other: They are different because method 1 forall recieves an empty array and thus does not ever execute the proc. What is happening, however, is that the en, to, tre, and fire procedures are getting executed instead of being placed into the array. Since those procedures leave nothing on the operand stack the array ends up empty. Arrays are built, not created verbatim. Thus the '[' leaves a mark on the stack, each following token is parsed (and "executed" if executable), and the ']' packs all objects on the stack down to the mark into an array object. Correct ways of specifying method one are: [//en //to //tre //fire ] { 0 50 translate exec} forall [/en load /to load /tre load /fire load] { 0 50 translate exec} forall [/en /to /tre /fire ] { 0 50 translate load exec} forall -------- Whatever I say is my fault and no one elses! ----------- Richard G. Knowles richk@pogo.WV.TEK.COM Graphics Printing and Imaging (503) 685-3860 Tektronix, Inc; D/S 63-356 Wilsonville, Or 97070 or just yell "Hey, Rich!"