FormFeed.mod: Translation to XDS Modula-2

Last updated: 26. 1.1998, 20:40

<* +M2EXTENSIONS *>
MODULE FormFeed;
(*---------------------------------------------
   FORMFEED.C      --- Advances printer to next page
                   (c) Charles Petzold, 1996
   FormFeed.mod    --- Translation to XDS Modula-2
                   (c) Peter Stadler,   1997
  ---------------------------------------------*)
IMPORT Windows;

IMPORT SYSTEM;


VAR
  hdcPrint   :  Windows.HDC;
  di         :  Windows.DOCINFO;

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