/*** ERROR.c ***/  /***  ERRORS: 761 ***/

#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#ifndef __TURBOC__ /** standard prototypes **/
	int  fprintf(const FILE*,const char*,...);
	int  printf(const char*,...);
	int  _flsbuf(unsigned char,FILE*);
	int  fwrite(void*,int,int,FILE*);
	int  fclose(FILE*);
	void exit(int);
#endif
#include "Algol.h"
#include "init.h"

void dump(i) int i;  /* dumps all the information into "Algol.dump" */
{FILE *dumpfile;
	signal(SIGINT,SIG_IGN);
	dumpfile=fopen(dump_file,"wb");
	if(dumpfile==NULL){
	    fprintf(stderr,"cannot open file %s\n",dump_file); return;
	}
	fprintf(dumpfile,"\n%d %d %d %d %d %d %d %d %d\n",
		i,P,PX,Z,J,JGLOB, MORF, PLAB, FS);
	fprintf(dumpfile,"\n%d %d %d %d %d %d\n",
		init_A,max_A,max_X,max_PX,max_IND,max_DN);
	putc(0,dumpfile);
	fwrite(&X[1],sizeof(short int),PX,dumpfile);
	fwrite(&A[1],sizeof(short int),max_A,dumpfile);
	fwrite(&B[1],sizeof(      int),max_A,dumpfile);
	fwrite(&C[1],sizeof(      int),max_A,dumpfile);
	fwrite(&D[1],sizeof(short int),max_A,dumpfile);
	fwrite(&LIND[1],sizeof(short int),J,dumpfile);
	fwrite(&VIND[1],sizeof(short int),J,dumpfile);
	fwrite(&DN[1],sizeof(int),max_DN+1,dumpfile);
	fclose(dumpfile);
}

void ERROR(i) int i;
{ printf("\n*** ERROR %d.%d *** at %d\n",i/10,i%10,P); dump(i); exit(7);}

void user_interrupt()
{ dump(0); exit(2);}

void float_ERROR()
{ ERROR(761);}

void set_signals()
{ signal(SIGINT,user_interrupt); signal(SIGFPE,float_ERROR);}

void reset_signals()
{ signal(SIGINT,SIG_IGN);}

