#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "paulslib.h"
#include "bitmaplib.h"

#define NXY 1026

int main(int argc,char **argv)
{
   int i,j,c1;
   double c;
   double a[NXY+1][NXY+1];
   BITMAP *image,colour,white={65535,65535,65535},black={0,0,0};
   char fname[64];
   FILE *fptr;

   if (argc < 2) {
      fprintf(stderr,"Uasge: %s c\n",argv[0]);
      exit(1);
   }
   c = atof(argv[1]);
   c1 = (c >= 2 ? (int)c : 2);
   for (i=0;i<=NXY;i++)
      for (j=0;j<=NXY;j++)
         a[i][j] = 0;
   a[0][0] = 1;
   a[0][1] = 1;
   a[1][0] = 1;
   a[1][1] = c;

   /* Create the image */
   image = CreateBitmap(NXY,NXY);
   EraseBitmap(image,NXY,NXY,white);

   for (i=2;i<=NXY/2;i++) {
      for (j=1;j<=i;j++) {
         if (j == 1)
            a[i][j-1] = 1;
         a[i][j] = (int)(a[i][j-1] + a[i-1][j]) % c1;

         colour = white;
         if (a[i][j] > 0)
            colour = black;

         if (j <= NXY/2) {
            DrawPixel(image,NXY,NXY,NXY/2+i,NXY/2+j,colour);
            DrawPixel(image,NXY,NXY,NXY/2-i,NXY/2+j,colour);
            DrawPixel(image,NXY,NXY,NXY/2+i,NXY/2-j,colour);
            DrawPixel(image,NXY,NXY,NXY/2-i,NXY/2-j,colour);
         }
         if (i <= NXY/2) {
            DrawPixel(image,NXY,NXY,NXY/2+j,NXY/2+i,colour);
            DrawPixel(image,NXY,NXY,NXY/2+j,NXY/2-i,colour);
            DrawPixel(image,NXY,NXY,NXY/2-j,NXY/2+i,colour);
            DrawPixel(image,NXY,NXY,NXY/2-j,NXY/2-i,colour);
         }
      }
   }

   /* Write the image to a ppm file */
   sprintf(fname,"roger7_%g.ppm",c);
   if ((fptr = fopen(fname,"w")) == NULL) {
      fprintf(stderr,"Unable to open bitmap file\n");
      exit(0);
   }
   WriteBitmap(fptr,image,NXY,NXY,2);
   fclose(fptr);
   DestroyBitmap(image);
}

#include "bitmaplib.c"
