[futurebasic] Re: Print Question

Message: < previous - next > : Reply : Subscribe : Cleanse
Home   : September 1998 : Group Archive : Group : All Groups

From: Rick Brown <rbrown@...>
Date: Mon, 28 Sep 1998 21:19:49 -0500
Joe wrote:
> I am puzzled by the above examples. Do you mean write a seperate FN for each
> page to print? 

No, I don't think that's necessary.  I think the "FN" statement was
meant to be shorthand for: "Insert all the drawing commands for a single
page here."  You don't actually need to implement them as a FN, nor do
you need to use a different FN for each page.

>           FN printPage(pageNum%,copies%)          'call print routine
>           CLEAR LPRINT                            'finish page, go to next

I'm skeptical about this pair of lines.  It looks like your intent is to
have FN printPage perform the necessary drawing commands a certain
number of times (the value of "copies%"), followed by a single call to
CLEAR LPRINT after the FN returns.  I think you need to call CLEAR
LPRINT after _each_ time you draw the page.  If copies% = 12, then you
should call CLEAR LPRINT 12 times, not once.

> The line that gets the number of copies: "copies%   ={[PRHANDLE]+_copies}"
> always seems to return 1 no matter how many copies are entered in the print
> dialogue box.

I'm speculating that this is a (relatively) new feature of the system
software.  Based on a few experiments with new & old Mac's, I _think_
what's happening is this:

In the "old" system software (how old?  Don't know) it was the
programmer's responsibility to handle page ranges and number-of-copies
programatically, by reading those values from the Print Record, and
drawing only the appropriate range of pages, and executing a loop,
generating the drawing commands repeatedly for the appropriate number of
copies.

Nowadays, the system software (or is it just certain printer drivers?  I
don't know) handle the looping and page-ranging for you.  If the user
enters "7" in the dialog box, then 7 copies get printed even though your
program only executes the drawing commands once.  If the user enters "3"
as the first page number, then pages 1 and 2 don't get printed, even if
your program "tries" to generate them.  Using this "new" method, your
program should generate the full range of pages, and generate each page
only once.  The system software will automatically take care of the
copies & range that the user requested.

But in order to make this new "automatic" method work with _older_
application software, which is written to loop through copies and to
truncate the page range, it's necessary for the system software to
"fool" your application.  Though the user enters "7" copies, the system
only reports "1" to your program.  That way, your print loop is fooled
into executing only once, and the system will "multiply" that output by
7 for you.  (If your loop executed 7 times, the (new) system would print
7 copies for _each_ loop--giving you 49 copies!  You don't want that.)

Likewise, my guess is that the newer system "fools" your program into
thinking it's supposed to print the entire range of pages, regardless of
what the user actually entered in the dialog box.  That way, your
program merrily generates the entire range, and the system simply
ignores the first "n" and the last "m" pages you generate.

- Rick