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 >
Oberon Text  |  1977-12-31  |  13KB  |  510 lines

  1. Syntax10.Scn.Fnt
  2. Syntax10b.Scn.Fnt
  3. MODULE AmigaGraphics; (*shml/cn 15-Mar-1993 *)
  4. IMPORT
  5.     SYSTEM, A:=AmigaBase,E:=AmigaExec;
  6. CONST
  7.     graphicsName*="graphics.library";
  8.     hiresLaceKey*=00008004H;
  9. (* drawing modes as Flags, not Bitposition *)
  10.     jam1*=0;
  11.     jam2*=1;
  12.     complement*=2;
  13.     inversvid*=4;
  14. (* Layer Flags *)
  15.     layerSimple*=0;
  16.     layerBackdrop*=6;
  17. (* AllocBitMap Flags *)
  18.     bmbClear*= 0;
  19.     bmbDisplayable*= 1;
  20.     bmbInterleaved*= 2;
  21.     bmbStandard*= 3;
  22.     bmbMinplanes*= 4;
  23. (* ObtainPen Flags, V39 *)
  24.     penbExclusive*= 0;
  25.     penbNoSetcolor*= 1;
  26.  Some Pointer without their records
  27.     AreaInfoPtr*=LONGINT;
  28.     ClipRectPtr*=LONGINT;
  29.     ColorMapPtr*=LONGINT;
  30.     CopListPtr*=LONGINT;
  31.     GelsInfoPtr*=LONGINT;
  32.     HookPtr*=LONGINT;
  33.     LayerPtr*=LONGINT;
  34.     LayerInfoPtr*=LONGINT;
  35.     PlanePtr*=LONGINT;
  36.     RasInfoPtr*=LONGINT;
  37.     RastPortPtr*=LONGINT;
  38.     RegionPtr*=LONGINT;
  39.     RectanglePtr*=LONGINT;
  40.     TmpRasPtr*=LONGINT;
  41.     UCopListPtr*=LONGINT;
  42.     LayerInfo*=RECORD
  43.         layer*:LayerPtr;
  44.         lp*:LayerPtr;         (* system use *)
  45.         obs*:ClipRectPtr;
  46.         freeClipRects*:E.MinList;
  47.         lock*:E.SignalSemaphore;
  48.         head*:E.List;
  49.         longreserved*:LONGINT;
  50.         flags*:INTEGER;
  51.         count*:SHORTINT;
  52.         lockLayersCount*:SHORTINT;
  53.         layerInfoExtraSize*:INTEGER;
  54.         blitbuff*:LONGINT;
  55.         layerInfoExtra*:E.PROC
  56.     END;
  57.     ViewPortPtr*=LONGINT;
  58.     ViewPort*=RECORD
  59.         next*:ViewPortPtr;
  60.         colorMap*:ColorMapPtr;
  61.         dspIns*:CopListPtr;
  62.         sprIns*:CopListPtr;
  63.         clrIns*:CopListPtr;
  64.         uCopIns*:UCopListPtr;
  65.         dWidth*,dHeight*:INTEGER;
  66.         dxOffset*,dyOffset*:INTEGER;
  67.         modes*:INTEGER;
  68.         spritePriorities*:SHORTINT;
  69.         extendedModes*:SHORTINT;
  70.         rasInfo*:RasInfoPtr
  71.     END;
  72.     TextAttr*=RECORD
  73.         name*:LONGINT;
  74.         ySize*:INTEGER;
  75.         style*:SHORTINT;
  76.         flags*:SHORTINT
  77.     END;
  78.     TextAttrPtr*=LONGINT;
  79.     TextFont*=RECORD
  80.         message*:E.Message;
  81.         ySize*:INTEGER;
  82.         style*:SHORTINT;
  83.         flags*:SHORTINT;
  84.         xSize*:INTEGER;
  85.         baseline*:INTEGER;
  86.         boldSmear*:INTEGER;
  87.         accessors*:INTEGER;
  88.         loChar*:CHAR;
  89.         hiChar*:CHAR;
  90.         charData*:LONGINT;
  91.         modulo*:INTEGER;
  92.         charLoc*:LONGINT;
  93.         charSpace*:LONGINT;
  94.         charKern*:LONGINT
  95.     END;
  96.     TextFontPtr*=LONGINT;
  97.     BitMap*=RECORD
  98.         bytesPerRow*:INTEGER;
  99.         rows*:INTEGER;
  100.         flags*:SHORTINT;
  101.         depth*:SHORTINT;
  102.         pad*:INTEGER;
  103.         planes*:ARRAY 8 OF PlanePtr
  104.     END;
  105.     BitMapPtr*=LONGINT;
  106.     BitMapPointer*=POINTER TO BitMap;
  107.     Rectangle*=RECORD
  108.         minX*,minY*,maxX*,maxY*:INTEGER
  109.     END;
  110.     LayerPointer*=POINTER TO Layer;
  111.     Layer*=RECORD
  112.         front*:LayerPtr;
  113.         back*:LayerPtr;
  114.         clipRect*:ClipRectPtr;
  115.         rp*:RastPortPtr;
  116.         bounds*:Rectangle;
  117.         reserved:ARRAY 4 OF SYSTEM.BYTE;
  118.         priority*:INTEGER;
  119.         flags*:INTEGER;
  120.         superBitMap*:BitMapPtr;
  121.         superClipRect*:ClipRectPtr;
  122.         window*:LONGINT;
  123.         scrollX*:INTEGER;
  124.         scrollY*:INTEGER;
  125.         cr*:ClipRectPtr;
  126.         cr2*:ClipRectPtr;
  127.         crnew*:ClipRectPtr;
  128.         superSaveClipRects*:ClipRectPtr;
  129.         cliprects*:ClipRectPtr;
  130.         layerInfo*:LayerInfoPtr;
  131.         lock*:E.SignalSemaphore;
  132.         backFill*:HookPtr;
  133.         reserved1:LONGINT;
  134.         clipRegion*:RegionPtr;
  135.         saveClipRects*:RegionPtr;
  136.         width*,height*:INTEGER;
  137.         reserved2:ARRAY 18 OF SYSTEM.BYTE;
  138.         damageList*:RegionPtr
  139.     END;
  140.     RastPortPointer*=POINTER TO RastPort;
  141.     RastPort*=RECORD
  142.         layer*:LayerPtr;
  143.         bitMap*:BitMapPtr;
  144.         areaPtrn*:LONGINT;
  145.         tmpRas*:TmpRasPtr;
  146.         areaInfo*:AreaInfoPtr;
  147.         gelsInfo*:GelsInfoPtr;
  148.         mask*:SHORTINT;
  149.         fgPen*:SHORTINT;
  150.         bgPen*:SHORTINT;
  151.         aOlPen*:SHORTINT;
  152.         drawMode*:SHORTINT;
  153.         areaPtSz*:SHORTINT;
  154.         linPatCnt*:SHORTINT;
  155.         dummy*:SHORTINT;
  156.         flags*:INTEGER;
  157.         linePtrn*:INTEGER;
  158.         x*,y*:INTEGER;
  159.         minterms*:ARRAY 8 OF SHORTINT;
  160.         penWidth*:INTEGER;
  161.         penHeight*:INTEGER;
  162.         font*:TextFontPtr;
  163.         algoStyle*:SHORTINT;
  164.         txFlags*:SHORTINT;
  165.         txHeigh*:INTEGER;
  166.         txWidth*:INTEGER;
  167.         txBaselin*:INTEGER;
  168.         txSpacing*:INTEGER;
  169.         user*:LONGINT;
  170.         longreserved*:ARRAY 2 OF LONGINT;
  171.         wordreserved*:ARRAY 7 OF INTEGER;
  172.         reserved*:ARRAY 8 OF SHORTINT
  173.     END;
  174.     gfxBase:LONGINT;
  175.     gfxVersion-:INTEGER;
  176. PROCEDURE AddFont*(textFontPtr:TextFontPtr);
  177.     r:A.Regs;
  178. BEGIN
  179.     r.a[1]:=textFontPtr;
  180.     A.LibCall(gfxBase,-480,r)
  181. END AddFont;
  182. PROCEDURE AllocRaster*(width,height:INTEGER):PlanePtr;
  183.     r:A.Regs;
  184. BEGIN
  185.     r.d[0]:=width;
  186.     r.d[1]:=height;
  187.     A.LibCall(gfxBase,-492,r);
  188.     RETURN r.d[0]
  189. END AllocRaster;
  190. PROCEDURE BltBitMapRastPort*(
  191.            srcBitMap:BitMapPtr;
  192.            xSrc,ySrc:INTEGER;
  193.            destRP:RastPortPtr;
  194.            xDest,yDest:INTEGER;
  195.            xSize,ySize:INTEGER;
  196.            minterm:CHAR);
  197.     r:A.Regs;
  198. BEGIN
  199.     r.a[0]:=SYSTEM.VAL(LONGINT,srcBitMap);
  200.     r.d[0]:=xSrc;
  201.     r.d[1]:=ySrc;
  202.     r.a[1]:=SYSTEM.VAL(LONGINT,destRP);
  203.     r.d[2]:=xDest;
  204.     r.d[3]:=yDest;
  205.     r.d[4]:=xSize;
  206.     r.d[5]:=ySize;
  207.     r.d[6]:=ORD(minterm);
  208.     A.LibCall(gfxBase,-606,r)
  209. END BltBitMapRastPort;
  210. PROCEDURE BltPattern*(
  211.            rp:RastPortPtr;
  212.            mask:LONGINT;
  213.            xl,yl:INTEGER;
  214.            maxX,maxY:INTEGER;
  215.            byteCnt:INTEGER);
  216.     r:A.Regs;
  217. BEGIN
  218.     r.a[0]:=mask;
  219.     r.a[1]:=rp;
  220.     r.d[0]:=xl;
  221.     r.d[1]:=yl;
  222.     r.d[2]:=maxX;
  223.     r.d[3]:=maxY;
  224.     r.d[4]:=byteCnt;
  225.     A.LibCall(gfxBase,-312,r)
  226. END BltPattern;
  227. PROCEDURE BltTemplate*(
  228.            srcTemplate:LONGINT;
  229.            srcX,srcMod:INTEGER;
  230.            rp:RastPortPtr;
  231.            dstX,dstY:INTEGER;
  232.            sizeX,sizeY:INTEGER);
  233.     r:A.Regs;
  234. BEGIN
  235.     r.a[0]:=srcTemplate;
  236.     r.d[0]:=srcX;
  237.     r.d[1]:=srcMod;
  238.     r.a[1]:=rp;
  239.     r.d[2]:=dstX;
  240.     r.d[3]:=dstY;
  241.     r.d[4]:=sizeX;
  242.     r.d[5]:=sizeY;
  243.     A.LibCall(gfxBase,-36,r)
  244. END BltTemplate;
  245. PROCEDURE ClipBlit*(
  246.            srcRP:RastPortPtr;
  247.            xSrc,ySrc:INTEGER;
  248.            destRP:RastPortPtr;
  249.            xDest,yDest:INTEGER;
  250.            xSize,ySize:INTEGER;
  251.            minterm:CHAR);
  252.     r:A.Regs;
  253. BEGIN
  254.     r.a[0]:=SYSTEM.VAL(LONGINT,srcRP);
  255.     r.d[0]:=xSrc;
  256.     r.d[1]:=ySrc;
  257.     r.a[1]:=SYSTEM.VAL(LONGINT,destRP);
  258.     r.d[2]:=xDest;
  259.     r.d[3]:=yDest;
  260.     r.d[4]:=xSize;
  261.     r.d[5]:=ySize;
  262.     r.d[6]:=ORD(minterm);
  263.     A.LibCall(gfxBase,-552,r)
  264. END ClipBlit;
  265. PROCEDURE CloseFont*(font:TextFontPtr);
  266.     r:A.Regs;
  267. BEGIN
  268.     r.a[1]:=font;
  269.     A.LibCall(gfxBase,-78,r)
  270. END CloseFont;
  271. PROCEDURE DisposeRegion*(region:RegionPtr);
  272.     r:A.Regs;
  273. BEGIN
  274.     r.a[0]:=region;
  275.     A.LibCall(gfxBase,-534,r)
  276. END DisposeRegion;
  277. PROCEDURE Draw*(rp:RastPortPtr; x,y:INTEGER);
  278.     r:A.Regs;
  279. BEGIN
  280.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  281.     r.d[0]:=x;
  282.     r.d[1]:=y;
  283.     A.LibCall(gfxBase,-246,r)
  284. END Draw;
  285. PROCEDURE DrawEllipse*(rp:RastPortPtr; x,y,a,b:INTEGER);
  286.     r:A.Regs;
  287. BEGIN
  288.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  289.     r.d[0]:=x;
  290.     r.d[1]:=y;
  291.     r.d[2]:=a;
  292.     r.d[3]:=b;
  293.     A.LibCall(gfxBase,-180,r)
  294. END DrawEllipse;
  295. PROCEDURE FreeRaster*(p:PlanePtr; width,height:INTEGER);
  296.     r:A.Regs;
  297. BEGIN
  298.     r.a[0]:=p;
  299.     r.d[0]:=width;
  300.     r.d[1]:=height;
  301.     A.LibCall(gfxBase,-498,r)
  302. END FreeRaster;
  303. PROCEDURE GetRGB4*(colorMap:ColorMapPtr; entry:LONGINT):INTEGER;
  304.     r:A.Regs;
  305. BEGIN
  306.     r.a[0]:=colorMap;
  307.     r.d[0]:=entry;
  308.     A.LibCall(gfxBase,-582,r);
  309.     RETURN SHORT(r.d[0])
  310. END GetRGB4;
  311. PROCEDURE GetRGB32*(colorMap:ColorMapPtr; firstcolor,ncolors:LONGINT; VAR table:ARRAY OF SYSTEM.BYTE);
  312.     r:A.Regs;
  313. BEGIN
  314.     r.a[0]:=colorMap;
  315.     r.d[0]:=firstcolor;
  316.     r.d[1]:=ncolors;
  317.     r.a[1]:=SYSTEM.ADR(table);
  318.     A.LibCall(gfxBase,-900,r)
  319. END GetRGB32;
  320. PROCEDURE GetVPModeID*(vp:ViewPortPtr):LONGINT;
  321.     r:A.Regs;
  322. BEGIN
  323.     r.a[0]:=vp;
  324.     A.LibCall(gfxBase,-792,r);
  325.     RETURN r.d[0]
  326. END GetVPModeID;
  327. PROCEDURE InitBitMap*(VAR bitMap:BitMap; depth,width,height:INTEGER);
  328.     r:A.Regs;
  329. BEGIN
  330.     r.a[0]:=SYSTEM.ADR(bitMap);
  331.     r.d[0]:=depth;
  332.     r.d[1]:=width;
  333.     r.d[2]:=height;
  334.     A.LibCall(gfxBase,-390,r)
  335. END InitBitMap;
  336. PROCEDURE InitRastPort*(VAR rp:RastPort);
  337.     r:A.Regs;
  338. BEGIN
  339.     r.a[1]:=SYSTEM.ADR(rp);
  340.     A.LibCall(gfxBase,-198,r)
  341. END InitRastPort;
  342. PROCEDURE Move*(rp:RastPortPtr; x,y:INTEGER);
  343.     r:A.Regs;
  344. BEGIN
  345.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  346.     r.d[0]:=x;
  347.     r.d[1]:=y;
  348.     A.LibCall(gfxBase,-240,r)
  349. END Move;
  350. PROCEDURE NewRegion*():RegionPtr;
  351.     r:A.Regs;
  352. BEGIN
  353.     A.LibCall(gfxBase,-516,r);
  354.     RETURN r.d[0]
  355. END NewRegion;
  356. PROCEDURE OrRectRegion*(region:RegionPtr; rectangle:RectanglePtr):BOOLEAN;
  357.     r:A.Regs;
  358. BEGIN
  359.     r.a[0]:=region;
  360.     r.a[1]:=rectangle;
  361.     A.LibCall(gfxBase,-510,r);
  362.     RETURN r.d[0]#0
  363. END OrRectRegion;
  364. PROCEDURE ReadPixel*(rp:RastPortPtr; x,y:INTEGER):INTEGER;
  365.     r:A.Regs;
  366. BEGIN
  367.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  368.     r.d[0]:=x;
  369.     r.d[1]:=y;
  370.     A.LibCall(gfxBase,-318,r);
  371.     RETURN SHORT(r.d[0])
  372. END ReadPixel;
  373. PROCEDURE RectFill*(rp:RastPortPtr; xMin,yMin,xMax,yMax:INTEGER);
  374.     r:A.Regs;
  375. BEGIN
  376.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  377.     r.d[0]:=xMin;
  378.     r.d[1]:=yMin;
  379.     r.d[2]:=xMax;
  380.     r.d[3]:=yMax;
  381.     A.LibCall(gfxBase,-306,r)
  382. END RectFill;
  383. PROCEDURE SetAPen*(rp:RastPortPtr; pen:INTEGER);
  384.     r:A.Regs;
  385. BEGIN
  386.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  387.     r.d[0]:=pen;
  388.     A.LibCall(gfxBase,-342,r)
  389. END SetAPen;
  390. PROCEDURE SetBPen*(rp:RastPortPtr; pen:INTEGER);
  391.     r:A.Regs;
  392. BEGIN
  393.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  394.     r.d[0]:=pen;
  395.     A.LibCall(gfxBase,-348,r)
  396. END SetBPen;
  397. PROCEDURE SetDrMd*(rp:RastPortPtr; drawMode:SHORTINT);
  398.     r:A.Regs;
  399. BEGIN
  400.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  401.     r.d[0]:=drawMode;
  402.     A.LibCall(gfxBase,-354,r)
  403. END SetDrMd;
  404. PROCEDURE SetFont*(rp:RastPortPtr; textFont:TextFontPtr);
  405.     r:A.Regs;
  406. BEGIN
  407.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  408.     r.a[0]:=SYSTEM.VAL(LONGINT, textFont);
  409.     A.LibCall(gfxBase,-66,r)
  410. END SetFont;
  411. PROCEDURE SetRGB4*(vp:ViewPortPtr; index,red,green,blue:INTEGER);
  412.     r:A.Regs;
  413. BEGIN
  414.     r.a[0]:=SYSTEM.VAL(LONGINT,vp);
  415.     r.d[0]:=index;
  416.     r.d[1]:=red;
  417.     r.d[2]:=green;
  418.     r.d[3]:=blue;
  419.     A.LibCall(gfxBase,-288,r)
  420. END SetRGB4;
  421. PROCEDURE SetRGB32*(vp:ViewPortPtr; index,red,green,blue:LONGINT);
  422.     r:A.Regs;
  423. BEGIN
  424.     r.a[0]:=SYSTEM.VAL(LONGINT,vp);
  425.     r.d[0]:=index;
  426.     r.d[1]:=red;
  427.     r.d[2]:=green;
  428.     r.d[3]:=blue;
  429.     A.LibCall(gfxBase,-852,r)
  430. END SetRGB32;
  431. PROCEDURE Text*(rp:RastPortPtr; VAR string:ARRAY OF CHAR; count:LONGINT);
  432. VAR r:A.Regs;
  433. BEGIN
  434.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  435.     r.a[0]:=SYSTEM.ADR(string);
  436.     r.d[0]:=count;
  437.     A.LibCall(gfxBase,-60,r)
  438. END Text;
  439. PROCEDURE WaitBlit*();
  440. VAR r:A.Regs;
  441. BEGIN
  442.     A.LibCall(gfxBase,-228,r)
  443. END WaitBlit;
  444. PROCEDURE WritePixel*(rp:RastPortPtr; x,y:INTEGER):BOOLEAN;
  445. VAR r:A.Regs;
  446. BEGIN
  447.     r.a[1]:=SYSTEM.VAL(LONGINT,rp);
  448.     r.d[0]:=x;
  449.     r.d[1]:=y;
  450.     A.LibCall(gfxBase,-324,r);
  451.     RETURN r.d[0]#0
  452. END WritePixel;
  453. (* New procedures from V39 *)
  454. PROCEDURE SetWriteMask*(rp:RastPortPtr; Mask:LONGINT)(*:BOOLEAN*);
  455. VAR r:A.Regs;
  456. BEGIN
  457.     r.a[0]:=SYSTEM.VAL(LONGINT,rp);
  458.     r.d[0]:=Mask;
  459.     A.LibCall(gfxBase,-984,r);
  460.     (*RETURN r.d[0]#0*)  (* SetWriteMask returns, if device supports WriteMask; ignore it *)
  461. END SetWriteMask;
  462. PROCEDURE AllocBitMap*(x, y, depth: LONGINT; flags: SET; friendBitMap: BitMapPtr):BitMapPtr;
  463. VAR r:A.Regs;
  464. BEGIN
  465.     r.d[0]:=x;
  466.     r.d[1]:=y;
  467.     r.d[2]:=depth;
  468.     r.d[3]:=SYSTEM.VAL(LONGINT, flags);
  469.     r.a[0]:=friendBitMap;
  470.     A.LibCall(gfxBase,-918,r);
  471.     RETURN r.d[0]
  472. END AllocBitMap;
  473. PROCEDURE FreeBitMap*(bm: BitMapPtr);
  474. VAR r:A.Regs;
  475. BEGIN
  476.     r.a[0]:=bm;
  477.     A.LibCall(gfxBase,-924,r)
  478. END FreeBitMap;
  479. PROCEDURE ObtainPen*(cm: ColorMapPtr; n, r, g, b: LONGINT; Flags: SET): LONGINT;
  480. VAR d:A.Regs;
  481. BEGIN
  482.     d.a[0]:=cm;
  483.     d.d[0]:=n;
  484.     d.d[1]:=r;
  485.     d.d[2]:=g;
  486.     d.d[3]:=b;
  487.     d.d[4]:=SYSTEM.VAL(LONGINT, Flags);
  488.     A.LibCall(gfxBase,-954, d);
  489.     RETURN d.d[0]
  490. END ObtainPen;
  491. PROCEDURE ReleasePen*(cm: ColorMapPtr; n: LONGINT);
  492. VAR r:A.Regs;
  493. BEGIN
  494.     r.a[0]:=cm;
  495.     r.d[0]:=n;
  496.     A.LibCall(gfxBase,-948, r)
  497. END ReleasePen;
  498. PROCEDURE Init;
  499.     LibraryPtr=POINTER TO E.Library;
  500.     lib:LibraryPtr;
  501. BEGIN
  502.     gfxBase:=E.OpenLibrary(graphicsName,37);
  503.     IF gfxBase=0 THEN HALT(99) END;
  504.     lib:=SYSTEM.VAL(LibraryPtr,gfxBase);
  505.     gfxVersion:=lib.version
  506. END Init;
  507. BEGIN
  508.     Init
  509. END AmigaGraphics.
  510.