Microsoft KB Archive/101300

{| = PRB: Epson Printer Driver Causes Top of Page Reset =
 * width="100%"|

ID: Q101300

The information in this article applies to:


 * Microsoft FoxPro for MS-DOS, versions 2.0 and 2.5

SYMPTOMS
If one of the Epson printer drivers is chosen for a printer driver and the PDDOCEND procedure is called, the top of the page will be reset to where the printer stops printing instead of to the true top of the page. Unless the printer is manually realigned with the top of the page, each page of future output will be split over two pages.

CAUSE
The printer driver sends the setup code [_PDPARMS(3)] for the printer. This code initializes the printer and resets the printer's top of page setting.

RESOLUTION
To work around this problem, do ONE of the following:

 Do not use the printer drivers. -or- Create an "End of Document" user procedure for the driver that returns the formfeed character [CHR(12)] plus the original code. -or-  Modify the P_CODES database and rebuild GENPD.APP. In order to modify the P_CODES table it is necessary to thoroughly understand how to control the specific printer using whatever language the printer requires. For example, HP laser printers use a language called 'PCL' or Printer Control Language, PostScript printers use various 'levels' of the PostScript language, and dot matrix printers use specific code sequences preceded by an attention or ESCAPE character, usually CHR(27). Consult your printer documentation or contact the manufacturer for more information on sending codes to your specific printer. The P_CODES table contains fields with descriptive field names that describe the function of the printer code contained within the field. For example, the P_6LPI field contains the code to set the printer to 6 lines per inch, if applicable. Because this article discusses the codes used to reset the printer, any such escape codes or commands should be stored in the P_SETUP field of the P_CODES table. To modify the P_SETUP field for the Epson E/F/J/RX/LQ driver, open the P_CODES database, and move the record pointer to the record where 'Epson E/F/J/RX/LQ' is contained in the P_NAME field. You can then add a formfeed character to the existing setup code by issuing the command

REPLACE P_SETUP WITH CHR(12)+P_SETUP

in the command window.

For more information about modifying the P_CODES database, please see the following article in the Microsoft Knowledge Base:

ARTICLE-ID: Q89000 TITLE    : How to Edit the FoxPro P_CODES Database



MORE INFORMATION
The following code reproduces this problem. To use this code without the printer driver loaded, comment out the lines that contain "&& Comment this".

SET TALK OFF _PEJECT="NONE" _PADVANCE="FORMFEED"

* The following line of code will set the printer driver to the * Epson E/F/RX/LQ driver.

_PDSETUP="Epson Generic" && Comment this

* The following line of code will enable FoxPro to use the * DRIVER2.PLB library file, which contains the code to print * using escape codes.

SET LIBRARY TO c:\ \goodies\pdrivers\driver2.plb && Comment this

SET PRINTER TO dummy.txt SET PRINTER ON  PRINTJOB

FOR x = 1 TO 32 ? x  ENDFOR

* The following line of code will send the End of Document escape * codes. This is a procedure contained in the DRIVER2.PLB library.

? PDDOCEND                && Comment this

ENDPRINTJOB SET PRINTER OFF SET PRINTER TO

* The following line of code will remove the DRIVER2.PLB library * from memory.

SET LIBRARY TO              && Comment this

MODIFY COMMAND dummy.txt Additional reference words: FoxDos 2.00 2.50 pdparms KBCategory: kbprint kbprg kbprb KBSubcategory: FxprintDriver
 * }