Thread View: net.micro.atari
1 messages
1 total messages
Started by Ravi Kulkarni
Mon, 26 Aug 1985 14:43
ST Graphics demos (source) - long
Author: Ravi Kulkarni
Date: Mon, 26 Aug 1985 14:43
Date: Mon, 26 Aug 1985 14:43
356 lines
8174 bytes
8174 bytes
Here are a few graphics demos that I ported from the sun. They run fine
on my monochrome monitor, but I haven't tried it with a color monitor.
I would imagine that they will run but without any color. You need the
DR C development system or other c compiler with the gem bindings. No
fancy windowing but they show the graphics capability of the ST very
nicely.
-------------------------------------------------------------------------
: Run this shell script with "sh" not "csh"
PATH=:/bin:/usr/bin:/usr/ucb
export PATH
all=FALSE
if [ $1x = -ax ]; then
all=TRUE
fi
/bin/echo 'Extracting qix.inp'
sed 's/^X//' <<'//go.sysin dd *' >qix.inp
[u] qix.68k=apstart,qix,aesbind,vdibind,osbind
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
/bin/chmod 644 qix.inp
/bin/echo -n ' '; /bin/ls -ld qix.inp
fi
/bin/echo 'Extracting qix.c'
sed 's/^X//' <<'//go.sysin dd *' >qix.c
#include <osbind.h>
#define Chance 80
#define Div 5
#define Diff 4
#define Max 20
#define Nqix 50
#define abs(x) ((x)<0?(-(x)):(x))
int contrl[12], intin[256], ptsin[256], intout[256], ptsout[256];
int i,evwhich,dummy,rand,handle;
int xstart,ystart,xwidth,ywidth,xcen,ycen;
int pxy[4],mx;
long Randx=1;
main()
{
/* Set the system up to do GEM calls */
appl_init();
/* Get the handle of the desktop */
handle=graf_handle(&dummy,&dummy,&dummy,&dummy);
/* Open the workstation. */
for(i=1; i<10; ++i) intin[i] = 1;
intin[10] = 2;
v_opnvwk(intin, &handle, intout);
pxy[0]=0;
pxy[1]=0;
pxy[2]=intout[0];
pxy[3]=intout[1];
xwidth=pxy[2];
ywidth= pxy[3];
graf_mouse(0,i);
draw_sample();
v_clsvwk(handle);
/* Release GEM calls */
appl_exit();
}
draw_sample()
{
int temp[4], rgb_in[4], iter, loop;
int dx0, dy0, dx1, dy1;
int x0[Nqix], x1[Nqix], y0[Nqix], y1[Nqix];
int flag;
v_clrwk(handle);
vswr_mode(handle,3);
Srand( (long) Gettime());
i=0;
flag=0;
dx0=5;
dy0=2;
dx1= -4;
dy1=3;
x0[0] = (int)(xwidth/3);
y0[0] = (int)(ywidth/3);
x1[0] = (int)(2*xwidth/3);
y1[0] = (int)(2*ywidth/3);
while (!Bconstat(2)){
if (flag)
Vector( x0[i], y0[i], x1[i], y1[i]);
Vector( bounce(x0, i, &dx0, xwidth-1),
bounce(y0, i, &dy0, ywidth-1),
bounce(x1, i, &dx1, xwidth-1),
bounce(y1, i, &dy1, ywidth-1));
if (++i >= Nqix) {
i=0;
flag=1;
}
}
Vector(x0[i], y0[i], x1[i], y1[i]);
for(flag=(i+1)%Nqix;flag!=i;flag=(flag+1)%Nqix)
Vector(x0[flag], y0[flag], x1[flag], y1[flag]);
}
Srand(x)
long x;
{
Randx = x;
}
Rand()
{
return((Randx = Randx * 505360173 + 907633385) & 0x7fffffff);
}
bounce (x, off, dx, lim)
int *x, off, *dx, lim;
{
int j,t1,t2;
t1 = (long) Rand();
t2 = (long) Rand();
if (t1%100 > Chance)
*dx = *dx + t2%Diff-Diff/2;
if(*dx > Max || *dx < -Max)
*dx = *dx / Div;
j = *dx + x[(off+Nqix-1)%Nqix];
if (j > lim) {
j = lim;
*dx = -(*dx);
}
else if (j < 0) {
j = 0;
*dx = -(*dx);
}
return (x[off] = j);
}
Vector(a,b,c,d)
int a,b,c,d;
{
ptsin[0] = a;
ptsin[1] = b;
ptsin[2] = c;
ptsin[3] = d;
v_pline(handle, 2, ptsin);
}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
/bin/chmod 644 qix.c
/bin/echo -n ' '; /bin/ls -ld qix.c
fi
/bin/echo 'Extracting qux.inp'
sed 's/^X//' <<'//go.sysin dd *' >qux.inp
[u] qux.68k=apstart,qux,aesbind,vdibind,osbind
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
/bin/chmod 644 qux.inp
/bin/echo -n ' '; /bin/ls -ld qux.inp
fi
/bin/echo 'Extracting qux.c'
sed 's/^X//' <<'//go.sysin dd *' >qux.c
#include <osbind.h>
#define Queues 4
#define Nqux 32
#define abs(x) ((x)<0?(-(x)):(x))
int contrl[12], intin[256], ptsin[256], intout[256], ptsout[256];
int i,evwhich,dummy,rand,handle;
int xstart,ystart,xwidth,ywidth,xcen,ycen;
int pxy[4],mx;
long Randx = 1;
int width,height;
main()
{
/* Set the system up to do GEM calls */
appl_init();
/* Get the handle of the desktop */
handle=graf_handle(&width,&height,&dummy,&dummy);
/* Open the workstation. */
for(i=1; i<10; ++i) intin[i] = 1;
intin[10] = 2;
v_opnvwk(intin, &handle, intout);
pxy[0]=0;
pxy[1]=0;
pxy[2]=intout[0];
pxy[3]=intout[1];
xwidth=pxy[2];
ywidth= pxy[3];
/* vs_clip(handle,1,pxy); */
graf_mouse(0,i);
draw_sample();
v_clsvwk(handle);
/* Release GEM calls */
appl_exit();
}
draw_sample()
{
int Dx[Queues], Dy[Queues];
int x[Queues][Nqux], y[Queues][Nqux];
int i=0, flag=0;
v_clrwk(handle);
vswr_mode(handle,3);
Srand((long) Gettime());
for(i=0;i<Queues;i++) {
Dx[i]=(long) Rand3();
Dy[i]=(long) Rand3();
}
x[0][Nqux-1] = (int)(xwidth/3);
y[0][Nqux-1] = (int)(ywidth/3);
x[1][Nqux-1] = (int)(2*xwidth/3);
y[1][Nqux-1] = (int)(2*ywidth/3);
x[2][Nqux-1] = (int)(xwidth/3);
y[2][Nqux-1] = (int)(2*ywidth/3);
x[3][Nqux-1] = (int)(2*xwidth/3);
y[3][Nqux-1] = (int)(ywidth/3);
i=0;
while (!Bconstat(2)){
if (flag) {
Vector (x[0][i], y[0][i], x[1][i], y[1][i]);
Vector (x[1][i], y[1][i], x[2][i], y[2][i]);
Vector (x[2][i], y[2][i], x[3][i], y[3][i]);
Vector (x[1][i], y[1][i], x[3][i], y[3][i]);
Vector (x[3][i], y[3][i], x[0][i], y[0][i]);
Vector (x[2][i], y[2][i], x[0][i], y[0][i]);
}
Vector (bounce (x[0], i, Dx+0, xwidth-1),
bounce (y[0], i, Dy+0, ywidth-1),
bounce (x[1], i, Dx+1, xwidth-1),
bounce (y[1], i, Dy+1, ywidth-1));
Vector (bounce (x[2], i, Dx+2, xwidth-1),
bounce (y[2], i, Dy+2, ywidth-1),
bounce (x[3], i, Dx+3, xwidth-1),
bounce (y[3], i, Dy+3, ywidth-1));
Vector (x[1][i], y[1][i], x[2][i], y[2][i]);
Vector (x[1][i], y[1][i], x[3][i], y[3][i]);
Vector (x[3][i], y[3][i], x[0][i], y[0][i]);
Vector (x[2][i], y[2][i], x[0][i], y[0][i]);
if (++i >= Nqux) {
i=0;
flag=1;
}
}
Vector (x[0][i], y[0][i], x[1][i], y[1][i]);
Vector (x[1][i], y[1][i], x[2][i], y[2][i]);
Vector (x[2][i], y[2][i], x[3][i], y[3][i]);
Vector (x[1][i], y[1][i], x[3][i], y[3][i]);
Vector (x[3][i], y[3][i], x[0][i], y[0][i]);
Vector (x[2][i], y[2][i], x[0][i], y[0][i]);
for(flag=(i+1)%Nqux;flag!=i;flag=(flag+1)%Nqux) {
Vector (x[0][flag], y[0][flag], x[1][flag], y[1][flag]);
Vector (x[1][flag], y[1][flag], x[2][flag], y[2][flag]);
Vector (x[2][flag], y[2][flag], x[3][flag], y[3][flag]);
Vector (x[1][flag], y[1][flag], x[3][flag], y[3][flag]);
Vector (x[3][flag], y[3][flag], x[0][flag], y[0][flag]);
Vector (x[2][flag], y[2][flag], x[0][flag], y[0][flag]);
}
}
Srand(x)
long x;
{
Randx = x;
}
Rand()
{
return((Randx = Randx * 505360173 + 907633385) & 0x7fffffff);
}
Rand2()
{
return(Rand()>>13);
}
Rand3()
{
return(((Randx = Randx * 505360173 + 907633385)>>13)&1 ?
((((Randx = Randx * 505360173 + 907633385)>>13)&1)+1) :
-((((Randx = Randx * 505360173 + 907633385)>>13)&1)+1));
}
bounce (x, off, dx, lim)
int *x, off, *dx, lim;
{
int j;
j = *dx + x[!off ? Nqux-1 : off-1];
if (j > lim) {
j = lim;
*dx = -(*dx);
}
else if (j < 1) {
j = 1;
*dx = -(*dx);
}
return(x[off] = j);
}
Vector(a,b,c,d)
int a,b,c,d;
{
ptsin[0] = a;
ptsin[1] = b;
ptsin[2] = c;
ptsin[3] = d;
v_pline(handle, 2, ptsin);
}
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
/bin/chmod 644 qux.c
/bin/echo -n ' '; /bin/ls -ld qux.c
fi
--
ARPA: eneevax!ravi@maryland
UUCP: [seismo,allegra]!umcp-cs!eneevax!ravi
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads