home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / canada-remote-systems / cpower / fractal.c < prev    next >
Text File  |  2019-04-13  |  4KB  |  182 lines

  1. /* ╨OWER ├ (╙PINAKER) OR ├ ╨OWER
  2.    (╨ROLINE) VERSION OF ╞RACTAL
  3.    ╟RAPHICS.  ├ONVERTED FROM ╙UPER-├
  4.    FORMAT SO ALL ├ USERS CAN ENJOY
  5.    THIS GRAPHICS DEMO!
  6.  
  7.    ╔N MY OPINION, NOT TO SHUN THE 
  8.    AUTHOR OF THIS PROGRAM, THE 
  9.    REAL VALUE OF THIS SOURCE LIES
  10.    IN THAT IT PROVIDES ME (AND 
  11.    OTHER ├ USERS) WITH THE START
  12.    OF A GRAPHICS LIBRARY THAT
  13.    WORKS!
  14.  
  15.    ├ONGRATS TO THE AUTHOR ON A GREAT
  16.    JOB.
  17.  */
  18.        
  19. #DEFINE VOID INT
  20. #INCLUDE "STDIO.H"
  21.  
  22.        INT TRIX[200]=█160,20,280▌;
  23.        INT TRIY[200]=█20,160,160▌;
  24.        INT DRARRAY[]=█0,3,1,4,3,5,4,2,5,0▌;
  25.        INT LEVARRAY[]=█0,3,5,3,1,4,5,4,2,3,4,5▌;
  26. VOID DOT(XA,YA)
  27.        UNSIGNED INT XA,YA;
  28. █      STATIC INT TABLE[]=█1,2,4,8,16,32,64,128▌;
  29.        INT I,*BYTE;
  30.        INT BIT,TBIT,TBYTE,ROW,COL;
  31.        ROW=YA&0XF8;
  32.        ROW=(ROW<<5)+(ROW<<3);
  33.        COL=XA>>3;
  34.        BYTE=ROW+(COL<<3)+(YA&7)+0X6000;
  35.        TBIT=7-(XA&7);
  36.        *BYTE=*BYTE▀TABLE[TBIT];
  37. VOID HIRES()
  38. █      INT *BMPTR,*BMFLG,*BMLOC,*BMSCR;
  39.        BMPTR=53265;
  40.        BMFLG=53272;
  41.        BMLOC=56576;
  42.        BMSCR=648;
  43.        *BMPTR=*BMPTR▀32;
  44.        *BMLOC=150;
  45.        *BMSCR=92;
  46.        *BMFLG=121;
  47. VOID CLRSCRN()
  48. █      INT *I,J;
  49.        FOR(J=0X6000;J<0X7FFE;J++)
  50.       █I=J;
  51.        *I=0;
  52.       ▌
  53. VOID SETCLR()
  54. █      INT *I,J;
  55.        FOR(J=23552;J<24552;J++)
  56.       █I=J;
  57.        *I=2;
  58.       ▌
  59. VOID DELAY(DELCT)
  60.        INT DELCT;
  61. █      WHILE(DELCT>0)
  62.        █DELCT--;
  63.        ▌
  64. VOID LINE(X1,Y1,X2,Y2)
  65.        INT X1,Y1,X2,Y2;
  66. █      INT DX,DY,E,J,XINC,YINC,LINCT;
  67.        XINC=1;
  68.        YINC=1;
  69.        DX=X2-X1;
  70.        DY=Y2-Y1;
  71.        IF(X1>X2)
  72.         █ XINC=-1;
  73.           DX=X1-X2;
  74.         ▌
  75.        IF(Y1>Y2)
  76.         █ YINC=-1;
  77.           DY=Y1-Y2;
  78.         ▌
  79.        E=DY-DX;
  80.        E+=E;
  81.        IF(DY>DX) GOTO BIGY;
  82. BIGX:  LINCT=DX;
  83.        DO
  84.     █  DOT(X1,Y1);
  85.        LINCT-=1;
  86.        IF(E>0)
  87.      █   Y1+=YINC;
  88.          E+=((DY<<1)-(DX<<1));
  89.          X1+=XINC;
  90.      ▌
  91.        ELSE
  92.      █   E+=(DY<<1);
  93.          X1+=XINC;
  94.      ▌
  95.     ▌
  96.        WHILE (LINCT>0);
  97.        RETURN;
  98. BIGY:  LINCT=DY;
  99.        DO
  100.     █  DOT(X1,Y1);
  101.        LINCT-=1;
  102.        IF(E>0)
  103.      █   Y1=Y1+YINC;
  104.          E+=((DX<<1)-(DY<<1));
  105.          X1+=XINC;
  106.      ▌
  107.        ELSE
  108.      █   E+=(DX<<1);
  109.          Y1+=YINC;
  110.      ▌
  111.     ▌
  112.        WHILE (LINCT>0);
  113.  
  114. MAIN()
  115.        HIRES();
  116.        SETCLR();
  117.        CLRSCRN();
  118.        MIDPTS(0);
  119.        LEVEL2();
  120.        MAIN();
  121.  
  122. VOID RND()
  123. █      UNSIGNED INT RANDOM;
  124.        INT *P;
  125.        P=56324;
  126.        RANDOM=*P;
  127.        P=162;
  128.        RANDOM+=*P;
  129.        RANDOM&=31;
  130.        RETURN RANDOM+=-15;
  131. VOID MIDPTS(IN2)
  132.        INT IN2;
  133. █      TRIX[IN2+3]=(TRIX[IN2]+TRIX[IN2+1])/2;
  134.        TRIX[IN2+4]=(TRIX[IN2+1]+TRIX[IN2+2])/2;
  135.        TRIX[IN2+5]=(TRIX[IN2]+TRIX[IN2+2])/2;
  136.        TRIY[IN2+3]=(TRIY[IN2]+TRIY[IN2+1])/2+RND();
  137.        TRIY[IN2+4]=(TRIY[IN2+1]+TRIY[IN2+2])/2+RND();
  138.        TRIY[IN2+5]=(TRIY[IN2]+TRIY[IN2+2])/2+RND();
  139. VOID ABS(V1)
  140.        INT V1;
  141. █      IF(V1<0)V1=-V1;
  142.        RETURN V1;
  143. VOID DRAW(DRCT)
  144.        INT DRCT;
  145. █      INT DR1,DR2,DR3,DR4,DR5;
  146.        FOR(DR1=0;DR1<9;DR1+=1)
  147.       █DR2=TRIX[DRARRAY[DR1]+DRCT];DR3=TRIY[DRARRAY[DR1]+DRCT];
  148.        DR4=TRIX[DRARRAY[DR1+1]+DRCT];DR5=TRIY[DRARRAY[DR1+1]+DRCT];
  149.        LINE(DR2,DR3,DR4,DR5);
  150.       ▌
  151. VOID LEVEL2()
  152. █      INT L1,L2;
  153.        FOR(L2=1;L2<5;L2+=1)
  154.       █FOR(L1=0;L1<3;L1+=1)
  155.        █TRIX[L1+L2*6]=TRIX[LEVARRAY[L1+(L2-1)*3]];
  156.         TRIY[L1+L2*6]=TRIY[LEVARRAY[L1+(L2-1)*3]];
  157.        ▌
  158.       ▌
  159.        FOR(L1=1;L1<4;L1+=1)
  160.        MIDPTS(L1*6);
  161.        TRIX[28]=TRIX[21];
  162.        TRIY[28]=TRIY[21];
  163.        TRIX[29]=TRIX[10];
  164.        TRIY[29]=TRIY[10];
  165.        TRIX[27]=TRIX[17];
  166.        TRIY[27]=TRIY[17];
  167.        FOR(L1=1;L1<5;L1+=1)
  168.        DRAW(L1*6);
  169.