/*************************************************************************/
/* Autor      : RTA                                                      */
/* Computer   : Amiga                                                    */
/* Sprache    : Ansi C                                                   */
/* Compiler   : SAS C-Compiler Version 5.1a                              */
/* Dateiname  : readfile.c                                               */
/* Projekt    : OnlineHelp                                               */
/* Erstellt am: 24 Aug 1991,14:8                                         */
/* Letzte Veränderung: 27 Aug 1991 von RTA                               */
/* Es wird das index Flag zurück gesetz, falls es global auf TRUE        */
/* gesetzt worden ist.                                                   */
/*************************************************************************/

#include "online.h"

/***************************************************************************/
/* Liest die Datei <fname> in den Puffer ein und gibt diesen zurück        */
/***************************************************************************/
BYTE *readfile(BYTE *fname)
{
   LONG groesse;
   FILE *input;
   BYTE *indexname,*text;

	if(!fname)return(NULL);

   if(!(indexname=(BYTE *)calloc(strlen(fname)+strlen(".index")+1,BYTE_LEN)))
      {
      SimpleRequest("%s",errortext.nomem);
      return(NULL);
      }
   sprintf(indexname,"%s.index",fname);
   if(index)
         {
          if(!makeindex(fname,indexname)) {free(indexname);return(NULL);}
          else index=FALSE;
          if(!(input=fopen(indexname,"r")))
            {
            SimpleRequest("%s",errortext.loaderror);
            free(indexname);
            return(NULL);
            }
         }
   else
         {
         if(!(input=fopen(indexname,"r")))
             {
             if(!makeindex(fname,indexname)) {free(indexname);return(NULL);}
             else index=FALSE;
             if(!(input=fopen(indexname,"r")))
                  {
                  SimpleRequest("%s",errortext.loaderror);
                  free(indexname);
                  return(NULL);
                  }
             }
         }

   if (!(text=(BYTE *)calloc(strlen(REV)+1,BYTE_LEN)))
      {
      SimpleRequest("%s",errortext.nomem);
      fclose(input);
      free(indexname);
      return(NULL);
      }

   fgets(text,strlen(REV),input);
   text[strlen(REV)]='\0';
   if(strcmp(REV,text))
      {
      fclose(input);
      if(!makeindex(fname,indexname)) {free(indexname);return(NULL);}
      if(!(input=fopen(indexname,"r")))
            {
            SimpleRequest("%s",errortext.loaderror);
            free(indexname);
            free(text);
            return(NULL);
            }
      }
   free(text);

   groesse=filelength(indexname);
   if (!(text=(BYTE *)calloc(groesse+2,BYTE_LEN)))
      {
      SimpleRequest("%s",errortext.nomem);
      fclose(input);
      free(indexname);
      return(NULL);
      }

  free(indexname);
  fread(text,groesse,1,input);
  fclose(input);
  return(text);
}
