#include <time.h>
#include <stdio.h>
#include <math.h>
#include <exec/types.h>
#include <exec/memory.h>
#include <intuition/intuition.h> 

#define	MAXPRC	100000

extern compi(),displ();

long  prec, flen, wlen, llen, alen ;

APTR temp = NULL, sum = NULL, pi = NULL;

struct IntuitionBase *IntuitionBase;  /* IntuiLib-Pointer */

clear()
{
	if (temp != NULL) FreeMem(temp,flen);
	if (sum  != NULL) FreeMem(sum,flen);
	if (pi   != NULL) FreeMem(pi,flen);
        if ( IntuitionBase != NULL) CloseLibrary( IntuitionBase );
}

compute(p,t,s,l)
APTR p,t,s;
long l;
{
	compi();
}

display(p,l,a)
APTR p;
long l,a;
{
        displ();
}


main(argc,argv)
int argc;
char *argv[];
{
	long ssec,smic,esec,emic;      /* fuer CurrentTime() */

	IntuitionBase = (struct IntuitionBase *)
                       OpenLibrary("intuition.library",0);
        if (IntuitionBase == NULL)
        {
            printf("keine Intuition hier !\n");
            exit();
        } 

	if (argc == 2) {
		sscanf(argv[1],"%ld",&prec);
	} else {
		printf("Format: PIX [Genauigkeit]\n");
		exit();
	}

	if (prec > MAXPRC)	{
		printf("Maximal 100.000 Nachkommastellen !\n");
		exit();
	}


	flen = prec/log10(256.0) + 1;
	wlen = (flen +1)/2;
	llen = (wlen+1)/2 + 1;    /* # Langworte */
	wlen = 2 * llen;          /* # Worte */
	flen = 2 * wlen;          /* # Bytes */ 
        alen = ((prec+4)/4);      /* Ausagbelaenge */

	/* get memory */
	temp = (APTR)AllocMem(flen, MEMF_CLEAR);
	sum  = (APTR)AllocMem(flen, MEMF_CLEAR);
	pi   = (APTR)AllocMem(flen, MEMF_CLEAR);
	if ( (temp == NULL) || (sum == NULL) || (pi == NULL) )
	{
		printf("nicht genügend Speicher vorhanden !\n");
		clear();
		exit();
	}
	
	/* compute pi */
        CurrentTime( &ssec,&smic ); 
	compute(pi,temp,sum,llen);

	/* print pi */
	
	display(pi,llen,alen);
        CurrentTime( &esec,&emic );

  	/* berechne benoetigte Zeit */
        esec -= ssec;
        emic -= smic;
        if ( emic < 0 )
        {
            emic += 1000000;
            esec--;
        }
        smic  = esec/3600;
        esec -= 3600 * smic;
        ssec  = esec/60;
        esec -= 60 * ssec;
        printf("benötigte Zeit:  %02ldh:%02ldm:%02ld,%0.2lds\n",
                             smic,ssec,esec,emic);


	printf("%d Stellen von pi sind gesichert \n",prec);

	/* free memory */
	clear();
}
