home *** CD-ROM | disk | FTP | other *** search
- /* :ts=8 bk=0
- * 3dstars.c: Spacing out taken a step further
- * by Leo L. Schwab 8607.1
- */
-
- #include <exec/types.h>
- #include <intuition/intuition.h>
-
- #define NSTARS 32
-
- extern void *OpenLibrary(), *OpenScreen(), *OpenWindow(), *GetMsg();
- extern short rnd();
-
- long *IntuitionBase, *GfxBase;
-
- struct NewScreen scrdef = {
- 0, 0, 320, 200,
- 4, /* # planes */
- -1, -1,
- NULL,
- CUSTOMSCREEN,
- NULL, NULL, NULL, NULL
- };
-
- struct NewWindow windef = {
- 0, 0, 320, 200,
- -1, -1,
- CLOSEWINDOW,
- WINDOWCLOSE,
- NULL, NULL, NULL, NULL, NULL,
- 0, 0, 0, 0,
- CUSTOMSCREEN
- };
-
- struct Window *win;
- struct Screen *scr;
- struct RastPort *rp;
- short x[NSTARS], y[NSTARS], z[NSTARS];
- short xlo[NSTARS], xro[NSTARS], yo[NSTARS];
-
-
- main (ac, av)
- char *av[];
- int ac;
- {
- long xls, xrs, ys;
- long *msg;
- short magic, inc;
- register short i, fz;
-
- if (ac > 1)
- magic = atoi (av[1]);
- else
- magic = 128;
-
- if (ac > 2)
- inc = atoi (av[2]);
- else
- inc = 3;
-
- openstuff ();
- rnd (-5286);
- SetRast (rp, 0L);
- for (i=0, xls=1; i<8; i++, xls += 2) {
- SetRGB4 (&(scr -> ViewPort), (long) i, xls, 0L, 0L);
- SetRGB4 (&(scr -> ViewPort), (long) i+8, 0L, 0L, xls);
- }
-
- for (i=0; i<NSTARS; i++)
- mkpoint (i);
-
- FOREVER {
- for (i=0; i<NSTARS; i++) {
- if ((z[i] -= inc) <= 0)
- mkpoint (i);
- fz = z[i];
- xls = (x[i] - (fz >> 4)) * magic / fz + 160;
- xrs = (x[i] + (fz >> 4)) * magic / fz + 160;
- ys = y[i] * magic / fz + 100;
- SetAPen (rp, 0L);
- WritePixel (rp, (long) xlo[i], (long) yo[i]);
- WritePixel (rp, (long) xro[i], (long) yo[i]);
- if (xls < 0 || xls > 319 || xrs < 0 || xrs > 319 ||
- ys < 0 || ys > 199)
- mkpoint (i);
- else {
- SetAPen (rp, (long) (256-fz >> 5));
- WritePixel (rp, xls, ys);
- SetAPen (rp, (long) 8+(256-fz >> 5));
- WritePixel (rp, xrs, ys);
- xlo[i] = xls; xro[i] = xrs; yo[i] = ys;
- }
- }
- if (msg = GetMsg (win -> UserPort)) {
- ReplyMsg (msg);
- break;
- }
- }
-
- closestuff ();
- }
-
- mkpoint (i)
- register short i;
- {
- x[i] = rnd (256) - 128;
- y[i] = rnd (150) - 75;
- z[i] = 255;
- }
-
- openstuff ()
- {
- if (!(IntuitionBase = OpenLibrary ("intuition.library", 0L))) {
- printf ("Intuition open failed.\n");
- die ();
- }
-
- if (!(GfxBase = OpenLibrary ("graphics.library", 0L))) {
- printf ("graphics open failed.\n");
- die ();
- }
-
- if (!(scr = OpenScreen (&scrdef))) {
- printf ("Can't open screen.\n");
- die ();
- }
-
- windef.Screen = scr;
- if (!(win = OpenWindow (&windef))) {
- printf ("Window painted shut.\n");
- die ();
- }
- rp = &(scr -> RastPort);
- }
-
- closestuff ()
- {
- if (win) CloseWindow (win);
- if (scr) CloseScreen (scr);
- if (GfxBase) CloseLibrary (GfxBase);
- if (IntuitionBase) CloseLibrary (IntuitionBase);
- }
-
- die ()
- {
- closestuff ();
- exit (-1);
- }
-