`Shaw et al.
`
`I 1111111111111111 11111 111111111111111 111111111111111 1111111111111111111 IIII
`US005604843A
`[11] Patent Number:
`[45] Date of Patent:
`
`5,604,843
`Feb. 18, 1997
`
`[54] METHOD AND SYSTEM FOR INTERFACING
`WITH A COMPUTER OUTPUT DEVICE
`
`[75]
`
`Inventors: Lin F. Shaw, Redmond; Eric J.
`Bidstrup, Carnation; Zhanbing Wu,
`Kent, all of Wash.
`
`[73] Assignee: Microsoft Corporation, Redmond,
`Wash.
`
`[21] Appl. No.: 995,287
`Dec. 23, 1992
`[22] Filed:
`Int. Cl.6
`..................................................... G06K 15/00
`[51]
`[52] U.S. Cl . ............................................. 395/101; 395/114
`[58] Field of Search ..................................... 395/112, 114,
`395/116, 115, 111, 101; 371/11.l
`
`[56]
`
`References Cited
`
`U.S. PATENT DOCUMENTS
`
`5,140,675
`5,146,547
`5,165,014
`5,228,118
`5,268,993
`5,287,434
`5,293,466
`5,337,319
`5,410,641
`
`8/1992 Okada ..................................... 395/114
`9/1992 Beck et al. .............................. 395/116
`11/1992 Vassar ..................................... 395/112
`7/1993 Sasaki ..................................... 395/112
`12/1993 Ikenoue et al .......................... 395/114
`2/1994 Bain et al. .............................. 395/101
`3/1994 Bringmann .............................. 395/114
`8/1994 Furukawa et al. ..................... 371/11.1
`4/1995 Wakabayashi et al. ................. 395/112
`
`Primary Examiner-Raymond J. Bayerl
`Assistant Examiner-Steven P. Sax
`Attorney, Agent, or Firm-Seed and Berry LLP
`
`[57]
`
`ABSTRACT
`
`A computer method and system for configuring device
`driver is provided. In a preferred embodiment, a device
`driver comprises a minidriver associated with -each output
`device and a universal driver. Each minidriver implements a
`plurality of minidriver functions for controlling the output(cid:173)
`ting of data to the output device by invoking functions of the
`universal driver. During execution of a program, the pro(cid:173)
`gram selects an output device and invokes the minidriver
`functions of the minidriver associated with the selected
`output device. An initialization function of each minidriver
`invokes an initialization function of the universal driver
`passing an indication of and attributes of the selected output
`device. Other minidriver functions invoke an analogous
`function of the universal driver passing an indication of the
`selected output device. The initialization function of the
`universal driver processes the passed attributes and stores
`the indication and the processed attributes. Each analogous
`function accesses the stored attributes and performs the
`behavior of the analogous function to effect the controlling
`of the output device.
`
`13 Claims, 9 Drawing Sheets
`
`100
`
`101
`
`Application
`Program
`
`Graphics Device Interface
`
`102
`
`203
`
`203
`
`MiniDriver 1
`
`MiniDriver 2
`
`UniDriver
`
`105
`
`Output
`Device
`
`105
`
`Output
`Device
`
`Petitioners Microsoft Corporation and HP Inc. - Ex. 1010, p. 1
`
`
`
`U.S. Patent
`
`Feb. 18, 1997
`
`Sheet 1 of 9
`
`5,604,843
`100
`
`101
`
`Application
`Program
`
`Graphics Device Interface
`
`102
`
`Device
`Driver 1
`
`103
`
`• • •
`
`Device
`Driver N
`
`103
`
`105
`
`105
`
`Device 1
`
`Device N
`
`Figure 1
`
`Petitioners Microsoft Corporation and HP Inc. - Ex. 1010, p. 2
`
`
`
`U.S. Patent
`
`Feb. 18, 1997
`
`Sheet 2 of 9
`
`5,604,843
`100
`
`101
`
`Application
`Program
`
`Graphics Device Interface
`
`102
`
`203
`
`203
`
`MiniDriver 1
`
`• • •
`
`MiniDriver 2
`
`Uni Driver
`
`Output
`Device
`
`105
`
`•••
`
`105
`
`Output
`Device
`
`Figure 2
`
`Petitioners Microsoft Corporation and HP Inc. - Ex. 1010, p. 3
`
`
`
`,I::;.,. w
`00
`'JI
`~ =
`,I::;.,.
`
`'JI
`
`01
`
`\Cl
`1-1'1
`0
`~
`~
`r;,:i =-
`~
`
`-..,l
`\Cl
`\Cl
`i,-
`~~
`i,-
`
`~
`
`g. .
`
`~ =
`Pl
`~
`•
`rJl
`
`'""""
`
`c •
`
`I J
`
`316
`
`•
`•
`•
`
`model data entry I
`
`resolution entry
`
`315
`~314
`313
`312
`311
`
`file size
`
`heap offset
`
`H&V Master Units
`
`# header entries
`
`ID
`
`310
`
`\. download info entry
`\
`\
`\
`\
`\
`\
`\
`\
`\
`\
`\
`\
`\
`\
`r\
`
`Figure 3A
`
`I
`
`I
`
`-----
`
`HEAP
`
`330~
`
`STRUCTURES
`
`ATTRIBUTE
`
`320-----1
`
`HEADER
`
`310-----1
`
`300
`
`Petitioners Microsoft Corporation and HP Inc. - Ex. 1010, p. 4
`
`
`
`U.S. Patent
`
`Feb. 18, 1997
`
`Sheet 4 of 9
`
`5,604,843
`
`<(
`T""
`N
`C"')
`
`m
`T""
`N
`C"')
`
`T""
`N
`C"')
`
`m
`C"')
`N
`C"')
`
`• • •
`
`• • •
`
`•••
`
`T""
`
`C"')'tE
`
`<( 5
`M\! i------4---+---1
`
`CO
`
`0
`
`• • •
`
`~ .._____,i _ _. _ _._ ____ ________ _.____,
`cu
`.E
`cu
`-
`C:
`C:
`0
`"C
`:.;::::;
`-
`::l
`-?:l ~ 0 ~
`o- cn-
`E s:: Q) s::
`Q)
`.... Q)
`
`"C cu
`0 c~
`:=-0 C:
`
`"C Q)
`
`Ql
`
`r-? e :::s
`.0>
`tJ:
`
`Petitioners Microsoft Corporation and HP Inc. - Ex. 1010, p. 5
`
`
`
`U.S. Patent
`
`Feb. 18, 1997
`
`Sheet 5 of 9
`
`5,604,843
`
`-
`
`-
`
`-
`
`1
`
`•
`
`•
`
`• •
`
`• • •
`
`C Q)
`.Q.~
`-cn-(cid:173)
`.2 L.. 0
`0 Q) e>
`"' a.
`a> m
`c::: a..
`
`Petitioners Microsoft Corporation and HP Inc. - Ex. 1010, p. 6
`
`
`
`U.S. Patent
`
`Feb. 18, 1997
`
`Sheet 6 of 9
`
`5,604,843
`
`Function
`
`Invoke
`Analogous
`Unidriver Function
`
`Figure 4A
`
`Return
`
`Figure4B
`
`Function
`
`Perform
`Device Specific
`Processing
`
`Invoke
`Analogous
`Unidriver Function
`
`Perform
`Device Specific
`Processing
`
`Return
`
`Petitioners Microsoft Corporation and HP Inc. - Ex. 1010, p. 7
`
`
`
`U.S. Patent
`
`Feb. 18, 1997
`
`Sheet 7 of 9
`
`5,604,843
`
`Enable
`
`Retrieve
`Reference to
`GPC Data
`
`Invoke
`Analogous
`Unidriver Function
`
`Perform
`Device Specific
`Processing
`
`Return
`
`Figure 5
`
`Petitioners Microsoft Corporation and HP Inc. - Ex. 1010, p. 8
`
`
`
`U.S. Patent
`
`Feb. 18, 1997
`
`Sheet 8 of 9
`
`5,604,843
`
`601
`602
`603
`604
`·605
`606
`607
`608
`609
`610
`611
`612
`613
`614
`615
`616
`617
`618
`619
`620
`
`DEVICE DATA STRUCTURE
`
`type of device
`
`general flags
`
`master unit data
`
`copy data
`
`font data
`
`handle of device context
`
`handle of minidriver data
`
`paper format
`
`band format
`
`bitmap data
`
`printer state data
`
`clipping/bounding rectangle
`
`resolution data
`
`callback functions
`
`index to model data
`
`command array
`
`spooling data and buffers
`
`banding bitmap
`
`download controls
`
`miscellaneous data
`
`Figure 6
`
`Petitioners Microsoft Corporation and HP Inc. - Ex. 1010, p. 9
`
`
`
`U.S. Patent
`
`Feb. 18, 1997
`
`Sheet 9 of 9
`
`5,604,843
`
`Enable
`(unidriver)
`
`,,
`
`701
`Initialize device
`mode structure
`
`''
`
`702
`Initialize helper
`function dispatch
`table
`
`,,
`
`703
`Set resolution
`data in device
`mode structure
`
`' (
`
`704
`
`Initialize
`paper format
`
`' (
`
`705
`
`Initialize
`callback table
`
`'(
`
`706
`
`Initialize
`printer memory
`available
`
`''
`
`707
`
`Determine
`spot diameter
`
`'(
`
`708
`
`Build font
`map table
`
`' (
`
`709
`Retrieve width
`and height of
`default font
`
`'(
`
`710
`
`Determine
`rectangle fill
`capability
`
`,t
`
`711
`
`Establish
`printer queue
`
`'(
`
`712
`
`Build
`command table
`
`713
`
`'(
`Allocate
`memory
`
`'(
`
`Return
`
`Figure 7
`
`Petitioners Microsoft Corporation and HP Inc. - Ex. 1010, p. 10
`
`
`
`5,604,843
`
`1
`METHOD AND SYSTEM FOR INTERFACING
`WITH A COMPUTER OUTPUT DEVICE
`
`2
`outputting data to a printer. One skilled in the art would
`appreciate that such references also apply to other output
`devices. Each of the functions that must be implemented by
`a device driver is described.
`
`Function
`
`Description
`
`(1)
`
`Initialization
`
`5
`
`10
`
`Control
`
`Disable
`
`TECHNICAL FIELD
`
`This invention relates generally to a computer method and
`system for interfacing with devices and, more specifically, to
`a method and system for implen:ienting device drivers.
`
`BACKGROUND OF THE INVENTION
`
`Computer systems output data to a variety of output
`devices, such as, printers, plotters, and video displays. Each
`device typically has a manufacturer defined device-specific
`protocol for communicating with the device. A computer
`system, under the control of an operating system, uses the
`protocol to communicate with a device. Thus, an operating
`system must know the protocol for each device to which it
`communicates. It would be impractical for an operating
`system developer to provide an interface to every available
`output device. Moreover, it would be impracticable to pro(cid:173)
`vide an interface to output devices that have not yet been
`developed. To overcome these difficulties, operating systems
`interface with devices indirectly through device drivers. The
`operating system developer defines the functionality of the
`operating system/device driver interface. Each manufacturer
`of a device then provides a device driver, which implements
`the operating system/device driver interface that is consis(cid:173)
`tent with the device protocol. The operating system loads the
`device driver and invokes its functions to communicate with
`the device.
`A primary goal of operating systems is to provide an
`application program environment which is output device
`independent. This independence means that an application
`program can output its data to various types of devices
`without modification of the program. For example, an oper(cid:173)
`ating system can redirect output of application program data
`to a display, printer, or file without the application program
`being aware of the redirection.
`FIG. 1 is a block diagram illustrating a prior device driver
`configuration. Computer system 100 comprises application
`program 101, graphics device interface 102, and device
`drivers 103. Each device driver interfaces with a device 105
`that is attached to computer system 100. Application pro(cid:173)
`gram 101 outputs data using functions provided by the
`graphics device interface (GDI) 102, which is typically part
`of an operating system. The GDI effects the output of data
`by invoking functions implemented by the device drivers
`103 in accordance with the operating system/device driver
`interface. The graphics device interface and device drivers
`insulate the application program from the different charac(cid:173)
`teristics of the devices. The GDI provides a variety of
`functions for accessing the devices in a device-independent
`manner.
`The developer of a graphics device interface provides a
`definition of its functionality to the developers of application
`programs. An example of such a graphics device interface is
`described in Programming Windows 3.1 by Charles Petzold,
`published by Microsoft Press. The developer of the graphics
`device interface also specifies the behavior of each function
`that a device driver (the operating system/device driver
`interface) must implement. For example, one graphics
`device interface specifies six categories of functions that
`must be implemented by a device driver: (1) initialization,
`(2) information, (3) output, (4) attribute, (5) mode, and (6)
`escape. In the following, reference is specifically made to
`
`performs device-dependent operations
`such as starting an output job, aborting
`an output job, and processing a new
`band of bitmap data.
`deallocates memory used by the device
`drivers data structures and unloads the
`device driver from memory.
`allocates and initializes memory for a
`data structure containing device
`dependent and device state information.
`signals the device driver that the
`operating system is shutting down.
`
`translates physical colors to logical
`colors and vice versa.
`enumerates the fonts available on the
`device.
`enumerates the pens and brushes that
`are available on the device.
`returns width values for characters in a
`specified printer font.
`
`sets pels on the output device.
`renders text on the output device.
`renders a shape on the output device.
`sets a single pel on the output device.
`sets pels in a single row of the output
`device.
`renders scaled bitmaps on the output
`device.
`
`converts a logical pen, brush, font, etc.
`data structure to a physical pen, brush,
`font, etc. data structure.
`
`displays a dialog box that allows a user
`to select device options such as paper
`size, paper orientation, and output
`quality.
`
`15
`
`Enable
`
`20
`
`25
`
`30
`
`WEP
`
`(2) Information
`
`Colorlnfo
`
`EnumDFonts
`
`EnumObj
`
`DevGetCharWidth
`
`(3) Output
`
`DevBitB!t
`DevExtTextOut
`Output
`Pixel
`ScanLR
`
`StretchB!t
`
`35
`
`(4) Attributes
`
`RealizeObject
`
`(5) Modes
`
`DeviceMode
`
`(6) Escape
`
`40
`
`45
`
`50
`
`QueryEscSupport
`
`SetAbortDoc
`
`StartDoc
`NextBand
`EndDoc
`AbortDoc
`
`specifies whether the output device
`supports a specified escape sequence.
`invokes the abort procedure of an
`application program.
`signals the beginning of an output job.
`outputs a band of bitmap data.
`signals the end of an output job.
`signals the abnormal tennination of an
`output job.
`
`An application program outputs data to a particular device
`55 by first requesting the graphics device interface to create a
`device context. The device context identifies the particular
`device and contains the current state of the device. For
`example, the device context may contain the current font and
`paintbrush information. The graphics device interface pro-
`60 vides the application program with a handle to a created
`device context. Whenever the application program outputs
`data to the particular device, the application program passes
`the handle to the device context. The graphics device
`interface functions use the passed handle to access the
`65 device context.
`When developing a device driver, the developer codes,
`tests, and debugs each device driver function. This process
`
`Petitioners Microsoft Corporation and HP Inc. - Ex. 1010, p. 11
`
`
`
`5,604,843
`
`3
`requires a thorough understanding to the windowing envi(cid:173)
`ronment, the graphics device interface, the device hardware,
`and the device communications protocol. This development
`process is complex, time consuming, and costly.
`
`SUMMARY OF THE INVENTION
`
`5
`
`It is an object of the present invention to provide a method
`and system for configuring device drivers.
`It is another object of the present invention to provide a 10
`method and system for storing data describing device(cid:173)
`specific attributes.
`These and other objects, which will become apparent as
`the invention is more fully described below, are provided by
`a method and system for configuring device driver. In a
`preferred embodiment, a device driver comprises a minid(cid:173)
`river associated with each output device and a universal
`driver. Each minidriver implements a plurality of minidriver
`functions for controlling the outputting of data to the output
`device by invoking functions of the universal driver. During
`execution of a program, the program selects an output device
`and invokes the minidriver functions of the rninidriver
`associated with the selected output device. An initialization
`function of each minidriver invokes an initialization func(cid:173)
`tion of the universal driver passing an indication of and
`attributes of the selected output device. Other minidriver
`functions invoke an analogous function of the universal
`driver passing an indication of the selected output device.
`The initialization function of the uni versa! driver processes
`the passed attributes and stores the indication and the 30
`processed attributes. Each analogous function accesses the
`stored attributes and performs the behavior of the analogous
`function to effect the controlling of the output device.
`
`25
`
`4
`the prior art device drivers 103. Each device 105 has a
`corresponding minidriver 203. Each minidriver implements
`each of the device driver functions and contains data char-
`acterizing the corresponding device. In a preferred embodi(cid:173)
`ment, each device driver function of the minidriver imple(cid:173)
`mentation (except for an initialization function) forwards its
`invocation to an analogous device driver function imple(cid:173)
`mented by the universal driver. The universal driver also
`implements each device driver function. The universal
`driver functions control the interfacing with the destination
`device in accordance with the device characterization data,
`passed parameters, and device state.
`The application program 101 initiates the output of data
`by invoking a GDI function of the graphics device interface
`15 102 and specifying a destination device. The GDI function
`invokes the device driver functions of the minidriver 203
`corresponding to the destination device. In a preferred
`embodiment, an initialization device driver function of each
`rninidriver passes device characterization data to the uni-
`20 versa! driver. The universal driver stores this device char(cid:173)
`acterization data (preferably within a device context) to be
`used by the other device driver functions of the universal
`driver. The other device driver functions of the minidriver
`203 forward their invocation to the universal driver by
`invoking an analogous function of the universal driver.
`MINIDRJVER
`FIG. 4A is a flow diagram illustrating a typical device
`driver function implemented by a minidriver. The function
`forwards the invocation to the analogous universal driver
`(unidriver) function. The device driver function preferably
`passes the same parameters it receives to the device driver
`function of the universal driver. FIG. 4B is a flow diagram
`illustrating an alternate embodiment of a device driver
`function implemented by a minidriver. In this alternate
`35 embodiment, the device driver function, in addition to
`forwarding the invocation, performs a device-specific pro(cid:173)
`cess before and after forwarding the invocation.
`FIG. 5 is a flow diagram of a typical initialization device
`driver function implemented by the minidriver. This initial-
`ization function reads the device characterization data,
`stores the device characterization data in a format expected
`by the uni versa! driver, initializes the device context data for
`the graphics device interface, initializes device state infor-
`mation, and invokes the analogous universal driver function.
`In the following, reference is made to printer character-
`ization data as a specific example of device characterization
`data. One skilled in the art would appreciate that the
`concepts described are applicable to other types of devices.
`PRlNTER CHARACTERIZATION DATA OVERVIEW
`Printer characterization data includes device data and font
`data. The device data describes the attributes of a printer,
`except for the font data. The device data is organized into
`data structures of related attributes so that similar printer
`models can share data structures. A printer model can be
`55 described as a collection of attributes. The device data
`contains
`the printer control commands (e.g., escape
`sequences). The printer characterization data is described
`below in detail in the section entitled "Printer Characteriza-
`tion Data Details."
`The font data describes the attributes of a font. A font is
`defined as a pitch, point, symbol set, and typeface combi(cid:173)
`nation. Each font data structure describes a single font. The
`device data contains references to the font data structures
`corresponding to the fonts supported by the printer.
`A device data file contains a description of one or more
`printers. Each printer is described by a collection of various
`attribute data structures. The attributes encompass aspects of
`
`BRIEF DESCRIPTION OF THE DRAWINGS
`FIG. 1 is a block diagram illustrating a prior device driver
`configuration.
`FIG. 2 is a block diagram illustrating a preferred device
`driver configuration of the present invention.
`FIGS. 3A, 3B, and 3C are block diagrams illustrating the
`layout of device data in a preferred embodiment.
`FIG. 4A is a flow diagram illustrating a typical device
`driver function implemented by a minidriver.
`FIG. 4B is a flow diagram illustrating an alternate
`embodiment of a device driver function implemented by a
`minidriver.
`FIG. 5 is a flow diagram of a typical initialization device
`driver function implemented by the minidriver.
`FIG. 6 is a block diagram illustrating the device data
`structure.
`FIG. 7 is a flow diagram of the Enable function of the
`universal driver.
`
`DETAILED DESCRIPTION OF THE
`INVENTION
`
`40
`
`45
`
`50
`
`The present invention provides a method and system for
`implementing device drivers. FIG. 2 is a block diagram 60
`illustrating a preferred device driver configuration of the
`present invention. Computer system 100 includes a central
`processing unit, computer memory, and input and output
`devices. The computer system executes application program
`101, graphics device interface 102, minidrivers 203, and 65
`universal driver 204. The minidrivers and universal driver
`combine to preferably provide the same functionality and
`
`Petitioners Microsoft Corporation and HP Inc. - Ex. 1010, p. 12
`
`
`
`5,604,843
`
`5
`selecting a paper size and source, rendering text and raster
`data onto a page, ejecting pages, and selecting an output bin.
`The device data file contains a header data structure that
`describes the size, count, and offsets to each of the other
`structures in the file. The device data file contains a MOD-
`ELDATA structure for each printer model described. Each
`MODELDATA structure describes the capabilities and
`physical attributes of a printer model. Each MODELDATA
`structure references other attribute structures in the device
`data file. All printer commands, escape codes, and other
`variable length data are stored in a HEAP section of the
`device data file. Each printer control command is described
`in a Command Descriptor structure, and the location of each
`Command Descriptor is referenced from an attribute struc(cid:173)
`ture as an offset from the beginning of the HEAP section.
`The following is a brief description of the types of attribute
`structures used to characterize various attributes of a printer.
`
`Structure
`
`Description
`
`MODELDATA
`
`RESOLUTION
`
`PAPERSIZE
`
`PAPER QUALITY
`
`PAPERSOURCE
`PAPERDEST
`
`TEXTQUALITY
`
`COMPRESSMODE
`
`FONTCART
`PAGECONTROL
`
`CURSORMOVE
`
`FONTSIMULATION
`
`DEVCOLOR
`
`RECTFILL
`
`DOWNLOADINFO
`
`describes all characteristics of a printer
`model and contains data describing which
`of the attribute structures are supported
`by the printer model.
`corresponds to a single raster graphics
`resolution of the printer and contains all
`the information and commands needed to
`render raster graphics data
`describes a single paper size, unprintable
`regions, and commands required to
`select it.
`describes the types of paper or other
`media that a device may render an image
`on. (This is typically used to describe
`attributes such as plain paper,
`transparencies, coated paper, etc.)
`describes a paper feed method and bin.
`describes a paper output bin and method,
`and associates a string describing a single
`bin and method with a printer command.
`describes a text quality attribute such as
`draft, near letter quality, or letter quality,
`and associates a descriptive string with a
`printer command.
`describes a data compression mode and
`printer commands.
`describes a single font cartridge.
`contains printer commands needed to
`control the printer on a per print job
`basis, such as printer commands to
`initialize the printer and select orientation,
`and indicates the order that commands
`should be sent to printer.
`describes printer commands, methods, and
`limitations for moving the cursor (current
`active position) around a page.
`describes a collection of printer
`commands to enable and disable font
`attributes such as bold, italic, and
`underline.
`describes information needed to print
`color graphics and text.
`describes information needed to print
`filled rectangles.
`describes the commands and methods used
`to download fonts to the printer.
`
`FIGS. 3A, 3B, and 3C are block diagrams illustrating the
`layout of device data file in a preferred embodiment. The
`device data file 300 comprises header data 310, attribute
`structures 320, and heap 330. The header data 310 contains
`an identification field 311, number of entries field 312,
`horizontal and vertical master units field 313, heap offset
`field 314, file size field 315, and header array 316. The
`identification field 311 contains an indication that the file is
`a device data file. The number of entries field 312 indicates
`
`5
`
`15
`
`25
`
`6
`the number of entries in the header array 316. The horizontal
`and vertical master units field 313 are described below. The
`heap offset field 314 contains the offset from the start of the
`device data file to the heap 330. The file size field 315
`contains the size of the device data file 300. The header array
`316 contains an entry for each type of attribute structure.
`Each header array entry contains a length field 316A, a count
`field 316B, and an offset field 316C. The length field 316A
`contains the length in bytes of the corresponding type of
`10 attribute structure. The count field 316B contains the number
`of different attribute structures for the corresponding type of
`attribute. The offset field 316C contains the offset within the
`device data file 300 of the array of corresponding attribute
`structures. The attribute arrays 321, 322, and 323 are stored
`in the attribute structures 320. Each attribute array contains
`an entry for each different description of an attribute type.
`Each printer model defined by the device data file has a
`corresponding entry in the MODELDATA attribute array.
`The MODELDATA structure 321A contains model specific
`20 data including an array of multiple attributes and an array of
`single attributes that describe the printer model. Each entry
`in the multiple attribute array is an offset within the heap 330
`of a list of indexes for the associated multiple attribute data
`structures. Each entry in the single attribute array is an index
`into the corresponding attribute array.
`UNIVERSAL DRIVER
`The universal driver provides an implementation for each
`of the device driver functions. The universal driver functions
`control the interfacing with the destination device in accor-
`30 dance with the printer characterization data, passed param(cid:173)
`eters, and device state. In a preferred embodiment the
`Enable function of the universal driver receives a reference
`to the printer characterization data of a minidriver. The
`Enable function initializes a device data structure which
`35 contains data derived from the printer characterization data
`stored in a format for efficient access and contains the
`current state of the printer. The device data structure is stored
`as part of the device context. Each of the other functions of
`the universal driver accesses the device data structure when
`40 outputting data to the printer.
`FIG. 7 is a flow diagram of the Enable function of the
`universal driver. This function is invoked by each minidriver
`when an application wishes to create a new printing surface
`or context. This function initializes the device data structure.
`In step 701, the function initializes the device mode data
`based on information provided by the invoking minidriver.
`If the invoking minidriver does not provide certain infor(cid:173)
`mation, then the function retrieves default information spe(cid:173)
`cific to the printer and initializes the device mode data
`50 accordingly. In step 702, the function initializes a helper
`function dispatch table. The helper function dispatch table
`contains an array of pointers to functions for drawing into
`banding bitmaps. A banding bitmap represents a portion of
`the printing surface. If a bit in the bitmap is set, then the
`55 corresponding dot on the printer is printed. Different sets of
`helper functions may be selected based on the number of
`colors in the printer. The Enable function initializes the
`helper function table with the appropriate helper functions.
`The universal driver uses the function pointers stored in the
`60 helper function table to draw to the banding bitmap. In step
`703, the function initializes resolution information. For
`example, the resolution data includes the number of pels per
`inch. In step 704, the function initializes the paper format
`information of the device data structure. The information is
`initialized based on the paper size, model data, resolution,
`paper source, and device mode data in the printer charac(cid:173)
`terization data. In step 705, the function initializes the
`
`45
`
`65
`
`Petitioners Microsoft Corporation and HP Inc. - Ex. 1010, p. 13
`
`
`
`5,604,843
`
`7
`call-back table. The universal driver invokes a call-back
`function of the minidriver to perform minidriver specific
`processing. In step 706, the function determines the amount
`of memory available in the printer based on the model data.
`This information is used to avoid out-of-memory errors
`when downloading fonts and graphic bitmaps to printers. In
`step 707, the function determines the spot diameter (a
`measurement of how closely the printed dots overlap each
`other) based on the information in the resolution data. The
`spot diameter is used to adjust the intensity of the output
`based on the spot size of the ink. In step 708, the function
`builds a table of all the printer fonts available based on the
`information in the model data and the printer font metric
`resource provided by the minidriver. This data is used by the
`function RealizeObject to convert a logical font request to a
`physical font. This conversion is called font mapping. The
`use of a table font obviates a need to access the disk or
`minidriver to perform font mapping. The function also
`initializes commands needed to select and deselect each
`font. In step 709, the function retrieves the width and height 20
`of the principal font and stores it in the device data structure.
`In step 710, the function determines whether the printer
`supports a rectangle fill capability and initializes the device
`data structure accordingly. In step 711, the function estab(cid:173)
`lishes a priority queue for printers that must be accessed 25
`serially, such as dot matrix printers. This queue is used to
`sort text requests. In step 712, the function initializes a
`command table. The command table is an array of offsets to
`command descriptors. These command descriptors specify
`the commands that are to be sent to the printer to enable a 30
`certain feature. For example, a certain command descriptor
`would specify the codes which cause the printer to enable
`underlining, and another command descriptor would cause
`the printer to disable underlining. In step 713, the function
`allocates memory for font download information. The func- 35
`tion then returns.
`Each of the other device driver functions that are imple(cid:173)
`mented by the universal driver performs the behavior of the
`function using the data supplied by the invoking minidriver
`and stored in the device data structure.
`DEVICE DATA STRUCTURE OVERVIEW
`FIG. 6 is a block diagram illustrating the device data
`structure. The device data structure is described below in
`detail in the section entitled "Device Data Structure Detail."
`The device data structure contains information necessary to
`control the output of information to a designated printer. The
`device data structure includes the following information.
`Type of device data 601 indicates the type of printer (e.g.,
`laser). General flags 602 contain various flags relating to
`paper source, rectangle fill, and text capabilities. The master
`unit data 603 contains the least common multiplier of all
`resolutions and printer command units. The copy data 604
`contains information relating to number of copies of a
`document requested and number of copies allowed. Font
`data 606 includes the count of fonts available, default font,
`and a reference to a font map. The handle of device context
`data 606 contains a reference to the device context associ(cid:173)
`ated with the device data structure. The handle of the
`minidriver data 607 contains a reference to the generic
`printer characterization data for this data structure. The
`paper format data 608 contains information relating to the
`format of the paper such as physical paper size, printable
`area, margins, and current paper bin. The band format data
`609 contains information relating to the banding process.
`The banding information includes the height and the width
`of the band. The bitmap data 610 contains a buffer used by
`the universal driver to generate a shadow bitmap based on
`
`8
`the amount of memory available in the system and the
`resolution data. The shadow bitmap is downloaded to the
`printer to effect output. The printer state data 611 contains
`the current state of the printer, such as, current cursor
`5 position, last font selected, and last color selected. The
`clipping/bounding rectangle data 612 defines the clipping
`and bounding rectangles. The resolution data 613 defines the
`resolution of the printer. The call-back functions table 6