-- TexGlueDefs.Mesa
-- definitions related to glue
-- last written by Doug Wyatt, September 19, 1979 4:49 PM
DIRECTORY
TexDefs: FROM "TexDefs" USING [Dimn, Penalty];
TexGlueDefs: DEFINITIONS =
BEGIN OPEN TexDefs;
FlexOrder: TYPE = {regular, lowerfill, fill};
FlexVal: TYPE = Dimn;
maxFlexVal: Dimn=LAST[Dimn];
FlexDir: TYPE = {str,shr}; -- flex direction: stretch or shrink
-- stretch or shrink component of glue
Flex: TYPE = RECORD
[
order: FlexOrder, -- "order" of stretch/shrinkability
val: FlexVal
];
zeroFlex: Flex = [order: regular, val: 0];
FlexPair: TYPE = ARRAY FlexDir OF Flex;
FlexPairPtr: TYPE = POINTER TO FlexPair;
FlexVec: TYPE = ARRAY FlexOrder OF FlexVal;
FlexVecPtr: TYPE = POINTER TO FlexVec;
FlexSums: TYPE = ARRAY FlexDir OF FlexVec;
FlexSumsPtr: TYPE = POINTER TO FlexSums;
ClearFlexSums: PROCEDURE[sums: FlexSumsPtr];
SumFlex: PROCEDURE[glue: GluePtr, sums: FlexSumsPtr];
DominantFlex: PROCEDURE[vec: FlexVecPtr] RETURNS[Flex];
RefCount: TYPE = CARDINAL;
infRefs: RefCount = LAST[CARDINAL]; -- "infinite" reference count
GlueSpec: TYPE = RECORD
[
refs: RefCount, -- reference count
space: Dimn, -- natural width
flex: FlexPair -- stretchability and shrinkability
];
GluePtr: TYPE = POINTER TO GlueSpec;
MakeGlue: PROCEDURE RETURNS[GluePtr]; -- allocate and initialize a GlueSpec
AddGlueLink: PROCEDURE[GluePtr]; -- increment reference count
DelGlueLink: PROCEDURE[GluePtr]; -- decrement reference count, free if zero
GlueType: TYPE = {zero, fill, fil, filneg, lowerfill, skip};
CommonGlueType: TYPE = GlueType[zero..lowerfill];
CommonGlue: PROCEDURE[CommonGlueType] RETURNS[GluePtr];
GlueSet: TYPE = RECORD
[
dir: FlexDir,
order: FlexOrder, -- order of flex to which glueset applies
num: Dimn,
den: FlexVal
];
-- the glueset value is a rational number, num/den
zeroGlueSet: GlueSet = [dir: str, order: fill, num: 0, den: 1];
Overfull: SIGNAL[excess: Dimn];
SetGlue: PROCEDURE[dir: FlexDir, delta: Dimn, sums: FlexSumsPtr]
RETURNS[GlueSet];
GluePenalty: PROCEDURE[GlueSet] RETURNS[Penalty];
FixGlue: PROCEDURE[glue: GluePtr, set: GlueSet] RETURNS[Dimn];
TexGlue: PROGRAM;
END.