/*
	Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/



/*--------------------------------------------------------------------*\
Pro/TOOLKIT includes
\*--------------------------------------------------------------------*/
#include <ProToolkit.h>

/*--------------------------------------------------------------------*\
Pro/DEVELOP includes
\*--------------------------------------------------------------------*/

/*--------------------------------------------------------------------*\
C System includes
\*--------------------------------------------------------------------*/

/*--------------------------------------------------------------------*\
Application includes
\*--------------------------------------------------------------------*/
#include "PTApplsUnicodeUtils.h"


/*====================================================================*\
    FUNCTION :	PTApplsUnicodeFopen
    PURPOSE  :	Unicode equivalent of fopen. Writes the BOM character to
                the file.
\*====================================================================*/
FILE *PTApplsUnicodeFopen(const char *filename, const char *mode)
{

  FILE *fp = NULL;

  if((strcmp(mode, "r") == 0))
    fp = fopen(filename, mode);


  else if((strcmp(mode,"a") == 0) || (strcmp(mode,"a+") == 0))
    {
      int was_found;

      fp = fopen(filename, "r");

      was_found = (fp != NULL);
      
      if (was_found)
	{
	  fclose (fp);
	  fp = fopen(filename, mode);
	}
     
      else
	{
          fp = fopen(filename, mode);
          PTApplsWriteBOM(fp);
	}
    }

  else if((strcmp(mode,"w") == 0) || (strcmp(mode,"w+") == 0) || (strcmp(mode,"wt") == 0) || (strcmp(mode,"w+t") == 0))
    {
      fp = fopen(filename, mode);
      PTApplsWriteBOM(fp);
    }

  return(fp);
}


/*====================================================================*\
    FUNCTION :	PTApplsWriteBOM
    PURPOSE  :	Writes the BOM character to the file for unicode purposes.
\*====================================================================*/
void PTApplsWriteBOM(FILE *fp)
{
  fputs("\357\273\277", fp);
  fflush(fp);
  return;
}