-- TJaMImageImpl.mesa
-- Last changed by Bill Paxton,  March 12, 1982 8:35 am

DIRECTORY
  Graphics,
  GraphicsBasic,
  GraphicsOps,
  JaMOps,
  JaMInternal,
  JaMFnsDefs,
  ConvertUnsafe,
  Real,
  TJaMGraphics;

TJaMImageImpl: PROGRAM
IMPORTS Graphics,
  GraphicsOps,
  JaMFnsDefs,
  JaMOps,
  ConvertUnsafe,
  Real,
  TJaMGraphics = {

JDrawImage: PROCEDURE [frame: JaMInternal.Frame] = {
  Draw: PROC [dc: Graphics.Context] = { Graphics.DrawImage[dc,image] };
  str: STRING ← [100];
  name: REF TEXT;
  image: GraphicsBasic.ImageRef;
  JaMFnsDefs.PopString[str];
  name ← ConvertUnsafe.ToRefText[str];
  image ← GraphicsOps.NewAisImage[name];
  TJaMGraphics.Painter[Draw, frame];
  };

JCopyScreen: PROCEDURE [frame: JaMInternal.Frame] = {
	Get: PROC RETURNS [CARDINAL] = {
		RETURN [Real.RoundC[MAX[JaMOps.PopReal[frame.opstk],0.0]]] };
	y2: CARDINAL ← Get[];
	x2: CARDINAL ← Get[];
	y1: CARDINAL ← Get[];
	x1: CARDINAL ← Get[];
	Copy: PROC [dc: Graphics.Context] = {
		GraphicsOps.DrawBitmap[
			self: dc,
			bitmap: GraphicsOps.ScreenBitmap[],
			w: x2-x1,
			h: y2-y1,
			x: x1,
			y: y1,
			xorigin: (x1+x2)/2,
			yorigin: (y1+y2)/2
 			] };
	IF x1 > x2 THEN { temp: CARDINAL ← x1; x1 ← x2; x2 ← temp };
	IF y1 > y2 THEN { temp: CARDINAL ← y1; y1 ← y2; y2 ← temp };
	TJaMGraphics.Painter[Copy, frame];
	};

JaMOps.RegisterExplicit[JaMOps.defaultFrame,".drawimage"L,JDrawImage];
JaMOps.RegisterExplicit[JaMOps.defaultFrame,".copyscreen"L,JCopyScreen];

}...