//****************************
//**** Wichtig Model Small ***
//****************************
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
void p(int N,int O,int x,int y,int A,int B,int C,int D,int f){
int i, P, Q, S, T, E, J, K, L, M;
char c;
 if(O){ P=N>>1;          S=N-P;
    Q=O>>1;          if(Q){T=O-Q;}else T=0;
    J=random(32)+1;K=random(32)+1;
    L=random(32)+1;M=random(32)+1;
    E=(J*A+K*B+L*C+M*D)/(J+K+L+M)+((random(0x7FFF)+1)%(f+1)-(f>>1));
    p(P,Q,x,y,A,K=(A+B)>>1,E,J=(A+D)>>1,f=f>>1);  //Rekursion
    p(S,T,x,y+Q,J,E,M=(C+D)>>1,D,f);              //Rekursion
    p(S,Q,x+=P,y,K,B,L=(B+C)>>1,E,f);             //Rekursion
    p(S,T,x,y+Q,E,L,C,M,f);}                      //Rekursion
  else{ for(i=x;i<N+x;i++){                       //ClusterLinie
    switch(random(4)){
     case 0: c=A;break; case 1: c=B;break;        //"Zufällig" Farbe
     case 2: c=C;break; case 3: c=D;break;}       //"Zufällig" Farbe
     pokeb(0xA000,y*320+i,c);}}}                  //Ausgabe Bildschirm
//**************************************************************************
void palette(char *rgb){                        //Set Palette
asm{MOV AX,DS;MOV ES,AX;MOV DX,rgb;MOV BX,0x1;  //Set Palette
MOV CX,0xFF;MOV AX,0x1012;int 0x10;}}           //Set Palette
//**************************************************************************
//*************************** M A I N **************************************
//**************************************************************************
void main(void){
unsigned char v[512][3];       //PalettenInformation
unsigned char x=0;             //PalettenIndex (von 0..255)
int X,Y;                       //LaufVariablen
unsigned char i=0;
  for(X=0;X<512;X++){v[X][0]=0;v[X][1]=0;v[X][2]=0;} //Palette erstmal Null
  for(i=0;i<64;i++){                                 //Palette berechnen
   v[i    ][0]= v[256    +i][0]=  v[i    ][1]= v[256    +i][1]=
   v[i+64 ][2]= v[256+ 64+i][2]=  v[i+128][0]= v[256+128+i][0]=
   v[i+192][1]= v[256+192+i][1]=         (i<32) ? i+i:126-i-i;}
  asm{mov ax,0x13;int 16;}      //Set Screen 320x200 und 256 Farben
  randomize();palette(v[0]);    //Initialize Palette
  p(319,199,0,0,random(255),random(255),random(255),random(255),200); //BuildScreen
  while(!kbhit()){              //Rotate Palette bis Tatste gedrückt
   palette(v[x++]);             //Set Palette
   while((inport(0x3da)&9)!=9);}//FlickerKontrolle
  asm{mov ax,0x3;int 16;}       //Restore TextMode
}
//**************************************************************************
//**************************** Konjetz *************************************
//************************* Ein Programm ***********************************
//************************* von Dave Sun ***********************************
//**************************************************************************