prindle@nadc (10/21/86)
From: prindle@NADC
/* Graphics Driver
** Filename: gdriver.c
** Author: Mark R. Rinfret
** Date: 12/14/85
** Description:
**
** This package serves as a driver to demo the features implemented in the
** grafpak graphics routines package.
**
*/
#include <stdio.h>
#include <strings.h>
#include <math.h>
#define RADCON 57.2957795 /* degrees to radians factor */
main()
{
register unsigned base;
register unsigned i,j;
base = 40960; /* bitmap in upper 8k of bank 2 */
highmem(32768);
ginit(); /* initialize graphics package */
graphics(0,1);
puts("This is text mode - RETURN to continue.\n");
delay();
test1(); /* test hi-res graphics */
test2(); /* test multi-color mode */
graphics(0,0);
puts("Back to text mode.\n");
}
/* Test hi-res graphics */
test1()
{
register unsigned a,b,d,i,x,x1,y,r;
register char c,*p;
float r2,x2,incr;
graphics(1,1); /* hi-res w/clear */
spintext(160,100,"Hi-res");
graphics(1,1);
line(0,0,319,199,1); /* upper left to lower right */
line(0,199,319,0,1); /* lower left to upper right */
line(0,100,319,100,1); /* horizontal axis */
line(160,0,160,199,1); /* vertical axis */
/* Circles */
circle(160,100,80,1);
/* Diagonal lines through center */
line(0,0,319,199,1);
line(319,0,0,199,1);
/* Horizontal ellipse */
arc(160,100,100,50,0,360,0,1.0,1);
/* Vertical ellipse */
arc(160,100,50,100,0,360,0,1.0,1);
delay();
/* Polygons */
graphics(1,1);
colors(-1,-1,5,-1,-1);
drawtext(32,0,"Polygons using 'arc'",0,1);
colors(-1,-1,6,-1,-1);
arc(48,48,40,40,0,360,0,120.0,1); /* triangle */
drawtext(0,88,"Triangle",0,1);
colors(-1,-1,7,-1,-1); /* yellow */
arc(240,48,40,40,0,360,0,90.0,1); /* square */
drawtext(200,88,"Square",0,1);
colors(-1,-1,3,-1,-1); /* cyan */
arc(80,144,40,40,0,360,0,60.0,1); /* hexagon */
drawtext(20,192,"Hexagon",0,1);
colors(-1,-1,2,-1,-1); /* red */
arc(240,144,40,40,0,360,0,45.0,1); /* octagon */
drawtext(200,192,"Octagon",0,1);
delay();
}
test2()
{
register unsigned pen,x,y,xx,yy,s;
graphics(2,1);
colors(0,1,2,5,6);
spintext(80,100,"Multicolor");
graphics(2,1); /* clear screen */
pen = 1;
for (s=10;s<=80;s+=10) { /* boxes in boxes */
x=80-(s/2);
y=100-(s/2);
line(x,y,x+s,y,pen);
line(x+s,y,x+s,y+s,pen);
line(x+s,y+s,x,y+s,pen);
line(x,y+s,x,y,pen);
if (++pen == 4) pen=1;
}
circle(80,100,70,1);
delay();
}
delay()
{
for (;getchar() != '\n';);
}
/* Draw text rotated about an x,y coordinate */
spintext(x,y,s)
unsigned x,y; char *s;
{
float angle;
for (angle=0.0;angle < 360.0; angle += 45.0)
drawtext(x,y,s,angle,1);
}