/*
   This file was derived from the libwww code, version 2.15, from CERN.
   A number of modifications have been made by Spyglass.

   eric@spyglass.com
 */

/*                                                   HTParse:  URL parsing in the WWW Library
   HTPARSE

   This module of the WWW library contains code to parse URLs and various related things.
   Implemented by HTParse.c .

 */
#ifndef HTPARSE_H
#define HTPARSE_H

/*

   The following 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


/*

   HTParse:  Parse a URL relative to another URL

   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 which 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

 */

extern char *HTParse(const char *aName, const char *relatedName, int wanted);


/*

   HTStrip: 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.

 */
extern char *HTStrip(char *s);

/*

   HTSimplify: Simplify a UTL

   A URL 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
 */
extern void HTSimplify(char *filename);


/*

   HTEscape:  Encode unacceptable characters in string

   This funtion takes a string containing any sequence of ASCII characters, and returns a
   malloced string containing the same infromation but with all "unacceptable" characters
   represented in the form %xy where X and Y are two hex digits.

 */
extern char *HTEscape(CONST char *str, unsigned char mask, char protect);

/*

   The following are valid mask values. The terms are the BNF names in the URL document.

 */
#define URL_XALPHAS     (unsigned char) 1
#define URL_XPALPHAS    (unsigned char) 2
#define URL_PATH        (unsigned char) 4


/*

   HTUnEscape: Decode %xx escaped characters

   This function takes a pointer to a string in which character smay have been encoded in
   %xy form, where xy is the acsii hex code for character 16x+y. The string is converted
   in place, as it will never grow.

 */
extern char *HTUnEscape(char *str);


#endif /* HTPARSE_H */


/*

   end of HTParse

 */
