DIRECTORY ImagerInterpress, ImagerFont, Interpress, Rope, Imager; Slides6UpImpl: CEDAR PROGRAM IMPORTS ImagerInterpress, Imager, ImagerFont, Interpress EXPORTS ~ BEGIN ROPE: TYPE = Rope.ROPE; VEC: TYPE = Imager.VEC; MakeIP: PROC [files: LIST OF ROPE, outputFile: ROPE, talkTitle: ROPE] ~ { self: ImagerInterpress.Ref _ ImagerInterpress.Create[outputFile]; pageRef: PageRef _ StartPage[files]; finished: BOOLEAN _ FALSE; imagePage: PROC[ctx: Imager.Context, origin: VEC] = { doIt: PROC ={ w: REAL _ 640*Imager.metersPerPoint; h: REAL _ 480*Imager.metersPerPoint; Imager.TranslateT[ctx, origin]; Imager.ScaleT[ctx,(3.0*Imager.metersPerInch)/w]; Imager.ClipRectangle[ctx, [0,0,w,h]]; Interpress.DoPage[pageRef.master, pageRef.page, ctx, LogProc]; Imager.SetStrokeWidth[ctx, 12*Imager.metersPerPoint]; --scaled width Imager.SetStrokeEnd[ctx, square]; Imager.MaskVector[ctx, [0,0],[0,h]]; Imager.MaskVector[ctx, [0,h],[w,h]]; Imager.MaskVector[ctx, [w,h],[w,0]]; Imager.MaskVector[ctx, [w,0],[0,0]]; }; Imager.DoSaveAll[ctx,doIt]; }; image6Pages: PROC[ctx: Imager.Context] = { Center: PROC [v: VEC, r: ROPE] RETURNS [VEC] ~ { extents: ImagerFont.Extents _ ImagerFont.RopeBoundingBox[font, r]; RETURN [[v.x-0.5*(extents.rightExtent-extents.leftExtent), v.y]]; }; leftMargin: REAL _ 1.0*Imager.metersPerInch; centerMargin: REAL _ 4.5*Imager.metersPerInch; topRow: REAL _ 7.325*Imager.metersPerInch; middleRow: REAL _ 4.325*Imager.metersPerInch; bottomRow: REAL _ 1.325*Imager.metersPerInch; header: VEC _ [4.25*Imager.metersPerInch,10.5*Imager.metersPerInch]; footer: VEC _ [4.25*Imager.metersPerInch,0.5*Imager.metersPerInch]; font: Imager.Font _ ImagerFont.FindScaled["Xerox/PressFonts/Helvetica-brr",10*Imager.metersPerPoint]; Imager.SetFont[ctx, font]; Imager.SetXY[ctx,Center[header, talkTitle]]; Imager.ShowRope[ctx, talkTitle]; Imager.SetXY[ctx, Center[footer, tutorialTitle]]; Imager.ShowRope[ctx, tutorialTitle]; imagePage[ctx, [leftMargin, topRow]]; NextPage[pageRef ! Done => GOTO done]; imagePage[ctx, [centerMargin, topRow]]; NextPage[pageRef ! Done => GOTO done]; imagePage[ctx, [leftMargin, middleRow]]; NextPage[pageRef ! Done => GOTO done]; imagePage[ctx, [centerMargin, middleRow]]; NextPage[pageRef ! Done => GOTO done]; imagePage[ctx, [leftMargin, bottomRow]]; NextPage[pageRef ! Done => GOTO done]; imagePage[ctx, [centerMargin, bottomRow]]; NextPage[pageRef ! Done => GOTO done]; EXITS done => {finished _ TRUE}; }; UNTIL finished DO ImagerInterpress.DoPage[self: self, action: image6Pages, scale: 1]; ENDLOOP; ImagerInterpress.Close[self]; }; tutorialTitle: ROPE _ "DOCUMENTATION GRAPHICS TUTORIAL / SIGGRAPH '87"; Done: SIGNAL = CODE; PageRef: TYPE = REF PageRefRecord; PageRefRecord: TYPE = RECORD[ remainingFiles: LIST OF ROPE, master: Interpress.Master, page: NAT]; LogProc: Interpress.LogProc = {}; StartPage: PROC [files: LIST OF ROPE] RETURNS [ref: PageRef] ~ { ref _ NEW[PageRefRecord]; ref.master _ Interpress.Open[files.first, LogProc]; ref.page _ 1; ref.remainingFiles _ files.rest; }; NextPage: PROC [ref: PageRef] ~ { IF ref.page < ref.master.pages THEN {ref.page _ ref.page+1; RETURN}; IF ref.remainingFiles=NIL THEN SIGNAL Done; ref.master _ Interpress.Open[ref.remainingFiles.first, LogProc]; ref.page _ 1; ref.remainingFiles _ ref.remainingFiles.rest; }; END. κSlides6UpImpl.mesa Copyright Σ 1987 by Xerox Corporation. All rights reserved. Maureen Stone July 23, 1987 9:13:39 pm PDT Make one large Interpress Master with 6 pages/page. Input is list of file names. Now need a new master Κƒ˜Icode˜šœ™K™Jšœ6Οc˜DJ˜!J˜$J˜$J˜$J˜$J˜—J˜K˜—šœ œ˜*š Ÿœœœœœœ˜0KšœB˜BKšœ;˜AK˜—Kšœ œ˜,Kšœœ˜.Kšœœ˜*Kšœ œ˜-Kšœ œ˜-KšœD˜DKšœC˜CKšœe˜eK˜Kšœ,˜,K˜ Kšœ1˜1Kšœ$˜$Kšœ%˜%Jšœœ˜'Kšœ'˜'Jšœœ˜'Kšœ(˜(Jšœœ˜'Kšœ*˜*Jšœœ˜'Kšœ(˜(Jšœœ˜'Kšœ*˜*Jšœœ˜'Jšœœ˜ K˜šœ œ˜KšœC˜CKšœ˜——Kšœ˜K˜—Kšœœ4˜GKšŸœœœ˜Kšœ œœ˜"šœœœ˜Kšœœœœ˜Kšœ˜Kšœœ˜ —KšŸœ˜!š Ÿ œœ œœœœ˜@Kšœœ˜Kšœ3˜3K˜ Kšœ ˜ K˜—šΠbnœœ˜!Kšœœœ˜DK™Kšœœœœ˜+Kšœ@˜@K˜ Kšœ-˜-K˜——Kšœ˜—…— κW