home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
647.lha
/
shotSTAR
/
shotSTAR.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-06-10
|
5KB
|
166 lines
/*
shotSTAR v2.0 for AmigaDOS, by Aaron Holmes.
This program is available in three forms for three operating systems;
Macintosh, MS-DOS, and, with this latest release: AmigaDOS. This simple
demo uses the trigonometric ratios sine and cosine to create dazzling
string-art-like images. No two are exactly alike! (FPU RECOMMENDED!)
*/
#include <intuition/intuition.h>
#include <math.h>
#define _X 320
#define _Y 200
#define MaxR _X
#define MaxT 6.283185307 /* slightly exaggerated */
#define MaxI 32768
void SetUP(void);
void TakeDOWN(void);
struct TextAttr TopazFont = { "topaz.font", 8, FS_NORMAL, FPB_ROMFONT };
/* in COLOR!!! */
UWORD OurPalette[4] = { 0x0000, 0x000F, 0x0F00, 0x0000 };
UWORD chip BlankPointer[] =
{
0x0000, 0x0000, /* no screen burn-in */
0x0000, 0x0000,
0x0000, 0x0000
};
struct NewScreen OSDef =
{
0, 0, 640, 400, 2, /* left top wide high deep */
0, 0, /* detail 'n' block pens */
HIRES | LACE, /* flags (res junk) */
CUSTOMSCREEN | SCREENBEHIND | SCREENQUIET, /* type */
&TopazFont, /* font (let's be creative) */
"shotSTAR v2.0", /* title... ok, so it's invisible */
NULL, /* gadgets */
NULL /* custom bitmap */
};
struct NewWindow OWDef =
{
0, 0, 640, 400, /* left top wide high */
0, 0, /* detail 'n' block pens */
MOUSEBUTTONS, /* IDCMP flags */
SMART_REFRESH | GIMMEZEROZERO | BORDERLESS |
RMBTRAP | ACTIVATE, /* misc. flags */
NULL, /* gadgets */
NULL, /* checkmark */
NULL, /* title */
NULL, /* screen */
NULL, /* superbitmap */
0, 0, 0, 0, /* no resizing this bugger */
CUSTOMSCREEN /* on a what? */
};
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct Screen *OurScreen;
struct Window *OurWindow;
/******************** the MAIN function ********************/
main()
{
struct IntuiMessage *OurMessage;
struct RastPort *RP;
double Theta, Rad2Add;
int i, x[320], y[320], r;
unsigned t;
SetUP(); /* get all SetUP */
RP = OurWindow->RPort; /* save ourselves some time */
SetDrMd(RP, JAM1); /* make sure we're in the right mode */
time(&t);
srand(t); /* not THAT pseudo */
FOREVER
{
Rad2Add = rand(); /* draw a random number */
if(!Rad2Add == 0)
Rad2Add = Rad2Add * MaxT / MaxI; /* limit it to 6.28 */
Theta = 0; /* set these to starting values */
r = 0;
SetAPen(RP, 2); /* select RED from our palette */
do
{
if(OurMessage = (struct IntuiMessage *)
GetMsg(OurWindow->UserPort)) /* got a message? */
{
ReplyMsg(OurMessage);
TakeDOWN(); /* time to quit */
}
x[r] = _X + r * cos(Theta); /* our next move */
y[r] = _Y + r * sin(Theta);
Theta += Rad2Add; /* offset Theta */
if(Theta >= MaxT) Theta -= MaxT; /* back 360 */
Move(RP, r * 2, 0); /* start thermometer line */
Draw(RP, r * 2, 5); /* finish it */
r++; /* expand */
}
while(r <= MaxR);
SetRast(RP, 0); /* clear the screen */
SetAPen(RP, 1); /* select BLUE */
Move(RP, _X, _Y); /* move to the center */
for(i = 1; i <= MaxR; i++) /* loop 320 times */
{
Draw(RP, x[i], y[i]); /* draw all the lines */
}
}
}
/******************** the SetUP function ********************/
void SetUP()
{
/* try opening the libraries and our screen */
IntuitionBase = (struct IntuitionBase *)
OpenLibrary("intuition.library", 0);
GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 0);
OurScreen = (struct Screen *)OpenScreen(&OSDef);
/* I hope it worked */
if((!IntuitionBase) || (!GfxBase) || (!OurScreen)) TakeDOWN();
OWDef.Screen = OurScreen; /* the window is ours */
/* and now, our window */
OurWindow = (struct Window *)OpenWindow(&OWDef);
/* I hope it worked */
if(!OurWindow) TakeDOWN();
LoadRGB4(&OurScreen->ViewPort, OurPalette, 4); /* set palette */
SetPointer(OurWindow, &BlankPointer, 1, 1, 0, 0); /* no arrow */
ScreenToFront(OurScreen); /* we're here */
}
/******************** the TakeDOWN function ********************/
void TakeDOWN()
{
if(OurWindow) CloseWindow(OurWindow); /* close what we opened */
if(OurScreen) CloseScreen(OurScreen);
if(GfxBase) CloseLibrary(GfxBase);
if(IntuitionBase) CloseLibrary(IntuitionBase);
/* we're outta here... adios AMIGA */
exit(TRUE);
}