/*******************************************/
/*                                         */
/*  File: chtmldefs.h                      */
/*  Purpose: c2html definition             */
/*                                         */
/*  Author: Sfiligoi Igor                  */
/*                                         */
/*  Created      : 30.01.1997              */
/*  Last modified: 02.04.1997              */
/*                                         */
/*******************************************/

#ifndef CHTMLDEFS_H
#define CHTMLDEFS_H

#include "chtmlidfs.h"

#define strcatmem(dest,src1,src2) 				\
	{ /* concatena le due strighe (con malloc e free) */	\
	 dest = (char *) malloc(strlen(src1)+strlen(src2)+1);	\
	 strcpy(dest,src1);					\
	 strcat(dest,src2);					\
								\
	 free(src1);						\
	 free(src2);						\
	}

#define strcat3mem(dest,src1,src2,src3) 			\
	{ /* concatena le 3 strighe (con malloc e free) */	\
	 dest = (char *) malloc(strlen(src1)+strlen(src2)+strlen(src3)+1);	\
	 strcpy(dest,src1);					\
	 strcat(dest,src2);					\
	 strcat(dest,src3);					\
								\
	 free(src1);						\
	 free(src2);						\
	 free(src3);						\
	}

#define strcat4mem(dest,src1,src2,src3,src4) 			\
	{ /* concatena le 4 strighe (con malloc e free) */	\
	 dest = (char *) malloc(strlen(src1)+strlen(src2)+strlen(src3)+strlen(src4)+1);	\
	 strcpy(dest,src1);					\
	 strcat(dest,src2);					\
	 strcat(dest,src3);					\
	 strcat(dest,src4);					\
								\
	 free(src1);						\
	 free(src2);						\
	 free(src3);						\
	 free(src4);						\
	}

#define strcat5mem(dest,src1,src2,src3,src4,src5)		\
	{ /* concatena le 5 strighe (con malloc e free) */	\
	 dest = (char *) malloc(strlen(src1)+strlen(src2)+strlen(src3)+	\
				strlen(src4)+strlen(src5)+1);	\
	 strcpy(dest,src1);					\
	 strcat(dest,src2);					\
	 strcat(dest,src3);					\
	 strcat(dest,src4);					\
	 strcat(dest,src5);					\
								\
	 free(src1);						\
	 free(src2);						\
	 free(src3);						\
	 free(src4);						\
	 free(src5);						\
	}

#define strcat6mem(dest,src1,src2,src3,src4,src5,src6)		\
	{ /* concatena le 5 strighe (con malloc e free) */	\
	 dest = (char *) malloc(strlen(src1)+strlen(src2)+strlen(src3)+		\
				strlen(src4)+strlen(src5)+strlen(src6)+1);	\
	 strcpy(dest,src1);					\
	 strcat(dest,src2);					\
	 strcat(dest,src3);					\
	 strcat(dest,src4);					\
	 strcat(dest,src5);					\
	 strcat(dest,src6);					\
								\
	 free(src1);						\
	 free(src2);						\
	 free(src3);						\
	 free(src4);						\
	 free(src5);						\
	 free(src6);						\
	}

#define strcat9mem(dest,src1,src2,src3,src4,src5,src6,src7,src8,src9)		\
	{ /* concatena le 5 strighe (con malloc e free) */	\
	 dest = (char *) malloc(strlen(src1)+strlen(src2)+strlen(src3)+		\
				strlen(src4)+strlen(src5)+strlen(src6)+		\
				strlen(src7)+strlen(src8)+strlen(src9)+1);	\
	 strcpy(dest,src1);					\
	 strcat(dest,src2);					\
	 strcat(dest,src3);					\
	 strcat(dest,src4);					\
	 strcat(dest,src5);					\
	 strcat(dest,src6);					\
	 strcat(dest,src7);					\
	 strcat(dest,src8);					\
	 strcat(dest,src9);					\
								\
	 free(src1);						\
	 free(src2);						\
	 free(src3);						\
	 free(src4);						\
	 free(src5);						\
	 free(src6);						\
	 free(src7);						\
	 free(src8);						\
	 free(src9);						\
	}

#define char2str(str,chr)			\
	{ /* transform char to string */	\
	 str = (char *) malloc(2);		\
	 str[0] = chr;				\
	 str[1] = 0;				\
	}

#define stremptymem(dest) 		\
	{				\
	 dest = (char *) malloc(1);	\
	 dest[0] = 0;			\
	}

/* report yacc errors */
void yyerror(char *str);

typedef struct
	{
	 char *idf;	/* identifier */
	 char *succ;	/* string after the identifier */
	} IDFSTR;


extern int Curr_Line;	/* Current Line */
extern int ininclude;	/* 1 iff in an include */
extern int inprecomp;	/* 1 iff in a precompiler */
extern int atbegin;	/* 1 only at the beggining */
extern int doprint;	/* if 1 print in stderr all the input */

extern char *macrourl;	/* file name in which macros are described */
			/* if NULL, no link is established */
extern char *funcurl;	/* file name in which functions without prototype have description*/
			/* if NULL, no link is established */
extern char *protourl;	/* file name in which the prototypes have the implementation or the description */
			/* if NULL, no link is established */

extern void *mainSTable;	/* All the symbols */
extern void *thisSTable;	/* Symbols defined inside the file */

extern char *path;	/* path where to search for includes */

extern char *outdir;    /* directory where to save the html file */
extern char *chidir;    /* directory where to save the chi file */

extern char *finalprog;	/* result of the parse */


#endif /* CHTMLDEFS_H */