home *** CD-ROM | disk | FTP | other *** search
- //////////////////////////////////////////////////////////////////////////////
- //
- // This file is part of the Atari Machine Specific Library,
- // and is Copyright 1992 by Warwick W. Allison.
- //
- // You are free to copy and modify these sources, provided you acknoledge
- // the origin by retaining this notice, and adhere to the conditions
- // described in the file COPYING.
- //
- //////////////////////////////////////////////////////////////////////////////
-
- #include <linea.h>
- #include "SmallGraphics.h"
-
- static short Pattern[4]={0xffff,0xffff,0xffff,0xffff};
-
- void InitSmallGraphics()
- {
- linea0();
- __aline->_LNMASK=0xffff;
- __aline->_PTSIN[0]=0;
- __aline->_PTSIN[1]=0;
- __aline->_WMODE=0;
- __aline->_LNMASK=0xffff;
- __aline->_LSTLIN=-1;
- __aline->_PATPTR=Pattern;
- __aline->_PATMSK=4;
- __aline->_MFILL=0;
- __aline->_CLIP=0;
- }
-
- void Colour(int C)
- {
- __aline->_INTIN[0]=C;
- __aline->_COLBIT0=C&1;
- __aline->_COLBIT1=C&2;
- __aline->_COLBIT2=C&4;
- __aline->_COLBIT3=C&8;
- }
-
- void Plot(int x, int y)
- {
- __aline->_PTSIN[0]=x;
- __aline->_PTSIN[1]=y;
- linea1();
- }
-
- void Plot(int x, int y, int C)
- {
- Colour(C);
- __aline->_PTSIN[0]=x;
- __aline->_PTSIN[1]=y;
- linea1();
- }
-
- int ColourAt(int x, int y)
- {
- __aline->_PTSIN[0]=x;
- __aline->_PTSIN[1]=y;
- return linea2();
- }
-
- void Line(int x, int y)
- {
- __aline->_PTSIN[2]=__aline->_PTSIN[0];
- __aline->_PTSIN[3]=__aline->_PTSIN[1];
- __aline->_PTSIN[0]=x;
- __aline->_PTSIN[1]=y;
- linea3();
- }
-
- void Line(int x1, int y1, int x2, int y2)
- {
- /*
- __aline->_PTSIN[0]=x1;
- __aline->_PTSIN[1]=y1;
- __aline->_PTSIN[2]=x2;
- __aline->_PTSIN[3]=y2;
- */
- __aline->_X1=x1;
- __aline->_Y1=y1;
- __aline->_X2=x2;
- __aline->_Y2=y2;
- linea3();
- }
-
- void Rectangle(int x1, int y1, int x2, int y2)
- {
- __aline->_PTSIN[0]=x1;
- __aline->_PTSIN[1]=y1;
- __aline->_PTSIN[2]=x2;
- __aline->_PTSIN[3]=y2;
- linea5();
- }
-
- void Fill(int x, int y)
- {
- __aline->_PTSIN[0]=x;
- __aline->_PTSIN[1]=y;
- lineae();
- }
-
- int MaxX()
- {
- return V_X_MAX;
- }
-
- int MaxY()
- {
- return V_Y_MAX;
- }
- /*
- IMPLEMENTATION MODULE SmallGraphics;
-
- FROM BIOS IMPORT bconout,setColor,PalleteArray,setPallete;
- FROM LINEA IMPORT AInit,PutPixel,DrawLine,FilledRectangle,PInterface,PFontList,Interface,GetPixel;
- FROM SYSTEM IMPORT ADR;
- FROM Resolutions IMPORT CurrentResolution,ScreenWidth,ScreenHeight,Resolution;
- FROM RunSupport IMPORT UponTermination;
-
-
- VAR Iface:PInterface;
- Fonts:PFontList;
- Col:CARDINAL;
- Pattern:ARRAY [0..15] OF CARDINAL;
-
-
- PROCEDURE SolidPattern;
- VAR i:CARDINAL;
- BEGIN
- FOR i:=0 TO 15 DO
- Pattern[i]:=65535;
- END;
- END SolidPattern;
-
-
- PROCEDURE Colour(c:CARDINAL);
- BEGIN
- Col:=c;
- END Colour;
-
-
- VAR OldCol:CARDINAL;
- PROCEDURE SetColourPlanes;
-
- VAR c:CARDINAL;
-
- BEGIN
- IF OldCol<>Col THEN
- OldCol:=Col;
- c:=Col;
- WITH Iface^ DO
- IF c>=8 THEN
- c:=c-8;
- COLBIT[3]:=1;
- ELSE
- COLBIT[3]:=0;
- END;
- IF c>=4 THEN
- c:=c-4;
- COLBIT[2]:=1;
- ELSE
- COLBIT[2]:=0;
- END;
- IF c>=2 THEN
- c:=c-2;
- COLBIT[1]:=1;
- ELSE
- COLBIT[1]:=0;
- END;
- IF c>=1 THEN
- COLBIT[0]:=1;
- ELSE
- COLBIT[0]:=0;
- END;
- END;
- END;
- END SetColourPlanes;
-
-
- PROCEDURE Bar(x,y,w,h:CARDINAL);
- BEGIN
- SetColourPlanes;
- WITH Iface^ DO
- X1:=x;
- Y1:=y;
- X2:=x+w-1;
- Y2:=y+h-1;
- END;
-
- FilledRectangle;
- END Bar;
-
-
- PROCEDURE Plot(x,y:CARDINAL);
- BEGIN
- PutPixel(Col,x,y)
- WITH Iface^ DO
- X2:=x;
- Y2:=y;
- END;
- END Plot;
-
- PROCEDURE ColourAt(x,y:CARDINAL):CARDINAL;
- (* Get colour at (x,y) *)
- BEGIN
- RETURN GetPixel(x,y)
- END ColourAt;
-
- PROCEDURE LineTo(x,y:CARDINAL);
- BEGIN
- SetColourPlanes;
- WITH Iface^ DO
- X1:=x;
- Y1:=y;
- DrawLine;
- X2:=x;
- Y2:=y;
- END;
- END LineTo;
-
- PROCEDURE Line(x1,y1,x2,y2:CARDINAL);
- BEGIN
- SetColourPlanes;
- WITH Iface^ DO
- X1:=x1;
- Y1:=y1
- X2:=x2;
- Y2:=y2;
- DrawLine;
- END;
- END Line;
-
-
- PROCEDURE SetScreenSize;
- BEGIN
- WITH Iface^ DO
- XMINCL:=0;
- YMINCL:=0;
- XMAXCL:=ScreenWidth[CurrentResolution]-1;
- YMAXCL:=ScreenHeight[CurrentResolution]-1;
- (*
- CASE CurrentResolution OF
- Low: VPLANES:=4;
- | Medium: VPLANES:=2;
- | High: VPLANES:=1;
- END;
- *)
- END;
- END SetScreenSize;
-
-
- PROCEDURE EraseScreen;
- BEGIN
- bconout(2,1bh);
- bconout(2,ORD('E'));
- bconout(2,1bh);
- bconout(2,ORD('v'));
- SetScreenSize;
- END EraseScreen;
-
-
- PROCEDURE UseXOR;
- (* Graphics will use XORing *)
- BEGIN
- Iface^.WMODE:=2;
- END UseXOR;
-
-
- PROCEDURE UseReplace;
- (* Graphics will mask and OR *)
- BEGIN
- Iface^.WMODE:=0;
- END UseReplace;
-
-
- VAR OriginalColour:PalleteArray;
- PROCEDURE SetColour(C:CARDINAL; R,G,B:CARDINAL);
- VAR j:CARDINAL;
- BEGIN
- j:=setColor(R*256+G*16+B,C);
- END SetColour;
-
- PROCEDURE GetOriginalColours;
- VAR c:CARDINAL;
- BEGIN
- FOR c:=0 TO 15 DO
- OriginalColour[c]:=setColor(65535,c);
- END;
- END GetOriginalColours;
-
- PROCEDURE ResetColours;
- VAR c:CARDINAL;
- BEGIN
- FOR c:=0 TO 15 DO
- OriginalColour[c]:=setColor(OriginalColour[c],c);
- END;
- (*
- setPallete(OriginalColour);
- *)
- END ResetColours;
-
-
- BEGIN
- GetOriginalColours;
- AInit(Iface,Fonts);
- WITH Iface^ DO
- X2:=0;
- Y2:=0;
- WMODE:=0;
- LNMASK:=0ffffh;
- LSTLIN:=-1;
- Colour(0);
- PATPTR:=ADR(Pattern);
- PATMSK:=4;
- SolidPattern;
- MFILL:=0;
- CLIP:=0;
- SetScreenSize;
- END;
- UponTermination(ResetColours);
- END SmallGraphics.
- */
-