home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
8bitfiles.net/archives
/
archives.tar
/
archives
/
canada-remote-systems
/
cpower
/
fractal.c
< prev
next >
Wrap
Text File
|
2019-04-13
|
4KB
|
182 lines
/* ╨OWER ├ (╙PINAKER) OR ├ ╨OWER
(╨ROLINE) VERSION OF ╞RACTAL
╟RAPHICS. ├ONVERTED FROM ╙UPER-├
FORMAT SO ALL ├ USERS CAN ENJOY
THIS GRAPHICS DEMO!
╔N MY OPINION, NOT TO SHUN THE
AUTHOR OF THIS PROGRAM, THE
REAL VALUE OF THIS SOURCE LIES
IN THAT IT PROVIDES ME (AND
OTHER ├ USERS) WITH THE START
OF A GRAPHICS LIBRARY THAT
WORKS!
├ONGRATS TO THE AUTHOR ON A GREAT
JOB.
*/
#DEFINE VOID INT
#INCLUDE "STDIO.H"
INT TRIX[200]=█160,20,280▌;
INT TRIY[200]=█20,160,160▌;
INT DRARRAY[]=█0,3,1,4,3,5,4,2,5,0▌;
INT LEVARRAY[]=█0,3,5,3,1,4,5,4,2,3,4,5▌;
VOID DOT(XA,YA)
UNSIGNED INT XA,YA;
█ STATIC INT TABLE[]=█1,2,4,8,16,32,64,128▌;
INT I,*BYTE;
INT BIT,TBIT,TBYTE,ROW,COL;
ROW=YA&0XF8;
ROW=(ROW<<5)+(ROW<<3);
COL=XA>>3;
BYTE=ROW+(COL<<3)+(YA&7)+0X6000;
TBIT=7-(XA&7);
*BYTE=*BYTE▀TABLE[TBIT];
▌
VOID HIRES()
█ INT *BMPTR,*BMFLG,*BMLOC,*BMSCR;
BMPTR=53265;
BMFLG=53272;
BMLOC=56576;
BMSCR=648;
*BMPTR=*BMPTR▀32;
*BMLOC=150;
*BMSCR=92;
*BMFLG=121;
▌
VOID CLRSCRN()
█ INT *I,J;
FOR(J=0X6000;J<0X7FFE;J++)
█I=J;
*I=0;
▌
▌
VOID SETCLR()
█ INT *I,J;
FOR(J=23552;J<24552;J++)
█I=J;
*I=2;
▌
▌
VOID DELAY(DELCT)
INT DELCT;
█ WHILE(DELCT>0)
█DELCT--;
▌
▌
VOID LINE(X1,Y1,X2,Y2)
INT X1,Y1,X2,Y2;
█ INT DX,DY,E,J,XINC,YINC,LINCT;
XINC=1;
YINC=1;
DX=X2-X1;
DY=Y2-Y1;
IF(X1>X2)
█ XINC=-1;
DX=X1-X2;
▌
IF(Y1>Y2)
█ YINC=-1;
DY=Y1-Y2;
▌
E=DY-DX;
E+=E;
IF(DY>DX) GOTO BIGY;
BIGX: LINCT=DX;
DO
█ DOT(X1,Y1);
LINCT-=1;
IF(E>0)
█ Y1+=YINC;
E+=((DY<<1)-(DX<<1));
X1+=XINC;
▌
ELSE
█ E+=(DY<<1);
X1+=XINC;
▌
▌
WHILE (LINCT>0);
RETURN;
BIGY: LINCT=DY;
DO
█ DOT(X1,Y1);
LINCT-=1;
IF(E>0)
█ Y1=Y1+YINC;
E+=((DX<<1)-(DY<<1));
X1+=XINC;
▌
ELSE
█ E+=(DX<<1);
Y1+=YINC;
▌
▌
WHILE (LINCT>0);
▌
MAIN()
█
HIRES();
SETCLR();
CLRSCRN();
MIDPTS(0);
LEVEL2();
MAIN();
▌
VOID RND()
█ UNSIGNED INT RANDOM;
INT *P;
P=56324;
RANDOM=*P;
P=162;
RANDOM+=*P;
RANDOM&=31;
RETURN RANDOM+=-15;
▌
VOID MIDPTS(IN2)
INT IN2;
█ TRIX[IN2+3]=(TRIX[IN2]+TRIX[IN2+1])/2;
TRIX[IN2+4]=(TRIX[IN2+1]+TRIX[IN2+2])/2;
TRIX[IN2+5]=(TRIX[IN2]+TRIX[IN2+2])/2;
TRIY[IN2+3]=(TRIY[IN2]+TRIY[IN2+1])/2+RND();
TRIY[IN2+4]=(TRIY[IN2+1]+TRIY[IN2+2])/2+RND();
TRIY[IN2+5]=(TRIY[IN2]+TRIY[IN2+2])/2+RND();
▌
VOID ABS(V1)
INT V1;
█ IF(V1<0)V1=-V1;
RETURN V1;
▌
VOID DRAW(DRCT)
INT DRCT;
█ INT DR1,DR2,DR3,DR4,DR5;
FOR(DR1=0;DR1<9;DR1+=1)
█DR2=TRIX[DRARRAY[DR1]+DRCT];DR3=TRIY[DRARRAY[DR1]+DRCT];
DR4=TRIX[DRARRAY[DR1+1]+DRCT];DR5=TRIY[DRARRAY[DR1+1]+DRCT];
LINE(DR2,DR3,DR4,DR5);
▌
▌
VOID LEVEL2()
█ INT L1,L2;
FOR(L2=1;L2<5;L2+=1)
█FOR(L1=0;L1<3;L1+=1)
█TRIX[L1+L2*6]=TRIX[LEVARRAY[L1+(L2-1)*3]];
TRIY[L1+L2*6]=TRIY[LEVARRAY[L1+(L2-1)*3]];
▌
▌
FOR(L1=1;L1<4;L1+=1)
MIDPTS(L1*6);
TRIX[28]=TRIX[21];
TRIY[28]=TRIY[21];
TRIX[29]=TRIX[10];
TRIY[29]=TRIY[10];
TRIX[27]=TRIX[17];
TRIY[27]=TRIY[17];
FOR(L1=1;L1<5;L1+=1)
DRAW(L1*6);
▌