--Griffin encoding types
--m.stone November 2, 1979  6:26 PM

DIRECTORY
	AltoDefs: FROM "AltoDefs" USING[BYTE],
	PointDefs: FROM "PointDefs";

EncodingDefs: DEFINITIONS   =
BEGIN
ChainEncoding: TYPE = RECORD
	[link: POINTER TO ChainEncoding,
	linknumber: [0..255],
	tl,br: PointDefs.ScrPt,	--bounding box
	p0: PointDefs.ScrPt,		--starting point
	octants: DESCRIPTOR FOR PACKED ARRAY OF AltoDefs.BYTE,
	bits: ARRAY [0..3] OF CARDINAL];


LongRun: TYPE = RECORD [lx,dx: INTEGER];
ShortRun: TYPE = RECORD [lx,dx: AltoDefs.BYTE];
AreaEncoding: TYPE = RECORD
	[link: POINTER TO AreaEncoding,
	tl,br: PointDefs.ScrPt,		--bounding box. tl is origin
	codes: SELECT rep: * FROM	--could be overlaid, except would like to expand some day
		shortrun => [runs: DESCRIPTOR FOR ARRAY OF ShortRun],
		longrun => [runs: DESCRIPTOR FOR ARRAY OF LongRun],
		ENDCASE
	];

--implemented by encoding
AddChainPoint: PROCEDURE[PointDefs.ScrPt];
AddChainLine: PUBLIC PROCEDURE[PointDefs.ScrPt];
MakeChainEncoding: PROCEDURE RETURNS[POINTER TO ChainEncoding];
PlotChainChunk:  PROCEDURE
	[encoding: POINTER TO ChainEncoding,PlotDot: PROCEDURE[PointDefs.ScrPt] ];
DeleteChainEncoding: PROCEDURE[POINTER TO ChainEncoding];

MakeAreaEncoding: PROCEDURE[POINTER TO ChainEncoding]  
	RETURNS[POINTER TO AreaEncoding];
PlotAreaChunk: PUBLIC PROCEDURE[encoding: POINTER TO AreaEncoding,
	HLine: PROCEDURE[y,lx,dx: INTEGER] ];
DeleteAreaEncoding: PROCEDURE[POINTER TO AreaEncoding];

END.