//--------------------------------------------------------------------//
        //                                                        M e t h o d //
        // g e n e r a t e P a g e                                            //
        //--------------------------------------------------------------------//
        //                                                                    //
        // Write individual test data page sequences to output file.          //
        //                                                                    //
        //--------------------------------------------------------------------//

        private static void generatePage(BinaryWriter prnWriter,
                                         Int32 indxPaperSize,
                                         Int32 indxPaperType,
                                         Int32 indxOrientation,
                                         Boolean formAsMacro,
                                         UInt16 logXOffset)
        {
            String lbCRTerm = "\x0d" + "~";

            Int16 posX,
                  posY;

            Int16 ptSize,
                  degrees;

            Int16 boxX,
                  boxY,
                  boxHeight,
                  boxWidth;

            Double scaleX,
                   scaleY;

            Double angle,
                   sinAngle,
                   cosAngle;

            //----------------------------------------------------------------//

            if (formAsMacro)
            {
                PCLWriter.macroControl(prnWriter, _macroId,
                                       PCLWriter.eMacroControl.Call);
            }
            else
            {
                generateOverlay(prnWriter, false, logXOffset,
                                indxPaperSize, indxOrientation);
            }

            //----------------------------------------------------------------//
            //                                                                //
            // HP-GL/2 picture frame and initialisation.                      //
            //                                                                //
            // Plotter units are always absolute at 0.025mm (1/1016 inch),    //
            // but many HP-GL/2 commands use (definable) user units.          //
            // It makes the code clearer if we use the same units in HP-GL/2  //
            // as we do in PCL, so the SC (scale) command is used to set      //
            // user-units to 600 units-per-inch.                              //
            //                                                                //
            // Note that the default HP-GL/2 Y-axis has its origin at         //
            // lower-left of the picture frame, and Y-coordinate values       //
            // increase UP the page, whilst the PCL Y-axis has its origin at  //
            // the top margin and Y-coordinate values increase DOWN the page. //
            //                                                                //
            // It is possible to use the same (600 upi) coordinates as PCL by //
            // using:                                                         //
            //  SC0,1.6933,0,-1.6933,2                                        //
            //  IR0,100,100,0                                                 //
            // Note that the IR coordinates shown in the example in the "PCL  //
            // Technical Reference" manual are different and are incorrect!   //
            // One drawback to using the same origin and axis direction is    //
            // that some commands (such as SR) then have to use negative      //
            // Y-values to avoid mirroring.                                   //
            //                                                                //
            //----------------------------------------------------------------//

            scaleX = (Double)_plotUnitsPerInch / _unitsPerInch;
            scaleY = (Double)_plotUnitsPerInch / _unitsPerInch;

            boxX      = 0;
            boxY      = 0;
            boxWidth  = (Int16)(_logPageWidth);
            boxHeight = (Int16)(_logPageHeight);

            PCLWriter.pictureFrame(prnWriter,
                                   boxX,
                                   boxY,
                                   boxHeight,
                                   boxWidth);

            PCLWriter.modeHPGL2(prnWriter, false, false);

            PCLWriter.cmdHPGL2(prnWriter, "IN", "", false);
            PCLWriter.cmdHPGL2(prnWriter, "SP", "1", true);
            PCLWriter.cmdHPGL2(prnWriter, "DT", "~", false);

            PCLWriter.cmdHPGL2(prnWriter, "SC",
                               "0," + scaleX.ToString("F4") +
                               ",0," + (-scaleY).ToString("F4") +
                               ",2",
                               false);

            PCLWriter.cmdHPGL2(prnWriter, "IR", "0,100,100,0", false);
            PCLWriter.cmdHPGL2(prnWriter, "PU", "0,0", true);

            PCLWriter.modePCL(prnWriter, true);

            //----------------------------------------------------------------//
            //                                                                //
            // Rotated text.                                                  //
            //                                                                //
            //----------------------------------------------------------------//

            ptSize = 36;

            PCLWriter.font(prnWriter, true, "19U",
                           PCLFonts.getPCLFontSelect(_indxFontArial,
                                                     PCLFonts.eVariant.Regular,
                                                     ptSize, 0));

            //----------------------------------------------------------------//
            // Orthogonal text                                                //
            //----------------------------------------------------------------//

            posX = (Int16)(_posXData1 - logXOffset);
            posY = _posYData1;

            posX += _lineInc / 4;

            PCLWriter.printDirection(prnWriter, 0);

            PCLWriter.textRotated(prnWriter, posX, posY, 0, 0, true,
                                  "angle 0");

            posX -= _lineInc / 2;

            PCLWriter.textRotated(prnWriter, posX, posY, 0, 180, true,
                                  "ccw 180");

            posX += _lineInc / 4;
            posY -= _lineInc / 4;

            PCLWriter.textRotated(prnWriter, posX, posY, 0, 90, true,
                                  "ccw 90");

            posY += _lineInc / 2;

            PCLWriter.textRotated(prnWriter, posX, posY, 0, 270, true,
                                  "ccw 270");

            //----------------------------------------------------------------//
            // direction quadrants I and III                                  //
            //----------------------------------------------------------------//

            posX = (Int16)(_posXData2 - logXOffset);
            posY = _posYData2;

            PCLWriter.modeHPGL2(prnWriter, false, false);

            PCLWriter.cmdHPGL2(prnWriter, "SD",
                               PCLFonts.getHPGL2FontDef(_indxFontArial,
                                                        PCLFonts.eVariant.Regular,
                                                        14, ptSize, 0),
                               true);

            PCLWriter.cmdHPGL2(prnWriter, "PA",
                               posX.ToString() + "," +
                               posY.ToString(), false);

            degrees  = 30;
            angle    = Math.PI * degrees / 180.0;
            sinAngle = Math.Sin(angle);
            cosAngle = Math.Cos(angle);

            PCLWriter.cmdHPGL2(prnWriter, "DI",
                               cosAngle.ToString() + "," +
                               sinAngle.ToString(), false);

            PCLWriter.cmdHPGL2(prnWriter, "LB",
                               "angle +30" + lbCRTerm, true);

            PCLWriter.cmdHPGL2(prnWriter, "DI",
                               "-" + cosAngle.ToString() + "," +
                               "-" + sinAngle.ToString(), false);

            PCLWriter.cmdHPGL2(prnWriter, "LB",
                               "angle +210" + lbCRTerm, true);

            //----------------------------------------------------------------//
            // direction quadrants II and IV                                  //
            //----------------------------------------------------------------//

            posX = (Int16)(_posXData2 - logXOffset - ((1 * _incInch) / 4));

            PCLWriter.modeHPGL2(prnWriter, false, false);

            PCLWriter.cmdHPGL2(prnWriter, "SD",
                               PCLFonts.getHPGL2FontDef(_indxFontArial,
                                                        PCLFonts.eVariant.Regular,
                                                        14, ptSize, 0),
                               true);

            PCLWriter.cmdHPGL2(prnWriter, "PA",
                               posX.ToString() + "," +
                               posY.ToString(), false);

            degrees  = 45;
            angle    = Math.PI * degrees / 180.0;
            sinAngle = Math.Sin(angle);
            cosAngle = Math.Cos(angle);

            PCLWriter.cmdHPGL2(prnWriter, "DI",
                               "-" + cosAngle.ToString() + "," +
                               sinAngle.ToString(), false);

            PCLWriter.cmdHPGL2(prnWriter, "LB",
                               "angle +135" + lbCRTerm, true);

            posX += ((1 * _incInch) / 2);
            posY += ((_lineInc * 1) / 6);

            PCLWriter.cmdHPGL2(prnWriter, "PA",
                               posX.ToString() + "," +
                               posY.ToString(), false);

            PCLWriter.cmdHPGL2(prnWriter, "DI",
                               cosAngle.ToString() + "," +
                               "-" + sinAngle.ToString(), false);

            PCLWriter.cmdHPGL2(prnWriter, "LB",
                               "angle +315" + lbCRTerm, true);

            //----------------------------------------------------------------//
            // resets                                                         //
            //----------------------------------------------------------------//

            posX  = (Int16)(_posXData2 - logXOffset);
            posY += ((_lineInc * 1) / 2);

            PCLWriter.cmdHPGL2(prnWriter, "DI", "1,0", false);

            //----------------------------------------------------------------//

            PCLWriter.formFeed(prnWriter);
        }
        //--------------------------------------------------------------------//
        //                                                        M e t h o d //
        // g e n e r a t e P a g e                                            //
        //--------------------------------------------------------------------//
        //                                                                    //
        // Write individual test data page sequences to output file.          //
        //                                                                    //
        //--------------------------------------------------------------------//

        private static void generatePage(BinaryWriter prnWriter,
                                         Int32 indxPaperSize,
                                         Int32 indxPaperType,
                                         Int32 indxOrientation,
                                         Boolean formAsMacro,
                                         UInt16 logXOffset)
        {
            String sampleText = "0123456789";
            String lbTerm     = "~";

            Int16 posX,
                  posY;

            Int16 ptSize,
                  degrees;

            Int16 boxX,
                  boxY,
                  boxHeight,
                  boxWidth;

            Double scaleX,
                   scaleY;

            Double angle,
                   tanAngle;

            //----------------------------------------------------------------//

            if (formAsMacro)
            {
                PCLWriter.macroControl(prnWriter, _macroId,
                                       PCLWriter.eMacroControl.Call);
            }
            else
            {
                generateOverlay(prnWriter, false, logXOffset,
                                indxPaperSize, indxOrientation);
            }

            //----------------------------------------------------------------//
            //                                                                //
            // HP-GL/2 picture frame and initialisation.                      //
            //                                                                //
            // Plotter units are always absolute at 0.025mm (1/1016 inch),    //
            // but many HP-GL/2 commands use (definable) user units.          //
            // It makes the code clearer if we use the same units in HP-GL/2  //
            // as we do in PCL, so the SC (scale) command is used to set      //
            // user-units to 600 units-per-inch.                              //
            //                                                                //
            // Note that the default HP-GL/2 Y-axis has its origin at         //
            // lower-left of the picture frame, and Y-coordinate values       //
            // increase UP the page, whilst the PCL Y-axis has its origin at  //
            // the top margin and Y-coordinate values increase DOWN the page. //
            //                                                                //
            // It is possible to use the same (600 upi) coordinates as PCL by //
            // using:                                                         //
            //  SC0,1.6933,0,-1.6933,2                                        //
            //  IR0,100,100,0                                                 //
            // Note that the IR coordinates shown in the example in the "PCL  //
            // Technical Reference" manual are different and are incorrect!   //
            // One drawback to using the same origin and axis direction is    //
            // that some commands (such as SR) then have to use negative      //
            // Y-values to avoid mirroring.                                   //
            //                                                                //
            //----------------------------------------------------------------//

            scaleX = (Double)_plotUnitsPerInch / _unitsPerInch;
            scaleY = (Double)_plotUnitsPerInch / _unitsPerInch;

            boxX      = 0;
            boxY      = 0;
            boxWidth  = (Int16)(_logPageWidth);
            boxHeight = (Int16)(_logPageHeight);

            PCLWriter.pictureFrame(prnWriter,
                                   boxX,
                                   boxY,
                                   boxHeight,
                                   boxWidth);

            PCLWriter.modeHPGL2(prnWriter, false, false);

            PCLWriter.cmdHPGL2(prnWriter, "IN", "", false);
            PCLWriter.cmdHPGL2(prnWriter, "SP", "1", true);
            PCLWriter.cmdHPGL2(prnWriter, "DT", "~", false);

            PCLWriter.cmdHPGL2(prnWriter, "SC",
                               "0," + scaleX.ToString("F4") +
                               ",0," + (-scaleY).ToString("F4") +
                               ",2",
                               false);

            PCLWriter.cmdHPGL2(prnWriter, "IR", "0,100,100,0", false);
            PCLWriter.cmdHPGL2(prnWriter, "PU", "0,0", true);

            PCLWriter.modePCL(prnWriter, true);

            //----------------------------------------------------------------//
            //                                                                //
            // Descriptive text.                                              //
            //                                                                //
            //----------------------------------------------------------------//

            ptSize = 18;

            PCLWriter.font(prnWriter, true, "19U",
                           PCLFonts.getPCLFontSelect(_indxFontCourier,
                                                     PCLFonts.eVariant.Regular,
                                                     ptSize, 0));

            posX = (Int16)(_posXData1 - logXOffset);
            posY = _posYDesc;

            posY += _lineInc;

            PCLWriter.text(prnWriter, posX, posY, 0,
                           "Arial");

            posY += _lineInc;

            PCLWriter.text(prnWriter, posX, posY, 0,
                           "");

            posY += _lineInc;

            PCLWriter.text(prnWriter, posX, posY, 0,
                           "");

            posY += _lineInc;

            PCLWriter.text(prnWriter, posX, posY, 0,
                           "+30");

            posY += _lineInc;

            PCLWriter.text(prnWriter, posX, posY, 0,
                           "-45");

            posY += _lineInc;

            PCLWriter.text(prnWriter, posX, posY, 0,
                           "+ve");

            posY += _lineInc;

            PCLWriter.text(prnWriter, posX, posY, 0,
                           "-ve");

            //----------------------------------------------------------------//
            //                                                                //
            // Embellished text.                                              //
            //                                                                //
            //----------------------------------------------------------------//

            ptSize = 36;

            posX = (Int16)(_posXData2 - logXOffset);
            posY = _posYData;

            //----------------------------------------------------------------//
            // standard                                                       //
            //----------------------------------------------------------------//

            posY += _lineInc;

            PCLWriter.modeHPGL2(prnWriter, false, false);

            PCLWriter.cmdHPGL2(prnWriter, "SD",
                               PCLFonts.getHPGL2FontDef(_indxFontArial,
                                                        PCLFonts.eVariant.Regular,
                                                        14, ptSize, 0),
                               true);

            PCLWriter.cmdHPGL2(prnWriter, "PA",
                               posX.ToString() + "," +
                               posY.ToString(), false);

            PCLWriter.cmdHPGL2(prnWriter, "LB", sampleText + lbTerm, true);

            //----------------------------------------------------------------//
            // size X                                                         //
            //----------------------------------------------------------------//

            posY += _lineInc;

            PCLWriter.cmdHPGL2(prnWriter, "SD",
                               PCLFonts.getHPGL2FontDef(_indxFontArial,
                                                        PCLFonts.eVariant.Regular,
                                                        14, ptSize, 0),
                               true);

            PCLWriter.cmdHPGL2(prnWriter, "PA",
                               posX.ToString() + "," +
                               posY.ToString(), false);

            PCLWriter.cmdHPGL2(prnWriter, "SR", "4,-3", true);

            PCLWriter.cmdHPGL2(prnWriter, "LB", sampleText + lbTerm, true);

            PCLWriter.cmdHPGL2(prnWriter, "SR", "", true);

            //----------------------------------------------------------------//
            // size Y                                                         //
            //----------------------------------------------------------------//

            posY += _lineInc;

            PCLWriter.cmdHPGL2(prnWriter, "SD",
                               PCLFonts.getHPGL2FontDef(_indxFontArial,
                                                        PCLFonts.eVariant.Regular,
                                                        14, ptSize, 0),
                               true);

            PCLWriter.cmdHPGL2(prnWriter, "PA",
                               posX.ToString() + "," +
                               posY.ToString(), false);

            PCLWriter.cmdHPGL2(prnWriter, "SR", "3.2,-6", true);

            PCLWriter.cmdHPGL2(prnWriter, "LB", sampleText + lbTerm, true);

            PCLWriter.cmdHPGL2(prnWriter, "SI", "", true);

            //----------------------------------------------------------------//
            // slant X positive                                               //
            //----------------------------------------------------------------//

            posY += _lineInc;

            PCLWriter.cmdHPGL2(prnWriter, "SD",
                               PCLFonts.getHPGL2FontDef(_indxFontArial,
                                                        PCLFonts.eVariant.Regular,
                                                        14, ptSize, 0),
                               true);

            PCLWriter.cmdHPGL2(prnWriter, "PA",
                               posX.ToString() + "," +
                               posY.ToString(), false);

            degrees  = 30;
            angle    = Math.PI * degrees / 180.0;
            tanAngle = Math.Tan(angle);

            PCLWriter.cmdHPGL2(prnWriter, "SL",
                               tanAngle.ToString(), false);

            PCLWriter.cmdHPGL2(prnWriter, "LB", sampleText + lbTerm, true);

            //----------------------------------------------------------------//
            // slant X negative                                               //
            //----------------------------------------------------------------//

            posY += _lineInc;

            PCLWriter.cmdHPGL2(prnWriter, "SD",
                               PCLFonts.getHPGL2FontDef(_indxFontArial,
                                                        PCLFonts.eVariant.Regular,
                                                        14, ptSize, 0),
                               true);

            PCLWriter.cmdHPGL2(prnWriter, "PA",
                               posX.ToString() + "," +
                               posY.ToString(), false);

            degrees  = 45;
            angle    = Math.PI * degrees / 180.0;
            tanAngle = Math.Tan(angle);

            PCLWriter.cmdHPGL2(prnWriter, "SL",
                               "-" + tanAngle.ToString(), false);

            PCLWriter.cmdHPGL2(prnWriter, "LB", sampleText + lbTerm, true);

            PCLWriter.cmdHPGL2(prnWriter, "SL", "0", false);

            //----------------------------------------------------------------//
            // extra space X positive                                         //
            //----------------------------------------------------------------//

            posY += _lineInc;

            PCLWriter.cmdHPGL2(prnWriter, "SD",
                               PCLFonts.getHPGL2FontDef(_indxFontArial,
                                                        PCLFonts.eVariant.Regular,
                                                        14, ptSize, 0),
                               true);

            PCLWriter.cmdHPGL2(prnWriter, "PA",
                               posX.ToString() + "," +
                               posY.ToString(), false);

            PCLWriter.cmdHPGL2(prnWriter, "ES", ".2,0", false);

            PCLWriter.cmdHPGL2(prnWriter, "LB", sampleText + lbTerm, true);

            //----------------------------------------------------------------//
            // extra space X negative                                         //
            //----------------------------------------------------------------//

            posY += _lineInc;

            PCLWriter.cmdHPGL2(prnWriter, "SD",
                               PCLFonts.getHPGL2FontDef(_indxFontArial,
                                                        PCLFonts.eVariant.Regular,
                                                        14, ptSize, 0),
                               true);

            PCLWriter.cmdHPGL2(prnWriter, "PA",
                               posX.ToString() + "," +
                               posY.ToString(), false);

            PCLWriter.cmdHPGL2(prnWriter, "ES", "-.1,0", false);

            PCLWriter.cmdHPGL2(prnWriter, "LB", sampleText + lbTerm, true);

            //----------------------------------------------------------------//

            PCLWriter.modePCL(prnWriter, true);

            PCLWriter.formFeed(prnWriter);
        }