DataMuseum.dk

Presents historical artifacts from the history of:

Commodore CBM-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Commodore CBM-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦585cc25f2⟧ TextFile

    Length: 1428 (0x594)
    Types: TextFile
    Notes: UNIX file
    Names: »sstars.c«

Derivation

└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
    └─⟦926b8033d⟧ UNIX V7 Filesystem
        └─ ⟦this⟧ »u/demo/slide/sstars.c« 

TextFile

#define MAXFARSTARS 100
#define MAXNEARSTARS 90
#define STARTX  508
#define STARTY  62
#define ENDX  700
#define ENDY 195
#define MAXX (ENDX-STARTX)
#define MAXY (ENDY-STARTY)
#define DX 20
#define DY 20
#define MD 5
#define MAXCOUNT 300
short count = 0;
struct STAR {
	short x,y,dx,dy;
};

struct STAR s[MAXNEARSTARS];

space()
{
	srand(14234);
	sclear();
	stars();
}

sclear()
{
	register int x,y;
	for(x = 0; x <= (MAXX/2); x++)
	    for(y = STARTY; y< ENDY; y++)
	    {
		sp(STARTX+x,y,0);
		sp(ENDX-x,y,0);
	    }
}
stars()
{
	short	i;
	short	x,y;
	for(i = 0; i< MAXFARSTARS;i++)
	{
		x = irand(MAXX); y = irand(MAXY);
		point(STARTX+x,STARTY+y);
	}
	for(i = 0; i<MAXNEARSTARS; i++) 
	{
		getpnt(&s[i]);
		point(STARTX+s[i].x, STARTY+s[i].y);
	}
	while(count++ < MAXCOUNT) 
		for(i = 0; i < MAXNEARSTARS; i++) {
			x = s[i].x; 
			y = s[i].y;
			s[i].x += s[i].dx;
			s[i].y += s[i].dy;

			if(inside(s[i].x, s[i].y)==0) {
				getpnt(&s[i]);
			}
			point(STARTX+x,STARTY +y);
			point(STARTX+x+1,STARTY+y);
			point(STARTX+s[i].x,STARTY+s[i].y);
			point(STARTX+s[i].x+1,STARTY+s[i].y);
		}
}

getpnt(s)
struct STAR *s;
{
	while(1) {
		s->dx = (DX/2) - irand(DX);
		s->dy = (DY/2) - irand(DY);
		if((s->x == (MAXX/2))&& (s->y ==(MAXY/2))) continue;
		s->x = (MAXX/2) + s->dx * MD;
		s->y = (MAXY/2) + s->dy * MD;
		if(inside(s->x,s->y)) break;
	}
}
inside(x,y)
{
	return((x > 0) && (x < MAXX) && (y > 0) && (y < MAXY));
}