-- TAPrivateImpl.mesa
-- Rick Beach, July 6, 1982 8:15 pm
-- Maureen Stone April 21, 1983 10:09 am
-- Rick Beach, November 27, 1982 10:17 am
DIRECTORY
CIFS USING [Error],
JaMBasic USING [Object],
JaMInternal USING [Frame],
JaMOps USING [defaultFrame, Execute, MakeString, Push, PushReal],
PutGet USING [FromFile],
Rope,
TAPrivate,
TEditDocument USING [TEditDocumentData],
TextEdit USING [GetRope],
TextNode USING [NarrowToTextNode, Ref],
ViewerClasses,
ViewerOps;
TAPrivateImpl: PROGRAM
IMPORTS CIFS, JaMOps, PutGet, Rope, TextEdit, TextNode, ViewerOps
EXPORTS TAPrivate = {
OPEN TAPrivate;
ROPE: TYPE = Rope.ROPE;
FileNotFound: PUBLIC SIGNAL = CODE;
GetDocument: PUBLIC PROCEDURE[fileName: ROPE] RETURNS[node: TextNode.Ref, fromFile: BOOLEAN] = {
viewer: ViewerClasses.Viewer;
viewer ← IF Rope.Size[fileName]=0 THEN NIL ELSE ViewerOps.FindViewer[fileName];
IF viewer # NIL THEN {
node ← NARROW[viewer.data, TEditDocument.TEditDocumentData].text;
fromFile ← FALSE; }
ELSE {
node ← PutGet.FromFile[fileName ! CIFS.Error => TRUSTED {SIGNAL FileNotFound}]; -- catch directory error by caller
fromFile ← TRUE; }
};
FixFileName: PUBLIC PROCEDURE[oldname, extension: ROPE] RETURNS [newname:ROPE] = {
dotPosition: INTEGER ← Rope.Find[oldname, "."];
IF dotPosition < 0 THEN
newname ← Rope.Cat[oldname, extension]
ELSE
newname ← Rope.Cat[Rope.Substr[oldname, 0, dotPosition], extension];
};
getViewer: JaMBasic.Object = JaMOps.MakeString[".getviewer", X];
loadBCD: JaMBasic.Object = JaMOps.MakeString[".loadbcd", X];
pushDC: JaMBasic.Object = JaMOps.MakeString[".pushdc", X];
popDC: JaMBasic.Object = JaMOps.MakeString[".popdc", X];
setCP: JaMBasic.Object = JaMOps.MakeString[".setpos", X];
translate: JaMBasic.Object = JaMOps.MakeString[".translate", X];
drawArea: JaMBasic.Object = JaMOps.MakeString[".drawarea", X];
drawPath: JaMBasic.Object = JaMOps.MakeString[".drawpath", X];
drawBox: JaMBasic.Object = JaMOps.MakeString[".drawbox", X];
outlinePath: JaMBasic.Object = JaMOps.MakeString[".calligoutlinepath", X];
calligRoundPen: JaMBasic.Object = JaMOps.MakeString[".calligroundpen", X];
calligRectangularPen: JaMBasic.Object = JaMOps.MakeString[".calligrectangularpen", X];
calligItalicPen: JaMBasic.Object = JaMOps.MakeString[".calligitalicpen", X];
calligEllipticalPen: JaMBasic.Object = JaMOps.MakeString[".calligellipticalpen", X];
calligShadowPen: JaMBasic.Object = JaMOps.MakeString[".calligshadowpen", X];
calligShadowPath: JaMBasic.Object = JaMOps.MakeString[".calligshadowpath", X];
drawImage: JaMBasic.Object = JaMOps.MakeString[".drawimage", X];
drawText: JaMBasic.Object = JaMOps.MakeString[".drawtext", X];
setHSVColor: JaMBasic.Object = JaMOps.MakeString["hsvcolor", X];
calligDefined: BOOLEAN ← FALSE;
NoJaMGraphicsViewer: PUBLIC SIGNAL = CODE;
InitJaMGraphics: PUBLIC PROCEDURE = {
jaMViewer: ViewerClasses.Viewer ← ViewerOps.FindViewer["JaM"];
IF jaMViewer=NIL THEN
SIGNAL NoJaMGraphicsViewer;
IF ~calligDefined THEN {
-- Define the Calligraphy graphics functions which reside in TACallig.bcd
JaMOps.Execute[JaMOps.defaultFrame, JaMOps.MakeString["(artwork) .dup 50 .dict .def .load .begin", X]];
JaMOps.Execute[JaMOps.defaultFrame, JaMOps.MakeString["(.moveto) (.calligmoveto).cvx .def", X]];
JaMOps.Execute[JaMOps.defaultFrame, JaMOps.MakeString["(.lineto) (.calliglineto).cvx .def", X]];
JaMOps.Execute[JaMOps.defaultFrame, JaMOps.MakeString["(.curveto) (.calligcurveto).cvx .def", X]];
JaMOps.Execute[JaMOps.defaultFrame, JaMOps.MakeString["(.drawpath) (.calligdrawpath).cvx .def", X]];
JaMOps.Execute[JaMOps.defaultFrame, JaMOps.MakeString["(.drawarea) (.calligdrawarea).cvx .def", X]];
JaMOps.Execute[JaMOps.defaultFrame, JaMOps.MakeString["(hsvcolor) (.hsvcolor) .cvx .def", X]];
calligDefined ← TRUE};
};
PushDC: PUBLIC PROCEDURE = {
JaMOps.Execute[JaMOps.defaultFrame, pushDC] };
PopDC: PUBLIC PROCEDURE= {
JaMOps.Execute[JaMOps.defaultFrame, popDC] };
PushReal: PUBLIC PROCEDURE[r: REAL] = {
JaMOps.PushReal[JaMOps.defaultFrame.opstk, r] };
DrawArea: PUBLIC PROCEDURE = {
JaMOps.Execute[JaMOps.defaultFrame, drawArea] };
DrawPath: PUBLIC PROCEDURE = {
JaMOps.Execute[JaMOps.defaultFrame, drawPath] };
OutlinePath: PUBLIC PROCEDURE = {
JaMOps.Execute[JaMOps.defaultFrame, outlinePath] };
DrawBox: PUBLIC PROCEDURE = {
JaMOps.Execute[JaMOps.defaultFrame, drawBox] };
SetCP: PUBLIC PROCEDURE = {
JaMOps.Execute[JaMOps.defaultFrame, setCP] };
Translate: PUBLIC PROCEDURE = {
JaMOps.Execute[JaMOps.defaultFrame, translate] };
RoundPen: PUBLIC PROCEDURE = {
JaMOps.Execute[JaMOps.defaultFrame, calligRoundPen] };
ItalicPen: PUBLIC PROCEDURE = {
JaMOps.Execute[JaMOps.defaultFrame, calligItalicPen] };
RectangularPen: PUBLIC PROCEDURE = {
JaMOps.Execute[JaMOps.defaultFrame, calligRectangularPen] };
EllipticalPen: PUBLIC PROCEDURE = {
JaMOps.Execute[JaMOps.defaultFrame, calligEllipticalPen] };
ShadowPen: PUBLIC PROCEDURE = {
JaMOps.Execute[JaMOps.defaultFrame, calligShadowPen] };
ShadowPath: PUBLIC PROCEDURE = {
JaMOps.Execute[JaMOps.defaultFrame, calligShadowPath] };
DrawImage: PUBLIC PROCEDURE[imageFileName: Rope.ROPE] = {
JaMOps.Push[JaMOps.defaultFrame.opstk, JaMOps.MakeString[
LOOPHOLE[Rope.Flatten[imageFileName]], L]];
JaMOps.Execute[JaMOps.defaultFrame, drawImage];
};
PushString: PUBLIC PROCEDURE[node: TextNode.Ref] = {
rope: ROPE ← TextEdit.GetRope[TextNode.NarrowToTextNode[node]];
IF rope#NIL THEN
JaMOps.Push[JaMOps.defaultFrame.opstk,
JaMOps.MakeString[LOOPHOLE[Rope.Flatten[rope]]]] };
DrawText: PUBLIC PROCEDURE = {
JaMOps.Execute[JaMOps.defaultFrame, drawText] };
ExecuteNode: PUBLIC PROCEDURE[node: TextNode.Ref] = {
rope: ROPE ← TextEdit.GetRope[TextNode.NarrowToTextNode[node]];
IF rope#NIL THEN
JaMOps.Execute[JaMOps.defaultFrame,
JaMOps.MakeString[LOOPHOLE[Rope.Flatten[rope]], X]];
};
SetHSV: PUBLIC PROCEDURE[h, s, v: REAL] = {
JaMOps.PushReal[JaMOps.defaultFrame.opstk, h];
JaMOps.PushReal[JaMOps.defaultFrame.opstk, s];
JaMOps.PushReal[JaMOps.defaultFrame.opstk, v];
JaMOps.Execute[JaMOps.defaultFrame, setHSVColor];
};
}.
}.