home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
files
/
gnu
/
gchsrc31
/
atarilib
/
smallgra.cc
< prev
next >
Wrap
C/C++ Source or Header
|
1992-04-27
|
5KB
|
324 lines
//////////////////////////////////////////////////////////////////////////////
//
// 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.
*/