ColorVersatec.mesa
lives on /indigo/chipndale/colorversatec/...
E. McCreight and J. Gasbarro, January 24, 1984 1:17 pm
DIRECTORY
Process,
Rope;
ColorVersatec: CEDAR DEFINITIONS =
BEGIN
PlotId: TYPE = INT;
PlotterFunction: TYPE = {FirstOfMultiPass, MidOfMultiPass, SinglePass};
Color: TYPE = {black, cyan, magenta, yellow};
blue: Color = cyan;
red: Color = magenta;
maxWidth: INT = 8400; -- 42 inches x 200 pixels per inch
StartPass: PROC [ id: PlotId, color: Color, function: PlotterFunction, lengthInScanLines: INT ← 0,
width: INT ← maxWidth, timeout: Process.Seconds ← 300 ] RETURNS [ newId: PlotId, bandHeight: [1..256] ];
StippleIndex: TYPE = [0..31];
HLine: TYPE = [0..255];
Stipples: TYPE = ARRAY StippleIndex OF PACKED ARRAY [0..7] OF HLine;
SetStipples: PROC [id: PlotId, stipples: Stipples];
RectDesc: TYPE = RECORD [
[x: 0, y: 0] is the upper left corner of a band, viewed as it rises out of the plotter. x increases rightward; y increases downward. The intervals xMin..xMax and yMin..yMax include the endpoints. The server keeps no leftover lists, so every rectangle in a band must be sent, even if it is an extension of one in a previous band.
xMin, xMax: NAT,
yMin, yMax: [0..255],
stipple: StippleIndex
];
OrBlock: TYPE = RECORD [
lastInBand: BOOLFALSE,
nRects: NAT,
rects: SEQUENCE maxRects: [0..100] OF RectDesc
];
OrBlockRef: TYPE = REF OrBlock;
OrBand: PROC [ id: PlotId, block: OrBlockRef ];
OliverByte: TYPE = RECORD [
repeats: [1..16],
pattern: PACKED ARRAY [0..3] OF BOOL
];
OliverScanLine: TYPE = RECORD [
nBytes: NAT,
bytes: PACKED SEQUENCE maxBytes: NAT OF OliverByte
];
OliverScanLineRef: TYPE = REF OliverScanLine;
PlotOliverScanLine: PROC [ id: PlotId, line: OliverScanLineRef ];
BasicScanLine: TYPE = RECORD [
width: NAT,
bits: PACKED SEQUENCE maxWidth: NAT OF BOOL
];
BasicScanLineRef: TYPE = REF BasicScanLine;
PlotScanLine: PROC [ id: PlotId, line: BasicScanLineRef ];
ResetTimeout, EndPlot: PROC [ id: PlotId ];
Failed: ERROR [reason: Rope.ROPE];
END.