NectarineAidsImpl.Mesa
Copyright Ó 1987, 1988 by Xerox Corporation. All rights reserved.
Written by Giordano Bruno Beretta, November 17, 1987 4:07:37 pm PST
gbb September 21, 1988 10:33:33 am PDT
Create the frame and register Interpress masters.
DIRECTORY Convert, FS, Imager, ImagerColor, ImagerColorFns, ImagerFont, ImagerInterpress, ImagerPath, Interpress, IO, NectarineAids, Real, Rope, TerminalIO, UserCredentials;
NectarineAidsImpl: CEDAR PROGRAM
IMPORTS Convert, FS, Imager, ImagerColorFns, ImagerFont, ImagerInterpress, ImagerPath, Interpress, IO, Real, Rope, TerminalIO, UserCredentials
EXPORTS NectarineAids
~ BEGINOPEN Imager, ImagerInterpress, NectarineAids;
ROPE: TYPE ~ Rope.ROPE;
Font: TYPE ~ ImagerFont.Font;
margin: REAL ← 5.0; -- in mm
width: REAL ← 0.5; -- in mm
radius: REAL ← 10.0;
regularFace: Font ← ImagerFont.Find ["Xerox/PressFonts/Modern-MRR", substituteQuietly];
boldFace: Font ← ImagerFont.Find ["Xerox/PressFonts/Modern-BRR", substituteQuietly];
italicFace: Font ← ImagerFont.Find ["Xerox/PressFonts/Modern-MIR", substituteQuietly];
ComposeFrame: PROC [caption: ROPE] ~ BEGIN
At the time of writing, the condenser stepping from scan line to scan line is in a bad shape on Quoth, but quite well adjusted in the Zipper.
CreateButton Frame TiogaToInterpress ///Temp/Temp.Interpress ← $FileNameSelection$; InterpressOverlay ///Temp/Temp-gbb.Interpress ← ///Temp/Temp.Interpress []<>7.0>Commands>gbbFrame.Interpress; Echo SendIPMaster -h Foo -c 1 ///Temp/Temp-gbb.Interpress
lc: Context; -- local context
name: ROPE ~ "[]<>7.0>Commands>gbbFrame.Interpress";
master: ImagerInterpress.Ref ~ ImagerInterpress.Create [name];
fontI: Font ~ italicFace.Scale [3.0];
t: ImagerPath.Trajectory;
midPoint: REAL ~ radius * 0.7071068; compl: REAL ~ radius - midPoint;
SetPage: PROC ~ BEGIN
bottomLeft: VEC ~ [0.0 + margin, 0.0 + margin];
bottomRight: VEC ~ [215.9 - margin, 0.0 + margin];
topRight: VEC ~ [215.9 - margin, 279.4 - margin];
topLeft: VEC ~ [0.0 + margin, 279.4 - margin];
pos, next: VEC;
lc.SetStrokeWidth [width]; lc.SetFont [fontI];
pos ← [bottomLeft.x + 30.0 + 3.0, bottomLeft.y];
lc.SetXY [pos]; lc.ShowRope [caption];
pos.x ← pos.x + 3.0 + ImagerFont.RopeEscapement [fontI, caption].x;
t ← ImagerPath.MoveTo [pos];
pos.x ← bottomRight.x - radius; t ← t.LineTo [pos];
next ← bottomRight; next.y ← next.y + radius;
pos ← [pos.x + midPoint, pos.y + compl]; t ← t.ArcTo [pos, next];
pos ← topRight; pos.y ← pos.y - radius; t ← t.LineTo [pos];
next ← topRight; next.x ← next.x - radius;
pos ← [pos.x - compl, pos.y + midPoint]; t ← t.ArcTo [pos, next];
pos ← topLeft; pos.x ← pos.x + radius; t ← t.LineTo [pos];
next ← topLeft; next.y ← next.y - radius;
pos ← [pos.x - midPoint, pos.y - compl]; t ← t.ArcTo [pos, next];
pos ← bottomLeft; pos.y ← pos.y + radius; t ← t.LineTo [pos];
next ← bottomLeft; next.x ← next.x + radius;
pos ← [pos.x + compl, pos.y - midPoint]; t ← t.ArcTo [pos, next];
pos ← [bottomLeft.x + 30.0 , bottomLeft.y]; t ← t.LineTo [pos];
lc.MaskStrokeTrajectory [t]
END;
DrawToIP: PROC [context: Imager.Context] ~ {lc ← context; context.DoSave [SetPage]};
master.DeclareFont [fontI];
master.DoPage [action: DrawToIP, scale: 0.001]; -- millimetres
master.Close []
END; -- ComposeFrame
AFrame: PROC ~ BEGIN
Frame of A size paper.
lc: Context; -- local context
name: ROPE ~ "[]<>7.0>Commands>AFrame.Interpress";
master: ImagerInterpress.Ref ~ ImagerInterpress.Create [name];
SetPage: PROC ~ BEGIN
lc.SetStrokeWidth [0.0];
lc.MaskVector [[0.0, 0.0], [215.9, 0.0]];
lc.MaskVector [[215.9, 0.0], [215.9, 279.4]];
lc.MaskVector [[215.9, 279.4], [0.0, 279.4]];
lc.MaskVector [[0.0, 279.4], [0.0, 0.0]]
END;
DrawToIP: PROC [context: Imager.Context] ~ {lc ← context; context.DoSave [SetPage]};
master.DoPage [action: DrawToIP, scale: 0.001]; -- millimetres
master.Close []
END; -- AFrame
MakeCircle: PROC [c: VEC, r: REAL] RETURNS [circle: ImagerPath.Trajectory] ~ BEGIN
... at center c with radius r.
IF (r < 0) THEN ERROR;
IF (r = 0) THEN RETURN [NIL];
circle ← ImagerPath.MoveTo [[c.x+r, c.y]];
circle ← circle.ArcTo [[c.x-r, c.y], [c.x+r, c.y]]
END; -- MakeCircle
ComposeCenterAndCropMarks: PUBLIC PROC [context: Context ← NIL, medium: MediumSize ← A] ~ BEGIN
For creating Cromalin proofs. From MetaPaletteImpl.
If context # NIL, the register and crop marks are added to the context assuming the units of measure are millimetres. Otherwise an Interpress master is created.
lc: Context; -- local context
master: ImagerInterpress.Ref;
name: ROPE ← "[]<>7.0>Commands>CenterAndCropMarks";
cmykBlack: Color ~ ImagerColorFns.ColorFromCMYK [[1.0, 1.0, 1.0, 1.0]];
cm: REAL ~ 10.0; halfCm: REAL ~ 5.0; strokeWidth: REAL ~ 0.2;
bb: Rectangle; tag: ROPENIL;
SetPage: PROC ~ BEGIN
lc.SetStrokeJoint [miter]; lc.SetStrokeEnd [butt];
lc.SetStrokeWidth [strokeWidth]; lc. SetColor [cmykBlack];
Draw center marks.
Bottom, right, top, left:
lc.MaskVector [[bb.x+bb.w/2.0, bb.y-cm], [bb.x+bb.w/2.0, bb.y-1.0]];
lc.MaskVector [[bb.x+bb.w+1.0, bb.y+bb.h/2.0], [bb.x+bb.w+cm, bb.y+bb.h/2.0]];
lc.MaskVector [[bb.x+bb.w/2.0, bb.y+bb.h+cm], [bb.x+bb.w/2.0, bb.y+bb.h+1.0]];
lc.MaskVector [[bb.x-cm, bb.y+bb.h/2.0], [bb.x-1.0, bb.y+bb.h/2.0]];
Draw trim marks.
Bottom.
lc.MaskVector [[bb.x-1.0, bb.y], [bb.x-cm, bb.y]];
lc.MaskVector [[bb.x+bb.w+cm, bb.y], [bb.x+bb.w+1.0, bb.y]];
Right.
lc.MaskVector [[bb.x+bb.w, bb.y-1.0], [bb.x+bb.w, bb.y-cm]];
lc.MaskVector [[bb.x+bb.w, bb.y+bb.h+cm], [bb.x+bb.w, bb.y+bb.h+1.0]];
Top.
lc.MaskVector [[bb.x+bb.w+1.0, bb.y+bb.h], [bb.x+bb.w+cm, bb.y+bb.h]];
lc.MaskVector [[bb.x-1.0, bb.y+bb.h], [bb.x-cm, bb.y+bb.h]];
Left.
lc.MaskVector [[bb.x, bb.y+bb.h+1.0], [bb.x, bb.y+bb.h+cm]];
lc.MaskVector [[bb.x, bb.y-1.0], [bb.x, bb.y-cm]];
Draw frame. Use only for debugging.
lc.MaskVector [[bb.x, bb.y], [bb.x+bb.w, bb.y]];
lc.MaskVector [[bb.x+bb.w, bb.y], [bb.x+bb.w, bb.y+bb.h]];
lc.MaskVector [[bb.x+bb.w, bb.y+bb.h], [bb.x, bb.y+bb.h]];
lc.MaskVector [[bb.x, bb.y+bb.h], [bb.x, bb.y]];
END; -- SetPage
DrawToIP: PROC [context: Imager.Context] ~ {lc ← context; context.DoSave [SetPage]};
bb ← [x: 0.0, y: 0.0, w: 215.9, h: 279.4];
SELECT medium FROM
A => NULL;
B => {bb.w ← 279.4; bb.h ← 431.8; tag ← "B"};
A3 => {bb.w ← 297.0; bb.h ← 420.0; tag ← "A3"};
A4 => {bb.w ← 210.0; bb.h ← 297.0; tag ← "A4"};
A5 => {bb.w ← 148.0; bb.h ← 210.0; tag ← "A5"};
C4 => {bb.w ← 324.0; bb.h ← 229.0; tag ← "C4"};
C5 => {bb.w ← 229.0; bb.h ← 162.0; tag ← "C5"};
C65 => {bb.w ← 224.0; bb.h ← 114.0; tag ← "C65"};
C6 => {bb.w ← 162.0; bb.h ← 114.0; tag ← "C6"};
ENDCASE => ERROR;
IF (context = NIL) THEN BEGIN
master ← ImagerInterpress.Create [name.Cat [tag, ".Interpress"]];
master.DeclareColorOperator [ImagerColorFns.NewColorOperatorCMYK [1000]];
master.DeclareColor [cmykBlack];
master.DoPage [action: DrawToIP, scale: 0.001]; -- millimetres
master.Close []
END
ELSE {lc ← context; context.DoSave [SetPage]}
END; -- ComposeCenterAndCropMarks
ComposeRegisterMarks: PUBLIC PROC [creator: ROPENIL, process: BOOLTRUE, context: Context ← NIL] ~ BEGIN
For creating Cromalin proofs. From MetaPaletteImpl.
If context # NIL, the register and crop marks, and the separation labels are added to the context assuming the units of measure are millimetres. Otherwise an Interpress master is created.
lc: Context; -- local context
master: ImagerInterpress.Ref;
name: ROPE ~ "[]<>7.0>Commands>RegisterMarks.Interpress";
creatorLabel: ROPE;
blackBlack: Color ~ ImagerColorFns.ColorFromCMYK [[0.0, 0.0, 0.0, 1.0]];
cmykBlack: Color ~ ImagerColorFns.ColorFromCMYK [[1.0, 1.0, 1.0, 1.0]];
cyan: Color ~ ImagerColorFns.ColorFromCMYK [[1.0, 0.0, 0.0, 0.0]];
magenta: Color ~ ImagerColorFns.ColorFromCMYK [[0.0, 1.0, 0.0, 0.0]];
yellow: Color ~ ImagerColorFns.ColorFromCMYK [[0.0, 0.0, 1.0, 0.0]];
cm: REAL ~ 10.0; halfCm: REAL ~ 5.0; strokeWidth: REAL ~ 0.2;
bb: Rectangle ~ [x: 0.0, y: 0.0, w: 215.9, h: 279.4];
large: Font ~ regularFace.Scale [cm]; small: Font ~ regularFace.Scale [halfCm];
SetPage: PROC ~ BEGIN
x, y: REAL; circle: ImagerPath.Trajectory; inkC, inkM, inkY, inkK: ROPE;
SetCross: PROC [x, y: REAL] ~ BEGIN
Draws a cross with lower left bounding box at [x, y].
lc.MaskRectangle [[x: x, y: y+halfCm, w: cm, h: strokeWidth]];
lc.MaskRectangle [[x: x+halfCm, y: y, w: strokeWidth, h: cm]]
END; -- SetCross
lc.SetStrokeJoint [miter]; lc.SetStrokeEnd [butt]; lc.SetStrokeWidth [strokeWidth];
lc. SetColor [cmykBlack]; lc.SetFont [small];
Draw center marks.
Bottom, right, top, left:
lc.MaskVector [[bb.x+bb.w/2.0, bb.y-cm], [bb.x+bb.w/2.0, bb.y-1.0]];
lc.MaskVector [[bb.x+bb.w+1.0, bb.y+bb.h/2.0], [bb.x+bb.w+cm, bb.y+bb.h/2.0]];
lc.MaskVector [[bb.x+bb.w/2.0, bb.y+bb.h+cm], [bb.x+bb.w/2.0, bb.y+bb.h+1.0]];
lc.MaskVector [[bb.x-cm, bb.y+bb.h/2.0], [bb.x-1.0, bb.y+bb.h/2.0]];
Draw trim marks.
Bottom.
lc.MaskVector [[bb.x-1.0, bb.y], [bb.x-cm, bb.y]];
lc.MaskVector [[bb.x+bb.w+cm, bb.y], [bb.x+bb.w+1.0, bb.y]];
Right.
lc.MaskVector [[bb.x+bb.w, bb.y-1.0], [bb.x+bb.w, bb.y-cm]];
lc.MaskVector [[bb.x+bb.w, bb.y+bb.h+cm], [bb.x+bb.w, bb.y+bb.h+1.0]];
Top.
lc.MaskVector [[bb.x+bb.w+1.0, bb.y+bb.h], [bb.x+bb.w+cm, bb.y+bb.h]];
lc.MaskVector [[bb.x-1.0, bb.y+bb.h], [bb.x-cm, bb.y+bb.h]];
Left.
lc.MaskVector [[bb.x, bb.y+bb.h+1.0], [bb.x, bb.y+bb.h+cm]];
lc.MaskVector [[bb.x, bb.y-1.0], [bb.x, bb.y-cm]];
Draw frame. Use only for debugging.
lc.MaskVector [[bb.x, bb.y], [bb.x+bb.w, bb.y]];
lc.MaskVector [[bb.x+bb.w, bb.y], [bb.x+bb.w, bb.y+bb.h]];
lc.MaskVector [[bb.x+bb.w, bb.y+bb.h], [bb.x, bb.y+bb.h]];
lc.MaskVector [[bb.x, bb.y+bb.h], [bb.x, bb.y]];
Draw register marks.
circle ← MakeCircle [[-halfCm+1.0, -halfCm+1.0], halfCm];
SetCross [-cm+1.0, -cm+1.0]; lc.MaskStrokeTrajectory [circle];
circle ← MakeCircle [[bb.x+bb.w+halfCm, -halfCm+1.0], halfCm];
SetCross [bb.x+bb.w, -cm+1.0]; lc.MaskStrokeTrajectory [circle];
circle ← MakeCircle [[bb.x+bb.w+halfCm, bb.y+bb.h+halfCm-1.0], halfCm];
SetCross [bb.x+bb.w, bb.y+bb.h-1.0]; lc.MaskStrokeTrajectory [circle];
circle ← MakeCircle [[-halfCm+1.0, bb.y+bb.h+halfCm-1.0], halfCm];
SetCross [-cm+1.0, bb.y+bb.h-1.0]; lc.MaskStrokeTrajectory [circle];
Draw 100% color swatches.
x ← cm; y ← bb.y + bb.h + 1.0;
lc.SetColor [cyan];
lc.MaskRectangle [[x: x, y: y, w: cm, h: halfCm]];
lc.SetColor [magenta]; x ← x + 1.2 * cm;
lc.MaskRectangle [[x: x, y: y, w: cm, h: halfCm]];
lc.SetColor [yellow]; x ← x + 1.2 * cm;
lc.MaskRectangle [[x: x, y: y, w: cm, h: halfCm]];
lc.SetColor [blackBlack]; x ← x + 1.2 * cm;
lc.MaskRectangle [[x: x, y: y, w: cm, h: halfCm]];
lc.SetColor [cmykBlack]; lc.SetXY [[x + 1.5 * cm, y]]; lc.ShowRope ["100%"];
Draw 50% color swatches.
x ← cm; y ← -7.0;
lc.SetColor [cyan50];
lc.MaskRectangle [[x: x, y: y, w: 3.0 * cm, h: halfCm]];
lc.SetColor [magenta50]; x ← x + 3.2 * cm;
lc.MaskRectangle [[x: x, y: y, w: 3.0 * cm, h: halfCm]];
lc.SetColor [yellow50]; x ← x + 3.2 * cm;
lc.MaskRectangle [[x: x, y: y, w: 3.0 * cm, h: halfCm]];
lc.SetColor [black50]; x ← x + 3.2 * cm;
lc.MaskRectangle [[x: x, y: y, w: 3.0 * cm, h: halfCm]];
lc.SetColor [cmykBlack]; lc.SetXY [[x + 3.5 * cm, y]]; lc.ShowRope ["50%"];
Label separations.
IF (creator = NIL) THEN BEGIN
inkC ← "Cyan"; inkM ← "Magenta"; inkY ← "Yellow"; inkK ← "Black"
END
ELSE IF process THEN BEGIN
inkC ← "SOP-cyan"; inkM ← "SOP-magenta";
inkY ← "SOP-yellow"; inkK ← "SOP-black"
END
ELSE BEGIN
inkC ← "C28-blue"; inkM ← "RT6-red";
inkY ← "M35/2-magenta"; inkK ← "GT4-green"
END;
lc.SetXY [[bb.x+bb.w/2.0+1.5*cm, bb.y+bb.h+1.0]];
IF (context # NIL) THEN BEGIN
lc.ShowRope [IO.PutR1 [IO.time[]]];
lc.SetXY [[bb.x+bb.w/2.0+5.0*cm, -7.0]];
lc.ShowRope [UserCredentials.Get[].name]; lc.SetXY [[bb.x+cm, -7.0]];
WITH context.GetProp [$separationLabel] SELECT FROM
r: ROPE => lc.ShowRope [r];
ENDCASE => NULL
END
ELSE lc.ShowRope ["Interpress 3.0"];
lc.RotateT [-90.0]; lc.TranslateT [[-279.4, 0.0]];
x ← halfCm; y ← bb.x + bb.w + 3.0; lc.SetFont [large];
lc.SetXY [[x, y]]; lc.SetColor [cyan]; lc.ShowRope [inkC];
x ← x + ImagerFont.RopeEscapement [large, inkC].x + 2.0 * cm;
lc.SetXY [[x, y]]; lc.SetColor [magenta]; lc.ShowRope [inkM];
x ← x + ImagerFont.RopeEscapement [large, inkM].x + 2.0 * cm;
lc.SetXY [[x, y]]; lc.SetColor [yellow]; lc.ShowRope [inkY];
x ← x + ImagerFont.RopeEscapement [large, inkY].x + 2.0 * cm;
lc.SetXY [[x, y]]; lc.SetColor [blackBlack]; lc.ShowRope [inkK];
x ← halfCm; y ← -halfCm; lc.SetFont [small];
lc.SetXY [[x, y]]; lc.SetColor [cmykBlack];
creatorLabel ← "Copyright (c) 1988 by Xerox Corporation. All rights reserved.";
IF (creator = NIL) THEN
creatorLabel ← creatorLabel.Concat [" PARC EDL, 3333 Coyote Hill Road, Palo Alto, 494-4441"]
ELSE
creatorLabel ← creatorLabel.Cat [" Created with ", creator, ". Giordano Beretta, PARC EDL"];
lc.ShowRope [creatorLabel]
END; -- SetPage
DrawToIP: PROC [context: Imager.Context] ~ {lc ← context; context.DoSave [SetPage]};
IF (context = NIL) THEN BEGIN
master ← ImagerInterpress.Create [name];
master.DeclareColorOperator [ImagerColorFns.NewColorOperatorCMYK [1000]];
master.DeclareFont [large]; master.DeclareFont [small];
master.DeclareColor [cmykBlack]; master.DeclareColor [blackBlack];
master.DeclareColor [cyan]; master.DeclareColor [magenta];
master.DeclareColor [yellow];
master.DoPage [action: DrawToIP, scale: 0.001]; -- millimetres
master.Close []
END
ELSE {lc ← context; context.DoSave [SetPage]}
END; -- ComposeRegisterMarks
CMYKscales: PROC ~ BEGIN
Size for Versatec. All measures in mm.
lc: Context; -- local context
font: Font ~ regularFace.Scale [10.0];
name: ROPE ~ "[]<>Temp>Nectarine>CMYK-Scales.Interpress";
master: ImagerInterpress.Ref ~ ImagerInterpress.Create [name];
cmykBlack: Color ~ ImagerColorFns.ColorFromCMYK [[1.0, 1.0, 1.0, 1.0]];
r: Rectangle ← [x: 0.0, y: 0.0, w: 96.6 , h: 101.6];
DoIt: PROC ~ BEGIN
lc.SetPriorityImportant [FALSE]; lc.SetFont [font];
FOR i: [1 .. 10] IN [1 .. 10] DO
ii: REAL ~ Real.Float [i] / 10.0;
lc.SetColor [ImagerColorFns.ColorFromCMYK [[0.0, 0.0, 0.0, ii]]];
lc.MaskRectangle [r];
lc.SetColor [cmykBlack]; lc.SetXY [[r.x, r.y-11.0]];
lc.ShowRope [Convert.RopeFromReal [ii]];
r.x ← r.x + 101.6
ENDLOOP;
r.x ← 0.0; r.y ← r.y + 120.0;
FOR i: [1 .. 10] IN [1 .. 10] DO
ii: REAL ~ Real.Float [i] / 10.0;
lc.SetColor [ImagerColorFns.ColorFromCMYK [[0.0, 0.0, ii, 0.0]]];
lc.MaskRectangle [r];
lc.SetColor [cmykBlack]; lc.SetXY [[r.x, r.y]];
lc.ShowRope [Convert.RopeFromReal [ii]];
r.x ← r.x + 101.6
ENDLOOP;
r.x ← 0.0; r.y ← r.y + 120.0;
FOR i: [1 .. 10] IN [1 .. 10] DO
ii: REAL ~ Real.Float [i] / 10.0;
lc.SetColor [ImagerColorFns.ColorFromCMYK [[0.0, ii, 0.0, 0.0]]];
lc.MaskRectangle [r];
lc.SetColor [cmykBlack]; lc.SetXY [[r.x, r.y]];
lc.ShowRope [Convert.RopeFromReal [ii]];
r.x ← r.x + 101.6
ENDLOOP;
r.x ← 0.0; r.y ← r.y + 120.0;
FOR i: [1 .. 10] IN [1 .. 10] DO
ii: REAL ~ Real.Float [i] / 10.0;
lc.SetColor [ImagerColorFns.ColorFromCMYK [[ii, 0.0, 0.0, 0.0]]];
lc.MaskRectangle [r];
lc.SetColor [cmykBlack]; lc.SetXY [[r.x, r.y]];
lc.ShowRope [Convert.RopeFromReal [ii]];
r.x ← r.x + 101.6
ENDLOOP
END;
DrawToIP: PROC [context: Imager.Context] ~ {lc ← context; context.DoSave [DoIt]};
master.DeclareColorOperator [ImagerColorFns.NewColorOperatorCMYK [1000]];
master.DeclareFont [font]; master.DeclareColor [cmykBlack];
master.DoPage [action: DrawToIP, scale: 0.001]; -- millimetres
master.Close []
END; -- CMYKscales
ComposeStrip: PROC [r: Rectangle, masterName: ROPE] ~ BEGIN
Size for Versatec. All measures in mm.
lc: Context; -- local context
master: ImagerInterpress.Ref ~ ImagerInterpress.Create [masterName];
cmykBlack: Color ~ ImagerColorFns.ColorFromCMYK [[1.0, 1.0, 1.0, 1.0]];
DoIt: PROC ~ BEGIN
lc.SetPriorityImportant [FALSE]; lc.SetColor [cmykBlack];
lc.MaskRectangle [r]
END;
DrawToIP: PROC [context: Imager.Context] ~ {lc ← context; context.DoSave [DoIt]};
master.DeclareColorOperator [ImagerColorFns.NewColorOperatorCMYK [1000]];
master.DeclareColor [cmykBlack];
master.DoPage [action: DrawToIP, scale: 0.001]; -- millimetres
master.Close []
END; -- ComposeStrip
MakeTextBlack: PROC [masterName: ROPE] RETURNS [newName: ROPE] ~ BEGIN
Attempts to achieve that text is written only in the black separation.
pos: FS.ComponentPositions; fullName: ROPE;
out: ImagerInterpress.Ref; image: Interpress.Master;
[fullName, pos] ← FS.ExpandName [masterName];
newName ← fullName.Substr [pos.base.start, pos.base.length].Concat ["-Black"];
newName ← fullName.Replace [pos.base.start, pos.base.length, newName];
out ← ImagerInterpress.Create [newName];
image ← Interpress.Open [masterName, LogInterpress];
FOR page: INT IN [1 .. image.pages] DO
DoIt: PROC [context: Imager.Context] ~ BEGIN
context.SetColor [ImagerColorFns.ColorFromCMYK [[0.0, 0.0, 0.0, 1.0]]];
Interpress.DoPage [master: image, page: page, context: context, log: LogInterpress];
END; -- DoIt
ImagerInterpress.DoPage [self: out, action: DoIt]
ENDLOOP;
image.Close; out.Close; image ← NIL; out← NIL;
TerminalIO.PutF ["\n%g copied to %g with default color only in the black separation.\n", IO.rope [masterName], IO.rope [newName]]
END; -- MakeTextBlack
LogInterpress: Interpress.LogProc ~ BEGIN
Called for errors during interpress execution. [class: INT, code: ATOM, explanation: ROPE]
TerminalIO.PutRope [SELECT class FROM
Interpress.classMasterError => "Master Error: ",
Interpress.classMasterWarning => "Master Warning: ",
Interpress.classAppearanceError => "Appearance Error: ",
Interpress.classAppearanceWarning => "Appearance Warning: ",
Interpress.classComment => "Comment: ",
ENDCASE
=> IO.PutFR1 ["Class %g error: ", IO.int [class]]];
TerminalIO.PutRope [explanation]; TerminalIO.PutRope [" . . . \n"]
END; -- LogInterpress
ComposeFrame ["Giordano Beretta"];
ComposeRegisterMarks ["Nectarine"]
END.