meb4074@cec1.wustl.edu (Mark Edward Bradley) (12/08/89)
If anyone is familiar with low-level printer driver calls, I would appreciate
some advice. I am using the access routines described in Inside Mac II, chapter
5. I am trying to output a bitmap to the printer, with dubious success. My code
follows: (I am programming in assembly language. Sorry, C gods, I'm a new boy)
_PrDrvrOpen ; Open the driver
move.w #iPrDevCtl,-(SP) ; Printer control code
move.l #lPrReset,-(SP) ; Reset printer code
move.l #0,-(SP) ; Unused
move.l #0,-(SP)
_PrCtlCall ; Call the driver routine
move.w #iPrBitsCtl,-(SP) ; Bit map printing code
move.l MyWindPtr,-(SP) ; Window pointer
addq.l #2,(SP) ; Set pointer on stack to the portBits
pea MyRect ; Enclosing rectangle
move.l #lPaintBits,-(SP) ; Use square pixels
_PrCtlCall
move.w #iPrDevCtl,-(SP)
move.l #lPrPageEnd,-(SP) ; End page code
move.l #0,-(SP)
move.l #0,-(SP)
_PrCtlCall
_PrDrvrClose ; Close the driver
The first time this routine executes, everything works. Any time after
that, the code executes (I checked w/ MacsBug), but the printer doesn't respond.
When I go to the Chooser, the printer is no longer selected. After re-selecting,
exiting, and re-entering, it still is not selected. When I exit my program, the
system crashes, but not always immediately. And when I reboot, the printer will
form feed without prompting at some point. (Seems to happen during window
operations?)
Very little of the code above is my own. It's almost verbatim from IM.
I don't know what I'm missing. If you know what might be the problem or if I'm
leaving something out, please e-mail. I'm using a Mac SE with 2MB, no special
hardware, an AppleTalk Imagewriter and an AppleTalk ImageWriter LQ. I'm also
using the Consulair Development System.
Profuse thanks,
Mark
-------------------------------------------------------------------------------
"Come to .test, | meb4074@cec1.wustl.edu | "I'm brave!
the land without | Mark Edward Bradley | But I'm careful."
flames!" | Markie B.!! | -- Goofyewing@tramp.Colorado.EDU (EWING DAVID JAMES) (12/09/89)
Don't use the low level printer driver! It is about to disappear! Currently it calls the high level driver to get the work done (rolls reversed!). Instead do the equivalent of whats on page 155 of IM-II. Use CopyBits to do the drawing. Be aware that you may have to band the image (do mulitple CopyBits calls for the image) if the program is low on memory - otherwise you might not get any output. Dave Ewing ewing@tramp.colorado.edu (128.138.238.33) ..!hplabs!boulder!onecom!tyvax!iftech!dave (My Mac IIx running uupc & MacOS!) AppleLink: D2408 (D2408@applelink.apple.com)