/* :ts=8 bk=0 * 3dstars.c: Spacing out taken a step further * by Leo L. Schwab 8607.1 */ #include #include #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> 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); }