/* Ð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); Ý