void MyPMSessionSetError(OSStatus err) { #if TARGET_API_MAC_CARBON PMSessionSetError(gPrintSession,err); #else PrSetError(err); #endif }
boolean shellprint (WindowPtr w, boolean fldialog) { /* 9/5/90 dmb: open and close print resources each time we're called. also, make sure we close each page opened, even when errors occur 9/28/91 dmb: for exit of edit mode before printing 4/24/92 dmb: make sure bJDocLoop is bSpoolLoop before calling PrPicFile, as per IM II-155. otherwise, we can get bogus PrErrors */ OSStatus theErr; boolean accepted; //remember that this is a grafport, TPPrPort isn't //but this should work because all the code that //messes with printing uses a grafport. // CGrafPtr printport; UInt32 minPage = 1, maxPage = 9999; SInt32 firstPage = 1; SInt32 lastPage = 9999; short i; boolean fl = false; if (w == nil) /*defensive driving*/ return (false); if (!carbonValidSession()) { carbonStdSetup(); } fl = false; /*until sucessfull print, this is return value*/ /*fills in fields of printinfo record*/ (*shellglobals.setprintinfoproutine) (); //this only counts the number of pages. maxPage = shellprintinfo.ctpages; //set the page range theErr = PMSetPageRange(shellprintinfo.printsettings, minPage, maxPage); if(theErr != noErr){ goto exit; } //finally display the dialog if (fldialog) { theErr = PMSessionPrintDialog( shellprintinfo.printhandle, shellprintinfo.printsettings, shellprintinfo.pageformat, &accepted); //either the user canceled or their was some other error. //don't print if (!accepted || (theErr != noErr)){ goto exit; } } setcursortype (cursoriswatch); shellupdateallnow (); /*update all windows that were dirtied by the print dialog*/ shellpushglobals (w); (*shellglobals.settextmoderoutine) (false); /*make sure editing changes are accepted*/ pushport (nil); /*save current port on stack*/ //Code change by Timothy Paustian Friday, June 16, 2000 4:19:04 PM //Changed to Opaque call for Carbon //I will have to watch out for this, //to save the port I need to use.. //PMSessionGetGraphicsContext ( //This does not return the printport, but TPrPort gPort field //I think I can get away with this because the only function that uses //it is pgInitDevice and that assumes you are passing a port. //It is OK in the old code because the first item in the struct is a port //we have to call this first before we can get the graphics context theErr = PMSessionBeginDocument( shellprintinfo.printhandle, shellprintinfo.printsettings, shellprintinfo.pageformat); if(theErr != noErr) goto exit; /*prepares for printing*/ (*shellglobals.beginprintroutine) (); /*fills in fields of printinfo record*/ // (*shellglobals.setprintinfoproutine) (); //this only counts the number of pages. //limit this to the number of pages the user asked for. theErr = PMGetFirstPage(shellprintinfo.printsettings, (UInt32 *) (&firstPage)); if (theErr == noErr) { theErr = PMGetLastPage(shellprintinfo.printsettings, (UInt32 *) (&lastPage)); } //sanity checks if(theErr != noErr) goto exit; if(lastPage > shellprintinfo.ctpages) lastPage = shellprintinfo.ctpages; for (i = 1; i <= lastPage; i++) { /*print one page*/ theErr = PMSessionBeginPage( shellprintinfo.printhandle, shellprintinfo.pageformat, &shellprintinfo.pagerect); if (theErr != noErr) break; //now set the graphics context. //in carbon we have to set up the port each time //to make sure it is in the printer port. Since other things can be going on //during the printing, the port may have changed. { GrafPtr thePort, oldPort; GetPort(&oldPort); //the second parameter is currently ignored. theErr = PMSessionGetGraphicsContext( shellprintinfo.printhandle, kPMGraphicsContextQuickdraw, (void **) &thePort); shellprintinfo.printport = thePort; SetPort(thePort); // Draw the page SetFractEnable (true); fl = (*shellglobals.printroutine) (i); //reset back to the old port. SetPort(oldPort); } theErr = PMSessionEndPage(shellprintinfo.printhandle); if (!fl) break; if (keyboardescape ()) { theErr = PMSessionSetError(shellprintinfo.printhandle, iPrAbort); } } /*for*/ theErr = PMSessionEndDocument(shellprintinfo.printhandle); if(theErr != noErr) goto exit; //everything worked and printing is done. so set fl to true. fl = true; //the PrPicFile is not supported in carbon. popport (); (*shellglobals.endprintroutine) (); shellpopglobals (); exit: carbonKillPrintVars(); // PMRelease(shellprintinfo.printhandle); // PMRelease(pageformat); // PMRelease(printsettings); currentprintport = NULL; return (fl); } /*shellprint*/