Metropoli BBS
VIEWER: liferule.c MODE: TEXT (CP437)
/*
  ╔════════════════════════════════════════════════════════════════════════╗
  ║                                                                        ║
  ║       2 State Finite Closed 2-Dimensional Life Cellular Automation     ║
  ║                                                                        ║
  ║                        Life Rule File Maker                            ║
  ║                                                                        ║
  ║                  (c) 1991 Christopher D. Watkins                       ║
  ║                                                                        ║
  ╚════════════════════════════════════════════════════════════════════════╝

  Rule : If an empty cell has exactly three neighbors it will be born. If an
  occupied cell has fewer than two or more than three neighbors it will die.

  Cell Arrangement :             I  J  K
				 L  M  N
				 P  Q  R

*/

#include "stdio.h"
#include "dos.h"
#include "string.h"
#include "defs.h"
#include "globals.h"
#include "mathb.h"

#define State 2
#define MaxState (State-1)
#define Born 1
#define Dead 0

typedef char Name[33];

Name RuleFileName;
FILE *RuleFile;
Word i, j, k;
Word l, m, n;
Word p, q, r;
Byte o;
Byte NumNeighbor;

void main()
{
  clrscr();
  printf("Generating Rule\n");
  strcpy(RuleFileName,"LRULE.CA");
  RuleFile=fopen(RuleFileName, "wb");
  for(i=0; i<=MaxState; i++)
  {
    for(j=0; j<=MaxState; j++)
    {
      for(k=0; k<=MaxState; k++)
      {
	for(l=0; l<=MaxState; l++)
	{
	  for(m=0; m<=MaxState; m++)
	  {
	    for(n=0; n<=MaxState; n++)
	    {
	      for(p=0; p<=MaxState; p++)
	      {
		for(q=0; q<=MaxState; q++)
		{
		  for(r=0; r<=MaxState; r++)
		  {
		    NumNeighbor=0;
		    if(i==Born)
		      ++NumNeighbor;
		    if(j==Born)
		      ++NumNeighbor;
		    if(k==Born)
		      ++NumNeighbor;
		    if(l==Born)
		      ++NumNeighbor;
		    if(n==Born)
		      ++NumNeighbor;
		    if(p==Born)
		      ++NumNeighbor;
		    if(q==Born)
		      ++NumNeighbor;
		    if(r==Born)
		      ++NumNeighbor;
		    if(m==Dead)
		    {
		      if(NumNeighbor==3)
			o=Born;			/*   bring it to life ?  */
		      else
			o=Dead;
		    }				/*  it's a live cell so  */
		    else
		    {
		      if((NumNeighbor<2)||(NumNeighbor>3))
			o=Dead;			/*            kill it ?  */
		      else
			o=Born;
		    }
		    putc(o, RuleFile);
		  }
		}
	      }
	    }
	  }
	}
      }
    }
  }
  fclose(RuleFile);
}
[ RETURN TO DIRECTORY ]