home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
coders
/
jËzyki_programowania
/
oberon
/
system
/
amigagraphics.mod
(
.txt
)
< prev
next >
Wrap
Oberon Text
|
1977-12-31
|
13KB
|
510 lines
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.