FormFeed.mod: Translation to Stony Brook Modula-2

Last updated: 11. 1.1998, 17:12

<*/NOWARN:F*>
MODULE FormFeed;
(*---------------------------------------------
   FORMFEED.C      --- Advances printer to next page
                   (c) Charles Petzold, 1996
   FormFeed.mod    --- Translation to Stony Brook Modula-2
                   (c) Peter Stadler,   1997
  ---------------------------------------------*)
IMPORT WIN32;
IMPORT WINGDI;
IMPORT SYSTEM;
IMPORT WINSPOOL;
IMPORT WINX;

VAR
  hdcPrint   :  WIN32.HDC;
  di         :  WINGDI.DOCINFO;

(*++++*****************************************************************)
PROCEDURE GetPrinterDC ():WIN32.HDC;
(**********************************************************************)
VAR
  pinfo5     :  ARRAY[0..2] OF WINSPOOL.PRINTER_INFO_5;
  dwNeeded   :  WIN32.DWORD;
  dwReturned :  WIN32.DWORD;
BEGIN
     IF (WINSPOOL.EnumPrinters (WINSPOOL.PRINTER_ENUM_DEFAULT, WINX.NIL_ASTR, 5, SYSTEM.CAST(WIN32.LPBYTE,SYSTEM.ADR(pinfo5)),
                       SIZE (pinfo5), dwNeeded, dwReturned)) THEN
          RETURN WINGDI.CreateDC (WINX.NIL_ASTR, pinfo5[0].pPrinterName^, WINX.NIL_ASTR, WINX.NIL_DEVMODEA);
     END;
     RETURN NIL;            (* EnumPrinters failed, so RETURN null hdc          *)
END GetPrinterDC;
(*++++*****************************************************************)
BEGIN
di :=  WINGDI.DOCINFO{ SIZE(WINGDI.DOCINFO), SYSTEM.ADR("FormFeed"), NIL } ;
     hdcPrint := GetPrinterDC () ;
     IF (hdcPrint # NIL) THEN
          IF (WINGDI.StartDoc (hdcPrint, di) > 0) THEN
               IF (WINGDI.StartPage (hdcPrint) > 0) AND (WINGDI.EndPage (hdcPrint) > 0) THEN
                    WINGDI.EndDoc (hdcPrint);
               END;
          END;
          WINGDI.DeleteDC (hdcPrint);
     END;
END FormFeed.