ImagerInterpressPreamble.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Doug Wyatt, October 18, 1985 6:21:01 pm PDT
Michael Plass, April 8, 1986 12:33:42 pm PST
Imager clients can use this interface to create Interpress masters.
DIRECTORY
Imager USING [Color, ColorOperator, Context, Font, PixelArray, Transformation],
IO USING [STREAM],
Rope USING [ROPE];
ImagerInterpressPreamble: CEDAR DEFINITIONS
~ BEGIN
Ref: TYPE ~ REF Rep;
Create:
PROC [fileName: Rope.
ROPE, header: Rope.
ROPE ←
NIL]
RETURNS [Ref];
Creates a file with the given name.
If header=NIL, a header of "Interpress/Xerox/3.0 " is supplied.
CreateFromStream:
PROC [stream:
IO.
STREAM, header: Rope.
ROPE]
RETURNS [Ref];
Returns a handle aimed at stream; header is inserted verbatim at beginning.
DeclareFont:
PROC [self: Ref, font: Imager.Font];
Includes a Font in the preamble.
DeclareColor:
PROC [self: Ref, color: Imager.Color];
Includes a Color in the preamble.
DeclarePixelArray:
PROC [self: Ref, pixelArray: Imager.PixelArray];
Includes a PixelArray in the preamble.
DeclareColorOperator:
PROC [self: Ref, colorOperator: Imager.ColorOperator];
Includes a ColorOperator in the preamble.
DeclareIdentifier:
PROC [self: Ref, identifier:
ATOM];
Includes an identifier in the preamble.
VectorProc:
TYPE ~
PROC [
putIdentifier: PROC [ATOM],
putInt: PROC [INT],
putReal: PROC [REAL],
putTransformation: PROC [Imager.Transformation],
putVector: PROC [vecProc: PROC],
putImageOp: PROC [action: PROC [Imager.Context]]
];
PushVector:
PROC [self: Ref, vectorProc: VectorProc];
Pushes a vector on the stack created in the preamble.
vectorProc should not call PushVector, but should use its putVector proc to create any nested vectors.
DoPage:
PROC [self: Ref, action:
PROC [Imager.Context], scale:
REAL ← 1.0];
Calls action to generate the next page.
Close:
PROC [self: Ref];
Finishes the master and closes the underlying stream.
Finish:
PROC [self: Ref];
Finishes the master without closing the underlying stream.
The following provide hooks for getting a context that behaves in the way that ImagerPress and ImagerViewer behave:
GetContext:
PROC [self: Ref]
RETURNS [Imager.Context];
This procedure creates a context into which the imager calls do their actions. You must call NewPage with last TRUE for the last page and before the Master is closed.
NewPage:
PROC [self: Ref, context: Imager.Context, last:
BOOL]
;
This causes a new page to be written into the master. It must be called with last TRUE on the last page of the master.
END.