/* Loads either the standard or extended font */

#include "plplot.h"
#include <stdio.h>

short int *fntlkup;
short int *fntindx;
short int *fntbffr;
short int numberfonts, numberchars;
short int indxleng;

static short fontloaded=0;

void plfontld(fnt)
PLINT fnt;
{
   static short charset;
   short bffrleng;
   FILE *fontfile;
   FILE *indxfile;
   FILE *lkupfile;
   PLINT level;

   glev(&level);
   if (level < 1)  plexit("Please call plstar before calling plfontld.");

   if(fontloaded) {
      if(charset == fnt) return;
      free((VOID *)fntindx);
      free((VOID *)fntbffr);
      free((VOID *)fntlkup);
   }

   fontloaded = 1;
   charset = fnt;

   if(fnt)
      fontfile = fopen(XSTRKFONT,"r");
   else
      fontfile = fopen(SSTRKFONT,"r");
   if(!fontfile)
      plexit("Error opening font file.\n");
   fread((char *)&bffrleng,sizeof(short),1,fontfile);
   fntbffr = (short *)malloc(bffrleng*sizeof(short));
   if(!fntbffr)
      plexit("Out of memory while allocating font buffer.\n");
   fread((char *)fntbffr,sizeof(short),bffrleng,fontfile);
   fclose(fontfile);

   if(fnt)
     indxfile = fopen(XFONTINDX,"r");
   else
     indxfile = fopen(SFONTINDX,"r");
   if(!indxfile)
      plexit("Error opening font file.\n");
   fread((char *)&indxleng,sizeof(short),1,indxfile);
   fntindx = (short int *)malloc(indxleng*sizeof(short int));
   if(!fntindx)
      plexit("Out of memory while allocating font buffer.\n");
   fread((char *)fntindx,sizeof(short int),indxleng,indxfile);
   fclose(indxfile);

   if(fnt)
      lkupfile = fopen(XFONTLKUP,"r");
   else
      lkupfile = fopen(SFONTLKUP,"r");
   if(!lkupfile)
      plexit("Error opening font file.\n");
   fread((char *)&bffrleng,sizeof(short),1,lkupfile);
   numberfonts = bffrleng/256;
   numberchars = bffrleng & 0xff;
   bffrleng = numberfonts*numberchars;
   fntlkup = (short int *)malloc(bffrleng*sizeof(short int));
   if(!fntlkup)
      plexit("Out of memory while allocating font buffer.\n");
   fread((char *)fntlkup,sizeof(short int),bffrleng,lkupfile);
   fclose(lkupfile);
}

void plfontrel()
{
   if(fontloaded) {
      free((VOID *)fntindx);
      free((VOID *)fntbffr);
      free((VOID *)fntlkup);
      fontloaded=0;
   }
}

