/*
    ####             #    #     # #
    #   #            #    #       #          The FreeWare C library for
    #   #  ##   ###  #  # #     # ###             RISC OS machines
    #   # #  # #     # #  #     # #  #   ___________________________________
    #   # ####  ###  ##   #     # #  #
    #   # #        # # #  #     # #  #    Please refer to the accompanying
    ####   ### ####  #  # ##### # ###    documentation for conditions of use
    ________________________________________________________________________

    File:    Debug1.c.uniquepipe
    Author:  Julian Smith
    Version: 0.00 (04 Jun 1995)
    Purpose: Provides a set of Debug_ function which send stuff to a unique
             file in a given directory.
*/


#include <stdarg.h>
#include <stdio.h>

#include "Desk.Error.h"
#include "Desk.Debug.h"
#include "Desk.Str.h"

#include "Defs.h"


static char	Desk_debug_filename[ 256] = "";

static Desk_bool	Desk_debug__initialised = Desk_bool_FALSE;



void	Desk_Debug_Initialise( void)
{
Desk_debug__initialised = Desk_bool_TRUE;
sprintf( Desk_debug_filename, "Pipe:$.Desk.%s", Desk_LeafName( tmpnam( NULL)));
}

#define Desk_Debug__EnsureInitialised()	if ( !Desk_debug__initialised)	Desk_Debug_Initialise()


static FILE	*Desk_Debug__OpenPipeFile( void)
{
FILE	*file;
if ( Desk_debug_filename[ 0] == 0)	Desk_Debug_Initialise();
file = fopen( Desk_debug_filename, "a");
if ( !file)	Desk_Error_ReportFatal( 0, "Can't open debugging pipe file '%s'", Desk_debug_filename);
return file;
}

#define Desk_Debug__ClosePipeFile( f)	fclose( f)



int	Desk_Debug_VPrintf( const char *format, va_list va)
	{
	FILE*	f;
	int	i;
	
	Desk_Debug__EnsureInitialised();
	
	f = Desk_Debug__OpenPipeFile();
	Desk_Debug__LineNestingPrefix( f);
	i = vfprintf( f, format, va);
	Desk_Debug__ClosePipeFile( f);
	
	return i;
	}


int	Desk_Debug_Printf( const char *format, ...)
{
va_list	va;
int	i;

va_start(va, format);
i = Desk_Debug_VPrintf( format, va);
va_end(va);

return i;
}



void	Desk_Debug_Print( const char *text)
{
FILE	*f;
f = Desk_Debug__OpenPipeFile();
Desk_Debug__LineNestingPrefix( f);
fputs( text, f);
Desk_Debug__ClosePipeFile( f);
}


