GriffinGridImpl.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Maureen Stone July 4, 1985 1:41:30 pm PDT
DIRECTORY
PointDefs USING [ScrPt, X, Y, ScrToObj, ScrValToObjVal],
ObjectDefs USING [StartObject, Object],
RefreshDefs USING [EraseAndSave, MarkObject, RestoreScreen],
GriffinGrid;
GriffinGridImpl: CEDAR PROGRAM
IMPORTS ObjectDefs, PointDefs, RefreshDefs
EXPORTS GriffinGrid
~ BEGIN
X: NAT = PointDefs.X;
Y: NAT = PointDefs.Y;
Object: TYPE = ObjectDefs.Object;
gridX: INTEGER ← 8; gridY: INTEGER ← 8;
hgrid, vgrid: REF token Object; --global handles to the grid (lazy, lazy)
Grid: PUBLIC PROCEDURE[pt: PointDefs.ScrPt] RETURNS[PointDefs.ScrPt] = BEGIN
IF NOT hgrid.visible THEN RETURN[pt] ELSE RETURN[GridInternal[pt]];
END;
GridInternal: PROC[pt: PointDefs.ScrPt] RETURNS[PointDefs.ScrPt] = {
will be unconvincing if grid < 2;
dx,dy: INTEGER;
dx ← pt[X] MOD gridX;
pt[X] ← pt[X]-dx;
IF dx > gridX/2 THEN pt[X] ← pt[X] +gridX;
dy ← pt[Y] MOD gridY;
pt[Y] ← pt[Y]-dy;
IF dy > gridY/2 THEN pt[Y] ← pt[Y] +gridY;
RETURN[pt];
};
Set visible flags in object lis
GridOn: PUBLIC PROC = {
hgrid.visible ← vgrid.visible ← TRUE;
RefreshDefs.MarkObject[hgrid];
RefreshDefs.MarkObject[vgrid];
RefreshDefs.RestoreScreen[];
};
GridOff: PUBLIC PROC = {
hgrid.visible ← vgrid.visible ← FALSE;
RefreshDefs.EraseAndSave[hgrid];
RefreshDefs.EraseAndSave[vgrid];
RefreshDefs.RestoreScreen[];
};
Initialize: PUBLIC PROC = {
Create H and V grid Objects in object list. Make invisible
598, 711 over 2. Values from before, or should we use 608 by 808?
center: PointDefs.ScrPt ← GridInternal[[299, 356]];
hgrid ← NARROW[ObjectDefs.StartObject[token]];
hgrid.tokenType ← hgrid;
vgrid ← NARROW[ObjectDefs.StartObject[token]];
vgrid.tokenType ← vgrid;
hgrid.p0 ← vgrid.p0 ← PointDefs.ScrToObj[center];
hgrid.tl ← [0,center[Y]+2];
hgrid.br ← [1024, center[Y]-2];
vgrid.tl ← [center[X]-2,1024];
vgrid.br ← [center[X]+2, 0];
hgrid.visible ← vgrid.visible ← FALSE;
hgrid.validEncoding ← vgrid.validEncoding ← TRUE;
};
MoveGrid: PUBLIC PROCEDURE[grid: REF token Object, dx,dy: INT] = {
IF grid.tokenType=vgrid THEN {
grid.tl[X] ← grid.tl[X]+dx;
grid.br[X] ← grid.br[X]+dx;
grid.p0[X] ← grid.p0[X]+PointDefs.ScrValToObjVal[dx]
}
ELSE {
grid.tl[Y] ← grid.tl[Y]+dy;
grid.br[Y] ← grid.br[Y]+dy;
grid.p0[Y] ← grid.p0[Y]+PointDefs.ScrValToObjVal[dy]
}
};
END.