DIRECTORY Imager, Commander, FS, IO, ImagerBackdoor, ImagerInterpress, ImagerPixelArray, Rope, SF, ViewerPrivate, ViewersWorld, ViewersWorldInstance, Snapshot; SnapshotImpl: CEDAR PROGRAM IMPORTS Imager, Commander, FS, IO, ImagerBackdoor, ImagerInterpress, ImagerPixelArray, ViewerPrivate, ViewersWorld, ViewersWorldInstance EXPORTS Snapshot ~ BEGIN ROPE: TYPE ~ Rope.ROPE; <> <> Snapshot: PUBLIC PROC [context: Imager.Context, screen: ViewerPrivate.Screen, f0, s0: NAT ¬ 0, f1, s1: NAT ¬ NAT.LAST] ~ { action: PROC [pixelMap: Imager.PixelMap] = { pa: Imager.PixelArray ¬ ImagerPixelArray.FromPixelMap[pixelMap: pixelMap, box: box, scanMode: [slow: down, fast: right], immutable: TRUE]; Imager.DrawSampledColor[context: context, pa: pa, colorOperator: op]; }; box: SF.Box ~ [[MIN[s0, s1], MIN[f0, f1]], [MAX[s0, s1], MAX[f0, f1]]]; screenContext: Imager.Context ¬ ViewerPrivate.CreateContext[screen]; op: Imager.ColorOperator ¬ ImagerBackdoor.GetBufferColorOperator[screenContext]; ImagerBackdoor.AccessBufferRectangle[screenContext, action, [f0, s0, f1, s1] ]; }; SnapshotIP: PROC [fileName: ROPE] ~ { interpress: ImagerInterpress.Ref ¬ ImagerInterpress.Create[fileName]; Paint: PROC [context: Imager.Context] ~ { width, height: NAT _ 0; [width, height] _ ViewersWorld.GetSize[ViewersWorldInstance.GetWorld[]]; Imager.SetPriorityImportant[context, TRUE]; Snapshot[context: context, screen: main, s0: 0, f0: 0, s1: height, f1: width]; }; ImagerInterpress.DoPage[self: interpress, action: Paint, scale: 0.0254/72]; ImagerInterpress.Close[interpress]; }; FindFullName: PROC [inputName: ROPE] RETURNS [ROPE] ~ { fullFName: ROPE ¬ NIL; fullFName ¬ FS.FileInfo[inputName].fullFName; RETURN [fullFName] }; CmdTokenBreak: PROC [char: CHAR] RETURNS [IO.CharClass] = { IF char = '_ THEN RETURN [break]; IF char = ' OR char = '\t OR char = ', OR char = '; OR char = '\n THEN RETURN [sepr]; RETURN [other]; }; GetCmdToken: PROC [stream: IO.STREAM] RETURNS [rope: ROPE] = { rope ¬ NIL; rope ¬ stream.GetTokenRope[CmdTokenBreak ! IO.EndOfStream => CONTINUE].token; }; SnapshotCommand: Commander.CommandProc ~ { stream: IO.STREAM ¬ IO.RIS[cmd.commandLine]; outputName: ROPE ¬ GetCmdToken[stream]; IF outputName = NIL THEN {cmd.out.PutRope[cmd.procData.doc]; RETURN}; SnapshotIP[outputName]; outputName ¬ FindFullName[outputName]; cmd.out.PutRope[outputName]; cmd.out.PutRope[" written.\n"]; }; Commander.Register["Snapshot", SnapshotCommand, "Make an Interpress master from the screen. Specify output IP file name.\n"]; END. 2 SnapshotImpl.mesa Copyright Σ 1985, 1986, 1987, 1992 by Xerox Corporation. All rights reserved. Michael Plass, January 22, 1988 5:37:14 pm PST Doug Wyatt, June 6, 1986 2:41:31 pm PDT Maureen Stone, April 22, 1987 2:47:48 pm PDT Kenneth A. Pier, September 3, 1992 11:31 am PDT. Ported to Cedar10. Κ H–(cedarcode) style•NewlineDelimiter ™code™Kšœ ΟeœB™NK™.K™'K™,K™D—K˜šΟk œžœžœ<žœ>˜ŸK˜—KšΠln œžœž˜Kšžœžœžœg˜ˆšžœ œœž˜K˜Kšžœžœžœ˜K˜KšΟy2˜2Kš Πky ˜2K˜š y˜yK•StartOfExpansionK[samplesPerPixel: NAT, box: SF.Box, maxSample: ImagerPixel.PixelProc]š  ‘  ‘  ‘  ‘  ‘  ˜GšΠny ‘ ‘ ˜HKš‘ "˜(Kš ˜—š‘ '‘ ˜/Kš 5˜5š‘  ˜ š‘ ˜Kš A˜AKš A˜AKš a˜aKš d˜dK–[maxIn: ImagerSample.Sample]š @˜@K–w[pixelMap: ImagerPixel.PixelMap, box: SF.Box, scanMode: ImagerTransformation.ScanMode, immutable: BOOL _ FALSE]š ‹‘ ˜‘K–Β[context: Imager.Context, pa: ImagerPixelArray.PixelArray, colorOperator: ImagerColor.ColorOperator, m: ImagerTransformation.Transformation _ NIL, position: VEC _ [x: 0.0, y: 0.0]]š E˜EKš ˜—š‘ ˜Kš @˜@Kš G˜GKš 8˜8Kš  ‘  ‘ ˜=Kš ‘ ˜*š’ ‘ ‘  ˜JKš  ‘ ˜Kš J˜Jš‘ ˜"Kš +˜+Kš +˜+Kš .˜.—Kš ˜—K–5[maxSampleValue: ImagerSample.Sample, map: PROC [...]š Y˜YK–w[pixelMap: ImagerPixel.PixelMap, box: SF.Box, scanMode: ImagerTransformation.ScanMode, immutable: BOOL _ FALSE]š ‹‘ ˜‘K–Β[context: Imager.Context, pa: ImagerPixelArray.PixelArray, colorOperator: ImagerColor.ColorOperator, m: ImagerTransformation.Transformation _ NIL, position: VEC _ [x: 0.0, y: 0.0]]š E˜EKš ˜——Kš ˜—Kš ˜Kš ˜—K˜šΟnœžœžœAžœžœžœžœ˜z–>[context: Imager.Context, pa: ImagerPixelArray.PixelArray]šΟbœžœ ˜,Kšœ„žœ˜ŠK–Β[context: Imager.Context, pa: ImagerPixelArray.PixelArray, colorOperator: ImagerColor.ColorOperator, m: ImagerTransformation.Transformation _ NIL, position: VEC _ [x: 0.0, y: 0.0]]šœE˜EK˜—K–K[samplesPerPixel: NAT, box: SF.Box, maxSample: ImagerPixel.PixelProc]š œžœ žœ žœ žœ žœ ˜GK˜DK˜PK˜OK˜K˜—š£ œžœ žœ˜%K˜Eš£œžœ˜)Kšœžœ˜K˜HKšœ%žœ˜+Kšœ#€œ'˜NKšœ˜—KšœK˜KKšœ#˜#Kšœ˜K˜—š £ œžœ žœžœžœ˜7Kšœ žœžœ˜Kšœ žœ˜-Kšžœ ˜Kšœ˜K˜—– "cedar" styleš £ œžœžœžœžœ˜;Kšžœ žœžœ ˜!Kšžœ žœ žœ žœ žœ žœžœ˜VKšžœ ˜Kšœ˜K˜—– "cedar" styleš £ œžœ žœžœžœžœ˜>K– "cedar" stylešœžœ˜ K– "cedar" stylešœ+žœžœ˜MKšœ˜K˜—š£œ˜*Kš œžœžœžœžœ˜,Kšœ žœ˜'Kšžœžœžœ%žœ˜EK˜K˜&Kšœ˜Kšœ˜Kšœ˜K˜—K˜}K˜—Kšžœ˜—…—”