DIRECTORY Rope, PDFileFormat; PDFileWriter: CEDAR DEFINITIONS = BEGIN PDState: TYPE = REF PDStateRec; PDStateRec: TYPE; DeviceCode: TYPE = PDFileFormat.DeviceCode; Toner: TYPE = PDFileFormat.Toner; LoadReference: TYPE = LONG CARDINAL; TFlag: TYPE = {opaque, transparent}; Create: PROC [fileName: Rope.ROPE, deviceCode: DeviceCode, sResolution, fResolution, imageSSize, imageFSize: CARDINAL, nColors: NAT _ 1, bandSSize: CARDINAL _ 16, copies: CARDINAL _ 1, leftOverMode: BOOLEAN _ TRUE, priorityImportant: BOOLEAN _ TRUE] RETURNS [pdState: PDState]; DeliverRunGroupProc: TYPE = PROC [CaptureRunProc]; CaptureRunProc: TYPE = PROC [sMin, fMin, fSize: CARDINAL]; DeliverSampleArrayProc: TYPE = PROC [CaptureScanLineProc]; CaptureScanLineProc: TYPE = PROC [LONG POINTER]; GetBounds: PROC [pdState: PDState] RETURNS [sMax, fMax: CARDINAL]; DoForEachToner: PROC [pdState: PDState, proc: PROC[Toner]]; SetColorInk: PROC [pdState: PDState, toner: Toner]; SetColorClear: PROC [pdState: PDState, toner: Toner]; SetColorTile: PROC [pdState: PDState, toner: Toner, tileRef: LoadReference, tFlag: TFlag _ opaque]; MaskRectangle: PROC [pdState: PDState, sMin, fMin: CARDINAL, sSize, fSize: CARDINAL]; MaskTrapezoid: PROC [pdState: PDState, sMin, sSize: CARDINAL, fMin, fSize: CARDINAL, fMinLast, fSizeLast: CARDINAL]; MaskSamplesRef: PROC [pdState: PDState, samplesRef: LoadReference, sMin, fMin: CARDINAL]; MaskSamples: PROC [pdState: PDState, sMin, fMin: CARDINAL, sSize, fSize: CARDINAL, deliverProc: DeliverSampleArrayProc]; MaskRunGroupRef: PROC [pdState: PDState, runGroupRef: LoadReference, sMin, fMin: CARDINAL]; MaskRunGroup: PROC [pdState: PDState, deliverProc: DeliverRunGroupProc]; ColorSamples: PROC [pdState: PDState, toner: Toner, sMin, fMin: CARDINAL, sSize, fSize: CARDINAL, deliverProc: DeliverSampleArrayProc, tFlag: TFlag _ opaque]; RemainingLoadSize: PROC [pdState: PDState] RETURNS [words: INT]; SetLoadLocation: PROC [pdState: PDState, loadReference: LoadReference]; LoadRunGroup: PROC [pdState: PDState, deliverProc: DeliverRunGroupProc] RETURNS [loadReference: LoadReference]; LoadSampleArray: PROC [pdState: PDState, sSize, fSize: CARDINAL, deliverProc: DeliverSampleArrayProc] RETURNS [loadReference: LoadReference]; LoadContiguousSampleArray: PROC [pdState: PDState, sSize, fSize: CARDINAL, bitsPtr: LONG POINTER] RETURNS [loadReference: LoadReference]; LoadColorTile: PROC [pdState: PDState, phase: CARDINAL, sMin, fMin: CARDINAL, sSize, fSize: CARDINAL, deliverProc: DeliverSampleArrayProc] RETURNS [loadReference: LoadReference]; LoadContiguousColorTile: PROC [pdState: PDState, phase: CARDINAL, sMin, fMin: CARDINAL, sSize, fSize: CARDINAL, bitsPtr: LONG POINTER] RETURNS [loadReference: LoadReference]; EndPage: PROC [pdState: PDState]; FlushPage: PROC [pdState: PDState]; Close: PROC [pdState: PDState]; END. þPDFileWriter.mesa Michael Plass, April 29, 1983 11:00 am This interface provides a way of creating a pd (printer-dependent) image file. Creating a new PD file. Callback mechanisms for passing variable length items. The procedures PutColorSamples, PutMaskSamples, LoadSampleArray, PutMaskRunGroup, and LoadRunGroup require a variable amount of data, perhaps a very large amount. To maintain flexibility, a callback mechanism is used to pass the data into these routines. A PDFileWriter routine takes a delivery routine as a parameter; when it needs the data, it calls the delivery routine, passing it a capture routine to call with each unit of data. Note that it is inadvisable for the delivery routine to make any use of the PDState while it has control. Extracting information from the handle. Calls the proc for each toner being used. Setting the current color. Imaging operators. Load management. This is a very low-level facility that can be used by clients to implement load management schemes that are more sophisticated than the default, which always appends new things to the end of the load. The client is responsible for keeping track of which parts of the load it is OK to re-use. This is a convenience routine, for use when the callback mechanism seems like overkill. The scan lines are assumed to be stored contiguously, with each one padded out to a word. Another convenience routine. Terminators. In case the client needs to remove a partially-written page. Note that changes to the load are not flushed. Ê+˜Jšœ™J™&J™NIunitšÏk œ˜šœ˜'Jšœ œœ ˜Jšœ œ˜Jšœ œ˜+Jšœœ˜!Jšœœœœ˜$Jšœœ˜$head3šœ™KšÏnœœœLœ œœœœœœœœ˜•—™6JšœŸ™ŸKšžœœœ˜2Jšžœœœœ˜:Kšžœœœ˜:Jš žœœœœœ˜0—™'Kšž œœœœ˜Bšžœœœ ˜;J™)——šœ™Kšž œœ"˜3Kšž œœ"˜5Kšž œœQ˜c—šœ™Kšž œœ œœ˜UKš ž œœ!œœœ˜tKšžœœ;œ˜YKš ž œœœœœ'˜xKšžœœ<œ˜[Kšž œœ6˜HKš ž œœ&œœœ>˜ž—šœ™Kšžœœœ œ˜@šžœœ2˜GJšœ¤™¤—Kšž œœ6œ ˜oKšžœœ"œ'œ ˜š žœœ"œ œœœ ˜‰Jšœ²™²—Kš ž œœœœœ'œ ˜²šžœœœœœ œœœ ˜®Jšœ™——™ Kšžœœ˜!šž œœ˜#J™l—Kšžœœ˜—Kšœ˜——…— 7