The SDL version did not work for a number of reasons. First of all the
code requires that SDL is defined. Second the path wrong header file was
included. Third the SDL1 developers thought it would be a great idea
(but obviously it's a terrible idea) to redefine main() (!!) so that any
program that uses SDL1 has to have the same args as their definition.
This program had 'main()' so the error message was:
thadgavin.c:60:1: error: conflicting types for 'SDL_main'
main()
^
/opt/local/include/SDL/SDL_main.h:34:14: note: expanded from macro 'main'
#define main SDL_main
^
/opt/local/include/SDL/SDL_main.h:35:12: note: previous declaration is here
extern int SDL_main(int argc, char *argv[]);
^
1 warning and 1 error generated.
make: *** [thadgavin_sdl] Error 1
Thus main() was changed to 'int main(int argc, char **argv)'. I am not
sure if I want to know their thinking. I kind of do but I also don't.
Format fix README.md.
94 lines
2.8 KiB
C
94 lines
2.8 KiB
C
|
|
int
|
|
X=320 ,Y=200,
|
|
n=0,m, x,y, j=1024;
|
|
double T=44.0 /7,P[
|
|
333333 ],C[5] ={ 0,3,
|
|
0,0,8} ,p=1, B=11.0
|
|
/630, f=0,r = 3,g
|
|
=7,b =13,*q=P, D,*J;
|
|
unsigned char
|
|
U[66666],*v=U,*h,l[5555]
|
|
,c=0,*e,*a,*z;
|
|
|
|
#include <math.h>
|
|
#define R1(t) t=(int)(t\
|
|
*123456789 )%j; t/=j;
|
|
#define Rl(C,t)\
|
|
n++[C] = t*n/12;
|
|
#define RI(C) B=-B; R1\
|
|
(r)R1(g )R1(b )for(n\
|
|
=0; n<j; ){ Rl(C ,r)Rl\
|
|
(C,g)Rl(C ,b)++n; }
|
|
|
|
|
|
|
|
#ifdef __DJGPP__
|
|
#include <sys/movedata.h>
|
|
#include <dpmi.h>
|
|
#include <pc.h>
|
|
#define Q(u,v) u##portb(0x3##v
|
|
#define W ; Q(out,C9),*h++/4)
|
|
void F(int i){ __dpmi_regs r
|
|
; if(i){ for(; i>=0; i-=8)while(
|
|
~Q(in,DA)
|
|
)&8^i); for(m=0,z
|
|
=h+j; h <z; m ++){ Q(
|
|
out,C8),m )W W W; ++h; } dosmemput
|
|
(v,X*Y,0xA0000 ); } else{ r.x.ax=
|
|
0x13; __dpmi_int( 0x10,&r); } }
|
|
#elif defined(SDL)
|
|
#include <SDL.h>
|
|
SDL_Surface *s; void
|
|
F(int i){ if (i){ SDL_SetColors(
|
|
s,h,0,256); SDL_UpdateRect
|
|
(s,0,0,0, 0); } else { SDL_Init(
|
|
SDL_INIT_VIDEO); s=SDL_SetVideoMode
|
|
(X,Y,8,0); v=s->pixels; } }
|
|
#else
|
|
#include "curses.h"
|
|
void F(i){ if(i){ for(y=0;
|
|
y<X*Y ; y++)
|
|
{ move (y/X,y%X); addch
|
|
((*(v +y)/ 32) [" ."
|
|
",:+" "=@#" ]); } ; refresh
|
|
(); } else{ initscr
|
|
(),x= COLS&~1,X=x<X?x:X,y=
|
|
LINES &~1,Y=y<Y?y:Y; } }
|
|
#endif
|
|
|
|
main(int argc, char **argv)
|
|
{
|
|
F(0);
|
|
|
|
for (x=-X/2,y=-Y/2;y<Y/2;++x>=X/2?x=-X/2,y++:4)
|
|
{*q++ = sqrt(x*x+y*y);
|
|
|
|
*q++ = atan2(x,y);
|
|
|
|
}for (;n<j*2;l[n++]=0);
|
|
for(;;)
|
|
{
|
|
a=l;z=l+j;e=l+j*2;
|
|
if ((p+=B)>1){p=2-p;RI(l+j)}
|
|
else if (p<0){p=-p;RI(l)}
|
|
|
|
while(a<l+j) D=p**a+++(1-p)**z++,*e++=D;
|
|
h=l+j*2;
|
|
|
|
for (J=P,z=v; z<v+X*Y;){
|
|
D = *J++;
|
|
*z++=fabs(sin((*J+++C[1])*1.5+D*C[0]+C[2]*sin(C[3]+D/C[4]))*255);
|
|
}F(8);
|
|
|
|
C[2]+=B; f+=T/360; C[3]+=f;
|
|
|
|
if (f>T)
|
|
{C[1] += (f-T)/8;
|
|
|
|
if (f>T*2)
|
|
C[0]=sin(f)+sin(f*2)/2;
|
|
}
|
|
}
|
|
}
|