Syntax10.Scn.Fnt Syntax10b.Scn.Fnt MODULE AmigaGraphics; (*shml/cn 15-Mar-1993 *) IMPORT SYSTEM, A:=AmigaBase,E:=AmigaExec; CONST graphicsName*="graphics.library"; hiresLaceKey*=00008004H; (* drawing modes as Flags, not Bitposition *) jam1*=0; jam2*=1; complement*=2; inversvid*=4; (* Layer Flags *) layerSimple*=0; layerBackdrop*=6; (* AllocBitMap Flags *) bmbClear*= 0; bmbDisplayable*= 1; bmbInterleaved*= 2; bmbStandard*= 3; bmbMinplanes*= 4; (* ObtainPen Flags, V39 *) penbExclusive*= 0; penbNoSetcolor*= 1; Some Pointer without their records AreaInfoPtr*=LONGINT; ClipRectPtr*=LONGINT; ColorMapPtr*=LONGINT; CopListPtr*=LONGINT; GelsInfoPtr*=LONGINT; HookPtr*=LONGINT; LayerPtr*=LONGINT; LayerInfoPtr*=LONGINT; PlanePtr*=LONGINT; RasInfoPtr*=LONGINT; RastPortPtr*=LONGINT; RegionPtr*=LONGINT; RectanglePtr*=LONGINT; TmpRasPtr*=LONGINT; UCopListPtr*=LONGINT; LayerInfo*=RECORD layer*:LayerPtr; lp*:LayerPtr; (* system use *) obs*:ClipRectPtr; freeClipRects*:E.MinList; lock*:E.SignalSemaphore; head*:E.List; longreserved*:LONGINT; flags*:INTEGER; count*:SHORTINT; lockLayersCount*:SHORTINT; layerInfoExtraSize*:INTEGER; blitbuff*:LONGINT; layerInfoExtra*:E.PROC END; ViewPortPtr*=LONGINT; ViewPort*=RECORD next*:ViewPortPtr; colorMap*:ColorMapPtr; dspIns*:CopListPtr; sprIns*:CopListPtr; clrIns*:CopListPtr; uCopIns*:UCopListPtr; dWidth*,dHeight*:INTEGER; dxOffset*,dyOffset*:INTEGER; modes*:INTEGER; spritePriorities*:SHORTINT; extendedModes*:SHORTINT; rasInfo*:RasInfoPtr END; TextAttr*=RECORD name*:LONGINT; ySize*:INTEGER; style*:SHORTINT; flags*:SHORTINT END; TextAttrPtr*=LONGINT; TextFont*=RECORD message*:E.Message; ySize*:INTEGER; style*:SHORTINT; flags*:SHORTINT; xSize*:INTEGER; baseline*:INTEGER; boldSmear*:INTEGER; accessors*:INTEGER; loChar*:CHAR; hiChar*:CHAR; charData*:LONGINT; modulo*:INTEGER; charLoc*:LONGINT; charSpace*:LONGINT; charKern*:LONGINT END; TextFontPtr*=LONGINT; BitMap*=RECORD bytesPerRow*:INTEGER; rows*:INTEGER; flags*:SHORTINT; depth*:SHORTINT; pad*:INTEGER; planes*:ARRAY 8 OF PlanePtr END; BitMapPtr*=LONGINT; BitMapPointer*=POINTER TO BitMap; Rectangle*=RECORD minX*,minY*,maxX*,maxY*:INTEGER END; LayerPointer*=POINTER TO Layer; Layer*=RECORD front*:LayerPtr; back*:LayerPtr; clipRect*:ClipRectPtr; rp*:RastPortPtr; bounds*:Rectangle; reserved:ARRAY 4 OF SYSTEM.BYTE; priority*:INTEGER; flags*:INTEGER; superBitMap*:BitMapPtr; superClipRect*:ClipRectPtr; window*:LONGINT; scrollX*:INTEGER; scrollY*:INTEGER; cr*:ClipRectPtr; cr2*:ClipRectPtr; crnew*:ClipRectPtr; superSaveClipRects*:ClipRectPtr; cliprects*:ClipRectPtr; layerInfo*:LayerInfoPtr; lock*:E.SignalSemaphore; backFill*:HookPtr; reserved1:LONGINT; clipRegion*:RegionPtr; saveClipRects*:RegionPtr; width*,height*:INTEGER; reserved2:ARRAY 18 OF SYSTEM.BYTE; damageList*:RegionPtr END; RastPortPointer*=POINTER TO RastPort; RastPort*=RECORD layer*:LayerPtr; bitMap*:BitMapPtr; areaPtrn*:LONGINT; tmpRas*:TmpRasPtr; areaInfo*:AreaInfoPtr; gelsInfo*:GelsInfoPtr; mask*:SHORTINT; fgPen*:SHORTINT; bgPen*:SHORTINT; aOlPen*:SHORTINT; drawMode*:SHORTINT; areaPtSz*:SHORTINT; linPatCnt*:SHORTINT; dummy*:SHORTINT; flags*:INTEGER; linePtrn*:INTEGER; x*,y*:INTEGER; minterms*:ARRAY 8 OF SHORTINT; penWidth*:INTEGER; penHeight*:INTEGER; font*:TextFontPtr; algoStyle*:SHORTINT; txFlags*:SHORTINT; txHeigh*:INTEGER; txWidth*:INTEGER; txBaselin*:INTEGER; txSpacing*:INTEGER; user*:LONGINT; longreserved*:ARRAY 2 OF LONGINT; wordreserved*:ARRAY 7 OF INTEGER; reserved*:ARRAY 8 OF SHORTINT END; gfxBase:LONGINT; gfxVersion-:INTEGER; PROCEDURE AddFont*(textFontPtr:TextFontPtr); r:A.Regs; BEGIN r.a[1]:=textFontPtr; A.LibCall(gfxBase,-480,r) END AddFont; PROCEDURE AllocRaster*(width,height:INTEGER):PlanePtr; r:A.Regs; BEGIN r.d[0]:=width; r.d[1]:=height; A.LibCall(gfxBase,-492,r); RETURN r.d[0] END AllocRaster; PROCEDURE BltBitMapRastPort*( srcBitMap:BitMapPtr; xSrc,ySrc:INTEGER; destRP:RastPortPtr; xDest,yDest:INTEGER; xSize,ySize:INTEGER; minterm:CHAR); r:A.Regs; BEGIN r.a[0]:=SYSTEM.VAL(LONGINT,srcBitMap); r.d[0]:=xSrc; r.d[1]:=ySrc; r.a[1]:=SYSTEM.VAL(LONGINT,destRP); r.d[2]:=xDest; r.d[3]:=yDest; r.d[4]:=xSize; r.d[5]:=ySize; r.d[6]:=ORD(minterm); A.LibCall(gfxBase,-606,r) END BltBitMapRastPort; PROCEDURE BltPattern*( rp:RastPortPtr; mask:LONGINT; xl,yl:INTEGER; maxX,maxY:INTEGER; byteCnt:INTEGER); r:A.Regs; BEGIN r.a[0]:=mask; r.a[1]:=rp; r.d[0]:=xl; r.d[1]:=yl; r.d[2]:=maxX; r.d[3]:=maxY; r.d[4]:=byteCnt; A.LibCall(gfxBase,-312,r) END BltPattern; PROCEDURE BltTemplate*( srcTemplate:LONGINT; srcX,srcMod:INTEGER; rp:RastPortPtr; dstX,dstY:INTEGER; sizeX,sizeY:INTEGER); r:A.Regs; BEGIN r.a[0]:=srcTemplate; r.d[0]:=srcX; r.d[1]:=srcMod; r.a[1]:=rp; r.d[2]:=dstX; r.d[3]:=dstY; r.d[4]:=sizeX; r.d[5]:=sizeY; A.LibCall(gfxBase,-36,r) END BltTemplate; PROCEDURE ClipBlit*( srcRP:RastPortPtr; xSrc,ySrc:INTEGER; destRP:RastPortPtr; xDest,yDest:INTEGER; xSize,ySize:INTEGER; minterm:CHAR); r:A.Regs; BEGIN r.a[0]:=SYSTEM.VAL(LONGINT,srcRP); r.d[0]:=xSrc; r.d[1]:=ySrc; r.a[1]:=SYSTEM.VAL(LONGINT,destRP); r.d[2]:=xDest; r.d[3]:=yDest; r.d[4]:=xSize; r.d[5]:=ySize; r.d[6]:=ORD(minterm); A.LibCall(gfxBase,-552,r) END ClipBlit; PROCEDURE CloseFont*(font:TextFontPtr); r:A.Regs; BEGIN r.a[1]:=font; A.LibCall(gfxBase,-78,r) END CloseFont; PROCEDURE DisposeRegion*(region:RegionPtr); r:A.Regs; BEGIN r.a[0]:=region; A.LibCall(gfxBase,-534,r) END DisposeRegion; PROCEDURE Draw*(rp:RastPortPtr; x,y:INTEGER); r:A.Regs; BEGIN r.a[1]:=SYSTEM.VAL(LONGINT,rp); r.d[0]:=x; r.d[1]:=y; A.LibCall(gfxBase,-246,r) END Draw; PROCEDURE DrawEllipse*(rp:RastPortPtr; x,y,a,b:INTEGER); r:A.Regs; BEGIN r.a[1]:=SYSTEM.VAL(LONGINT,rp); r.d[0]:=x; r.d[1]:=y; r.d[2]:=a; r.d[3]:=b; A.LibCall(gfxBase,-180,r) END DrawEllipse; PROCEDURE FreeRaster*(p:PlanePtr; width,height:INTEGER); r:A.Regs; BEGIN r.a[0]:=p; r.d[0]:=width; r.d[1]:=height; A.LibCall(gfxBase,-498,r) END FreeRaster; PROCEDURE GetRGB4*(colorMap:ColorMapPtr; entry:LONGINT):INTEGER; r:A.Regs; BEGIN r.a[0]:=colorMap; r.d[0]:=entry; A.LibCall(gfxBase,-582,r); RETURN SHORT(r.d[0]) END GetRGB4; PROCEDURE GetRGB32*(colorMap:ColorMapPtr; firstcolor,ncolors:LONGINT; VAR table:ARRAY OF SYSTEM.BYTE); r:A.Regs; BEGIN r.a[0]:=colorMap; r.d[0]:=firstcolor; r.d[1]:=ncolors; r.a[1]:=SYSTEM.ADR(table); A.LibCall(gfxBase,-900,r) END GetRGB32; PROCEDURE GetVPModeID*(vp:ViewPortPtr):LONGINT; r:A.Regs; BEGIN r.a[0]:=vp; A.LibCall(gfxBase,-792,r); RETURN r.d[0] END GetVPModeID; PROCEDURE InitBitMap*(VAR bitMap:BitMap; depth,width,height:INTEGER); r:A.Regs; BEGIN r.a[0]:=SYSTEM.ADR(bitMap); r.d[0]:=depth; r.d[1]:=width; r.d[2]:=height; A.LibCall(gfxBase,-390,r) END InitBitMap; PROCEDURE InitRastPort*(VAR rp:RastPort); r:A.Regs; BEGIN r.a[1]:=SYSTEM.ADR(rp); A.LibCall(gfxBase,-198,r) END InitRastPort; PROCEDURE Move*(rp:RastPortPtr; x,y:INTEGER); r:A.Regs; BEGIN r.a[1]:=SYSTEM.VAL(LONGINT,rp); r.d[0]:=x; r.d[1]:=y; A.LibCall(gfxBase,-240,r) END Move; PROCEDURE NewRegion*():RegionPtr; r:A.Regs; BEGIN A.LibCall(gfxBase,-516,r); RETURN r.d[0] END NewRegion; PROCEDURE OrRectRegion*(region:RegionPtr; rectangle:RectanglePtr):BOOLEAN; r:A.Regs; BEGIN r.a[0]:=region; r.a[1]:=rectangle; A.LibCall(gfxBase,-510,r); RETURN r.d[0]#0 END OrRectRegion; PROCEDURE ReadPixel*(rp:RastPortPtr; x,y:INTEGER):INTEGER; r:A.Regs; BEGIN r.a[1]:=SYSTEM.VAL(LONGINT,rp); r.d[0]:=x; r.d[1]:=y; A.LibCall(gfxBase,-318,r); RETURN SHORT(r.d[0]) END ReadPixel; PROCEDURE RectFill*(rp:RastPortPtr; xMin,yMin,xMax,yMax:INTEGER); r:A.Regs; BEGIN r.a[1]:=SYSTEM.VAL(LONGINT,rp); r.d[0]:=xMin; r.d[1]:=yMin; r.d[2]:=xMax; r.d[3]:=yMax; A.LibCall(gfxBase,-306,r) END RectFill; PROCEDURE SetAPen*(rp:RastPortPtr; pen:INTEGER); r:A.Regs; BEGIN r.a[1]:=SYSTEM.VAL(LONGINT,rp); r.d[0]:=pen; A.LibCall(gfxBase,-342,r) END SetAPen; PROCEDURE SetBPen*(rp:RastPortPtr; pen:INTEGER); r:A.Regs; BEGIN r.a[1]:=SYSTEM.VAL(LONGINT,rp); r.d[0]:=pen; A.LibCall(gfxBase,-348,r) END SetBPen; PROCEDURE SetDrMd*(rp:RastPortPtr; drawMode:SHORTINT); r:A.Regs; BEGIN r.a[1]:=SYSTEM.VAL(LONGINT,rp); r.d[0]:=drawMode; A.LibCall(gfxBase,-354,r) END SetDrMd; PROCEDURE SetFont*(rp:RastPortPtr; textFont:TextFontPtr); r:A.Regs; BEGIN r.a[1]:=SYSTEM.VAL(LONGINT,rp); r.a[0]:=SYSTEM.VAL(LONGINT, textFont); A.LibCall(gfxBase,-66,r) END SetFont; PROCEDURE SetRGB4*(vp:ViewPortPtr; index,red,green,blue:INTEGER); r:A.Regs; BEGIN r.a[0]:=SYSTEM.VAL(LONGINT,vp); r.d[0]:=index; r.d[1]:=red; r.d[2]:=green; r.d[3]:=blue; A.LibCall(gfxBase,-288,r) END SetRGB4; PROCEDURE SetRGB32*(vp:ViewPortPtr; index,red,green,blue:LONGINT); r:A.Regs; BEGIN r.a[0]:=SYSTEM.VAL(LONGINT,vp); r.d[0]:=index; r.d[1]:=red; r.d[2]:=green; r.d[3]:=blue; A.LibCall(gfxBase,-852,r) END SetRGB32; PROCEDURE Text*(rp:RastPortPtr; VAR string:ARRAY OF CHAR; count:LONGINT); VAR r:A.Regs; BEGIN r.a[1]:=SYSTEM.VAL(LONGINT,rp); r.a[0]:=SYSTEM.ADR(string); r.d[0]:=count; A.LibCall(gfxBase,-60,r) END Text; PROCEDURE WaitBlit*(); VAR r:A.Regs; BEGIN A.LibCall(gfxBase,-228,r) END WaitBlit; PROCEDURE WritePixel*(rp:RastPortPtr; x,y:INTEGER):BOOLEAN; VAR r:A.Regs; BEGIN r.a[1]:=SYSTEM.VAL(LONGINT,rp); r.d[0]:=x; r.d[1]:=y; A.LibCall(gfxBase,-324,r); RETURN r.d[0]#0 END WritePixel; (* New procedures from V39 *) PROCEDURE SetWriteMask*(rp:RastPortPtr; Mask:LONGINT)(*:BOOLEAN*); VAR r:A.Regs; BEGIN r.a[0]:=SYSTEM.VAL(LONGINT,rp); r.d[0]:=Mask; A.LibCall(gfxBase,-984,r); (*RETURN r.d[0]#0*) (* SetWriteMask returns, if device supports WriteMask; ignore it *) END SetWriteMask; PROCEDURE AllocBitMap*(x, y, depth: LONGINT; flags: SET; friendBitMap: BitMapPtr):BitMapPtr; VAR r:A.Regs; BEGIN r.d[0]:=x; r.d[1]:=y; r.d[2]:=depth; r.d[3]:=SYSTEM.VAL(LONGINT, flags); r.a[0]:=friendBitMap; A.LibCall(gfxBase,-918,r); RETURN r.d[0] END AllocBitMap; PROCEDURE FreeBitMap*(bm: BitMapPtr); VAR r:A.Regs; BEGIN r.a[0]:=bm; A.LibCall(gfxBase,-924,r) END FreeBitMap; PROCEDURE ObtainPen*(cm: ColorMapPtr; n, r, g, b: LONGINT; Flags: SET): LONGINT; VAR d:A.Regs; BEGIN d.a[0]:=cm; d.d[0]:=n; d.d[1]:=r; d.d[2]:=g; d.d[3]:=b; d.d[4]:=SYSTEM.VAL(LONGINT, Flags); A.LibCall(gfxBase,-954, d); RETURN d.d[0] END ObtainPen; PROCEDURE ReleasePen*(cm: ColorMapPtr; n: LONGINT); VAR r:A.Regs; BEGIN r.a[0]:=cm; r.d[0]:=n; A.LibCall(gfxBase,-948, r) END ReleasePen; PROCEDURE Init; LibraryPtr=POINTER TO E.Library; lib:LibraryPtr; BEGIN gfxBase:=E.OpenLibrary(graphicsName,37); IF gfxBase=0 THEN HALT(99) END; lib:=SYSTEM.VAL(LibraryPtr,gfxBase); gfxVersion:=lib.version END Init; BEGIN Init END AmigaGraphics.