I think it is much easier than what you have laid out.
oldCurs = system(_lastCurs)
Note: Untested code. I just typed it in.
LONG IF PRCANCEL = 0
LONG IF gNameWorld&
CALL SETGWORLD(gNameWorld, currDevice&)
pHndl& = USR GETPICT(srcT)
Problems with original stuff...
-The printer uses a separate device record from the screen or Gworlds - "LONG IF gNameWorld& AND currPort&" doesn't work as you would expect. It would have needed to be LONG IF gNameWorld& <> 0 AND currPort& - Lock pixels is not required in the sample I used.
- I didn't see where you DIM'd srcT. (Probably not in this snippet.) Failure to do so would mean a crash.
Try something like this.
Before your ROUTE _toPrinter line, do a pictHndl& = FN OPENPICTURE (rect) and then copybits the gworld into the same gworld it's already in (source and destination the same). Then CLOSEPICTURE. That should leave you with a PICT handle of the gWorld. Now do your ROUTE _toPrinter and then PICTURE (0,0), pictHndl& with pictHndl& being the handle you just got from the OPENPICTURE/CLOSEPICTURE.