--JaM test for GFigToJaM module
--Written by M.Stone
--Last changed by M.Stone 26-Feb-82 16:20:18
DIRECTORY
GriffinFig,
ConvertUnsafe USING [ToRope],
ReadGriffin,
JaMFnsDefs,
TJaMGraphics USING [Painter],
Graphics USING [Save,Translate,Rotate,Scale,Context],
Cubic USING[Bezier],
Vector USING[Vec,Sub];
JaMGF2J: PROGRAM IMPORTS JaMFnsDefs, GriffinFig, ReadGriffin, ConvertUnsafe, Graphics, TJaMGraphics, Vector=
BEGIN OPEN JaMFnsDefs;
GFNewFile: PROC = {
s: STRING ← [20];
PopString[s];
GriffinFig.NewFile[ConvertUnsafe.ToRope[s]];
};
GFCloseFile: PROC = {
GriffinFig.CloseFile[];
};
GFReadFile: PROC = {
s: STRING ← [20];
view: INTEGER ← PopInteger[];
PopString[s];
ReadGriffin.ReadFile[ConvertUnsafe.ToRope[s], (SELECT view FROM
0 => main,
1 => alternate,
3 => both,
ENDCASE => main)];
};
GFColor: PROC = {
h,s,b,t,id: INTEGER;
t ← PopInteger[];
b ← PopInteger[];
s ← PopInteger[];
h ← PopInteger[];
id ← GriffinFig.Color[h,s,b,t];
PushInteger[id];
};
GFFont: PROC = {
or: REAL ← GetReal[];
name: STRING ← [20];
id: INTEGER;
PopString [name];
id ← GriffinFig.Font[ConvertUnsafe.ToRope[name],or];
PushInteger[id];
};
GFLineStyle: PROC = {
w: REAL ← GetReal[];
id,color: INTEGER;
color ← PopInteger[];
id ← GriffinFig.LineStyle[color,w];
PushInteger[id];
};
GFFillStyle: PROC = {
id,color: INTEGER;
color ← PopInteger[];
id ← GriffinFig.FillStyle[color];
PushInteger[id];
};
GFTextStyle: PROC = {
id,color,font: INTEGER;
font ← PopInteger[];
color ← PopInteger[];
id ← GriffinFig.TextStyle[color,font];
PushInteger[id];
};
GFStartPath: PROC = {
GriffinFig.StartPath[];
};
GFEnterPoint: PROC = {
p: Vector.Vec ← GetPoint[];
GriffinFig.EnterPoint[p];
};
GFEnterCubic: PROC = {
c: Cubic.Bezier;
c.b0 ← GetPoint[];
c.b1 ← GetPoint[];
c.b2 ← GetPoint[];
c.b3 ← GetPoint[];
GriffinFig.EnterCubic[c];
};
GFNewBoundary: PROC = {
GriffinFig.NewBoundary[];
};
GFEndPath: PROC = {
id: INTEGER ← GriffinFig.EndPath[];
PushInteger[id];
};
GFLineObject: PROC = {
style,path,id: INTEGER;
path ← PopInteger[];
style ← PopInteger[];
id ← GriffinFig.LineObject[style,path];
PushInteger[id];
};
GFAreaObject: PROC = {
line,fill,path,id: INTEGER;
path ← PopInteger[];
fill ← PopInteger[];
line ← PopInteger[];
id ← GriffinFig.AreaObject[line,fill,path];
PushInteger[id];
};
GFTextObject: PROC = {
style,id: INTEGER;
s: STRING ← [20];
r: REAL ← GetReal[];
vec: Vector.Vec ← GetPoint[];
anchor: INTEGER ← PopInteger[];
PopString[s];
style ← PopInteger[];
id ← GriffinFig.TextObject[style,ConvertUnsafe.ToRope[s], (SELECT anchor FROM
0 => left,
1 => right,
2 => center,
ENDCASE => left), vec,r];
PushInteger[id];
};
GFStartCluster: PROC = {
GriffinFig.StartCluster[];
};
GFEnterObject: PROC = {
obj: INTEGER ← PopInteger[];
GriffinFig.EnterObject[obj];
};
GFEnterCluster: PROC = {
clu: INTEGER ← PopInteger[];
GriffinFig.EnterCluster[clu];
};
GFCluster: PROC = {
id: INTEGER ← GriffinFig.Cluster[];
};
GFMove: PROC = {
to,from: Vector.Vec;
move: PROC[dc: Graphics.Context] = {
[] ← Graphics.Save[dc];
to ← Vector.Sub[to,from];
Graphics.Translate[dc,to.x,to.y]};
to ← GetPoint[];
from ← GetPoint[];
TJaMGraphics.Painter[move];
};
GFRotate: PROC = {
angle: REAL ← GetReal[];
center: Vector.Vec ← GetPoint[];
rotate: PROC[dc: Graphics.Context] = {
[] ← Graphics.Save[dc];
Graphics.Translate[dc,center.x,center.y];
Graphics.Rotate[dc,angle];
Graphics.Translate[dc,-center.x,-center.y]};
TJaMGraphics.Painter[rotate];
};
GFScale: PROC = {
sy: REAL ← GetReal[];
sx: REAL ← GetReal[];
center: Vector.Vec ← GetPoint[];
scale: PROC[dc: Graphics.Context] = {
[] ← Graphics.Save[dc];
Graphics.Translate[dc,center.x,center.y];
Graphics.Scale[dc,sx,sy];
Graphics.Translate[dc,-center.x,-center.y]};
TJaMGraphics.Painter[scale];
};
GetPoint: PROC RETURNS[p: Vector.Vec] = {
p.y ← GetReal[];
p.x ← GetReal[];
};
Register[".gfnew"L,GFNewFile];
Register[".gfclose"L,GFCloseFile];
Register[".gfcolor"L,GFColor];
Register[".gffont"L,GFFont];
Register[".gflinestyle"L,GFLineStyle];
Register[".gffillstyle"L,GFFillStyle];
Register[".gftextstyle"L,GFTextStyle];
Register[".gfstartpath"L,GFStartPath];
Register[".gfep"L,GFEnterPoint];
Register[".gfec"L,GFEnterCubic];
Register[".gfnb"L,GFNewBoundary];
Register[".gfendpath"L,GFEndPath];
Register[".gflineobj"L,GFLineObject];
Register[".gfareaobj"L,GFAreaObject];
Register[".gftextobj"L,GFTextObject];
Register[".gfstartclu"L,GFStartCluster];
Register[".gfenterobject"L,GFEnterObject];
Register[".gfenterclu"L,GFEnterCluster];
Register[".gfclu"L,GFCluster];
Register[".gfread"L,GFReadFile];
Register[".gfmove"L,GFMove];
Register[".gfrotate"L,GFRotate];
Register[".gfscale"L,GFScale];
END.