/***********************************************************
	append.c -- append to archive
***********************************************************/
#include "lharc.h"
#include "intrface.h"

#define MAX_INDICATOR_COUNT	64
long		indicator_count;
long		indicator_threshold;

extern int quiet;
extern int compress_method;
extern long int reading_size;
extern unsigned short dicbit;

struct interfacing interface;

int encode_lzhuf(FILE *infp, FILE *outfp, long size, long *original_size_var, long *packed_size_var, char *name, char *hdr_method)
{
	static int method = -1;

	if(method < 0)
  {
		method = compress_method;
		if(method > 0) method = encode_alloc(method);
	}

	interface.method = method;

	if(interface.method > 0)
  {
		interface.infile = infp;
		interface.outfile = outfp;
		interface.original = size;
		start_indicator (name, size, "Freezing",1<<dicbit);
		encode(&interface);
		*packed_size_var = interface.packed;
		*original_size_var = interface.original;
	}
  else
  {
	  copyfile(infp, outfp, size, 1);
	  *packed_size_var = *original_size_var = size;
	}
	bcopy("-lh -", hdr_method, 5);
	hdr_method[3] = interface.method + '0';

	finish_indicator2 (name, "Frozen", (int)((*packed_size_var * 100L) / *original_size_var ));
	return crc;
}

void start_indicator(char *name, long size, char *msg, long def_indicator_threshold)
{
	long	i;
	int	m;

	if(quiet) return;

	m = MAX_INDICATOR_COUNT - strlen (name);
	if(m < 0)	m = 3;		/* (^_^) */
	printf ("\r%s\t- %s :  ", name, msg);

	indicator_threshold = 0;
//((size+(m*def_indicator_threshold-1))(m*def_indicator_threshold)*def_indicator_threshold);

	if(indicator_threshold)
		{
		i = ((size + (indicator_threshold - 1)) / indicator_threshold);
	} else {
		i = 0;
		}

	while(i--) putchar('.');
	indicator_count = 0;
	printf("\r%s\t- %s :  ", name, msg);
	fflush(stdout);
	reading_size = 0L;
}

void finish_indicator2(char *name, char *msg, int pcnt)
{
	if(quiet) return;

	if(pcnt > 100) pcnt = 100;	/* (^_^) */
	printf("\r%s\t- %s(%d%%)\n", name, msg, pcnt);
	fflush(stdout);
}

void finish_indicator(char *name, char *msg)
{
	if(quiet) return;

	printf("\r%s\t- %s\n", name, msg);
	fflush(stdout);
}
