ð@Syntax10.Scn.Fnt'Syntax12.Scn.Fnt'Syntax10b.Scn.Fnt ) <     "6                              O   ’ } W   6        <X Wt 8a= -  T J bz ¦ … ½ rò m t¢ Ý m  ä z¢ X ´, ºòš•ÎB ³l®:MODULE AmigaGraphics; (* shml/cn/rd/oj *) IMPORT SYSTEM, E:=AmigaExec; CONST graphicsName*="graphics.library"; minversion = 36; 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; TYPE (* 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; VAR gfxBase-: E.LibraryPtr; gfxVersion-: INTEGER; termEntry: E.TermEntry; dummy: LONGINT; GetRGB32*: PROCEDURE(colorMap:ColorMapPtr; firstcolor,ncolors:LONGINT; VAR table:ARRAY OF SYSTEM.BYTE); SetRGB32*: PROCEDURE(vp:ViewPortPtr; index,red,green,blue:LONGINT); SetWriteMask*: PROCEDURE(rp:RastPortPtr; Mask:LONGINT); FreeBitMap*: PROCEDURE(bm: BitMapPtr); AllocBitMap*: PROCEDURE(x, y, depth: LONGINT; flags: SET; friendBitMap: BitMapPtr):BitMapPtr; ObtainPen*: PROCEDURE(cm: ColorMapPtr; n, r, g, b: LONGINT; Flags: SET): LONGINT; ReleasePen*: PROCEDURE(cm: ColorMapPtr; n: LONGINT); PROCEDURE -ReturnD0 04EH,05EH, 04EH,075H; PROCEDURE AddFont*(textFontPtr:TextFontPtr); BEGIN SYSTEM.PUTREG( 9, textFontPtr ); SYSTEM.CALL( -480, gfxBase ) END AddFont; PROCEDURE AllocRaster*(width,height:INTEGER):PlanePtr; BEGIN SYSTEM.PUTREG( 0, width ); SYSTEM.PUTREG( 1, height ); SYSTEM.CALL( -492, gfxBase ); ReturnD0 END AllocRaster; PROCEDURE BltBitMapRastPort*( srcBitMap:BitMapPtr; xSrc,ySrc:INTEGER; destRP:RastPortPtr; xDest,yDest:INTEGER; xSize,ySize:INTEGER; minterm:CHAR); BEGIN SYSTEM.PUTREG( 8, srcBitMap ); SYSTEM.PUTREG( 0, xSrc ); SYSTEM.PUTREG( 1, ySrc ); SYSTEM.PUTREG( 9, destRP ); SYSTEM.PUTREG( 2, xDest ); SYSTEM.PUTREG( 3, yDest ); SYSTEM.PUTREG( 4, xSize ); SYSTEM.PUTREG( 5, ySize ); SYSTEM.PUTREG( 6, minterm ); SYSTEM.CALL( -606, gfxBase ) END BltBitMapRastPort; PROCEDURE BltPattern*( rp:RastPortPtr; mask:LONGINT; xl,yl:INTEGER; maxX,maxY:INTEGER; byteCnt:INTEGER); BEGIN SYSTEM.PUTREG( 8, mask ); SYSTEM.PUTREG( 9, rp ); SYSTEM.PUTREG( 0, xl ); SYSTEM.PUTREG( 1, yl ); SYSTEM.PUTREG( 2, maxX ); SYSTEM.PUTREG( 3, maxY ); SYSTEM.PUTREG( 4, byteCnt ); SYSTEM.CALL( -312, gfxBase ) END BltPattern; PROCEDURE BltTemplate*( srcTemplate:LONGINT; srcX,srcMod:INTEGER; rp:RastPortPtr; dstX,dstY:INTEGER; sizeX,sizeY:INTEGER); BEGIN SYSTEM.PUTREG( 8, srcTemplate ); SYSTEM.PUTREG( 0, srcX ); SYSTEM.PUTREG( 1, srcMod ); SYSTEM.PUTREG( 9, rp ); SYSTEM.PUTREG( 2, dstX ); SYSTEM.PUTREG( 3, dstY ); SYSTEM.PUTREG( 4, sizeX ); SYSTEM.PUTREG( 5, sizeY ); SYSTEM.CALL( -36, gfxBase ) END BltTemplate; PROCEDURE ClearRegion*(region:RegionPtr); BEGIN SYSTEM.PUTREG( 8, region ); SYSTEM.CALL( -528, gfxBase ) END ClearRegion; PROCEDURE ClipBlit*( srcRP:RastPortPtr; xSrc,ySrc:INTEGER; destRP:RastPortPtr; xDest,yDest:INTEGER; xSize,ySize:INTEGER; minterm:CHAR); BEGIN SYSTEM.PUTREG( 8, srcRP ); SYSTEM.PUTREG( 0, xSrc ); SYSTEM.PUTREG( 1, ySrc ); SYSTEM.PUTREG( 9, destRP ); SYSTEM.PUTREG( 2, xDest ); SYSTEM.PUTREG( 3, yDest ); SYSTEM.PUTREG( 4, xSize ); SYSTEM.PUTREG( 5, ySize ); SYSTEM.PUTREG( 6, minterm ); SYSTEM.CALL( -552, gfxBase ) END ClipBlit; PROCEDURE CloseFont*(font:TextFontPtr); BEGIN SYSTEM.PUTREG( 9, font ); SYSTEM.CALL( -78, gfxBase ) END CloseFont; PROCEDURE DisposeRegion*(region:RegionPtr); BEGIN SYSTEM.PUTREG( 8, region ); SYSTEM.CALL( -534, gfxBase ) END DisposeRegion; PROCEDURE Draw*(rp:RastPortPtr; x,y:INTEGER); BEGIN SYSTEM.PUTREG( 9, rp ); SYSTEM.PUTREG( 0, x ); SYSTEM.PUTREG( 1, y ); SYSTEM.CALL( -246, gfxBase ) END Draw; PROCEDURE DrawEllipse*(rp:RastPortPtr; x,y,a,b:INTEGER); BEGIN SYSTEM.PUTREG( 9, rp ); SYSTEM.PUTREG( 0, x ); SYSTEM.PUTREG( 1, y ); SYSTEM.PUTREG( 2, a ); SYSTEM.PUTREG( 3, b ); SYSTEM.CALL( -180, gfxBase ) END DrawEllipse; PROCEDURE FreeRaster*(p:PlanePtr; width,height:INTEGER); BEGIN SYSTEM.PUTREG( 8, p ); SYSTEM.PUTREG( 0, width ); SYSTEM.PUTREG( 1, height ); SYSTEM.CALL( -498, gfxBase ) END FreeRaster; PROCEDURE GetRGB4(colorMap:ColorMapPtr; entry:LONGINT):LONGINT; BEGIN SYSTEM.PUTREG( 8, colorMap ); SYSTEM.PUTREG( 0, entry ); SYSTEM.CALL( -582, gfxBase ); ReturnD0 END GetRGB4; PROCEDURE GetVPModeID*(vp:ViewPortPtr):LONGINT; BEGIN SYSTEM.PUTREG( 8, vp ); SYSTEM.CALL( -792, gfxBase ); ReturnD0 END GetVPModeID; PROCEDURE InitBitMap*(bm:BitMapPtr; depth:SHORTINT; width,height:INTEGER); BEGIN SYSTEM.PUTREG( 8, bm ); SYSTEM.PUTREG( 0, depth ); SYSTEM.PUTREG( 1, width ); SYSTEM.PUTREG( 2, height ); SYSTEM.CALL( -390, gfxBase ) END InitBitMap; PROCEDURE InitRastPort*(VAR rp:RastPort); BEGIN SYSTEM.PUTREG( 9, SYSTEM.ADR(rp) ); SYSTEM.CALL( -198, gfxBase ) END InitRastPort; PROCEDURE Move*(rp:RastPortPtr; x,y:INTEGER); BEGIN SYSTEM.PUTREG( 9, rp ); SYSTEM.PUTREG( 0, x ); SYSTEM.PUTREG( 1, y ); SYSTEM.CALL( -240, gfxBase ) END Move; PROCEDURE NewRegion*():RegionPtr; BEGIN SYSTEM.CALL( -516, gfxBase ); ReturnD0 END NewRegion; PROCEDURE OrRectRegion*(region:RegionPtr; rectangle:RectanglePtr):BOOLEAN; BEGIN SYSTEM.PUTREG( 8, region ); SYSTEM.PUTREG( 9, rectangle ); SYSTEM.CALL( -510, gfxBase ); SYSTEM.GETREG( 0, dummy ); RETURN dummy#E.false END OrRectRegion; PROCEDURE ReadPixel*(rp:RastPortPtr; x,y:INTEGER):INTEGER; BEGIN SYSTEM.PUTREG( 9, rp ); SYSTEM.PUTREG( 0, x ); SYSTEM.PUTREG( 1, y ); SYSTEM.CALL( -318, gfxBase ); ReturnD0 END ReadPixel; PROCEDURE RectFill*(rp:RastPortPtr; xMin,yMin,xMax,yMax:INTEGER); BEGIN SYSTEM.PUTREG( 9, rp ); SYSTEM.PUTREG( 0, xMin ); SYSTEM.PUTREG( 1, yMin ); SYSTEM.PUTREG( 2, xMax ); SYSTEM.PUTREG( 3, yMax ); SYSTEM.CALL( -306, gfxBase ) END RectFill; PROCEDURE SetAPen*(rp:RastPortPtr; pen:INTEGER); BEGIN SYSTEM.PUTREG( 9, rp ); SYSTEM.PUTREG( 0, pen ); SYSTEM.CALL( -342, gfxBase ) END SetAPen; PROCEDURE SetBPen*(rp:RastPortPtr; pen:INTEGER); BEGIN SYSTEM.PUTREG( 9, rp ); SYSTEM.PUTREG( 0, pen ); SYSTEM.CALL( -348, gfxBase ) END SetBPen; PROCEDURE SetDrMd*(rp:RastPortPtr; drawMode:SHORTINT); BEGIN SYSTEM.PUTREG( 9, rp ); SYSTEM.PUTREG( 0, drawMode ); SYSTEM.CALL( -354, gfxBase ) END SetDrMd; PROCEDURE SetFont*(rp:RastPortPtr; textFont:TextFontPtr); BEGIN SYSTEM.PUTREG( 9, rp ); SYSTEM.PUTREG( 8, textFont ); SYSTEM.CALL( -66, gfxBase ) END SetFont; PROCEDURE SetRGB4(vp:ViewPortPtr; index,red,green,blue:INTEGER); BEGIN SYSTEM.PUTREG( 8, vp ); SYSTEM.PUTREG( 0, index ); SYSTEM.PUTREG( 1, red ); SYSTEM.PUTREG( 2, green ); SYSTEM.PUTREG( 3, blue ); SYSTEM.CALL( -288, gfxBase ) END SetRGB4; PROCEDURE Text*(rp:RastPortPtr; string:ARRAY OF CHAR; count:LONGINT); BEGIN SYSTEM.PUTREG( 8, SYSTEM.ADR(string) ); SYSTEM.PUTREG( 9, rp ); SYSTEM.PUTREG( 0, count ); SYSTEM.CALL( -60, gfxBase ) END Text; PROCEDURE WaitBlit*(); BEGIN SYSTEM.CALL( -228, gfxBase ) END WaitBlit; PROCEDURE WritePixel*(rp:RastPortPtr; x,y:INTEGER); BEGIN SYSTEM.PUTREG( 9, rp ); SYSTEM.PUTREG( 0, x ); SYSTEM.PUTREG( 1, y ); SYSTEM.CALL( -324, gfxBase ); (* Result is ignored *) END WritePixel; PROCEDURE OS2GetRGB32(colorMap:ColorMapPtr; firstcolor,ncolors:LONGINT; VAR table:ARRAY OF SYSTEM.BYTE); CONST conv4 = 011111111H; TYPE Entry = POINTER TO RECORD r,g,b : LONGINT END; VAR entry : Entry; col : LONGINT; i : INTEGER; BEGIN i := SHORT(ncolors); WHILE i > 0 DO DEC(i); col := GetRGB4(colorMap, firstcolor+i); IF col # -1 THEN entry := SYSTEM.VAL( Entry, SYSTEM.ADR(table[i*12]) ); entry.r := ( (col DIV 100H) MOD 16 ) * conv4; entry.g := ( (col DIV 10H) MOD 16 ) * conv4; (* overflow possible! *) entry.b := ( col MOD 16 ) * conv4 END END END OS2GetRGB32; PROCEDURE OS3GetRGB32(colorMap:ColorMapPtr; firstcolor,ncolors:LONGINT; VAR table:ARRAY OF SYSTEM.BYTE); BEGIN SYSTEM.PUTREG( 9, SYSTEM.ADR(table) ); SYSTEM.PUTREG( 8, colorMap ); SYSTEM.PUTREG( 0, firstcolor ); SYSTEM.PUTREG( 1, ncolors ); SYSTEM.CALL( -900, gfxBase ) END OS3GetRGB32; PROCEDURE OS2SetRGB32(vp:ViewPortPtr; index,red,green,blue:LONGINT); BEGIN SetRGB4(vp,SHORT(index), SHORT( SYSTEM.LSH(red,-28)), SHORT( SYSTEM.LSH(green,-28)), SHORT( SYSTEM.LSH(blue,-28)) ) END OS2SetRGB32; PROCEDURE OS3SetRGB32(vp:ViewPortPtr; index,red,green,blue:LONGINT); BEGIN SYSTEM.PUTREG( 8, vp ); SYSTEM.PUTREG( 0, index ); SYSTEM.PUTREG( 1, red ); SYSTEM.PUTREG( 2, green ); SYSTEM.PUTREG( 3, blue ); SYSTEM.CALL( -852, gfxBase ) END OS3SetRGB32; PROCEDURE OS2SetWriteMask(rp:RastPortPtr; Mask:LONGINT); VAR rastport : RastPortPointer; BEGIN rastport:=SYSTEM.VAL(RastPortPointer,rp); rastport.mask := SHORT(SHORT(Mask)) END OS2SetWriteMask; PROCEDURE OS3SetWriteMask(rp:RastPortPtr; Mask:LONGINT); BEGIN SYSTEM.PUTREG( 8, rp ); SYSTEM.PUTREG( 0, Mask ); SYSTEM.CALL( -984, gfxBase ); (* Result is ignored *) END OS3SetWriteMask; PROCEDURE OS2FreeBitMap(bm: BitMapPtr); VAR i : SHORTINT; bmptr : BitMapPointer; BEGIN bmptr := SYSTEM.VAL( BitMapPointer, bm ); i := 0; WHILE (i=39 THEN GetRGB32:=OS3GetRGB32; SetRGB32:=OS3SetRGB32; SetWriteMask:=OS3SetWriteMask; FreeBitMap:=OS3FreeBitMap; AllocBitMap:=OS3AllocBitMap; ObtainPen:=OS3ObtainPen; ReleasePen:=OS3ReleasePen ELSE GetRGB32:=OS2GetRGB32; SetRGB32:=OS2SetRGB32; SetWriteMask:=OS2SetWriteMask; FreeBitMap:=OS2FreeBitMap; AllocBitMap:=OS2AllocBitMap; ObtainPen:=NIL; ReleasePen:=NIL END END Init; PROCEDURE Term; BEGIN E.CloseLibrary( gfxBase ) END Term; BEGIN Init; E.Register(termEntry, Term) END AmigaGraphics.