/* Index access routines */ 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "utils.h"
#include "hip_i.h"
#include "ihipi.h" 

int load_idx_hip_i (char* ifile,idx_hip_i* index) 
{
/* Routine to load an index from a file. The structure for the index must
 * already exist as must the file of course
 */
   idx_hip_i idx;
   FILE *fp;
   int i;

   if ( (fp=fopen(ifile,"r"))==NULL)
   {
	fprintf(stderr,"load_idx_hip_i unable to open %s \n",ifile);
	return (-1);
   }
   if (index == NULL) 
   {
      fprintf (stderr,"load_idx_hip_i NULL pointer for index\n");
      return (-1);
   }
   /*printf("Loading index idx_hip_i from %s.. ",ifile);*/
   for (i=0;i<idx_hip_i_entries;i++)
   {
	if ( (getnext_idx_hip_i (fp,&index[i])) != 0)
   	{
	   fprintf(stderr,"load_idx_hip_i problem with entry %d \n",i);
	   break;
	}
   /*     if  ( (i % 5000) == 0) printf("#");*/
   }
   if ( i < idx_hip_i_entries) 
   {
	fprintf(stderr,"Premature end of index file \n");
   	return -1;
   }
   /* printf(" done \n"); */
   return 0;
} /* End of load_idx_hip_i*/

int getnext_idx_hip_i (FILE* fp, idx_hip_i* entry)
{
   char buffer[idx_hip_i_REC_LEN + 2];
   if (fgets((char *)&buffer,idx_hip_i_REC_LEN+1,fp))
   { 
	strAsINT (buffer,entry);
	return 0;
   }
   else
	return -1;
} /* End of getnext_idx_hip_i */


long find_idx_hip_i (idx_hip_i* key)
{
   static int init=0;
   static idx_hip_i index[idx_hip_i_entries];
   
   if (init == 0)
   {
        if (load_idx_hip_i("hip_i.idx",(idx_hip_i*)&index) !=0)
             return -1;
        init=1;
   }

 /* Simlplest case of all - full index !! */
   if ( key->value >= 1 && key->value <= (idx_hip_i_entries +1) )
      return (index[key->value -1].value); 
   else
      return (-1);
} /* End of find_idx_hip_i */
