
#include	<stdio.h>
#include	<stdlib.h>
#include	<fslib.h>

#include	"flib.h"

static	FFPLST_T	*FfpTop = NULL;

#ifndef	MALLOC
#	define	MALLOC	malloc
#endif
#ifndef	FREE
#	define	FREE	free
#endif

FILE	*FM_fopen(CONST char *fn, CONST char *md)
{
	FFPLST_T	*ffp;
	FILE		*fp;

	fp = FS_fopen(fn,md);

	if ( fp == NULL )
		return (NULL);

	if ( (ffp = MALLOC(sizeof(FFPLST_T))) == NULL )
		return (fp);
	ffp->next = ffp->prev = NULL;
	ffp->fp   = fp;
	if ( *md == 'w' || *md == 'a' )
		ffp->md = 1;
	else
		ffp->md = 0;
	ffp->drv  = ERR;
	if ( FS_setFullPathName( ffp->fn, (char *)fn ) == NORMAL )
		ffp->drv = toupper(ffp->fn[0]) - 'A';
	if ( FfpTop == NULL )
	{
		FfpTop = ffp;
	} else
	{
		ffp->next    = FfpTop;
		FfpTop->prev = ffp;
		FfpTop       = ffp;
	}
	return (fp);
}

int		FM_fclose( FILE *fp )
{
	int			ret;
	FFPLST_T	*ffp = FfpTop;

	while ( ffp )
	{
		if ( ffp->fp == fp )
		{
			if ( ffp->prev )		ffp->prev->next = ffp->next;
			if ( ffp->next )		ffp->next->prev = ffp->prev;
			if ( ffp == FfpTop )	FfpTop = ffp->next;
			FREE( ffp );
			break;
		}
		ffp = ffp->next;
	}
	ret = FS_fclose(fp);
	return (ret);
}

void	FM_all_fclose(void)
{
	while ( FfpTop )
	{
		FFPLST_T	*ffp;
		ffp = FfpTop;
		FM_fclose( ffp->fp );
	}
}

