/*		Parse HyperText Document Address		HTParse.h
**		================================
*/
/*	These are flag bits which may be ORed together to form a number to give
**	the 'wanted' argument to HTParse.
*/
#define PARSE_ACCESS		16
#define PARSE_HOST		 8
#define PARSE_PATH		 4
#define PARSE_ANCHOR		 2
#define PARSE_PUNCTUATION	 1
#define PARSE_ALL		31

/*	Parse a Name relative to another name
**	-------------------------------------
**
**	This returns those parts of a name which are given (and requested)
**	substituting bits from the related name where necessary.
**
** On entry,
**	aName		A filename given
**	relatedName	A name relative to ehich aName is to be parsed
**      wanted          A mask for the bits which are wanted.
**
** On exit,
**	returns		A pointer to a malloc'd string which MUST BE FREED
*/
#ifdef __STDC__
extern char * HTParse(const char * aName, const char * relatedName, int wanted);
#else
extern char * HTParse();
#endif

/*	Strip white space off a string
**	------------------------------
**
** On exit,
**	Return value points to first non-white character, or to 0 if none.
**	All trailing white space is OVERWRITTEN with zero.
*/
#ifdef __STDC__
extern char * HTStrip(char * s);
#else
extern char * HTStrip();
#endif

/*	        Simplify a filename
**		-------------------
**
**	A unix-style file is allowed to contain the seqeunce xxx/../ which
**	may be replaced by "" , and the seqeunce "/./" which may be replaced
**	by "/".
**	Simplification helps us recognize duplicate filenames. It doesn't deal
**	with soft links, though.
**	The new (shorter) filename overwrites the old.
**
**	Thus, 	/etc/junk/../fred 	becomes	/etc/fred
**		/etc/junk/./fred	becomes	/etc/junk/fred
*/
#ifdef __STDC__
extern void HTSimplify(char * filename);
#else
extern void HTSimplify();
#endif

/*		Make Relative Name
**		------------------
**
**	This function creates and returns a string which gives an expression of
**	one address as related to another. Where there is no relation, an
**	absolute address is retured.
**
**  On entry,
**	Both names must be absolute, fully qualified names of nodes
**	(no anchor bits)
**
**  On exit,
**	The return result points to a newly allocated name which, if parsed
**	by HTParse relative to relatedName, will yield aName. The caller is
**	responsible for freeing the resulting name later.
**
*/
#ifdef __STDC__
extern char * HTRelative(const char * aName, const char *relatedName);
#else
extern char * HTRelative();
#endif
