How Windows 3.11 Handled Multi-Page Laser Printing
Microsoft Windows 3.11 managed multi-page laser printing by combining the Graphics Device Interface (GDI), hardware-specific printer drivers, memory-saving banding techniques, and the Windows Print Manager spooler. By translating high-level graphical function calls into page description languages such as PCL and PostScript, Windows 3.11 coordinated page transitions, managed hardware memory constraints, and buffered print data to deliver multi-page documents without locking up the user interface.
The GDI and Print Job Delineation
At the software level, multi-page printing relied on the Windows Graphics Device Interface (GDI). Windows applications did not communicate directly with laser printers. Instead, they drew to a printer device context (DC) using standard GDI functions.
To delineate pages within a single job, the GDI relied on specific print control escapes and API calls:
STARTDOC: Informed the GDI and the spooler that a new document was beginning.NEWFRAME(orNEXTBAND): Signaled the completion of a page. CallingNEWFRAMEinstructed the driver to finalize rendering for the active page, flush the data, and prepare a clean canvas for the subsequent page.ENDDOC: Signaled that all pages were complete, allowing the printer subsystem to close the job and release resources.
Driver Translation to PCL and PostScript
Laser printers, such as the HP LaserJet series or Apple LaserWriters, required instructions in Page Description Languages (PDLs)—primarily Hewlett-Packard's PCL (Printer Command Language) or Adobe PostScript.
When an application called NEWFRAME, the printer driver
converted the GDI drawing primitives into printer-specific page-ejection
commands. For PCL printers, the driver inserted an ASCII Form Feed
control character (\x0C) or a PCL reset sequence that
commanded the laser engine to feed the current sheet of paper through
the fuser and load the next sheet. For PostScript printers, the driver
emitted the showpage operator, which rendered the current
page description onto the physical medium and cleared the device's
internal page dictionary for the next page.
Memory Optimization Through Banding
In the early 1990s, high-resolution laser printing (300 to 600 DPI) required significant memory. A full-page monochrome bitmap at 600 DPI required over 4 megabytes of RAM, which often exceeded the installed memory of both the host PC and the laser printer.
To support multi-page documents on constrained hardware, Windows 3.11 used a technique called banding:
- The printer driver divided a single page into several horizontal rectangular slices, known as bands.
- The GDI rendered only one band at a time into system RAM.
- The rendered slice was compressed and transmitted to the printer.
- Once all bands for a single page were transferred, the driver sent the page-ejection command.
- The memory buffer was recycled to begin processing the bands of the next page.
This process allowed multi-page documents of indefinite length to print reliably without encountering out-of-memory errors on either the computer or the printer.
Spooling via Print Manager
Windows 3.11 handled the output stream through the 16-bit Print
Manager. When a multi-page job was initiated, the GDI wrote the
processed printer commands into temporary spool files
(.SPL) stored on the hard drive.
Print Manager then fed this data to the printer port (typically LPT1) in the background using cooperative multitasking idle loops. Spooling ensured that the application did not have to wait for the laser printer’s mechanical paper-handling cycle to complete between pages, returning control of the software back to the user while subsequent pages were still being fed and fused.