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 >
C/C++ Source or Header  |  1992-04-27  |  5KB  |  324 lines

  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  This file is part of the Atari Machine Specific Library,
  4. //  and is Copyright 1992 by Warwick W. Allison.
  5. //
  6. //  You are free to copy and modify these sources, provided you acknoledge
  7. //  the origin by retaining this notice, and adhere to the conditions
  8. //  described in the file COPYING.
  9. //
  10. //////////////////////////////////////////////////////////////////////////////
  11.  
  12. #include <linea.h>
  13. #include "SmallGraphics.h"
  14.  
  15. static short Pattern[4]={0xffff,0xffff,0xffff,0xffff};
  16.  
  17. void InitSmallGraphics()
  18. {
  19.     linea0();
  20.     __aline->_LNMASK=0xffff;
  21.     __aline->_PTSIN[0]=0;
  22.     __aline->_PTSIN[1]=0;
  23.     __aline->_WMODE=0;
  24.     __aline->_LNMASK=0xffff;
  25.     __aline->_LSTLIN=-1;
  26.     __aline->_PATPTR=Pattern;
  27.     __aline->_PATMSK=4;
  28.     __aline->_MFILL=0;
  29.     __aline->_CLIP=0;
  30. }
  31.  
  32. void Colour(int C)
  33. {
  34.     __aline->_INTIN[0]=C;
  35.     __aline->_COLBIT0=C&1;
  36.     __aline->_COLBIT1=C&2;
  37.     __aline->_COLBIT2=C&4;
  38.     __aline->_COLBIT3=C&8;
  39. }
  40.  
  41. void Plot(int x, int y)
  42. {
  43.     __aline->_PTSIN[0]=x;
  44.     __aline->_PTSIN[1]=y;
  45.     linea1();
  46. }
  47.  
  48. void Plot(int x, int y, int C)
  49. {
  50.     Colour(C);
  51.     __aline->_PTSIN[0]=x;
  52.     __aline->_PTSIN[1]=y;
  53.     linea1();
  54. }
  55.  
  56. int ColourAt(int x, int y)
  57. {
  58.     __aline->_PTSIN[0]=x;
  59.     __aline->_PTSIN[1]=y;
  60.     return linea2();
  61. }
  62.  
  63. void Line(int x, int y)
  64. {
  65.     __aline->_PTSIN[2]=__aline->_PTSIN[0];
  66.     __aline->_PTSIN[3]=__aline->_PTSIN[1];
  67.     __aline->_PTSIN[0]=x;
  68.     __aline->_PTSIN[1]=y;
  69.     linea3();
  70. }
  71.  
  72. void Line(int x1, int y1, int x2, int y2)
  73. {
  74. /*
  75.     __aline->_PTSIN[0]=x1;
  76.     __aline->_PTSIN[1]=y1;
  77.     __aline->_PTSIN[2]=x2;
  78.     __aline->_PTSIN[3]=y2;
  79. */
  80.     __aline->_X1=x1;
  81.     __aline->_Y1=y1;
  82.     __aline->_X2=x2;
  83.     __aline->_Y2=y2;
  84.     linea3();
  85. }
  86.  
  87. void Rectangle(int x1, int y1, int x2, int y2)
  88. {
  89.     __aline->_PTSIN[0]=x1;
  90.     __aline->_PTSIN[1]=y1;
  91.     __aline->_PTSIN[2]=x2;
  92.     __aline->_PTSIN[3]=y2;
  93.     linea5();
  94. }
  95.  
  96. void Fill(int x, int y)
  97. {
  98.     __aline->_PTSIN[0]=x;
  99.     __aline->_PTSIN[1]=y;
  100.     lineae();
  101. }
  102.  
  103. int MaxX()
  104. {
  105.     return V_X_MAX;
  106. }
  107.  
  108. int MaxY()
  109. {
  110.     return V_Y_MAX;
  111. }
  112. /*
  113. IMPLEMENTATION MODULE SmallGraphics;
  114.  
  115. FROM BIOS        IMPORT bconout,setColor,PalleteArray,setPallete;
  116. FROM LINEA        IMPORT AInit,PutPixel,DrawLine,FilledRectangle,PInterface,PFontList,Interface,GetPixel;
  117. FROM SYSTEM        IMPORT ADR;
  118. FROM Resolutions    IMPORT CurrentResolution,ScreenWidth,ScreenHeight,Resolution;
  119. FROM RunSupport        IMPORT UponTermination;
  120.  
  121.  
  122. VAR    Iface:PInterface;
  123.     Fonts:PFontList;
  124.     Col:CARDINAL;
  125.     Pattern:ARRAY [0..15] OF CARDINAL;
  126.  
  127.  
  128. PROCEDURE SolidPattern;
  129. VAR    i:CARDINAL;
  130. BEGIN
  131.     FOR i:=0 TO 15 DO
  132.         Pattern[i]:=65535;
  133.     END;
  134. END SolidPattern;
  135.  
  136.  
  137. PROCEDURE Colour(c:CARDINAL);
  138. BEGIN
  139.     Col:=c;
  140. END Colour;
  141.  
  142.  
  143. VAR    OldCol:CARDINAL;
  144. PROCEDURE SetColourPlanes;
  145.  
  146. VAR    c:CARDINAL;
  147.  
  148. BEGIN
  149.     IF OldCol<>Col THEN
  150.         OldCol:=Col;
  151.         c:=Col;
  152.         WITH Iface^ DO
  153.             IF c>=8 THEN
  154.                 c:=c-8;
  155.                 COLBIT[3]:=1;
  156.             ELSE
  157.                 COLBIT[3]:=0;
  158.             END;
  159.             IF c>=4 THEN
  160.                 c:=c-4;
  161.                 COLBIT[2]:=1;
  162.             ELSE
  163.                 COLBIT[2]:=0;
  164.             END;
  165.             IF c>=2 THEN
  166.                 c:=c-2;
  167.                 COLBIT[1]:=1;
  168.             ELSE
  169.                 COLBIT[1]:=0;
  170.             END;
  171.             IF c>=1 THEN
  172.                 COLBIT[0]:=1;
  173.             ELSE
  174.                 COLBIT[0]:=0;
  175.             END;
  176.         END;
  177.     END;
  178. END SetColourPlanes;
  179.  
  180.  
  181. PROCEDURE Bar(x,y,w,h:CARDINAL);
  182. BEGIN
  183.     SetColourPlanes;
  184.     WITH Iface^ DO
  185.         X1:=x;
  186.         Y1:=y;
  187.         X2:=x+w-1;
  188.         Y2:=y+h-1;
  189.     END;
  190.  
  191.     FilledRectangle;
  192. END Bar;
  193.  
  194.  
  195. PROCEDURE Plot(x,y:CARDINAL);
  196. BEGIN
  197.     PutPixel(Col,x,y)
  198.     WITH Iface^ DO
  199.         X2:=x;
  200.         Y2:=y;
  201.     END;
  202. END Plot;
  203.  
  204. PROCEDURE ColourAt(x,y:CARDINAL):CARDINAL;
  205. (* Get colour at (x,y) *)
  206. BEGIN
  207.     RETURN GetPixel(x,y)
  208. END ColourAt;
  209.  
  210. PROCEDURE LineTo(x,y:CARDINAL);
  211. BEGIN
  212.     SetColourPlanes;
  213.     WITH Iface^ DO
  214.         X1:=x;
  215.         Y1:=y;
  216.         DrawLine;
  217.         X2:=x;
  218.         Y2:=y;
  219.     END;
  220. END LineTo;
  221.  
  222. PROCEDURE Line(x1,y1,x2,y2:CARDINAL);
  223. BEGIN
  224.     SetColourPlanes;
  225.     WITH Iface^ DO
  226.         X1:=x1;
  227.         Y1:=y1
  228.         X2:=x2;
  229.         Y2:=y2;
  230.         DrawLine;
  231.     END;
  232. END Line;
  233.  
  234.  
  235. PROCEDURE SetScreenSize;
  236. BEGIN
  237.     WITH Iface^ DO
  238.         XMINCL:=0;
  239.         YMINCL:=0;
  240.         XMAXCL:=ScreenWidth[CurrentResolution]-1;
  241.         YMAXCL:=ScreenHeight[CurrentResolution]-1;
  242. (*
  243.         CASE CurrentResolution OF
  244.           Low:    VPLANES:=4;
  245.         | Medium: VPLANES:=2;
  246.         | High:    VPLANES:=1;
  247.         END;
  248. *)
  249.     END;
  250. END SetScreenSize;
  251.  
  252.  
  253. PROCEDURE EraseScreen;
  254. BEGIN
  255.     bconout(2,1bh);
  256.     bconout(2,ORD('E'));
  257.     bconout(2,1bh);
  258.     bconout(2,ORD('v'));
  259.     SetScreenSize;
  260. END EraseScreen;
  261.  
  262.  
  263. PROCEDURE UseXOR;
  264. (* Graphics will use XORing *)
  265. BEGIN
  266.     Iface^.WMODE:=2;
  267. END UseXOR;
  268.  
  269.  
  270. PROCEDURE UseReplace;
  271. (* Graphics will mask and OR *)
  272. BEGIN
  273.     Iface^.WMODE:=0;
  274. END UseReplace;
  275.  
  276.  
  277. VAR OriginalColour:PalleteArray;
  278. PROCEDURE SetColour(C:CARDINAL; R,G,B:CARDINAL);
  279. VAR j:CARDINAL;
  280. BEGIN
  281.     j:=setColor(R*256+G*16+B,C);
  282. END SetColour;
  283.  
  284. PROCEDURE GetOriginalColours;
  285. VAR c:CARDINAL;
  286. BEGIN
  287.     FOR c:=0 TO 15 DO
  288.         OriginalColour[c]:=setColor(65535,c);
  289.     END;
  290. END GetOriginalColours;
  291.  
  292. PROCEDURE ResetColours;
  293. VAR c:CARDINAL;
  294. BEGIN
  295.     FOR c:=0 TO 15 DO
  296.         OriginalColour[c]:=setColor(OriginalColour[c],c);
  297.     END;
  298. (*
  299.     setPallete(OriginalColour);
  300. *)
  301. END ResetColours;
  302.  
  303.  
  304. BEGIN
  305.     GetOriginalColours;
  306.     AInit(Iface,Fonts);
  307.     WITH Iface^ DO
  308.         X2:=0;
  309.         Y2:=0;
  310.         WMODE:=0;
  311.         LNMASK:=0ffffh;
  312.         LSTLIN:=-1;
  313.         Colour(0);
  314.         PATPTR:=ADR(Pattern);
  315.         PATMSK:=4;
  316.         SolidPattern;
  317.         MFILL:=0;
  318.         CLIP:=0;
  319.         SetScreenSize;
  320.     END;
  321.     UponTermination(ResetColours);
  322. END SmallGraphics.
  323. */
  324.