home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 1
/
GoldFishApril1994_CD1.img
/
d2xx
/
d238
/
pyth
/
pyth.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-08-24
|
7KB
|
347 lines
/**************************| Pyth.c |*********** 20 July 1989 *****/
/* */
/* Pyth v1.1: (c) 7/89 by Andreas Krebs */
/* Mittelweg 9 */
/* 7110 Oehringen 2 */
/* */
/* */
/* This programm ist Public-Domain. */
/* */
/* Compile commands: (for Aztec-C v3.6a) */
/* cc Pyth */
/* ln Pyth -lc -lm */
/* */
/******************************************************************/
#include <exec/types.h>
#include <intuition/intuition.h>
#include <graphics/gfx.h>
#include <graphics/gfxbase.h>
#include <graphics/gfxmacros.h>
#include <libraries/mathffp.h>
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct MathBase *MathBase;
struct MathTransBase *MathTransBase;
struct Screen *PythScreen;
struct Window *PythWindow;
static struct RastPort *rp;
USHORT Kords[21][3][2];
USHORT Box[4][2];
struct NewScreen NewPythScreen =
{
0,0,
640,400,
3,
1,0,
HIRES|LACE,
CUSTOMSCREEN,
NULL,
NULL,
NULL,
NULL
};
struct NewWindow NewPythWindow =
{
0,10,
640,390,
1,0,
CLOSEWINDOW,
WINDOWCLOSE|ACTIVATE|BORDERLESS,
NULL,
NULL,
(UBYTE *)"Pyth v1.1 (c) 7/89 by Andreas Krebs",
NULL,
NULL,
0,0,
0,0,
CUSTOMSCREEN
};
main()
{
OpenALL();
SetRGB4(&PythScreen->ViewPort,3L,15L,0L,0L);
SetRGB4(&PythScreen->ViewPort,4L,0L,15L,15L);
SetRGB4(&PythScreen->ViewPort,5L,0L,15L,0L);
DrawPyth();
Wait(1L << PythWindow->UserPort->mp_SigBit);
CloseALL();
}
OpenALL()
{
void *OpenLibrary();
struct Screen *OpenScreen();
struct Window *OpenWindow();
if(!(IntuitionBase=(struct IntuitionBase *)
OpenLibrary("intuition.library",0L)))
{
puts("Can't open intuition library !");
exit(FALSE);
}
if(!(GfxBase=(struct GfxBase *)
OpenLibrary("graphics.library",0L)))
{
puts("Can't open graphics library !");
CloseALL();
exit(FALSE);
}
if(!(MathBase=(struct MathBase *)
OpenLibrary("mathffp.library",0L)))
{
puts("Can't open mathffp library !");
CloseALL();
exit(FALSE);
}
if(!(MathTransBase=(struct MathTransBase *)
OpenLibrary("mathtrans.library",0L)))
{
puts("Can't open mathtrans library !");
CloseALL();
exit(FALSE);
}
if(GfxBase->DisplayFlags & (UWORD)PAL)
{
NewPythScreen.Height=512;
NewPythWindow.Height=502;
}
if(!(PythScreen=(struct Screen *)
OpenScreen(&NewPythScreen)))
{
puts("Can't open Screen !");
CloseALL();
exit(FALSE);
}
NewPythWindow.Screen=PythScreen;
if(!(PythWindow=(struct Window *)
OpenWindow(&NewPythWindow)))
{
puts("Can't open Window !");
CloseALL();
exit(FALSE);
}
rp=PythWindow->RPort;
}
CloseALL()
{
if(PythWindow) CloseWindow(PythWindow);
if(PythScreen) CloseScreen(PythScreen);
if(MathBase) CloseLibrary(MathBase);
if(MathTransBase) CloseLibrary(MathTransBase);
if(GfxBase) CloseLibrary(GfxBase);
if(IntuitionBase) CloseLibrary(IntuitionBase);
}
DrawPyth()
{
USHORT Seite[21],t;
SHORT x=0,y=0,Nr=0,ax,ay;
int sqr,sx,sy;
FLOAT a,b,c,h,h2,e,f,wia1,wia2,wib,abx,aby,abx2,aby2;
for(t=0;t<21;t++)
{
Seite[t]=0;
}
SetAPen(rp,5L);
if(GfxBase->DisplayFlags & (UWORD)PAL)
{
Move(rp,320L,500L);
Draw(rp,320L,400L);
Draw(rp,220L,400L);
Draw(rp,220L,500L);
Draw(rp,320L,500L);
Kords[0][0][0]=320;
Kords[0][0][1]=400;
Kords[0][1][0]=256;
Kords[0][1][1]=352;
Kords[0][2][0]=220;
Kords[0][2][1]=400;
}
else
{
Move(rp,310L,388L);
Draw(rp,310L,308L);
Draw(rp,230L,308L);
Draw(rp,230L,388L);
Draw(rp,310L,388L);
Kords[0][0][0]=310;
Kords[0][0][1]=308;
Kords[0][1][0]=259;
Kords[0][1][1]=270;
Kords[0][2][0]=230;
Kords[0][2][1]=308;
}
DrawDreieck(0);
do
{
Nr++;
x=Kords[Nr-1][0][0]-Kords[Nr-1][1][0];
y=Kords[Nr-1][0][1]-Kords[Nr-1][1][1];
sqr=x*x+y*y;
a=SPSqrt((FLOAT)(sqr));
if(x==0.0 || x==-0.0)
wia1=PI/2;
else
wia1=SPAtan((FLOAT)y/(FLOAT)x);
if(x<=0.0 || x<=-0.0)
wia1+=PI;
x=Kords[Nr-1][1][0]-Kords[Nr-1][2][0];
y=Kords[Nr-1][1][1]-Kords[Nr-1][2][1];
sqr=x*x+y*y;
b=SPSqrt((FLOAT)(sqr));
if(x==0.0 || x==-0.0)
wia2=PI/2.0;
else
wia2=-SPAtan((FLOAT)y/(FLOAT)x);
if(x<=0.0 || x<=-0.0)
wia2+=PI;
x=Kords[Nr-1][2][0]-Kords[Nr-1][0][0];
y=Kords[Nr-1][2][1]-Kords[Nr-1][0][1];
sqr=x*x+y*y;
c=SPSqrt((FLOAT)(sqr));
h=a*0.6; /* a*sin(36.9°) */
e=a*0.8; /* a*sin(53.1°) */
f=c-e;
if(Seite[Nr]==1)
{
abx=-b*SPSin(wia2);
aby=b*SPCos(wia2);
}
else
{
abx=a*SPSin(wia1);
aby=a*SPCos(wia1);
}
Box[0][0]=Kords[Nr-1][Seite[Nr]][0];
Box[0][1]=Kords[Nr-1][Seite[Nr]][1];
Box[1][0]=Kords[Nr-1][Seite[Nr]][0]+(SHORT)abx;
Box[1][1]=Kords[Nr-1][Seite[Nr]][1]-(SHORT)aby;
Box[2][0]=Kords[Nr-1][Seite[Nr]+1][0]+(SHORT)abx;
Box[2][1]=Kords[Nr-1][Seite[Nr]+1][1]-(SHORT)aby;
Box[3][0]=Kords[Nr-1][Seite[Nr]+1][0];
Box[3][1]=Kords[Nr-1][Seite[Nr]+1][1];
if(Seite[Nr]==1)
SetAPen(rp,3L);
else
SetAPen(rp,5L);
DrawBox();
Kords[Nr][0][0]=Box[1][0];
Kords[Nr][0][1]=Box[1][1];
Kords[Nr][2][0]=Box[2][0];
Kords[Nr][2][1]=Box[2][1];
sx=(int)Box[Seite[Nr]+1][0];
sy=(int)Box[Seite[Nr]+1][1];
if(Seite[Nr]==1)
{
wib=wia2+0.927295;
wib=PI-wib;
aby2=f*SPSin(wib);
abx2=f*SPCos(wib);
}
else
{
wib=wia1+0.6435011;
aby2=e*SPSin(wib);
abx2=e*SPCos(wib);
}
ax=(SHORT)abx2;
ay=(SHORT)aby2;
sx-=ax;
sy-=ay;
Kords[Nr][1][0]=(USHORT)sx;
Kords[Nr][1][1]=(USHORT)sy;
DrawDreieck(Nr);
if((b<=3.0 && a<=4.0 && c<=5.0) || Nr>=20)
{
for(t=(Nr+1);t<21;t++)
{
Seite[t]=0;
}
while(Seite[Nr]==1)
{
Seite[Nr]=0;
Nr--;
if(Nr<1)
break;
}
Seite[Nr]=1;
Nr--;
}
if(GetMsg(PythWindow->UserPort))
{
CloseALL();
exit(TRUE);
}
}while(Nr>-1);
}
DrawDreieck(Nr)
USHORT Nr;
{
SetAPen(rp,4L);
Move(rp,(LONG)Kords[Nr][2][0],(LONG)Kords[Nr][2][1]);
PolyDraw(rp,3L,&Kords[Nr][0][0]);
}
DrawBox()
{
Move(rp,(LONG)Box[3][0],(LONG)Box[3][1]);
PolyDraw(rp,4L,&Box[0][0]);
}