/*========================== CONVERSION.C ===========================*/
#include <stdio.h>
int readfile();                          /* test file is testcon.prn */

FILE *inputfileptr;
FILE *outputfileptr;

int i,N,P,M,q;
int *msitc,*dsic;
int **msic;

float *ddata,*dfinal;
float **dmatrix;

char inputfilename[81];
char outputfilename[81];

/*================================ main ==============================*/;
void main()
{
      int j;
      int *lengthsic;

      float sum,den;

      /* ============================ credits ========================= */
      printf("\n");
      printf("\n");
      printf("            Welcome to the SIC --> SITC Conversion Program\n");
      printf("\n");
      printf("                 Software (c) Christos Kostopoulos\n");
      printf("\n");
      printf("                 SIC to SITC Conversion Matrix    \n");
      printf("                 (c) Christopher K. Clague and  Pam Lowry\n");
      printf("\n");
      printf("                 University of Maryland at College Park\n");
      printf("\n");
      printf("                                July 1991\n");
      printf("\n");
      printf("\n");
      printf("\n");

      /* ========================== input data ======================== */

      /* ------------------------- read masterfile -------------------- */

      printf("Enter Drive and Name of Master Conversion Table [i.e. a:convert.prn]:\n");
      printf("\n");
      printf("\n");
      scanf("%s",inputfilename);                         /* convert.prn */

      if( (inputfileptr=fopen(inputfilename,"r"))==NULL )
        {
           printf(  "Unable to open %s.  I quit.\n", inputfilename);
           exit(1);
        }
                                             /* N: length of msitc,msic */
      fscanf(inputfileptr,"%d %d",&N,&P);      /* P: width of msic only */

      msitc = (int *)malloc((unsigned)N*sizeof(int));

      msic  = (int **)malloc((unsigned)N*sizeof(int *));
      for (i=0;i<N;i++) msic[i] = (int *)malloc((unsigned)P*sizeof(int));

      for (i=0;i<N;i++) fscanf(inputfileptr,"%d %d %d %d %d %d %d %d",
                            &msitc[i],&msic[i][0],&msic[i][1],&msic[i][2],
                                      &msic[i][3],&msic[i][4],&msic[i][5],
                                      &msic[i][6]);

      fclose(inputfileptr);

      /* ----------------------2 or 3 or 4 digit sic-------------------- */

      printf("\n");
      printf("What Type of Conversion Do You Wish to Make?\n");
      printf("\n");
      printf("To Convert From FOUR  Digit SIC to FOUR Digit SITC Type:  4\n");
      printf("To Convert From THREE Digit SIC to FOUR Digit SITC Type:  3\n");
      printf("To Convert From TWO   Digit SIC to FOUR Digit SITC Type:  2\n");
      printf("\n");
      scanf("%d",&lengthsic);


/*      for(i=0;i<N;i++) printf("%d %d %d %d %d %d %d\n",              */
/*		      msic[i][0], msic[i][1], msic[i][2], msic[i][3],  */
/*		      msic[i][4], msic[i][5], msic[i][6])              */

      if(lengthsic==2)
	{
	for(i=0;i<N;i++)
          {
          for(j=0;j<P;j++)
            {
            	    if(msic[i][j]!=0)
	      {
	      printf("%d\n",msic[i][j]);
	      msic[i][j]=msic[i][j]/100;
	      printf("%d\n",msic[i][j]);
	      }
            }
          }
        }
      if(lengthsic==3)
        {
        for(i=0;i<N;i++)
          {
          for(j=0;j<P;j++)
            {
	    if(msic[i][j]!=0) msic[i][j]=msic[i][j]/10;
            }
          }
        }

/*      for(i=0;i<N;i++) printf("%d %d %d %d %d %d %d\n",       */
/*	      msic[i][0], msic[i][1], msic[i][2], msic[i][3],   */
/*	      msic[i][4], msic[i][5], msic[i][6])               */


      /* -----------------------read data series----------------------- */
      readfile();

      /* =====================supplementary vectors==================== */
      dmatrix  = (float **)malloc((unsigned)N*sizeof(float *));
      for(i=0;i<N;i++) dmatrix[i]=(float*)malloc((unsigned)P*sizeof(float));

      for (i=0;i<N;i++)
        {
	for (j=0;j<P;j++) dmatrix[i][j] = -9999.0;
        }

      dfinal = (float *)malloc((unsigned)N*sizeof(float));

      for (i=0;i<N;i++) dfinal[i] = -9999.0;

      /*============================core===============================*/
      for(q=0;q<M;q++)                    /* for every element of dsic */
        {
        for(i=0;i<N;i++)
          {
          for(j=0;j<P;j++)
            {
            if(dsic[q] == msic[i][j]) dmatrix[i][j]=ddata[q];
            }
          }
        }

      for(i=0;i<N;i++)
        {
        sum=0.0;
        den=0.0;
        for(j=0;j<P;j++)
          {
	  if(dmatrix[i][j] != -9999.0)
            {
            den=den+1;
            sum = sum + dmatrix[i][j];
            }
          }
        if(den!=0.0) dfinal[i]=sum/den;
        }

      printf("Type in the Name of the Output File.\n");
      scanf("%s",outputfilename);

      if((outputfileptr=fopen(outputfilename,"w"))==NULL)
      {
      printf("You Messed Up Dude!!!  I Can't Open the File\n");
      exit(1);
      }

      for(i=0;i<N;i++)
        {
	fprintf(outputfileptr,"%d %f\n",msitc[i],dfinal[i]);
        }
      free(msitc);
}
/*===============================functions==============================*/;
int readfile()
{
      printf("Type Name of File to be Converted:\n");
      scanf("%s",inputfilename);

      if((inputfileptr=fopen(inputfilename,"r"))==NULL)
        {
        printf( "Unable to open %s.  I quit.\n", inputfilename);
        exit(1);
        }

       /* M: length of dsic, ddata */;
      fscanf(inputfileptr,"%d",&M);

      dsic   = (int *)malloc((unsigned)M*sizeof(int));

      ddata  = (float *)malloc((unsigned)M*sizeof(float));
      for(i=0;i<M;i++) fscanf(inputfileptr,"%d %f",&dsic[i],&ddata[i]);

      fclose(inputfileptr);
}
/*====================================fin==============================*/;



