#include <stdio.h>
#include <stdlib.h>		// malloc, free
#include <string.h>		// strlen

#include "substi.h"



// Druh cinnosti
//
enum   {MODE_LIST,		// pouze vypis seznamu dvojic symbol+hodnota
		MODE_RESULT,	// vypis vysledku substituce
		MODE_DIFFER};	// vypis "vstup vs. vysledek" pro porovnani rozdilu



/*
 * SEZNAM DVOJIC "SYMBOL+HODNOTA"
 */

static int cb_list(char const *symp,
				   char const *valp,
				   void       *userdata)
{
	userdata = userdata;

	printf("%-20s  %s\n", symp, valp);
	return(SUBSTI_LIST_CONTINUE);
}



/*
 * PROGRAM
 */

int main(int argc, char *argv[])
{
	unsigned		mode;
	substihndp_t	substip;
	char const		*linep;
	char			linet[80];

	mode = MODE_RESULT;
	while(--argc)
		switch(**++argv)
		{
		case 'd':
			mode = MODE_DIFFER;
			break;

		case 'l':
			mode = MODE_LIST;
		}
	if((substip = substi_initial()) == NULL)
		return(-1);
	while(fgets(linet, sizeof(linet), stdin) != NULL)
	{
		linet[strlen(linet) - 1] = '\0';
		if((linep = substi_operate(substip, linet)) == NULL)
			linep = "<nejde to>";
		switch(mode)
		{
		case MODE_RESULT:
			if(*linep != '\0')
				puts(linep);
			break;

		case MODE_DIFFER:
			printf(">>> \"%s\"\n<<< \"%s\"\n", linet, linep);
		}
	}
	if(mode == MODE_LIST)
		printf("--------\nLIST: %d\n", substi_list(substip, cb_list, NULL));
	substi_leave(substip);
	return(0);
}
